gameduino/j1/firmware/clock.fs

91 lines
1.8 KiB
Forth

( Clock JCB 10:54 11/17/10)
variable seconds
variable minutes
variable hours
variable days
variable months
variable years
variable weekday
: show2 ( a -- ) @ s>d <# # # #> type ;
: setdate ( ud -- )
[ -8 3600 * ] literal s>d d+
d# 1 d# 60 m*/mod seconds !
d# 1 d# 60 m*/mod minutes !
d# 1 d# 24 m*/mod hours !
d# 59. d- \ Days since Mar 1 1900
2dup d# 1 d# 7 m*/mod weekday ! 2drop
d# 365 um/mod ( days years )
dup d# 1900 + years !
d# 4 / 1- - \ subtract leaps ( daynum 0-365 )
dup d# 5 * d# 308 + d# 153 / d# 2 - months !
months @ d# 4 + d# 153 d# 5 */ - d# 122 + days !
home
'emit @ >r
['] vga-bigemit 'emit !
s" ThuFriSatSunMonTueWed" drop
weekday @ d# 3 * + d# 3 type cr
s" MarAprMayJunJulAugSepOctNovDecJanFeb" drop
months @ d# 3 * + d# 3 type
space days @ d# 0 .r cr
years @ . cr
true if
hours show2
minutes show2
seconds show2
home
then
r> 'emit !
;
: setdelay ( ud -- )
'emit @ >r
['] vga-emit 'emit !
d# 32 d# 0 vga-at-xy
s" ntp " type <# # # # [char] . hold #s #> type
s" ms " type
r> 'emit !
;
include ntp.fs
2variable ntp-alarm
: clock-main
vga-page
d# 1000000. ntp-alarm setalarm
begin
begin
mac-fullness
while
arp-handler
OFFSET_ETH_TYPE packet@ h# 800 =
if
d# 2 OFFSET_IP_DSTIP mac-inoffset mac@n net-my-ip d=
if
icmp-handler
then
loader-handler
ntp-handler
then
depth if .s cr then
mac-consume
repeat
ntp-alarm isalarm if
ntp-request
d# 1000000. ntp-alarm setalarm
then
next?
until
;