.title SETID ; Print time and date/PR .inclu "B:GLOBAL" ahdgmt = 1 ; We're 1 hour ahead GMT sect CODE proc oSETID ; Routine for "Se tiden" var hundr, word var second, word var minute, word var hour, word var month, word var day, word var year, word var newday, word var newmin, word var newsec, word var phasof, word .enabl lsb begin push .date ; Get timing info mov #442+5, r4 ; Pointer to data area movb (r4), r0 ; Get tics until second neg r0 add #50., r0 ; Convert to tics since second asl r0 ; Convert to 1/100 secs. mov r0, hundr(r5) ; Save 1/100 of a second movb -(r4), r0 ; Get seconds to next minute neg r0 add #60., r0 ; Convert to seconds mov r0, second(r5) ; Save seconds mov #24.*60., r1 sub -(r4), r1 ; Calculate minute of day clr r0 div #60., r0 ; Extract hour and minute in hour mov r1, minute(r5) ; Save minute mov r0, hour(r5) ; Save hour mov -(r4), r1 ; Get year and day of year clr r0 div #1000., r0 ; Extract year add #1970., r0 ; Add offset to internal start year mov r0, year(r5) ; Save it mov r1, newday(r5) ; Save it for POM bit #3, r0 ; Leap year ? beq 1$ ; Yes, special case cmp #31.+28., r1 ; No, month > february ? bge 2$ ; No, 'nothing' special inc r1 ; Add two to day of year 1$: cmp #31.+29., r1 ; No, month > february ? bge 2$ ; No inc r1 ; Add one to day of year 2$: mul #7, r1 ; Calculate month number add #7*30., r1 clr r0 div #7*30.+4, r0 mov r0, month(r5) ; Got it, save it clr r0 div #7, r0 ; Get day of month inc r0 ; First day is 1 mov r0, day(r5) ; Save it mov (r4), r1 ; Get year and day of year mov r1, r3 ; Copy it clr r2 div #1000., r2 ; Get year A.R. (After RSTS/E) in r3 mov r2, r3 mov r3, r0 ; Copy year A.R. mul #365., r3 ; Days A.R. inc r0 asr r0 ; Add 1 to r0 and divide it by 4 asr r0 add r0, r3 ; Add leap days to days A.R. clr r0 div #1000., r0 ; Get days this year add r1, r3 ; r3 is now days A.R. add #2, r3 ; 1-jan-70 was a Thursday ??? clr r2 div #7, r2 ; Get weekday (in r3) asl r3 ; Write Weekday write 10$(r3) write #300$ push clr r0 ; No format mov day(r5), r1 ; Write date jsr pc, deco16 mov #400*':+3, tmpstr ; Write ":e" or ":a" mov #40*400+'e, tmpstr+2 ; Write "e " mov day(r5), r1 clr r0 div #10., r0 tst r1 beq 3$ cmp r1, #2 bgt 3$ cmp r0, #1 beq 3$ movb #'a, tmpstr+2 3$: pop write #tmpstr mov month(r5), r0 ; Write month dec r0 asl r0 write 100$(r0) movb #1, tmpstr+2 write #tmpstr+2 clr r0 mov year(r5), r1 ; Write year jsr pc, deco16 write #310$ ; Write " Klockan " mov hour(r5), r1 ; Write Hours mov #40*400+1, tmpstr jsr pc, 4$ mov #':*400+1, tmpstr+2 write #tmpstr+2 movb #'0, tmpstr+1 mov minute(r5), r1 ; Write minutes jsr pc, 4$ movb #40, tmpstr+1 write #tmpstr movb #'0, tmpstr+1 mov second(r5), r1 ; Write seconds jsr pc, 4$ movb #'., tmpstr+3 write #tmpstr+2 mov hundr(r5), r1 ; Write hundreds of seconds jsr pc, 4$ .rem % write #320$ ; Write " M}nfas " sub #1981., year(r5) sub #3+ahdGMT, hour(r5) add #3482., second(r5) ; Hacked constant mov newday(r5), day(r5) 1010$: cmp year(r5), #4 blt 1020$ sub #4, year(r5) add #14., day(r5) add #103., second(r5) br 1010$ 1020$: mov year(r5), r1 mul #365., r1 add day(r5), r1 mov second(r5), r3 clr r2 div #60., r2 mov r3, newsec(r5) mov hour(r5), r3 mul #60., r3 add r3, r2 add minute(r5), r2 mov #5, phasof(r5) 1030$: ;@@@@@ % call PCR2LF ; Write2Ln pop ; Return ret 4$: mov #200+2, r0 jsr pc, deco16 rts pc sect TEXTS, d 10$: .word 20$, 30$, 40$, 50$, 60$, 70$, 80$ 100$: .word 110$,120$,130$,140$,150$,160$,170$,180$,190$,200$,210$,220$ 20$: .ascii <3>"M}n" 30$: .ascii <3>"Tis" 40$: .ascii <3>"Ons" 50$: .ascii <4>"Tors" 60$: .ascii <3>"Fre" 70$: .ascii <3>"L|r" 80$: .ascii <3>"S|n" 110$: .ascii <7>"Januari" 120$: .ascii <10>"Februari" 130$: .ascii <4>"Mars" 140$: .ascii <5>"April" 150$: .ascii <3>"Maj" 160$: .ascii <4>"Juni" 170$: .ascii <4>"Juli" 180$: .ascii <7>"Augusti" 190$: .ascii <11>"September" 200$: .ascii <7>"Oktober" 210$: .ascii <10>"November" 220$: .ascii <10>"December" 300$: .ascii <12>"dagen den " 310$: .ascii <13>" Klockan " ;320$: .ascii <12>" M}nfas " .odd 330$: .ascii <2>"XX" 340$: .ascii "NMFKFMSK" .even .dsabl lsb .end