From 44df24f36ee2466f7b221b35adef5d4db3accbb9 Mon Sep 17 00:00:00 2001 From: MatCat Date: Sun, 11 Apr 2021 13:56:13 -0700 Subject: [PATCH] LDx mostly done except offsets --- isa.html | 2 +- js/isa/ldx.js | 1168 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1169 insertions(+), 1 deletion(-) diff --git a/isa.html b/isa.html index b97a358..255be7f 100644 --- a/isa.html +++ b/isa.html @@ -6,7 +6,7 @@

Architecture

-

The 8SA1 is an 8 bit computer, with a 16 bit data bus, 16 bit program counter and stack pointer, and 24 bit address control. Since the data bus is 16 bits wide memory is also 16 bits wide. The computer uses a a simple microcode architecture that allows for up to 16 microcode steps per instruction. Further microcode instructions can be reset not just to 0 for a new instruction, but also to 8 to allow for loops inside of an instruction. The decoder uses the 4 bits of the microcode step counter, then the 10 least significant bits of the instruction optcode, followed by the zero/negative and carry/overflow flags for a 16 bit microcode lookup. This configuration allows for a total of 1024 possible instructions irregardless of conditional use.

+

The 8SA1 is an 8 bit computer, with a 16 bit data bus, 16 bit program counter and stack pointer, and 24 bit address control. Since the data bus is 16 bits wide memory is also 16 bits wide. The computer uses a a simple microcode architecture that allows for up to 16 microcode steps per instruction. Further microcode instructions can be reset not just to 0 for a new instruction, but also to 8 to allow for loops inside of an instruction. The decoder uses the 4 bits of the microcode step counter, then the 10 least significant bits of the instruction opcode, followed by the zero/negative and carry/overflow flags for a 16 bit microcode lookup. This configuration allows for a total of 1024 possible instructions irregardless of conditional use.

Registers

The 8SA1 has 4 general purpose 8 bit registers, labeled A, B, C and D. These registers can be read and written selectively to either the high or low byte of the data bus, and can be combined together to get 16 bit word values for use in 16 bit registers, or from 16 bit registers to any 2 general purpose registers. The Program Counter (PC) and Stack Pointer (SP)

The CPU also has some special registers, which will be described below.

diff --git a/js/isa/ldx.js b/js/isa/ldx.js index f043b1a..19f07a6 100644 --- a/js/isa/ldx.js +++ b/js/isa/ldx.js @@ -968,6 +968,26 @@ class IS_LDBH_SPabs16 extends Microcode_Instruction { is_LDBH_spa = new IS_LDBH_SPabs16(); Instructions.push(is_LDBH_spa); +class IS_LDSP_abs16 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x05E; + this.Mnemonic = "LDSP"; + this.LongName = "LOAD Stack Pointer"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Absolute16; + this.Operands = new Array({Operand: "", Bitwidth: 16}); + this.Words = 2; + this.Cycles = 4; + this.Microcode[2] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_RO | CONTROL_SPI | CONTROL_PCC; + } +} + +is_LDSP_a = new IS_LDSP_abs16; +Instructions.push(is_LDSP_a); + class IS_LDAL_abs24 extends Microcode_Instruction { constructor(props) { super(props); @@ -1528,9 +1548,216 @@ class IS_LDDC_abs24 extends Microcode_Instruction { is_LDDC_a24 = new IS_LDDC_abs24; Instructions.push(is_LDDC_a24); +class IS_LDAB_SPabs24 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x076; + this.Mnemonic = "LDAB"; + this.LongName = "LOAD Register A and B"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Absolute24; + this.Operands = new Array({Operand: "SP", Bitwidth: 24}); + this.Words = 1; + this.Cycles = 11; + + this.Microcode[2] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_HO | CONTROL_RI | CONTROL_SPC; + this.Microcode[4] = CONTROL_SPC; + this.Microcode[5] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[6] = CONTROL_OUT_RO | CONTROL_RHI | CONTROL_SPD | CONTROL_SPC; + this.Microcode[7] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[8] = CONTROL_OUT_RO | CONTROL_RAIL | CONTROL_RBIH | CONTROL_SPD | CONTROL_SPC; + this.Microcode[9] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[10] = CONTROL_OUT_RO | CONTROL_RHI; + } +} +is_LDAB_spa24 = new IS_LDAB_SPabs24; +Instructions.push(is_LDAB_spa24); + +class IS_LDCD_SPabs24 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x077; + this.Mnemonic = "LDCD"; + this.LongName = "LOAD Register C and D"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Absolute24; + this.Operands = new Array({Operand: "SP", Bitwidth: 24}); + this.Words = 1; + this.Cycles = 11; + + this.Microcode[2] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_HO | CONTROL_RI | CONTROL_SPC; + this.Microcode[4] = CONTROL_SPC; + this.Microcode[5] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[6] = CONTROL_OUT_RO | CONTROL_RHI | CONTROL_SPD | CONTROL_SPC; + this.Microcode[7] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[8] = CONTROL_OUT_RO | CONTROL_RCIL | CONTROL_RDIH | CONTROL_SPD | CONTROL_SPC; + this.Microcode[9] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[10] = CONTROL_OUT_RO | CONTROL_RHI; + } +} +is_LDCD_spa24 = new IS_LDCD_SPabs24; +Instructions.push(is_LDCD_spa24); + +class IS_LDAL_SPabs24 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x078; + this.Mnemonic = "LDAL"; + this.LongName = "LOAD Register A from LOW Byte"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Absolute24; + this.Operands = new Array({Operand: "SP", Bitwidth: 24}); + this.Words = 1; + this.Cycles = 11; + + this.Microcode[2] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_HO | CONTROL_RI | CONTROL_SPC; + this.Microcode[4] = CONTROL_SPC; + this.Microcode[5] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[6] = CONTROL_OUT_RO | CONTROL_RHI | CONTROL_SPD | CONTROL_SPC; + this.Microcode[7] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[8] = CONTROL_OUT_RO | CONTROL_RAIL | CONTROL_SPD | CONTROL_SPC; + this.Microcode[9] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[10] = CONTROL_OUT_RO | CONTROL_RHI; + } +} +is_LDAL_spa24 = new IS_LDAL_SPabs24; +Instructions.push(is_LDAL_spa24); + +class IS_LDAH_SPabs24 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x079; + this.Mnemonic = "LDAH"; + this.LongName = "LOAD Register A from HIGH Byte"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Absolute24; + this.Operands = new Array({Operand: "SP", Bitwidth: 24}); + this.Words = 1; + this.Cycles = 11; + + this.Microcode[2] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_HO | CONTROL_RI | CONTROL_SPC; + this.Microcode[4] = CONTROL_SPC; + this.Microcode[5] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[6] = CONTROL_OUT_RO | CONTROL_RHI | CONTROL_SPD | CONTROL_SPC; + this.Microcode[7] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[8] = CONTROL_OUT_RO | CONTROL_RAIH | CONTROL_SPD | CONTROL_SPC; + this.Microcode[9] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[10] = CONTROL_OUT_RO | CONTROL_RHI; + } +} +is_LDAH_spa24 = new IS_LDAH_SPabs24; +Instructions.push(is_LDAH_spa24); + +class IS_LDBL_SPabs24 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x07A; + this.Mnemonic = "LDBL"; + this.LongName = "LOAD Register B from LOW Byte"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Absolute24; + this.Operands = new Array({Operand: "SP", Bitwidth: 24}); + this.Words = 1; + this.Cycles = 11; + + this.Microcode[2] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_HO | CONTROL_RI | CONTROL_SPC; + this.Microcode[4] = CONTROL_SPC; + this.Microcode[5] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[6] = CONTROL_OUT_RO | CONTROL_RHI | CONTROL_SPD | CONTROL_SPC; + this.Microcode[7] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[8] = CONTROL_OUT_RO | CONTROL_RBIL | CONTROL_SPD | CONTROL_SPC; + this.Microcode[9] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[10] = CONTROL_OUT_RO | CONTROL_RHI; + } +} +is_LDBL_spa24 = new IS_LDBL_SPabs24; +Instructions.push(is_LDBL_spa24); + +class IS_LDBH_SPabs24 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x07B; + this.Mnemonic = "LDBH"; + this.LongName = "LOAD Register B from HIGH Byte"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Absolute24; + this.Operands = new Array({Operand: "SP", Bitwidth: 24}); + this.Words = 1; + this.Cycles = 11; + + this.Microcode[2] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_HO | CONTROL_RI | CONTROL_SPC; + this.Microcode[4] = CONTROL_SPC; + this.Microcode[5] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[6] = CONTROL_OUT_RO | CONTROL_RHI | CONTROL_SPD | CONTROL_SPC; + this.Microcode[7] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[8] = CONTROL_OUT_RO | CONTROL_RBIH | CONTROL_SPD | CONTROL_SPC; + this.Microcode[9] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[10] = CONTROL_OUT_RO | CONTROL_RHI; + } +} +is_LDBH_spa24 = new IS_LDBH_SPabs24; +Instructions.push(is_LDBH_spa24); + //--------------------------- General Purpose Registers LDx Indirect --------------------------- +class IS_LDAB_CDind16 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x080; + this.Mnemonic = "LDAB"; + this.LongName = "LOAD Registers A and B"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect16; + this.Operands = new Array({Operand: "[CD]", Bitwidth: 16}); + this.Words = 1; + this.Cycles = 6; + + this.Microcode[2] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[4] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[5] = CONTROL_OUT_RO | CONTROL_RAIL | CONTROL_RBIH | CONTROL_PCC; + } +} +is_LDAB_CDin = new IS_LDAB_CDind16; +Instructions.push(is_LDAB_CDin); + +class IS_LDCD_ABind16 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x081; + this.Mnemonic = "LDCD"; + this.LongName = "LOAD Registers C and D"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect16; + this.Operands = new Array({Operand: "[AB]", Bitwidth: 16}); + this.Words = 1; + this.Cycles = 6; + + this.Microcode[2] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[4] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[5] = CONTROL_OUT_RO | CONTROL_RCIL | CONTROL_RDIH | CONTROL_PCC; + } +} +is_LDCD_ABin = new IS_LDCD_ABind16; +Instructions.push(is_LDCD_ABin); + + class IS_LDAL_ind16 extends Microcode_Instruction { constructor(props) { super(props); @@ -1708,6 +1935,431 @@ class IS_LDDH_ind16 extends Microcode_Instruction { is_LDDH_in = new IS_LDDH_ind16; Instructions.push(is_LDDH_in); +class IS_LDAB_ind16 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x08A; + this.Mnemonic = "LDAB"; + this.LongName = "LOAD Registers A and B"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect16; + this.Operands = new Array({Operand: "#", Bitwidth: 16}); + this.Words = 2; + this.Cycles = 6; + this.Microcode[2] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[4] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[5] = CONTROL_OUT_RO | CONTROL_RAIL | CONTROL_RBIH | CONTROL_PCC; + } +} + +is_LDAB_in = new IS_LDAB_ind16; +Instructions.push(is_LDAB_in); + +class IS_LDAC_ind16 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x08B; + this.Mnemonic = "LDAC"; + this.LongName = "LOAD Registers A and C"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect16; + this.Operands = new Array({Operand: "#", Bitwidth: 16}); + this.Words = 2; + this.Cycles = 6; + this.Microcode[2] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[4] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[5] = CONTROL_OUT_RO | CONTROL_RAIL | CONTROL_RCIH | CONTROL_PCC; + } +} + +is_LDAC_in = new IS_LDAC_ind16; +Instructions.push(is_LDAC_in); + +class IS_LDAD_ind16 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x08C; + this.Mnemonic = "LDAD"; + this.LongName = "LOAD Registers A and D"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect16; + this.Operands = new Array({Operand: "#", Bitwidth: 16}); + this.Words = 2; + this.Cycles = 6; + this.Microcode[2] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[4] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[5] = CONTROL_OUT_RO | CONTROL_RAIL | CONTROL_RDIH | CONTROL_PCC; + } +} + +is_LDAD_in = new IS_LDAD_ind16; +Instructions.push(is_LDAD_in); + +class IS_LDBA_ind16 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x08D; + this.Mnemonic = "LDBA"; + this.LongName = "LOAD Registers B and A"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect16; + this.Operands = new Array({Operand: "#", Bitwidth: 16}); + this.Words = 2; + this.Cycles = 6; + this.Microcode[2] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[4] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[5] = CONTROL_OUT_RO | CONTROL_RBIL | CONTROL_RAIH | CONTROL_PCC; + } +} + +is_LDBA_in = new IS_LDBA_ind16; +Instructions.push(is_LDBA_in); + +class IS_LDBC_ind16 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x08E; + this.Mnemonic = "LDBC"; + this.LongName = "LOAD Registers B and C"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect16; + this.Operands = new Array({Operand: "#", Bitwidth: 16}); + this.Words = 2; + this.Cycles = 6; + this.Microcode[2] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[4] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[5] = CONTROL_OUT_RO | CONTROL_RBIL | CONTROL_RCIH | CONTROL_PCC; + } +} + +is_LDBC_in = new IS_LDBC_ind16; +Instructions.push(is_LDBC_in); + +class IS_LDBD_ind16 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x08F; + this.Mnemonic = "LDBD"; + this.LongName = "LOAD Registers B and D"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect16; + this.Operands = new Array({Operand: "#", Bitwidth: 16}); + this.Words = 2; + this.Cycles = 6; + this.Microcode[2] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[4] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[5] = CONTROL_OUT_RO | CONTROL_RBIL | CONTROL_RDIH | CONTROL_PCC; + } +} + +is_LDBD_in = new IS_LDBD_ind16; +Instructions.push(is_LDBD_in); + +class IS_LDCA_ind16 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x090; + this.Mnemonic = "LDCA"; + this.LongName = "LOAD Registers C and A"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect16; + this.Operands = new Array({Operand: "#", Bitwidth: 16}); + this.Words = 2; + this.Cycles = 6; + this.Microcode[2] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[4] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[5] = CONTROL_OUT_RO | CONTROL_RCIL | CONTROL_RAIH | CONTROL_PCC; + } +} + +is_LDCA_in = new IS_LDCA_ind16; +Instructions.push(is_LDCA_in); + +class IS_LDCB_ind16 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x091; + this.Mnemonic = "LDCB"; + this.LongName = "LOAD Registers C and B"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect16; + this.Operands = new Array({Operand: "#", Bitwidth: 16}); + this.Words = 2; + this.Cycles = 6; + this.Microcode[2] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[4] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[5] = CONTROL_OUT_RO | CONTROL_RCIL | CONTROL_RBIH | CONTROL_PCC; + } +} + +is_LDCB_in = new IS_LDCB_ind16; +Instructions.push(is_LDCB_in); + +class IS_LDCD_ind16 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x092; + this.Mnemonic = "LDCD"; + this.LongName = "LOAD Registers C and D"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect16; + this.Operands = new Array({Operand: "#", Bitwidth: 16}); + this.Words = 2; + this.Cycles = 6; + this.Microcode[2] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[4] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[5] = CONTROL_OUT_RO | CONTROL_RCIL | CONTROL_RDIH | CONTROL_PCC; + } +} + +is_LDCD_in = new IS_LDCD_ind16; +Instructions.push(is_LDCD_in); + +class IS_LDDA_ind16 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x093; + this.Mnemonic = "LDDA"; + this.LongName = "LOAD Registers D and A"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect16; + this.Operands = new Array({Operand: "#", Bitwidth: 16}); + this.Words = 2; + this.Cycles = 6; + this.Microcode[2] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[4] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[5] = CONTROL_OUT_RO | CONTROL_RDIL | CONTROL_RAIH | CONTROL_PCC; + } +} + +is_LDDA_in = new IS_LDDA_ind16; +Instructions.push(is_LDDA_in); + +class IS_LDDB_ind16 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x094; + this.Mnemonic = "LDDB"; + this.LongName = "LOAD Registers D and B"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect16; + this.Operands = new Array({Operand: "#", Bitwidth: 16}); + this.Words = 2; + this.Cycles = 6; + this.Microcode[2] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[4] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[5] = CONTROL_OUT_RO | CONTROL_RDIL | CONTROL_RBIH | CONTROL_PCC; + } +} + +is_LDDB_in = new IS_LDDB_ind16; +Instructions.push(is_LDDB_in); + +class IS_LDDC_ind16 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x095; + this.Mnemonic = "LDDC"; + this.LongName = "LOAD Registers D and C"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect16; + this.Operands = new Array({Operand: "#", Bitwidth: 16}); + this.Words = 2; + this.Cycles = 6; + this.Microcode[2] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[4] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[5] = CONTROL_OUT_RO | CONTROL_RDIL | CONTROL_RCIH | CONTROL_PCC; + } +} + +is_LDDC_in = new IS_LDDC_ind16; +Instructions.push(is_LDDC_in); + +class IS_LDAB_SPind16 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x096; + this.Mnemonic = "LDAB"; + this.LongName = "LOAD Registers A and B"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.RegisterIndirect; + this.Operands = new Array({Operand: "[SP]", Bitwidth: 16}); + this.Words = 1; + this.Cycles = 7; + this.Microcode[2] = CONTROL_SPC; + this.Microcode[3] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[4] = CONTROL_OUT_RO | CONTROL_RRI | CONTROL_SPD | CONTROL_SPC; + this.Microcode[5] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[6] = CONTROL_OUT_RO | CONTROL_RAIL | CONTROL_RBIH | CONTROL_PCC; + } +} + +is_LDAB_SPin = new IS_LDAB_SPind16; +Instructions.push(is_LDAB_SPin); + +class IS_LDCD_SPind16 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x097; + this.Mnemonic = "LDCD"; + this.LongName = "LOAD Registers C and D"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.RegisterIndirect; + this.Operands = new Array({Operand: "[SP]", Bitwidth: 16}); + this.Words = 1; + this.Cycles = 7; + this.Microcode[2] = CONTROL_SPC; + this.Microcode[3] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[4] = CONTROL_OUT_RO | CONTROL_RRI | CONTROL_SPD | CONTROL_SPC; + this.Microcode[5] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[6] = CONTROL_OUT_RO | CONTROL_RCIL | CONTROL_RDIH | CONTROL_PCC; + } +} + +is_LDCD_SPin = new IS_LDCD_SPind16; +Instructions.push(is_LDCD_SPin); + +class IS_LDAL_SPind16 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x098; + this.Mnemonic = "LDAL"; + this.LongName = "LOAD Register A from LOW Byte"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.RegisterIndirect; + this.Operands = new Array({Operand: "[SP]", Bitwidth: 16}); + this.Words = 1; + this.Cycles = 7; + this.Microcode[2] = CONTROL_SPC; + this.Microcode[3] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[4] = CONTROL_OUT_RO | CONTROL_RRI | CONTROL_SPD | CONTROL_SPC; + this.Microcode[5] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[6] = CONTROL_OUT_RO | CONTROL_RAIL | CONTROL_PCC; + } +} + +is_LDAL_SPin = new IS_LDAL_SPind16; +Instructions.push(is_LDAL_SPin); + +class IS_LDAH_SPind16 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x099; + this.Mnemonic = "LDAH"; + this.LongName = "LOAD Register A from HIGH Byte"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.RegisterIndirect; + this.Operands = new Array({Operand: "[SP]", Bitwidth: 16}); + this.Words = 1; + this.Cycles = 7; + this.Microcode[2] = CONTROL_SPC; + this.Microcode[3] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[4] = CONTROL_OUT_RO | CONTROL_RRI | CONTROL_SPD | CONTROL_SPC; + this.Microcode[5] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[6] = CONTROL_OUT_RO | CONTROL_RAIH | CONTROL_PCC; + } +} + +is_LDAH_SPin = new IS_LDAH_SPind16; +Instructions.push(is_LDAH_SPin); + +class IS_LDBL_SPind16 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x09A; + this.Mnemonic = "LDBL"; + this.LongName = "LOAD Register B from LOW Byte"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.RegisterIndirect; + this.Operands = new Array({Operand: "[SP]", Bitwidth: 16}); + this.Words = 1; + this.Cycles = 7; + this.Microcode[2] = CONTROL_SPC; + this.Microcode[3] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[4] = CONTROL_OUT_RO | CONTROL_RRI | CONTROL_SPD | CONTROL_SPC; + this.Microcode[5] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[6] = CONTROL_OUT_RO | CONTROL_RBIL | CONTROL_PCC; + } +} + +is_LDBL_SPin = new IS_LDBL_SPind16; +Instructions.push(is_LDBL_SPin); + +class IS_LDBH_SPind16 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x09B; + this.Mnemonic = "LDBH"; + this.LongName = "LOAD Register B from HIGH Byte"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.RegisterIndirect; + this.Operands = new Array({Operand: "[SP]", Bitwidth: 16}); + this.Words = 1; + this.Cycles = 7; + this.Microcode[2] = CONTROL_SPC; + this.Microcode[3] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[4] = CONTROL_OUT_RO | CONTROL_RRI | CONTROL_SPD | CONTROL_SPC; + this.Microcode[5] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[6] = CONTROL_OUT_RO | CONTROL_RBIH | CONTROL_PCC; + } +} + +is_LDBH_SPin = new IS_LDBH_SPind16; +Instructions.push(is_LDBH_SPin); + +class IS_LDSP_ind16 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x09E; + this.Mnemonic = "LDSP"; + this.LongName = "LOAD Stack Pointer"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.RegisterIndirect; + this.Operands = new Array({Operand: "[SP]", Bitwidth: 16}); + this.Words = 2; + this.Cycles = 6; + this.Microcode[2] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[4] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[5] = CONTROL_OUT_RO | CONTROL_SPI; + } +} + +is_LDSP_in = new IS_LDSP_ind16; +Instructions.push(is_LDSP_in); + + class IS_LDAL_ind24 extends Microcode_Instruction { constructor(props) { super(props); @@ -1938,3 +2590,519 @@ class IS_LDDH_ind24 extends Microcode_Instruction { is_LDDH_in24 = new IS_LDDH_ind24; Instructions.push(is_LDDH_in24); +class IS_LDAB_ind24 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x0CA; + this.Mnemonic = "LDAB"; + this.LongName = "LOAD Registers A and B"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect24; + this.Operands = new Array({Operand: "#", Bitwidth: 24}); + this.Words = 3; + this.Cycles = 13; + + this.Microcode[2] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_HO | CONTROL_RI; + this.Microcode[4] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[5] = CONTROL_OUT_I2 | CONTROL_PCC; + this.Microcode[6] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[7] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[8] = CONTROL_OUT_2O | CONTROL_RHI; + this.Microcode[9] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[10] = CONTROL_OUT_RO | CONTROL_RAIL | CONTROL_RBIH | CONTROL_PCC; + this.Microcode[11] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[12] = CONTROL_OUT_RO | CONTROL_RHI; + } +} +is_LDAB_in24 = new IS_LDAB_ind24; +Instructions.push(is_LDAB_in24); + +class IS_LDAC_ind24 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x0CB; + this.Mnemonic = "LDAC"; + this.LongName = "LOAD Registers A and C"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect24; + this.Operands = new Array({Operand: "#", Bitwidth: 24}); + this.Words = 3; + this.Cycles = 13; + + this.Microcode[2] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_HO | CONTROL_RI; + this.Microcode[4] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[5] = CONTROL_OUT_I2 | CONTROL_PCC; + this.Microcode[6] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[7] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[8] = CONTROL_OUT_2O | CONTROL_RHI; + this.Microcode[9] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[10] = CONTROL_OUT_RO | CONTROL_RAIL | CONTROL_RCIH | CONTROL_PCC; + this.Microcode[11] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[12] = CONTROL_OUT_RO | CONTROL_RHI; + } +} +is_LDAC_in24 = new IS_LDAC_ind24; +Instructions.push(is_LDAC_in24); + +class IS_LDAD_ind24 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x0CC; + this.Mnemonic = "LDAD"; + this.LongName = "LOAD Registers A and D"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect24; + this.Operands = new Array({Operand: "#", Bitwidth: 24}); + this.Words = 3; + this.Cycles = 13; + + this.Microcode[2] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_HO | CONTROL_RI; + this.Microcode[4] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[5] = CONTROL_OUT_I2 | CONTROL_PCC; + this.Microcode[6] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[7] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[8] = CONTROL_OUT_2O | CONTROL_RHI; + this.Microcode[9] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[10] = CONTROL_OUT_RO | CONTROL_RAIL | CONTROL_RDIH | CONTROL_PCC; + this.Microcode[11] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[12] = CONTROL_OUT_RO | CONTROL_RHI; + } +} +is_LDAD_in24 = new IS_LDAD_ind24; +Instructions.push(is_LDAD_in24); + +class IS_LDBA_ind24 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x0CD; + this.Mnemonic = "LDBA"; + this.LongName = "LOAD Registers B and A"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect24; + this.Operands = new Array({Operand: "#", Bitwidth: 24}); + this.Words = 3; + this.Cycles = 13; + + this.Microcode[2] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_HO | CONTROL_RI; + this.Microcode[4] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[5] = CONTROL_OUT_I2 | CONTROL_PCC; + this.Microcode[6] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[7] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[8] = CONTROL_OUT_2O | CONTROL_RHI; + this.Microcode[9] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[10] = CONTROL_OUT_RO | CONTROL_RBIL | CONTROL_RAIH | CONTROL_PCC; + this.Microcode[11] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[12] = CONTROL_OUT_RO | CONTROL_RHI; + } +} +is_LDBA_in24 = new IS_LDBA_ind24; +Instructions.push(is_LDBA_in24); + +class IS_LDBC_ind24 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x0CE; + this.Mnemonic = "LDBC"; + this.LongName = "LOAD Registers B and C"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect24; + this.Operands = new Array({Operand: "#", Bitwidth: 24}); + this.Words = 3; + this.Cycles = 13; + + this.Microcode[2] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_HO | CONTROL_RI; + this.Microcode[4] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[5] = CONTROL_OUT_I2 | CONTROL_PCC; + this.Microcode[6] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[7] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[8] = CONTROL_OUT_2O | CONTROL_RHI; + this.Microcode[9] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[10] = CONTROL_OUT_RO | CONTROL_RBIL | CONTROL_RCIH | CONTROL_PCC; + this.Microcode[11] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[12] = CONTROL_OUT_RO | CONTROL_RHI; + } +} +is_LDBC_in24 = new IS_LDBC_ind24; +Instructions.push(is_LDBC_in24); + +class IS_LDBD_ind24 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x0CF; + this.Mnemonic = "LDBD"; + this.LongName = "LOAD Registers B and D"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect24; + this.Operands = new Array({Operand: "#", Bitwidth: 24}); + this.Words = 3; + this.Cycles = 13; + + this.Microcode[2] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_HO | CONTROL_RI; + this.Microcode[4] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[5] = CONTROL_OUT_I2 | CONTROL_PCC; + this.Microcode[6] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[7] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[8] = CONTROL_OUT_2O | CONTROL_RHI; + this.Microcode[9] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[10] = CONTROL_OUT_RO | CONTROL_RBIL | CONTROL_RDIH | CONTROL_PCC; + this.Microcode[11] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[12] = CONTROL_OUT_RO | CONTROL_RHI; + } +} +is_LDBD_in24 = new IS_LDBD_ind24; +Instructions.push(is_LDBD_in24); + +class IS_LDCA_ind24 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x0D0; + this.Mnemonic = "LDCA"; + this.LongName = "LOAD Registers C and A"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect24; + this.Operands = new Array({Operand: "#", Bitwidth: 24}); + this.Words = 3; + this.Cycles = 13; + + this.Microcode[2] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_HO | CONTROL_RI; + this.Microcode[4] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[5] = CONTROL_OUT_I2 | CONTROL_PCC; + this.Microcode[6] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[7] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[8] = CONTROL_OUT_2O | CONTROL_RHI; + this.Microcode[9] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[10] = CONTROL_OUT_RO | CONTROL_RCIL | CONTROL_RAIH | CONTROL_PCC; + this.Microcode[11] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[12] = CONTROL_OUT_RO | CONTROL_RHI; + } +} +is_LDCA_in24 = new IS_LDCA_ind24; +Instructions.push(is_LDCA_in24); + +class IS_LDCB_ind24 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x0D1; + this.Mnemonic = "LDCB"; + this.LongName = "LOAD Registers C and B"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect24; + this.Operands = new Array({Operand: "#", Bitwidth: 24}); + this.Words = 3; + this.Cycles = 13; + + this.Microcode[2] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_HO | CONTROL_RI; + this.Microcode[4] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[5] = CONTROL_OUT_I2 | CONTROL_PCC; + this.Microcode[6] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[7] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[8] = CONTROL_OUT_2O | CONTROL_RHI; + this.Microcode[9] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[10] = CONTROL_OUT_RO | CONTROL_RCIL | CONTROL_RBIH | CONTROL_PCC; + this.Microcode[11] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[12] = CONTROL_OUT_RO | CONTROL_RHI; + } +} +is_LDCB_in24 = new IS_LDCB_ind24; +Instructions.push(is_LDCB_in24); + +class IS_LDCD_ind24 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x0D2; + this.Mnemonic = "LDCD"; + this.LongName = "LOAD Registers C and D"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect24; + this.Operands = new Array({Operand: "#", Bitwidth: 24}); + this.Words = 3; + this.Cycles = 13; + + this.Microcode[2] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_HO | CONTROL_RI; + this.Microcode[4] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[5] = CONTROL_OUT_I2 | CONTROL_PCC; + this.Microcode[6] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[7] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[8] = CONTROL_OUT_2O | CONTROL_RHI; + this.Microcode[9] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[10] = CONTROL_OUT_RO | CONTROL_RCIL | CONTROL_RDIH | CONTROL_PCC; + this.Microcode[11] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[12] = CONTROL_OUT_RO | CONTROL_RHI; + } +} +is_LDCD_in24 = new IS_LDCD_ind24; +Instructions.push(is_LDCD_in24); + +class IS_LDDA_ind24 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x0D3; + this.Mnemonic = "LDDA"; + this.LongName = "LOAD Registers D and A"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect24; + this.Operands = new Array({Operand: "#", Bitwidth: 24}); + this.Words = 3; + this.Cycles = 13; + + this.Microcode[2] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_HO | CONTROL_RI; + this.Microcode[4] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[5] = CONTROL_OUT_I2 | CONTROL_PCC; + this.Microcode[6] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[7] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[8] = CONTROL_OUT_2O | CONTROL_RHI; + this.Microcode[9] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[10] = CONTROL_OUT_RO | CONTROL_RDIL | CONTROL_RAIH | CONTROL_PCC; + this.Microcode[11] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[12] = CONTROL_OUT_RO | CONTROL_RHI; + } +} +is_LDDA_in24 = new IS_LDDA_ind24; +Instructions.push(is_LDDA_in24); + +class IS_LDDB_ind24 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x0D4; + this.Mnemonic = "LDDB"; + this.LongName = "LOAD Registers D and B"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect24; + this.Operands = new Array({Operand: "#", Bitwidth: 24}); + this.Words = 3; + this.Cycles = 13; + + this.Microcode[2] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_HO | CONTROL_RI; + this.Microcode[4] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[5] = CONTROL_OUT_I2 | CONTROL_PCC; + this.Microcode[6] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[7] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[8] = CONTROL_OUT_2O | CONTROL_RHI; + this.Microcode[9] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[10] = CONTROL_OUT_RO | CONTROL_RDIL | CONTROL_RBIH | CONTROL_PCC; + this.Microcode[11] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[12] = CONTROL_OUT_RO | CONTROL_RHI; + } +} +is_LDDB_in24 = new IS_LDDB_ind24; +Instructions.push(is_LDDB_in24); + +class IS_LDDC_ind24 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x0D5; + this.Mnemonic = "LDDC"; + this.LongName = "LOAD Registers D and C"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect24; + this.Operands = new Array({Operand: "#", Bitwidth: 24}); + this.Words = 3; + this.Cycles = 13; + + this.Microcode[2] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_HO | CONTROL_RI; + this.Microcode[4] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[5] = CONTROL_OUT_I2 | CONTROL_PCC; + this.Microcode[6] = CONTROL_OUT_PC | CONTROL_RRI; + this.Microcode[7] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[8] = CONTROL_OUT_2O | CONTROL_RHI; + this.Microcode[9] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[10] = CONTROL_OUT_RO | CONTROL_RDIL | CONTROL_RCIH | CONTROL_PCC; + this.Microcode[11] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[12] = CONTROL_OUT_RO | CONTROL_RHI; + } +} +is_LDDC_in24 = new IS_LDDC_ind24; +Instructions.push(is_LDDC_in24); + +class IS_LDAB_SPind24 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x0D6; + this.Mnemonic = "LDAB"; + this.LongName = "LOAD Register A and B"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect24; + this.Operands = new Array({Operand: "[SP]", Bitwidth: 24}); + this.Words = 1; + this.Cycles = 12; + + this.Microcode[2] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_HO | CONTROL_RI | CONTROL_SPC; + this.Microcode[4] = CONTROL_SPC; + this.Microcode[5] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[6] = CONTROL_OUT_RO | CONTROL_RHI | CONTROL_SPD | CONTROL_SPC; + this.Microcode[7] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[8] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[9] = CONTROL_OUT_RO | CONTROL_RAIL | CONTROL_RBIH | CONTROL_SPD | CONTROL_SPC; + this.Microcode[10] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[11] = CONTROL_OUT_RO | CONTROL_RHI; + } +} +is_LDAB_spin24 = new IS_LDAB_SPind24; +Instructions.push(is_LDAB_spin24); + +class IS_LDCD_SPind24 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x0D7; + this.Mnemonic = "LDCD"; + this.LongName = "LOAD Register C and D"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect24; + this.Operands = new Array({Operand: "[SP]", Bitwidth: 24}); + this.Words = 1; + this.Cycles = 12; + + this.Microcode[2] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_HO | CONTROL_RI | CONTROL_SPC; + this.Microcode[4] = CONTROL_SPC; + this.Microcode[5] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[6] = CONTROL_OUT_RO | CONTROL_RHI | CONTROL_SPD | CONTROL_SPC; + this.Microcode[7] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[8] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[9] = CONTROL_OUT_RO | CONTROL_RCIL | CONTROL_RDIH | CONTROL_SPD | CONTROL_SPC; + this.Microcode[10] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[11] = CONTROL_OUT_RO | CONTROL_RHI; + } +} +is_LDCD_spin24 = new IS_LDCD_SPind24; +Instructions.push(is_LDCD_spin24); + +class IS_LDAL_SPind24 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x0D8; + this.Mnemonic = "LDAL"; + this.LongName = "LOAD Register A from LOW Byte"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect24; + this.Operands = new Array({Operand: "[SP]", Bitwidth: 24}); + this.Words = 1; + this.Cycles = 12; + + this.Microcode[2] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_HO | CONTROL_RI | CONTROL_SPC; + this.Microcode[4] = CONTROL_SPC; + this.Microcode[5] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[6] = CONTROL_OUT_RO | CONTROL_RHI | CONTROL_SPD | CONTROL_SPC; + this.Microcode[7] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[8] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[9] = CONTROL_OUT_RO | CONTROL_RAIL | CONTROL_SPD | CONTROL_SPC; + this.Microcode[10] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[11] = CONTROL_OUT_RO | CONTROL_RHI; + } +} +is_LDAL_spin24 = new IS_LDAL_SPind24; +Instructions.push(is_LDAL_spin24); + +class IS_LDAH_SPind24 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x0D9; + this.Mnemonic = "LDAH"; + this.LongName = "LOAD Register A from HIGH Byte"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect24; + this.Operands = new Array({Operand: "[SP]", Bitwidth: 24}); + this.Words = 1; + this.Cycles = 12; + + this.Microcode[2] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_HO | CONTROL_RI | CONTROL_SPC; + this.Microcode[4] = CONTROL_SPC; + this.Microcode[5] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[6] = CONTROL_OUT_RO | CONTROL_RHI | CONTROL_SPD | CONTROL_SPC; + this.Microcode[7] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[8] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[9] = CONTROL_OUT_RO | CONTROL_RAIH | CONTROL_SPD | CONTROL_SPC; + this.Microcode[10] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[11] = CONTROL_OUT_RO | CONTROL_RHI; + } +} +is_LDAH_spin24 = new IS_LDAH_SPind24; +Instructions.push(is_LDAH_spin24); + +class IS_LDBL_SPind24 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x0DA; + this.Mnemonic = "LDBL"; + this.LongName = "LOAD Register B from LOW Byte"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect24; + this.Operands = new Array({Operand: "[SP]", Bitwidth: 24}); + this.Words = 1; + this.Cycles = 12; + + this.Microcode[2] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_HO | CONTROL_RI | CONTROL_SPC; + this.Microcode[4] = CONTROL_SPC; + this.Microcode[5] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[6] = CONTROL_OUT_RO | CONTROL_RHI | CONTROL_SPD | CONTROL_SPC; + this.Microcode[7] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[8] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[9] = CONTROL_OUT_RO | CONTROL_RBIL | CONTROL_SPD | CONTROL_SPC; + this.Microcode[10] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[11] = CONTROL_OUT_RO | CONTROL_RHI; + } +} +is_LDBL_spin24 = new IS_LDBL_SPind24; +Instructions.push(is_LDBL_spin24); + +class IS_LDBH_SPind24 extends Microcode_Instruction { + constructor(props) { + super(props); + this.Bytecode = 0x0DB; + this.Mnemonic = "LDBH"; + this.LongName = "LOAD Register B from HIGH Byte"; + this.Aliases = new Array(); + + this.Type = InstructionTypes.Indirect24; + this.Operands = new Array({Operand: "[SP]", Bitwidth: 24}); + this.Words = 1; + this.Cycles = 12; + + this.Microcode[2] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[3] = CONTROL_OUT_HO | CONTROL_RI | CONTROL_SPC; + this.Microcode[4] = CONTROL_SPC; + this.Microcode[5] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[6] = CONTROL_OUT_RO | CONTROL_RHI | CONTROL_SPD | CONTROL_SPC; + this.Microcode[7] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[8] = CONTROL_OUT_RO | CONTROL_RRI; + this.Microcode[9] = CONTROL_OUT_RO | CONTROL_RBIH | CONTROL_SPD | CONTROL_SPC; + this.Microcode[10] = CONTROL_OUT_SP | CONTROL_RRI; + this.Microcode[11] = CONTROL_OUT_RO | CONTROL_RHI; + } +} +is_LDBH_spin24 = new IS_LDBH_SPind24; +Instructions.push(is_LDBH_spin24); +