From fec7798be959884d567319180a9fadcbd9381ef3 Mon Sep 17 00:00:00 2001 From: Roman Boykov Date: Fri, 17 Apr 2026 16:17:51 +0300 Subject: [PATCH] fix disassm bit ops --- dis/z80disasm.go | 5 +++-- dis/z80disasm_test.go | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/dis/z80disasm.go b/dis/z80disasm.go index 7b35c66..be1b4d5 100644 --- a/dis/z80disasm.go +++ b/dis/z80disasm.go @@ -354,15 +354,16 @@ func (d *Disassembler) getRel() string { } var shiftOps = []string{"RLC", "RRC", "RL", "RR", "SLA", "SRA", "SLL", "SRL"} +var bitOps = []string{"BIT", "RES", "SET"} // opocodeCB disassemble Z80 Opcodes, with CB first byte func (d *Disassembler) opocodeCB() string { op := "" opcode := d.getByte() if opcode <= 0x3F { - op = shiftOps[opcode>>3&0x07] + operands[opcode&0x7] + op = shiftOps[opcode>>3&0x07] + sep + operands[opcode&0x7] } else { - op = shiftOps[(opcode>>6&0x03)-1] + operands[opcode&0x7] + op = bitOps[(opcode>>6&0x03)-1] + " " + string(rune(48+(opcode>>3)&0x07)) + sep + operands[opcode&0x7] } return op } diff --git a/dis/z80disasm_test.go b/dis/z80disasm_test.go index 68ed9bf..9d529b9 100644 --- a/dis/z80disasm_test.go +++ b/dis/z80disasm_test.go @@ -129,3 +129,26 @@ func Test_LD_r_IXn(t *testing.T) { t.Errorf("Error disassm LD_r_IXn, result '%s', expected '%s'", res, expected) } } + +var testBITnH = []byte{0xcb, 0x64, 0xcb, 0xde, 0xcb, 0x95} + +func Test_BIT_nn(t *testing.T) { + expected := " 0000 BIT 4, H" // JR back + setMemory(0x0000, testBITnH) + res := disasm.Disassm(0x0000) + if res != expected { + t.Errorf("Error disassm BIT n,H, result '%s', expected '%s'", res, expected) + } + + expected = " 0002 SET 3, (HL)" // JR back + res = disasm.Disassm(0x0002) + if res != expected { + t.Errorf("Error disassm SET n,(HL), result '%s', expected '%s'", res, expected) + } + + expected = " 0004 RES 2, L" // JR back + res = disasm.Disassm(0x0004) + if res != expected { + t.Errorf("Error disassm RES n,(HL), result '%s', expected '%s'", res, expected) + } +}