.include "cons.s11" .include "clk.s11" . = 200 jmp start . = 220 jmp printdiff . = 4000 .align 8. ;@200g ;17.4294349587 [675403305.017917-675403288.635626] 32 ;18.348600 [675403325.041846-675403306.693246] 32 time1: .quad 0x2841d6180009b2ea ; .space 8. time2: .quad 0x2841d629000045fd ; .space 8. timed: .space 8. .align 4. sus: .long 1000000. . = 1000 stacktop: start: mov #stacktop,sp jsr pc,crlf mainloop: mov #time1,r0 jsr pc,gettime mov #32.,r1 mov r1,-(sp) timeloop: clr r0 sob r0,. sob r1,timeloop mov #time2,r0 jsr pc,gettime jsr pc,subtime jsr pc,printtimes mov #' ,r0 jsr pc,putc mov (sp)+,r2 clr -(sp) mov r2,-(sp) mov #1,-(sp) jsr pc,print_10 jsr pc,crlf br mainloop putc: bit #cons_ocsr_rdy,@#cons_ocsr beq putc movb r0,@#cons_obuf rts pc crlf: mov r0,-(sp) mov #13.,r0 jsr pc,putc mov #10.,r0 jsr pc,putc mov (sp)+,r0 rts pc gettime: mov r0,-(sp) clr @#clk_usec_l mov @#clk_usec_l,(r0)+ mov @#clk_usec_h,(r0)+ mov @#clk_sec_l,(r0)+ mov @#clk_sec_h,(r0)+ mov (sp)+,r0 rts pc div_32_by_8: ; on entry: TOS is return pc, TOS+2 divisor, TOS+4 dividend low, TOS+6 dividend high clr r2 mov 6(sp),r3 div 2(sp),r2 mov r2,r5 clr r4 ash #8.,r3 movb 5(sp),r0 bic #~0xff,r0 bis r0,r3 clr r2 div 2(sp),r2 ashc #8.,r4 bis r2,r5 ash #8.,r3 movb 4(sp),r0 bic #~0xff,r0 bis r0,r3 clr r2 div 2(sp),r2 ashc #8.,r4 bis r2,r5 mov r3,2(sp) mov r5,4(sp) mov r4,6(sp) rts pc print_10: ; on entry: TOS is return pc, TOS+2 min # digits, TOS+4 number low, TOS+6 number high cmp 2(sp),#1 bgt p10_hard tst 6(sp) bne p10_hard mov 4(sp),r0 cmp r0,#10. bhis p10_hard bne p10_put tst 2(sp) bgt p10_put rts pc p10_put: add #'0,r0 jsr pc,putc rts pc p10_hard: sub #10,sp mov 16(sp),4(sp) mov 14(sp),2(sp) mov #10.,(sp) jsr pc,div_32_by_8 mov (sp),6(sp) mov 12(sp),r0 dec r0 mov r0,(sp) jsr pc,print_10 add #6,sp mov (sp)+,r0 br p10_put printtime: mov r0,-(sp) mov 6(r0),-(sp) mov 4(r0),-(sp) mov #1.,-(sp) jsr pc,print_10 mov #'.,r0 jsr pc,putc mov 6(sp),r0 mov 2(r0),4(sp) mov (r0),2(sp) mov #6,(sp) jsr pc,print_10 add #6,sp mov (sp)+,r0 rts pc printtimes: mov #timed,r0 jsr pc,printtime mov #' ,r0 jsr pc,putc mov #'[,r0 jsr pc,putc mov #time2,r0 jsr pc,printtime mov #'-,r0 jsr pc,putc mov #time1,r0 jsr pc,printtime mov #'],r0 jsr pc,putc rts pc subtime: mov #time1,r0 mov #time2,r1 mov #timed,r2 mov 4(r1),r3 sub 4(r0),r3 mov r3,4(r2) mov 6(r1),r3 sbc r3 sub 6(r0),r3 mov r3,6(r2) mov (r1),r3 sub (r0),r3 mov r3,(r2) mov 2(r1),r3 sbc r3 sub 2(r0),r3 mov r3,2(r2) bge usec_ok mov #sus,r4 add (r4),(r2) adc 2(r2) add 2(r4),2(r2) sub #1,4(r2) ; not dec - doesn't set c! sbc 6(r2) usec_ok:rts pc . = 3000 printdiff: mov #stacktop,sp jsr pc,crlf jsr pc,subtime jsr pc,printtimes jsr pc,crlf halt