From 72dfa39b81269bb824a43b464a0ea8676bd5e631 Mon Sep 17 00:00:00 2001 From: Julian Blake Kongslie Date: Sun, 23 Oct 2022 13:03:25 -0700 Subject: Add untested interrupt-based echo program with input buffer --- programs/echo.pal | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 programs/echo.pal (limited to 'programs') 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 @@ +/ vim: set sw=8 noexpandtab : + +*000 + +INTRET, 0 + JMP GOTINT + +INPUTY, 1000 / Address of youngest byte in input buffer +INPUTO, 1000 / Address of oldest byte in input buffer + +*200 + +/ Main program enables keyboard interrupt, then enters echo loop + KIE + ION +LOOP, TSF / Call ECHO if printer is ready + JMS ECHO + JMP LOOP + +ECHO, 0 + TAD INPUTO + CMA IAC / Negate + TAD INPUTY + SNA / Abandon echo if input buffer is empty (n.b. or full, because we don't have wrap bits) + JMP I ECHO + TAD I INPUTO / Read from input buffer + TLS / Print + JMS FIXO + JMP I ECHO + +GOTINT, KSF / Skip reading keyboard if nothing was typed + JMP NOIN + DCA SAVED + KRB / Read from keyboard + DCA I INPUTY / Write to input buffer + JMS FIXY + CLA + TAD SAVED +NOIN, RMF + ION + JMP I INTRET + +/ Wrap INPUTY pointer at 2000 back to 1000 +FIXY, 0 + TAD INPUTY + TAD [-2000] + SZA + JMP I FIXY + CLA + TAD [1000] + DCA INPUTY + JMP I FIXY + +/ Wrap INPUTO pointer at 2000 back to 1000 +FIXO, 0 + TAD INPUTO + TAD [-2000] + SZA + JMP I FIXO + CLA + TAD [1000] + DCA INPUTO + JMP I FIXO + +*300 + +SAVED, 0 -- cgit v1.2.3