SG-1000 almost done
This commit is contained in:
parent
8f59b1f582
commit
73cf2bc61b
|
@ -2,11 +2,31 @@
|
|||
|
||||
* CodeMasters games use a custom mapper and special video modes (both implemented)
|
||||
+ Fantastic Dizzy crashes shortly after starting a new game. Investigating.
|
||||
|
||||
* F16 Fighting Falcon uses old SG-1000 video mode.
|
||||
+ Excellent Dizzy Collection doesn't boot.
|
||||
|
||||
======= Game Gear compatibility issues =======
|
||||
|
||||
* Outrun has raster effect on the wrong line. I've been able to modify interrupt code to
|
||||
fix it, but so far, not without breaking other games.
|
||||
* GG Turrican homebrew not starting correctly
|
||||
* GG Turrican homebrew not starting correctly
|
||||
|
||||
======= SG-1000 compatibility checklist =======
|
||||
|
||||
Following games are untested (don't have the rom)
|
||||
|
||||
Bomb Jack
|
||||
C_So!
|
||||
Champion Kendou
|
||||
Home Mahjong
|
||||
Mahjong
|
||||
Othello
|
||||
Pachinko
|
||||
Serizawa Hachidan no Tsumeshogi
|
||||
Terebi Oekaki
|
||||
|
||||
Following games have issues:
|
||||
|
||||
The Castle dies
|
||||
Guzzler (JP) crashes the core :O
|
||||
Monaco GP graphics are whacked up - wonder if it uses an undoc mode?
|
||||
Q-Bert crash core ? :o
|
|
@ -11,7 +11,7 @@ namespace BizHawk.Emulation.Consoles.Sega
|
|||
if (DisplayOn == false)
|
||||
{
|
||||
for (int x = 0; x < 256; x++)
|
||||
FrameBuffer[(ScanLine * 256) + x] = BackdropColor;
|
||||
FrameBuffer[(ScanLine*256) + x] = Palette[BackdropColor];
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -28,18 +28,27 @@ namespace BizHawk.Emulation.Consoles.Sega
|
|||
|
||||
private void RenderBackgroundM0()
|
||||
{
|
||||
if (DisplayOn == false)
|
||||
{
|
||||
Array.Clear(FrameBuffer, ScanLine * 256, 256);
|
||||
return;
|
||||
}
|
||||
|
||||
int yc = ScanLine/8;
|
||||
int yofs = ScanLine%8;
|
||||
int FrameBufferOffset = ScanLine*256;
|
||||
int PatternNameOffset = TmsPatternNameTableBase + (yc*32);
|
||||
|
||||
int ScreenBGColor = PaletteTMS9918[Registers[7] & 0x0F];
|
||||
|
||||
for (int xc=0; xc<32; xc++)
|
||||
{
|
||||
int pn = VRAM[PatternNameOffset++];
|
||||
int pv = VRAM[PatternGeneratorBase + (pn*8) + yofs];
|
||||
int colorEntry = VRAM[ColorTableBase + (pn/8)];
|
||||
int fgColor = PaletteTMS9918[(colorEntry >> 4 & 0x0F)];
|
||||
int bgColor = PaletteTMS9918[(colorEntry & 0x0F)];
|
||||
int fgIndex = (colorEntry >> 4) & 0x0F;
|
||||
int bgIndex = colorEntry & 0x0F;
|
||||
int fgColor = fgIndex == 0 ? ScreenBGColor : PaletteTMS9918[fgIndex];
|
||||
int bgColor = bgIndex == 0 ? ScreenBGColor : PaletteTMS9918[bgIndex];
|
||||
|
||||
FrameBuffer[FrameBufferOffset++] = ((pv & 0x80) > 0) ? fgColor : bgColor;
|
||||
FrameBuffer[FrameBufferOffset++] = ((pv & 0x40) > 0) ? fgColor : bgColor;
|
||||
|
@ -54,20 +63,29 @@ namespace BizHawk.Emulation.Consoles.Sega
|
|||
|
||||
private void RenderBackgroundM2()
|
||||
{
|
||||
if (DisplayOn == false)
|
||||
{
|
||||
Array.Clear(FrameBuffer, ScanLine * 256, 256);
|
||||
return;
|
||||
}
|
||||
|
||||
int yrow = ScanLine/8;
|
||||
int yofs = ScanLine%8;
|
||||
int FrameBufferOffset = ScanLine*256;
|
||||
int PatternNameOffset = TmsPatternNameTableBase + (yrow*32);
|
||||
int PatternGeneratorOffset = (((Registers[4] & 4) << 11) & 0x2000);// +((yrow / 8) * 0x100);
|
||||
int ColorOffset = (ColorTableBase & 0x2000);// +((yrow / 8) * 0x100);
|
||||
int ScreenBGColor = PaletteTMS9918[Registers[7] & 0x0F];
|
||||
|
||||
for (int xc=0; xc<32; xc++)
|
||||
{
|
||||
int pn = VRAM[PatternNameOffset++];
|
||||
int pn = VRAM[PatternNameOffset++] + ((yrow/8)*0x100);
|
||||
int pv = VRAM[PatternGeneratorOffset + (pn * 8) + yofs];
|
||||
int colorEntry = VRAM[ColorOffset + (pn * 8) + yofs];
|
||||
int fgColor = PaletteTMS9918[(colorEntry >> 4 & 0x0F)];
|
||||
int bgColor = PaletteTMS9918[(colorEntry & 0x0F)];
|
||||
int fgIndex = (colorEntry >> 4) & 0x0F;
|
||||
int bgIndex = colorEntry & 0x0F;
|
||||
int fgColor = fgIndex == 0 ? ScreenBGColor : PaletteTMS9918[fgIndex];
|
||||
int bgColor = bgIndex == 0 ? ScreenBGColor : PaletteTMS9918[bgIndex];
|
||||
|
||||
FrameBuffer[FrameBufferOffset++] = ((pv & 0x80) > 0) ? fgColor : bgColor;
|
||||
FrameBuffer[FrameBufferOffset++] = ((pv & 0x40) > 0) ? fgColor : bgColor;
|
||||
|
@ -82,6 +100,8 @@ namespace BizHawk.Emulation.Consoles.Sega
|
|||
|
||||
private void RenderTmsSprites()
|
||||
{
|
||||
if (DisplayOn == false) return;
|
||||
|
||||
Array.Clear(ScanlinePriorityBuffer, 0, 256);
|
||||
Array.Clear(SpriteCollisionBuffer, 0, 256);
|
||||
|
||||
|
@ -129,10 +149,13 @@ namespace BizHawk.Emulation.Consoles.Sega
|
|||
|
||||
if ((pv & (1 << (7 - (xp & 7)))) > 0)
|
||||
{
|
||||
if (Color != 0)
|
||||
FrameBuffer[(ScanLine * 256) + x + xp] = PaletteTMS9918[Color & 0x0F];
|
||||
// todo sprite collision
|
||||
if (Color != 0 && ScanlinePriorityBuffer[x+xp] == 0)
|
||||
{
|
||||
ScanlinePriorityBuffer[x + xp] = 1;
|
||||
FrameBuffer[(ScanLine*256) + x + xp] = PaletteTMS9918[Color & 0x0F];
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -204,26 +204,10 @@ namespace BizHawk.Emulation.Consoles.Sega
|
|||
{
|
||||
if (Mode4Bit == false) // check old TMS modes
|
||||
{
|
||||
if (Mode1Bit)
|
||||
{
|
||||
Console.WriteLine("set mode 1....");
|
||||
TmsMode = 1;
|
||||
}
|
||||
else if (Mode2Bit)
|
||||
{
|
||||
Console.WriteLine("set mode 2....");
|
||||
TmsMode = 2;
|
||||
}
|
||||
else if (Mode3Bit)
|
||||
{
|
||||
Console.WriteLine("set mode 3....");
|
||||
TmsMode = 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("set mode 0....");
|
||||
TmsMode = 0;
|
||||
}
|
||||
if (Mode1Bit) TmsMode = 1;
|
||||
else if (Mode2Bit) TmsMode = 2;
|
||||
else if (Mode3Bit) TmsMode = 3;
|
||||
else TmsMode = 0;
|
||||
}
|
||||
|
||||
else if (Mode4Bit && Mode2Bit) // if Mode4 and Mode2 set, then check extension modes
|
||||
|
@ -235,7 +219,6 @@ namespace BizHawk.Emulation.Consoles.Sega
|
|||
case 0x18: // 192-line mode
|
||||
if (FrameHeight != 192)
|
||||
{
|
||||
Console.WriteLine("Change video mode to 192-line Mode4");
|
||||
FrameHeight = 192;
|
||||
FrameBuffer = new int[256*192];
|
||||
NameTableBase = CalcNameTableBase();
|
||||
|
@ -244,7 +227,6 @@ namespace BizHawk.Emulation.Consoles.Sega
|
|||
case 0x10: // 224-line mode
|
||||
if (FrameHeight != 224)
|
||||
{
|
||||
Console.WriteLine("Change video mode to 224-line Mode4");
|
||||
FrameHeight = 224;
|
||||
FrameBuffer = new int[256*224];
|
||||
NameTableBase = CalcNameTableBase();
|
||||
|
@ -253,7 +235,6 @@ namespace BizHawk.Emulation.Consoles.Sega
|
|||
case 0x08: // 240-line mode
|
||||
if (FrameHeight != 240)
|
||||
{
|
||||
Console.WriteLine("Change video mode to 240-line Mode4");
|
||||
FrameHeight = 240;
|
||||
FrameBuffer = new int[256 * 240];
|
||||
NameTableBase = CalcNameTableBase();
|
||||
|
@ -266,7 +247,6 @@ namespace BizHawk.Emulation.Consoles.Sega
|
|||
TmsMode = 4;
|
||||
if (FrameHeight != 192)
|
||||
{
|
||||
Console.WriteLine("Change video mode to 192-line Mode4");
|
||||
FrameHeight = 192;
|
||||
FrameBuffer = new int[256*192];
|
||||
NameTableBase = CalcNameTableBase();
|
||||
|
@ -391,6 +371,7 @@ namespace BizHawk.Emulation.Consoles.Sega
|
|||
RenderTmsSprites();
|
||||
} else if (TmsMode == 0) {
|
||||
RenderBackgroundM0();
|
||||
RenderTmsSprites();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3,10 +3,10 @@
|
|||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.30729</ProductVersion>
|
||||
<ProductVersion>9.0.21022</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{DD448B37-BA3F-4544-9754-5406E8094723}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>BizHawk.MultiClient</RootNamespace>
|
||||
<AssemblyName>BizHawk.MultiClient</AssemblyName>
|
||||
|
@ -87,6 +87,7 @@
|
|||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<EmbeddedResource Include="Gameboy\Debugger.resx">
|
||||
<DependentUpon>Debugger.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="MainForm.resx">
|
||||
<DependentUpon>MainForm.cs</DependentUpon>
|
||||
|
|
|
@ -157,7 +157,6 @@ namespace BizHawk.MultiClient
|
|||
genControls.BindMulti("P1 Start", Global.Config.GenP1Start);
|
||||
Global.GenControls = genControls;
|
||||
|
||||
|
||||
var TI83Controls = new Controller(TI83.TI83Controller);
|
||||
TI83Controls.BindMulti("0", "D0"); //numpad 4,8,6,2 (up/down/left/right) dont work in slimdx!! wtf!!
|
||||
TI83Controls.BindMulti("1", "D1");
|
||||
|
@ -181,9 +180,7 @@ namespace BizHawk.MultiClient
|
|||
TI83Controls.BindMulti("DIVIDE", "NumberPadSlash");
|
||||
TI83Controls.BindMulti("CLEAR", "Escape");
|
||||
TI83Controls.BindMulti("DOT", "NumberPadPeriod");
|
||||
|
||||
Global.TI83Controls = TI83Controls;
|
||||
|
||||
}
|
||||
|
||||
private static void FormDragEnter(object sender, DragEventArgs e)
|
||||
|
|
|
@ -300,8 +300,8 @@ DFA2AE07 V Enduro Racer (corrupted) SMS Insert hex byte $0D at offset $B3A1 to f
|
|||
5D5C50B3 Enduro Racer (JP) SMS
|
||||
C4BB1676 E-SWAT [A] SMS
|
||||
C10FCE39 E-SWAT [B] SMS
|
||||
8813514B "Excellent Dizzy Collection, The [Proto]" SMS
|
||||
AA140C9C "Excellent Dizzy Collection, The [SMS-GG]" SMS
|
||||
8813514B Excellent Dizzy Collection, The [Proto] SMS CMMapper,PAL
|
||||
AA140C9C Excellent Dizzy Collection, The [SMS-GG] SMS CMMapper,PAL
|
||||
EC788661 F1 SMS
|
||||
8AB10CB4 V F1 (first 128KB only) SMS
|
||||
EAEBF323 F-16 Fighter SMS
|
||||
|
@ -1899,12 +1899,12 @@ F397F041 Zoop [A] GG Product code 88830 (Europe?)
|
|||
3247FF8B Zoop [B] GG Product code 139048 (US?)
|
||||
590F9C54 D Zoop'em Up GG
|
||||
|
||||
26ECD094 "Black Onyx, The (JP)" SG
|
||||
26ECD094 The Black Onyx SG
|
||||
D8A87095 Bank Panic SG
|
||||
EA0F2691 Bomb Jack SG
|
||||
0B4BCA74 Borderline SG
|
||||
BE7ED0EB C_So! (JP) SG
|
||||
092F29D6 "Castle, The (JP)" SG
|
||||
092F29D6 The Castle SG
|
||||
D37BDA49 Chack'n Pop SG
|
||||
5970A12B Champion Baseball SG
|
||||
62B21E31 Champion Billiards SG
|
||||
|
|
Loading…
Reference in New Issue