public AdLibChannel(IOpl opl, byte[] musicData, ushort startOfData) { _opl = opl; _musicData = musicData; _channelData.loopPoint = startOfData; _channelData.eventDataPtr = startOfData; _channelData.channelActive = true; _channelData.tremoVibro = 0; _channelData.assignedInstrument = 0xFF; _channelData.channelVolume = 0x7F; _channelData.nextEventTime = GetNextEventTime(); _channelData.adlibChannelNumber = _channelData.lastCommand = _channelData.note = _channelData.adlibReg1 = _channelData.adlibReg2 = _channelData.freqOffset = 0; _channelData.frequency = 0; _channelData.instrumentData = null; ushort instrumentDataLoc; if (SystemVars.Instance.GameVersion.Version.Minor == 109) { //instrumentDataLoc = (_musicData[0x11D0] << 8) | _musicData[0x11CF]; //_frequenceTable = (uint16 *)(_musicData + 0x835); //_registerTable = _musicData + 0xE35; //_opOutputTable = _musicData + 0xE47; //_adlibRegMirror = _musicData + 0xF4A; instrumentDataLoc = _musicData.ToUInt16(0x1204); _frequenceTable = new UShortAccess(_musicData, 0x868); _registerTable = new ByteAccess(_musicData, 0xE68); _opOutputTable = new ByteAccess(_musicData, 0xE7A); _adlibRegMirror = new ByteAccess(_musicData, 0xF7D); } else if (SystemVars.Instance.GameVersion.Version.Minor == 267) { instrumentDataLoc = _musicData.ToUInt16(0x11FB); _frequenceTable = new UShortAccess(_musicData, 0x7F4); _registerTable = new ByteAccess(_musicData, 0xDF4); _opOutputTable = new ByteAccess(_musicData, 0xE06); _adlibRegMirror = new ByteAccess(_musicData, 0xF55); } else { instrumentDataLoc = _musicData.ToUInt16(0x1205); _frequenceTable = new UShortAccess(_musicData, 0x7FE); _registerTable = new ByteAccess(_musicData, 0xDFE); _opOutputTable = new ByteAccess(_musicData, 0xE10); _adlibRegMirror = new ByteAccess(_musicData, 0xF5F); } _instrumentMap = new ByteAccess(_musicData, instrumentDataLoc); _instruments = new StructAccess<InstrumentStruct>(_musicData, instrumentDataLoc + 0x80); }
public AdLibChannel(IOpl opl, byte[] musicData, ushort startOfData) { _opl = opl; _musicData = musicData; _channelData.loopPoint = startOfData; _channelData.eventDataPtr = startOfData; _channelData.channelActive = true; _channelData.tremoVibro = 0; _channelData.assignedInstrument = 0xFF; _channelData.channelVolume = 0x7F; _channelData.nextEventTime = GetNextEventTime(); _channelData.adlibChannelNumber = _channelData.lastCommand = _channelData.note = _channelData.adlibReg1 = _channelData.adlibReg2 = _channelData.freqOffset = 0; _channelData.frequency = 0; _channelData.instrumentData = null; ushort instrumentDataLoc; if (SystemVars.Instance.GameVersion.Version.Minor == 109) { //instrumentDataLoc = (_musicData[0x11D0] << 8) | _musicData[0x11CF]; //_frequenceTable = (uint16 *)(_musicData + 0x835); //_registerTable = _musicData + 0xE35; //_opOutputTable = _musicData + 0xE47; //_adlibRegMirror = _musicData + 0xF4A; instrumentDataLoc = _musicData.ToUInt16(0x1204); _frequenceTable = new UShortAccess(_musicData, 0x868); _registerTable = new ByteAccess(_musicData, 0xE68); _opOutputTable = new ByteAccess(_musicData, 0xE7A); _adlibRegMirror = new ByteAccess(_musicData, 0xF7D); } else if (SystemVars.Instance.GameVersion.Version.Minor == 267) { instrumentDataLoc = _musicData.ToUInt16(0x11FB); _frequenceTable = new UShortAccess(_musicData, 0x7F4); _registerTable = new ByteAccess(_musicData, 0xDF4); _opOutputTable = new ByteAccess(_musicData, 0xE06); _adlibRegMirror = new ByteAccess(_musicData, 0xF55); } else { instrumentDataLoc = _musicData.ToUInt16(0x1205); _frequenceTable = new UShortAccess(_musicData, 0x7FE); _registerTable = new ByteAccess(_musicData, 0xDFE); _opOutputTable = new ByteAccess(_musicData, 0xE10); _adlibRegMirror = new ByteAccess(_musicData, 0xF5F); } _instrumentMap = new ByteAccess(_musicData, instrumentDataLoc); _instruments = new StructAccess <InstrumentStruct>(_musicData, instrumentDataLoc + 0x80); }