mirror of https://github.com/wwarthen/RomWBW.git
53 changed files with 2051 additions and 1370 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
@ -0,0 +1,230 @@ |
|||
; |
|||
;================================================================================================== |
|||
; SYSTEM TIMER BASED CLOCK DRIVER |
|||
;================================================================================================== |
|||
; |
|||
TIMRTC_BUFSIZ .EQU 6 ; SIX BYTE BUFFER (YYMMDDHHMMSS) |
|||
; |
|||
; RTC DEVICE INITIALIZATION ENTRY |
|||
; |
|||
TIMRTC_INIT: |
|||
CALL NEWLINE ; FORMATTING |
|||
PRTS("TIMRTC: $") |
|||
; |
|||
; HOOK THE HBIOS SECONDS VECTOR |
|||
LD HL,(VEC_SECOND+1) ; GET CUR SECONDS VECTOR |
|||
LD (TIMRTC_VEC),HL ; SAVE IT INTERNALLY |
|||
LD HL,TIMRTC_INT ; OUR SECONDS INT ENTRY |
|||
LD (VEC_SECOND+1),HL ; REPLACE IT |
|||
; |
|||
; DISPLAY CURRENT TIME |
|||
CALL TIMRTC_GETTIM0 |
|||
LD HL,TIMRTC_BCDBUF ; POINT TO BCD BUF |
|||
CALL PRTDT |
|||
; |
|||
XOR A ; SIGNAL SUCCESS |
|||
RET |
|||
; |
|||
; RTC DEVICE FUNCTION DISPATCH ENTRY |
|||
; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR |
|||
; B: FUNCTION (IN) |
|||
; |
|||
TIMRTC_DISPATCH: |
|||
LD A,B ; GET REQUESTED FUNCTION |
|||
AND $0F ; ISOLATE SUB-FUNCTION |
|||
JP Z,TIMRTC_GETTIM ; GET TIME |
|||
DEC A |
|||
JP Z,TIMRTC_SETTIM ; SET TIME |
|||
DEC A |
|||
JP Z,TIMRTC_GETBYT ; GET NVRAM BYTE VALUE |
|||
DEC A |
|||
JP Z,TIMRTC_SETBYT ; SET NVRAM BYTE VALUE |
|||
DEC A |
|||
JP Z,TIMRTC_GETBLK ; GET NVRAM DATA BLOCK VALUES |
|||
DEC A |
|||
JP Z,TIMRTC_SETBLK ; SET NVRAM DATA BLOCK VALUES |
|||
CALL PANIC |
|||
; |
|||
; NVRAM FUNCTIONS ARE NOT AVAILABLE IN SIMULATOR |
|||
; |
|||
TIMRTC_GETBYT: |
|||
TIMRTC_SETBYT: |
|||
TIMRTC_GETBLK: |
|||
TIMRTC_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 |
|||
; |
|||
TIMRTC_GETTIM: |
|||
; GET THE TIME INTO TEMP BUF |
|||
PUSH HL ; SAVE PTR TO CALLERS BUFFER |
|||
CALL TIMRTC_GETTIM0 ; GET TIME TO WORK BUFFER |
|||
; |
|||
; NOW COPY TO REAL DESTINATION (INTERBANK SAFE) |
|||
LD A,BID_BIOS ; COPY FROM BIOS BANK |
|||
LD (HB_SRCBNK),A ; SET IT |
|||
LD A,(HB_INVBNK) ; COPY TO CURRENT USER BANK |
|||
LD (HB_DSTBNK),A ; SET IT |
|||
LD HL,TIMRTC_BCDBUF ; SOURCE ADR |
|||
POP DE ; DEST ADR |
|||
LD BC,TIMRTC_BUFSIZ ; LENGTH |
|||
CALL HB_BNKCPY ; COPY THE CLOCK DATA |
|||
; |
|||
LD DE,60 ; DELAY 60 * 16US = ~1MS |
|||
CALL VDELAY ; SLOW DOWN SIMH FOR CLOCK TICKING TEST |
|||
XOR A ; SIGNAL SUCCESS |
|||
RET ; AND RETURN |
|||
; |
|||
TIMRTC_GETTIM0: |
|||
LD HL,TIMRTC_BINBUF ; FROM BINARY BUFFER |
|||
LD DE,TIMRTC_BCDBUF ; TO BCD BUFFER |
|||
HB_DI |
|||
CALL TIMRTC_BIN2BCD ; COPY AND CONVERT |
|||
HB_EI |
|||
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 |
|||
; |
|||
TIMRTC_SETTIM: |
|||
; COPY TO BCD BUF |
|||
LD A,(HB_INVBNK) ; COPY FROM CURRENT USER BANK |
|||
LD (HB_SRCBNK),A ; SET IT |
|||
LD A,BID_BIOS ; COPY TO BIOS BANK |
|||
LD (HB_DSTBNK),A ; SET IT |
|||
LD DE,TIMRTC_BCDBUF ; DEST ADR |
|||
LD BC,TIMRTC_BUFSIZ ; LENGTH |
|||
CALL HB_BNKCPY ; COPY THE CLOCK DATA |
|||
; |
|||
LD HL,TIMRTC_BCDBUF ; FROM BCD BUF |
|||
LD DE,TIMRTC_BINBUF ; TO BIN BUF |
|||
HB_DI |
|||
CALL TIMRTC_BCD2BIN ; COPY AND CONVERT |
|||
HB_EI |
|||
; |
|||
XOR A ; SIGNAL SUCCESS |
|||
RET ; AND RETURN |
|||
; |
|||
; HANDLER FOR TIMER SECONDS INTERRUPT |
|||
; |
|||
TIMRTC_INT: |
|||
LD HL,TIMRTC_BINBUF + TIMRTC_BUFSIZ - 1 |
|||
INC (HL) ; INC SECONDS |
|||
LD A,59 ; MAX VALUE |
|||
CP (HL) ; OVERFLOW? |
|||
JR NC,TIMRTC_INTX ; NOPE, DONE |
|||
LD (HL),0 ; BACK TO ZERO |
|||
|
|||
DEC HL ; POINT TO MINUTES |
|||
INC (HL) ; INCREMENT MINUTE |
|||
CP (HL) ; OVERFLOW? |
|||
JR NC,TIMRTC_INTX ; NOPE, DONE |
|||
LD (HL),0 ; BACK TO ZERO |
|||
|
|||
DEC HL ; POINT TO HOURS |
|||
INC (HL) ; INCREMENT HOURS |
|||
LD A,23 ; MAX VALUE |
|||
CP (HL) ; OVERFLOW? |
|||
JR NC,TIMRTC_INTX ; NOPE, DONE |
|||
LD (HL),0 ; BACK TO ZERO |
|||
|
|||
DEC HL ; POINT TO DATE |
|||
LD A,(TIMRTC_MO) ; GET CURRENT MONTH |
|||
DEC A ; ZERO OFFSET |
|||
LD DE,TIMRTC_MONTBL ; POINT TO DAYS IN MON TBL |
|||
ADD A,E ; ADD OFFSET |
|||
LD E,A ; BACK TO E |
|||
JR NC,TIMRTC_INT1 ; NO CARRY, SKIP |
|||
INC D ; HANDLE CARRY |
|||
TIMRTC_INT1: |
|||
LD A,(DE) ; A := DAYS IN MONTH |
|||
LD C,A ; COPY TO C FOR LATER |
|||
LD A,(TIMRTC_MO) ; GET CURRENT MONTH |
|||
CP 2 ; FEBRUARY? |
|||
JR NZ,TIMRTC_INT2 ; IF NOT, NOT LEAY, SKIP |
|||
LD A,(TIMRTC_YR) ; GET CURRENT YEAR |
|||
AND $03 ; CHECK FOR LEAP |
|||
JR NZ,TIMRTC_INT2 ; IF NOT LEAP, SKIP AHEAD |
|||
INC C ; BUMP DAYS IN FEB FOR LEAP |
|||
TIMRTC_INT2: |
|||
INC (HL) ; INCREMENT DATE |
|||
LD A,C ; A := TRUE DAYS IN MONTH + 1 |
|||
CP (HL) ; OVERFLOW? |
|||
JR NZ,TIMRTC_INTX ; NOPE, DONE |
|||
LD (HL),1 ; BACK TO DAY ONE |
|||
|
|||
DEC HL ; POINT TO MONTH |
|||
INC (HL) ; INCREMENT MONTH |
|||
LD A,13 ; PAST MAX? |
|||
CP (HL) ; OVERFLOW? |
|||
JR NZ,TIMRTC_INTX ; NOPE, DONE |
|||
LD (HL),1 ; BACK TO MONTH ONE |
|||
|
|||
DEC HL ; POINT TO YEAR |
|||
INC (HL) ; INCREMENT YEAR |
|||
LD A,100 ; PAST MAX? |
|||
CP (HL) ; OVERFLOW? |
|||
JR NZ,TIMRTC_INTX ; NOPE, DONE |
|||
LD (HL),0 ; BACK TO YEAR ZERO |
|||
TIMRTC_INTX: |
|||
JP PANIC |
|||
TIMRTC_VEC .EQU $-2 |
|||
; |
|||
; CONVERT FROM BINARY BUF (HL) TO BCD BUF (DE) |
|||
; |
|||
TIMRTC_BIN2BCD: |
|||
LD B,TIMRTC_BUFSIZ |
|||
TIMRTC_BIN2BCD1: |
|||
LD A,(HL) |
|||
CALL BYTE2BCD |
|||
LD (DE),A |
|||
INC HL |
|||
INC DE |
|||
DJNZ TIMRTC_BIN2BCD1 |
|||
RET |
|||
; |
|||
; CONVERT FROM BCD BUF (HL) TO BINARY BUF (DE) |
|||
; |
|||
TIMRTC_BCD2BIN |
|||
LD B,TIMRTC_BUFSIZ |
|||
TIMRTC_BCD2BIN1: |
|||
LD A,(HL) |
|||
CALL BCD2BYTE |
|||
LD (DE),A |
|||
INC HL |
|||
INC DE |
|||
DJNZ TIMRTC_BCD2BIN1 |
|||
RET |
|||
; |
|||
; WORKING VARIABLES |
|||
; |
|||
TIMRTC_BINBUF: ; ALL IN BINARY |
|||
TIMRTC_YR .DB 20 |
|||
TIMRTC_MO .DB 01 |
|||
TIMRTC_DT .DB 01 |
|||
TIMRTC_HH .DB 00 |
|||
TIMRTC_MM .DB 00 |
|||
TIMRTC_SS .DB 00 |
|||
; |
|||
TIMRTC_BCDBUF .FILL TIMRTC_BUFSIZ |
|||
; |
|||
TIMRTC_MONTBL: ; DAYS IN MONTH + 1 |
|||
.DB 32 ; JANUARY |
|||
.DB 29 ; FEBRUARY (NON-LEAP) |
|||
.DB 32 ; MARCH |
|||
.DB 31 ; APRIL |
|||
.DB 32 ; MAY |
|||
.DB 31 ; JUNE |
|||
.DB 32 ; JULY |
|||
.DB 32 ; AUGUST |
|||
.DB 31 ; SEPTEMBER |
|||
.DB 32 ; OCTOBER |
|||
.DB 31 ; NOVEMBER |
|||
.DB 32 ; DECEMBER |
|||
@ -1,5 +1,5 @@ |
|||
#DEFINE RMJ 3 |
|||
#DEFINE RMN 0 |
|||
#DEFINE RUP 1 |
|||
#DEFINE RMN 1 |
|||
#DEFINE RUP 0 |
|||
#DEFINE RTP 0 |
|||
#DEFINE BIOSVER "3.0.1" |
|||
#DEFINE BIOSVER "3.1-pre.0" |
|||
|
|||
@ -1,7 +1,7 @@ |
|||
rmj equ 3 |
|||
rmn equ 0 |
|||
rup equ 1 |
|||
rmn equ 1 |
|||
rup equ 0 |
|||
rtp equ 0 |
|||
biosver macro |
|||
db "3.0.1" |
|||
db "3.1-pre.0" |
|||
endm |
|||
|
|||
Loading…
Reference in new issue