Home | About | Collections | Stories | Help! | News & Links | Friends | Lets Talk! | Events & Visiting | Search

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

Please send site comments to our Webmaster.
Please see our notices about the content of this site and its usage.
(cc) 1998- Digibarn Computer Museum, some rights reserved under this Creative Commons license.