|
|
@ -201,7 +201,7 @@ RTCDEF .EQU 0 ; ALLOWS DRIVERS TO SET BITS |
|
|
#IF (INTMODE == 1) |
|
|
#IF (INTMODE == 1) |
|
|
JP INT_IM1 ; JP TO INTERRUPT HANDLER IN HI MEM |
|
|
JP INT_IM1 ; JP TO INTERRUPT HANDLER IN HI MEM |
|
|
#ELSE |
|
|
#ELSE |
|
|
RETI ; RETURN W/ INTS DISABLED |
|
|
|
|
|
|
|
|
RET ; RETURN W/ INTS DISABLED |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
.FILL (066H - $),0FFH ; NMI |
|
|
.FILL (066H - $),0FFH ; NMI |
|
|
RETN |
|
|
RETN |
|
|
@ -2908,6 +2908,8 @@ SYS_RESET: |
|
|
JR Z,SYS_RESWARM |
|
|
JR Z,SYS_RESWARM |
|
|
CP BF_SYSRES_COLD |
|
|
CP BF_SYSRES_COLD |
|
|
JR Z,SYS_RESCOLD |
|
|
JR Z,SYS_RESCOLD |
|
|
|
|
|
CP BF_SYSRES_USER |
|
|
|
|
|
JR Z,SYS_RESUSER |
|
|
CALL SYSCHK |
|
|
CALL SYSCHK |
|
|
LD A,ERR_NOFUNC |
|
|
LD A,ERR_NOFUNC |
|
|
OR A ; SIGNAL ERROR |
|
|
OR A ; SIGNAL ERROR |
|
|
@ -2916,8 +2918,15 @@ SYS_RESET: |
|
|
; SOFT RESET HBIOS, RELEASE HEAP MEMORY NOT USED BY HBIOS |
|
|
; SOFT RESET HBIOS, RELEASE HEAP MEMORY NOT USED BY HBIOS |
|
|
; |
|
|
; |
|
|
SYS_RESINT: |
|
|
SYS_RESINT: |
|
|
|
|
|
; |
|
|
|
|
|
; RESET THE HEAP |
|
|
LD HL,(HEAPCURB) ; GET HBIOS HEAP THRESHOLD |
|
|
LD HL,(HEAPCURB) ; GET HBIOS HEAP THRESHOLD |
|
|
LD (CB_HEAPTOP),HL ; RESTORE HEAP TOP |
|
|
LD (CB_HEAPTOP),HL ; RESTORE HEAP TOP |
|
|
|
|
|
; |
|
|
|
|
|
; MAKE SURE THE PROPER RESET VECTOR IS AT ADDRESS $0000 |
|
|
|
|
|
LD HL,$0040 ; USER RESET CODE STUB |
|
|
|
|
|
LD ($0001),HL ; OPERAND OF JP AT $0000 |
|
|
|
|
|
; |
|
|
XOR A |
|
|
XOR A |
|
|
RET |
|
|
RET |
|
|
; |
|
|
; |
|
|
@ -2946,6 +2955,63 @@ SYS_RESCOLD: |
|
|
LD IX,0 ; ADDRESS ZERO |
|
|
LD IX,0 ; ADDRESS ZERO |
|
|
CALL HB_BNKCALL ; DOES NOT RETURN |
|
|
CALL HB_BNKCALL ; DOES NOT RETURN |
|
|
; |
|
|
; |
|
|
|
|
|
; HOOK CALLED WHEN A USERLAND RESET IS INVOKED, TYPICALLY VIA A JUMP |
|
|
|
|
|
; TO LOGICAL CPU ADDRESS $0000 |
|
|
|
|
|
; |
|
|
|
|
|
SYS_RESUSER: |
|
|
|
|
|
; |
|
|
|
|
|
#IF (CPUFAM == CPU_Z180) |
|
|
|
|
|
; |
|
|
|
|
|
IN0 A,(Z180_ITC) ; GET ITC REGISTER |
|
|
|
|
|
BIT 7,A ; TRAP BIT SET? |
|
|
|
|
|
JR Z,SYS_RESUSER9 ; IF NOT, SKIP AHEAD |
|
|
|
|
|
; |
|
|
|
|
|
; HANDLE INVALID OPCODE |
|
|
|
|
|
DEC HL ; BACK UP TO OPCODE START |
|
|
|
|
|
BIT 6,A ; CHECK UFO BIT (2 BYTE OPCODE) |
|
|
|
|
|
JR Z,SYS_RESUSER1 ; IF NOT, ALL SET |
|
|
|
|
|
DEC HL ; OTHERWISE, BACK UP 1 MORE BYTE |
|
|
|
|
|
; |
|
|
|
|
|
SYS_RESUSER1: |
|
|
|
|
|
RES 7,A ; CLEAR THE TRAP BIT |
|
|
|
|
|
OUT0 (Z180_ITC),A ; SAVE IT |
|
|
|
|
|
; |
|
|
|
|
|
CALL PRTSTRD ; PRINT ERROR TAG |
|
|
|
|
|
.TEXT "\r\n\r\n+++ BAD OPCODE @$" |
|
|
|
|
|
CALL PRTHEXWORDHL ; PRINT ADDRESS |
|
|
|
|
|
PRTS("H:$") ; FORMATTING |
|
|
|
|
|
; |
|
|
|
|
|
LD B,8 ; SHOW 8 BYTES |
|
|
|
|
|
SYS_RESUSER2: |
|
|
|
|
|
PUSH BC ; SAVE BC |
|
|
|
|
|
PUSH HL ; SAVE HL |
|
|
|
|
|
LD A,(HB_INVBNK) ; GET BYTE FROM INVOKING BANK |
|
|
|
|
|
LD D,A ; PUT IN D |
|
|
|
|
|
CALL SYS_PEEK ; PEEK TO GET BYTE VALUE |
|
|
|
|
|
LD A,E ; PUT IN A |
|
|
|
|
|
CALL PC_SPACE ; FORMATTING |
|
|
|
|
|
CALL PRTHEXBYTE ; DISPLAY BYTE |
|
|
|
|
|
POP HL ; RECOVER HL |
|
|
|
|
|
POP BC ; RECOVER BC |
|
|
|
|
|
INC HL ; NEXT BYTE |
|
|
|
|
|
DJNZ SYS_RESUSER2 ; LOOP TIL DONE |
|
|
|
|
|
CALL NEWLINE ; FORMATTING |
|
|
|
|
|
; |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
; |
|
|
|
|
|
SYS_RESUSER9: |
|
|
|
|
|
;; NOTIFY USER |
|
|
|
|
|
;CALL PRTSTRD |
|
|
|
|
|
;.TEXT "\r\n*** USER RESET ***\r\n$" |
|
|
|
|
|
; |
|
|
|
|
|
;; EXIT VIA USER RESET VECTOR (IF SET) |
|
|
|
|
|
;LD HL,(HB_RESVEC) ; GET USER RESET VECTOR |
|
|
|
|
|
;LD A,H ; CHECK IF IT |
|
|
|
|
|
;OR L ; ... HAS BEEN SET |
|
|
|
|
|
;JP Z,SYS_RESWARM ; IF NOT, JUST WARM START |
|
|
|
|
|
; |
|
|
|
|
|
RET ; ELSE RETURN WITH USER RESET VECTOR IN HL |
|
|
|
|
|
; |
|
|
; GET THE CURRENT HBIOS VERSION |
|
|
; GET THE CURRENT HBIOS VERSION |
|
|
; ON INPUT, C=0 |
|
|
; ON INPUT, C=0 |
|
|
; RETURNS VERSION IN DE AS BCD |
|
|
; RETURNS VERSION IN DE AS BCD |
|
|
|