home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
CPM
/
BYE5
/
B5-DSSW.INS
< prev
next >
Wrap
Text File
|
2000-06-30
|
5KB
|
185 lines
;
; 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