diff --git a/BizHawk.Emulation/BizHawk.Emulation.csproj b/BizHawk.Emulation/BizHawk.Emulation.csproj
index 8a64ca9ff7..3743ffb90e 100644
--- a/BizHawk.Emulation/BizHawk.Emulation.csproj
+++ b/BizHawk.Emulation/BizHawk.Emulation.csproj
@@ -79,38 +79,31 @@
VersionInfo.cs
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -559,6 +552,7 @@
+
diff --git a/BizHawk.Emulation/Computers/Commodore64/1541.cs b/BizHawk.Emulation/Computers/Commodore64/1541.cs
deleted file mode 100644
index fa9d672ac1..0000000000
--- a/BizHawk.Emulation/Computers/Commodore64/1541.cs
+++ /dev/null
@@ -1,210 +0,0 @@
-using BizHawk.Emulation.CPUs.M6502;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace BizHawk.Emulation.Computers.Commodore64
-{
- public class Drive1541
- {
- // the 1541 drive:
- //
- // 2kb ram, mapped 0000-07FF
- // two 6522 VIA chips, mapped at 1800 (communication to C64) and 1C00 (drive mechanics)
- // drive ROM, mapped C000-FFFF
-
- // default 1800:
- // 07 00 1A FF 05 00 FF FF
- // 04 00 00 00 00 00 00 00
- // default 1C00:
- // 90 00 00 00 05 00 FF FF
- // 04 00 00 00 00 00 80 00
-
- private Cia cia;
-
- public MOS6502X cpu;
- public int cyclesPerRevolution;
- public int cyclesPerSecond;
- public Disk disk;
- public byte[] ram;
- public byte[] rom;
- public double rpm;
- public ChipSignals signal;
- public Via via0;
- public Via via1;
-
- public Drive1541(byte[] driveRom, Region driveRegion, Cia ciaInterface)
- {
- rom = new byte[driveRom.Length];
- Array.Copy(driveRom, rom, driveRom.Length);
-
- cia = ciaInterface;
-
- switch (driveRegion)
- {
- case Region.NTSC:
- cyclesPerSecond = 14318181 / 14;
- break;
- case Region.PAL:
- cyclesPerSecond = 14318181 / 18;
- break;
- }
-
- HardReset();
- }
-
- public void Eject()
- {
- disk = null;
- }
-
- public void HardReset()
- {
- cpu = new MOS6502X();
- cpu.PC = (ushort)(Read(0xFFFC) + (Read(0xFFFD) << 8));
- cpu.ReadMemory = Read;
- cpu.WriteMemory = Write;
- cpu.DummyReadMemory = Read;
-
- ram = new byte[0x800];
- via0 = new Via();
- via1 = new Via();
- SetRPM(300.0);
-
- // attach VIA/CIA
- via0.Connect(cia.ConnectSerialPort(1));
-
- // set VIA values
- via0.Poke(0x0, 0x07);
- via0.Poke(0x2, 0x1A);
- via0.Poke(0x3, 0xFF);
- via0.Poke(0x4, 0x05);
- via0.Poke(0x6, 0xFF);
- via0.Poke(0x7, 0xFF);
- via0.Poke(0x8, 0x04);
- via0.Poke(0xE, 0x80);
- via1.Poke(0x0, 0x90);
- via1.Poke(0x4, 0x05);
- via1.Poke(0x6, 0xFF);
- via1.Poke(0x7, 0xFF);
- via1.Poke(0x8, 0x04);
- via1.Poke(0xE, 0x80);
- }
-
- public void Insert(Disk newDisk)
- {
- disk = newDisk;
- }
-
- public byte Peek(int addr)
- {
- addr &= 0xFFFF;
- if (addr < 0x0800)
- {
- return ram[addr];
- }
- else if (addr >= 0x1800 && addr < 0x1C00)
- {
- return via0.Peek(addr);
- }
- else if (addr >= 0x1C00 && addr < 0x2000)
- {
- return via1.Peek(addr);
- }
- else if (addr >= 0xC000)
- {
- return rom[addr & 0x3FFF];
- }
- return 0xFF;
- }
-
- public byte PeekVia0(int addr)
- {
- return via0.Peek(addr);
- }
-
- public byte PeekVia1(int addr)
- {
- return via1.Peek(addr);
- }
-
- public void PerformCycle()
- {
- cpu.IRQ = via0.IRQ | via1.IRQ;
- cpu.ExecuteOne();
- via0.PerformCycle();
- via1.PerformCycle();
- }
-
- public void Poke(int addr, byte val)
- {
- addr &= 0xFFFF;
- if (addr < 0x0800)
- {
- ram[addr] = val;
- }
- else if (addr >= 0x1800 && addr < 0x1C00)
- {
- via0.Poke(addr, val);
- }
- else if (addr >= 0x1C00 && addr < 0x2000)
- {
- via1.Poke(addr, val);
- }
- }
-
- public void PokeVia0(int addr, byte val)
- {
- via0.Poke(addr, val);
- }
-
- public void PokeVia1(int addr, byte val)
- {
- via1.Poke(addr, val);
- }
-
- public byte Read(ushort addr)
- {
- if (addr < 0x0800)
- {
- return ram[addr];
- }
- else if (addr >= 0x1800 && addr < 0x1C00)
- {
- return via0.Read(addr);
- }
- else if (addr >= 0x1C00 && addr < 0x2000)
- {
- return via1.Read(addr);
- }
- else if (addr >= 0xC000)
- {
- return rom[addr & 0x3FFF];
- }
- return 0xFF;
- }
-
- public void SetRPM(double newRPM)
- {
- rpm = newRPM;
- cyclesPerRevolution = (int)((double)cyclesPerSecond / newRPM / (double)60);
- }
-
- public void Write(ushort addr, byte val)
- {
- if (addr < 0x0800)
- {
- ram[addr] = val;
- }
- else if (addr >= 0x1800 && addr < 0x1C00)
- {
- via0.Write(addr, val);
- }
- else if (addr >= 0x1C00 && addr < 0x2000)
- {
- via1.Write(addr, val);
- }
- }
- }
-}
diff --git a/BizHawk.Emulation/Computers/Commodore64/C64.Core.cs b/BizHawk.Emulation/Computers/Commodore64/C64.Core.cs
new file mode 100644
index 0000000000..c5ca386b37
--- /dev/null
+++ b/BizHawk.Emulation/Computers/Commodore64/C64.Core.cs
@@ -0,0 +1,179 @@
+using BizHawk.Emulation.CPUs.M6502;
+using BizHawk.Emulation.Computers.Commodore64.MOS;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+
+namespace BizHawk.Emulation.Computers.Commodore64
+{
+ public enum Region
+ {
+ NTSC,
+ PAL
+ }
+
+ // emulated chips:
+ // U1: 6526 CIA0
+ // U2: 6526 CIA1
+ // U4: KERNAL & BASIC ROM
+ // U5: CHARACTER ROM
+ // U6: 6510 CPU
+ // U7: VIC 6567 (NTSC) or 6569 (PAL)
+ // U8: Memory multiplexer
+ // U9: SID 6581 or 8580
+ // U10: RAM
+ // U11: RAM
+ // U19: 2114 color RAM
+
+ public partial class C64 : IEmulator
+ {
+ // ------------------------------------
+
+ C64Chips chips;
+
+ // ------------------------------------
+
+ private void Init(Region initRegion)
+ {
+ chips = new C64Chips(initRegion);
+ InitRoms();
+
+ // configure video
+ CoreOutputComm.VsyncDen = chips.vic.CyclesPerFrame;
+ CoreOutputComm.VsyncNum = chips.vic.CyclesPerSecond;
+ }
+
+ private void InitRoms()
+ {
+ string sourceFolder = CoreInputComm.C64_FirmwaresPath;
+ if (sourceFolder == null)
+ sourceFolder = @".\C64\Firmwares";
+
+ string basicFile = "basic";
+ string charFile = "chargen";
+ string kernalFile = "kernal";
+
+ string basicPath = Path.Combine(sourceFolder, basicFile);
+ string charPath = Path.Combine(sourceFolder, charFile);
+ string kernalPath = Path.Combine(sourceFolder, kernalFile);
+
+ if (!File.Exists(basicPath)) HandleFirmwareError(basicFile);
+ if (!File.Exists(charPath)) HandleFirmwareError(charFile);
+ if (!File.Exists(kernalPath)) HandleFirmwareError(kernalFile);
+
+ byte[] basicRom = File.ReadAllBytes(basicPath);
+ byte[] charRom = File.ReadAllBytes(charPath);
+ byte[] kernalRom = File.ReadAllBytes(kernalPath);
+
+ chips.basicRom = new Chip23XX(Chip23XXmodel.Chip2364, basicRom);
+ chips.kernalRom = new Chip23XX(Chip23XXmodel.Chip2364, kernalRom);
+ chips.charRom = new Chip23XX(Chip23XXmodel.Chip2332, charRom);
+ }
+
+ // ------------------------------------
+
+ public bool DriveLED
+ {
+ get
+ {
+ return false;
+ }
+ }
+
+ public void Execute(uint count)
+ {
+ for (; count > 0; count--)
+ {
+ chips.ExecutePhase1();
+ chips.ExecutePhase2();
+ }
+ }
+
+ public void HardReset()
+ {
+ chips.HardReset();
+ }
+
+ private byte Peek(int addr)
+ {
+ return chips.cpu.Peek(addr);
+ }
+
+ private void Poke(int addr, byte val)
+ {
+ chips.cpu.Poke(addr, val);
+ }
+
+ // ------------------------------------
+ }
+
+ public class C64Chips
+ {
+ public Chip23XX basicRom; //u4
+ public Chip23XX charRom; //u5
+ public MOS6526 cia0; //u1
+ public MOS6526 cia1; //u2
+ public Chip2114 colorRam; //u19
+ public MOS6510 cpu; //u6
+ public Chip23XX kernalRom; //u4
+ public MOSPLA pla; //
+ public Chip4864 ram; //u10+11
+ public Sid sid; //u9
+ public Vic vic; //u7
+
+ public C64Chips(Region initRegion)
+ {
+ cia0 = new MOS6526(initRegion);
+ cia1 = new MOS6526(initRegion);
+ pla = new MOSPLA(this, cia1.ReadPort0);
+ switch (initRegion)
+ {
+ case Region.NTSC:
+ vic = new MOS6567(this);
+ break;
+ case Region.PAL:
+ vic = new MOS6569(this);
+ break;
+ }
+ colorRam = new Chip2114();
+ cpu = new MOS6510(this);
+ ram = new Chip4864();
+ sid = new MOS6581();
+ }
+
+ public void ExecutePhase1()
+ {
+ cia0.ExecutePhase1();
+ cia1.ExecutePhase1();
+ sid.ExecutePhase1();
+ vic.ExecutePhase1();
+ cpu.ExecutePhase1();
+ }
+
+ public void ExecutePhase2()
+ {
+ cia0.ExecutePhase2();
+ cia1.ExecutePhase2();
+ sid.ExecutePhase2();
+ vic.ExecutePhase2();
+ cpu.ExecutePhase2();
+ }
+
+ public void HardReset()
+ {
+ // note about hard reset: NOT identical to cold start
+
+ // reset all chips
+ cia0.HardReset();
+ cia1.HardReset();
+ colorRam.HardReset();
+ cpu.HardReset();
+ pla.HardReset();
+ ram.HardReset();
+ sid.HardReset();
+ vic.HardReset();
+ }
+ }
+}
diff --git a/BizHawk.Emulation/Computers/Commodore64/C64.PeekPoke.cs b/BizHawk.Emulation/Computers/Commodore64/C64.PeekPoke.cs
deleted file mode 100644
index cecf16925a..0000000000
--- a/BizHawk.Emulation/Computers/Commodore64/C64.PeekPoke.cs
+++ /dev/null
@@ -1,124 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace BizHawk.Emulation.Computers.Commodore64
-{
- public partial class C64 : IEmulator
- {
- public byte PeekCia0(int addr)
- {
- return cia0.Peek(addr);
- }
-
- public byte PeekCia1(int addr)
- {
- return cia1.Peek(addr);
- }
-
- public byte PeekColorRAM(int addr)
- {
- return (byte)(mem.colorRam[addr & 0x3FF] & 0xF);
- }
-
- public byte PeekDiskDrive(int addr)
- {
- if (diskDriveAttached)
- return diskDrive.Peek(addr);
- return 0xFF;
- }
-
- public byte PeekMemory(ushort addr)
- {
- return mem.Peek(addr);
- }
-
- public byte PeekMemoryInt(int addr)
- {
- return mem.Peek((ushort)(addr & 0xFFFF));
- }
-
- public byte PeekRAM(int addr)
- {
- return mem.ram[addr];
- }
-
- public byte PeekSid(int addr)
- {
- return sid.regs[addr];
- }
-
- public byte PeekVia0(int addr)
- {
- if (diskDriveAttached)
- return diskDrive.PeekVia0(addr);
- return 0xFF;
- }
-
- public byte PeekVia1(int addr)
- {
- if (diskDriveAttached)
- return diskDrive.PeekVia1(addr);
- return 0xFF;
- }
-
- public byte PeekVic(int addr)
- {
- return vic.Peek(addr);
- }
-
- public void PokeCia0(int addr, byte val)
- {
- cia0.Poke(addr, val);
- }
-
- public void PokeCia1(int addr, byte val)
- {
- cia1.Poke(addr, val);
- }
-
- public void PokeColorRAM(int addr, byte val)
- {
- mem.colorRam[addr & 0x3FF] = (byte)(val & 0xF);
- }
-
- public void PokeDiskDrive(int addr, byte val)
- {
- if (diskDriveAttached)
- diskDrive.Poke(addr, val);
- }
-
- public void PokeMemoryInt(int addr, byte val)
- {
- mem.Poke((ushort)(addr & 0xFFFF), val);
- }
-
- public void PokeRAM(int addr, byte val)
- {
- mem.PokeRam(addr, val);
- }
-
- public void PokeSid(int addr, byte val)
- {
- sid.Poke(addr, val);
- }
-
- public void PokeVia0(int addr, byte val)
- {
- if (diskDriveAttached)
- diskDrive.PokeVia0(addr, val);
- }
-
- public void PokeVia1(int addr, byte val)
- {
- if (diskDriveAttached)
- diskDrive.PokeVia1(addr, val);
- }
-
- public void PokeVic(int addr, byte val)
- {
- vic.Poke(addr, val);
- }
- }
-}
diff --git a/BizHawk.Emulation/Computers/Commodore64/Savestate.cs b/BizHawk.Emulation/Computers/Commodore64/C64.Savestate.cs
similarity index 57%
rename from BizHawk.Emulation/Computers/Commodore64/Savestate.cs
rename to BizHawk.Emulation/Computers/Commodore64/C64.Savestate.cs
index 365fad9ad2..793cd10e38 100644
--- a/BizHawk.Emulation/Computers/Commodore64/Savestate.cs
+++ b/BizHawk.Emulation/Computers/Commodore64/C64.Savestate.cs
@@ -55,37 +55,6 @@ namespace BizHawk.Emulation.Computers.Commodore64
void SyncState(Serializer ser)
{
- // global stuffs
- ser.BeginSection("GAME");
- ser.Sync("Lag", ref _lagcount);
- ser.Sync("Frame", ref _frame);
- ser.Sync("IsLag", ref _islag);
- ser.EndSection();
-
- // cpu creates its own section..
- cpu.SyncState(ser);
-
- ser.BeginSection("MEM");
- mem.SyncState(ser);
- ser.EndSection();
-
- ser.BeginSection("VIC");
- vic.SyncState(ser);
- ser.EndSection();
-
- ser.BeginSection("SID");
- sid.SyncState(ser);
- ser.EndSection();
-
- ser.BeginSection("CIA0");
- cia0.SyncState(ser);
- ser.EndSection();
-
- ser.BeginSection("CIA1");
- cia1.SyncState(ser);
- ser.EndSection();
-
- // TODO: drive
}
}
}
diff --git a/BizHawk.Emulation/Computers/Commodore64/C64.core.cs b/BizHawk.Emulation/Computers/Commodore64/C64.core.cs
deleted file mode 100644
index 8a49e00c0a..0000000000
--- a/BizHawk.Emulation/Computers/Commodore64/C64.core.cs
+++ /dev/null
@@ -1,201 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
-using BizHawk.Emulation.CPUs.M6502;
-
-namespace BizHawk.Emulation.Computers.Commodore64
-{
- public enum Region
- {
- NTSC,
- PAL
- }
-
- public partial class C64 : IEmulator
- {
- // input
- public Input input;
-
- // source
- public Cartridge cart = null;
- public Drive1541 diskDrive = null;
- public bool diskDriveAttached = false;
- public string extension;
- public byte[] inputFile;
- public List mediaAttached = new List();
-
- // chipset
- public Cia cia0;
- public Cia cia1;
- public MOS6502X cpu;
- public Memory mem;
- public Sid sid;
- public VicII vic;
- public ChipSignals signal;
-
- // cpu
- private bool haltCPU;
-
- public bool DriveLED
- {
- get
- {
- if (diskDriveAttached)
- {
- return (diskDrive.Peek(0x1C00) & 0x8) != 0;
- }
- else
- {
- return false;
- }
- }
- }
-
- public void HardReset()
- {
- mem.HardReset();
- cia0.HardReset();
- cia1.HardReset();
- vic.HardReset();
- sid.HardReset();
- if (diskDriveAttached)
- diskDrive.HardReset();
- }
-
- private void Init(Region initRegion)
- {
- // initalize cpu
- cpu = new MOS6502X();
- cpu.ReadMemory = ReadMemoryCPU;
- cpu.WriteMemory = WriteMemory;
- cpu.DummyReadMemory = PeekMemory;
-
- // initialize cia timers
- cia0 = new Cia(initRegion);
- cia1 = new Cia(initRegion);
-
- // initialize vic
- signal = new ChipSignals();
- vic = new VicII(signal, initRegion);
-
- // set vsync rate
- switch (initRegion)
- {
- case Region.NTSC:
- CoreOutputComm.VsyncDen = vic.CyclesPerFrame * 14;
- CoreOutputComm.VsyncNum = 14318181;
- break;
- case Region.PAL:
- CoreOutputComm.VsyncDen = vic.CyclesPerFrame * 18;
- CoreOutputComm.VsyncNum = 17734472;
- break;
- }
-
- // initialize sid
- sid = new Sid(initRegion, 44100); // we'll assume 44.1k for now until there's a better way
-
- // initialize memory (this must be done AFTER all other chips are initialized)
- string romPath = CoreInputComm.C64_FirmwaresPath;
- if (romPath == null)
- {
- romPath = @".\C64\Firmwares";
- }
- mem = new Memory(romPath, vic, sid, cia0, cia1);
- vic.mem = mem;
-
- // initialize cpu hard reset vector
- cpu.PC = (ushort)(ReadMemory(0xFFFC) + (ReadMemory(0xFFFD) << 8));
- cpu.BCD_Enabled = true;
-
- // initailize input
- input = new Input(new DataPortConnector[] { cia0.ConnectPort(0), cia0.ConnectPort(1) });
- cia0.AttachWriteHook(0, input.WritePortA);
- cia0.AttachWriteHook(1, input.WritePortB);
-
- // initialize media
- switch (extension.ToUpper())
- {
- case @".G64":
- diskDrive = new Drive1541(File.ReadAllBytes(Path.Combine(romPath, @"dos1541")), initRegion, cia1);
- diskDrive.Insert(G64.Read(inputFile));
- break;
- case @".D64":
- diskDrive = new Drive1541(File.ReadAllBytes(Path.Combine(romPath, @"dos1541")), initRegion, cia1);
- diskDrive.Insert(D64.Read(inputFile));
- break;
- case @".PRG":
- if (inputFile.Length > 2)
- mediaAttached.Add(new PRGFile(inputFile, mem, cpu));
- break;
- case @".CRT":
- Cartridge newCart = new Cartridge(inputFile, mem);
- if (newCart.valid)
- {
- cart = newCart;
- mediaAttached.Add(cart);
- }
- break;
- }
-
- diskDriveAttached = (diskDrive != null);
- }
-
- public void PollInput()
- {
- input.Poll();
- signal.KeyboardNMI = input.restorePressed;
- }
-
- public byte ReadMemory(ushort addr)
- {
- return mem.Read(addr);
- }
-
- private byte ReadMemoryCPU(ushort addr)
- {
- if (!signal.CpuRDY || !signal.CpuAEC)
- haltCPU = true;
- return mem.Read(addr);
- }
-
- public void WriteMemory(ushort addr, byte value)
- {
- mem.Write(addr, value);
- }
-
- public void WriteMemoryCPU(ushort addr, byte value)
- {
- if (!signal.CpuAEC)
- haltCPU = true;
- mem.Write(addr, value);
- }
- }
-
- public class ChipSignals
- {
- private bool[] _CiaSerialInput = new bool[2];
- private bool[] _CiaIRQOutput = new bool[2];
- private bool _KeyboardNMIOutput;
- private bool _VicAECOutput;
- private bool _VicBAOutput;
- private bool _VicIRQOutput;
- private bool _VicLPInput;
-
- public bool CiaIRQ0 { get { return _CiaIRQOutput[0]; } set { _CiaIRQOutput[0] = value; } }
- public bool CiaIRQ1 { get { return _CiaIRQOutput[1]; } set { _CiaIRQOutput[1] = value; } }
- public bool CiaSerial0 { get { return _CiaSerialInput[0]; } }
- public bool CiaSerial1 { get { return _CiaSerialInput[1]; } }
- public bool CpuAEC { get { return _VicAECOutput; } }
- public bool CpuIRQ { get { return _VicIRQOutput | _CiaIRQOutput[0]; } }
- public bool CpuNMI { get { return _CiaIRQOutput[1] | _KeyboardNMIOutput; } }
- public bool CpuRDY { get { return !_VicBAOutput; } }
- public bool KeyboardNMI { get { return _KeyboardNMIOutput; } set { _KeyboardNMIOutput = value; } }
- public bool LPOutput { get { return _VicLPInput; } set { _VicLPInput = value; } }
- public bool VicAEC { get { return _VicAECOutput; } set { _VicAECOutput = value; } }
- public bool VicBA { get { return _VicBAOutput; } set { _VicBAOutput = value; } }
- public bool VicIRQ { get { return _VicIRQOutput; } set { _VicIRQOutput = value; } }
- public bool VicLP { get { return _VicLPInput; } }
- }
-}
diff --git a/BizHawk.Emulation/Computers/Commodore64/C64.cs b/BizHawk.Emulation/Computers/Commodore64/C64.cs
index 9b4d02cfc2..423e64ac9a 100644
--- a/BizHawk.Emulation/Computers/Commodore64/C64.cs
+++ b/BizHawk.Emulation/Computers/Commodore64/C64.cs
@@ -9,6 +9,10 @@ namespace BizHawk.Emulation.Computers.Commodore64
{
public partial class C64 : IEmulator
{
+ private uint cyclesPerFrame;
+ private string extension;
+ private byte[] inputFile;
+
public C64(GameInfo game, byte[] rom, string romextension)
{
inputFile = rom;
@@ -17,6 +21,7 @@ namespace BizHawk.Emulation.Computers.Commodore64
CoreOutputComm = new CoreOutputComm();
CoreInputComm = new CoreInputComm();
Init(Region.PAL);
+ cyclesPerFrame = (uint)chips.vic.CyclesPerFrame;
CoreOutputComm.UsesDriveLed = true;
}
@@ -52,14 +57,14 @@ namespace BizHawk.Emulation.Computers.Commodore64
// audio/video
public void EndAsyncSound() { } //TODO
- public ISoundProvider SoundProvider { get { return sid; } }
+ public ISoundProvider SoundProvider { get { return chips.sid; } }
public bool StartAsyncSound() { return true; } //TODO
- public ISyncSoundProvider SyncSoundProvider { get { return new SidSyncSoundProvider(sid); } }
- public IVideoProvider VideoProvider { get { return vic; } }
+ public ISyncSoundProvider SyncSoundProvider { get { return chips.sid; } }
+ public IVideoProvider VideoProvider { get { return chips.vic; } }
// controller
public ControllerDefinition ControllerDefinition { get { return C64ControllerDefinition; } }
- public IController Controller { get { return input.controller; } set { input.controller = value; } }
+ public IController Controller { get { return null; } set { } }
public static readonly ControllerDefinition C64ControllerDefinition = new ControllerDefinition
{
Name = "Commodore 64 Controller", //TODO
@@ -84,59 +89,23 @@ namespace BizHawk.Emulation.Computers.Commodore64
// process frame
public void FrameAdvance(bool render, bool rendersound)
{
- int cyclesPerFrame = vic.CyclesPerFrame;
-
- // bizhawk interface setup
- _frame++;
- mem.inputWasRead = false;
-
- // apply any media if needed
- foreach (IMedia media in mediaAttached)
- {
- if (!media.Loaded() && media.Ready())
- {
- media.Apply();
- }
- }
-
- // refresh the input values
- PollInput();
-
- // perform the cycle
- for (int i = 0; i < cyclesPerFrame; i++)
- {
- if (!haltCPU)
- {
- cpu.IRQ = signal.CpuIRQ;
- cpu.NMI = signal.CpuNMI;
- cpu.ExecuteOne();
- }
-
- vic.PerformCycle();
- cia0.PerformCycle();
- signal.CiaIRQ0 = cia0.IRQ;
- cia1.PerformCycle();
- signal.CiaIRQ1 = cia1.IRQ;
- sid.PerformCycle();
-
- if (diskDriveAttached)
- diskDrive.PerformCycle();
-
- if (signal.CpuAEC)
- haltCPU = false;
-
- }
-
- _islag = !mem.inputWasRead;
+ chips.pla.InputWasRead = false;
+ Execute(cyclesPerFrame);
+ _islag = !chips.pla.InputWasRead;
if (_islag)
- {
LagCount++;
- }
+ _frame++;
CoreOutputComm.DriveLED = DriveLED;
}
+ private void HandleFirmwareError(string file)
+ {
+ System.Windows.Forms.MessageBox.Show("the C64 core is referencing a firmware file which could not be found. Please make sure it's in your configured C64 firmwares folder. The referenced filename is: " + file);
+ throw new FileNotFoundException();
+ }
+
public byte[] SaveStateBinary()
{
MemoryStream ms = new MemoryStream();
@@ -149,16 +118,7 @@ namespace BizHawk.Emulation.Computers.Commodore64
private void SetupMemoryDomains()
{
var domains = new List(1);
- domains.Add(new MemoryDomain("System Bus", 0x10000, Endian.Little, new Func(PeekMemoryInt), new Action(PokeMemoryInt)));
- domains.Add(new MemoryDomain("RAM", 0x10000, Endian.Little, new Func(PeekRAM), new Action(PokeRAM)));
- domains.Add(new MemoryDomain("CIA0", 0x10, Endian.Little, new Func(PeekCia0), new Action(PokeCia0)));
- domains.Add(new MemoryDomain("CIA1", 0x10, Endian.Little, new Func(PeekCia1), new Action(PokeCia1)));
- domains.Add(new MemoryDomain("SID", 0x20, Endian.Little, new Func(PeekSid), new Action(PokeSid)));
- domains.Add(new MemoryDomain("VIC", 0x40, Endian.Little, new Func(PeekVic), new Action(PokeVic)));
- domains.Add(new MemoryDomain("CRAM", 0x400, Endian.Little, new Func(PeekColorRAM), new Action(PokeColorRAM)));
- domains.Add(new MemoryDomain("DISKRAM", 0x10000, Endian.Little, new Func(PeekDiskDrive), new Action(PokeDiskDrive)));
- domains.Add(new MemoryDomain("DISKVIA0", 0x10, Endian.Little, new Func(PeekVia0), new Action(PokeVia0)));
- domains.Add(new MemoryDomain("DISKVIA1", 0x10, Endian.Little, new Func(PeekVia1), new Action(PokeVia1)));
+ domains.Add(new MemoryDomain("System Bus", 0x10000, Endian.Little, new Func(Peek), new Action(Poke)));
memoryDomains = domains.AsReadOnly();
}
}
diff --git a/BizHawk.Emulation/Computers/Commodore64/Cartridge.cs b/BizHawk.Emulation/Computers/Commodore64/Cartridge.cs
deleted file mode 100644
index f165856464..0000000000
--- a/BizHawk.Emulation/Computers/Commodore64/Cartridge.cs
+++ /dev/null
@@ -1,199 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
-
-namespace BizHawk.Emulation.Computers.Commodore64
-{
- public class CartridgeChip
- {
- public int address;
- public int bank;
- public byte[] data;
- public ushort romMask;
- public int type;
- }
-
- public partial class Cartridge : IMedia
- {
- public Func Read;
- public Func ReadPort;
- public Action WritePort;
-
- public List chips;
- public bool exRomPin;
- public bool gamePin;
- public CartridgeChip selectedChip;
- public int type;
- public bool valid;
- public int version;
-
- private bool loaded;
- private Memory mem;
-
- public Cartridge(byte[] rom, Memory memory)
- {
- mem = memory;
- chips = new List();
-
- if (rom.Length >= 0x50)
- {
- MemoryStream source = new MemoryStream(rom);
- BinaryReader reader = new BinaryReader(source);
- string idString;
-
- // note: cartridge files store values big-endian.
-
- idString = new string(reader.ReadChars(16));
- if (idString == "C64 CARTRIDGE ")
- {
- int headerLength = 0;
- headerLength = reader.ReadByte();
- headerLength <<= 8;
- headerLength |= reader.ReadByte();
- headerLength <<= 8;
- headerLength |= reader.ReadByte();
- headerLength <<= 8;
- headerLength |= reader.ReadByte();
-
- version = reader.ReadByte();
- version <<= 8;
- version |= reader.ReadByte();
-
- type = reader.ReadByte();
- type <<= 8;
- type |= reader.ReadByte();
-
- if (type != 0x0000)
- {
- // the emulator does not support anything other than type 0 right now
- valid = false;
- return;
- }
-
- exRomPin = (reader.ReadByte() == 1);
- gamePin = (reader.ReadByte() == 1);
-
- reader.ReadBytes(6); // reserved
- reader.ReadBytes(32); // name
-
- // skip the rest, don't need this info
- if (headerLength > 0x40)
- {
- reader.ReadBytes(headerLength - 0x40);
- }
-
- while (source.Position < rom.Length)
- {
- string chipID = new string(reader.ReadChars(4));
-
- if (chipID == "CHIP")
- {
- CartridgeChip chip = new CartridgeChip();
-
- int packetLength;
- packetLength = reader.ReadByte();
- packetLength <<= 8;
- packetLength |= reader.ReadByte();
- packetLength <<= 8;
- packetLength |= reader.ReadByte();
- packetLength <<= 8;
- packetLength |= reader.ReadByte();
- packetLength -= 16;
-
- chip.type = reader.ReadByte();
- chip.type <<= 8;
- chip.type |= reader.ReadByte();
-
- chip.bank = reader.ReadByte();
- chip.bank <<= 8;
- chip.bank |= reader.ReadByte();
-
- chip.address = reader.ReadByte();
- chip.address <<= 8;
- chip.address |= reader.ReadByte();
-
- int size;
- size = reader.ReadByte();
- size <<= 8;
- size |= reader.ReadByte();
-
- chip.data = reader.ReadBytes(size);
- chip.romMask = (ushort)(size - 1);
-
- packetLength -= size;
- if (packetLength > 0)
- {
- // discard extra bytes
- reader.ReadBytes(packetLength);
- }
-
- chips.Add(chip);
- }
- else
- {
- break;
- }
- }
-
- valid = (chips.Count > 0);
-
- if (valid)
- UpdateMapper();
- }
- reader.Close();
- source.Dispose();
- }
- }
-
- public void Apply()
- {
- mem.cart = this;
- UpdateRomPins();
- loaded = true;
- }
-
- public bool Loaded()
- {
- return loaded;
- }
-
- private byte ReadDummy(ushort addr)
- {
- return 0;
- }
-
- public bool Ready()
- {
- return true;
- }
-
- private void UpdateMapper()
- {
- Read = ReadDummy;
- ReadPort = ReadDummy;
- WritePort = WriteDummy;
-
- switch (type)
- {
- case 0x0000:
- Read = Read0000;
- ReadPort = ReadPort0000;
- WritePort = WritePort0000;
- break;
- }
- }
-
- private void UpdateRomPins()
- {
- mem.exRomPin = exRomPin;
- mem.gamePin = gamePin;
- mem.UpdateLayout();
- }
-
- private void WriteDummy(ushort addr, byte val)
- {
- }
- }
-}
diff --git a/BizHawk.Emulation/Computers/Commodore64/CartridgeMappers.cs b/BizHawk.Emulation/Computers/Commodore64/CartridgeMappers.cs
deleted file mode 100644
index 25c22f7ede..0000000000
--- a/BizHawk.Emulation/Computers/Commodore64/CartridgeMappers.cs
+++ /dev/null
@@ -1,419 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace BizHawk.Emulation.Computers.Commodore64
-{
- public partial class Cartridge : IMedia
- {
- public int bank;
-
- private byte Read0000(ushort addr)
- {
- // standard cart, no banking
- CartridgeChip currentChip = chips[0];
- return currentChip.data[addr & currentChip.romMask];
- }
-
- private byte Read0001(ushort addr)
- {
- return 0;
- }
-
- private byte Read0002(ushort addr)
- {
- return 0;
- }
-
- private byte Read0003(ushort addr)
- {
- return 0;
- }
-
- private byte Read0004(ushort addr)
- {
- return 0;
- }
-
- private byte Read0005(ushort addr)
- {
- return 0;
- }
-
- private byte Read0006(ushort addr)
- {
- return 0;
- }
-
- private byte Read0007(ushort addr)
- {
- return 0;
- }
-
- private byte Read0008(ushort addr)
- {
- return 0;
- }
-
- private byte Read0009(ushort addr)
- {
- return 0;
- }
-
- private byte Read000A(ushort addr)
- {
- return 0;
- }
-
- private byte Read000B(ushort addr)
- {
- return 0;
- }
-
- private byte Read000C(ushort addr)
- {
- return 0;
- }
-
- private byte Read000D(ushort addr)
- {
- return 0;
- }
-
- private byte Read000E(ushort addr)
- {
- return 0;
- }
-
- private byte Read000F(ushort addr)
- {
- return 0;
- }
-
- private byte Read0010(ushort addr)
- {
- return 0;
- }
-
- private byte Read0011(ushort addr)
- {
- return 0;
- }
-
- private byte Read0012(ushort addr)
- {
- return 0;
- }
-
- private byte Read0013(ushort addr)
- {
-
- return 0;
- }
-
- private byte Read0014(ushort addr)
- {
- return 0;
- }
-
- private byte Read0015(ushort addr)
- {
- return 0;
- }
-
- private byte Read0016(ushort addr)
- {
- return 0;
- }
-
- private byte Read0017(ushort addr)
- {
- return 0;
- }
-
- private byte Read0018(ushort addr)
- {
- return 0;
- }
-
- private byte Read0019(ushort addr)
- {
- return 0;
- }
-
- private byte Read001A(ushort addr)
- {
- return 0;
- }
-
- private byte Read001B(ushort addr)
- {
- return 0;
- }
-
- private byte ReadPort0000(ushort addr)
- {
- return 0;
- }
-
- private byte ReadPort0001(ushort addr)
- {
- return 0;
- }
-
- private byte ReadPort0002(ushort addr)
- {
- return 0;
- }
-
- private byte ReadPort0003(ushort addr)
- {
- return 0;
- }
-
- private byte ReadPort0004(ushort addr)
- {
- return 0;
- }
-
- private byte ReadPort0005(ushort addr)
- {
- return 0;
- }
-
- private byte ReadPort0006(ushort addr)
- {
- return 0;
- }
-
- private byte ReadPort0007(ushort addr)
- {
- return 0;
- }
-
- private byte ReadPort0008(ushort addr)
- {
- return 0;
- }
-
- private byte ReadPort0009(ushort addr)
- {
- return 0;
- }
-
- private byte ReadPort000A(ushort addr)
- {
- return 0;
- }
-
- private byte ReadPort000B(ushort addr)
- {
- return 0;
- }
-
- private byte ReadPort000C(ushort addr)
- {
- return 0;
- }
-
- private byte ReadPort000D(ushort addr)
- {
- return 0;
- }
-
- private byte ReadPort000E(ushort addr)
- {
- return 0;
- }
-
- private byte ReadPort000F(ushort addr)
- {
- return 0;
- }
-
- private byte ReadPort0010(ushort addr)
- {
- return 0;
- }
-
- private byte ReadPort0011(ushort addr)
- {
- return 0;
- }
-
- private byte ReadPort0012(ushort addr)
- {
- return 0;
- }
-
- private byte ReadPort0013(ushort addr)
- {
- return 0;
- }
-
- private byte ReadPort0014(ushort addr)
- {
- return 0;
- }
-
- private byte ReadPort0015(ushort addr)
- {
- return 0;
- }
-
- private byte ReadPort0016(ushort addr)
- {
- return 0;
- }
-
- private byte ReadPort0017(ushort addr)
- {
- return 0;
- }
-
- private byte ReadPort0018(ushort addr)
- {
- return 0;
- }
-
- private byte ReadPort0019(ushort addr)
- {
- return 0;
- }
-
- private byte ReadPort001A(ushort addr)
- {
- return 0;
- }
-
- private byte ReadPort001B(ushort addr)
- {
- return 0;
- }
-
- private void WritePort0000(ushort addr, byte val)
- {
- }
-
- private void WritePort0001(ushort addr, byte val)
- {
- }
-
- private void WritePort0002(ushort addr, byte val)
- {
- }
-
- private void WritePort0003(ushort addr, byte val)
- {
- }
-
- private void WritePort0004(ushort addr, byte val)
- {
- }
-
- private void WritePort0005(ushort addr, byte val)
- {
- }
-
- private void WritePort0006(ushort addr, byte val)
- {
- }
-
- private void WritePort0007(ushort addr, byte val)
- {
- }
-
- private void WritePort0008(ushort addr, byte val)
- {
- }
-
- private void WritePort0009(ushort addr, byte val)
- {
- }
-
- private void WritePort000A(ushort addr, byte val)
- {
- }
-
- private void WritePort000B(ushort addr, byte val)
- {
- }
-
- private void WritePort000C(ushort addr, byte val)
- {
- }
-
- private void WritePort000D(ushort addr, byte val)
- {
- }
-
- private void WritePort000E(ushort addr, byte val)
- {
- }
-
- private void WritePort000F(ushort addr, byte val)
- {
- }
-
- private void WritePort0010(ushort addr, byte val)
- {
- }
-
- private void WritePort0011(ushort addr, byte val)
- {
- }
-
- private void WritePort0012(ushort addr, byte val)
- {
- }
-
- private void WritePort0013(ushort addr, byte val)
- {
- bank = (val & 0x7F) % chips.Count;
- if ((bank & 0x80) != 0x00)
- {
- exRomPin = false;
- gamePin = false;
- }
- else
- {
- exRomPin = true;
- gamePin = false;
- }
- UpdateRomPins();
- }
-
- private void WritePort0014(ushort addr, byte val)
- {
- }
-
- private void WritePort0015(ushort addr, byte val)
- {
- }
-
- private void WritePort0016(ushort addr, byte val)
- {
- }
-
- private void WritePort0017(ushort addr, byte val)
- {
- }
-
- private void WritePort0018(ushort addr, byte val)
- {
- }
-
- private void WritePort0019(ushort addr, byte val)
- {
- }
-
- private void WritePort001A(ushort addr, byte val)
- {
- }
-
- private void WritePort001B(ushort addr, byte val)
- {
- }
- }
-}
diff --git a/BizHawk.Emulation/Computers/Commodore64/Cia.cs b/BizHawk.Emulation/Computers/Commodore64/Cia.cs
deleted file mode 100644
index 2f2b69f7a0..0000000000
--- a/BizHawk.Emulation/Computers/Commodore64/Cia.cs
+++ /dev/null
@@ -1,652 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace BizHawk.Emulation.Computers.Commodore64
-{
- public class CiaRegs
- {
- public bool ALARM; // alarm enabled
- public int ALARM10; // alarm 10ths of a second
- public int ALARMHR; // alarm hours
- public int ALARMMIN; // alarm minutes
- public bool ALARMPM; // alarm AM/PM
- public int ALARMSEC; // alarm seconds
- public bool CNT; // external counter bit input
- public bool EIALARM; // enable alarm interrupt (internal)
- public bool EIFLG; // enable flag pin interrupt (internal)
- public bool EISP; // enable shift register interrupt (internal)
- public bool[] EIT = new bool[2]; // enable timer interrupt (internal)
- public bool FLG; // external flag bit input
- public bool IALARM; // alarm interrupt triggered
- public bool IFLG; // interrupt triggered on FLAG pin
- public int[] INMODE = new int[2]; // timer input mode
- public bool IRQ; // interrupt triggered
- public bool ISP; // shift register interrupt
- public bool[] IT = new bool[2]; // timer interrupt
- public bool[] LOAD = new bool[2]; // force load timer
- public bool[] OUTMODE = new bool[2]; // timer output mode
- public bool[] PBON = new bool[2]; // port bit modify on
- public bool[] RUNMODE = new bool[2]; // running mode
- public int SDR; // serial shift register
- public int SDRCOUNT; // serial shift register bit count
- public bool SPMODE; // shift register mode
- public bool[] START = new bool[2]; // timer enabled
- public int[] T = new int[2]; // timer counter
- public bool[] TICK = new bool[2]; // execute timer tick
- public int[] TLATCH = new int[2]; // timer latch (internal)
- public int TOD10; // time of day 10ths of a second
- public bool TODIN; // time of day/alarm set
- public int TODHR; // time of day hour
- public int TODMIN; // time of day minute
- public bool TODPM; // time of day AM/PM
- public bool TODREADLATCH; // read latch (internal)
- public int TODREADLATCH10; // tod read latch (internal)
- public int TODREADLATCHSEC; // tod read latch (internal)
- public int TODREADLATCHMIN; // tod read latch (internal)
- public int TODREADLATCHHR; // tod read latch (internal)
- public int TODSEC; // time of day seconds
-
- public DataPortBus[] ports;
-
- public DataPortConnector[] connectors;
-
- public CiaRegs()
- {
- ports = new DataPortBus[2];
- ports[0] = new DataPortBus();
- ports[1] = new DataPortBus();
- connectors = new DataPortConnector[2];
- connectors[0] = ports[0].Connect();
- connectors[1] = ports[1].Connect();
- HardReset();
- }
-
- public byte this[int addr]
- {
- get
- {
- // value of open bits
- int result = 0x00;
-
- addr &= 0x0F;
- switch (addr)
- {
- case 0x00:
- result = connectors[0].Data;
- break;
- case 0x01:
- result = connectors[1].Data;
- break;
- case 0x02:
- result = connectors[0].Direction;
- break;
- case 0x03:
- result = connectors[1].Direction;
- break;
- case 0x04:
- result = (T[0] & 0xFF);
- break;
- case 0x05:
- result = ((T[0] >> 8) & 0xFF);
- break;
- case 0x06:
- result = (T[1] & 0xFF);
- break;
- case 0x07:
- result = ((T[1] >> 8) & 0xFF);
- break;
- case 0x08:
- result |= (TOD10 & 0x0F);
- break;
- case 0x09:
- result &= 0x80;
- result |= (TODSEC & 0x7F);
- break;
- case 0x0A:
- result &= 0x80;
- result |= (TODMIN & 0x7F);
- break;
- case 0x0B:
- result &= 0x40;
- result |= ((TODHR & 0x3F) | (TODPM ? 0x80 : 0x00));
- break;
- case 0x0C:
- result = SDR;
- break;
- case 0x0D:
- result &= 0x9F;
- result |= (IT[0] ? 0x01 : 0x00);
- result |= (IT[1] ? 0x02 : 0x00);
- result |= (IALARM ? 0x04 : 0x00);
- result |= (ISP ? 0x08 : 0x00);
- result |= (IFLG ? 0x10 : 0x00);
- result |= (IRQ ? 0x80 : 0x00);
- break;
- case 0x0E:
- result = (START[0] ? 0x01 : 0x00);
- result = (PBON[0] ? 0x02 : 0x00);
- result = (OUTMODE[0] ? 0x04 : 0x00);
- result = (RUNMODE[0] ? 0x08 : 0x00);
- result = (LOAD[0] ? 0x10 : 0x00);
- result = ((INMODE[0] & 0x01) << 5);
- result = (SPMODE ? 0x40 : 0x00);
- result = (TODIN ? 0x80 : 0x00);
- break;
- case 0x0F:
- result = (START[1] ? 0x01 : 0x00);
- result = (PBON[1] ? 0x02 : 0x00);
- result = (OUTMODE[1] ? 0x04 : 0x00);
- result = (RUNMODE[1] ? 0x08 : 0x00);
- result = (LOAD[1] ? 0x10 : 0x00);
- result = ((INMODE[1] & 0x03) << 5);
- result = (ALARM ? 0x80 : 0x00);
- break;
- }
-
- return (byte)(result & 0xFF);
- }
-
- set
- {
- byte val = value;
- addr &= 0x0F;
- switch (addr)
- {
- case 0x00:
- connectors[0].Data = val;
- break;
- case 0x01:
- connectors[1].Data = val;
- break;
- case 0x02:
- connectors[0].Direction = val;
- break;
- case 0x03:
- connectors[1].Direction = val;
- break;
- case 0x04:
- T[0] &= 0xFF00;
- T[0] |= val;
- break;
- case 0x05:
- T[0] &= 0x00FF;
- T[0] |= ((int)val << 8);
- break;
- case 0x06:
- T[1] &= 0xFF00;
- T[1] |= val;
- break;
- case 0x07:
- T[1] &= 0x00FF;
- T[1] |= ((int)val << 8);
- break;
- case 0x08:
- TOD10 = val & 0x0F;
- break;
- case 0x09:
- TODSEC = val & 0x7F;
- break;
- case 0x0A:
- TODMIN = val & 0x7F;
- break;
- case 0x0B:
- val &= 0x9F;
- TODHR = val;
- TODPM = ((val & 0x80) != 0x00);
- break;
- case 0x0C:
- SDR = val;
- break;
- case 0x0D:
- IT[0] = ((val & 0x01) != 0x00);
- IT[1] = ((val & 0x02) != 0x00);
- IALARM = ((val & 0x04) != 0x00);
- ISP = ((val & 0x08) != 0x00);
- IFLG = ((val & 0x10) != 0x00);
- IRQ = ((val & 0x80) != 0x00);
- break;
- case 0x0E:
- START[0] = ((val & 0x01) != 0x00);
- PBON[0] = ((val & 0x02) != 0x00);
- OUTMODE[0] = ((val & 0x04) != 0x00);
- RUNMODE[0] = ((val & 0x08) != 0x00);
- LOAD[0] = ((val & 0x10) != 0x00);
- INMODE[0] = ((val & 0x20) >> 5);
- SPMODE = ((val & 0x40) != 0x00);
- TODIN = ((val & 0x80) != 0x00);
- break;
- case 0x0F:
- START[1] = ((val & 0x01) != 0x00);
- PBON[1] = ((val & 0x02) != 0x00);
- OUTMODE[1] = ((val & 0x04) != 0x00);
- RUNMODE[1] = ((val & 0x08) != 0x00);
- LOAD[1] = ((val & 0x10) != 0x00);
- INMODE[1] = ((val & 0x60) >> 5);
- ALARM = ((val & 0x80) != 0x00);
- break;
- }
- }
- }
-
- public void HardReset()
- {
- // power on state
- for (int i = 0; i < 0x10; i++)
- this[i] = 0x00;
-
- TLATCH[0] = 0xFFFF;
- TLATCH[1] = 0xFFFF;
- T[0] = TLATCH[0];
- T[1] = TLATCH[1];
-
- this[0x0B] = 0x01;
-
- connectors[0].Latch = 0xFF;
- connectors[1].Latch = 0xFF;
- connectors[0].Direction = 0xFF;
- connectors[1].Direction = 0xFF;
- }
- }
-
- public partial class Cia
- {
- public int intMask;
- public bool lastCNT;
- public byte[] outputBitMask = new byte[] { 0x40, 0x80 };
- private CiaRegs regs = new CiaRegs();
- public int todCounter;
- public int todFrequency;
- public bool[] underflow;
-
- public Func ReadSerial;
- public Action WriteSerial;
-
- public Cia(Region newRegion)
- {
- ReadSerial = ReadSerialDummy;
- WriteSerial = WriteSerialDummy;
- switch (newRegion)
- {
- case Region.NTSC:
- todFrequency = 14318181 / 14 / 10;
- break;
- case Region.PAL:
- todFrequency = 14318181 / 18 / 10;
- break;
- }
- HardReset();
- }
-
- private void AdvanceTOD()
- {
- bool overflow;
- int tenths = regs.TOD10;
- int seconds = regs.TODSEC;
- int minutes = regs.TODMIN;
- int hours = regs.TODHR;
- bool ampm = regs.TODPM;
- todCounter = todFrequency;
-
- tenths = BCDAdd(tenths, 1, out overflow);
- if (tenths >= 10)
- {
- tenths = 0;
- seconds = BCDAdd(seconds, 1, out overflow);
- if (overflow)
- {
- seconds = 0;
- minutes = BCDAdd(minutes, 1, out overflow);
- if (overflow)
- {
- minutes = 0;
- hours = BCDAdd(hours, 1, out overflow);
- if (hours > 12)
- {
- hours = 1;
- ampm = !ampm;
- }
- }
- }
- }
-
- regs.TOD10 = tenths;
- regs.TODSEC = seconds;
- regs.TODMIN = minutes;
- regs.TODHR = hours;
- regs.TODPM = ampm;
- }
-
- public void AttachWriteHook(int index, Action act)
- {
- regs.ports[index].AttachWriteHook(act);
- }
-
- private int BCDAdd(int i, int j, out bool overflow)
- {
- int lo;
- int hi;
- int result;
-
- lo = (i & 0x0F) + (j & 0x0F);
- hi = (i & 0x70) + (j & 0x70);
- if (lo > 0x09)
- {
- hi += 0x10;
- lo += 0x06;
- }
- if (hi > 0x50)
- {
- hi += 0xA0;
- }
- overflow = hi >= 0x60;
- result = (hi & 0x70) + (lo & 0x0F);
- return result;
- }
-
- public DataPortConnector ConnectPort(int index)
- {
- return regs.ports[index].Connect();
- }
-
- public DataPortConnector ConnectSerialPort(int index)
- {
- DataPortConnector result = regs.ports[index].Connect();
- regs.ports[index].AttachInputConverter(result, new DataPortSerialInputConverter());
- regs.ports[index].AttachOutputConverter(result, new DataPortSerialOutputConverter());
- return result;
- }
-
- public void HardReset()
- {
- regs.HardReset();
- underflow = new bool[2];
- todCounter = todFrequency;
- }
-
- public bool IRQ
- {
- get
- {
- return regs.IRQ;
- }
- }
-
- public byte Peek(int addr)
- {
- addr &= 0xF;
- return regs[addr];
- }
-
- public void PerformCycle()
- {
- // process time of day counter
- todCounter--;
- if (todCounter <= 0)
- AdvanceTOD();
-
- for (int i = 0; i < 2; i++)
- {
- if (regs.START[i])
- {
- TimerTick(i);
- if (regs.PBON[i])
- {
- // output the clock data to port B
-
- if (regs.OUTMODE[i])
- {
- // clear bit if set
- regs[0x01] &= (byte)~outputBitMask[i];
- }
- if (underflow[i])
- {
- if (regs.OUTMODE[i])
- {
- // toggle bit
- regs[0x01] ^= outputBitMask[i];
- }
- else
- {
- // set for a cycle
- regs[0x01] |= outputBitMask[i];
- }
- }
- }
- }
- }
-
- lastCNT = regs.CNT;
- regs.CNT = false;
- UpdateInterrupt();
- }
-
- public void Poke(int addr, byte val)
- {
- addr &= 0xF;
- regs[addr] = val;
- }
-
- public byte Read(ushort addr)
- {
- byte result;
- addr &= 0xF;
-
- switch (addr)
- {
- case 0x08:
- regs.TODREADLATCH = false;
- return (byte)regs.TODREADLATCH10;
- case 0x09:
- if (!regs.TODREADLATCH)
- return regs[addr];
- else
- return (byte)regs.TODREADLATCHSEC;
- case 0x0A:
- if (!regs.TODREADLATCH)
- return regs[addr];
- else
- return (byte)regs.TODREADLATCHMIN;
- case 0x0B:
- regs.TODREADLATCH = true;
- regs.TODREADLATCH10 = regs.TOD10;
- regs.TODREADLATCHSEC = regs.TODSEC;
- regs.TODREADLATCHMIN = regs.TODMIN;
- regs.TODREADLATCHHR = regs.TODHR;
- return (byte)regs.TODREADLATCHHR;
- case 0x0D:
- // reading this reg clears it
- result = regs[0x0D];
- regs[0x0D] = 0x00;
- UpdateInterrupt();
- return result;
- default:
- return regs[addr];
- }
- }
-
- private bool ReadSerialDummy()
- {
- return false;
- }
-
- public void TimerDec(int index)
- {
- int timer = regs.T[index];
- timer--;
- if (timer < 0)
- {
- underflow[index] = true;
- if (regs.RUNMODE[index])
- {
- // one shot timer
- regs.START[index] = false;
- }
- timer = regs.TLATCH[index];
- }
- else
- {
- underflow[index] = false;
- }
-
- regs.IT[index] |= underflow[index];
- regs.T[index] = timer & 0xFFFF;
- }
-
- public void TimerTick(int index)
- {
- switch (regs.INMODE[index])
- {
- case 0:
- regs.TICK[index] = true;
- break;
- case 1:
- regs.TICK[index] |= (regs.CNT && !lastCNT);
- break;
- case 2:
- regs.TICK[index] |= underflow[0];
- break;
- case 3:
- regs.TICK[index] |= (regs.CNT && !lastCNT) || underflow[0];
- break;
- }
- if (regs.TICK[index])
- {
- TimerDec(index);
- regs.TICK[index] = false;
- }
- }
-
- public void UpdateInterrupt()
- {
- bool irq = false;
- irq |= (regs.EIT[0] & regs.IT[0]);
- irq |= (regs.EIT[1] & regs.IT[1]);
- irq |= (regs.EIFLG & regs.IFLG);
- irq |= (regs.EISP & regs.ISP);
- irq |= (regs.EIALARM & regs.IALARM);
- regs.IRQ = irq;
- }
-
- public void Write(ushort addr, byte val)
- {
- addr &= 0xF;
- switch (addr)
- {
- case 0x04:
- regs.TLATCH[0] &= 0xFF00;
- regs.TLATCH[0] |= val;
- if (regs.LOAD[0])
- regs.T[0] = regs.TLATCH[0];
- break;
- case 0x05:
- regs.TLATCH[0] &= 0xFF;
- regs.TLATCH[0] |= (int)val << 8;
- if (regs.LOAD[0] || !regs.START[0])
- regs.T[0] = regs.TLATCH[0];
- break;
- case 0x06:
- regs.TLATCH[1] &= 0xFF00;
- regs.TLATCH[1] |= val;
- if (regs.LOAD[1])
- regs.T[1] = regs.TLATCH[1];
- break;
- case 0x07:
- regs.TLATCH[1] &= 0xFF;
- regs.TLATCH[1] |= (int)val << 8;
- if (regs.LOAD[1] || !regs.START[1])
- regs.T[1] = regs.TLATCH[1];
- break;
- case 0x08:
- if (regs.ALARM)
- regs.ALARM10 = val & 0x0F;
- else
- regs[addr] = val;
- break;
- case 0x09:
- if (regs.ALARM)
- regs.ALARMSEC = val & 0x7F;
- else
- regs[addr] = val;
- break;
- case 0x0A:
- if (regs.ALARM)
- regs.ALARMMIN = val & 0x7F;
- else
- regs[addr] = val;
- break;
- case 0x0B:
- if (regs.ALARM)
- {
- regs.ALARMHR = val & 0x1F;
- regs.ALARMPM = ((val & 0x80) != 0x00);
- }
- else
- {
- regs[addr] = val;
- }
- break;
- case 0x0D:
- intMask &= ~val;
- if ((val & 0x80) != 0x00)
- intMask ^= val;
- regs.EIT[0] = ((intMask & 0x01) != 0x00);
- regs.EIT[1] = ((intMask & 0x02) != 0x00);
- regs.EIALARM = ((intMask & 0x04) != 0x00);
- regs.EISP = ((intMask & 0x08) != 0x00);
- regs.EIFLG = ((intMask & 0x10) != 0x00);
- UpdateInterrupt();
- break;
- default:
- regs[addr] = val;
- break;
- }
-
- }
-
- public void WriteCNT(bool val)
- {
- if (!lastCNT && val)
- {
- if (!regs.SPMODE)
- {
- // read bit into shift register
- bool inputBit = ReadSerial();
- regs.SDR = ((regs.SDR << 1) | (inputBit ? 0x01 : 0x00)) & 0xFF;
-
- regs.SDRCOUNT = (regs.SDRCOUNT - 1) & 0x7;
- if (regs.SDRCOUNT == 0)
- {
- regs.ISP = true;
- }
- }
- else
- {
- // write bit out from shift register
- bool outputBit = ((regs.SDR & 0x01) != 0);
- regs.SDR >>= 1;
- WriteSerial(outputBit);
-
- regs.SDRCOUNT = (regs.SDRCOUNT - 1) & 0x7;
- if (regs.SDRCOUNT == 0)
- {
- regs.ISP = true;
- }
- }
- }
- regs.CNT = val;
- }
-
- public void WriteFLG(bool val)
- {
- regs.FLG = val;
- regs.IFLG |= val;
- }
-
- private void WriteSerialDummy(bool val)
- {
- // do nothing
- }
- }
-}
diff --git a/BizHawk.Emulation/Computers/Commodore64/CiaState.cs b/BizHawk.Emulation/Computers/Commodore64/CiaState.cs
deleted file mode 100644
index 35ff24310e..0000000000
--- a/BizHawk.Emulation/Computers/Commodore64/CiaState.cs
+++ /dev/null
@@ -1,89 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace BizHawk.Emulation.Computers.Commodore64
-{
- public partial class Cia
- {
- public void SyncState(Serializer ser)
- {
- ser.Sync("ALARM", ref regs.ALARM);
- ser.Sync("ALARM10", ref regs.ALARM10);
- ser.Sync("ALARMHR", ref regs.ALARMHR);
- ser.Sync("ALARMMIN", ref regs.ALARMMIN);
- ser.Sync("ALARMPM", ref regs.ALARMPM);
- ser.Sync("ALARMSEC", ref regs.ALARMSEC);
- ser.Sync("CNT", ref regs.CNT);
- ser.Sync("EIALARM", ref regs.EIALARM);
- ser.Sync("EIFLG", ref regs.EIFLG);
- ser.Sync("EISP", ref regs.EISP);
- ser.Sync("EIT0", ref regs.EIT[0]);
- ser.Sync("EIT1", ref regs.EIT[1]);
- ser.Sync("FLG", ref regs.FLG);
- ser.Sync("IALARM", ref regs.IALARM);
- ser.Sync("IFLG", ref regs.IFLG);
- ser.Sync("INMODE0", ref regs.INMODE[0]);
- ser.Sync("INMODE1", ref regs.INMODE[1]);
- ser.Sync("IRQ", ref regs.IRQ);
- ser.Sync("ISP", ref regs.ISP);
- ser.Sync("IT0", ref regs.IT[0]);
- ser.Sync("IT1", ref regs.IT[1]);
- ser.Sync("LOAD0", ref regs.LOAD[0]);
- ser.Sync("LOAD1", ref regs.LOAD[1]);
- ser.Sync("OUTMODE0", ref regs.OUTMODE[0]);
- ser.Sync("OUTMODE1", ref regs.OUTMODE[1]);
- ser.Sync("PBON0", ref regs.PBON[0]);
- ser.Sync("PBON1", ref regs.PBON[1]);
- ser.Sync("RUNMODE0", ref regs.RUNMODE[0]);
- ser.Sync("RUNMODE1", ref regs.RUNMODE[1]);
- ser.Sync("SDR", ref regs.SDR);
- ser.Sync("SDRCOUNT", ref regs.SDRCOUNT);
- ser.Sync("SPMODE", ref regs.SPMODE);
- ser.Sync("START0", ref regs.START[0]);
- ser.Sync("START1", ref regs.START[1]);
- ser.Sync("T0", ref regs.T[0]);
- ser.Sync("T1", ref regs.T[1]);
- ser.Sync("TICK0", ref regs.TICK[0]);
- ser.Sync("TICK1", ref regs.TICK[1]);
- ser.Sync("TLATCH0", ref regs.TLATCH[0]);
- ser.Sync("TLATCH1", ref regs.TLATCH[1]);
- ser.Sync("TOD10", ref regs.TOD10);
- ser.Sync("TODHR", ref regs.TODHR);
- ser.Sync("TODMIN", ref regs.TODMIN);
- ser.Sync("TODPM", ref regs.TODPM);
- ser.Sync("TODREADLATCH", ref regs.TODREADLATCH);
- ser.Sync("TODREADLATCH10", ref regs.TODREADLATCH10);
- ser.Sync("TODREADLATCHSEC", ref regs.TODREADLATCHSEC);
- ser.Sync("TODREADLATCHMIN", ref regs.TODREADLATCHMIN);
- ser.Sync("TODREADLATCHHR", ref regs.TODREADLATCHHR);
- ser.Sync("TODSEC", ref regs.TODSEC);
-
- // ports
- byte dir0 = regs.connectors[0].Direction;
- byte dir1 = regs.connectors[1].Direction;
- byte latch0 = regs.connectors[0].Latch;
- byte latch1 = regs.connectors[0].Latch;
- ser.Sync("DIR0", ref dir0);
- ser.Sync("DIR1", ref dir1);
- ser.Sync("PORT0", ref latch0);
- ser.Sync("PORT1", ref latch1);
- if (ser.IsReader)
- {
- regs.connectors[0].Direction = dir0;
- regs.connectors[0].Latch = latch0;
- regs.connectors[1].Direction = dir1;
- regs.connectors[1].Latch = latch1;
- }
-
- // state
- ser.Sync("INTMASK", ref intMask);
- ser.Sync("LASTCNT", ref lastCNT);
- ser.Sync("TODCOUNTER", ref todCounter);
- ser.Sync("TODFREQUENCY", ref todFrequency);
- ser.Sync("UNDERFLOW0", ref underflow[0]);
- ser.Sync("UNDERFLOW1", ref underflow[1]);
- }
- }
-}
diff --git a/BizHawk.Emulation/Computers/Commodore64/DataPort.cs b/BizHawk.Emulation/Computers/Commodore64/DataPort.cs
deleted file mode 100644
index 5fb52a32ba..0000000000
--- a/BizHawk.Emulation/Computers/Commodore64/DataPort.cs
+++ /dev/null
@@ -1,371 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace BizHawk.Emulation.Computers.Commodore64
-{
- public class DataPortBus
- {
- protected bool[] connected = new bool[2];
- protected DataPortConnector[] connectors;
- protected byte[] direction = new byte[2];
- protected DataPortConverter[] inputConverters;
- protected byte[] latch = new byte[2];
- protected DataPortConverter[] outputConverters;
- protected List servingHooks = new List();
- protected List writeHooks = new List();
-
- public DataPortBus()
- {
- inputConverters = new DataPortConverter[2];
- inputConverters[0] = new DataPortConverter();
- inputConverters[1] = new DataPortConverter();
- outputConverters = new DataPortConverter[2];
- outputConverters[0] = new DataPortConverter();
- outputConverters[1] = new DataPortConverter();
- connectors = new DataPortConnector[2];
- connectors[0] = new DataPortConnector(ReadData0, ReadDirection0, ReadLatch0, ReadRemoteLatch0, WriteData0, WriteDirection0, WriteLatch0);
- connectors[1] = new DataPortConnector(ReadData1, ReadDirection1, ReadLatch1, ReadRemoteLatch1, WriteData1, WriteDirection1, WriteLatch1);
- connected[0] = false;
- connected[1] = false;
- direction[0] = 0x00;
- direction[1] = 0x00;
- latch[0] = 0x00;
- latch[1] = 0x00;
- }
-
- public void AttachInputConverter(DataPortConnector connector, DataPortConverter converter)
- {
- if (connector.Equals(connectors[0]))
- {
- inputConverters[0] = converter;
- }
- else if (connector.Equals(connectors[1]))
- {
- inputConverters[1] = converter;
- }
- }
-
- public void AttachOutputConverter(DataPortConnector connector, DataPortConverter converter)
- {
- if (connector.Equals(connectors[0]))
- {
- outputConverters[0] = converter;
- }
- else if (connector.Equals(connectors[1]))
- {
- outputConverters[1] = converter;
- }
- }
-
- public void AttachWriteHook(Action act)
- {
- writeHooks.Add(act);
- servingHooks.Add(0);
- }
-
- protected void ClearHooks()
- {
- int count = servingHooks.Count;
- for (int i = 0; i < count; i++)
- servingHooks[i]--;
- }
-
- public DataPortConnector Connect()
- {
- if (!connected[0])
- {
- connected[0] = true;
- direction[0] = 0xFF;
- return connectors[0];
- }
- else if (!connected[1])
- {
- connected[1] = true;
- direction[1] = 0xFF;
- return connectors[1];
- }
- throw new Exception("Two connections to this bus have already been established..");
- }
-
- public void Connect(DataPortConnector connection)
- {
- if (!connected[0])
- {
- connected[0] = true;
- connectors[0] = connection;
- }
- else if (!connected[1])
- {
- connected[1] = true;
- connectors[1] = connection;
- }
- throw new Exception("Two connections to this bus have already been established..");
- }
-
- public void Disconnect(DataPortConnector connector)
- {
- if (connector.Equals(connectors[0]))
- {
- connected[0] = false;
- latch[0] = 0;
- direction[0] = 0;
- }
- else if (connector.Equals(connectors[1]))
- {
- connected[1] = false;
- latch[1] = 0;
- direction[1] = 0;
- }
- }
-
- protected void ExecuteWriteHooks()
- {
- int count = servingHooks.Count;
- for (int i = 0; i < count; i++)
- {
- if (servingHooks[i] == 0)
- {
- servingHooks[i]++;
- writeHooks[i]();
- }
- else
- {
- servingHooks[i]++;
- }
- }
- ClearHooks();
- }
-
- protected virtual byte ReadData0()
- {
- byte result;
- if (connected[1])
- result = (byte)((~direction[0] & latch[1]) | (direction[0] & latch[0]));
- else
- result = latch[0];
- return inputConverters[0].Convert(result, latch[1]);
- }
-
- protected virtual byte ReadData1()
- {
- byte result;
- if (connected[0])
- result = (byte)((~direction[1] & latch[0]) | (direction[1] & latch[1]));
- else
- result = latch[1];
- return inputConverters[1].Convert(result, latch[0]);
- }
-
- protected virtual byte ReadDirection0()
- {
- return direction[0];
- }
-
- protected virtual byte ReadDirection1()
- {
- return direction[1];
- }
-
- protected virtual byte ReadLatch0()
- {
- return latch[0];
- }
-
- protected virtual byte ReadLatch1()
- {
- return latch[1];
- }
-
- protected virtual byte ReadRemoteLatch0()
- {
- return latch[1];
- }
-
- protected virtual byte ReadRemoteLatch1()
- {
- return latch[0];
- }
-
- protected virtual void WriteData0(byte val)
- {
- byte result = latch[0];
- result &= (byte)~direction[0];
- result |= (byte)(val & direction[0]);
- latch[0] = outputConverters[0].Convert(result, latch[1]);
- ExecuteWriteHooks();
- }
-
- protected virtual void WriteData1(byte val)
- {
- byte result = latch[1];
- result &= (byte)~direction[1];
- result |= (byte)(val & direction[1]);
- latch[1] = outputConverters[1].Convert(result, latch[0]);
- ExecuteWriteHooks();
- }
-
- protected virtual void WriteDirection0(byte val)
- {
- direction[0] = val;
- ExecuteWriteHooks();
- }
-
- protected virtual void WriteDirection1(byte val)
- {
- direction[1] = val;
- ExecuteWriteHooks();
- }
-
- protected virtual void WriteLatch0(byte val)
- {
- latch[0] = val;
- }
-
- protected virtual void WriteLatch1(byte val)
- {
- latch[1] = val;
- }
- }
-
- public class DataPortConnector
- {
- private Func ReadData;
- private Func ReadDirection;
- private Func ReadLatch;
- private Func ReadRemoteLatch;
- private Action WriteData;
- private Action WriteDirection;
- private Action WriteLatch;
-
- public DataPortConnector()
- {
- ReadData = ReadDataDummy;
- ReadDirection = ReadDataDummy;
- ReadLatch = ReadDataDummy;
- ReadRemoteLatch = ReadDataDummy;
- WriteData = WriteDataDummy;
- WriteDirection = WriteDataDummy;
- WriteLatch = WriteDataDummy;
- }
-
- public DataPortConnector(DataPortConnector source)
- {
- ReadData = source.ReadData;
- ReadDirection = source.ReadDirection;
- ReadLatch = source.ReadLatch;
- ReadRemoteLatch = source.ReadRemoteLatch;
- WriteData = source.WriteData;
- WriteDirection = source.WriteDirection;
- WriteLatch = source.WriteLatch;
- }
-
- public DataPortConnector(Func newReadData, Func newReadDirection, Func newReadLatch, Func newReadRemoteLatch, Action newWriteData, Action newWriteDirection, Action newWriteLatch)
- {
- ReadData = newReadData;
- ReadDirection = newReadDirection;
- ReadLatch = newReadLatch;
- ReadRemoteLatch = newReadRemoteLatch;
- WriteData = newWriteData;
- WriteDirection = newWriteDirection;
- WriteLatch = newWriteLatch;
- }
-
- public byte Data
- {
- get
- {
- return ReadData();
- }
- set
- {
- WriteData(value);
- }
- }
-
- public byte Direction
- {
- get
- {
- return ReadDirection();
- }
- set
- {
- WriteDirection(value);
- }
- }
-
- public byte Latch
- {
- get
- {
- return ReadLatch();
- }
- set
- {
- WriteLatch(value);
- }
- }
-
- public DataPortListener Listener()
- {
- return new DataPortListener(ReadData, ReadDirection);
- }
-
- private byte ReadDataDummy()
- {
- return 0x00;
- }
-
- public byte RemoteLatch
- {
- get
- {
- return ReadRemoteLatch();
- }
- }
-
- private void WriteDataDummy(byte val)
- {
- return;
- }
- }
-
- public class DataPortConverter
- {
- public virtual byte Convert(byte input, byte remote)
- {
- // the base converter transfers the values directly
- return input;
- }
- }
-
- public class DataPortListener
- {
- private Func ReadData;
- private Func ReadDirection;
-
- public DataPortListener(Func newReadData, Func newReadDirection)
- {
- ReadData = newReadData;
- ReadDirection = newReadDirection;
- }
-
- public byte Data
- {
- get
- {
- return ReadData();
- }
- }
-
- public byte Direction
- {
- get
- {
- return ReadDirection();
- }
- }
- }
-}
diff --git a/BizHawk.Emulation/Computers/Commodore64/Input.cs b/BizHawk.Emulation/Computers/Commodore64/Input.cs
deleted file mode 100644
index 41c56cff53..0000000000
--- a/BizHawk.Emulation/Computers/Commodore64/Input.cs
+++ /dev/null
@@ -1,118 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace BizHawk.Emulation.Computers.Commodore64
-{
- public class Input
- {
- static string[,] keyboardMatrix = new string[,]
- {
- {"Key Insert/Delete", "Key Return", "Key Cursor Left/Right", "Key F7", "Key F1", "Key F3", "Key F5", "Key Cursor Up/Down"},
- {"Key 3", "Key W", "Key A", "Key 4", "Key Z", "Key S", "Key E", "Key Left Shift"},
- {"Key 5", "Key R", "Key D", "Key 6", "Key C", "Key F", "Key T", "Key X"},
- {"Key 7", "Key Y", "Key G", "Key 8", "Key B", "Key H", "Key U", "Key V"},
- {"Key 9", "Key I", "Key J", "Key 0", "Key M", "Key K", "Key O", "Key N"},
- {"Key Plus", "Key P", "Key L", "Key Minus", "Key Period", "Key Colon", "Key At", "Key Comma"},
- {"Key Pound", "Key Asterisk", "Key Semicolon", "Key Clear/Home", "Key Right Shift", "Key Equal", "Key Up Arrow", "Key Slash"},
- {"Key 1", "Key Left Arrow", "Key Control", "Key 2", "Key Space", "Key Commodore", "Key Q", "Key Run/Stop"}
- };
-
- static string[,] joystickMatrix = new string[,]
- {
- {"P1 Up", "P1 Down", "P1 Left", "P1 Right", "P1 Button"},
- {"P2 Up", "P2 Down", "P2 Left", "P2 Right", "P2 Button"}
- };
-
- public IController controller;
- public bool restorePressed;
-
- private byte[] joystickLatch = new byte[2];
- private byte keyboardColumnData = 0xFF;
- private byte[] keyboardLatch = new byte[8];
- private byte keyboardRowData = 0xFF;
- private DataPortConnector[] ports;
-
- public Input(DataPortConnector[] newPorts)
- {
- ports = newPorts;
-
- // set full output
- ports[0].Direction = 0xFF;
- ports[1].Direction = 0xFF;
- }
-
- private byte GetJoystickBits(int index)
- {
- byte result = 0xE0;
- result |= controller[joystickMatrix[index, 0]] ? (byte)0x00 : (byte)0x01;
- result |= controller[joystickMatrix[index, 1]] ? (byte)0x00 : (byte)0x02;
- result |= controller[joystickMatrix[index, 2]] ? (byte)0x00 : (byte)0x04;
- result |= controller[joystickMatrix[index, 3]] ? (byte)0x00 : (byte)0x08;
- result |= controller[joystickMatrix[index, 4]] ? (byte)0x00 : (byte)0x10;
- return result;
- }
-
- private byte GetKeyboardBits(int row)
- {
- byte result;
- result = controller[keyboardMatrix[row, 0]] ? (byte)0x00 : (byte)0x01;
- result |= controller[keyboardMatrix[row, 1]] ? (byte)0x00 : (byte)0x02;
- result |= controller[keyboardMatrix[row, 2]] ? (byte)0x00 : (byte)0x04;
- result |= controller[keyboardMatrix[row, 3]] ? (byte)0x00 : (byte)0x08;
- result |= controller[keyboardMatrix[row, 4]] ? (byte)0x00 : (byte)0x10;
- result |= controller[keyboardMatrix[row, 5]] ? (byte)0x00 : (byte)0x20;
- result |= controller[keyboardMatrix[row, 6]] ? (byte)0x00 : (byte)0x40;
- result |= controller[keyboardMatrix[row, 7]] ? (byte)0x00 : (byte)0x80;
- return result;
- }
-
- public void Poll()
- {
- restorePressed = controller["Key Restore"];
-
- for (int i = 0; i < 2; i++)
- joystickLatch[i] = GetJoystickBits(i);
- for (int i = 0; i < 8; i++)
- keyboardLatch[i] = GetKeyboardBits(i);
- UpdatePortData();
- }
-
- private void UpdatePortData()
- {
- int keyboardShift = keyboardColumnData;
- byte port0result = 0xFF;
- byte port1result = 0xFF;
-
- port0result = (byte)(joystickLatch[1]);
-
- for (int i = 0; i < 8; i++)
- {
- if ((keyboardShift & 0x01) == 0x00)
- {
- port1result &= keyboardLatch[i];
- }
- keyboardShift >>= 1;
- }
- port1result &= joystickLatch[0];
-
- ports[0].Data = port0result;
- ports[1].Data = port1result;
- }
-
- public void WritePortA()
- {
- // keyboard matrix column select
- keyboardColumnData = ports[0].RemoteLatch;
- UpdatePortData();
- }
-
- public void WritePortB()
- {
- // keyboard matrix row select
- keyboardRowData = ports[1].RemoteLatch;
- UpdatePortData();
- }
- }
-}
\ No newline at end of file
diff --git a/BizHawk.Emulation/Computers/Commodore64/MOS/Chip2114.cs b/BizHawk.Emulation/Computers/Commodore64/MOS/Chip2114.cs
new file mode 100644
index 0000000000..dc94d6aaf8
--- /dev/null
+++ b/BizHawk.Emulation/Computers/Commodore64/MOS/Chip2114.cs
@@ -0,0 +1,54 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace BizHawk.Emulation.Computers.Commodore64.MOS
+{
+ // used as Color RAM in C64
+
+ public class Chip2114 : IStandardIO
+ {
+ private byte[] ram;
+
+ public Chip2114()
+ {
+ HardReset();
+ }
+
+ public void HardReset()
+ {
+ ram = new byte[0x400];
+ }
+
+ public byte Peek(int addr)
+ {
+ return ram[addr & 0x3FF];
+ }
+
+ public byte Peek(int addr, byte bus)
+ {
+ return (byte)(ram[addr & 0x3FF] | (bus & 0xF0));
+ }
+
+ public void Poke(int addr, byte val)
+ {
+ ram[addr & 0x3FF] = (byte)(val & 0xF);
+ }
+
+ public byte Read(ushort addr)
+ {
+ return (byte)(ram[addr & 0x3FF]);
+ }
+
+ public byte Read(ushort addr, byte bus)
+ {
+ return (byte)(ram[addr & 0x3FF] | (bus & 0xF0));
+ }
+
+ public void Write(ushort addr, byte val)
+ {
+ ram[addr & 0x3FF] = (byte)(val & 0xF);
+ }
+ }
+}
diff --git a/BizHawk.Emulation/Computers/Commodore64/MOS/Chip23XX.cs b/BizHawk.Emulation/Computers/Commodore64/MOS/Chip23XX.cs
new file mode 100644
index 0000000000..8d072685fe
--- /dev/null
+++ b/BizHawk.Emulation/Computers/Commodore64/MOS/Chip23XX.cs
@@ -0,0 +1,67 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace BizHawk.Emulation.Computers.Commodore64.MOS
+{
+ // ROM chips
+ // 2332: 32 kbit (4kbyte)
+ // 2364: 64 kbit (8kbyte)
+ // 23128: 128 kbit (16kbyte)
+
+ public enum Chip23XXmodel
+ {
+ Chip2332,
+ Chip2364,
+ Chip23128
+ }
+
+ public class Chip23XX : IStandardIO
+ {
+ private uint addrMask;
+ private byte[] rom;
+
+ public Chip23XX(Chip23XXmodel model, byte[] data)
+ {
+ switch (model)
+ {
+ case Chip23XXmodel.Chip2332:
+ rom = new byte[0x1000];
+ addrMask = 0xFFF;
+ break;
+ case Chip23XXmodel.Chip2364:
+ rom = new byte[0x2000];
+ addrMask = 0x1FFF;
+ break;
+ case Chip23XXmodel.Chip23128:
+ rom = new byte[0x4000];
+ addrMask = 0x3FFF;
+ break;
+ default:
+ throw new Exception("Invalid chip model.");
+ }
+ Array.Copy(data, rom, rom.Length);
+ }
+
+ public byte Peek(int addr)
+ {
+ return rom[addr & (int)addrMask];
+ }
+
+ public void Poke(int addr, byte val)
+ {
+ // do nothing (this is rom)
+ }
+
+ public byte Read(ushort addr)
+ {
+ return rom[addr & addrMask];
+ }
+
+ public void Write(ushort addr, byte val)
+ {
+ // do nothing (this is rom)
+ }
+ }
+}
diff --git a/BizHawk.Emulation/Computers/Commodore64/MOS/Chip4864.cs b/BizHawk.Emulation/Computers/Commodore64/MOS/Chip4864.cs
new file mode 100644
index 0000000000..6b52524f5d
--- /dev/null
+++ b/BizHawk.Emulation/Computers/Commodore64/MOS/Chip4864.cs
@@ -0,0 +1,51 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace BizHawk.Emulation.Computers.Commodore64.MOS
+{
+ // DRAM for the c64
+ // 4164 = 64 kbit
+ // 4464 = 256 kbit
+ // 4864 = 512 kbit
+
+ // for purposes of simplification we'll just
+ // use one 4864, the C64 can use sets of 4164 or
+ // 4464 typically
+
+ public class Chip4864 : IStandardIO
+ {
+ private byte[] ram;
+
+ public Chip4864()
+ {
+ HardReset();
+ }
+
+ public void HardReset()
+ {
+ ram = new byte[0x10000];
+ }
+
+ public byte Peek(int addr)
+ {
+ return ram[addr & 0xFFFF];
+ }
+
+ public void Poke(int addr, byte val)
+ {
+ ram[addr & 0xFFFF] = val;
+ }
+
+ public byte Read(ushort addr)
+ {
+ return ram[addr];
+ }
+
+ public void Write(ushort addr, byte val)
+ {
+ ram[addr] = val;
+ }
+ }
+}
diff --git a/BizHawk.Emulation/Computers/Commodore64/MOS/IStandardIO.cs b/BizHawk.Emulation/Computers/Commodore64/MOS/IStandardIO.cs
new file mode 100644
index 0000000000..c7c4647a87
--- /dev/null
+++ b/BizHawk.Emulation/Computers/Commodore64/MOS/IStandardIO.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace BizHawk.Emulation.Computers.Commodore64.MOS
+{
+ public interface IStandardIO
+ {
+ byte Peek(int addr);
+ void Poke(int addr, byte val);
+ byte Read(ushort addr);
+ void Write(ushort addr, byte val);
+ }
+}
diff --git a/BizHawk.Emulation/Computers/Commodore64/MOS/MOS6510.cs b/BizHawk.Emulation/Computers/Commodore64/MOS/MOS6510.cs
new file mode 100644
index 0000000000..9d8aee1c80
--- /dev/null
+++ b/BizHawk.Emulation/Computers/Commodore64/MOS/MOS6510.cs
@@ -0,0 +1,202 @@
+using BizHawk.Emulation.CPUs.M6502;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace BizHawk.Emulation.Computers.Commodore64.MOS
+{
+ // an extension of the 6502 processor
+
+ public class MOS6510 : IStandardIO
+ {
+ // ------------------------------------
+
+ private C64Chips chips;
+ private MOS6502X cpu;
+ private bool freezeCpu;
+ private bool pinAEC;
+ private bool pinCassetteButton;
+ private bool pinCassetteMotor;
+ private bool pinCassetteOutput;
+ private bool pinCharen;
+ private bool pinIRQ;
+ private bool pinLoram;
+ private bool pinHiram;
+ private bool pinNMI;
+ private bool pinRDY;
+ private byte portDir;
+
+ // ------------------------------------
+
+ public MOS6510(C64Chips newChips)
+ {
+ chips = newChips;
+ cpu = new MOS6502X();
+
+ // configure cpu r/w
+ cpu.DummyReadMemory = Read;
+ cpu.ReadMemory = Read;
+ cpu.WriteMemory = Write;
+
+ // configure data port defaults
+ portDir = 0x2F;
+ SetPortData(0x37);
+ }
+
+ public void HardReset()
+ {
+ cpu.Reset();
+ cpu.FlagI = true;
+ cpu.BCD_Enabled = true;
+ cpu.PC = (ushort)(chips.pla.Read(0xFFFC) | (chips.pla.Read(0xFFFD) << 8));
+ }
+
+ // ------------------------------------
+
+ public void ExecutePhase1()
+ {
+ UpdatePins();
+ }
+
+ public void ExecutePhase2()
+ {
+ UpdatePins();
+
+ if (pinAEC && !freezeCpu)
+ {
+ // the 6502 core expects active high
+ // so we reverse the polarity here
+ cpu.NMI = !pinNMI;
+ cpu.IRQ = !pinIRQ;
+ cpu.ExecuteOne();
+ }
+ }
+
+ private void UpdatePins()
+ {
+ pinAEC = chips.vic.AEC;
+ pinIRQ = chips.vic.IRQ && chips.cia0.IRQ;
+ pinNMI = chips.cia1.IRQ;
+ pinRDY = chips.vic.BA;
+
+ if (pinRDY)
+ freezeCpu = false;
+ }
+
+ // ------------------------------------
+
+ public byte Peek(int addr)
+ {
+ if (addr == 0x0000)
+ return PortDirection;
+ else if (addr == 0x0001)
+ return PortData;
+ else
+ return chips.pla.Peek(addr);
+ }
+
+ public void Poke(int addr, byte val)
+ {
+ if (addr == 0x0000)
+ portDir = val;
+ else if (addr == 0x0001)
+ SetPortData(val);
+ else
+ chips.pla.Poke(addr, val);
+ }
+
+ public byte Read(ushort addr)
+ {
+ // cpu freezes after first read when RDY is low
+ if (!pinRDY)
+ freezeCpu = true;
+
+ if (addr == 0x0000)
+ return PortDirection;
+ else if (addr == 0x0001)
+ return PortData;
+ else
+ return chips.pla.Read(addr);
+ }
+
+ public void Write(ushort addr, byte val)
+ {
+ if (addr == 0x0000)
+ PortDirection = val;
+ else if (addr == 0x0001)
+ PortData = val;
+ else
+ chips.pla.Write(addr, val);
+ }
+
+ // ------------------------------------
+
+ public bool AEC
+ {
+ get { return pinAEC; }
+ }
+
+ public bool IRQ
+ {
+ get { return pinIRQ; }
+ }
+
+ public bool NMI
+ {
+ get { return pinNMI; }
+ }
+
+ public bool RDY
+ {
+ get { return pinRDY; }
+ }
+
+ public byte PortData
+ {
+ get
+ {
+ byte result = 0x00;
+
+ result |= pinLoram ? (byte)0x01 : (byte)0x00;
+ result |= pinHiram ? (byte)0x02 : (byte)0x00;
+ result |= pinCharen ? (byte)0x04 : (byte)0x00;
+ result |= pinCassetteOutput ? (byte)0x08 : (byte)0x00;
+ result |= pinCassetteButton ? (byte)0x10 : (byte)0x00;
+ result |= pinCassetteMotor ? (byte)0x20 : (byte)0x00;
+
+ return result;
+ }
+ set
+ {
+ byte val = Port.CPUWrite(PortData, value, portDir);
+ SetPortData(val);
+ }
+ }
+
+ public byte PortDirection
+ {
+ get { return portDir; }
+ set { portDir = value; }
+ }
+
+ private void SetPortData(byte val)
+ {
+ pinCassetteOutput = ((val & 0x08) != 0);
+ pinCassetteButton = ((val & 0x10) != 0);
+ pinCassetteMotor = ((val & 0x20) != 0);
+
+ if (!chips.pla.UltimaxMode)
+ {
+ pinLoram = ((val & 0x01) != 0);
+ pinHiram = ((val & 0x02) != 0);
+ pinCharen = ((val & 0x04) != 0);
+ chips.pla.LoRam = pinLoram;
+ chips.pla.HiRam = pinHiram;
+ chips.pla.Charen = pinCharen;
+ }
+ }
+
+ // ------------------------------------
+ }
+}
diff --git a/BizHawk.Emulation/Computers/Commodore64/MOS/MOS6522.cs b/BizHawk.Emulation/Computers/Commodore64/MOS/MOS6522.cs
new file mode 100644
index 0000000000..5138b69b57
--- /dev/null
+++ b/BizHawk.Emulation/Computers/Commodore64/MOS/MOS6522.cs
@@ -0,0 +1,43 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace BizHawk.Emulation.Computers.Commodore64.MOS
+{
+ // via
+ public class MOS6522 : Timer, IStandardIO
+ {
+ // ------------------------------------
+
+ public void ExecutePhase1()
+ {
+ }
+
+ public void ExecutePhase2()
+ {
+ }
+
+ // ------------------------------------
+
+ public byte Peek(int addr)
+ {
+ return 0;
+ }
+
+ public void Poke(int addr, byte val)
+ {
+ }
+
+ public byte Read(ushort addr)
+ {
+ return 0;
+ }
+
+ public void Write(ushort addr, byte val)
+ {
+ }
+
+ // ------------------------------------
+ }
+}
diff --git a/BizHawk.Emulation/Computers/Commodore64/MOS/MOS6526.cs b/BizHawk.Emulation/Computers/Commodore64/MOS/MOS6526.cs
new file mode 100644
index 0000000000..c21ddc648e
--- /dev/null
+++ b/BizHawk.Emulation/Computers/Commodore64/MOS/MOS6526.cs
@@ -0,0 +1,342 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace BizHawk.Emulation.Computers.Commodore64.MOS
+{
+ // MOS technology 6526 "CIA"
+ //
+ // emulation notes:
+ // * CS, R/W and RS# pins are not emulated. (not needed)
+ // * A low RES pin is emulated via HardReset().
+
+ public class MOS6526 : Timer, IStandardIO
+ {
+ // ------------------------------------
+
+ private enum InMode
+ {
+ Phase2,
+ CNT,
+ TimerAUnderflow,
+ TimerAUnderflowCNT
+ }
+
+ private enum OutMode
+ {
+ Pulse,
+ Toggle
+ }
+
+ private enum RunMode
+ {
+ Continuous,
+ Oneshot
+ }
+
+ private enum SPMode
+ {
+ Input,
+ Output
+ }
+
+ // ------------------------------------
+
+ private bool intAlarm;
+ private bool intFlag;
+ private bool intSP;
+ private bool[] intTimer;
+ private bool pinCnt;
+ private bool pinFlag;
+ private bool pinPC;
+ private InMode[] timerInMode;
+ private OutMode[] timerOutMode;
+ private bool[] timerPortEnable;
+ private byte[] tod;
+ private byte[] todAlarm;
+ private bool todAlarmPM;
+ private bool todPM;
+ private uint todCounter;
+ private uint todCounterLatch;
+
+ // ------------------------------------
+
+ public MOS6526(Region region)
+ {
+ intTimer = new bool[2];
+ timerInMode = new InMode[2];
+ timerOutMode = new OutMode[2];
+ timerPortEnable = new bool[2];
+ tod = new byte[4];
+ todAlarm = new byte[4];
+ switch (region)
+ {
+ case Region.NTSC:
+ todCounterLatch = 14318181 / 140;
+ break;
+ case Region.PAL:
+ todCounterLatch = 17734472 / 180;
+ break;
+ }
+ HardReset();
+ }
+
+ // ------------------------------------
+
+ public void ExecutePhase1()
+ {
+ // unsure if the timer actually operates in ph1
+ }
+
+ public void ExecutePhase2()
+ {
+ pinPC = true;
+ TimerRun(0);
+ TimerRun(1);
+ }
+
+ public void HardReset()
+ {
+ HardResetInternal();
+ intTimer[0] = false;
+ intTimer[1] = false;
+ timerPortEnable[0] = false;
+ timerPortEnable[1] = false;
+ timerInMode[0] = InMode.Phase2;
+ timerInMode[1] = InMode.Phase2;
+ timerOn[0] = false;
+ timerOn[1] = false;
+ timerOutMode[0] = OutMode.Pulse;
+ timerOutMode[1] = OutMode.Pulse;
+ tod[0] = 0;
+ tod[1] = 0;
+ tod[2] = 0;
+ tod[3] = 0x12;
+ todAlarm[0] = 0;
+ todAlarm[1] = 0;
+ todAlarm[2] = 0;
+ todAlarm[3] = 0;
+ todCounter = todCounterLatch;
+ pinCnt = false;
+ pinFlag = true;
+ pinPC = true;
+ }
+
+ // ------------------------------------
+
+ private byte BCDAdd(byte i, byte j, out bool overflow)
+ {
+ uint lo;
+ uint hi;
+ uint result;
+
+ lo = (i & (uint)0x0F) + (j & (uint)0x0F);
+ hi = (i & (uint)0x70) + (j & (uint)0x70);
+ if (lo > 0x09)
+ {
+ hi += 0x10;
+ lo += 0x06;
+ }
+ if (hi > 0x50)
+ {
+ hi += 0xA0;
+ }
+ overflow = hi >= 0x60;
+ result = (hi & 0x70) + (lo & 0x0F);
+ return (byte)(result & 0xFF);
+ }
+
+ private void TimerRun(uint index)
+ {
+
+ }
+
+ private void TODRun()
+ {
+ bool todV;
+
+ if (todCounter == 0)
+ {
+ todCounter = todCounterLatch;
+ tod[0] = BCDAdd(tod[0], 1, out todV);
+ if (tod[0] >= 10)
+ {
+ tod[0] = 0;
+ tod[1] = BCDAdd(tod[1], 1, out todV);
+ if (todV)
+ {
+ tod[1] = 0;
+ tod[2] = BCDAdd(tod[2], 1, out todV);
+ if (todV)
+ {
+ tod[2] = 0;
+ tod[3] = BCDAdd(tod[3], 1, out todV);
+ if (tod[3] > 12)
+ {
+ tod[3] = 1;
+ }
+ else if (tod[3] == 12)
+ {
+ todPM = !todPM;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // ------------------------------------
+
+ public bool CNT
+ {
+ get { return pinCnt; }
+ set { pinCnt = value; }
+ }
+
+ public bool FLAG
+ {
+ get { return pinFlag; }
+ set
+ {
+ if (pinFlag && !value)
+ intFlag = true;
+ pinFlag = value;
+ }
+ }
+
+ public bool PC
+ {
+ get { return pinPC; }
+ }
+
+ public byte Peek(int addr)
+ {
+ return ReadRegister((ushort)(addr & 0xF));
+ }
+
+ public void Poke(int addr, byte val)
+ {
+ WriteRegister((ushort)(addr & 0xF), val);
+ }
+
+ public byte Read(ushort addr)
+ {
+ addr &= 0xF;
+ byte val;
+
+ switch (addr)
+ {
+ case 0x01:
+ val = ReadRegister(addr);
+ pinPC = false;
+ break;
+ default:
+ val = ReadRegister(addr);
+ break;
+ }
+
+ return val;
+ }
+
+ private byte ReadRegister(ushort addr)
+ {
+ byte val = 0x00; //unused pin value
+
+ switch (addr)
+ {
+ case 0x0:
+ break;
+ case 0x1:
+ break;
+ case 0x2:
+ break;
+ case 0x3:
+ break;
+ case 0x4:
+ break;
+ case 0x5:
+ break;
+ case 0x6:
+ break;
+ case 0x7:
+ break;
+ case 0x8:
+ break;
+ case 0x9:
+ break;
+ case 0xA:
+ break;
+ case 0xB:
+ break;
+ case 0xC:
+ break;
+ case 0xD:
+ break;
+ case 0xE:
+ break;
+ case 0xF:
+ break;
+ }
+
+ return val;
+ }
+
+ public void Write(ushort addr, byte val)
+ {
+ addr &= 0xF;
+
+ switch (addr)
+ {
+ case 0x1:
+ WriteRegister(addr, val);
+ pinPC = false;
+ break;
+ default:
+ WriteRegister(addr, val);
+ break;
+ }
+ }
+
+ public void WriteRegister(ushort addr, byte val)
+ {
+ switch (addr)
+ {
+ case 0x0:
+ break;
+ case 0x1:
+ break;
+ case 0x2:
+ break;
+ case 0x3:
+ break;
+ case 0x4:
+ break;
+ case 0x5:
+ break;
+ case 0x6:
+ break;
+ case 0x7:
+ break;
+ case 0x8:
+ break;
+ case 0x9:
+ break;
+ case 0xA:
+ break;
+ case 0xB:
+ break;
+ case 0xC:
+ break;
+ case 0xD:
+ break;
+ case 0xE:
+ break;
+ case 0xF:
+ break;
+ }
+ }
+
+ // ------------------------------------
+ }
+}
diff --git a/BizHawk.Emulation/Computers/Commodore64/MOS/MOS6567.cs b/BizHawk.Emulation/Computers/Commodore64/MOS/MOS6567.cs
new file mode 100644
index 0000000000..85945d6fac
--- /dev/null
+++ b/BizHawk.Emulation/Computers/Commodore64/MOS/MOS6567.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace BizHawk.Emulation.Computers.Commodore64.MOS
+{
+ // vic ntsc
+ public class MOS6567 : Vic, IStandardIO
+ {
+ static uint[][] pipeline = new uint[5][];
+
+ public MOS6567(C64Chips newChips)
+ : base(newChips, 65, 263, pipeline, 14318181 / 14)
+ {
+ }
+ }
+}
diff --git a/BizHawk.Emulation/Computers/Commodore64/MOS/MOS6569.cs b/BizHawk.Emulation/Computers/Commodore64/MOS/MOS6569.cs
new file mode 100644
index 0000000000..64411e1032
--- /dev/null
+++ b/BizHawk.Emulation/Computers/Commodore64/MOS/MOS6569.cs
@@ -0,0 +1,332 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace BizHawk.Emulation.Computers.Commodore64.MOS
+{
+ // vic pal
+ public class MOS6569 : Vic, IStandardIO
+ {
+ static uint[][] pipeline = new uint[][]
+ {
+ new uint[] // xposition
+ {
+ 0x0194, 0x0198,
+ 0x019C, 0x01A0,
+ 0x01A4, 0x01A8,
+ 0x01AC, 0x01B0,
+ 0x01B4, 0x01B8,
+
+ 0x01BC, 0x01C0,
+ 0x01C4, 0x01C8,
+ 0x01CC, 0x01D0,
+ 0x01D4, 0x01D8,
+ 0x01DC, 0x01E0,
+
+ 0x01E4, 0x01E8,
+ 0x01EC, 0x01F0,
+ 0x01F4, 0x0000,
+ 0x0004, 0x0008,
+ 0x000C, 0x0010,
+
+ 0x0014, 0x0018,
+ 0x001C, 0x0020,
+ 0x0024, 0x0028,
+ 0x002C, 0x0030,
+ 0x0034, 0x0038,
+
+ 0x003C, 0x0040,
+ 0x0044, 0x0048,
+ 0x004C, 0x0050,
+ 0x0054, 0x0058,
+ 0x005C, 0x0060,
+
+ 0x0064, 0x0068,
+ 0x006C, 0x0070,
+ 0x0074, 0x0078,
+ 0x007C, 0x0080,
+ 0x0084, 0x0088,
+
+ 0x008C, 0x0090,
+ 0x0094, 0x0098,
+ 0x009C, 0x00A0,
+ 0x00A4, 0x00A8,
+ 0x00AC, 0x00B0,
+
+ 0x00B4, 0x00B8,
+ 0x00BC, 0x00C0,
+ 0x00C4, 0x00C8,
+ 0x00CC, 0x00D0,
+ 0x00D4, 0x00D8,
+
+ 0x00DC, 0x00E0,
+ 0x00E4, 0x00E8,
+ 0x00EC, 0x00F0,
+ 0x00F4, 0x00F8,
+ 0x00FC, 0x0100,
+
+ 0x0104, 0x0108,
+ 0x010C, 0x0110,
+ 0x0114, 0x0118,
+ 0x011C, 0x0120,
+ 0x0124, 0x0128,
+
+ 0x012C, 0x0130,
+ 0x0134, 0x0138,
+ 0x013C, 0x0140,
+ 0x0144, 0x0148,
+ 0x014C, 0x0150,
+
+ 0x0154, 0x0158,
+ 0x015C, 0x0160,
+ 0x0164, 0x0168,
+ 0x016C, 0x0170,
+ 0x0174, 0x0178,
+
+ 0x017C, 0x0180,
+ 0x0184, 0x0188,
+ 0x018C, 0x0190
+ },
+ new uint[] // fetch (100=ref 200=c 300=g 400=i 500=none)
+ {
+ 0x0003, 0x0013,
+ 0x0023, 0x0033,
+ 0x0004, 0x0014,
+ 0x0024, 0x0034,
+ 0x0005, 0x0015,
+
+ 0x0025, 0x0035,
+ 0x0006, 0x0016,
+ 0x0026, 0x0036,
+ 0x0007, 0x0017,
+ 0x0027, 0x0037,
+
+ 0x0100, 0x0500,
+ 0x0100, 0x0500,
+ 0x0100, 0x0500,
+ 0x0100, 0x0500,
+ 0x0100, 0x0200,
+
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+ 0x0300, 0x0200,
+ 0x0300, 0x0500,
+
+ 0x0400, 0x0500,
+ 0x0400, 0x0500,
+ 0x0000, 0x0010,
+ 0x0020, 0x0030,
+ 0x0001, 0x0011,
+
+ 0x0021, 0x0031,
+ 0x0002, 0x0012,
+ 0x0022, 0x0032
+ },
+ new uint[] // BA
+ {
+ 0x0834, 0x0834,
+ 0x0345, 0x0345,
+ 0x0845, 0x0845,
+ 0x0456, 0x0456,
+ 0x0856, 0x0856,
+
+ 0x0567, 0x0567,
+ 0x0867, 0x0867,
+ 0x0887, 0x0887,
+ 0x0887, 0x0887,
+ 0x0000, 0x0000,
+
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+ 0x1000, 0x1000,
+
+ 0x0880, 0x0880,
+ 0x0880, 0x0880,
+ 0x0801, 0x0801,
+ 0x0012, 0x0012,
+ 0x0812, 0x0812,
+
+ 0x0123, 0x0123,
+ 0x0823, 0x0823,
+ 0x0234, 0x0234
+ },
+ new uint[] // actions
+ {
+ 0, 0,
+ 0, 0,
+ 0, 0,
+ 0, 0,
+ 0, 0,
+
+ 0, 0,
+ 0, 0,
+ 0, 0,
+ 0, 0,
+ 0, 0,
+
+ 0, 0,
+ 0, 0,
+ 0, 0,
+ 0, pipelineUpdateVc,
+ 0, pipelineChkSprChunch,
+
+ 0, pipelineUpdateMcBase,
+ 0, pipelineChkBrdL1,
+ 0, pipelineChkBrdL0,
+ 0, 0,
+ 0, 0,
+
+ 0, 0,
+ 0, 0,
+ 0, 0,
+ 0, 0,
+ 0, 0,
+
+ 0, 0,
+ 0, 0,
+ 0, 0,
+ 0, 0,
+ 0, 0,
+
+ 0, 0,
+ 0, 0,
+ 0, 0,
+ 0, 0,
+ 0, 0,
+
+ 0, 0,
+ 0, 0,
+ 0, 0,
+ 0, 0,
+ 0, 0,
+
+ 0, 0,
+ 0, 0,
+ 0, 0,
+ 0, 0,
+ 0, 0,
+
+ 0, 0,
+ 0, 0,
+ 0, 0,
+ 0, 0,
+ 0, 0,
+
+ 0, 0,
+ 0, 0,
+ 0, 0,
+ 0, 0,
+ pipelineChkSprDma, 0,
+
+ pipelineChkSprDma, pipelineChkBrdR0 | pipelineChkSprExp,
+ 0, pipelineChkBrdR1,
+ pipelineChkSprDisp, pipelineUpdateRc,
+ 0, 0,
+ 0, 0,
+
+ 0, 0,
+ 0, 0,
+ 0, 0
+ }
+ };
+
+ public MOS6569(C64Chips newChips)
+ : base(newChips, 63, 312, pipeline, 17734472 / 18)
+ {
+ }
+ }
+}
diff --git a/BizHawk.Emulation/Computers/Commodore64/MOS/MOS6581.cs b/BizHawk.Emulation/Computers/Commodore64/MOS/MOS6581.cs
new file mode 100644
index 0000000000..2dfb88556d
--- /dev/null
+++ b/BizHawk.Emulation/Computers/Commodore64/MOS/MOS6581.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace BizHawk.Emulation.Computers.Commodore64.MOS
+{
+ // sid
+ public class MOS6581 : Sid, IStandardIO
+ {
+ }
+}
diff --git a/BizHawk.Emulation/Computers/Commodore64/MOS/MOSPLA.cs b/BizHawk.Emulation/Computers/Commodore64/MOS/MOSPLA.cs
new file mode 100644
index 0000000000..1052d6eb53
--- /dev/null
+++ b/BizHawk.Emulation/Computers/Commodore64/MOS/MOSPLA.cs
@@ -0,0 +1,557 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace BizHawk.Emulation.Computers.Commodore64.MOS
+{
+ // emulates the PLA
+ // which handles all bank switching
+
+ public class MOSPLA : IStandardIO
+ {
+ // ------------------------------------
+
+ private enum PLABank
+ {
+ None,
+ RAM,
+ BasicROM,
+ KernalROM,
+ CharROM,
+ IO,
+ CartridgeLo,
+ CartridgeHi,
+ Vic,
+ Sid,
+ ColorRam,
+ Cia0,
+ Cia1,
+ Expansion0,
+ Expansion1
+ }
+
+ private struct PLACpuMap
+ {
+ public PLABank layout1000;
+ public PLABank layout8000;
+ public PLABank layoutA000;
+ public PLABank layoutC000;
+ public PLABank layoutD000;
+ public PLABank layoutE000;
+ }
+
+ // ------------------------------------
+
+ private byte bus;
+ private C64Chips chips;
+ private bool cia0portRead;
+ private PLACpuMap map;
+ private bool pinCharen;
+ private bool pinExRom;
+ private bool pinGame;
+ private bool pinHiRam;
+ private bool pinLoRam;
+ private bool ultimax;
+ private Func vicBankPortRead;
+
+ public MOSPLA(C64Chips newChips, FuncnewVicBankPortRead)
+ {
+ chips = newChips;
+ vicBankPortRead = newVicBankPortRead;
+ }
+
+ public void HardReset()
+ {
+ pinCharen = true;
+ pinExRom = true;
+ pinGame = true;
+ pinHiRam = true;
+ pinLoRam = true;
+ UpdateMap();
+ }
+
+ // ------------------------------------
+
+ public bool Charen
+ {
+ get { return pinCharen; }
+ set { pinCharen = value; UpdateMap(); }
+ }
+
+ public bool ExRom
+ {
+ get { return pinExRom; }
+ set { pinExRom = value; UpdateMap(); }
+ }
+
+ public bool Game
+ {
+ get { return pinGame; }
+ set { pinGame = value; UpdateMap(); }
+ }
+
+ public bool HiRam
+ {
+ get { return pinHiRam; }
+ set { pinHiRam = value; UpdateMap(); }
+ }
+
+ public bool InputWasRead
+ {
+ get { return cia0portRead; }
+ set { cia0portRead = value; }
+ }
+
+ public bool LoRam
+ {
+ get { return pinLoRam; }
+ set { pinLoRam = value; UpdateMap(); }
+ }
+
+ public bool UltimaxMode
+ {
+ get { return ultimax; }
+ }
+
+ private void UpdateMap()
+ {
+ if (ultimax)
+ return;
+
+ if (pinCharen && pinHiRam && pinLoRam && pinGame && pinExRom)
+ {
+ // 11111
+ map.layout1000 = PLABank.RAM;
+ map.layout8000 = PLABank.RAM;
+ map.layoutA000 = PLABank.BasicROM;
+ map.layoutC000 = PLABank.RAM;
+ map.layoutD000 = PLABank.IO;
+ map.layoutE000 = PLABank.KernalROM;
+ }
+ else if (!pinCharen && pinHiRam && pinLoRam && pinGame && pinExRom)
+ {
+ // 01111
+ map.layout1000 = PLABank.RAM;
+ map.layout8000 = PLABank.RAM;
+ map.layoutA000 = PLABank.BasicROM;
+ map.layoutC000 = PLABank.RAM;
+ map.layoutD000 = PLABank.CharROM;
+ map.layoutE000 = PLABank.KernalROM;
+ }
+ else if (pinCharen && !pinHiRam && pinLoRam && pinGame)
+ {
+ // 1011X
+ map.layout1000 = PLABank.RAM;
+ map.layout8000 = PLABank.RAM;
+ map.layoutA000 = PLABank.RAM;
+ map.layoutC000 = PLABank.RAM;
+ map.layoutD000 = PLABank.IO;
+ map.layoutE000 = PLABank.RAM;
+ }
+ else if (pinCharen && !pinHiRam && pinLoRam && !pinGame && !pinExRom)
+ {
+ // 10100
+ map.layout1000 = PLABank.RAM;
+ map.layout8000 = PLABank.RAM;
+ map.layoutA000 = PLABank.RAM;
+ map.layoutC000 = PLABank.RAM;
+ map.layoutD000 = PLABank.IO;
+ map.layoutE000 = PLABank.RAM;
+ }
+ else if (!pinCharen && !pinHiRam && pinLoRam && pinGame)
+ {
+ // 0011X
+ map.layout1000 = PLABank.RAM;
+ map.layout8000 = PLABank.RAM;
+ map.layoutA000 = PLABank.RAM;
+ map.layoutC000 = PLABank.RAM;
+ map.layoutD000 = PLABank.CharROM;
+ map.layoutE000 = PLABank.RAM;
+ }
+ else if (!pinCharen && !pinHiRam && pinLoRam && !pinGame && !pinExRom)
+ {
+ // 00100
+ map.layout1000 = PLABank.RAM;
+ map.layout8000 = PLABank.RAM;
+ map.layoutA000 = PLABank.RAM;
+ map.layoutC000 = PLABank.RAM;
+ map.layoutD000 = PLABank.RAM;
+ map.layoutE000 = PLABank.RAM;
+ }
+ else if (!pinHiRam && !pinLoRam && pinGame)
+ {
+ // X001X
+ map.layout1000 = PLABank.RAM;
+ map.layout8000 = PLABank.RAM;
+ map.layoutA000 = PLABank.RAM;
+ map.layoutC000 = PLABank.RAM;
+ map.layoutD000 = PLABank.RAM;
+ map.layoutE000 = PLABank.RAM;
+ }
+ else if (pinCharen && pinHiRam && !pinLoRam && pinGame)
+ {
+ // 1101X
+ map.layout1000 = PLABank.RAM;
+ map.layout8000 = PLABank.RAM;
+ map.layoutA000 = PLABank.RAM;
+ map.layoutC000 = PLABank.RAM;
+ map.layoutD000 = PLABank.IO;
+ map.layoutE000 = PLABank.KernalROM;
+ }
+ else if (pinCharen && !pinHiRam && !pinLoRam && !pinExRom)
+ {
+ // 100X0
+ map.layout1000 = PLABank.RAM;
+ map.layout8000 = PLABank.RAM;
+ map.layoutA000 = PLABank.RAM;
+ map.layoutC000 = PLABank.RAM;
+ map.layoutD000 = PLABank.IO;
+ map.layoutE000 = PLABank.KernalROM;
+ }
+ else if (!pinCharen && pinHiRam && !pinLoRam && pinGame)
+ {
+ // 0101X
+ map.layout1000 = PLABank.RAM;
+ map.layout8000 = PLABank.RAM;
+ map.layoutA000 = PLABank.RAM;
+ map.layoutC000 = PLABank.RAM;
+ map.layoutD000 = PLABank.CharROM;
+ map.layoutE000 = PLABank.KernalROM;
+ }
+ else if (!pinCharen && !pinHiRam && !pinLoRam && !pinExRom)
+ {
+ // 000X0
+ map.layout1000 = PLABank.RAM;
+ map.layout8000 = PLABank.RAM;
+ map.layoutA000 = PLABank.RAM;
+ map.layoutC000 = PLABank.RAM;
+ map.layoutD000 = PLABank.CharROM;
+ map.layoutE000 = PLABank.KernalROM;
+ }
+ else if (pinCharen && pinHiRam && pinLoRam && pinGame && !pinExRom)
+ {
+ // 11110
+ map.layout1000 = PLABank.RAM;
+ map.layout8000 = PLABank.CartridgeLo;
+ map.layoutA000 = PLABank.BasicROM;
+ map.layoutC000 = PLABank.RAM;
+ map.layoutD000 = PLABank.IO;
+ map.layoutE000 = PLABank.KernalROM;
+ }
+ else if (!pinCharen && pinHiRam && pinLoRam && pinGame && !pinExRom)
+ {
+ // 01110
+ map.layout1000 = PLABank.RAM;
+ map.layout8000 = PLABank.CartridgeLo;
+ map.layoutA000 = PLABank.BasicROM;
+ map.layoutC000 = PLABank.RAM;
+ map.layoutD000 = PLABank.CharROM;
+ map.layoutE000 = PLABank.KernalROM;
+ }
+ else if (pinCharen && pinHiRam && !pinLoRam && !pinGame && !pinExRom)
+ {
+ // 11000
+ map.layout1000 = PLABank.RAM;
+ map.layout8000 = PLABank.RAM;
+ map.layoutA000 = PLABank.CartridgeHi;
+ map.layoutC000 = PLABank.RAM;
+ map.layoutD000 = PLABank.IO;
+ map.layoutE000 = PLABank.KernalROM;
+ }
+ else if (!pinCharen && pinHiRam && !pinLoRam && !pinGame && !pinExRom)
+ {
+ // 01000
+ map.layout1000 = PLABank.RAM;
+ map.layout8000 = PLABank.RAM;
+ map.layoutA000 = PLABank.CartridgeHi;
+ map.layoutC000 = PLABank.RAM;
+ map.layoutD000 = PLABank.CharROM;
+ map.layoutE000 = PLABank.KernalROM;
+ }
+ else if (pinCharen && pinHiRam && pinLoRam && !pinGame && !pinExRom)
+ {
+ // 11100
+ map.layout1000 = PLABank.RAM;
+ map.layout8000 = PLABank.CartridgeLo;
+ map.layoutA000 = PLABank.CartridgeHi;
+ map.layoutC000 = PLABank.RAM;
+ map.layoutD000 = PLABank.IO;
+ map.layoutE000 = PLABank.KernalROM;
+ }
+ else if (!pinCharen && pinHiRam && pinLoRam && !pinGame && !pinExRom)
+ {
+ // 01100
+ map.layout1000 = PLABank.RAM;
+ map.layout8000 = PLABank.CartridgeLo;
+ map.layoutA000 = PLABank.CartridgeHi;
+ map.layoutC000 = PLABank.RAM;
+ map.layoutD000 = PLABank.CharROM;
+ map.layoutE000 = PLABank.KernalROM;
+ }
+ else if (!pinGame && pinExRom)
+ {
+ // XXX01 (ultimax)
+ // once in this mode, it is not supposed to change
+ map.layout1000 = PLABank.None;
+ map.layout8000 = PLABank.CartridgeLo;
+ map.layoutA000 = PLABank.None;
+ map.layoutC000 = PLABank.None;
+ map.layoutD000 = PLABank.IO;
+ map.layoutE000 = PLABank.CartridgeHi;
+ ultimax = true;
+ }
+ else
+ {
+ throw new Exception("Memory configuration missing from PLA, fix this!");
+ }
+ }
+
+ // ------------------------------------
+
+ private PLABank Bank(ushort addr)
+ {
+ if (addr < 0x1000)
+ return PLABank.RAM;
+ else if (addr >= 0x1000 && addr < 0x8000)
+ return map.layout1000;
+ else if (addr >= 0x8000 && addr < 0xA000)
+ return map.layout8000;
+ else if (addr >= 0xA000 && addr < 0xC000)
+ return map.layoutA000;
+ else if (addr >= 0xC000 && addr < 0xD000)
+ return map.layoutC000;
+ else if (addr >= 0xD000 && addr < 0xE000)
+ {
+ if (map.layoutD000 == PLABank.IO)
+ {
+ if (addr >= 0xD000 && addr < 0xD400)
+ return PLABank.Vic;
+ else if (addr >= 0xD400 && addr < 0xD800)
+ return PLABank.Sid;
+ else if (addr >= 0xD800 && addr < 0xDC00)
+ return PLABank.ColorRam;
+ else if (addr >= 0xDC00 && addr < 0xDD00)
+ return PLABank.Cia0;
+ else if (addr >= 0xDD00 && addr < 0xDE00)
+ return PLABank.Cia1;
+ else if (addr >= 0xDE00 && addr < 0xDF00)
+ return PLABank.Expansion0;
+ else
+ return PLABank.Expansion1;
+ }
+ else
+ {
+ return map.layoutD000;
+ }
+ }
+ else
+ {
+ return map.layoutE000;
+ }
+ }
+
+ public byte Peek(int addr)
+ {
+ switch (Bank((ushort)(addr & 0xFFFF)))
+ {
+ case PLABank.BasicROM:
+ return chips.basicRom.Peek(addr);
+ case PLABank.CartridgeHi:
+ return 0;
+ case PLABank.CartridgeLo:
+ return 0;
+ case PLABank.CharROM:
+ return chips.charRom.Peek(addr);
+ case PLABank.Cia0:
+ return chips.cia0.Peek(addr);
+ case PLABank.Cia1:
+ return chips.cia1.Peek(addr);
+ case PLABank.ColorRam:
+ return chips.colorRam.Peek(addr, bus);
+ case PLABank.Expansion0:
+ return 0;
+ case PLABank.Expansion1:
+ return 0;
+ case PLABank.KernalROM:
+ return chips.kernalRom.Peek(addr);
+ case PLABank.None:
+ return 0xFF;
+ case PLABank.RAM:
+ return chips.ram.Peek(addr);
+ case PLABank.Sid:
+ return chips.sid.Peek(addr);
+ case PLABank.Vic:
+ return chips.vic.Peek(addr);
+ }
+ return 0xFF;
+ }
+
+ public void Poke(int addr, byte val)
+ {
+ switch (Bank((ushort)(addr & 0xFFFF)))
+ {
+ case PLABank.BasicROM:
+ chips.basicRom.Poke(addr, val);
+ break;
+ case PLABank.CartridgeHi:
+ break;
+ case PLABank.CartridgeLo:
+ break;
+ case PLABank.CharROM:
+ chips.charRom.Poke(addr, val);
+ break;
+ case PLABank.Cia0:
+ chips.cia0.Poke(addr, val);
+ break;
+ case PLABank.Cia1:
+ chips.cia1.Poke(addr, val);
+ break;
+ case PLABank.ColorRam:
+ chips.colorRam.Poke(addr, val);
+ break;
+ case PLABank.Expansion0:
+ break;
+ case PLABank.Expansion1:
+ break;
+ case PLABank.KernalROM:
+ chips.kernalRom.Poke(addr, val);
+ break;
+ case PLABank.None:
+ break;
+ case PLABank.RAM:
+ chips.ram.Poke(addr, val);
+ break;
+ case PLABank.Sid:
+ chips.sid.Poke(addr, val);
+ break;
+ case PLABank.Vic:
+ chips.vic.Poke(addr, val);
+ break;
+ }
+ }
+
+ public byte Read(ushort addr)
+ {
+ switch (Bank(addr))
+ {
+ case PLABank.BasicROM:
+ bus = chips.basicRom.Read(addr);
+ break;
+ case PLABank.CartridgeHi:
+ bus = 0;
+ break;
+ case PLABank.CartridgeLo:
+ bus = 0;
+ break;
+ case PLABank.CharROM:
+ bus = chips.charRom.Read(addr);
+ break;
+ case PLABank.Cia0:
+ if (addr == 0xDC00 || addr == 0xDC01)
+ cia0portRead = true;
+ bus = chips.cia0.Read(addr);
+ break;
+ case PLABank.Cia1:
+ bus = chips.cia1.Read(addr);
+ break;
+ case PLABank.ColorRam:
+ bus = chips.colorRam.Read(addr, bus);
+ break;
+ case PLABank.Expansion0:
+ bus = 0;
+ break;
+ case PLABank.Expansion1:
+ bus = 0;
+ break;
+ case PLABank.KernalROM:
+ bus = chips.kernalRom.Read(addr);
+ break;
+ case PLABank.None:
+ bus = 0xFF;
+ break;
+ case PLABank.RAM:
+ bus = chips.ram.Read(addr);
+ break;
+ case PLABank.Sid:
+ bus = chips.sid.Read(addr);
+ break;
+ case PLABank.Vic:
+ bus = chips.vic.Read(addr);
+ break;
+ }
+ return bus;
+ }
+
+ public byte ReadVic(ushort addr)
+ {
+ addr &= 0x3FFF;
+
+ if (ultimax)
+ {
+ if (addr >= 0x3000)
+ return 0; //todo: change to ROMHI
+ else
+ return chips.ram.Read(addr);
+ }
+ else
+ {
+ if ((addr & 0x7000) == 0x1000)
+ {
+ return chips.charRom.Read(addr);
+ }
+ else
+ {
+ ushort bank = (ushort)(vicBankPortRead() & 0x3);
+ bank <<= 14;
+ addr |= bank;
+ return chips.ram.Read(addr);
+ }
+ }
+ }
+
+ public void Write(ushort addr, byte val)
+ {
+ switch (Bank(addr))
+ {
+ case PLABank.BasicROM:
+ chips.basicRom.Write(addr, val);
+ break;
+ case PLABank.CartridgeHi:
+ break;
+ case PLABank.CartridgeLo:
+ break;
+ case PLABank.CharROM:
+ chips.charRom.Write(addr, val);
+ break;
+ case PLABank.Cia0:
+ chips.cia0.Write(addr, val);
+ break;
+ case PLABank.Cia1:
+ chips.cia1.Write(addr, val);
+ break;
+ case PLABank.ColorRam:
+ chips.colorRam.Write(addr, val);
+ break;
+ case PLABank.Expansion0:
+ break;
+ case PLABank.Expansion1:
+ break;
+ case PLABank.KernalROM:
+ chips.kernalRom.Write(addr, val);
+ break;
+ case PLABank.None:
+ break;
+ case PLABank.RAM:
+ chips.ram.Write(addr, val);
+ break;
+ case PLABank.Sid:
+ chips.sid.Write(addr, val);
+ break;
+ case PLABank.Vic:
+ chips.vic.Write(addr, val);
+ break;
+ }
+ }
+ }
+}
diff --git a/BizHawk.Emulation/Computers/Commodore64/MOS/Port.cs b/BizHawk.Emulation/Computers/Commodore64/MOS/Port.cs
new file mode 100644
index 0000000000..fea19eb226
--- /dev/null
+++ b/BizHawk.Emulation/Computers/Commodore64/MOS/Port.cs
@@ -0,0 +1,55 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace BizHawk.Emulation.Computers.Commodore64.MOS
+{
+ static public class Port
+ {
+ static public byte CPUWrite(byte latch, byte val, byte dir)
+ {
+ byte result;
+ result = (byte)(latch & ~dir);
+ result |= (byte)(val & dir);
+ return result;
+ }
+
+ static public byte ExternalWrite(byte latch, byte val, byte dir)
+ {
+ byte result;
+ result = (byte)(latch & dir);
+ result |= (byte)(val & ~dir);
+ return result;
+ }
+
+ static public PortAdapter GetAdapter(Func newRead, Action newWrite)
+ {
+ return new PortAdapter(newRead, newWrite);
+ }
+ }
+
+ public class PortAdapter
+ {
+ private Action actWrite;
+ private Func funcRead;
+
+ public PortAdapter(Func newRead, Action newWrite)
+ {
+ funcRead = newRead;
+ actWrite = newWrite;
+ }
+
+ public byte Data
+ {
+ get
+ {
+ return funcRead();
+ }
+ set
+ {
+ actWrite(value);
+ }
+ }
+ }
+}
diff --git a/BizHawk.Emulation/Computers/Commodore64/MOS/Sid.SoundProvider.cs b/BizHawk.Emulation/Computers/Commodore64/MOS/Sid.SoundProvider.cs
new file mode 100644
index 0000000000..844635a941
--- /dev/null
+++ b/BizHawk.Emulation/Computers/Commodore64/MOS/Sid.SoundProvider.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace BizHawk.Emulation.Computers.Commodore64.MOS
+{
+ public abstract partial class Sid : ISoundProvider
+ {
+ public void GetSamples(short[] samples)
+ {
+ // produce no samples for now
+ }
+
+ public int MaxVolume
+ {
+ get
+ {
+ return 255;
+ }
+ set
+ {
+ // no change in volume
+ }
+ }
+ }
+}
diff --git a/BizHawk.Emulation/Computers/Commodore64/MOS/Sid.SyncSoundProvider.cs b/BizHawk.Emulation/Computers/Commodore64/MOS/Sid.SyncSoundProvider.cs
new file mode 100644
index 0000000000..0521e68acc
--- /dev/null
+++ b/BizHawk.Emulation/Computers/Commodore64/MOS/Sid.SyncSoundProvider.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace BizHawk.Emulation.Computers.Commodore64.MOS
+{
+ public abstract partial class Sid : ISyncSoundProvider
+ {
+ public void GetSamples(out short[] samples, out int nsamp)
+ {
+ samples = new short[0];
+ nsamp = 0;
+ }
+
+ public void DiscardSamples()
+ {
+ // todo
+ }
+ }
+}
diff --git a/BizHawk.Emulation/Computers/Commodore64/MOS/Sid.cs b/BizHawk.Emulation/Computers/Commodore64/MOS/Sid.cs
new file mode 100644
index 0000000000..f78c212484
--- /dev/null
+++ b/BizHawk.Emulation/Computers/Commodore64/MOS/Sid.cs
@@ -0,0 +1,56 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace BizHawk.Emulation.Computers.Commodore64.MOS
+{
+ public abstract partial class Sid : IStandardIO
+ {
+ // ------------------------------------
+
+ private class Envelope
+ {
+ }
+
+ private class Voice
+ {
+ }
+
+ // ------------------------------------
+
+ public void HardReset()
+ {
+ }
+
+ // ------------------------------------
+
+ public void ExecutePhase1()
+ {
+ }
+
+ public void ExecutePhase2()
+ {
+ }
+
+ // ------------------------------------
+
+ public byte Peek(int addr)
+ {
+ return 0;
+ }
+
+ public void Poke(int addr, byte val)
+ {
+ }
+
+ public byte Read(ushort addr)
+ {
+ return 0;
+ }
+
+ public void Write(ushort addr, byte val)
+ {
+ }
+ }
+}
diff --git a/BizHawk.Emulation/Computers/Commodore64/MOS/Timer.cs b/BizHawk.Emulation/Computers/Commodore64/MOS/Timer.cs
new file mode 100644
index 0000000000..0d4e849820
--- /dev/null
+++ b/BizHawk.Emulation/Computers/Commodore64/MOS/Timer.cs
@@ -0,0 +1,101 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace BizHawk.Emulation.Computers.Commodore64.MOS
+{
+ // base class for MOS Technology timer chips
+
+ public abstract class Timer
+ {
+ protected bool pinIRQ;
+ protected byte[] portData;
+ protected byte[] portDir;
+ protected uint[] timer;
+ protected uint[] timerLatch;
+ protected bool[] timerOn;
+
+ public Timer()
+ {
+ portData = new byte[2];
+ portDir = new byte[2];
+ timer = new uint[2];
+ timerLatch = new uint[2];
+ timerOn = new bool[2];
+ }
+
+ public PortAdapter Adapter0()
+ {
+ return Port.GetAdapter(ReadPort0, ExternalWritePort0);
+ }
+
+ public PortAdapter Adapter1()
+ {
+ return Port.GetAdapter(ReadPort1, ExternalWritePort1);
+ }
+
+ private void ExternalWritePort(uint index, byte data)
+ {
+ portData[index] = Port.ExternalWrite(portData[index], data, portDir[index]);
+ }
+
+ private void ExternalWritePort0(byte data)
+ {
+ ExternalWritePort(0, data);
+ }
+
+ private void ExternalWritePort1(byte data)
+ {
+ ExternalWritePort(1, data);
+ }
+
+ protected void HardResetInternal()
+ {
+ timer[0] = 0xFFFF;
+ timer[1] = 0xFFFF;
+ timerLatch[0] = timer[0];
+ timerLatch[1] = timer[1];
+ pinIRQ = true;
+ portDir[0] = 0x00;
+ portDir[1] = 0x00;
+ }
+
+ public bool IRQ
+ {
+ get
+ {
+ return pinIRQ;
+ }
+ }
+
+ public byte ReadPort0()
+ {
+ return portData[0];
+ }
+
+ public byte ReadPort1()
+ {
+ return portData[1];
+ }
+
+ protected void SyncInternal(Serializer ser)
+ {
+ }
+
+ private void WritePort(uint index, byte data)
+ {
+ portData[index] = Port.CPUWrite(portData[index], data, portDir[index]);
+ }
+
+ public void WritePort0(byte data)
+ {
+ WritePort(0, data);
+ }
+
+ public void WritePort1(byte data)
+ {
+ WritePort(1, data);
+ }
+ }
+}
diff --git a/BizHawk.Emulation/Computers/Commodore64/MOS/Vic.VideoProvider.cs b/BizHawk.Emulation/Computers/Commodore64/MOS/Vic.VideoProvider.cs
new file mode 100644
index 0000000000..68263fd1be
--- /dev/null
+++ b/BizHawk.Emulation/Computers/Commodore64/MOS/Vic.VideoProvider.cs
@@ -0,0 +1,74 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace BizHawk.Emulation.Computers.Commodore64.MOS
+{
+ public abstract partial class Vic : IVideoProvider
+ {
+ private int[] buf;
+ private int bufHeight;
+ private uint bufLength;
+ private uint bufOffset;
+ private int bufWidth;
+
+ // palette
+ private int[] palette =
+ {
+ Colors.ARGB(0x00, 0x00, 0x00),
+ Colors.ARGB(0xFF, 0xFF, 0xFF),
+ Colors.ARGB(0x68, 0x37, 0x2B),
+ Colors.ARGB(0x70, 0xA4, 0xB2),
+ Colors.ARGB(0x6F, 0x3D, 0x86),
+ Colors.ARGB(0x58, 0x8D, 0x43),
+ Colors.ARGB(0x35, 0x28, 0x79),
+ Colors.ARGB(0xB8, 0xC7, 0x6F),
+ Colors.ARGB(0x6F, 0x4F, 0x25),
+ Colors.ARGB(0x43, 0x39, 0x00),
+ Colors.ARGB(0x9A, 0x67, 0x59),
+ Colors.ARGB(0x44, 0x44, 0x44),
+ Colors.ARGB(0x6C, 0x6C, 0x6C),
+ Colors.ARGB(0x9A, 0xD2, 0x84),
+ Colors.ARGB(0x6C, 0x5E, 0xB5),
+ Colors.ARGB(0x95, 0x95, 0x95)
+ };
+
+ public int BackgroundColor
+ {
+ get { return Colors.ARGB(0, 0, 0); }
+ }
+
+ public int BufferHeight
+ {
+ get { return bufHeight; }
+ }
+
+ public int BufferWidth
+ {
+ get { return bufWidth; }
+ }
+
+ public int[] GetVideoBuffer()
+ {
+ return buf;
+ }
+
+ public int VirtualWidth
+ {
+ get { return bufWidth; }
+ }
+
+ private void WritePixel(uint pixel)
+ {
+ if (borderOnMain || borderOnVertical)
+ buf[bufOffset] = palette[borderColor];
+ else
+ buf[bufOffset] = palette[pixel];
+
+ bufOffset++;
+ if (bufOffset == bufLength)
+ bufOffset = 0;
+ }
+ }
+}
diff --git a/BizHawk.Emulation/Computers/Commodore64/MOS/Vic.cs b/BizHawk.Emulation/Computers/Commodore64/MOS/Vic.cs
new file mode 100644
index 0000000000..6f3db4b3f7
--- /dev/null
+++ b/BizHawk.Emulation/Computers/Commodore64/MOS/Vic.cs
@@ -0,0 +1,975 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace BizHawk.Emulation.Computers.Commodore64.MOS
+{
+ public abstract partial class Vic : IStandardIO
+ {
+ // ------------------------------------
+
+ private class Sprite
+ {
+ public bool collideData;
+ public bool collideSprite;
+ public uint color;
+ public bool enable;
+ public uint mc;
+ public uint mcbase;
+ public bool multicolor;
+ public uint pointer;
+ public bool priority;
+ public uint sr;
+ public uint x;
+ public bool xExpand;
+ public uint y;
+ public bool yExpand;
+
+ public void HardReset()
+ {
+ collideData = false;
+ collideSprite = false;
+ color = 0;
+ enable = false;
+ mc = 0;
+ mcbase = 0;
+ multicolor = false;
+ pointer = 0;
+ priority = false;
+ sr = 0;
+ x = 0;
+ xExpand = false;
+ y = 0;
+ yExpand = false;
+ }
+ }
+ private Sprite[] sprites;
+
+ private uint backgroundColor0;
+ private uint backgroundColor1;
+ private uint backgroundColor2;
+ private uint backgroundColor3;
+ private uint baCount;
+ private bool badline;
+ private bool badlineEnable;
+ private bool bitmapMode;
+ private bool borderCheckLEnable;
+ private bool borderCheckREnable;
+ private uint borderColor;
+ private bool borderOnMain;
+ private bool borderOnVertical;
+ private uint[] bufferC;
+ private uint[] bufferG;
+ private byte bus;
+ private bool columnSelect;
+ private uint cycle;
+ private uint cycleIndex;
+ private uint dataC;
+ private uint dataG;
+ private bool displayEnable;
+ private bool enableIntLightPen;
+ private bool enableIntRaster;
+ private bool enableIntSpriteCollision;
+ private bool enableIntSpriteDataCollision;
+ private bool extraColorMode;
+ private bool idle;
+ private bool intLightPen;
+ private bool intRaster;
+ private bool intSpriteCollision;
+ private bool intSpriteDataCollision;
+ private uint lastRasterLine;
+ private uint lightPenX;
+ private uint lightPenY;
+ private bool multicolorMode;
+ private uint pointerCB;
+ private uint pointerVM;
+ private uint rasterInterruptLine;
+ private uint rasterLine;
+ private uint rasterX;
+ private uint rc;
+ private uint refreshCounter;
+ private bool rowSelect;
+ private uint spriteMulticolor0;
+ private uint spriteMulticolor1;
+ private uint sr;
+ private uint srCount;
+ private uint vc;
+ private uint vcbase;
+ private uint vmli;
+ private uint xScroll;
+ private uint yScroll;
+
+ // ------------------------------------
+
+ private C64Chips chips;
+ private int cyclesPerSec;
+ private bool pinAEC;
+ private bool pinBA;
+ private bool pinIRQ;
+ private uint[][] pipeline;
+ private uint totalCycles;
+ private uint totalLines;
+
+ // ------------------------------------
+
+ public Vic(C64Chips newChips, uint newCycles, uint newLines, uint[][] newPipeline, int newCyclesPerSec)
+ {
+ chips = newChips;
+ totalCycles = newCycles;
+ totalLines = newLines;
+ pipeline = newPipeline;
+ cyclesPerSec = newCyclesPerSec;
+
+ bufWidth = (int)(totalCycles * 8);
+ bufHeight = (int)(totalLines);
+ buf = new int[bufWidth * bufHeight];
+ bufLength = (uint)buf.Length;
+
+ sprites = new Sprite[8];
+ for (uint i = 0; i < 8; i++)
+ sprites[i] = new Sprite();
+
+ bufferC = new uint[40];
+ bufferG = new uint[40];
+ }
+
+ public void HardReset()
+ {
+ pinAEC = true;
+ pinBA = true;
+ pinIRQ = false;
+
+ bufOffset = 0;
+
+ backgroundColor0 = 0;
+ backgroundColor1 = 0;
+ backgroundColor2 = 0;
+ backgroundColor3 = 0;
+ baCount = 4;
+ badline = false;
+ badlineEnable = false;
+ bitmapMode = false;
+ borderCheckLEnable = false;
+ borderCheckREnable = false;
+ borderColor = 0;
+ borderOnMain = true;
+ borderOnVertical = true;
+ columnSelect = false;
+ displayEnable = false;
+ enableIntLightPen = false;
+ enableIntRaster = false;
+ enableIntSpriteCollision = false;
+ enableIntSpriteDataCollision = false;
+ extraColorMode = false;
+ idle = true;
+ intLightPen = false;
+ intRaster = false;
+ intSpriteCollision = false;
+ intSpriteDataCollision = false;
+ lastRasterLine = 0;
+ lightPenX = 0;
+ lightPenY = 0;
+ multicolorMode = false;
+ pointerCB = 0;
+ pointerVM = 0;
+ rasterInterruptLine = 0;
+ rasterLine = 0;
+ rasterX = 0;
+ rc = 7;
+ refreshCounter = 0xFF;
+ rowSelect = false;
+ spriteMulticolor0 = 0;
+ spriteMulticolor1 = 0;
+ sr = 0;
+ srCount = 0;
+ vc = 0;
+ vcbase = 0;
+ vmli = 0;
+ xScroll = 0;
+ yScroll = 0;
+
+ for (uint i = 0; i < 8; i++)
+ sprites[i].HardReset();
+
+ for (uint i = 0; i < 40; i++)
+ {
+ bufferC[i] = 0;
+ bufferG[i] = 0;
+ }
+ }
+
+ private void UpdateBA()
+ {
+ if (pinBA)
+ baCount = 4;
+ else if (baCount > 0)
+ baCount--;
+ }
+
+ private void UpdatePins()
+ {
+ pinIRQ = !(
+ (enableIntRaster & intRaster) |
+ (enableIntSpriteDataCollision & intSpriteDataCollision) |
+ (enableIntSpriteCollision & intSpriteCollision) |
+ (enableIntLightPen & intLightPen));
+ }
+
+ // ------------------------------------
+
+ protected const uint pipelineUpdateVc = 1;
+ protected const uint pipelineChkSprChunch = 2;
+ protected const uint pipelineUpdateMcBase = 4;
+ protected const uint pipelineChkBrdL1 = 8;
+ protected const uint pipelineChkBrdL0 = 16;
+ protected const uint pipelineChkSprDma = 32;
+ protected const uint pipelineChkBrdR0 = 64;
+ protected const uint pipelineChkSprExp = 128;
+ protected const uint pipelineChkBrdR1 = 256;
+ protected const uint pipelineChkSprDisp = 512;
+ protected const uint pipelineUpdateRc = 1024;
+
+ // ------------------------------------
+
+ public void ExecutePhase1()
+ {
+ // always assert access over the bus in ph1
+ pinAEC = false;
+
+ // raster IRQ compare
+ if ((cycle == 0 && rasterLine > 0) || (cycle == 1 && rasterLine == 0))
+ {
+ if (rasterLine != lastRasterLine)
+ if (rasterLine == rasterInterruptLine)
+ intRaster = true;
+ lastRasterLine = rasterLine;
+ }
+
+ // display enable compare
+ if (rasterLine == 0x030)
+ badlineEnable |= displayEnable;
+
+ // badline compare
+ if (badlineEnable && rasterLine >= 0x030 && rasterLine < 0x0F7 && ((rasterLine & 0x7) == yScroll))
+ badline = true;
+
+ if (badline)
+ idle = false;
+
+ ParseCycle();
+
+ Render();
+
+ // must always come last
+ UpdatePins();
+ }
+
+ public void ExecutePhase2()
+ {
+ ParseCycle();
+
+ // advance cycle and optionally raster line
+ cycle++;
+ if (cycle == totalCycles)
+ {
+ vcbase = 0;
+ cycleIndex = 0;
+ cycle = 0;
+ rasterLine++;
+ if (rasterLine == totalLines)
+ rasterLine = 0;
+ }
+
+ // if the BA counter is nonzero, allow CPU bus access
+ UpdateBA();
+ if (baCount > 0)
+ pinAEC = true;
+
+ Render();
+
+ // must always come last
+ UpdatePins();
+ }
+
+ private void ParseCycle()
+ {
+ ushort addr = 0x3FFF;
+ uint cycleBAsprite0;
+ uint cycleBAsprite1;
+ uint cycleBAsprite2;
+ uint cycleFetchSpriteIndex;
+ uint fetch = pipeline[1][cycleIndex];
+ uint ba = pipeline[2][cycleIndex];
+ uint act = pipeline[3][cycleIndex];
+
+ // apply X location
+ rasterX = pipeline[0][cycleIndex];
+
+ // perform fetch
+ switch (fetch & 0xFF00)
+ {
+ case 0x0100:
+ // fetch R
+ refreshCounter = (refreshCounter - 1) & 0xFF;
+ addr = (ushort)(0x3F00 | refreshCounter);
+ bus = chips.pla.ReadVic(addr);
+ break;
+ case 0x0200:
+ // fetch C
+ if (!idle)
+ {
+ if (badline)
+ {
+ addr = (ushort)((pointerVM << 10) | vc);
+ bus = chips.pla.ReadVic(addr);
+ dataC = bus;
+ }
+ else
+ {
+ dataC = bufferC[vmli];
+ }
+ }
+ else
+ {
+ dataC = 0;
+ }
+ break;
+ case 0x0300:
+ // fetch G
+ if (idle)
+ addr = 0x3FFF;
+ else
+ {
+ if (bitmapMode)
+ addr = (ushort)(rc | (vc << 3) | ((pointerCB & 0x4) << 11));
+ else
+ addr = (ushort)(rc | (dataG << 3) | (pointerCB << 9));
+ }
+ if (extraColorMode)
+ addr &= 0x39FF;
+ bus = chips.pla.ReadVic(addr);
+ dataG = bus;
+ vmli++;
+ vc++;
+ break;
+ case 0x0400:
+ // fetch I
+ addr = (extraColorMode ? (ushort)0x39FF : (ushort)0x3FFF);
+ bus = chips.pla.ReadVic(addr);
+ dataG = bus;
+ dataC = 0;
+ break;
+ case 0x0500:
+ // no fetch
+ break;
+ default:
+ cycleFetchSpriteIndex = (fetch & 0x7);
+ switch (fetch & 0xF0)
+ {
+ case 0x00:
+ // fetch P
+ addr = (ushort)(0x1F8 | (pointerVM << 10) | cycleFetchSpriteIndex);
+ bus = chips.pla.ReadVic(addr);
+ sprites[cycleFetchSpriteIndex].pointer = bus;
+ break;
+ case 0x10:
+ case 0x20:
+ case 0x30:
+ // fetch S
+ addr = (ushort)(sprites[cycleFetchSpriteIndex].mc | sprites[cycleFetchSpriteIndex].pointer << 6);
+ bus = chips.pla.ReadVic(addr);
+ sprites[cycleFetchSpriteIndex].sr <<= 8;
+ sprites[cycleFetchSpriteIndex].sr |= bus;
+ break;
+ }
+ break;
+ }
+
+ // perform BA flag manipulation
+ switch (ba)
+ {
+ case 0x0000:
+ pinBA = true;
+ break;
+ case 0x1000:
+ pinBA = !badline;
+ break;
+ default:
+ cycleBAsprite0 = ba & 0x000F;
+ cycleBAsprite1 = ba & 0x00F0;
+ cycleBAsprite2 = ba & 0x0F00;
+ if ((cycleBAsprite0 < 8 && sprites[cycleBAsprite0].enable) ||
+ (cycleBAsprite1 < 8 && sprites[cycleBAsprite1].enable) ||
+ (cycleBAsprite2 < 8 && sprites[cycleBAsprite2].enable))
+ pinBA = false;
+ break;
+ }
+
+ // perform actions
+ borderCheckLEnable = false;
+ borderCheckREnable = false;
+
+ if (!columnSelect && (act & pipelineChkBrdL0) != 0)
+ borderCheckLEnable = true;
+ if (columnSelect && (act & pipelineChkBrdL1) != 0)
+ borderCheckLEnable = true;
+ if (!columnSelect && (act & pipelineChkBrdR0) != 0)
+ borderCheckREnable = true;
+ if (columnSelect && (act & pipelineChkBrdR1) != 0)
+ borderCheckREnable = true;
+ if ((act & pipelineChkSprChunch) != 0)
+ {
+ }
+ if ((act & pipelineChkSprDisp) != 0)
+ {
+ }
+ if ((act & pipelineChkSprDma) != 0)
+ {
+ }
+ if ((act & pipelineChkSprExp) != 0)
+ {
+ }
+ if ((act & pipelineUpdateMcBase) != 0)
+ {
+ }
+ if ((act & pipelineUpdateRc) != 0)
+ {
+ if (rc == 7)
+ {
+ idle = true;
+ vcbase = vc;
+ }
+ if (!idle)
+ rc++;
+ }
+ if ((act & pipelineUpdateVc) != 0)
+ {
+ vc = vcbase;
+ vmli = 0;
+ if (badline)
+ rc = 0;
+ }
+
+ cycleIndex++;
+ }
+
+ private void Render()
+ {
+ if (borderCheckLEnable)
+ {
+ }
+ if (borderCheckREnable)
+ {
+ }
+ WritePixel(0);
+ WritePixel(0);
+ WritePixel(0);
+ WritePixel(0);
+ }
+
+ // ------------------------------------
+
+ public bool AEC { get { return pinAEC; } }
+ public bool BA { get { return pinBA; } }
+ public bool IRQ { get { return pinIRQ; } }
+
+ // ------------------------------------
+
+ public int CyclesPerFrame
+ {
+ get
+ {
+ return (int)(totalCycles * totalLines);
+ }
+ }
+
+ public int CyclesPerSecond
+ {
+ get
+ {
+ return cyclesPerSec;
+ }
+ }
+
+ // ------------------------------------
+
+ public byte Peek(int addr)
+ {
+ return ReadRegister((ushort)(addr & 0x3F));
+ }
+
+ public void Poke(int addr, byte val)
+ {
+ WriteRegister((ushort)(addr & 0x3F), val);
+ }
+
+ public byte Read(ushort addr)
+ {
+ byte result;
+ addr &= 0x3F;
+
+ switch (addr)
+ {
+ case 0x1E:
+ case 0x1F:
+ // reading clears these
+ result = ReadRegister(addr);
+ WriteRegister(addr, 0);
+ break;
+ default:
+ result = ReadRegister((ushort)(addr & 0x3F));
+ break;
+ }
+ return result;
+ }
+
+ private byte ReadRegister(ushort addr)
+ {
+ byte result = 0xFF; //unused bit value
+
+ switch (addr)
+ {
+ case 0x00:
+ case 0x02:
+ case 0x04:
+ case 0x06:
+ case 0x08:
+ case 0x0A:
+ case 0x0C:
+ case 0x0E:
+ result = (byte)(sprites[addr >> 1].x & 0xFF);
+ break;
+ case 0x01:
+ case 0x03:
+ case 0x05:
+ case 0x07:
+ case 0x09:
+ case 0x0B:
+ case 0x0D:
+ case 0x0F:
+ result = (byte)(sprites[addr >> 1].y & 0xFF);
+ break;
+ case 0x10:
+ result = (byte)(
+ ((sprites[0].x >> 8) & 0x01) |
+ ((sprites[1].x >> 7) & 0x02) |
+ ((sprites[2].x >> 6) & 0x04) |
+ ((sprites[3].x >> 5) & 0x08) |
+ ((sprites[4].x >> 4) & 0x10) |
+ ((sprites[5].x >> 3) & 0x20) |
+ ((sprites[6].x >> 2) & 0x40) |
+ ((sprites[7].x >> 1) & 0x80)
+ );
+ break;
+ case 0x11:
+ result = (byte)(
+ (byte)(yScroll & 0x7) |
+ (rowSelect ? (byte)0x08 : (byte)0x00) |
+ (displayEnable ? (byte)0x10 : (byte)0x00) |
+ (bitmapMode ? (byte)0x20 : (byte)0x00) |
+ (extraColorMode ? (byte)0x40 : (byte)0x00) |
+ (byte)((rasterLine & 0x100) >> 1)
+ );
+ break;
+ case 0x12:
+ result = (byte)(rasterLine & 0xFF);
+ break;
+ case 0x13:
+ result = (byte)(lightPenX & 0xFF);
+ break;
+ case 0x14:
+ result = (byte)(lightPenY & 0xFF);
+ break;
+ case 0x15:
+ result = (byte)(
+ (sprites[0].enable ? 0x01 : 0x00) |
+ (sprites[1].enable ? 0x02 : 0x00) |
+ (sprites[2].enable ? 0x04 : 0x00) |
+ (sprites[3].enable ? 0x08 : 0x00) |
+ (sprites[4].enable ? 0x10 : 0x00) |
+ (sprites[5].enable ? 0x20 : 0x00) |
+ (sprites[6].enable ? 0x40 : 0x00) |
+ (sprites[7].enable ? 0x80 : 0x00)
+ );
+ break;
+ case 0x16:
+ result &= 0xBF;
+ result |= (byte)(
+ (byte)(xScroll & 0x7) |
+ (columnSelect ? (byte)0x08 : (byte)0x00) |
+ (multicolorMode ? (byte)0x10 : (byte)0x00)
+ );
+ break;
+ case 0x17:
+ result = (byte)(
+ (sprites[0].yExpand ? 0x01 : 0x00) |
+ (sprites[1].yExpand ? 0x02 : 0x00) |
+ (sprites[2].yExpand ? 0x04 : 0x00) |
+ (sprites[3].yExpand ? 0x08 : 0x00) |
+ (sprites[4].yExpand ? 0x10 : 0x00) |
+ (sprites[5].yExpand ? 0x20 : 0x00) |
+ (sprites[6].yExpand ? 0x40 : 0x00) |
+ (sprites[7].yExpand ? 0x80 : 0x00)
+ );
+ break;
+ case 0x18:
+ result &= 0xFE;
+ result |= (byte)(
+ ((pointerVM & 0xF) << 4) |
+ ((pointerCB & 0x7) << 1)
+ );
+ break;
+ case 0x19:
+ result &= 0x70;
+ result |= (byte)(
+ (intRaster ? 0x01 : 0x00) |
+ (intSpriteDataCollision ? 0x02 : 0x00) |
+ (intSpriteCollision ? 0x04 : 0x00) |
+ (intLightPen ? 0x08 : 0x00) |
+ (pinIRQ ? 0x00 : 0x80)
+ );
+ break;
+ case 0x1A:
+ result &= 0xF0;
+ result |= (byte)(
+ (enableIntRaster ? 0x01 : 0x00) |
+ (enableIntSpriteDataCollision ? 0x02 : 0x00) |
+ (enableIntSpriteCollision ? 0x04 : 0x00) |
+ (enableIntLightPen ? 0x08 : 0x00)
+ );
+ break;
+ case 0x1B:
+ result = (byte)(
+ (sprites[0].priority ? 0x01 : 0x00) |
+ (sprites[1].priority ? 0x02 : 0x00) |
+ (sprites[2].priority ? 0x04 : 0x00) |
+ (sprites[3].priority ? 0x08 : 0x00) |
+ (sprites[4].priority ? 0x10 : 0x00) |
+ (sprites[5].priority ? 0x20 : 0x00) |
+ (sprites[6].priority ? 0x40 : 0x00) |
+ (sprites[7].priority ? 0x80 : 0x00)
+ );
+ break;
+ case 0x1C:
+ result = (byte)(
+ (sprites[0].multicolor ? 0x01 : 0x00) |
+ (sprites[1].multicolor ? 0x02 : 0x00) |
+ (sprites[2].multicolor ? 0x04 : 0x00) |
+ (sprites[3].multicolor ? 0x08 : 0x00) |
+ (sprites[4].multicolor ? 0x10 : 0x00) |
+ (sprites[5].multicolor ? 0x20 : 0x00) |
+ (sprites[6].multicolor ? 0x40 : 0x00) |
+ (sprites[7].multicolor ? 0x80 : 0x00)
+ );
+ break;
+ case 0x1D:
+ result = (byte)(
+ (sprites[0].xExpand ? 0x01 : 0x00) |
+ (sprites[1].xExpand ? 0x02 : 0x00) |
+ (sprites[2].xExpand ? 0x04 : 0x00) |
+ (sprites[3].xExpand ? 0x08 : 0x00) |
+ (sprites[4].xExpand ? 0x10 : 0x00) |
+ (sprites[5].xExpand ? 0x20 : 0x00) |
+ (sprites[6].xExpand ? 0x40 : 0x00) |
+ (sprites[7].xExpand ? 0x80 : 0x00)
+ );
+ break;
+ case 0x1E:
+ result = (byte)(
+ (sprites[0].collideSprite ? 0x01 : 0x00) |
+ (sprites[1].collideSprite ? 0x02 : 0x00) |
+ (sprites[2].collideSprite ? 0x04 : 0x00) |
+ (sprites[3].collideSprite ? 0x08 : 0x00) |
+ (sprites[4].collideSprite ? 0x10 : 0x00) |
+ (sprites[5].collideSprite ? 0x20 : 0x00) |
+ (sprites[6].collideSprite ? 0x40 : 0x00) |
+ (sprites[7].collideSprite ? 0x80 : 0x00)
+ );
+ break;
+ case 0x1F:
+ result = (byte)(
+ (sprites[0].collideData ? 0x01 : 0x00) |
+ (sprites[1].collideData ? 0x02 : 0x00) |
+ (sprites[2].collideData ? 0x04 : 0x00) |
+ (sprites[3].collideData ? 0x08 : 0x00) |
+ (sprites[4].collideData ? 0x10 : 0x00) |
+ (sprites[5].collideData ? 0x20 : 0x00) |
+ (sprites[6].collideData ? 0x40 : 0x00) |
+ (sprites[7].collideData ? 0x80 : 0x00)
+ );
+ break;
+ case 0x20:
+ result &= 0xF0;
+ result |= (byte)(borderColor & 0x0F);
+ break;
+ case 0x21:
+ result &= 0xF0;
+ result |= (byte)(backgroundColor0 & 0x0F);
+ break;
+ case 0x22:
+ result &= 0xF0;
+ result |= (byte)(backgroundColor1 & 0x0F);
+ break;
+ case 0x23:
+ result &= 0xF0;
+ result |= (byte)(backgroundColor2 & 0x0F);
+ break;
+ case 0x24:
+ result &= 0xF0;
+ result |= (byte)(backgroundColor3 & 0x0F);
+ break;
+ case 0x25:
+ result &= 0xF0;
+ result |= (byte)(spriteMulticolor0 & 0x0F);
+ break;
+ case 0x26:
+ result &= 0xF0;
+ result |= (byte)(spriteMulticolor1 & 0x0F);
+ break;
+ case 0x27:
+ case 0x28:
+ case 0x29:
+ case 0x2A:
+ case 0x2B:
+ case 0x2C:
+ case 0x2D:
+ case 0x2E:
+ result &= 0xF0;
+ result |= (byte)(sprites[addr - 0x27].color & 0xF);
+ break;
+ default:
+ // not connected
+ break;
+ }
+
+ return result;
+ }
+
+ public void Write(ushort addr, byte val)
+ {
+ addr &= 0x3F;
+ switch (addr)
+ {
+ case 0x19:
+ // interrupts are cleared by writing a 1
+ if ((val & 0x01) != 0)
+ intRaster = false;
+ if ((val & 0x02) != 0)
+ intSpriteDataCollision = false;
+ if ((val & 0x04) != 0)
+ intSpriteCollision = false;
+ if ((val & 0x08) != 0)
+ intLightPen = false;
+ break;
+ case 0x1E:
+ case 0x1F:
+ // can't write to these
+ break;
+ case 0x2F:
+ case 0x30:
+ case 0x31:
+ case 0x32:
+ case 0x33:
+ case 0x34:
+ case 0x35:
+ case 0x36:
+ case 0x37:
+ case 0x38:
+ case 0x39:
+ case 0x3A:
+ case 0x3B:
+ case 0x3C:
+ case 0x3D:
+ case 0x3E:
+ case 0x3F:
+ // not connected
+ break;
+ default:
+ WriteRegister(addr, val);
+ break;
+ }
+ }
+
+ private void WriteRegister(ushort addr, byte val)
+ {
+ switch (addr)
+ {
+ case 0x00:
+ case 0x02:
+ case 0x04:
+ case 0x06:
+ case 0x08:
+ case 0x0A:
+ case 0x0C:
+ case 0x0E:
+ sprites[addr >> 1].x &= 0x100;
+ sprites[addr >> 1].x |= val;
+ break;
+ case 0x01:
+ case 0x03:
+ case 0x05:
+ case 0x07:
+ case 0x09:
+ case 0x0B:
+ case 0x0D:
+ case 0x0F:
+ sprites[addr >> 1].y = val;
+ break;
+ case 0x10:
+ sprites[0].x = (sprites[0].x & 0xFF) | ((uint)(val & 0x01) << 8);
+ sprites[1].x = (sprites[1].x & 0xFF) | ((uint)(val & 0x02) << 7);
+ sprites[2].x = (sprites[2].x & 0xFF) | ((uint)(val & 0x04) << 6);
+ sprites[3].x = (sprites[3].x & 0xFF) | ((uint)(val & 0x08) << 5);
+ sprites[4].x = (sprites[4].x & 0xFF) | ((uint)(val & 0x10) << 4);
+ sprites[5].x = (sprites[5].x & 0xFF) | ((uint)(val & 0x20) << 3);
+ sprites[6].x = (sprites[6].x & 0xFF) | ((uint)(val & 0x40) << 2);
+ sprites[7].x = (sprites[7].x & 0xFF) | ((uint)(val & 0x80) << 1);
+ break;
+ case 0x11:
+ yScroll = (val & (uint)0x07);
+ rowSelect = ((val & 0x08) != 0);
+ displayEnable = ((val & 0x10) != 0);
+ bitmapMode = ((val & 0x20) != 0);
+ extraColorMode = ((val & 0x40) != 0);
+ rasterInterruptLine &= 0xFF;
+ rasterInterruptLine |= (uint)(val & 0x80) << 1;
+ break;
+ case 0x12:
+ rasterInterruptLine &= 0x100;
+ rasterInterruptLine |= val;
+ break;
+ case 0x13:
+ lightPenX = val;
+ break;
+ case 0x14:
+ lightPenY = val;
+ break;
+ case 0x15:
+ sprites[0].enable = ((val & 0x01) != 0);
+ sprites[1].enable = ((val & 0x02) != 0);
+ sprites[2].enable = ((val & 0x04) != 0);
+ sprites[3].enable = ((val & 0x08) != 0);
+ sprites[4].enable = ((val & 0x10) != 0);
+ sprites[5].enable = ((val & 0x20) != 0);
+ sprites[6].enable = ((val & 0x40) != 0);
+ sprites[7].enable = ((val & 0x80) != 0);
+ break;
+ case 0x16:
+ xScroll = (val & (uint)0x07);
+ columnSelect = ((val & 0x08) != 0);
+ multicolorMode = ((val & 0x10) != 0);
+ break;
+ case 0x17:
+ sprites[0].yExpand = ((val & 0x01) != 0);
+ sprites[1].yExpand = ((val & 0x02) != 0);
+ sprites[2].yExpand = ((val & 0x04) != 0);
+ sprites[3].yExpand = ((val & 0x08) != 0);
+ sprites[4].yExpand = ((val & 0x10) != 0);
+ sprites[5].yExpand = ((val & 0x20) != 0);
+ sprites[6].yExpand = ((val & 0x40) != 0);
+ sprites[7].yExpand = ((val & 0x80) != 0);
+ break;
+ case 0x18:
+ pointerVM = (uint)((val >> 4) & 0xF);
+ pointerCB = (uint)((val >> 1) & 0x7);
+ break;
+ case 0x19:
+ intRaster = ((val & 0x01) != 0);
+ intSpriteDataCollision = ((val & 0x02) != 0);
+ intSpriteCollision = ((val & 0x04) != 0);
+ intLightPen = ((val & 0x08) != 0);
+ break;
+ case 0x1A:
+ enableIntRaster = ((val & 0x01) != 0);
+ enableIntSpriteDataCollision = ((val & 0x02) != 0);
+ enableIntSpriteCollision = ((val & 0x04) != 0);
+ enableIntLightPen = ((val & 0x08) != 0);
+ break;
+ case 0x1B:
+ sprites[0].priority = ((val & 0x01) != 0);
+ sprites[1].priority = ((val & 0x02) != 0);
+ sprites[2].priority = ((val & 0x04) != 0);
+ sprites[3].priority = ((val & 0x08) != 0);
+ sprites[4].priority = ((val & 0x10) != 0);
+ sprites[5].priority = ((val & 0x20) != 0);
+ sprites[6].priority = ((val & 0x40) != 0);
+ sprites[7].priority = ((val & 0x80) != 0);
+ break;
+ case 0x1C:
+ sprites[0].multicolor = ((val & 0x01) != 0);
+ sprites[1].multicolor = ((val & 0x02) != 0);
+ sprites[2].multicolor = ((val & 0x04) != 0);
+ sprites[3].multicolor = ((val & 0x08) != 0);
+ sprites[4].multicolor = ((val & 0x10) != 0);
+ sprites[5].multicolor = ((val & 0x20) != 0);
+ sprites[6].multicolor = ((val & 0x40) != 0);
+ sprites[7].multicolor = ((val & 0x80) != 0);
+ break;
+ case 0x1D:
+ sprites[0].xExpand = ((val & 0x01) != 0);
+ sprites[1].xExpand = ((val & 0x02) != 0);
+ sprites[2].xExpand = ((val & 0x04) != 0);
+ sprites[3].xExpand = ((val & 0x08) != 0);
+ sprites[4].xExpand = ((val & 0x10) != 0);
+ sprites[5].xExpand = ((val & 0x20) != 0);
+ sprites[6].xExpand = ((val & 0x40) != 0);
+ sprites[7].xExpand = ((val & 0x80) != 0);
+ break;
+ case 0x1E:
+ sprites[0].collideSprite = ((val & 0x01) != 0);
+ sprites[1].collideSprite = ((val & 0x02) != 0);
+ sprites[2].collideSprite = ((val & 0x04) != 0);
+ sprites[3].collideSprite = ((val & 0x08) != 0);
+ sprites[4].collideSprite = ((val & 0x10) != 0);
+ sprites[5].collideSprite = ((val & 0x20) != 0);
+ sprites[6].collideSprite = ((val & 0x40) != 0);
+ sprites[7].collideSprite = ((val & 0x80) != 0);
+ break;
+ case 0x1F:
+ sprites[0].collideData = ((val & 0x01) != 0);
+ sprites[1].collideData = ((val & 0x02) != 0);
+ sprites[2].collideData = ((val & 0x04) != 0);
+ sprites[3].collideData = ((val & 0x08) != 0);
+ sprites[4].collideData = ((val & 0x10) != 0);
+ sprites[5].collideData = ((val & 0x20) != 0);
+ sprites[6].collideData = ((val & 0x40) != 0);
+ sprites[7].collideData = ((val & 0x80) != 0);
+ break;
+ case 0x20:
+ borderColor = (uint)(val & 0xF);
+ break;
+ case 0x21:
+ backgroundColor0 = (uint)(val & 0xF);
+ break;
+ case 0x22:
+ backgroundColor1 = (uint)(val & 0xF);
+ break;
+ case 0x23:
+ backgroundColor2 = (uint)(val & 0xF);
+ break;
+ case 0x24:
+ backgroundColor3 = (uint)(val & 0xF);
+ break;
+ case 0x25:
+ spriteMulticolor0 = (uint)(val & 0xF);
+ break;
+ case 0x26:
+ spriteMulticolor1 = (uint)(val & 0xF);
+ break;
+ case 0x27:
+ case 0x28:
+ case 0x29:
+ case 0x2A:
+ case 0x2B:
+ case 0x2C:
+ case 0x2D:
+ case 0x2E:
+ sprites[addr - 0x27].color = (uint)(val & 0xF);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+}
diff --git a/BizHawk.Emulation/Computers/Commodore64/D64.cs b/BizHawk.Emulation/Computers/Commodore64/Media/D64.cs
similarity index 100%
rename from BizHawk.Emulation/Computers/Commodore64/D64.cs
rename to BizHawk.Emulation/Computers/Commodore64/Media/D64.cs
diff --git a/BizHawk.Emulation/Computers/Commodore64/Disk.cs b/BizHawk.Emulation/Computers/Commodore64/Media/Disk.cs
similarity index 100%
rename from BizHawk.Emulation/Computers/Commodore64/Disk.cs
rename to BizHawk.Emulation/Computers/Commodore64/Media/Disk.cs
diff --git a/BizHawk.Emulation/Computers/Commodore64/G64.cs b/BizHawk.Emulation/Computers/Commodore64/Media/G64.cs
similarity index 100%
rename from BizHawk.Emulation/Computers/Commodore64/G64.cs
rename to BizHawk.Emulation/Computers/Commodore64/Media/G64.cs
diff --git a/BizHawk.Emulation/Computers/Commodore64/MemBus.cs b/BizHawk.Emulation/Computers/Commodore64/MemBus.cs
deleted file mode 100644
index 1a8284992d..0000000000
--- a/BizHawk.Emulation/Computers/Commodore64/MemBus.cs
+++ /dev/null
@@ -1,635 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
-
-namespace BizHawk.Emulation.Computers.Commodore64
-{
- public enum MemoryDesignation
- {
- Disabled,
- RAM,
- Basic,
- Kernal,
- IO,
- Character,
- ROMLo,
- ROMHi,
- Vic,
- Sid,
- ColorRam,
- Cia0,
- Cia1,
- Expansion0,
- Expansion1
- }
-
- public class MemoryLayout
- {
- public MemoryDesignation Mem1000 = MemoryDesignation.RAM;
- public MemoryDesignation Mem8000 = MemoryDesignation.RAM;
- public MemoryDesignation MemA000 = MemoryDesignation.RAM;
- public MemoryDesignation MemC000 = MemoryDesignation.RAM;
- public MemoryDesignation MemD000 = MemoryDesignation.RAM;
- public MemoryDesignation MemE000 = MemoryDesignation.RAM;
- }
-
- public class Memory
- {
- // chips
- public Cia cia0;
- public Cia cia1;
- public VicII vic;
- public Sid sid;
-
- // storage
- public Cartridge cart;
-
- // roms
- public byte[] basicRom;
- public byte[] charRom;
- public bool exRomPin = true;
- public bool gamePin = true;
- public byte[] kernalRom;
- public MemoryLayout layout;
-
- // ram
- public byte[] colorRam;
- public byte[] ram;
- public bool vicCharEnabled;
- public ushort vicOffset;
-
- // registers
- public byte busData;
- public bool inputWasRead;
- public bool readTrigger = true;
- public bool writeTrigger = true;
-
- // ports
- public DataPortConnector cpuIO;
- public DataPortConnector cpuPort;
- public DataPortBus cpuPortBus = new DataPortBus();
-
- void HandleFirmwareError(string file)
- {
- System.Windows.Forms.MessageBox.Show("the C64 core is referencing a firmware file which could not be found. Please make sure it's in your configured C64 firmwares folder. The referenced filename is: " + file);
- throw new FileNotFoundException();
- }
-
- public Memory(string sourceFolder, VicII newVic, Sid newSid, Cia newCia0, Cia newCia1)
- {
- string basicFile = "basic";
- string charFile = "chargen";
- string kernalFile = "kernal";
-
- string basicPath = Path.Combine(sourceFolder, basicFile);
- string charPath = Path.Combine(sourceFolder, charFile);
- string kernalPath = Path.Combine(sourceFolder, kernalFile);
-
- if (!File.Exists(basicPath)) HandleFirmwareError(basicFile);
- if (!File.Exists(charPath)) HandleFirmwareError(charFile);
- if (!File.Exists(kernalPath)) HandleFirmwareError(kernalFile);
-
- basicRom = File.ReadAllBytes(basicPath);
- charRom = File.ReadAllBytes(charPath);
- kernalRom = File.ReadAllBytes(kernalPath);
-
- vic = newVic;
- sid = newSid;
- cia0 = newCia0;
- cia1 = newCia1;
-
- cpuPort = cpuPortBus.Connect();
- cpuPort.Latch = 0x00;
- cpuPort.Direction = 0x1F;
- cpuPortBus.AttachWriteHook(UpdateLayout);
-
- cpuIO = cpuPortBus.Connect();
- cpuIO.Latch = 0x17;
-
- cia1.AttachWriteHook(0, UpdateVicOffset);
- HardReset();
- }
-
- public byte this[ushort index]
- {
- get
- {
- return ram[index];
- }
- set
- {
- ram[index] = value;
- }
- }
-
- public MemoryDesignation GetDesignation(ushort addr)
- {
- MemoryDesignation result;
-
- if (addr < 0x1000)
- {
- result = MemoryDesignation.RAM;
- }
- else if (addr < 0x8000)
- {
- result = layout.Mem1000;
- }
- else if (addr < 0xA000)
- {
- result = layout.Mem8000;
- }
- else if (addr < 0xC000)
- {
- result = layout.MemA000;
- }
- else if (addr < 0xD000)
- {
- result = layout.MemC000;
- }
- else if (addr < 0xE000)
- {
- result = layout.MemD000;
- }
- else
- {
- result = layout.MemE000;
- }
-
- if (result == MemoryDesignation.IO)
- {
- addr &= 0x0FFF;
- if (addr < 0x0400)
- {
- result = MemoryDesignation.Vic;
- }
- else if (addr < 0x0800)
- {
- result = MemoryDesignation.Sid;
- }
- else if (addr < 0x0C00)
- {
- result = MemoryDesignation.ColorRam;
- }
- else if (addr < 0x0D00)
- {
- result = MemoryDesignation.Cia0;
- }
- else if (addr < 0x0E00)
- {
- result = MemoryDesignation.Cia1;
- }
- else if (addr < 0x0F00)
- {
- result = MemoryDesignation.Expansion0;
- }
- else
- {
- result = MemoryDesignation.Expansion1;
- }
- }
-
- return result;
- }
-
- public void HardReset()
- {
- layout = new MemoryLayout();
-
- ram = new byte[0x10000];
- colorRam = new byte[0x1000];
- WipeMemory();
-
- cpuPort.Direction = 0x2F;
- cpuPort.Data = 0x37;
-
- UpdateVicOffset();
- }
-
- public byte Peek(ushort addr)
- {
- byte result;
-
- if (addr == 0x0000)
- {
- result = cpuPort.Direction;
- }
- else if (addr == 0x0001)
- {
- result = cpuPort.Data;
- }
- else
- {
- MemoryDesignation des = GetDesignation(addr);
-
- switch (des)
- {
- case MemoryDesignation.Basic:
- result = basicRom[addr & 0x1FFF];
- break;
- case MemoryDesignation.Character:
- result = charRom[addr & 0x0FFF];
- break;
- case MemoryDesignation.Vic:
- result = vic.Peek(addr & 0x3F);
- break;
- case MemoryDesignation.Sid:
- result = sid.Peek(addr & 0x1F);
- break;
- case MemoryDesignation.ColorRam:
- result = (byte)(colorRam[addr & 0x03FF] | (busData & 0xF0));
- break;
- case MemoryDesignation.Cia0:
- result = cia0.Peek(addr & 0x0F);
- break;
- case MemoryDesignation.Cia1:
- result = cia1.Peek(addr & 0x0F);
- break;
- case MemoryDesignation.Expansion0:
- result = 0;
- break;
- case MemoryDesignation.Expansion1:
- result = 0;
- break;
- case MemoryDesignation.Kernal:
- result = kernalRom[addr & 0x1FFF];
- break;
- case MemoryDesignation.RAM:
- result = ram[addr];
- break;
- case MemoryDesignation.ROMHi:
- result = cart.chips[cart.bank].data[addr & cart.chips[cart.bank].romMask];
- break;
- case MemoryDesignation.ROMLo:
- result = cart.chips[cart.bank].data[addr & cart.chips[cart.bank].romMask];
- break;
- default:
- return 0;
- }
- }
-
- busData = result;
- return result;
- }
-
- public byte PeekRam(int addr)
- {
- return ram[addr & 0xFFFF];
- }
-
- public void Poke(ushort addr, byte val)
- {
- return;
- /*
- if (addr == 0x0000)
- {
- cpuPort.Direction = val;
- }
- else if (addr == 0x0001)
- {
- cpuPort.Data = val;
- UpdateLayout();
- }
- else
- {
- MemoryDesignation des = GetDesignation(addr);
-
- switch (des)
- {
- case MemoryDesignation.Vic:
- vic.Poke(addr, val);
- break;
- case MemoryDesignation.Sid:
- sid.Poke(addr, val);
- break;
- case MemoryDesignation.ColorRam:
- colorRam[addr & 0x03FF] = (byte)(val & 0x0F);
- break;
- case MemoryDesignation.Cia0:
- cia0.Poke(addr, val);
- break;
- case MemoryDesignation.Cia1:
- cia1.Poke(addr, val);
- break;
- case MemoryDesignation.Expansion0:
- if (cart != null)
- cart.WritePort(addr, val);
- break;
- case MemoryDesignation.Expansion1:
- break;
- case MemoryDesignation.RAM:
- break;
- default:
- break;
- }
-
- // write through to ram
- if (des != MemoryDesignation.Disabled)
- {
- ram[addr] = val;
- }
- }
- */
- }
-
- public void PokeRam(int addr, byte val)
- {
- ram[addr & 0xFFFF] = val;
- }
-
- public byte Read(ushort addr)
- {
- byte result;
-
- if (addr == 0x0000)
- {
- result = cpuPort.Direction;
- }
- else if (addr == 0x0001)
- {
- result = cpuPort.Data;
- }
- else
- {
- MemoryDesignation des = GetDesignation(addr);
-
- switch (des)
- {
- case MemoryDesignation.Basic:
- result = basicRom[addr & 0x1FFF];
- break;
- case MemoryDesignation.Character:
- result = charRom[addr & 0x0FFF];
- break;
- case MemoryDesignation.Vic:
- result = vic.Read(addr);
- break;
- case MemoryDesignation.Sid:
- result = sid.Read(addr);
- break;
- case MemoryDesignation.ColorRam:
- result = ReadColorRam(addr);
- break;
- case MemoryDesignation.Cia0:
- if ((addr & 0xF) < 0x02)
- inputWasRead = true;
- result = cia0.Read(addr);
- break;
- case MemoryDesignation.Cia1:
- result = cia1.Read(addr);
- break;
- case MemoryDesignation.Expansion0:
- if (cart != null)
- result = cart.ReadPort(addr);
- else
- result = 0;
- break;
- case MemoryDesignation.Expansion1:
- result = 0;
- break;
- case MemoryDesignation.Kernal:
- result = kernalRom[addr & 0x1FFF];
- break;
- case MemoryDesignation.RAM:
- result = ram[addr];
- break;
- case MemoryDesignation.ROMHi:
- result = cart.Read(addr);
- break;
- case MemoryDesignation.ROMLo:
- result = cart.Read(addr);
- break;
- default:
- return 0;
- }
- }
-
- busData = result;
- return result;
- }
-
- public byte ReadColorRam(ushort addr)
- {
- return (byte)((busData & 0xF0) | (colorRam[addr & 0x03FF]));
- }
-
- public void SyncState(Serializer ser)
- {
- ser.Sync("BUSDATA", ref busData);
- ser.Sync("EXROMPIN", ref exRomPin);
- ser.Sync("GAMEPIN", ref gamePin);
- ser.Sync("INPUTWASREAD", ref inputWasRead);
-
- ser.Sync("COLORRAM", ref colorRam, false);
- ser.Sync("RAM", ref ram, false);
-
- byte cpuData = cpuPort.Latch;
- byte cpuDir = cpuPort.Direction;
- ser.Sync("CPUPORT", ref cpuData);
- ser.Sync("CPUDIR", ref cpuDir);
-
- if (ser.IsReader)
- {
- cpuPort.Latch = cpuData;
- cpuPort.Direction = cpuDir;
- UpdateLayout();
- UpdateVicOffset();
- }
- }
-
- public void UpdateLayout()
- {
- byte cpuData = cpuPort.Data;
- bool loRom = ((cpuData & 0x01) != 0);
- bool hiRom = ((cpuData & 0x02) != 0);
- bool ioEnable = ((cpuData & 0x04) != 0);
-
- if (loRom && hiRom && gamePin && exRomPin)
- {
- layout.Mem1000 = MemoryDesignation.RAM;
- layout.Mem8000 = MemoryDesignation.RAM;
- layout.MemA000 = MemoryDesignation.Basic;
- layout.MemC000 = MemoryDesignation.RAM;
- layout.MemD000 = ioEnable ? MemoryDesignation.IO : MemoryDesignation.Character;
- layout.MemE000 = MemoryDesignation.Kernal;
- }
- else if (loRom && !hiRom && gamePin)
- {
- layout.Mem1000 = MemoryDesignation.RAM;
- layout.Mem8000 = MemoryDesignation.RAM;
- layout.MemA000 = MemoryDesignation.RAM;
- layout.MemC000 = MemoryDesignation.RAM;
- layout.MemD000 = ioEnable ? MemoryDesignation.IO : MemoryDesignation.Character;
- layout.MemE000 = MemoryDesignation.RAM;
- }
- else if (loRom && !hiRom && !exRomPin && !gamePin)
- {
- layout.Mem1000 = MemoryDesignation.RAM;
- layout.Mem8000 = MemoryDesignation.RAM;
- layout.MemA000 = MemoryDesignation.RAM;
- layout.MemC000 = MemoryDesignation.RAM;
- layout.MemD000 = ioEnable ? MemoryDesignation.IO : MemoryDesignation.RAM;
- layout.MemE000 = MemoryDesignation.RAM;
- }
- else if ((!loRom && hiRom && gamePin) || (!loRom && !hiRom && !exRomPin))
- {
- layout.Mem1000 = MemoryDesignation.RAM;
- layout.Mem8000 = MemoryDesignation.RAM;
- layout.MemA000 = MemoryDesignation.RAM;
- layout.MemC000 = MemoryDesignation.RAM;
- layout.MemD000 = ioEnable ? MemoryDesignation.IO : MemoryDesignation.Character;
- layout.MemE000 = MemoryDesignation.Kernal;
- }
- else if (!loRom && !hiRom && gamePin)
- {
- layout.Mem1000 = MemoryDesignation.RAM;
- layout.Mem8000 = MemoryDesignation.RAM;
- layout.MemA000 = MemoryDesignation.RAM;
- layout.MemC000 = MemoryDesignation.RAM;
- layout.MemD000 = MemoryDesignation.RAM;
- layout.MemE000 = MemoryDesignation.RAM;
- }
- else if (loRom && hiRom && gamePin && !exRomPin)
- {
- layout.Mem1000 = MemoryDesignation.RAM;
- layout.Mem8000 = MemoryDesignation.ROMLo;
- layout.MemA000 = MemoryDesignation.Basic;
- layout.MemC000 = MemoryDesignation.RAM;
- layout.MemD000 = ioEnable ? MemoryDesignation.IO : MemoryDesignation.Character;
- layout.MemE000 = MemoryDesignation.Kernal;
- }
- else if (!loRom && hiRom && !gamePin && !exRomPin)
- {
- layout.Mem1000 = MemoryDesignation.RAM;
- layout.Mem8000 = MemoryDesignation.RAM;
- layout.MemA000 = MemoryDesignation.ROMHi;
- layout.MemC000 = MemoryDesignation.RAM;
- layout.MemD000 = ioEnable ? MemoryDesignation.IO : MemoryDesignation.Character;
- layout.MemE000 = MemoryDesignation.Kernal;
- }
- else if (loRom && hiRom && !gamePin && !exRomPin)
- {
- layout.Mem1000 = MemoryDesignation.RAM;
- layout.Mem8000 = MemoryDesignation.ROMLo;
- layout.MemA000 = MemoryDesignation.ROMHi;
- layout.MemC000 = MemoryDesignation.RAM;
- layout.MemD000 = ioEnable ? MemoryDesignation.IO : MemoryDesignation.Character;
- layout.MemE000 = MemoryDesignation.Kernal;
- }
- else if (!gamePin && exRomPin)
- {
- layout.Mem1000 = MemoryDesignation.Disabled;
- layout.Mem8000 = MemoryDesignation.ROMLo;
- layout.MemA000 = MemoryDesignation.Disabled;
- layout.MemC000 = MemoryDesignation.Disabled;
- layout.MemD000 = MemoryDesignation.IO;
- layout.MemE000 = MemoryDesignation.ROMHi;
- }
- }
-
- private void UpdateVicOffset()
- {
- switch (cia1.Peek(0x00) & 0x03)
- {
- case 0:
- vicCharEnabled = false;
- vicOffset = 0xC000;
- break;
- case 1:
- vicCharEnabled = true;
- vicOffset = 0x8000;
- break;
- case 2:
- vicCharEnabled = false;
- vicOffset = 0x4000;
- break;
- default:
- vicCharEnabled = true;
- vicOffset = 0x0000;
- break;
- }
- }
-
- public byte VicRead(ushort addr)
- {
- addr = (ushort)(addr & 0x3FFF);
- if (vicCharEnabled && (addr >= 0x1000 && addr < 0x2000))
- {
- return charRom[addr & 0x0FFF];
- }
- else
- {
- return ram[addr | vicOffset];
- }
- }
-
- public void WipeMemory()
- {
- // memory is striped in sections 00/FF
- for (int i = 0; i < 0x10000; i += 0x80)
- {
- for (int j = 0; j < 0x40; j++)
- ram[i + j] = 0x00;
- for (int j = 0x40; j < 0x80; j++)
- ram[i + j] = 0xFF;
- }
- for (int i = 0; i < 0x1000; i++)
- {
- colorRam[i] = 0x0E;
- }
- }
-
- public void Write(ushort addr, byte val)
- {
- if (addr == 0x0000)
- {
- cpuPort.Direction = val;
- }
- else if (addr == 0x0001)
- {
- cpuPort.Data = val;
- }
- else
- {
- MemoryDesignation des = GetDesignation(addr);
-
- switch (des)
- {
- case MemoryDesignation.Vic:
- vic.Write(addr, val);
- break;
- case MemoryDesignation.Sid:
- sid.Write(addr, val);
- break;
- case MemoryDesignation.ColorRam:
- colorRam[addr & 0x03FF] = (byte)(val & 0x0F);
- break;
- case MemoryDesignation.Cia0:
- cia0.Write(addr, val);
- break;
- case MemoryDesignation.Cia1:
- cia1.Write(addr, val);
- break;
- case MemoryDesignation.Expansion0:
- if (cart != null)
- cart.WritePort(addr, val);
- break;
- case MemoryDesignation.Expansion1:
- break;
- case MemoryDesignation.RAM:
- break;
- default:
- break;
- }
-
- // write through to ram
- if (des != MemoryDesignation.Disabled)
- {
- ram[addr] = val;
- }
- }
- busData = val;
- }
- }
-}
diff --git a/BizHawk.Emulation/Computers/Commodore64/IMedia.cs b/BizHawk.Emulation/Computers/Commodore64/Memory.cs
similarity index 63%
rename from BizHawk.Emulation/Computers/Commodore64/IMedia.cs
rename to BizHawk.Emulation/Computers/Commodore64/Memory.cs
index 2e1e89f70e..0120cd5eda 100644
--- a/BizHawk.Emulation/Computers/Commodore64/IMedia.cs
+++ b/BizHawk.Emulation/Computers/Commodore64/Memory.cs
@@ -5,10 +5,7 @@ using System.Text;
namespace BizHawk.Emulation.Computers.Commodore64
{
- public interface IMedia
+ class Memory
{
- void Apply();
- bool Loaded();
- bool Ready();
}
}
diff --git a/BizHawk.Emulation/Computers/Commodore64/PRGFile.cs b/BizHawk.Emulation/Computers/Commodore64/PRGFile.cs
deleted file mode 100644
index 30e9a8f4ca..0000000000
--- a/BizHawk.Emulation/Computers/Commodore64/PRGFile.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-using BizHawk.Emulation.CPUs.M6502;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace BizHawk.Emulation.Computers.Commodore64
-{
- public class PRGFile : IMedia
- {
- private MOS6502X cpu;
- private byte[] data;
- private bool loaded;
- private Memory mem;
-
- public PRGFile(byte[] file, Memory checkMem, MOS6502X targetCpu)
- {
- cpu = targetCpu;
- mem = checkMem;
- data = file;
- }
-
- public void Apply()
- {
- int address = data[1];
- address <<= 8;
- address |= data[0];
-
- int count = data.Length;
-
- for (int i = 2; i < count; i++)
- {
- mem.Write((ushort)(address & 0xFFFF), data[i]);
- address++;
- }
- loaded = true;
- }
-
- public bool Loaded()
- {
- return loaded;
- }
-
- public bool Ready()
- {
- // wait for READY. to be on display
- return (
- mem[0x04C8] == 0x12 &&
- mem[0x04C9] == 0x05 &&
- mem[0x04CA] == 0x01 &&
- mem[0x04CB] == 0x04 &&
- mem[0x04CC] == 0x19 &&
- mem[0x04CD] == 0x2E &&
- mem[0x04CE] == 0x20
- );
- }
- }
-}
diff --git a/BizHawk.Emulation/Computers/Commodore64/SerialCable.cs b/BizHawk.Emulation/Computers/Commodore64/SerialCable.cs
deleted file mode 100644
index 01488bb752..0000000000
--- a/BizHawk.Emulation/Computers/Commodore64/SerialCable.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace BizHawk.Emulation.Computers.Commodore64
-{
- public class DataPortSerialInputConverter : DataPortConverter
- {
- public override byte Convert(byte local, byte remote)
- {
- int via = (local & 0x70);
- via |= ((remote & 0x08) == 0) ? 0x80 : 0x00; //CIA ATNOUT - VIA ATNIN
- via |= ((remote & 0x10) == 0) ? 0x04 : 0x00; //CIA CLKOUT - VIA CLKIN
- via |= ((remote & 0x20) == 0) ? 0x01 : 0x00; //CIA DATOUT - VIA DATIN
- via |= ((remote & 0x40) == 0) ? 0x08 : 0x00; //CIA CLKIN - VIA CLKOUT
- via |= ((remote & 0x80) == 0) ? 0x02 : 0x00; //CIA DATIN - VIA DATOUT
- return (byte)via;
- }
- }
-
- public class DataPortSerialOutputConverter : DataPortConverter
- {
- public override byte Convert(byte local, byte remote)
- {
- int cia = (remote & 0x7);
- cia |= ((local & 0x01) == 0) ? 0x20 : 0x00; //VIA DATIN - CIA DATOUT
- cia |= ((local & 0x02) == 0) ? 0x80 : 0x00; //VIA DATOUT - CIA DATIN
- cia |= ((local & 0x04) == 0) ? 0x10 : 0x00; //VIA CLKIN - CIA CLKOUT
- cia |= ((local & 0x08) == 0) ? 0x40 : 0x00; //VIA CLKOUT - CIA CLKIN
- cia |= ((local & 0x80) == 0) ? 0x08 : 0x00; //VIA DATIN - CIA DATOUT
- return (byte)cia;
- }
- }
-}
diff --git a/BizHawk.Emulation/Computers/Commodore64/Sid.cs b/BizHawk.Emulation/Computers/Commodore64/Sid.cs
deleted file mode 100644
index 26c40366a8..0000000000
--- a/BizHawk.Emulation/Computers/Commodore64/Sid.cs
+++ /dev/null
@@ -1,305 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace BizHawk.Emulation.Computers.Commodore64
-{
- public enum SidMode
- {
- Sid6581,
- Sid8580
- }
-
- public class VoiceRegs
- {
- public EnvelopeGenerator Envelope;
- public WaveformGenerator Generator;
- public WaveformGenerator SyncSource;
-
- public int EnvelopeLatch;
- public int GeneratorLatch;
-
- public VoiceRegs()
- {
- Envelope = new EnvelopeGenerator();
- Generator = new WaveformGenerator();
- }
-
- public void Clock()
- {
- Generator.Clock();
- GeneratorLatch = Generator.Output(SyncSource);
- Envelope.Clock();
- EnvelopeLatch = Envelope.Output;
- }
-
- public short Output()
- {
- int result = (GeneratorLatch * EnvelopeLatch) >> 4;
- result -= 32768;
- if (result > 32767)
- result = 32767;
- else if (result < -32768)
- result = -32768;
- return (short)result;
- }
-
- public void Reset()
- {
- Generator.Reset();
- Envelope.Reset();
- }
- }
-
- public class SidRegs
- {
- public bool BP;
- public bool D3;
- public int FC;
- public bool[] FILT = new bool[3];
- public bool FILTEX;
- public bool HP;
- public bool LP;
- public int POTX;
- public int POTY;
- public int RES;
- public int VOL;
-
- public VoiceRegs[] Voices;
-
- public SidRegs()
- {
- Voices = new VoiceRegs[3];
- Voices[0] = new VoiceRegs();
- Voices[1] = new VoiceRegs();
- Voices[2] = new VoiceRegs();
-
- Voices[0].SyncSource = Voices[2].Generator;
- Voices[1].SyncSource = Voices[0].Generator;
- Voices[2].SyncSource = Voices[1].Generator;
- }
-
- public byte this[int addr]
- {
-
- get
- {
- int result;
-
- addr &= 0x1F;
- switch (addr)
- {
- case 0x19:
- result = POTX;
- break;
- case 0x1A:
- result = POTY;
- break;
- case 0x1B:
- result = Voices[2].GeneratorLatch >> 4;
- break;
- case 0x1C:
- result = Voices[2].EnvelopeLatch;
- break;
- default:
- result = 0;
- break;
- }
- return (byte)(result & 0xFF);
- }
- set
- {
- int val = value;
- int index;
-
- addr &= 0x1F;
- switch (addr)
- {
- case 0x00:
- case 0x07:
- case 0x0E:
- index = addr / 7;
- Voices[index].Generator.Frequency &= 0xFF00;
- Voices[index].Generator.Frequency |= value;
- break;
- case 0x01:
- case 0x08:
- case 0x0F:
- index = addr / 7;
- Voices[index].Generator.Frequency &= 0xFF;
- Voices[index].Generator.Frequency |= (int)value << 8;
- break;
- case 0x02:
- case 0x09:
- case 0x10:
- index = addr / 7;
- Voices[index].Generator.PulseWidth &= 0x0F00;
- Voices[index].Generator.PulseWidth |= value;
- break;
- case 0x03:
- case 0x0A:
- case 0x11:
- index = addr / 7;
- Voices[index].Generator.PulseWidth &= 0xFF;
- Voices[index].Generator.PulseWidth |= (int)(value & 0xF) << 8;
- break;
- case 0x04:
- case 0x0B:
- case 0x12:
- index = addr / 7;
- Voices[index].Generator.Control = value;
- Voices[index].Envelope.Gate = ((value & 0x01) != 0x00);
- break;
- case 0x05:
- case 0x0C:
- case 0x13:
- index = addr / 7;
- Voices[index].Envelope.Attack = (value >> 4);
- Voices[index].Envelope.Decay = (value & 0xF);
- break;
- case 0x06:
- case 0x0D:
- case 0x14:
- index = addr / 7;
- Voices[index].Envelope.Sustain = (value >> 4);
- Voices[index].Envelope.Release = (value & 0xF);
- break;
- case 0x15:
- FC &= 0x7F8;
- FC |= val & 0x7;
- break;
- case 0x16:
- FC &= 0x7;
- FC |= val << 3;
- break;
- case 0x17:
- FILT[0] = ((val & 0x01) != 0x00);
- FILT[1] = ((val & 0x02) != 0x00);
- FILT[2] = ((val & 0x04) != 0x00);
- FILTEX = ((val & 0x08) != 0x00);
- RES = (val >> 4);
- break;
- case 0x18:
- VOL = (val & 0xF);
- LP = ((val & 0x10) != 0x00);
- BP = ((val & 0x20) != 0x00);
- HP = ((val & 0x40) != 0x00);
- D3 = ((val & 0x80) != 0x00);
- break;
- }
- }
- }
-
- }
-
- public partial class Sid : ISoundProvider
- {
- private int[] syncIndex = { 2, 0, 1 };
-
- private VoiceRegs[] voices;
-
- public Func ReadPotX;
- public Func ReadPotY;
-
- public int clock;
- public int cyclesPerSample;
- public int output;
- public SidRegs regs;
-
- public Sid(Region newRegion, int sampleRate)
- {
- ReadPotX = DummyReadPot;
- ReadPotY = DummyReadPot;
- switch (newRegion)
- {
- case Region.NTSC:
- cyclesPerSample = 14318181 / 14 / sampleRate;
- break;
- case Region.PAL:
- cyclesPerSample = 17734472 / 18 / sampleRate;
- break;
- }
- InitSound(sampleRate);
- HardReset();
- }
-
- private int DummyReadPot()
- {
- return 0;
- }
-
- public void HardReset()
- {
- regs = new SidRegs();
- voices = regs.Voices;
- }
-
- public byte Peek(int addr)
- {
- return regs[addr & 0x1F];
- }
-
- public void PerformCycle()
- {
- // process each voice
- voices[0].Clock();
- voices[1].Clock();
- voices[2].Clock();
-
- // sync voices
- voices[0].Generator.Synchronize(voices[1].Generator, voices[2].Generator);
- voices[1].Generator.Synchronize(voices[2].Generator, voices[0].Generator);
- voices[2].Generator.Synchronize(voices[0].Generator, voices[1].Generator);
-
- // finalize sample and put into buffer
- SubmitSample();
-
- // query pots every 512 cycles
- if ((clock & 0x1FF) == 0x000)
- {
- regs.POTX = ReadPotX() & 0xFF;
- regs.POTY = ReadPotY() & 0xFF;
- }
-
- clock = (clock + 1) & 0xFFFFFF;
- }
-
- public void Poke(int addr, byte val)
- {
- regs[addr & 0x1F] = val;
- }
-
- public byte Read(ushort addr)
- {
- addr &= 0x1F;
- switch (addr)
- {
- case 0x19:
- case 0x1A:
- case 0x1B:
- case 0x1C:
- // can only read these regs
- return regs[addr];
- default:
- return 0;
- }
- }
-
- public void Write(ushort addr, byte val)
- {
- addr &= 0x1F;
- switch (addr)
- {
- case 0x19:
- case 0x1A:
- case 0x1B:
- case 0x1C:
- // can't write these regs
- break;
- default:
- regs[addr] = val;
- break;
- }
- }
- }
-}
diff --git a/BizHawk.Emulation/Computers/Commodore64/SidEnvelopeGenerator.cs b/BizHawk.Emulation/Computers/Commodore64/SidEnvelopeGenerator.cs
deleted file mode 100644
index 49c98b114e..0000000000
--- a/BizHawk.Emulation/Computers/Commodore64/SidEnvelopeGenerator.cs
+++ /dev/null
@@ -1,255 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace BizHawk.Emulation.Computers.Commodore64
-{
-
- // constants for the EnvelopeGenerator and calculation
- // methods are based from the libsidplayfp residfp library.
-
- public partial class EnvelopeGenerator
- {
- public enum EnvelopeState
- {
- Attack, Decay, Release
- }
-
- // value table for the envelope shift register
- static int[] adsrTable = new int[]
- {
- 0x7F00, 0x0006, 0x003C, 0x0330,
- 0x20C0, 0x6755, 0x3800, 0x500E,
- 0x1212, 0x0222, 0x1848, 0x59B8,
- 0x3840, 0x77E2, 0x7625, 0x0A93
- };
-
- int attack;
- int decay;
- bool gate;
- int release;
- int sustain;
-
- public byte envelopeCounter;
- public bool envelopeProcessEnabled;
- public int exponentialCounter;
- public int exponentialCounterPeriod;
- public bool freeze;
- public int lfsr;
- public int rate;
- public EnvelopeState state;
-
- public EnvelopeGenerator()
- {
- Reset();
- }
-
- public int Attack
- {
- get
- {
- return attack;
- }
- set
- {
- attack = value;
- if (state == EnvelopeState.Attack)
- rate = adsrTable[attack];
- }
- }
-
- public void Clock()
- {
- if (envelopeProcessEnabled)
- {
- envelopeProcessEnabled = false;
- envelopeCounter--;
- UpdateExponentialCounter();
- }
-
- if (lfsr != rate)
- {
- int feedback = ((lfsr >> 14) ^ (lfsr >> 13)) & 0x01;
- lfsr = ((lfsr << 1) & 0x7FFF) | feedback;
- return;
- }
-
- lfsr = 0x7FFF;
-
- if ((state == EnvelopeState.Attack) || (++exponentialCounter == exponentialCounterPeriod))
- {
- exponentialCounter = 0;
- if (!freeze)
- {
- switch (state)
- {
- case EnvelopeState.Attack:
- ++envelopeCounter;
- if (envelopeCounter == 0xFF)
- {
- state = EnvelopeState.Decay;
- rate = adsrTable[decay];
- }
- break;
- case EnvelopeState.Decay:
- if (envelopeCounter == ((sustain << 4) | sustain))
- {
- return;
- }
- if (exponentialCounterPeriod != 1)
- {
- envelopeProcessEnabled = true;
- return;
- }
- envelopeCounter--;
- break;
- case EnvelopeState.Release:
- if (exponentialCounterPeriod != 1)
- {
- envelopeProcessEnabled = true;
- return;
- }
- envelopeCounter--;
- break;
- }
-
- UpdateExponentialCounter();
- }
- }
- }
-
- public int Decay
- {
- get
- {
- return decay;
- }
- set
- {
- decay = value;
- if (state == EnvelopeState.Decay)
- rate = adsrTable[decay];
- }
- }
-
- public bool Gate
- {
- get
- {
- return gate;
- }
- set
- {
- bool gateThis = value;
-
- if (!gate && gateThis)
- {
- state = EnvelopeState.Attack;
- rate = adsrTable[attack];
- freeze = false;
- envelopeProcessEnabled = false;
- }
- else if (gate && !gateThis)
- {
- state = EnvelopeState.Release;
- rate = adsrTable[release];
- }
-
- gate = gateThis;
- }
- }
-
- public short Output
- {
- get
- {
- return envelopeCounter;
- }
- }
-
- public int Release
- {
- get
- {
- return release;
- }
- set
- {
- release = value;
- if (state == EnvelopeState.Release)
- rate = adsrTable[release];
- }
- }
-
- public void Reset()
- {
- attack = 0;
- decay = 0;
- sustain = 0;
- release = 0;
- gate = false;
-
- envelopeCounter = 0;
- envelopeProcessEnabled = false;
- exponentialCounter = 0;
- exponentialCounterPeriod = 1;
-
- lfsr = 0x7FFF;
- state = EnvelopeState.Release;
- rate = adsrTable[release];
- freeze = true;
- }
-
- public void SetState(int stateAtk, int stateDcy, int stateSus, int stateRls, bool stateGate, EnvelopeState stateState)
- {
- attack = stateAtk;
- decay = stateDcy;
- sustain = stateSus;
- release = stateRls;
- gate = stateGate;
- state = stateState;
- }
-
- public int Sustain
- {
- get
- {
- return sustain;
- }
- set
- {
- sustain = value;
- }
- }
-
- private void UpdateExponentialCounter()
- {
- switch (envelopeCounter)
- {
- case 0x00:
- exponentialCounterPeriod = 1;
- freeze = true;
- break;
- case 0x06:
- exponentialCounterPeriod = 30;
- break;
- case 0x0E:
- exponentialCounterPeriod = 16;
- break;
- case 0x1A:
- exponentialCounterPeriod = 8;
- break;
- case 0x36:
- exponentialCounterPeriod = 4;
- break;
- case 0x5D:
- exponentialCounterPeriod = 2;
- break;
- case 0xFF:
- exponentialCounterPeriod = 1;
- break;
- }
- }
- }
-}
diff --git a/BizHawk.Emulation/Computers/Commodore64/SidSoundProvider.cs b/BizHawk.Emulation/Computers/Commodore64/SidSoundProvider.cs
deleted file mode 100644
index 8def5b465f..0000000000
--- a/BizHawk.Emulation/Computers/Commodore64/SidSoundProvider.cs
+++ /dev/null
@@ -1,143 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace BizHawk.Emulation.Computers.Commodore64
-{
- public partial class Sid : ISoundProvider
- {
- private short[] sampleBuffer;
- private int sampleBufferCapacity;
- private int sampleBufferCount;
- private int sampleBufferIndex;
- private int sampleBufferReadIndex;
- private int sampleCounter;
-
- public void DiscardSamples()
- {
- sampleBuffer = new short[sampleBufferCapacity];
- ResetBuffer();
- }
-
- public short[] GetAllSamples()
- {
- if (sampleBufferCount > 0)
- {
- short[] samples = new short[sampleBufferCount];
- GetSamples(samples);
- return samples;
- }
- else
- {
- return new short[] { };
- }
- }
-
- public void GetSamples(short[] samples)
- {
- int count = samples.Length;
- int copied = 0;
-
- while (copied < count)
- {
- samples[copied] = sampleBuffer[sampleBufferReadIndex];
- if (sampleBufferIndex != sampleBufferReadIndex)
- sampleBufferReadIndex++;
- copied++;
- if (sampleBufferReadIndex == sampleBufferCapacity)
- sampleBufferReadIndex = 0;
- }
-
- // catch buffer up
- sampleBufferReadIndex = sampleBufferIndex;
- sampleBufferCount = 0;
- }
-
- private void InitSound(int initSampleRate)
- {
- sampleBufferCapacity = initSampleRate;
- DiscardSamples();
- }
-
- public int MaxVolume
- {
- get
- {
- return 0;
- }
- set
- {
- }
- }
-
- private void ResetBuffer()
- {
- sampleBufferReadIndex = 0;
- sampleBufferIndex = 0;
- }
-
- private void SubmitSample()
- {
- if (sampleCounter == 0)
- {
- int mixer;
-
- mixer = voices[0].Output();
- mixer += voices[1].Output();
- if (!regs.D3 || !regs.FILT[2])
- mixer += voices[2].Output();
-
- // apply volume
- mixer *= regs.VOL;
- mixer >>= 4;
-
- // apply filter
- // (todo)
-
- // the mixer is very loud at this point, let's make it quieter
- mixer /= 4;
-
- if (mixer > 32767)
- mixer = 326767;
- else if (mixer < -32768)
- mixer = -32768;
-
- short output = (short)mixer;
-
- // run twice since the buffer expects stereo sound (I THINK)
- for (int i = 0; i < 2; i++)
- {
- sampleBufferIndex++;
- sampleBufferCount++;
- if (sampleBufferIndex == sampleBufferCapacity)
- sampleBufferIndex = 0;
- sampleBuffer[sampleBufferIndex] = output;
- }
- sampleCounter = cyclesPerSample;
- }
- sampleCounter--;
- }
- }
-
- public class SidSyncSoundProvider : ISyncSoundProvider
- {
- private Sid sid;
-
- public SidSyncSoundProvider(Sid source)
- {
- sid = source;
- }
-
- public void DiscardSamples()
- {
- sid.DiscardSamples();
- }
-
- public void GetSamples(out short[] samples, out int nsamp)
- {
- samples = sid.GetAllSamples();
- nsamp = samples.Length / 2;
- }
- }
-}
diff --git a/BizHawk.Emulation/Computers/Commodore64/SidState.cs b/BizHawk.Emulation/Computers/Commodore64/SidState.cs
deleted file mode 100644
index 40a2e5baf0..0000000000
--- a/BizHawk.Emulation/Computers/Commodore64/SidState.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace BizHawk.Emulation.Computers.Commodore64
-{
- public partial class Sid : ISoundProvider
- {
- public void SyncState(Serializer ser)
- {
- // voices
- for (int i = 0; i < 3; i++)
- {
- string iTag = i.ToString();
- ser.Sync("GENACCUM" + iTag, ref regs.Voices[i].Generator.accumulator);
- ser.Sync("GENFOTTL" + iTag, ref regs.Voices[i].Generator.floatingOutputTtl);
- ser.Sync("GENMSBRISING" + iTag, ref regs.Voices[i].Generator.msbRising);
- ser.Sync("GENNOISEOUT" + iTag, ref regs.Voices[i].Generator.noiseOutput);
- ser.Sync("GENPULSEOUT" + iTag, ref regs.Voices[i].Generator.pulseOutput);
- ser.Sync("GENSR" + iTag, ref regs.Voices[i].Generator.shiftRegister);
- ser.Sync("GENSRDELAY" + iTag, ref regs.Voices[i].Generator.shiftRegisterDelay);
- ser.Sync("GENSRRESETDELAY" + iTag, ref regs.Voices[i].Generator.shiftRegisterResetDelay);
- ser.Sync("GENWAVEFORMOUT" + iTag, ref regs.Voices[i].Generator.waveformOutput);
-
- ser.Sync("ENVCOUNTER" + iTag, ref regs.Voices[i].Envelope.envelopeCounter);
- ser.Sync("ENVENABLE" + iTag, ref regs.Voices[i].Envelope.envelopeProcessEnabled);
- ser.Sync("ENVEXPCOUNTER" + iTag, ref regs.Voices[i].Envelope.exponentialCounter);
- ser.Sync("ENVEXPCOUNTERPERIOD" + iTag, ref regs.Voices[i].Envelope.exponentialCounterPeriod);
- ser.Sync("ENVFREEZE" + iTag, ref regs.Voices[i].Envelope.freeze);
- ser.Sync("ENVLFSR" + iTag, ref regs.Voices[i].Envelope.lfsr);
- ser.Sync("ENVRATE" + iTag, ref regs.Voices[i].Envelope.rate);
-
- byte control = regs.Voices[i].Generator.Control;
- int freq = regs.Voices[i].Generator.Frequency;
- int pw = regs.Voices[i].Generator.PulseWidth;
- int attack = regs.Voices[i].Envelope.Attack;
- int decay = regs.Voices[i].Envelope.Decay;
- int sustain = regs.Voices[i].Envelope.Sustain;
- int release = regs.Voices[i].Envelope.Release;
- bool gate = regs.Voices[i].Envelope.Gate;
- int state = (int)regs.Voices[i].Envelope.state;
-
- ser.Sync("GENCONTROL" + iTag, ref control);
- ser.Sync("GENFREQ" + iTag, ref freq);
- ser.Sync("GENPW" + iTag, ref pw);
- ser.Sync("ENVATTACK" + iTag, ref attack);
- ser.Sync("ENVDECAY" + iTag, ref decay);
- ser.Sync("ENVSUSTAIN" + iTag, ref sustain);
- ser.Sync("ENVRELEASE" + iTag, ref release);
- ser.Sync("ENVGATE" + iTag, ref gate);
- ser.Sync("ENVSTATE" + iTag, ref state);
-
- if (ser.IsReader)
- {
- regs.Voices[i].Generator.SetState(control, freq, pw);
- regs.Voices[i].Envelope.SetState(attack, decay, sustain, release, gate, (EnvelopeGenerator.EnvelopeState)state);
- }
- }
-
- // regs
- ser.Sync("BP", ref regs.BP);
- ser.Sync("D3", ref regs.D3);
- ser.Sync("FC", ref regs.FC);
- ser.Sync("FILT0", ref regs.FILT[0]);
- ser.Sync("FILT1", ref regs.FILT[1]);
- ser.Sync("FILT2", ref regs.FILT[2]);
- ser.Sync("FILTEX", ref regs.FILTEX);
- ser.Sync("HP", ref regs.HP);
- ser.Sync("LP", ref regs.LP);
- ser.Sync("POTX", ref regs.POTX);
- ser.Sync("POTY", ref regs.POTY);
- ser.Sync("RES", ref regs.RES);
- ser.Sync("VOL", ref regs.VOL);
-
- // vars
- ser.Sync("CLOCK", ref clock);
- ser.Sync("CYCLESPERSAMPLE", ref cyclesPerSample);
- ser.Sync("OUTPUT", ref output);
- }
- }
-}
diff --git a/BizHawk.Emulation/Computers/Commodore64/SidWaveformCalculator.cs b/BizHawk.Emulation/Computers/Commodore64/SidWaveformCalculator.cs
deleted file mode 100644
index 9f2ff6f182..0000000000
--- a/BizHawk.Emulation/Computers/Commodore64/SidWaveformCalculator.cs
+++ /dev/null
@@ -1,4125 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace BizHawk.Emulation.Computers.Commodore64
-{
- public partial class WaveformGenerator
- {
- private static short[][] WaveformSamples = new short[][] {
- new short[] {
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF
- },
- new short[] {
- 0x000, 0x002, 0x004, 0x006, 0x008, 0x00A, 0x00C, 0x00E,
- 0x010, 0x012, 0x014, 0x016, 0x018, 0x01A, 0x01C, 0x01E,
- 0x020, 0x022, 0x024, 0x026, 0x028, 0x02A, 0x02C, 0x02E,
- 0x030, 0x032, 0x034, 0x036, 0x038, 0x03A, 0x03C, 0x03E,
- 0x040, 0x042, 0x044, 0x046, 0x048, 0x04A, 0x04C, 0x04E,
- 0x050, 0x052, 0x054, 0x056, 0x058, 0x05A, 0x05C, 0x05E,
- 0x060, 0x062, 0x064, 0x066, 0x068, 0x06A, 0x06C, 0x06E,
- 0x070, 0x072, 0x074, 0x076, 0x078, 0x07A, 0x07C, 0x07E,
- 0x080, 0x082, 0x084, 0x086, 0x088, 0x08A, 0x08C, 0x08E,
- 0x090, 0x092, 0x094, 0x096, 0x098, 0x09A, 0x09C, 0x09E,
- 0x0A0, 0x0A2, 0x0A4, 0x0A6, 0x0A8, 0x0AA, 0x0AC, 0x0AE,
- 0x0B0, 0x0B2, 0x0B4, 0x0B6, 0x0B8, 0x0BA, 0x0BC, 0x0BE,
- 0x0C0, 0x0C2, 0x0C4, 0x0C6, 0x0C8, 0x0CA, 0x0CC, 0x0CE,
- 0x0D0, 0x0D2, 0x0D4, 0x0D6, 0x0D8, 0x0DA, 0x0DC, 0x0DE,
- 0x0E0, 0x0E2, 0x0E4, 0x0E6, 0x0E8, 0x0EA, 0x0EC, 0x0EE,
- 0x0F0, 0x0F2, 0x0F4, 0x0F6, 0x0F8, 0x0FA, 0x0FC, 0x0FE,
- 0x100, 0x102, 0x104, 0x106, 0x108, 0x10A, 0x10C, 0x10E,
- 0x110, 0x112, 0x114, 0x116, 0x118, 0x11A, 0x11C, 0x11E,
- 0x120, 0x122, 0x124, 0x126, 0x128, 0x12A, 0x12C, 0x12E,
- 0x130, 0x132, 0x134, 0x136, 0x138, 0x13A, 0x13C, 0x13E,
- 0x140, 0x142, 0x144, 0x146, 0x148, 0x14A, 0x14C, 0x14E,
- 0x150, 0x152, 0x154, 0x156, 0x158, 0x15A, 0x15C, 0x15E,
- 0x160, 0x162, 0x164, 0x166, 0x168, 0x16A, 0x16C, 0x16E,
- 0x170, 0x172, 0x174, 0x176, 0x178, 0x17A, 0x17C, 0x17E,
- 0x180, 0x182, 0x184, 0x186, 0x188, 0x18A, 0x18C, 0x18E,
- 0x190, 0x192, 0x194, 0x196, 0x198, 0x19A, 0x19C, 0x19E,
- 0x1A0, 0x1A2, 0x1A4, 0x1A6, 0x1A8, 0x1AA, 0x1AC, 0x1AE,
- 0x1B0, 0x1B2, 0x1B4, 0x1B6, 0x1B8, 0x1BA, 0x1BC, 0x1BE,
- 0x1C0, 0x1C2, 0x1C4, 0x1C6, 0x1C8, 0x1CA, 0x1CC, 0x1CE,
- 0x1D0, 0x1D2, 0x1D4, 0x1D6, 0x1D8, 0x1DA, 0x1DC, 0x1DE,
- 0x1E0, 0x1E2, 0x1E4, 0x1E6, 0x1E8, 0x1EA, 0x1EC, 0x1EE,
- 0x1F0, 0x1F2, 0x1F4, 0x1F6, 0x1F8, 0x1FA, 0x1FC, 0x1FE,
- 0x200, 0x202, 0x204, 0x206, 0x208, 0x20A, 0x20C, 0x20E,
- 0x210, 0x212, 0x214, 0x216, 0x218, 0x21A, 0x21C, 0x21E,
- 0x220, 0x222, 0x224, 0x226, 0x228, 0x22A, 0x22C, 0x22E,
- 0x230, 0x232, 0x234, 0x236, 0x238, 0x23A, 0x23C, 0x23E,
- 0x240, 0x242, 0x244, 0x246, 0x248, 0x24A, 0x24C, 0x24E,
- 0x250, 0x252, 0x254, 0x256, 0x258, 0x25A, 0x25C, 0x25E,
- 0x260, 0x262, 0x264, 0x266, 0x268, 0x26A, 0x26C, 0x26E,
- 0x270, 0x272, 0x274, 0x276, 0x278, 0x27A, 0x27C, 0x27E,
- 0x280, 0x282, 0x284, 0x286, 0x288, 0x28A, 0x28C, 0x28E,
- 0x290, 0x292, 0x294, 0x296, 0x298, 0x29A, 0x29C, 0x29E,
- 0x2A0, 0x2A2, 0x2A4, 0x2A6, 0x2A8, 0x2AA, 0x2AC, 0x2AE,
- 0x2B0, 0x2B2, 0x2B4, 0x2B6, 0x2B8, 0x2BA, 0x2BC, 0x2BE,
- 0x2C0, 0x2C2, 0x2C4, 0x2C6, 0x2C8, 0x2CA, 0x2CC, 0x2CE,
- 0x2D0, 0x2D2, 0x2D4, 0x2D6, 0x2D8, 0x2DA, 0x2DC, 0x2DE,
- 0x2E0, 0x2E2, 0x2E4, 0x2E6, 0x2E8, 0x2EA, 0x2EC, 0x2EE,
- 0x2F0, 0x2F2, 0x2F4, 0x2F6, 0x2F8, 0x2FA, 0x2FC, 0x2FE,
- 0x300, 0x302, 0x304, 0x306, 0x308, 0x30A, 0x30C, 0x30E,
- 0x310, 0x312, 0x314, 0x316, 0x318, 0x31A, 0x31C, 0x31E,
- 0x320, 0x322, 0x324, 0x326, 0x328, 0x32A, 0x32C, 0x32E,
- 0x330, 0x332, 0x334, 0x336, 0x338, 0x33A, 0x33C, 0x33E,
- 0x340, 0x342, 0x344, 0x346, 0x348, 0x34A, 0x34C, 0x34E,
- 0x350, 0x352, 0x354, 0x356, 0x358, 0x35A, 0x35C, 0x35E,
- 0x360, 0x362, 0x364, 0x366, 0x368, 0x36A, 0x36C, 0x36E,
- 0x370, 0x372, 0x374, 0x376, 0x378, 0x37A, 0x37C, 0x37E,
- 0x380, 0x382, 0x384, 0x386, 0x388, 0x38A, 0x38C, 0x38E,
- 0x390, 0x392, 0x394, 0x396, 0x398, 0x39A, 0x39C, 0x39E,
- 0x3A0, 0x3A2, 0x3A4, 0x3A6, 0x3A8, 0x3AA, 0x3AC, 0x3AE,
- 0x3B0, 0x3B2, 0x3B4, 0x3B6, 0x3B8, 0x3BA, 0x3BC, 0x3BE,
- 0x3C0, 0x3C2, 0x3C4, 0x3C6, 0x3C8, 0x3CA, 0x3CC, 0x3CE,
- 0x3D0, 0x3D2, 0x3D4, 0x3D6, 0x3D8, 0x3DA, 0x3DC, 0x3DE,
- 0x3E0, 0x3E2, 0x3E4, 0x3E6, 0x3E8, 0x3EA, 0x3EC, 0x3EE,
- 0x3F0, 0x3F2, 0x3F4, 0x3F6, 0x3F8, 0x3FA, 0x3FC, 0x3FE,
- 0x400, 0x402, 0x404, 0x406, 0x408, 0x40A, 0x40C, 0x40E,
- 0x410, 0x412, 0x414, 0x416, 0x418, 0x41A, 0x41C, 0x41E,
- 0x420, 0x422, 0x424, 0x426, 0x428, 0x42A, 0x42C, 0x42E,
- 0x430, 0x432, 0x434, 0x436, 0x438, 0x43A, 0x43C, 0x43E,
- 0x440, 0x442, 0x444, 0x446, 0x448, 0x44A, 0x44C, 0x44E,
- 0x450, 0x452, 0x454, 0x456, 0x458, 0x45A, 0x45C, 0x45E,
- 0x460, 0x462, 0x464, 0x466, 0x468, 0x46A, 0x46C, 0x46E,
- 0x470, 0x472, 0x474, 0x476, 0x478, 0x47A, 0x47C, 0x47E,
- 0x480, 0x482, 0x484, 0x486, 0x488, 0x48A, 0x48C, 0x48E,
- 0x490, 0x492, 0x494, 0x496, 0x498, 0x49A, 0x49C, 0x49E,
- 0x4A0, 0x4A2, 0x4A4, 0x4A6, 0x4A8, 0x4AA, 0x4AC, 0x4AE,
- 0x4B0, 0x4B2, 0x4B4, 0x4B6, 0x4B8, 0x4BA, 0x4BC, 0x4BE,
- 0x4C0, 0x4C2, 0x4C4, 0x4C6, 0x4C8, 0x4CA, 0x4CC, 0x4CE,
- 0x4D0, 0x4D2, 0x4D4, 0x4D6, 0x4D8, 0x4DA, 0x4DC, 0x4DE,
- 0x4E0, 0x4E2, 0x4E4, 0x4E6, 0x4E8, 0x4EA, 0x4EC, 0x4EE,
- 0x4F0, 0x4F2, 0x4F4, 0x4F6, 0x4F8, 0x4FA, 0x4FC, 0x4FE,
- 0x500, 0x502, 0x504, 0x506, 0x508, 0x50A, 0x50C, 0x50E,
- 0x510, 0x512, 0x514, 0x516, 0x518, 0x51A, 0x51C, 0x51E,
- 0x520, 0x522, 0x524, 0x526, 0x528, 0x52A, 0x52C, 0x52E,
- 0x530, 0x532, 0x534, 0x536, 0x538, 0x53A, 0x53C, 0x53E,
- 0x540, 0x542, 0x544, 0x546, 0x548, 0x54A, 0x54C, 0x54E,
- 0x550, 0x552, 0x554, 0x556, 0x558, 0x55A, 0x55C, 0x55E,
- 0x560, 0x562, 0x564, 0x566, 0x568, 0x56A, 0x56C, 0x56E,
- 0x570, 0x572, 0x574, 0x576, 0x578, 0x57A, 0x57C, 0x57E,
- 0x580, 0x582, 0x584, 0x586, 0x588, 0x58A, 0x58C, 0x58E,
- 0x590, 0x592, 0x594, 0x596, 0x598, 0x59A, 0x59C, 0x59E,
- 0x5A0, 0x5A2, 0x5A4, 0x5A6, 0x5A8, 0x5AA, 0x5AC, 0x5AE,
- 0x5B0, 0x5B2, 0x5B4, 0x5B6, 0x5B8, 0x5BA, 0x5BC, 0x5BE,
- 0x5C0, 0x5C2, 0x5C4, 0x5C6, 0x5C8, 0x5CA, 0x5CC, 0x5CE,
- 0x5D0, 0x5D2, 0x5D4, 0x5D6, 0x5D8, 0x5DA, 0x5DC, 0x5DE,
- 0x5E0, 0x5E2, 0x5E4, 0x5E6, 0x5E8, 0x5EA, 0x5EC, 0x5EE,
- 0x5F0, 0x5F2, 0x5F4, 0x5F6, 0x5F8, 0x5FA, 0x5FC, 0x5FE,
- 0x600, 0x602, 0x604, 0x606, 0x608, 0x60A, 0x60C, 0x60E,
- 0x610, 0x612, 0x614, 0x616, 0x618, 0x61A, 0x61C, 0x61E,
- 0x620, 0x622, 0x624, 0x626, 0x628, 0x62A, 0x62C, 0x62E,
- 0x630, 0x632, 0x634, 0x636, 0x638, 0x63A, 0x63C, 0x63E,
- 0x640, 0x642, 0x644, 0x646, 0x648, 0x64A, 0x64C, 0x64E,
- 0x650, 0x652, 0x654, 0x656, 0x658, 0x65A, 0x65C, 0x65E,
- 0x660, 0x662, 0x664, 0x666, 0x668, 0x66A, 0x66C, 0x66E,
- 0x670, 0x672, 0x674, 0x676, 0x678, 0x67A, 0x67C, 0x67E,
- 0x680, 0x682, 0x684, 0x686, 0x688, 0x68A, 0x68C, 0x68E,
- 0x690, 0x692, 0x694, 0x696, 0x698, 0x69A, 0x69C, 0x69E,
- 0x6A0, 0x6A2, 0x6A4, 0x6A6, 0x6A8, 0x6AA, 0x6AC, 0x6AE,
- 0x6B0, 0x6B2, 0x6B4, 0x6B6, 0x6B8, 0x6BA, 0x6BC, 0x6BE,
- 0x6C0, 0x6C2, 0x6C4, 0x6C6, 0x6C8, 0x6CA, 0x6CC, 0x6CE,
- 0x6D0, 0x6D2, 0x6D4, 0x6D6, 0x6D8, 0x6DA, 0x6DC, 0x6DE,
- 0x6E0, 0x6E2, 0x6E4, 0x6E6, 0x6E8, 0x6EA, 0x6EC, 0x6EE,
- 0x6F0, 0x6F2, 0x6F4, 0x6F6, 0x6F8, 0x6FA, 0x6FC, 0x6FE,
- 0x700, 0x702, 0x704, 0x706, 0x708, 0x70A, 0x70C, 0x70E,
- 0x710, 0x712, 0x714, 0x716, 0x718, 0x71A, 0x71C, 0x71E,
- 0x720, 0x722, 0x724, 0x726, 0x728, 0x72A, 0x72C, 0x72E,
- 0x730, 0x732, 0x734, 0x736, 0x738, 0x73A, 0x73C, 0x73E,
- 0x740, 0x742, 0x744, 0x746, 0x748, 0x74A, 0x74C, 0x74E,
- 0x750, 0x752, 0x754, 0x756, 0x758, 0x75A, 0x75C, 0x75E,
- 0x760, 0x762, 0x764, 0x766, 0x768, 0x76A, 0x76C, 0x76E,
- 0x770, 0x772, 0x774, 0x776, 0x778, 0x77A, 0x77C, 0x77E,
- 0x780, 0x782, 0x784, 0x786, 0x788, 0x78A, 0x78C, 0x78E,
- 0x790, 0x792, 0x794, 0x796, 0x798, 0x79A, 0x79C, 0x79E,
- 0x7A0, 0x7A2, 0x7A4, 0x7A6, 0x7A8, 0x7AA, 0x7AC, 0x7AE,
- 0x7B0, 0x7B2, 0x7B4, 0x7B6, 0x7B8, 0x7BA, 0x7BC, 0x7BE,
- 0x7C0, 0x7C2, 0x7C4, 0x7C6, 0x7C8, 0x7CA, 0x7CC, 0x7CE,
- 0x7D0, 0x7D2, 0x7D4, 0x7D6, 0x7D8, 0x7DA, 0x7DC, 0x7DE,
- 0x7E0, 0x7E2, 0x7E4, 0x7E6, 0x7E8, 0x7EA, 0x7EC, 0x7EE,
- 0x7F0, 0x7F2, 0x7F4, 0x7F6, 0x7F8, 0x7FA, 0x7FC, 0x7FE,
- 0x800, 0x802, 0x804, 0x806, 0x808, 0x80A, 0x80C, 0x80E,
- 0x810, 0x812, 0x814, 0x816, 0x818, 0x81A, 0x81C, 0x81E,
- 0x820, 0x822, 0x824, 0x826, 0x828, 0x82A, 0x82C, 0x82E,
- 0x830, 0x832, 0x834, 0x836, 0x838, 0x83A, 0x83C, 0x83E,
- 0x840, 0x842, 0x844, 0x846, 0x848, 0x84A, 0x84C, 0x84E,
- 0x850, 0x852, 0x854, 0x856, 0x858, 0x85A, 0x85C, 0x85E,
- 0x860, 0x862, 0x864, 0x866, 0x868, 0x86A, 0x86C, 0x86E,
- 0x870, 0x872, 0x874, 0x876, 0x878, 0x87A, 0x87C, 0x87E,
- 0x880, 0x882, 0x884, 0x886, 0x888, 0x88A, 0x88C, 0x88E,
- 0x890, 0x892, 0x894, 0x896, 0x898, 0x89A, 0x89C, 0x89E,
- 0x8A0, 0x8A2, 0x8A4, 0x8A6, 0x8A8, 0x8AA, 0x8AC, 0x8AE,
- 0x8B0, 0x8B2, 0x8B4, 0x8B6, 0x8B8, 0x8BA, 0x8BC, 0x8BE,
- 0x8C0, 0x8C2, 0x8C4, 0x8C6, 0x8C8, 0x8CA, 0x8CC, 0x8CE,
- 0x8D0, 0x8D2, 0x8D4, 0x8D6, 0x8D8, 0x8DA, 0x8DC, 0x8DE,
- 0x8E0, 0x8E2, 0x8E4, 0x8E6, 0x8E8, 0x8EA, 0x8EC, 0x8EE,
- 0x8F0, 0x8F2, 0x8F4, 0x8F6, 0x8F8, 0x8FA, 0x8FC, 0x8FE,
- 0x900, 0x902, 0x904, 0x906, 0x908, 0x90A, 0x90C, 0x90E,
- 0x910, 0x912, 0x914, 0x916, 0x918, 0x91A, 0x91C, 0x91E,
- 0x920, 0x922, 0x924, 0x926, 0x928, 0x92A, 0x92C, 0x92E,
- 0x930, 0x932, 0x934, 0x936, 0x938, 0x93A, 0x93C, 0x93E,
- 0x940, 0x942, 0x944, 0x946, 0x948, 0x94A, 0x94C, 0x94E,
- 0x950, 0x952, 0x954, 0x956, 0x958, 0x95A, 0x95C, 0x95E,
- 0x960, 0x962, 0x964, 0x966, 0x968, 0x96A, 0x96C, 0x96E,
- 0x970, 0x972, 0x974, 0x976, 0x978, 0x97A, 0x97C, 0x97E,
- 0x980, 0x982, 0x984, 0x986, 0x988, 0x98A, 0x98C, 0x98E,
- 0x990, 0x992, 0x994, 0x996, 0x998, 0x99A, 0x99C, 0x99E,
- 0x9A0, 0x9A2, 0x9A4, 0x9A6, 0x9A8, 0x9AA, 0x9AC, 0x9AE,
- 0x9B0, 0x9B2, 0x9B4, 0x9B6, 0x9B8, 0x9BA, 0x9BC, 0x9BE,
- 0x9C0, 0x9C2, 0x9C4, 0x9C6, 0x9C8, 0x9CA, 0x9CC, 0x9CE,
- 0x9D0, 0x9D2, 0x9D4, 0x9D6, 0x9D8, 0x9DA, 0x9DC, 0x9DE,
- 0x9E0, 0x9E2, 0x9E4, 0x9E6, 0x9E8, 0x9EA, 0x9EC, 0x9EE,
- 0x9F0, 0x9F2, 0x9F4, 0x9F6, 0x9F8, 0x9FA, 0x9FC, 0x9FE,
- 0xA00, 0xA02, 0xA04, 0xA06, 0xA08, 0xA0A, 0xA0C, 0xA0E,
- 0xA10, 0xA12, 0xA14, 0xA16, 0xA18, 0xA1A, 0xA1C, 0xA1E,
- 0xA20, 0xA22, 0xA24, 0xA26, 0xA28, 0xA2A, 0xA2C, 0xA2E,
- 0xA30, 0xA32, 0xA34, 0xA36, 0xA38, 0xA3A, 0xA3C, 0xA3E,
- 0xA40, 0xA42, 0xA44, 0xA46, 0xA48, 0xA4A, 0xA4C, 0xA4E,
- 0xA50, 0xA52, 0xA54, 0xA56, 0xA58, 0xA5A, 0xA5C, 0xA5E,
- 0xA60, 0xA62, 0xA64, 0xA66, 0xA68, 0xA6A, 0xA6C, 0xA6E,
- 0xA70, 0xA72, 0xA74, 0xA76, 0xA78, 0xA7A, 0xA7C, 0xA7E,
- 0xA80, 0xA82, 0xA84, 0xA86, 0xA88, 0xA8A, 0xA8C, 0xA8E,
- 0xA90, 0xA92, 0xA94, 0xA96, 0xA98, 0xA9A, 0xA9C, 0xA9E,
- 0xAA0, 0xAA2, 0xAA4, 0xAA6, 0xAA8, 0xAAA, 0xAAC, 0xAAE,
- 0xAB0, 0xAB2, 0xAB4, 0xAB6, 0xAB8, 0xABA, 0xABC, 0xABE,
- 0xAC0, 0xAC2, 0xAC4, 0xAC6, 0xAC8, 0xACA, 0xACC, 0xACE,
- 0xAD0, 0xAD2, 0xAD4, 0xAD6, 0xAD8, 0xADA, 0xADC, 0xADE,
- 0xAE0, 0xAE2, 0xAE4, 0xAE6, 0xAE8, 0xAEA, 0xAEC, 0xAEE,
- 0xAF0, 0xAF2, 0xAF4, 0xAF6, 0xAF8, 0xAFA, 0xAFC, 0xAFE,
- 0xB00, 0xB02, 0xB04, 0xB06, 0xB08, 0xB0A, 0xB0C, 0xB0E,
- 0xB10, 0xB12, 0xB14, 0xB16, 0xB18, 0xB1A, 0xB1C, 0xB1E,
- 0xB20, 0xB22, 0xB24, 0xB26, 0xB28, 0xB2A, 0xB2C, 0xB2E,
- 0xB30, 0xB32, 0xB34, 0xB36, 0xB38, 0xB3A, 0xB3C, 0xB3E,
- 0xB40, 0xB42, 0xB44, 0xB46, 0xB48, 0xB4A, 0xB4C, 0xB4E,
- 0xB50, 0xB52, 0xB54, 0xB56, 0xB58, 0xB5A, 0xB5C, 0xB5E,
- 0xB60, 0xB62, 0xB64, 0xB66, 0xB68, 0xB6A, 0xB6C, 0xB6E,
- 0xB70, 0xB72, 0xB74, 0xB76, 0xB78, 0xB7A, 0xB7C, 0xB7E,
- 0xB80, 0xB82, 0xB84, 0xB86, 0xB88, 0xB8A, 0xB8C, 0xB8E,
- 0xB90, 0xB92, 0xB94, 0xB96, 0xB98, 0xB9A, 0xB9C, 0xB9E,
- 0xBA0, 0xBA2, 0xBA4, 0xBA6, 0xBA8, 0xBAA, 0xBAC, 0xBAE,
- 0xBB0, 0xBB2, 0xBB4, 0xBB6, 0xBB8, 0xBBA, 0xBBC, 0xBBE,
- 0xBC0, 0xBC2, 0xBC4, 0xBC6, 0xBC8, 0xBCA, 0xBCC, 0xBCE,
- 0xBD0, 0xBD2, 0xBD4, 0xBD6, 0xBD8, 0xBDA, 0xBDC, 0xBDE,
- 0xBE0, 0xBE2, 0xBE4, 0xBE6, 0xBE8, 0xBEA, 0xBEC, 0xBEE,
- 0xBF0, 0xBF2, 0xBF4, 0xBF6, 0xBF8, 0xBFA, 0xBFC, 0xBFE,
- 0xC00, 0xC02, 0xC04, 0xC06, 0xC08, 0xC0A, 0xC0C, 0xC0E,
- 0xC10, 0xC12, 0xC14, 0xC16, 0xC18, 0xC1A, 0xC1C, 0xC1E,
- 0xC20, 0xC22, 0xC24, 0xC26, 0xC28, 0xC2A, 0xC2C, 0xC2E,
- 0xC30, 0xC32, 0xC34, 0xC36, 0xC38, 0xC3A, 0xC3C, 0xC3E,
- 0xC40, 0xC42, 0xC44, 0xC46, 0xC48, 0xC4A, 0xC4C, 0xC4E,
- 0xC50, 0xC52, 0xC54, 0xC56, 0xC58, 0xC5A, 0xC5C, 0xC5E,
- 0xC60, 0xC62, 0xC64, 0xC66, 0xC68, 0xC6A, 0xC6C, 0xC6E,
- 0xC70, 0xC72, 0xC74, 0xC76, 0xC78, 0xC7A, 0xC7C, 0xC7E,
- 0xC80, 0xC82, 0xC84, 0xC86, 0xC88, 0xC8A, 0xC8C, 0xC8E,
- 0xC90, 0xC92, 0xC94, 0xC96, 0xC98, 0xC9A, 0xC9C, 0xC9E,
- 0xCA0, 0xCA2, 0xCA4, 0xCA6, 0xCA8, 0xCAA, 0xCAC, 0xCAE,
- 0xCB0, 0xCB2, 0xCB4, 0xCB6, 0xCB8, 0xCBA, 0xCBC, 0xCBE,
- 0xCC0, 0xCC2, 0xCC4, 0xCC6, 0xCC8, 0xCCA, 0xCCC, 0xCCE,
- 0xCD0, 0xCD2, 0xCD4, 0xCD6, 0xCD8, 0xCDA, 0xCDC, 0xCDE,
- 0xCE0, 0xCE2, 0xCE4, 0xCE6, 0xCE8, 0xCEA, 0xCEC, 0xCEE,
- 0xCF0, 0xCF2, 0xCF4, 0xCF6, 0xCF8, 0xCFA, 0xCFC, 0xCFE,
- 0xD00, 0xD02, 0xD04, 0xD06, 0xD08, 0xD0A, 0xD0C, 0xD0E,
- 0xD10, 0xD12, 0xD14, 0xD16, 0xD18, 0xD1A, 0xD1C, 0xD1E,
- 0xD20, 0xD22, 0xD24, 0xD26, 0xD28, 0xD2A, 0xD2C, 0xD2E,
- 0xD30, 0xD32, 0xD34, 0xD36, 0xD38, 0xD3A, 0xD3C, 0xD3E,
- 0xD40, 0xD42, 0xD44, 0xD46, 0xD48, 0xD4A, 0xD4C, 0xD4E,
- 0xD50, 0xD52, 0xD54, 0xD56, 0xD58, 0xD5A, 0xD5C, 0xD5E,
- 0xD60, 0xD62, 0xD64, 0xD66, 0xD68, 0xD6A, 0xD6C, 0xD6E,
- 0xD70, 0xD72, 0xD74, 0xD76, 0xD78, 0xD7A, 0xD7C, 0xD7E,
- 0xD80, 0xD82, 0xD84, 0xD86, 0xD88, 0xD8A, 0xD8C, 0xD8E,
- 0xD90, 0xD92, 0xD94, 0xD96, 0xD98, 0xD9A, 0xD9C, 0xD9E,
- 0xDA0, 0xDA2, 0xDA4, 0xDA6, 0xDA8, 0xDAA, 0xDAC, 0xDAE,
- 0xDB0, 0xDB2, 0xDB4, 0xDB6, 0xDB8, 0xDBA, 0xDBC, 0xDBE,
- 0xDC0, 0xDC2, 0xDC4, 0xDC6, 0xDC8, 0xDCA, 0xDCC, 0xDCE,
- 0xDD0, 0xDD2, 0xDD4, 0xDD6, 0xDD8, 0xDDA, 0xDDC, 0xDDE,
- 0xDE0, 0xDE2, 0xDE4, 0xDE6, 0xDE8, 0xDEA, 0xDEC, 0xDEE,
- 0xDF0, 0xDF2, 0xDF4, 0xDF6, 0xDF8, 0xDFA, 0xDFC, 0xDFE,
- 0xE00, 0xE02, 0xE04, 0xE06, 0xE08, 0xE0A, 0xE0C, 0xE0E,
- 0xE10, 0xE12, 0xE14, 0xE16, 0xE18, 0xE1A, 0xE1C, 0xE1E,
- 0xE20, 0xE22, 0xE24, 0xE26, 0xE28, 0xE2A, 0xE2C, 0xE2E,
- 0xE30, 0xE32, 0xE34, 0xE36, 0xE38, 0xE3A, 0xE3C, 0xE3E,
- 0xE40, 0xE42, 0xE44, 0xE46, 0xE48, 0xE4A, 0xE4C, 0xE4E,
- 0xE50, 0xE52, 0xE54, 0xE56, 0xE58, 0xE5A, 0xE5C, 0xE5E,
- 0xE60, 0xE62, 0xE64, 0xE66, 0xE68, 0xE6A, 0xE6C, 0xE6E,
- 0xE70, 0xE72, 0xE74, 0xE76, 0xE78, 0xE7A, 0xE7C, 0xE7E,
- 0xE80, 0xE82, 0xE84, 0xE86, 0xE88, 0xE8A, 0xE8C, 0xE8E,
- 0xE90, 0xE92, 0xE94, 0xE96, 0xE98, 0xE9A, 0xE9C, 0xE9E,
- 0xEA0, 0xEA2, 0xEA4, 0xEA6, 0xEA8, 0xEAA, 0xEAC, 0xEAE,
- 0xEB0, 0xEB2, 0xEB4, 0xEB6, 0xEB8, 0xEBA, 0xEBC, 0xEBE,
- 0xEC0, 0xEC2, 0xEC4, 0xEC6, 0xEC8, 0xECA, 0xECC, 0xECE,
- 0xED0, 0xED2, 0xED4, 0xED6, 0xED8, 0xEDA, 0xEDC, 0xEDE,
- 0xEE0, 0xEE2, 0xEE4, 0xEE6, 0xEE8, 0xEEA, 0xEEC, 0xEEE,
- 0xEF0, 0xEF2, 0xEF4, 0xEF6, 0xEF8, 0xEFA, 0xEFC, 0xEFE,
- 0xF00, 0xF02, 0xF04, 0xF06, 0xF08, 0xF0A, 0xF0C, 0xF0E,
- 0xF10, 0xF12, 0xF14, 0xF16, 0xF18, 0xF1A, 0xF1C, 0xF1E,
- 0xF20, 0xF22, 0xF24, 0xF26, 0xF28, 0xF2A, 0xF2C, 0xF2E,
- 0xF30, 0xF32, 0xF34, 0xF36, 0xF38, 0xF3A, 0xF3C, 0xF3E,
- 0xF40, 0xF42, 0xF44, 0xF46, 0xF48, 0xF4A, 0xF4C, 0xF4E,
- 0xF50, 0xF52, 0xF54, 0xF56, 0xF58, 0xF5A, 0xF5C, 0xF5E,
- 0xF60, 0xF62, 0xF64, 0xF66, 0xF68, 0xF6A, 0xF6C, 0xF6E,
- 0xF70, 0xF72, 0xF74, 0xF76, 0xF78, 0xF7A, 0xF7C, 0xF7E,
- 0xF80, 0xF82, 0xF84, 0xF86, 0xF88, 0xF8A, 0xF8C, 0xF8E,
- 0xF90, 0xF92, 0xF94, 0xF96, 0xF98, 0xF9A, 0xF9C, 0xF9E,
- 0xFA0, 0xFA2, 0xFA4, 0xFA6, 0xFA8, 0xFAA, 0xFAC, 0xFAE,
- 0xFB0, 0xFB2, 0xFB4, 0xFB6, 0xFB8, 0xFBA, 0xFBC, 0xFBE,
- 0xFC0, 0xFC2, 0xFC4, 0xFC6, 0xFC8, 0xFCA, 0xFCC, 0xFCE,
- 0xFD0, 0xFD2, 0xFD4, 0xFD6, 0xFD8, 0xFDA, 0xFDC, 0xFDE,
- 0xFE0, 0xFE2, 0xFE4, 0xFE6, 0xFE8, 0xFEA, 0xFEC, 0xFEE,
- 0xFF0, 0xFF2, 0xFF4, 0xFF6, 0xFF8, 0xFFA, 0xFFC, 0xFFE,
- 0xFFE, 0xFFC, 0xFFA, 0xFF8, 0xFF6, 0xFF4, 0xFF2, 0xFF0,
- 0xFEE, 0xFEC, 0xFEA, 0xFE8, 0xFE6, 0xFE4, 0xFE2, 0xFE0,
- 0xFDE, 0xFDC, 0xFDA, 0xFD8, 0xFD6, 0xFD4, 0xFD2, 0xFD0,
- 0xFCE, 0xFCC, 0xFCA, 0xFC8, 0xFC6, 0xFC4, 0xFC2, 0xFC0,
- 0xFBE, 0xFBC, 0xFBA, 0xFB8, 0xFB6, 0xFB4, 0xFB2, 0xFB0,
- 0xFAE, 0xFAC, 0xFAA, 0xFA8, 0xFA6, 0xFA4, 0xFA2, 0xFA0,
- 0xF9E, 0xF9C, 0xF9A, 0xF98, 0xF96, 0xF94, 0xF92, 0xF90,
- 0xF8E, 0xF8C, 0xF8A, 0xF88, 0xF86, 0xF84, 0xF82, 0xF80,
- 0xF7E, 0xF7C, 0xF7A, 0xF78, 0xF76, 0xF74, 0xF72, 0xF70,
- 0xF6E, 0xF6C, 0xF6A, 0xF68, 0xF66, 0xF64, 0xF62, 0xF60,
- 0xF5E, 0xF5C, 0xF5A, 0xF58, 0xF56, 0xF54, 0xF52, 0xF50,
- 0xF4E, 0xF4C, 0xF4A, 0xF48, 0xF46, 0xF44, 0xF42, 0xF40,
- 0xF3E, 0xF3C, 0xF3A, 0xF38, 0xF36, 0xF34, 0xF32, 0xF30,
- 0xF2E, 0xF2C, 0xF2A, 0xF28, 0xF26, 0xF24, 0xF22, 0xF20,
- 0xF1E, 0xF1C, 0xF1A, 0xF18, 0xF16, 0xF14, 0xF12, 0xF10,
- 0xF0E, 0xF0C, 0xF0A, 0xF08, 0xF06, 0xF04, 0xF02, 0xF00,
- 0xEFE, 0xEFC, 0xEFA, 0xEF8, 0xEF6, 0xEF4, 0xEF2, 0xEF0,
- 0xEEE, 0xEEC, 0xEEA, 0xEE8, 0xEE6, 0xEE4, 0xEE2, 0xEE0,
- 0xEDE, 0xEDC, 0xEDA, 0xED8, 0xED6, 0xED4, 0xED2, 0xED0,
- 0xECE, 0xECC, 0xECA, 0xEC8, 0xEC6, 0xEC4, 0xEC2, 0xEC0,
- 0xEBE, 0xEBC, 0xEBA, 0xEB8, 0xEB6, 0xEB4, 0xEB2, 0xEB0,
- 0xEAE, 0xEAC, 0xEAA, 0xEA8, 0xEA6, 0xEA4, 0xEA2, 0xEA0,
- 0xE9E, 0xE9C, 0xE9A, 0xE98, 0xE96, 0xE94, 0xE92, 0xE90,
- 0xE8E, 0xE8C, 0xE8A, 0xE88, 0xE86, 0xE84, 0xE82, 0xE80,
- 0xE7E, 0xE7C, 0xE7A, 0xE78, 0xE76, 0xE74, 0xE72, 0xE70,
- 0xE6E, 0xE6C, 0xE6A, 0xE68, 0xE66, 0xE64, 0xE62, 0xE60,
- 0xE5E, 0xE5C, 0xE5A, 0xE58, 0xE56, 0xE54, 0xE52, 0xE50,
- 0xE4E, 0xE4C, 0xE4A, 0xE48, 0xE46, 0xE44, 0xE42, 0xE40,
- 0xE3E, 0xE3C, 0xE3A, 0xE38, 0xE36, 0xE34, 0xE32, 0xE30,
- 0xE2E, 0xE2C, 0xE2A, 0xE28, 0xE26, 0xE24, 0xE22, 0xE20,
- 0xE1E, 0xE1C, 0xE1A, 0xE18, 0xE16, 0xE14, 0xE12, 0xE10,
- 0xE0E, 0xE0C, 0xE0A, 0xE08, 0xE06, 0xE04, 0xE02, 0xE00,
- 0xDFE, 0xDFC, 0xDFA, 0xDF8, 0xDF6, 0xDF4, 0xDF2, 0xDF0,
- 0xDEE, 0xDEC, 0xDEA, 0xDE8, 0xDE6, 0xDE4, 0xDE2, 0xDE0,
- 0xDDE, 0xDDC, 0xDDA, 0xDD8, 0xDD6, 0xDD4, 0xDD2, 0xDD0,
- 0xDCE, 0xDCC, 0xDCA, 0xDC8, 0xDC6, 0xDC4, 0xDC2, 0xDC0,
- 0xDBE, 0xDBC, 0xDBA, 0xDB8, 0xDB6, 0xDB4, 0xDB2, 0xDB0,
- 0xDAE, 0xDAC, 0xDAA, 0xDA8, 0xDA6, 0xDA4, 0xDA2, 0xDA0,
- 0xD9E, 0xD9C, 0xD9A, 0xD98, 0xD96, 0xD94, 0xD92, 0xD90,
- 0xD8E, 0xD8C, 0xD8A, 0xD88, 0xD86, 0xD84, 0xD82, 0xD80,
- 0xD7E, 0xD7C, 0xD7A, 0xD78, 0xD76, 0xD74, 0xD72, 0xD70,
- 0xD6E, 0xD6C, 0xD6A, 0xD68, 0xD66, 0xD64, 0xD62, 0xD60,
- 0xD5E, 0xD5C, 0xD5A, 0xD58, 0xD56, 0xD54, 0xD52, 0xD50,
- 0xD4E, 0xD4C, 0xD4A, 0xD48, 0xD46, 0xD44, 0xD42, 0xD40,
- 0xD3E, 0xD3C, 0xD3A, 0xD38, 0xD36, 0xD34, 0xD32, 0xD30,
- 0xD2E, 0xD2C, 0xD2A, 0xD28, 0xD26, 0xD24, 0xD22, 0xD20,
- 0xD1E, 0xD1C, 0xD1A, 0xD18, 0xD16, 0xD14, 0xD12, 0xD10,
- 0xD0E, 0xD0C, 0xD0A, 0xD08, 0xD06, 0xD04, 0xD02, 0xD00,
- 0xCFE, 0xCFC, 0xCFA, 0xCF8, 0xCF6, 0xCF4, 0xCF2, 0xCF0,
- 0xCEE, 0xCEC, 0xCEA, 0xCE8, 0xCE6, 0xCE4, 0xCE2, 0xCE0,
- 0xCDE, 0xCDC, 0xCDA, 0xCD8, 0xCD6, 0xCD4, 0xCD2, 0xCD0,
- 0xCCE, 0xCCC, 0xCCA, 0xCC8, 0xCC6, 0xCC4, 0xCC2, 0xCC0,
- 0xCBE, 0xCBC, 0xCBA, 0xCB8, 0xCB6, 0xCB4, 0xCB2, 0xCB0,
- 0xCAE, 0xCAC, 0xCAA, 0xCA8, 0xCA6, 0xCA4, 0xCA2, 0xCA0,
- 0xC9E, 0xC9C, 0xC9A, 0xC98, 0xC96, 0xC94, 0xC92, 0xC90,
- 0xC8E, 0xC8C, 0xC8A, 0xC88, 0xC86, 0xC84, 0xC82, 0xC80,
- 0xC7E, 0xC7C, 0xC7A, 0xC78, 0xC76, 0xC74, 0xC72, 0xC70,
- 0xC6E, 0xC6C, 0xC6A, 0xC68, 0xC66, 0xC64, 0xC62, 0xC60,
- 0xC5E, 0xC5C, 0xC5A, 0xC58, 0xC56, 0xC54, 0xC52, 0xC50,
- 0xC4E, 0xC4C, 0xC4A, 0xC48, 0xC46, 0xC44, 0xC42, 0xC40,
- 0xC3E, 0xC3C, 0xC3A, 0xC38, 0xC36, 0xC34, 0xC32, 0xC30,
- 0xC2E, 0xC2C, 0xC2A, 0xC28, 0xC26, 0xC24, 0xC22, 0xC20,
- 0xC1E, 0xC1C, 0xC1A, 0xC18, 0xC16, 0xC14, 0xC12, 0xC10,
- 0xC0E, 0xC0C, 0xC0A, 0xC08, 0xC06, 0xC04, 0xC02, 0xC00,
- 0xBFE, 0xBFC, 0xBFA, 0xBF8, 0xBF6, 0xBF4, 0xBF2, 0xBF0,
- 0xBEE, 0xBEC, 0xBEA, 0xBE8, 0xBE6, 0xBE4, 0xBE2, 0xBE0,
- 0xBDE, 0xBDC, 0xBDA, 0xBD8, 0xBD6, 0xBD4, 0xBD2, 0xBD0,
- 0xBCE, 0xBCC, 0xBCA, 0xBC8, 0xBC6, 0xBC4, 0xBC2, 0xBC0,
- 0xBBE, 0xBBC, 0xBBA, 0xBB8, 0xBB6, 0xBB4, 0xBB2, 0xBB0,
- 0xBAE, 0xBAC, 0xBAA, 0xBA8, 0xBA6, 0xBA4, 0xBA2, 0xBA0,
- 0xB9E, 0xB9C, 0xB9A, 0xB98, 0xB96, 0xB94, 0xB92, 0xB90,
- 0xB8E, 0xB8C, 0xB8A, 0xB88, 0xB86, 0xB84, 0xB82, 0xB80,
- 0xB7E, 0xB7C, 0xB7A, 0xB78, 0xB76, 0xB74, 0xB72, 0xB70,
- 0xB6E, 0xB6C, 0xB6A, 0xB68, 0xB66, 0xB64, 0xB62, 0xB60,
- 0xB5E, 0xB5C, 0xB5A, 0xB58, 0xB56, 0xB54, 0xB52, 0xB50,
- 0xB4E, 0xB4C, 0xB4A, 0xB48, 0xB46, 0xB44, 0xB42, 0xB40,
- 0xB3E, 0xB3C, 0xB3A, 0xB38, 0xB36, 0xB34, 0xB32, 0xB30,
- 0xB2E, 0xB2C, 0xB2A, 0xB28, 0xB26, 0xB24, 0xB22, 0xB20,
- 0xB1E, 0xB1C, 0xB1A, 0xB18, 0xB16, 0xB14, 0xB12, 0xB10,
- 0xB0E, 0xB0C, 0xB0A, 0xB08, 0xB06, 0xB04, 0xB02, 0xB00,
- 0xAFE, 0xAFC, 0xAFA, 0xAF8, 0xAF6, 0xAF4, 0xAF2, 0xAF0,
- 0xAEE, 0xAEC, 0xAEA, 0xAE8, 0xAE6, 0xAE4, 0xAE2, 0xAE0,
- 0xADE, 0xADC, 0xADA, 0xAD8, 0xAD6, 0xAD4, 0xAD2, 0xAD0,
- 0xACE, 0xACC, 0xACA, 0xAC8, 0xAC6, 0xAC4, 0xAC2, 0xAC0,
- 0xABE, 0xABC, 0xABA, 0xAB8, 0xAB6, 0xAB4, 0xAB2, 0xAB0,
- 0xAAE, 0xAAC, 0xAAA, 0xAA8, 0xAA6, 0xAA4, 0xAA2, 0xAA0,
- 0xA9E, 0xA9C, 0xA9A, 0xA98, 0xA96, 0xA94, 0xA92, 0xA90,
- 0xA8E, 0xA8C, 0xA8A, 0xA88, 0xA86, 0xA84, 0xA82, 0xA80,
- 0xA7E, 0xA7C, 0xA7A, 0xA78, 0xA76, 0xA74, 0xA72, 0xA70,
- 0xA6E, 0xA6C, 0xA6A, 0xA68, 0xA66, 0xA64, 0xA62, 0xA60,
- 0xA5E, 0xA5C, 0xA5A, 0xA58, 0xA56, 0xA54, 0xA52, 0xA50,
- 0xA4E, 0xA4C, 0xA4A, 0xA48, 0xA46, 0xA44, 0xA42, 0xA40,
- 0xA3E, 0xA3C, 0xA3A, 0xA38, 0xA36, 0xA34, 0xA32, 0xA30,
- 0xA2E, 0xA2C, 0xA2A, 0xA28, 0xA26, 0xA24, 0xA22, 0xA20,
- 0xA1E, 0xA1C, 0xA1A, 0xA18, 0xA16, 0xA14, 0xA12, 0xA10,
- 0xA0E, 0xA0C, 0xA0A, 0xA08, 0xA06, 0xA04, 0xA02, 0xA00,
- 0x9FE, 0x9FC, 0x9FA, 0x9F8, 0x9F6, 0x9F4, 0x9F2, 0x9F0,
- 0x9EE, 0x9EC, 0x9EA, 0x9E8, 0x9E6, 0x9E4, 0x9E2, 0x9E0,
- 0x9DE, 0x9DC, 0x9DA, 0x9D8, 0x9D6, 0x9D4, 0x9D2, 0x9D0,
- 0x9CE, 0x9CC, 0x9CA, 0x9C8, 0x9C6, 0x9C4, 0x9C2, 0x9C0,
- 0x9BE, 0x9BC, 0x9BA, 0x9B8, 0x9B6, 0x9B4, 0x9B2, 0x9B0,
- 0x9AE, 0x9AC, 0x9AA, 0x9A8, 0x9A6, 0x9A4, 0x9A2, 0x9A0,
- 0x99E, 0x99C, 0x99A, 0x998, 0x996, 0x994, 0x992, 0x990,
- 0x98E, 0x98C, 0x98A, 0x988, 0x986, 0x984, 0x982, 0x980,
- 0x97E, 0x97C, 0x97A, 0x978, 0x976, 0x974, 0x972, 0x970,
- 0x96E, 0x96C, 0x96A, 0x968, 0x966, 0x964, 0x962, 0x960,
- 0x95E, 0x95C, 0x95A, 0x958, 0x956, 0x954, 0x952, 0x950,
- 0x94E, 0x94C, 0x94A, 0x948, 0x946, 0x944, 0x942, 0x940,
- 0x93E, 0x93C, 0x93A, 0x938, 0x936, 0x934, 0x932, 0x930,
- 0x92E, 0x92C, 0x92A, 0x928, 0x926, 0x924, 0x922, 0x920,
- 0x91E, 0x91C, 0x91A, 0x918, 0x916, 0x914, 0x912, 0x910,
- 0x90E, 0x90C, 0x90A, 0x908, 0x906, 0x904, 0x902, 0x900,
- 0x8FE, 0x8FC, 0x8FA, 0x8F8, 0x8F6, 0x8F4, 0x8F2, 0x8F0,
- 0x8EE, 0x8EC, 0x8EA, 0x8E8, 0x8E6, 0x8E4, 0x8E2, 0x8E0,
- 0x8DE, 0x8DC, 0x8DA, 0x8D8, 0x8D6, 0x8D4, 0x8D2, 0x8D0,
- 0x8CE, 0x8CC, 0x8CA, 0x8C8, 0x8C6, 0x8C4, 0x8C2, 0x8C0,
- 0x8BE, 0x8BC, 0x8BA, 0x8B8, 0x8B6, 0x8B4, 0x8B2, 0x8B0,
- 0x8AE, 0x8AC, 0x8AA, 0x8A8, 0x8A6, 0x8A4, 0x8A2, 0x8A0,
- 0x89E, 0x89C, 0x89A, 0x898, 0x896, 0x894, 0x892, 0x890,
- 0x88E, 0x88C, 0x88A, 0x888, 0x886, 0x884, 0x882, 0x880,
- 0x87E, 0x87C, 0x87A, 0x878, 0x876, 0x874, 0x872, 0x870,
- 0x86E, 0x86C, 0x86A, 0x868, 0x866, 0x864, 0x862, 0x860,
- 0x85E, 0x85C, 0x85A, 0x858, 0x856, 0x854, 0x852, 0x850,
- 0x84E, 0x84C, 0x84A, 0x848, 0x846, 0x844, 0x842, 0x840,
- 0x83E, 0x83C, 0x83A, 0x838, 0x836, 0x834, 0x832, 0x830,
- 0x82E, 0x82C, 0x82A, 0x828, 0x826, 0x824, 0x822, 0x820,
- 0x81E, 0x81C, 0x81A, 0x818, 0x816, 0x814, 0x812, 0x810,
- 0x80E, 0x80C, 0x80A, 0x808, 0x806, 0x804, 0x802, 0x800,
- 0x7FE, 0x7FC, 0x7FA, 0x7F8, 0x7F6, 0x7F4, 0x7F2, 0x7F0,
- 0x7EE, 0x7EC, 0x7EA, 0x7E8, 0x7E6, 0x7E4, 0x7E2, 0x7E0,
- 0x7DE, 0x7DC, 0x7DA, 0x7D8, 0x7D6, 0x7D4, 0x7D2, 0x7D0,
- 0x7CE, 0x7CC, 0x7CA, 0x7C8, 0x7C6, 0x7C4, 0x7C2, 0x7C0,
- 0x7BE, 0x7BC, 0x7BA, 0x7B8, 0x7B6, 0x7B4, 0x7B2, 0x7B0,
- 0x7AE, 0x7AC, 0x7AA, 0x7A8, 0x7A6, 0x7A4, 0x7A2, 0x7A0,
- 0x79E, 0x79C, 0x79A, 0x798, 0x796, 0x794, 0x792, 0x790,
- 0x78E, 0x78C, 0x78A, 0x788, 0x786, 0x784, 0x782, 0x780,
- 0x77E, 0x77C, 0x77A, 0x778, 0x776, 0x774, 0x772, 0x770,
- 0x76E, 0x76C, 0x76A, 0x768, 0x766, 0x764, 0x762, 0x760,
- 0x75E, 0x75C, 0x75A, 0x758, 0x756, 0x754, 0x752, 0x750,
- 0x74E, 0x74C, 0x74A, 0x748, 0x746, 0x744, 0x742, 0x740,
- 0x73E, 0x73C, 0x73A, 0x738, 0x736, 0x734, 0x732, 0x730,
- 0x72E, 0x72C, 0x72A, 0x728, 0x726, 0x724, 0x722, 0x720,
- 0x71E, 0x71C, 0x71A, 0x718, 0x716, 0x714, 0x712, 0x710,
- 0x70E, 0x70C, 0x70A, 0x708, 0x706, 0x704, 0x702, 0x700,
- 0x6FE, 0x6FC, 0x6FA, 0x6F8, 0x6F6, 0x6F4, 0x6F2, 0x6F0,
- 0x6EE, 0x6EC, 0x6EA, 0x6E8, 0x6E6, 0x6E4, 0x6E2, 0x6E0,
- 0x6DE, 0x6DC, 0x6DA, 0x6D8, 0x6D6, 0x6D4, 0x6D2, 0x6D0,
- 0x6CE, 0x6CC, 0x6CA, 0x6C8, 0x6C6, 0x6C4, 0x6C2, 0x6C0,
- 0x6BE, 0x6BC, 0x6BA, 0x6B8, 0x6B6, 0x6B4, 0x6B2, 0x6B0,
- 0x6AE, 0x6AC, 0x6AA, 0x6A8, 0x6A6, 0x6A4, 0x6A2, 0x6A0,
- 0x69E, 0x69C, 0x69A, 0x698, 0x696, 0x694, 0x692, 0x690,
- 0x68E, 0x68C, 0x68A, 0x688, 0x686, 0x684, 0x682, 0x680,
- 0x67E, 0x67C, 0x67A, 0x678, 0x676, 0x674, 0x672, 0x670,
- 0x66E, 0x66C, 0x66A, 0x668, 0x666, 0x664, 0x662, 0x660,
- 0x65E, 0x65C, 0x65A, 0x658, 0x656, 0x654, 0x652, 0x650,
- 0x64E, 0x64C, 0x64A, 0x648, 0x646, 0x644, 0x642, 0x640,
- 0x63E, 0x63C, 0x63A, 0x638, 0x636, 0x634, 0x632, 0x630,
- 0x62E, 0x62C, 0x62A, 0x628, 0x626, 0x624, 0x622, 0x620,
- 0x61E, 0x61C, 0x61A, 0x618, 0x616, 0x614, 0x612, 0x610,
- 0x60E, 0x60C, 0x60A, 0x608, 0x606, 0x604, 0x602, 0x600,
- 0x5FE, 0x5FC, 0x5FA, 0x5F8, 0x5F6, 0x5F4, 0x5F2, 0x5F0,
- 0x5EE, 0x5EC, 0x5EA, 0x5E8, 0x5E6, 0x5E4, 0x5E2, 0x5E0,
- 0x5DE, 0x5DC, 0x5DA, 0x5D8, 0x5D6, 0x5D4, 0x5D2, 0x5D0,
- 0x5CE, 0x5CC, 0x5CA, 0x5C8, 0x5C6, 0x5C4, 0x5C2, 0x5C0,
- 0x5BE, 0x5BC, 0x5BA, 0x5B8, 0x5B6, 0x5B4, 0x5B2, 0x5B0,
- 0x5AE, 0x5AC, 0x5AA, 0x5A8, 0x5A6, 0x5A4, 0x5A2, 0x5A0,
- 0x59E, 0x59C, 0x59A, 0x598, 0x596, 0x594, 0x592, 0x590,
- 0x58E, 0x58C, 0x58A, 0x588, 0x586, 0x584, 0x582, 0x580,
- 0x57E, 0x57C, 0x57A, 0x578, 0x576, 0x574, 0x572, 0x570,
- 0x56E, 0x56C, 0x56A, 0x568, 0x566, 0x564, 0x562, 0x560,
- 0x55E, 0x55C, 0x55A, 0x558, 0x556, 0x554, 0x552, 0x550,
- 0x54E, 0x54C, 0x54A, 0x548, 0x546, 0x544, 0x542, 0x540,
- 0x53E, 0x53C, 0x53A, 0x538, 0x536, 0x534, 0x532, 0x530,
- 0x52E, 0x52C, 0x52A, 0x528, 0x526, 0x524, 0x522, 0x520,
- 0x51E, 0x51C, 0x51A, 0x518, 0x516, 0x514, 0x512, 0x510,
- 0x50E, 0x50C, 0x50A, 0x508, 0x506, 0x504, 0x502, 0x500,
- 0x4FE, 0x4FC, 0x4FA, 0x4F8, 0x4F6, 0x4F4, 0x4F2, 0x4F0,
- 0x4EE, 0x4EC, 0x4EA, 0x4E8, 0x4E6, 0x4E4, 0x4E2, 0x4E0,
- 0x4DE, 0x4DC, 0x4DA, 0x4D8, 0x4D6, 0x4D4, 0x4D2, 0x4D0,
- 0x4CE, 0x4CC, 0x4CA, 0x4C8, 0x4C6, 0x4C4, 0x4C2, 0x4C0,
- 0x4BE, 0x4BC, 0x4BA, 0x4B8, 0x4B6, 0x4B4, 0x4B2, 0x4B0,
- 0x4AE, 0x4AC, 0x4AA, 0x4A8, 0x4A6, 0x4A4, 0x4A2, 0x4A0,
- 0x49E, 0x49C, 0x49A, 0x498, 0x496, 0x494, 0x492, 0x490,
- 0x48E, 0x48C, 0x48A, 0x488, 0x486, 0x484, 0x482, 0x480,
- 0x47E, 0x47C, 0x47A, 0x478, 0x476, 0x474, 0x472, 0x470,
- 0x46E, 0x46C, 0x46A, 0x468, 0x466, 0x464, 0x462, 0x460,
- 0x45E, 0x45C, 0x45A, 0x458, 0x456, 0x454, 0x452, 0x450,
- 0x44E, 0x44C, 0x44A, 0x448, 0x446, 0x444, 0x442, 0x440,
- 0x43E, 0x43C, 0x43A, 0x438, 0x436, 0x434, 0x432, 0x430,
- 0x42E, 0x42C, 0x42A, 0x428, 0x426, 0x424, 0x422, 0x420,
- 0x41E, 0x41C, 0x41A, 0x418, 0x416, 0x414, 0x412, 0x410,
- 0x40E, 0x40C, 0x40A, 0x408, 0x406, 0x404, 0x402, 0x400,
- 0x3FE, 0x3FC, 0x3FA, 0x3F8, 0x3F6, 0x3F4, 0x3F2, 0x3F0,
- 0x3EE, 0x3EC, 0x3EA, 0x3E8, 0x3E6, 0x3E4, 0x3E2, 0x3E0,
- 0x3DE, 0x3DC, 0x3DA, 0x3D8, 0x3D6, 0x3D4, 0x3D2, 0x3D0,
- 0x3CE, 0x3CC, 0x3CA, 0x3C8, 0x3C6, 0x3C4, 0x3C2, 0x3C0,
- 0x3BE, 0x3BC, 0x3BA, 0x3B8, 0x3B6, 0x3B4, 0x3B2, 0x3B0,
- 0x3AE, 0x3AC, 0x3AA, 0x3A8, 0x3A6, 0x3A4, 0x3A2, 0x3A0,
- 0x39E, 0x39C, 0x39A, 0x398, 0x396, 0x394, 0x392, 0x390,
- 0x38E, 0x38C, 0x38A, 0x388, 0x386, 0x384, 0x382, 0x380,
- 0x37E, 0x37C, 0x37A, 0x378, 0x376, 0x374, 0x372, 0x370,
- 0x36E, 0x36C, 0x36A, 0x368, 0x366, 0x364, 0x362, 0x360,
- 0x35E, 0x35C, 0x35A, 0x358, 0x356, 0x354, 0x352, 0x350,
- 0x34E, 0x34C, 0x34A, 0x348, 0x346, 0x344, 0x342, 0x340,
- 0x33E, 0x33C, 0x33A, 0x338, 0x336, 0x334, 0x332, 0x330,
- 0x32E, 0x32C, 0x32A, 0x328, 0x326, 0x324, 0x322, 0x320,
- 0x31E, 0x31C, 0x31A, 0x318, 0x316, 0x314, 0x312, 0x310,
- 0x30E, 0x30C, 0x30A, 0x308, 0x306, 0x304, 0x302, 0x300,
- 0x2FE, 0x2FC, 0x2FA, 0x2F8, 0x2F6, 0x2F4, 0x2F2, 0x2F0,
- 0x2EE, 0x2EC, 0x2EA, 0x2E8, 0x2E6, 0x2E4, 0x2E2, 0x2E0,
- 0x2DE, 0x2DC, 0x2DA, 0x2D8, 0x2D6, 0x2D4, 0x2D2, 0x2D0,
- 0x2CE, 0x2CC, 0x2CA, 0x2C8, 0x2C6, 0x2C4, 0x2C2, 0x2C0,
- 0x2BE, 0x2BC, 0x2BA, 0x2B8, 0x2B6, 0x2B4, 0x2B2, 0x2B0,
- 0x2AE, 0x2AC, 0x2AA, 0x2A8, 0x2A6, 0x2A4, 0x2A2, 0x2A0,
- 0x29E, 0x29C, 0x29A, 0x298, 0x296, 0x294, 0x292, 0x290,
- 0x28E, 0x28C, 0x28A, 0x288, 0x286, 0x284, 0x282, 0x280,
- 0x27E, 0x27C, 0x27A, 0x278, 0x276, 0x274, 0x272, 0x270,
- 0x26E, 0x26C, 0x26A, 0x268, 0x266, 0x264, 0x262, 0x260,
- 0x25E, 0x25C, 0x25A, 0x258, 0x256, 0x254, 0x252, 0x250,
- 0x24E, 0x24C, 0x24A, 0x248, 0x246, 0x244, 0x242, 0x240,
- 0x23E, 0x23C, 0x23A, 0x238, 0x236, 0x234, 0x232, 0x230,
- 0x22E, 0x22C, 0x22A, 0x228, 0x226, 0x224, 0x222, 0x220,
- 0x21E, 0x21C, 0x21A, 0x218, 0x216, 0x214, 0x212, 0x210,
- 0x20E, 0x20C, 0x20A, 0x208, 0x206, 0x204, 0x202, 0x200,
- 0x1FE, 0x1FC, 0x1FA, 0x1F8, 0x1F6, 0x1F4, 0x1F2, 0x1F0,
- 0x1EE, 0x1EC, 0x1EA, 0x1E8, 0x1E6, 0x1E4, 0x1E2, 0x1E0,
- 0x1DE, 0x1DC, 0x1DA, 0x1D8, 0x1D6, 0x1D4, 0x1D2, 0x1D0,
- 0x1CE, 0x1CC, 0x1CA, 0x1C8, 0x1C6, 0x1C4, 0x1C2, 0x1C0,
- 0x1BE, 0x1BC, 0x1BA, 0x1B8, 0x1B6, 0x1B4, 0x1B2, 0x1B0,
- 0x1AE, 0x1AC, 0x1AA, 0x1A8, 0x1A6, 0x1A4, 0x1A2, 0x1A0,
- 0x19E, 0x19C, 0x19A, 0x198, 0x196, 0x194, 0x192, 0x190,
- 0x18E, 0x18C, 0x18A, 0x188, 0x186, 0x184, 0x182, 0x180,
- 0x17E, 0x17C, 0x17A, 0x178, 0x176, 0x174, 0x172, 0x170,
- 0x16E, 0x16C, 0x16A, 0x168, 0x166, 0x164, 0x162, 0x160,
- 0x15E, 0x15C, 0x15A, 0x158, 0x156, 0x154, 0x152, 0x150,
- 0x14E, 0x14C, 0x14A, 0x148, 0x146, 0x144, 0x142, 0x140,
- 0x13E, 0x13C, 0x13A, 0x138, 0x136, 0x134, 0x132, 0x130,
- 0x12E, 0x12C, 0x12A, 0x128, 0x126, 0x124, 0x122, 0x120,
- 0x11E, 0x11C, 0x11A, 0x118, 0x116, 0x114, 0x112, 0x110,
- 0x10E, 0x10C, 0x10A, 0x108, 0x106, 0x104, 0x102, 0x100,
- 0x0FE, 0x0FC, 0x0FA, 0x0F8, 0x0F6, 0x0F4, 0x0F2, 0x0F0,
- 0x0EE, 0x0EC, 0x0EA, 0x0E8, 0x0E6, 0x0E4, 0x0E2, 0x0E0,
- 0x0DE, 0x0DC, 0x0DA, 0x0D8, 0x0D6, 0x0D4, 0x0D2, 0x0D0,
- 0x0CE, 0x0CC, 0x0CA, 0x0C8, 0x0C6, 0x0C4, 0x0C2, 0x0C0,
- 0x0BE, 0x0BC, 0x0BA, 0x0B8, 0x0B6, 0x0B4, 0x0B2, 0x0B0,
- 0x0AE, 0x0AC, 0x0AA, 0x0A8, 0x0A6, 0x0A4, 0x0A2, 0x0A0,
- 0x09E, 0x09C, 0x09A, 0x098, 0x096, 0x094, 0x092, 0x090,
- 0x08E, 0x08C, 0x08A, 0x088, 0x086, 0x084, 0x082, 0x080,
- 0x07E, 0x07C, 0x07A, 0x078, 0x076, 0x074, 0x072, 0x070,
- 0x06E, 0x06C, 0x06A, 0x068, 0x066, 0x064, 0x062, 0x060,
- 0x05E, 0x05C, 0x05A, 0x058, 0x056, 0x054, 0x052, 0x050,
- 0x04E, 0x04C, 0x04A, 0x048, 0x046, 0x044, 0x042, 0x040,
- 0x03E, 0x03C, 0x03A, 0x038, 0x036, 0x034, 0x032, 0x030,
- 0x02E, 0x02C, 0x02A, 0x028, 0x026, 0x024, 0x022, 0x020,
- 0x01E, 0x01C, 0x01A, 0x018, 0x016, 0x014, 0x012, 0x010,
- 0x00E, 0x00C, 0x00A, 0x008, 0x006, 0x004, 0x002, 0x000
- },
- new short[] {
- 0x000, 0x001, 0x002, 0x003, 0x004, 0x005, 0x006, 0x007,
- 0x008, 0x009, 0x00A, 0x00B, 0x00C, 0x00D, 0x00E, 0x00F,
- 0x010, 0x011, 0x012, 0x013, 0x014, 0x015, 0x016, 0x017,
- 0x018, 0x019, 0x01A, 0x01B, 0x01C, 0x01D, 0x01E, 0x01F,
- 0x020, 0x021, 0x022, 0x023, 0x024, 0x025, 0x026, 0x027,
- 0x028, 0x029, 0x02A, 0x02B, 0x02C, 0x02D, 0x02E, 0x02F,
- 0x030, 0x031, 0x032, 0x033, 0x034, 0x035, 0x036, 0x037,
- 0x038, 0x039, 0x03A, 0x03B, 0x03C, 0x03D, 0x03E, 0x03F,
- 0x040, 0x041, 0x042, 0x043, 0x044, 0x045, 0x046, 0x047,
- 0x048, 0x049, 0x04A, 0x04B, 0x04C, 0x04D, 0x04E, 0x04F,
- 0x050, 0x051, 0x052, 0x053, 0x054, 0x055, 0x056, 0x057,
- 0x058, 0x059, 0x05A, 0x05B, 0x05C, 0x05D, 0x05E, 0x05F,
- 0x060, 0x061, 0x062, 0x063, 0x064, 0x065, 0x066, 0x067,
- 0x068, 0x069, 0x06A, 0x06B, 0x06C, 0x06D, 0x06E, 0x06F,
- 0x070, 0x071, 0x072, 0x073, 0x074, 0x075, 0x076, 0x077,
- 0x078, 0x079, 0x07A, 0x07B, 0x07C, 0x07D, 0x07E, 0x07F,
- 0x080, 0x081, 0x082, 0x083, 0x084, 0x085, 0x086, 0x087,
- 0x088, 0x089, 0x08A, 0x08B, 0x08C, 0x08D, 0x08E, 0x08F,
- 0x090, 0x091, 0x092, 0x093, 0x094, 0x095, 0x096, 0x097,
- 0x098, 0x099, 0x09A, 0x09B, 0x09C, 0x09D, 0x09E, 0x09F,
- 0x0A0, 0x0A1, 0x0A2, 0x0A3, 0x0A4, 0x0A5, 0x0A6, 0x0A7,
- 0x0A8, 0x0A9, 0x0AA, 0x0AB, 0x0AC, 0x0AD, 0x0AE, 0x0AF,
- 0x0B0, 0x0B1, 0x0B2, 0x0B3, 0x0B4, 0x0B5, 0x0B6, 0x0B7,
- 0x0B8, 0x0B9, 0x0BA, 0x0BB, 0x0BC, 0x0BD, 0x0BE, 0x0BF,
- 0x0C0, 0x0C1, 0x0C2, 0x0C3, 0x0C4, 0x0C5, 0x0C6, 0x0C7,
- 0x0C8, 0x0C9, 0x0CA, 0x0CB, 0x0CC, 0x0CD, 0x0CE, 0x0CF,
- 0x0D0, 0x0D1, 0x0D2, 0x0D3, 0x0D4, 0x0D5, 0x0D6, 0x0D7,
- 0x0D8, 0x0D9, 0x0DA, 0x0DB, 0x0DC, 0x0DD, 0x0DE, 0x0DF,
- 0x0E0, 0x0E1, 0x0E2, 0x0E3, 0x0E4, 0x0E5, 0x0E6, 0x0E7,
- 0x0E8, 0x0E9, 0x0EA, 0x0EB, 0x0EC, 0x0ED, 0x0EE, 0x0EF,
- 0x0F0, 0x0F1, 0x0F2, 0x0F3, 0x0F4, 0x0F5, 0x0F6, 0x0F7,
- 0x0F8, 0x0F9, 0x0FA, 0x0FB, 0x0FC, 0x0FD, 0x0FE, 0x0FF,
- 0x100, 0x101, 0x102, 0x103, 0x104, 0x105, 0x106, 0x107,
- 0x108, 0x109, 0x10A, 0x10B, 0x10C, 0x10D, 0x10E, 0x10F,
- 0x110, 0x111, 0x112, 0x113, 0x114, 0x115, 0x116, 0x117,
- 0x118, 0x119, 0x11A, 0x11B, 0x11C, 0x11D, 0x11E, 0x11F,
- 0x120, 0x121, 0x122, 0x123, 0x124, 0x125, 0x126, 0x127,
- 0x128, 0x129, 0x12A, 0x12B, 0x12C, 0x12D, 0x12E, 0x12F,
- 0x130, 0x131, 0x132, 0x133, 0x134, 0x135, 0x136, 0x137,
- 0x138, 0x139, 0x13A, 0x13B, 0x13C, 0x13D, 0x13E, 0x13F,
- 0x140, 0x141, 0x142, 0x143, 0x144, 0x145, 0x146, 0x147,
- 0x148, 0x149, 0x14A, 0x14B, 0x14C, 0x14D, 0x14E, 0x14F,
- 0x150, 0x151, 0x152, 0x153, 0x154, 0x155, 0x156, 0x157,
- 0x158, 0x159, 0x15A, 0x15B, 0x15C, 0x15D, 0x15E, 0x15F,
- 0x160, 0x161, 0x162, 0x163, 0x164, 0x165, 0x166, 0x167,
- 0x168, 0x169, 0x16A, 0x16B, 0x16C, 0x16D, 0x16E, 0x16F,
- 0x170, 0x171, 0x172, 0x173, 0x174, 0x175, 0x176, 0x177,
- 0x178, 0x179, 0x17A, 0x17B, 0x17C, 0x17D, 0x17E, 0x17F,
- 0x180, 0x181, 0x182, 0x183, 0x184, 0x185, 0x186, 0x187,
- 0x188, 0x189, 0x18A, 0x18B, 0x18C, 0x18D, 0x18E, 0x18F,
- 0x190, 0x191, 0x192, 0x193, 0x194, 0x195, 0x196, 0x197,
- 0x198, 0x199, 0x19A, 0x19B, 0x19C, 0x19D, 0x19E, 0x19F,
- 0x1A0, 0x1A1, 0x1A2, 0x1A3, 0x1A4, 0x1A5, 0x1A6, 0x1A7,
- 0x1A8, 0x1A9, 0x1AA, 0x1AB, 0x1AC, 0x1AD, 0x1AE, 0x1AF,
- 0x1B0, 0x1B1, 0x1B2, 0x1B3, 0x1B4, 0x1B5, 0x1B6, 0x1B7,
- 0x1B8, 0x1B9, 0x1BA, 0x1BB, 0x1BC, 0x1BD, 0x1BE, 0x1BF,
- 0x1C0, 0x1C1, 0x1C2, 0x1C3, 0x1C4, 0x1C5, 0x1C6, 0x1C7,
- 0x1C8, 0x1C9, 0x1CA, 0x1CB, 0x1CC, 0x1CD, 0x1CE, 0x1CF,
- 0x1D0, 0x1D1, 0x1D2, 0x1D3, 0x1D4, 0x1D5, 0x1D6, 0x1D7,
- 0x1D8, 0x1D9, 0x1DA, 0x1DB, 0x1DC, 0x1DD, 0x1DE, 0x1DF,
- 0x1E0, 0x1E1, 0x1E2, 0x1E3, 0x1E4, 0x1E5, 0x1E6, 0x1E7,
- 0x1E8, 0x1E9, 0x1EA, 0x1EB, 0x1EC, 0x1ED, 0x1EE, 0x1EF,
- 0x1F0, 0x1F1, 0x1F2, 0x1F3, 0x1F4, 0x1F5, 0x1F6, 0x1F7,
- 0x1F8, 0x1F9, 0x1FA, 0x1FB, 0x1FC, 0x1FD, 0x1FE, 0x1FF,
- 0x200, 0x201, 0x202, 0x203, 0x204, 0x205, 0x206, 0x207,
- 0x208, 0x209, 0x20A, 0x20B, 0x20C, 0x20D, 0x20E, 0x20F,
- 0x210, 0x211, 0x212, 0x213, 0x214, 0x215, 0x216, 0x217,
- 0x218, 0x219, 0x21A, 0x21B, 0x21C, 0x21D, 0x21E, 0x21F,
- 0x220, 0x221, 0x222, 0x223, 0x224, 0x225, 0x226, 0x227,
- 0x228, 0x229, 0x22A, 0x22B, 0x22C, 0x22D, 0x22E, 0x22F,
- 0x230, 0x231, 0x232, 0x233, 0x234, 0x235, 0x236, 0x237,
- 0x238, 0x239, 0x23A, 0x23B, 0x23C, 0x23D, 0x23E, 0x23F,
- 0x240, 0x241, 0x242, 0x243, 0x244, 0x245, 0x246, 0x247,
- 0x248, 0x249, 0x24A, 0x24B, 0x24C, 0x24D, 0x24E, 0x24F,
- 0x250, 0x251, 0x252, 0x253, 0x254, 0x255, 0x256, 0x257,
- 0x258, 0x259, 0x25A, 0x25B, 0x25C, 0x25D, 0x25E, 0x25F,
- 0x260, 0x261, 0x262, 0x263, 0x264, 0x265, 0x266, 0x267,
- 0x268, 0x269, 0x26A, 0x26B, 0x26C, 0x26D, 0x26E, 0x26F,
- 0x270, 0x271, 0x272, 0x273, 0x274, 0x275, 0x276, 0x277,
- 0x278, 0x279, 0x27A, 0x27B, 0x27C, 0x27D, 0x27E, 0x27F,
- 0x280, 0x281, 0x282, 0x283, 0x284, 0x285, 0x286, 0x287,
- 0x288, 0x289, 0x28A, 0x28B, 0x28C, 0x28D, 0x28E, 0x28F,
- 0x290, 0x291, 0x292, 0x293, 0x294, 0x295, 0x296, 0x297,
- 0x298, 0x299, 0x29A, 0x29B, 0x29C, 0x29D, 0x29E, 0x29F,
- 0x2A0, 0x2A1, 0x2A2, 0x2A3, 0x2A4, 0x2A5, 0x2A6, 0x2A7,
- 0x2A8, 0x2A9, 0x2AA, 0x2AB, 0x2AC, 0x2AD, 0x2AE, 0x2AF,
- 0x2B0, 0x2B1, 0x2B2, 0x2B3, 0x2B4, 0x2B5, 0x2B6, 0x2B7,
- 0x2B8, 0x2B9, 0x2BA, 0x2BB, 0x2BC, 0x2BD, 0x2BE, 0x2BF,
- 0x2C0, 0x2C1, 0x2C2, 0x2C3, 0x2C4, 0x2C5, 0x2C6, 0x2C7,
- 0x2C8, 0x2C9, 0x2CA, 0x2CB, 0x2CC, 0x2CD, 0x2CE, 0x2CF,
- 0x2D0, 0x2D1, 0x2D2, 0x2D3, 0x2D4, 0x2D5, 0x2D6, 0x2D7,
- 0x2D8, 0x2D9, 0x2DA, 0x2DB, 0x2DC, 0x2DD, 0x2DE, 0x2DF,
- 0x2E0, 0x2E1, 0x2E2, 0x2E3, 0x2E4, 0x2E5, 0x2E6, 0x2E7,
- 0x2E8, 0x2E9, 0x2EA, 0x2EB, 0x2EC, 0x2ED, 0x2EE, 0x2EF,
- 0x2F0, 0x2F1, 0x2F2, 0x2F3, 0x2F4, 0x2F5, 0x2F6, 0x2F7,
- 0x2F8, 0x2F9, 0x2FA, 0x2FB, 0x2FC, 0x2FD, 0x2FE, 0x2FF,
- 0x300, 0x301, 0x302, 0x303, 0x304, 0x305, 0x306, 0x307,
- 0x308, 0x309, 0x30A, 0x30B, 0x30C, 0x30D, 0x30E, 0x30F,
- 0x310, 0x311, 0x312, 0x313, 0x314, 0x315, 0x316, 0x317,
- 0x318, 0x319, 0x31A, 0x31B, 0x31C, 0x31D, 0x31E, 0x31F,
- 0x320, 0x321, 0x322, 0x323, 0x324, 0x325, 0x326, 0x327,
- 0x328, 0x329, 0x32A, 0x32B, 0x32C, 0x32D, 0x32E, 0x32F,
- 0x330, 0x331, 0x332, 0x333, 0x334, 0x335, 0x336, 0x337,
- 0x338, 0x339, 0x33A, 0x33B, 0x33C, 0x33D, 0x33E, 0x33F,
- 0x340, 0x341, 0x342, 0x343, 0x344, 0x345, 0x346, 0x347,
- 0x348, 0x349, 0x34A, 0x34B, 0x34C, 0x34D, 0x34E, 0x34F,
- 0x350, 0x351, 0x352, 0x353, 0x354, 0x355, 0x356, 0x357,
- 0x358, 0x359, 0x35A, 0x35B, 0x35C, 0x35D, 0x35E, 0x35F,
- 0x360, 0x361, 0x362, 0x363, 0x364, 0x365, 0x366, 0x367,
- 0x368, 0x369, 0x36A, 0x36B, 0x36C, 0x36D, 0x36E, 0x36F,
- 0x370, 0x371, 0x372, 0x373, 0x374, 0x375, 0x376, 0x377,
- 0x378, 0x379, 0x37A, 0x37B, 0x37C, 0x37D, 0x37E, 0x37F,
- 0x380, 0x381, 0x382, 0x383, 0x384, 0x385, 0x386, 0x387,
- 0x388, 0x389, 0x38A, 0x38B, 0x38C, 0x38D, 0x38E, 0x38F,
- 0x390, 0x391, 0x392, 0x393, 0x394, 0x395, 0x396, 0x397,
- 0x398, 0x399, 0x39A, 0x39B, 0x39C, 0x39D, 0x39E, 0x39F,
- 0x3A0, 0x3A1, 0x3A2, 0x3A3, 0x3A4, 0x3A5, 0x3A6, 0x3A7,
- 0x3A8, 0x3A9, 0x3AA, 0x3AB, 0x3AC, 0x3AD, 0x3AE, 0x3AF,
- 0x3B0, 0x3B1, 0x3B2, 0x3B3, 0x3B4, 0x3B5, 0x3B6, 0x3B7,
- 0x3B8, 0x3B9, 0x3BA, 0x3BB, 0x3BC, 0x3BD, 0x3BE, 0x3BF,
- 0x3C0, 0x3C1, 0x3C2, 0x3C3, 0x3C4, 0x3C5, 0x3C6, 0x3C7,
- 0x3C8, 0x3C9, 0x3CA, 0x3CB, 0x3CC, 0x3CD, 0x3CE, 0x3CF,
- 0x3D0, 0x3D1, 0x3D2, 0x3D3, 0x3D4, 0x3D5, 0x3D6, 0x3D7,
- 0x3D8, 0x3D9, 0x3DA, 0x3DB, 0x3DC, 0x3DD, 0x3DE, 0x3DF,
- 0x3E0, 0x3E1, 0x3E2, 0x3E3, 0x3E4, 0x3E5, 0x3E6, 0x3E7,
- 0x3E8, 0x3E9, 0x3EA, 0x3EB, 0x3EC, 0x3ED, 0x3EE, 0x3EF,
- 0x3F0, 0x3F1, 0x3F2, 0x3F3, 0x3F4, 0x3F5, 0x3F6, 0x3F7,
- 0x3F8, 0x3F9, 0x3FA, 0x3FB, 0x3FC, 0x3FD, 0x3FE, 0x3FF,
- 0x400, 0x401, 0x402, 0x403, 0x404, 0x405, 0x406, 0x407,
- 0x408, 0x409, 0x40A, 0x40B, 0x40C, 0x40D, 0x40E, 0x40F,
- 0x410, 0x411, 0x412, 0x413, 0x414, 0x415, 0x416, 0x417,
- 0x418, 0x419, 0x41A, 0x41B, 0x41C, 0x41D, 0x41E, 0x41F,
- 0x420, 0x421, 0x422, 0x423, 0x424, 0x425, 0x426, 0x427,
- 0x428, 0x429, 0x42A, 0x42B, 0x42C, 0x42D, 0x42E, 0x42F,
- 0x430, 0x431, 0x432, 0x433, 0x434, 0x435, 0x436, 0x437,
- 0x438, 0x439, 0x43A, 0x43B, 0x43C, 0x43D, 0x43E, 0x43F,
- 0x440, 0x441, 0x442, 0x443, 0x444, 0x445, 0x446, 0x447,
- 0x448, 0x449, 0x44A, 0x44B, 0x44C, 0x44D, 0x44E, 0x44F,
- 0x450, 0x451, 0x452, 0x453, 0x454, 0x455, 0x456, 0x457,
- 0x458, 0x459, 0x45A, 0x45B, 0x45C, 0x45D, 0x45E, 0x45F,
- 0x460, 0x461, 0x462, 0x463, 0x464, 0x465, 0x466, 0x467,
- 0x468, 0x469, 0x46A, 0x46B, 0x46C, 0x46D, 0x46E, 0x46F,
- 0x470, 0x471, 0x472, 0x473, 0x474, 0x475, 0x476, 0x477,
- 0x478, 0x479, 0x47A, 0x47B, 0x47C, 0x47D, 0x47E, 0x47F,
- 0x480, 0x481, 0x482, 0x483, 0x484, 0x485, 0x486, 0x487,
- 0x488, 0x489, 0x48A, 0x48B, 0x48C, 0x48D, 0x48E, 0x48F,
- 0x490, 0x491, 0x492, 0x493, 0x494, 0x495, 0x496, 0x497,
- 0x498, 0x499, 0x49A, 0x49B, 0x49C, 0x49D, 0x49E, 0x49F,
- 0x4A0, 0x4A1, 0x4A2, 0x4A3, 0x4A4, 0x4A5, 0x4A6, 0x4A7,
- 0x4A8, 0x4A9, 0x4AA, 0x4AB, 0x4AC, 0x4AD, 0x4AE, 0x4AF,
- 0x4B0, 0x4B1, 0x4B2, 0x4B3, 0x4B4, 0x4B5, 0x4B6, 0x4B7,
- 0x4B8, 0x4B9, 0x4BA, 0x4BB, 0x4BC, 0x4BD, 0x4BE, 0x4BF,
- 0x4C0, 0x4C1, 0x4C2, 0x4C3, 0x4C4, 0x4C5, 0x4C6, 0x4C7,
- 0x4C8, 0x4C9, 0x4CA, 0x4CB, 0x4CC, 0x4CD, 0x4CE, 0x4CF,
- 0x4D0, 0x4D1, 0x4D2, 0x4D3, 0x4D4, 0x4D5, 0x4D6, 0x4D7,
- 0x4D8, 0x4D9, 0x4DA, 0x4DB, 0x4DC, 0x4DD, 0x4DE, 0x4DF,
- 0x4E0, 0x4E1, 0x4E2, 0x4E3, 0x4E4, 0x4E5, 0x4E6, 0x4E7,
- 0x4E8, 0x4E9, 0x4EA, 0x4EB, 0x4EC, 0x4ED, 0x4EE, 0x4EF,
- 0x4F0, 0x4F1, 0x4F2, 0x4F3, 0x4F4, 0x4F5, 0x4F6, 0x4F7,
- 0x4F8, 0x4F9, 0x4FA, 0x4FB, 0x4FC, 0x4FD, 0x4FE, 0x4FF,
- 0x500, 0x501, 0x502, 0x503, 0x504, 0x505, 0x506, 0x507,
- 0x508, 0x509, 0x50A, 0x50B, 0x50C, 0x50D, 0x50E, 0x50F,
- 0x510, 0x511, 0x512, 0x513, 0x514, 0x515, 0x516, 0x517,
- 0x518, 0x519, 0x51A, 0x51B, 0x51C, 0x51D, 0x51E, 0x51F,
- 0x520, 0x521, 0x522, 0x523, 0x524, 0x525, 0x526, 0x527,
- 0x528, 0x529, 0x52A, 0x52B, 0x52C, 0x52D, 0x52E, 0x52F,
- 0x530, 0x531, 0x532, 0x533, 0x534, 0x535, 0x536, 0x537,
- 0x538, 0x539, 0x53A, 0x53B, 0x53C, 0x53D, 0x53E, 0x53F,
- 0x540, 0x541, 0x542, 0x543, 0x544, 0x545, 0x546, 0x547,
- 0x548, 0x549, 0x54A, 0x54B, 0x54C, 0x54D, 0x54E, 0x54F,
- 0x550, 0x551, 0x552, 0x553, 0x554, 0x555, 0x556, 0x557,
- 0x558, 0x559, 0x55A, 0x55B, 0x55C, 0x55D, 0x55E, 0x55F,
- 0x560, 0x561, 0x562, 0x563, 0x564, 0x565, 0x566, 0x567,
- 0x568, 0x569, 0x56A, 0x56B, 0x56C, 0x56D, 0x56E, 0x56F,
- 0x570, 0x571, 0x572, 0x573, 0x574, 0x575, 0x576, 0x577,
- 0x578, 0x579, 0x57A, 0x57B, 0x57C, 0x57D, 0x57E, 0x57F,
- 0x580, 0x581, 0x582, 0x583, 0x584, 0x585, 0x586, 0x587,
- 0x588, 0x589, 0x58A, 0x58B, 0x58C, 0x58D, 0x58E, 0x58F,
- 0x590, 0x591, 0x592, 0x593, 0x594, 0x595, 0x596, 0x597,
- 0x598, 0x599, 0x59A, 0x59B, 0x59C, 0x59D, 0x59E, 0x59F,
- 0x5A0, 0x5A1, 0x5A2, 0x5A3, 0x5A4, 0x5A5, 0x5A6, 0x5A7,
- 0x5A8, 0x5A9, 0x5AA, 0x5AB, 0x5AC, 0x5AD, 0x5AE, 0x5AF,
- 0x5B0, 0x5B1, 0x5B2, 0x5B3, 0x5B4, 0x5B5, 0x5B6, 0x5B7,
- 0x5B8, 0x5B9, 0x5BA, 0x5BB, 0x5BC, 0x5BD, 0x5BE, 0x5BF,
- 0x5C0, 0x5C1, 0x5C2, 0x5C3, 0x5C4, 0x5C5, 0x5C6, 0x5C7,
- 0x5C8, 0x5C9, 0x5CA, 0x5CB, 0x5CC, 0x5CD, 0x5CE, 0x5CF,
- 0x5D0, 0x5D1, 0x5D2, 0x5D3, 0x5D4, 0x5D5, 0x5D6, 0x5D7,
- 0x5D8, 0x5D9, 0x5DA, 0x5DB, 0x5DC, 0x5DD, 0x5DE, 0x5DF,
- 0x5E0, 0x5E1, 0x5E2, 0x5E3, 0x5E4, 0x5E5, 0x5E6, 0x5E7,
- 0x5E8, 0x5E9, 0x5EA, 0x5EB, 0x5EC, 0x5ED, 0x5EE, 0x5EF,
- 0x5F0, 0x5F1, 0x5F2, 0x5F3, 0x5F4, 0x5F5, 0x5F6, 0x5F7,
- 0x5F8, 0x5F9, 0x5FA, 0x5FB, 0x5FC, 0x5FD, 0x5FE, 0x5FF,
- 0x600, 0x601, 0x602, 0x603, 0x604, 0x605, 0x606, 0x607,
- 0x608, 0x609, 0x60A, 0x60B, 0x60C, 0x60D, 0x60E, 0x60F,
- 0x610, 0x611, 0x612, 0x613, 0x614, 0x615, 0x616, 0x617,
- 0x618, 0x619, 0x61A, 0x61B, 0x61C, 0x61D, 0x61E, 0x61F,
- 0x620, 0x621, 0x622, 0x623, 0x624, 0x625, 0x626, 0x627,
- 0x628, 0x629, 0x62A, 0x62B, 0x62C, 0x62D, 0x62E, 0x62F,
- 0x630, 0x631, 0x632, 0x633, 0x634, 0x635, 0x636, 0x637,
- 0x638, 0x639, 0x63A, 0x63B, 0x63C, 0x63D, 0x63E, 0x63F,
- 0x640, 0x641, 0x642, 0x643, 0x644, 0x645, 0x646, 0x647,
- 0x648, 0x649, 0x64A, 0x64B, 0x64C, 0x64D, 0x64E, 0x64F,
- 0x650, 0x651, 0x652, 0x653, 0x654, 0x655, 0x656, 0x657,
- 0x658, 0x659, 0x65A, 0x65B, 0x65C, 0x65D, 0x65E, 0x65F,
- 0x660, 0x661, 0x662, 0x663, 0x664, 0x665, 0x666, 0x667,
- 0x668, 0x669, 0x66A, 0x66B, 0x66C, 0x66D, 0x66E, 0x66F,
- 0x670, 0x671, 0x672, 0x673, 0x674, 0x675, 0x676, 0x677,
- 0x678, 0x679, 0x67A, 0x67B, 0x67C, 0x67D, 0x67E, 0x67F,
- 0x680, 0x681, 0x682, 0x683, 0x684, 0x685, 0x686, 0x687,
- 0x688, 0x689, 0x68A, 0x68B, 0x68C, 0x68D, 0x68E, 0x68F,
- 0x690, 0x691, 0x692, 0x693, 0x694, 0x695, 0x696, 0x697,
- 0x698, 0x699, 0x69A, 0x69B, 0x69C, 0x69D, 0x69E, 0x69F,
- 0x6A0, 0x6A1, 0x6A2, 0x6A3, 0x6A4, 0x6A5, 0x6A6, 0x6A7,
- 0x6A8, 0x6A9, 0x6AA, 0x6AB, 0x6AC, 0x6AD, 0x6AE, 0x6AF,
- 0x6B0, 0x6B1, 0x6B2, 0x6B3, 0x6B4, 0x6B5, 0x6B6, 0x6B7,
- 0x6B8, 0x6B9, 0x6BA, 0x6BB, 0x6BC, 0x6BD, 0x6BE, 0x6BF,
- 0x6C0, 0x6C1, 0x6C2, 0x6C3, 0x6C4, 0x6C5, 0x6C6, 0x6C7,
- 0x6C8, 0x6C9, 0x6CA, 0x6CB, 0x6CC, 0x6CD, 0x6CE, 0x6CF,
- 0x6D0, 0x6D1, 0x6D2, 0x6D3, 0x6D4, 0x6D5, 0x6D6, 0x6D7,
- 0x6D8, 0x6D9, 0x6DA, 0x6DB, 0x6DC, 0x6DD, 0x6DE, 0x6DF,
- 0x6E0, 0x6E1, 0x6E2, 0x6E3, 0x6E4, 0x6E5, 0x6E6, 0x6E7,
- 0x6E8, 0x6E9, 0x6EA, 0x6EB, 0x6EC, 0x6ED, 0x6EE, 0x6EF,
- 0x6F0, 0x6F1, 0x6F2, 0x6F3, 0x6F4, 0x6F5, 0x6F6, 0x6F7,
- 0x6F8, 0x6F9, 0x6FA, 0x6FB, 0x6FC, 0x6FD, 0x6FE, 0x6FF,
- 0x700, 0x701, 0x702, 0x703, 0x704, 0x705, 0x706, 0x707,
- 0x708, 0x709, 0x70A, 0x70B, 0x70C, 0x70D, 0x70E, 0x70F,
- 0x710, 0x711, 0x712, 0x713, 0x714, 0x715, 0x716, 0x717,
- 0x718, 0x719, 0x71A, 0x71B, 0x71C, 0x71D, 0x71E, 0x71F,
- 0x720, 0x721, 0x722, 0x723, 0x724, 0x725, 0x726, 0x727,
- 0x728, 0x729, 0x72A, 0x72B, 0x72C, 0x72D, 0x72E, 0x72F,
- 0x730, 0x731, 0x732, 0x733, 0x734, 0x735, 0x736, 0x737,
- 0x738, 0x739, 0x73A, 0x73B, 0x73C, 0x73D, 0x73E, 0x73F,
- 0x740, 0x741, 0x742, 0x743, 0x744, 0x745, 0x746, 0x747,
- 0x748, 0x749, 0x74A, 0x74B, 0x74C, 0x74D, 0x74E, 0x74F,
- 0x750, 0x751, 0x752, 0x753, 0x754, 0x755, 0x756, 0x757,
- 0x758, 0x759, 0x75A, 0x75B, 0x75C, 0x75D, 0x75E, 0x75F,
- 0x760, 0x761, 0x762, 0x763, 0x764, 0x765, 0x766, 0x767,
- 0x768, 0x769, 0x76A, 0x76B, 0x76C, 0x76D, 0x76E, 0x76F,
- 0x770, 0x771, 0x772, 0x773, 0x774, 0x775, 0x776, 0x777,
- 0x778, 0x779, 0x77A, 0x77B, 0x77C, 0x77D, 0x77E, 0x77F,
- 0x780, 0x781, 0x782, 0x783, 0x784, 0x785, 0x786, 0x787,
- 0x788, 0x789, 0x78A, 0x78B, 0x78C, 0x78D, 0x78E, 0x78F,
- 0x790, 0x791, 0x792, 0x793, 0x794, 0x795, 0x796, 0x797,
- 0x798, 0x799, 0x79A, 0x79B, 0x79C, 0x79D, 0x79E, 0x79F,
- 0x7A0, 0x7A1, 0x7A2, 0x7A3, 0x7A4, 0x7A5, 0x7A6, 0x7A7,
- 0x7A8, 0x7A9, 0x7AA, 0x7AB, 0x7AC, 0x7AD, 0x7AE, 0x7AF,
- 0x7B0, 0x7B1, 0x7B2, 0x7B3, 0x7B4, 0x7B5, 0x7B6, 0x7B7,
- 0x7B8, 0x7B9, 0x7BA, 0x7BB, 0x7BC, 0x7BD, 0x7BE, 0x7BF,
- 0x7C0, 0x7C1, 0x7C2, 0x7C3, 0x7C4, 0x7C5, 0x7C6, 0x7C7,
- 0x7C8, 0x7C9, 0x7CA, 0x7CB, 0x7CC, 0x7CD, 0x7CE, 0x7CF,
- 0x7D0, 0x7D1, 0x7D2, 0x7D3, 0x7D4, 0x7D5, 0x7D6, 0x7D7,
- 0x7D8, 0x7D9, 0x7DA, 0x7DB, 0x7DC, 0x7DD, 0x7DE, 0x7DF,
- 0x7E0, 0x7E1, 0x7E2, 0x7E3, 0x7E4, 0x7E5, 0x7E6, 0x7E7,
- 0x7E8, 0x7E9, 0x7EA, 0x7EB, 0x7EC, 0x7ED, 0x7EE, 0x7EF,
- 0x7F0, 0x7F1, 0x7F2, 0x7F3, 0x7F4, 0x7F5, 0x7F6, 0x7F7,
- 0x7F8, 0x7F9, 0x7FA, 0x7FB, 0x7FC, 0x7FD, 0x7FE, 0x7FF,
- 0x800, 0x801, 0x802, 0x803, 0x804, 0x805, 0x806, 0x807,
- 0x808, 0x809, 0x80A, 0x80B, 0x80C, 0x80D, 0x80E, 0x80F,
- 0x810, 0x811, 0x812, 0x813, 0x814, 0x815, 0x816, 0x817,
- 0x818, 0x819, 0x81A, 0x81B, 0x81C, 0x81D, 0x81E, 0x81F,
- 0x820, 0x821, 0x822, 0x823, 0x824, 0x825, 0x826, 0x827,
- 0x828, 0x829, 0x82A, 0x82B, 0x82C, 0x82D, 0x82E, 0x82F,
- 0x830, 0x831, 0x832, 0x833, 0x834, 0x835, 0x836, 0x837,
- 0x838, 0x839, 0x83A, 0x83B, 0x83C, 0x83D, 0x83E, 0x83F,
- 0x840, 0x841, 0x842, 0x843, 0x844, 0x845, 0x846, 0x847,
- 0x848, 0x849, 0x84A, 0x84B, 0x84C, 0x84D, 0x84E, 0x84F,
- 0x850, 0x851, 0x852, 0x853, 0x854, 0x855, 0x856, 0x857,
- 0x858, 0x859, 0x85A, 0x85B, 0x85C, 0x85D, 0x85E, 0x85F,
- 0x860, 0x861, 0x862, 0x863, 0x864, 0x865, 0x866, 0x867,
- 0x868, 0x869, 0x86A, 0x86B, 0x86C, 0x86D, 0x86E, 0x86F,
- 0x870, 0x871, 0x872, 0x873, 0x874, 0x875, 0x876, 0x877,
- 0x878, 0x879, 0x87A, 0x87B, 0x87C, 0x87D, 0x87E, 0x87F,
- 0x880, 0x881, 0x882, 0x883, 0x884, 0x885, 0x886, 0x887,
- 0x888, 0x889, 0x88A, 0x88B, 0x88C, 0x88D, 0x88E, 0x88F,
- 0x890, 0x891, 0x892, 0x893, 0x894, 0x895, 0x896, 0x897,
- 0x898, 0x899, 0x89A, 0x89B, 0x89C, 0x89D, 0x89E, 0x89F,
- 0x8A0, 0x8A1, 0x8A2, 0x8A3, 0x8A4, 0x8A5, 0x8A6, 0x8A7,
- 0x8A8, 0x8A9, 0x8AA, 0x8AB, 0x8AC, 0x8AD, 0x8AE, 0x8AF,
- 0x8B0, 0x8B1, 0x8B2, 0x8B3, 0x8B4, 0x8B5, 0x8B6, 0x8B7,
- 0x8B8, 0x8B9, 0x8BA, 0x8BB, 0x8BC, 0x8BD, 0x8BE, 0x8BF,
- 0x8C0, 0x8C1, 0x8C2, 0x8C3, 0x8C4, 0x8C5, 0x8C6, 0x8C7,
- 0x8C8, 0x8C9, 0x8CA, 0x8CB, 0x8CC, 0x8CD, 0x8CE, 0x8CF,
- 0x8D0, 0x8D1, 0x8D2, 0x8D3, 0x8D4, 0x8D5, 0x8D6, 0x8D7,
- 0x8D8, 0x8D9, 0x8DA, 0x8DB, 0x8DC, 0x8DD, 0x8DE, 0x8DF,
- 0x8E0, 0x8E1, 0x8E2, 0x8E3, 0x8E4, 0x8E5, 0x8E6, 0x8E7,
- 0x8E8, 0x8E9, 0x8EA, 0x8EB, 0x8EC, 0x8ED, 0x8EE, 0x8EF,
- 0x8F0, 0x8F1, 0x8F2, 0x8F3, 0x8F4, 0x8F5, 0x8F6, 0x8F7,
- 0x8F8, 0x8F9, 0x8FA, 0x8FB, 0x8FC, 0x8FD, 0x8FE, 0x8FF,
- 0x900, 0x901, 0x902, 0x903, 0x904, 0x905, 0x906, 0x907,
- 0x908, 0x909, 0x90A, 0x90B, 0x90C, 0x90D, 0x90E, 0x90F,
- 0x910, 0x911, 0x912, 0x913, 0x914, 0x915, 0x916, 0x917,
- 0x918, 0x919, 0x91A, 0x91B, 0x91C, 0x91D, 0x91E, 0x91F,
- 0x920, 0x921, 0x922, 0x923, 0x924, 0x925, 0x926, 0x927,
- 0x928, 0x929, 0x92A, 0x92B, 0x92C, 0x92D, 0x92E, 0x92F,
- 0x930, 0x931, 0x932, 0x933, 0x934, 0x935, 0x936, 0x937,
- 0x938, 0x939, 0x93A, 0x93B, 0x93C, 0x93D, 0x93E, 0x93F,
- 0x940, 0x941, 0x942, 0x943, 0x944, 0x945, 0x946, 0x947,
- 0x948, 0x949, 0x94A, 0x94B, 0x94C, 0x94D, 0x94E, 0x94F,
- 0x950, 0x951, 0x952, 0x953, 0x954, 0x955, 0x956, 0x957,
- 0x958, 0x959, 0x95A, 0x95B, 0x95C, 0x95D, 0x95E, 0x95F,
- 0x960, 0x961, 0x962, 0x963, 0x964, 0x965, 0x966, 0x967,
- 0x968, 0x969, 0x96A, 0x96B, 0x96C, 0x96D, 0x96E, 0x96F,
- 0x970, 0x971, 0x972, 0x973, 0x974, 0x975, 0x976, 0x977,
- 0x978, 0x979, 0x97A, 0x97B, 0x97C, 0x97D, 0x97E, 0x97F,
- 0x980, 0x981, 0x982, 0x983, 0x984, 0x985, 0x986, 0x987,
- 0x988, 0x989, 0x98A, 0x98B, 0x98C, 0x98D, 0x98E, 0x98F,
- 0x990, 0x991, 0x992, 0x993, 0x994, 0x995, 0x996, 0x997,
- 0x998, 0x999, 0x99A, 0x99B, 0x99C, 0x99D, 0x99E, 0x99F,
- 0x9A0, 0x9A1, 0x9A2, 0x9A3, 0x9A4, 0x9A5, 0x9A6, 0x9A7,
- 0x9A8, 0x9A9, 0x9AA, 0x9AB, 0x9AC, 0x9AD, 0x9AE, 0x9AF,
- 0x9B0, 0x9B1, 0x9B2, 0x9B3, 0x9B4, 0x9B5, 0x9B6, 0x9B7,
- 0x9B8, 0x9B9, 0x9BA, 0x9BB, 0x9BC, 0x9BD, 0x9BE, 0x9BF,
- 0x9C0, 0x9C1, 0x9C2, 0x9C3, 0x9C4, 0x9C5, 0x9C6, 0x9C7,
- 0x9C8, 0x9C9, 0x9CA, 0x9CB, 0x9CC, 0x9CD, 0x9CE, 0x9CF,
- 0x9D0, 0x9D1, 0x9D2, 0x9D3, 0x9D4, 0x9D5, 0x9D6, 0x9D7,
- 0x9D8, 0x9D9, 0x9DA, 0x9DB, 0x9DC, 0x9DD, 0x9DE, 0x9DF,
- 0x9E0, 0x9E1, 0x9E2, 0x9E3, 0x9E4, 0x9E5, 0x9E6, 0x9E7,
- 0x9E8, 0x9E9, 0x9EA, 0x9EB, 0x9EC, 0x9ED, 0x9EE, 0x9EF,
- 0x9F0, 0x9F1, 0x9F2, 0x9F3, 0x9F4, 0x9F5, 0x9F6, 0x9F7,
- 0x9F8, 0x9F9, 0x9FA, 0x9FB, 0x9FC, 0x9FD, 0x9FE, 0x9FF,
- 0xA00, 0xA01, 0xA02, 0xA03, 0xA04, 0xA05, 0xA06, 0xA07,
- 0xA08, 0xA09, 0xA0A, 0xA0B, 0xA0C, 0xA0D, 0xA0E, 0xA0F,
- 0xA10, 0xA11, 0xA12, 0xA13, 0xA14, 0xA15, 0xA16, 0xA17,
- 0xA18, 0xA19, 0xA1A, 0xA1B, 0xA1C, 0xA1D, 0xA1E, 0xA1F,
- 0xA20, 0xA21, 0xA22, 0xA23, 0xA24, 0xA25, 0xA26, 0xA27,
- 0xA28, 0xA29, 0xA2A, 0xA2B, 0xA2C, 0xA2D, 0xA2E, 0xA2F,
- 0xA30, 0xA31, 0xA32, 0xA33, 0xA34, 0xA35, 0xA36, 0xA37,
- 0xA38, 0xA39, 0xA3A, 0xA3B, 0xA3C, 0xA3D, 0xA3E, 0xA3F,
- 0xA40, 0xA41, 0xA42, 0xA43, 0xA44, 0xA45, 0xA46, 0xA47,
- 0xA48, 0xA49, 0xA4A, 0xA4B, 0xA4C, 0xA4D, 0xA4E, 0xA4F,
- 0xA50, 0xA51, 0xA52, 0xA53, 0xA54, 0xA55, 0xA56, 0xA57,
- 0xA58, 0xA59, 0xA5A, 0xA5B, 0xA5C, 0xA5D, 0xA5E, 0xA5F,
- 0xA60, 0xA61, 0xA62, 0xA63, 0xA64, 0xA65, 0xA66, 0xA67,
- 0xA68, 0xA69, 0xA6A, 0xA6B, 0xA6C, 0xA6D, 0xA6E, 0xA6F,
- 0xA70, 0xA71, 0xA72, 0xA73, 0xA74, 0xA75, 0xA76, 0xA77,
- 0xA78, 0xA79, 0xA7A, 0xA7B, 0xA7C, 0xA7D, 0xA7E, 0xA7F,
- 0xA80, 0xA81, 0xA82, 0xA83, 0xA84, 0xA85, 0xA86, 0xA87,
- 0xA88, 0xA89, 0xA8A, 0xA8B, 0xA8C, 0xA8D, 0xA8E, 0xA8F,
- 0xA90, 0xA91, 0xA92, 0xA93, 0xA94, 0xA95, 0xA96, 0xA97,
- 0xA98, 0xA99, 0xA9A, 0xA9B, 0xA9C, 0xA9D, 0xA9E, 0xA9F,
- 0xAA0, 0xAA1, 0xAA2, 0xAA3, 0xAA4, 0xAA5, 0xAA6, 0xAA7,
- 0xAA8, 0xAA9, 0xAAA, 0xAAB, 0xAAC, 0xAAD, 0xAAE, 0xAAF,
- 0xAB0, 0xAB1, 0xAB2, 0xAB3, 0xAB4, 0xAB5, 0xAB6, 0xAB7,
- 0xAB8, 0xAB9, 0xABA, 0xABB, 0xABC, 0xABD, 0xABE, 0xABF,
- 0xAC0, 0xAC1, 0xAC2, 0xAC3, 0xAC4, 0xAC5, 0xAC6, 0xAC7,
- 0xAC8, 0xAC9, 0xACA, 0xACB, 0xACC, 0xACD, 0xACE, 0xACF,
- 0xAD0, 0xAD1, 0xAD2, 0xAD3, 0xAD4, 0xAD5, 0xAD6, 0xAD7,
- 0xAD8, 0xAD9, 0xADA, 0xADB, 0xADC, 0xADD, 0xADE, 0xADF,
- 0xAE0, 0xAE1, 0xAE2, 0xAE3, 0xAE4, 0xAE5, 0xAE6, 0xAE7,
- 0xAE8, 0xAE9, 0xAEA, 0xAEB, 0xAEC, 0xAED, 0xAEE, 0xAEF,
- 0xAF0, 0xAF1, 0xAF2, 0xAF3, 0xAF4, 0xAF5, 0xAF6, 0xAF7,
- 0xAF8, 0xAF9, 0xAFA, 0xAFB, 0xAFC, 0xAFD, 0xAFE, 0xAFF,
- 0xB00, 0xB01, 0xB02, 0xB03, 0xB04, 0xB05, 0xB06, 0xB07,
- 0xB08, 0xB09, 0xB0A, 0xB0B, 0xB0C, 0xB0D, 0xB0E, 0xB0F,
- 0xB10, 0xB11, 0xB12, 0xB13, 0xB14, 0xB15, 0xB16, 0xB17,
- 0xB18, 0xB19, 0xB1A, 0xB1B, 0xB1C, 0xB1D, 0xB1E, 0xB1F,
- 0xB20, 0xB21, 0xB22, 0xB23, 0xB24, 0xB25, 0xB26, 0xB27,
- 0xB28, 0xB29, 0xB2A, 0xB2B, 0xB2C, 0xB2D, 0xB2E, 0xB2F,
- 0xB30, 0xB31, 0xB32, 0xB33, 0xB34, 0xB35, 0xB36, 0xB37,
- 0xB38, 0xB39, 0xB3A, 0xB3B, 0xB3C, 0xB3D, 0xB3E, 0xB3F,
- 0xB40, 0xB41, 0xB42, 0xB43, 0xB44, 0xB45, 0xB46, 0xB47,
- 0xB48, 0xB49, 0xB4A, 0xB4B, 0xB4C, 0xB4D, 0xB4E, 0xB4F,
- 0xB50, 0xB51, 0xB52, 0xB53, 0xB54, 0xB55, 0xB56, 0xB57,
- 0xB58, 0xB59, 0xB5A, 0xB5B, 0xB5C, 0xB5D, 0xB5E, 0xB5F,
- 0xB60, 0xB61, 0xB62, 0xB63, 0xB64, 0xB65, 0xB66, 0xB67,
- 0xB68, 0xB69, 0xB6A, 0xB6B, 0xB6C, 0xB6D, 0xB6E, 0xB6F,
- 0xB70, 0xB71, 0xB72, 0xB73, 0xB74, 0xB75, 0xB76, 0xB77,
- 0xB78, 0xB79, 0xB7A, 0xB7B, 0xB7C, 0xB7D, 0xB7E, 0xB7F,
- 0xB80, 0xB81, 0xB82, 0xB83, 0xB84, 0xB85, 0xB86, 0xB87,
- 0xB88, 0xB89, 0xB8A, 0xB8B, 0xB8C, 0xB8D, 0xB8E, 0xB8F,
- 0xB90, 0xB91, 0xB92, 0xB93, 0xB94, 0xB95, 0xB96, 0xB97,
- 0xB98, 0xB99, 0xB9A, 0xB9B, 0xB9C, 0xB9D, 0xB9E, 0xB9F,
- 0xBA0, 0xBA1, 0xBA2, 0xBA3, 0xBA4, 0xBA5, 0xBA6, 0xBA7,
- 0xBA8, 0xBA9, 0xBAA, 0xBAB, 0xBAC, 0xBAD, 0xBAE, 0xBAF,
- 0xBB0, 0xBB1, 0xBB2, 0xBB3, 0xBB4, 0xBB5, 0xBB6, 0xBB7,
- 0xBB8, 0xBB9, 0xBBA, 0xBBB, 0xBBC, 0xBBD, 0xBBE, 0xBBF,
- 0xBC0, 0xBC1, 0xBC2, 0xBC3, 0xBC4, 0xBC5, 0xBC6, 0xBC7,
- 0xBC8, 0xBC9, 0xBCA, 0xBCB, 0xBCC, 0xBCD, 0xBCE, 0xBCF,
- 0xBD0, 0xBD1, 0xBD2, 0xBD3, 0xBD4, 0xBD5, 0xBD6, 0xBD7,
- 0xBD8, 0xBD9, 0xBDA, 0xBDB, 0xBDC, 0xBDD, 0xBDE, 0xBDF,
- 0xBE0, 0xBE1, 0xBE2, 0xBE3, 0xBE4, 0xBE5, 0xBE6, 0xBE7,
- 0xBE8, 0xBE9, 0xBEA, 0xBEB, 0xBEC, 0xBED, 0xBEE, 0xBEF,
- 0xBF0, 0xBF1, 0xBF2, 0xBF3, 0xBF4, 0xBF5, 0xBF6, 0xBF7,
- 0xBF8, 0xBF9, 0xBFA, 0xBFB, 0xBFC, 0xBFD, 0xBFE, 0xBFF,
- 0xC00, 0xC01, 0xC02, 0xC03, 0xC04, 0xC05, 0xC06, 0xC07,
- 0xC08, 0xC09, 0xC0A, 0xC0B, 0xC0C, 0xC0D, 0xC0E, 0xC0F,
- 0xC10, 0xC11, 0xC12, 0xC13, 0xC14, 0xC15, 0xC16, 0xC17,
- 0xC18, 0xC19, 0xC1A, 0xC1B, 0xC1C, 0xC1D, 0xC1E, 0xC1F,
- 0xC20, 0xC21, 0xC22, 0xC23, 0xC24, 0xC25, 0xC26, 0xC27,
- 0xC28, 0xC29, 0xC2A, 0xC2B, 0xC2C, 0xC2D, 0xC2E, 0xC2F,
- 0xC30, 0xC31, 0xC32, 0xC33, 0xC34, 0xC35, 0xC36, 0xC37,
- 0xC38, 0xC39, 0xC3A, 0xC3B, 0xC3C, 0xC3D, 0xC3E, 0xC3F,
- 0xC40, 0xC41, 0xC42, 0xC43, 0xC44, 0xC45, 0xC46, 0xC47,
- 0xC48, 0xC49, 0xC4A, 0xC4B, 0xC4C, 0xC4D, 0xC4E, 0xC4F,
- 0xC50, 0xC51, 0xC52, 0xC53, 0xC54, 0xC55, 0xC56, 0xC57,
- 0xC58, 0xC59, 0xC5A, 0xC5B, 0xC5C, 0xC5D, 0xC5E, 0xC5F,
- 0xC60, 0xC61, 0xC62, 0xC63, 0xC64, 0xC65, 0xC66, 0xC67,
- 0xC68, 0xC69, 0xC6A, 0xC6B, 0xC6C, 0xC6D, 0xC6E, 0xC6F,
- 0xC70, 0xC71, 0xC72, 0xC73, 0xC74, 0xC75, 0xC76, 0xC77,
- 0xC78, 0xC79, 0xC7A, 0xC7B, 0xC7C, 0xC7D, 0xC7E, 0xC7F,
- 0xC80, 0xC81, 0xC82, 0xC83, 0xC84, 0xC85, 0xC86, 0xC87,
- 0xC88, 0xC89, 0xC8A, 0xC8B, 0xC8C, 0xC8D, 0xC8E, 0xC8F,
- 0xC90, 0xC91, 0xC92, 0xC93, 0xC94, 0xC95, 0xC96, 0xC97,
- 0xC98, 0xC99, 0xC9A, 0xC9B, 0xC9C, 0xC9D, 0xC9E, 0xC9F,
- 0xCA0, 0xCA1, 0xCA2, 0xCA3, 0xCA4, 0xCA5, 0xCA6, 0xCA7,
- 0xCA8, 0xCA9, 0xCAA, 0xCAB, 0xCAC, 0xCAD, 0xCAE, 0xCAF,
- 0xCB0, 0xCB1, 0xCB2, 0xCB3, 0xCB4, 0xCB5, 0xCB6, 0xCB7,
- 0xCB8, 0xCB9, 0xCBA, 0xCBB, 0xCBC, 0xCBD, 0xCBE, 0xCBF,
- 0xCC0, 0xCC1, 0xCC2, 0xCC3, 0xCC4, 0xCC5, 0xCC6, 0xCC7,
- 0xCC8, 0xCC9, 0xCCA, 0xCCB, 0xCCC, 0xCCD, 0xCCE, 0xCCF,
- 0xCD0, 0xCD1, 0xCD2, 0xCD3, 0xCD4, 0xCD5, 0xCD6, 0xCD7,
- 0xCD8, 0xCD9, 0xCDA, 0xCDB, 0xCDC, 0xCDD, 0xCDE, 0xCDF,
- 0xCE0, 0xCE1, 0xCE2, 0xCE3, 0xCE4, 0xCE5, 0xCE6, 0xCE7,
- 0xCE8, 0xCE9, 0xCEA, 0xCEB, 0xCEC, 0xCED, 0xCEE, 0xCEF,
- 0xCF0, 0xCF1, 0xCF2, 0xCF3, 0xCF4, 0xCF5, 0xCF6, 0xCF7,
- 0xCF8, 0xCF9, 0xCFA, 0xCFB, 0xCFC, 0xCFD, 0xCFE, 0xCFF,
- 0xD00, 0xD01, 0xD02, 0xD03, 0xD04, 0xD05, 0xD06, 0xD07,
- 0xD08, 0xD09, 0xD0A, 0xD0B, 0xD0C, 0xD0D, 0xD0E, 0xD0F,
- 0xD10, 0xD11, 0xD12, 0xD13, 0xD14, 0xD15, 0xD16, 0xD17,
- 0xD18, 0xD19, 0xD1A, 0xD1B, 0xD1C, 0xD1D, 0xD1E, 0xD1F,
- 0xD20, 0xD21, 0xD22, 0xD23, 0xD24, 0xD25, 0xD26, 0xD27,
- 0xD28, 0xD29, 0xD2A, 0xD2B, 0xD2C, 0xD2D, 0xD2E, 0xD2F,
- 0xD30, 0xD31, 0xD32, 0xD33, 0xD34, 0xD35, 0xD36, 0xD37,
- 0xD38, 0xD39, 0xD3A, 0xD3B, 0xD3C, 0xD3D, 0xD3E, 0xD3F,
- 0xD40, 0xD41, 0xD42, 0xD43, 0xD44, 0xD45, 0xD46, 0xD47,
- 0xD48, 0xD49, 0xD4A, 0xD4B, 0xD4C, 0xD4D, 0xD4E, 0xD4F,
- 0xD50, 0xD51, 0xD52, 0xD53, 0xD54, 0xD55, 0xD56, 0xD57,
- 0xD58, 0xD59, 0xD5A, 0xD5B, 0xD5C, 0xD5D, 0xD5E, 0xD5F,
- 0xD60, 0xD61, 0xD62, 0xD63, 0xD64, 0xD65, 0xD66, 0xD67,
- 0xD68, 0xD69, 0xD6A, 0xD6B, 0xD6C, 0xD6D, 0xD6E, 0xD6F,
- 0xD70, 0xD71, 0xD72, 0xD73, 0xD74, 0xD75, 0xD76, 0xD77,
- 0xD78, 0xD79, 0xD7A, 0xD7B, 0xD7C, 0xD7D, 0xD7E, 0xD7F,
- 0xD80, 0xD81, 0xD82, 0xD83, 0xD84, 0xD85, 0xD86, 0xD87,
- 0xD88, 0xD89, 0xD8A, 0xD8B, 0xD8C, 0xD8D, 0xD8E, 0xD8F,
- 0xD90, 0xD91, 0xD92, 0xD93, 0xD94, 0xD95, 0xD96, 0xD97,
- 0xD98, 0xD99, 0xD9A, 0xD9B, 0xD9C, 0xD9D, 0xD9E, 0xD9F,
- 0xDA0, 0xDA1, 0xDA2, 0xDA3, 0xDA4, 0xDA5, 0xDA6, 0xDA7,
- 0xDA8, 0xDA9, 0xDAA, 0xDAB, 0xDAC, 0xDAD, 0xDAE, 0xDAF,
- 0xDB0, 0xDB1, 0xDB2, 0xDB3, 0xDB4, 0xDB5, 0xDB6, 0xDB7,
- 0xDB8, 0xDB9, 0xDBA, 0xDBB, 0xDBC, 0xDBD, 0xDBE, 0xDBF,
- 0xDC0, 0xDC1, 0xDC2, 0xDC3, 0xDC4, 0xDC5, 0xDC6, 0xDC7,
- 0xDC8, 0xDC9, 0xDCA, 0xDCB, 0xDCC, 0xDCD, 0xDCE, 0xDCF,
- 0xDD0, 0xDD1, 0xDD2, 0xDD3, 0xDD4, 0xDD5, 0xDD6, 0xDD7,
- 0xDD8, 0xDD9, 0xDDA, 0xDDB, 0xDDC, 0xDDD, 0xDDE, 0xDDF,
- 0xDE0, 0xDE1, 0xDE2, 0xDE3, 0xDE4, 0xDE5, 0xDE6, 0xDE7,
- 0xDE8, 0xDE9, 0xDEA, 0xDEB, 0xDEC, 0xDED, 0xDEE, 0xDEF,
- 0xDF0, 0xDF1, 0xDF2, 0xDF3, 0xDF4, 0xDF5, 0xDF6, 0xDF7,
- 0xDF8, 0xDF9, 0xDFA, 0xDFB, 0xDFC, 0xDFD, 0xDFE, 0xDFF,
- 0xE00, 0xE01, 0xE02, 0xE03, 0xE04, 0xE05, 0xE06, 0xE07,
- 0xE08, 0xE09, 0xE0A, 0xE0B, 0xE0C, 0xE0D, 0xE0E, 0xE0F,
- 0xE10, 0xE11, 0xE12, 0xE13, 0xE14, 0xE15, 0xE16, 0xE17,
- 0xE18, 0xE19, 0xE1A, 0xE1B, 0xE1C, 0xE1D, 0xE1E, 0xE1F,
- 0xE20, 0xE21, 0xE22, 0xE23, 0xE24, 0xE25, 0xE26, 0xE27,
- 0xE28, 0xE29, 0xE2A, 0xE2B, 0xE2C, 0xE2D, 0xE2E, 0xE2F,
- 0xE30, 0xE31, 0xE32, 0xE33, 0xE34, 0xE35, 0xE36, 0xE37,
- 0xE38, 0xE39, 0xE3A, 0xE3B, 0xE3C, 0xE3D, 0xE3E, 0xE3F,
- 0xE40, 0xE41, 0xE42, 0xE43, 0xE44, 0xE45, 0xE46, 0xE47,
- 0xE48, 0xE49, 0xE4A, 0xE4B, 0xE4C, 0xE4D, 0xE4E, 0xE4F,
- 0xE50, 0xE51, 0xE52, 0xE53, 0xE54, 0xE55, 0xE56, 0xE57,
- 0xE58, 0xE59, 0xE5A, 0xE5B, 0xE5C, 0xE5D, 0xE5E, 0xE5F,
- 0xE60, 0xE61, 0xE62, 0xE63, 0xE64, 0xE65, 0xE66, 0xE67,
- 0xE68, 0xE69, 0xE6A, 0xE6B, 0xE6C, 0xE6D, 0xE6E, 0xE6F,
- 0xE70, 0xE71, 0xE72, 0xE73, 0xE74, 0xE75, 0xE76, 0xE77,
- 0xE78, 0xE79, 0xE7A, 0xE7B, 0xE7C, 0xE7D, 0xE7E, 0xE7F,
- 0xE80, 0xE81, 0xE82, 0xE83, 0xE84, 0xE85, 0xE86, 0xE87,
- 0xE88, 0xE89, 0xE8A, 0xE8B, 0xE8C, 0xE8D, 0xE8E, 0xE8F,
- 0xE90, 0xE91, 0xE92, 0xE93, 0xE94, 0xE95, 0xE96, 0xE97,
- 0xE98, 0xE99, 0xE9A, 0xE9B, 0xE9C, 0xE9D, 0xE9E, 0xE9F,
- 0xEA0, 0xEA1, 0xEA2, 0xEA3, 0xEA4, 0xEA5, 0xEA6, 0xEA7,
- 0xEA8, 0xEA9, 0xEAA, 0xEAB, 0xEAC, 0xEAD, 0xEAE, 0xEAF,
- 0xEB0, 0xEB1, 0xEB2, 0xEB3, 0xEB4, 0xEB5, 0xEB6, 0xEB7,
- 0xEB8, 0xEB9, 0xEBA, 0xEBB, 0xEBC, 0xEBD, 0xEBE, 0xEBF,
- 0xEC0, 0xEC1, 0xEC2, 0xEC3, 0xEC4, 0xEC5, 0xEC6, 0xEC7,
- 0xEC8, 0xEC9, 0xECA, 0xECB, 0xECC, 0xECD, 0xECE, 0xECF,
- 0xED0, 0xED1, 0xED2, 0xED3, 0xED4, 0xED5, 0xED6, 0xED7,
- 0xED8, 0xED9, 0xEDA, 0xEDB, 0xEDC, 0xEDD, 0xEDE, 0xEDF,
- 0xEE0, 0xEE1, 0xEE2, 0xEE3, 0xEE4, 0xEE5, 0xEE6, 0xEE7,
- 0xEE8, 0xEE9, 0xEEA, 0xEEB, 0xEEC, 0xEED, 0xEEE, 0xEEF,
- 0xEF0, 0xEF1, 0xEF2, 0xEF3, 0xEF4, 0xEF5, 0xEF6, 0xEF7,
- 0xEF8, 0xEF9, 0xEFA, 0xEFB, 0xEFC, 0xEFD, 0xEFE, 0xEFF,
- 0xF00, 0xF01, 0xF02, 0xF03, 0xF04, 0xF05, 0xF06, 0xF07,
- 0xF08, 0xF09, 0xF0A, 0xF0B, 0xF0C, 0xF0D, 0xF0E, 0xF0F,
- 0xF10, 0xF11, 0xF12, 0xF13, 0xF14, 0xF15, 0xF16, 0xF17,
- 0xF18, 0xF19, 0xF1A, 0xF1B, 0xF1C, 0xF1D, 0xF1E, 0xF1F,
- 0xF20, 0xF21, 0xF22, 0xF23, 0xF24, 0xF25, 0xF26, 0xF27,
- 0xF28, 0xF29, 0xF2A, 0xF2B, 0xF2C, 0xF2D, 0xF2E, 0xF2F,
- 0xF30, 0xF31, 0xF32, 0xF33, 0xF34, 0xF35, 0xF36, 0xF37,
- 0xF38, 0xF39, 0xF3A, 0xF3B, 0xF3C, 0xF3D, 0xF3E, 0xF3F,
- 0xF40, 0xF41, 0xF42, 0xF43, 0xF44, 0xF45, 0xF46, 0xF47,
- 0xF48, 0xF49, 0xF4A, 0xF4B, 0xF4C, 0xF4D, 0xF4E, 0xF4F,
- 0xF50, 0xF51, 0xF52, 0xF53, 0xF54, 0xF55, 0xF56, 0xF57,
- 0xF58, 0xF59, 0xF5A, 0xF5B, 0xF5C, 0xF5D, 0xF5E, 0xF5F,
- 0xF60, 0xF61, 0xF62, 0xF63, 0xF64, 0xF65, 0xF66, 0xF67,
- 0xF68, 0xF69, 0xF6A, 0xF6B, 0xF6C, 0xF6D, 0xF6E, 0xF6F,
- 0xF70, 0xF71, 0xF72, 0xF73, 0xF74, 0xF75, 0xF76, 0xF77,
- 0xF78, 0xF79, 0xF7A, 0xF7B, 0xF7C, 0xF7D, 0xF7E, 0xF7F,
- 0xF80, 0xF81, 0xF82, 0xF83, 0xF84, 0xF85, 0xF86, 0xF87,
- 0xF88, 0xF89, 0xF8A, 0xF8B, 0xF8C, 0xF8D, 0xF8E, 0xF8F,
- 0xF90, 0xF91, 0xF92, 0xF93, 0xF94, 0xF95, 0xF96, 0xF97,
- 0xF98, 0xF99, 0xF9A, 0xF9B, 0xF9C, 0xF9D, 0xF9E, 0xF9F,
- 0xFA0, 0xFA1, 0xFA2, 0xFA3, 0xFA4, 0xFA5, 0xFA6, 0xFA7,
- 0xFA8, 0xFA9, 0xFAA, 0xFAB, 0xFAC, 0xFAD, 0xFAE, 0xFAF,
- 0xFB0, 0xFB1, 0xFB2, 0xFB3, 0xFB4, 0xFB5, 0xFB6, 0xFB7,
- 0xFB8, 0xFB9, 0xFBA, 0xFBB, 0xFBC, 0xFBD, 0xFBE, 0xFBF,
- 0xFC0, 0xFC1, 0xFC2, 0xFC3, 0xFC4, 0xFC5, 0xFC6, 0xFC7,
- 0xFC8, 0xFC9, 0xFCA, 0xFCB, 0xFCC, 0xFCD, 0xFCE, 0xFCF,
- 0xFD0, 0xFD1, 0xFD2, 0xFD3, 0xFD4, 0xFD5, 0xFD6, 0xFD7,
- 0xFD8, 0xFD9, 0xFDA, 0xFDB, 0xFDC, 0xFDD, 0xFDE, 0xFDF,
- 0xFE0, 0xFE1, 0xFE2, 0xFE3, 0xFE4, 0xFE5, 0xFE6, 0xFE7,
- 0xFE8, 0xFE9, 0xFEA, 0xFEB, 0xFEC, 0xFED, 0xFEE, 0xFEF,
- 0xFF0, 0xFF1, 0xFF2, 0xFF3, 0xFF4, 0xFF5, 0xFF6, 0xFF7,
- 0xFF8, 0xFF9, 0xFFA, 0xFFB, 0xFFC, 0xFFD, 0xFFE, 0xFFF
- },
- new short[] {
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x03C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x060, 0x070, 0x07C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x020, 0x030, 0x07C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x03C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0C0,
- 0x000, 0x0C0, 0x0C0, 0x0E0, 0x0E0, 0x0F0, 0x0F0, 0x0FC,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x018,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x03C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x03C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x040, 0x060, 0x060, 0x070, 0x0F0, 0x0FC,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x060, 0x070, 0x07C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x03C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x100, 0x100, 0x180, 0x180, 0x180,
- 0x100, 0x180, 0x180, 0x180, 0x180, 0x1C0, 0x1C0, 0x1C0,
- 0x1C0, 0x1C0, 0x1E0, 0x1E0, 0x1E0, 0x3F0, 0x3F8, 0x3FC,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x018,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x03C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x040, 0x060, 0x070, 0x070, 0x07C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x020, 0x030, 0x07C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x03C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x080, 0x000, 0x080, 0x0C0, 0x0C0,
- 0x0C0, 0x0C0, 0x0C0, 0x1E0, 0x1E0, 0x1F0, 0x1F8, 0x1FC,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x020, 0x030, 0x03C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x03C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x040, 0x040, 0x0E0, 0x0E0, 0x0F0, 0x0F0, 0x0FC,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x020, 0x070, 0x070, 0x07C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x03C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x200, 0x200,
- 0x200, 0x200, 0x300, 0x300, 0x300, 0x300, 0x300, 0x31C,
- 0x200, 0x300, 0x300, 0x300, 0x300, 0x300, 0x300, 0x300,
- 0x300, 0x300, 0x380, 0x380, 0x380, 0x380, 0x380, 0x388,
- 0x380, 0x380, 0x380, 0x3C0, 0x3C0, 0x3C0, 0x3C0, 0x7C0,
- 0x3C0, 0x7C0, 0x7E0, 0x7E0, 0x7E0, 0x7F0, 0x7F8, 0x7FC,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x03C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x060, 0x070, 0x07C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x020, 0x030, 0x07C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x03C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0C0,
- 0x000, 0x0C0, 0x0C0, 0x0E0, 0x0E0, 0x0F0, 0x0F0, 0x0FC,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x018,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x03C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x03C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x040, 0x060, 0x060, 0x070, 0x0F0, 0x0FC,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x060, 0x070, 0x07C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x03C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x100, 0x100, 0x180, 0x180, 0x180,
- 0x100, 0x180, 0x180, 0x180, 0x180, 0x1C0, 0x1C0, 0x1C0,
- 0x1C0, 0x1C0, 0x1E0, 0x1E0, 0x1E0, 0x3F0, 0x3F8, 0x3FC,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x018,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x03C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x040, 0x060, 0x070, 0x070, 0x07C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x020, 0x030, 0x07C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x03C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x080, 0x000, 0x080, 0x0C0, 0x0C0,
- 0x0C0, 0x0C0, 0x0C0, 0x1E0, 0x1E0, 0x1F0, 0x1F8, 0x1FC,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x020, 0x030, 0x03C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x03C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x040, 0x040, 0x0E0, 0x0E0, 0x0F0, 0x0F0, 0x0FC,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x020, 0x070, 0x070, 0x07C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x03C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x200, 0x200,
- 0x200, 0x200, 0x300, 0x300, 0x300, 0x300, 0x300, 0x31C,
- 0x200, 0x300, 0x300, 0x300, 0x300, 0x300, 0x300, 0x300,
- 0x300, 0x300, 0x380, 0x380, 0x380, 0x380, 0x380, 0x388,
- 0x380, 0x380, 0x380, 0x3C0, 0x3C0, 0x3C0, 0x3C0, 0x7C0,
- 0x3C0, 0x7C0, 0x7E0, 0x7E0, 0x7E0, 0x7F0, 0x7F8, 0x7FC
- },
- new short[] {
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF,
- 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF
- },
- new short[] {
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000
- },
- new short[] {
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x007,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x007,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x003,
- 0x000, 0x000, 0x000, 0x003, 0x000, 0x000, 0x00E, 0x07F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x007,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x007,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x003,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x003,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x03F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x003,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x003,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x03F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x06F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x077,
- 0x000, 0x000, 0x000, 0x0FB, 0x000, 0x0FD, 0x1FE, 0x1FF,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x007,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x003,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x003,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x03F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x003,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x03F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x02F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x077,
- 0x000, 0x000, 0x000, 0x0FB, 0x000, 0x0FD, 0x0FE, 0x2FF,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x037,
- 0x000, 0x000, 0x000, 0x07B, 0x000, 0x07D, 0x17E, 0x37F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x017,
- 0x000, 0x000, 0x000, 0x0BB, 0x000, 0x3BD, 0x3BE, 0x3BF,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x107,
- 0x000, 0x000, 0x000, 0x3DB, 0x000, 0x3DD, 0x3DE, 0x3DF,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x3C3,
- 0x000, 0x000, 0x000, 0x3E1, 0x000, 0x3E8, 0x3EC, 0x3EF,
- 0x000, 0x000, 0x000, 0x3F0, 0x300, 0x3F0, 0x3F0, 0x3F7,
- 0x380, 0x3F8, 0x3F8, 0x3FB, 0x3F8, 0x3FD, 0x3FE, 0x3FF,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x007,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x003,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x03F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x003,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x037,
- 0x000, 0x000, 0x000, 0x07B, 0x000, 0x0FD, 0x0FE, 0x4FF,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x017,
- 0x000, 0x000, 0x000, 0x03B, 0x000, 0x07D, 0x07E, 0x57F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x007,
- 0x000, 0x000, 0x000, 0x01B, 0x000, 0x4BD, 0x5BE, 0x5BF,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x007,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x407,
- 0x000, 0x000, 0x000, 0x503, 0x000, 0x5DD, 0x5DE, 0x5DF,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x503,
- 0x000, 0x000, 0x000, 0x5C0, 0x000, 0x5E0, 0x5EC, 0x5EF,
- 0x000, 0x000, 0x400, 0x5E0, 0x400, 0x5F0, 0x5F0, 0x5F7,
- 0x500, 0x5F0, 0x5F8, 0x5FB, 0x5F8, 0x5FD, 0x5FE, 0x5FF,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x007,
- 0x000, 0x000, 0x000, 0x01B, 0x000, 0x43D, 0x47E, 0x67F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x007,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x407,
- 0x000, 0x000, 0x000, 0x403, 0x000, 0x61D, 0x6BE, 0x6BF,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x407,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x403,
- 0x000, 0x000, 0x000, 0x601, 0x000, 0x680, 0x6DC, 0x6DF,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x601,
- 0x000, 0x000, 0x000, 0x680, 0x400, 0x6C0, 0x6E0, 0x6EF,
- 0x000, 0x400, 0x400, 0x6C0, 0x600, 0x6E0, 0x6F0, 0x6F7,
- 0x600, 0x6F0, 0x6F0, 0x6FB, 0x6F8, 0x6FD, 0x6FE, 0x6FF,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x007,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x407,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x403,
- 0x000, 0x000, 0x000, 0x603, 0x000, 0x600, 0x71E, 0x73F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x403,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x601,
- 0x000, 0x000, 0x400, 0x700, 0x400, 0x700, 0x700, 0x75F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x700,
- 0x000, 0x400, 0x400, 0x700, 0x600, 0x700, 0x740, 0x76F,
- 0x000, 0x400, 0x600, 0x700, 0x600, 0x740, 0x760, 0x777,
- 0x700, 0x760, 0x770, 0x77B, 0x770, 0x77D, 0x77E, 0x77F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x601,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x400, 0x700,
- 0x000, 0x400, 0x400, 0x700, 0x600, 0x780, 0x780, 0x79F,
- 0x000, 0x000, 0x000, 0x400, 0x000, 0x400, 0x400, 0x700,
- 0x000, 0x400, 0x600, 0x780, 0x600, 0x780, 0x780, 0x7AF,
- 0x000, 0x600, 0x600, 0x780, 0x700, 0x780, 0x780, 0x7B7,
- 0x700, 0x780, 0x7A0, 0x7BB, 0x7B0, 0x7BD, 0x7BE, 0x7BF,
- 0x000, 0x000, 0x000, 0x400, 0x000, 0x600, 0x600, 0x700,
- 0x400, 0x600, 0x600, 0x780, 0x700, 0x780, 0x7C0, 0x7CF,
- 0x400, 0x600, 0x700, 0x780, 0x700, 0x7C0, 0x7C0, 0x7D7,
- 0x700, 0x7C0, 0x7C0, 0x7DB, 0x7C0, 0x7DD, 0x7DE, 0x7DF,
- 0x400, 0x700, 0x700, 0x7C0, 0x700, 0x7C0, 0x7C0, 0x7E7,
- 0x780, 0x7C0, 0x7E0, 0x7EB, 0x7E0, 0x7ED, 0x7EE, 0x7EF,
- 0x780, 0x7E0, 0x7E0, 0x7F3, 0x7E0, 0x7F5, 0x7F6, 0x7F7,
- 0x7F0, 0x7F8, 0x7FA, 0x7FB, 0x7FC, 0x7FD, 0x7FE, 0x7FF,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x807,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, 0x803,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x800, 0x000, 0x800, 0x800, 0x801,
- 0x000, 0x000, 0x000, 0x800, 0x000, 0x800, 0x800, 0x800,
- 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x83F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x800, 0x000, 0x800, 0x800, 0x803,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800,
- 0x000, 0x000, 0x000, 0x800, 0x000, 0x800, 0x800, 0x801,
- 0x000, 0x000, 0x000, 0x800, 0x000, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x81F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800,
- 0x000, 0x000, 0x000, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x81F,
- 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x80F,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x837,
- 0x800, 0x800, 0x800, 0x87B, 0x800, 0x8FD, 0x8FE, 0x8FF,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800,
- 0x000, 0x000, 0x000, 0x800, 0x000, 0x800, 0x800, 0x801,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800,
- 0x000, 0x000, 0x000, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x81F,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, 0x800,
- 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x81F,
- 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x80F,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x817,
- 0x800, 0x800, 0x800, 0x83B, 0x800, 0x87D, 0x87E, 0x97F,
- 0x000, 0x000, 0x000, 0x800, 0x000, 0x800, 0x800, 0x800,
- 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x80F,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x80F,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x807,
- 0x800, 0x800, 0x800, 0x81B, 0x800, 0x9BD, 0x9BE, 0x9BF,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x807,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x807,
- 0x800, 0x800, 0x800, 0x903, 0x800, 0x9DC, 0x9DE, 0x9DF,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x903,
- 0x800, 0x800, 0x800, 0x9C0, 0x800, 0x9E0, 0x9E8, 0x9EF,
- 0x800, 0x800, 0x800, 0x9E0, 0x800, 0x9F0, 0x9F0, 0x9F7,
- 0x900, 0x9F0, 0x9F8, 0x9FB, 0x9F8, 0x9FD, 0x9FE, 0x9FF,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800,
- 0x000, 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x801,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, 0x800, 0x800,
- 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x81F,
- 0x000, 0x000, 0x000, 0x800, 0x000, 0x800, 0x800, 0x800,
- 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x80F,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x80F,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x807,
- 0x800, 0x800, 0x800, 0x81B, 0x800, 0x83D, 0xA7E, 0xA7F,
- 0x000, 0x000, 0x000, 0x800, 0x000, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x80F,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x807,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x807,
- 0x800, 0x800, 0x800, 0xA03, 0x800, 0xA1D, 0xABE, 0xABF,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x807,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xA03,
- 0x800, 0x800, 0x800, 0xA01, 0x800, 0xA80, 0xADC, 0xADF,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xA01,
- 0x800, 0x800, 0x800, 0xA80, 0x800, 0xAC0, 0xAE0, 0xAEF,
- 0x800, 0x800, 0xA00, 0xAC0, 0xA00, 0xAE0, 0xAF0, 0xAF7,
- 0xA00, 0xAF0, 0xAF0, 0xAFB, 0xAF8, 0xAFD, 0xAFE, 0xAFF,
- 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x807,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x807,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xA03,
- 0x800, 0x800, 0x800, 0xA01, 0x800, 0xB00, 0xB1C, 0xB3F,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xA03,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xA01,
- 0x800, 0x800, 0x800, 0xB00, 0x800, 0xB00, 0xB00, 0xB5F,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xB00,
- 0x800, 0x800, 0x800, 0xB00, 0xA00, 0xB00, 0xB40, 0xB6F,
- 0x800, 0xA00, 0xA00, 0xB00, 0xA00, 0xB40, 0xB60, 0xB77,
- 0xB00, 0xB60, 0xB70, 0xB7B, 0xB70, 0xB7D, 0xB7E, 0xB7F,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xA01,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xB00,
- 0x800, 0x800, 0x800, 0xB00, 0xA00, 0xB80, 0xB80, 0xB9F,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xA00, 0xB00,
- 0x800, 0xA00, 0xA00, 0xB80, 0xA00, 0xB80, 0xB80, 0xBAF,
- 0x800, 0xA00, 0xA00, 0xB80, 0xB00, 0xB80, 0xB80, 0xBB7,
- 0xB00, 0xB80, 0xBA0, 0xBBB, 0xBB0, 0xBBD, 0xBBE, 0xBBF,
- 0x800, 0x800, 0x800, 0xA00, 0x800, 0xA00, 0xA00, 0xB00,
- 0x800, 0xA00, 0xA00, 0xB80, 0xB00, 0xB80, 0xBC0, 0xBCF,
- 0x800, 0xA00, 0xB00, 0xB80, 0xB00, 0xBC0, 0xBC0, 0xBD7,
- 0xB00, 0xBC0, 0xBC0, 0xBDB, 0xBC0, 0xBDD, 0xBDE, 0xBDF,
- 0xA00, 0xB00, 0xB00, 0xBC0, 0xB00, 0xBC0, 0xBC0, 0xBE7,
- 0xB80, 0xBC0, 0xBE0, 0xBEB, 0xBE0, 0xBED, 0xBEE, 0xBEF,
- 0xB80, 0xBE0, 0xBE0, 0xBF3, 0xBE0, 0xBF5, 0xBF6, 0xBF7,
- 0xBF0, 0xBF8, 0xBFA, 0xBFB, 0xBFC, 0xBFD, 0xBFE, 0xBFF,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, 0x800, 0x800,
- 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x000, 0x000, 0x000, 0x800, 0x000, 0x800, 0x800, 0x800,
- 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x80F,
- 0x000, 0x000, 0x000, 0x800, 0x000, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x80F,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x80F,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xC07,
- 0x800, 0x800, 0x800, 0xC0B, 0x800, 0xC1D, 0xC3E, 0xC7F,
- 0x000, 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x807,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xC07,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xC03,
- 0x800, 0x800, 0x800, 0xC03, 0x800, 0xC00, 0xC1E, 0xCBF,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xC03,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xC01,
- 0x800, 0xC00, 0xC00, 0xC00, 0xC00, 0xC00, 0xC00, 0xCDF,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0xC00, 0xC00, 0xC00,
- 0x800, 0xC00, 0xC00, 0xC00, 0xC00, 0xC80, 0xCC0, 0xCEF,
- 0x800, 0xC00, 0xC00, 0xC80, 0xC00, 0xCC0, 0xCE0, 0xCF7,
- 0xC00, 0xCE0, 0xCF0, 0xCFB, 0xCF0, 0xCFD, 0xCFE, 0xCFF,
- 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xC07,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xC03,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xC03,
- 0x800, 0x800, 0xC00, 0xC01, 0xC00, 0xC00, 0xC00, 0xD3F,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xC00, 0xC03,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0xC00, 0xC00, 0xC01,
- 0x800, 0xC00, 0xC00, 0xC00, 0xC00, 0xD00, 0xD00, 0xD5F,
- 0x800, 0x800, 0x800, 0xC00, 0x800, 0xC00, 0xC00, 0xC00,
- 0x800, 0xC00, 0xC00, 0xD00, 0xC00, 0xD00, 0xD00, 0xD6F,
- 0xC00, 0xC00, 0xC00, 0xD00, 0xC00, 0xD00, 0xD40, 0xD77,
- 0xC00, 0xD40, 0xD60, 0xD7B, 0xD70, 0xD7D, 0xD7E, 0xD7F,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0xC00, 0x800, 0xC00, 0xC00, 0xC01,
- 0x800, 0x800, 0x800, 0xC00, 0x800, 0xC00, 0xC00, 0xC00,
- 0x800, 0xC00, 0xC00, 0xD00, 0xC00, 0xD00, 0xD00, 0xD9F,
- 0x800, 0x800, 0x800, 0xC00, 0x800, 0xC00, 0xC00, 0xD00,
- 0xC00, 0xC00, 0xC00, 0xD00, 0xC00, 0xD80, 0xD80, 0xDAF,
- 0xC00, 0xC00, 0xC00, 0xD80, 0xC00, 0xD80, 0xD80, 0xDB7,
- 0xD00, 0xD80, 0xD80, 0xDBB, 0xDA0, 0xDBD, 0xDBE, 0xDBF,
- 0x800, 0x800, 0xC00, 0xC00, 0xC00, 0xC00, 0xC00, 0xD00,
- 0xC00, 0xC00, 0xC00, 0xD00, 0xC00, 0xD80, 0xD80, 0xDCF,
- 0xC00, 0xC00, 0xC00, 0xD80, 0xD00, 0xD80, 0xDC0, 0xDD7,
- 0xD00, 0xDC0, 0xDC0, 0xDDB, 0xDC0, 0xDDD, 0xDDE, 0xDDF,
- 0xC00, 0xD00, 0xD00, 0xD80, 0xD00, 0xDC0, 0xDC0, 0xDE7,
- 0xD00, 0xDC0, 0xDC0, 0xDEB, 0xDE0, 0xDED, 0xDEE, 0xDEF,
- 0xD80, 0xDC0, 0xDE0, 0xDF3, 0xDE0, 0xDF5, 0xDF6, 0xDF7,
- 0xDE0, 0xDF8, 0xDFA, 0xDFB, 0xDFC, 0xDFD, 0xDFE, 0xDFF,
- 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xC07,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xC03,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0xC00, 0xC00, 0xE01,
- 0x800, 0xC00, 0xC00, 0xE00, 0xC00, 0xE00, 0xE00, 0xE3F,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0xC00, 0xC00, 0xE01,
- 0x800, 0x800, 0x800, 0xC00, 0x800, 0xC00, 0xC00, 0xE00,
- 0x800, 0xC00, 0xC00, 0xE00, 0xC00, 0xE00, 0xE00, 0xE5F,
- 0x800, 0x800, 0x800, 0xC00, 0x800, 0xC00, 0xC00, 0xE00,
- 0xC00, 0xC00, 0xC00, 0xE00, 0xE00, 0xE00, 0xE00, 0xE6F,
- 0xC00, 0xE00, 0xE00, 0xE00, 0xE00, 0xE00, 0xE00, 0xE77,
- 0xE00, 0xE00, 0xE40, 0xE7B, 0xE60, 0xE7D, 0xE7E, 0xE7F,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xC00,
- 0x800, 0x800, 0x800, 0xC00, 0x800, 0xC00, 0xC00, 0xE00,
- 0x800, 0x800, 0x800, 0xC00, 0x800, 0xC00, 0xC00, 0xE00,
- 0xC00, 0xC00, 0xC00, 0xE00, 0xE00, 0xE00, 0xE00, 0xE9F,
- 0x800, 0x800, 0xC00, 0xC00, 0xC00, 0xC00, 0xE00, 0xE00,
- 0xC00, 0xE00, 0xE00, 0xE00, 0xE00, 0xE00, 0xE80, 0xEAF,
- 0xC00, 0xE00, 0xE00, 0xE00, 0xE00, 0xE80, 0xE80, 0xEB7,
- 0xE00, 0xE80, 0xE80, 0xEBB, 0xE80, 0xEBD, 0xEBE, 0xEBF,
- 0x800, 0xC00, 0xC00, 0xE00, 0xC00, 0xE00, 0xE00, 0xE00,
- 0xC00, 0xE00, 0xE00, 0xE00, 0xE00, 0xE80, 0xE80, 0xECF,
- 0xC00, 0xE00, 0xE00, 0xE80, 0xE00, 0xE80, 0xE80, 0xED7,
- 0xE00, 0xE80, 0xEC0, 0xEDB, 0xEC0, 0xEDD, 0xEDE, 0xEDF,
- 0xE00, 0xE00, 0xE00, 0xE80, 0xE00, 0xE80, 0xEC0, 0xEE7,
- 0xE00, 0xEC0, 0xEC0, 0xEEB, 0xEC0, 0xEED, 0xEEE, 0xEEF,
- 0xE80, 0xEC0, 0xEC0, 0xEF3, 0xEE0, 0xEF4, 0xEF6, 0xEF7,
- 0xEE0, 0xEF8, 0xEF8, 0xEFB, 0xEFC, 0xEFD, 0xEFE, 0xEFF,
- 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xC00,
- 0x800, 0x800, 0x800, 0xC00, 0x800, 0xC00, 0xC00, 0xE00,
- 0x800, 0x800, 0xC00, 0xC00, 0xC00, 0xC00, 0xC00, 0xE00,
- 0xC00, 0xE00, 0xE00, 0xF00, 0xE00, 0xF00, 0xF00, 0xF1F,
- 0x800, 0xC00, 0xC00, 0xC00, 0xC00, 0xE00, 0xE00, 0xF00,
- 0xC00, 0xE00, 0xE00, 0xF00, 0xE00, 0xF00, 0xF00, 0xF2F,
- 0xC00, 0xE00, 0xE00, 0xF00, 0xE00, 0xF00, 0xF00, 0xF37,
- 0xF00, 0xF00, 0xF00, 0xF3B, 0xF00, 0xF3D, 0xF3E, 0xF3F,
- 0x800, 0xC00, 0xC00, 0xE00, 0xC00, 0xE00, 0xE00, 0xF00,
- 0xC00, 0xE00, 0xE00, 0xF00, 0xE00, 0xF00, 0xF00, 0xF4F,
- 0xE00, 0xE00, 0xE00, 0xF00, 0xF00, 0xF00, 0xF00, 0xF57,
- 0xF00, 0xF00, 0xF00, 0xF5B, 0xF40, 0xF5D, 0xF5E, 0xF5F,
- 0xE00, 0xF00, 0xF00, 0xF00, 0xF00, 0xF00, 0xF00, 0xF67,
- 0xF00, 0xF00, 0xF40, 0xF6B, 0xF40, 0xF6D, 0xF6E, 0xF6F,
- 0xF00, 0xF40, 0xF40, 0xF71, 0xF40, 0xF74, 0xF74, 0xF77,
- 0xF60, 0xF78, 0xF78, 0xF7B, 0xF7C, 0xF7D, 0xF7E, 0xF7F,
- 0xC00, 0xC00, 0xC00, 0xE00, 0xC00, 0xE00, 0xE00, 0xF00,
- 0xE00, 0xE00, 0xE00, 0xF00, 0xF00, 0xF80, 0xF80, 0xF8F,
- 0xE00, 0xE00, 0xF00, 0xF80, 0xF00, 0xF80, 0xF80, 0xF97,
- 0xF00, 0xF80, 0xF80, 0xF9B, 0xF80, 0xF9D, 0xF9E, 0xF9F,
- 0xE00, 0xF00, 0xF00, 0xF80, 0xF00, 0xF80, 0xF80, 0xFA7,
- 0xF00, 0xF80, 0xF80, 0xFA9, 0xF80, 0xFAC, 0xFAC, 0xFAF,
- 0xF80, 0xF80, 0xF80, 0xFB0, 0xF80, 0xFB0, 0xFB4, 0xFB7,
- 0xF80, 0xFB8, 0xFB8, 0xFBB, 0xFBC, 0xFBD, 0xFBE, 0xFBF,
- 0xE00, 0xF00, 0xF00, 0xF80, 0xF00, 0xF80, 0xF80, 0xFC1,
- 0xF00, 0xF80, 0xFC0, 0xFC0, 0xFC0, 0xFC0, 0xFC8, 0xFCF,
- 0xF80, 0xFC0, 0xFC0, 0xFD0, 0xFC0, 0xFD0, 0xFD0, 0xFD7,
- 0xFC0, 0xFD0, 0xFD8, 0xFDB, 0xFD8, 0xFDD, 0xFDE, 0xFDF,
- 0xF80, 0xFC0, 0xFC0, 0xFE0, 0xFC0, 0xFE0, 0xFE0, 0xFE7,
- 0xFC0, 0xFE0, 0xFE8, 0xFEB, 0xFE8, 0xFED, 0xFEE, 0xFEF,
- 0xFE0, 0xFF0, 0xFF0, 0xFF3, 0xFF0, 0xFF5, 0xFF6, 0xFF7,
- 0xFF8, 0xFF9, 0xFFA, 0xFFB, 0xFFC, 0xFFD, 0xFFE, 0xFFF
- },
- new short[] {
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x018,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0FC,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x07C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x780,
- 0x000, 0x000, 0x000, 0x7C0, 0x380, 0x7E0, 0x7F0, 0x7FC,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x018,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0FC,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x07C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000,
- 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x780,
- 0x000, 0x000, 0x000, 0x7C0, 0x380, 0x7E0, 0x7F0, 0x7FC
- }
- };
- }
-}
diff --git a/BizHawk.Emulation/Computers/Commodore64/SidWaveformGenerator.cs b/BizHawk.Emulation/Computers/Commodore64/SidWaveformGenerator.cs
deleted file mode 100644
index 60f415a177..0000000000
--- a/BizHawk.Emulation/Computers/Commodore64/SidWaveformGenerator.cs
+++ /dev/null
@@ -1,255 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace BizHawk.Emulation.Computers.Commodore64
-{
-
- // constants for the WaveformGenerator and calculation
- // methods come from the libsidplayfp residfp library.
-
- public partial class WaveformGenerator
- {
- // internal
- private byte control;
- private int freq;
- private int pw;
-
- public int accumulator;
- public int floatingOutputTtl;
- public bool msbRising;
- public int noiseOutput;
- public int pulseOutput;
- public int ringMsbMask;
- public int shiftRegister;
- public int shiftRegisterDelay;
- public int shiftRegisterResetDelay;
- public bool sync;
- public bool test;
- private short[] wave;
- public int waveform;
- public int waveformOutput;
-
- // these are temp values used to speed up calculation
- private int noNoise;
- private int noNoiseOrNoiseOutput;
- private int noPulse;
-
- public WaveformGenerator()
- {
- Reset();
- }
-
- public void Clock()
- {
- if (test)
- {
- pulseOutput = 0xFFF;
- if (shiftRegisterResetDelay != 0 && --shiftRegisterResetDelay == 0)
- {
- ResetShiftRegister();
- }
- }
- else
- {
- int accumulatorNext = (accumulator + freq) & 0xFFFFFF;
- int accumulatorBitsSet = ~accumulator & accumulatorNext;
-
- accumulator = accumulatorNext;
- msbRising = (accumulatorBitsSet & 0x800000) != 0;
-
- if ((accumulatorBitsSet & 0x080000) != 0)
- {
- shiftRegisterDelay = 2;
- }
- else if (shiftRegisterDelay != 0 && --shiftRegisterDelay == 0)
- {
- ClockShiftRegister();
- }
- }
- }
-
- private void ClockShiftRegister()
- {
- int bit0 = ((shiftRegister >> 22) ^ (shiftRegister >> 17)) & 0x1;
- shiftRegister = ((shiftRegister << 1) | bit0) & 0x7FFFFF;
- UpdateNoiseOutput();
- }
-
- public byte Control
- {
- get
- {
- return control;
- }
- set
- {
- control = value;
-
- int waveformPrev = waveform;
- bool testPrev = test;
- waveform = (control >> 4) & 0x0F;
- test = (control & 0x08) != 0;
- sync = (control & 0x02) != 0;
-
- wave = WaveformSamples[waveform & 0x7];
- ringMsbMask = ((~control >> 5) & (control >> 2) & 0x1) << 23;
- noNoise = (waveform & 0x8) != 0 ? 0x000 : 0xFFF;
- noNoiseOrNoiseOutput = noNoise | noiseOutput;
- noPulse = (waveform & 0x4) != 0 ? 0x000 : 0xFFF;
-
- if (!testPrev && test)
- {
- accumulator = 0;
- shiftRegisterDelay = 0;
- shiftRegisterResetDelay = 0x8000;
- }
- else if (testPrev && !test)
- {
- int bit0 = (~shiftRegister >> 17) & 0x1;
- shiftRegister = ((shiftRegister << 1) | bit0) & 0x7FFFFF;
- UpdateNoiseOutput();
- }
-
- if (waveform == 0 && waveformPrev != 0)
- {
- floatingOutputTtl = 0x28000;
- }
- }
- }
-
-
- public int Frequency
- {
- get
- {
- return freq;
- }
- set
- {
- freq = value;
- }
- }
-
- public short Output(WaveformGenerator ringModulator)
- {
- if (waveform != 0)
- {
- int ix = (accumulator ^ (ringModulator.accumulator & ringMsbMask)) >> 12;
- waveformOutput = wave[ix] & (noPulse | pulseOutput) & noNoiseOrNoiseOutput;
- if (waveform > 0x8)
- {
- WriteShiftRegister();
- }
- }
- else
- {
- if (floatingOutputTtl != 0 && --floatingOutputTtl == 0)
- {
- waveformOutput = 0;
- }
- }
- pulseOutput = ((accumulator >> 12) >= pw) ? 0xFFF : 0x000;
- return (short)waveformOutput;
- }
-
- public int PulseWidth
- {
- get
- {
- return pw;
- }
- set
- {
- pw = value;
- }
- }
-
- public void Reset()
- {
- control = 0;
- waveform = 0;
- freq = 0;
- pw = 0;
- accumulator = 0;
- test = false;
- sync = false;
-
- msbRising = false;
- wave = WaveformSamples[0];
- ringMsbMask = 0;
-
- noNoise = 0xFFF;
- noPulse = 0xFFF;
- pulseOutput = 0xFFF;
-
- ResetShiftRegister();
-
- shiftRegisterDelay = 0;
- waveformOutput = 0;
- floatingOutputTtl = 0;
- }
-
- private void ResetShiftRegister()
- {
- shiftRegister = 0x7FFFFF;
- shiftRegisterResetDelay = 0;
- UpdateNoiseOutput();
- }
-
- public void SetState(byte stateControl, int stateFreq, int statePulseWidth)
- {
- pw = statePulseWidth;
- freq = stateFreq;
- control = stateControl;
- noNoise = (waveform & 0x8) != 0 ? 0x000 : 0xFFF;
- noNoiseOrNoiseOutput = noNoise | noiseOutput;
- noPulse = (waveform & 0x4) != 0 ? 0x000 : 0xFFF;
- ringMsbMask = ((~control >> 5) & (control >> 2) & 0x1) << 23;
- waveform = (control >> 4) & 0x0F;
- test = (control & 0x08) != 0;
- sync = (control & 0x02) != 0;
- wave = WaveformSamples[waveform & 0x7];
- }
-
- public void Synchronize(WaveformGenerator syncDest, WaveformGenerator syncSource)
- {
- if (msbRising && syncDest.sync && !(sync && syncSource.msbRising))
- {
- syncDest.accumulator = 0;
- }
- }
-
- private void UpdateNoiseOutput()
- {
- noiseOutput =
- ((shiftRegister & 0x100000) >> 9) |
- ((shiftRegister & 0x040000) >> 8) |
- ((shiftRegister & 0x004000) >> 5) |
- ((shiftRegister & 0x000800) >> 3) |
- ((shiftRegister & 0x000200) >> 2) |
- ((shiftRegister & 0x000020) << 1) |
- ((shiftRegister & 0x000004) << 3) |
- ((shiftRegister & 0x000001) << 4);
- noNoiseOrNoiseOutput = noNoise | noiseOutput;
- }
-
- private void WriteShiftRegister()
- {
- shiftRegister &=
- ~((1 << 20) | (1 << 18) | (1 << 14) | (1 << 11) |
- (1 << 9) | (1 << 5) | (1 << 2) | (1 << 0)) |
- ((waveformOutput & 0x800) << 9) |
- ((waveformOutput & 0x400) << 8) |
- ((waveformOutput & 0x200) << 5) |
- ((waveformOutput & 0x100) << 3) |
- ((waveformOutput & 0x080) << 2) |
- ((waveformOutput & 0x040) >> 1) |
- ((waveformOutput & 0x020) >> 3) |
- ((waveformOutput & 0x010) >> 4);
- noiseOutput &= waveformOutput;
- noNoiseOrNoiseOutput = noNoise | noiseOutput;
- }
- }
-}
diff --git a/BizHawk.Emulation/Computers/Commodore64/Timing.cs b/BizHawk.Emulation/Computers/Commodore64/Timing.cs
deleted file mode 100644
index 9d56e06b0e..0000000000
--- a/BizHawk.Emulation/Computers/Commodore64/Timing.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace BizHawk.Emulation.Computers.Commodore64
-{
- public class Timing
- {
- public int crystalFreq;
- public uint timer;
-
- public Timing(Region timingRegion)
- {
- switch (timingRegion)
- {
- case Region.NTSC:
- crystalFreq = 14318181;
- break;
- case Region.PAL:
- crystalFreq = 17734472;
- break;
- }
- }
-
- public void Advance()
- {
- // need an unchecked block here since the timer will wrap
- unchecked
- {
- timer++;
- }
- }
-
- public bool IsCycle(int divisor)
- {
- return (timer % divisor) == 0;
- }
- }
-}
diff --git a/BizHawk.Emulation/Computers/Commodore64/Via.cs b/BizHawk.Emulation/Computers/Commodore64/Via.cs
deleted file mode 100644
index 98bf66cf8d..0000000000
--- a/BizHawk.Emulation/Computers/Commodore64/Via.cs
+++ /dev/null
@@ -1,420 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace BizHawk.Emulation.Computers.Commodore64
-{
- // MOS Technologies VIA 6522
- // register count: 16
- // IO port count: 2
-
- public class ViaRegs
- {
- public int[] CACONTROL = new int[2];
- public int[] CBCONTROL = new int[2];
- public bool[] EICA = new bool[2];
- public bool[] EICB = new bool[2];
- public bool EISR;
- public bool[] EIT = new bool[2];
- public bool[] ICA = new bool[2];
- public bool[] ICB = new bool[2];
- public bool IRQ;
- public bool ISR;
- public bool[] IT = new bool[2];
- public bool PALE;
- public bool PBLE;
- public int SR;
- public int SRCONTROL;
- public int[] TC = new int[2];
- public int[] TCONTROL = new int[2];
- public int[] TL = new int[2];
-
- private DataPortConnector[] connectors;
-
- public ViaRegs()
- {
- // power on state
- connectors = new DataPortConnector[2];
- connectors[0] = new DataPortConnector();
- connectors[1] = new DataPortConnector();
- }
-
- public byte this[int addr]
- {
- get
- {
- int result = 0xFF;
-
- addr &= 0xF;
- switch (addr)
- {
- case 0x0: // port B data
- result = connectors[1].Data;
- break;
- case 0x1: // port A data
- case 0xF: // port A data without handshake
- result = connectors[0].Data;
- break;
- case 0x2: // port B direction
- result = connectors[1].Direction;
- break;
- case 0x3: // port A direction
- result = connectors[0].Direction;
- break;
- case 0x4: // timer 0 lo
- result = TC[0] & 0xFF;
- break;
- case 0x5: // timer 0 hi
- result = (TC[0] & 0xFF00) >> 8;
- break;
- case 0x6: // timer 0 latch lo
- result = TL[0] & 0xFF;
- break;
- case 0x7: // timer 0 latch hi
- result = (TL[0] & 0xFF00) >> 8;
- break;
- case 0x8: // timer 1 lo
- result = TC[1] & 0xFF;
- break;
- case 0x9: // timer 1 hi
- result = (TC[1] & 0xFF00) >> 8;
- break;
- case 0xA: // shift register
- result = SR;
- break;
- case 0xB: // peripheral control register
- result = (CACONTROL[0] & 0x01);
- result |= (CACONTROL[1] & 0x07) << 1;
- result |= (CBCONTROL[0] & 0x01) << 4;
- result |= (CBCONTROL[1] & 0x07) << 5;
- break;
- case 0xC: // auxilary control register
- result = (PALE) ? 0x01 : 0x00;
- result |= (PBLE) ? 0x02 : 0x00;
- result |= (SRCONTROL & 0x7) << 2;
- result |= (TCONTROL[0] & 0x1) << 5;
- result |= (TCONTROL[1] & 0x3) << 6;
- break;
- case 0xD: // interrupt status register
- result = ICA[1] ? 0x01 : 0x00;
- result |= ICA[0] ? 0x02 : 0x00;
- result |= ISR ? 0x04 : 0x00;
- result |= ICB[1] ? 0x08 : 0x00;
- result |= ICB[0] ? 0x10 : 0x00;
- result |= IT[1] ? 0x20 : 0x00;
- result |= IT[0] ? 0x40 : 0x00;
- result |= IRQ ? 0x80 : 0x00;
- break;
- case 0xE: // interrupt control register
- result = EICA[1] ? 0x01 : 0x00;
- result |= EICA[0] ? 0x02 : 0x00;
- result |= EISR ? 0x04 : 0x00;
- result |= EICB[1] ? 0x08 : 0x00;
- result |= EICB[0] ? 0x10 : 0x00;
- result |= EIT[1] ? 0x20 : 0x00;
- result |= EIT[0] ? 0x40 : 0x00;
- result |= 0x80; // TODO: check if this is needed
- break;
- }
-
- return (byte)result;
- }
- set
- {
- byte val = value;
- addr &= 0xF;
-
- switch (addr)
- {
- case 0x0: // port B data
- connectors[1].Data = val;
- break;
- case 0x1: // port A data
- case 0xF: // port A data without handshake
- connectors[0].Data = val;
- break;
- case 0x2: // port B direction
- connectors[1].Direction = val;
- break;
- case 0x3: // port A direction
- connectors[0].Direction = val;
- break;
- case 0x4: // timer 0 lo
- TC[0] &= 0xFF00;
- TC[0] |= val;
- break;
- case 0x5: // timer 0 hi
- TC[0] &= 0x00FF;
- TC[0] |= (int)val << 8;
- break;
- case 0x6: // timer 0 latch lo
- TL[0] &= 0xFF00;
- TL[0] |= val;
- break;
- case 0x7: // timer 0 latch hi
- TL[0] &= 0x00FF;
- TL[0] |= (int)val << 8;
- break;
- case 0x8: // timer 1 lo
- TC[1] &= 0xFF00;
- TC[1] |= val;
- break;
- case 0x9: // timer 1 hi
- TC[1] &= 0x00FF;
- TC[1] |= (int)val << 8;
- break;
- case 0xA: // shift register
- SR = val;
- break;
- case 0xB: // peripheral control register
- CACONTROL[0] = (val & 0x1);
- CACONTROL[1] = ((val >> 1) & 0x7);
- CBCONTROL[0] = ((val >> 4) & 0x1);
- CBCONTROL[1] = ((val >> 5) & 0x7);
- break;
- case 0xC: // auxilary control register
- PALE = ((val & 0x01) != 0);
- PBLE = ((val & 0x02) != 0);
- SRCONTROL = (val >> 2) & 0x7;
- TCONTROL[0] = (val >> 5) & 0x1;
- TCONTROL[1] = (val >> 6) & 0x3;
- break;
- case 0xD: // interrupt status register
- ICA[1] = ((val & 0x01) != 0);
- ICA[0] = ((val & 0x02) != 0);
- ISR = ((val & 0x04) != 0);
- ICB[1] = ((val & 0x08) != 0);
- ICB[0] = ((val & 0x10) != 0);
- IT[1] = ((val & 0x20) != 0);
- IT[0] = ((val & 0x40) != 0);
- IRQ = ((val & 0x80) != 0);
- break;
- case 0xE: // interrupt control register
- EICA[1] = ((val & 0x01) != 0);
- EICA[0] = ((val & 0x02) != 0);
- EISR = ((val & 0x04) != 0);
- EICB[1] = ((val & 0x08) != 0);
- EICB[0] = ((val & 0x10) != 0);
- EIT[1] = ((val & 0x20) != 0);
- EIT[0] = ((val & 0x40) != 0);
- break;
- }
- }
- }
-
- public void Connect(DataPortConnector connector, int index)
- {
- connectors[index] = connector;
- }
-
- public bool PB6
- {
- get
- {
- return ((connectors[1].Latch & 0x40) != 0);
- }
- set
- {
- connectors[1].Data = (byte)((connectors[1].Latch & 0xBF) | (value ? 0x40 : 0x00));
- }
- }
-
- public bool PB7
- {
- get
- {
- return ((connectors[1].Latch & 0x80) != 0);
- }
- set
- {
- connectors[1].Data = (byte)((connectors[1].Latch & 0x7F) | (value ? 0x80 : 0x00));
- }
- }
- }
-
- // 0x0: port B
- // 0x1: port A
- // 0x2: port B data direction
- // 0x3: port A data direction
- // 0x4: timer lo
- // 0x5: timer hi
- // 0x6: timer latch lo
- // 0x7: timer latch hi
- // 0x8: unused
- // 0x9: unused
- // 0xA: unused
- // 0xB: timer control
- // 0xC: auxilary control
- // 0xD: interrupt status
- // 0xE: interrupt control
- // 0xF: unused
-
- public class Via
- {
- private ViaRegs regs;
-
- public Via()
- {
- HardReset();
- }
-
- public void Connect(DataPortConnector connector)
- {
- regs.Connect(connector, 1);
- }
-
- public void HardReset()
- {
- regs = new ViaRegs();
- }
-
- public bool IRQ
- {
- get
- {
- return regs.IRQ;
- }
- }
-
- public byte Peek(int addr)
- {
- addr &= 0xF;
- return regs[addr];
- }
-
- public void PerformCycle()
- {
- Tick0();
- Tick1();
- UpdateInterrupts();
- }
-
- public void Poke(int addr, byte val)
- {
- addr &= 0xF;
- regs[addr] = val;
- }
-
- public byte Read(ushort addr)
- {
- byte result;
-
- addr &= 0xF;
- switch (addr)
- {
- case 0x4:
- result = regs[0x4];
- regs.IT[0] = false;
- break;
- case 0x8:
- result = (byte)(regs.TC[1] & 0xFF);
- regs.IT[1] = false;
- break;
- case 0x9:
- result = (byte)(regs.TC[1] >> 8);
- regs.IT[1] = false;
- break;
- case 0xD:
- // reading this clears it
- result = regs[addr];
- regs[addr] = 0x00;
- break;
- default:
- result = regs[addr];
- break;
- }
-
- return result;
- }
-
- private void Tick0()
- {
- bool underflow = false;
-
- switch (regs.TCONTROL[0] & 0x1)
- {
- case 0:
- if (regs.TC[0] > 0)
- {
- if (--regs.TC[0] <= 0)
- {
- regs.IT[0] = true;
- underflow = true;
- }
- }
- break;
- case 1:
- if (--regs.TC[0] <= 0)
- {
- regs.IT[0] = true;
- regs.TC[0] = regs.TL[0];
- underflow = true;
- }
- break;
- }
-
- if (underflow)
- {
- if ((regs.TCONTROL[0] & 0x2) != 0)
- {
- regs.PB7 = !regs.PB7;
- }
- }
- }
-
- private void Tick1()
- {
- switch (regs.TCONTROL[1])
- {
- case 0:
- break;
- case 1:
- break;
- }
- }
-
- private void UpdateInterrupts()
- {
- regs.IRQ =
- (regs.ICA[0] & regs.EICA[0]) |
- (regs.ICA[1] & regs.EICA[1]) |
- (regs.ICB[0] & regs.EICB[0]) |
- (regs.ICB[1] & regs.EICB[1]) |
- (regs.IT[0] & regs.EIT[0]) |
- (regs.IT[1] & regs.EIT[1]) |
- (regs.ISR & regs.EISR);
- }
-
- public void Write(ushort addr, byte val)
- {
- addr &= 0xF;
- switch (addr)
- {
- case 0x4: // write low counter
- regs[0x6] = val;
- break;
- case 0x5: // write high counter
- regs[0x4] = regs[0x06];
- regs[0x5] = val;
- regs[0x7] = val;
- regs.IT[0] = false;
- break;
- case 0x7:
- regs[0x7] = val;
- regs.IT[0] = false;
- break;
- case 0x8:
- regs.TL[1] = val;
- break;
- case 0x9:
- regs.TC[1] = ((int)val << 8) | regs.TL[1];
- regs.IT[1] = false;
- break;
- default:
- regs[addr] = val;
- break;
- }
- }
- }
-}
diff --git a/BizHawk.Emulation/Computers/Commodore64/VicII.cs b/BizHawk.Emulation/Computers/Commodore64/VicII.cs
deleted file mode 100644
index 9bd7fb7e75..0000000000
--- a/BizHawk.Emulation/Computers/Commodore64/VicII.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace BizHawk.Emulation.Computers.Commodore64
-{
- public partial class VicII : IVideoProvider
- {
- public Memory mem;
- public Region region;
- public ChipSignals signal;
-
- public VicII(ChipSignals newSignal, Region newRegion)
- {
- region = newRegion;
- signal = newSignal;
- InitPipeline(newRegion);
- HardReset();
- }
-
- public int CyclesPerFrame
- {
- get
- {
- return pipelineLength * rasterLines;
- }
- }
-
- public double FramesPerSecond
- {
- get
- {
- switch (region)
- {
- case Region.NTSC:
- return (14318181d / 14d) / (double)CyclesPerFrame;
- case Region.PAL:
- return (17734472d / 18d) / (double)CyclesPerFrame;
- }
- return 0;
- }
- }
-
- public void HardReset()
- {
- InitRegs();
- InitVideoBuffer();
- cycle = 0;
- }
-
- public bool Interrupt
- {
- get
- {
- return IRQ;
- }
- }
-
- public void PerformCycle()
- {
- ExecutePipeline();
- UpdateInterrupts();
- signal.VicIRQ = IRQ;
- }
-
- }
-}
diff --git a/BizHawk.Emulation/Computers/Commodore64/VicIIPipeline.cs b/BizHawk.Emulation/Computers/Commodore64/VicIIPipeline.cs
deleted file mode 100644
index 1502cd8ee1..0000000000
--- a/BizHawk.Emulation/Computers/Commodore64/VicIIPipeline.cs
+++ /dev/null
@@ -1,670 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace BizHawk.Emulation.Computers.Commodore64
-{
- public partial class VicII : IVideoProvider
- {
- private int baCount;
- private int cycle;
- private uint[][] pipeline;
- private bool pipelineGAccess;
- private int pipelineLength;
-
- private void ExecutePipeline()
- {
- pipelineGAccess = false;
- advanceX = true;
- baCount = 0;
-
- uint tableX = pipeline[0][cycle];
- uint tableFetch = pipeline[1][cycle];
- uint tableBA = pipeline[2][cycle];
- uint tableOps = pipeline[3][cycle];
-
- #region Pipeline Cycle Init
- {
-
- //rasterX = (int)tableX;
-
- if (cycle == 0)
- {
- if (!rasterInterruptTriggered && RASTER == rasterInterruptLine && RASTER > 0)
- {
- IRST = true;
- rasterInterruptTriggered = true;
- }
- }
- else if (cycle == 1)
- {
- if (!rasterInterruptTriggered && RASTER == 0 && rasterInterruptLine == 0)
- {
- IRST = true;
- rasterInterruptTriggered = true;
- }
- }
-
- if (RASTER == 0x030)
- displayEnabled = (displayEnabled | DEN);
-
- if (RASTER >= 0x030 && RASTER < 0x0F8)
- badline = ((YSCROLL == (RASTER & 0x07)) && displayEnabled);
- else
- badline = false;
-
- if (badline)
- idle = false;
-
- for (int i = 0; i < 8; i++)
- if (!sprites[i].MxYE)
- sprites[i].MxYEToggle = true;
- }
- #endregion
- #region Pipeline Fetch
- {
- switch (tableFetch)
- {
- case 0x00: PipelineFetchSpriteP(0); break;
- case 0x01: PipelineFetchSpriteP(1); break;
- case 0x02: PipelineFetchSpriteP(2); break;
- case 0x03: PipelineFetchSpriteP(3); break;
- case 0x04: PipelineFetchSpriteP(4); break;
- case 0x05: PipelineFetchSpriteP(5); break;
- case 0x06: PipelineFetchSpriteP(6); break;
- case 0x07: PipelineFetchSpriteP(7); break;
- case 0x08: PipelineFetchSpriteS(0); break;
- case 0x09: PipelineFetchSpriteS(1); break;
- case 0x0A: PipelineFetchSpriteS(2); break;
- case 0x0B: PipelineFetchSpriteS(3); break;
- case 0x0C: PipelineFetchSpriteS(4); break;
- case 0x0D: PipelineFetchSpriteS(5); break;
- case 0x0E: PipelineFetchSpriteS(6); break;
- case 0x0F: PipelineFetchSpriteS(7); break;
- case 0x10:
- mem.VicRead(ECM ? (ushort)0x39FF : (ushort)0x3FFF);
- break;
- case 0x11:
- mem.VicRead((ushort)refreshAddress);
- refreshAddress = (refreshAddress - 1) & 0xFF;
- refreshAddress |= 0x3F00;
- break;
- case 0x12:
- PipelineFetchC();
- break;
- }
- }
- #endregion
- #region BA
- {
- uint baSprite0 = tableBA & 0xF;
- uint baSprite1 = (tableBA >> 4) & 0xF;
- uint baSprite2 = (tableBA >> 8) & 0xF;
- bool baFetch = ((tableBA >> 12) & 0x1) != 0;
-
- if ((baSprite0 < 8 && sprites[baSprite0].MDMA) || (baSprite1 < 8 && sprites[baSprite1].MDMA) || (baSprite2 < 8 && sprites[baSprite2].MDMA) || (baFetch && badline))
- baCount++;
- }
- #endregion
- #region Operations
- {
- //if ((tableOps & OpChkBrdL0) != 0)
- //{
- //}
- //if ((tableOps & OpChkBrdL1) != 0)
- //{
- //}
- //if ((tableOps & OpChkBrdR0) != 0)
- //{
- //}
- //if ((tableOps & OpChkBrdR1) != 0)
- //{
- //}
- //if ((tableOps & OpChkSprCrunch) != 0)
- //{
- //}
- if ((tableOps & OpChkSprDisp) != 0)
- {
- for (int i = 0; i < 8; i++)
- {
- VicIISprite sprite = sprites[i];
- sprite.MC = sprite.MCBASE;
- if (sprite.MDMA && sprite.MxY == (RASTER & 0xFF))
- {
- sprite.MxXEToggle = false;
- }
- }
- }
- if ((tableOps & OpChkSprDma) != 0)
- {
- for (int i = 0; i < 8; i++)
- {
- VicIISprite sprite = sprites[i];
- sprite.MD = false;
- if (sprite.MxE == true && sprite.MxY == (RASTER & 0xFF) && sprite.MDMA == false)
- {
- sprite.MDMA = true;
- sprite.MCBASE = 0;
- if (sprite.MxYE)
- sprite.MxYEToggle = false;
- }
- sprite.MxXEToggle = false;
- }
- }
- if ((tableOps & OpChkSprExp) != 0)
- {
- for (int i = 0; i < 8; i++)
- if (sprites[i].MxYE)
- sprites[i].MxYEToggle = !sprites[i].MxYEToggle;
- }
- if ((tableOps & OpUpdateMcBase) != 0)
- {
- for (int i = 0; i < 8; i++)
- {
- VicIISprite sprite = sprites[i];
- if (sprite.MxYEToggle)
- {
- sprite.MCBASE += 3;
- if (sprite.MxYEToggle && sprite.MCBASE == 63)
- {
- sprite.MDMA = false;
- }
- }
- }
- }
- if ((tableOps & OpUpdateRc) != 0)
- {
- if (RC == 7)
- {
- idle = true;
- VCBASE = VC;
- }
- if (!idle)
- {
- RC = (RC + 1) & 0x7;
- }
- }
- if ((tableOps & OpUpdateVc) != 0)
- {
- VC = VCBASE;
- VMLI = 0;
- bitmapColumn = 0;
- if (badline)
- {
- RC = 0;
- }
- bitmapData = 0;
- colorData = 0;
- characterData = 0;
- }
- }
- #endregion
- #region Render
- {
-
- for (int i = 0; i < 8; i++)
- {
- int pixel;
-
- if ((pipelineGAccess) && XSCROLL == i)
- {
- #region Fetch G
- {
- int gAddress;
- bitmapColumn = 0;
-
- if (idle || VMLI >= 40 || !displayEnabled)
- {
- mem.VicRead(ECM ? (ushort)0x39FF : (ushort)0x3FFF);
- characterData = 0;
- colorData = 0;
- }
- else
- {
- characterData = characterDataBus;
- colorData = colorDataBus;
- }
- switch (graphicsMode)
- {
- case 0: // 000
- case 1: // 001
- gAddress = (CB << 11) | (characterData << 3) | RC;
- bitmapData = mem.VicRead((ushort)gAddress);
- break;
- case 2: // 010
- case 3: // 011
- gAddress = ((CB & 0x4) << 11) | (VC << 3) | RC;
- bitmapData = mem.VicRead((ushort)gAddress);
- break;
- case 4: // 100
- case 5: // 101
- gAddress = (CB << 11) | ((characterData & 0x3F) << 3) | RC;
- bitmapData = mem.VicRead((ushort)gAddress);
- break;
- case 6: // 110
- case 7: // 111
- gAddress = ((CB & 0x4) << 11) | ((VC & 0x33F) << 3) | RC;
- bitmapData = mem.VicRead((ushort)gAddress);
- break;
- }
- if (!idle)
- {
- VC++;
- VMLI++;
- }
- }
- #endregion
- }
-
- if (rasterX == borderRight)
- borderOnMain = true;
- if (rasterX == borderLeft)
- {
- if (RASTER == borderBottom)
- borderOnVertical = true;
- if ((RASTER == borderTop) && DEN)
- borderOnVertical = false;
- if (!borderOnVertical)
- borderOnMain = false;
- }
-
- #region Plotter
- switch (graphicsMode)
- {
- case 0x00:
- if ((bitmapData & 0x80) != 0x00)
- {
- plotterData = 0x03;
- plotterPixel = colorData;
- }
- else
- {
- plotterData = 0x00;
- plotterPixel = BxC[0];
- }
- bitmapData <<= 1;
- break;
- case 0x01:
- if ((colorData & 0x08) != 0x00)
- {
- if ((bitmapColumn & 0x01) == 0x00)
- {
- plotterData = (bitmapData >> 6) & 0x03;
- bitmapData <<= 2;
- }
- switch (plotterData)
- {
- case 0x00:
- plotterPixel = BxC[0];
- break;
- case 0x01:
- plotterPixel = BxC[1];
- break;
- case 0x02:
- plotterPixel = BxC[2];
- break;
- case 0x03:
- plotterPixel = colorData & 0x7;
- break;
- }
- }
- else
- {
- if ((bitmapData & 0x80) != 0x00)
- {
- plotterData = 0x03;
- plotterPixel = colorData;
- }
- else
- {
- plotterData = 0x00;
- plotterPixel = BxC[0];
- }
- bitmapData <<= 1;
- }
- break;
- case 0x02:
- if ((bitmapData & 0x80) != 0x00)
- {
- plotterData = 0x03;
- plotterPixel = characterData >> 4;
- }
- else
- {
- plotterData = 0x00;
- plotterPixel = characterData & 0xF;
- }
- bitmapData <<= 1;
- break;
- case 0x03:
- if ((bitmapColumn & 0x01) == 0x00)
- {
- plotterData = (bitmapData >> 6) & 0x03;
- bitmapData <<= 2;
- }
- switch (plotterData)
- {
- case 0x00:
- plotterPixel = BxC[0];
- break;
- case 0x01:
- plotterPixel = characterData >> 4;
- break;
- case 0x02:
- plotterPixel = characterData & 0xF;
- break;
- case 0x03:
- plotterPixel = colorData & 0xF;
- break;
- }
- break;
- case 0x04:
- if ((bitmapData & 0x80) != 0x00)
- {
- plotterData = 0x03;
- plotterPixel = colorData;
- }
- else
- {
- plotterData = 0x00;
- plotterPixel = BxC[characterData >> 6];
- }
- bitmapData <<= 1;
- break;
- case 0x05:
- if ((colorData & 0x08) != 0x00)
- {
- if ((bitmapColumn & 0x01) == 0x00)
- {
- plotterData = bitmapData >> 6;
- plotterPixel = 0;
- bitmapData <<= 2;
- }
- }
- else
- {
- plotterData = bitmapData >> 7;
- plotterPixel = 0;
- bitmapData <<= 1;
- }
- break;
- case 0x06:
- if ((bitmapData & 0x80) != 0x00)
- {
- plotterData = 0x03;
- plotterPixel = 0;
- }
- else
- {
- plotterData = 0x00;
- plotterPixel = 0;
- }
- bitmapData <<= 1;
- break;
- case 0x07:
- if ((bitmapColumn & 0x01) == 0x00)
- {
- plotterData = bitmapData >> 6;
- bitmapData <<= 2;
- }
- plotterPixel = 0;
- break;
- }
- #endregion
- #region Sprites
- {
- int pixelOwner = -1;
- int sData = 0;
- int sPixel = 0;
-
- spriteData = 0;
- spritePixel = 0;
- spritePriority = false;
-
- for (int j = 0; j < 8; j++)
- {
- VicIISprite sprite = sprites[j];
-
- if (sprite.MSR == 0)
- {
- sprite.MD = false;
- }
- else if ((!sprite.MD) && (sprite.MxX == rasterX))
- {
- sprite.MD = true;
- }
-
- if (sprite.MD)
- {
- if (sprite.MxMC)
- {
- sData = ((sprite.MSR >> 22) & 0x3);
- if ((rasterX & 0x1) != (sprite.MxX & 0x1))
- {
- if (!sprite.MxXE || sprite.MxXEToggle)
- {
- sprite.MSR <<= 2;
- }
- sprite.MxXEToggle = !sprite.MxXEToggle;
- }
- }
- else
- {
- sData = ((sprite.MSR >> 22) & 0x2);
- if (!sprite.MxXE || sprite.MxXEToggle)
- {
- sprite.MSR <<= 1;
- }
- sprite.MxXEToggle = !sprite.MxXEToggle;
- }
-
- if (!borderOnVertical)
- {
- if (sData != 0)
- {
- if (pixelOwner >= 0)
- {
- sprite.MxM = true;
- sprites[pixelOwner].MxM = true;
- }
- else
- {
- switch (sData)
- {
- case 1:
- sPixel = MMx[0];
- break;
- case 2:
- sPixel = sprite.MxC;
- break;
- case 3:
- sPixel = MMx[1];
- break;
- }
-
- spritePriority = sprite.MxDP;
- spritePixel = sPixel;
- spriteData = sData;
- pixelOwner = j;
- }
- if (plotterDataBuffer[plotterBufferIndex] >= 0x2)
- {
- sprite.MxD = true;
- IMBC = true;
- }
- }
- }
- }
- }
- }
- #endregion
- #region Pixelbuffer Write
- {
- if (borderOnMain || borderOnVertical)
- pixel = EC;
- else
- {
- if ((spriteData == 0) || (spritePriority == true && plotterDataBuffer[plotterBufferIndex] >= 0x2))
- {
- pixel = plotterPixelBuffer[plotterBufferIndex];
- }
- else
- {
- pixel = spritePixel;
- }
- }
-
- // write pixel to buffer
- videoBuffer[videoBufferIndex++] = palette[pixel & 0xF];
- if (videoBufferIndex == videoBufferSize)
- videoBufferIndex = 0;
-
- plotterPixelBuffer[plotterBufferIndex] = plotterPixel;
- plotterDataBuffer[plotterBufferIndex] = plotterData;
- plotterBufferIndex++;
- if (plotterBufferIndex == plotterDelay)
- plotterBufferIndex = 0;
-
- bitmapColumn++;
- if (advanceX)
- {
- rasterX++;
- if (rasterX >= rasterWidth)
- rasterX -= rasterWidth;
- }
- }
- #endregion
- }
- }
- #endregion
-
- cycle++;
- if (cycle >= pipelineLength)
- {
- cycle = 0;
- rasterInterruptTriggered = false;
- RASTER++;
- if (RASTER == rasterLines)
- {
- RASTER = 0;
- VCBASE = 0;
- displayEnabled = false;
- rasterX = rasterLeft;
- }
- badline = false;
- }
-
- signal.VicBA = (baCount > 0);
- PipelineBA(signal.VicBA);
- if (baCount > 0)
- {
- if (fetchCounter > 0)
- fetchCounter--;
- signal.VicAEC = (fetchCounter != 0);
- }
- else
- {
- fetchCounter = 0;
- signal.VicAEC = true;
- }
- }
-
- private void InitPipeline(Region region)
- {
- switch (region)
- {
- case Region.NTSC:
- plotterDelay = 12;
- rasterLines = 263;
- rasterLeft = 0x19C;
- pipeline = cycleTabNTSC;
- break;
- case Region.PAL:
- plotterDelay = 4;
- rasterLines = 312;
- rasterLeft = 0x194;
- pipeline = cycleTabPAL;
- break;
- }
-
- pipelineLength = pipeline[0].Length;
- }
-
- private void PipelineBA(bool val)
- {
- if (val)
- {
- if (signal.VicAEC == true && fetchCounter == 0)
- fetchCounter = 4;
- }
- else
- {
- fetchCounter = 0;
- }
- }
-
- private void PipelineBorderCheck()
- {
- if ((RASTER == borderTop) && (DEN))
- borderOnVertical = false;
- if (RASTER == borderBottom)
- borderOnVertical = true;
- }
-
- private void PipelineFetchC()
- {
- pipelineGAccess = true;
- if (idle || VMLI >= 40)
- {
- characterDataBus = 0;
- colorDataBus = 0;
- }
- else
- {
- if (badline)
- {
- int cAddress = (VM << 10) | VC;
- characterDataBus = mem.VicRead((ushort)cAddress);
- colorDataBus = mem.colorRam[VC];
- }
- else
- {
- characterDataBus = characterMemory[VMLI];
- colorDataBus = colorMemory[VMLI];
- return;
- }
- colorMemory[VMLI] = colorDataBus;
- characterMemory[VMLI] = characterDataBus;
- }
- }
-
- private void PipelineFetchSpriteP(int index)
- {
- VicIISprite spr = sprites[index];
- ushort pointerOffset = (ushort)((VM << 10) | 0x3F8 | index);
-
- spr.MPTR = mem.VicRead(pointerOffset);
-
- if (spr.MDMA)
- {
- spr.MSR = mem.VicRead((ushort)((spr.MPTR << 6) | (spr.MC)));
- spr.MC++;
- }
- }
-
- private void PipelineFetchSpriteS(int index)
- {
- VicIISprite spr = sprites[index];
- if (spr.MDMA)
- {
- for (int i = 0; i < 2; i++)
- {
- spr.MSR <<= 8;
- spr.MSR |= mem.VicRead((ushort)((spr.MPTR << 6) | (spr.MC)));
- spr.MC++;
- }
- }
- }
- }
-}
diff --git a/BizHawk.Emulation/Computers/Commodore64/VicIIPipelineBuilder.cs b/BizHawk.Emulation/Computers/Commodore64/VicIIPipelineBuilder.cs
deleted file mode 100644
index 82e3e5ff19..0000000000
--- a/BizHawk.Emulation/Computers/Commodore64/VicIIPipelineBuilder.cs
+++ /dev/null
@@ -1,165 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace BizHawk.Emulation.Computers.Commodore64
-{
- public partial class VicII
- {
- private const uint OpNone = 0x000;
- private const uint OpUpdateVc = 0x001;
- private const uint OpChkSprCrunch = 0x002;
- private const uint OpUpdateMcBase = 0x004;
- private const uint OpChkBrdL1 = 0x008;
- private const uint OpChkBrdL0 = 0x010;
- private const uint OpChkBrdR0 = 0x020;
- private const uint OpChkBrdR1 = 0x040;
- private const uint OpChkSprDma = 0x080;
- private const uint OpChkSprExp = 0x100;
- private const uint OpUpdateRc = 0x200;
- private const uint OpChkSprDisp = 0x400;
-
- private static uint[][] cycleTabNTSC = new uint[][]
- {
- new uint[] // x
- {
- 0x19C, 0x1A4, 0x1AC, 0x1B4, 0x1BC,
- 0x1C4, 0x1CC, 0x1D4, 0x1DC, 0x1E4,
- 0x1EC, 0x1F4, 0x1FC, 0x004, 0x00C,
- 0x014, 0x01C, 0x024, 0x02C, 0x034,
- 0x03C, 0x044, 0x04C, 0x054, 0x05C,
- 0x064, 0x06C, 0x074, 0x07C, 0x084,
- 0x08C, 0x094, 0x09C, 0x0A4, 0x0AC,
- 0x0B4, 0x0BC, 0x0C4, 0x0CC, 0x0D4,
- 0x0DC, 0x0E4, 0x0EC, 0x0F4, 0x0FC,
- 0x104, 0x10C, 0x114, 0x11C, 0x124,
- 0x12C, 0x134, 0x13C, 0x144, 0x14C,
- 0x154, 0x15C, 0x164, 0x16C, 0x174,
- 0x17C, 0x184, 0x184, 0x18C, 0x194
- },
- new uint[] // fetch (0-7=P 8-F=S 10=I 11=R 12=G/C)
- {
- 0x0B, 0x04, 0x0C, 0x05, 0x0D,
- 0x06, 0x0E, 0x07, 0x0F, 0x10,
- 0x11, 0x11, 0x11, 0x11, 0x11,
- 0x12, 0x12, 0x12, 0x12, 0x12,
- 0x12, 0x12, 0x12, 0x12, 0x12,
- 0x12, 0x12, 0x12, 0x12, 0x12,
- 0x12, 0x12, 0x12, 0x12, 0x12,
- 0x12, 0x12, 0x12, 0x12, 0x12,
- 0x12, 0x12, 0x12, 0x12, 0x12,
- 0x12, 0x12, 0x12, 0x12, 0x12,
- 0x12, 0x12, 0x12, 0x12, 0x12,
- 0x10, 0x10, 0x10, 0x00, 0x08,
- 0x01, 0x09, 0x02, 0x0A, 0x03
- },
- new uint[] // ba (flg/spr/spr/spr 8=none)
- {
- 0x0845, 0x0885, 0x0856, 0x0886, 0x0867,
- 0x0887, 0x0887, 0x0888, 0x0888, 0x0888,
- 0x0888, 0x0888, 0x1888, 0x1888, 0x1888,
- 0x1888, 0x1888, 0x1888, 0x1888, 0x1888,
- 0x1888, 0x1888, 0x1888, 0x1888, 0x1888,
- 0x1888, 0x1888, 0x1888, 0x1888, 0x1888,
- 0x1888, 0x1888, 0x1888, 0x1888, 0x1888,
- 0x1888, 0x1888, 0x1888, 0x1888, 0x1888,
- 0x1888, 0x1888, 0x1888, 0x1888, 0x1888,
- 0x1888, 0x1888, 0x1888, 0x1888, 0x1888,
- 0x1888, 0x1888, 0x1888, 0x1888, 0x1888,
- 0x0880, 0x0880, 0x0801, 0x0881, 0x0812,
- 0x0882, 0x0823, 0x0883, 0x0834, 0x0884
- },
- new uint[] // operations
- {
- OpNone, OpNone, OpNone, OpNone, OpNone,
- OpNone, OpNone, OpNone, OpNone, OpNone,
- OpNone, OpNone, OpNone, OpUpdateVc, OpChkSprCrunch,
- OpUpdateMcBase,OpChkBrdL1, OpChkBrdL0, OpNone, OpNone,
- OpNone, OpNone, OpNone, OpNone, OpNone,
- OpNone, OpNone, OpNone, OpNone, OpNone,
- OpNone, OpNone, OpNone, OpNone, OpNone,
- OpNone, OpNone, OpNone, OpNone, OpNone,
- OpNone, OpNone, OpNone, OpNone, OpNone,
- OpNone, OpNone, OpNone, OpNone, OpNone,
- OpNone, OpNone, OpNone, OpNone, OpNone,
- OpChkSprDma|OpChkBrdR0|OpChkSprExp,
- OpChkSprDma|OpChkBrdR1,
- OpUpdateRc,
- OpChkSprDisp,
- OpNone,
- OpNone, OpNone, OpNone, OpNone, OpNone
- }
- };
-
- private static uint[][] cycleTabPAL = new uint[][]
- {
- new uint[] // x
- {
- 0x194, 0x19C, 0x1A4, 0x1AC, 0x1B4,
- 0x1BC, 0x1C4, 0x1CC, 0x1D4, 0x1DC,
- 0x1E4, 0x1EC, 0x1F4, 0x004, 0x00C,
- 0x014, 0x01C, 0x024, 0x02C, 0x034,
- 0x03C, 0x044, 0x04C, 0x054, 0x05C,
- 0x064, 0x06C, 0x074, 0x07C, 0x084,
- 0x08C, 0x094, 0x09C, 0x0A4, 0x0AC,
- 0x0B4, 0x0BC, 0x0C4, 0x0CC, 0x0D4,
- 0x0DC, 0x0E4, 0x0EC, 0x0F4, 0x0FC,
- 0x104, 0x10C, 0x114, 0x11C, 0x124,
- 0x12C, 0x134, 0x13C, 0x144, 0x14C,
- 0x154, 0x15C, 0x164, 0x16C, 0x174,
- 0x17C, 0x184, 0x18C
- },
- new uint[] // fetch (0-7=P 8-F=S 10=I 11=R 12=G/C)
- {
- 0x03, 0x0B, 0x04, 0x0C, 0x05,
- 0x0D, 0x06, 0x0E, 0x07, 0x0F,
- 0x11, 0x11, 0x11, 0x11, 0x11,
- 0x12, 0x12, 0x12, 0x12, 0x12,
- 0x12, 0x12, 0x12, 0x12, 0x12,
- 0x12, 0x12, 0x12, 0x12, 0x12,
- 0x12, 0x12, 0x12, 0x12, 0x12,
- 0x12, 0x12, 0x12, 0x12, 0x12,
- 0x12, 0x12, 0x12, 0x12, 0x12,
- 0x12, 0x12, 0x12, 0x12, 0x12,
- 0x12, 0x12, 0x12, 0x12, 0x12,
- 0x10, 0x10, 0x00, 0x08, 0x01,
- 0x09, 0x02, 0x0A
- },
- new uint[] // ba (flg/spr/spr/spr 8=none)
- {
- 0x0884, 0x0845, 0x0885, 0x0856, 0x0886,
- 0x0867, 0x0887, 0x0887, 0x0888, 0x0888,
- 0x0888, 0x0888, 0x1888, 0x1888, 0x1888,
- 0x1888, 0x1888, 0x1888, 0x1888, 0x1888,
- 0x1888, 0x1888, 0x1888, 0x1888, 0x1888,
- 0x1888, 0x1888, 0x1888, 0x1888, 0x1888,
- 0x1888, 0x1888, 0x1888, 0x1888, 0x1888,
- 0x1888, 0x1888, 0x1888, 0x1888, 0x1888,
- 0x1888, 0x1888, 0x1888, 0x1888, 0x1888,
- 0x1888, 0x1888, 0x1888, 0x1888, 0x1888,
- 0x1888, 0x1888, 0x1888, 0x1888, 0x1880,
- 0x0880, 0x0801, 0x0881, 0x0812, 0x0882,
- 0x0823, 0x0883, 0x0834
- },
- new uint[] // operations
- {
- OpNone, OpNone, OpNone, OpNone, OpNone,
- OpNone, OpNone, OpNone, OpNone, OpNone,
- OpNone, OpNone, OpNone, OpUpdateVc, OpChkSprCrunch,
- OpUpdateMcBase,OpChkBrdL1, OpChkBrdL0, OpNone, OpNone,
- OpNone, OpNone, OpNone, OpNone, OpNone,
- OpNone, OpNone, OpNone, OpNone, OpNone,
- OpNone, OpNone, OpNone, OpNone, OpNone,
- OpNone, OpNone, OpNone, OpNone, OpNone,
- OpNone, OpNone, OpNone, OpNone, OpNone,
- OpNone, OpNone, OpNone, OpNone, OpNone,
- OpNone, OpNone, OpNone, OpNone, OpChkSprDma,
- OpChkSprDma|OpChkBrdR0|OpChkSprExp,
- OpChkBrdR1,
- OpUpdateRc|OpChkSprDisp,
- OpNone, OpNone, OpNone, OpNone, OpNone
- }
- };
- }
-}
diff --git a/BizHawk.Emulation/Computers/Commodore64/VicIIRegs.cs b/BizHawk.Emulation/Computers/Commodore64/VicIIRegs.cs
deleted file mode 100644
index 010a163f45..0000000000
--- a/BizHawk.Emulation/Computers/Commodore64/VicIIRegs.cs
+++ /dev/null
@@ -1,614 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace BizHawk.Emulation.Computers.Commodore64
-{
- public partial class VicII : IVideoProvider
- {
- private class VicIISprite
- {
- // internal regs
- public int MC;
- public int MCBASE;
- public bool MD;
- public bool MDMA;
- public int MPTR;
- public int MSR;
- public bool MxXEToggle;
- public bool MxYEToggle;
-
- // external regs
- public int MxC; // sprite color
- public bool MxD; // sprite-data collision
- public bool MxDP; // sprite priority
- public bool MxE; // sprite enabled
- public bool MxM; // sprite-sprite collision
- public bool MxMC; // sprite multicolor
- public int MxX; // sprite X coordinate
- public bool MxXE; // sprite X expansion
- public int MxY; // sprite Y coordinate
- public bool MxYE; // sprite Y expansion
- }
-
- // internal regs
- private int RC;
- private int VC;
- private int VCBASE;
- private int VMLI;
-
- // external regs
- private bool BMM; // bitmap mode
- private int[] BxC = new int[4]; // background colors
- private int CB; // character bitmap offset
- private bool CSEL; // column select
- private bool DEN; // display enabled
- private int EC; // border color
- private bool ECM; // extra color mode
- private bool ELP; // enable lightpen interrupt
- private bool EMBC; // enable sprite-data interrupt
- private bool EMMC; // enable sprite-sprite interrupt
- private bool ERST; // enable raster line interrupt
- private bool ILP; // light pen interrupt active
- private bool IMBC; // sprite-data interrupt active
- private bool IMMC; // sprite-sprite interrupt active
- private bool IRQ; // interrupt was triggered
- private bool IRST; // raster line interrupt active
- private int LPX; // lightpen X coordinate
- private int LPY; // lightpen Y coordinate
- private bool MCM; // multicolor mode
- private int[] MMx = new int[2]; // sprite extra color
- private int RASTER; // current raster line
- private bool RES; // reset bit (does nothing in this version of the VIC)
- private bool RSEL; // row select
- private int VM; // video memory offset
- private int XSCROLL; // X scroll position
- private int YSCROLL; // Y scroll position
-
- private int spriteData;
- private int spritePixel;
- private bool spritePriority;
- private VicIISprite[] sprites;
-
- private bool advanceX;
- private bool badline;
- private int bitmapColumn;
- private byte bitmapData;
- private int borderBottom;
- private int borderLeft;
- private bool borderOnMain;
- private bool borderOnVertical;
- private int borderRight;
- private int borderTop;
- private bool centerEnabled;
- private byte characterData;
- private byte characterDataBus;
- private byte[] characterMemory;
- private byte colorData;
- private byte colorDataBus;
- private byte[] colorMemory;
- private bool displayEnabled;
- private int fetchCounter;
- private int graphicsMode;
- private bool idle;
- private int plotterBufferIndex;
- private int plotterData;
- private int[] plotterDataBuffer;
- private int plotterDelay;
- private int plotterPixel;
- private int[] plotterPixelBuffer;
- private int rasterInterruptLine;
- private bool rasterInterruptTriggered;
- private int rasterLeft;
- private int rasterLines;
- private int rasterWidth;
- private int rasterX;
- private int refreshAddress;
-
- private void InitRegs()
- {
- // init sprites
- sprites = new VicIISprite[8];
- for (int i = 0; i < 8; i++)
- sprites[i] = new VicIISprite();
-
- // init buffers
- plotterDataBuffer = new int[plotterDelay];
- plotterPixelBuffer = new int[plotterDelay];
- characterMemory = new byte[40];
- colorMemory = new byte[40];
-
- // init raster data
- rasterX = rasterLeft;
- rasterWidth = pipelineLength * 8;
-
- // reset regs
- for (int i = 0; i < 0x40; i++)
- this[i] = 0x00;
-
- // power on state
- this[0x16] = 0xC0;
- this[0x18] = 0x01;
- this[0x19] = 0x71;
- this[0x1A] = 0xF0;
- RC = 7;
- refreshAddress = 0x3FFF;
- idle = true;
- }
-
- private byte this[int addr]
- {
- get
- {
- int result = 0xFF; // value for any open bits
- addr &= 0x3F;
-
- switch (addr)
- {
- case 0x00:
- case 0x02:
- case 0x04:
- case 0x06:
- case 0x08:
- case 0x0A:
- case 0x0C:
- case 0x0E:
- result = sprites[addr >> 1].MxX;
- break;
- case 0x01:
- case 0x03:
- case 0x05:
- case 0x07:
- case 0x09:
- case 0x0B:
- case 0x0D:
- case 0x0F:
- result = sprites[addr >> 1].MxY;
- break;
- case 0x10:
- result = ((sprites[0].MxX & 0x100) != 0) ? 0x01 : 0x00;
- result |= ((sprites[1].MxX & 0x100) != 0) ? 0x02 : 0x00;
- result |= ((sprites[2].MxX & 0x100) != 0) ? 0x04 : 0x00;
- result |= ((sprites[3].MxX & 0x100) != 0) ? 0x08 : 0x00;
- result |= ((sprites[4].MxX & 0x100) != 0) ? 0x10 : 0x00;
- result |= ((sprites[5].MxX & 0x100) != 0) ? 0x20 : 0x00;
- result |= ((sprites[6].MxX & 0x100) != 0) ? 0x40 : 0x00;
- result |= ((sprites[7].MxX & 0x100) != 0) ? 0x80 : 0x00;
- break;
- case 0x11:
- result = YSCROLL & 0x07;
- result |= (RSEL ? 0x08 : 0x00);
- result |= (DEN ? 0x10 : 0x00);
- result |= (BMM ? 0x20 : 0x00);
- result |= (ECM ? 0x40 : 0x00);
- result |= ((RASTER & 0x100) >> 1);
- break;
- case 0x12:
- result = RASTER & 0xFF;
- break;
- case 0x13:
- result = LPX;
- break;
- case 0x14:
- result = LPY;
- break;
- case 0x15:
- result = (sprites[0].MxE ? 0x01 : 0x00);
- result |= (sprites[1].MxE ? 0x02 : 0x00);
- result |= (sprites[2].MxE ? 0x04 : 0x00);
- result |= (sprites[3].MxE ? 0x08 : 0x00);
- result |= (sprites[4].MxE ? 0x10 : 0x00);
- result |= (sprites[5].MxE ? 0x20 : 0x00);
- result |= (sprites[6].MxE ? 0x40 : 0x00);
- result |= (sprites[7].MxE ? 0x80 : 0x00);
- break;
- case 0x16:
- result &= 0xC0;
- result |= XSCROLL & 0x07;
- result |= (CSEL ? 0x08 : 0x00);
- result |= (MCM ? 0x10 : 0x00);
- result |= (RES ? 0x20 : 0x00);
- break;
- case 0x17:
- result = (sprites[0].MxYE ? 0x01 : 0x00);
- result |= (sprites[1].MxYE ? 0x02 : 0x00);
- result |= (sprites[2].MxYE ? 0x04 : 0x00);
- result |= (sprites[3].MxYE ? 0x08 : 0x00);
- result |= (sprites[4].MxYE ? 0x10 : 0x00);
- result |= (sprites[5].MxYE ? 0x20 : 0x00);
- result |= (sprites[6].MxYE ? 0x40 : 0x00);
- result |= (sprites[7].MxYE ? 0x80 : 0x00);
- break;
- case 0x18:
- result &= 0x01;
- result |= (CB & 0x07) << 1;
- result |= (VM & 0x0F) << 4;
- break;
- case 0x19:
- result &= 0x70;
- result |= (IRST ? 0x01 : 0x00);
- result |= (IMBC ? 0x02 : 0x00);
- result |= (IMMC ? 0x04 : 0x00);
- result |= (ILP ? 0x08 : 0x00);
- result |= (IRQ ? 0x80 : 0x00);
- break;
- case 0x1A:
- result &= 0xF0;
- result |= (ERST ? 0x01 : 0x00);
- result |= (EMBC ? 0x02 : 0x00);
- result |= (EMMC ? 0x04 : 0x00);
- result |= (ELP ? 0x08 : 0x00);
- break;
- case 0x1B:
- result = (sprites[0].MxDP ? 0x01 : 0x00);
- result |= (sprites[1].MxDP ? 0x02 : 0x00);
- result |= (sprites[2].MxDP ? 0x04 : 0x00);
- result |= (sprites[3].MxDP ? 0x08 : 0x00);
- result |= (sprites[4].MxDP ? 0x10 : 0x00);
- result |= (sprites[5].MxDP ? 0x20 : 0x00);
- result |= (sprites[6].MxDP ? 0x40 : 0x00);
- result |= (sprites[7].MxDP ? 0x80 : 0x00);
- break;
- case 0x1C:
- result = (sprites[0].MxMC ? 0x01 : 0x00);
- result |= (sprites[1].MxMC ? 0x02 : 0x00);
- result |= (sprites[2].MxMC ? 0x04 : 0x00);
- result |= (sprites[3].MxMC ? 0x08 : 0x00);
- result |= (sprites[4].MxMC ? 0x10 : 0x00);
- result |= (sprites[5].MxMC ? 0x20 : 0x00);
- result |= (sprites[6].MxMC ? 0x40 : 0x00);
- result |= (sprites[7].MxMC ? 0x80 : 0x00);
- break;
- case 0x1D:
- result = (sprites[0].MxXE ? 0x01 : 0x00);
- result |= (sprites[1].MxXE ? 0x02 : 0x00);
- result |= (sprites[2].MxXE ? 0x04 : 0x00);
- result |= (sprites[3].MxXE ? 0x08 : 0x00);
- result |= (sprites[4].MxXE ? 0x10 : 0x00);
- result |= (sprites[5].MxXE ? 0x20 : 0x00);
- result |= (sprites[6].MxXE ? 0x40 : 0x00);
- result |= (sprites[7].MxXE ? 0x80 : 0x00);
- break;
- case 0x1E:
- result = (sprites[0].MxM ? 0x01 : 0x00);
- result |= (sprites[1].MxM ? 0x02 : 0x00);
- result |= (sprites[2].MxM ? 0x04 : 0x00);
- result |= (sprites[3].MxM ? 0x08 : 0x00);
- result |= (sprites[4].MxM ? 0x10 : 0x00);
- result |= (sprites[5].MxM ? 0x20 : 0x00);
- result |= (sprites[6].MxM ? 0x40 : 0x00);
- result |= (sprites[7].MxM ? 0x80 : 0x00);
- break;
- case 0x1F:
- result = (sprites[0].MxD ? 0x01 : 0x00);
- result |= (sprites[1].MxD ? 0x02 : 0x00);
- result |= (sprites[2].MxD ? 0x04 : 0x00);
- result |= (sprites[3].MxD ? 0x08 : 0x00);
- result |= (sprites[4].MxD ? 0x10 : 0x00);
- result |= (sprites[5].MxD ? 0x20 : 0x00);
- result |= (sprites[6].MxD ? 0x40 : 0x00);
- result |= (sprites[7].MxD ? 0x80 : 0x00);
- break;
- case 0x20:
- result &= 0xF0;
- result |= EC & 0x0F;
- break;
- case 0x21:
- case 0x22:
- case 0x23:
- case 0x24:
- result &= 0xF0;
- result |= BxC[addr - 0x21] & 0x0F;
- break;
- case 0x25:
- case 0x26:
- result &= 0xF0;
- result |= MMx[addr - 0x25] & 0x0F;
- break;
- case 0x27:
- case 0x28:
- case 0x29:
- case 0x2A:
- case 0x2B:
- case 0x2C:
- case 0x2D:
- case 0x2E:
- result &= 0xF0;
- result |= sprites[addr - 0x27].MxC & 0x0F;
- break;
- default:
- result = 0xFF;
- break;
- }
-
- return (byte)(result);
- }
- set
- {
- int index;
- int val = value;
- addr &= 0x3F;
-
- switch (addr)
- {
- case 0x00:
- case 0x02:
- case 0x04:
- case 0x06:
- case 0x08:
- case 0x0A:
- case 0x0C:
- case 0x0E:
- index = addr >> 1;
- sprites[index].MxX &= 0x100;
- sprites[index].MxX |= (val & 0xFF);
- break;
- case 0x01:
- case 0x03:
- case 0x05:
- case 0x07:
- case 0x09:
- case 0x0B:
- case 0x0D:
- case 0x0F:
- index = addr >> 1;
- sprites[index].MxY &= 0x100;
- sprites[index].MxY |= (val & 0xFF);
- break;
- case 0x10:
- sprites[0].MxX = (sprites[0].MxX & 0xFF) | ((val & 0x01) << 8);
- sprites[1].MxX = (sprites[1].MxX & 0xFF) | ((val & 0x02) << 7);
- sprites[2].MxX = (sprites[2].MxX & 0xFF) | ((val & 0x04) << 6);
- sprites[3].MxX = (sprites[3].MxX & 0xFF) | ((val & 0x08) << 5);
- sprites[4].MxX = (sprites[4].MxX & 0xFF) | ((val & 0x10) << 4);
- sprites[5].MxX = (sprites[5].MxX & 0xFF) | ((val & 0x20) << 3);
- sprites[6].MxX = (sprites[6].MxX & 0xFF) | ((val & 0x40) << 2);
- sprites[7].MxX = (sprites[7].MxX & 0xFF) | ((val & 0x80) << 1);
- break;
- case 0x11:
- YSCROLL = (val & 0x07);
- RSEL = ((val & 0x08) != 0x00);
- DEN = ((val & 0x10) != 0x00);
- BMM = ((val & 0x20) != 0x00);
- ECM = ((val & 0x40) != 0x00);
- RASTER &= 0xFF;
- RASTER |= ((val & 0x80) << 1);
- break;
- case 0x12:
- RASTER &= 0x100;
- RASTER |= (val & 0xFF);
- break;
- case 0x13:
- LPX = (val & 0xFF);
- break;
- case 0x14:
- LPY = (val & 0xFF);
- break;
- case 0x15:
- sprites[0].MxE = ((val & 0x01) != 0x00);
- sprites[1].MxE = ((val & 0x02) != 0x00);
- sprites[2].MxE = ((val & 0x04) != 0x00);
- sprites[3].MxE = ((val & 0x08) != 0x00);
- sprites[4].MxE = ((val & 0x10) != 0x00);
- sprites[5].MxE = ((val & 0x20) != 0x00);
- sprites[6].MxE = ((val & 0x40) != 0x00);
- sprites[7].MxE = ((val & 0x80) != 0x00);
- break;
- case 0x16:
- XSCROLL = (val & 0x07);
- CSEL = ((val & 0x08) != 0x00);
- MCM = ((val & 0x10) != 0x00);
- RES = ((val & 0x20) != 0x00);
- break;
- case 0x17:
- sprites[0].MxYE = ((val & 0x01) != 0x00);
- sprites[1].MxYE = ((val & 0x02) != 0x00);
- sprites[2].MxYE = ((val & 0x04) != 0x00);
- sprites[3].MxYE = ((val & 0x08) != 0x00);
- sprites[4].MxYE = ((val & 0x10) != 0x00);
- sprites[5].MxYE = ((val & 0x20) != 0x00);
- sprites[6].MxYE = ((val & 0x40) != 0x00);
- sprites[7].MxYE = ((val & 0x80) != 0x00);
- break;
- case 0x18:
- CB = (val & 0x0E) >> 1;
- VM = (val & 0xF0) >> 4;
- break;
- case 0x19:
- IRST = ((val & 0x01) != 0x00);
- IMBC = ((val & 0x02) != 0x00);
- IMMC = ((val & 0x04) != 0x00);
- ILP = ((val & 0x08) != 0x00);
- break;
- case 0x1A:
- ERST = ((val & 0x01) != 0x00);
- EMBC = ((val & 0x02) != 0x00);
- EMMC = ((val & 0x04) != 0x00);
- ELP = ((val & 0x08) != 0x00);
- break;
- case 0x1B:
- sprites[0].MxDP = ((val & 0x01) != 0x00);
- sprites[1].MxDP = ((val & 0x02) != 0x00);
- sprites[2].MxDP = ((val & 0x04) != 0x00);
- sprites[3].MxDP = ((val & 0x08) != 0x00);
- sprites[4].MxDP = ((val & 0x10) != 0x00);
- sprites[5].MxDP = ((val & 0x20) != 0x00);
- sprites[6].MxDP = ((val & 0x40) != 0x00);
- sprites[7].MxDP = ((val & 0x80) != 0x00);
- break;
- case 0x1C:
- sprites[0].MxMC = ((val & 0x01) != 0x00);
- sprites[1].MxMC = ((val & 0x02) != 0x00);
- sprites[2].MxMC = ((val & 0x04) != 0x00);
- sprites[3].MxMC = ((val & 0x08) != 0x00);
- sprites[4].MxMC = ((val & 0x10) != 0x00);
- sprites[5].MxMC = ((val & 0x20) != 0x00);
- sprites[6].MxMC = ((val & 0x40) != 0x00);
- sprites[7].MxMC = ((val & 0x80) != 0x00);
- break;
- case 0x1D:
- sprites[0].MxXE = ((val & 0x01) != 0x00);
- sprites[1].MxXE = ((val & 0x02) != 0x00);
- sprites[2].MxXE = ((val & 0x04) != 0x00);
- sprites[3].MxXE = ((val & 0x08) != 0x00);
- sprites[4].MxXE = ((val & 0x10) != 0x00);
- sprites[5].MxXE = ((val & 0x20) != 0x00);
- sprites[6].MxXE = ((val & 0x40) != 0x00);
- sprites[7].MxXE = ((val & 0x80) != 0x00);
- break;
- case 0x1E:
- sprites[0].MxM = ((val & 0x01) != 0x00);
- sprites[1].MxM = ((val & 0x02) != 0x00);
- sprites[2].MxM = ((val & 0x04) != 0x00);
- sprites[3].MxM = ((val & 0x08) != 0x00);
- sprites[4].MxM = ((val & 0x10) != 0x00);
- sprites[5].MxM = ((val & 0x20) != 0x00);
- sprites[6].MxM = ((val & 0x40) != 0x00);
- sprites[7].MxM = ((val & 0x80) != 0x00);
- break;
- case 0x1F:
- sprites[0].MxD = ((val & 0x01) != 0x00);
- sprites[1].MxD = ((val & 0x02) != 0x00);
- sprites[2].MxD = ((val & 0x04) != 0x00);
- sprites[3].MxD = ((val & 0x08) != 0x00);
- sprites[4].MxD = ((val & 0x10) != 0x00);
- sprites[5].MxD = ((val & 0x20) != 0x00);
- sprites[6].MxD = ((val & 0x40) != 0x00);
- sprites[7].MxD = ((val & 0x80) != 0x00);
- break;
- case 0x20:
- EC = (val & 0x0F);
- break;
- case 0x21:
- case 0x22:
- case 0x23:
- case 0x24:
- BxC[addr - 0x21] = val & 0x0F;
- break;
- case 0x25:
- case 0x26:
- MMx[addr - 0x25] = val & 0x0F;
- break;
- case 0x27:
- case 0x28:
- case 0x29:
- case 0x2A:
- case 0x2B:
- case 0x2C:
- case 0x2D:
- case 0x2E:
- sprites[addr - 0x27].MxC = val & 0x0F;
- break;
- }
- }
- }
-
- public byte Peek(int addr)
- {
- return this[addr & 0x3F];
- }
-
- public void Poke(int addr, byte val)
- {
- this[addr & 0x3F] = val;
- }
-
- public byte Read(ushort addr)
- {
- byte result = 0;
- addr &= 0x3F;
-
- switch (addr)
- {
- case 0x1E:
- // clear after read
- result = this[addr];
- this[addr] = 0x00;
- IMMC = false;
- UpdateInterrupts();
- break;
- case 0x1F:
- // clear after read
- result = this[addr];
- this[addr] = 0x00;
- IMBC = false;
- UpdateInterrupts();
- break;
- default:
- result = this[addr];
- break;
- }
-
- return result;
- }
-
- private void UpdateBorder()
- {
- borderTop = RSEL ? 0x033 : 0x037;
- borderBottom = RSEL ? 0x0FB : 0x0F7;
- borderLeft = CSEL ? 0x018 : 0x01F;
- borderRight = CSEL ? 0x158 : 0x14F;
- }
-
- private void UpdateInterrupts()
- {
- IRQ = ((IRST & ERST) || (IMMC & EMMC) || (IMBC & EMBC) || (ILP & ELP));
- }
-
- private void UpdatePlotter()
- {
- graphicsMode = (ECM ? 0x04 : 0x00) | (BMM ? 0x02 : 0x00) | (MCM ? 0x01 : 0x00);
- }
-
- public void Write(ushort addr, byte val)
- {
- addr &= 0x3F;
-
- switch (addr)
- {
- case 0x11:
- rasterInterruptTriggered = false;
- rasterInterruptLine &= 0xFF;
- rasterInterruptLine |= (val & 0x80) << 1;
- // raster upper bit can't be changed, save and restore the value
- val &= 0x7F;
- val |= (byte)(this[addr] & 0x80);
- this[addr] = val;
- UpdateBorder();
- UpdatePlotter();
- break;
- case 0x12:
- // raster interrupt lower 8 bits
- rasterInterruptTriggered = false;
- rasterInterruptLine &= 0x100;
- rasterInterruptLine |= (val & 0xFF);
- break;
- case 0x16:
- this[addr] = val;
- UpdateBorder();
- UpdatePlotter();
- break;
- case 0x19:
- // only allow clearing of these flags
- if ((val & 0x01) != 0x00)
- IRST = false;
- if ((val & 0x02) != 0x00)
- IMBC = false;
- if ((val & 0x04) != 0x00)
- IMMC = false;
- if ((val & 0x08) != 0x00)
- ILP = false;
- UpdateInterrupts();
- break;
- case 0x1E:
- case 0x1F:
- // can't write to these regs
- break;
- default:
- this[addr] = val;
- break;
- }
- }
- }
-}
\ No newline at end of file
diff --git a/BizHawk.Emulation/Computers/Commodore64/VicIIVideoProvider.cs b/BizHawk.Emulation/Computers/Commodore64/VicIIVideoProvider.cs
deleted file mode 100644
index 2ce5f45ab0..0000000000
--- a/BizHawk.Emulation/Computers/Commodore64/VicIIVideoProvider.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace BizHawk.Emulation.Computers.Commodore64
-{
- public partial class VicII : IVideoProvider
- {
- private int[] videoBuffer;
- private int videoBufferHeight;
- private int videoBufferIndex;
- private int videoBufferSize;
- private int videoBufferWidth;
-
- // palette
- private static int[] palette =
- {
- Colors.ARGB(0x00, 0x00, 0x00),
- Colors.ARGB(0xFF, 0xFF, 0xFF),
- Colors.ARGB(0x68, 0x37, 0x2B),
- Colors.ARGB(0x70, 0xA4, 0xB2),
- Colors.ARGB(0x6F, 0x3D, 0x86),
- Colors.ARGB(0x58, 0x8D, 0x43),
- Colors.ARGB(0x35, 0x28, 0x79),
- Colors.ARGB(0xB8, 0xC7, 0x6F),
- Colors.ARGB(0x6F, 0x4F, 0x25),
- Colors.ARGB(0x43, 0x39, 0x00),
- Colors.ARGB(0x9A, 0x67, 0x59),
- Colors.ARGB(0x44, 0x44, 0x44),
- Colors.ARGB(0x6C, 0x6C, 0x6C),
- Colors.ARGB(0x9A, 0xD2, 0x84),
- Colors.ARGB(0x6C, 0x5E, 0xB5),
- Colors.ARGB(0x95, 0x95, 0x95)
- };
-
- public int BackgroundColor
- {
- get { return -16777216; } //FF000000
- }
-
- public int BufferHeight
- {
- get { return videoBufferHeight; }
- }
-
- public int BufferWidth
- {
- get { return videoBufferWidth; }
- }
-
- public int[] GetVideoBuffer()
- {
- return videoBuffer;
- }
-
- private void InitVideoBuffer()
- {
- videoBufferIndex = 0;
- videoBufferWidth = pipelineLength * 8;
- videoBufferHeight = rasterLines;
- videoBufferSize = videoBufferWidth * videoBufferHeight;
- videoBuffer = new int[videoBufferSize];
- }
-
- public int VirtualWidth
- {
- get { return videoBufferWidth; }
- }
- }
-}
diff --git a/BizHawk.Emulation/Computers/Commodore64/VicState.cs b/BizHawk.Emulation/Computers/Commodore64/VicState.cs
deleted file mode 100644
index a834217524..0000000000
--- a/BizHawk.Emulation/Computers/Commodore64/VicState.cs
+++ /dev/null
@@ -1,110 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace BizHawk.Emulation.Computers.Commodore64
-{
- public partial class VicII : IVideoProvider
- {
- public void SyncState(Serializer ser)
- {
- // internal
- ser.Sync("RC", ref RC);
- ser.Sync("VC", ref VC);
- ser.Sync("VCBASE", ref VCBASE);
- ser.Sync("VMLI", ref VMLI);
-
- // external
- ser.Sync("BMM", ref BMM);
- ser.Sync("BxC", ref BxC, false);
- ser.Sync("CB", ref CB);
- ser.Sync("CSEL", ref CSEL);
- ser.Sync("DEN", ref DEN);
- ser.Sync("EC", ref EC);
- ser.Sync("ECM", ref ECM);
- ser.Sync("ELP", ref ELP);
- ser.Sync("EMBC", ref EMBC);
- ser.Sync("EMMC", ref EMMC);
- ser.Sync("ERST", ref ERST);
- ser.Sync("ILP", ref ILP);
- ser.Sync("IMBC", ref IMBC);
- ser.Sync("IMMC", ref IMMC);
- ser.Sync("IRQ", ref IRQ);
- ser.Sync("IRST", ref IRST);
- ser.Sync("LPX", ref LPX);
- ser.Sync("LPY", ref LPY);
- ser.Sync("MCM", ref MCM);
- ser.Sync("MMx", ref MMx, false);
- ser.Sync("RASTER", ref RASTER);
- ser.Sync("RES", ref RES);
- ser.Sync("RSEL", ref RSEL);
- ser.Sync("VM", ref VM);
- ser.Sync("XSCROLL", ref XSCROLL);
- ser.Sync("YSCROLL", ref YSCROLL);
-
- // state
- ser.Sync("ADVANCEX", ref advanceX);
- ser.Sync("BADLINE", ref badline);
- ser.Sync("BITMAPCOLUMN", ref bitmapColumn);
- ser.Sync("BITMAPDATA", ref bitmapData);
- ser.Sync("BORDERONMAIN", ref borderOnMain);
- ser.Sync("BORDERONVERTICAL", ref borderOnVertical);
- ser.Sync("CENTERENABLED", ref centerEnabled);
- ser.Sync("CHARACTERDATA", ref characterData);
- ser.Sync("CHARACTERDATABUS", ref characterDataBus);
- ser.Sync("CHARMEM", ref characterMemory, false);
- ser.Sync("COLORDATA", ref colorData);
- ser.Sync("COLORDATABUS", ref colorDataBus);
- ser.Sync("COLORMEM", ref colorMemory, false);
- ser.Sync("DISPLAYENABLED", ref displayEnabled);
- ser.Sync("FETCHCOUNTER", ref fetchCounter);
- ser.Sync("IDLE", ref idle);
- ser.Sync("PLOTTERBUFFERINDEX", ref plotterBufferIndex);
- ser.Sync("PLOTTERDATA", ref plotterData);
- ser.Sync("PLOTTERDATABUFFER", ref plotterDataBuffer, false);
- ser.Sync("PLOTTERDELAY", ref plotterDelay);
- ser.Sync("PLOTTERPIXEL", ref plotterPixel);
- ser.Sync("PLOTTERPIXELBUFFER", ref plotterPixelBuffer, false);
- ser.Sync("RASTERINTERRUPTLINE", ref rasterInterruptLine);
- ser.Sync("RASTERINTERRUPTTRIGGERED", ref rasterInterruptTriggered);
- ser.Sync("RASTERX", ref rasterX);
- ser.Sync("REFRESHADDRESS", ref refreshAddress);
-
- // pipeline
- ser.Sync("CYCLE", ref cycle);
- ser.Sync("PIPELINEGACCESS", ref pipelineGAccess);
-
- // sprites
- for (int i = 0; i < 8; i++)
- {
- string iTag = i.ToString();
- ser.Sync("MC" + iTag, ref sprites[i].MC);
- ser.Sync("MCBASE" + iTag, ref sprites[i].MCBASE);
- ser.Sync("MD" + iTag, ref sprites[i].MD);
- ser.Sync("MDMA" + iTag, ref sprites[i].MDMA);
- ser.Sync("MPTR" + iTag, ref sprites[i].MPTR);
- ser.Sync("MSR" + iTag, ref sprites[i].MSR);
- ser.Sync("MxXEToggle" + iTag, ref sprites[i].MxXEToggle);
- ser.Sync("MxYEToggle" + iTag, ref sprites[i].MxYEToggle);
-
- ser.Sync("MxC" + iTag, ref sprites[i].MxC);
- ser.Sync("MxD" + iTag, ref sprites[i].MxD);
- ser.Sync("MxDP" + iTag, ref sprites[i].MxDP);
- ser.Sync("MxE" + iTag, ref sprites[i].MxE);
- ser.Sync("MxM" + iTag, ref sprites[i].MxM);
- ser.Sync("MxMC" + iTag, ref sprites[i].MxMC);
- ser.Sync("MxX" + iTag, ref sprites[i].MxX);
- ser.Sync("MxXE" + iTag, ref sprites[i].MxXE);
- ser.Sync("MxY" + iTag, ref sprites[i].MxY);
- ser.Sync("MxYE" + iTag, ref sprites[i].MxYE);
- }
-
- if (ser.IsReader)
- {
- UpdateBorder();
- UpdatePlotter();
- }
- }
- }
-}
\ No newline at end of file