我第二次用 C# 编写 Z80 仿真器。第一次使用一堆 if 语句和函数调用非常慢,所以我改用 switch/case 重写。 VS2019 C#.NET 4
对于简单的指令执行来说,代码行数不多,但有些指令需要大量的代码,添加这么多内联代码会使代码难以阅读。
所以我想知道是否对标志使用函数调用,尤其是那些需要大量代码或为了速度而命中行数的标志。
例如:
case 188:
byteCount = 1;
mnemonic = "CP H ";
dest = int.Parse(txtRegA.Text, System.Globalization.NumberStyles.HexNumber);
src = int.Parse(txtRegH.Text, System.Globalization.NumberStyles.HexNumber);
result = dest - src;
// Zero Flag
if (result == 0) { ZeroFlag.Text = "1"; } else { ZeroFlag.Text = "0"; }
// Carry Flag
if (dest < result) { CarryFlag.Text = "1"; } else { CarryFlag.Text = "0"; }
SignFlag.Text = "1";
//N Flag
if (result > 127) { AddSubFlag.Text = "1"; } else { AddSubFlag.Text = "0"; }
// Overflow
//Subtract
if ((src>127 & dest >127) | ( src< 127 & dest <127)) { POFlag.Text = "0"; } else { POFlag.Text = "1"; }
// Add
//if ((src > 127 & dest <= 127) | (src < 127 & dest >= 127)) { POFlag.Text = "0"; } else { POFlag.Text = "1"; }
// Half Carry - Note: The Registers are already in HEX format
dest = Convert.ToInt32(txtRegA.Text.Substring(4, 4));
src = Convert.ToInt32(txtRegH.Text.Substring(4, 4));
// Subtract
if (dest < src) { HalfCarryFlag.Text = "1"; } else { HalfCarryFlag.Text = "0"; }
// Add
//result = dest + src;
//if ((dest + src)>31) { HalfCarryFlag.Text = "1"; } else { HalfCarryFlag.Text = "1"; }
run = true;
break;
我完全不确定我的半进位和溢出标志是否能正常工作。
并非所有指令都会影响所有标志,因此一些内联会更好。但是,多行标志...
思想评论