commit 78cd9981773a77e104c72d65ea170ad9dd604a98
parent 2598899e8986d15790de52216ac8f7525cd39915
Author: Andrew Alderwick <andrew@alderwick.co.uk>
Date: Sat, 10 Jul 2021 21:50:13 +0100
Added repl project skeleton
Diffstat:
1 file changed, 166 insertions(+), 0 deletions(-)
diff --git a/projects/software/repl.tal b/projects/software/repl.tal
@@ -0,0 +1,166 @@
+( repl
+
+ implemented: hardly anything
+
+ yet to implement: practically everything
+)
+
+( devices )
+
+|00 @System &vector $2 &pad $6 &r $2 &g $2 &b $2
+|20 @Screen &vector $2 &width $2 &height $2 &pad $2 &x $2 &y $2 &addr $2 &color $1
+|a0 @File &vector $2 &success $2 &offset $2 &pad $2 &name $2 &length $2 &load $2 &save $2
+
+( variables )
+
+|0000
+ @font [ &height $1 &cells $1 ]
+
+( init )
+
+|0100 ( -> )
+
+ ( theme )
+ #0fa7 .System/r DEO2
+ #0fa7 .System/g DEO2
+ #0fa7 .System/b DEO2
+
+ ;font1 ;load-font JSR2
+ ;body ;wrapped-write JSR2
+ ;cr JSR2
+ ;font2 ;load-font JSR2
+ ;body ;wrapped-write JSR2
+ ;cr JSR2
+ ;font3 ;load-font JSR2
+ ;body ;wrapped-write JSR2
+ ;cr JSR2
+ BRK
+
+ ;body ;write JSR2 POP2
+ #0000 .Screen/x DEO2
+ #00 .font/height LDZ .Screen/y DEO2
+ ;body ;write JSR2 POP2
+ BRK
+
+@load-font ( filename* -- )
+ DUP2 .File/name DEO2
+ ( find end of string for suffix )
+ &loop
+ #0001 ADD2
+ LDAk ,&loop JCN
+ ( suffix is cell size )
+ #0001 SUB2 LDAk #0f AND .font/cells STZ
+ ( search backwards for number )
+ &loop2
+ #0001 SUB2
+ LDAk DUP #2f GTH STH #3a LTH STHr #0101 NEQ2 ,&loop2 JCN
+ ( parse number to find font height )
+ #0001 STH2
+ &loop3
+ LDAk DUPk #2f GTH STH #3a LTH STHr #0101 NEQ2 ,&end-loop3 JCN
+ #30 SUB STHr MULk STH ADDr #0a MUL STH POP
+ #0001 SUB2
+ ,&loop3 JMP
+ &end-loop3
+ STH2r POP .font/height STZ
+ POP
+ POP2
+
+ .font/cells LDZ DUP MUL #08 MUL #01 ADD #00 .File/length DEO2
+ ;font-data .File/load DEO2
+
+ JMP2r
+
+@get-word-width ( string* -- string* width* )
+ DUP2 LIT2r 0000
+ &loop
+ LDAk DUP #20 GTH ,¬-end JCN
+ POP
+ POP2 STH2r
+ JMP2r
+
+ ¬-end
+ #00 SWP ;font-data ADD2 LDA
+ LITr 00 STH ADD2r
+ #0001 ADD2
+ ,&loop JMP
+
+@wrapped-write ( string* -- )
+ LDAk ,¬-end JCN
+ POP2
+ JMP2r
+
+ ¬-end
+ ,get-word-width JSR .Screen/x DEI2 ADD2 .Screen/width DEI2 LTH2 ,&no-cr JCN
+ ,cr JSR
+ &no-cr
+ ,write JSR
+ ,wrapped-write JMP
+
+@cr ( -- )
+ #0000 .Screen/x DEO2
+ .Screen/y DEI2 #00 .font/height LDZ ADD2 .Screen/y DEO2
+ JMP2r
+
+@write ( string* -- end-of-string* )
+ LDAk DUP ,¬-end JCN
+ POP
+ JMP2r
+
+ ¬-end
+ #00 SWP #00 .font/cells LDZ MUL2k MUL2 #0008 MUL2 #0100 ADD2 ( string* char* tile* )
+ ;font-data ADD2 .Screen/addr DEO2
+ .font/cells LDZ
+ &outer
+ DUP #00 EQU ,&end-outer JCN
+ .font/cells LDZ
+ &inner
+ DUP #00 EQU ,&end-inner JCN
+ #21 .Screen/color DEO
+ #0008 DUP2
+ .Screen/x DEI2 ADD2 .Screen/x DEO2
+ .Screen/addr DEI2 ADD2 .Screen/addr DEO2
+ #01 SUB
+ ,&inner JMP
+ &end-inner
+ #00 .font/cells LDZ #fff8 MUL2 .Screen/x DEI2 ADD2 .Screen/x DEO2
+ #0008 .Screen/y DEI2 ADD2 .Screen/y DEO2
+ POP
+ #01 SUB
+ ,&outer JMP
+ &end-outer
+ #00 .font/cells LDZ #fff8 MUL2 .Screen/y DEI2 ADD2 .Screen/y DEO2
+ POP
+ ;font-data ADD2 LDA #00 SWP .Screen/x DEI2 ADD2 .Screen/x DEO2
+ LDAk STH
+ #0001 ADD2
+ STHr #20 GTH ;write JCN2
+ JMP2r
+
+@body
+ 4927 6c6c 206d 616b 6520 6120 736f 756e
+ 6420 7468 6174 2773 2073 6f20 616c 6f6e
+ 6520 74 6861 7420 6e6f 206f 6e65 2063
+ 616e 206d 6973 7320 6974 2c20 7468 6174
+ 2077 686f 6576 6572 20 6865 6172 7320
+ 6974 2077 696c 6c20 7765 6570 2069 6e20
+ 7468 6569 7220 736f 756c 732c 20 616e
+ 6420 6865 6172 7468 7320 7769 6c6c 2073
+ 6565 6d20 7761 726d 6572 2c20 61 6e64
+ 2062 6569 6e67 2069 6e73 6964 6520 7769
+ 6c6c 2073 6565 6d20 6265 7474 6572 20
+ 746f 2061 6c6c 2077 686f 2068 6561 7220
+ 6974 2069 6e20 7468 6520 6469 7374 616e
+ 7420 746f 776e 732e 20 $1
+
+@font1
+ "projects/fonts/geneva24.uf3 $1
+@font2
+ "projects/fonts/venice14.uf2 $1
+@font3
+ "projects/fonts/orca8.uf1 $1
+ "projects/fonts/left8.uf1 $1
+ "projects/fonts/specter8.uf1 $1
+ "projects/fonts/atari8.uf1 $1
+
+@font-data