Updated FlagTest program.
Updated assembler to only uppercase op lines (exclude memory section)
This commit is contained in:
@@ -22,7 +22,7 @@ namespace SVM
|
|||||||
|
|
||||||
var lines = (from l in program.Replace("\t", " ").Split(Environment.NewLine)
|
var lines = (from l in program.Replace("\t", " ").Split(Environment.NewLine)
|
||||||
where !l.StartsWith('#') && !String.IsNullOrWhiteSpace(l)
|
where !l.StartsWith('#') && !String.IsNullOrWhiteSpace(l)
|
||||||
select l.Split('#').First().Trim().ToUpper()).ToArray();
|
select l.Split('#').First().Trim()).ToArray();
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
ushort mempos = 0;
|
ushort mempos = 0;
|
||||||
@@ -38,7 +38,7 @@ namespace SVM
|
|||||||
for (; i < lines.Length; i++)
|
for (; i < lines.Length; i++)
|
||||||
{
|
{
|
||||||
line = lines[i];
|
line = lines[i];
|
||||||
if (line == "MEMORY")
|
if (line.ToUpper() == "MEMORY")
|
||||||
{
|
{
|
||||||
i++;
|
i++;
|
||||||
break;
|
break;
|
||||||
@@ -72,7 +72,7 @@ namespace SVM
|
|||||||
}
|
}
|
||||||
|
|
||||||
parts = line.Split(" ", 2, StringSplitOptions.RemoveEmptyEntries);
|
parts = line.Split(" ", 2, StringSplitOptions.RemoveEmptyEntries);
|
||||||
var op = parts[0];
|
var op = parts[0].ToUpper();
|
||||||
if (op == "ORIGIN")
|
if (op == "ORIGIN")
|
||||||
{
|
{
|
||||||
Debug.Assert(parts.Length == 2);
|
Debug.Assert(parts.Length == 2);
|
||||||
@@ -103,7 +103,7 @@ namespace SVM
|
|||||||
var instr = instructions.First(x => x.ASM == op);
|
var instr = instructions.First(x => x.ASM == op);
|
||||||
|
|
||||||
Dictionary<string, ushort> markerRefs = new Dictionary<string, ushort>();
|
Dictionary<string, ushort> markerRefs = new Dictionary<string, ushort>();
|
||||||
var bytecode = instr.Encode(parts.Length > 1 ? parts[1] : string.Empty, markerRefs);
|
var bytecode = instr.Encode(parts.Length > 1 ? parts[1].ToUpper() : string.Empty, markerRefs);
|
||||||
if (markerRefs != null && markerRefs.Count > 0)
|
if (markerRefs != null && markerRefs.Count > 0)
|
||||||
{
|
{
|
||||||
foreach (var mRef in markerRefs)
|
foreach (var mRef in markerRefs)
|
||||||
|
|||||||
@@ -1,29 +1,34 @@
|
|||||||
ALIAS F_CONSTS 0xFF00
|
ALIAS F_CONSTS M0xFF00
|
||||||
ALIAS STR_ENABLED 0x100
|
ALIAS STR_ENABLED I0x100
|
||||||
ALIAS STR_AVAILABLE 0x110
|
ALIAS STR_AVAILABLE I0x110
|
||||||
ALIAS STR_READBLOCK 0x120
|
ALIAS STR_READBLOCK I0x120
|
||||||
ALIAS STR_READAVAILABLE 0x130
|
ALIAS STR_READAVAILABLE I0x130
|
||||||
ALIAS STR_YES 0x140
|
ALIAS STR_YES I0x141
|
||||||
ALIAS STR_NO 0x150
|
ALIAS STR_NO I0x150
|
||||||
|
ALIAS STR_TITLE I0x160
|
||||||
|
|
||||||
ORIGIN 0
|
ORIGIN 0
|
||||||
LOAD D M F_CONSTS # Read the flag into reg D
|
LOAD A STR_TITLE
|
||||||
|
CALL :WSTR
|
||||||
|
CALL :WNL
|
||||||
|
|
||||||
LOAD A I STR_ENABLED
|
LOAD D F_CONSTS # Read the flag into reg D
|
||||||
|
|
||||||
|
LOAD A STR_ENABLED
|
||||||
CALL :WSTR
|
CALL :WSTR
|
||||||
JBS D 2 :ENYES # Check for enabled
|
JBS D 2 :ENYES # Check for enabled
|
||||||
LOAD A I STR_NO # Set str to NO if enabled bit not set
|
LOAD A STR_NO # Set str to NO if enabled bit not set
|
||||||
JMP :ENWR
|
JMP :ENWR
|
||||||
:ENYES LOAD A I STR_YES
|
:ENYES LOAD A STR_YES
|
||||||
:ENWR CALL :WSTR
|
:ENWR CALL :WSTR
|
||||||
CALL :WNL
|
CALL :WNL
|
||||||
|
|
||||||
LOAD A I STR_READAVAILABLE
|
LOAD A STR_READAVAILABLE
|
||||||
CALL :WSTR
|
CALL :WSTR
|
||||||
JBS D 4 :RAYES
|
JBS D 4 :RAYES
|
||||||
LOAD A I STR_NO
|
LOAD A STR_NO
|
||||||
JMP :RAWR
|
JMP :RAWR
|
||||||
:RAYES LOAD A I STR_YES
|
:RAYES LOAD A STR_YES
|
||||||
:RAWR CALL :WSTR
|
:RAWR CALL :WSTR
|
||||||
CALL :WNL
|
CALL :WNL
|
||||||
|
|
||||||
@@ -44,9 +49,10 @@ ORIGIN 0
|
|||||||
RET
|
RET
|
||||||
|
|
||||||
MEMORY
|
MEMORY
|
||||||
0x100 "Enabled "
|
0x100 "Enabled: "
|
||||||
0x110 "Available "
|
0x110 "Available: "
|
||||||
0x120 "ReadBlock "
|
0x120 "Read Block: "
|
||||||
0x130 "ReadAvailable "
|
0x130 "Read Available: "
|
||||||
0x140 "Yes"
|
0x141 "Yes"
|
||||||
0x150 "No"
|
0x150 "No"
|
||||||
|
0x160 "Flag CONSTS:"
|
||||||
Reference in New Issue
Block a user