; 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 ;