Implemented opcodes 9/12

The ones that don't work will throw exceptions if called
This commit is contained in:
Ferit Yiğit BALABAN
2021-11-05 01:04:26 +03:00
parent 76d42080ab
commit dc32874061

View File

@@ -1,4 +1,5 @@
using processor.Properties; using System;
using processor.Properties;
namespace processor namespace processor
{ {
@@ -44,15 +45,13 @@ namespace processor
case 12: case 12:
OpC(r, x, y); OpC(r, x, y);
break; break;
default:
break;
} }
} }
#region Opcode Methods #region Opcode Methods
private void Op1(int r, int x, int y) private void Op1(int r, int x, int y)
{ {
lblOpcode.Text = $"0x1"; lblOpcode.Text = @"0x1";
lblOpcodeDesc.Text = Resources._0x1En; lblOpcodeDesc.Text = Resources._0x1En;
int val = ReadRam(x * 16 + y); int val = ReadRam(x * 16 + y);
@@ -61,7 +60,7 @@ namespace processor
private void Op2(int r, int x, int y) private void Op2(int r, int x, int y)
{ {
lblOpcode.Text = $"0x2"; lblOpcode.Text = @"0x2";
lblOpcodeDesc.Text = Resources._0x2En; lblOpcodeDesc.Text = Resources._0x2En;
int val = x * 16 + y; int val = x * 16 + y;
@@ -70,64 +69,118 @@ namespace processor
private void Op3(int r, int x, int y) private void Op3(int r, int x, int y)
{ {
lblOpcode.Text = $"0x3"; lblOpcode.Text = @"0x3";
lblOpcodeDesc.Text = Resources._0x3En; lblOpcodeDesc.Text = Resources._0x3En;
int val = ReadRegister(r); int val = ReadRegister(r);
WriteRam(x * 16 + y, val); WriteRam(x * 16 + y, val);
} }
private void Op4(int r, int x, int y) private void Op4(int _, int r, int s)
{ {
lblOpcode.Text = $"0x4"; lblOpcode.Text = @"0x4";
lblOpcodeDesc.Text = Resources._0x4En; lblOpcodeDesc.Text = Resources._0x4En;
WriteRegister(s, ReadRegister(r));
} }
private void Op5(int r, int x, int y) private void Op5(int r, int s, int t)
{ {
lblOpcode.Text = $"0x5"; lblOpcode.Text = @"0x5";
lblOpcodeDesc.Text = Resources._0x5En; lblOpcodeDesc.Text = Resources._0x5En;
sbyte result = (sbyte)(Convert.ToSByte(ReadRegister(s)) + Convert.ToSByte(ReadRegister(t)));
WriteRegister(r, result);
} }
private void Op6(int r, int x, int y) private void Op6(int r, int s, int t)
{ {
lblOpcode.Text = $"0x6"; lblOpcode.Text = @"0x6";
lblOpcodeDesc.Text = Resources._0x6En; lblOpcodeDesc.Text = Resources._0x6En;
double storedS = Extensions.CalculateBinFloat(Convert.ToString(ReadRegister(s), 2));
double storedT = Extensions.CalculateBinFloat(Convert.ToString(ReadRegister(t), 2));
double sum = storedS + storedT;
throw new NotImplementedException();
} }
private void Op7(int r, int x, int y) private void Op7(int r, int s, int t)
{ {
lblOpcode.Text = $"0x7"; lblOpcode.Text = @"0x7";
lblOpcodeDesc.Text = Resources._0x7En; lblOpcodeDesc.Text = Resources._0x7En;
int registerS = ReadRegister(s);
int registerT = ReadRegister(t);
char[] bS = Convert.ToString(registerS, 2).PadLeft(8, '0').ToCharArray();
char[] bT = Convert.ToString(registerT, 2).PadLeft(8, '0').ToCharArray();
char[] bR = new char[8];
for (int i = 0; i < 8; i++)
{
bR[i] = Extensions.BooleanOr(int.Parse(bS[i].ToString()), int.Parse(bT[i].ToString())).ToString()[0];
}
string bRstr = new(bR);
WriteRegister(r, Convert.ToInt32(bRstr, 2));
} }
private void Op8(int r, int x, int y) private void Op8(int r, int s, int t)
{ {
lblOpcode.Text = $"0x8"; lblOpcode.Text = @"0x8";
lblOpcodeDesc.Text = Resources._0x8En; lblOpcodeDesc.Text = Resources._0x8En;
int registerS = ReadRegister(s);
int registerT = ReadRegister(t);
char[] bS = Convert.ToString(registerS, 2).PadLeft(8, '0').ToCharArray();
char[] bT = Convert.ToString(registerT, 2).PadLeft(8, '0').ToCharArray();
char[] bR = new char[8];
for (int i = 0; i < 8; i++)
{
bR[i] = Extensions.BooleanAnd(int.Parse(bS[i].ToString()), int.Parse(bT[i].ToString())).ToString()[0];
}
string bRstr = new(bR);
WriteRegister(r, Convert.ToInt32(bRstr, 2));
} }
private void Op9(int r, int x, int y) private void Op9(int r, int s, int t)
{ {
lblOpcode.Text = $"0x9"; lblOpcode.Text = @"0x9";
lblOpcodeDesc.Text = Resources._0x9En; lblOpcodeDesc.Text = Resources._0x9En;
int registerS = ReadRegister(s);
int registerT = ReadRegister(t);
char[] bS = Convert.ToString(registerS, 2).PadLeft(8, '0').ToCharArray();
char[] bT = Convert.ToString(registerT, 2).PadLeft(8, '0').ToCharArray();
char[] bR = new char[8];
for (int i = 0; i < 8; i++)
{
bR[i] = Extensions.BooleanXor(int.Parse(bS[i].ToString()), int.Parse(bT[i].ToString())).ToString()[0];
}
WriteRegister(r, Convert.ToInt32(new string(bR), 2));
} }
private void OpA(int r, int x, int y) private void OpA(int r, int x, int y)
{ {
lblOpcode.Text = $"0xA"; lblOpcode.Text = @"0xA";
lblOpcodeDesc.Text = Resources._0xAEn; lblOpcodeDesc.Text = Resources._0xAEn;
throw new NotImplementedException();
} }
private void OpB(int r, int x, int y) private void OpB(int r, int x, int y)
{ {
lblOpcode.Text = $"0xB"; lblOpcode.Text = @"0xB";
lblOpcodeDesc.Text = Resources._0xBEn; lblOpcodeDesc.Text = Resources._0xBEn;
throw new NotImplementedException();
} }
private void OpC(int r, int x, int y) private void OpC(int r, int x, int y)
{ {
lblOpcode.Text = $"0xC"; lblOpcode.Text = @"0xC";
lblOpcodeDesc.Text = Resources._0xCEn; lblOpcodeDesc.Text = Resources._0xCEn;
} }
#endregion #endregion