Browse Source

Implement HBIOS Reset Function

pull/3/head
Wayne Warthen 10 years ago
parent
commit
31f5388f9e
  1. 4
      Source/CBIOS/cbios.asm
  2. 3
      Source/HBIOS/API.txt
  3. 27
      Source/HBIOS/hbios.asm
  4. 5
      Source/HBIOS/hbios.inc

4
Source/CBIOS/cbios.asm

@ -1844,6 +1844,10 @@ INIT:
LD (8),A ; STORE AT 0x0008 LD (8),A ; STORE AT 0x0008
LD HL,($FFF1) ; HBIOS ENTRY VECTOR LD HL,($FFF1) ; HBIOS ENTRY VECTOR
LD (9),HL ; STORE AT 0x0009 LD (9),HL ; STORE AT 0x0009
; SOFT REST HBIOS
LD B,BF_SYSRESET ; HB FUNC: RESET
RST 08 ; DO IT
; CREATE A TEMP COPY OF THE HBIOS CONFIG BLOCK (HCB) ; CREATE A TEMP COPY OF THE HBIOS CONFIG BLOCK (HCB)
; FOR REFERENCE USE DURING INIT ; FOR REFERENCE USE DURING INIT

3
Source/HBIOS/API.txt

@ -91,6 +91,9 @@ POKE: ($FA):
E=Byte Value E=Byte Value
HL=Address HL=Address
RESET: ($FF):
B=Function A=Result
================ ================
Serial Functions Serial Functions
================ ================

27
Source/HBIOS/hbios.asm

@ -561,6 +561,13 @@ INITSYS1:
POP DE POP DE
DJNZ INITSYS1 DJNZ INITSYS1
; ;
; RECORD HEAP CURB AT THE CURRENT VALUE OF HEAP TOP. HEAP CURB
; MARKS THE POINT IN THE HEAP AFTER WHICH MEMORY IS RELEASED
; WHEN AN HBIOS RESET IS PEFORMED.
;
LD HL,(HCB + HCB_HEAPTOP)
LD (HEAPCURB),HL
;
; PRIOR TO THIS POINT, CONSOLE I/O WAS DIRECTED TO HARDWARE (XIO.ASM). ; PRIOR TO THIS POINT, CONSOLE I/O WAS DIRECTED TO HARDWARE (XIO.ASM).
; NOW THAT HBIOS IS READY, SET THE CONSOLE UNIT TO ACTIVATE CONSOLE I/O ; NOW THAT HBIOS IS READY, SET THE CONSOLE UNIT TO ACTIVATE CONSOLE I/O
; VIA HBIOS. ; VIA HBIOS.
@ -1160,6 +1167,16 @@ SYS_DISPATCH:
JP Z,SYS_PEEK ; $F9 JP Z,SYS_PEEK ; $F9
DEC A DEC A
JP Z,SYS_POKE ; $FA JP Z,SYS_POKE ; $FA
DEC A
;JP Z,SYS_ ; $FB
DEC A
;JP Z,SYS_ ; $FC
DEC A
;JP Z,SYS_ ; $FD
DEC A
;JP Z,SYS_ ; $FE
DEC A
JP Z,SYS_RESET ; $FF
CALL PANIC ; INVALID CALL PANIC ; INVALID
; ;
; SET ACTIVE MEMORY BANK AND RETURN PREVIOUSLY ACTIVE MEMORY BANK ; SET ACTIVE MEMORY BANK AND RETURN PREVIOUSLY ACTIVE MEMORY BANK
@ -1417,6 +1434,14 @@ SYS_POKE:
CALL HBX_POKE ; IMPLEMENTED IN PROXY CALL HBX_POKE ; IMPLEMENTED IN PROXY
XOR A XOR A
RET RET
;
; SOFT RESET HBIOS, RELEASE HEAP MEMORY NOT USED BY HBIOS
;
SYS_RESET:
LD HL,(HEAPCURB) ; GET HBIOS HEAP THRESHOLD
LD (HCB + HCB_HEAPTOP),HL ; RESTORE HEAP TOP
XOR A
RET
;; ;;
;; GET HCB VALUE BYTE ;; GET HCB VALUE BYTE
;; C: HCB INDEX (OFFSET INTO HCB) ;; C: HCB INDEX (OFFSET INTO HCB)
@ -2594,6 +2619,8 @@ HSTLBAHI .EQU $ ; BLOCK ADDRESS LBA HIGH WORD
HSTSEC .DB 0 ; SECTOR (0-255) HSTSEC .DB 0 ; SECTOR (0-255)
HSTHEAD .DB 0 ; HEAD (0-255) HSTHEAD .DB 0 ; HEAD (0-255)
; ;
HEAPCURB .DW 0 ; MARK HEAP ADDRESS AFTER INITIALIZATION
;
HB_INTSTKSAV .DW 0 ; SAVED STACK POINTER DURING INT PROCESSING HB_INTSTKSAV .DW 0 ; SAVED STACK POINTER DURING INT PROCESSING
.FILL $40,$FF ; 32 ENTRY STACK FOR INTERRUPT PROCESSING .FILL $40,$FF ; 32 ENTRY STACK FOR INTERRUPT PROCESSING
HB_INTSTK .EQU $ ; TOP OF INTERRUPT PROCESSING STACK HB_INTSTK .EQU $ ; TOP OF INTERRUPT PROCESSING STACK

5
Source/HBIOS/hbios.inc

@ -62,8 +62,9 @@ BF_SYSFREE .EQU BF_SYS + 5 ; FREE HBIOS HEAP MEMORY
BF_SYSVER .EQU BF_SYS + 6 ; GET HBIOS VERSION BF_SYSVER .EQU BF_SYS + 6 ; GET HBIOS VERSION
BF_SYSGET .EQU BF_SYS + 7 ; GET HBIOS INFO BF_SYSGET .EQU BF_SYS + 7 ; GET HBIOS INFO
BF_SYSSET .EQU BF_SYS + 8 ; SET HBIOS PARAMETERS BF_SYSSET .EQU BF_SYS + 8 ; SET HBIOS PARAMETERS
BF_PEEK .EQU BF_SYS + 9 ; GET A BYTE VALUE FROM ALT BANK
BF_POKE .EQU BF_SYS + 10 ; SET A BYTE VALUE IN ALT BANK
BF_SYSPEEK .EQU BF_SYS + 9 ; GET A BYTE VALUE FROM ALT BANK
BF_SYSPOKE .EQU BF_SYS + 10 ; SET A BYTE VALUE IN ALT BANK
BF_SYSRESET .EQU BF_SYS + 15 ; SOFT RESET HBIOS
; ;
BF_SYSGET_CIOCNT .EQU $00 ; GET CHAR UNIT COUNT BF_SYSGET_CIOCNT .EQU $00 ; GET CHAR UNIT COUNT
BF_SYSGET_DIOCNT .EQU $10 ; GET DISK UNIT COUNT BF_SYSGET_DIOCNT .EQU $10 ; GET DISK UNIT COUNT

Loading…
Cancel
Save