home *** CD-ROM | disk | FTP | other *** search
- ; CB80 CBTOD routine, fixed for seconds and for CP/M plus
- ;
- ; The original CBTOD routine in CB80 version 2.0 has a number of
- ; bugs:
- ; 1. BDOS function 155 is used instead of 105. 155 does not exist.
- ; 2. The routine, after changing to BDOS call 105, will only work
- ; with MP/M, not with CP/M plus.
- ; 3. the TIME$ function returns HHMM00 instead of HHMMSS.
- ;
- ; This file CBTOD.ASM fixes all of the above problems. It has not been
- ; officially blessed by DRI and application of this file to your copy
- ; of CB80 is at your own risk!
- ;
- ; HOW TO:
- ; 1. Use RMAC or M80 to assemble CBTOD.ASM into CBTOD.REL
- ; 2. rename your existing CB80.IRL library to something different,
- ; such as OLIB.IRL (preserve the .IRL type)
- ; 3. Use LIB as follows: LIB CB80[I]=OLIB.IRL<CBTOD>
- ; 4. Enjoy the DATE$ and TIME$ functions in CP/M plus.
- ;
- ; NOTE NOTE NOTE
- ; TO STRESS AGAIN, THIS CODE HAS NOT BEEN AUTHORIZED BY DRI AND WILL
- ; WORK WITH CB80 VERSION 2.0 ONLY!!!
- ;
- ; The original code below has been reconstructed with LIB.COM
- ;
- public ?time,?date
- extrn ?gets
- ;
- ?time: call p0093
- lxi b,3003h
- mvi d,0fh
- lxi h,d0002
- p000b: mov a,m
- xthl
- mov e,a
- rrc
- rrc
- rrc
- rrc
- ana d
- ora b
- mov m,a
- inx h
- mov a,e
- ana d
- ora b
- mov m,a
- inx h
- xthl
- inx h
- dcr c
- jnz p000b
- pop h
- pop h
- ret
- ;
- ?date: call p0093
- mvi a,44h
- push psw
- mvi h,4dh
- push h
- p002d: pop d
- pop psw
- rrc
- push psw
- mvi a,1ch
- aci 0
- sta p0087+1
- inr d
- push d
- mvi c,0ch
- lxi d,p0087
- lhld d0000
- p0042: xchg
- mov a,e
- sub m
- mov e,a
- mov a,d
- sbi 0
- jm p005d
- mov d,a
- ora e
- jz p005d
- inx h
- xchg
- shld d0000
- dcr c
- jnz p0042
- jmp p002d
- ;
- p005d: pop d
- pop psw
- pop h
- lda d0000
- push psw
- mvi a,13
- sub c
- push psw
- push d
- mvi b,10
- mvi c,3
- p006d: pop psw
- mvi d,-1
- p0070: sub b
- inr d
- jnc p0070
- add b
- mov e,a
- mov a,d
- ori '0'
- mov m,a
- inx h
- mov a,e
- ori '0'
- mov m,a
- inx h
- dcr c
- jnz p006d
- pop h
- ret
- ;
- p0087: db 1fh
- ds 1
- ;
- db 1fh,1eh,1fh,1eh,1fh
- db 1fh,1eh,1fh,1eh,1fh
- ;
- p0093: lxi h,8
- call ?gets
- pop d
- push h
- mvi m,80h
- inx h
- mvi m,6
- inx h
- push h
- push d
- mvi c,12
- call 5
- mov a,h
- ani 5
- jnz dotim
- mov a,l
- cpi 30h ;cp/m plus?
- jc p00b6 ;no, skip
- dotim: mvi c,69h ;mp/m time/date call
- lxi d,d0000
- call 5
- sta d0004
- ret
- ;
- p00b6: pop psw
- pop d
- mvi c,6
- mvi a,' ' ;filler for no time call
- p00bc: stax d
- inx d
- dcr c
- jnz p00bc
- pop h
- ret
- ;
- dseg
- ;
- d0000: ds 2
- d0002: ds 1
- d0003: ds 1
- d0004: ds 1
- end
- ov a,e
- sub m
- mov e,a
- mov a,d
- sbi 0
- jm p005d
- mov d,a
- ora e
- jz p005d
- inx h
- xchg
- shld d0000
- dcr c
-