419 lines
17 KiB
NASM
419 lines
17 KiB
NASM
;--------------------------------------------------------------------------------------------------------
|
|
;-
|
|
;- Name: rfs_mrom_opcd7.asm
|
|
;- Created: March 2026
|
|
;- Author(s): Philip Smart
|
|
;- Description: Z80 Opcode table (part 2: OTDR-END) and search routines for MROM bank 7.
|
|
;- This is used by the DASM/ASM tools in UROM banks 7 and 8 (picoZ80/RomDisk builds).
|
|
;- See rfs_mrom_opcd6.asm for full description.
|
|
;-
|
|
;- Search routines at FIXED addresses (same as MROM bank 6):
|
|
;- DSMFINDOPCD @ 0x0E80
|
|
;- ASMFINDINST @ 0x0F10
|
|
;- ASMFINDPARM @ 0x0F70
|
|
;-
|
|
;- Copyright: (c) 2018-2026 Philip Smart <philip.smart@net2net.org>
|
|
;-
|
|
;--------------------------------------------------------------------------------------------------------
|
|
;- This source file is free software: you can redistribute it and-or modify
|
|
;- it under the terms of the GNU General Public License as published
|
|
;- by the Free Software Foundation, either version 3 of the License, or
|
|
;- (at your option) any later version.
|
|
;-
|
|
;- This source file is distributed in the hope that it will be useful,
|
|
;- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
;- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
;- GNU General Public License for more details.
|
|
;-
|
|
;- You should have received a copy of the GNU General Public License
|
|
;- along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
;--------------------------------------------------------------------------------------------------------
|
|
|
|
INCLUDE "macros.asm"
|
|
|
|
;-----------------------------------------------
|
|
; Work RAM addresses (must match rfs_bank7.asm)
|
|
;-----------------------------------------------
|
|
INS_BUF: EQU 0CF1BH
|
|
PARM_BUF: EQU 0CF1FH
|
|
BLK_ADDR: EQU 0CF2FH
|
|
ROW_ADDR: EQU 0CF31H
|
|
BLK_NUM: EQU 0CF33H
|
|
BLK_SIZE: EQU 0CF34H
|
|
ROW_NUM: EQU 0CF35H
|
|
ML_BUF: EQU 0CF36H
|
|
ML_BTCOUNT: EQU 0CF38H
|
|
|
|
;-----------------------------------------------
|
|
; MROM Bank 7 - Opcode Table Part 2 (OTDR-END)
|
|
;-----------------------------------------------
|
|
ORG 00000H
|
|
|
|
; Safety: if this bank is accidentally executed, reset to default.
|
|
XOR A
|
|
LD (0EFFDh),A ; Select MROM bank 0
|
|
JP 00000H
|
|
|
|
; Pad to table start
|
|
ALIGN_NOPS 010H
|
|
|
|
;-------------------------------------------------------------------------------
|
|
; Z80 Assembler lookup table - PART 2 (OTDR through END)
|
|
;-------------------------------------------------------------------------------
|
|
OPCD_TABLE:
|
|
DB "#OTDR", 001H, 000H, 000H, 000H, 000H
|
|
DB " ", 0BBH, 0EDH, 002H
|
|
DB "#OTIR", 001H, 000H, 000H, 000H, 000H
|
|
DB " ", 0B3H, 0EDH, 002H
|
|
DB "#OUT ", 008H, 000H, 000H, 000H, 000H
|
|
DB "(C),A ", 079H, 0EDH, 002H
|
|
DB "(C),B ", 041H, 0EDH, 002H
|
|
DB "(C),C ", 049H, 0EDH, 002H
|
|
DB "(C),D ", 051H, 0EDH, 002H
|
|
DB "(C),E ", 059H, 0EDH, 002H
|
|
DB "(C),H ", 061H, 0EDH, 002H
|
|
DB "(C),L ", 069H, 0EDH, 002H
|
|
DB "(*),A ", 0D3H, 000H, 002H
|
|
DB "#OUT0", 007H, 000H, 000H, 000H, 000H
|
|
DB "(*),A ", 039H, 0EDH, 003H
|
|
DB "(*),B ", 001H, 0EDH, 003H
|
|
DB "(*),C ", 009H, 0EDH, 003H
|
|
DB "(*),D ", 011H, 0EDH, 003H
|
|
DB "(*),E ", 019H, 0EDH, 003H
|
|
DB "(*),H ", 021H, 0EDH, 003H
|
|
DB "(*),L ", 029H, 0EDH, 003H
|
|
DB "#OUTD", 001H, 000H, 000H, 000H, 000H
|
|
DB " ", 0ABH, 0EDH, 002H
|
|
DB "#OUTI", 001H, 000H, 000H, 000H, 000H
|
|
DB " ", 0A3H, 0EDH, 002H
|
|
DB "#POP ", 006H, 000H, 000H, 000H, 000H
|
|
DB "AF ", 0F1H, 000H, 001H
|
|
DB "BC ", 0C1H, 000H, 001H
|
|
DB "DE ", 0D1H, 000H, 001H
|
|
DB "HL ", 0E1H, 000H, 001H
|
|
DB "IX ", 0E1H, 0DDH, 002H
|
|
DB "IY ", 0E1H, 0FDH, 002H
|
|
DB "#PUSH", 006H, 000H, 000H, 000H, 000H
|
|
DB "AF ", 0F5H, 000H, 001H
|
|
DB "BC ", 0C5H, 000H, 001H
|
|
DB "DE ", 0D5H, 000H, 001H
|
|
DB "HL ", 0E5H, 000H, 001H
|
|
DB "IX ", 0E5H, 0DDH, 002H
|
|
DB "IY ", 0E5H, 0FDH, 002H
|
|
DB "#RES ", 008H, 000H, 000H, 000H, 000H
|
|
DB "*,(HL) ", 086H, 0CBH, 002H
|
|
DB "*,A ", 087H, 0CBH, 002H
|
|
DB "*,B ", 080H, 0CBH, 002H
|
|
DB "*,C ", 081H, 0CBH, 002H
|
|
DB "*,D ", 082H, 0CBH, 002H
|
|
DB "*,E ", 083H, 0CBH, 002H
|
|
DB "*,H ", 084H, 0CBH, 002H
|
|
DB "*,L ", 085H, 0CBH, 002H
|
|
DB "#RET ", 009H, 000H, 000H, 000H, 000H
|
|
DB " ", 0C9H, 000H, 001H
|
|
DB "C ", 0D8H, 000H, 001H
|
|
DB "M ", 0F8H, 000H, 001H
|
|
DB "NC ", 0D0H, 000H, 001H
|
|
DB "NZ ", 0C0H, 000H, 001H
|
|
DB "P ", 0F0H, 000H, 001H
|
|
DB "PE ", 0E8H, 000H, 001H
|
|
DB "PO ", 0E0H, 000H, 001H
|
|
DB "Z ", 0C8H, 000H, 001H
|
|
DB "#RETI", 001H, 000H, 000H, 000H, 000H
|
|
DB " ", 04DH, 0EDH, 002H
|
|
DB "#RETN", 001H, 000H, 000H, 000H, 000H
|
|
DB " ", 045H, 0EDH, 002H
|
|
DB "#RL ", 008H, 000H, 000H, 000H, 000H
|
|
DB "(HL) ", 016H, 0CBH, 002H
|
|
DB "A ", 017H, 0CBH, 002H
|
|
DB "B ", 010H, 0CBH, 002H
|
|
DB "C ", 011H, 0CBH, 002H
|
|
DB "D ", 012H, 0CBH, 002H
|
|
DB "E ", 013H, 0CBH, 002H
|
|
DB "H ", 014H, 0CBH, 002H
|
|
DB "L ", 015H, 0CBH, 002H
|
|
DB "#RLA ", 001H, 000H, 000H, 000H, 000H
|
|
DB " ", 017H, 000H, 001H
|
|
DB "#RLC ", 008H, 000H, 000H, 000H, 000H
|
|
DB "(HL) ", 006H, 0CBH, 002H
|
|
DB "A ", 007H, 0CBH, 002H
|
|
DB "B ", 000H, 0CBH, 002H
|
|
DB "C ", 001H, 0CBH, 002H
|
|
DB "D ", 002H, 0CBH, 002H
|
|
DB "E ", 003H, 0CBH, 002H
|
|
DB "H ", 004H, 0CBH, 002H
|
|
DB "L ", 005H, 0CBH, 002H
|
|
DB "#RLCA", 001H, 000H, 000H, 000H, 000H
|
|
DB " ", 007H, 000H, 001H
|
|
DB "#RLD ", 001H, 000H, 000H, 000H, 000H
|
|
DB " ", 06FH, 0EDH, 002H
|
|
DB "#RR ", 008H, 000H, 000H, 000H, 000H
|
|
DB "(HL) ", 01EH, 0CBH, 002H
|
|
DB "A ", 01FH, 0CBH, 002H
|
|
DB "B ", 018H, 0CBH, 002H
|
|
DB "C ", 019H, 0CBH, 002H
|
|
DB "D ", 01AH, 0CBH, 002H
|
|
DB "E ", 01BH, 0CBH, 002H
|
|
DB "H ", 01CH, 0CBH, 002H
|
|
DB "L ", 01DH, 0CBH, 002H
|
|
DB "#RRA ", 001H, 000H, 000H, 000H, 000H
|
|
DB " ", 01FH, 000H, 001H
|
|
DB "#RRC ", 008H, 000H, 000H, 000H, 000H
|
|
DB "(HL) ", 00EH, 0CBH, 002H
|
|
DB "A ", 00FH, 0CBH, 002H
|
|
DB "B ", 008H, 0CBH, 002H
|
|
DB "C ", 009H, 0CBH, 002H
|
|
DB "D ", 00AH, 0CBH, 002H
|
|
DB "E ", 00BH, 0CBH, 002H
|
|
DB "H ", 00CH, 0CBH, 002H
|
|
DB "L ", 00DH, 0CBH, 002H
|
|
DB "#RRCA", 001H, 000H, 000H, 000H, 000H
|
|
DB " ", 00FH, 000H, 001H
|
|
DB "#RRD ", 001H, 000H, 000H, 000H, 000H
|
|
DB " ", 067H, 0EDH, 002H
|
|
DB "#RST ", 008H, 000H, 000H, 000H, 000H
|
|
DB "00H ", 0C7H, 000H, 001H
|
|
DB "08H ", 0CFH, 000H, 001H
|
|
DB "10H ", 0D7H, 000H, 001H
|
|
DB "18H ", 0DFH, 000H, 001H
|
|
DB "20H ", 0E7H, 000H, 001H
|
|
DB "28H ", 0EFH, 000H, 001H
|
|
DB "30H ", 0F7H, 000H, 001H
|
|
DB "38H ", 0FFH, 000H, 001H
|
|
DB "#SBC ", 00FH, 000H, 000H, 000H, 000H
|
|
DB "A,(HL) ", 09EH, 000H, 001H
|
|
DB "A,(IX*)", 09EH, 0DDH, 003H
|
|
DB "A,(IY*)", 09EH, 0FDH, 003H
|
|
DB "A,A ", 09FH, 000H, 001H
|
|
DB "A,B ", 098H, 000H, 001H
|
|
DB "A,C ", 099H, 000H, 001H
|
|
DB "A,D ", 09AH, 000H, 001H
|
|
DB "A,E ", 09BH, 000H, 001H
|
|
DB "A,H ", 09CH, 000H, 001H
|
|
DB "A,L ", 09DH, 000H, 001H
|
|
DB "HL,BC ", 042H, 0EDH, 002H
|
|
DB "HL,DE ", 052H, 0EDH, 002H
|
|
DB "HL,HL ", 062H, 0EDH, 002H
|
|
DB "HL,SP ", 072H, 0EDH, 002H
|
|
DB "A,* ", 0DEH, 000H, 002H
|
|
DB "#SCF ", 001H, 000H, 000H, 000H, 000H
|
|
DB " ", 037H, 000H, 001H
|
|
DB "#SET ", 008H, 000H, 000H, 000H, 000H
|
|
DB "*,(HL) ", 0C6H, 0CBH, 002H
|
|
DB "*,A ", 0C7H, 0CBH, 002H
|
|
DB "*,B ", 0C0H, 0CBH, 002H
|
|
DB "*,C ", 0C1H, 0CBH, 002H
|
|
DB "*,D ", 0C2H, 0CBH, 002H
|
|
DB "*,E ", 0C3H, 0CBH, 002H
|
|
DB "*,H ", 0C4H, 0CBH, 002H
|
|
DB "*,L ", 0C5H, 0CBH, 002H
|
|
DB "#SLA ", 008H, 000H, 000H, 000H, 000H
|
|
DB "(HL) ", 026H, 0CBH, 002H
|
|
DB "A ", 027H, 0CBH, 002H
|
|
DB "B ", 020H, 0CBH, 002H
|
|
DB "C ", 021H, 0CBH, 002H
|
|
DB "D ", 022H, 0CBH, 002H
|
|
DB "E ", 023H, 0CBH, 002H
|
|
DB "H ", 024H, 0CBH, 002H
|
|
DB "L ", 025H, 0CBH, 002H
|
|
DB "#SRA ", 008H, 000H, 000H, 000H, 000H
|
|
DB "(HL) ", 02EH, 0CBH, 002H
|
|
DB "A ", 02FH, 0CBH, 002H
|
|
DB "B ", 028H, 0CBH, 002H
|
|
DB "C ", 029H, 0CBH, 002H
|
|
DB "D ", 02AH, 0CBH, 002H
|
|
DB "E ", 02BH, 0CBH, 002H
|
|
DB "H ", 02CH, 0CBH, 002H
|
|
DB "L ", 02DH, 0CBH, 002H
|
|
DB "#SRL ", 008H, 000H, 000H, 000H, 000H
|
|
DB "(HL) ", 03EH, 0CBH, 002H
|
|
DB "A ", 03FH, 0CBH, 002H
|
|
DB "B ", 038H, 0CBH, 002H
|
|
DB "C ", 039H, 0CBH, 002H
|
|
DB "D ", 03AH, 0CBH, 002H
|
|
DB "E ", 03BH, 0CBH, 002H
|
|
DB "H ", 03CH, 0CBH, 002H
|
|
DB "L ", 03DH, 0CBH, 002H
|
|
DB "#SUB ", 00BH, 000H, 000H, 000H, 000H
|
|
DB "(HL) ", 096H, 000H, 001H
|
|
DB "(IX*) ", 096H, 0DDH, 003H
|
|
DB "(IY*) ", 096H, 0FDH, 003H
|
|
DB "A ", 097H, 000H, 001H
|
|
DB "B ", 090H, 000H, 001H
|
|
DB "C ", 091H, 000H, 001H
|
|
DB "D ", 092H, 000H, 001H
|
|
DB "E ", 093H, 000H, 001H
|
|
DB "H ", 094H, 000H, 001H
|
|
DB "L ", 095H, 000H, 001H
|
|
DB "* ", 0D6H, 000H, 002H
|
|
DB "#XOR ", 00BH, 000H, 000H, 000H, 000H
|
|
DB "(HL) ", 0AEH, 000H, 001H
|
|
DB "(IX*) ", 0AEH, 0DDH, 003H
|
|
DB "(IY*) ", 0AEH, 0FDH, 003H
|
|
DB "A ", 0AFH, 000H, 001H
|
|
DB "B ", 0A8H, 000H, 001H
|
|
DB "C ", 0A9H, 000H, 001H
|
|
DB "D ", 0AAH, 000H, 001H
|
|
DB "E ", 0ABH, 000H, 001H
|
|
DB "H ", 0ACH, 000H, 001H
|
|
DB "L ", 0ADH, 000H, 001H
|
|
DB "* ", 0EEH, 000H, 002H
|
|
; End of table sentinel
|
|
DB "#END ", 000H, 000H, 000H, 000H, 000H
|
|
|
|
;-------------------------------------------------------------------------------
|
|
; Search routines at fixed addresses (same as MROM bank 6)
|
|
;-------------------------------------------------------------------------------
|
|
|
|
; Pad to DSMFINDOPCD address
|
|
PAD 0E80H
|
|
|
|
;******************************************************************
|
|
; DSMFINDOPCD - identical to bank 6 copy but LD IX,OPCD_TABLE
|
|
; points to THIS bank's table.
|
|
;******************************************************************
|
|
DSMFINDOPCD:PUSH BC
|
|
LD IX,OPCD_TABLE
|
|
DSMFN_LP1: LD A,(IX+0)
|
|
CP '#'
|
|
JP NZ,DSMFN_CK1
|
|
LD (BLK_ADDR),IX
|
|
JP DSMFN_NXT
|
|
|
|
DSMFN_CK1: LD A,(ML_BUF)
|
|
CP 0CBh
|
|
JP Z,DSMFN_CK2
|
|
CP 0DDh
|
|
JP Z,DSMFN_CK2
|
|
CP 0EDh
|
|
JP Z,DSMFN_CK2
|
|
CP 0FDh
|
|
JP Z,DSMFN_CK2
|
|
LD C,(IX+7)
|
|
CP C
|
|
JP NZ,DSMFN_NXT
|
|
LD A,0
|
|
LD C,(IX+8)
|
|
CP C
|
|
JP Z,DSMFN_MAT
|
|
JP DSMFN_NXT
|
|
|
|
DSMFN_CK2: LD C,(IX+8)
|
|
CP C
|
|
JP NZ,DSMFN_NXT
|
|
LD A,(ML_BUF+1)
|
|
LD C,(IX+7)
|
|
CP C
|
|
JP Z,DSMFN_MAT
|
|
|
|
DSMFN_NXT: LD BC,000Ah
|
|
ADD IX,BC
|
|
LD A,(IX+5)
|
|
CP 0
|
|
JP NZ,DSMFN_LP1
|
|
|
|
DSMFN_MAT: LD (ROW_ADDR),IX
|
|
LD A,(IX+8)
|
|
LD (ML_BUF+1),A
|
|
LD A,(IX+9)
|
|
LD (ML_BTCOUNT),A
|
|
CP 0
|
|
POP BC
|
|
RET
|
|
|
|
; Pad to ASMFINDINST address
|
|
PAD 0F10H
|
|
|
|
;******************************************************************
|
|
; ASMFINDINST - identical to bank 6 copy
|
|
;******************************************************************
|
|
ASMFINDINST:PUSH DE
|
|
PUSH BC
|
|
LD A,0
|
|
LD (ROW_NUM),A
|
|
LD IX,OPCD_TABLE
|
|
AFI_NXTBLK: LD (BLK_ADDR),IX
|
|
LD A,(IX+5)
|
|
LD (BLK_SIZE),A
|
|
CP 0
|
|
JP Z,AFI_EXIT
|
|
|
|
LD IY,INS_BUF
|
|
LD C,04h
|
|
AFI_CMPLP: LD A,(IX+1)
|
|
LD B,(IY+0)
|
|
CP B
|
|
JP NZ,AFI_NOMAT
|
|
INC IX
|
|
INC IY
|
|
DEC C
|
|
JP NZ,AFI_CMPLP
|
|
JP AFI_EXIT
|
|
|
|
AFI_NOMAT: LD A,(BLK_SIZE)
|
|
INC A
|
|
LD IX,(BLK_ADDR)
|
|
LD DE,000Ah
|
|
AFI_BLKLP: ADD IX,DE
|
|
DEC A
|
|
JP NZ,AFI_BLKLP
|
|
LD A,(ROW_NUM)
|
|
INC A
|
|
LD (ROW_NUM),A
|
|
JP AFI_NXTBLK
|
|
|
|
AFI_EXIT: POP BC
|
|
POP DE
|
|
RET
|
|
|
|
; Pad to ASMFINDPARM address
|
|
PAD 0F70H
|
|
|
|
;******************************************************************
|
|
; ASMFINDPARM - identical to bank 6 copy
|
|
;******************************************************************
|
|
ASMFINDPARM:PUSH DE
|
|
PUSH BC
|
|
PUSH HL
|
|
LD IX,(BLK_ADDR)
|
|
LD A,(BLK_SIZE)
|
|
LD L,A
|
|
AFP_NXTROW: LD DE,000Ah
|
|
ADD IX,DE
|
|
LD (ROW_ADDR),IX
|
|
LD IY,PARM_BUF
|
|
LD C,07h
|
|
AFP_CMPLP: LD A,(IX+0)
|
|
LD B,(IY+0)
|
|
CP B
|
|
JP NZ,AFP_NOMAT
|
|
INC IX
|
|
INC IY
|
|
DEC C
|
|
JP NZ,AFP_CMPLP
|
|
JP AFP_MATCH
|
|
|
|
AFP_NOMAT: DEC L
|
|
JP Z,AFP_NOFND
|
|
LD IX,(ROW_ADDR)
|
|
JP AFP_NXTROW
|
|
|
|
AFP_NOFND: LD A,0
|
|
LD (ML_BUF+2),A
|
|
JP AFP_EXIT
|
|
|
|
AFP_MATCH: LD A,(IX+0)
|
|
LD (ML_BUF),A
|
|
LD A,(IX+1)
|
|
LD (ML_BUF+1),A
|
|
LD A,(IX+2)
|
|
LD (ML_BUF+2),A
|
|
|
|
AFP_EXIT: POP HL
|
|
POP BC
|
|
POP DE
|
|
RET
|
|
|
|
; Pad to 4K boundary
|
|
ALIGN 1000H
|