home *** CD-ROM | disk | FTP | other *** search
-
- 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<cr>
- ; NEXT PC
- ; 1580 0100
- ; -ISTATTIME.HEX<cr>
- ; -R<cr>
- ; NEXT PC
- ; 16CD 0000
- ; -^C
- ; A>SAVE 22 STATTIME.COM<cr>
- ;
- ; 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
-