Vectrex: more disasm and bug fixes

This commit is contained in:
alyosha-tas 2019-04-09 15:44:37 -05:00
parent 9296092b84
commit 0d95943728
4 changed files with 196 additions and 16 deletions

View File

@ -811,27 +811,204 @@ namespace BizHawk.Emulation.Common.Components.MC6809
bytes.Add(d);
result = result.Replace("i8", string.Format("#{0:X2}h", d));
}
else if (result.Contains("d16"))
else if (result.Contains("i16"))
{
byte dlo = reader(addr++);
byte dhi = reader(addr++);
bytes.Add(dlo);
byte dlo = reader(addr++);
bytes.Add(dhi);
result = result.Replace("d16", string.Format("#{0:X2}{1:X2}h", dhi, dlo));
bytes.Add(dlo);
result = result.Replace("i16", string.Format("#{0:X2}{1:X2}h", dhi, dlo));
}
else if (result.Contains("a16"))
else if (result.Contains("ex16"))
{
byte dlo = reader(addr++);
byte dhi = reader(addr++);
bytes.Add(dlo);
byte dlo = reader(addr++);
bytes.Add(dhi);
result = result.Replace("a16", string.Format("#{0:X2}{1:X2}h", dhi, dlo));
bytes.Add(dlo);
result = result.Replace("ex16", "(" + string.Format("#{0:X2}{1:X2}h", dhi, dlo) + ")");
}
else if (result.Contains("a8"))
else if (result.Contains("ix16"))
{
byte d = reader(addr++);
bytes.Add(d);
result = result.Replace("a8", string.Format("#FF{0:X2}h", d));
string temp_reg = "";
switch ((d >> 5) & 3)
{
case 0: temp_reg = "X"; break;
case 1: temp_reg = "Y"; break;
case 2: temp_reg = "US"; break;
case 3: temp_reg = "SP"; break;
}
if ((d & 0x80) == 0)
{
short tempdis = (short)(d & 0x1F);
if (tempdis >= 16)
tempdis -= 32;
result = result.Replace("ix16", temp_reg + " + ea");
result = result.Replace("ea", string.Format("{0:N}h", tempdis));
}
else
{
if ((d & 0x10) == 0x10)
{
switch (d & 0xF)
{
case 0x0:
result = result.Replace("ix16", "???");
break;
case 0x1:
result = result.Replace("ix16","(" + temp_reg + ")++");
break;
case 0x2:
result = result.Replace("ix16", "???");
break;
case 0x3:
result = result.Replace("ix16", "--(" + temp_reg + ")");
break;
case 0x4:
result = result.Replace("ix16", "(" + temp_reg + ")");
break;
case 0x5:
result = result.Replace("ix16", "(" + temp_reg + " + B)");
break;
case 0x6:
result = result.Replace("ix16", "(" + temp_reg + " + A)");
break;
case 0x7:
result = result.Replace("ix16", "???");
break;
case 0x8:
byte e = reader(addr++);
bytes.Add(e);
result = result.Replace("ix16", "(" + temp_reg + " + ea)");
result = result.Replace("ea", string.Format("{0:X2}h", e));
break;
case 0x9:
byte f = reader(addr++);
bytes.Add(f);
byte g = reader(addr++);
bytes.Add(g);
result = result.Replace("ix16", "(" + temp_reg + " + ea)");
result = result.Replace("ea", string.Format("{0:X2}{1:X2}h", f, g));
break;
case 0xA:
result = result.Replace("ix16", "???");
break;
case 0xB:
result = result.Replace("ix16", "(" + temp_reg + " + D)");
break;
case 0xC:
temp_reg = "PC";
byte h = reader(addr++);
bytes.Add(h);
result = result.Replace("ix16", "(" + temp_reg + " + ea)");
result = result.Replace("ea", string.Format("{0:X2}h", h));
break;
case 0xD:
temp_reg = "PC";
byte i = reader(addr++);
bytes.Add(i);
byte j = reader(addr++);
bytes.Add(j);
result = result.Replace("ix16", "(" + temp_reg + " + ea)");
result = result.Replace("ea", string.Format("{0:X2}{1:X2}h", i, j));
break;
case 0xE:
result = result.Replace("ix16", "???");
break;
case 0xF:
if ((d >> 5) == 0)
{
byte k = reader(addr++);
bytes.Add(k);
byte l = reader(addr++);
bytes.Add(l);
result = result.Replace("ix16", "(" + string.Format("{0:X2}{1:X2}h", k, l) + ")");
}
else
{
result = result.Replace("ix16", "???");
}
break;
}
}
else
{
switch (d & 0xF)
{
case 0x0:
result = result.Replace("ix16", temp_reg + "+");
break;
case 0x1:
result = result.Replace("ix16", temp_reg + "++");
break;
case 0x2:
result = result.Replace("ix16", "-" + temp_reg);
break;
case 0x3:
result = result.Replace("ix16", "--" + temp_reg);
break;
case 0x4:
result = result.Replace("ix16", temp_reg);
break;
case 0x5:
result = result.Replace("ix16", temp_reg + " + B");
break;
case 0x6:
result = result.Replace("ix16", temp_reg + " + A");
break;
case 0x7:
result = result.Replace("ix16", "???");
break;
case 0x8:
byte e = reader(addr++);
bytes.Add(e);
result = result.Replace("ix16", temp_reg + " + ea");
result = result.Replace("ea", string.Format("{0:X2}h", e));
break;
case 0x9:
byte f = reader(addr++);
bytes.Add(f);
byte g = reader(addr++);
bytes.Add(g);
result = result.Replace("ix16", temp_reg + " + ea");
result = result.Replace("ea", string.Format("{0:X2}{1:X2}h", f, g));
break;
case 0xA:
result = result.Replace("ix16", "???");
break;
case 0xB:
result = result.Replace("ix16", temp_reg + " + D");
break;
case 0xC:
temp_reg = "PC";
byte h = reader(addr++);
bytes.Add(h);
result = result.Replace("ix16", temp_reg + " + ea");
result = result.Replace("ea", string.Format("{0:X2}h", h));
break;
case 0xD:
temp_reg = "PC";
byte i = reader(addr++);
bytes.Add(i);
byte j = reader(addr++);
bytes.Add(j);
result = result.Replace("ix16", temp_reg + " + ea");
result = result.Replace("ea", string.Format("{0:X2}{1:X2}h", i, j));
break;
case 0xE:
result = result.Replace("ix16", "???");
break;
case 0xF:
result = result.Replace("ix16", "???");
break;
}
}
}
}
else if (result.Contains("r8"))
{
@ -846,7 +1023,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809
ret.Append(string.Format("{0:X4}: ", origaddr));
foreach (var b in bytes)
ret.Append(string.Format("{0:X2} ", b));
while (ret.Length < 17)
while (ret.Length < 22)
ret.Append(' ');
ret.Append(result);
size = (ushort)(addr - origaddr);

View File

@ -399,7 +399,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809
// Illegal
break;
}
}
}
}
instr_pntr = 0;

View File

@ -205,7 +205,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809
SUB8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]);
break;
case SBC8:
SUB8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]);
SBC8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]);
break;
case CMP8:
CMP8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]);
@ -213,6 +213,9 @@ namespace BizHawk.Emulation.Common.Components.MC6809
case DEC16:
DEC16_Func(cur_instr[instr_pntr++]);
break;
case ADD8BR:
ADD8BR_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]);
break;
case TR:
TR_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]);
break;
@ -569,7 +572,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809
{
Disassembly = string.Format(
"{0} ",
disassemble ? Disassemble(Regs[PC], ReadMemory, out notused) : "---").PadRight(40),
disassemble ? Disassemble(Regs[PC], ReadMemory, out notused) : "---").PadRight(50),
RegisterInfo = string.Format(
"A:{0:X2} B:{1:X2} X:{2:X4} Y:{3:X4} US:{4:X4} SP:{5:X4} DP:{6:X2} CC:{7:X2} Cy:{8} {9}{10}{11}{12}{13}{14}{15}{16}",
Regs[A],

View File

@ -518,7 +518,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809
int Reg16_d = D;
int Reg16_s = Regs[src];
Reg16_d += Reg16_s;
Reg16_d -= Reg16_s;
FlagC = Reg16_d.Bit(16);
FlagZ = (Reg16_d & 0xFFFF) == 0;
@ -534,7 +534,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809
int Reg16_d = Regs[dest];
int Reg16_s = Regs[src];
Reg16_d += Reg16_s;
Reg16_d -= Reg16_s;
FlagC = Reg16_d.Bit(16);
FlagZ = (Reg16_d & 0xFFFF) == 0;