* 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