diff options
author | Alexis Hovorka <[email protected]> | 2022-11-30 20:24:17 -0700 |
---|---|---|
committer | Alexis Hovorka <[email protected]> | 2022-11-30 20:24:17 -0700 |
commit | 339d5507ea8adc95f4bd6b0370ae4c8ddcb9d3db (patch) | |
tree | 638a618b0a49da64dfe2176a1c2daa031c5a7f51 | |
parent | ff4254830c6ed2d0ba94a66d833fc4e86f9ae6bd (diff) |
[refactor] Change canonical start address to 0040
-rw-r--r-- | rtl/boot.mem | 4 | ||||
-rw-r--r-- | src/f1.f1 | 124 | ||||
-rw-r--r-- | src/f1.prog | 96 |
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 @@ -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 |