Re: BUG: non-fixed-length ISAs are unsupported for now

Sergey Belyashov via Cgen <[email protected]> Thu, 30 Jul 2020 12:11:43 +0300
Newsgroups gmane.comp.tools.cgen.devel
Message-ID <CAOe0RDxwHg4GZigSOm1c9xWafriO=WEAh=U6T3QhR4uLbgBfrA@mail.gmail.com>
Hi,

Can anybody help me, how to correctly implement Zilog Z80 (and
derivatives) instruction decode table switching in CGEN? For example,
the main table has 1 byte instruction and possibly 1-2 bytes of
immediate operand. There are four (ez80 has eight) pseudo instructions
which switches tables for current instruction:
* 0xCB - next byte is rotation or bit manipulation instruction code,
no optional operands;
* 0xED - next byte is instruction of extended instruction set,
possible 1-2 bytes of immediate operand;
* 0xDD/0xFD - switches use of H, L and HL registers to IX/IY on main
and 0xCB tables (here is difficult, because always added immediate
before instruction code: 0xDD 0xCB 0x07 0x3E - "srl (ix+7)").
I think, it should be done in following way:
* it is need to create 5 ISAs: isa_00, isa_cb, isa_ed, isa_ii_00, isa_ii_cb
* opcodes 0xCB, 0xDD, 0xED, 0xFD just switches ISA for current instruction
* <I do not know what I need to do for assembler support, how to parse
by all tables>

Best regards,
Sergey Belyashov