; Topnotch Stopwatch source code ; ; Reference information provided by Dan Englender ; Program written by Michael Vincent ; ; Looking back at this now (March 19th, 2003), I can't really understand what I did. ; I'm usually not this bad at naming stuff, really! I just have these brief insane moments... ; ; .nolist #include "asm.inc" .list .org $9D93 second = $9872 minute = $9873 hour = $9874 adjust1 = $9875 adjust2 = $9876 subsecond = $9877 dispsubsec = $9878 adjust1max = 252 adjust2max = 9 .db $BB,$6D in a,(02h) and 80h ret z ld a,1 out (20h),a bcall(_clrlcdfull) ld hl,0 ld (currow),hl ld hl,ALPHA bcall(_puts) loopstart: ld a,0FFh out (1),a ld a,Group2 out (1),a nop \ nop in a,(1) cp kEnter jr z,loopstart startloop: ld a,0FFh out (1),a ld a,Group2 out (1),a nop \ nop in a,(1) cp kEnter jr nz,startloop startloop2: ld a,0FFh out (1),a ld a,Group2 out (1),a nop \ nop in a,(1) cp kEnter jr z,startloop2 ld a,adjust1max ld (adjust1),a ld a,adjust2max ld (adjust2),a xor a ld (subsecond),a ld (second),a ld (minute),a ld (hour),a out (30h),a ld a,44h out (30h),a ld a,1 out (31h),a out (32h),a call waitforbit7 ld a,1 out (31h),a MainLoop: ld a,0FFh out (1),a ld a,Group2 out (1),a nop nop in a,(1) cp kEnter jp z,ENDOFTIME in a,(31h) and 4 jr z,MainLoop call waitforbit7 ld a,1 out (31h),a ;clear screen removed here ld hl,0 ld (currow),hl ld hl,subsecond ld a,(hl) inc a ld (hl),a cp 128 jr nc,SPECIALSKIP ld ix,adjust1 dec (ix) jr nz,noadjust12 inc (hl) ld (ix),adjust1max noadjust12: dec (ix+1) jr nz,noadjust22 ;dec (hl) ld (ix+1),adjust2max noadjust22: jr somelabel SPECIALSKIP: sub 128 ld (hl),a ld ix,adjust1 dec (ix) jr nz,noadjust1 inc (hl) ld (ix),adjust1max noadjust1: dec (ix+1) jr nz,noadjust2 ;dec (hl) ld (ix+1),adjust2max noadjust2: ld a,(second) inc a ld (second),a sub 60 jr nz,somelabel ld (second),a ld a,(minute) inc a ld (minute),a sub 60 jr nz,somelabel ld (minute),a ld hl,hour inc (hl) somelabel: ld a,(hour) call DispA ld a,':' bcall(_putc) ld a,(minute) call DispA ld a,':' bcall(_putc) ld a,(second) call DispA ld a,(subsecond) ld hl,table ld d,0 ld e,a add hl,de ld a,(hl) push af ld a,':' bcall(_putc) pop af call DispA jp MainLoop DispA: ld c,-1 DispA_loop: inc c sub 10 jr nc,DispA_loop add a,10 push af ld a,c add a,'0' bcall(_putc) pop af add a,'0' bcall(_putc) ret waitforbit7: in a,(32h) rla jr nc,waitforbit7 ret ENDOFTIME: xor a out (30h),a ENDLOOP: bcall(_getcsc) or a jr z,ENDLOOP ENDLOOP2: bcall(_getcsc) or a jr nz,ENDLOOP2 ret ALPHA: .db "00:00:00:00",0 table: .db 0,1,2,2,3 .db 4,5,5,6,7 .db 8,9,9,10,11 .db 12,12,13,14,15 .db 16,16,17,18,19 .db 20,20,21,22,23 .db 23,24,25,26,27 .db 27,28,29,30,30 .db 31,32,33,34,34 .db 35,36,37,38,38 .db 39,40,41,41,42 .db 43,44,45,45,46 .db 47,48,48,49,50 .db 51,52,52,53,54 .db 55,55,56,57,58 .db 59,59,60,61,62 .db 62,63,64,65,66 .db 66,67,68,69,70 .db 70,71,72,73,73 .db 74,75,76,77,77 .db 78,79,80,80,81 .db 82,83,84,84,85 .db 86,87,88,88,89 .db 90,91,91,92,93 .db 94,95,95,96,97 .db 98,98,99,99,99 .end