Updated FlagTest program.

Updated assembler to only uppercase op lines (exclude memory section)
This commit is contained in:
2017-12-23 17:38:56 +00:00
parent 1efb9d69b5
commit bd3a4d5491
2 changed files with 30 additions and 24 deletions

View File

@@ -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)

View File

@@ -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:"