; ; B5C-KP4.INS ; 07/15/85 Clock insert for BYE500 and later ; and the KayPro 4-84 ; ; Based on the code in TIME2.ASM ; Wayne Masters ; Potpourri, (408) 378-7474 ; ; Note: This is an insert, not an overlay. Remove the existing code ; in BYE5 at label TIME: and insert this code instead. ; Set the equate TIMEON EQU YES in BYE5. ; ; Use the program TIME2.ASM or later, to initialize your clock ; with correct date/time prior to loading BYE. ; ; CENTURY EQU 019H ; 19h = 19 bcd, reset this every 100 years CYEAR EQU 085H ; 85h = 85 bcd, reset this every year RTCA EQU 20H ; Clock address select reg RTCD EQU 24H ; Clock data register RTCS EQU 22H ; Clock status register REGEND EQU 8 ; Ending register count for time loop ; ; TIME: MVI A,0CFH ; Initial status setup byte OUT RTCS ; Set pio for mode 3 in/output MVI A,0E0H ; Low 5 bits output, top 3 input OUT RTCS ; Set pio in/out bits MVI A,03H ; Disable interrupts OUT RTCS ; Do it MVI A,14H ; Status reg addr OUT RTCA ; Select it IN RTCD ; Reset status bit ; DOREAD: LXI H,LOCBUF ; Point to time save area MVI B,2 ; Start with seconds ; BURST: MOV A,B ; A is register we want to read CPI REGEND ; Gotten all we want? JNC ROLLCK ; Yes, done getting time OUT RTCA ; Select that register of clock IN RTCD ; Read the clock data MOV M,A ; Save in core INX H ; Next memory location INR B ; Next reg addr JMP BURST ; Go get more data ; ; See if the clock rolled over during the reads. ; ROLLCK: MVI A,14H ; Status reg addr OUT RTCA ; Select it IN RTCD ; Get status ORA A ; Was clock roll? JNZ DOREAD ; Yes, go read again ; ; Format the date and time for bye's realtime clock buffer ; LDA LOCBUF ; BCD seconds STA RTCBUF+2 LDA LOCBUF+1 ; BCD minutes STA RTCBUF+1 CALL BCDBIN ; Convert to binary STA CCMIN ; For bye5 LDA LOCBUF+2 ; BCD hours STA RTCBUF CALL BCDBIN ; Convert to binary STA CCHOUR ; For bye5 LDA LOCBUF+4 ; BCD day of month STA RTCBUF+6 LDA LOCBUF+5 ; BCD month STA RTCBUF+5 MVI A,CENTURY STA RTCBUF+3 MVI A,CYEAR STA RTCBUF+4 RET ; All done ; ; LOCBUF: DB 0 ; Seconds DB 0 ; Minutes DB 0 ; Hours DB 0 ; Day of week (not used by us) DB 0 ; Day of month DB 0 ; Month of year ; ; End of B5C-KP4. Put all this code in between the if timeon ; and the endif timeon at label TIME: and it should work.