From 953dd700520f6a983e083f1284394038db1d3785 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Mon, 22 Feb 2021 18:49:31 -0800 Subject: [PATCH] Z180 Invalid Opcode Tweaks Thanks and credit to Phillip Stevens for his significant contributions to this enhancement. --- Doc/ChangeLog.txt | 2 ++ Source/HBIOS/hbios.asm | 24 ++++++++---------------- Source/ver.inc | 2 +- Source/ver.lib | 2 +- 4 files changed, 12 insertions(+), 18 deletions(-) diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index b33c735b..947ddb71 100644 --- a/Doc/ChangeLog.txt +++ b/Doc/ChangeLog.txt @@ -17,6 +17,8 @@ Version 3.1.1 - WBW: Support for Z280 w/ native memory and interrupt mode 3 - WBW: Support for Z280 UART (interrupt driven only in interrupt mode 3) - WBW: Add support Z80-512K (watchdog and LED) +- WBW: Add support for ZZ80MB address map +- PLS: Add support for Z180 invalid opcode trap Version 3.1 ----------- diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index c5bc7e68..3e7e7b2b 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -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 ; diff --git a/Source/ver.inc b/Source/ver.inc index 0874d9c4..8529eb98 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,4 +2,4 @@ #DEFINE RMN 1 #DEFINE RUP 1 #DEFINE RTP 0 -#DEFINE BIOSVER "3.1.1-pre.52" +#DEFINE BIOSVER "3.1.1-pre.53" diff --git a/Source/ver.lib b/Source/ver.lib index c0a496e9..9c610ce4 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 1 rup equ 1 rtp equ 0 biosver macro - db "3.1.1-pre.52" + db "3.1.1-pre.53" endm