/// <summary> /// Returns the current value of a sequencer register. /// </summary> /// <param name="address">Address of register to read.</param> /// <returns>Current value of the register.</returns> public byte ReadRegister(SequencerRegister address) { return(address switch { SequencerRegister.Reset => this.Reset, SequencerRegister.ClockingMode => this.ClockingMode, SequencerRegister.MapMask => this.MapMask, SequencerRegister.CharacterMapSelect => this.CharacterMapSelect, SequencerRegister.SequencerMemoryMode => (byte)this.SequencerMemoryMode, _ => 0 });
public void WriteByte(int port, byte value) { switch (port) { case Ports.DacAddressReadMode: Dac.ReadIndex = value; break; case Ports.DacAddressWriteMode: Dac.WriteIndex = value; break; case Ports.DacData: Dac.Write(value); break; case Ports.GraphicsControllerAddress: graphicsRegister = (GraphicsRegister)value; break; case Ports.GraphicsControllerData: Graphics.WriteRegister(graphicsRegister, value); break; case Ports.SequencerAddress: sequencerRegister = (SequencerRegister)value; break; case Ports.SequencerData: var previousMode = Sequencer.SequencerMemoryMode; Sequencer.WriteRegister(sequencerRegister, value); if ((previousMode & SequencerMemoryMode.Chain4) == SequencerMemoryMode.Chain4 && (Sequencer.SequencerMemoryMode & SequencerMemoryMode.Chain4) == 0) { EnterModeX(); } break; case Ports.AttributeAddress: if (!attributeDataMode) { attributeRegister = (AttributeControllerRegister)(value & 0x1F); } else { AttributeController.WriteRegister(attributeRegister, value); } attributeDataMode = !attributeDataMode; break; case Ports.AttributeData: AttributeController.WriteRegister(attributeRegister, value); break; case Ports.CrtControllerAddress: case Ports.CrtControllerAddressAlt: crtRegister = (CrtControllerRegister)value; break; case Ports.CrtControllerData: case Ports.CrtControllerDataAlt: int previousVerticalEnd = CrtController.VerticalDisplayEnd; CrtController.WriteRegister(crtRegister, value); if (previousVerticalEnd != CrtController.VerticalDisplayEnd) { ChangeVerticalEnd(); } break; } }