home *** CD-ROM | disk | FTP | other *** search
- ;
- ; REAL TIME CLOCK DRIVER INSERT FOR THE DALLAS SEMICONDUCTOR
- ; "SMARTWATCH", DS1213, WHICH SITS UNDER AN EPROM OR RAM
- ; CHIP AT A MEMORY ADDRESS WHICH YOU MUST SPECIFY AT LABEL "SWBASE"
- ;
- ; THIS CODE IS Z-80 CODE, ASSEMBLED WITH 'DB' PSUDO-OPCODES
- ; SO 'MAC' WON'T BARF. FOR 8080/85, THE DJNZ, JR,JRNZ,JRZ AND BIT
- ; TEST INSTRUCTIONS WILL HAVE TO BE RE-WRITTEN USING INTEL LOGICAL
- ; OPERATORS LEST THE 8080/85 BARF
- ;
- ; THIS INSERT WAS WRITTEN FOR USE WITH BYE510 AND PBBS 4.0
- ; YOU MUST SET BCDBIN=YES IN BYE510 FOR THIS INSERT TO
- ; ASSEMBLE WITH BYE CORRECTLY.
- ;
- ; AUTHOR: MICHAEL R. MCCARREY
- ; SOFTWARE ENGINEER
- ; ISC SYSTEMS CORP.
- ; SPOKANE, WA
- ; (509) 927-5105 (BUS)
- ; (509) 489-9562 (RES)
- ;
- TIME: CALL SWSEL ; GET SMARTWATCH ONLINE
- LXI H,BCDDATA ; SET POINTER TO BCD DATA STOW
- CALL READCLK ; READ THE SMARTWATCH
- CALL EXTRACT ; EXTRACT AND CONVERT BCD VALUES
- RET ; RETURN TO CALLER
-
- ;
- ; THIS IS THE ROUTINE WHICH EXTRACTS AND CONVERTS
- ; RETURNED BCD DATA FROM THE SMARTWATCH INTO SOMETHING
- ; THAT CAN BE USED BY THE CALLING PROGRAM
- ;
-
- EXTRACT EQU $
- ;
- ;======== EXTRACT AND SAVE SECONDS
- LDA SWSEC ; LOAD AND
- STA RTCBUF+2 ; SAVE SECONDS
- ;
- ;======== EXTRECT AND CONVERT MINUTES
- LDA SWMIN ; LOAD AND
- STA RTCBUF+1 ; SAVE MINUTES
- CALL BCDBIN ; CONVERT BCD MINUTES
- STA CCMIN ; UPDATE CURRENT MINUTE
- ;
- ;======== EXTRACT AND CONVERT HOURS
- LDA SWHOUR ; LOAD AND
- STA RTCBUF+0 ; SAVE HOURS
- CALL BCDBIN ; CONVERT HOURS TO BINARY
- STA CCHOUR ; UPDATE CURRENT HOUR
- ;
- ;======== EXTRACT AND SAVE DATE
- LDA SWDATE ; GET DATE
- STA RTCBUF+6 ; SAVE DATE
- ;
- ;======== EXTRACT AND SAVE MONTH
- LDA SWMONTH ; LOAD AND
- STA RTCBUF+5 ; SAVE MONTH
- ;
- ;======== EXTRACT AND SAVE YEAR
- LDA SWYEAR ; LOAD AND
- STA RTCBUF+4 ; SAVE YEAR
- ;
- ;======== SET THE CORRECT CENTURY
- MVI A,19H ; AS IN 19XX
- STA RTCBUF+3 ; SAVE CENTURY
-
- RET ; BACK TO CALLER
-
- ;
- ; THIS IS THE SMARTWATCH SELECT ROUTINE
- ;
- ; REGISTERS ON ENTRY:
- ; N/A
- ;
- ; REGISTERS ON EXIT:
- ; HL --> DTKEY+8
- ;
- ; REGISTERS DESTROYED: AF, HL
- ;
- SWSEL: LDA SWBASE+4 ; RESET SMARTWATCH COMPARE REG
- LXI H,DTKEY ; STRING TO WAKE-UP THE SMARTWATCH
- CALL WRITCLK ; OK SUCKER, TIME GET UP
- RET ; BACK TO CALLER
- ;
- ; THIS IS THE WRITE CLOCK ROUTINE.
- ;
- ; REGISTERS ON ENRTY:
- ; HL --> BCDDATA STOW
- ;
- ; REGISTERS ON EXIT:
- ; HL --> BCDDATA+8
- ;
- ; REGISTERS DESTROYED: AF, BC
- ;
- WRITCLK:MVI B,8 ; REGISTER COUNT
- T040: PUSH B ; SAVE COUNT
- MOV C,M ; GRAB SOME DATA
- MVI B,8 ; BITS/BYTE
- T050: DB 0CBH ; IS THE 1ST
- DB 041H ; A ZERO?
- DB 28H ; ZERO, SO
- DB 05H ; GO AROUND
- LDA SWBASE+1 ; MAKE A0=0
- DB 18H ; GO
- DB 03H ; AROUND
- T070: LDA SWBASE+0 ; MAKE A0=1
- TCONT: DB 0CBH ; SHIFT RIGHT
- DB 039H ; 1 BIT
- DB 10H ; UNTIL A COMPLETE
- DB 0F0H ; BYTE IS ASSEMBLED
- INX H ; ADJUST POINTER
- POP B ; RECOVER REGISTER COUNT
- DB 10H ; DO IT TO ALL
- DB 0E8H ; SMARTWATCH REGISTERS
- RET ; BACK TO CALLER
- ;
- ; THIS IS THE READ CLOCK ROUTINE.
- ;
- ; REGISTERS ON ENRTY:
- ; HL --> BCDDATA STOW
- ;
- ; REGISTERS ON EXIT:
- ; HL --> BCDDATA+8
- ;
- ; REGISTERS DESTROYED: AF, BC
- ;
- READCLK:MVI B,8 ; REGISTER COUNT IN SMARTWATCH
- T020: PUSH B ; SAVE REG COUNT
- MVI C,0
- MVI B,8 ; BITS/BYTE COUNT
- T030: LDA SWBASE+4 ; RAISE A2 (READ)
- ANI 1
- ORA C ; CLEAR CARRY
- MOV C,A
- DB 0CBH ; SHIFT IN
- DB 09H ; A BIT
- DB 10H ; UNTIL A BYTE IS ASSEMBELED IN 'C'
- DB 0F5H ; USING THE Z-80 'DJNZ' INST.
- MOV M,C ; STOW THE BYTE
- INX H ; ADJUST POINTER
- POP B ; RECOVER REGISTER COUNT
- DB 10H ; DO ALL 8 REGISTERS
- DB 0EBH ; USING THAT 'DJNZ' AGAIN
- RET ; BACK TO CALLER
-
- ;
- ; THIS IS THE CODE THAT IS WRITTEN TO THE MEMORY ADDRESS
- ; THE SMARTWATCH OCCOUPIES. THE SMARTWATCH DETECTS THIS
- ; PATTERN, DE-SELECTS WHATEVER IS PLUGGED INTO IT, PROM,
- ; RAM OR WHATEVER, AND THE NEXT 64 ACCESSES TO IT WILL
- ; BE READS OR WRITES TO OR FROM THE REGISTERS. IT IS OKAY
- ; TO DO OTHER THINGS, ANY WHERE ELSE IN THE ADDRESS AREA
- ; AS LONG AS THEY DON'T INVOLVE THE AREA OF THE SMARTWATCH.
- ;
- DTKEY: DB 0C5H,03AH,0A3H,05CH,0C5H,03AH,0A3H,05CH
-
- ;
- ; THIS IS THE BEGINNING MEMORY ADDRESS FOR THE
- ; SMARTWATCH. YOU MUST CUSTOMIZE IT TO FIT YOUR
- ; OWN MEMORY MAP.
- ;
- SWBASE EQU 0D000H ; BASE ADDRESS FOR ADDRESSING
-
- ;
- ; THIS IS THE STOW FOR BCD DATA FROM OR TO THE
- ; SMARTWATCH. THE DATA MUST BE READ IN ASCENDING
- ; ADDRESSES ONLY AS THIS IS THE WAY IT IS PRESENTED
- ; BY THE SMARTWATCH. IT GOES WITHOUT SAYING THAT
- ; WRITING TO THE SMARTWATCH MUST ALSO BE DONE IN THE
- ; SAME MANNER AS READING.
- ;
- BCDDATA:DB 0 ; 1/10 SECOND
- SWSEC: DB 0 ; SECONDS
- SWMIN: DB 0 ; MINUTES
- SWHOUR: DB 0 ; HOURS
- SWDOW: DB 0 ; DAY OF WEEK
- SWDATE: DB 0 ; DATE
- SWMONTH:DB 0 ; MONTH
- SWYEAR: DB 0 ; YEAR
-
- ENDIF ; CLOCK OR RSPEED
- ;
- ; end of clock routine