title 'STATTIME as of April 6, 1982' ; ; ; Here is an interesting "patch" to Digital Research's ; STAT.COM, that incorporates a "real time clock display. This ; patch works with STAT.COM for CP/M version 2.2 ONLY. Merge ; it into STAT.COM as follows: ; ; A>DDT STAT.COM ; NEXT PC ; 1580 0100 ; -ISTATTIME.HEX ; -R ; NEXT PC ; 16CD 0000 ; -^C ; A>SAVE 22 STATTIME.COM ; ; Now you have a new "STAT" command file called STATTIME.COM, ; and it will display the "real time" on every execution... ; ; Best regards, ; ; Kelly Smith, MP/M-Net (tm) Sysop ; (805) 527-9321 (Modem, 300 Baud) ; ; ; 06/Apr/82 Revised for Godbout System Support 1 clock ; by Bill Bolton, Software Tools, Australia ; ; 20/Oct/80 Original version by Kelly Smith ; ; ; bdos equ 5 pbuf equ 9 stat equ 433h ; STAT.COM entry address cr equ 0dh ; ASCII carriage return lf equ 0ah ; ASCII line feed true equ 0ffh false equ not true; define false clkread equ 10H timlen equ 12 gbclkc equ 08Ah ; real time clock base port address gbclkd equ gbclkc+1 org 0100h jmp date org 1501h ; version 2.2 stat.com entry address date: push psw push b push d push h start: mvi a,0+clkread out gbclkc in gbclkd cpi 0ffh ; clock board present? jz done1 ; no, just run normally call rtime lxi h,time mov a,m cpi '0' jnz go$on mvi a,' ' go$on: sta day inx h mov a,m sta day+1 inx h mov a,m sta month inx h mov a,m sta month+1 inx h mov a,m sta year inx h mov a,m sta year+1 inx h mov a,m sta hour inx h mov a,m sta hour+1 inx h mov a,m sta minutes inx h mov a,m sta minutes+1 inx h mov a,m sta seconds inx h mov a,m sta seconds+1 ; ; test the date, and convert it to four year calendar format ; lxi d,pdate ; point to date and time message mvi c,pbuf ; print buffer function call bdos ; let CP/M do the work... lda month ; get high byte of the month cpi '1' ; in the range of january to september? jnz jansept ; yes lda month+1 cpi '0' lxi d,oct ; October? jz pmonth ; print, if so cpi '1' ; november? lxi d,nov jz pmonth ; print, if so lxi d,dec ; december. jmp pmonth ; print it... ; jansept: lda month+1 ; it's january to september cpi '1' ; january? lxi d,jan jz pmonth ; print, if so cpi '2' ; february? lxi d,feb jz pmonth ; print, if so cpi '3' ; march? lxi d,mar jz pmonth ; print, if so cpi '4' ; april? lxi d,apr jz pmonth ; print, if so cpi '5' ; may? lxi d,may jz pmonth ; print, if so cpi '6' ; june? lxi d,jun jz pmonth ; print month cpi '7' ; july? lxi d,jul jz pmonth ; print, if so cpi '8' ; august? lxi d,aug jz pmonth ; print, if so lxi d,sep ; it's september pmonth: mvi c,pbuf ; print buffer function call bdos ; let CP/M do the work... done: lxi d,day ; get the day mvi c,pbuf ; print buffer function call bdos ; let CP/M do the work... done1: pop h pop d pop b pop psw jmp stat ; now jump into STAT... rtime: lxi h,time ;Address of time save area lxi d,atable ;Address of digit table mvi b,timlen/2 ;Number of loops to do tloop: call rone ;get digit value ani 0fh ;mask of high nibble adi '0' mov m,a inx h call rone ani 0fh adi '0' mov m,a ;save into table inx h ;point to next digit dcr b ;adjust loop count jnz tloop ret rone: ldax d ;Get the digit address inx d ;Point to next address out gbclkc ;Output the digit address cpi 5+clkread ;Check for hours 10 digit in gbclkd ;Get the digit rnz ;If not the hours ten digit sui 8 ;Kill the 24 hour bit ret ; ATABLE: DB 8+clkread ;digit address table DB 7+clkread DB 10+clkread DB 9+clkread DB 12+clkread DB 11+clkread DB 5+clkread DB 4+clkread DB 3+clkread DB 2+clkread DB 1+clkread DB 0+clkread ; ; message buffers ; time db 0,0,0,0,0,0,0,0,0,0,0,0 pdate: db 'Date: $' month: ds 2 ; the month day: db 'xx, ' ; the day... db '19' year db '80' ; the year... db ' Time: ' hour: db 'xx:' ; the hour... minutes:db 'xx:' ; the minute... seconds:db 'xx' ; the second... db cr,lf,'$' ; string delimeter errmsg: db cr,lf,'The Clock Board is NOT INSTALLED!',cr,lf,'$' jan: db 'January $' feb: db 'February $' mar: db 'March $' apr: db 'April $' may: db 'May $' jun: db 'June $' jul: db 'July $' Aug: db 'August $' sep: db 'September $' oct: db 'October $' nov: db 'November $' dec: db 'December $' end