;****************************************************************************
;  B3C-QX10.INS    ( QX-10 RTC clock code for BYE335)
;
;  v1.2 June 1985   Norm Gregory   Seattle's 'downspout' 206-325-1325
;
; This is to be inserted in the BYE3 code right afte IF TIMEON label following
; the machine insert.
;
; NOTE: It is no longer required that the user define the starting address
;       of the BIOS area. Modifications allowing fuller compatibility
;       with most versions of CP/M have been incorporated (i.e. removing
;       the need for indirect access to clock via BIOS jump table.
;
;       Since we are accessing the CMOS chip directly this insert should
;       work under any QX-10 operating system.
;
; THANKS TO:  Roger Lanphere (Mt Vernon, WA) for invaluable help whenever
;       asked.  Mick Gaitor (Brooklyn, NY) for much of the code here.  I
;       borrowed heavily from his MXC-QX10.ASM.  If you are using MEX on
;       your QX-10 you should be using his overlays.  Super job Mick!
;
;****************************************************************************
;
BUSY    EQU     80H             ;Mask to test for clock busy condition
CLKADR  EQU     3DH             ;QX-10 clock command register port
CLKDAT  EQU     3CH             ;QX-10 clock data register port
STBYTE  EQU     0AH             ;Clock memory addr to check for clock busy
CENTURY EQU    019H             ;Hey, it's the 1900's (for a while).
;
        IF     RTC
TIME:   CALL    CREAD           ; read data from clock chip
       LDA     TBFR+3
       STA     RTCBUF+0        ; Hour
       LDA     TBFR+4
       STA     RTCBUF+1        ; Minute
       LDA     TBFR+5
       STA     RTCBUF+2        ; Second
       MVI     A,CENTURY
       STA     RTCBUF+3        ; Century
       LDA     TBFR+0
       STA     RTCBUF+4        ; Year
       LDA     TBFR+1
       STA     RTCBUF+5        ; Month
       LDA     TBFR+2
       STA     RTCBUF+6        ; Day
       LDA     RTCBUF          ; Pick up BCD HH
       CALL    BCDBIN          ; And convert to binary
       STA     CCHOUR          ; For BYE3
       LDA     RTCBUF+1        ; BCD MM
       CALL    BCDBIN
       STA     CCMIN           ; To binary for BYE3
       RET                     ; And return (for now..)
;
;=========
;
; CREAD: gets date/time directly from the LSI 46818 chip.
;        (doing it this way rather than through the QX-10 BIOS
;        call makes this overlay independent of the version
;        of Epson's CPM (A or B) being used.)
;
; Time/Date buffer consists of 6 bytes of packed BCD-encoded information
; located in buffer TBFR.   Time/Date buffer is of the following format:
;
;        TBFR  + 0      = year
;              + 1      = month
;              + 2      = day
;              + 3      = hour
;              + 4      = minute
;              + 5      = second
;
CREAD:
       CALL    CLKBSY          ;Wait till clock is idle
       LXI     H,TBFR          ;Point to time/date buffer
       LXI     D,ADRTBL        ;Point to clock memory data address table
       MVI     B,6             ;Number of data items to read
TDLOOP: LDAX    D               ;Get next clock memory data address
       OUT     CLKADR          ;and send addr to clock port
       IN      CLKDAT          ;Read clock data
       MOV     M,A             ;and store in time/date buffer
       INX     H               ;Set next time/date buffer position
       INX     D               ;Set next clock memory data address
       DCR     B               ;One less data item
       JNZ     TDLOOP          ; - continue read till done
       RET
;
CLKBSY:                         ;Routine to wait till clock is idle
       MVI     A,STBYTE        ;Check if clock is updating
       OUT     CLKADR          ;Send address
       IN      CLKDAT          ;Read clock
       ANI     BUSY            ;Test bit 7
       JNZ     CLKBSY          ;Jump if clock busy
       RET
;
TBFR:   DS      6               ;Real-time clock buffer - see above
ADRTBL: DB      9,8,7,4,2,0     ;Clock memory addr's for yr,mo,da,hr,min,sec
        ENDIF  ;RTC
;
;***************************************************************************