From 9f4aa97822adc791f700670ef0fc7636849563b7 Mon Sep 17 00:00:00 2001 From: Julian Blake Kongslie Date: Sat, 29 Oct 2022 18:18:26 -0700 Subject: Understanding interrupt handling within SIMH (see echo_int.pal) Add list of Bugs Add event log file parser More changes associated with widening the ctlregs (FIXME add a typedef) Add some keyboard instructions --- programs/echo.pal | 6 +-- programs/echo_int.pal | 58 +++++++++++++++++++++++ programs/echo_optimal.pal | 67 ++++++++++++++++++++++++++ programs/fib_mike.pal | 117 ++++++++++++++++++++++++++++++++++++++++++++++ programs/mike_fib.pal | 117 ---------------------------------------------- 5 files changed, 244 insertions(+), 121 deletions(-) create mode 100644 programs/echo_int.pal create mode 100644 programs/echo_optimal.pal create mode 100644 programs/fib_mike.pal delete mode 100644 programs/mike_fib.pal (limited to 'programs') diff --git a/programs/echo.pal b/programs/echo.pal index 4e59623..83b46e8 100644 --- a/programs/echo.pal +++ b/programs/echo.pal @@ -1,13 +1,11 @@ / vim: set sw=8 noexpandtab : *200 + TFL LOOP, TSF - JMS ECHO JMP LOOP - -ECHO, 0 WAIT, KSF JMP WAIT KRB TLS - JMP I ECHO + JMP LOOP diff --git a/programs/echo_int.pal b/programs/echo_int.pal new file mode 100644 index 0000000..62886ff --- /dev/null +++ b/programs/echo_int.pal @@ -0,0 +1,58 @@ +/ vim: set sw=8 noexpandtab : + +*000 + +INTRET, 0 + JMP GOTINT + +*010 + +HEAD, 7777 / because preincrement +TAIL, 7777 + +*200 + + CLA IAC + KIE + ION + CLA +LOOP, TAD TAIL + CMA IAC + TAD HEAD + SNA + JMP LOOP + CLA + CDF 0010 + TAD I TAIL + CDF 0000 + IOF / critical section + TLS +BUSY, TSF / FIXME: remove busy wait inside IOF (see echo_optimal.pal) + JMP BUSY + TCF + ION + CLA / end critical section + JMP LOOP + +*400 + +SAVEA, 0 +SAVEF, 0 + +GOTINT, DCA SAVEA + GTF + AND (7577) + DCA SAVEF + KSF + JMP RETINT + KRB + CDF 0010 + DCA I HEAD + CDF 0000 +RETINT, CLA + TAD SAVEF + RTF + CLA + TAD SAVEA + ION + JMP I INTRET diff --git a/programs/echo_optimal.pal b/programs/echo_optimal.pal new file mode 100644 index 0000000..1281309 --- /dev/null +++ b/programs/echo_optimal.pal @@ -0,0 +1,67 @@ +/ vim: set sw=8 noexpandtab : + +*000 + +INTRET, 0 + JMP GOTINT + +*010 + +HEAD, 7777 / because preincrement +TAIL, 7777 + +*100 + +TTBUSY, 0 / FIXME: sometimes we get wedged with TTBUSY=1, but TT flag is clear (no TT interrupt occurs) + +*200 + + CLA IAC + KIE + ION + CLA +LOOP, TAD TTBUSY + SZA + JMP LOOP + TAD TAIL + CMA IAC + TAD HEAD + SNA + JMP LOOP + CLA + CDF 0010 + TAD I TAIL + CDF 0000 + IOF / critical section + TPC + CLA IAC + ION + DCA TTBUSY / end critical section + JMP LOOP + +*400 + +SAVEA, 0 +SAVEF, 0 + +GOTINT, DCA SAVEA + GTF + AND (7577) + DCA SAVEF + TSF + JMP KBIN + DCA TTBUSY + TCF +KBIN, KSF + JMP RETINT + KRB + CDF 0010 + DCA I HEAD + CDF 0000 +RETINT, CLA + TAD SAVEF + RTF + CLA + TAD SAVEA + ION + JMP I INTRET diff --git a/programs/fib_mike.pal b/programs/fib_mike.pal new file mode 100644 index 0000000..a20a843 --- /dev/null +++ b/programs/fib_mike.pal @@ -0,0 +1,117 @@ + *200 +MAIN, CLA + TAD (-26) + DCA FIBN + DCA FIB0 + IAC + DCA FIB1 +LOOP, CLA + TAD FIB0 + JMS PUTN + CLA + TAD (012) + JMS PUTC + CLA + TAD FIB0 + TAD FIB1 + DCA FIB2 + TAD FIB1 + DCA FIB0 + TAD FIB2 + DCA FIB1 + ISZ FIBN + JMP LOOP +EXIT, HLT + CLA IAC + DCA FIB1 + DCA FIB0 + JMP MAIN +PUTN, 0 + JMS ITOA + CMA IAC + IAC + CMA IAC + DCA 10 +PUTNL, CLA + TAD I 10 + SPA + JMP I PUTN + TAD (60) + JMS PUTC + JMP PUTNL +PUTC, 0 + TLS + TSF + JMP .-1 + JMP I PUTC +ITOA, 0 + DCA ITOAV + DCA ITOAD + DCA ITOAD+1 + DCA ITOAD+2 + DCA ITOAD+3 + TAD (-14) + DCA ITOAN +ITOAL, CLL / LOOP OVER BINARY INPUT BITS + TAD ITOAD+3 + JMS ITOA2X + DCA ITOAD+3 + TAD ITOAD+2 + JMS ITOA2X + DCA ITOAD+2 + TAD ITOAD+1 + JMS ITOA2X + DCA ITOAD+1 + TAD ITOAD + JMS ITOA2X + DCA ITOAD + CLL + TAD ITOAV / SHIFT MSB OUT OF INPUT VALUE + RAL + DCA ITOAV + RAL + TAD ITOAD+3 / ADD SHIFTED-OUT MSB TO DECIMAL LSD + DCA ITOAD+3 + ISZ ITOAN + JMP ITOAL / NEXT LOOP ITERATION + TAD (ITOAD) + DCA ITOAR +ITOAJ, TAD I ITOAR + SZA + JMP ITOAX + ISZ ITOAR + TAD I ITOAR + SZA + JMP ITOAX + ISZ ITOAR + TAD I ITOAR + SZA + JMP ITOAX + ISZ ITOAR +ITOAX, CLA + TAD ITOAR + JMP I ITOA +ITOA2X, 0 + RAL / PUTS 0 IN LINK + DCA ITOAT + TAD (-12) + TAD ITOAT / PUTS 1 IN LINK IF WRAPPED + SMA + DCA ITOAT + CLA + TAD ITOAT + JMP I ITOA2X +FIB0, 0 +FIB1, 1 +FIB2, 0 +FIBN, -27 +ITOAD, 0 / OUTPUT DIGITS (MSD FIRST) + 0 + 0 + 0 + 4000 / OUTPUT SENTINEL +ITOAN, 0 / INPUT BITS LOOP COUNTER +ITOAR, 0 / POINTER TO FIRST NONZERO DIGIT +ITOAT, 0 / SCRATCHPAD FOR ITOA2X +ITOAV, 0 / VALUE BEING CONVERTED (TEMPORARY) +$ diff --git a/programs/mike_fib.pal b/programs/mike_fib.pal deleted file mode 100644 index 6f56109..0000000 --- a/programs/mike_fib.pal +++ /dev/null @@ -1,117 +0,0 @@ - *200 -MAIN, CLA - TAD (-26) - DCA FIBN - DCA FIB0 - IAC - DCA FIB1 -LOOP, CLA - TAD FIB0 - JMS PUTN - CLA - TAD (054) - JMS PUTC - CLA - TAD FIB0 - TAD FIB1 - DCA FIB2 - TAD FIB1 - DCA FIB0 - TAD FIB2 - DCA FIB1 - ISZ FIBN - JMP LOOP -EXIT, HLT - CLA IAC - DCA FIB1 - DCA FIB0 - JMP MAIN -PUTN, 0 - JMS ITOA - CMA IAC - IAC - CMA IAC - DCA 10 -PUTNL, CLA - TAD I 10 - SPA - JMP I PUTN - TAD (60) - JMS PUTC - JMP PUTNL -PUTC, 0 - TLS - TSF - JMP .-1 - JMP I PUTC -ITOA, 0 - DCA ITOAV - DCA ITOAD - DCA ITOAD+1 - DCA ITOAD+2 - DCA ITOAD+3 - TAD (-14) - DCA ITOAN -ITOAL, CLL / LOOP OVER BINARY INPUT BITS - TAD ITOAD+3 - JMS ITOA2X - DCA ITOAD+3 - TAD ITOAD+2 - JMS ITOA2X - DCA ITOAD+2 - TAD ITOAD+1 - JMS ITOA2X - DCA ITOAD+1 - TAD ITOAD - JMS ITOA2X - DCA ITOAD - CLL - TAD ITOAV / SHIFT MSB OUT OF INPUT VALUE - RAL - DCA ITOAV - RAL - TAD ITOAD+3 / ADD SHIFTED-OUT MSB TO DECIMAL LSD - DCA ITOAD+3 - ISZ ITOAN - JMP ITOAL / NEXT LOOP ITERATION - TAD (ITOAD) - DCA ITOAR -ITOAJ, TAD I ITOAR - SZA - JMP ITOAX - ISZ ITOAR - TAD I ITOAR - SZA - JMP ITOAX - ISZ ITOAR - TAD I ITOAR - SZA - JMP ITOAX - ISZ ITOAR -ITOAX, CLA - TAD ITOAR - JMP I ITOA -ITOA2X, 0 - RAL / PUTS 0 IN LINK - DCA ITOAT - TAD (-12) - TAD ITOAT / PUTS 1 IN LINK IF WRAPPED - SMA - DCA ITOAT - CLA - TAD ITOAT - JMP I ITOA2X -FIB0, 0 -FIB1, 1 -FIB2, 0 -FIBN, -27 -ITOAD, 0 / OUTPUT DIGITS (MSD FIRST) - 0 - 0 - 0 - 4000 / OUTPUT SENTINEL -ITOAN, 0 / INPUT BITS LOOP COUNTER -ITOAR, 0 / POINTER TO FIRST NONZERO DIGIT -ITOAT, 0 / SCRATCHPAD FOR ITOA2X -ITOAV, 0 / VALUE BEING CONVERTED (TEMPORARY) -$ -- cgit v1.2.3