summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Blake Kongslie2022-10-23 13:03:25 -0700
committerJulian Blake Kongslie2022-10-23 13:03:25 -0700
commit72dfa39b81269bb824a43b464a0ea8676bd5e631 (patch)
tree21b6cadf7da88721b1846628a8b61ee0d2c66df9
parentImprove error messages for unimplemented instructions (diff)
downloadbiggolf-72dfa39b81269bb824a43b464a0ea8676bd5e631.tar.xz
Add untested interrupt-based echo program with input buffer
-rw-r--r--programs/echo.pal67
1 files changed, 67 insertions, 0 deletions
diff --git a/programs/echo.pal b/programs/echo.pal
new file mode 100644
index 0000000..16d8fda
--- /dev/null
+++ b/programs/echo.pal
@@ -0,0 +1,67 @@
1/ vim: set sw=8 noexpandtab :
2
3*000
4
5INTRET, 0
6 JMP GOTINT
7
8INPUTY, 1000 / Address of youngest byte in input buffer
9INPUTO, 1000 / Address of oldest byte in input buffer
10
11*200
12
13/ Main program enables keyboard interrupt, then enters echo loop
14 KIE
15 ION
16LOOP, TSF / Call ECHO if printer is ready
17 JMS ECHO
18 JMP LOOP
19
20ECHO, 0
21 TAD INPUTO
22 CMA IAC / Negate
23 TAD INPUTY
24 SNA / Abandon echo if input buffer is empty (n.b. or full, because we don't have wrap bits)
25 JMP I ECHO
26 TAD I INPUTO / Read from input buffer
27 TLS / Print
28 JMS FIXO
29 JMP I ECHO
30
31GOTINT, KSF / Skip reading keyboard if nothing was typed
32 JMP NOIN
33 DCA SAVED
34 KRB / Read from keyboard
35 DCA I INPUTY / Write to input buffer
36 JMS FIXY
37 CLA
38 TAD SAVED
39NOIN, RMF
40 ION
41 JMP I INTRET
42
43/ Wrap INPUTY pointer at 2000 back to 1000
44FIXY, 0
45 TAD INPUTY
46 TAD [-2000]
47 SZA
48 JMP I FIXY
49 CLA
50 TAD [1000]
51 DCA INPUTY
52 JMP I FIXY
53
54/ Wrap INPUTO pointer at 2000 back to 1000
55FIXO, 0
56 TAD INPUTO
57 TAD [-2000]
58 SZA
59 JMP I FIXO
60 CLA
61 TAD [1000]
62 DCA INPUTO
63 JMP I FIXO
64
65*300
66
67SAVED, 0