Browse Source

Merge pull request #42 from b1ackmai1er/master

DS1210 Battery Low message on boot
pull/48/head
Wayne Warthen 7 years ago
committed by GitHub
parent
commit
8a5ff459a7
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 15
      Source/HBIOS/dsrtc.asm
  2. 65
      Source/HBIOS/hbios.asm
  3. 2
      Source/HBIOS/pio.asm

15
Source/HBIOS/dsrtc.asm

@ -121,6 +121,7 @@ DSRTC_IDLE .EQU %00101000 ; QUIESCENT STATE
#ENDIF
;
DSRTC_BUFSIZ .EQU 7 ; 7 BYTE BUFFER (YYMMDDHHMMSSWW)
DSBATCOND .DB 0 ; BATTERY STATE DETECTED AND SAVED AT BOOT 0=LOW
;
; RTC DEVICE INITIALIZATION ENTRY
;
@ -181,14 +182,20 @@ DSRTC_INIT1:
CALL DSRTC_END ; FINISH CMD
#ENDIF
PRTS(" CHARGE=$")
CALL DSRTC_TSTCHG
JR NZ,NOCHG1
PRTS(" CHARGE=$") ; DISPLAY
CALL DSRTC_TSTCHG ; CHARGING
JR NZ,NOCHG1 ; STATUS
PRTS("ON$")
JR NOCHG2
JR NOCHG2
NOCHG1:
PRTS("OFF$")
NOCHG2:
LD A,(DSBATCOND) ; DISPLAY
OR A ; BATTERY
JR NZ,DSBATOK ; CONDITION
PRTS(" BATTERY LOW$")
DSBATOK:
XOR A ; SIGNAL SUCCESS
RET
;

65
Source/HBIOS/hbios.asm

@ -431,7 +431,7 @@ HBX_BC_ITER:
; CALL A ROUTINE IN ANOTHER BANK.
; 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
; 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
;
HBX_BNKCALL:
@ -840,39 +840,40 @@ HB_START:
;
DIAG(%00000011)
;
; 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.
;
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
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
;
;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 ; AS PER ABOVE
LD HL,HBX_IMG
LD BC,HBX_SIZ
LDIR
; LD HL,(HBX_IMG)
; LD (X3),HL
; LD HL,(HBX_LOC)
; LD (X4),HL
;
; IF ALREADY EXECUTING IN RAM, BYPASS RAM BANK INSTALLATION
;
LD A,(HB_RAMFLAG)
OR A
JR NZ,HB_START1
JR NZ,HB_START2
;
; INSTALL HBIOS IN RAM BANK
;
@ -900,6 +901,14 @@ HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK
;
DIAG(%00000111)
;
POP AF ; CLEAR THE
POP AF ; LEFTOVER STACK
POP AF ; FROM HBX_BANKCALL
HB_START2:
#IF DSRTCENABLE
POP AF ; RECALL BATTERY STATE AND SAVE
LD (DSBATCOND),A ; IN RAM ACCESSIBLE BY DSRTC DRIVER
#ENDIF
LD SP,HBX_LOC ; RESET STACK SINCE WE DO NOT RETURN
LD A,TRUE ; ACCUM := TRUE
LD (HB_RAMFLAG),A ; SET RAMFLAG
@ -1567,7 +1576,7 @@ PC_INITTBLLEN .EQU (($ - PC_INITTBL) / 2)
;==================================================================================================
;
HB_INITTBL:
#IF (SPKENABLE)
#IF (SPKENABLE & DSRTCENABLE)
.DW SPK_INIT ; AUDIBLE INDICATOR OF BOOT START
#ENDIF
#IF (AYENABLE)
@ -2799,7 +2808,7 @@ SIZ_TERM .EQU $ - ORG_TERM
.ECHO " bytes.\n"
#ENDIF
;
#IF (SPKENABLE)
#IF (SPKENABLE & DSRTCENABLE)
ORG_SPK .EQU $
#INCLUDE "spk.asm"
SIZ_SPK .EQU $ - ORG_SPK

2
Source/HBIOS/pio.asm

@ -370,7 +370,7 @@ SETPIOR:LD HL,INT_ALLOC ; INCREASE THE COUNT
; SETUP PIO INTERRUPT VECTOR IN IVT
LD HL,HBX_IV09+1
CALL SPK_BEEP
; CALL SPK_BEEP
;
SETPIO6:RET

Loading…
Cancel
Save