|
|
|
@ -2958,13 +2958,16 @@ SYS_RESCOLD: |
|
|
|
; HOOK CALLED WHEN A USERLAND RESET IS INVOKED, TYPICALLY VIA A JUMP |
|
|
|
; TO LOGICAL CPU ADDRESS $0000 |
|
|
|
; |
|
|
|
; CREDIT TO PHILLIP STEVENS FOR SUGGESTING AND SIGNIFICANT CONTRIBUTIONS |
|
|
|
; TO THE Z180 INVALID OPCODE TRAP ENHANCEMENT. |
|
|
|
; |
|
|
|
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 |
|
|
|
XOR $80 ; PRECLEAR TRAP BIT |
|
|
|
RET M ; IF TRAP BIT NOT SET, DONE |
|
|
|
; |
|
|
|
; HANDLE INVALID OPCODE |
|
|
|
DEC HL ; BACK UP TO OPCODE START |
|
|
|
@ -2977,8 +2980,8 @@ SYS_RESUSER1: |
|
|
|
OUT0 (Z180_ITC),A ; SAVE IT |
|
|
|
; |
|
|
|
CALL PRTSTRD ; PRINT ERROR TAG |
|
|
|
.TEXT "\r\n\r\n+++ BAD OPCODE @$" |
|
|
|
CALL PRTHEXWORDHL ; PRINT ADDRESS |
|
|
|
.TEXT "\r\n\r\n+++ INVALID Z180 OPCODE @$" |
|
|
|
CALL PRTHEXWORDHL ; PRINT OPCODE ADDRESS |
|
|
|
PRTS("H:$") ; FORMATTING |
|
|
|
; |
|
|
|
LD B,8 ; SHOW 8 BYTES |
|
|
|
@ -2995,20 +2998,9 @@ SYS_RESUSER2: |
|
|
|
POP BC ; RECOVER BC |
|
|
|
INC HL ; NEXT BYTE |
|
|
|
DJNZ SYS_RESUSER2 ; LOOP TIL DONE |
|
|
|
CALL NEWLINE ; FORMATTING |
|
|
|
JP NEWLINE ; FORMATTING & EXIT |
|
|
|
; |
|
|
|
#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 |
|
|
|
; |
|
|
|
|