\ 2006-08-16 EW adv2_1.fs
Variable newtimer
Variable lastsec
Variable tickflag
Variable tick
Variable secflag
Variable sec
Variable minflag
Variable min
500 Constant cycles.tick \ timerC Zykl./Tick
2   Constant ticks.sec   \ Ticks/Sekunde
: tickover? ( -- ) newtimer @ timer @ -  0< ;
: timeup ( -- )
  cycles.tick newtimer +!
  1 tickflag !                  \ tick over!
  1 tick +!
  tick @ ticks.sec >= IF
    0 tick !
    1 secflag !                 \ sec over!
    1 sec +!
  ENDIF
  sec @ 60 >= IF
    0 sec !
    1 minflag !                 \ min over!
    1 min +!
  ENDIF
  min @ 60 >= IF
    0 min !
  ENDIF
;
: led0 ( -- ) 3 port1 bclr ;
: led1 ( -- ) 3 port1 bset ;
: job.tick
  tick @ $01 and IF led0 ELSE led1 ENDIF
;
: job.sec
  timer @ dup lastsec @ - swap dup lastsec !
  sec @ min @ 
  cr . . . .
;
: job.min
  cr ." running minute job ..."
;
: init-loop ( -- )
  cr ." min sec timer timer-lastsec"
  timer @ cycles.tick + newtimer !
;
: run
  init-loop
  BEGIN
    tickover?  IF timeup ENDIF
   tickflag @ IF job.tick 0 tickflag ! ENDIF
    secflag @ IF job.sec  0 secflag !  ENDIF
    minflag @ IF job.min  0 minflag !  ENDIF
  key? UNTIL
;