home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
cpm
/
bye5
/
b5c-lb36.izs
/
B5C-LB36.INS
Wrap
Text File
|
1988-02-16
|
4KB
|
153 lines
; B5C-LB36.INS Wayne Masters
; 05/05/86 Potpourri, 408-378-7474
;
; This is an insert, not an overlay, for BYE5 and the Ampro Little-Board
; running a v3.6, or later, BIOS, which uses a spare CTC channel to main-
; tain a memory resident date/time clock.
;
; This routine expects the clock to be initialized to the correct date/time
; before executing the BYE5 program.
;
; Set the following equates in BYE5:
;
; CLOCK EQU YES (Same for KMD)
; TIMEON EQU YES (Same for KMD)
; BIN2BCD EQU YES
;
; Delete the existing TIME routine in BYE5 and replace it with this insert.
;
;
CENTURY EQU 19H ; Change this every 100 years
LDIR EQU 0B0EDH ; Z80 ldir
;
;
TIME: LDA CPYFLG
ORA A ; See if we have already copied the JMP table
JNZ TIME1 ; Yes, skip this
;
LXI D,WBOOT ; Build BIOS entry table
LHLD 1 ; Get BIOS start
LXI B,51 ; Bytes to move
DW LDIR ; Move it
;
CALL GETTBL ; Get address of next JMP table
LXI D,NXTTBL ; (HL) has BIOS nxttbl address
LXI B,15 ;
DW LDIR ; Move the table
MVI A,0FFH
STA CPYFLG ; Set the flag so we only do this once
;
TIME1: CALL TOD ; Get clock base address
;
; (HL) now has address of clock data
;
DI ; Disable interrupts while we do this
LXI D,SEC ; Move time/date
LXI B,6
DW LDIR ; Save time/date
EI ; Enable interrupts now
;
; Everthing needed has been moved into this program area.
;
CALL J2MD ; Convert Julian date to month/day
;
; Now convert and store date/time from binary to bcd and put into BYE5
;
MVI A,CENTURY
STA RTCBUF+3 ; Century
LDA CYEAR
CALL BINBCD
STA RTCBUF+4 ; Year
LDA TMONTH
CALL BINBCD
STA RTCBUF+5 ; Month
LDA TDAY
CALL BINBCD
STA RTCBUF+6 ; Day
LDA HOUR
STA CCHOUR ; Binary form for cchour
CALL BINBCD
STA RTCBUF ; BCD form for buffer hours
LDA MIN
STA CCMIN ; Binary minutes
CALL BINBCD
STA RTCBUF+1 ; BCD minutes
LDA SEC
CALL BINBCD
STA RTCBUF+2 ; Seconds
;
RET ; All done
;
;
; Convert Julian to month/day
;
J2MD: LXI D,MTHS ; Intialize month pointer
LHLD JDAY ; Julian day in (HL)
INX H ; Adjust for ordinal 0
XRA A
MOV B,A ; Initialize high byte of sub with 0
INR A
STA TMONTH ; Initialize month to 1
J2MD1: LDAX D
ORA A ; Clear carry
MOV C,A
MOV A,L ; May be day
DW 42EDH ; SBC HL,BC
JC J2MD2
JZ J2MD2
LDA TMONTH
INR A ; Update month
STA TMONTH
INX D
JMP J2MD1
J2MD2: STA TDAY ; Set day
RET
;
DB 0
MTHS: DB 31,29,31,30,31,30,31,31,30,31,30,31
CPYFLG: DB 0 ; Flag for JMP table copied?
;
; BIOS JMP table, moved from the BIOS on first call to TIME
;
WBOOT: DB 0,0,0 ; Warm start
DB 0,0,0 ; Console status
DB 0,0,0 ; Console character in
DB 0,0,0 ; Console character out
DB 0,0,0 ; List character out
DB 0,0,0 ; Punch character out
DB 0,0,0 ; Reader character in
DB 0,0,0 ; Seek to home position
DB 0,0,0 ; Select disk
DB 0,0,0 ; Set track number
DB 0,0,0 ; Set sector number
DB 0,0,0 ; Set DMA address
DB 0,0,0 ; Read disk
DB 0,0,0 ; Write disk
DB 0,0,0 ; Return list status
DB 0,0,0 ; Sector translate
;
GETTBL: DB 0,0,0 ; Point to more jumps, =>v3.6 BIOS only
;
NXTTBL:
DB 0,0,0 ; JMP swap
DB 0,0,0 ; Get hd table info
DB 0,0,0 ; Get/set phytab access
DB 0,0,0 ; Get phytab entry address
TOD: DB 0,0,0 ; Get base address of clock tick
; Time/Date counters from BIOS
SEC: DB 0
MIN: DB 0
HOUR: DB 0
JDAY: DB 0,0 ; Julian day 0-366 for leap year
CYEAR: DB 0
TMONTH: DB 0 ; Temp storage for month
TDAY: DB 0 ; Temp storage for day
;
; End of B5C-LB36
;