Digibarn Stories:
The "SacState" or "Bill Pentz" 8008 Machine of 1972-73

Full dump of 1702 PROMs and disassembly of 8008 code
(Summer-Fall 2010)

Dwight Elvey (and his son) dumping the SacState 8008 PROMs (Sept 2010)
Disassembly by James A. Markevitch
Download this listing here, and the binaries (eight files for eight PROMs) Zip archive here
* Annotated disassembly listing of the SacState-8008-PROMs-dumps
* Updated 2/10/11 based on new PROM dump
*
* Comments containing "CHECK" are notes where more though
* needs to be put in to either fix a problem or clarify the
* intent of the code, once understood.
*
* Open issues:
*
* Apparently, all I/O was via the same channel. What was
* connected to the channel? There appears to be some sort
* of storage based on 128-byte records, more likely memory
* than disk.
*
* Todo:
*
* Reverse-engineer the remaining monitor commands.
* Reverse-engineer the meaning of each RAM variable.
*
**************************************************************
*
* This appears to be a monitor that includes commands to
* edit a 128-byte buffer (at location 4200 in RAM) and to
* read/write the buffer to some device (memory or disk).
* It appears that a rudimentary filesystem is built on the
* device using linked lists of 128-byte blocks.
*
**************************************************************
*
* The following lists some of the sequences that are sent
* by some of the subroutines.
*
* RDBUF
* Output 033 046 044 ADR 021, r128, skip 1
* WRBUF
* Output 033 046 046 ADR 022 w128 024
* FUN60
* Output 033 047 041 ADR 022 w127 024
*033 067 065
* FUN102
* Output 033 067 067 033 014
*S03652
* S03652
* Output 033 046 041 ADR 021 skip1
*033 046 004 021 r128 skip1
*...
*023
*
* "ADR" is a 3-byte sequence that appears to specify the
* record number. The first byte has the range 060 - 071
* (ASCII digits), the second byte has the range 060 - 071
* (ASCII digits), and the third byte has the range 100 - 137.
*
**************************************************************
*
* Monitor commands:
* ! write buffer to AD000
* * set RAM036 flag
* + increment AD000 by 1
* +n increment AD000 by n
* - decrement AD000 by 1
* -n decrement AD000 by n
* : clear RAM036 flag
* = display AD000
* =nnn set AD000 to nnn
* @ fill buffer with 026
*
* External references
*
04070 L04070 EQU 04070 ; Trampoline for indirect jump
*
* Definitions
*
00002 CTRLB EQU 002
00011 CHRHT EQU 011
00012 CHRLF EQU 012
00015 CHRCR EQU 015
00035 CHRGS EQU 035
*
00010 RAMPG EQU 010 ; Value of H for RAM accesses
00000 ROMPG EQU 000 ; Value of H for ROM accesses
*
* RAM memory locations
*
00000 RAM000 EQU 000
00000 AD000 EQU 000
00003 AD003 EQU 003
00006 INBUF EQU 006 ; Command input buffer
00056 AD056 EQU 056
00021 RAM021 EQU 021
00024 RAM024 EQU 024
00025 RAM025 EQU 025
00026 RAM026 EQU 026
00027 RAM027 EQU 027
00030 RAM030 EQU 030
00036 RAM036 EQU 036
00047 RAM047 EQU 047
00050 RAM050 EQU 050
00070 INDJMP EQU 070 ; Trampoline for indirect jump
00200 RAM200 EQU 200
*
00000 ORG 00000
00000 103 INP 1
00001 044 114 NDI 114
00003 104 00141 JMP L00141
00006 000
00007 000
00010 007
00011 037 PROMPT DEF 037,015,012,077
00012 015
00013 012
00014 077
00015 035 C015 DEF 035,067,177,040,100,037
00016 067
00017 177
00020 040
00021 100
00022 037
00023 000
00024 100
00025 100
00026 000
00027 040 C027 DEF 040
*
* Commands recognized by the monitor.
* The order of the commands matches the order in FUNTAB
* below.
*
00030 041 CMDTAB DEF 041 ; !
00031 043 DEF 043 ; sharp
00032 046 DEF 046 ; &
00033 052 DEF 052 ; *
00034 053 DEF 053 ; +
00035 055 DEF 055 ; -
00036 057 DEF 057 ; /
00037 072 DEF 072 ; :
00040 075 DEF 075 ; =
00041 100 DEF 100 ; @
00042 144 DEF 144 ; d
00043 146 DEF 146 ; e
00044 154 DEF 154 ; l
00045 162 DEF 162 ; r
00046 163 DEF 163 ; s
00047 164 DEF 164 ; t
00050 165 DEF 165 ; u
00051 172 DEF 172 ; z
00052 134 DEF 134 ; \
00053 136 DEF 136 ; ^
00054 174 DEF 174 ; |
00055 176 DEF 176 ; ~
*
* Table of functions to call, based on command entered
*
00056 314 006 FUNTAB DAD FUN56 ; ! write buffer to AD000
00060 045 007 DAD FUN60 ; sharp
00062 176 001 DAD FUN62 ; &
00064 053 004 DAD FUN64 ; * set RAM036 flag
00066 156 002 DAD FUN66 ; + increment AD000
00070 207 002 DAD FUN70 ; - decrement AD000
00072 240 002 DAD FUN72 ; /
00074 046 004 DAD FUN74 ; : clear RAM036 flag
00076 245 005 DAD FUN76 ; = set/display AD000
00100 141 007 DAD FUN100 ; @ fill buffer with 026
00102 230 007 DAD FUN102 ; d
00104 013 006 DAD FUN104 ; e
00106 144 004 DAD FUN106 ; l
00110 070 006 DAD FUN110 ; r
00112 246 004 DAD FUN112 ; s
00114 372 004 DAD FUN114 ; t
00116 060 004 DAD FUN116 ; u
00120 300 004 DAD FUN120 ; z
00122 247 002 DAD FUN122 ; \
00124 101 001 DAD FUN124 ; ^
00126 355 002 DAD FUN126 ; |
00130 365 002 DAD FUN130 ; ~
00132 010 C132 DEF 010,033,070,140,010,033,073
00133 033
00134 070
00135 140
00136 010
00137 033
00140 073
00141 150 00160 L00141 JTZ L00160
00144 044 104 NDI 104
00146 013 RFZ
00147 167 OUT 33
00150 157 OUT 27
00151 111 INP 4
00152 044 001 NDI 001
00154 013 RFZ
00155 104 00217 JMP L00217
00160 106 03267 L00160 CAL S03267
00163 056 010 LHI RAMPG
00165 066 000 LLI RAM000
00167 250 L00167 XRA ; Loop, clearing low 128 bytes of RAM
00170 370 LMA
00171 060 INL
00172 306 LAL
00173 002 RLC
00174 100 00167 JFC L00167
00177 066 050 LLI RAM050
00201 076 104 LMI 104
00203 066 021 LLI RAM021
00205 076 037 LMI 037
00207 066 024 LLI RAM024
00211 076 140 LMI 140
00213 066 026 LLI RAM026
00215 076 065 LMI 065
00217 106 00225 L00217 CAL S00225
00222 104 00217 JMP L00217
00225 006 024 S00225 LAI 024
00227 106 03753 CAL PUTCHR
00232 106 02631 CAL S02631
00235 250 XRA
00236 056 010 LHI RAMPG
00240 066 025 LLI RAM025
00242 370 LMA
00243 066 030 LLI RAM030
00245 370 LMA
00246 056 000 LHI ROMPG
00250 066 011 LLI PROMPT
00252 016 004 LBI 004
00254 106 02773 CAL PUTSTR
00257 026 000 LCI 000
00261 056 010 LHI RAMPG
00263 066 005 LLI INBUF-1
00265 060 L00265 INL
00266 106 03725 L00266 CAL GETCHR
00271 074 035 CPI CHRGS
00273 150 02437 JTZ L02437 ; CHECK GS is special
00276 074 002 CPI CTRLB
00300 150 01556 JTZ L01556 ; CHECK ctrl-B is special
00303 074 015 CPI CHRCR
00305 150 00430 JTZ L00430 ; Carriage-return: done
00310 074 042 CPI 042
00312 150 00742 JTZ L00742 ; CHECK " is special
00315 106 03753 CAL PUTCHR ; Echo the character
00320 074 011 CPI CHRHT
00322 150 00266 JTZ L00266 ; Ignore tabs
00325 074 012 CPI CHRLF
00327 053 RTZ ; Line-feed aborts input
00330 074 075 CPI 075
00332 110 00337 JFZ L00337
00335 026 001 LCI 001 ; Equals-sign sets C REG
00337 074 141 L00337 CPI 141
00341 140 00346 JTC L00346
00344 026 001 LCI 001 ; Lower-case sets C REG
00346 074 140 L00346 CPI 140
00350 053 RTZ ; Back-quote aborts input
00351 310 LBA
00352 250 XRA
00353 272 CPC
00354 301 LAB
00355 110 00424 JFZ L00424 ; C REG non-zero: ASCII input
00360 074 060 CPI 060
00362 140 00424 JTC L00424 ; Not a digit
00365 074 072 CPI 072
00367 100 00424 JFC L00424 ; Not a digit
00372 044 017 NDI 017 ; Digit, so input decimal number
00374 310 LBA
00375 106 02724 CAL GETNUM
00400 377 HLT ; CHECK should be LMB?
00401 060 INL
00402 074 015 CPI CHRCR
00404 150 00430 JTZ L00430 ; Carriage-return, so done
00407 061 DCL
00410 336 LDL
00411 066 006 LLI INBUF
00413 006 046 LAI 046
00415 277 CPM
00416 363 LLD
00417 110 00424 JFZ L00424
00422 026 001 LCI 001 ; Ampersand sets C REG
00424 371 L00424 LMB
00425 104 00265 JMP L00265
00430 370 L00430 LMA
* Use the first character in the receive buffer to look
* up the corresponding function to call. When found,
* copy it into a "trampoline" in RAM and perform an
* indirect jump to it.
00431 066 006 LLI INBUF
00433 317 LBM
00434 056 000 LHI ROMPG
00436 066 027 LLI 027
00440 006 056 L00440 LAI 056
00442 276 CPL ; End of table reached?
00443 053 RTZ ; Yes, unknown command, return
00444 307 LAM
00445 060 INL
00446 271 CPB ; Command found?
00447 110 00440 JFZ L00440 ; No, try next entry
00452 306 LAL
00453 024 031 SUI 031 ; A now contains offset of entry
00455 022 RAL ; ... times 2
00456 004 056 ADI 056 ; ... plus base of table
00460 360 LLA ; (HL) points to entry in table
00461 337 LDM
00462 060 INL
00463 347 LEM ; E,D contain function addr
00464 056 010 LHI RAMPG
00466 066 070 LLI INDJMP
00470 076 104 LMI 104 ; JMP instruction
00472 060 INL
00473 373 LMD
00474 060 INL
00475 374 LME
00476 104 04070 JMP L04070 ; Indirect jump to function
00501 066 000 FUN124 LLI AD000
00503 106 03172 CAL DECADR
00506 106 03445 CAL FUN60
00511 066 000 LLI AD000
00513 106 03222 CAL INCADR
00516 066 000 LLI AD000
00520 106 03222 CAL INCADR
00523 066 000 LLI AD000
00525 106 02705 CAL RESADR
00530 066 056 LLI AD056
00532 106 02677 CAL SAVADR
00535 066 000 LLI AD000
00537 106 03172 CAL DECADR
00542 006 004 LAI 004
00544 106 03543 CAL FILBUF
00547 106 03117 CAL S03117
00552 066 200 LLI 200
00554 076 006 LMI INBUF
00556 060 INL
00557 106 02677 CAL SAVADR
00562 066 000 LLI AD000
00564 106 02705 CAL RESADR
00567 106 03321 CAL WRBUF
00572 106 03142 CAL S03142
00575 007 RET
00576 066 047 FUN62 LLI 047
00600 076 000 LMI 000
00602 066 000 L00602 LLI AD000
00604 106 02705 CAL RESADR
00607 066 000 LLI AD000
00611 106 03222 CAL INCADR
00614 106 03365 CAL RDBUF
00617 066 200 LLI 200
00621 006 006 LAI 006
00623 277 CPM
00624 150 00725 JTZ L00725
00627 006 004 LAI 004
00631 277 CPM
00632 150 00674 JTZ L00674
00635 066 011 LLI INBUF+3
00637 106 02705 CAL RESADR
00642 106 03321 CAL WRBUF
00645 066 011 LLI INBUF+3
00647 106 03222 CAL INCADR
00652 006 076 LAI 076
00654 066 007 LLI INBUF+1
00656 277 CPM
00657 150 00602 JTZ L00602
00662 307 LAM
00663 066 047 LLI 047
00665 317 LBM
00666 010 INB
00667 271 CPB
00670 371 LMB
00671 110 00602 JFZ L00602
00674 066 011 L00674 LLI INBUF+3
00676 106 02705 CAL RESADR
00701 006 054 LAI 054
00703 106 03753 CAL PUTCHR
00706 106 03252 CAL PUTADR
00711 106 03541 CAL FUN100
00714 066 000 LLI AD000
00716 106 02677 CAL SAVADR
00721 106 03314 CAL FUN56
00724 007 RET
00725 066 201 L00725 LLI 201
00727 106 02705 CAL RESADR
00732 066 003 LLI AD003
00734 106 02677 CAL SAVADR
00737 104 00602 JMP L00602
00742 006 200 L00742 LAI 200
00744 106 03505 CAL S03505
00747 066 200 LLI 200
00751 076 037 LMI 037
00753 066 200 L00753 LLI 200
00755 106 03725 CAL GETCHR
00760 074 134 CPI 134
00762 150 01023 JTZ L01023
00765 074 042 CPI 042
00767 150 01137 JTZ S01137
00772 074 177 CPI 177
00774 150 01127 JTZ L01127
00777 106 03753 CAL PUTCHR
01002 310 LBA
01003 106 01137 CAL S01137
01006 371 LMB
01007 066 027 LLI 027
01011 307 LAM
01012 004 001 ADI 001
01014 370 LMA
01015 106 03560 CAL S03560
01020 104 00753 JMP L00753
01023 106 03725 L01023 CAL GETCHR
01026 074 150 CPI 150
01030 150 01076 JTZ L01076
01033 004 007 ADI 007
01035 330 LDA
01036 026 033 LCI 033
01040 016 000 LBI 000
01042 106 03252 CAL PUTADR
01045 006 022 LAI 022
01047 106 03753 CAL PUTCHR
01052 106 03252 CAL PUTADR
01055 006 024 LAI 024
01057 106 03753 CAL PUTCHR
01062 066 027 LLI 027
01064 307 LAM
01065 004 002 ADI 002
01067 370 LMA
01070 106 03560 CAL S03560
01073 104 00753 JMP L00753
01076 056 000 L01076 LHI ROMPG
01100 066 015 LLI C015
01102 016 006 LBI 006
01104 106 02773 CAL PUTSTR
01107 006 022 LAI 022
01111 106 03753 CAL PUTCHR
01114 106 02773 CAL PUTSTR
01117 006 024 LAI 024
01121 106 03753 CAL PUTCHR
01124 104 00753 JMP L00753
01127 370 L01127 LMA
01130 305 LAH
01131 106 03753 CAL PUTCHR
01134 104 00753 JMP L00753
01137 006 022 S01137 LAI 022
01141 106 03753 CAL PUTCHR
01144 307 LAM
01145 106 03753 CAL PUTCHR
01150 006 024 LAI 024
01152 106 03753 CAL PUTCHR
01155 007 RET
* "+" command to increment AD000
* + to increment by 1
* +n to increment by n
01156 066 007 FUN66 LLI INBUF+1
01160 006 015 LAI CHRCR
01162 277 CPM ; Is there an argument?
01163 110 01170 JFZ L01170 ; Yes, use it
01166 076 001 LMI 001 ; No, assume a value of 1
01170 026 000 L01170 LCI 000
01172 317 LBM ; Get argument (loop count)
01173 302 L01173 LAC
01174 271 CPB ; Done?
01175 053 RTZ ; Yes
01176 066 000 LLI AD000
01200 106 03222 CAL INCADR
01203 020 INC
01204 104 01173 JMP L01173
* "-" command to decrement AD000
* - to decrement by 1
* -n to decrement by n
01207 066 007 FUN70 LLI INBUF+1
01211 006 015 LAI CHRCR
01213 277 CPM ; Is there an argument?
01214 110 01221 JFZ L01221 ; Yes, use it
01217 076 001 LMI 001 ; No, assume a value of 1
01221 026 000 L01221 LCI 000
01223 317 LBM ; Get argument (loop count)
01224 302 L01224 LAC
01225 271 CPB ; Done?
01226 053 RTZ ; Yes
01227 066 000 LLI AD000
01231 106 03172 CAL DECADR
01234 020 INC
01235 104 01224 JMP L01224
01240 066 053 FUN72 LLI 053
01242 076 000 LMI 000
01244 104 01253 JMP L01253
01247 066 053 FUN122 LLI 053
01251 076 001 LMI 001
01253 066 007 L01253 LLI INBUF+1
01255 307 LAM
01256 074 076 CPI 076
01260 150 01344 JTZ L01344
01263 074 015 CPI 015
01265 110 01272 JFZ L01272
01270 076 001 LMI 001
01272 250 L01272 XRA
01273 317 LBM
01274 271 CPB
01275 053 RTZ
01276 066 050 LLI 050
01300 371 LMB
01301 060 INL
01302 370 LMA
01303 066 053 L01303 LLI 053
01305 250 XRA
01306 277 CPM
01307 066 000 LLI AD000
01311 110 01322 JFZ L01322
01314 106 03222 CAL INCADR
01317 104 01325 JMP L01325
01322 106 03172 L01322 CAL DECADR
01325 106 01355 L01325 CAL FUN126
01330 066 050 LLI 050
01332 307 LAM
01333 060 INL
01334 317 LBM
01335 010 INB
01336 271 CPB
01337 053 RTZ
01340 371 LMB
01341 104 01303 JMP L01303
01344 066 000 L01344 LLI AD000
01346 106 02705 CAL RESADR
01351 106 03652 CAL S03652
01354 007 RET
01355 066 000 FUN126 LLI AD000
01357 106 02705 CAL RESADR
01362 106 03365 CAL RDBUF
01365 066 036 FUN130 LLI RAM036
01367 250 XRA
01370 277 CPM
01371 150 01400 JTZ L01400
01374 106 01441 CAL S01441
01377 007 RET
01400 106 01404 L01400 CAL S01404
01403 007 RET
01404 066 200 S01404 LLI 200
01406 006 035 LAI 035
01410 277 CPM
01411 150 01433 JTZ L01433
01414 106 03753 CAL PUTCHR
01417 016 005 LBI 005
01421 006 032 LAI 032
01423 277 CPM
01424 110 01430 JFZ L01430
01427 010 INB
01430 106 02773 L01430 CAL PUTSTR
01433 016 200 L01433 LBI 200
01435 106 02773 CAL PUTSTR
01440 007 RET
01441 016 073 S01441 LBI 073
01443 106 02763 CAL S02763
01446 006 015 LAI 015
01450 106 03753 CAL PUTCHR
01453 006 012 LAI 012
01455 106 03753 CAL PUTCHR
01460 106 03753 CAL PUTCHR
01463 066 200 LLI 200
01465 307 L01465 LAM
01466 074 177 CPI 177
01470 110 01500 JFZ L01500
01473 006 122 LAI 122
01475 104 01507 JMP L01507
01500 074 040 L01500 CPI 040
01502 100 01537 JFC L01537
01505 064 040 ORI 040
01507 106 03753 L01507 CAL PUTCHR
01512 336 LDL
01513 066 047 LLI 047
01515 373 LMD
01516 056 000 LHI ROMPG
01520 066 132 LLI C132
01522 016 007 LBI 007
01524 106 02773 CAL PUTSTR
01527 056 010 LHI RAMPG
01531 066 047 LLI RAM047
01533 337 LDM
01534 363 LLD
01535 006 011 LAI 011
01537 106 03753 L01537 CAL PUTCHR
01542 060 INL
01543 250 XRA
01544 276 CPL
01545 110 01465 JFZ L01465
01550 016 070 LBI 070
01552 106 02763 CAL S02763
01555 007 RET
01556 066 177 L01556 LLI 177
01560 016 001 LBI 001
01562 106 01634 CAL S01634
01565 106 01674 CAL S01674
01570 106 01576 L01570 CAL S01576
01573 104 01570 JMP L01570
01576 106 03725 S01576 CAL GETCHR
01601 074 011 CPI 011
01603 150 01763 JTZ L01763
01606 074 177 CPI 177
01610 150 02013 JTZ L02013
01613 074 002 CPI 002
01615 150 01674 JTZ S01674
01620 074 015 CPI 015
01622 150 00217 JTZ L00217
01625 370 LMA
01626 064 040 ORI 040
01630 106 03753 CAL PUTCHR
01633 007 RET
01634 306 S01634 LAL
01635 201 ADB
01636 330 LDA
01637 066 036 LLI RAM036
01641 250 XRA
01642 277 CPM
01643 360 LLA
01644 003 RFC
01645 250 XRA
01646 251 XRB
01647 160 01664 JTS L01664
01652 060 INL
01653 307 LAM
01654 061 DCL
01655 074 033 CPI 033
01657 013 RFZ
01660 060 INL
01661 060 INL
01662 060 INL
01663 007 RET
01664 307 L01664 LAM
01665 074 040 CPI 040
01667 043 RTC
01670 061 DCL
01671 061 DCL
01672 061 DCL
01673 007 RET
01674 336 S01674 LDL
01675 066 036 LLI RAM036
01677 250 XRA
01700 277 CPM
01701 363 LLD
01702 150 01712 JTZ L01712
01705 307 LAM
01706 106 03753 CAL PUTCHR
01711 007 RET
01712 006 035 L01712 LAI 035
01714 277 CPM
01715 016 005 LBI 005
01717 053 RTZ
01720 106 03753 CAL PUTCHR
01723 106 02773 CAL PUTSTR
01726 010 INB
01727 106 02773 CAL PUTSTR
01732 007 RET
01733 306 Q1733 LAL
01734 074 200 CPI 200
01736 053 RTZ
01737 336 LDL
01740 066 036 LLI RAM036
01742 016 372 LBI 372
01744 250 XRA
01745 277 CPM
01746 363 LLD
01747 150 01754 JTZ L01754
01752 016 377 LBI 377
01754 106 01634 L01754 CAL S01634
01757 106 01674 CAL S01674
01762 007 RET
01763 306 L01763 LAL
01764 074 372 CPI 372
01766 003 RFC
01767 336 LDL
01770 066 036 LLI RAM036
01772 016 006 LBI 006
01774 250 XRA
01775 277 CPM
01776 363 LLD
01777 150 02004 JTZ L02004
02002 016 001 LBI 001
02004 106 01634 L02004 CAL S01634
02007 106 01674 CAL S01674
02012 007 RET
02013 336 L02013 LDL
02014 250 XRA
02015 277 CPM
02016 150 02024 JTZ L02024
02021 076 026 LMI 026
02023 007 RET
02024 106 03725 L02024 CAL GETCHR
02027 074 001 CPI 001
02031 110 02037 JFZ L02037
02034 076 035 LMI 035
02036 007 RET
02037 306 L02037 LAL
02040 004 005 ADI 005
02042 360 LLA
02043 076 026 LMI 026
02045 007 RET
02046 066 036 FUN74 LLI RAM036
02050 076 000 LMI 000
02052 007 RET
02053 066 036 FUN64 LLI RAM036
02055 076 001 LMI 001
02057 007 RET
02060 066 007 FUN116 LLI INBUF+1
02062 106 02705 L02062 CAL RESADR
02065 066 000 LLI AD000
02067 106 02677 CAL SAVADR
02072 106 03365 L02072 CAL RDBUF
02075 066 200 LLI 200
02077 307 LAM
02100 074 004 CPI 004
02102 053 RTZ
02103 074 006 CPI 006
02105 150 02133 JTZ L02133
02110 060 INL
02111 074 005 CPI 005
02113 150 02062 JTZ L02062
02116 066 000 LLI AD000
02120 106 03222 CAL INCADR
02123 066 000 LLI AD000
02125 106 02705 CAL RESADR
02130 104 02072 JMP L02072
02133 006 004 L02133 LAI 004
02135 106 03543 CAL FILBUF
02140 106 03321 CAL WRBUF
02143 007 RET
02144 066 007 FUN106 LLI INBUF+1
02146 106 02705 L02146 CAL RESADR
02151 066 000 LLI AD000
02153 106 02677 CAL SAVADR
02156 106 03365 L02156 CAL RDBUF
02161 066 200 LLI 200
02163 307 LAM
02164 074 004 CPI 004
02166 150 02221 JTZ L02221
02171 060 INL
02172 074 005 CPI 005
02174 150 02146 JTZ L02146
02177 074 006 CPI 006
02201 150 02146 JTZ L02146
02204 066 000 LLI AD000
02206 106 03222 CAL INCADR
02211 066 000 LLI AD000
02213 106 02705 CAL RESADR
02216 104 02156 JMP L02156
02221 076 006 L02221 LMI 006
02223 066 013 LLI INBUF+5
02225 106 02705 CAL RESADR
02230 066 201 LLI 201
02232 106 02677 CAL SAVADR
02235 066 000 LLI AD000
02237 106 02705 CAL RESADR
02242 106 03321 CAL WRBUF
02245 007 RET
02246 056 010 FUN112 LHI RAMPG
02250 066 000 LLI AD000
02252 106 02705 CAL RESADR
02255 006 026 LAI 026
02257 106 03543 CAL FILBUF
02262 066 200 LLI 200
02264 106 02677 CAL SAVADR
02267 016 060 LBI 060
02271 321 LCB
02272 036 100 LDI 100
02274 106 03321 CAL WRBUF
02277 007 RET
02300 006 377 FUN120 LAI 377
02302 106 03505 CAL S03505
02305 106 03427 CAL S03427
02310 006 004 LAI 004
02312 106 03543 CAL FILBUF
02315 066 010 LLI INBUF+2
02317 006 057 LAI 057
02321 277 CPM
02322 110 02342 JFZ L02342
02325 066 056 LLI AD056
02327 106 02705 CAL RESADR
02332 066 200 LLI 200
02334 076 006 LMI 006
02336 060 INL
02337 106 02677 CAL SAVADR
02342 066 000 L02342 LLI AD000
02344 106 03222 CAL INCADR
02347 066 000 LLI AD000
02351 106 03222 CAL INCADR
02354 066 000 LLI AD000
02356 106 02705 CAL RESADR
02361 106 03321 CAL WRBUF
02364 066 000 LLI AD000
02366 106 03222 CAL INCADR
02371 007 RET
02372 036 015 FUN114 LDI 015
02374 026 054 LCI 054
02376 066 007 LLI INBUF+1
02400 302 LAC
02401 277 CPM
02402 150 02422 JTZ L02422
02405 303 LAD
02406 277 CPM
02407 150 02520 JTZ L02520
02412 317 LBM
02413 066 026 LLI 026
02415 307 LAM
02416 044 040 NDI 040
02420 261 ORB
02421 370 LMA
02422 060 L02422 INL
02423 303 LAD
02424 277 CPM
02425 150 02520 JTZ L02520
02430 317 LBM
02431 066 024 LLI 024
02433 371 LMB
02434 104 02520 JMP L02520
02437 006 022 L02437 LAI 022
02441 106 03753 CAL PUTCHR
02444 066 023 LLI 023
02446 250 XRA
02447 370 LMA
02450 006 035 LAI 035
02452 104 02542 JMP L02542
02455 066 023 L02455 LLI 023
02457 076 001 LMI 001
02461 016 035 LBI 035
02463 026 033 LCI 033
02465 060 INL
02466 337 LDM
02467 006 024 LAI 024
02471 106 03753 CAL PUTCHR
02474 106 03252 CAL PUTADR
02477 066 027 LLI 027
02501 307 LAM
02502 004 011 ADI 011
02504 370 LMA
02505 106 03560 CAL S03560
02510 006 022 LAI 022
02512 106 03753 CAL PUTCHR
02515 106 03252 CAL PUTADR
02520 106 02631 L02520 CAL S02631
02523 106 03725 CAL GETCHR
02526 074 037 CPI 037
02530 110 02535 JFZ L02535
02533 006 032 LAI 032
02535 074 040 L02535 CPI 040
02537 140 02614 JTC L02614
02542 066 022 L02542 LLI 022
02544 056 000 LHI ROMPG
02546 104 02556 JMP L02556
02551 106 03725 L02551 CAL GETCHR
02554 207 ADM
02555 060 INL
02556 106 03753 L02556 CAL PUTCHR
02561 006 030 LAI 030
02563 276 CPL
02564 110 02551 JFZ L02551
02567 056 010 LHI RAMPG
02571 066 027 LLI RAM027
02573 307 LAM
02574 004 006 ADI 006
02576 370 LMA
02577 106 03560 CAL S03560
02602 250 XRA
02603 066 023 LLI 023
02605 277 CPM
02606 150 02455 JTZ L02455
02611 104 02520 JMP L02520
02614 006 024 L02614 LAI 024
02616 106 03753 CAL PUTCHR
02621 106 02713 CAL S02713
02624 006 010 LAI 010
02626 106 03753 CAL PUTCHR
02631 106 02713 S02631 CAL S02713
02634 056 010 LHI RAMPG
02636 066 026 LLI RAM026
02640 307 LAM
02641 106 03753 CAL PUTCHR
02644 007 RET
* "=" command to set or display AD000
* =nnn to set
* = to display
02645 066 007 FUN76 LLI INBUF+1
02647 006 015 LAI CHRCR
02651 277 CPM
02652 150 02666 JTZ L02666
02655 106 02705 CAL RESADR
02660 066 000 LLI AD000
02662 106 02677 CAL SAVADR
02665 007 RET
02666 066 000 L02666 LLI AD000
02670 106 02705 CAL RESADR
02673 106 03252 CAL PUTADR
02676 007 RET
* Save the 3-byte address from B,C,D into memory (HL)
02677 371 SAVADR LMB
02700 060 INL
02701 372 LMC
02702 060 INL
02703 373 LMD
02704 007 RET
* Restore the 3-byte address from memory (HL) into B,C,D
02705 317 RESADR LBM
02706 060 INL
02707 327 LCM
02710 060 INL
02711 337 LDM
02712 007 RET
* Outputs 033 041
02713 106 03751 S02713 CAL PUTESC
02716 006 041 LAI 041
02720 106 03753 CAL PUTCHR
02723 007 RET
* Read decimal number into register B
* B must already contain 0 or initial value
02724 106 03725 GETNUM CAL GETCHR
02727 074 015 CPI CHRCR
02731 053 RTZ ; Carriage-return ends input
02732 106 03753 CAL PUTCHR
02735 074 054 CPI 054
02737 053 RTZ ; Command also ends input
02740 074 140 CPI 140
02742 150 00217 JTZ L00217 ; Back-quote: abort input
02745 044 017 NDI 017 ; Mask ASCII -> digit
02747 330 LDA ; Multiply B by 10 and add A
02750 301 LAB
02751 022 RAL
02752 310 LBA
02753 022 RAL
02754 022 RAL
02755 201 ADB
02756 203 ADD
02757 310 LBA
02760 104 02724 JMP GETNUM ; Loop, to get next digit
02763 106 03751 S02763 CAL PUTESC
02766 301 LAB
02767 106 03753 CAL PUTCHR
02772 007 RET
* Put the contents of a string to the I/O port
* (HL) points to the string, B contains the length
02773 250 PUTSTR XRA
02774 320 LCA
02775 336 LDL ; Save L in D
02776 307 L02776 LAM
02777 106 03753 CAL PUTCHR
03002 060 INL
03003 301 LAB
03004 020 INC
03005 272 CPC ; Count reached?
03006 110 02776 JFZ L02776 ; No, do another character
03011 363 LLD ; Restore L
03012 007 RET
03013 066 007 FUN104 LLI INBUF+1
03015 307 LAM
03016 074 015 CPI CHRCR
03020 150 03044 JTZ L03044
03023 066 000 LLI AD000
03025 106 02705 CAL RESADR
03030 074 041 CPI 041
03032 150 03064 JTZ L03064
03035 365 LLH
03036 106 02705 CAL RESADR
03041 104 03057 JMP L03057
03044 006 075 L03044 LAI 075
03046 106 03753 CAL PUTCHR
03051 106 03117 CAL S03117
03054 106 03252 CAL PUTADR
03057 066 000 L03057 LLI AD000
03061 106 02677 CAL SAVADR
03064 106 03142 L03064 CAL S03142
03067 007 RET
03070 106 03267 FUN110 CAL S03267
03073 106 03541 CAL FUN100
03076 066 200 LLI 200
03100 016 060 LBI 060
03102 321 LCB
03103 036 100 LDI 100
03105 371 LMB
03106 060 INL
03107 371 LMB
03110 060 INL
03111 076 101 LMI 101
03113 106 03321 CAL WRBUF
03116 007 RET
03117 016 060 S03117 LBI 060
03121 321 LCB
03122 036 100 LDI 100
03124 106 03365 CAL RDBUF
03127 066 200 LLI 200
03131 106 02705 CAL RESADR
03134 066 000 LLI AD000
03136 106 02677 CAL SAVADR
03141 007 RET
* Outputs 033 047 041 ADR
03142 106 03303 S03142 CAL S03303
03145 006 047 LAI 047
03147 106 03753 CAL PUTCHR
03152 106 03252 CAL PUTADR
03155 007 RET
* Outputs 033 046 041 ADR
03156 106 03303 S03156 CAL S03303
03161 006 041 LAI 041
03163 106 03753 CAL PUTCHR
03166 106 03252 CAL PUTADR
03171 007 RET
* Decrement the 3-byte address stored in memory (HL)
03172 060 DECADR INL
03173 060 INL
03174 317 LBM
03175 011 DCB
03176 074 077 CPI 077
03200 371 LMB
03201 013 RFZ
03202 076 137 LMI 137
03204 061 DCL
03205 317 LBM
03206 011 DCB
03207 074 057 CPI 057
03211 371 LMB
03212 013 RFZ
03213 076 071 LMI 071
03215 061 DCL
03216 317 LBM
03217 011 DCB
03220 371 LMB
03221 007 RET
* Increment the 3-byte address stored in memory (HL)
03222 060 INCADR INL
03223 060 INL
03224 317 LBM
03225 010 INB
03226 074 140 CPI 140
03230 371 LMB
03231 013 RFZ
03232 076 100 LMI 100
03234 061 DCL
03235 317 LBM
03236 010 INB
03237 074 072 CPI 072
03241 371 LMB
03242 013 RFZ
03243 076 060 LMI 060
03245 061 DCL
03246 317 LBM
03247 010 INB
03250 371 LMB
03251 007 RET
* Put the 3-byte address from B,C,D to the I/O port
03252 301 PUTADR LAB
03253 106 03753 CAL PUTCHR
03256 302 LAC
03257 106 03753 CAL PUTCHR
03262 303 LAD
03263 106 03753 CAL PUTCHR
03266 007 RET
* Output 033 067 067
03267 106 03751 S03267 CAL PUTESC
03272 006 067 LAI 067
03274 106 03753 CAL PUTCHR
03277 106 03753 CAL PUTCHR
03302 007 RET
* Output 033 046
03303 106 03751 S03303 CAL PUTESC
03306 006 046 LAI 046
03310 106 03753 CAL PUTCHR
03313 007 RET
* "!" command to write buffer to AD000
03314 066 000 FUN56 LLI AD000
03316 106 02705 CAL RESADR
* Outputs 033 046 046 ADR 022 128bytes 024
03321 106 03303 WRBUF CAL S03303
03324 006 046 LAI 046
03326 106 03753 CAL PUTCHR
03331 106 03252 CAL PUTADR
03334 006 022 LAI 022
03336 106 03753 CAL PUTCHR
03341 056 010 LHI RAMPG
03343 066 200 LLI RAM200
03345 307 L03345 LAM
03346 106 03753 CAL PUTCHR
03351 060 INL
03352 250 XRA
03353 276 CPL
03354 110 03345 JFZ L03345
03357 006 024 LAI 024
03361 106 03753 CAL PUTCHR
03364 007 RET
* Outputs 033 046 044 ADR 021/061, reads 128 bytes, skips 1 byte
03365 106 03303 RDBUF CAL S03303
03370 006 044 LAI 044
03372 106 03753 CAL PUTCHR
03375 106 03252 CAL PUTADR
03400 006 021 S03400 LAI 021
03402 106 03753 CAL PUTCHR
03405 056 010 LHI RAMPG
03407 066 200 LLI 200
03411 106 03725 L03411 CAL GETCHR
03414 370 LMA
03415 060 INL
03416 250 XRA
03417 276 CPL
03420 110 03411 JFZ L03411
03423 106 03725 CAL GETCHR
03426 007 RET
* Outputs 033 067 065
03427 106 03751 S03427 CAL PUTESC
03432 006 067 LAI 067
03434 106 03753 CAL PUTCHR
03437 006 065 LAI 065
03441 106 03753 CAL PUTCHR
03444 007 RET
03445 066 000 FUN60 LLI AD000
03447 106 02705 CAL RESADR
03452 106 03365 CAL RDBUF
03455 106 03142 CAL S03142
03460 006 022 LAI 022
03462 106 03753 CAL PUTCHR
03465 016 177 LBI 177
03467 066 200 LLI 200
03471 106 02773 CAL PUTSTR
03474 006 024 LAI 024
03476 106 03753 CAL PUTCHR
03501 106 03427 CAL S03427
03504 007 RET
03505 066 027 S03505 LLI 027
03507 227 SUM
03510 310 LBA
03511 026 000 LCI 000
03513 006 024 L03513 LAI 024
03515 106 03753 CAL PUTCHR
03520 301 LAB
03521 272 CPC
03522 053 RTZ
03523 006 022 LAI 022
03525 106 03753 CAL PUTCHR
03530 006 026 LAI 026
03532 106 03753 CAL PUTCHR
03535 020 INC
03536 104 03513 JMP L03513
* "@" command to fill buffer with 026
03541 006 026 FUN100 LAI 026
* Fill the buffer with the value in the A register
03543 056 010 FILBUF LHI RAMPG
03545 066 200 LLI 200
03547 340 LEA
03550 250 XRA
03551 374 L03551 LME
03552 060 INL
03553 276 CPL
03554 110 03551 JFZ L03551
03557 007 RET
03560 074 172 S03560 CPI 172
03562 003 RFC
03563 066 027 LLI 027
03565 310 LBA
03566 006 200 LAI 200
03570 221 SUB
03571 310 LBA
03572 026 000 LCI 000
03574 372 LMC
03575 006 022 LAI 022
03577 106 03753 CAL PUTCHR
03602 006 026 L03602 LAI 026
03604 106 03753 CAL PUTCHR
03607 020 INC
03610 301 LAB
03611 272 CPC
03612 110 03602 JFZ L03602
03615 006 024 LAI 024
03617 106 03753 CAL PUTCHR
03622 066 000 LLI 000
03624 106 03222 CAL INCADR
03627 007 RET
03630 106 03267 FUN102 CAL S03267
03633 006 033 LAI 033
03635 106 03753 CAL PUTCHR
03640 006 014 LAI 014
03642 106 03753 CAL PUTCHR
03645 066 007 LLI INBUF+1
03647 106 02705 CAL RESADR
03652 106 03156 S03652 CAL S03156
03655 006 021 LAI 021
03657 106 03753 CAL PUTCHR
03662 106 03725 CAL GETCHR
03665 106 03303 CAL S03303
03670 006 004 LAI 004
03672 106 03753 CAL PUTCHR
03675 106 03400 CAL S03400
03700 066 200 LLI 200
03702 307 LAM
03703 074 004 CPI 004
03705 150 03717 JTZ L03717
03710 060 INL
03711 106 02705 CAL RESADR
03714 104 03652 JMP S03652
03717 006 023 L03717 LAI 023
03721 106 03753 CAL PUTCHR
03724 007 RET
* Get a character from the I/O port
03725 006 004 GETCHR LAI 004
03727 121 OUT 10
03730 103 L03730 INP 1
03731 044 014 NDI 014
03733 150 03730 JTZ L03730
03736 101 INP 0
03737 044 177 NDI 177
03741 340 LEA
03742 006 010 LAI 010
03744 121 OUT 10
03745 177 OUT 37
03746 157 OUT 27
03747 304 LAE
03750 007 RET
* Put an escape character to the I/O port
03751 006 033 PUTESC LAI 033
* Put a character to the I/O port
03753 340 PUTCHR LEA
03754 006 100 LAI 100
03756 121 OUT 10
03757 103 L03757 INP 1
03760 044 100 NDI 100
03762 150 03757 JTZ L03757
03765 304 LAE
03766 155 OUT 26
03767 006 010 LAI 010
03771 121 OUT 10
03772 173 OUT 35
03773 304 LAE
03774 007 RET
03775 000
03776 000
03777 000
04000 END

Back to SacState 8008 Story
Back to Digibarn Stories |