diff --git a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj
index 2b803b659b..d64563af5c 100644
--- a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj
+++ b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj
@@ -742,8 +742,6 @@
-
-
diff --git a/BizHawk.Emulation.Cores/Consoles/Magnavox/LibO2Em.cs b/BizHawk.Emulation.Cores/Consoles/Magnavox/LibO2Em.cs
deleted file mode 100644
index d4e4fdb6d9..0000000000
--- a/BizHawk.Emulation.Cores/Consoles/Magnavox/LibO2Em.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using BizHawk.Common.BizInvoke;
-using BizHawk.Emulation.Cores.Waterbox;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace BizHawk.Emulation.Cores.Consoles.Magnavox
-{
- public abstract class LibO2Em : LibWaterboxCore
- {
- [BizImport(CC)]
- public abstract bool Init(byte[] rom, int romlen, byte[] bios, int bioslen);
- }
-}
diff --git a/BizHawk.Emulation.Cores/Consoles/Magnavox/O2Em.cs b/BizHawk.Emulation.Cores/Consoles/Magnavox/O2Em.cs
deleted file mode 100644
index b6b0a6ef6c..0000000000
--- a/BizHawk.Emulation.Cores/Consoles/Magnavox/O2Em.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-using BizHawk.Emulation.Common;
-using BizHawk.Emulation.Cores.Waterbox;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace BizHawk.Emulation.Cores.Consoles.Magnavox
-{
- [Core("o2em", "", true, false, "", "", false)]
- public class O2Em : WaterboxCore
- {
- private LibO2Em _core;
-
- [CoreConstructor("O2")]
- public O2Em(CoreComm comm, byte[] rom)
- :base(comm, new Configuration
- {
- DefaultFpsNumerator = 60,
- DefaultFpsDenominator = 1,
- DefaultWidth = 320,
- DefaultHeight = 240,
- MaxSamples = 2048,
- MaxWidth = 320,
- MaxHeight = 240,
- SystemId = "O2"
- })
- {
- var bios = comm.CoreFileProvider.GetFirmware("O2", "BIOS", true);
- _core = PreInit(new PeRunnerOptions
- {
- Filename = "o2em.wbx",
- SbrkHeapSizeKB = 4 * 1024,
- SealedHeapSizeKB = 4 * 1024,
- InvisibleHeapSizeKB = 4 * 1024,
- PlainHeapSizeKB = 4 * 1024,
- });
-
-
- if (!_core.Init(rom, rom.Length, bios, bios.Length))
- throw new InvalidOperationException($"{nameof(_core.Init)}() failed");
-
- PostInit();
- }
-
- protected override LibWaterboxCore.FrameInfo FrameAdvancePrep(IController controller, bool render, bool rendersound)
- {
- return new LibWaterboxCore.FrameInfo();
- }
- }
-}
diff --git a/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.IEmulator.cs
index 2f91aa20c0..9f78a61fb3 100644
--- a/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.IEmulator.cs
+++ b/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.IEmulator.cs
@@ -190,16 +190,24 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk
public void SendVideoBuffer()
{
- for (int j = 0; j < frame_buffer.Length; j++)
- {
- frame_buffer[j] = _vidbuffer[j];
- _vidbuffer[j] = 0;
+ for (int j = 0; j < 240; j++)
+ {
+ for (int i = 0; i < 160; i++)
+ {
+ frame_buffer[j * 160 + i] = _vidbuffer[j * 186 + i];
+ _vidbuffer[j * 186 + i] = 0;
+ }
+
+ for (int k = 160; k < 186; k++)
+ {
+ _vidbuffer[j * 186 + k] = 0;
+ }
}
}
- public int VirtualWidth => 372;
+ public int VirtualWidth => 320;
public int VirtualHeight => 240;
- public int BufferWidth => 186;
+ public int BufferWidth => 160;
public int BufferHeight => 240;
public int BackgroundColor => unchecked((int)0xFF000000);
public int VsyncNumerator => _frameHz;
diff --git a/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.cs b/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.cs
index 8c2c726a79..72bbba7a8a 100644
--- a/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.cs
+++ b/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.cs
@@ -107,10 +107,12 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk
SetupMemoryDomains();
HardReset();
+ /*
for (int i = 0; i < 64; i++)
{
cpu.Regs[i] = (byte)i;
}
+ */
for (int j = 0; j < 0x80; j++)
{
@@ -141,8 +143,8 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk
cpu.SetCallbacks(ReadMemory, PeekMemory, PeekMemory, WriteMemory);
- _vidbuffer = new int[VirtualWidth * VirtualHeight];
- frame_buffer = new int[VirtualWidth * VirtualHeight];
+ _vidbuffer = new int[186 * 240];
+ frame_buffer = new int[160 * 240];
}
private void ExecFetch(ushort addr)
diff --git a/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/PPU.cs b/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/PPU.cs
index 07981f896d..d9deaa26d5 100644
--- a/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/PPU.cs
+++ b/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/PPU.cs
@@ -14,10 +14,10 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk
public byte[] Sprite_Shapes = new byte[32];
public byte[] Foreground = new byte[48];
public byte[] Quad_Chars = new byte[64];
- public byte[] Grid_H = new byte[16];
- public byte[] Grid_V = new byte[8];
+ public byte[] Grid_H = new byte[18];
+ public byte[] Grid_V = new byte[10];
- public byte VDC_ctrl, VDC_status, VDC_collision, VDC_color;
+ public byte VDC_ctrl, VDC_status, VDC_collision, VDC_col_ret, VDC_color;
public byte Frame_Col, Pixel_Stat;
@@ -60,7 +60,7 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk
}
else if (addr == 0xA2)
{
- ret = 0;//VDC_collision;
+ ret = VDC_col_ret;
//Console.WriteLine("col: " + ret + " " + Core.cpu.TotalExecutedCycles);
}
else if(addr == 0xA3)
@@ -71,15 +71,15 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk
{
ret = AudioReadReg(addr);
}
- else if ((addr >= 0xC0) && (addr < 0xC8))
+ else if ((addr >= 0xC0) && (addr <= 0xC8))
{
ret = Grid_H[addr - 0xC0];
}
- else if ((addr >= 0xD0) && (addr < 0xD8))
+ else if ((addr >= 0xD0) && (addr <= 0xD8))
{
- ret = Grid_H[addr - 0xD0 + 8];
+ ret = Grid_H[addr - 0xD0 + 9];
}
- else if ((addr >= 0xE0) && (addr < 0xE8))
+ else if ((addr >= 0xE0) && (addr <= 0xE9))
{
ret = Grid_V[addr - 0xE0];
}
@@ -101,7 +101,7 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk
else if (addr < 0x80)
{
Quad_Chars[addr - 0x40] = value;
- //Quad_Chars[0x0E] = 0x7;
+ //Console.WriteLine("quad: " + (addr - 0x40) + " " + value + " " + Core.cpu.TotalExecutedCycles);
}
else if (addr < 0xA0)
{
@@ -128,15 +128,15 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk
{
AudioWriteReg(addr, value);
}
- else if ((addr >= 0xC0) && (addr < 0xC8))
+ else if ((addr >= 0xC0) && (addr <= 0xC8))
{
Grid_H[addr - 0xC0] = value;
}
- else if ((addr >= 0xD0) && (addr < 0xD8))
+ else if ((addr >= 0xD0) && (addr <= 0xD8))
{
- Grid_H[addr - 0xD0 + 8] = value;
+ Grid_H[addr - 0xD0 + 9] = value;
}
- else if ((addr >= 0xE0) && (addr < 0xE8))
+ else if ((addr >= 0xE0) && (addr <= 0xE9))
{
Grid_V[addr - 0xE0] = value;
}
@@ -163,6 +163,48 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk
// draw a pixel
if (LY < 240)
{
+ // background
+ if ((((cycle - 43) % 16) == 8) && ((LY - 24) >= 0))
+ {
+ int k = (int)Math.Floor((cycle - 43) / 16.0);
+ int j = (int)Math.Floor((LY - 24) / 24.0);
+ if ((k < 10) && (j < 8))
+ {
+ if (Grid_V[k].Bit(j))
+ {
+ Core._vidbuffer[LY * 186 + (cycle - 43)] = (int)Color_Palette_BG[VDC_color & 0x7];
+ Pixel_Stat |= 0x10;
+ }
+ }
+ }
+
+ if (((LY % 24) < 3) && ((cycle - 43 - 8) >= 0) && ((LY - 24) >= 0))
+ {
+ int k = (int)Math.Floor((cycle - 43 - 8) / 16.0);
+ int j = (int)Math.Floor((LY - 24) / 24.0);
+ //Console.WriteLine(k + " " + j);
+ if ((k < 9) && (j < 9))
+ {
+ if (j == 8)
+ {
+ if (Grid_H[k + 9].Bit(0))
+ {
+ Core._vidbuffer[LY * 186 + (cycle - 43)] = (int)Color_Palette_BG[VDC_color & 0x7];
+ Pixel_Stat |= 0x20;
+ }
+ }
+ else
+ {
+ if (Grid_H[k].Bit(j))
+ {
+ Core._vidbuffer[LY * 186 + (cycle - 43)] = (int)Color_Palette_BG[VDC_color & 0x7];
+ Pixel_Stat |= 0x20;
+ }
+ }
+
+ }
+ }
+
// sprites
for (int i = 3; i >= 0; i--)
{
@@ -185,7 +227,7 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk
Core._vidbuffer[LY * 186 + (cycle - 43)] = (int) Color_Palette_SPR[(Sprites[i * 4 + 2] >> 3) & 0x7];
}
- Pixel_Stat |= (byte)(i << 1);
+ Pixel_Stat |= (byte)(1 << i);
}
}
}
@@ -194,7 +236,7 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk
// single characters
for (int i = 0; i < 12; i++)
{
- if ((LY >= Foreground[i * 4]) && (LY < (Foreground[i * 4] + 8 * 2)))
+ if ((LY >= Foreground[i * 4]) && (LY < (Foreground[i * 4] + 7 * 2)))
{
if (((cycle - 43) >= Foreground[i * 4 + 1]) && ((cycle - 43) < (Foreground[i * 4 + 1] + 8)))
{
@@ -208,20 +250,22 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk
if (char_pick < 0)
{
char_pick &= 0xFF;
- char_pick = char_pick >> 1;
- char_pick |= (Foreground[i * 4 + 3] & 1) << 7;
- char_pick = char_pick << 1;
+ char_pick |= (Foreground[i * 4 + 3] & 1) << 8;
}
else
{
char_pick &= 0xFF;
- char_pick = char_pick >> 1;
- char_pick |= (~(Foreground[i * 4 + 3] & 1)) << 7;
- char_pick &= 0xFF;
- char_pick = char_pick << 1;
+ char_pick |= (~(Foreground[i * 4 + 3] & 1)) << 8;
+ char_pick &= 0x1FF;
}
+
+ // don't display past the end of a character
+ int pixel_pick = 0;
- int pixel_pick = (Internal_Graphics[(char_pick + offset_y) % 0x200] >> offset_x) & 1;
+ if ((char_pick & 7) + offset_y < 7)
+ {
+ pixel_pick = (Internal_Graphics[(char_pick + offset_y) % 0x200] >> offset_x) & 1;
+ }
if (pixel_pick == 1)
{
@@ -239,7 +283,7 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk
// quads
for (int i = 0; i < 4; i++)
{
- if ((LY >= Quad_Chars[i * 16]) && (LY < (Quad_Chars[i * 16] + 8 * 2)))
+ if ((LY >= Quad_Chars[i * 16]) && (LY < (Quad_Chars[i * 16] + 7 * 2)))
{
if (((cycle - 43) >= Quad_Chars[i * 16 + 1]) && ((cycle - 43) < (Quad_Chars[i * 16 + 1] + 64)))
{
@@ -264,17 +308,13 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk
if (char_pick < 0)
{
char_pick &= 0xFF;
- char_pick = char_pick >> 1;
char_pick |= (Quad_Chars[i * 16 + 4 * quad_num + 3] & 1) << 7;
- char_pick = char_pick << 1;
}
else
{
char_pick &= 0xFF;
- char_pick = char_pick >> 1;
- char_pick |= (~(Quad_Chars[i * 16 + 4 * quad_num + 3] & 1)) << 7;
- char_pick &= 0xFF;
- char_pick = char_pick << 1;
+ char_pick |= (~(Quad_Chars[i * 16 + 4 * quad_num + 3] & 1)) << 8;
+ char_pick &= 0x1FF;
}
int pixel_pick = (Internal_Graphics[(char_pick + offset_y) % 0x200] >> offset_x) & 1;
@@ -289,10 +329,23 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk
}
}
- // background
-
// calculate collision
+ int col_bit = 0;
+ for (int i = 7; i >= 0; i--)
+ {
+ if (VDC_collision.Bit(i))
+ {
+ col_bit = i;
+ }
+ }
+ for (int i = 0; i < 8; i++)
+ {
+ if (Pixel_Stat.Bit(i) & Pixel_Stat.Bit(col_bit) && (i != col_bit))
+ {
+ VDC_col_ret |= (byte)(1 << i);
+ }
+ }
}
}
@@ -322,6 +375,7 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk
LY = 0;
HBL = false;
VBL = false;
+ VDC_col_ret = 0;
Core.in_vblank = false;
if (!VDC_ctrl.Bit(0)) { Core.cpu.IRQPending = false; }
Frame_Col = 0;
@@ -432,7 +486,7 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk
{
0xFF676767, // grey
0xFF790000, // red
- 0xFF006D07, //green
+ 0xFF006D07, // green
0xFFC75151, // light red
0xFF1A37BE, // blue
0xFF94309F, // violet
@@ -442,21 +496,21 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk
public static readonly uint[] Color_Palette_BG =
{
- 0xFF006D07, //green
+ 0xFF000000, // black
+ 0xFF1A37BE, // blue
+ 0xFF006D07, // green
0xFF56C469, // light green
+ 0xFF790000, // red
+ 0xFF94309F, // violet
+ 0xFFC75151, // light red
+ 0xFF676767, // grey
+ 0xFFC6B869, // light yellow
+ 0xFFCECECE, // light grey
0xFF2AAABE, // blue-green
0xFF77E6EB, // light blue-green
- 0xFF1A37BE, // blue
0xFF5C80F6, // light blue
- 0xFF94309F, // violet
0xFFDC84D4, // light violet
- 0xFF790000, // red
- 0xFFC75151, // light red
0xFF77670B, // yellow
- 0xFFC6B869, // light yellow
- 0xFF676767, // grey
- 0xFFCECECE, // light grey
- 0xFF000000, // black
0xFFFFFFFF, // white
};
@@ -473,6 +527,7 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk
ser.Sync(nameof(VDC_ctrl), ref VDC_ctrl);
ser.Sync(nameof(VDC_status), ref VDC_status);
ser.Sync(nameof(VDC_collision), ref VDC_collision);
+ ser.Sync(nameof(VDC_col_ret), ref VDC_col_ret);
ser.Sync(nameof(VDC_color), ref VDC_color);
ser.Sync(nameof(Frame_Col), ref Frame_Col);
ser.Sync(nameof(Pixel_Stat), ref Pixel_Stat);
diff --git a/waterbox/o2em/.vscode/settings.json b/waterbox/o2em/.vscode/settings.json
deleted file mode 100644
index a5401e1c1f..0000000000
--- a/waterbox/o2em/.vscode/settings.json
+++ /dev/null
@@ -1,6 +0,0 @@
-// Place your settings in this file to overwrite default and user settings.
-{
- "editor.tabSize": 4,
- "editor.insertSpaces": false,
- "editor.detectIndentation": false
-}
\ No newline at end of file
diff --git a/waterbox/o2em/CHANGELOG b/waterbox/o2em/CHANGELOG
deleted file mode 100644
index 71dbb60f39..0000000000
--- a/waterbox/o2em/CHANGELOG
+++ /dev/null
@@ -1,316 +0,0 @@
-v1.18: 01/15/2007
-
- - added the option -biosdir to define bios directory path
- - added the option -romdir to define rom directory path
- - added the option -help to help display
- - directory search fix : When you don't have the "roms/" and/or "bios/"
- directory, the program will dump core (by Walter de Jong).
- - O2Launcher works now, o2em ignore roms and bios path if o2Launcher
- is running.
- - quad display fix: changed the way quad chars are drawn, fixes problems
- in KTAA as well as score display in Black Hole and Red Baron (Soeren Gust)
- - support for Soerens MegaCART bank switching (Information about
- how to use this will be included in the next verison of Soerens
- Bios-Documentation) (Soeren Gust)
- - new feature in debugger: savevpp to make an uncompressed dump of the VPP
- screen and slide data (Soeren Gust)
- - dis48: fix to work under linux again (Soeren Gust)
- - init_sound volume is not set to maximum (By Gunter Wambaugh)
- - added makefile and options for freeBSD (By Gunter Wambaugh)
- - Other minor fixes.
-
-
- all the next changes were implemented by Manopac:
-
- - added the option -s0 to redefine the system keys (see o2em.txt for usage)
- - bugfix: highscore-file is only written if scoretype is set
- - changed Default Stick 1 key from right to "L" to enable Fire and
- movement at the same time
- - two joysticks can be used now: first stick in command-line is mapped to joystick 1,
- second to joystick 2 (compatible to old command line options)
- - changes in debugger: status of registers is now displayed after instructions
- are executed
- - new features in debugger: savedatah and savedatab to save data from memory
- as sourcecode ("db xxx")
- - changed Default Stick 1 key from right to "L" to enable Fire
- and movement at the same time
- - two joysticks can be used now: first stick in command-line is mapped to
- joystick 1, second to joystick 2 (compatible to old command line options)
- - changes in debugger: status of registers is now displayed after
- instructions are executed
- - new features in debugger: savedatah and savedatab to save data from memory
- as sourcecode ("db xxx")
- - removed the limit that KTAA was the only 3K enabled rom (every
- rom divideable by 3K is allowed now)
- - dis48: added option -bios to disassemble bios (start at address 0)
- - dis48: empty line after each page
- - new feature to save the highscore in games (F6 to set in game)
- - new feature to save/load state (F2/F3) (with command line option savefile)
- - new features in debugger: savevdc and saveext to save data from Extram and VDC
- - new feature in debugger: viewsprite
- - new feature in debugger: bp (breakpoint) - o2em runs with output until
- breakpoint is reached (bpc to clear)
- - new feature in debugger: so (step over) - runs to next instruction in memory
- - more explicit register display (P1 & PSW)
- - fixed the "double size sprites are shifted only 1 instead of 2 pixles" bug
- - new features in debugger (load / save file, change values in memory,
- assemble to memory)
-
-v1.17: 05/01/2005
-
- - BIOS identified by CRC, to activate a specific BIOS type: -o2rom, or
- -g7400, or -c52, or -jopac. The old form can be used. See O2EM.txt for more.
-
- - Automatic identification of BIOS VP+ when the selected game is only VP+.
-
- - Creation of the standard directories (ROMS, BIOS, VOICE) when uncompressing
- O2EM archive.
-
- - ATLANTIS, FROGGER, COMANDO NOTURNO and CATCH THE BALL now work without
- graphic bugs. This correction is based on a specific patch for each game.
- Thanks Rafael Cardoso for reports these bugs.
-
-
-V1.16: 12/28/2004
-
- - Fixed a slowdown in Pick Axe Pete (based on a patch by Arlindo de
- Oliveira).
-
- - Reverted back to the old palette for O2 games, while using the new
- palette for Videpac Plus games (selected based on bios version in use).
-
-
-V1.15: 12/12/2004
-
- - Added support for 12kb and 16kb games. Trans American Rally+ works now.
-
- - Added fixes to the VP+ gfx emulation made by Soeren Gust. Flashpoint
- works properly now.
-
- - Fixed a bug in the Windows-specific emulation timing code that caused
- the emulator to crash when run on a Windows machine which was on for a
- few days without a reboot.
-
- - Fixed a bug in the emulation of the DAA instruction, which caused bugs
- in the score of several games (Le Tresor Englouti, Cosmic Conflict, etc.).
-
- - Fixed instruction timings (patch by Soeren)
-
- - Modified the palette to use values calculated from the Videopac+ RGB
- encoder specs by René van den Enden, instead of guessed values.
-
- - Other minor fixes.
-
-
-
-V1.01: 10/23/2002
-
- - Major speed optimization.
-
- - Implemented VDC <-> VP+ collision detection.
-
- - On the original machines it is possible to make all VDC
- colors bright by clearing P17. This affects the background and
- dark grid colors. Implemented. Now the Killer Bees! intro screen
- works correctly.
-
- - Fixed the wrong color order when mixing between VP+ and VDC graphics.
- Jopac Moto Crash now works. Fixed by Soeren Gust.
-
- - Now the VBLANK pulse is visible on the T1 input. This can be used
- to differentiate between PAL and NTSC.
-
- - Other minor fixes.
-
-
-
-V1.00: 09/12/2002
-
- - Implemented complete Videopac+ G7400 emulation. Implemented it from
- scratch, based on the EF9340/41 datasheet (sent by Simon Scudder), on
- the technical docs made by Soeren Gust and disassembling the VP+ bios.
- You will need a Videopac+ bios image file in order to use this feature.
- You can use the -bios option to select it, rename the file to o2rom.bin,
- or select it in O2EM Launcher settings. Please note that a few O2 games
- do not work with the VP+ bios, so most likely you will need both bios
- versions to be able to run all the games. For copyright reasons these
- files are not included with O2EM, but you can find them in the Internet.
-
- - Added a default configuration file. Now you can specify your preferred
- options in a configuration file, instead of typing it every time you
- execute the emulator. The command line options override the default
- settings in the file. See O2EM.txt for more.
-
- - Extended the -s1 and -s2 switches to allow customizable keys with the
- joystick emulation. Based on a patch written by Zimmerman that
- implemented customizable keys it in a different way. See O2EM.txt for
- more.
-
- - Added support to the Four in 1 Row game.
-
- - Added the -exrom switch to enable the use of a special ROM mapping mode.
- See O2EM.txt for more.
-
- - Improved the sound with Frogger and Popeye.
-
- - Minor fixes.
-
-
-
-V0.90: 08/07/2002
-
- - Fixed the color palette, based on screen shots from a real O2 console.
-
- - Fixed a bug in the sprite drawing priority. Now in several games the
- sprites look better (Demon Attack, Turtles, Atlantis, Computer Golf,
- Football, Helicopter Rescue, etc.).
-
- - Modified the emulation of sprites and characters in the border region of
- the screen. Fixed the bug of character wrapping to the other side of the
- screen and other problems (Atlantis and others). Now the main characters of
- P.T.Barnum's Acrobats! do not fall from the edge of screen.
-
- - Fixed the audio pitch and implemented white noise emulation. Now
- explosions sound much better!
-
- - Fixed a background line blinking problem that used to affect lots of
- games.
-
- - Fixed the color bar at the left of the screen.
-
- - Enhanced the support for European/Pal games. Now several games look and
- play better. Shark Hunter intro works correctly. Frogger and Depth Charge
- are fully playable !
-
- - Implemented an audio filter that accurately emulates the behavior of the
- low-pass filter present in the audio output of the real console. The sound
- is better now. (Enable it with -filter).
-
- - Fixed the screen size. Now you can see all the graphics in the game,
- including the time in Labyrinth.
-
- - Implemented Dot Grid emulation. Now Marksman is playable.
-
- - Implemented a cached video emulation, to make it run faster with slow
- machines / video cards.
-
- - Implemented screen shots (use the F8 key and the -scshot option)
-
- - Implemented the sprite shifted/smooth modes. Now the main character of
- Q*bert looks hi-res.
-
- - Several minor fixes.
-
-
- The following fixes were made by Soeren Gust:
-
-
- - Implemented the missing JNI instruction.
-
- - Implemented the 1kb data ROM / 3kb program ROM addressing mode used by
- Musician.
-
- - Fixed the height of the grid lines.
-
- - Added support for 3Kb per bank
-
-
-
-V0.87: 06/21/2002
-
- - Fixed a collision bug introduced with version 0.86.
- Now Cosmic Conflict runs again. Thanks to Dan Boris for reporting
- this bug.
-
- - Implemented the option to set the O2 bios file name/dir, as
- requested by my friend Heitor, to enable him to support it with his
- nice O2EMLauncher frontend for O2EM 0.8x, as requested by its users.
- Get O2EMLauncher here: http://www.odyssey.com.br/o2emlauncher/
-
-
-
-Version 0.86:
-
- - Fixed a bug in the drawing of quad characters. Now you can play
- Q*Bert and Nimble Numbers Ned. Some other games will also have
- improved graphics or text (Popeye, Super Cobra, etc.) .
-
- - Fixed another bug in the collision detection. Now Demon Attack
- works correctly.
-
-
-
-Version 0.85:
-
- - Fixed the collision detection. Now you can play Killer Bees!
-
- - Implemented partial support to mid-screen changes to the VDC
- registers without interrupts. Now several games look better, and some
- that didn't work can be played, including Power Lords and Super Cobra.
-
- - Fixed a bug in the video emulation that made some games like Turtles
- and Shark Hunter appear with some strange static characters.
-
-
-
-Version 0.80:
-
-The following changes were already implemented by Daniel Boris in version
-0.701. Implemented them again in the sources based on version v0.65:
-
- - Fixed a bug in the CPU core related to the handling of branch
- instructions near page boundaries. (Without it Sid the Spellbinder
- crashed after the first level).
-
- - CPU core now jumps to the correct address on an external interrupt.
- Killer Bees runs again.
-
- - Fixed shape of '$' character and added missing 64th character to
- character set (ripped the correct character data from the v0.701
- executable file).
-
- - Fixed bug in drawing of bottom grid line.
-
- - Added Voice support. Re implemented it from scratch, based on O2
- technical specs released by Dan Boris and disassembling Smithereens
- and Turtles (now it always work with Turtles).
-
-The following changes are new to version 0.80:
-
- - Updated the code to compile with Allegro 4.0.x and to work
- without changes under Windows, Linux and DOS, with optimizations
- for each.
-
- - Implemented the option of windowed or fullscreen video modes,
- with scaling, centering and optional 50% scanlines.
-
- - Cleaned the code to make it more portable and maintainable.
-
- - Improved timing, using the most accurate way available for
- each platform.
-
- - Fixed the keyboard scan code translation table.
-
- - Fixed and improved the built-in debugger.
-
- - Fixed the reset. It now works with Turtles.
-
- - Fixed joystick detection code.
-
- - Implemented variable speed control relative to original O2.
-
- - Implemented individual volume control for sounds and voice.
-
- - Implemented Pause/Information (F1).
-
- - Avoided collision of keyboard input with key joystick
- emulation. Now Caps Lock enables/disables the W,D,S,A,Space keys
- for keyboard input when they are used by joystick emulation.
- Works well with games like K.C.'s Krazy Chase.
-
- - It now releases more CPU time to the system (if possible).
-
- - Other minor changes/fixes.
-
-
-
diff --git a/waterbox/o2em/COPYING b/waterbox/o2em/COPYING
deleted file mode 100644
index 255c6f4511..0000000000
--- a/waterbox/o2em/COPYING
+++ /dev/null
@@ -1,138 +0,0 @@
-
- The Clarified Artistic License
-
- Preamble
-
-The intent of this document is to state the conditions under which a
-Package may be copied, such that the Copyright Holder maintains some
-semblance of artistic control over the development of the package,
-while giving the users of the package the right to use and distribute
-the Package in a more-or-less customary fashion, plus the right to make
-reasonable modifications.
-
-Definitions:
-
- "Package" refers to the collection of files distributed by the
- Copyright Holder, and derivatives of that collection of files
- created through textual modification.
-
- "Standard Version" refers to such a Package if it has not been
- modified, or has been modified in accordance with the wishes
- of the Copyright Holder as specified below.
-
- "Copyright Holder" is whoever is named in the copyright or
- copyrights for the package.
-
- "You" is you, if you're thinking about copying or distributing
- this Package.
-
- "Distribution fee" is a fee you charge for providing a copy
- of this Package to another party.
-
- "Freely Available" means that no fee is charged for the right to
- use the item, though there may be fees involved in handling the
- item. It also means that recipients of the item may redistribute
- it under the same conditions they received it.
-
-1. You may make and give away verbatim copies of the source form of the
-Standard Version of this Package without restriction, provided that you
-duplicate all of the original copyright notices and associated disclaimers.
-
-2. You may apply bug fixes, portability fixes and other modifications
-derived from the Public Domain, or those made Freely Available, or from
-the Copyright Holder. A Package modified in such a way shall still be
-considered the Standard Version.
-
-3. You may otherwise modify your copy of this Package in any way, provided
-that you insert a prominent notice in each changed file stating how and
-when you changed that file, and provided that you do at least ONE of the
-following:
-
- a) place your modifications in the Public Domain or otherwise make them
- Freely Available, such as by posting said modifications to Usenet or an
- equivalent medium, or placing the modifications on a major network
- archive site allowing unrestricted access to them, or by allowing the
- Copyright Holder to include your modifications in the Standard Version
- of the Package.
-
- b) use the modified Package only within your corporation or organization.
-
- c) rename any non-standard executables so the names do not conflict
- with standard executables, which must also be provided, and provide
- a separate manual page for each non-standard executable that clearly
- documents how it differs from the Standard Version.
-
- d) make other distribution arrangements with the Copyright Holder.
-
- e) permit and encourge anyone who receives a copy of the modified Package
- permission to make your modifications Freely Available
- in some specific way.
-
-
-4. You may distribute the programs of this Package in object code or
-executable form, provided that you do at least ONE of the following:
-
- a) distribute a Standard Version of the executables and library files,
- together with instructions (in the manual page or equivalent) on where
- to get the Standard Version.
-
- b) accompany the distribution with the machine-readable source of
- the Package with your modifications.
-
- c) give non-standard executables non-standard names, and clearly
- document the differences in manual pages (or equivalent), together
- with instructions on where to get the Standard Version.
-
- d) make other distribution arrangements with the Copyright Holder.
-
- e) offer the machine-readable source of the Package, with your
- modifications, by mail order.
-
-5. You may charge a distribution fee for any distribution of this Package.
-If you offer support for this Package, you may charge any fee you choose
-for that support. You may not charge a license fee for the right to use
-this Package itself. You may distribute this Package in aggregate with
-other (possibly commercial and possibly nonfree) programs as part of a
-larger (possibly commercial and possibly nonfree) software distribution,
-and charge license fees for other parts of that software distribution,
-provided that you do not advertise this Package as a product of your own.
-If the Package includes an interpreter, You may embed this Package's
-interpreter within an executable of yours (by linking); this shall be
-construed as a mere form of aggregation, provided that the complete
-Standard Version of the interpreter is so embedded.
-
-6. The scripts and library files supplied as input to or produced as
-output from the programs of this Package do not automatically fall
-under the copyright of this Package, but belong to whoever generated
-them, and may be sold commercially, and may be aggregated with this
-Package. If such scripts or library files are aggregated with this
-Package via the so-called "undump" or "unexec" methods of producing a
-binary executable image, then distribution of such an image shall
-neither be construed as a distribution of this Package nor shall it
-fall under the restrictions of Paragraphs 3 and 4, provided that you do
-not represent such an executable image as a Standard Version of this
-Package.
-
-7. C subroutines (or comparably compiled subroutines in other
-languages) supplied by you and linked into this Package in order to
-emulate subroutines and variables of the language defined by this
-Package shall not be considered part of this Package, but are the
-equivalent of input as in Paragraph 6, provided these subroutines do
-not change the language in any way that would cause it to fail the
-regression tests for the language.
-
-8. Aggregation of the Standard Version of the Package with a commercial
-distribution is always permitted provided that the use of this Package
-is embedded; that is, when no overt attempt is made to make this Package's
-interfaces visible to the end user of the commercial distribution.
-Such use shall not be construed as a distribution of this Package.
-
-9. The name of the Copyright Holder may not be used to endorse or promote
-products derived from this software without specific prior written permission.
-
-10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
-IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-
- The End
-
diff --git a/waterbox/o2em/Makefile b/waterbox/o2em/Makefile
deleted file mode 100644
index e7c1641880..0000000000
--- a/waterbox/o2em/Makefile
+++ /dev/null
@@ -1,41 +0,0 @@
-CC = x86_64-nt64-midipix-gcc
-
-CCFLAGS:= \
- -Wall -Werror=pointer-to-int-cast -Werror=int-to-pointer-cast -Werror=implicit-function-declaration \
- -std=c99 -fomit-frame-pointer -fvisibility=hidden \
- -D_GNU_SOURCE \
- -O0 -g
-
-TARGET = o2em.wbx
-
-LDFLAGS = -Wl,--dynamicbase,--export-all-symbols
-
-ROOT_DIR:=$(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
-SRCS:=$(shell find $(ROOT_DIR) -type f -name '*.c')
-OBJ_DIR:=$(ROOT_DIR)/obj
-
-_OBJS:=$(SRCS:.c=.o)
-OBJS:=$(patsubst $(ROOT_DIR)%,$(OBJ_DIR)%,$(_OBJS))
-
-$(OBJ_DIR)/%.o: %.c
- @mkdir -p $(@D)
- @$(CC) -c -o $@ $< $(CCFLAGS)
-
-all: $(TARGET)
-
-.PHONY: clean all
-
-$(TARGET).in: $(OBJS)
- @$(CC) -o $@ $(LDFLAGS) $(CCFLAGS) $(OBJS) ../emulibc/libemuhost.so
-
-$(TARGET): $(TARGET).in
-# strip $< -o $@ -R /4 -R /14 -R /29 -R /41 -R /55 -R /67 -R /78 -R /89 -R /104
- cp $< $@
-
-clean:
- rm -rf $(OBJ_DIR)
- rm -f $(TARGET).in
- rm -f $(TARGET)
-
-#install:
-# $(CP) $(TARGET) $(DEST_$(ARCH))
diff --git a/waterbox/o2em/README b/waterbox/o2em/README
deleted file mode 100644
index 8811fe86c5..0000000000
--- a/waterbox/o2em/README
+++ /dev/null
@@ -1,341 +0,0 @@
-
-
- O2EM v1.18 (Jan/2007)
-
- an Odyssey 2 & Videopac+ emulator
-
- copyright 1996/1998 by Daniel Boris
-
- Developed by Daniel Boris, Andre de la Rocha and Arlindo Oliveira
-
- This package is released under the
- Clarified Artistic License (see COPYING)
-
- Project Homepage
- http://o2em.sourceforge.net
-
----------------------------------------------------------------------------
-
-
-O2EM is an open source Odyssey2 / Videopac console emulator, created by
-Daniel Boris in 1996. Since version 0.80 it has been developed by André de
-la Rocha and since version 1.16 it has been developed by Arlindo M. de Oliveira.
-
-This release includes the source code for O2EM v1.18 and binaries for
-Windows. The sources probably can also be compiled under other platforms
-that support the Allegro game library. The binary version for Linux/X11 and
-DOS continues available just until the version 1.16.
-
-With the Windows binary, the latest stable version of the Allegro DLL is also
-included. To use the Linux version you must get the Allegro library for Linux
-yourself and install it as root. The DOS version does not need additional
-files.
-
-O2EM is a command line based program, but there are several Windows frontends
-you can use. The "official" one is O2EM Launcher, created by Heitor
-Barcellos.
-
-In order to build O2EM from its sources, you need either the MingW or Cygwin
-packages on Windows, DJGPP on DOS and GCC on Linux. See the links below.
-
-The latest version of O2EM can be found at http://o2em.sourceforge.net If you
-want to send bug reports, or be part of the O2EM development, go to the O2EM
-project page at SourceForge : http://sourceforge.net/projects/o2em/
-
-
-
-Useful links:
-
-Dan Boris' home page: http://www.atarihq.com/danb/
-Allegro library: http://alleg.sourceforge.net/
-MingW C/C++ compiler: http://sourceforge.net/projects/mingw/
-Soeren Gust page : http://soeren.informationstheater.de/
-Odyssey2 Home: http://www.classicgaming.com/o2home/
-Odysseymania the brazilian webpage : http://odysseymania.classicgaming.com.br
-OdysseyBR Group: http://gamesource.groups.yahoo.com/group/OdysseyBR/
-Videopac Forum: http://www.videopac.org
-
-Acknowledgments:
-
-
-We wish to thank the following people:
-
- Keita Iida (Keita/Pooka/Fygar)
- for his enthusiasm, for the O2EM beta testing, and general encouragement.
-
- Marco Kerstens (MarcoK)
- for providing Videopac schematics, and general support.
-
- Matthew Pritchard
- for sending some official O2 programming documents.
-
- Bo Krogsgaard (Therion23)
- for putting the idea of doing the emulator into my head to start with.
-
- Jason F. Gohlke
- for providing valuable Voice tech info as well as the voice samples.
-
- Soeren Gust : For sending his patches to O2EM and for technical
- information about the console. Part of his technical document was
- used to implement VP+ emulation.
-
- René van den Enden : for providing information about several
- unsupported games and other help.
-
- Simon Scudder : for sending technical information about the O2
- (including the datasheet of the VP+ gfx chipset), sampled sounds and
- his nice O2 disassembler.
-
- Heitor Barcellos : for creating the O2EM Launcher frontend.
-
- Marcelo Ribeiro : for the icon used with the windows version of O2EM,
- bug reports, and for information about O2 games.
-
- Rafael : for compiling a big list of bugs present in O2EM v0.87.
-
- Zimmerman : for sending his patch to add key customization, on which
- v1.00 customization was based.
-
- Arlindo de Oliveira : for sending patches to fix bugs in O2EM and for
- his interest in keeping the O2 emulation alive.
-
- The members of the OdysseyBR user group: for several bug reports, as
- well for support in general.
-
------------------------------------------------------------------------------
-
-Building:
-
-o2em depends on Allegro, for Ubuntu / Debian, run:
-
-sudo apt-get install liballegro4-dev
-
------------------------------------------------------------------------------
-
-Quick Setup:
-
-To get O2EM up and running quickly follow these steps:
-
-1. Unzip the O2EM archive on your hard drive, that will create the necessary
- standard directories: ROMS, BIOS and VOICE into the main directory O2EM118.
-2. Download the bios ROM O2ROM.BIN (or G7400.BIN, or C52.BIN, or JOPAC.BIN)
- and put it into BIOS directory.
-3. Download one or more game ROMs, for example KCMUNCH.BIN for KC Munchkin and
- put the ROM in ROMS directory.
-4. From the O2EM118 directory type: o2em KCMUNCH.BIN to start the game.If wants
- to play KC Munchkin with BIOS VP+, type: o2em KCMUNCH.BIN -g7400
-
----------------------------------------------------------------------------
-Setup:
-
- Before you can run O2EM you need a copy of the Odyssey2 or Videopac bios
-ROM. For copyright reasons, this ROM image can not be included in this
-archive. This ROM image is stored inside the 8048 processor and can be read
-out with the appropriate equipment. The image should be 1024 bytes long and
-should be in the BIOS directory into the main directory O2EM118.
-
- You will also need cartridge images, but again for copyright reasons
-these can not be provided. PLEASE DO NOT E-mail us asking for ROM images! All
-messages asking for ROM images will be promptly deleted.
-
- If you wish to use Voice emulation for games like KC's Krazy Chase.
-Download the voice samples and unzip them into the VOICE directory
-into the main directory O2EM118. There are two sets of voice samples,
-mainsamp.zip which is the main voice samples and sidsamp.zip which are the
-samples used by the game Sid the Spellbinder. You only need the Sid samples
-if you want voice in that game.
-
----------------------------------------------------------------------------
-
-
-Usage:
-
-
-o2em [options]
-
- = file to load with extension
-
-
-options:
-
--help Help display
-
--wsize=n Window size used by the emulator (1=original, 2=double size, etc.)
-
--fullscreen Use full screen mode
-
--scanlines Enable scanlines use by the video emulation. Scanlines are a
- feature that makes your display look like a TV screen.
-
--nosound Turn off sound emulation
-
--novoice Turn off voice emulation
-
--svolume=n Set sound volume (0-100)
-
--vvolume=n Set voice volume (0-100)
-
--debug Start the emulator in debug mode
-
--speed=n Relative speed (100 = original speed)
-
--nolimit Turn off speed limiter
-
--bios=file Set the file name and directory to find the console
- bios. By default it looks for a file named o2rom.bin.
- You can use a bios file from an Odyssey2, Videopac or
- Videopac+ console. If you want to run VP+ games (in
- VP+ mode) then you need a VP+ bios.
-
--romdir=path Set the directory to find the game rom. By default it
- looks for path named .../roms
-
--biosdir=path Set the directory to find the console bios. By default it
- looks for path named .../bios
-
--o2rom Start the emulator with Odyssey 2 bios (default for most games).
-
--c52 Start the emulator with french Odyssey 2 bios.
-
--g7400 Start the emulator with VP+ bios (default for detected VP+ only games).
-
--jopac Start the emulator with french VP+ bios.
-
--euro This option enables the use of European timing / 50Hz mode.
- This option is usually not needed as most of the games that
- really require this mode will be auto-detected.
-
--filter Enable the low-pass audio filter.
-
--scshot=file Set the screen shot file name or template. The screen shot
- will be saved when you press the F8 key in the emulator.
- The extension of the file you give will set the file type.
- supported file types are bmp, pcx and tga. You can also give
- a template to save several files, using the @ character.
- Using an option like -scshot=dump@.bmp will save files with
- names like dump00.bmp, dump01.bmp, etc. The pictures will
- have a resolution of (320x240)*wsize.
-
--exrom Enable the use of an alternative ROM mapping for 4Kb games, to
- support some games that use a special 3kb program rom/1kb data
- ROM mode. The only known that use it are Four in 1 Row and
- Musician and both are detected by their CRC and set correctly.
- So this option is to be used only with games that are currently
- unknown to O2EM. Do not enable it as default, as it will make
- all the 4kb games that do not use this special mode crash.
-
--s0=QUIT,PAUSE,DEBUG,RESET,SCREENCAP,SAVE,LOAD,INJECT_HIGH
- These option defines which keys are used for some of the system
- keys, if you use this option, you have to enter all 8 keys, to
- override the original keys (ESC,F1,F4,F5,F8,F2,F3,F6)
-
--s1=mode/keys Define stick 1 mode/keys
--s2=mode/keys Define stick 2 mode/keys
-
- These options define how the console joysticks are emulated.
- You can use a joystick connected to your computer or use
- the keyboard. You can specify a mode number (compatible with
- previous versions of O2EM) to disable the joystick emulation,
- to select an actual joystick or to set a default keyboard
- emulation mode :
- 0=Disable,
- 1=Default Right keys (arrows keys and right shift)
- 2=Default Left keys (W,S,A,D,SPACE)
- 3=Joystick
- Example: -s1=1 -s2=3
-
- You can also specify a list of 5 keyboard codes that will
- be used to emulate the joystick, separated by comas
- (without spaces), using this order : UP,DOWN,LEFT,RIGHT,FIRE.
- The following codes are accepted (not case sensitive):
- A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
- 0_PAD,1_PAD,2_PAD,3_PAD,4_PAD,5_PAD,6_PAD,7_PAD,8_PAD,9_PAD,
- TILDE, MINUS, EQUALS, BACKSPACE, TAB, OPENBRACE, CLOSEBRACE,
- ENTER, COLON, QUOTE, BACKSLASH, BACKSLASH2, COMMA, STOP,
- SLASH, SPACE, INSERT, DEL, HOME, END, PGUP, PGDN, LEFT,
- RIGHT, UP, DOWN, SLASH_PAD, ASTERISK, MINUS_PAD, PLUS_PAD,
- DEL_PAD, ENTER_PAD, PRTSCR, PAUSE, ABNT_C1, YEN, KANA, AT,
- CIRCUMFLEX, COLON2, KANJI, LSHIFT, RSHIFT, LCONTROL,
- RCONTROL, ALT, ALTGR, LWIN, RWIN, MENU, SCRLOCK, NUMLOCK
- Example: -s1=y,h,g,j,lcontrol -s2=8_PAD,5_PAD,4_PAD,6_PAD,RCONTROL
-
--scoreadr=address where the high-score is saved for specific rom
--scoretype=type how the high-score is saved for specific rom
--score=highscore default highscore on launch ("inject" with F6)
--scorefile=file file where the highscore is saved on exit
-
--savefile=file filename for save/load state
-
-
-
-
-----------------------------------------------------------------------------
-
-Default configuration file:
-
-O2EM now can use a configuration file to set the default options, so you can
-specify your preferred options in this file, instead of typing it every time
-you execute the emulator. The command line options override the default
-settings in the file. This file must be called o2em_def.cfg and be in the
-same directory of O2EM118. This configuration file is a text file where you can
-put the same options you would use when calling O2EM by the command line, but
-each option must be in a different line and you should not precede it with
-the - character. You can also put comment lines in the file, starting the
-line with the # character. Example configuration file:
-
- # My config
- wsize=3
- Euro
- scanlines
- filter
- g7400
- s1=8_pad,5_pad,4_pad,6_pad,rcontrol
-
-
-You disable any option set in this file when you call O2EM in the command
-line, passing the =0 parameter to the option. For this example configuration,
-you could disable the filter option set in the file putting -filter=0 when
-you call O2EM.
-
-
-----------------------------------------------------------------------------
-
-Controls:
-
- Arrow keys + L = Default joystick 1 emulation
-
- W,D,S,A + Space = Default joystick 2 emulation
-
- ESC/F12 = Leave the emulator
-
- F1 = Pause/Information
-
- F2 = Save State-File
-
- F3 = Load State-File
-
- F4 = Enter debugger
-
- F5 = Reset emulator (same as pressing the reset on the O2 keyboard)
-
- F6 = Inject Highscore
-
- F8 = Make a screen shot
-
- Caps Lock = Enables/Disables the O2 keyboard input of the keys used by
- joystick emulation
-
-----------------------------------------------------------------------------
-
-Debugger:
-
-The emulator comes with a built in debugger that was used for development.
-The debugger is not very polished and fairly incomplete but it can be useful
-for single stepping through programs and watching their behavior.
-
-H = display help
-
-----------------------------------------------------------------------------
-
-
diff --git a/waterbox/o2em/audio.c b/waterbox/o2em/audio.c
deleted file mode 100644
index 345eb55002..0000000000
--- a/waterbox/o2em/audio.c
+++ /dev/null
@@ -1,95 +0,0 @@
-
-/*
- * O2EM Free Odyssey2 / Videopac+ Emulator
- *
- * Created by Daniel Boris (c) 1997,1998
- *
- * Developed by Andre de la Rocha
- * Arlindo M. de Oliveira
- *
- * http://o2em.sourceforge.net
- *
- *
- *
- * O2 audio emulation
- */
-
-#include
-#include
-#include
-#include "cpu.h"
-#include "types.h"
-#include "config.h"
-#include "vmachine.h"
-#include "audio.h"
-
-#define SAMPLE_RATE 44100
-#define PERIOD1 11
-#define PERIOD2 44
-
-#define SOUND_BUFFER_LEN 1056
-
-#define AUD_CTRL 0xAA
-#define AUD_D0 0xA7
-#define AUD_D1 0xA8
-#define AUD_D2 0xA9
-
-int sound_IRQ;
-
-static double flt_a = 0.0, flt_b = 0.0;
-static unsigned char flt_prv = 0;
-
-void audio_process(unsigned char *buffer)
-{
- unsigned long aud_data;
- int volume, re_circ, noise, enabled, intena, period, pnt, cnt, rndbit, pos;
-
- aud_data = (VDCwrite[AUD_D2] | (VDCwrite[AUD_D1] << 8) | (VDCwrite[AUD_D0] << 16));
-
- intena = VDCwrite[0xA0] & 0x04;
-
- pnt = cnt = 0;
-
- noise = VDCwrite[AUD_CTRL] & 0x10;
- enabled = VDCwrite[AUD_CTRL] & 0x80;
- rndbit = (enabled && noise) ? (rand() % 2) : 0;
-
- while (pnt < SOUND_BUFFER_LEN)
- {
- pos = (tweakedaudio) ? (pnt / 3) : (MAXLINES - 1);
- volume = AudioVector[pos] & 0x0F;
- enabled = AudioVector[pos] & 0x80;
- period = (AudioVector[pos] & 0x20) ? PERIOD1 : PERIOD2;
- re_circ = AudioVector[pos] & 0x40;
-
- buffer[pnt++] = (enabled) ? ((aud_data & 0x01) ^ rndbit) * (0x10 * volume) : 0;
- cnt++;
-
- if (cnt >= period)
- {
- cnt = 0;
- aud_data = (re_circ) ? ((aud_data >> 1) | ((aud_data & 1) << 23)) : (aud_data >> 1);
- rndbit = (enabled && noise) ? (rand() % 2) : 0;
-
- if (enabled && intena && (!sound_IRQ))
- {
- sound_IRQ = 1;
- ext_IRQ();
- }
- }
- }
-
- //if (app_data.filter)
- //filter(buffer, SOUND_BUFFER_LEN);
-}
-
-void update_audio(void)
-{
- unsigned char scratch[4096];
- audio_process(scratch);
-}
-
-void init_audio(void)
-{
- sound_IRQ = 0;
-}
diff --git a/waterbox/o2em/audio.h b/waterbox/o2em/audio.h
deleted file mode 100644
index 6d4a805cc4..0000000000
--- a/waterbox/o2em/audio.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef __AUDIO_H
-#define __AUDIO_H
-
-void update_audio(void);
-void init_audio(void);
-void init_sound_stream(void);
-
-
-extern int sound_IRQ;
-
-
-#endif
-
-
diff --git a/waterbox/o2em/bitmap.c b/waterbox/o2em/bitmap.c
deleted file mode 100644
index 715fe79c5f..0000000000
--- a/waterbox/o2em/bitmap.c
+++ /dev/null
@@ -1,22 +0,0 @@
-#include "bitmap.h"
-#include
-#include
-
-void clear(Bitmap* b)
-{
- memset(b->dat, 0, b->w * b->h);
-}
-
-Bitmap* NewBitmap(int w, int h)
-{
- Bitmap* b = malloc(sizeof(Bitmap) + w * h);
- b->w = w;
- b->h = h;
- b->line = malloc(sizeof(uint8_t*) * h);
- b->dat = malloc(w * h);
- for (int i = 0; i < h; i++)
- b->line[i] = b->dat + w * i;
-
- clear(b);
- return b;
-}
diff --git a/waterbox/o2em/bitmap.h b/waterbox/o2em/bitmap.h
deleted file mode 100644
index dec2e6e437..0000000000
--- a/waterbox/o2em/bitmap.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#pragma once
-#include
-
-typedef struct
-{
- uint8_t** line;
- uint8_t* dat;
- int w;
- int h;
-} Bitmap;
-
-void clear(Bitmap* b);
-Bitmap* NewBitmap(int w, int h);
diff --git a/waterbox/o2em/config.h b/waterbox/o2em/config.h
deleted file mode 100644
index 715a373990..0000000000
--- a/waterbox/o2em/config.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-#define O2EM_VERSION "1.18"
-#define RELEASE_DATE "(Jan/2007)"
-
-#define ROM_O2 1
-#define ROM_G7400 2
-#define ROM_C52 3
-#define ROM_JOPAC 4
-#define ROM_UNKNOWN 99
-
-#endif
-
diff --git a/waterbox/o2em/cpu.c b/waterbox/o2em/cpu.c
deleted file mode 100644
index addf20d4cf..0000000000
--- a/waterbox/o2em/cpu.c
+++ /dev/null
@@ -1,1670 +0,0 @@
-
-/*
- * O2EM Free Odyssey2 / Videopac+ Emulator
- *
- * Created by Daniel Boris (c) 1997,1998
- *
- ** Developed by Andre de la Rocha
- * Arlindo M. de Oliveira
- *
- * http://o2em.sourceforge.net
- *
- *
- *
- * 8048 microcontroller emulation
- */
-
-#include
-#include "types.h"
-#include "vmachine.h"
-#include "keyboard.h"
-#include "voice.h"
-#include "vdc.h"
-#include "vpp.h"
-#include "cpu.h"
-
-static int64_t clk;
-
-#define push(d) \
- { \
- intRAM[sp++] = (d); \
- if (sp > 23) \
- sp = 8; \
- }
-#define pull() (sp--, (sp < 8) ? (sp = 23) : 0, intRAM[sp])
-#define make_psw() \
- { \
- psw = (cy << 7) | ac | f0 | bs | 0x08; \
- psw = psw | ((sp - 8) >> 1); \
- }
-#define illegal(o) \
- { \
- }
-#define undef(i) \
- { \
- printf("** unimplemented instruction %x, %x**\n", i, pc); \
- }
-#define ROM(adr) (rom[(adr)&0xfff])
-
-void init_cpu(void)
-{
- pc = 0;
- sp = 8;
- bs = 0;
- p1 = p2 = 0xFF;
- ac = cy = f0 = 0;
- A11 = A11ff = 0;
- timer_on = 0;
- count_on = 0;
- reg_pnt = 0;
- tirq_en = xirq_en = irq_ex = xirq_pend = tirq_pend = 0;
-}
-
-void ext_IRQ(void)
-{
- int_clk = 5; /* length of pulse on /INT */
- if (xirq_en && !irq_ex)
- {
- irq_ex = 1;
- xirq_pend = 0;
- clk += 2;
- make_psw();
- push(pc & 0xFF);
- push(((pc & 0xF00) >> 8) | (psw & 0xF0));
- pc = 0x03;
- A11ff = A11;
- A11 = 0;
- }
- if (pendirq && (!xirq_en))
- xirq_pend = 1;
-}
-
-void tim_IRQ(void)
-{
- if (tirq_en && !irq_ex)
- {
- irq_ex = 2;
- tirq_pend = 0;
- clk += 2;
- make_psw();
- push(pc & 0xFF);
- push(((pc & 0xF00) >> 8) | (psw & 0xF0));
- pc = 0x07;
- A11ff = A11;
- A11 = 0;
- }
- if (pendirq && (!tirq_en))
- tirq_pend = 1;
-}
-
-void make_psw_debug(void)
-{
- make_psw();
-}
-
-int64_t cpu_exec(int64_t ncycles)
-{
- int64_t startclk = clk;
- int64_t targetclk = clk + ncycles;
-
- Byte op;
- ADDRESS adr;
- Byte dat;
- int temp;
-
- while (clk < targetclk)
- {
- lastpc = pc;
- op = ROM(pc++);
- switch (op)
- {
- case 0x00: /* NOP */
- clk++;
- break;
- case 0x01: /* ILL */
- illegal(op);
- clk++;
- break;
- case 0x02: /* OUTL BUS,A */
- clk += 2;
- undef(0x02);
- break;
- case 0x03: /* ADD A,#data */
- clk += 2;
- cy = ac = 0;
- dat = ROM(pc++);
- if (((acc & 0x0f) + (dat & 0x0f)) > 0x0f)
- ac = 0x40;
- temp = acc + dat;
- if (temp > 0xFF)
- cy = 1;
- acc = (temp & 0xFF);
- break;
- case 0x04: /* JMP */
- pc = ROM(pc) | A11;
- clk += 2;
- break;
- case 0x05: /* EN I */
- xirq_en = 1;
- clk++;
- break;
- case 0x06: /* ILL */
- clk++;
- illegal(op);
- break;
- case 0x07: /* DEC A */
- acc--;
- clk++;
- break;
- case 0x08: /* INS A,BUS*/
- clk += 2;
- acc = in_bus();
- break;
- case 0x09: /* IN A,Pp */
- acc = p1;
- clk += 2;
- break;
- case 0x0A: /* IN A,Pp */
- acc = read_P2();
- clk += 2;
- break;
- case 0x0B: /* ILL */
- clk++;
- illegal(op);
- break;
- case 0x0C: /* MOVD A,P4 */
- clk += 2;
- acc = read_PB(0);
- break;
- case 0x0D: /* MOVD A,P5 */
- clk += 2;
- acc = read_PB(1);
- break;
- case 0x0E: /* MOVD A,P6 */
- clk += 2;
- acc = read_PB(2);
- break;
- case 0x0F: /* MOVD A,P7 */
- clk += 2;
- acc = read_PB(3);
- break;
- case 0x10: /* INC @Ri */
- intRAM[intRAM[reg_pnt] & 0x3F]++;
- clk++;
- break;
- case 0x11: /* INC @Ri */
- intRAM[intRAM[reg_pnt + 1] & 0x3F]++;
- clk++;
- break;
- case 0x12: /* JBb address */
- clk += 2;
- dat = ROM(pc);
- if (acc & 0x01)
- pc = (pc & 0xF00) | dat;
- else
- pc++;
- break;
- case 0x13: /* ADDC A,#data */
- clk += 2;
- dat = ROM(pc++);
- ac = 0;
- if (((acc & 0x0f) + (dat & 0x0f) + cy) > 0x0f)
- ac = 0x40;
- temp = acc + dat + cy;
- cy = 0;
- if (temp > 0xFF)
- cy = 1;
- acc = (temp & 0xFF);
- break;
-
- case 0x14: /* CALL */
- make_psw();
- adr = ROM(pc) | A11;
- pc++;
- clk += 2;
- push(pc & 0xFF);
- push(((pc & 0xF00) >> 8) | (psw & 0xF0));
- pc = adr;
- break;
- case 0x15: /* DIS I */
- xirq_en = 0;
- clk++;
- break;
- case 0x16: /* JTF */
- clk += 2;
- dat = ROM(pc);
- if (t_flag)
- pc = (pc & 0xF00) | dat;
- else
- pc++;
- t_flag = 0;
- break;
- case 0x17: /* INC A */
- acc++;
- clk++;
- break;
- case 0x18: /* INC Rr */
- intRAM[reg_pnt]++;
- clk++;
- break;
- case 0x19: /* INC Rr */
- intRAM[reg_pnt + 1]++;
- clk++;
- break;
- case 0x1A: /* INC Rr */
- intRAM[reg_pnt + 2]++;
- clk++;
- break;
- case 0x1B: /* INC Rr */
- intRAM[reg_pnt + 3]++;
- clk++;
- break;
- case 0x1C: /* INC Rr */
- intRAM[reg_pnt + 4]++;
- clk++;
- break;
- case 0x1D: /* INC Rr */
- intRAM[reg_pnt + 5]++;
- clk++;
- break;
- case 0x1E: /* INC Rr */
- intRAM[reg_pnt + 6]++;
- clk++;
- break;
- case 0x1F: /* INC Rr */
- intRAM[reg_pnt + 7]++;
- clk++;
- break;
- case 0x20: /* XCH A,@Ri */
- clk++;
- dat = acc;
- acc = intRAM[intRAM[reg_pnt] & 0x3F];
- intRAM[intRAM[reg_pnt] & 0x3F] = dat;
- break;
- case 0x21: /* XCH A,@Ri */
- clk++;
- dat = acc;
- acc = intRAM[intRAM[reg_pnt + 1] & 0x3F];
- intRAM[intRAM[reg_pnt + 1] & 0x3F] = dat;
- break;
- case 0x22: /* ILL */
- clk++;
- illegal(op);
- break;
- case 0x23: /* MOV a,#data */
- clk += 2;
- acc = ROM(pc++);
- break;
-
- case 0x24: /* JMP */
- pc = ROM(pc) | 0x100 | A11;
- clk += 2;
- break;
- case 0x25: /* EN TCNTI */
- tirq_en = 1;
- clk++;
- break;
- case 0x26: /* JNT0 */
- clk += 2;
- dat = ROM(pc);
- if (!get_voice_status())
- pc = (pc & 0xF00) | dat;
- else
- pc++;
- break;
- case 0x27: /* CLR A */
- clk++;
- acc = 0;
- break;
- case 0x28: /* XCH A,Rr */
- dat = acc;
- acc = intRAM[reg_pnt];
- intRAM[reg_pnt] = dat;
- clk++;
- break;
- case 0x29: /* XCH A,Rr */
- dat = acc;
- acc = intRAM[reg_pnt + 1];
- intRAM[reg_pnt + 1] = dat;
- clk++;
- break;
- case 0x2A: /* XCH A,Rr */
- dat = acc;
- acc = intRAM[reg_pnt + 2];
- intRAM[reg_pnt + 2] = dat;
- clk++;
- break;
- case 0x2B: /* XCH A,Rr */
- dat = acc;
- acc = intRAM[reg_pnt + 3];
- intRAM[reg_pnt + 3] = dat;
- clk++;
- break;
- case 0x2C: /* XCH A,Rr */
- dat = acc;
- acc = intRAM[reg_pnt + 4];
- intRAM[reg_pnt + 4] = dat;
- clk++;
- break;
- case 0x2D: /* XCH A,Rr */
- dat = acc;
- acc = intRAM[reg_pnt + 5];
- intRAM[reg_pnt + 5] = dat;
- clk++;
- break;
- case 0x2E: /* XCH A,Rr */
- dat = acc;
- acc = intRAM[reg_pnt + 6];
- intRAM[reg_pnt + 6] = dat;
- clk++;
- break;
- case 0x2F: /* XCH A,Rr */
- dat = acc;
- acc = intRAM[reg_pnt + 7];
- intRAM[reg_pnt + 7] = dat;
- clk++;
- break;
- case 0x30: /* XCHD A,@Ri */
- clk++;
- adr = intRAM[reg_pnt] & 0x3F;
- dat = acc & 0x0F;
- acc = acc & 0xF0;
- acc = acc | (intRAM[adr] & 0x0F);
- intRAM[adr] &= 0xF0;
- intRAM[adr] |= dat;
- break;
- case 0x31: /* XCHD A,@Ri */
- clk++;
- adr = intRAM[reg_pnt + 1] & 0x3F;
- dat = acc & 0x0F;
- acc = acc & 0xF0;
- acc = acc | (intRAM[adr] & 0x0F);
- intRAM[adr] &= 0xF0;
- intRAM[adr] |= dat;
- break;
- case 0x32: /* JBb address */
- clk += 2;
- dat = ROM(pc);
- if (acc & 0x02)
- pc = (pc & 0xF00) | dat;
- else
- pc++;
- break;
- case 0x33: /* ILL */
- clk++;
- illegal(op);
- break;
- case 0x34: /* CALL */
- make_psw();
- adr = ROM(pc) | 0x100 | A11;
- pc++;
- clk += 2;
- push(pc & 0xFF);
- push(((pc & 0xF00) >> 8) | (psw & 0xF0));
- pc = adr;
- break;
- case 0x35: /* DIS TCNTI */
- tirq_en = 0;
- tirq_pend = 0;
- clk++;
- break;
- case 0x36: /* JT0 */
- clk += 2;
- dat = ROM(pc);
- if (get_voice_status())
- pc = (pc & 0xF00) | dat;
- else
- pc++;
- break;
- case 0x37: /* CPL A */
- acc = acc ^ 0xFF;
- clk++;
- break;
- case 0x38: /* ILL */
- clk++;
- illegal(op);
- break;
- case 0x39: /* OUTL P1,A */
- clk += 2;
- write_p1(acc);
- break;
- case 0x3A: /* OUTL P2,A */
- clk += 2;
- p2 = acc;
- break;
- case 0x3B: /* ILL */
- clk++;
- illegal(op);
- break;
- case 0x3C: /* MOVD P4,A */
- clk += 2;
- write_PB(0, acc);
- break;
- case 0x3D: /* MOVD P5,A */
- clk += 2;
- write_PB(1, acc);
- break;
- case 0x3E: /* MOVD P6,A */
- clk += 2;
- write_PB(2, acc);
- break;
- case 0x3F: /* MOVD P7,A */
- clk += 2;
- write_PB(3, acc);
- break;
- case 0x40: /* ORL A,@Ri */
- clk++;
- acc = acc | intRAM[intRAM[reg_pnt] & 0x3F];
- break;
- case 0x41: /* ORL A,@Ri */
- clk++;
- acc = acc | intRAM[intRAM[reg_pnt + 1] & 0x3F];
- break;
- case 0x42: /* MOV A,T */
- clk++;
- acc = itimer;
- break;
- case 0x43: /* ORL A,#data */
- clk += 2;
- acc = acc | ROM(pc++);
- break;
- case 0x44: /* JMP */
- pc = ROM(pc) | 0x200 | A11;
- clk += 2;
- break;
- case 0x45: /* STRT CNT */
- /* printf("START: %d=%d\n",master_clk/22,itimer); */
- count_on = 1;
- clk++;
- break;
- case 0x46: /* JNT1 */
- clk += 2;
- dat = ROM(pc);
- if (!read_t1())
- pc = (pc & 0xF00) | dat;
- else
- pc++;
- break;
- case 0x47: /* SWAP A */
- clk++;
- dat = (acc & 0xF0) >> 4;
- acc = acc << 4;
- acc = acc | dat;
- break;
- case 0x48: /* ORL A,Rr */
- clk++;
- acc = acc | intRAM[reg_pnt];
- break;
- case 0x49: /* ORL A,Rr */
- clk++;
- acc = acc | intRAM[reg_pnt + 1];
- break;
- case 0x4A: /* ORL A,Rr */
- clk++;
- acc = acc | intRAM[reg_pnt + 2];
- break;
- case 0x4B: /* ORL A,Rr */
- clk++;
- acc = acc | intRAM[reg_pnt + 3];
- break;
- case 0x4C: /* ORL A,Rr */
- clk++;
- acc = acc | intRAM[reg_pnt + 4];
- break;
- case 0x4D: /* ORL A,Rr */
- clk++;
- acc = acc | intRAM[reg_pnt + 5];
- break;
- case 0x4E: /* ORL A,Rr */
- clk++;
- acc = acc | intRAM[reg_pnt + 6];
- break;
- case 0x4F: /* ORL A,Rr */
- clk++;
- acc = acc | intRAM[reg_pnt + 7];
- break;
-
- case 0x50: /* ANL A,@Ri */
- acc = acc & intRAM[intRAM[reg_pnt] & 0x3F];
- clk++;
- break;
- case 0x51: /* ANL A,@Ri */
- acc = acc & intRAM[intRAM[reg_pnt + 1] & 0x3F];
- clk++;
- break;
- case 0x52: /* JBb address */
- clk += 2;
- dat = ROM(pc);
- if (acc & 0x04)
- pc = (pc & 0xF00) | dat;
- else
- pc++;
- break;
- case 0x53: /* ANL A,#data */
- clk += 2;
- acc = acc & ROM(pc++);
- break;
- case 0x54: /* CALL */
- make_psw();
- adr = ROM(pc) | 0x200 | A11;
- pc++;
- clk += 2;
- push(pc & 0xFF);
- push(((pc & 0xF00) >> 8) | (psw & 0xF0));
- pc = adr;
- break;
- case 0x55: /* STRT T */
- timer_on = 1;
- clk++;
- break;
- case 0x56: /* JT1 */
- clk += 2;
- dat = ROM(pc);
- if (read_t1())
- pc = (pc & 0xF00) | dat;
- else
- pc++;
- break;
- case 0x57: /* DA A */
- clk++;
- if (((acc & 0x0F) > 0x09) || ac)
- {
- if (acc > 0xf9)
- cy = 1;
- acc += 6;
- }
- dat = (acc & 0xF0) >> 4;
- if ((dat > 9) || cy)
- {
- dat += 6;
- cy = 1;
- }
- acc = (acc & 0x0F) | (dat << 4);
- break;
- case 0x58: /* ANL A,Rr */
- clk++;
- acc = acc & intRAM[reg_pnt];
- break;
- case 0x59: /* ANL A,Rr */
- clk++;
- acc = acc & intRAM[reg_pnt + 1];
- break;
- case 0x5A: /* ANL A,Rr */
- clk++;
- acc = acc & intRAM[reg_pnt + 2];
- break;
- case 0x5B: /* ANL A,Rr */
- clk++;
- acc = acc & intRAM[reg_pnt + 3];
- break;
- case 0x5C: /* ANL A,Rr */
- clk++;
- acc = acc & intRAM[reg_pnt + 4];
- break;
- case 0x5D: /* ANL A,Rr */
- clk++;
- acc = acc & intRAM[reg_pnt + 5];
- break;
- case 0x5E: /* ANL A,Rr */
- clk++;
- acc = acc & intRAM[reg_pnt + 6];
- break;
- case 0x5F: /* ANL A,Rr */
- clk++;
- acc = acc & intRAM[reg_pnt + 7];
- break;
-
- case 0x60: /* ADD A,@Ri */
- clk++;
- cy = ac = 0;
- dat = intRAM[intRAM[reg_pnt] & 0x3F];
- if (((acc & 0x0f) + (dat & 0x0f)) > 0x0f)
- ac = 0x40;
- temp = acc + dat;
- if (temp > 0xFF)
- cy = 1;
- acc = (temp & 0xFF);
- break;
- case 0x61: /* ADD A,@Ri */
- clk++;
- cy = ac = 0;
- dat = intRAM[intRAM[reg_pnt + 1] & 0x3F];
- if (((acc & 0x0f) + (dat & 0x0f)) > 0x0f)
- ac = 0x40;
- temp = acc + dat;
- if (temp > 0xFF)
- cy = 1;
- acc = (temp & 0xFF);
- break;
- case 0x62: /* MOV T,A */
- clk++;
- itimer = acc;
- break;
- case 0x63: /* ILL */
- clk++;
- illegal(op);
- break;
- case 0x64: /* JMP */
- pc = ROM(pc) | 0x300 | A11;
- clk += 2;
- break;
- case 0x65: /* STOP TCNT */
- clk++;
- /* printf("STOP %d\n",master_clk/22); */
- count_on = timer_on = 0;
- break;
- case 0x66: /* ILL */
- clk++;
- illegal(op);
- break;
- case 0x67: /* RRC A */
- dat = cy;
- cy = acc & 0x01;
- acc = acc >> 1;
- if (dat)
- acc = acc | 0x80;
- else
- acc = acc & 0x7F;
- clk++;
- break;
- case 0x68: /* ADD A,Rr */
- clk++;
- cy = ac = 0;
- dat = intRAM[reg_pnt];
- if (((acc & 0x0f) + (dat & 0x0f)) > 0x0f)
- ac = 0x40;
- temp = acc + dat;
- if (temp > 0xFF)
- cy = 1;
- acc = (temp & 0xFF);
- break;
- case 0x69: /* ADD A,Rr */
- clk++;
- cy = ac = 0;
- dat = intRAM[reg_pnt + 1];
- if (((acc & 0x0f) + (dat & 0x0f)) > 0x0f)
- ac = 0x40;
- temp = acc + dat;
- if (temp > 0xFF)
- cy = 1;
- acc = (temp & 0xFF);
- break;
- case 0x6A: /* ADD A,Rr */
- clk++;
- cy = ac = 0;
- dat = intRAM[reg_pnt + 2];
- if (((acc & 0x0f) + (dat & 0x0f)) > 0x0f)
- ac = 0x40;
- temp = acc + dat;
- if (temp > 0xFF)
- cy = 1;
- acc = (temp & 0xFF);
- break;
- case 0x6B: /* ADD A,Rr */
- clk++;
- cy = ac = 0;
- dat = intRAM[reg_pnt + 3];
- if (((acc & 0x0f) + (dat & 0x0f)) > 0x0f)
- ac = 0x40;
- temp = acc + dat;
- if (temp > 0xFF)
- cy = 1;
- acc = (temp & 0xFF);
- break;
- case 0x6C: /* ADD A,Rr */
- clk++;
- cy = ac = 0;
- dat = intRAM[reg_pnt + 4];
- if (((acc & 0x0f) + (dat & 0x0f)) > 0x0f)
- ac = 0x40;
- temp = acc + dat;
- if (temp > 0xFF)
- cy = 1;
- acc = (temp & 0xFF);
- break;
- case 0x6D: /* ADD A,Rr */
- clk++;
- cy = ac = 0;
- dat = intRAM[reg_pnt + 5];
- if (((acc & 0x0f) + (dat & 0x0f)) > 0x0f)
- ac = 0x40;
- temp = acc + dat;
- if (temp > 0xFF)
- cy = 1;
- acc = (temp & 0xFF);
- break;
- case 0x6E: /* ADD A,Rr */
- clk++;
- cy = ac = 0;
- dat = intRAM[reg_pnt + 6];
- if (((acc & 0x0f) + (dat & 0x0f)) > 0x0f)
- ac = 0x40;
- temp = acc + dat;
- if (temp > 0xFF)
- cy = 1;
- acc = (temp & 0xFF);
- break;
- case 0x6F: /* ADD A,Rr */
- clk++;
- cy = ac = 0;
- dat = intRAM[reg_pnt + 7];
- if (((acc & 0x0f) + (dat & 0x0f)) > 0x0f)
- ac = 0x40;
- temp = acc + dat;
- if (temp > 0xFF)
- cy = 1;
- acc = (temp & 0xFF);
- break;
- case 0x70: /* ADDC A,@Ri */
- clk++;
- ac = 0;
- dat = intRAM[intRAM[reg_pnt] & 0x3F];
- if (((acc & 0x0f) + (dat & 0x0f) + cy) > 0x0f)
- ac = 0x40;
- temp = acc + dat + cy;
- cy = 0;
- if (temp > 0xFF)
- cy = 1;
- acc = (temp & 0xFF);
- break;
- case 0x71: /* ADDC A,@Ri */
- clk++;
- ac = 0;
- dat = intRAM[intRAM[reg_pnt + 1] & 0x3F];
- if (((acc & 0x0f) + (dat & 0x0f) + cy) > 0x0f)
- ac = 0x40;
- temp = acc + dat + cy;
- cy = 0;
- if (temp > 0xFF)
- cy = 1;
- acc = (temp & 0xFF);
- break;
-
- case 0x72: /* JBb address */
- clk += 2;
- dat = ROM(pc);
- if (acc & 0x08)
- pc = (pc & 0xF00) | dat;
- else
- pc++;
- break;
- case 0x73: /* ILL */
- clk++;
- illegal(op);
- break;
- case 0x74: /* CALL */
- make_psw();
- adr = ROM(pc) | 0x300 | A11;
- pc++;
- clk += 2;
- push(pc & 0xFF);
- push(((pc & 0xF00) >> 8) | (psw & 0xF0));
- pc = adr;
- break;
- case 0x75: /* EN CLK */
- clk++;
- undef(op);
- break;
- case 0x76: /* JF1 address */
- clk += 2;
- dat = ROM(pc);
- if (f1)
- pc = (pc & 0xF00) | dat;
- else
- pc++;
- break;
- case 0x77: /* RR A */
- clk++;
- dat = acc & 0x01;
- acc = acc >> 1;
- if (dat)
- acc = acc | 0x80;
- else
- acc = acc & 0x7f;
- break;
-
- case 0x78: /* ADDC A,Rr */
- clk++;
- ac = 0;
- dat = intRAM[reg_pnt];
- if (((acc & 0x0f) + (dat & 0x0f) + cy) > 0x0f)
- ac = 0x40;
- temp = acc + dat + cy;
- cy = 0;
- if (temp > 0xFF)
- cy = 1;
- acc = (temp & 0xFF);
- break;
- case 0x79: /* ADDC A,Rr */
- clk++;
- ac = 0;
- dat = intRAM[reg_pnt + 1];
- if (((acc & 0x0f) + (dat & 0x0f) + cy) > 0x0f)
- ac = 0x40;
- temp = acc + dat + cy;
- cy = 0;
- if (temp > 0xFF)
- cy = 1;
- acc = (temp & 0xFF);
- break;
- case 0x7A: /* ADDC A,Rr */
- clk++;
- ac = 0;
- dat = intRAM[reg_pnt + 2];
- if (((acc & 0x0f) + (dat & 0x0f) + cy) > 0x0f)
- ac = 0x40;
- temp = acc + dat + cy;
- cy = 0;
- if (temp > 0xFF)
- cy = 1;
- acc = (temp & 0xFF);
- break;
- case 0x7B: /* ADDC A,Rr */
- clk++;
- ac = 0;
- dat = intRAM[reg_pnt + 3];
- if (((acc & 0x0f) + (dat & 0x0f) + cy) > 0x0f)
- ac = 0x40;
- temp = acc + dat + cy;
- cy = 0;
- if (temp > 0xFF)
- cy = 1;
- acc = (temp & 0xFF);
- break;
- case 0x7C: /* ADDC A,Rr */
- clk++;
- ac = 0;
- dat = intRAM[reg_pnt + 4];
- if (((acc & 0x0f) + (dat & 0x0f) + cy) > 0x0f)
- ac = 0x40;
- temp = acc + dat + cy;
- cy = 0;
- if (temp > 0xFF)
- cy = 1;
- acc = (temp & 0xFF);
- break;
- case 0x7D: /* ADDC A,Rr */
- clk++;
- ac = 0;
- dat = intRAM[reg_pnt + 5];
- if (((acc & 0x0f) + (dat & 0x0f) + cy) > 0x0f)
- ac = 0x40;
- temp = acc + dat + cy;
- cy = 0;
- if (temp > 0xFF)
- cy = 1;
- acc = (temp & 0xFF);
- break;
- case 0x7E: /* ADDC A,Rr */
- clk++;
- ac = 0;
- dat = intRAM[reg_pnt + 6];
- if (((acc & 0x0f) + (dat & 0x0f) + cy) > 0x0f)
- ac = 0x40;
- temp = acc + dat + cy;
- cy = 0;
- if (temp > 0xFF)
- cy = 1;
- acc = (temp & 0xFF);
- break;
- case 0x7F: /* ADDC A,Rr */
- clk++;
- ac = 0;
- dat = intRAM[reg_pnt + 7];
- if (((acc & 0x0f) + (dat & 0x0f) + cy) > 0x0f)
- ac = 0x40;
- temp = acc + dat + cy;
- cy = 0;
- if (temp > 0xFF)
- cy = 1;
- acc = (temp & 0xFF);
- break;
-
- case 0x80: /* MOVX A,@Ri */
- acc = ext_read(intRAM[reg_pnt]);
- clk += 2;
- break;
- case 0x81: /* MOVX A,@Ri */
- acc = ext_read(intRAM[reg_pnt + 1]);
- clk += 2;
- break;
- case 0x82: /* ILL */
- clk++;
- illegal(op);
- break;
- case 0x83: /* RET */
- clk += 2;
- pc = ((pull() & 0x0F) << 8);
- pc = pc | pull();
- break;
- case 0x84: /* JMP */
- pc = ROM(pc) | 0x400 | A11;
- clk += 2;
- break;
- case 0x85: /* CLR F0 */
- clk++;
- f0 = 0;
- break;
- case 0x86: /* JNI address */
- clk += 2;
- dat = ROM(pc);
- if (int_clk > 0)
- pc = (pc & 0xF00) | dat;
- else
- pc++;
- break;
- case 0x87: /* ILL */
- illegal(op);
- clk++;
- break;
- case 0x88: /* BUS,#data */
- clk += 2;
- undef(op);
- break;
- case 0x89: /* ORL Pp,#data */
- write_p1(p1 | ROM(pc++));
- clk += 2;
- break;
- case 0x8A: /* ORL Pp,#data */
- p2 = p2 | ROM(pc++);
- clk += 2;
- break;
- case 0x8B: /* ILL */
- illegal(op);
- clk++;
- break;
- case 0x8C: /* ORLD P4,A */
- write_PB(0, read_PB(0) | acc);
- clk += 2;
- break;
- case 0x8D: /* ORLD P5,A */
- write_PB(1, read_PB(1) | acc);
- clk += 2;
- break;
- case 0x8E: /* ORLD P6,A */
- write_PB(2, read_PB(2) | acc);
- clk += 2;
- break;
- case 0x8F: /* ORLD P7,A */
- write_PB(3, read_PB(3) | acc);
- clk += 2;
- break;
- case 0x90: /* MOVX @Ri,A */
- ext_write(acc, intRAM[reg_pnt]);
- clk += 2;
- break;
- case 0x91: /* MOVX @Ri,A */
- ext_write(acc, intRAM[reg_pnt + 1]);
- clk += 2;
- break;
- case 0x92: /* JBb address */
- clk += 2;
- dat = ROM(pc);
- if (acc & 0x10)
- pc = (pc & 0xF00) | dat;
- else
- pc++;
- break;
- case 0x93: /* RETR*/
- /* printf("RETR %d\n",master_clk/22); */
- clk += 2;
- dat = pull();
- pc = (dat & 0x0F) << 8;
- cy = (dat & 0x80) >> 7;
- ac = dat & 0x40;
- f0 = dat & 0x20;
- bs = dat & 0x10;
- if (bs)
- reg_pnt = 24;
- else
- reg_pnt = 0;
- pc = pc | pull();
- irq_ex = 0;
- A11 = A11ff;
- break;
- case 0x94: /* CALL */
- make_psw();
- adr = ROM(pc) | 0x400 | A11;
- pc++;
- clk += 2;
- push(pc & 0xFF);
- push(((pc & 0xF00) >> 8) | (psw & 0xF0));
- pc = adr;
- break;
- case 0x95: /* CPL F0 */
- f0 = f0 ^ 0x20;
- clk++;
- break;
- case 0x96: /* JNZ address */
- clk += 2;
- dat = ROM(pc);
- if (acc != 0)
- pc = (pc & 0xF00) | dat;
- else
- pc++;
- break;
- case 0x97: /* CLR C */
- cy = 0;
- clk++;
- break;
- case 0x98: /* ANL BUS,#data */
- clk += 2;
- undef(op);
- break;
- case 0x99: /* ANL Pp,#data */
- write_p1(p1 & ROM(pc++));
- clk += 2;
- break;
- case 0x9A: /* ANL Pp,#data */
- p2 = p2 & ROM(pc++);
- clk += 2;
- break;
- case 0x9B: /* ILL */
- illegal(op);
- clk++;
- break;
- case 0x9C: /* ANLD P4,A */
- write_PB(0, read_PB(0) & acc);
- clk += 2;
- break;
- case 0x9D: /* ANLD P5,A */
- write_PB(1, read_PB(1) & acc);
- clk += 2;
- break;
- case 0x9E: /* ANLD P6,A */
- write_PB(2, read_PB(2) & acc);
- clk += 2;
- break;
- case 0x9F: /* ANLD P7,A */
- write_PB(3, read_PB(3) & acc);
- clk += 2;
- break;
- case 0xA0: /* MOV @Ri,A */
- intRAM[intRAM[reg_pnt] & 0x3F] = acc;
- clk++;
- break;
- case 0xA1: /* MOV @Ri,A */
- intRAM[intRAM[reg_pnt + 1] & 0x3F] = acc;
- clk++;
- break;
- case 0xA2: /* ILL */
- clk++;
- illegal(op);
- break;
- case 0xA3: /* MOVP A,@A */
- acc = ROM((pc & 0xF00) | acc);
- clk += 2;
- break;
- case 0xA4: /* JMP */
- pc = ROM(pc) | 0x500 | A11;
- clk += 2;
- break;
- case 0xA5: /* CLR F1 */
- clk++;
- f1 = 0;
- break;
- case 0xA6: /* ILL */
- illegal(op);
- clk++;
- break;
- case 0xA7: /* CPL C */
- cy = cy ^ 0x01;
- clk++;
- break;
- case 0xA8: /* MOV Rr,A */
- intRAM[reg_pnt] = acc;
- clk++;
- break;
- case 0xA9: /* MOV Rr,A */
- intRAM[reg_pnt + 1] = acc;
- clk++;
- break;
- case 0xAA: /* MOV Rr,A */
- intRAM[reg_pnt + 2] = acc;
- clk++;
- break;
- case 0xAB: /* MOV Rr,A */
- intRAM[reg_pnt + 3] = acc;
- clk++;
- break;
- case 0xAC: /* MOV Rr,A */
- intRAM[reg_pnt + 4] = acc;
- clk++;
- break;
- case 0xAD: /* MOV Rr,A */
- intRAM[reg_pnt + 5] = acc;
- clk++;
- break;
- case 0xAE: /* MOV Rr,A */
- intRAM[reg_pnt + 6] = acc;
- clk++;
- break;
- case 0xAF: /* MOV Rr,A */
- intRAM[reg_pnt + 7] = acc;
- clk++;
- break;
- case 0xB0: /* MOV @Ri,#data */
- intRAM[intRAM[reg_pnt] & 0x3F] = ROM(pc++);
- clk += 2;
- break;
- case 0xB1: /* MOV @Ri,#data */
- intRAM[intRAM[reg_pnt + 1] & 0x3F] = ROM(pc++);
- clk += 2;
- break;
- case 0xB2: /* JBb address */
- clk += 2;
- dat = ROM(pc);
- if (acc & 0x20)
- pc = (pc & 0xF00) | dat;
- else
- pc++;
- break;
- case 0xB3: /* JMPP @A */
- adr = (pc & 0xF00) | acc;
- pc = (pc & 0xF00) | ROM(adr);
- clk += 2;
- break;
- case 0xB4: /* CALL */
- make_psw();
- adr = ROM(pc) | 0x500 | A11;
- pc++;
- clk += 2;
- push(pc & 0xFF);
- push(((pc & 0xF00) >> 8) | (psw & 0xF0));
- pc = adr;
- break;
- case 0xB5: /* CPL F1 */
- f1 = f1 ^ 0x01;
- clk++;
- break;
- case 0xB6: /* JF0 address */
- clk += 2;
- dat = ROM(pc);
- if (f0)
- pc = (pc & 0xF00) | dat;
- else
- pc++;
- break;
- case 0xB7: /* ILL */
- clk++;
- illegal(op);
- break;
- case 0xB8: /* MOV Rr,#data */
- intRAM[reg_pnt] = ROM(pc++);
- clk += 2;
- break;
- case 0xB9: /* MOV Rr,#data */
- intRAM[reg_pnt + 1] = ROM(pc++);
- clk += 2;
- break;
- case 0xBA: /* MOV Rr,#data */
- intRAM[reg_pnt + 2] = ROM(pc++);
- clk += 2;
- break;
- case 0xBB: /* MOV Rr,#data */
- intRAM[reg_pnt + 3] = ROM(pc++);
- clk += 2;
- break;
- case 0xBC: /* MOV Rr,#data */
- intRAM[reg_pnt + 4] = ROM(pc++);
- clk += 2;
- break;
- case 0xBD: /* MOV Rr,#data */
- intRAM[reg_pnt + 5] = ROM(pc++);
- clk += 2;
- break;
- case 0xBE: /* MOV Rr,#data */
- intRAM[reg_pnt + 6] = ROM(pc++);
- clk += 2;
- break;
- case 0xBF: /* MOV Rr,#data */
- intRAM[reg_pnt + 7] = ROM(pc++);
- clk += 2;
- break;
- case 0xC0: /* ILL */
- illegal(op);
- clk++;
- break;
- case 0xC1: /* ILL */
- illegal(op);
- clk++;
- break;
- case 0xC2: /* ILL */
- illegal(op);
- clk++;
- break;
- case 0xC3: /* ILL */
- illegal(op);
- clk++;
- break;
- case 0xC4: /* JMP */
- pc = ROM(pc) | 0x600 | A11;
- clk += 2;
- break;
- case 0xC5: /* SEL RB0 */
- bs = reg_pnt = 0;
- clk++;
- break;
- case 0xC6: /* JZ address */
- clk += 2;
- dat = ROM(pc);
- if (acc == 0)
- pc = (pc & 0xF00) | dat;
- else
- pc++;
- break;
- case 0xC7: /* MOV A,PSW */
- clk++;
- make_psw();
- acc = psw;
- break;
- case 0xC8: /* DEC Rr */
- intRAM[reg_pnt]--;
- clk++;
- break;
- case 0xC9: /* DEC Rr */
- intRAM[reg_pnt + 1]--;
- clk++;
- break;
- case 0xCA: /* DEC Rr */
- intRAM[reg_pnt + 2]--;
- clk++;
- break;
- case 0xCB: /* DEC Rr */
- intRAM[reg_pnt + 3]--;
- clk++;
- break;
- case 0xCC: /* DEC Rr */
- intRAM[reg_pnt + 4]--;
- clk++;
- break;
- case 0xCD: /* DEC Rr */
- intRAM[reg_pnt + 5]--;
- clk++;
- break;
- case 0xCE: /* DEC Rr */
- intRAM[reg_pnt + 6]--;
- clk++;
- break;
- case 0xCF: /* DEC Rr */
- intRAM[reg_pnt + 7]--;
- clk++;
- break;
- case 0xD0: /* XRL A,@Ri */
- acc = acc ^ intRAM[intRAM[reg_pnt] & 0x3F];
- clk++;
- break;
- case 0xD1: /* XRL A,@Ri */
- acc = acc ^ intRAM[intRAM[reg_pnt + 1] & 0x3F];
- clk++;
- break;
- case 0xD2: /* JBb address */
- clk += 2;
- dat = ROM(pc);
- if (acc & 0x40)
- pc = (pc & 0xF00) | dat;
- else
- pc++;
- break;
- case 0xD3: /* XRL A,#data */
- clk += 2;
- acc = acc ^ ROM(pc++);
- break;
- case 0xD4: /* CALL */
- make_psw();
- adr = ROM(pc) | 0x600 | A11;
- pc++;
- clk += 2;
- push(pc & 0xFF);
- push(((pc & 0xF00) >> 8) | (psw & 0xF0));
- pc = adr;
- break;
- case 0xD5: /* SEL RB1 */
- bs = 0x10;
- reg_pnt = 24;
- clk++;
- break;
- case 0xD6: /* ILL */
- illegal(op);
- clk++;
- break;
- case 0xD7: /* MOV PSW,A */
- psw = acc;
- clk++;
- cy = (psw & 0x80) >> 7;
- ac = psw & 0x40;
- f0 = psw & 0x20;
- bs = psw & 0x10;
- if (bs)
- reg_pnt = 24;
- else
- reg_pnt = 0;
- sp = (psw & 0x07) << 1;
- sp += 8;
- break;
- case 0xD8: /* XRL A,Rr */
- acc = acc ^ intRAM[reg_pnt];
- clk++;
- break;
- case 0xD9: /* XRL A,Rr */
- acc = acc ^ intRAM[reg_pnt + 1];
- clk++;
- break;
- case 0xDA: /* XRL A,Rr */
- acc = acc ^ intRAM[reg_pnt + 2];
- clk++;
- break;
- case 0xDB: /* XRL A,Rr */
- acc = acc ^ intRAM[reg_pnt + 3];
- clk++;
- break;
- case 0xDC: /* XRL A,Rr */
- acc = acc ^ intRAM[reg_pnt + 4];
- clk++;
- break;
- case 0xDD: /* XRL A,Rr */
- acc = acc ^ intRAM[reg_pnt + 5];
- clk++;
- break;
- case 0xDE: /* XRL A,Rr */
- acc = acc ^ intRAM[reg_pnt + 6];
- clk++;
- break;
- case 0xDF: /* XRL A,Rr */
- acc = acc ^ intRAM[reg_pnt + 7];
- clk++;
- break;
- case 0xE0: /* ILL */
- clk++;
- illegal(op);
- break;
- case 0xE1: /* ILL */
- clk++;
- illegal(op);
- break;
- case 0xE2: /* ILL */
- clk++;
- illegal(op);
- break;
- case 0xE3: /* MOVP3 A,@A */
-
- adr = 0x300 | acc;
- acc = ROM(adr);
- clk += 2;
- break;
- case 0xE4: /* JMP */
- pc = ROM(pc) | 0x700 | A11;
- clk += 2;
- break;
- case 0xE5: /* SEL MB0 */
- A11 = 0;
- A11ff = 0;
- clk++;
- break;
- case 0xE6: /* JNC address */
- clk += 2;
- dat = ROM(pc);
- if (!cy)
- pc = (pc & 0xF00) | dat;
- else
- pc++;
- break;
- case 0xE7: /* RL A */
- clk++;
- dat = acc & 0x80;
- acc = acc << 1;
- if (dat)
- acc = acc | 0x01;
- else
- acc = acc & 0xFE;
- break;
- case 0xE8: /* DJNZ Rr,address */
- clk += 2;
- intRAM[reg_pnt]--;
- dat = ROM(pc);
- if (intRAM[reg_pnt] != 0)
- {
- pc = pc & 0xF00;
- pc = pc | dat;
- }
- else
- pc++;
- break;
- case 0xE9: /* DJNZ Rr,address */
- clk += 2;
- intRAM[reg_pnt + 1]--;
- dat = ROM(pc);
- if (intRAM[reg_pnt + 1] != 0)
- {
- pc = pc & 0xF00;
- pc = pc | dat;
- }
- else
- pc++;
- break;
- case 0xEA: /* DJNZ Rr,address */
- clk += 2;
- intRAM[reg_pnt + 2]--;
- dat = ROM(pc);
- if (intRAM[reg_pnt + 2] != 0)
- {
- pc = pc & 0xF00;
- pc = pc | dat;
- }
- else
- pc++;
- break;
- case 0xEB: /* DJNZ Rr,address */
- clk += 2;
- intRAM[reg_pnt + 3]--;
- dat = ROM(pc);
- if (intRAM[reg_pnt + 3] != 0)
- {
- pc = pc & 0xF00;
- pc = pc | dat;
- }
- else
- pc++;
- break;
- case 0xEC: /* DJNZ Rr,address */
- clk += 2;
- intRAM[reg_pnt + 4]--;
- dat = ROM(pc);
- if (intRAM[reg_pnt + 4] != 0)
- {
- pc = pc & 0xF00;
- pc = pc | dat;
- }
- else
- pc++;
- break;
- case 0xED: /* DJNZ Rr,address */
- clk += 2;
- intRAM[reg_pnt + 5]--;
- dat = ROM(pc);
- if (intRAM[reg_pnt + 5] != 0)
- {
- pc = pc & 0xF00;
- pc = pc | dat;
- }
- else
- pc++;
- break;
- case 0xEE: /* DJNZ Rr,address */
- clk += 2;
- intRAM[reg_pnt + 6]--;
- dat = ROM(pc);
- if (intRAM[reg_pnt + 6] != 0)
- {
- pc = pc & 0xF00;
- pc = pc | dat;
- }
- else
- pc++;
- break;
- case 0xEF: /* DJNZ Rr,address */
- clk += 2;
- intRAM[reg_pnt + 7]--;
- dat = ROM(pc);
- if (intRAM[reg_pnt + 7] != 0)
- {
- pc = pc & 0xF00;
- pc = pc | dat;
- }
- else
- pc++;
- break;
- case 0xF0: /* MOV A,@Ri */
- clk++;
- acc = intRAM[intRAM[reg_pnt] & 0x3F];
- break;
- case 0xF1: /* MOV A,@Ri */
- clk++;
- acc = intRAM[intRAM[reg_pnt + 1] & 0x3F];
- break;
- case 0xF2: /* JBb address */
- clk += 2;
- dat = ROM(pc);
- if (acc & 0x80)
- pc = (pc & 0xF00) | dat;
- else
- pc++;
- break;
- case 0xF3: /* ILL */
- illegal(op);
- clk++;
- break;
- case 0xF4: /* CALL */
- clk += 2;
- make_psw();
- adr = ROM(pc) | 0x700 | A11;
- pc++;
- push(pc & 0xFF);
- push(((pc & 0xF00) >> 8) | (psw & 0xF0));
- pc = adr;
- break;
- case 0xF5: /* SEL MB1 */
- if (irq_ex)
- {
- A11ff = 0x800;
- }
- else
- {
- A11 = 0x800;
- A11ff = 0x800;
- }
- clk++;
- break;
- case 0xF6: /* JC address */
- clk += 2;
- dat = ROM(pc);
- if (cy)
- pc = (pc & 0xF00) | dat;
- else
- pc++;
- break;
- case 0xF7: /* RLC A */
- dat = cy;
- cy = (acc & 0x80) >> 7;
- acc = acc << 1;
- if (dat)
- acc = acc | 0x01;
- else
- acc = acc & 0xFE;
- clk++;
- break;
- case 0xF8: /* MOV A,Rr */
- clk++;
- acc = intRAM[reg_pnt];
- break;
- case 0xF9: /* MOV A,Rr */
- clk++;
- acc = intRAM[reg_pnt + 1];
- break;
- case 0xFA: /* MOV A,Rr */
- clk++;
- acc = intRAM[reg_pnt + 2];
- break;
- case 0xFB: /* MOV A,Rr */
- clk++;
- acc = intRAM[reg_pnt + 3];
- break;
- case 0xFC: /* MOV A,Rr */
- clk++;
- acc = intRAM[reg_pnt + 4];
- break;
- case 0xFD: /* MOV A,Rr */
- clk++;
- acc = intRAM[reg_pnt + 5];
- break;
- case 0xFE: /* MOV A,Rr */
- clk++;
- acc = intRAM[reg_pnt + 6];
- break;
- case 0xFF: /* MOV A,Rr */
- clk++;
- acc = intRAM[reg_pnt + 7];
- break;
- }
-
- master_clk += clk;
- h_clk += clk;
- clk_counter += clk;
-
- /* flag for JNI */
- if (int_clk > clk)
- int_clk -= clk;
- else
- int_clk = 0;
-
- /* pending IRQs */
- if (xirq_pend)
- ext_IRQ();
- if (tirq_pend)
- tim_IRQ();
-
- if (h_clk > LINECNT - 1)
- {
- h_clk -= LINECNT;
- if (enahirq && (VDCwrite[0xA0] & 0x01))
- ext_IRQ();
- if (count_on && mstate == 0)
- {
- itimer++;
- if (itimer == 0)
- {
- t_flag = 1;
- tim_IRQ();
- draw_region();
- }
- }
- }
-
- if (timer_on)
- {
- master_count += clk;
- if (master_count > 31)
- {
- master_count -= 31;
- itimer++;
- if (itimer == 0)
- {
- t_flag = 1;
- tim_IRQ();
- }
- }
- }
-
- if ((mstate == 0) && (master_clk > VBLCLK))
- handle_vbl();
-
- if ((mstate == 1) && (master_clk > evblclk))
- {
- handle_evbl();
- if (app_data.crc == 0xA7344D1F)
- handle_evbll(); /* Atlantis */
- break;
- }
- }
- return clk - startclk;
-}
diff --git a/waterbox/o2em/cpu.h b/waterbox/o2em/cpu.h
deleted file mode 100644
index 1082d0f46e..0000000000
--- a/waterbox/o2em/cpu.h
+++ /dev/null
@@ -1,63 +0,0 @@
-#ifndef CPU_H
-#define CPU_H
-
-#include "types.h"
-
-extern Byte acc; /* Accumulator */
-extern ADDRESS pc; /* Program counter */
-
-extern Byte itimer; /* Internal timer */
-extern Byte reg_pnt; /* pointer to register bank */
-extern Byte timer_on; /* 0=timer off/1=timer on */
-extern Byte count_on; /* 0=count off/1=count on */
-
-extern Byte t_flag; /* Timer flag */
-
-extern Byte psw; /* Processor status word */
-extern Byte sp; /* Stack pointer (part of psw) */
-
-extern Byte p1; /* I/O port 1 */
-extern Byte p2; /* I/O port 2 */
-
-extern Byte xirq_pend;
-extern Byte tirq_pend;
-
-void init_cpu(void);
-int64_t cpu_exec(int64_t ncycles);
-void ext_IRQ(void);
-void tim_IRQ(void);
-void make_psw_debug(void);
-
-Byte acc; /* Accumulator */
-ADDRESS pc; /* Program counter */
-
-Byte itimer; /* Internal timer */
-Byte reg_pnt; /* pointer to register bank */
-Byte timer_on; /* 0=timer off/1=timer on */
-Byte count_on; /* 0=count off/1=count on */
-Byte psw; /* Processor status word */
-Byte sp; /* Stack pointer (part of psw) */
-
-Byte p1; /* I/O port 1 */
-Byte p2; /* I/O port 2 */
-Byte xirq_pend; /* external IRQ pending */
-Byte tirq_pend; /* timer IRQ pending */
-Byte t_flag; /* Timer flag */
-
-ADDRESS lastpc;
-ADDRESS A11; /* PC bit 11 */
-ADDRESS A11ff;
-Byte bs; /* Register Bank (part of psw) */
-Byte f0; /* Flag Bit (part of psw) */
-Byte f1; /* Flag Bit 1 */
-Byte ac; /* Aux Carry (part of psw) */
-Byte cy; /* Carry flag (part of psw) */
-Byte xirq_en; /* external IRQ's enabled */
-Byte tirq_en; /* Timer IRQ enabled */
-Byte irq_ex; /* IRQ executing */
-
-int master_count;
-
-
-#endif /* CPU_H */
-
diff --git a/waterbox/o2em/crc32.c b/waterbox/o2em/crc32.c
deleted file mode 100644
index fc58b7d466..0000000000
--- a/waterbox/o2em/crc32.c
+++ /dev/null
@@ -1,97 +0,0 @@
-
-/*
- * O2EM Free Odyssey2 / Videopac+ Emulator
- *
- * Created by Daniel Boris (c) 1997,1998
- *
- * Developed by Andre de la Rocha
- * Arlindo M. de Oliveira
- *
- * http://o2em.sourceforge.net
- *
- *
- *
- * CRC32 functions used to identify files
- */
-
-// Some stuff ported from here:
-// http://www.opensource.apple.com/source/xnu/xnu-1504.7.4/bsd/libkern/crc32.c
-
-#include "crc32.h"
-
-static const uint32_t crc32tab[256] = {
- 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
- 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
- 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
- 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
- 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
- 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
- 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
- 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
- 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
- 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
- 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
- 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
- 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
- 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
- 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
- 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
- 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
- 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
- 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
- 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
- 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
- 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
- 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
- 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
- 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
- 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
- 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
- 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
- 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
- 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
- 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
- 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
- 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
- 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
- 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
- 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
- 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
- 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
- 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
- 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
- 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
- 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
- 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
- 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
- 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
- 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
- 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
- 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
- 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
- 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
- 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
- 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
- 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
- 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
- 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
- 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
- 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
- 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
- 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
- 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
- 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
- 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
- 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
- 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
-};
-
-uint32_t crc32_buf(const void *buf, size_t size)
-{
- uint32_t crc = ~0;
- const uint8_t *p = buf;
-
- while (size--)
- crc = (crc >> 8) ^ crc32tab[(crc ^ (*p++)) & 0xFF];
- return ~crc;
-}
diff --git a/waterbox/o2em/crc32.h b/waterbox/o2em/crc32.h
deleted file mode 100644
index f011a2fea4..0000000000
--- a/waterbox/o2em/crc32.h
+++ /dev/null
@@ -1,4 +0,0 @@
-#pragma once
-#include
-#include "types.h"
-uint32_t crc32_buf(const void *buf, size_t len);
diff --git a/waterbox/o2em/cset.c b/waterbox/o2em/cset.c
deleted file mode 100644
index 353e2fccb6..0000000000
--- a/waterbox/o2em/cset.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * O2EM Free Odyssey2 / Videopac+ Emulator
- *
- * Created by Daniel Boris (c) 1997,1998
- *
- * Developed by Andre de la Rocha
- * Arlindo M. de Oliveira
- *
- * http://o2em.sourceforge.net
- *
- *
- *
- * O2 character table
- */
-
-#include "types.h"
-#include "cset.h"
-
-const Byte cset[512] = {
- 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00,
- 0x18, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00,
- 0x3C, 0x66, 0x0C, 0x18, 0x30, 0x60, 0x7E, 0x00,
- 0x7C, 0xC6, 0x06, 0x3C, 0x06, 0xC6, 0x7C, 0x00,
- 0xCC, 0xCC, 0xCC, 0xFE, 0x0C, 0x0C, 0x0C, 0x00,
- 0xFE, 0xC0, 0xC0, 0x7C, 0x06, 0xC6, 0x7C, 0x00,
- 0x7C, 0xC6, 0xC0, 0xFC, 0xC6, 0xC6, 0x7C, 0x00,
- 0xFE, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x00,
- 0x7C, 0xC6, 0xC6, 0x7C, 0xC6, 0xC6, 0x7C, 0x00,
- 0x7C, 0xC6, 0xC6, 0x7E, 0x06, 0xC6, 0x7C, 0x00,
- 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00,
- 0x18, 0x7E, 0x58, 0x7E, 0x1A, 0x7E, 0x18, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x3C, 0x66, 0x0C, 0x18, 0x18, 0x00, 0x18, 0x00,
- 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFE, 0x00,
- 0xFC, 0xC6, 0xC6, 0xFC, 0xC0, 0xC0, 0xC0, 0x00,
- 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00,
- 0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0xEE, 0xC6, 0x00,
- 0xFE, 0xC0, 0xC0, 0xF8, 0xC0, 0xC0, 0xFE, 0x00,
- 0xFC, 0xC6, 0xC6, 0xFC, 0xD8, 0xCC, 0xC6, 0x00,
- 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
- 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00,
- 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00,
- 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00,
- 0x7C, 0xC6, 0xC6, 0xC6, 0xDE, 0xCC, 0x76, 0x00,
- 0x7C, 0xC6, 0xC0, 0x7C, 0x06, 0xC6, 0x7C, 0x00,
- 0xFC, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xFC, 0x00,
- 0xFE, 0xC0, 0xC0, 0xF8, 0xC0, 0xC0, 0xC0, 0x00,
- 0x7C, 0xC6, 0xC0, 0xC0, 0xCE, 0xC6, 0x7E, 0x00,
- 0xC6, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0x00,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0xC6, 0x7C, 0x00,
- 0xC6, 0xCC, 0xD8, 0xF0, 0xD8, 0xCC, 0xC6, 0x00,
- 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
- 0x7E, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x7E, 0x00,
- 0xC6, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0xC6, 0x00,
- 0x7C, 0xC6, 0xC0, 0xC0, 0xC0, 0xC6, 0x7C, 0x00,
- 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x6C, 0x38, 0x00,
- 0xFC, 0xC6, 0xC6, 0xFC, 0xC6, 0xC6, 0xFC, 0x00,
- 0xC6, 0xEE, 0xFE, 0xD6, 0xC6, 0xC6, 0xC6, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x00,
- 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x00, 0x00,
- 0x00, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x00, 0x00,
- 0x00, 0x00, 0x7C, 0x00, 0x7C, 0x00, 0x00, 0x00,
- 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x00,
- 0xC6, 0xE6, 0xF6, 0xFE, 0xDE, 0xCE, 0xC6, 0x00,
- 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x00,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
- 0xCE, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xCE, 0x00,
- 0x00, 0x00, 0x3C, 0x7E, 0x7E, 0x7E, 0x3C, 0x00,
- 0x1C, 0x1C, 0x18, 0x1E, 0x18, 0x18, 0x1C, 0x00,
- 0x1C, 0x1C, 0x18, 0x1E, 0x18, 0x34, 0x26, 0x00,
- 0x38, 0x38, 0x18, 0x78, 0x18, 0x2C, 0x64, 0x00,
- 0x38, 0x38, 0x18, 0x78, 0x18, 0x18, 0x38, 0x00,
- 0x00, 0x18, 0x0C, 0xFE, 0x0C, 0x18, 0x00, 0x00,
- 0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x18, 0x18, 0x00,
- 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, 0x00,
- 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFF, 0x00,
- 0x38, 0x38, 0x12, 0xFE, 0xB8, 0x28, 0x6C, 0x00,
- 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x00,
- 0x00, 0x00, 0x0C, 0x08, 0x08, 0xFF, 0x7E, 0x00,
- 0x00, 0x03, 0x63, 0xFF, 0xFF, 0x18, 0x08, 0x00,
- 0x00, 0x00, 0x00, 0x10, 0x38, 0xFF, 0x7E, 0x00,
- 0x00, 0x00, 0x00, 0x06, 0x6E, 0xFF, 0x7E, 0x00};
diff --git a/waterbox/o2em/cset.h b/waterbox/o2em/cset.h
deleted file mode 100644
index 1528ba8c32..0000000000
--- a/waterbox/o2em/cset.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef __CSET_H
-#define __CSET_H
-
-extern const Byte cset[512];
-
-#endif
diff --git a/waterbox/o2em/keyboard.c b/waterbox/o2em/keyboard.c
deleted file mode 100644
index 2fa54e067d..0000000000
--- a/waterbox/o2em/keyboard.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * O2EM Free Odyssey2 / Videopac+ Emulator
- *
- * Created by Daniel Boris (c) 1997,1998
- *
- * Developed by Andre de la Rocha
- * Arlindo M. de Oliveira
- *
- * http://o2em.sourceforge.net
- *
- *
- *
- * Keyboard emulation
- */
-
-#include
-#include
-#include
-#include "types.h"
-#include "cpu.h"
-#include "config.h"
-#include "vmachine.h"
-#include "vdc.h"
-#include "audio.h"
-#include "voice.h"
-#include "vpp.h"
-#include "keyboard.h"
-#include "score.h"
-
-void do_reset(void)
-{
- init_cpu();
- init_roms();
- init_vpp();
- clearscr();
-}
-
-void do_highscore(void)
-{
- set_score(app_data.scoretype, app_data.scoreaddress, app_data.default_highscore);
-}
diff --git a/waterbox/o2em/keyboard.h b/waterbox/o2em/keyboard.h
deleted file mode 100644
index b5cc55bb03..0000000000
--- a/waterbox/o2em/keyboard.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef __KEYBOARD_H
-#define __KEYBOARD_H
-
-void handle_key(void);
-
-#endif
-
diff --git a/waterbox/o2em/main.c b/waterbox/o2em/main.c
deleted file mode 100644
index ea8380987d..0000000000
--- a/waterbox/o2em/main.c
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- * O2EM Free Odyssey2 / Videopac+ Emulator
- *
- * Created by Daniel Boris (c) 1997,1998
- *
- * Developed by Andre de la Rocha
- * Arlindo M. de Oliveira
- *
- * http://o2em.sourceforge.net
- *
- */
-
-#include
-#include
-#include
-#include
-#include "crc32.h"
-#include "audio.h"
-#include "vmachine.h"
-#include "config.h"
-#include "vdc.h"
-#include "cpu.h"
-#include "keyboard.h"
-#include "voice.h"
-#include "score.h"
-
-#include "../emulibc/emulibc.h"
-#include "../emulibc/waterboxcore.h"
-
-char name_f, rom_f, c_j;
-char pathx, *k, identify;
-static int load_bios(const char *data, int size);
-static int load_cart(const char *data, int size);
-int parse_option(char *attr, char *val);
-
-ECL_EXPORT int Init(const char *rom, int romlen, const char *bios, int bioslen)
-{
- int i, cnt, cnt2;
-
- app_data.bank = 0;
- app_data.voice = 1;
- app_data.exrom = 0;
- app_data.three_k = 0;
- app_data.crc = 0;
- app_data.euro = 0;
- app_data.openb = 0;
- app_data.vpp = 0;
- app_data.bios = 0;
- app_data.scoretype = 0;
- app_data.scoreaddress = 0;
- app_data.default_highscore = 0;
- app_data.megaxrom = 0;
-
- init_audio();
-
- if (!load_bios(bios, bioslen))
- return 0;
-
- if (!load_cart(rom, romlen))
- return 0;
-
- //if (app_data.voice)
- //load_voice_samples(NULL);
- init_display();
- init_cpu();
- init_system();
- //set_score(app_data.scoretype, app_data.scoreaddress, app_data.default_highscore);
-
- //run();
- //if (app_data.scoretype != 0)
- //save_highscore(get_score(app_data.scoretype, app_data.scoreaddress),
- //scorefile);
-
- return 1;
-}
-
-ECL_EXPORT void FrameAdvance(FrameInfo* f)
-{
- cpu_exec(6026);
- f->Samples = 735;
- f->Width = 320;
- f->Height = 240;
- blit(f->VideoBuffer);
-}
-ECL_EXPORT void GetMemoryAreas(MemoryArea* m)
-{
- m[0].Data = intRAM;
- m[0].Name = "RAM";
- m[0].Size = 64;
- m[0].Flags = MEMORYAREA_FLAGS_WRITABLE | MEMORYAREA_FLAGS_PRIMARY | MEMORYAREA_FLAGS_WORDSIZE1;
-}
-
-ECL_EXPORT void SetInputCallback(void (*callback)(void))
-{
- // TODO
-}
-
-int parse_option(char *attr, char *val)
-{
- int control_scheme;
- if (!strcmp(attr, "nolimit"))
- {
- }
- else if (!strcmp(attr, "novoice"))
- {
- app_data.voice = !(val[0] != '0');
- }
- else if ((!strcmp(attr, "s1")) || (!strcmp(attr, "s2")))
- {
- }
- else if (!strcmp(attr, "fullscreen"))
- {
- }
- else if (!strcmp(attr, "euro"))
- {
- app_data.euro = (val[0] != '0');
- }
- else if (!strcmp(attr, "exrom"))
- {
- app_data.exrom = (val[0] != '0');
- }
- else if (!strcmp(attr, "3k"))
- {
- app_data.three_k = (val[0] != '0');
- }
- else if (!strcmp(attr, "g7400"))
- {
- }
- else if (!strcmp(attr, "scoreadr"))
- {
- control_scheme = -1;
- sscanf(val, "%d", &control_scheme);
- if ((control_scheme >= 0) && (control_scheme <= 255))
- app_data.scoreaddress = control_scheme;
- else
- {
- fprintf(stderr, "Invalid value for option %s\n", attr);
- return 0;
- }
- }
- else if (!strcmp(attr, "scoretype"))
- {
- control_scheme = -1;
- sscanf(val, "%d", &control_scheme);
- if ((control_scheme >= 0) && (control_scheme <= 9999))
- app_data.scoretype = control_scheme;
- else
- {
- fprintf(stderr, "Invalid value for option %s\n", attr);
- return 0;
- }
- }
- else if (!strcmp(attr, "score"))
- {
- control_scheme = -1;
- sscanf(val, "%d", &control_scheme);
- if ((control_scheme >= 0) && (control_scheme <= 999999))
- app_data.default_highscore = control_scheme;
- else
- {
- fprintf(stderr, "Invalid value for option %s\n", attr);
- return 0;
- }
- }
- return 1;
-}
-
-static int load_bios(const char *data, int size)
-{
- if (size != 1024)
- return 0;
-
- for (int i = 0; i < 8; i++)
- {
- memcpy(rom_table[i], data, 1024);
- }
- uint32_t crc = crc32_buf(rom_table[0], 1024);
- if (crc == 0x8016A315)
- {
- printf("Odyssey2 bios ROM loaded\n");
- app_data.vpp = 0;
- app_data.bios = ROM_O2;
- }
- else if (crc == 0xE20A9F41)
- {
- printf("Videopac+ G7400 bios ROM loaded\n");
- app_data.vpp = 1;
- app_data.bios = ROM_G7400;
- }
- else if (crc == 0xA318E8D6)
- {
- printf("C52 bios ROM loaded\n");
- app_data.vpp = 0;
- app_data.bios = ROM_C52;
- }
- else if (crc == 0x11647CA5)
- {
- printf("Jopac bios ROM loaded\n");
- app_data.vpp = 1;
- app_data.bios = ROM_JOPAC;
- }
- else
- {
- printf("Bios ROM loaded (unknown version)\n");
- app_data.vpp = 0;
- app_data.bios = ROM_UNKNOWN;
- return 0;
- }
- return 1;
-}
-
-static int load_cart(const char *data, int size)
-{
- app_data.crc = crc32_buf(data, size);
- if (app_data.crc == 0xAFB23F89)
- app_data.exrom = 1; /* Musician */
- if (app_data.crc == 0x3BFEF56B)
- app_data.exrom = 1; /* Four in 1 Row! */
- if (app_data.crc == 0x9B5E9356)
- app_data.exrom = 1; /* Four in 1 Row! (french) */
-
- if (app_data.crc == 0x975AB8DA || app_data.crc == 0xE246A812)
- {
- fprintf(stderr, "Error: file is an incomplete ROM dump\n");
- return 0;
- }
-
- if (size & 1023)
- {
- fprintf(stderr, "Error: file is an invalid ROM dump\n");
- return 0;
- }
-
- const int l = size;
- int nb, i;
-
- /* special MegaCART design by Soeren Gust */
- if ((l == 32768) || (l == 65536) || (l == 131072) || (l == 262144) || (l == 524288) || (l == 1048576))
- {
- app_data.megaxrom = 1;
- app_data.bank = 1;
- megarom = malloc(1048576);
- memcpy(megarom, data, size);
-
- /* mirror shorter files into full megabyte */
- if (l < 65536)
- memcpy(megarom + 32768, megarom, 32768);
- if (l < 131072)
- memcpy(megarom + 65536, megarom, 65536);
- if (l < 262144)
- memcpy(megarom + 131072, megarom, 131072);
- if (l < 524288)
- memcpy(megarom + 262144, megarom, 262144);
- if (l < 1048576)
- memcpy(megarom + 524288, megarom, 524288);
- /* start in bank 0xff */
- memcpy(&rom_table[0][1024], megarom + 4096 * 255 + 1024, 3072);
- printf("MegaCart %ldK", l / 1024);
- nb = 1;
- }
- else if (((l % 3072) == 0))
- {
- app_data.three_k = 1;
- nb = l / 3072;
-
- for (int offset = 0, i = nb - 1; i >= 0; i--, offset += 3072)
- {
- memcpy(&rom_table[i][1024], data + offset, 3072);
- }
- printf("%dK", nb * 3);
- }
- else
- {
- nb = l / 2048;
- if ((nb == 2) && (app_data.exrom))
- {
- memcpy(&extROM[0], data, 1024);
- memcpy(&rom_table[0][1024], data + 1024, 3072);
- printf("3K EXROM");
- }
- else
- {
- for (int offset = 0, i = nb - 1; i >= 0; i--, offset += 2048)
- {
- memcpy(&rom_table[i][1024], data + offset, 2048);
- memcpy(&rom_table[i][3072], &rom_table[i][2048], 1024); /* simulate missing A10 */
- }
- printf("%dK", nb * 2);
- }
- }
-
- rom = rom_table[0];
- if (nb == 1)
- app_data.bank = 1;
- else if (nb == 2)
- app_data.bank = app_data.exrom ? 1 : 2;
- else if (nb == 4)
- app_data.bank = 3;
- else
- app_data.bank = 4;
-
- if ((rom_table[nb - 1][1024 + 12] == 'O') && (rom_table[nb - 1][1024 + 13] == 'P') && (rom_table[nb - 1][1024 + 14] == 'N') && (rom_table[nb - 1][1024 + 15] == 'B'))
- app_data.openb = 1;
-
- printf(" CRC: %08lX\n", app_data.crc);
- return 1;
-}
-
-int main(void)
-{
- return 0;
-}
diff --git a/waterbox/o2em/score.c b/waterbox/o2em/score.c
deleted file mode 100644
index 883b812375..0000000000
--- a/waterbox/o2em/score.c
+++ /dev/null
@@ -1,143 +0,0 @@
-
-/*
- * O2EM Free Odyssey2 / Videopac+ Emulator
- *
- * Created by Daniel Boris (c) 1997,1998
- *
- * Developed by Andre de la Rocha
- *
- * http://o2em.sourceforge.net
- *
- *
- *
- * Score loading/saving by manopac
- */
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include "vmachine.h"
-#include "types.h"
-#include "score.h"
-
-/*--------------------------------------------------
- Calculate Score from given Values
- Scoretype = abcd:
- ramtype a = 1: ext ram / 2: int ram
- valuetype b = 1: 1 Byte each Digit / 2: 1/2 Byte each Digit
- direct�on c = 1: higher value digits first / 2: low value digits first
- count d = number of digits
- --------------------------------------------------*/
-int get_score(int scoretype, int scoreaddress)
-{
- int score=0;
-
- if (scoretype!=0)
- {
- int position;
- int i;
- Byte *RAM;
-
- int count = scoretype%10;
- int direction = ((scoretype/10)%10)==1?1:-1;
- float valuetype = (float) (3-((scoretype/100)%10))/2;
- int ramtype = scoretype/1000;
-
- position = scoreaddress+ (direction==1?0:(count*valuetype-1));
- RAM = ramtype==1?extRAM:intRAM;
-
- for(i=0;i>(((i+1)%2)*4)*(abs((int) ((valuetype-1)*2))))&15);
- }
- }
-
- return(score);
-}
-
-/*--------------------------------------------------
- Set HighScore into Memory
- Scoretype = abcd:
- ramtype a = 1: ext ram / 2: int ram
- valuetype b = 1: 1 Byte each Digit / 2: 1/2 Byte each Digit
- direct�on c = 1: higher value digits first / 2: low value digits first
- count d = number of digits
- --------------------------------------------------*/
-
-void set_score(int scoretype, int scoreaddress, int score)
-{
-
- if (scoretype!=0 && score>0)
- {
- int position;
- int i;
- Byte *RAM;
- int digit;
-
- int count = scoretype%10;
- int direction = ((scoretype/10)%10)==1?-1:1;
- float valuetype = (float) (3-((scoretype/100)%10))/2;
- int ramtype = scoretype/1000;
-
- position = scoreaddress+ (direction==1?0:(count*valuetype-1));
- RAM = ramtype==1?extRAM:intRAM;
-
- for(i=count-1;i>=0;i--)
- {
- digit = score / power(10,i);
- RAM[position+(int)(valuetype*i*direction)]=((valuetype==0.5)&&(i%2==0))?(RAM[position+(int)(valuetype*i*direction)]<<4)+digit:digit;
- score = score - digit*power(10,i);
- }
- }
-}
-
-
-
-/*-----------------------------------------------------
- Save Highscore to File
--------------------------------------------------------*/
-void save_highscore(int highscore,char *scorefile)
-{
- FILE *fn;
-
- highscore = highscore==app_data.default_highscore?0:highscore;
-
- fn = fopen(scorefile,"w");
- if (fn==NULL) {
- fprintf(stderr,"Error opening highscore-file %s: %i\n",scorefile,errno);
- exit(EXIT_FAILURE);
- }
-
- if (fprintf(fn,"%i",highscore)<=0)
- {
- fprintf(stderr,"Error writing to highscore-file %s: %i\n",scorefile,errno);
- exit(EXIT_FAILURE);
- }
-
- fclose(fn);
-}
-
-
-/***********************************
- Integer-Implementation of pow
- ***********************************/
-int power(int base, int higher)
-{
- if (higher==0) {
- return(1);
- } else if (higher==1) {
- return(base);
- } else {
- int i;
- int value=base;
-
- for (i=2;i<=higher;i++)
- {
- value = value*base;
- }
- return(value);
- }
-}
diff --git a/waterbox/o2em/score.h b/waterbox/o2em/score.h
deleted file mode 100644
index 0868801ea0..0000000000
--- a/waterbox/o2em/score.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef __SCORE_H
-#define __SCORE_H
-
-int get_score(int scoretype, int scoreaddress);
-void set_score(int scoretype, int scoreaddress, int highscore);
-void save_highscore(int highscore,char *scorefile);
-int power(int base, int higher);
-
-#endif
-
diff --git a/waterbox/o2em/types.h b/waterbox/o2em/types.h
deleted file mode 100644
index 1201c1bc0f..0000000000
--- a/waterbox/o2em/types.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#pragma once
-
-#include
-
-typedef uint8_t Byte;
-typedef uint16_t ADDRESS;
-#define MAXC 1024
diff --git a/waterbox/o2em/vdc.c b/waterbox/o2em/vdc.c
deleted file mode 100644
index 97a275db75..0000000000
--- a/waterbox/o2em/vdc.c
+++ /dev/null
@@ -1,556 +0,0 @@
-/*
- * O2EM Free Odyssey2 / Videopac+ Emulator
- *
- * Created by Daniel Boris (c) 1997,1998
- *
- * Developed by Andre de la Rocha
- * Arlindo M. de Oliveira
- *
- * http://o2em.sourceforge.net
- *
- *
- *
- * O2 Video Display Controller emulation
- */
-
-#include
-#include
-#include
-#include "types.h"
-#include "vmachine.h"
-#include "config.h"
-#include "keyboard.h"
-#include "cset.h"
-#include "cpu.h"
-#include "vpp.h"
-#include "vdc.h"
-#include "audio.h"
-#include "voice.h"
-#include "bitmap.h"
-
-#define COL_SP0 0x01
-#define COL_SP1 0x02
-#define COL_SP2 0x04
-#define COL_SP3 0x08
-#define COL_VGRID 0x10
-#define COL_HGRID 0x20
-#define COL_VPP 0x40
-#define COL_CHAR 0x80
-
-#define X_START 8
-#define Y_START 24
-
-static const uint32_t colortable[2][16] = {
- /* O2 palette */
- {0x000000, 0x0e3dd4, 0x00981b, 0x00bbd9, 0xc70008, 0xcc16b3, 0x9d8710,
- 0xe1dee1, 0x5f6e6b, 0x6aa1ff, 0x3df07a, 0x31ffff, 0xff4255, 0xff98ff,
- 0xd9ad5d, 0xffffff},
- /* VP+ G7400 palette */
- {0x000000, 0x0000b6, 0x00b600, 0x00b6b6, 0xb60000, 0xb600b6, 0xb6b600,
- 0xb6b6b6, 0x494949, 0x4949ff, 0x49ff49, 0x49ffff, 0xff4949, 0xff49ff,
- 0xffff49, 0xffffff}};
-
-static Bitmap* bitmap;
-
-/* Collision buffer */
-static Byte *col = NULL;
-
-/* The pointer to the graphics buffer */
-static Byte *vscreen = NULL;
-
-static int cached_lines[MAXLINES];
-
-Byte coltab[256];
-
-long clip_low;
-long clip_high;
-
-int wsize;
-
-static void create_cmap(void);
-static void draw_char(Byte ypos, Byte xpos, Byte chr, Byte col);
-static void draw_quad(Byte ypos, Byte xpos, Byte cp0l, Byte cp0h, Byte cp1l,
- Byte cp1h, Byte cp2l, Byte cp2h, Byte cp3l, Byte cp3h);
-static void draw_grid(void);
-void mputvid(unsigned int ad, unsigned int len, Byte d, Byte c);
-
-void draw_region(void)
-{
- int i;
- if (regionoff == 0xffff)
- {
- i = (master_clk / (LINECNT - 1) - 5);
- }
- else
- {
- i = (master_clk / 22 + regionoff);
- }
- i = (snapline(i, VDCwrite[0xA0], 0));
- if (app_data.crc == 0xA7344D1F)
- {
- i = (master_clk / 22 + regionoff) + 6;
- i = (snapline(i, VDCwrite[0xA0], 0) + 6);
- } /*Atlantis*/
-
- if (app_data.crc == 0xD0BC4EE6)
- {
- i = (master_clk / 24 + regionoff) - 6;
- i = (snapline(i, VDCwrite[0xA0], 0) + 7);
- } /*Frogger*/
-
- if (app_data.crc == 0x26517E77)
- {
- i = (master_clk / 22 + regionoff);
- i = (snapline(i, VDCwrite[0xA0], 0) - 5);
- } /*Comando Noturno*/
-
- if (app_data.crc == 0xA57E1724)
- {
- i = (master_clk / (LINECNT - 1) - 5);
- i = (snapline(i, VDCwrite[0xA0], 0) - 3);
- } /*Catch the ball*/
-
- if (i < 0)
- i = 0;
- clip_low = last_line * (long)BMPW;
- clip_high = i * (long)BMPW;
- if (clip_high > BMPW * BMPH)
- clip_high = BMPW * BMPH;
- if (clip_low < 0)
- clip_low = 0;
- if (clip_low < clip_high)
- draw_display();
- last_line = i;
-}
-
-static uint32_t colors[256];
-
-static void create_cmap(void)
-{
- int i;
-
- /* Initialise parts of the colors array */
- for (i = 0; i < 16; i++)
- {
- /* Use the color values from the color table */
- colors[i] = colortable[app_data.vpp ? 1 : 0][i];
- colors[i + 32] = colors[i];
- }
-
- for (i = 16; i < 32; i++)
- colors[i] = 0;
- for (i = 48; i < 256; i++)
- colors[i] = 0;
-}
-
-void clearscr(void)
-{
- clear(bitmap);
-}
-
-void mputvid(unsigned int ad, unsigned int len, Byte d, Byte c)
-{
- if ((ad > (unsigned long)clip_low) && (ad < (unsigned long)clip_high))
- {
- unsigned int i;
- if (((len & 3) == 0) && (sizeof(unsigned long) == 4))
- {
- unsigned long dddd = (((unsigned long)d) & 0xff) | ((((unsigned long)d) & 0xff) << 8) | ((((unsigned long)d) & 0xff) << 16) | ((((unsigned long)d) & 0xff) << 24);
- unsigned long cccc = (((unsigned long)c) & 0xff) | ((((unsigned long)c) & 0xff) << 8) | ((((unsigned long)c) & 0xff) << 16) | ((((unsigned long)c) & 0xff) << 24);
- for (i = 0; i> 2; i++)
- {
- *((unsigned long *)(vscreen + ad)) = dddd;
- cccc |= *((unsigned long *)(col + ad));
- *((unsigned long *)(col + ad)) = cccc;
- coltab[c] |= ((cccc | (cccc >> 8) | (cccc >> 16) | (cccc >> 24)) & 0xff);
- ad += 4;
- }
- }
- else
- {
- for (i = 0; i < len; i++)
- {
- vscreen[ad] = d;
- col[ad] |= c;
- coltab[c] |= col[ad++];
- }
- }
- }
-}
-
-static void draw_grid(void)
-{
- unsigned int pnt, pn1;
- Byte mask, d;
- int j, i, x, w;
- Byte color;
-
- if (VDCwrite[0xA0] & 0x40)
- {
- for (j = 0; j < 9; j++)
- {
- pnt = (((j * 24) + 24) * BMPW);
- for (i = 0; i < 9; i++)
- {
- pn1 = pnt + (i * 32) + 20;
- color = ColorVector[j * 24 + 24];
- mputvid(
- pn1,
- 4,
- (color & 0x07) | ((color & 0x40) >> 3) | (color & 0x80 ? 0 : 8), COL_HGRID);
- color = ColorVector[j * 24 + 25];
- mputvid(
- pn1 + BMPW,
- 4,
- (color & 0x07) | ((color & 0x40) >> 3) | (color & 0x80 ? 0 : 8), COL_HGRID);
- color = ColorVector[j * 24 + 26];
- mputvid(
- pn1 + BMPW * 2,
- 4,
- (color & 0x07) | ((color & 0x40) >> 3) | (color & 0x80 ? 0 : 8), COL_HGRID);
- }
- }
- }
-
- mask = 0x01;
- for (j = 0; j < 9; j++)
- {
- pnt = (((j * 24) + 24) * BMPW);
- for (i = 0; i < 9; i++)
- {
- pn1 = pnt + (i * 32) + 20;
- if ((pn1 + BMPW * 3 >= (unsigned long)clip_low) && (pn1 <= (unsigned long)clip_high))
- {
- d = VDCwrite[0xC0 + i];
- if (j == 8)
- {
- d = VDCwrite[0xD0 + i];
- mask = 1;
- }
- if (d & mask)
- {
- color = ColorVector[j * 24 + 24];
- mputvid(
- pn1,
- 36,
- (color & 0x07) | ((color & 0x40) >> 3) | (color & 0x80 ? 0 : 8), COL_HGRID);
- color = ColorVector[j * 24 + 25];
- mputvid(
- pn1 + BMPW,
- 36,
- (color & 0x07) | ((color & 0x40) >> 3) | (color & 0x80 ? 0 : 8), COL_HGRID);
- color = ColorVector[j * 24 + 26];
- mputvid(
- pn1 + BMPW * 2,
- 36,
- (color & 0x07) | ((color & 0x40) >> 3) | (color & 0x80 ? 0 : 8), COL_HGRID);
- }
- }
- }
- mask = mask << 1;
- }
-
- mask = 0x01;
- w = 4;
- if (VDCwrite[0xA0] & 0x80)
- {
- w = 32;
- }
- for (j = 0; j < 10; j++)
- {
- pnt = (j * 32);
- mask = 0x01;
- d = VDCwrite[0xE0 + j];
- for (x = 0; x < 8; x++)
- {
- pn1 = pnt + (((x * 24) + 24) * BMPW) + 20;
- if (d & mask)
- {
- for (i = 0; i < 24; i++)
- {
- if ((pn1 >= (unsigned long)clip_low) && (pn1 <= (unsigned long)clip_high))
- {
- color = ColorVector[x * 24 + 24 + i];
- mputvid(
- pn1,
- w,
- (color & 0x07) | ((color & 0x40) >> 3) | (color & 0x80 ? 0 : 8), COL_VGRID);
- }
- pn1 += BMPW;
- }
- }
- mask = mask << 1;
- }
- }
-}
-
-void finish_display(void)
-{
- vpp_finish_bmp(vscreen, 9, 5, BMPW - 9, BMPH - 5, bitmap->w, bitmap->h);
-}
-
-void blit(uint32_t* dst)
-{
- uint8_t* src = vscreen;
- src += 5 * BMPW;
- src += 9;
- for (int j = 0; j < 240; j++)
- {
- for (int i = 0; i < 320; i++)
- {
- *dst++ = colors[*src++];
- }
- src += 20;
- }
-}
-
-void clear_collision(void)
-{
- load_colplus(col);
- coltab[0x01] = coltab[0x02] = 0;
- coltab[0x04] = coltab[0x08] = 0;
- coltab[0x10] = coltab[0x20] = 0;
- coltab[0x40] = coltab[0x80] = 0;
-}
-
-void draw_display(void)
-{
- int i, j, x, sm, t;
- Byte y, b, d1, cl, c;
-
- unsigned int pnt, pnt2;
-
- for (i = clip_low / BMPW; i < clip_high / BMPW; i++)
- memset(
- vscreen + i * BMPW,
- ((ColorVector[i] & 0x38) >> 3) | (ColorVector[i] & 0x80 ? 0 : 8), BMPW);
-
- if (VDCwrite[0xA0] & 0x08)
- draw_grid();
-
- if (useforen && (!(VDCwrite[0xA0] & 0x20)))
- return;
-
- for (i = 0x10; i < 0x40; i += 4)
- draw_char(VDCwrite[i], VDCwrite[i + 1], VDCwrite[i + 2],
- VDCwrite[i + 3]);
-
- /* draw quads, position mapping happens in ext_write (vmachine.c)*/
- for (i = 0x40; i < 0x80; i += 0x10)
- draw_quad(VDCwrite[i], VDCwrite[i + 1], VDCwrite[i + 2],
- VDCwrite[i + 3], VDCwrite[i + 6], VDCwrite[i + 7],
- VDCwrite[i + 10], VDCwrite[i + 11], VDCwrite[i + 14],
- VDCwrite[i + 15]);
-
- c = 8;
- for (i = 12; i >= 0; i -= 4)
- {
- pnt2 = 0x80 + (i * 2);
- y = VDCwrite[i];
- x = VDCwrite[i + 1] - 8;
- t = VDCwrite[i + 2];
- cl = ((t & 0x38) >> 3);
- cl = ((cl & 2) | ((cl & 1) << 2) | ((cl & 4) >> 2)) + 8;
- /*174*/
- if ((x < 164) && (y > 0) && (y < 232))
- {
- pnt = y * BMPW + (x * 2) + 20 + sproff;
- if (t & 4)
- {
- if ((pnt + BMPW * 32 >= (unsigned long)clip_low) && (pnt <= (unsigned long)clip_high))
- {
- for (j = 0; j < 8; j++)
- {
- sm = (((j % 2 == 0) && (((t >> 1) & 1) != (t & 1))) || ((j % 2 == 1) && (t & 1))) ? 1 : 0;
- d1 = VDCwrite[pnt2++];
- for (b = 0; b < 8; b++)
- {
- if (d1 & 0x01)
- {
- if ((x + b + sm < 159) && (y + j < 247))
- {
- mputvid(sm + pnt, 4, cl, c);
- mputvid(sm + pnt + BMPW, 4, cl, c);
- mputvid(sm + pnt + 2 * BMPW, 4, cl, c);
- mputvid(sm + pnt + 3 * BMPW, 4, cl, c);
- }
- }
- pnt += 4;
- d1 = d1 >> 1;
- }
- pnt += BMPW * 4 - 32;
- }
- }
- }
- else
- {
- if ((pnt + BMPW * 16 >= (unsigned long)clip_low) && (pnt <= (unsigned long)clip_high))
- {
- for (j = 0; j < 8; j++)
- {
- sm = (((j % 2 == 0) && (((t >> 1) & 1) != (t & 1))) || ((j % 2 == 1) && (t & 1))) ? 1 : 0;
- d1 = VDCwrite[pnt2++];
- for (b = 0; b < 8; b++)
- {
- if (d1 & 0x01)
- {
- if ((x + b + sm < 160) && (y + j < 249))
- {
- mputvid(sm + pnt, 2, cl, c);
- mputvid(sm + pnt + BMPW, 2, cl, c);
- }
- }
- pnt += 2;
- d1 = d1 >> 1;
- }
- pnt += BMPW * 2 - 16;
- }
- }
- }
- }
- c = c >> 1;
- }
-}
-
-void draw_char(Byte ypos, Byte xpos, Byte chr, Byte col)
-{
- int j, c;
- Byte cl, d1;
- int y, b, n;
- unsigned int pnt;
-
- y = (ypos & 0xFE);
- pnt = y * BMPW + ((xpos - 8) * 2) + 20;
-
- ypos = ypos >> 1;
- n = 8 - (ypos % 8) - (chr % 8);
- if (n < 3)
- n = n + 7;
-
- if ((pnt + BMPW * 2 * n >= (unsigned long)clip_low) && (pnt <= (unsigned long)clip_high))
- {
-
- c = (int)chr + ypos;
- if (col & 0x01)
- c += 256;
- if (c > 511)
- c = c - 512;
-
- cl = ((col & 0x0E) >> 1);
- cl = ((cl & 2) | ((cl & 1) << 2) | ((cl & 4) >> 2)) + 8;
-
- if ((y > 0) && (y < 232) && (xpos < 157))
- {
- for (j = 0; j < n; j++)
- {
- d1 = cset[c + j];
- for (b = 0; b < 8; b++)
- {
- if (d1 & 0x80)
- {
- if ((xpos - 8 + b < 160) && (y + j < 240))
- {
- mputvid(pnt, 2, cl, COL_CHAR);
- mputvid(pnt + BMPW, 2, cl, COL_CHAR);
- }
- }
- pnt += 2;
- d1 = d1 << 1;
- }
- pnt += BMPW * 2 - 16;
- }
- }
- }
-}
-
-/* This quad drawing routine can display the quad cut off effect used in KTAA.
- * It needs more testing with other games, especially the clipping.
- * This code is quite slow and needs a rewrite by somebody with more experience
- * than I (sgust) have */
-
-void draw_quad(Byte ypos, Byte xpos, Byte cp0l, Byte cp0h, Byte cp1l, Byte cp1h,
- Byte cp2l, Byte cp2h, Byte cp3l, Byte cp3h)
-{
- /* char set pointers */
- int chp[4];
- /* colors */
- Byte col[4];
- /* pointer into screen bitmap */
- unsigned int pnt;
- /* offset into current line */
- unsigned int off;
- /* loop variables */
- int i, j, lines;
-
- /* get screen bitmap position of quad */
- pnt = (ypos & 0xfe) * BMPW + ((xpos - 8) * 2) + 20;
- /* abort drawing if completely below the bottom clip */
- if (pnt > (unsigned long)clip_high)
- return;
- /* extract and convert char-set offsets */
- chp[0] = cp0l | ((cp0h & 1) << 8);
- chp[1] = cp1l | ((cp1h & 1) << 8);
- chp[2] = cp2l | ((cp2h & 1) << 8);
- chp[3] = cp3l | ((cp3h & 1) << 8);
- for (i = 0; i < 4; i++)
- chp[i] = (chp[i] + (ypos >> 1)) & 0x1ff;
- lines = 8 - (chp[3] + 1) % 8;
- /* abort drawing if completely over the top clip */
- if (pnt + BMPW * 2 * lines < (unsigned long)clip_low)
- return;
- /* extract and convert color information */
- col[0] = (cp0h & 0xe) >> 1;
- col[1] = (cp1h & 0xe) >> 1;
- col[2] = (cp2h & 0xe) >> 1;
- col[3] = (cp3h & 0xe) >> 1;
- for (i = 0; i < 4; i++)
- col[i] = ((col[i] & 2) | ((col[i] & 1) << 2) | ((col[i] & 4) >> 2)) + 8;
- /* now draw the quad line by line controlled by the last quad */
- while (lines-- > 0)
- {
- off = 0;
- /* draw all 4 sub-quads */
- for (i = 0; i < 4; i++)
- {
- /* draw sub-quad pixel by pixel, but stay in same line */
- for (j = 0; j < 8; j++)
- {
- if ((cset[chp[i]] & (1 << (7 - j))) && (off < BMPW))
- {
- mputvid(pnt + off, 2, col[i], COL_CHAR);
- mputvid(pnt + off + BMPW, 2, col[i], COL_CHAR);
- }
- /* next pixel */
- off += 2;
- }
- /* space between sub-quads */
- off += 16;
- }
- /* advance char-set pointers */
- for (i = 0; i < 4; i++)
- chp[i] = (chp[i] + 1) & 0x1ff;
- /* advance screen bitmap pointer */
- pnt += BMPW * 2;
- }
-}
-
-void init_display(void)
-{
- create_cmap();
- bitmap = NewBitmap(BMPW, BMPH);
- if (!bitmap)
- {
- fprintf(stderr, "Could not allocate memory for screen buffer.\n");
- exit(EXIT_FAILURE);
- }
- vscreen = (Byte *)bitmap->dat;
- clear(bitmap);
- col = (Byte *)malloc(BMPW * BMPH);
- if (!col)
- {
- fprintf(stderr, "Could not allocate memory for collision buffer.\n");
- free(vscreen);
- exit(EXIT_FAILURE);
- }
- memset(col, 0, BMPW * BMPH);
-}
diff --git a/waterbox/o2em/vdc.h b/waterbox/o2em/vdc.h
deleted file mode 100644
index 5689b94953..0000000000
--- a/waterbox/o2em/vdc.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef __VDC_H
-#define __VDC_H
-
-#define BMPW 340
-#define BMPH 250
-#define WNDW 320
-#define WNDH 240
-
-#define BOX_W MIN(512, SCREEN_W-16)
-#define BOX_H MIN(256, (SCREEN_H-64)&0xFFF0)
-
-#define BOX_L ((SCREEN_W - BOX_W) / 2)
-#define BOX_R ((SCREEN_W + BOX_W) / 2)
-#define BOX_T ((SCREEN_H - BOX_H) / 2)
-#define BOX_B ((SCREEN_H + BOX_H) / 2)
-
-extern Byte coltab[];
-extern long clip_low;
-extern long clip_high;
-
-void init_display(void);
-void draw_display(void);
-void draw_region(void);
-void finish_display();
-void clear_collision(void);
-void clearscr(void);
-
-void blit(uint32_t* dst);
-#endif
diff --git a/waterbox/o2em/vmachine.c b/waterbox/o2em/vmachine.c
deleted file mode 100644
index e1fe648466..0000000000
--- a/waterbox/o2em/vmachine.c
+++ /dev/null
@@ -1,746 +0,0 @@
-/*
- * O2EM Free Odyssey2 / Videopac+ Emulator
- *
- * Created by Daniel Boris (c) 1997,1998
- *
- * Developed by Andre de la Rocha
- * Arlindo M. de Oliveira
- *
- * http://o2em.sourceforge.net
- *
- *
- *
- * Main O2 machine emulation
- */
-
-#include
-#include
-#include
-#include "audio.h"
-#include "types.h"
-#include "cpu.h"
-#include "keyboard.h"
-#include "config.h"
-#include "vdc.h"
-#include "vpp.h"
-#include "voice.h"
-#include "vmachine.h"
-
-static Byte x_latch, y_latch;
-static int romlatch = 0;
-static Byte line_count;
-static int fps = FPS_NTSC;
-
-static Byte snapedlines[MAXLINES + 2 * MAXSNAP][256][2];
-
-int evblclk = EVBLCLK_NTSC;
-
-struct resource app_data;
-int frame = 0;
-
-int int_clk; /* counter for length of /INT pulses */
-int master_clk; /* Master clock */
-int h_clk; /* horizontal clock */
-unsigned long clk_counter;
-int last_line;
-int key2vcnt = 0;
-int mstate;
-
-int pendirq = 0;
-int enahirq = 1;
-int useforen = 0;
-long regionoff = 0xffff;
-int mxsnap = 2;
-int sproff = 0;
-int tweakedaudio = 0;
-
-Byte rom_table[8][4096];
-
-Byte intRAM[64];
-Byte extRAM[256];
-Byte extROM[1024];
-Byte VDCwrite[256];
-Byte ColorVector[MAXLINES];
-Byte AudioVector[MAXLINES];
-Byte *rom;
-Byte *megarom;
-
-int key2[128];
-
-static void do_kluges(void);
-static void setvideomode(int t);
-
-void handle_vbl(void)
-{
- update_audio();
- update_voice();
- draw_region();
- ext_IRQ();
- mstate = 1;
-}
-
-void handle_evbl(void)
-{
- static long last = 0;
- int i;
-
- last_line = 0;
- master_clk -= evblclk;
- frame++;
- finish_display();
-
- if (app_data.crc == 0xA7344D1F)
- {
- for (i = 0; i < 140; i++)
- {
- ColorVector[i] = (VDCwrite[0xA3] & 0x7f) | (p1 & 0x80);
- AudioVector[i] = VDCwrite[0xAA];
- }
- } /*Atlantis*/
- else
- {
- for (i = 0; i < MAXLINES; i++)
- {
- ColorVector[i] = (VDCwrite[0xA3] & 0x7f) | (p1 & 0x80);
- AudioVector[i] = VDCwrite[0xAA];
- }
- }
- if (key2vcnt++ > 10)
- {
- key2vcnt = 0;
- for (i = 0; i < 128; i++)
- key2[i] = 0;
- }
- mstate = 0;
-}
-
-void handle_evbll(void)
-{
- static long last = 0;
- int i;
-
- /******************* 150 */
-
- for (i = 150; i < MAXLINES; i++)
- {
- ColorVector[i] = (VDCwrite[0xA3] & 0x7f) | (p1 & 0x80);
- AudioVector[i] = VDCwrite[0xAA];
- }
-
- if (key2vcnt++ > 10)
- {
- key2vcnt = 0;
- for (i = 0; i < 128; i++)
- key2[i] = 0;
- }
- mstate = 0;
-}
-
-void init_system(void)
-{
- int i, j, k;
-
- last_line = 0;
- mstate = 0;
- master_clk = 0;
- h_clk = 0;
- line_count = 0;
- itimer = 0;
- clk_counter = 0;
- init_roms();
- for (i = 0; i < 256; i++)
- {
- VDCwrite[i] = 0;
- extRAM[i] = 0;
- }
- for (i = 0; i < 64; i++)
- {
- intRAM[i] = 0;
- }
- for (i = 0; i < MAXLINES; i++)
- AudioVector[i] = ColorVector[i] = 0;
-
- for (i = 0; i < MAXLINES + 2 * MAXSNAP; i++)
- for (j = 0; j < 256; j++)
- for (k = 0; k < 2; k++)
- snapedlines[i][j][k] = 0;
-
- for (i = 0; i < 128; i++)
- key2[i] = 0;
- key2vcnt = 0;
- if (app_data.euro)
- setvideomode(1);
- else
- setvideomode(0);
- do_kluges();
- init_vpp();
- clear_collision();
-}
-
-void init_roms(void)
-{
- rom = rom_table[0];
- romlatch = 0;
-}
-
-Byte read_t1(void)
-{
- /*17*/
- if ((h_clk > 16) || (master_clk > VBLCLK))
- return 1;
- else
- return 0;
-}
-
-void write_p1(Byte d)
-{
- if ((d & 0x80) != (p1 & 0x80))
- {
- int i, l;
- l = snapline((int)((float)master_clk / 22.0 + 0.1), VDCwrite[0xA3],
- 1);
- for (i = l; i < MAXLINES; i++)
- ColorVector[i] = (VDCwrite[0xA3] & 0x7f) | (d & 0x80);
- }
- p1 = d;
- if (app_data.bank == 2)
- {
- rom = rom_table[~p1 & 0x01];
- }
- else if (app_data.bank == 3)
- {
- rom = rom_table[~p1 & 0x03];
- }
- else if (app_data.bank == 4)
- {
- rom = rom_table[(p1 & 1) ? 0 : romlatch];
- }
-}
-
-Byte read_P2(void)
-{
- int i, si, so, km;
-
- return 0xff;
- // TODO
- /*if (NeedsPoll)
- poll_keyboard();
-
- if (!(p1 & 0x04))
- {
- si = (p2 & 7);
- so = 0xff;
- if (si < 6)
- {
- for (i = 0; i < 8; i++)
- {
- km = key_map[si][i];
- if ((key[km] && ((!joykeystab[km]) || (key_shifts & KB_CAPSLOCK_FLAG))) || (key2[km]))
- {
- so = i ^ 0x07;
- }
- }
- }
- if (so != 0xff)
- {
- p2 = p2 & 0x0F;
- p2 = p2 | (so << 5);
- }
- else
- {
- p2 = p2 | 0xF0;
- }
- }
- else
- {
- p2 = p2 | 0xF0;
- }
- return (p2);*/
-}
-
-Byte ext_read(ADDRESS adr)
-{
- Byte d;
- Byte si;
- Byte m;
- int i;
-
- if (!(p1 & 0x08) && !(p1 & 0x40))
- {
- /* Handle VDC Read */
- switch (adr)
- {
- case 0xA1:
- d = VDCwrite[0xA0] & 0x02;
- if (master_clk > VBLCLK)
- d = d | 0x08;
- if (h_clk < (LINECNT - 7))
- d = d | 0x01;
- if (sound_IRQ)
- d = d | 0x04;
- sound_IRQ = 0;
- return d;
- case 0xA2:
- si = VDCwrite[0xA2];
- m = 0x01;
- d = 0;
- for (i = 0; i < 8; i++)
- {
- if (si & m)
- {
- if (coltab[1] & m)
- d = d | (coltab[1] & (m ^ 0xFF));
- if (coltab[2] & m)
- d = d | (coltab[2] & (m ^ 0xFF));
- if (coltab[4] & m)
- d = d | (coltab[4] & (m ^ 0xFF));
- if (coltab[8] & m)
- d = d | (coltab[8] & (m ^ 0xFF));
- if (coltab[0x10] & m)
- d = d | (coltab[0x10] & (m ^ 0xFF));
- if (coltab[0x20] & m)
- d = d | (coltab[0x20] & (m ^ 0xFF));
- if (coltab[0x80] & m)
- d = d | (coltab[0x80] & (m ^ 0xFF));
- }
- m = m << 1;
- }
- clear_collision();
- return d;
- case 0xA5:
- if (!(VDCwrite[0xA0] & 0x02))
- {
- return x_latch;
- }
- else
- {
- x_latch = h_clk * 12;
- return x_latch;
- }
- case 0xA4:
- if (!(VDCwrite[0xA0] & 0x02))
- {
- return y_latch;
- }
- else
- {
- y_latch = master_clk / 22;
- if (y_latch > 241)
- y_latch = 0xFF;
- return y_latch;
- }
- default:
- return VDCwrite[adr];
- }
- }
- else if (!(p1 & 0x10))
- {
- /* Handle ext RAM Read */
- if (app_data.megaxrom && (adr >= 0x80))
- {
- /* MegaCART registers are mirrored every 4 bytes */
- if ((adr & 0x83) == 0x83)
- {
- /* TODO: emulate EEPROM data in */
- return 0xff;
- }
- else
- return extRAM[adr & 0x83];
- }
- else
- return extRAM[adr & 0xFF];
- }
- else if (!(p1 & 0x20))
- {
- /* Read a Videopac+ register */
- return vpp_read(adr);
- }
- else if (app_data.exrom && (p1 & 0x02))
- {
- /* Handle read from exrom */
- return extROM[(p2 << 8) | (adr & 0xFF)];
- }
- else if (app_data.megaxrom && !(p1 & 0x02) && !(p1 & 0x40))
- {
- /* Handle data read from MegaCART */
- return megarom[(extRAM[0x81] << 12) | ((p2 & 0x0f) << 8) | (adr & 0xff)];
- }
-
- return 0;
-}
-
-Byte in_bus(void)
-{
- Byte si = 0, d = 0, mode = 0, jn = 0, sticknum = 0;
-
- if ((p1 & 0x08) && (p1 & 0x10))
- {
- /* Handle joystick read */
- if (!(p1 & 0x04))
- {
- si = (p2 & 7);
- }
- d = 0xFF;
- // si == 1 => joystick 0
- // si != 1 => joystick 1
- // &= 0xfe up
- // &= 0xfd right
- // &= 0xfb down
- // &= 0xf7 left
- // &= 0xef both (?) buttons
- }
- return d;
-}
-
-void ext_write(Byte dat, ADDRESS adr)
-{
- int i;
-
- if (!(p1 & 0x08))
- {
- /* Handle VDC Write */
- if (adr == 0xA0)
- {
- if ((VDCwrite[0xA0] & 0x02) && !(dat & 0x02))
- {
- y_latch = master_clk / 22;
- x_latch = h_clk * 12;
- if (y_latch > 241)
- y_latch = 0xFF;
- }
- if ((master_clk <= VBLCLK) && (VDCwrite[0xA0] != dat))
- {
- draw_region();
- }
- }
- else if (adr == 0xA3)
- {
- int l;
- l = snapline((int)((float)master_clk / 22.0 + 0.5), dat, 1);
- for (i = l; i < MAXLINES; i++)
- ColorVector[i] = (dat & 0x7f) | (p1 & 0x80);
- }
- else if (adr == 0xAA)
- {
- for (i = master_clk / 22; i < MAXLINES; i++)
- AudioVector[i] = dat;
- }
- else if ((adr >= 0x40) && (adr <= 0x7f) && ((adr & 2) == 0))
- {
- /* simulate quad: all 4 sub quad position registers
- * are mapped to the same internal register */
- adr = adr & 0x71;
- /* Another minor thing: the y register always returns
- * bit 0 as 0 */
- if ((adr & 1) == 0)
- dat = dat & 0xfe;
- VDCwrite[adr] = VDCwrite[adr + 4] = VDCwrite[adr + 8] = VDCwrite[adr + 12] = dat;
- }
- VDCwrite[adr] = dat;
- }
- else if (!(p1 & 0x10) && !(p1 & 0x40))
- {
- adr = adr & 0xFF;
-
- if (adr < 0x80)
- {
- /* Handle ext RAM Write */
- extRAM[adr] = dat;
- }
- else
- {
- if (app_data.bank == 4)
- {
- romlatch = (~dat) & 7;
- rom = rom_table[(p1 & 1) ? 0 : romlatch];
- }
-
- /* Handle The Voice */
- if (!(dat & 0x20))
- reset_voice();
- else
- {
- if (adr == 0xE4)
- set_voice_bank(0);
- else if ((adr >= 0xE8) && (adr <= 0xEF))
- set_voice_bank(adr - 0xE7);
- else if (((adr >= 0x80) && (adr <= 0xDF)) || ((adr >= 0xF0) && (adr <= 0xFF)))
- trigger_voice(adr);
- }
- }
- }
- else if (!(p1 & 0x20))
- {
- /* Write to a Videopac+ register */
- vpp_write(dat, adr);
- }
-}
-
-static void do_kluges(void)
-{
- if (app_data.crc == 0xA7344D1F)
- pendirq = 1; /* Atlantis */
- if (app_data.crc == 0xFB83171E)
- pendirq = 1; /* Blockout */
- if (app_data.crc == 0xD38153F6)
- pendirq = 1; /* Blockout (french) */
- if (app_data.crc == 0x881CEAE4)
- pendirq = 1; /* Wall Street */
-
- if (app_data.crc == 0x9E42E766)
- useforen = 1; /* Turtles */
- if (app_data.crc == 0x1C750349)
- useforen = 1; /* Turtles (European version) */
- if (app_data.crc == 0x202F2749)
- useforen = 1; /* Q*bert */
- if (app_data.crc == 0x06861A9C)
- useforen = 1; /* Flashpoint 5 (Videopac adaption) */
-
- if (app_data.crc == 0xFB83171E)
- enahirq = 0; /* Blockout*/
- if (app_data.crc == 0xD38153F6)
- enahirq = 0; /* Blockout (french) */
-
- if (app_data.crc == 0xFB83171E)
- regionoff = 1; /* Blockout*/
- if (app_data.crc == 0xD38153F6)
- regionoff = 1; /* Blockout (french) */
- if (app_data.crc == 0x202F2749)
- regionoff = 0; /* Q*bert */
- if (app_data.crc == 0x5216771A)
- regionoff = 1; /* Popeye */
- if (app_data.crc == 0x0C2E4811)
- regionoff = 11; /* Out of this World! / Helicopter Rescue! */
- if (app_data.crc == 0x67069924)
- regionoff = 11; /* Smithereens! */
- if (app_data.crc == 0x44D1A8A5)
- regionoff = 11; /* Smithereens! (European version) */
- if (app_data.crc == 0x2391C2FB)
- regionoff = 11; /* Smithereens! + */
- if (app_data.crc == 0xBB4AD548)
- regionoff = 11; /* Smithereens! modified 1 */
- if (app_data.crc == 0x25057C11)
- regionoff = 11; /* Smithereens! modified 2 */
- if (app_data.crc == 0xB936BD78)
- regionoff = 12; /* Type & Tell */
- if (app_data.crc == 0xAD8B9AE0)
- regionoff = 2; /* Type & Tell modified 1 */
- if (app_data.crc == 0x5C02BEE6)
- regionoff = 2; /* Type & Tell modified 2 */
- if (app_data.crc == 0xDC30AD3D)
- regionoff = 10; /* Dynasty! */
- if (app_data.crc == 0x7810BAD5)
- regionoff = 8; /* Dynasty! (European) */
- if (app_data.crc == 0xA7344D1F)
- regionoff = 0; /* Atlantis */
- if (app_data.crc == 0xD0BC4EE6)
- regionoff = 12; /* Frogger */
- if (app_data.crc == 0xA57D84F3)
- regionoff = 8; /* Frogger BR */
- if (app_data.crc == 0x825976A9)
- regionoff = 0; /* Mousing Cat 8kb */
- if (app_data.crc == 0xF390BFEC)
- regionoff = 0; /* Mousing Cat 4kb */
- if (app_data.crc == 0x61A350E6)
- regionoff = 0; /* Mousing Cat (french) */
- if (app_data.crc == 0x3BFEF56B)
- regionoff = 1; /* Four in 1 Row! */
- if (app_data.crc == 0x7C747245)
- regionoff = 1; /* Four in 1 Row! modified */
- if (app_data.crc == 0x9B5E9356)
- regionoff = 1; /* Four in 1 Row! (french) */
-
- if (app_data.crc == 0x6CEBAB74)
- regionoff = 12; /* P.T. Barnum's Acrobats! (European version) */
- if (app_data.crc == 0xE7B26A56)
- regionoff = 12; /* P.T. Barnum's Acrobats! (European version - Extra keys) */
-
- if (app_data.crc == 0xFB83171E)
- mxsnap = 3; /* Blockout*/
- if (app_data.crc == 0xD38153F6)
- mxsnap = 3; /* Blockout (french) */
- if (app_data.crc == 0xA57E1724)
- mxsnap = 12; /* Catch the Ball / Noughts and Crosses */
- if (app_data.crc == 0xBE4FF48E)
- mxsnap = 12; /* Catch the Ball / Noughts and Crosses modified */
- if (app_data.crc == 0xFD179F6D)
- mxsnap = 3; /* Clay Pigeon! */
- if (app_data.crc == 0x9C9DDDF9)
- mxsnap = 3; /* Verkehr */
- if (app_data.crc == 0x95936B07)
- mxsnap = 3; /* Super Cobra */
- if (app_data.crc == 0x881CEAE4)
- mxsnap = 3; /* Wall Street */
- if (app_data.crc == 0x9E42E766)
- mxsnap = 0; /* Turtles */
- if (app_data.crc == 0x1C750349)
- mxsnap = 0; /* Turtles (European version) */
- if (app_data.crc == 0xD0BC4EE6)
- mxsnap = 3; /* Frogger */
- if (app_data.crc == 0xA57D84F3)
- mxsnap = 3; /* Frogger BR */
- if (app_data.crc == 0x3BFEF56B)
- mxsnap = 6; /* Four in 1 Row! */
- if (app_data.crc == 0x9B5E9356)
- mxsnap = 6; /* Four in 1 Row! (french) */
- if (app_data.crc == 0x7C747245)
- mxsnap = 6; /* Four in 1 Row! modified */
-
- if (app_data.crc == 0xA7344D1F)
- setvideomode(1); /* Atlantis */
- if (app_data.crc == 0x39E31BF0)
- setvideomode(1); /* Jake */
- if (app_data.crc == 0x92D0177B)
- setvideomode(1); /* Jake (hack) */
- if (app_data.crc == 0x3351FEDA)
- setvideomode(1); /* Power Lords */
- if (app_data.crc == 0x40AE062D)
- setvideomode(1); /* Power Lords (alternate) */
- if (app_data.crc == 0xD158EEBA)
- setvideomode(1); /* Labirinth */
- if (app_data.crc == 0x26B0FF5B)
- setvideomode(1); /* Nightmare */
- if (app_data.crc == 0xDF36683F)
- setvideomode(1); /* Shark Hunter */
- if (app_data.crc == 0xAF307559)
- setvideomode(1); /* Super Bee 8Kb */
- if (app_data.crc == 0x9585D511)
- setvideomode(1); /* Super Bee 4Kb */
- if (app_data.crc == 0x58FA6766)
- setvideomode(1); /* War of the Nerves */
- if (app_data.crc == 0x58FA6766)
- setvideomode(1); /* War of the Nerves */
- if (app_data.crc == 0x39989464)
- setvideomode(1); /* Hockey! / Soccer! */
- if (app_data.crc == 0x3BFEF56B)
- setvideomode(1); /* Four in 1 Row! */
- if (app_data.crc == 0x9B5E9356)
- setvideomode(1); /* Four in 1 Row! (french) */
- if (app_data.crc == 0x7C747245)
- setvideomode(1); /* Four in 1 Row! modified */
- if (app_data.crc == 0x68560DC7)
- setvideomode(1); /* Jopac Moto Crash */
- if (app_data.crc == 0x020FCA15)
- setvideomode(1); /* Jopac Moto Crash modified (non VP+) */
- if (app_data.crc == 0xC4134DF8)
- setvideomode(1); /* Helicopter Rescue + */
- if (app_data.crc == 0x0D2D721D)
- setvideomode(1); /* Trans American Rally + */
- if (app_data.crc == 0x9D72D4E9)
- setvideomode(1); /* Blobbers */
- if (app_data.crc == 0xB2F0F0B4)
- setvideomode(1); /* Le Tresor Englouti + */
- if (app_data.crc == 0x0B2DEB61)
- setvideomode(1); /* Tutankham */
- if (app_data.crc == 0x313547EB)
- setvideomode(1); /* VP53 */
- if (app_data.crc == 0x06861A9C)
- setvideomode(1); /* Flashpoint 5 (Videopac adaption) */
- if (app_data.crc == 0xA57E1724)
- setvideomode(0); /* Catch the Ball / Noughts and Crosses */
- if (app_data.crc == 0xBE4FF48E)
- setvideomode(0); /* Catch the Ball / Noughts and Crosses modified */
- if (app_data.crc == 0xFB83171E)
- setvideomode(0); /* Blockout*/
- if (app_data.crc == 0xD38153F6)
- setvideomode(0); /* Blockout (french) */
- if (app_data.crc == 0x9BFC3E01)
- setvideomode(0); /* Demon Attack */
- if (app_data.crc == 0x50AF9D45)
- setvideomode(0); /* Demon Attack + */
- if (app_data.crc == 0x9884EF36)
- setvideomode(0); /* Demon Attack + modified */
- if (app_data.crc == 0x4A578DFE)
- setvideomode(0); /* Restaurant ntsc */
- if (app_data.crc == 0x863D5E2D)
- setvideomode(0); /* Shark Hunter ntsc */
-
- if (app_data.crc == 0xD62814A3)
- evblclk = 12000; /* Pick Axe Pete */
- if (app_data.crc == 0xB2FFB353)
- evblclk = 12000; /* Pick Axe Pete + */
- if (app_data.crc == 0x81C20196)
- evblclk = 12000; /* Pick Axe Pete + (modified) */
-
- if ((app_data.crc == 0xF390BFEC) || (app_data.crc == 0x825976A9) || (app_data.crc == 0x61A350E6))
- { /* Mousing Cat */
- setvideomode(1);
- evblclk = 7642;
- }
-
- if (app_data.crc == 0xD0BC4EE6)
- { /* Frogger */
- setvideomode(1);
- evblclk = 7642;
- }
- if (app_data.crc == 0x26517E77)
- { /* Commando Noturno */
- setvideomode(1);
- evblclk = 6100;
- regionoff = 12;
- }
- if (app_data.crc == 0xA57E1724)
- { /* Catch the ball*/
- regionoff = 5;
- sproff = 1;
- }
-
- if ((app_data.crc == 0x2DCB77F0) || (app_data.crc == 0xF6882734))
- { /* Depth Charge / Marksman */
- setvideomode(1);
- evblclk = 8000;
- }
- if (app_data.crc == 0x881CEAE4)
- { /* Wall Street */
- setvideomode(1);
- evblclk = 6100;
- }
- if (app_data.crc == 0xD0BC4EE6)
- tweakedaudio = 1; /* Frogger */
- if (app_data.crc == 0xA57D84F3)
- tweakedaudio = 1; /* Frogger BR */
- if (app_data.crc == 0x5216771A)
- tweakedaudio = 1; /* Popeye */
- if (app_data.crc == 0xAFB23F89)
- tweakedaudio = 1; /* Musician */
- if (app_data.crc == 0xC4134DF8)
- tweakedaudio = 1; /* Helicopter Rescue + */
- if (app_data.crc == 0x0D2D721D)
- tweakedaudio = 1; /* Trans American Rally + */
-
- if (app_data.crc == 0xD3B09FEC)
- sproff = 1; /* Volleyball! */
- if (app_data.crc == 0x551E38A2)
- sproff = 1; /* Volleyball! (french) */
-}
-
-int snapline(int pos, Byte reg, int t)
-{
- int i;
- if (pos < MAXLINES + MAXSNAP + MAXSNAP)
- {
- for (i = 0; i < mxsnap; i++)
- {
- if (snapedlines[pos + MAXSNAP - i][reg][t])
- return pos - i;
- if (snapedlines[pos + MAXSNAP + i][reg][t])
- return pos + i;
- }
- snapedlines[pos + MAXSNAP][reg][t] = 1;
- }
- return pos;
-}
-
-static void setvideomode(int t)
-{
- if (t)
- {
- evblclk = EVBLCLK_PAL;
- fps = FPS_PAL;
- }
- else
- {
- evblclk = EVBLCLK_NTSC;
- fps = FPS_NTSC;
- }
-}
diff --git a/waterbox/o2em/vmachine.h b/waterbox/o2em/vmachine.h
deleted file mode 100644
index 57ba491fe0..0000000000
--- a/waterbox/o2em/vmachine.h
+++ /dev/null
@@ -1,82 +0,0 @@
-#ifndef VMACHINE_H
-#define VMACHINE_H
-
-#include "types.h"
-
-#define LINECNT 21
-#define MAXLINES 500
-#define MAXSNAP 50
-
-#define VBLCLK 5493
-#define EVBLCLK_NTSC 5964
-#define EVBLCLK_PAL 7259
-
-#define FPS_NTSC 60
-#define FPS_PAL 50
-
-extern int last_line;
-
-extern int evblclk;
-
-extern int master_clk; /* Master clock */
-extern int int_clk; /* counter for length of /INT pulses for JNI */
-extern int h_clk; /* horizontal clock */
-extern Byte coltab[256];
-extern int mstate;
-
-extern Byte rom_table[8][4096];
-extern Byte intRAM[];
-extern Byte extRAM[];
-extern Byte extROM[];
-extern Byte VDCwrite[256];
-extern Byte ColorVector[MAXLINES];
-extern Byte AudioVector[MAXLINES];
-extern Byte *rom;
-extern Byte *megarom;
-
-extern int frame;
-extern int key2[128];
-extern int key2vcnt;
-extern unsigned long clk_counter;
-
-extern int enahirq;
-extern int pendirq;
-extern int useforen;
-extern long regionoff;
-extern int sproff;
-extern int tweakedaudio;
-
-Byte read_P2(void);
-int snapline(int pos, Byte reg, int t);
-void ext_write(Byte dat, ADDRESS adr);
-Byte ext_read(ADDRESS adr);
-void handle_vbl(void);
-void handle_evbl(void);
-void handle_evbll(void);
-Byte in_bus(void);
-void write_p1(Byte d);
-Byte read_t1(void);
-void init_system(void);
-void init_roms(void);
-void run(void);
-
-extern struct resource {
- int bank;
- int speed;
- int voice;
- int exrom;
- int three_k;
- int euro;
- int openb;
- int megaxrom;
- int vpp;
- int bios;
- uint32_t crc;
- int scoretype;
- int scoreaddress;
- int default_highscore;
-} app_data;
-
-
-#endif /* VMACHINE_H */
-
diff --git a/waterbox/o2em/voice.c b/waterbox/o2em/voice.c
deleted file mode 100644
index b1eba1b24b..0000000000
--- a/waterbox/o2em/voice.c
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * O2EM Free Odyssey2 / Videopac+ Emulator
- *
- * Created by Daniel Boris (c) 1997,1998
- *
- * Developed by Andre de la Rocha
- * Arlindo M. de Oliveira
- *
- * http://o2em.sourceforge.net
- *
- *
- *
- * O2 Voice emulation
- */
-
-#include
-#include "vmachine.h"
-#include "cpu.h"
-#include "voice.h"
-
-//static SAMPLE *voices[9][128];
-static int voice_bank = 0;
-static int voice_num = -1;
-static int voice_addr = 0;
-static int voice_ok = 0;
-static int voice_st = 0;
-static unsigned long clk_voice_start = 0;
-
-void load_voice_samples(char *path)
-{
- /*int bank, sam, i, ld = 0;
- char name[MAXC];
- SAMPLE *sp = NULL;
-
- printf("Loading voice samples... ");
- fflush(stdout);
-
- for (i = 0; i < 9; i++) {
- for (sam = 0; sam < 128; sam++) {
- if (i)
- bank = 0xE8 + i - 1;
- else
- bank = 0xE4;
- sprintf(name, "%svoice/%02x%02x.wav", path, bank, sam + 0x80);
-
- voices[i][sam] = load_sample(name);
-
- if (!voices[i][sam]) {
- sprintf(name, "%svoice/%02X%02X.WAV", path, bank, sam + 0x80);
- voices[i][sam] = load_sample(name);
- }
-
- if (voices[i][sam]) {
- ld++;
- if (!sp)
- sp = voices[i][sam];
- }
- }
- }
-
- printf("%d samples loaded\n", ld);
-
- if (ld > 0) {
- voice_num = allocate_voice(sp);
- if (voice_num != -1)
- voice_ok = 1;
- else {
- printf(" ERROR: could not allocate sound card voice\n");
- voice_ok = 0;
- }
- }*/
-
-}
-
-void update_voice(void)
-{
- /*if (!voice_ok)
- return;
- if (voice_st == 2) {
- if (voice_get_position(voice_num) < 0) {
- if ((voice_bank >= 0) && (voice_bank < 9) && (voice_addr >= 0x80)
- && (voice_addr <= 0xff)) {
- if (voices[voice_bank][voice_addr - 0x80]) {
- reallocate_voice(voice_num,
- voices[voice_bank][voice_addr - 0x80]);
- voice_set_volume(voice_num, (255 * app_data.vvolume) / 100);
- voice_start(voice_num);
- clk_voice_start = clk_counter;
- voice_st = 1;
- } else {
- voice_st = 0;
- }
- }
- }
- } else if (voice_st == 1) {
- if ((voice_get_position(voice_num) < 0)
- || (clk_counter - clk_voice_start > 20)) {
- voice_st = 0;
- }
- }*/
-}
-
-void trigger_voice(int addr)
-{
- /*if (voice_ok) {
- if (voice_st)
- update_voice();
- if ((voice_st == 0) && (voice_bank >= 0) && (voice_bank < 9)
- && (addr >= 0x80) && (addr <= 0xff)) {
- voice_addr = addr;
- voice_st = 2;
- update_voice();
- }
- }*/
-}
-
-void set_voice_bank(int bank)
-{
- /*if (!voice_ok)
- return;
- if ((bank >= 0) && (bank <= 8))
- voice_bank = bank;*/
-}
-
-int get_voice_status(void)
-{
- /*if (voice_ok) {
- update_voice();
- if (voice_st)
- return 1;
- }*/
- return 0;
-}
-
-void reset_voice(void)
-{
- /*if (voice_ok) {
- voice_stop(voice_num);
- voice_bank = 0;
- voice_addr = 0;
- voice_st = 0;
- }*/
-}
diff --git a/waterbox/o2em/voice.h b/waterbox/o2em/voice.h
deleted file mode 100644
index 1afbead738..0000000000
--- a/waterbox/o2em/voice.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef __VOICE_H
-#define __VOICE_H
-
-void load_voice_samples(char *path);
-void update_voice(void);
-void trigger_voice(int addr);
-void reset_voice(void);
-void set_voice_bank(int bank);
-int get_voice_status(void);
-
-#endif
-
diff --git a/waterbox/o2em/vpp.c b/waterbox/o2em/vpp.c
deleted file mode 100644
index cd4bc829f1..0000000000
--- a/waterbox/o2em/vpp.c
+++ /dev/null
@@ -1,588 +0,0 @@
-/*
- * O2EM Free Odyssey2 / Videopac+ Emulator
- *
- * Created by Daniel Boris (c) 1997,1998
- *
- * Developed by Andre de la Rocha
- * Arlindo M. de Oliveira
- *
- * http://o2em.sourceforge.net
- *
- *
- *
- * Videopac+ G7400 emulation
- */
-
-#include
-#include
-#include
-#include "types.h"
-#include "vmachine.h"
-#include "vdc.h"
-#include "vpp_cset.h"
-#include "vpp.h"
-#include "bitmap.h"
-
-static void vpp_draw_char(int x, int y, Byte ch, Byte c0, Byte c1, Byte ext,
- Byte dw, Byte dh, Byte ul);
-static void vpp_update_screen(void);
-
-static Byte LumReg = 0xff, TraReg = 0xff;
-static Byte *colplus = NULL;
-static int vppon = 1;
-static int vpp_cx = 0;
-static int vpp_cy = 0;
-static Byte vpp_data = 0;
-static int inc_curs = 1;
-static int slice = 0;
-static int vpp_y0 = 0;
-static Byte vpp_r = 0;
-Byte dchars[2][960];
-Byte vpp_mem[40][32][4];
-static int frame_cnt = 0;
-static int blink_st = 0;
-static int slicemode = 0;
-static int need_update = 0;
-static Bitmap* vppbmp;
-
-Byte read_PB(Byte p)
-{
- p &= 0x3;
- switch (p)
- {
- case 0:
- return LumReg >> 4;
- break;
- case 1:
- return LumReg & 0xf;
- break;
- case 2:
- return TraReg >> 4;
- break;
- case 3:
- return TraReg & 0xf;
- break;
- }
- return 0;
-}
-
-void write_PB(Byte p, Byte val)
-{
- p &= 0x3;
- val &= 0xf;
-
- switch (p)
- {
- case 0:
- LumReg = (val << 4) | (LumReg & 0xf);
- break;
- case 1:
- LumReg = (LumReg & 0xf0) | val;
- break;
- case 2:
- TraReg = (val << 4) | (TraReg & 0xf);
- break;
- case 3:
- TraReg = (TraReg & 0xf0) | val;
- break;
- }
- need_update = 1;
-}
-
-Byte vpp_read(ADDRESS adr)
-{
- Byte t;
- static Byte ta = 0;
- static Byte tb = 0;
-
- switch (adr)
- {
- case 4:
- return ta;
- case 5:
- /* get return value from last read */
- t = tb;
- /* the real VPP starts a read cycle,
- * the data gets returned at next read */
- if (slicemode)
- {
- Byte ext, chr;
- chr = vpp_mem[vpp_cx][vpp_cy][0];
- ext = (vpp_mem[vpp_cx][vpp_cy][1] & 0x80) ? 1 : 0;
- if (chr < 0xA0)
- {
- ta = 0;
- fprintf(stderr, "unsupported: CHARROM read %d %d %d\n", chr,
- ext, slice);
- }
- else
- {
- ta = dchars[ext][(chr - 0xA0) * 10 + slice];
- ta = ((ta & 0x80) >> 7) | ((ta & 0x40) >> 5) | ((ta & 0x20) >> 3) | ((ta & 0x10) >> 1) | ((ta & 0x08) << 1) | ((ta & 0x04) << 3) | ((ta & 0x02) << 5) | ((ta & 0x01) << 7);
- }
- tb = 0xff; /* real VPP seems to return junk */
- slice = (slice + 1) % 10;
- }
- else
- {
- ta = vpp_mem[vpp_cx][vpp_cy][1];
- tb = vpp_mem[vpp_cx][vpp_cy][0];
- if (inc_curs)
- {
- vpp_cx++;
- if (vpp_cx >= 40)
- {
- vpp_cx = 0;
- vpp_cy++;
- if (vpp_cy >= 24)
- vpp_cy = 0;
- }
- }
- }
- return t;
- case 6:
- return 0;
- default:
- return 0;
- }
-}
-
-void vpp_write(Byte dat, ADDRESS adr)
-{
- static Byte ta;
-
- switch (adr)
- {
- case 0:
- if (!slicemode)
- vpp_mem[vpp_cx][vpp_cy][1] = dat;
- else
- ta = dat;
- break;
- case 1:
- if (slicemode)
- {
- Byte ext, chr;
- chr = vpp_mem[vpp_cx][vpp_cy][0];
- ext = (vpp_mem[vpp_cx][vpp_cy][1] & 0x80) ? 1 : 0;
- if (chr >= 0xA0)
- dchars[ext][(chr - 0xA0) * 10 + slice] = ((ta & 0x80) >> 7) | ((ta & 0x40) >> 5) | ((ta & 0x20) >> 3) | ((ta & 0x10) >> 1) | ((ta & 0x08) << 1) | ((ta & 0x04) << 3) | ((ta & 0x02) << 5) | ((ta & 0x01) << 7);
- slice = (slice + 1) % 10;
- }
- else
- {
- vpp_mem[vpp_cx][vpp_cy][0] = dat;
- if ((dat > 0x7f) && (dat < 0xa0) && (!(vpp_mem[vpp_cx][vpp_cy][1] & 0x80)))
- {
- vpp_mem[vpp_cx][vpp_cy][2] = dat;
- vpp_mem[vpp_cx][vpp_cy][3] = vpp_mem[vpp_cx][vpp_cy][1];
- }
- else
- {
- vpp_mem[vpp_cx][vpp_cy][2] = vpp_mem[vpp_cx][vpp_cy][3] = 0;
- }
- if (inc_curs)
- {
- vpp_cx++;
- if (vpp_cx >= 40)
- {
- vpp_cx = 0;
- vpp_cy++;
- if (vpp_cy >= 24)
- vpp_cy = 0;
- }
- }
- }
- break;
- case 2:
- vpp_data = dat;
- break;
- case 3:
- switch (dat & 0xe0)
- {
- case 0x00: /* plus_cmd_brow */
- vpp_cy = vpp_data & 0x1f;
- vpp_cx = 0;
- break;
- case 0x20: /* plus_cmd_loady */
- vpp_cy = vpp_data & 0x1f;
- break;
- case 0x40: /* plus_cmd_loadx */
- vpp_cx = (vpp_data & 0x3f) % 40;
- break;
- case 0x60: /* plus_cmd_incc */
- vpp_cx++;
- if (vpp_cx >= 40)
- {
- vpp_cx = 0;
- vpp_cy++;
- if (vpp_cy >= 24)
- vpp_cy = 0;
- }
- break;
- case 0x80: /* plus_cmd_loadm */
- slicemode = 0;
- slice = (vpp_data & 0x1f) % 10;
- switch (vpp_data & 0xe0)
- {
- case 0x00: /* plus_loadm_wr */
- inc_curs = 1;
- break;
- case 0x20: /* plus_loadm_rd */
- inc_curs = 1;
- break;
- case 0x40: /* plus_loadm_wrni */
- inc_curs = 0;
- break;
- case 0x60: /* plus_loadm_rdni */
- inc_curs = 0;
- break;
- case 0x80: /* plus_loadm_wrsl */
- slicemode = 1;
- break;
- case 0xA0: /* plus_loadm_rdsl */
- slicemode = 1;
- break;
- default:
- break;
- }
- break;
- case 0xA0: /* plus_cmd_loadr */
- vpp_r = vpp_data;
- break;
- case 0xC0: /* plus_cmd_loady0 */
- if (vpp_data & 0x20)
- fprintf(stderr, "unsupported: global double height");
- vpp_y0 = (vpp_data & 0x1f) % 24;
- break;
- default:
- break;
- }
- break;
- default:
- break;
- }
-
- need_update = 1;
-}
-
-void vpp_finish_bmp(Byte *vmem, int offx, int offy, int w, int h, int totw,
- int toth)
-{
- int i, x, y, t, c, nc, clrx, clry;
- int tcol[16], m[8] = {0x01, 0x10, 0x04, 0x40, 0x02, 0x20, 0x08, 0x80};
- Byte *pnt, *pnt2, *pnt3;
-
- if (vppon)
- {
- memset(colplus, 0, BMPW * BMPH);
- vppon = 0;
- }
-
- if (TraReg == 0xff)
- return;
-
- vppon = 1;
-
- frame_cnt--;
- if (frame_cnt <= 0)
- {
- frame_cnt = 100;
- blink_st = 1 - blink_st;
- need_update = 1;
- }
-
- if (need_update)
- vpp_update_screen();
-
- for (i = 0; i < 8; i++)
- tcol[i] = tcol[i + 8] = !(TraReg & m[i]);
-
- if (w > totw - offx)
- w = totw - offx;
- if (h > toth - offy)
- h = toth - offy;
-
- if (w > vppbmp->w)
- w = vppbmp->w;
- if (h > vppbmp->h)
- h = vppbmp->h;
-
- clrx = clry = 0;
- for (i = 0; (!clrx) && (i < totw); i++)
- if (tcol[vmem[offy * totw + i] & 7])
- clrx = 1;
- for (i = 0; (!clry) && (i < toth); i++)
- if (tcol[vmem[i * totw + offx] & 7])
- clry = 1;
- if (clrx)
- for (y = 0; y < offy; y++)
- for (x = 0; x < totw; x++)
- vmem[y * totw + x] = 0;
- if (clry)
- for (y = 0; y < toth; y++)
- for (x = 0; x < offx; x++)
- vmem[y * totw + x] = 0;
-
- for (y = 0; y < h; y++)
- {
- pnt = vmem + (offy + y) * totw + offx;
- pnt2 = (Byte *)vppbmp->line[y];
-
- x = 0;
- while (x < w)
- {
- pnt3 = pnt;
- c = *pnt++;
- t = x++;
-
- if ((((x + offx) & 3) == 0) && (sizeof(unsigned long) == 4))
- {
- unsigned long cccc, dddd, *p = (unsigned long *)pnt;
- int t2 = x, w2 = w - 4;
- cccc = (((unsigned long)c) & 0xff) | ((((unsigned long)c) & 0xff) << 8) | ((((unsigned long)c) & 0xff) << 16) | ((((unsigned long)c) & 0xff) << 24);
- dddd = *p++;
- while ((x < w2) && (dddd == cccc))
- {
- x += 4;
- dddd = *p++;
- }
- pnt += x - t2;
- }
-
- if (c < 16)
- {
- if (tcol[c])
- {
- if (app_data.openb)
- for (i = 0; i < x - t; i++)
- *pnt3++ = *pnt2++ & 0xf;
- else
- {
- memcpy(pnt3, pnt2, x - t);
- pnt2 += x - t;
- }
- }
- else
- {
- for (i = 0; i < x - t; i++)
- {
- nc = *pnt2++;
- if ((nc & 0x10) && app_data.openb)
- {
- *pnt3++ = nc & 0xf;
- }
- else if (nc & 8)
- {
- colplus[pnt3++ - vmem] = 0x40;
- }
- else
- {
- pnt3++;
- }
- }
- }
- }
- }
- }
-}
-
-static void vpp_draw_char(int x, int y, Byte ch, Byte c0, Byte c1, Byte ext,
- Byte dw, Byte dh, Byte ul)
-{
- int xx, yy, d, m, k;
-
- if ((x > 39) || (y > 24) || (ext > 1))
- return;
-
- d = (dh == 2) ? 5 : 0;
-
- for (yy = 0; yy < 10; yy++)
- {
- if (ul && (d == 9))
- k = 255;
- else if (ch >= 0xA0)
- k = dchars[ext][(ch - 0xA0) * 10 + d];
- else if (ch >= 0x80)
- k = 255;
- else
- k = vpp_cset[ext][ch * 10 + d];
-
- m = (dw == 2) ? 0x08 : 0x80;
-
- for (xx = 0; xx < 8; xx++)
- {
- vppbmp->line[y * 10 + yy][x * 8 + xx] = (k & m) ? c1 : c0;
- if ((xx % 2) || (dw == 0))
- m >>= 1;
- }
- if ((yy % 2) || (dh == 0))
- d++;
- }
-}
-
-static void vpp_update_screen(void)
-{
- int i, x, y, l, chr, attr, ext, c0, c1, dw, dh, hpar, vpar, lvd, lhd,
- ser_chr, ser_atr, ul, conc, box, swapcol;
- int tlum[8], m[8] = {0x01, 0x10, 0x04, 0x40, 0x02, 0x20, 0x08, 0x80};
-
- clear(vppbmp);
-
- for (i = 0; i < 8; i++)
- tlum[i] = (LumReg & m[i]) ? 0 : 8;
-
- vpar = lvd = 0;
- for (y = 0; y < 25; y++)
- {
-
- vpar = (lvd == 0) ? 0 : 1 - vpar;
-
- l = (y == 0) ? 31 : (y - 1 + vpp_y0) % 24;
- c0 = ul = conc = box = 0;
-
- hpar = lhd = 0;
- for (x = 0; x < 40; x++)
- {
- hpar = (lhd == 0) ? 0 : 1 - hpar;
-
- chr = vpp_mem[x][l][0];
- attr = vpp_mem[x][l][1];
- c1 = attr & 0x7;
- c1 = ((c1 & 2) | ((c1 & 1) << 2) | ((c1 & 4) >> 2));
- ext = (attr & 0x80) ? 1 : 0;
-
- ser_chr = vpp_mem[x][l][2];
- ser_atr = vpp_mem[x][l][3];
- if (ser_chr)
- {
- c0 = (ser_atr >> 4) & 0x7;
- c0 = ((c0 & 2) | ((c0 & 1) << 2) | ((c0 & 4) >> 2));
- ul = ser_chr & 4;
- conc = ser_chr & 1;
- box = ser_chr & 2;
- }
-
- if (ext)
- {
- c0 = (attr >> 4) & 0x7;
- c0 = ((c0 & 2) | ((c0 & 1) << 2) | ((c0 & 4) >> 2));
- dw = dh = 0;
- }
- else
- {
- dw = (attr & 0x20) ? (hpar ? 2 : 1) : 0;
- dh = (attr & 0x10) ? (vpar ? 2 : 1) : 0;
- if (dw)
- lhd = 1;
- if (dh)
- lvd = 1;
- }
-
- swapcol = 0;
-
- /* cursor display */
- if ((x == vpp_cx) && (l == vpp_cy))
- {
- /* on cursor position */
- if (vpp_r & 0x10)
- {
- /* cursor display active */
- swapcol = !swapcol;
- if ((vpp_r & 0x80) && blink_st)
- {
- /* blinking active */
- swapcol = !swapcol;
- }
- }
- }
-
- /* invert attribute */
- if ((!ext) && (attr & 0x40))
- swapcol = !swapcol;
-
- /* blinking chars */
- if ((vpp_r & 0x80) && !(attr & 8) && !blink_st)
- {
- /* cursor handling is done already */
- if (!(vpp_r & 0x10) || (x != vpp_cx) || (l != vpp_cy))
- {
- c1 = c0;
- }
- }
-
- if (((y == 0) && (vpp_r & 8)) || ((y != 0) && (vpp_r & 1)))
- {
- if ((!conc) || (!(vpp_r & 4)))
- {
- if (box || (!(vpp_r & 2)))
- {
- if (swapcol)
- vpp_draw_char(x, y, chr, c1 | tlum[c1],
- c0 | tlum[c0], ext, dw, dh, ul);
- else
- vpp_draw_char(x, y, chr, c0 | tlum[c0],
- c1 | tlum[c1], ext, dw, dh, ul);
- }
- else
- {
- vpp_draw_char(x, y, 255, (app_data.openb) ? 16 : 0, 0,
- 0, 0, 0, 0);
- }
- }
- }
- }
- }
-
- if (vpp_r & 0x20)
- {
- for (y = vppbmp->h - 1; y >= 10; y--)
- for (x = 0; x < vppbmp->w; x++)
- vppbmp->line[y][x] = vppbmp->line[(y - 10) / 2 + 10][x];
- }
-
- need_update = 0;
-}
-
-void load_colplus(Byte *col)
-{
- if (vppon)
- memcpy(col, colplus, BMPW * BMPH);
- else
- memset(col, 0, BMPW * BMPH);
-}
-
-void init_vpp(void)
-{
- int i, j, k;
- if (!colplus)
- colplus = (Byte *)malloc(BMPW * BMPH);
- if (!vppbmp)
- vppbmp = NewBitmap(BMPW, BMPH);
- clear(vppbmp);
-
- memset(colplus, 0, BMPW * BMPH);
-
- LumReg = TraReg = 0xff;
- vpp_cx = 0;
- vpp_cy = 0;
- vpp_y0 = 0;
- vpp_r = 0;
- inc_curs = 1;
- vpp_data = 0;
- frame_cnt = 0;
- blink_st = 0;
- slice = 0;
- slicemode = 0;
- need_update = 1;
- vppon = 1;
-
- for (i = 0; i < 2; i++)
- for (j = 0; j < 960; j++)
- dchars[i][j] = 0;
-
- for (i = 0; i < 40; i++)
- for (j = 0; j < 32; j++)
- for (k = 0; k < 4; k++)
- vpp_mem[i][j][k] = 0;
-}
diff --git a/waterbox/o2em/vpp.h b/waterbox/o2em/vpp.h
deleted file mode 100644
index a9e1276dcd..0000000000
--- a/waterbox/o2em/vpp.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef __VPP_H
-#define __VPP_H
-
-Byte read_PB(Byte p);
-void write_PB(Byte p, Byte val);
-Byte vpp_read(ADDRESS adr);
-void vpp_write(Byte dat, ADDRESS adr);
-void vpp_finish_bmp(Byte *vmem, int offx, int offy, int w, int h, int totw, int toth);
-void init_vpp(void);
-void load_colplus(Byte *col);
-
-#endif
diff --git a/waterbox/o2em/vpp_cset.c b/waterbox/o2em/vpp_cset.c
deleted file mode 100644
index 46d3c5cf12..0000000000
--- a/waterbox/o2em/vpp_cset.c
+++ /dev/null
@@ -1,279 +0,0 @@
-
-/*
- * O2EM Free Odyssey2 / Videopac+ Emulator
- *
- * Created by Daniel Boris (c) 1997,1998
- *
- * Developed by Andre de la Rocha
- * Arlindo M. de Oliveira
- *
- * http://o2em.sourceforge.net
- *
- *
- *
- * Videopac+ character table
- */
-
-#include "types.h"
-#include "vpp_cset.h"
-
-const Byte vpp_cset[2][1280] = {
- {/* Alphanumeric */
- 0x00, 0x38, 0x44, 0x40, 0x20, 0x10, 0x00, 0x10, 0x00, 0x00,
- 0x00, 0x10, 0x28, 0x00, 0x38, 0x44, 0x7c, 0x44, 0x00, 0x00,
- 0x00, 0x08, 0x10, 0x3c, 0x20, 0x30, 0x20, 0x3c, 0x00, 0x00,
- 0x00, 0x08, 0x14, 0x10, 0x38, 0x10, 0x24, 0x3c, 0x00, 0x00,
- 0x00, 0x10, 0x38, 0x50, 0x38, 0x14, 0x54, 0x38, 0x10, 0x00,
- 0x00, 0x38, 0x44, 0x40, 0x40, 0x40, 0x44, 0x38, 0x10, 0x20,
- 0x00, 0x28, 0x28, 0x7c, 0x28, 0x7c, 0x28, 0x28, 0x00, 0x00,
- 0x00, 0x20, 0x18, 0x00, 0x38, 0x44, 0x7c, 0x44, 0x00, 0x00,
- 0x00, 0x20, 0x18, 0x00, 0x44, 0x44, 0x44, 0x38, 0x00, 0x00,
- 0x00, 0x10, 0x08, 0x3c, 0x20, 0x30, 0x20, 0x3c, 0x00, 0x00,
- 0x00, 0x3c, 0x50, 0x50, 0x58, 0x50, 0x50, 0x3c, 0x00, 0x00,
- 0x00, 0x08, 0x14, 0x3c, 0x20, 0x30, 0x20, 0x3c, 0x00, 0x00,
- 0x00, 0x00, 0x10, 0x20, 0x7f, 0x20, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x38, 0x54, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x00, 0x00, 0x08, 0x04, 0xfe, 0x04, 0x08, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x54, 0x38, 0x10, 0x00,
- 0x00, 0x18, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x00, 0x7c, 0x00, 0x00,
- 0x00, 0x08, 0x10, 0x38, 0x44, 0x7c, 0x40, 0x38, 0x00, 0x00,
- 0x00, 0x28, 0x00, 0x38, 0x44, 0x7c, 0x40, 0x38, 0x00, 0x00,
- 0x00, 0x28, 0x00, 0x30, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x38, 0x40, 0x40, 0x40, 0x38, 0x10, 0x20,
- 0x00, 0x10, 0x28, 0x00, 0x44, 0x44, 0x4c, 0x34, 0x00, 0x00,
- 0x00, 0x20, 0x10, 0x34, 0x4c, 0x44, 0x4c, 0x34, 0x00, 0x00,
- 0x00, 0x00, 0x10, 0x00, 0x7c, 0x00, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x20, 0x10, 0x38, 0x44, 0x7c, 0x40, 0x38, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x3c, 0x52, 0x5e, 0x50, 0x3e, 0x00, 0x00,
- 0x00, 0x10, 0x28, 0x38, 0x44, 0x7c, 0x40, 0x38, 0x00, 0x00,
- 0x00, 0x40, 0xc0, 0x40, 0x44, 0x4c, 0x14, 0x3e, 0x04, 0x00,
- 0x00, 0x40, 0xc0, 0x40, 0x4c, 0x52, 0x04, 0x08, 0x1e, 0x00,
- 0x00, 0xe0, 0x20, 0x40, 0x24, 0xcc, 0x14, 0x3e, 0x04, 0x00,
- 0x00, 0x10, 0x28, 0x00, 0x38, 0x44, 0x44, 0x38, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x10, 0x00, 0x00,
- 0x00, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x28, 0x00, 0x3c, 0x20, 0x30, 0x20, 0x3c, 0x00, 0x00,
- 0x00, 0x10, 0x28, 0x34, 0x4c, 0x44, 0x4c, 0x34, 0x00, 0x00,
- 0x00, 0x60, 0x64, 0x08, 0x10, 0x20, 0x4c, 0x0c, 0x00, 0x00,
- 0x00, 0x20, 0x50, 0x50, 0x20, 0x54, 0x48, 0x34, 0x00, 0x00,
- 0x00, 0x10, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x08, 0x10, 0x20, 0x20, 0x20, 0x10, 0x08, 0x00, 0x00,
- 0x00, 0x20, 0x10, 0x08, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
- 0x00, 0x10, 0x54, 0x38, 0x10, 0x38, 0x54, 0x10, 0x00, 0x00,
- 0x00, 0x00, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x40, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
- 0x01, 0x02, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x80,
- 0x00, 0x10, 0x28, 0x44, 0x44, 0x44, 0x28, 0x10, 0x00, 0x00,
- 0x00, 0x10, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
- 0x00, 0x38, 0x44, 0x04, 0x18, 0x20, 0x40, 0x7c, 0x00, 0x00,
- 0x00, 0x7c, 0x04, 0x08, 0x18, 0x04, 0x44, 0x38, 0x00, 0x00,
- 0x00, 0x08, 0x18, 0x28, 0x48, 0x7c, 0x08, 0x08, 0x00, 0x00,
- 0x00, 0x7c, 0x40, 0x78, 0x04, 0x04, 0x44, 0x38, 0x00, 0x00,
- 0x00, 0x18, 0x20, 0x40, 0x78, 0x44, 0x44, 0x38, 0x00, 0x00,
- 0x00, 0x7c, 0x04, 0x08, 0x10, 0x20, 0x20, 0x20, 0x00, 0x00,
- 0x00, 0x38, 0x44, 0x44, 0x38, 0x44, 0x44, 0x38, 0x00, 0x00,
- 0x00, 0x38, 0x44, 0x44, 0x3c, 0x04, 0x04, 0x38, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x20, 0x40, 0x00,
- 0x00, 0x04, 0x08, 0x10, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x7c, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x40, 0x20, 0x10, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
- 0x00, 0x38, 0x44, 0x04, 0x08, 0x10, 0x00, 0x10, 0x00, 0x00,
- 0x00, 0x38, 0x44, 0x5c, 0x54, 0x5c, 0x40, 0x38, 0x00, 0x00,
- 0x00, 0x38, 0x44, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x00, 0x00,
- 0x00, 0x78, 0x44, 0x44, 0x78, 0x44, 0x44, 0x78, 0x00, 0x00,
- 0x00, 0x38, 0x44, 0x40, 0x40, 0x40, 0x44, 0x38, 0x00, 0x00,
- 0x00, 0x78, 0x44, 0x44, 0x44, 0x44, 0x44, 0x78, 0x00, 0x00,
- 0x00, 0x7c, 0x40, 0x40, 0x70, 0x40, 0x40, 0x7c, 0x00, 0x00,
- 0x00, 0x7c, 0x40, 0x40, 0x70, 0x40, 0x40, 0x40, 0x00, 0x00,
- 0x00, 0x38, 0x44, 0x40, 0x40, 0x4c, 0x44, 0x3c, 0x00, 0x00,
- 0x00, 0x44, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x44, 0x00, 0x00,
- 0x00, 0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00,
- 0x00, 0x1c, 0x08, 0x08, 0x08, 0x08, 0x48, 0x30, 0x00, 0x00,
- 0x00, 0x44, 0x48, 0x50, 0x60, 0x50, 0x48, 0x44, 0x00, 0x00,
- 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7c, 0x00, 0x00,
- 0x00, 0x44, 0x6c, 0x54, 0x44, 0x44, 0x44, 0x44, 0x00, 0x00,
- 0x00, 0x44, 0x44, 0x64, 0x54, 0x4c, 0x44, 0x44, 0x00, 0x00,
- 0x00, 0x38, 0x44, 0x44, 0x44, 0x44, 0x44, 0x38, 0x00, 0x00,
- 0x00, 0x78, 0x44, 0x44, 0x78, 0x40, 0x40, 0x40, 0x00, 0x00,
- 0x00, 0x38, 0x44, 0x44, 0x44, 0x54, 0x48, 0x34, 0x00, 0x00,
- 0x00, 0x78, 0x44, 0x44, 0x78, 0x50, 0x48, 0x44, 0x00, 0x00,
- 0x00, 0x38, 0x44, 0x40, 0x38, 0x04, 0x44, 0x38, 0x00, 0x00,
- 0x00, 0x7c, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
- 0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x38, 0x00, 0x00,
- 0x00, 0x44, 0x44, 0x44, 0x28, 0x28, 0x10, 0x10, 0x00, 0x00,
- 0x00, 0x44, 0x44, 0x44, 0x54, 0x54, 0x54, 0x28, 0x00, 0x00,
- 0x00, 0x44, 0x44, 0x28, 0x10, 0x28, 0x44, 0x44, 0x00, 0x00,
- 0x00, 0x44, 0x44, 0x28, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
- 0x00, 0x7c, 0x04, 0x08, 0x10, 0x20, 0x40, 0x7c, 0x00, 0x00,
- 0x00, 0x1c, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1c, 0x00, 0x00,
- 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x04, 0x02, 0x01,
- 0x00, 0x38, 0x08, 0x08, 0x08, 0x08, 0x08, 0x38, 0x00, 0x00,
- 0x00, 0x10, 0x28, 0x00, 0x30, 0x10, 0x10, 0x38, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x34, 0x4c, 0x44, 0x4c, 0x34, 0x00, 0x00,
- 0x00, 0x40, 0x40, 0x78, 0x44, 0x44, 0x44, 0x78, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x38, 0x40, 0x40, 0x40, 0x38, 0x00, 0x00,
- 0x00, 0x04, 0x04, 0x3c, 0x44, 0x44, 0x44, 0x3c, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x38, 0x44, 0x7c, 0x40, 0x38, 0x00, 0x00,
- 0x00, 0x18, 0x24, 0x20, 0x70, 0x20, 0x20, 0x20, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x3c, 0x44, 0x44, 0x3c, 0x04, 0x24, 0x18,
- 0x00, 0x40, 0x40, 0x58, 0x64, 0x44, 0x44, 0x44, 0x00, 0x00,
- 0x00, 0x10, 0x00, 0x30, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00,
- 0x00, 0x08, 0x00, 0x18, 0x08, 0x08, 0x08, 0x08, 0x48, 0x30,
- 0x00, 0x20, 0x20, 0x24, 0x28, 0x30, 0x28, 0x24, 0x00, 0x00,
- 0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x68, 0x54, 0x54, 0x54, 0x54, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x58, 0x64, 0x44, 0x44, 0x44, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x78, 0x44, 0x44, 0x44, 0x78, 0x40, 0x40,
- 0x00, 0x00, 0x00, 0x3c, 0x44, 0x44, 0x44, 0x3c, 0x04, 0x04,
- 0x00, 0x00, 0x00, 0x58, 0x64, 0x40, 0x40, 0x40, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x38, 0x40, 0x38, 0x04, 0x78, 0x00, 0x00,
- 0x00, 0x20, 0x20, 0x38, 0x20, 0x20, 0x20, 0x18, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x4c, 0x34, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x44, 0x44, 0x28, 0x28, 0x10, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x44, 0x44, 0x54, 0x54, 0x28, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x44, 0x44, 0x4c, 0x34, 0x04, 0x44, 0x38,
- 0x00, 0x00, 0x00, 0x7c, 0x08, 0x10, 0x20, 0x7c, 0x00, 0x00,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
- {/* Separated semi-graphic */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x77, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00,
- 0x70, 0x70, 0x00, 0x70, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00,
- 0x07, 0x07, 0x00, 0x70, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00,
- 0x77, 0x77, 0x00, 0x70, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00,
- 0x70, 0x70, 0x00, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00,
- 0x07, 0x07, 0x00, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00,
- 0x77, 0x77, 0x00, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x00, 0x00, 0x00, 0x00,
- 0x70, 0x70, 0x00, 0x77, 0x77, 0x77, 0x00, 0x00, 0x00, 0x00,
- 0x07, 0x07, 0x00, 0x77, 0x77, 0x77, 0x00, 0x00, 0x00, 0x00,
- 0x77, 0x77, 0x00, 0x77, 0x77, 0x77, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x00,
- 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x00,
- 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x00,
- 0x77, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x00,
- 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, 0x00, 0x70, 0x70, 0x00,
- 0x70, 0x70, 0x00, 0x70, 0x70, 0x70, 0x00, 0x70, 0x70, 0x00,
- 0x07, 0x07, 0x00, 0x70, 0x70, 0x70, 0x00, 0x70, 0x70, 0x00,
- 0x77, 0x77, 0x00, 0x70, 0x70, 0x70, 0x00, 0x70, 0x70, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x00, 0x70, 0x70, 0x00,
- 0x70, 0x70, 0x00, 0x07, 0x07, 0x07, 0x00, 0x70, 0x70, 0x00,
- 0x07, 0x07, 0x00, 0x07, 0x07, 0x07, 0x00, 0x70, 0x70, 0x00,
- 0x77, 0x77, 0x00, 0x07, 0x07, 0x07, 0x00, 0x70, 0x70, 0x00,
- 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x00, 0x70, 0x70, 0x00,
- 0x70, 0x70, 0x00, 0x77, 0x77, 0x77, 0x00, 0x70, 0x70, 0x00,
- 0x07, 0x07, 0x00, 0x77, 0x77, 0x77, 0x00, 0x70, 0x70, 0x00,
- 0x77, 0x77, 0x00, 0x77, 0x77, 0x77, 0x00, 0x70, 0x70, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00,
- 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00,
- 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00,
- 0x77, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00,
- 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, 0x00, 0x07, 0x07, 0x00,
- 0x70, 0x70, 0x00, 0x70, 0x70, 0x70, 0x00, 0x07, 0x07, 0x00,
- 0x07, 0x07, 0x00, 0x70, 0x70, 0x70, 0x00, 0x07, 0x07, 0x00,
- 0x77, 0x77, 0x00, 0x70, 0x70, 0x70, 0x00, 0x07, 0x07, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x00, 0x07, 0x07, 0x00,
- 0x70, 0x70, 0x00, 0x07, 0x07, 0x07, 0x00, 0x07, 0x07, 0x00,
- 0x07, 0x07, 0x00, 0x07, 0x07, 0x07, 0x00, 0x07, 0x07, 0x00,
- 0x77, 0x77, 0x00, 0x07, 0x07, 0x07, 0x00, 0x07, 0x07, 0x00,
- 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x00, 0x07, 0x07, 0x00,
- 0x70, 0x70, 0x00, 0x77, 0x77, 0x77, 0x00, 0x07, 0x07, 0x00,
- 0x07, 0x07, 0x00, 0x77, 0x77, 0x77, 0x00, 0x07, 0x07, 0x00,
- 0x77, 0x77, 0x00, 0x77, 0x77, 0x77, 0x00, 0x07, 0x07, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x00,
- 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x00,
- 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x00,
- 0x77, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x00,
- 0x00, 0x00, 0x00, 0x70, 0x70, 0x70, 0x00, 0x77, 0x77, 0x00,
- 0x70, 0x70, 0x00, 0x70, 0x70, 0x70, 0x00, 0x77, 0x77, 0x00,
- 0x07, 0x07, 0x00, 0x70, 0x70, 0x70, 0x00, 0x77, 0x77, 0x00,
- 0x77, 0x77, 0x00, 0x70, 0x70, 0x70, 0x00, 0x77, 0x77, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x00, 0x77, 0x77, 0x00,
- 0x70, 0x70, 0x00, 0x07, 0x07, 0x07, 0x00, 0x77, 0x77, 0x00,
- 0x07, 0x07, 0x00, 0x07, 0x07, 0x07, 0x00, 0x77, 0x77, 0x00,
- 0x77, 0x77, 0x00, 0x07, 0x07, 0x07, 0x00, 0x77, 0x77, 0x00,
- 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0x00, 0x77, 0x77, 0x00,
- 0x70, 0x70, 0x00, 0x77, 0x77, 0x77, 0x00, 0x77, 0x77, 0x00,
- 0x07, 0x07, 0x00, 0x77, 0x77, 0x77, 0x00, 0x77, 0x77, 0x00,
- 0x77, 0x77, 0x00, 0x77, 0x77, 0x77, 0x00, 0x77, 0x77, 0x00,
- /* Mosaic semi-graphic */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00,
- 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00,
- 0x0f, 0x0f, 0x0f, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00,
- 0xf0, 0xf0, 0xf0, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00,
- 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
- 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
- 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0,
- 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0,
- 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0,
- 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0,
- 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
- 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
- 0x0f, 0x0f, 0x0f, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
- 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
- 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0xf0, 0xf0, 0xf0,
- 0xf0, 0xf0, 0xf0, 0x0f, 0x0f, 0x0f, 0x0f, 0xf0, 0xf0, 0xf0,
- 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0xf0, 0xf0, 0xf0,
- 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0xf0, 0xf0, 0xf0,
- 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0,
- 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0,
- 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f,
- 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f,
- 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f,
- 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f,
- 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 0x0f, 0x0f, 0x0f,
- 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x0f, 0x0f, 0x0f,
- 0x0f, 0x0f, 0x0f, 0xf0, 0xf0, 0xf0, 0xf0, 0x0f, 0x0f, 0x0f,
- 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0x0f, 0x0f, 0x0f,
- 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
- 0xf0, 0xf0, 0xf0, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
- 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
- 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
- 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f,
- 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f,
- 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
- 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
- 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff,
- 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff,
- 0x0f, 0x0f, 0x0f, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff,
- 0xf0, 0xf0, 0xf0, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff,
- 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}};
diff --git a/waterbox/o2em/vpp_cset.h b/waterbox/o2em/vpp_cset.h
deleted file mode 100644
index 29987836dc..0000000000
--- a/waterbox/o2em/vpp_cset.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef __VPP_CSET_H
-#define __VPP_CSET_H
-
-extern const Byte vpp_cset[2][1280];
-
-#endif