URL
https://opencores.org/ocsvn/a-z80/a-z80/trunk
Subversion Repositories a-z80
[/] [a-z80/] [trunk/] [tools/] [z80_pla_checker/] [source/] [ClassOpcodeTable.cs] - Rev 3
Compare with Previous | Blame | View Log
using System;
using System.Collections.Generic;
using System.IO;
namespace z80_pla_checker
{
/// <summary>
/// This class loads from a file the opcode table and provides
/// access functions to a table.
/// </summary>
class ClassOpcodeTable
{
/// <summary>
/// Contains the opcode description indexed by the opcode byte
/// </summary>
private readonly Dictionary<int, string> op = new Dictionary<int, string>();
/// <summary>
/// Loads an opcode table from a text file
/// </summary>
public void Load(string filename, int xxindex)
{
ClassLog.Log("Loading opcode table: " + filename);
try
{
string[] lines = File.ReadAllLines(filename);
op.Clear();
foreach (string line in lines)
{
string hex = line.Substring(xxindex, 2);
string instr = line.Substring(12);
int xx = Convert.ToInt32(hex, 16);
op[xx] = instr;
}
}
catch (Exception ex)
{
ClassLog.Log(ex.Message);
}
}
/// <summary>
/// Dumps the opcode table in a table format
/// The opcode numbers in the list t will be tagged (marked with *)
/// </summary>
public void Dump(List<int> t)
{
ClassLog.Log(new string('-', 242));
for (int y = 0; y < 16; y++)
{
string line = string.Format("{0:X} ", y);
for (int x = 0; x < 16; x++)
{
string opcode = "";
if (op.ContainsKey(y * 16 + x))
opcode = op[y * 16 + x];
if (opcode.Length > 12)
opcode = opcode.Substring(0, 12);
char tag = ' ';
if (t.Contains(y * 16 + x)) tag = '*';
line += string.Format(" |{0}{1,-12}", tag, opcode);
}
ClassLog.Log(line);
}
}
}
}