static ControlLines DBus2Reg8(HLBusReg8 reg) { switch (reg) { case HLBusReg8.W: case HLBusReg8.B: case HLBusReg8.D: case HLBusReg8.H: case HLBusReg8.SPh: case HLBusReg8.PCh: case HLBusReg8.LRh: return(DBus2HBus | WriteReg8(reg)); case HLBusReg8.Z: case HLBusReg8.C: case HLBusReg8.E: case HLBusReg8.L: case HLBusReg8.SPl: case HLBusReg8.PCl: case HLBusReg8.LRl: return(DBus2LBus | WriteReg8(reg)); default: throw new ArgumentException(reg.ToString()); } }
static (ControlLines[], ControlLines2[]) LdReg8Abs(HLBusReg8 reg) { return(new[] { // this is a mixture of lda (WZ) // ACBA + 1 -> ACBA, ACBA + 1 -> ABuf // Read(Abuf), D -> W (ACOpInc | ACRes2ACB | ACBALoad | ABufLoad | BusEnablePin | Write_ReadPinRead | DBuf2DBus | DBus2Reg8(W)), // ACBA + 1 -> PC // Read(ABuf), D -> DBuf (ACOpInc | ACRes2HLBus | WriteReg16(PC) | BusEnablePin | Write_ReadPinRead | DBufLoad), // DBuf -> LBus // W -> HBus // HLBus -> ABuf (DBufOut | DBuf2DBus | DBus2LBus | ReadReg8(W) | ABufLoad), // D -> A, Read(Abuf) (DBus2Reg8(reg) | DBuf2DBus | Write_ReadPinRead | BusEnablePin | TogglePhase) }, new[] { ControlLines2.None, ControlLines2.None, ControlLines2.None, ControlLines2.None, }); }
static (ControlLines[], ControlLines2[]) LdReg8Imm8(HLBusReg8 reg) { return(new[] { (BusEnablePin | Write_ReadPinRead | DBuf2DBus | DBus2Reg8(reg)), (WriteReg16(PC) | ACRes2HLBus | ACOpInc | TogglePhase) }, new[] { ControlLines2.None, ControlLines2.None, }); }
static (ControlLines[], ControlLines2[]) LdReg8Ind(HLBusReg8 target, HLBusReg16 ind) { return(new[] { (ReadReg16(ind) | ABufLoad), (DBuf2DBus | DBus2Reg8(target) | Write_ReadPinRead | BusEnablePin | TogglePhase) }, new[] { ControlLines2.None, ControlLines2.None, }); }
static ControlLines ReadReg8(HLBusReg8 reg) { switch (reg) { case W: return(Reg2HBusSelW); case B: return(Reg2HBusSelB); case D: return(Reg2HBusSelD); case H: return(Reg2HBusSelH); case SPh: return(Reg2HBusSelSPh); case PCh: return(Reg2HBusSelPCh); case LRh: return(Reg2HBusSelLRh); case IXh: return(Reg2HBusSelIXh); case IYh: return(Reg2HBusSelIYh); case IVh: return(Reg2HBusSelIVh); case Z: return(Reg2LBusSelZ); case C: return(Reg2LBusSelC); case E: return(Reg2LBusSelE); case L: return(Reg2LBusSelL); case SPl: return(Reg2LBusSelSPl); case PCl: return(Reg2LBusSelPCl); case LRl: return(Reg2LBusSelLRl); case IXl: return(Reg2LBusSelIXl); case IYl: return(Reg2LBusSelIYl); case IVl: return(Reg2LBusSelIVl); default: throw new ArgumentException(reg.ToString()); } }