aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexis Hovorka <[email protected]>2022-11-30 20:24:17 -0700
committerAlexis Hovorka <[email protected]>2022-11-30 20:24:17 -0700
commit339d5507ea8adc95f4bd6b0370ae4c8ddcb9d3db (patch)
tree638a618b0a49da64dfe2176a1c2daa031c5a7f51
parentff4254830c6ed2d0ba94a66d833fc4e86f9ae6bd (diff)
[refactor] Change canonical start address to 0040
-rw-r--r--rtl/boot.mem4
-rw-r--r--src/f1.f1124
-rw-r--r--src/f1.prog96
3 files changed, 55 insertions, 169 deletions
diff --git a/rtl/boot.mem b/rtl/boot.mem
index b60f36e..97bb41c 100644
--- a/rtl/boot.mem
+++ b/rtl/boot.mem
@@ -10,10 +10,10 @@
// 6 pointer
// 7 word
-// Setup \ .org 0000
+// Setup
2800 // 12000 \ addi 2,0,00
300F // 1400F \ addi 4,0,0F
-381F // 1601F \ addi 6,0,@data
+383F // 1603F \ addi 6,0,@data
// Loop start
340F // 1500F \ addi 5,0,0F
diff --git a/src/f1.f1 b/src/f1.f1
index 660e45a..bc39976 100644
--- a/src/f1.f1
+++ b/src/f1.f1
@@ -6,119 +6,18 @@
// start on a new line.
//
// Static variables:
-// 001F last char
+// 003F last char
//
// --------------------------------------------
-// 0020
-// addr table:
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-00000
-
-// --------------------------------------------
-
:getchar // -> char
-3201F // lw 2,0,@lastChar
+3203F // lw 2,0,@lastChar
3107E // lw 1,0,@uart
6117E // blz 1,-2
03122 // xor 3,1,2
03303 // msbl 3,3
6237B // bz 3,-5
-4101F // sw 1,0,@lastChar
+4103F // sw 1,0,@lastChar
01100 // lsbl 1,1
50700 // ret
@@ -188,15 +87,14 @@
4467F // | push 4
1667E // +-------
-34100 // lw 4,1,00
+24400 // lui 4,8000
+04414 // add 4,4,1
+34400 // lw 4,4,00
1207A // addi 2,0,-6
01423 // shl 1,4,2
-62103 // bz 1,@zero
22270 // lui 2,5C00
01121 // or 1,1,2
-67001 // j @write // TODO make this do single
-21170 // lui 1,3C00 // instruction calls instead
@writeword
1203F // addi 2,0,3F
@@ -263,8 +161,8 @@
:start
2677F // lui 6,FFC0 // Set up stack pointer
-14020 // addi 4,0,20 // Set up address counter
-4001F // sw 0,0,@lastChar
+24001 // lui 4,0040 // Set up address counter
+4003F // sw 0,0,@lastChar
:loop
@getchar
@@ -277,9 +175,11 @@
// if it's a colon, savelabel
1203A // addi 2,0,':'
02125 // sub 2,1,2
-65204 // bnz 2,@next
+65206 // bnz 2,@next
@getchar // Get next char (single char labels)
-44100 // sw 4,1,00 // Put current address in label
+22400 // lui 2,8000
+02214 // add 2,2,1
+44200 // sw 4,2,00 // Put current address in label
67014 // j @nextLine
// if it's an at sign, compilelabel
diff --git a/src/f1.prog b/src/f1.prog
index 10f5ca2..061b885 100644
--- a/src/f1.prog
+++ b/src/f1.prog
@@ -6,40 +6,25 @@
// start on a new line.
//
// Static variables:
-// 001F last char
+// 003F last char
//
// --------------------------------------------
-// 0020
-// addr table:
-00000 00000 00000 00000 00000 00000 00000 00000
-00000 00000 00000 00000 00000 00000 00000 00000
-00000 00000 00000 00000 00000 00000 00000 00000
-00000 00000 00000 00000 00000 00000 00000 00000
-00000 00000 00000 00000 00000 00000 00000 00000
-00000 00000 00000 00000 00000 00000 00000 00000
-00000 00000 00000 00000 00000 00000 00000 00000
-00000 00000 00000 00000 00000 00000 00000 00000
-00000 00000 00000 00000 00000 00000 00000 00000
-00000 00000 00000 00000 00000 00000 00000 00000
-00000 00000 00000 00000 00000 00000 00000 00000
-00000 00000 00000 00000 00000 00000 00000 00000
-
-
-// 0080
+
+// 0040
//:getchar // -> char
-3201F // lw 2,0,@lastChar
+3203F // lw 2,0,@lastChar
3107E // lw 1,0,@uart
6117E // blz 1,-2
03122 // xor 3,1,2
03303 // msbl 3,3
6237B // bz 3,-5
-4101F // sw 1,0,@lastChar
+4103F // sw 1,0,@lastChar
01100 // lsbl 1,1
50700 // ret
-// 0089
+// 0049
//:putchar // (char n)
3207E // lw 2,0,@uart
6127E // blz 2,-2
@@ -47,7 +32,7 @@
50700 // ret
-// 008D
+// 004D
//:octwrite // (char n)
12007 // addi 2,0,07
01120 // and 1,1,2
@@ -55,7 +40,7 @@
67078 // j @putchar
-// 0091
+// 0051
//:hexwrite // (char n)
1200F // addi 2,0,0F
01120 // and 1,1,2
@@ -67,7 +52,7 @@
67070 // j @putchar
-// 0099
+// 0059
//:writeword // (int word)
47600 // | push 7
4567F // | push 5
@@ -81,7 +66,7 @@
03354 // add 3,3,5
01437 // rol 1,4,3
//@octwrite
-27002 // lui 7,0080
+27001 // lui 7,0040
5770D // jalr 7,7,0D
15501 // addi 5,5,01
1357B // addi 3,5,-5
@@ -89,12 +74,12 @@
11400 // mv 1,4
//@hexwrite
-27002 // lui 7,0080
+27001 // lui 7,0040
57711 // jalr 7,7,11
1100A // addi 1,0,0A
//@putchar
-27002 // lui 7,0080
+27001 // lui 7,0040
57709 // jalr 7,7,09
16603 // +------
@@ -104,23 +89,22 @@
50700 // ret
-// 00B2
+// 0072
//:compilelabel // (char lbl)
47600 // | push 7
4467F // | push 4
1667E // +-------
-34100 // lw 4,1,00
+24400 // lui 4,8000
+04414 // add 4,4,1
+34400 // lw 4,4,00
1207A // addi 2,0,-6
01423 // shl 1,4,2
-62103 // bz 1,@zero
22270 // lui 2,5C00
01121 // or 1,1,2
-67001 // j @write // TODO make this do single
-21170 // lui 1,3C00 // instruction calls instead
//@writeword
-27002 // lui 7,0080
+27001 // lui 7,0040
57719 // jalr 7,7,19
1203F // addi 2,0,3F
@@ -128,7 +112,7 @@
2257E // lui 2,BF80
01121 // or 1,1,2
//@writeword
-27002 // lui 7,0080
+27001 // lui 7,0040
57719 // jalr 7,7,19
16602 // +------
@@ -137,7 +121,7 @@
50700 // ret
-// 00C6
+// 0088
//:ishex // (char c) -> bool
1207C // addi 2,0,-4
02123 // shl 2,1,2
@@ -164,7 +148,7 @@
50700 // ret
-// 00D9
+// 009B
//:findnewword // (bool echo)
47600 // | push 7
4467F // | push 4
@@ -173,11 +157,11 @@
14100 // mv 4,1
//@getchar
-27002 // lui 7,0080
+27001 // lui 7,0040
57700 // jalr 7,7,00
62402 // bz 4,2
//@putchar
-27002 // lui 7,0080
+27001 // lui 7,0040
57709 // jalr 7,7,09
// TODO currently only works at start of line
@@ -192,12 +176,12 @@
//:start
2677F // lui 6,FFC0 // Set up stack pointer
-14020 // addi 4,0,20 // Set up address counter
-4001F // sw 0,0,@lastChar
+24001 // lui 4,0040 // Set up address counter
+4003F // sw 0,0,@lastChar
//:loop
//@getchar
-27002 // lui 7,0080
+27001 // lui 7,0040
57700 // jalr 7,7,00
// if it's a newline, loop
@@ -208,11 +192,13 @@
// if it's a colon, savelabel
1203A // addi 2,0,':'
02125 // sub 2,1,2
-65204 // bnz 2,@next
+65206 // bnz 2,@next
//@getchar
-27002 // lui 7,0080 // Get next char (single char labels)
+27001 // lui 7,0040 // Get next char (single char labels)
57700 // jalr 7,7,00
-44100 // sw 4,1,00 // Put current address in label
+22400 // lui 2,8000
+02214 // add 2,2,1
+44200 // sw 4,2,00 // Put current address in label
67014 // j @nextLine
// if it's an at sign, compilelabel
@@ -220,10 +206,10 @@
02125 // sub 2,1,2
65206 // bnz 2,@next
//@getchar
-27002 // lui 7,0080
+27001 // lui 7,0040
57700 // jalr 7,7,00
//@compilelabel
-27002 // lui 7,0080
+27001 // lui 7,0040
57732 // jalr 7,7,32
14402 // addi 4,4,02
6700B // j @nextLine
@@ -231,12 +217,12 @@
// if it's 0-9A-F, increment
15100 // mv 5,1
//@ishex
-27003 // lui 7,00C0
-57709 // jalr 7,7,09
+27002 // lui 7,0080
+57708 // jalr 7,7,08
62107 // j @nextLine
11500 // mv 1,5
//@putchar
-27002 // lui 7,0080
+27001 // lui 7,0040
57709 // jalr 7,7,09
14401 // addi 4,4,01
4407F // sw 4,0,@led
@@ -245,14 +231,14 @@
11000 // mv 1,0
//@findnextword
-27003 // lui 7,00C0
-5771C // jalr 7,7,1C
+27002 // lui 7,0080
+5771B // jalr 7,7,1B
//@loop
-27003 // lui 7,00C0
-5772E // jalr 7,7,2E
+27002 // lui 7,0080
+5772D // jalr 7,7,2D
//@start
-27003 // lui 7,00C0
-5772B // jalr 7,7,2B
+27002 // lui 7,0080
+5772A // jalr 7,7,2A
6707D // j -3