Browse Source

Preliminary DS1210 batter low code

Battery state currently not being saved and recalled correctly
pull/42/head
b1ackmai1er 7 years ago
parent
commit
f323246d4f
  1. 23
      Source/HBIOS/dsrtc.asm
  2. 55
      Source/HBIOS/hbios.asm

23
Source/HBIOS/dsrtc.asm

@ -122,6 +122,9 @@ DSRTC_IDLE .EQU %00101000 ; QUIESCENT STATE
; ;
DSRTC_BUFSIZ .EQU 7 ; 7 BYTE BUFFER (YYMMDDHHMMSSWW) DSRTC_BUFSIZ .EQU 7 ; 7 BYTE BUFFER (YYMMDDHHMMSSWW)
; ;
;DSBATCOND DB 0 ; BATTERY STATE DETECTED AND SAVED AT BOOT
;
;
; RTC DEVICE INITIALIZATION ENTRY ; RTC DEVICE INITIALIZATION ENTRY
; ;
DSRTC_INIT: DSRTC_INIT:
@ -181,16 +184,28 @@ DSRTC_INIT1:
CALL DSRTC_END ; FINISH CMD CALL DSRTC_END ; FINISH CMD
#ENDIF #ENDIF
PRTS(" CHARGE=$")
CALL DSRTC_TSTCHG
JR NZ,NOCHG1
PRTS(" CHARGE=$") ; DISPLAY
CALL DSRTC_TSTCHG ; CHARGING
JR NZ,NOCHG1 ; STATUS
PRTS("ON$") PRTS("ON$")
JR NOCHG2
JR NOCHG2
NOCHG1: NOCHG1:
PRTS("OFF$") PRTS("OFF$")
NOCHG2: NOCHG2:
LD A,(DSBATCOND) ; DISPLAY
CP 0E5H
CALL Z,EE55
OR A ; BATTERY
JR NZ,DSBATOK ; CONDITION
PRTS(" BATTERY LOW$")
DSBATOK:
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET RET
EE55:
PRTS(" DEBUG $")
RET
; ;
; RTC DEVICE FUNCTION DISPATCH ENTRY ; RTC DEVICE FUNCTION DISPATCH ENTRY
; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR ; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR

55
Source/HBIOS/hbios.asm

@ -431,7 +431,7 @@ HBX_BC_ITER:
; CALL A ROUTINE IN ANOTHER BANK. ; CALL A ROUTINE IN ANOTHER BANK.
; CALLER MUST ENSURE STACK IS ALREADY IN HIGH MEMORY AND HAS ADEQUATE SPACE. ; CALLER MUST ENSURE STACK IS ALREADY IN HIGH MEMORY AND HAS ADEQUATE SPACE.
; IF IM1 INTERRUPTS ARE POSSIBLE, CALLER MUST EITHER DISABLE THEM PRIOR TO ; IF IM1 INTERRUPTS ARE POSSIBLE, CALLER MUST EITHER DISABLE THEM PRIOR TO
; BNKCALL OR MAKE SURE THAT PAGE ZERO IN TARGTET BANK IS PREPARED FOR THEM.
; BNKCALL OR MAKE SURE THAT PAGE ZERO IN TARGET BANK IS PREPARED FOR THEM.
; ON INPUT A=TARGET BANK, HL=TARGET ADDRESS ; ON INPUT A=TARGET BANK, HL=TARGET ADDRESS
; ;
HBX_BNKCALL: HBX_BNKCALL:
@ -840,33 +840,35 @@ HB_START:
; ;
DIAG(%00000011) DIAG(%00000011)
; ;
; INSTALL PROXY IN UPPER MEMORY
; CHECK BATTERY BACKUP STATUS BEFORE WE COPY PROXY TO UPPER MEMORY
; ;
; IF A DS1210 POWER CONTROLLER IS INSTALLED AND BATTERY BACKUP IS NOT INSTALLED
; OR IS LESS THAN 2V THEN THE DS1210 WILL BLOCK THE SECOND RAM ACCESS.
; FAILURE TO COMPLETE TWO RAM ACCESSES BEFORE INSTALLING PROXY WILL RESULT
; IN THE ROM ID BYTES NOT BEING COPIED CORRECTLY AND CP/M APPLICATIONS
; WILL NOT START CORRECTLY WHEN THEY CHECK THE ROM ID VERSION BYTES.
;X1 .EQU $8000
;X2 .EQU X1 + 2
;X3 .EQU X2 + 2
;X4 .EQU X3 + 2
; LD HL,(HBX_IMG)
; LD (X1),HL
; LD HL,(HBX_IMG)
; LD (X2),HL
LD DE,HBX_LOC ; IF A DS1210 POWER CONTROLLER IS INSTALLED AND BATTERY BACKUP IS NOT
LD A,(DE) ; INSTALLED OR IS LESS THAN 2V THEN THE DS1210 WILL BLOCK THE SECOND RAM
LD A,(DE) ; ACCESS. PERFORM TWO DUMMY READS TO RAM TO ENSURE WE BYPASS THIS FEATURE
LD HL,HBX_IMG ; SO THAT THE ROM ID BYTES ARE COPIED CORRECTLY AND CP/M APPLICATIONS
LD BC,HBX_SIZ ; START CORRECTLY WHEN THEY CHECK THE ROM ID VERSION BYTES.
LD DE,HBX_LOC ; RAM LOCATION FOR TEST
LD A,(DE) ; RAM ACCESS 1
LD B,A ; SAVE FOR COMPARISON
CPL ; AND RESTORATION
LD (DE),A ; RAM ACCESS 2
LD A,(DE) ; RAM ACCESS 3
SUB B ; A = 0 IF LOW BATTERY
LD A,0E5H ; DEBUG
PUSH AF ; SAVE FOR DSRTC DRIVER
; WE SAVE THIS PROPERLY
; WHEN WE ARE EXECUTING
; IN RAM.
LD A,B
LD (DE),A ; RESTORE TEST LOCATION
;
; INSTALL PROXY IN UPPER MEMORY
;
; LD DE,HBX_LOC
LD HL,HBX_IMG
LD BC,HBX_SIZ
LDIR LDIR
; LD HL,(HBX_IMG)
; LD (X3),HL
; LD HL,(HBX_LOC)
; LD (X4),HL
; ;
; IF ALREADY EXECUTING IN RAM, BYPASS RAM BANK INSTALLATION ; IF ALREADY EXECUTING IN RAM, BYPASS RAM BANK INSTALLATION
; ;
@ -900,6 +902,8 @@ HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK
; ;
DIAG(%00000111) DIAG(%00000111)
; ;
POP AF ; RECALL BATTERY STATE AND SAVE
LD (DSBATCOND),A ; IN RAM ACCESSIBLE BY DSRTC DRIVER
LD SP,HBX_LOC ; RESET STACK SINCE WE DO NOT RETURN LD SP,HBX_LOC ; RESET STACK SINCE WE DO NOT RETURN
LD A,TRUE ; ACCUM := TRUE LD A,TRUE ; ACCUM := TRUE
LD (HB_RAMFLAG),A ; SET RAMFLAG LD (HB_RAMFLAG),A ; SET RAMFLAG
@ -3766,6 +3770,7 @@ HB_TICKS .FILL 4,0 ; 32 BIT TICK COUNTER
HB_CPUTYPE .DB 0 ; 0=Z80, 1=80180, 2=SL1960, 3=ASCI BRG HB_CPUTYPE .DB 0 ; 0=Z80, 1=80180, 2=SL1960, 3=ASCI BRG
; ;
RTCVAL .DB 0 ; SHADOW VALUE FOR RTC LATCH PORT RTCVAL .DB 0 ; SHADOW VALUE FOR RTC LATCH PORT
DSBATCOND .DB 0 ; BATTERY CONDITION FLAG. 0 = LOW
; ;
STR_BANNER .DB "RetroBrew HBIOS v", BIOSVER, ", ", TIMESTAMP, "$" STR_BANNER .DB "RetroBrew HBIOS v", BIOSVER, ", ", TIMESTAMP, "$"
STR_PLATFORM .DB PLATFORM_NAME, "$" STR_PLATFORM .DB PLATFORM_NAME, "$"

Loading…
Cancel
Save