home *** CD-ROM | disk | FTP | other *** search
- ;
- ; B5C-MORE.INS Wayne Masters
- ; 02/09/86 Potpourri, 408-378-7474
- ;
- ; BYE5 insert for MORE-CLOCK running on CP/M-2 or CP/M-3 systems
- ;
- ; To install this insert you must set the following equates in BYE5:
- ; CLOCK EQU YES
- ; TIMEON EQU YES
- ; BCDBIN EQU YES
- ; BINBCD EQU NO
- ;
- ; You must set the PIAPORT equate below to match your system
- ;
- ; You should use your clock initialization utility to set the date/time
- ; prior to executing BYE. Make sure you initialize the clock as a 24
- ; hour clock if you want it to work correctly with BYE5.
- ;
- ; Locate the area near the beginning of BYE5 +++ Install your clock insert+++
- ; and remove the existing code inside the equates. Replace it with this
- ; insert.
- ;
- ;************************************************************************
- ;* MM58321 port library & 8255 PIA ports *
- ;* for *
- ;* MORE-CLOCK ver 2.1 with version 2 PC board *
- ;************************************************************************
- ;
- ; Port addresses and register assignments in the clock system.
- ; clock chip used : MM58321 OKI
- ; PIA chip used : D8255AC-5 NEC
- ;
- ; This is the port addresses and equates for the MORE-CLOCK using version 2
- ; PC board ( with wire jumper to select the page lines ).
- ; The primary difference in the software are the 4 control lines -
- ; stop, read, write, and address write. If the page number is changed,
- ; the only thing that will have to be altered in the software is the
- ; PIAPORT equate, which can have values of 00h, 10h, 20h, and 30h.
- ;
- ;
- CENTURY EQU 19H ; Change this in year 2000 to 20
- PIAPORT EQU 00H ; Hardware port for the PIA
- ; ( jumpered on pc board )
- CDAPORT EQU PIAPORT+2 ; Location of clock data port ( in PIA )
- CTLPORT EQU PIAPORT+3 ; Location of PIA control port
-
- ; PIA configuration words:
- WMODE EQU 10000000B ; PC 0-3 being outputs ( clock writes )
- RMODE EQU 10000001B ; PC 0-3 being inputs ( clock reads )
- ; ( PC 4-7 are always outputs )
- ;
- ; PC 4-7 are the control bits for the clock
- CSBIT EQU 10000000B ; Clock chip stop bit
- CABIT EQU 01000000B ; Clock chip register address bit
- CRBIT EQU 00100000B ; Clock chip read bit
- CWBIT EQU 00010000B ; Clock chip write bit
- ;
- ;----------------------------------
- ; CLOCK CHIP DATA REGISTERS
- ;----------------------------------
- ;
- USEC EQU 00H ; Units of seconds
- TSEC EQU 01H ; Tens of seconds
- ;
- UMIN EQU 02H ; Units of minutes
- TMIN EQU 03H ; Tens of minutes
- ;
- UHOU EQU 04H ; Units of hours
- THOU EQU 05H ; Tens of hours
- MO12 EQU 00000000B ; 12 hour mode ( D3 clear )
- MO24 EQU 00001000B ; 24 hour mode ( D3 set )
- AMTM EQU 00000000B ; AM time ( D2 clear )
- PMTM EQU 00000100B ; PM time ( D2 set )
- ;
- DOWK EQU 06H ; Day of the week
- UDAY EQU 07H ; Units of days
- TDAY EQU 08H ; Tens of days
- LPYR EQU 00000000B ; D2 and D3 select the leap year operation
- ;
- UMON EQU 09H ; Units of months
- TMON EQU 0AH ; Tens of months
- ;
- UYEA EQU 0BH ; Units of years
- TYEA EQU 0CH ; Tens of years
- ;
- ; Machine code interface to get the time and date information from the
- ; MORE-CLOCK and store it for BYE5.
- ;
- TIME: DI ; Disable the interrupts while we do this
- MVI A,CENTURY
- STA RTCBUF+3 ; Store century
- MVI H,TMON ; Load the tens month register number
- CALL CLKRD ; Get the clock data
- STA BCDMSB ; Save MSB
- MVI H,UMON ; Load the units month register number
- CALL CLKRD ; Get the clock data
- STA BCDLSB ; Save LSB
- CALL PACKBCD ; Make it packed bcd
- STA RTCBUF+5 ; Store month
- ;
- MVI H,TDAY ; Load in the tens day register number
- CALL CLKRD ; Get the clock data
- STA BCDMSB
- MVI H,UDAY ; Load in the units day register number
- CALL CLKRD ; Get the clock data
- STA BCDLSB
- CALL PACKBCD
- STA RTCBUF+6 ; Store day
- ;
- MVI H,TYEA ; Load in the tens year number
- CALL CLKRD ; Get the clock data
- STA BCDMSB
- MVI H,UYEA ; Load in the units of years number
- CALL CLKRD ; Get the clock data
- STA BCDLSB
- CALL PACKBCD
- STA RTCBUF+4 ; Store year
- ;
- MVI H,THOU ; Load in the tens hour
- CALL CLKRD ; Get the clock data
- ANI 00000011B ; Strip off the 24 mode and AM PM bits
- STA BCDMSB
- MVI H,UHOU ; Load in the units of hours reg. number
- CALL CLKRD ; Get the clock data
- STA BCDLSB
- CALL PACKBCD
- STA RTCBUF ; Store hour
- CALL BCDBIN
- STA CCHOUR ; For BYE
- ;
- MVI H,TMIN ; Load in the tens of minutes reg.
- CALL CLKRD ; Get the clock data
- STA BCDMSB
- MVI H,UMIN ; Load in the units of minutes
- CALL CLKRD ; Get the clock data
- STA BCDLSB
- CALL PACKBCD
- STA RTCBUF+1 ; Store minutes
- CALL BCDBIN ; Convert to binary
- STA CCMIN ; For BYE
- ;
- MVI H,TSEC ; Load in the tens of seconds reg.
- CALL CLKRD ; Get the clock data
- STA BCDMSB
- MVI H,USEC ; Load in the units of seconds number
- CALL CLKRD ; Get the clock data
- STA BCDLSB
- CALL PACKBCD
- STA RTCBUF+2 ; Store seconds
- ;
- EI ; Enable the interrupts again
- RET
- ;
- ;*********************************************************************
- ;
- ; Modified to automatically handle the 24 hour mode flag in the tens
- ; of hours register.
- ;
- ; CLKRD - reads a referenced clock register
- ;
- ; Entrance parameters :
- ; register address in H, data will be returned in A
- ;
- ;----------------------------------------------------------------------
- ;
- ; The trick to getting to the clock chip is the D8255 PIA which will be
- ; necessary to program for a read and a write operation. The PIA was
- ; used for two reasons, the speed of most clock chips are not sufficient
- ; for use directly attached to a computer's buss and the polarity of the
- ; control lines were wrong. The C port of the PIA is attached to the
- ; clock chip, 4 lines as the data buss and 4 lines as control. The PIA's
- ; C port can be configured as two 4 bit ports which is the situation
- ; here. Only the two modes are used to 'talk' to the clock, RMODE and
- ; WMODE.
- ;
- ;
- ; The port numbers that must be passed are:
- ; 0 units of seconds
- ; 1 tens of seconds
- ; 2 units of minutes
- ; 3 tens of minutes
- ; 4 units of hours
- ; 5 tens of hours
- ; 6 day of week
- ; 7 units of days
- ; 8 tens of days
- ; 9 units of months
- ; 10 tens of months
- ; 11 units of years
- ; 12 tens of years
- ;
- ; Special bits used :
- ; 5 tens of hours D3 used to indicate 24 hour mode
- ; D2 indicates PM if 12 hour mode
- ; 8 tens of days D3 & D2 used to indicate leap year
- ;
- ;--------------------------------------------------------------------
- ;
- CLKRD: ; Read a clock register
- MVI A,WMODE ; Control word for PIA write
- OUT CTLPORT ; Set the control lines to the clock
- ;
- MVI A,CABIT ; Get the clock register address bit
- ORA H ; Add in the register address
- ORI CSBIT ; Stop line of the clock must be high
- OUT CDAPORT ; Output the data
- ;
- MVI A,RMODE ; PIA control word for chip read
- OUT CTLPORT ; Output the data
- ;
- MVI A,CRBIT ; Set the read bit
- ORI CSBIT ; Set the stop bit
- OUT CDAPORT ; Init. the clock chip for a read
- NOP ; Delay for the clock chip to stabilize
- NOP
- NOP
- NOP
- NOP
- IN CDAPORT ; The clock data will now be on the low nib
- MOV B,A ; Temp. store data
- XRA A ; Reset all of the control lines to
- OUT CDAPORT ; The clock chip
- MVI A,THOU ; Get the real tens register address
- CMP H ; See if this is it
- MOV A,B ; Get the data back
- JNZ CX1 ; If not tens reg. then jump around
- ANI 00000011B ; Make sure only the low two bits are sent
- CX1: ANI 0FH ; Mask of the high nibble
- RET
- ;
- ;----------------------------------------------------------------------------
- ;
- ; BCDMSB= Most significent byte, BCDLSB= Least signficent byte
- ;
- PACKBCD:LDA BCDLSB
- ANI 0FH
- MOV B,A ; Save lsb in B
- LDA BCDMSB
- ANI 0FH
- RLC!RLC!RLC!RLC ; Shift it to high nibble
- ORA B ; Combine with lsb
- RET
- ;
- BCDMSB: DB 0
- BCDLSB: DB 0
- ;
- ; That's the end of B5C-MORE.INS
- ;