mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
Reintegrate wbw -> trunk
This commit is contained in:
169
Source/BIOS/simrtc.asm
Normal file
169
Source/BIOS/simrtc.asm
Normal file
@@ -0,0 +1,169 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; SIMH RTC DRIVER
|
||||
;==================================================================================================
|
||||
;
|
||||
SIMRTC_IO .EQU $FE ; SIMH IO PORT
|
||||
SIMRTC_CLKREAD .EQU 7 ; READ CLOCK COMMAND
|
||||
SIMRTC_CLKWRITE .EQU 8 ; WRITE CLOCK COMMAND
|
||||
SIMRTC_BUFSIZ .EQU 6 ; SIX BYTE BUFFER (YYMMDDHHMMSS)
|
||||
;
|
||||
; RTC DEVICE INITIALIZATION ENTRY
|
||||
;
|
||||
SIMRTC_INIT:
|
||||
PRTS("SIMRTC: $")
|
||||
;
|
||||
; DISPLAY CURRENT TIME
|
||||
LD HL,SIMRTC_BUF
|
||||
PUSH HL
|
||||
CALL SIMRTC_GETTIM0
|
||||
POP HL
|
||||
CALL PRTDT
|
||||
;
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
; RTC DEVICE FUNCTION DISPATCH ENTRY
|
||||
; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR
|
||||
; B: FUNCTION (IN)
|
||||
;
|
||||
SIMRTC_DISPATCH:
|
||||
LD A,B ; GET REQUESTED FUNCTION
|
||||
AND $0F ; ISOLATE SUB-FUNCTION
|
||||
JP Z,SIMRTC_GETTIM ; GET TIME
|
||||
DEC A
|
||||
JP Z,SIMRTC_SETTIM ; SET TIME
|
||||
DEC A
|
||||
JP Z,SIMRTC_GETBYT ; GET NVRAM BYTE VALUE
|
||||
DEC A
|
||||
JP Z,SIMRTC_SETBYT ; SET NVRAM BYTE VALUE
|
||||
DEC A
|
||||
JP Z,SIMRTC_GETBLK ; GET NVRAM DATA BLOCK VALUES
|
||||
DEC A
|
||||
JP Z,SIMRTC_SETBLK ; SET NVRAM DATA BLOCK VALUES
|
||||
CALL PANIC
|
||||
;
|
||||
; NVRAM FUNCTIONS ARE NOT AVAILABLE IN SIMULATOR
|
||||
;
|
||||
SIMRTC_GETBYT:
|
||||
SIMRTC_SETBYT:
|
||||
SIMRTC_GETBLK:
|
||||
SIMRTC_SETBLK:
|
||||
CALL PANIC
|
||||
;
|
||||
; RTC GET TIME
|
||||
; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR
|
||||
; HL: DATE/TIME BUFFER (OUT)
|
||||
; BUFFER FORMAT IS BCD: YYMMDDHHMMSS
|
||||
; 24 HOUR TIME FORMAT IS ASSUMED
|
||||
;
|
||||
SIMRTC_GETTIM:
|
||||
; PUSH HL
|
||||
; POP BC
|
||||
; CALL NEWLINE
|
||||
; CALL PRTHEXWORD
|
||||
; CALL NEWLINE
|
||||
|
||||
; LD A,SIMRTC_CLKREAD ; READ CLOCK COMMAND
|
||||
; OUT (SIMRTC_IO),A ; SEND IT TO SIMH
|
||||
; LD B,SIMRTC_BUFSIZ ; SETUP TO GET 6 BYTES
|
||||
; LD C,SIMRTC_IO ; FROM SIMH PORT
|
||||
; INIR ; GET BYTES TO (HL)
|
||||
;;
|
||||
; XOR A ; SIGNAL SUCCESS
|
||||
; RET ; AND RETURN
|
||||
|
||||
; GET THE TIME INTO TEMP BUF
|
||||
PUSH HL ; SAVE PTR TO CALLS BUFFER
|
||||
CALL SIMRTC_GETTIM0 ; GET TIME TO WORK BUFFER
|
||||
;
|
||||
; NOW COPY TO REAL DESTINATION (INTERBANK SAFE)
|
||||
LD C,BID_HB ; SOURCE BANK IS OUT BANK
|
||||
CALL HBXX_GETBNK
|
||||
LD B,A ; .. AND USE AS DEST BANK
|
||||
CALL HBXX_XCOPY ; SET COPY BANKS
|
||||
LD HL,SIMRTC_BUF ; SOURCE ADR
|
||||
POP DE ; DEST ADR
|
||||
LD BC,SIMRTC_BUFSIZ ; LENGTH
|
||||
CALL HBXX_COPY
|
||||
|
||||
; ; FILL IN DAY OF WEEK VIA ALGORITHM ASSUMING CENTURY IS 20XX
|
||||
; PUSH HL
|
||||
; LD A,(SIMRTC_YR)
|
||||
; CALL BCD2BIN
|
||||
; LD L,A ; YEAR VALUE
|
||||
; LD H,0 ; .. IN HL
|
||||
; LD DE,2000 ; ASSUME CENTURY IS 20XX
|
||||
; ADD HL,DE ; .. AND ADD IT IN TO THE YEAR VALUE IN HL
|
||||
; LD A,(SIMRTC_MO)
|
||||
; CALL BCD2BIN
|
||||
; LD D,A ; MONTH VALUE IN D
|
||||
; LD A,(SIMRTC_DT)
|
||||
; CALL BCD2BIN
|
||||
; LD E,A ; DATE VALUE IN E
|
||||
; CALL DOW
|
||||
; POP HL
|
||||
; LD (HL),A ; FILL IN THE FINAL VALUE
|
||||
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; AND RETURN
|
||||
;
|
||||
SIMRTC_GETTIM0:
|
||||
LD HL,SIMRTC_BUF
|
||||
LD A,SIMRTC_CLKREAD ; READ CLOCK COMMAND
|
||||
OUT (SIMRTC_IO),A ; SEND IT TO SIMH
|
||||
LD B,SIMRTC_BUFSIZ ; SETUP TO GET 6 BYTES
|
||||
LD C,SIMRTC_IO ; FROM SIMH PORT
|
||||
INIR ; GET BYTES TO (HL)
|
||||
RET
|
||||
|
||||
;
|
||||
; RTC SET TIME
|
||||
; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR
|
||||
; HL: DATE/TIME BUFFER (IN)
|
||||
; BUFFER FORMAT IS BCD: YYMMDDHHMMSSWW
|
||||
; 24 HOUR TIME FORMAT IS ASSUMED
|
||||
;
|
||||
SIMRTC_SETTIM:
|
||||
;
|
||||
; LD A,SIMRTC_CLKWRITE ; WRITE CLOCK COMMAND
|
||||
; OUT (SIMRTC_IO),A ; SEND COMMAND TO SIMH
|
||||
; LD A,L ; LOW BYTE OF BUFFER ADDRESS
|
||||
; OUT (SIMRTC_IO),A ; SEND IT
|
||||
; LD A,H ; HIGH BYTE OF BUFFER ADDRESS
|
||||
; OUT (SIMRTC_IO),A ; SEND IT
|
||||
;;
|
||||
; XOR A ; SIGNAL SUCCESS
|
||||
; RET ; AND RETURN
|
||||
|
||||
|
||||
;
|
||||
; COPY TO TEMP BUF
|
||||
CALL HBXX_GETBNK
|
||||
LD C,A ; .. AND USE AS SOURCE BANK
|
||||
LD B,BID_HB ; DESTINATION BANK
|
||||
CALL HBXX_XCOPY ; SET COPY BANKS
|
||||
LD DE,SIMRTC_BUF ; DEST ADR
|
||||
LD BC,SIMRTC_BUFSIZ ; LENGTH
|
||||
CALL HBXX_COPY ; DO THE COPY
|
||||
;
|
||||
LD HL,SIMRTC_BUF ; POINT TO TEMP BUF
|
||||
LD A,SIMRTC_CLKWRITE ; WRITE CLOCK COMMAND
|
||||
OUT (SIMRTC_IO),A ; SEND COMMAND TO SIMH
|
||||
LD A,L ; LOW BYTE OF BUFFER ADDRESS
|
||||
OUT (SIMRTC_IO),A ; SEND IT
|
||||
LD A,H ; HIGH BYTE OF BUFFER ADDRESS
|
||||
OUT (SIMRTC_IO),A ; SEND IT
|
||||
;
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; AND RETURN
|
||||
;
|
||||
; WORKING VARIABLES
|
||||
;
|
||||
SIMRTC_BUF: ; ALL IN BCD!!!
|
||||
SIMRTC_YR .DB 0
|
||||
SIMRTC_MO .DB 0
|
||||
SIMRTC_DT .DB 0
|
||||
SIMRTC_HH .DB 0
|
||||
SIMRTC_MM .DB 0
|
||||
SIMRTC_SS .DB 0
|
||||
Reference in New Issue
Block a user