1Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 1
2Source file: zapple.asm
3Title:
4
5LOC   OBJECT CODE   LINE   STMT SOURCE CODE
6                       1      1 ;	<< ZAPPLE 2-K MONITOR SYSTEM >>
7                       2      2 ;		by
8                       3      3 ;
9                       4      4 ;	TECHNICAL DESIGN LABS, INC.
10                       5      5 ;	RESEARCH PARK
11                       6      6 ;	PRINCETON, NEW JERSEY  08540
12                       7      7 ;
13                       8      8 ;	COPYRIGHT JULY 1976 BY TDL INC.
14                       9      9 ;
15                      10     10 ;	ASSEMBLED BY ROGER AMIDON
16                      11     11 ;
17                      12     12 ; SEPTEMBER 2017 BY UDO MUNK:
18                      13     13 ;	MODIFIED TO ZILOG/MOSTEK SYNTAX TO ASSEMBLE WITH Z80ASM
19                      14     14 ;	FIXED TYPOS AND BUGS
20                      15     15 ;	CHANGED TYPEWRITER I/O TO MITS 2SIO CHANNEL A
21                      16     16 ;	CHANGED CASSETTE I/O TO MITS ACR SIO
22                      17     17 ;
23                      18     18 ; USE Z80ASM VERSION 1.8, WON'T ASSEMBLE CORRECT WITH VERSIONS BEFORE!
24                      19     19 ;
25                      20     20 ;
26f000                  21     21 BASE	EQU	0F000H
27f800                  22     22 USER	EQU	BASE+800H
28                      23     23 ;
29                      24     24 	TITLE	<Zapple Monitor, Version 1.11, Dec. 18, 1976>
30                      25     25 ;
310038                  26     26 RST7	EQU	38H	     ;RST 7 (LOCATION FOR TRAP)
32                      27     27 ;IOBYT	EQU	2	     ;R/W PORT FOR TEMP. STORAGE
33efff                  28     28 IOBYT	EQU	0EFFFH	     ;MEMORY LOCATION FOR TEMP. STORAGE
34                      29     29 ;SENSE	EQU	3	     ;PORT FOR INITIAL I/O CONFIGURATION (IN)
3500ff                  30     30 SWITCH	EQU	0FFH	     ;FRONT PANEL SENSE SWITCHES
36                      31     31 ;RCP	EQU	SENSE	     ;READER CONTROL PORT (OUT)
370000                  32     32 NN	EQU	0	     ;"I" REGISTER INITIAL VALUE
38                      33     33 ;
39                      34     34 ;	EXTERNAL EQUATES
40                      35     35 ;
41                      36     36 ;	NAME	ZAPPLE
42                      37     37 ;	EXT	COLOC
43                      38     38 ;	EXT	LNLOC
44                      39     39 ;	EXT	LULOC
45                      40     40 ;	EXT	PTPL
46                      41     41 ;	EXT	PULOC
47                      42     42 ;	EXT	CSLOC
48                      43     43 ;	EXT	CILOC
49                      44     44 ;	EXT	RPTPL
50                      45     45 ;	EXT	RULOC
51                      46     46 ;
52                      47     47 ;
53                      48     48 ;	<I/O DEVICES>
54                      49     49 ;
55                      50     50 ;-TELEPRINTER
56                      51     51 ;
570011                  52     52 TTI	EQU	11H	     ;DATA IN PORT
580011                  53     53 TTO	EQU	11H	     ;DATA OUT PORT
590010                  54     54 TTS	EQU	10H	     ;STATUS PORT (IN)
600012                  55     55 TTS2	EQU	12H	     ;STATUS PORT MITS 2SIO B
610001                  56     56 TTYDA	EQU	01H	     ;DATA AVAILABLE MASK BIT
620002                  57     57 TTYBE	EQU	02H	     ;XMTR BUFFER EMPTY MASK
63                      58     58 ;
64                      59     59 ;-C.R.T. SYSTEM
65                      60     60 ;
66Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 2
67Source file: zapple.asm
68Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
69
70LOC   OBJECT CODE   LINE   STMT SOURCE CODE
710051                  61     61 CRTI	EQU	51H	     ;DATA PORT (IN)
720050                  62     62 CRTS	EQU	50H	     ;STATUS PORT (IN)
730051                  63     63 CRTO	EQU	51H	     ;DATA PORT (OUT)
740040                  64     64 CRTDA	EQU	40H	     ;DATA AVAILABLE MASK
750080                  65     65 CRTBE	EQU	80H	     ;XMTR BUFFER EMPTY MASK
76                      66     66 ;
77                      67     67 ;-CASSETTE SYSTEM
78                      68     68 ;
790007                  69     69 RCSD	EQU	07H	     ;DATA IN PORT
800006                  70     70 RCSS	EQU	06H	     ;STATUS PORT (IN)
810001                  71     71 RCSDA	EQU	01H	     ;DATA AVAILABLE MASK
820007                  72     72 PCASO	EQU	07H	     ;DATA PORT (OUT)
830006                  73     73 PCASS	EQU	06H	     ;CONTROL PORT (OUT)
840080                  74     74 PCSBE	EQU	80H	     ;XMTR BUFFER EMPTY MASK
85                      75     75 ;
86                      76     76 ;	<CONSTANTS>
87                      77     77 ;
880000                  78     78 FALSE	EQU	0	     ;ISN'T SO
89ffff                  79     79 TRUE	EQU	~FALSE       ;IT IS SO
90000d                  80     80 CR	EQU	0DH	     ;ASCII CARRIAGE RETURN
91000a                  81     81 LF	EQU	0AH	     ;ASCII LINE FEED
920007                  82     82 BELL	EQU	7	     ;DING
9300ff                  83     83 RUB	EQU	0FFH	     ;RUB OUT
940000                  84     84 FIL	EQU	00	     ;FILL CHARACTER AFTER CRLF
950007                  85     85 MAX	EQU	7	     ;NUMBER OF QUES IN EOF
96                      86     86 ;
97                      87     87 ;	<I/O CONFIGURATION MASKS>
98                      88     88 ;
9900fc                  89     89 CMSK	EQU	11111100B    ;CONSOLE DEVICE
10000f3                  90     90 RMSK	EQU	11110011B    ;STORAGE DEVICE (IN)
10100cf                  91     91 PMSK	EQU	11001111B    ;STORAGE DEVICE (OUT)
102003f                  92     92 LMSK	EQU	00111111B    ;LIST DEVICE
103                      93     93 ;
104                      94     94 ;
105                      95     95 ;-CONSOLE CONFIGURATION
1060000                  96     96 CTTY	EQU	0	     ;TELEPRINTER
1070001                  97     97 CCRT	EQU	1	     ;C.R.T.
1080002                  98     98 BATCH	EQU	2	     ;READER FOR INPUT, LIST FOR OUTPUT
1090003                  99     99 CUSE	EQU	3	     ;USER DEFINED
110                     100    100 ;
111                     101    101 ;-STORAGE INPUT CONFIGURATION
1120000                 102    102 RTTY	EQU	0	     ;TELEPRINTER READER
1130004                 103    103 RPTR	EQU	4	     ;HIGH-SPEED RDR (EXTERNAL ROUTINE)
1140008                 104    104 RCAS	EQU	8	     ;CASSETTE
115000c                 105    105 RUSER	EQU	0CH	     ;USER DEFINED
116                     106    106 ;
117                     107    107 ;-STORAGE OUTPUT CONFIGURATION
1180000                 108    108 PTTY	EQU	0	     ;TELEPRINTER PUNCH
1190010                 109    109 PPTP	EQU	10H	     ;HIGH-SPEED PUNCH (EXTERNAL ROUTINE)
1200020                 110    110 PCAS	EQU	20H	     ;CASSETTE
1210030                 111    111 PUSER	EQU	30H	     ;USER DEFINED
122                     112    112 ;
123                     113    113 ;-LIST DEVICE CONFIGURATION
1240000                 114    114 LTTY	EQU	0	     ;TELEPRINTER PRINTER
1250040                 115    115 LCRT	EQU	40H	     ;C.R.T. SCREEN
1260080                 116    116 LINE	EQU	80H	     ;LINE PRINTER (EXTERNAL ROUTINE)
12700c0                 117    117 LUSER	EQU	0C0H	     ;USER DEFINED
128                     118    118 ;
129                     119    119 ;
130                     120    120 ;	VECTOR FOR USER DEFINED ROUTINES
131Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 3
132Source file: zapple.asm
133Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
134
135LOC   OBJECT CODE   LINE   STMT SOURCE CODE
136                     121    121 ;
137f800                 122    122 CILOC	EQU	USER	     ;CONSOLE INPUT
138f803                 123    123 COLOC	EQU	CILOC+3	     ;CONSOLE OUTPUT
139f806                 124    124 RPTPL	EQU	COLOC+3	     ;HIGH-SPEED READER
140f809                 125    125 RULOC	EQU	RPTPL+3	     ;USER DEFINED STORAGE (INPUT)
141f80c                 126    126 PTPL	EQU	RULOC+3	     ;HIGH-SPEED PUNCH
142f80f                 127    127 PULOC	EQU	PTPL+3	     ;USER DEFINED STORAGE (OUTPUT)
143f812                 128    128 LNLOC	EQU	PULOC+3	     ;LINE PRINTER
144f815                 129    129 LULOC	EQU	LNLOC+3	     ;USER DEFINED PRINTER
145f818                 130    130 CSLOC	EQU	LULOC+3	     ;CONSOLE INPUT STATUS ROUTINE
146f81b                 131    131 J	EQU	CSLOC+3
147                     132    132 ;
148                     133    133 ;	PROGRAM CODE BEGINS HERE
149                     134    134 ;
150                     135    135 ;
151                     136    136 	ORG	BASE
152f000  c3 31 f0       137    137 	JP	BEGIN	     ;GO AROUND VECTORS
153                     138    138 ;
154                     139    139 ;	<VECTOR FOR CALLING PROGRAMS>
155                     140    140 ;
156                     141    141 ; THESE VECTORS MAY BE USED BY USER WRITTEN
157                     142    142 ; PROGRAMS TO SIMPLIFY THE HANDLING OF I/O
158                     143    143 ; FROM SYSTEM TO SYSTEM.  WHATEVER THE CURRENT
159                     144    144 ; ASSIGNED DEVICE, THESE VECTORS WILL PERFORM
160                     145    145 ; THE REQUIRED I/O OPERATION, AND RETURN TO
161                     146    146 ; THE CALLING PROGRAM.  (RET)
162                     147    147 ;
163                     148    148 ; THE REGISTER CONVENTION USED FOLLOWS-
164                     149    149 ;
165                     150    150 ; ANY INPUT OR OUTPUT DEVICE
166                     151    151 ;	CHARACTER TO BE OUTPUT IN 'C' REGISTER.
167                     152    152 ;	CHARACTER WILL BE IN 'A' REGISTER UPON
168                     153    153 ;	RETURNING FROM AN INPUT OR OUTPUT.
169                     154    154 ; 'CSTS'-
170                     155    155 ;	RETURNS TRUE (0FFH IN 'A' REG.) IF THERE IS
171                     156    156 ;	SOMETHING WAITING, AND ZERO (00) IF NOT.
172                     157    157 ; 'IOCHK'-
173                     158    158 ;	RETURNS WITH THE CURRENT I/O CONFIGURATION
174                     159    159 ;	BYTE IN 'A' REGISTER.
175                     160    160 ; 'IOSET'-
176                     161    161 ;	ALLOWS A PROGRAM TO DYNAMICALLY ALTER THE
177                     162    162 ;	CURRENT I/O CONFIGURATION, AND REQUIRES
178                     163    163 ;	THE NEW BYTE IN 'C' REGISTER.
179                     164    164 ; 'MEMCK'-
180                     165    165 ;	RETURNS WITH THE HIGHEST ALLOWED USER
181                     166    166 ;	MEMORY LOCATION. 'B'=HIGH BYTE, 'A'=LOW.
182                     167    167 ; 'TRAP'-
183                     168    168 ;	THIS IS THE 'BREAKPOINT' ENTRY POINT,
184                     169    169 ;	BUT MAY BE 'CALLED'. IT WILL SAVE
185                     170    170 ;	THE MACHINE STATE. RETURN CAN BE MADE WITH
186                     171    171 ;	A SIMPLE 'G[CR]' ON THE CONSOLE.
187                     172    172 ;
188f003  c3 18 f6       173    173 	JP	CI	     ;CONSOLE INPUT
189f006  c3 38 f6       174    174 	JP	RI	     ;READER INPUT
190f009  c3 7d f4       175    175 	JP	CO	     ;CONSOLE OUTPUT
191f00c  c3 b9 f4       176    176 	JP	PUO	     ;PUNCH OUTPUT
192f00f  c3 9f f4       177    177 	JP	LO	     ;LIST OUTPUT
193f012  c3 11 f5       178    178 	JP	CSTS	     ;CONSOLE STATUS
194f015  c3 10 f1       179    179 	JP	IOCHK	     ;I/O CHECK
195f018  c3 0b f1       180    180 	JP	IOSET	     ;I/O SET
196Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 4
197Source file: zapple.asm
198Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
199
200LOC   OBJECT CODE   LINE   STMT SOURCE CODE
201f01b  c3 a4 f5       181    181 	JP	MEMCK	     ;MEMORY LIMIT CHECK
202f01e  c3 bd f6       182    182 TRAP:	JP	RESTART	     ;BREAKPOINT
203                     183    183 ;
204                     184    184 ;	ANNOUNCEMENT OF MONITOR NAME & VERSION
205f021  0d 0a 00 00    185    185 MSG:	DEFB	CR,LF,FIL,FIL,FIL
206f025  00             185    186
207f026  5a 61 70 70    186    187 	DEFB	'Zapple V'
208f02a  6c 65 20 56    186    188
209f02e  31 2e 31       187    189 	DEFB	'1.1'
2100010                 188    190 MSGL	EQU	$-MSG
211                     189    191 ;
212                     190    192 ;	LET US BEGIN
213                     191    193 ;
214                     192    194 ; *NOTE- THE CODE UP TO THE 'IN SENSE' MAY
215                     193    195 ; BE REPLACED BY ENOUGH CODE TO INITIALIZE
216                     194    196 ; AN ACIA OR SIO DEVICE. ADDITIONAL DEVICES
217                     195    197 ; MAY BE INITIALIZED USING THE 'Q' COMMAND.
218                     196    198 ; (OR STANDARD ROUTINES FOR INITILIZATION
219                     197    199 ; MAY BE LOADED & EXECUTED IN THE USER AREA).
220                     198    200 ;
221                     199    201 BEGIN:
222f031  3e 03          200    202 	LD	A,3	     ;RESET BOTH MITS 2SIO ACIA
223f033  d3 10          201    203 	OUT	(TTS),A
224f035  d3 12          202    204 	OUT	(TTS2),A
225f037  3e 15          203    205 	LD	A,15H	     ;SET BOTH MITS 2SIO ACIA TO 8N1
226f039  d3 10          204    206 	OUT	(TTS),A
227f03b  d3 12          205    207 	OUT	(TTS2),A
228                     206    208 ;
229                     207    209 ;	LD	A,NN	     ;FOR 'I' REG. IF NEEDED.
230                     208    210 ;	LD	I,A
231                     209    211 ;	NOP		     ;SPARE BYTE
232                     210    212 ;	XOR	A	     ;CLEAR READER CONTROL PORT
233                     211    213 ;	OUT	(RCP),A
234                     212    214 ;	IN	A,(SENSE)    ;INITIALIZE I/O CONFIGURARTION
235                     213    215 ;	OUT	(IOBYT),A
236                     214    216 ;
237f03d  db ff          215    217 	IN	A,(SWITCH)   ;INITALIZE I/O CONFIGURATION
238f03f  32 ff ef       216    218 	LD	(IOBYT),A    ;  FROM FRONT PANEL SENSE SWITCHES
239                     217    219 ;
240f042  31 46 f0       218    220 	LD	SP,AHEAD-4   ;SET UP A FAKE STACK
241f045  c3 b2 f5       219    221 	JP	MEMSIZ+1     ;GET MEMORY SIZE
242f048  4a f0          220    222 	DEFW	AHEAD
243f04a  f9             221    223 AHEAD:	LD	SP,HL	     ;SET TRUE STACK
244f04b  eb             222    224 	EX	DE,HL
245f04c  01 23 00       223    225 	LD	BC,ENDX-EXIT
246f04f  21 a7 f7       224    226 	LD	HL,EXIT
247f052  ed b0          225    227 	LDIR		     ;MOVE TO RAM
248f054  eb             226    228 	EX	DE,HL
249f055  01 a1 ff       227    229 	LD	BC,-5FH	     ;SET UP A USER'S STACK VALUE
250f058  09             228    230 	ADD	HL,BC
251f059  e5             229    231 	PUSH	HL	     ;PRE-LOAD USER'S STACK VALUE
252f05a  21 00 00       230    232 	LD	HL,0	     ;INITIALIZE OTHER REGISTERS
253f05d  06 0a          231    233 	LD	B,10	     ; (16 OF THEM)
254f05f  e5             232    234 STKIT:	PUSH	HL	     ; TO ZERO
255f060  10 fd          233    235 	DJNZ	STKIT
256f062  06 10          234    236 HELLO:	LD	B,MSGL	     ;SAY HELLO TO THE FOLKS
257f064  cd 42 f4       235    237 	CALL	TOM	     ;OUTPUT SIGN-ON MSG
258f067  11 67 f0       236    238 START:	LD	DE,START     ;MAIN 'WORK' LOOP
259f06a  d5             237    239 	PUSH	DE	     ;SET UP A RETURN TO HERE
260f06b  cd 09 f5       238    240 	CALL	CRLF
261Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 5
262Source file: zapple.asm
263Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
264
265LOC   OBJECT CODE   LINE   STMT SOURCE CODE
266f06e  0e 3e          239    241 	LD	C,'>'
267f070  cd 7d f4       240    242 	CALL	CO
268f073  cd 35 f7       241    243 STARO:	CALL	TI	     ;GET A CONSOLE CHARACTER
269f076  e6 7f          242    244 	AND	7FH	     ;IGNORE NULLS
270f078  28 f9          243    245 	JR	Z,STARO	     ;GET ANOTHER
271f07a  d6 41          244    246 	SUB	'A'	     ;QUALIFY THE CHARACTER
272f07c  f8             245    247 	RET	M	     ;<A
273f07d  fe 1a          246    248 	CP	'Z'-'A'+1
274f07f  d0             247    249 	RET	NC	     ;>Z
275f080  87             248    250 	ADD	A,A	     ;A*2
276f081  06 00          249    251 	LD	B,0
277f083  4f             250    252 	LD	C,A	     ;POINT TO PLACE ON TABLE
278f084  21 8f f0       251    253 	LD	HL,TBL	     ;POINT TO COMMAND TABLE
279f087  09             252    254 	ADD	HL,BC	     ;ADD IN DISPLACEMENT
280f088  5e             253    255 	LD	E,(HL)
281f089  23             254    256 	INC	HL
282f08a  56             255    257 	LD	D,(HL)
283f08b  eb             256    258 	EX	DE,HL	     ;D&E=ROUTINE ADDRESS
284f08c  0e 02          257    259 	LD	C,2	     ;SET C UP
285f08e  e9             258    260 	JP	(HL)	     ;GO EXECUTE COMMAND
286                     259    261 ;
287                     260    262 ;		<COMMAND BRANCH TABLE>
288                     261    263 ;
289                     262    264 TBL:
290f08f  c3 f0          263    265 	DEFW	ASSIGN	    ;A - ASSIGN I/O
291f091  14 f1          264    266 	DEFW	BYE	    ;B - SYSTEM SHUT-DOWN
292f093  41 f1          265    267 	DEFW	COMP	    ;C - COMPARE MEMORY VS. READER INPUT
293f095  62 f1          266    268 	DEFW	DISP	    ;D - DISPLAY MEMORY ON CONS. IN HEX
294f097  79 f1          267    269 	DEFW	EOF	    ;E - END OF FILE TAG FOR HEX DUMPS
295f099  95 f1          268    270 	DEFW	FILL	    ;F - FILL MEMORY WITH A CONSTANT
296f09b  a2 f1          269    271 	DEFW	GOTO	    ;G - GOTO [ADDR]<,>BREAKPOINTS (2)
297f09d  76 f5          270    272 	DEFW	HEXN	    ;H - HEX MATH. <SUM>,<DIFFERENCE>
298                     271    273 ;	DEFW	J	    ;I * USER DEFINED, INSERT VECTOR
299f09f  57 f4          272    274 	DEFW	ERROR
300f0a1  f0 f1          273    275 	DEFW	TEST	    ;J - NON-DESTRUCTIVE MEMORY TEST
301                     274    276 ;	DEFW	J+3	    ;K * USER DEFINED, INSERT VECTOR
302f0a3  57 f4          275    277 	DEFW	ERROR
303f0a5  80 f6          276    278 	DEFW	LOAD	    ;L - MOVE A BINARY FORMAT FILE
304f0a7  0e f2          277    279 	DEFW	MOVE	    ;M - MOVE BLOCKS OF MEMORY
305f0a9  ee f4          278    280 	DEFW	NULL	    ;N - PUNCH NULLS ON PUNCH DEVICE
306                     279    281 ;	DEFW	J+6	    ;O * USER DEFINED, INSERT VECTOR
307f0ab  57 f4          280    282 	DEFW	ERROR
308f0ad  22 f1          281    283 	DEFW	PUTA	    ;P - 'PUT' ASCII INTO MEMORY.
309f0af  56 f7          282    284 	DEFW	QUERY	    ;Q - QI(N)=DISP. N; QO(N,V)=OUT N,V
310f0b1  19 f2          283    285 	DEFW	READ	    ;R - READ A HEX FILE (W/CHECKSUMS)
311f0b3  d2 f2          284    286 	DEFW	SUBS	    ;S - SUBSTITUTE &/OR EXAMINE MEMORY
312f0b5  fb f2          285    287 	DEFW	TYPE	    ;T - TYPE MEMORY IN ASCII
313f0b7  d6 f4          286    288 	DEFW	UNLD	    ;U - MEMORY TO PUNCH (BINARY FORMAT)
314f0b9  81 f7          287    289 	DEFW	VERIFY	    ;V - COMPARE MEMORY AGAINST MEMORY
315f0bb  63 f3          288    290 	DEFW	WRITE	    ;W - MEMORY TO PUNCH (HEX FORMAT)
316f0bd  a3 f3          289    291 	DEFW	XAM	    ;X - EXAMINE & MODIFY CPU REGISTERS
317f0bf  1b f3          290    292 	DEFW	WHERE	    ;Y - FIND SEQUENCE OF BYTES IN RAM
318f0c1  6e f4          291    293 	DEFW	SIZE	    ;Z - ADDRESS OF LAST R/W LOCATION
319                     292    294 ;
320                     293    295 ;
321                     294    296 ;
322                     295    297 ;	THIS ROUTINE CONTROLS THE CONFIGURATION
323                     296    298 ; OF THE VARIOUS I/O DRIVERS & DEVICES. THIS IS
324                     297    299 ; ACCOMPLISHED VIA A HARDWARE READ/WRITE PORT.
325                     298    300 ;	THIS PORT IS INITIALIZED UPON SIGN-ON
326Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 6
327Source file: zapple.asm
328Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
329
330LOC   OBJECT CODE   LINE   STMT SOURCE CODE
331                     299    301 ; BY THE VALUE READ ON PORT 'SENSE'.  IT MAY BE
332                     300    302 ; DYNAMICALLY MODIFIED THROUGH CONSOLE COMMANDS.
333                     301    303 ;
334                     302    304 ; THE VALUE ON THE 'IOBYT' PORT REPRESENTS THE
335                     303    305 ; CURRENT CONFIGURATION.  IT IS STURCTURED THUSLY:
336                     304    306 ;
337                     305    307 ; 000000XX - WHERE XX REPRESENTS THE CURRENT CONSOLE
338                     306    308 ; 0000XX00 - WHERE XX REPRESENTS THE CURRENT READER
339                     307    309 ; 00XX0000 - WHERE XX REPRESENTS THE CURRENT PUNCH
340                     308    310 ; XX000000 - WHERE XX REPRESENTS THE CURRENT LISTER
341                     309    311 ;
342                     310    312 ; WHEN USING A MEMORY LOCATION FOR IOBYT, THE
343                     311    313 ; POLARITY IS REVERSED.  FOR AN I/O PORT,
344                     312    314 ; WHEN XX = 11, THE DEVICE IS ALWAYS THE
345                     313    315 ; TELEPRINTER.  WHEN XX = 00, THE DEVICE IS ALWAYS
346                     314    316 ; USER DEFINED.  SEE OPERATOR'S MANUAL FOR FURTHER
347                     315    317 ; DETAILS.
348                     316    318 ;
349f0c3  cd 35 f7       317    319 ASSIGN:	CALL	TI	     ;GET DEVICE NAME
350f0c6  21 93 f7       318    320 	LD	HL,LTBL	     ;POINT TO DEVICE TABLE
351f0c9  01 00 04       319    321 	LD	BC,400H	     ;4 DEVICES TO LOOK FOR
352f0cc  11 05 00       320    322 	LD	DE,5	     ;4 DEV. + IDENT.
353f0cf  be             321    323 ASS0:	CP	(HL)	     ;LOOK FOR MATCH
354f0d0  28 06          322    324 	JR	Z,ASS1
355f0d2  19             323    325 	ADD	HL,DE	     ;GO THRU TABLE
356f0d3  0c             324    326 	INC	C	     ;KEEP TRACK OF DEVICE
357f0d4  10 f9          325    327 	DJNZ	ASS0
358f0d6  18 15          326    328 	JR	ASERR	     ;WRONG IDENTIFIER
359f0d8  59             327    329 ASS1:	LD	E,C	     ;SAVE DEVICE NUMBER
360f0d9  cd 35 f7       328    330 ASS2:	CALL	TI	     ;SCAN PAST '='
361f0dc  fe 3d          329    331 	CP	'='
362f0de  20 f9          330    332 	JR	NZ,ASS2
363f0e0  cd 35 f7       331    333 	CALL	TI	     ;GET NEW ASSIGNMENT
364f0e3  01 00 04       332    334 	LD	BC,400H	     ;4 POSSIBLE ASSIGNMENTS
365f0e6  23             333    335 ASS3:	INC	HL	     ;POINT TO ASSIGNMENT NAME
366f0e7  be             334    336 	CP	(HL)	     ;LOOK FOR PROPER MATCH
367f0e8  28 06          335    337 	JR	Z,ASS4	     ;MATCH FOUND
368f0ea  0c             336    338 	INC	C	     ;KEEP TRACK OF ASSIGNMENT NMBR
369f0eb  10 f9          337    339 	DJNZ	ASS3
370f0ed  c3 57 f4       338    340 ASERR:	JP	ERROR	     ;NO MATCH, ERROR
371f0f0  3e 03          339    341 ASS4:	LD	A,3	     ;SET UP A MASK
372f0f2  1c             340    342 	INC	E
373f0f3  1d             341    343 ASS5:	DEC	E	     ;DEVICE IN E
374f0f4  28 08          342    344 	JR	Z,ASS6	     ;GOT IT
375f0f6  cb 21          343    345 	SLA	C	     ;ELSE MOVE MASKS
376f0f8  cb 21          344    346 	SLA	C
377f0fa  17             345    347 	RLA
378f0fb  17             346    348 	RLA		     ;A=DEVICE MASK
379f0fc  18 f5          347    349 	JR	ASS5
380f0fe  2f             348    350 ASS6:	CPL		     ;INVERT FOR AND'ING
381f0ff  57             349    351 	LD	D,A	     ;SAVE IN D
382f100  cd 09 f6       350    352 ASS7:	CALL	PCHK	     ;WAIT FOR [CR]
383f103  30 fb          351    353 	JR	NC,ASS7
384f105  cd 10 f1       352    354 	CALL	IOCHK	     ;GET PRESENT CONFIGURATION
385f108  a2             353    355 	AND	D	     ;MODIFY ONLY SELECTED DEVICE
386f109  b1             354    356 	OR	C	     ;'OR' NEW BIT PATTERN
387f10a  4f             355    357 	LD	C,A	     ;NEW CONFIGURATION
388                     356    358 ;
389                     357    359 ; THIS ALLOWS USER PROGRAMS TO MODIFY
390                     358    360 ; THE I/O CONFIGURATIMN DYNAMICALLY
391Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 7
392Source file: zapple.asm
393Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
394
395LOC   OBJECT CODE   LINE   STMT SOURCE CODE
396                     359    361 ; DURING EXECUTION.
397                     360    362 ;
398f10b  79             361    363 IOSET:	LD	A,C	     ;NEW I/O BYTE PASSED IN C REG
399                     362    364 ;	CPL		     ;WE SAVE THE INVERTED BYTE
400                     363    365 ;	OUT	(IOBYT),A    ;IN AN I/O PORT LATCH
401f10c  32 ff ef       364    366 	LD	(IOBYT),A    ;SAVE NEW I/O BYTE IN MEMORY
402f10f  c9             365    367 	RET
403                     366    368 ;
404                     367    369 ; THIS RETURNS THE CURRENT I/O
405                     368    370 ; CONFIGURATION IN THE A REG.
406                     369    371 ;
407                     370    372 IOCHK:	;IN	A,(IOBYT)    ;GET SAVED VALUE
408                     371    373 ;	CPL		     ;AND INVERT IT AGAIN
409f110  3a ff ef       372    374 	LD	A,(IOBYT)    ;GET SAVED VALUE
410f113  c9             373    375 	RET
411                     374    376 ;
412                     375    377 ; THIS ROUTINE IS USED AS A SIMPLE MEANS TO PREVENT
413                     376    378 ; UNAUTHORIZED SYSTEM OPERATION. THE SYSTEM LOCKS UP,
414                     377    379 ; MONITORING FOR A 'CONT.-SHIFT-N', AT WHICH TIME IT
415                     378    380 ; WILL SIGN-ON AGAIN. NO REGISTER ASSIGNMENTS OR I/O
416                     379    381 ; CONFIGURATIONS WILL BE ALTERED.
417                     380    382 ;
418f114  cd 09 f5       381    383 BYE:	CALL	CRLF
419f117  cd 2f f7       382    384 BY1:	CALL	KI
420f11a  fe 1e          383    385 	CP	1EH	     ;CONTROL-SHIFT-N
421f11c  20 f9          384    386 	JR	NZ,BY1
422f11e  d1             385    387 	POP	DE	     ;REMOVE THE RETURN
423f11f  c3 62 f0       386    388 	JP	HELLO	     ;AND SIGN-ON AGAIN
424                     387    389 ;
425                     388    390 ; THIS ALLOWS ENTERING OF ASCII TEXT INTO MEMORY
426                     389    391 ; FROM THE CONSOLE DEVICE. THE PARITY BIT IS CLEARED,
427                     390    392 ; AND ALL WILL BE STORED EXCEPT THE BACK-ARROR [_]
428                     391    393 ; WHICH DELETES THE PREVIOUS CHARACTER, AND
429                     392    394 ; CONTROL-D, WHICH RETURNS CONTROL TO THE MONITOR.
430                     393    395 ; THIS COMMAND, COMBINED WITH THE 'Y' COMMAND,
431                     394    396 ; PROVIDES A RUDIMENTARY TEXT PROCESSING ABILITY.
432                     395    397 ;
433f122  cd 38 f5       396    398 PUTA:	CALL	EXPR1	     ;GET THE STARTING ADDR.
434f125  cd 09 f5       397    399 	CALL	CRLF
435f128  e1             398    400 	POP	HL
436f129  cd 2f f7       399    401 PUTA1:	CALL	KI	     ;GET A CHARACTER
437f12c  fe 04          400    402 	CP	4	     ;CONTROL-D? (EOT)
438f12e  ca 75 f4       401    403 	JP	Z,LFADR	     ;YES, STOP & PRINT
439f131  fe 5f          402    404 	CP	'_'	     ;ERASE MISTAKE?
440f133  28 08          403    405 	JR	Z,PUTA3	     ; YES.
441f135  77             404    406 	LD	(HL),A	     ;ELSE STORE IT IN MEMORY
442f136  4f             405    407 	LD	C,A
443f137  23             406    408 	INC	HL
444f138  cd 7d f4       407    409 PUTA2:	CALL	CO	     ;ECHO ON CONSOLE
445f13b  18 ec          408    410 	JR	PUTA1
446f13d  2b             409    411 PUTA3:	DEC	HL
447f13e  4e             410    412 	LD	C,(HL)
448f13f  18 f7          411    413 	JR	PUTA2	     ;ECHO & CONTINUE
449                     412    414 ;
450                     413    415 ; THIS ROUTINE COMPARES THE READER INPUT
451                     414    416 ; DEVICE WITH THE MEMORY BLOCK SPECIFIED.
452                     415    417 ; IT TESTS ALL EIGHT BITS, AND ANY DISCREPENCIES
453                     416    418 ; WILL BE OUTPUT TO THE CONSOLE. THIS IS USEFUL
454                     417    419 ; WHEN USED WITH THE BINARY DUMP FORMAT TO BOTH
455                     418    420 ; VERIFY PROPER READING & STORAGE, OR TO DETECT
456Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 8
457Source file: zapple.asm
458Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
459
460LOC   OBJECT CODE   LINE   STMT SOURCE CODE
461                     419    421 ; PROGRAM CHANGES SINCE IT WAS LAST LOADED.
462                     420    422 ;
463f141  cd 04 f5       421    423 COMP:	CALL	EXLF	     ;GET START ' STOP ADDR.
464f144  cd 67 f4       422    424 COM1:	CALL	RIFF	     ;GET A FULL READER BYTE
465f147  be             423    425 	CP	(HL)	     ;8 BIT COMPARE
466f148  c4 50 f1       424    426 	CALL	NZ,CERR	     ;CALL IF INVALID COMPARE
467f14b  cd 66 f5       425    427 	CALL	HILOX	     ;SEE IF RANGE SATISFIED
468f14e  18 f4          426    428 	JR	COM1
469                     427    429 ;
470                     428    430 ; THIS SUBROUTINE IS USED TO DISPLAY THE
471                     429    431 ; CURRENT LOCATION OF THE 'M' REGISTER POINTER (HL),
472                     430    432 ; AND THE VALUE AT THE LOCATION, AND THE CONTENTS
473                     431    433 ; OF THE ACCUMULATOR. USED BY TWO ROUTINES.
474                     432    434 ;
475f150  47             433    435 CERR:	LD	B,A	     ;SAVE ACC.
476f151  cd 78 f4       434    436 	CALL	HLSP	     ;DISPLAY H&L
477f154  7e             435    437 	LD	A,(HL)
478f155  cd 87 f5       436    438 	CALL	LBYTE	     ;PRINT 'M'
479f158  cd 7b f4       437    439 	CALL	BLK	     ;SPACE OVER
480f15b  78             438    440 	LD	A,B
481f15c  cd 87 f5       439    441 	CALL	LBYTE	     ;PRINT ACC.
482f15f  c3 09 f5       440    442 	JP	CRLF	     ;CRLF & RETURN
483                     441    443 ;
484                     442    444 ; THIS DISPLAYS THE CONTENTS OF MEMORY IN BASE HEX
485                     443    445 ; WITH THE STARTING LOCATION ON EACH LINE. (BETWEEN
486                     444    446 ; THE TWO PARAMETERS GIVEN). 16 BYTES PER LINE MAX.
487                     445    447 ;
488f162  cd 04 f5       446    448 DISP:	CALL	EXLF	     ;GET DISPLAY RANGE
489f165  cd 75 f4       447    449 DIS0:	CALL	LFADR	     ;CRLF & PRINT ADDR.
490f168  cd 7b f4       448    450 DIS1:	CALL	BLK	     ;SPACE OVER
491f16b  7e             449    451 	LD	A,(HL)
492f16c  cd 87 f5       450    452 	CALL	LBYTE
493f16f  cd 66 f5       451    453 	CALL	HILOX	     ;RANGE CHECK
494f172  7d             452    454 	LD	A,L
495f173  e6 0f          453    455 	AND	0FH	     ;SEE IF TIME TO CRLF
496f175  20 f1          454    456 	JR	NZ,DIS1
497f177  18 ec          455    457 	JR	DIS0
498                     456    458 ;
499                     457    459 ; THIS OUTPUTS THE END OF FILE (EOF) PATTERN
500                     458    460 ; FOR THE CHECKSUM LOADER.  IT IS USED AFTER
501                     459    461 ; PUNCHING A BLOCK OF MEMORY WITH THE 'W'
502                     460    462 ; COMMAND.  AN ADDRESS PARAMETER MAY BE GIVEN,
503                     461    463 ; AND UPON READING, THIS ADDRESS WILL BE
504                     462    464 ; AUTOMATICALLY PLACED IN THE 'P' COUNTER. THE
505                     463    465 ; PROGRAM CAN THEN BE RUN WITH A SIMPLE 'G[CR]'
506                     464    466 ; COMMAND.
507                     465    467 ;
508f179  cd 38 f5       466    468 EOF:	CALL	EXPR1	     ;GET OPTIONAL ADDR.
509f17c  cd b2 f4       467    469 	CALL	PEOL	     ;CRLF TO PUNCH
510f17f  0e 3a          468    470 	LD	C,':'	     ;FILE MARKER CUE
511f181  cd b9 f4       469    471 	CALL	PUO
512f184  af             470    472 	XOR	A	     ;ZERO LENGTH
513f185  cd ed f5       471    473 	CALL	PBYTE
514f188  e1             472    474 	POP	HL
515f189  cd e8 f5       473    475 	CALL	PADR	     ;PUNCH OPTIONAL ADDR.
516f18c  21 00 00       474    476 	LD	HL,0	     ;FILE TYPE=0
517f18f  cd e8 f5       475    477 	CALL	PADR	     ;PUNCH IT
518f192  c3 ee f4       476    478 	JP	NULL	     ;TRAILER & RETURN
519                     477    479 ;
520                     478    480 ; THIS COMMAND WILL FILL A BLOCK OF MEMORY
521Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 9
522Source file: zapple.asm
523Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
524
525LOC   OBJECT CODE   LINE   STMT SOURCE CODE
526                     479    481 ; WITH A VALUE. IE: FO,1FFF,0 FILLS FROM
527                     480    482 ; <1> TO <2> WITH THE BYTE <3>. HANDY FOR
528                     481    483 ; INITIALIZING A BLOCK TO A SPECIFIC VALUE, OR
529                     482    484 ; MEMORY TO A CONSTANT VALUE BEFOR LOADING
530                     483    485 ; A PROGRAM.  (ZERO IS ESPECIALLY USEFUL.)
531                     484    486 ;
532f195  cd 2d f5       485    487 FILL:	CALL	EXPR3	     ;GET 3 PARAMETERS
533f198  71             486    488 FI1:	LD	(HL),C	     ;STORE THE BYTE
534f199  cd 6c f5       487    489 	CALL	HILO
535f19c  30 fa          488    490 	JR	NC,FI1
536f19e  d1             489    491 	POP	DE	     ;RESTORE STACK
537f19f  c3 67 f0       490    492 	JP	START	     ; IN CASE OF ACCIDENTS
538                     491    493 ;
539                     492    494 ; THIS COMMAND ALLOWS EXECUTION OF ANOTHER
540                     493    495 ; PROGRAM WHILE RETAINING SOME MONITOR
541                     494    496 ; CONTROL BY SETTING BREAKPOINTS.
542                     495    497 ;
543                     496    498 ; TO SIMPLY EXECUTE, TYPE 'G<ADDR>[CR]'. TO SET
544                     497    499 ; A BREAKPOINT TRAP, ADD THE ADDRESS(ES) TO THE
545                     498    500 ; COMMAND. IE: G<ADDR>,<BKPT>[CR]. TWO BREAKPOINTS
546                     499    501 ; ARE ALLOWED, ENOUGH TO SATISFY MOST REQUIREMENTS.
547                     500    502 ; ONCE A BREAKPOINT HAS BEEN REACHED, THE
548                     501    503 ; REGISTERS MAY BE EXAMINED OR MODIFIED. THE
549                     502    504 ; PROGRAM CAN THEN BE CONTINUED BY TYPING ONLY
550                     503    505 ; A 'G[CR]'. OR ANOTHER BREAKPOINT COULD BE
551                     504    506 ; IMPLEMENTED AT THAT TIME BY TYPING 'G,<BKPT>[CR]'.
552                     505    507 ;
553                     506    508 ; *NOTE: THIS IS SOFTWARE CONTROLLED, AND THE
554                     507    509 ; BREAKPOINT MUST OCCUR ON AN INSTRUCTION
555                     508    510 ; BYTE.
556                     509    511 ;
557f1a2  cd 09 f6       510    512 GOTO:	CALL	PCHK	     ;GET A POSSIBLE ADDRESS
558f1a5  38 40          511    513 	JR	C,GOT3	     ;CR ENTERED
559f1a7  28 10          512    514 	JR	Z,GOT0	     ;DELIMITER ENTERED
560f1a9  cd 5f f5       513    515 	CALL	EXF	     ;GET ONE EXPRESSION
561f1ac  d1             514    516 	POP	DE
562f1ad  21 34 00       515    517 	LD	HL,PLOC	     ;PLACE ADDRESS IN 'P' LOCATION
563f1b0  39             516    518 	ADD	HL,SP
564f1b1  72             517    519 	LD	(HL),D	     ;HIGH BYTE
565f1b2  2b             518    520 	DEC	HL
566f1b3  73             519    521 	LD	(HL),E	     ;LOW BYTE
567f1b4  78             520    522 	LD	A,B
568f1b5  fe 0d          521    523 	CP	CR	     ;SEE IF LAST CHARACTER WAS A CR
569f1b7  28 2e          522    524 	JR	Z,GOT3	     ;YES, LEAVE
570f1b9  16 02          523    525 GOT0:	LD	D,2	     ;TWO BREAKPOINTS MAX
571f1bb  21 35 00       524    526 	LD	HL,TLOC	     ;POINT TO TRAP STORAGE
572f1be  39             525    527 	ADD	HL,SP
573f1bf  e5             526    528 GOT1:	PUSH	HL	     ;SAVE STORAGE POINTER
574f1c0  cd 38 f5       527    529 	CALL	EXPR1	     ;GET A TRAP ADDRESS
575f1c3  58             528    530 	LD	E,B	     ;SAVE DELIMITER
576f1c4  c1             529    531 	POP	BC	     ;TRAP ADDR.
577f1c5  e1             530    532 	POP	HL	     ;STORAGE
578f1c6  78             531    533 	LD	A,B	     ;LOOK AT TRAP ADDR
579f1c7  b1             532    534 	OR	C
580f1c8  28 0a          533    535 	JR	Z,GOT2	     ;DON'T SET A TRAP AT 0
581f1ca  71             534    536 	LD	(HL),C	     ;SAVE BKPT ADDR
582f1cb  23             535    537 	INC	HL
583f1cc  70             536    538 	LD	(HL),B
584f1cd  23             537    539 	INC	HL
585f1ce  0a             538    540 	LD	A,(BC)	     ;PICK UP INST. BYTE
586Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 10
587Source file: zapple.asm
588Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
589
590LOC   OBJECT CODE   LINE   STMT SOURCE CODE
591f1cf  77             539    541 	LD	(HL),A	     ;SAVE THAT TOO
592f1d0  23             540    542 	INC	HL
593f1d1  3e ff          541    543 	LD	A,0FFH	     ;RST 7
594f1d3  02             542    544 	LD	(BC),A	     ;SOFTWARE INTERUPT
595f1d4  7b             543    545 GOT2:	LD	A,E	     ;LOOK AT DELIMITER
596f1d5  fe 0d          544    546 	CP	CR
597f1d7  28 03          545    547 	JR	Z,GOT2A
598f1d9  15             546    548 	DEC	D	     ;COUNT BKPTS
599f1da  20 e3          547    549 	JR	NZ,GOT1	     ;GET ONE MORE
600f1dc  3e c3          548    550 GOT2A:	LD	A,0C3H	     ;SET UP JUMP INSTRUCTION
601f1de  32 38 00       549    551 	LD	(RST7),A     ; AT RESTART TRAP LOC.
602f1e1  21 1e f0       550    552 	LD	HL,TRAP	     ; TO MONITOR VECTOR
603f1e4  22 39 00       551    553 	LD	(RST7+1),HL
604f1e7  cd 09 f5       552    554 GOT3:	CALL	CRLF
605f1ea  d1             553    555 	POP	DE	     ;CLEAR SYSTEM RETURN
606f1eb  21 16 00       554    556 	LD	HL,22	     ;FIND 'EXIT' ROUTINE
607f1ee  39             555    557 	ADD	HL,SP	     ;UP IN STACK
608f1ef  e9             556    558 	JP	(HL)	     ;GO SOMPLACE
609                     557    559 ;
610                     558    560 ; THIS IS A 'QUICKIE' MEMORY TEST TO SPOT
611                     559    561 ; HARD MEMORY FAILURES, OR ACCIDENTLY
612                     560    562 ; PROTECTED MEMORY LOCATIONS. IT IS NOT
613                     561    563 ; MEANT TO BE THE DEFINITIVE MEMORY DIAGNOSTIC.
614                     562    564 ; IT IS, HOWEVER, NON-DESTRUCTIVE. ERRORS ARE
615                     563    565 ; PRINTED ON THE CONSOLE AS FOLLOWS-
616                     564    566 ; <ADDR> 00000100 WHERE <1> IS THE BAD BIT.
617                     565    567 ; BIT LOCATION OF THE FAILURE IS EASILY
618                     566    568 ; DETERMINED. NON-R/W MEMORY WILL RETURN
619                     567    569 ; WITH- 11111111
620                     568    570 ;
621f1f0  cd 04 f5       569    571 TEST:	CALL	EXLF	     ;GET TWO PARAMS
622f1f3  7e             570    572 TEST1:	LD	A,(HL)	     ;READ A BYTE
623f1f4  47             571    573 	LD	B,A	     ;SAVE IN B REG.
624f1f5  2f             572    574 	CPL
625f1f6  77             573    575 	LD	(HL),A	     ;READ/COMPLIMENT/WRITE
626f1f7  ae             574    576 	XOR	(HL)	     ; & COMPARE
627f1f8  28 0e          575    577 	JR	Z,TEST2	     ;SKIP IF ZERO (OK)
628f1fa  d5             576    578 	PUSH	DE	     ;SAVE END POINTER
629f1fb  50             577    579 	LD	D,B	     ;SAVE BYTE
630f1fc  5f             578    580 	LD	E,A	     ;SET-UP TO DISPLAY
631f1fd  cd 78 f4       579    581 	CALL	HLSP	     ;PRINT BAD ADDR
632f200  cd 68 f7       580    582 	CALL	BITS	     ;PRINT BAD BIT LOC.
633f203  cd 09 f5       581    583 	CALL	CRLF
634f206  42             582    584 	LD	B,D	     ;RESTORE BYTE
635f207  d1             583    585 	POP	DE	     ;RESTORE DE
636f208  70             584    586 TEST2:	LD	(HL),B	     ;REPLACE BYTE
637f209  cd 66 f5       585    587 	CALL	HILOX	     ;RANGE TEST
638f20c  18 e5          586    588 	JR	TEST1
639                     587    589 ;
640                     588    590 ; THIS COMMAND MOVES MASS AMOUNTS OF MEMORY
641                     589    591 ; FROM <1> THRU <2> TO THE ADDRESS STARTING
642                     590    592 ; AT <3>.  THIS ROUTINE SHOULD BE USED WITH
643                     591    593 ; SOME CAUTION, AS IT COULD SMASH MEMORY IF
644                     592    594 ; CARLESSLY IMPLEMENTED.
645                     593    595 ;
646                     594    596 ;	M<1>,<2>,<3>
647                     595    597 ;
648f20e  cd 2d f5       596    598 MOVE:	CALL	EXPR3	     ;GET 3 PARAMETERS
649f211  7e             597    599 MO1:	LD	A,(HL)	     ;PICK UP
650f212  02             598    600 	LD	(BC),A	     ;PUT DOWN
651Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 11
652Source file: zapple.asm
653Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
654
655LOC   OBJECT CODE   LINE   STMT SOURCE CODE
656f213  03             599    601 	INC	BC	     ;MOVE UP
657f214  cd 66 f5       600    602 	CALL	HILOX	     ;CHECK IF DONE
658f217  18 f8          601    603 	JR	MO1
659                     602    604 ;
660                     603    605 ; THIS COMMAND READS THE CHECK-SUMMED HEX FILES
661                     604    606 ; FOR BOTH THE NORMAL INTEL FORMAT AND THE TDL
662                     605    607 ; RELOCATING FORMAT. ON BOTH FILES, A 'BIAS' MAY
663                     606    608 ; BE ADDED, WHICH WILL CAUSE THE OBJECT CODE TO
664                     607    609 ; BE PLACED IN A LOCATION OTHER THAN ITS
665                     608    610 ; INTENDED EXECUTION LOCATION. THE BIAS IS ADDED
666                     609    611 ; TO WHAT WOULD HAVE BEEN THE NORMAL LOADING
667                     610    612 ; LOCATION, AND WILL WRAP AROUND TO ENABLE
668                     611    613 ; LOADING ANY PROGRAM ANYWHERE IN MEMORY.
669                     612    614 ;
670                     613    615 ; WHEN LOADING A RELOCATABLE FILE, AN ADDITIONAL
671                     614    616 ; PARAMETER MAY BE ADDED, WHICH REPRESENTS THE
672                     615    617 ; ACTUAL EXECUTION ADDRESS DESIRED. THIS ALSO MAY
673                     616    618 ; BE ANY LOCATION IN MEMORY.
674                     617    619 ;
675                     618    620 ; EXAMPLES:
676                     619    621 ;
677                     620    622 ; R[CR] =0 BIAS, 0 EXECUTION ADDR.
678                     621    623 ; R<ADDR1>[CR] =<1>BIAS, 0 EXECUTION ADDR.
679                     622    624 ; R,<ADDR1>[CR] =0 BIAS, <1> EXECUTION ADDR.
680                     623    625 ; R<ADDR1>,<ADDR2>[CR] =<1>BIAS, <2>EXECUTION ADDR.
681                     624    626 ;
682f219  cd 38 f5       625    627 READ:	CALL	EXPR1	     ;GET BIAS, IF ANY
683f21c  78             626    628 	LD	A,B	     ;LOOK AT DELIMITER
684f21d  d6 0d          627    629 	SUB	CR	     ;ALL DONE?
685f21f  47             628    630 	LD	B,A	     ;SET UP RELOCATION OF 0
686f220  4f             629    631 	LD	C,A	     ; IF CR ENTERED
687f221  d1             630    632 	POP	DE	     ;BIAS AMOUNT
688f222  28 04          631    633 	JR	Z,REA0	     ;CR ENTERED
689f224  cd 38 f5       632    634 	CALL	EXPR1	     ;GET RELOCATION
690f227  c1             633    635 	POP	BC	     ;ACTUAL RELOCATION VALUE
691f228  eb             634    636 REA0:	EX	DE,HL
692f229  d9             635    637 	EXX		     ;HL'=BIAS, BC'=RELOCATION
693f22a  cd 09 f5       636    638 	CALL	CRLF
694f22d  cd 7a f6       637    639 LOD0:	CALL	RIX	     ;GET A CHARACTER
695f230  d6 3a          638    640 	SUB	':'	     ;ABSOLUTE FILE CUE?
696f232  47             639    641 	LD	B,A	     ;SAVE CUE CLUE
697f233  e6 fe          640    642 	AND	0FEH	     ;KILL BIT 0
698f235  20 f6          641    643 	JR	NZ,LOD0	     ; NO, KEEP LOOKING
699f237  57             642    644 	LD	D,A	     ;ZERO CHECKSUM
700f238  cd b3 f2       643    645 	CALL	SBYTE	     ;GET FILE LENGTH
701f23b  5f             644    646 	LD	E,A	     ;SAVE IN E REG.
702f23c  cd b3 f2       645    647 	CALL	SBYTE	     ;GET LOAD MSB
703f23f  f5             646    648 	PUSH	AF	     ;SAVE IT
704f240  cd b3 f2       647    649 	CALL	SBYTE	     ;GET LOAD LSB
705f243  d9             648    650 	EXX		     ;CHANGE GEARS
706f244  d1             649    651 	POP	DE	     ;RECOVER MSB
707f245  5f             650    652 	LD	E,A	     ;FULL LOAD ADDR
708f246  c5             651    653 	PUSH	BC	     ;BC'=RELOCATION
709f247  d5             652    654 	PUSH	DE	     ;DE'=LOAD ADDR
710f248  e5             653    655 	PUSH	HL	     ;HL'=BIAS
711f249  19             654    656 	ADD	HL,DE	     ; BIAS+LOAD
712f24a  e3             655    657 	EX	(SP),HL	     ;RESTORE HL'
713f24b  dd e1          656    658 	POP	IX	     ; X=BIAS+LOAD
714f24d  d9             657    659 	EXX		     ;DOWNSHIFT
715f24e  e1             658    660 	POP	HL	     ;HL=LOAD ADDR
716Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 12
717Source file: zapple.asm
718Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
719
720LOC   OBJECT CODE   LINE   STMT SOURCE CODE
721f24f  cd b3 f2       659    661 	CALL	SBYTE	     ;GET FILE TYPE
722f252  3d             660    662 	DEC	A	     ;1=REL. FILE, 0=ABS.
723f253  78             661    663 	LD	A,B	     ;SAVE CUE BIT
724f254  c1             662    664 	POP	BC	     ;BC=RELOCATION
725f255  20 03          663    665 	JR	NZ,ABS0      ;ABSOLUTE FILE
726f257  09             664    666 	ADD	HL,BC	     ;ELSE RELOCATE
727f258  dd 09          665    667 	ADD	IX,BC	     ;BOTH X & HL
728f25a  1c             666    668 ABS0:	INC	E	     ;TEST LENGHT
729f25b  1d             667    669 	DEC	E	     ;0=DONE
730f25c  28 19          668    670 	JR	Z,DONE
731f25e  3d             669    671 	DEC	A	     ;TEST CUE
732f25f  28 22          670    672 	JR	Z,LODR	     ;RELATIVE
733f261  cd b3 f2       671    673 LLO1:	CALL	SBYTE	     ;NEXT
734f264  cd c6 f2       672    674 	CALL	STORE	     ;STORE IT
735f267  20 f8          673    675 	JR	NZ,LLO1	     ;MORE COMING
736f269  cd b3 f2       674    676 LOD4:	CALL	SBYTE	     ;GET CHECKSUM
737f26c  28 bf          675    677 	JR	Z,LOD0	     ;GOOD CHECKSUM
738f26e  dd e5          676    678 ERR3:	PUSH	IX
739f270  e1             677    679 	POP	HL	     ;TRANSFER
740f271  cd 82 f5       678    680 	CALL	LADR	     ;PRINT CURRENT LOAD ADDR
741f274  c3 57 f4       679    681 ERR2:	JP	ERROR	     ;ABORT
742f277  7c             680    682 DONE:	LD	A,H	     ;DON'T MODIFY IF ZERO
743f278  b5             681    683 	OR	L
744f279  c8             682    684 	RET	Z
745f27a  eb             683    685 	EX	DE,HL	     ;ELSE STORE IN PC
746f27b  21 34 00       684    686 	LD	HL,PLOC
747f27e  39             685    687 	ADD	HL,SP
748f27f  72             686    688 	LD	(HL),D	     ;IN STACK AREA
749f280  2b             687    689 	DEC	HL
750f281  73             688    690 	LD	(HL),E
751f282  c9             689    691 	RET
752f283  2e 01          690    692 LODR:	LD	L,1	     ;SET-UP BIT COUNTER
753f285  cd a3 f2       691    693 LOD1:	CALL	LODCB	     ;GET THE BIT
754f288  38 07          692    694 	JR	C,LOD3	     ;DOUBLE BIT
755f28a  cd c6 f2       693    695 LOD5:	CALL	STORE	     ;WRITE IT
756f28d  20 f6          694    696 	JR	NZ,LOD1
757f28f  18 d8          695    697 	JR	LOD4	     ;TEST CHECKSUM
758f291  4f             696    698 LOD3:	LD	C,A	     ;SAVE LOW BYTE
759f292  cd a3 f2       697    699 	CALL	LODCB	     ;NEXT CONTROL BIT
760f295  47             698    700 	LD	B,A	     ;SAVE HIGH BYTE
761f296  d9             699    701 	EXX
762f297  c5             700    702 	PUSH	BC	     ;GET RELOCATION
763f298  d9             701    703 	EXX
764f299  e3             702    704 	EX	(SP),HL	     ;INTO HL
765f29a  09             703    705 	ADD	HL,BC	     ;RELOCATE
766f29b  7d             704    706 	LD	A,L	     ;LOW BYTE
767f29c  cd c6 f2       705    707 	CALL	STORE	     ;STORE IT
768f29f  7c             706    708 	LD	A,H	     ;HIGH BYTE
769f2a0  e1             707    709 	POP	HL	     ;RESTORE HL
770f2a1  18 e7          708    710 	JR	LOD5	     ;DO THIS AGAIN
771f2a3  2d             709    711 LODCB:	DEC	L	     ;COUNT BITS
772f2a4  20 07          710    712 	JR	NZ,LC1	     ;MORE LEFT
773f2a6  cd b3 f2       711    713 	CALL	SBYTE	     ;GET NEXT
774f2a9  1d             712    714 	DEC	E	     ;COUNT BYTES
775f2aa  67             713    715 	LD	H,A	     ;SAVE THE BITS
776f2ab  2e 08          714    716 	LD	L,8	     ;8 BITS/BYTE
777f2ad  cd b3 f2       715    717 LC1:	CALL	SBYTE	     ;GET A DATA BYTE
778f2b0  cb 24          716    718 	SLA	H	     ;TEST NEXT BIT
779f2b2  c9             717    719 	RET
780f2b3  c5             718    720 SBYTE:	PUSH	BC	     ;PRESERVE BC
781Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 13
782Source file: zapple.asm
783Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
784
785LOC   OBJECT CODE   LINE   STMT SOURCE CODE
786f2b4  cd d5 f5       719    721 	CALL	RIBBLE	     ;GET A CONVERTED ASCII CHAR.
787f2b7  07             720    722 	RLCA
788f2b8  07             721    723 	RLCA
789f2b9  07             722    724 	RLCA
790f2ba  07             723    725 	RLCA		     ;MOVE IT TO HIGH NIBBLE
791f2bb  4f             724    726 	LD	C,A	     ;SAVE IT
792f2bc  cd d5 f5       725    727 	CALL	RIBBLE	     ;GET OTHER HALF
793f2bf  b1             726    728 	OR	C	     ;MAKE WHOLE
794f2c0  4f             727    729 	LD	C,A	     ;SAVE AGAIN IN C
795f2c1  82             728    730 	ADD	A,D	     ;UPDATE CHECKSUM
796f2c2  57             729    731 	LD	D,A	     ;NEW CHECKSUM
797f2c3  79             730    732 	LD	A,C	     ;CONVERTED BYTE
798f2c4  c1             731    733 	POP	BC
799f2c5  c9             732    734 	RET
800f2c6  dd 77 00       733    735 STORE:	LD	(IX+0),A     ;WRITE TO MEMORY
801f2c9  dd be 00       734    736 	CP	(IX+0)	     ;VALID WRITE?
802f2cc  20 a0          735    737 	JR	NZ,ERR3	     ; NO.
803f2ce  dd 23          736    738 	INC	IX	     ;ADVANCE POINTER
804f2d0  1d             737    739 	DEC	E	     ;COUNT DOWN
805f2d1  c9             738    740 	RET
806                     739    741 ;
807                     740    742 ; THIS ROUTINE ALLOWS BOTH INSPECTION OF &
808                     741    743 ; MODIFICATION OF MEMORY ON A BYTE BY BYTE
809                     742    744 ; BASIS. IT TAKES ONE ADDRESS PARAMETER,
810                     743    745 ; FOLLOWED BY A SPACE.  THE DATA AT THAT
811                     744    746 ; LOCATION WILL BE DISPLAYED. IF IT IS
812                     745    747 ; DESIRED TO CHANGE IT, THE VALUE IS THEN
813                     746    748 ; ENTERED.  A FOLLOWING SPACE WILL DISPLAY
814                     747    749 ; THE NEXT BYTE.  A CARRIAGE RETURN [CR]
815                     748    750 ; WILL TERMINATE THE COMMAND.  THE SYSTEM
816                     749    751 ; ADDS A CRLF AT LOCATIONS ENDING WITH EITHER
817                     750    752 ; XXX0 OR XXX8. TO AID IN DETERMINING THE
818                     751    753 ; PRESENT ADDRESS, IT IS PRINTED AFTER
819                     752    754 ; EACH CRLF.  A BACKARROW [_] WILL BACK
820                     753    755 ; UP THE POINTER AND DISPLAY THE
821                     754    756 ; PREVIOUS LOCATION.
822                     755    757 ;
823f2d2  cd 38 f5       756    758 SUBS:	CALL	EXPR1	     ;GET STARTING ADDR
824f2d5  e1             757    759 	POP	HL
825f2d6  7e             758    760 SUB0:	LD	A,(HL)
826f2d7  cd 87 f5       759    761 	CALL	LBYTE	     ;DISPLAY THE BYTE
827f2da  cd 04 f6       760    762 	CALL	COPCK	     ;MODIFY?
828f2dd  d8             761    763 	RET	C	     ; NO, ALL DONE
829f2de  28 0f          762    764 	JR	Z,SUB1	     ;DON'T MODIFY
830f2e0  fe 5f          763    765 	CP	05FH	     ;BACKUP?
831f2e2  28 14          764    766 	JR	Z,SUB2
832f2e4  e5             765    767 	PUSH	HL	     ;SAVE POINTER
833f2e5  cd 5f f5       766    768 	CALL	EXF	     ;GET NEW VALUE
834f2e8  d1             767    769 	POP	DE	     ;VALUE IN E
835f2e9  e1             768    770 	POP	HL
836f2ea  73             769    771 	LD	(HL),E	     ;MODIFY
837f2eb  78             770    772 	LD	A,B	     ;TEST DELIMITER
838f2ec  fe 0d          771    773 	CP	CR
839f2ee  c8             772    774 	RET	Z	     ;DONE
840f2ef  23             773    775 SUB1:	INC	HL
841f2f0  7d             774    776 SUB3:	LD	A,L	     ;SEE IF TIME TO CRLF
842f2f1  e6 07          775    777 	AND	7
843f2f3  cc 75 f4       776    778 	CALL	Z,LFADR	     ;TIME TO CRLF
844f2f6  18 de          777    779 	JR	SUB0
845f2f8  2b             778    780 SUB2:	DEC	HL	     ;DECREMENT POINTER
846Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 14
847Source file: zapple.asm
848Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
849
850LOC   OBJECT CODE   LINE   STMT SOURCE CODE
851f2f9  18 f5          779    781 	JR	SUB3	     ;AND PRINT DATA THERE.
852                     780    782 ;
853                     781    783 ; THIS ROUTINE TRANSLATES THE DATA IN
854                     782    784 ; MEMORY TO AN ASCII FORMAT.  ALL NON-
855                     783    785 ; PRINTING CHARACTERS ARE CONVERTED TO
856                     784    786 ; PERIODS. [.]
857                     785    787 ; THERE ARE 64 CHARACTERS PER LINE.
858                     786    788 ;
859f2fb  cd 04 f5       787    789 TYPE:	CALL	EXLF	     ;DISPLAY RANGE
860f2fe  cd 75 f4       788    790 TYP0:	CALL	LFADR	     ;DISPLAY ADDRESS
861f301  06 40          789    791 	LD	B,64	     ;CHARACTERS PER LINE
862f303  7e             790    792 TYP1:	LD	A,(HL)
863f304  e6 7f          791    793 	AND	7FH	     ;KILL PARITY BIT
864f306  fe 20          792    794 	CP	' '	     ;RANGE TEST
865f308  30 02          793    795 	JR	NC,TYP3	     ;=>SPACE
866f30a  3e 2e          794    796 TYP2:	LD	A,'.'	     ;REPLACE NON-PRINTING
867f30c  fe 7c          795    797 TYP3:	CP	07CH	     ;ABOVE LOWER CASE Z
868f30e  30 fa          796    798 	JR	NC,TYP2
869f310  4f             797    799 	LD	C,A	     ;SEND IT
870f311  cd 7d f4       798    800 	CALL	CO
871f314  cd 66 f5       799    801 	CALL	HILOX	     ;MORE TO GO?
872f317  10 ea          800    802 	DJNZ	TYP1	     ;SEE IF TIME TO CRLF
873f319  18 e3          801    803 	JR	TYP0	     ;YES
874                     802    804 ;
875                     803    805 ; THIS IS A HEXADECIMAL SEARCH ROUTINE. IT
876                     804    806 ; TAKES NO ADDRESS PARAMETERS. AS MANY
877                     805    807 ; BYTES MAY BE ENTERED, SEPARATED BY A COMMA,
878                     806    808 ; AS DESIRED.  THE MAXIMUM IS 255, BUT 3-4 IS
879                     807    809 ; TYPICAL, AND MORE THAN 12 WOULD BE UNUSUAL.
880                     808    810 ; THE ENTIRE MEMORY IS SEARCHED STARTING
881                     809    811 ; FROM ZERO, AND ALL STARTING ADDRESSES OF EACH
882                     810    812 ; OCCURANCE OF THE SEARCH STRING ARE PRINTED
883                     811    813 ; ON THE CONSOLE DEVICE.
884                     812    814 ;
885f31b  16 00          813    815 WHERE:	LD	D,0	     ;COUNT SEARCH STRING
886f31d  cd 38 f5       814    816 WHER0:	CALL	EXPR1	     ;GET ONE BYTE
887f320  e1             815    817 	POP	HL	     ;PICK IT UP
888f321  65             816    818 	LD	H,L	     ;STICK IN HIGH BYTE
889f322  e5             817    819 	PUSH	HL	     ;PUT IT IN STACK
890f323  33             818    820 	INC	SP	     ;ADJUST STACK
891f324  14             819    821 	INC	D	     ;COUNT UP
892f325  78             820    822 	LD	A,B	     ;TEST DELIMITER
893f326  d6 0d          821    823 	SUB	CR
894f328  20 f3          822    824 	JR	NZ,WHER0     ;MORE TO GO
895f32a  47             823    825 	LD	B,A	     ;CHEAP ZEROS
896f32b  4f             824    826 	LD	C,A
897f32c  67             825    827 	LD	H,A
898f32d  6a             826    828 	LD	L,D	     ;GET BYTE COUNT IN L
899f32e  2d             827    829 	DEC	L	     ;-1
900f32f  39             828    830 	ADD	HL,SP	     ;BYTES STORED IN STACK
901f330  e5             829    831 	PUSH	HL
902f331  c5             830    832 	PUSH	BC
903f332  c5             831    833 FINDC:	PUSH	BC	     ;SAVE THAT POINTER
904f333  cd 09 f5       832    834 	CALL	CRLF
905f336  c1             833    835 	POP	BC	     ;RESTORE
906f337  e1             834    836 FIND:	POP	HL	     ;HL=SEARCH ADDR
907f338  dd e1          835    837 	POP	IX	     ;X=SEARCH BYTE POINTER
908f33a  5a             836    838 	LD	E,D	     ;RESET COUNTER
909f33b  dd 7e 00       837    839 	LD	A,(IX+0)     ;GET THE FIRST SEARCH BYTE
910f33e  ed b1          838    840 	CPIR		     ;COMPARE, INCR., & REPEAT
911Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 15
912Source file: zapple.asm
913Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
914
915LOC   OBJECT CODE   LINE   STMT SOURCE CODE
916f340  e2 77 f2       839    841 	JP	PO,DONE	     ;ODD PARITY=DONE
917f343  dd e5          840    842 	PUSH	IX	     ;SAVE POINTERS
918f345  e5             841    843 	PUSH	HL
919f346  1d             842    844 FOUND:	DEC	E
920f347  28 0b          843    845 	JR	Z,TELL	     ;FOUND ALL
921f349  dd 7e ff       844    846 	LD	A,(IX+-1)    ;LOOK AT NEXT MATCH
922f34c  be             845    847 	CP	(HL)	     ;TEST NEXT
923f34d  20 e8          846    848 	JR	NZ,FIND	     ;NO MATCH
924f34f  23             847    849 	INC	HL	     ;BUMP POINTERS
925f350  dd 2b          848    850 	DEC	IX
926f352  18 f2          849    851 	JR	FOUND	     ;TEST NEXT MATCH
927f354  e1             850    852 TELL:	POP	HL
928f355  e5             851    853 	PUSH	HL
929f356  2b             852    854 	DEC	HL
930f357  c5             853    855 	PUSH	BC	     ;SAVE SEARCH COUNT LIMIT
931f358  cd 82 f5       854    856 	CALL	LADR	     ;TELL CONSOLE
932f35b  c1             855    857 	POP	BC	     ;RESTORE
933f35c  18 d4          856    858 	JR	FINDC
934f35e  33             857    859 DONE2:	INC	SP
935f35f  1d             858    860 	DEC	E	     ;RESET STACK
936f360  20 fc          859    861 	JR	NZ,DONE2
937f362  c9             860    862 	RET
938                     861    863 ;
939                     862    864 ; THIS ROUTINE DUMPS MEMORY IN THE STANDARD
940                     863    865 ; INTEL HEX-FILE FORMAT.  A START & END
941                     864    866 ; PARAMETER IS REQUIRED. AT THE CONCLUSION
942                     865    867 ; OF THE DUMP, AN "END OF FILE" SHOULD BE
943                     866    868 ; GENERATED WITH THE "E" COMMAND.
944                     867    869 ;
945f363  cd 04 f5       868    870 WRITE:	CALL	EXLF	     ;GET TWO PARAMETERS
946f366  cd f1 f4       869    871 	CALL	WAIT	     ;PAUSE IF TTY CONFIGURATION
947f369  cd b2 f4       870    872 WRT0:	CALL	PEOL	     ;CRLF TO PUNCH
948f36c  01 3a 00       871    873 	LD	BC,':'	     ;START OF FILE
949f36f  cd b9 f4       872    874 	CALL	PUO	     ;PUNCH IT
950f372  d5             873    875 	PUSH	DE	     ;SAVE
951f373  e5             874    876 	PUSH	HL	     ;POINTERS
952f374  04             875    877 WRT1:	INC	B	     ;CALCULATE FILE LENGTH
953f375  cd 6c f5       876    878 	CALL	HILO
954f378  38 24          877    879 	JR	C,WRT4	     ;SHORT FILE
955f37a  3e 18          878    880 	LD	A,24	     ;24 BYTES PER FILE
956f37c  90             879    881 	SUB	B	     ;ENOUGH YET?
957f37d  20 f5          880    882 	JR	NZ,WRT1	     ; NO.
958f37f  e1             881    883 	POP	HL	     ;GET START ADDR BACK.
959f380  cd 86 f3       882    884 	CALL	WRT2	     ;SEND THE BLOCK
960f383  d1             883    885 	POP	DE	     ;RESTORE END OF FILE POINTER
961f384  18 e3          884    886 	JR	WRT0	     ;KEEP GOING
962f386  57             885    887 WRT2:	LD	D,A	     ;INITIALIZE CHECKSUM
963f387  78             886    888 	LD	A,B	     ;FILE LENGTH
964f388  cd ed f5       887    889 	CALL	PBYTE	     ;PUNCH IT
965f38b  cd e8 f5       888    890 	CALL	PADR	     ;PUNCH ADDRESS
966f38e  af             889    891 	XOR	A	     ;FILE TYPE=0
967f38f  cd ed f5       890    892 	CALL	PBYTE	     ;PUNCH IT
968f392  7e             891    893 WRT3:	LD	A,(HL)	     ;GET A DATA BYTE
969f393  cd ed f5       892    894 	CALL	PBYTE	     ;PUNCH IT
970f396  23             893    895 	INC	HL	     ;POINT TO NEXT BYTE
971f397  10 f9          894    896 	DJNZ	WRT3	     ;DECREMENT FILE COUNT
972f399  af             895    897 	XOR	A
973f39a  92             896    898 	SUB	D	     ;CALCULATE CHECKSUM
974f39b  c3 ed f5       897    899 	JP	PBYTE	     ;PUNCH IT, RETURN
975f39e  e1             898    900 WRT4:	POP	HL	     ;CLEAR STACK
976Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 16
977Source file: zapple.asm
978Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
979
980LOC   OBJECT CODE   LINE   STMT SOURCE CODE
981f39f  d1             899    901 	POP	DE	     ; OF POINTERS
982f3a0  af             900    902 	XOR	A	     ;SET UP A
983f3a1  18 e3          901    903 	JR	WRT2	     ;FINISH UP & RETURN
984                     902    904 ;
985                     903    905 ;
986                     904    906 ;	THIS ROUTINE ALLOWS DISPLAYING THE
987                     905    907 ; USER'S CPU REGISTERS. THEY ALSO MAY BE
988                     906    908 ; USING THE REGISTER NAME AFTER TYPEING THE "X".
989                     907    909 ; I.E. XA 00-
990                     908    910 ; THE REGISTER MAY BE SKIPPED OVER, OR MODIFIED,
991                     909    911 ; SIMILARLY TO THE "S" COMMAND.
992                     910    912 ;
993                     911    913 ; TO DISPLAY THE "NORMAL" SYSTEM STATUS,
994                     912    914 ; SIMPLY TYPE "X[CR]".  TO DISPLAY THE
995                     913    915 ; ADDITIONAL Z-80 REGISTERS, FOLLOW
996                     914    916 ; THE "X" WITH AN APOSTROPHE.  I.E. "X'[CR]",
997                     915    917 ; OR TO EXAMINE A SINGLE "PRIME" REGISTER,
998                     916    918 ; TYPE THE REGISTER IDENTIFIER AFTER THE
999                     917    919 ; APOSTROPHE.  I.E.  X'X 0000-
1000                     918    920 ;
1001                     919    921 ; THESE REGISTER VALUES ARE PLACED INTO THE CPU
1002                     920    922 ; UPON EXECUTING ANY "GO" COMMAND. [G]
1003                     921    923 ;
1004f3a3  cd 35 f7       922    924 XAM:	CALL	TI
1005f3a6  21 ca f7       923    925 	LD	HL,ACTBL
1006f3a9  fe 0d          924    926 	CP	CR	     ;FULL REG. DISPLAY
1007f3ab  28 5a          925    927 	JR	Z,XAM6
1008f3ad  fe 27          926    928 	CP	27H	     ;SEE IF PRIMES WANTED
1009f3af  20 0a          927    929 	JR	NZ,XAM0
1010f3b1  21 e3 f7       928    930 	LD	HL,PRMTB
1011f3b4  cd 35 f7       929    931 	CALL	TI
1012f3b7  fe 0d          930    932 	CP	CR	     ;FULL REG. DISPLAY
1013f3b9  28 4c          931    933 	JR	Z,XAM6
1014f3bb  be             932    934 XAM0:	CP	(HL)	     ;TEST FOR REGISTER NAME
1015f3bc  28 09          933    935 	JR	Z,XAM1
1016f3be  cb 7e          934    936 	BIT	7,(HL)	     ;SEE IF END OF TABLE
1017f3c0  c2 57 f4       935    937 	JP	NZ,ERROR
1018f3c3  23             936    938 	INC	HL
1019f3c4  23             937    939 	INC	HL
1020f3c5  18 f4          938    940 	JR	XAM0
1021f3c7  cd 7b f4       939    941 XAM1:	CALL	BLK
1022f3ca  23             940    942 XAM2:	INC	HL
1023f3cb  7e             941    943 	LD	A,(HL)
1024f3cc  47             942    944 	LD	B,A	     ;SAVE FOR FLAGS
1025f3cd  e6 3f          943    945 	AND	3FH	     ;CLEAR FLAGS FOR BIAS
1026f3cf  eb             944    946 	EX	DE,HL
1027f3d0  6f             945    947 	LD	L,A	     ;DISPLACEMENT FROM STACK
1028f3d1  26 00          946    948 	LD	H,0
1029f3d3  39             947    949 	ADD	HL,SP
1030f3d4  eb             948    950 	EX	DE,HL
1031f3d5  23             949    951 	INC	HL
1032f3d6  1a             950    952 	LD	A,(DE)	     ;PICK UP REG. VALUE
1033f3d7  cd 87 f5       951    953 	CALL	LBYTE	     ;PRINT IT
1034f3da  cb 78          952    954 	BIT	7,B
1035f3dc  28 05          953    955 	JR	Z,XAM3
1036f3de  1b             954    956 	DEC	DE
1037f3df  1a             955    957 	LD	A,(DE)
1038f3e0  cd 87 f5       956    958 	CALL	LBYTE
1039f3e3  cd 04 f6       957    959 XAM3:	CALL	COPCK	     ;MODIFY
1040f3e6  d8             958    960 	RET	C	     ;CR ENTERED, ALL DONE
1041Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 17
1042Source file: zapple.asm
1043Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
1044
1045LOC   OBJECT CODE   LINE   STMT SOURCE CODE
1046f3e7  28 19          959    961 	JR	Z,XAM5	     ;SKIP TO NEXT REG.
1047f3e9  e5             960    962 	PUSH	HL
1048f3ea  c5             961    963 	PUSH	BC
1049f3eb  cd 5f f5       962    964 	CALL	EXF	     ;GET NEW VALUE
1050f3ee  e1             963    965 	POP	HL
1051f3ef  f1             964    966 	POP	AF
1052f3f0  c5             965    967 	PUSH	BC
1053f3f1  f5             966    968 	PUSH	AF
1054f3f2  7d             967    969 	LD	A,L
1055f3f3  12             968    970 	LD	(DE),A
1056f3f4  c1             969    971 	POP	BC
1057f3f5  cb 78          970    972 	BIT	7,B	     ;SEE IF 8 BIT OR 16 BIT REG.
1058f3f7  28 03          971    973 	JR	Z,XAM4	     ;8 BIT
1059f3f9  13             972    974 	INC	DE
1060f3fa  7c             973    975 	LD	A,H	     ;HIGH BYTE OF 16 BIT REG.
1061f3fb  12             974    976 	LD	(DE),A
1062f3fc  c1             975    977 XAM4:	POP	BC
1063f3fd  e1             976    978 	POP	HL
1064f3fe  78             977    979 	LD	A,B	     ;TEST DELIMITER
1065f3ff  fe 0d          978    980 	CP	CR
1066f401  c8             979    981 	RET	Z	     ;CR ENTERED, ALL DONE
1067f402  cb 7e          980    982 XAM5:	BIT	7,(HL)	     ;SEE IF END OF TABLE
1068f404  c0             981    983 	RET	NZ	     ;RETURN IF SO
1069f405  18 c3          982    984 	JR	XAM2
1070f407  cd 09 f5       983    985 XAM6:	CALL	CRLF
1071f40a  cd 7b f4       984    986 XAM7:	CALL	BLK
1072f40d  7e             985    987 	LD	A,(HL)
1073f40e  23             986    988 	INC	HL
1074f40f  b7             987    989 	OR	A
1075f410  f8             988    990 	RET	M
1076f411  4f             989    991 	LD	C,A
1077f412  cd 7d f4       990    992 	CALL	CO
1078f415  0e 3d          991    993 	LD	C,'='
1079f417  cd 7d f4       992    994 	CALL	CO
1080f41a  7e             993    995 	LD	A,(HL)
1081f41b  47             994    996 	LD	B,A	     ;SAVE FLAGS
1082f41c  e6 3f          995    997 	AND	3FH	     ;CLEAR UP FOR OFFSET
1083f41e  23             996    998 	INC	HL
1084f41f  eb             997    999 	EX	DE,HL
1085f420  6f             998   1000 	LD	L,A
1086f421  26 00          999   1001 	LD	H,0
1087f423  39            1000   1002 	ADD	HL,SP
1088f424  eb            1001   1003 	EX	DE,HL
1089f425  cb 70         1002   1004 	BIT	6,B	     ;TEST FOR SPECIAL "M"
1090f427  20 0f         1003   1005 	JR	NZ,XAM9	     ;PRINT OUT ACTUAL "M"
1091f429  1a            1004   1006 	LD	A,(DE)
1092f42a  cd 87 f5      1005   1007 	CALL	LBYTE	     ;PRINT REG. VALUE
1093f42d  cb 78         1006   1008 	BIT	7,B	     ;SINGLE OR DOUBLE?
1094f42f  28 d9         1007   1009 	JR	Z,XAM7	     ;SINGLE.
1095f431  1b            1008   1010 	DEC	DE
1096f432  1a            1009   1011 	LD	A,(DE)
1097f433  cd 87 f5      1010   1012 XAM8:	CALL	LBYTE
1098f436  18 d2         1011   1013 	JR	XAM7
1099f438  e5            1012   1014 XAM9:	PUSH	HL	     ;SAVE HL
1100f439  1a            1013   1015 	LD	A,(DE)	     ;GET REG. POINTER
1101f43a  67            1014   1016 	LD	H,A	     ;HIGH BYTE
1102f43b  1b            1015   1017 	DEC	DE
1103f43c  1a            1016   1018 	LD	A,(DE)
1104f43d  6f            1017   1019 	LD	L,A	     ;LOW BYTE
1105f43e  7e            1018   1020 	LD	A,(HL)	     ;GET VALUE
1106Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 18
1107Source file: zapple.asm
1108Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
1109
1110LOC   OBJECT CODE   LINE   STMT SOURCE CODE
1111f43f  e1            1019   1021 	POP	HL	     ;RESTORE HL
1112f440  18 f1         1020   1022 	JR	XAM8	     ;PRINT VALUE & CONTINUE
1113                    1021   1023 ;
1114                    1022   1024 ; THIS IS A MESSAGE OUTPUT ROUTINE.
1115                    1023   1025 ; IT IS USED BY THE SIGN-ON AND THE CRLF.
1116                    1024   1026 ; POINTER IS IN HL (WHEN ENTERED AT
1117                    1025   1027 ; TOM1) AND LENGTH IN B REG.
1118                    1026   1028 ;
1119f442  21 21 f0      1027   1029 TOM:	LD	HL,MSG
1120f445  4e            1028   1030 TOM1:	LD	C,(HL)	     ;GET A CHARACTER
1121f446  23            1029   1031 	INC	HL	     ;MOVE POINTER
1122f447  cd 7d f4      1030   1032 	CALL	CO	     ;OUTPUT IT
1123f44a  10 f9         1031   1033 	DJNZ	TOM1	     ;KEEP GOING TILL B=0
1124f44c  cd 11 f5      1032   1034 	CALL	CSTS	     ;SEE IF AN ABORT REQUEST
1125f44f  b7            1033   1035 	OR	A	     ; WAITING
1126f450  c8            1034   1036 	RET	Z	     ;NO.
1127                    1035   1037 ;
1128                    1036   1038 ; SEE IF CONTROL-C IS WAITING
1129                    1037   1039 ; ABORT IF SO.
1130                    1038   1040 ;
1131f451  cd 2f f7      1039   1041 CCHK:	CALL	KI
1132f454  fe 03         1040   1042 	CP	3	     ;CONTROL-C?
1133f456  c0            1041   1043 	RET	NZ
1134                    1042   1044 ;
1135                    1043   1045 ; SYSTEM ERROR ROUTINE. THIS
1136                    1044   1046 ; WILL RESTORE THE SYTEM AFTER
1137                    1045   1047 ; A SYSTEM ERROR HAS BEEN TAKEN.
1138                    1046   1048 ; THE I/O CONFIGURATION IS NOT
1139                    1047   1049 ; AFFECTED.
1140                    1048   1050 ;
1141f457  cd b1 f5      1049   1051 ERROR:	CALL	MEMSIZ
1142f45a  11 ea ff      1050   1052 	LD	DE,-22	     ;STACK POINTER OFFSET
1143f45d  19            1051   1053 	ADD	HL,DE
1144f45e  f9            1052   1054 	LD	SP,HL
1145f45f  0e 2a         1053   1055 	LD	C,'*'	     ;ANNOUNCE ERROR
1146f461  cd 7d f4      1054   1056 	CALL	CO
1147f464  c3 67 f0      1055   1057 	JP	START	     ;BACK TO WORK
1148                    1056   1058 ;
1149                    1057   1059 ; THIS GETS A READER CHARACTER,
1150                    1058   1060 ; AND COMPARES IT WITH THE 'D' REG.
1151                    1059   1061 ; IT ABORTS ON AN 'OUT-OF-DATA'
1152                    1060   1062 ; CONDITION.
1153                    1061   1063 ;
1154f467  cd 38 f6      1062   1064 RIFF:	CALL	RI	     ;GET READER CHARACTER
1155f46a  38 eb         1063   1065 	JR	C,ERROR	     ;ABORT ON CARRY
1156f46c  ba            1064   1066 	CP	D	     ;TEST D
1157f46d  c9            1065   1067 	RET
1158                    1066   1068 ;
1159                    1067   1069 ; THIS ROUTINE WILL RETURN THE
1160                    1068   1070 ; CURRENT VALUE OF THE HIGHEST
1161                    1069   1071 ; READ/WRITE MEMORY LOCATION THAT
1162                    1070   1072 ; IS AVAILABLE ON THE SYSTEM.
1163                    1071   1073 ; IT WILL "SEARCH" FOR MEMORY
1164                    1072   1074 ; STARTING AT THE BOTTOM OF MEMORY
1165                    1073   1075 ; AND GO UPWARDS UNTIL NON-R/W MEMORY
1166                    1074   1076 ; IS FOUND.
1167                    1075   1077 ;
1168f46e  cd b1 f5      1076   1078 SIZE:	CALL	MEMSIZ	     ;GET THE VALUE
1169f471  01 23 00      1077   1079 	LD	BC,ENDX-EXIT
1170f474  09            1078   1080 	ADD	HL,BC	     ;ADJUST IT
1171Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 19
1172Source file: zapple.asm
1173Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
1174
1175LOC   OBJECT CODE   LINE   STMT SOURCE CODE
1176                    1079   1081 ;
1177                    1080   1082 ;
1178                    1081   1083 ; CRLF BEFORE HLSP ROUTINE
1179                    1082   1084 ;
1180f475  cd 09 f5      1083   1085 LFADR:	CALL	CRLF
1181                    1084   1086 ;
1182                    1085   1087 ; PRINT THE CURRENT VALUE OF H&L,
1183                    1086   1088 ; AND A SPACE.
1184                    1087   1089 ;
1185f478  cd 82 f5      1088   1090 HLSP:	CALL	LADR
1186                    1089   1091 ;
1187                    1090   1092 ; PRINT A SPACE ON THE CONSOLE
1188                    1091   1093 ;
1189f47b  0e 20         1092   1094 BLK:	LD	C,' '
1190                    1093   1095 ;
1191                    1094   1096 ; THIS IS THE MAIN CONSOLE
1192                    1095   1097 ; OUTPUT ROUTINE
1193                    1096   1098 ;
1194f47d  cd 10 f1      1097   1099 CO:	CALL	IOCHK
1195f480  e6 03         1098   1100 	AND	~CMSK
1196f482  20 0a         1099   1101 	JR	NZ,CO0
1197                    1100   1102 ;
1198                    1101   1103 ; TELEPRINTER CONFIGURATION
1199                    1102   1104 ; I/O DRIVER.
1200                    1103   1105 ;
1201f484  db 10         1104   1106 TTYOUT:	IN	A,(TTS)
1202f486  e6 02         1105   1107 	AND	TTYBE
1203f488  28 fa         1106   1108 	JR	Z,TTYOUT
1204f48a  79            1107   1109 	LD	A,C
1205f48b  d3 11         1108   1110 	OUT	(TTO),A
1206f48d  c9            1109   1111 	RET
1207f48e  3d            1110   1112 CO0:	DEC	A	     ;CCRT?
1208f48f  20 0a         1111   1113 	JR	NZ,CO1	     ; NO.
1209                    1112   1114 ;
1210                    1113   1115 ; C.R.T. CONFIGURATION DRIVER.
1211                    1114   1116 ;
1212f491  db 50         1115   1117 CRTOUT:	IN	A,(CRTS)
1213f493  e6 80         1116   1118 	AND	CRTBE
1214f495  20 fa         1117   1119 	JR	NZ,CRTOUT
1215f497  79            1118   1120 	LD	A,C
1216f498  d3 51         1119   1121 	OUT	(CRTO),A
1217f49a  c9            1120   1122 	RET
1218                    1121   1123 ;
1219f49b  3d            1122   1124 CO1:	DEC	A	     ;BATCH
1220f49c  c2 03 f8      1123   1125 	JP	NZ,COLOC     ; NO, MUST BE USER
1221                    1124   1126 ;
1222                    1125   1127 ; LIST OUTPUT DRIVER ROUTINE
1223                    1126   1128 ; -A USER VECTORED ROUTINE, USED
1224                    1127   1129 ; BY THE ASSEMBLER, ETC. ALSO,
1225                    1128   1130 ; WHEN THE ASSIGNED MODE IS "BATCH",
1226                    1129   1131 ; THIS IS THE ROUTINE USED FOR THE
1227                    1130   1132 ; MONITOR OUTPUT THAT WOULD NORMALLY
1228                    1131   1133 ; GO TO THE "CONSOLE".
1229                    1132   1134 ;
1230f49f  cd 10 f1      1133   1135 LO:	CALL	IOCHK
1231f4a2  e6 c0         1134   1136 	AND	~LMSK
1232f4a4  28 de         1135   1137 	JR	Z,TTYOUT
1233f4a6  fe 40         1136   1138 	CP	LCRT
1234f4a8  28 e7         1137   1139 	JR	Z,CRTOUT
1235f4aa  fe 80         1138   1140 	CP	LINE
1236Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 20
1237Source file: zapple.asm
1238Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
1239
1240LOC   OBJECT CODE   LINE   STMT SOURCE CODE
1241f4ac  ca 12 f8      1139   1141 	JP	Z,LNLOC	     ;EXTERNAL VECTOR
1242f4af  c3 15 f8      1140   1142 	JP	LULOC	     ;USER DEFINED VECTOR
1243                    1141   1143 ;
1244                    1142   1144 ; SEND CRLF TO PUNCH DEVICE
1245                    1143   1145 ;
1246f4b2  0e 0d         1144   1146 PEOL:	LD	C,CR
1247f4b4  cd b9 f4      1145   1147 	CALL	PUO
1248f4b7  0e 0a         1146   1148 	LD	C,LF
1249                    1147   1149 ;
1250                    1148   1150 ; PUNCH OUTPUT DRIVER ROUTINE
1251                    1149   1151 ;
1252f4b9  cd 10 f1      1150   1152 PUO:	CALL	IOCHK
1253f4bc  e6 30         1151   1153 	AND	~PMSK
1254f4be  28 c4         1152   1154 	JR	Z,TTYOUT     ;PUNCH=TELEPRINTER
1255f4c0  fe 20         1153   1155 	CP	PCAS	     ;CASSETTE?
1256f4c2  20 0a         1154   1156 	JR	NZ,PO1	     ; NO.
1257                    1155   1157 ;
1258f4c4  db 06         1156   1158 PO0:	IN	A,(PCASS)    ;CASSETTE DRIVER
1259f4c6  e6 80         1157   1159 	AND	PCSBE
1260f4c8  20 fa         1158   1160 	JR	NZ,PO0
1261f4ca  79            1159   1161 	LD	A,C
1262f4cb  d3 07         1160   1162 	OUT	(PCASO),A
1263f4cd  c9            1161   1163 	RET
1264                    1162   1164 ;
1265f4ce  fe 10         1163   1165 PO1:	CP	PPTP
1266f4d0  ca 0c f8      1164   1166 	JP	Z,PTPL	     ;EXTERNAL VECTOR
1267f4d3  c3 0f f8      1165   1167 	JP	PULOC	     ;USER VECTOR
1268                    1166   1168 ;
1269                    1167   1169 ;
1270                    1168   1170 ; THIS IS A BINARY DUMP ROUTINE THAT MAY BE
1271                    1169   1171 ; USED WITH BOTH PAPER-TAPE AND/OR CASSETTE
1272                    1170   1172 ; SYSTEMS.  IT PUNCHES A START-OF-FILE MARK
1273                    1171   1173 ; AND THEN PUNCHES IN FULL 8-BITS DIRECTLY
1274                    1172   1174 ; FROM MEMORY.  IT IS FOLLOWED BY AN END-OF-
1275                    1173   1175 ; FILE MARKER. THESE DUMPS MAY BE LOADED
1276                    1174   1176 ; USING THE "L" COMMAND. THEY ARE USEFUL
1277                    1175   1177 ; FOR FAST LOADING, AND MAY BE VERIFIED
1278                    1176   1178 ; USING THE "C" (COMPARE) COMMAND.
1279                    1177   1179 ;
1280                    1178   1180 ; U<A1>,<A2>[CR]
1281                    1179   1181 ; PUNCHES FROM <A1> THRU <A2>
1282                    1180   1182 ;
1283f4d6  cd 04 f5      1181   1183 UNLD:	CALL	EXLF	     ;GET TWO PARAMETERS
1284f4d9  cd f1 f4      1182   1184 	CALL	WAIT	     ;PAUSE FOR PUNCH-ON (TTY)
1285f4dc  cd 9b f5      1183   1185 	CALL	LEAD	     ;PUNCH LEADER
1286f4df  cd 96 f5      1184   1186 	CALL	MARK	     ;PUNCH FILE MARKER
1287f4e2  4e            1185   1187 UNL:	LD	C,(HL)	     ;GET MEMORY BYTE
1288f4e3  cd b9 f4      1186   1188 	CALL	PUO	     ;PUNCH IT
1289f4e6  cd 6c f5      1187   1189 	CALL	HILO	     ;SEE IF DONE
1290f4e9  30 f7         1188   1190 	JR	NC,UNL
1291f4eb  cd 96 f5      1189   1191 	CALL	MARK	     ;PUNCH END OF FILE MARKER
1292                    1190   1192 ;
1293                    1191   1193 ; THIS PUNCHES NULLS (LEADER/TRAILER).
1294                    1192   1194 ; IT RETURNS "QUIET" IN CASE THE PUNCH
1295                    1193   1195 ; AND CONSOLE ARE THE SAME.
1296                    1194   1196 ;
1297f4ee  cd 9b f5      1195   1197 NULL:	CALL	LEAD	     ;PUNCH NULLS
1298                    1196   1198 ;
1299                    1197   1199 ; THIS ROUTINE WILL PAUSE FOR
1300                    1198   1200 ; A KEYBOARD CHARACTER. IT IS
1301Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 21
1302Source file: zapple.asm
1303Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
1304
1305LOC   OBJECT CODE   LINE   STMT SOURCE CODE
1306                    1199   1201 ; USED AS A DELAY TO GIVE THE
1307                    1200   1202 ; OPERATOR TIME TO TURN ON THE
1308                    1201   1203 ; TELEPRINTER PUNCH BEFORE SENDING
1309                    1202   1204 ; A HEX FILE OR BINARY FILE TO
1310                    1203   1205 ; THE PUNCH.  IT WILL SIMPLY
1311                    1204   1206 ; RETURN IF THE PUNCH & CONSOLE
1312                    1205   1207 ; ARE NOT BOTH ASSIGNED TO THE
1313                    1206   1208 ; DEFAULT. (TELEPRINTER)
1314                    1207   1209 ;
1315f4f1  cd 10 f1      1208   1210 WAIT:	CALL	IOCHK
1316f4f4  e6 33         1209   1211 	AND	~CMSK | ~PMSK
1317f4f6  c0            1210   1212 	RET	NZ
1318f4f7  c3 73 f0      1211   1213 	JP	STARO	     ;RETURN "QUIET"
1319                    1212   1214 ;
1320                    1213   1215 ; CONVERT HEX TO ASCII
1321                    1214   1216 ;
1322f4fa  e6 0f         1215   1217 CONV:	AND	0FH	     ;LOW NIBBLE ONLY
1323f4fc  c6 90         1216   1218 	ADD	A,90H
1324f4fe  27            1217   1219 	DAA
1325f4ff  ce 40         1218   1220 	ADC	A,40H
1326f501  27            1219   1221 	DAA
1327f502  4f            1220   1222 	LD	C,A
1328f503  c9            1221   1223 	RET
1329                    1222   1224 ;
1330                    1223   1225 ; GET TWO PARAMETERS, PLACE
1331                    1224   1226 ; THEM IN DE & HL, AND THEN
1332                    1225   1227 ; CRLF.
1333                    1226   1228 ;
1334f504  cd 3a f5      1227   1229 EXLF:	CALL	EXPR
1335f507  d1            1228   1230 	POP	DE
1336f508  e1            1229   1231 	POP	HL
1337                    1230   1232 ;
1338                    1231   1233 ; CONSOLE CARRIAGE RETURN &
1339                    1232   1234 ; LINE FEED ROUTINE.
1340                    1233   1235 ;
1341                    1234   1236 ; THE NUMBER OF FILL CHARACTERS
1342                    1235   1237 ; MAY BE ADJUSTED TO 0-3 BY THE
1343                    1236   1238 ; VALUE PLACED IN THE B REG. MINIMUM
1344                    1237   1239 ; VALUE FOR "B" IS TWO (2). MAXIMUM
1345                    1238   1240 ; IS FIVE (5).
1346                    1239   1241 ;
1347f509  e5            1240   1242 CRLF:	PUSH	HL	     ;SAVE HL
1348f50a  06 04         1241   1243 	LD	B,4	     ;CRLF LENGTH (SET FOR 2 FILLS)
1349f50c  cd 42 f4      1242   1244 	CALL	TOM	     ;SEND CRLF
1350f50f  e1            1243   1245 	POP	HL
1351f510  c9            1244   1246 	RET
1352                    1245   1247 ;
1353                    1246   1248 ; TEST THE CURRENT CONSOLES
1354                    1247   1249 ; KEYBOARD FOR A KEY-PRESS.
1355                    1248   1250 ; RETURN TRUE (0FFH IN A REG)
1356                    1249   1251 ; IF THERE IS A CHARACTER
1357                    1250   1252 ; WAITING IN THE UART.
1358                    1251   1253 ;
1359f511  cd 10 f1      1252   1254 CSTS:	CALL	IOCHK
1360f514  e6 03         1253   1255 	AND	~CMSK
1361f516  20 04         1254   1256 	JR	NZ,CS0
1362f518  db 10         1255   1257 	IN	A,(TTS)
1363f51a  18 05         1256   1258 	JR	CS1
1364f51c  3d            1257   1259 CS0:	DEC	A	     ;CCRT
1365f51d  20 09         1258   1260 	JR	NZ,CS3
1366Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 22
1367Source file: zapple.asm
1368Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
1369
1370LOC   OBJECT CODE   LINE   STMT SOURCE CODE
1371f51f  db 50         1259   1261 	IN	A,(CRTS)
1372f521  e6 01         1260   1262 CS1:	AND	TTYDA
1373f523  3e 00         1261   1263 	LD	A,FALSE
1374f525  c8            1262   1264 CS2:	RET	Z
1375f526  2f            1263   1265 	CPL
1376f527  c9            1264   1266 	RET
1377f528  3d            1265   1267 CS3:	DEC	A	     ;BATCH
1378f529  c8            1266   1268 	RET	Z
1379f52a  c3 18 f8      1267   1269 	JP	CSLOC	     ;USER DEFINED FUNCTION
1380                    1268   1270 ;
1381                    1269   1271 ; GET THREE PARAMETERS AND
1382                    1270   1272 ; CRLF.
1383                    1271   1273 ;
1384f52d  0c            1272   1274 EXPR3:	INC	C
1385f52e  cd 3a f5      1273   1275 	CALL	EXPR
1386f531  cd 09 f5      1274   1276 	CALL	CRLF
1387f534  c1            1275   1277 	POP	BC
1388f535  d1            1276   1278 	POP	DE
1389f536  e1            1277   1279 	POP	HL
1390f537  c9            1278   1280 	RET
1391                    1279   1281 ;
1392                    1280   1282 ; GET ONE PARAMETER.
1393                    1281   1283 ; NO CRLF.
1394                    1282   1284 ;
1395f538  0e 01         1283   1285 EXPR1:	LD	C,1
1396                    1284   1286 ;
1397                    1285   1287 ; THIS IS THE MAIN "PARAMETER-GETTING" ROUTINE.
1398                    1286   1288 ; THIS ROUTINE WILL ABORT ON A NON-HEX CHARACTER.
1399                    1287   1289 ; IT TAKES THE MOST RECENTELY TYPED FOUR VALID
1400                    1288   1290 ; HEX CHARACTERS, AND PLACES THEM UP ON THE STACK.
1401                    1289   1291 ; (AS ONE 16 BIT VALUE, CONTAINED IN TWO
1402                    1290   1292 ; 8-BIT BYTES.)  IF A CARRIAGE RETURN IS ENTERED,
1403                    1291   1293 ; IT WILL PLACE THE VALUE OF "0000" IN THE STACK.
1404                    1292   1294 ;
1405f53a  21 00 00      1293   1295 EXPR:	LD	HL,0	     ;INITIALIZE HL TO ZERO
1406f53d  cd 35 f7      1294   1296 EX0:	CALL	TI	     ;GET SOMETHING FROM CONSOLE
1407f540  47            1295   1297 EX1:	LD	B,A	     ;SAVE IT
1408f541  cd d8 f5      1296   1298 	CALL	NIBBLE	     ;CONVERT ASCII TO HEX
1409f544  38 08         1297   1299 	JR	C,EX2	     ;ILLEGAL CHARACTER DECTECTED
1410f546  29            1298   1300 	ADD	HL,HL	     ;MULTIPLY BY 16
1411f547  29            1299   1301 	ADD	HL,HL
1412f548  29            1300   1302 	ADD	HL,HL
1413f549  29            1301   1303 	ADD	HL,HL
1414f54a  b5            1302   1304 	OR	L	     ;OR IN THE SINGLE NIBBLE
1415f54b  6f            1303   1305 	LD	L,A
1416f54c  18 ef         1304   1306 	JR	EX0	     ;GET SOME MORE
1417f54e  e3            1305   1307 EX2:	EX	(SP),HL	     ;SAVE UP IN STACK
1418f54f  e5            1306   1308 	PUSH	HL	     ;REPLACE THE RETURN
1419f550  78            1307   1309 	LD	A,B	     ;TEST THE DELIMITER
1420f551  cd 0c f6      1308   1310 	CALL	QCHK
1421f554  30 02         1309   1311 	JR	NC,EX3	     ;CR ENTERED
1422f556  0d            1310   1312 	DEC	C	     ;SHOULD GO TO ZERO
1423f557  c8            1311   1313 	RET	Z	     ; RETURN IF IT DOES
1424f558  c2 57 f4      1312   1314 EX3:	JP	NZ,ERROR     ;SOMETHING WRONG
1425f55b  0d            1313   1315 	DEC	C	     ;DO THIS AGAIN?
1426f55c  20 dc         1314   1316 	JR	NZ,EXPR	     ; YES.
1427f55e  c9            1315   1317 	RET		     ;ELSE RETURN
1428f55f  0e 01         1316   1318 EXF:	LD	C,1
1429f561  21 00 00      1317   1319 	LD	HL,0
1430f564  18 da         1318   1320 	JR	EX1
1431Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 23
1432Source file: zapple.asm
1433Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
1434
1435LOC   OBJECT CODE   LINE   STMT SOURCE CODE
1436                    1319   1321 ;
1437                    1320   1322 ; RANGE TESTING ROUTINES.
1438                    1321   1323 ; CARRY SET INDICATES RANGE EXCEEDED.
1439                    1322   1324 ;
1440f566  cd 6c f5      1323   1325 HILOX:	CALL	HILO
1441f569  d0            1324   1326 	RET	NC	     ;OK
1442f56a  d1            1325   1327 	POP	DE	     ;RETURN ONE LEVEL BACK
1443f56b  c9            1326   1328 	RET
1444                    1327   1329 ;
1445f56c  23            1328   1330 HILO:	INC	HL	     ;INCREMENT HL
1446f56d  7c            1329   1331 	LD	A,H	     ;TEST FOR CROSSING 64K BORDER
1447f56e  b5            1330   1332 	OR	L
1448f56f  37            1331   1333 	SCF		     ;CARRY SET=STOP
1449f570  c8            1332   1334 	RET	Z	     ;YES, BORDER CROSSED
1450f571  7b            1333   1335 	LD	A,E	     ;NOW, TEST HL VS. DE
1451f572  95            1334   1336 	SUB	L
1452f573  7a            1335   1337 	LD	A,D
1453f574  9c            1336   1338 	SBC	A,H
1454f575  c9            1337   1339 	RET		     ;IF CARRY WAS SET, THEN STOP
1455                    1338   1340 ;
1456                    1339   1341 ;	HEXADECIMAL MATH ROUTINE
1457                    1340   1342 ;
1458                    1341   1343 ; THIS ROUTINE IS USEFUL FOR
1459                    1342   1344 ; DETERMINING RELATIVE JUMP
1460                    1343   1345 ; OFFSETS.  IT RETURNS THE SUM
1461                    1344   1346 ; & DIFFERENCE OF TWO PARAMETERS.
1462                    1345   1347 ;
1463                    1346   1348 ;  H<X>,<Y>
1464                    1347   1349 ;
1465                    1348   1350 ; X+Y   X-Y
1466                    1349   1351 ;
1467f576  cd 04 f5      1350   1352 HEXN:	CALL	EXLF
1468f579  e5            1351   1353 	PUSH	HL	     ;SAVE HL FOR LATER
1469f57a  19            1352   1354 	ADD	HL,DE	     ;GET SUM
1470f57b  cd 78 f4      1353   1355 	CALL	HLSP	     ;PRINT IT
1471f57e  e1            1354   1356 	POP	HL	     ;THIS IS LATER
1472f57f  b7            1355   1357 	OR	A	     ;CLEAR CARRY
1473f580  ed 52         1356   1358 	SBC	HL,DE	     ;GET DIFFERENCE & PRINT IT
1474                    1357   1359 ;
1475                    1358   1360 ; PRINT H&L ON CONSOLE
1476                    1359   1361 ;
1477f582  7c            1360   1362 LADR:	LD	A,H
1478f583  cd 87 f5      1361   1363 	CALL	LBYTE
1479f586  7d            1362   1364 	LD	A,L
1480f587  f5            1363   1365 LBYTE:	PUSH	AF
1481f588  0f            1364   1366 	RRCA
1482f589  0f            1365   1367 	RRCA
1483f58a  0f            1366   1368 	RRCA
1484f58b  0f            1367   1369 	RRCA
1485f58c  cd 90 f5      1368   1370 	CALL	LAD
1486f58f  f1            1369   1371 	POP	AF
1487f590  cd fa f4      1370   1372 LAD:	CALL	CONV
1488f593  c3 7d f4      1371   1373 	JP	CO
1489                    1372   1374 ; THIS ROUTINE SENDS EIGHT RUBOUTS
1490                    1373   1375 ; TO THE PUNCH DEVICE.
1491                    1374   1376 ;
1492f596  01 ff 08      1375   1377 MARK:	LD	BC,08FFH     ;SET-UP B&C
1493f599  18 03         1376   1378 	JR	LE0
1494                    1377   1379 ;
1495                    1378   1380 ; THIS ROUTINE SENDS BLANKS TO THE
1496Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 24
1497Source file: zapple.asm
1498Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
1499
1500LOC   OBJECT CODE   LINE   STMT SOURCE CODE
1501                    1379   1381 ; PUNCH DEVICE.
1502                    1380   1382 ;
1503f59b  01 00 48      1381   1383 LEAD:	LD	BC,4800H     ;PRESET SOME NULLS
1504f59e  cd b9 f4      1382   1384 LE0:	CALL	PUO
1505f5a1  10 fb         1383   1385 	DJNZ	LE0
1506f5a3  c9            1384   1386 	RET
1507                    1385   1387 ;
1508                    1386   1388 ; THIS ROUTINE RETURNS TO A USER
1509                    1387   1389 ; PROGRAM THE CURRENT TOP OF
1510                    1388   1390 ; MEMORY VALUE MINUS WORKSPACE
1511                    1389   1391 ; AREA USED BY THE MONITOR.
1512                    1390   1392 ;
1513f5a4  e5            1391   1393 MEMCK:	PUSH	HL
1514f5a5  cd b1 f5      1392   1394 	CALL	MEMSIZ
1515f5a8  7d            1393   1395 	LD	A,L
1516f5a9  d6 2c         1394   1396 	SUB	2CH
1517f5ab  30 01         1395   1397 	JR	NC,MEMC
1518f5ad  25            1396   1398 	DEC	H
1519f5ae  44            1397   1399 MEMC:	LD	B,H
1520f5af  e1            1398   1400 	POP	HL
1521f5b0  c9            1399   1401 	RET
1522                    1400   1402 ;
1523                    1401   1403 ; THIS IS A CALLED ROUTINE USED
1524                    1402   1404 ; TO CALCULATE THE TOP OF MEMORY
1525                    1403   1405 ; STARTING FROM THE BOTTOM OF
1526                    1404   1406 ; MEMORY, AND SEARCHING UPWARD UNTIL
1527                    1405   1407 ; FIRST R/W MEMORY IS FOUND, AND THEN
1528                    1406   1408 ; CONTINUING UNTIL THE END OF THE R/W
1529                    1407   1409 ; MEMORY. THIS ALLOWS R.O.M. AT ZERO,
1530                    1408   1410 ; AND INSURES A CONTINUOUS MEMORY BLOCK
1531                    1409   1411 ; HAS BEEN FOUND.
1532                    1410   1412 ; IT IS USED BY THE ERROR ROUTINE TO
1533                    1411   1413 ; RESET THE STACK POINTER AS WELL.
1534                    1412   1414 ;
1535f5b1  c5            1413   1415 MEMSIZ:	PUSH	BC
1536f5b2  01 00 f0      1414   1416 	LD	BC,BASE	     ;POINT TO START OF MONITOR
1537f5b5  21 ff ff      1415   1417 	LD	HL,-1	     ;RAM SEARCH STARTING PT.
1538f5b8  24            1416   1418 MEM0:	INC	H	     ;FIRST FIND R/W MEMORY
1539f5b9  7e            1417   1419 	LD	A,(HL)
1540f5ba  2f            1418   1420 	CPL
1541f5bb  77            1419   1421 	LD	(HL),A
1542f5bc  be            1420   1422 	CP	(HL)
1543f5bd  2f            1421   1423 	CPL
1544f5be  77            1422   1424 	LD	(HL),A
1545f5bf  20 f7         1423   1425 	JR	NZ,MEM0
1546f5c1  24            1424   1426 MEM1:	INC	H	     ;R/W FOUND, NOW FIND END
1547f5c2  7e            1425   1427 	LD	A,(HL)
1548f5c3  2f            1426   1428 	CPL
1549f5c4  77            1427   1429 	LD	(HL),A
1550f5c5  be            1428   1430 	CP	(HL)
1551f5c6  2f            1429   1431 	CPL
1552f5c7  77            1430   1432 	LD	(HL),A
1553f5c8  20 04         1431   1433 	JR	NZ,MEM2
1554f5ca  7c            1432   1434 	LD	A,H	     ;TEST FOR MONITOR BORDER
1555f5cb  b8            1433   1435 	CP	B
1556f5cc  20 f3         1434   1436 	JR	NZ,MEM1	     ;NOT THERE YET
1557f5ce  25            1435   1437 MEM2:	DEC	H	     ;BACK UP, SUBTRACT WORKSPACE
1558f5cf  01 dd ff      1436   1438 	LD	BC,EXIT-ENDX
1559f5d2  09            1437   1439 	ADD	HL,BC
1560f5d3  c1            1438   1440 	POP	BC	     ;RESTORE BC
1561Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 25
1562Source file: zapple.asm
1563Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
1564
1565LOC   OBJECT CODE   LINE   STMT SOURCE CODE
1566f5d4  c9            1439   1441 	RET		     ;VALUE IN HL
1567                    1440   1442 ;
1568                    1441   1443 ;
1569f5d5  cd 7a f6      1442   1444 RIBBLE:	CALL	RIX
1570f5d8  d6 30         1443   1445 NIBBLE:	SUB	'0'	     ;QUALIFY & CONVERT
1571f5da  d8            1444   1446 	RET	C	     ;<0
1572f5db  fe 17         1445   1447 	CP	'G'-'0'	     ;>F?
1573f5dd  3f            1446   1448 	CCF		     ;PERVERT CARRY
1574f5de  d8            1447   1449 	RET	C
1575f5df  fe 0a         1448   1450 	CP	10	     ;NMBR?
1576f5e1  3f            1449   1451 	CCF		     ;PERVERT AGAIN
1577f5e2  d0            1450   1452 	RET	NC	     ;RETURN CLEAN
1578f5e3  d6 07         1451   1453 	SUB	'A'-'9'-1    ;ADJUST
1579f5e5  fe 0a         1452   1454 	CP	0AH	     ;FILTER ":" THRU "@"
1580f5e7  c9            1453   1455 	RET
1581                    1454   1456 ;
1582                    1455   1457 ; SEND H&L VALUE TO PUNCH DEVICE
1583                    1456   1458 ;
1584f5e8  7c            1457   1459 PADR:	LD	A,H
1585f5e9  cd ed f5      1458   1460 	CALL	PBYTE
1586f5ec  7d            1459   1461 	LD	A,L
1587                    1460   1462 ;
1588                    1461   1463 ; PUNCH A SINGLE BYTE
1589                    1462   1464 ;
1590f5ed  f5            1463   1465 PBYTE:	PUSH	AF	     ;NIBBLE AT A TIME
1591f5ee  0f            1464   1466 	RRCA
1592f5ef  0f            1465   1467 	RRCA
1593f5f0  0f            1466   1468 	RRCA
1594f5f1  0f            1467   1469 	RRCA
1595f5f2  cd fa f4      1468   1470 	CALL	CONV
1596f5f5  cd b9 f4      1469   1471 	CALL	PUO
1597f5f8  f1            1470   1472 	POP	AF	     ;NEXT NIBBLE
1598f5f9  f5            1471   1473 	PUSH	AF	     ;SAVE FOR CHECKSUM
1599f5fa  cd fa f4      1472   1474 	CALL	CONV
1600f5fd  cd b9 f4      1473   1475 	CALL	PUO
1601f600  f1            1474   1476 	POP	AF	     ;ORIGINAL BYTE HERE
1602f601  82            1475   1477 	ADD	A,D	     ;ADDED TO CHECKSUM
1603f602  57            1476   1478 	LD	D,A	     ;UPDATE CHECKSUM
1604f603  c9            1477   1479 	RET
1605                    1478   1480 ;
1606                    1479   1481 ;
1607f604  0e 2d         1480   1482 COPCK:	LD	C,'-'	     ;PROMPT FOR CONSOLE
1608f606  cd 7d f4      1481   1483 	CALL	CO
1609                    1482   1484 ;
1610f609  cd 35 f7      1483   1485 PCHK:	CALL	TI
1611                    1484   1486 ;
1612                    1485   1487 ; TEST FOR DELIMITERS
1613                    1486   1488 ;
1614f60c  fe 20         1487   1489 QCHK:	CP	' '	     ;RETURN ZERO IF DELIMITER
1615f60e  c8            1488   1490 	RET	Z
1616f60f  fe 2c         1489   1491 	CP	','
1617f611  c8            1490   1492 	RET	Z
1618f612  fe 0d         1491   1493 	CP	CR	     ;RETURN W/CARRY SET IF CR
1619f614  37            1492   1494 	SCF
1620f615  c8            1493   1495 	RET	Z
1621f616  3f            1494   1496 	CCF		     ;ELSE NON-ZERO, NO CARRY
1622f617  c9            1495   1497 	RET
1623                    1496   1498 ;
1624                    1497   1499 ; MAIN CONSOLE INPUT ROUTINE
1625                    1498   1500 ;
1626Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 26
1627Source file: zapple.asm
1628Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
1629
1630LOC   OBJECT CODE   LINE   STMT SOURCE CODE
1631f618  cd 10 f1      1499   1501 CI:	CALL	IOCHK
1632f61b  e6 03         1500   1502 	AND	~CMSK
1633f61d  20 09         1501   1503 	JR	NZ,CI1
1634                    1502   1504 ;
1635                    1503   1505 ; TELEPRINTER ROUTINE
1636                    1504   1506 ;
1637f61f  db 10         1505   1507 TTYIN:	IN	A,(TTS)
1638f621  e6 01         1506   1508 	AND	TTYDA
1639f623  28 fa         1507   1509 	JR	Z,TTYIN
1640f625  db 11         1508   1510 	IN	A,(TTI)
1641f627  c9            1509   1511 	RET
1642                    1510   1512 ;
1643f628  3d            1511   1513 CI1:	DEC	A	     ;CONSOLE=CRT?
1644f629  20 09         1512   1514 	JR	NZ,CI2
1645                    1513   1515 ;
1646                    1514   1516 ; C.R.T. INPUT ROUTINE
1647                    1515   1517 ;
1648f62b  db 50         1516   1518 CRTIN:	IN	A,(CRTS)
1649f62d  e6 40         1517   1519 	AND	CRTDA
1650f62f  28 fa         1518   1520 	JR	Z,CRTIN
1651f631  db 51         1519   1521 	IN	A,(CRTI)
1652f633  c9            1520   1522 	RET
1653                    1521   1523 ;
1654f634  3d            1522   1524 CI2:	DEC	A	     ;BATCH?
1655f635  c2 00 f8      1523   1525 	JP	NZ,CILOC     ;NO, MUST BE USER DEFINED
1656                    1524   1526 ;
1657                    1525   1527 ;
1658                    1526   1528 ; READER INPUT ROUTINE, WITH
1659                    1527   1529 ; TIME-OUT DELAY. INCLUDES
1660                    1528   1530 ; PULSING OF HARDWARE PORT
1661                    1529   1531 ; TO INDICATE REQUEST FOR
1662                    1530   1532 ; READER DATA.
1663                    1531   1533 ;
1664f638  e5            1532   1534 RI:	PUSH	HL
1665f639  cd 10 f1      1533   1535 	CALL	IOCHK
1666f63c  e6 0c         1534   1536 	AND	~RMSK
1667                    1535   1537 ;	CPL
1668                    1536   1538 ;	OUT	(RCP),A	     ;PULSE READER CONTROL PORT
1669                    1537   1539 ;	CPL		     ;CLEAR IT
1670                    1538   1540 ;	OUT	(RCP),A
1671f63e  20 1b         1539   1541 	JR	NZ,RI3	     ;NOT TTY
1672f640  67            1540   1542 	LD	H,A	     ;CLEAR FOR-TIME OUT TEST
1673f641  db 10         1541   1543 RI0:	IN	A,(TTS)
1674f643  e6 01         1542   1544 	AND	TTYDA
1675f645  20 0f         1543   1545 	JR	NZ,RI2
1676f647  c5            1544   1546 	PUSH	BC
1677f648  06 00         1545   1547 	LD	B,0
1678f64a  e3            1546   1548 DL0:	EX	(SP),HL	     ;WASTE TIME
1679f64b  e3            1547   1549 	EX	(SP),HL	     ;FOR DELAY
1680f64c  10 fc         1548   1550 	DJNZ	DL0
1681f64e  c1            1549   1551 	POP	BC
1682f64f  25            1550   1552 	DEC	H
1683f650  20 ef         1551   1553 	JR	NZ,RI0
1684f652  af            1552   1554 RI1:	XOR	A
1685f653  37            1553   1555 	SCF
1686f654  e1            1554   1556 	POP	HL
1687f655  c9            1555   1557 	RET
1688f656  db 11         1556   1558 RI2:	IN	A,(TTI)
1689f658  b7            1557   1559 RID:	OR	A
1690f659  e1            1558   1560 	POP	HL
1691Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 27
1692Source file: zapple.asm
1693Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
1694
1695LOC   OBJECT CODE   LINE   STMT SOURCE CODE
1696f65a  c9            1559   1561 	RET
1697f65b  fe 08         1560   1562 RI3:	CP	RCAS
1698f65d  20 12         1561   1563 	JR	NZ,RI6
1699f65f  db ff         1562   1564 	IN	A,(SWITCH)   ;READ INITIAL SENSE CONDX.
1700f661  6f            1563   1565 	LD	L,A
1701f662  db ff         1564   1566 RI4:	IN	A,(SWITCH)   ;SEE IF SW. ALTERED
1702f664  bd            1565   1567 	CP	L
1703f665  20 eb         1566   1568 	JR	NZ,RI1	     ;ABORT IF SO
1704f667  db 06         1567   1569 	IN	A,(RCSS)     ;CASSETTE INPUT DRIVER
1705f669  e6 01         1568   1570 	AND	RCSDA	     ;DATA YET?
1706f66b  20 f5         1569   1571 	JR	NZ,RI4	     ;KEEP LOOKING
1707f66d  db 07         1570   1572 RI5:	IN	A,(RCSD)
1708f66f  18 e7         1571   1573 	JR	RID
1709f671  e1            1572   1574 RI6:	POP	HL
1710f672  fe 04         1573   1575 	CP	RPTR
1711f674  ca 06 f8      1574   1576 	JP	Z,RPTPL	     ;EXTERNAL ROUTINE
1712f677  c3 09 f8      1575   1577 	JP	RULOC	     ;USER VECTOR
1713                    1576   1578 ;
1714                    1577   1579 ; THIS ROUTINE GETS READER INPUT
1715                    1578   1580 ; AND KILLS THE PARITY BIT.
1716                    1579   1581 ;
1717f67a  cd 67 f4      1580   1582 RIX:	CALL	RIFF
1718f67d  e6 7f         1581   1583 	AND	7FH
1719f67f  c9            1582   1584 	RET
1720                    1583   1585 ;
1721                    1584   1586 ; THIS ROUTINE READS A BINARY FILE
1722                    1585   1587 ; IMAGE, IN THE FORM AS PUNCHED IN
1723                    1586   1588 ; THE "U" (UNLOAD) COMMAND.  IT TAKES
1724                    1587   1589 ; ONE PARAMETER, WHICH IS THE STARTING
1725                    1588   1590 ; ADDRESS OF THE LOAD, AND WILL PRINT
1726                    1589   1591 ; THE LAST ADDRESS (+1) LOADED ON THE
1727                    1590   1592 ; CONSOLE DEVICE.
1728                    1591   1593 ;
1729f680  cd 38 f5      1592   1594 LOAD:	CALL	EXPR1	     ;INITIAL LOAD ADDRESS
1730f683  e1            1593   1595 	POP	HL
1731f684  cd 09 f5      1594   1596 	CALL	CRLF
1732f687  16 ff         1595   1597 	LD	D,0FFH	     ;START-OF-FILE TAG
1733f689  06 04         1596   1598 LOAD0:	LD	B,4	     ;FIND AT LEAST FOUR 0FFH'S
1734f68b  cd 67 f4      1597   1599 LOAD1:	CALL	RIFF
1735f68e  20 f9         1598   1600 	JR	NZ,LOAD0
1736f690  10 f9         1599   1601 	DJNZ	LOAD1
1737f692  cd 67 f4      1600   1602 LOAD2:	CALL	RIFF	     ;4 FOUND, NOW WAIT FOR NON-0FFH
1738f695  28 fb         1601   1603 	JR	Z,LOAD2
1739f697  77            1602   1604 	LD	(HL),A	     ;FIRST REAL DATA BYTE
1740f698  3e 07         1603   1605 	LD	A,BELL	     ;TELL TTY
1741f69a  d3 11         1604   1606 	OUT	(TTO),A
1742f69c  23            1605   1607 LOAD3:	INC	HL
1743f69d  cd 67 f4      1606   1608 	CALL	RIFF
1744f6a0  28 03         1607   1609 	JR	Z,ELOA	     ;POSSIBLE END OF FILE
1745f6a2  77            1608   1610 	LD	(HL),A
1746f6a3  18 f7         1609   1611 	JR	LOAD3
1747f6a5  1e 01         1610   1612 ELOA:	LD	E,1	     ;INITIALIZE
1748f6a7  cd 67 f4      1611   1613 ELOA0:	CALL	RIFF
1749f6aa  20 09         1612   1614 	JR	NZ,ELOA1
1750f6ac  1c            1613   1615 	INC	E	     ;COUNT QUES
1751f6ad  3e 07         1614   1616 	LD	A,MAX	     ;LOOK FOR EOF
1752f6af  bb            1615   1617 	CP	E	     ;FOUND MAX?
1753f6b0  20 f5         1616   1618 	JR	NZ,ELOA0     ;NOPE
1754f6b2  c3 82 f5      1617   1619 	JP	LADR	     ;YEP, PRINT END ADDR
1755f6b5  72            1618   1620 ELOA1:	LD	(HL),D
1756Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 28
1757Source file: zapple.asm
1758Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
1759
1760LOC   OBJECT CODE   LINE   STMT SOURCE CODE
1761f6b6  23            1619   1621 	INC	HL
1762f6b7  1d            1620   1622 	DEC	E	     ;RESTORE
1763f6b8  20 fb         1621   1623 	JR	NZ,ELOA1
1764f6ba  77            1622   1624 	LD	(HL),A	     ;REAL BYTE
1765f6bb  18 df         1623   1625 	JR	LOAD3
1766                    1624   1626 ;
1767                    1625   1627 ; THIS IS THE BREAKPOINT "TRAP" HANDLING
1768                    1626   1628 ; ROUTINE.  ALL USER REGISTERS ARE SAVED
1769                    1627   1629 ; FOR DISPLAY PURPOSES, AND THE CONTENTS
1770                    1628   1630 ; ARE RESTORED WHEN EXECUTING A "GO" (G)
1771                    1629   1631 ; COMMAND.
1772                    1630   1632 ;
1773                    1631   1633 RESTART:
1774f6bd  e5            1632   1634 	PUSH	HL	     ;PUSH ALL REGISTERS
1775f6be  d5            1633   1635 	PUSH	DE
1776f6bf  c5            1634   1636 	PUSH	BC
1777f6c0  f5            1635   1637 	PUSH	AF
1778f6c1  cd b1 f5      1636   1638 	CALL	MEMSIZ	     ;GET MONITOR'S STACK VALUE
1779f6c4  eb            1637   1639 	EX	DE,HL
1780f6c5  21 0a 00      1638   1640 	LD	HL,10	     ;GO UP 10 BYTES IN STACK
1781f6c8  39            1639   1641 	ADD	HL,SP
1782f6c9  06 04         1640   1642 	LD	B,4	     ;PICK OFF REG.
1783f6cb  eb            1641   1643 	EX	DE,HL
1784f6cc  2b            1642   1644 RES0:	DEC	HL
1785f6cd  72            1643   1645 	LD	(HL),D	     ;SAVE IN WORKAREA
1786f6ce  2b            1644   1646 	DEC	HL
1787f6cf  73            1645   1647 	LD	(HL),E
1788f6d0  d1            1646   1648 	POP	DE
1789f6d1  10 f9         1647   1649 	DJNZ	RES0
1790f6d3  c1            1648   1650 	POP	BC
1791f6d4  0b            1649   1651 	DEC	BC	     ;ADJUST P.C. VALUE
1792f6d5  f9            1650   1652 	LD	SP,HL	     ;SET MONITOR STACK
1793f6d6  21 25 00      1651   1653 	LD	HL,TLOCX
1794f6d9  39            1652   1654 	ADD	HL,SP
1795f6da  7e            1653   1655 	LD	A,(HL)
1796f6db  91            1654   1656 	SUB	C	     ;LOOK FOR A TRAP/MATCH
1797f6dc  23            1655   1657 	INC	HL
1798f6dd  20 04         1656   1658 	JR	NZ,RES1
1799f6df  7e            1657   1659 	LD	A,(HL)
1800f6e0  90            1658   1660 	SUB	B
1801f6e1  28 0c         1659   1661 	JR	Z,RES3	     ;NO TRAP HERE
1802f6e3  23            1660   1662 RES1:	INC	HL
1803f6e4  23            1661   1663 	INC	HL
1804f6e5  7e            1662   1664 	LD	A,(HL)
1805f6e6  91            1663   1665 	SUB	C	     ;TEST FOR SECOND TRAP
1806f6e7  20 05         1664   1666 	JR	NZ,RES2
1807f6e9  23            1665   1667 	INC	HL
1808f6ea  7e            1666   1668 	LD	A,(HL)
1809f6eb  90            1667   1669 	SUB	B
1810f6ec  28 01         1668   1670 	JR	Z,RES3
1811f6ee  03            1669   1671 RES2:	INC	BC	     ;NO TRAPS SET, RE-ADJUST P.C.
1812f6ef  21 20 00      1670   1672 RES3:	LD	HL,LLOCX
1813f6f2  39            1671   1673 	ADD	HL,SP
1814f6f3  73            1672   1674 	LD	(HL),E	     ;STORE USER H&L
1815f6f4  23            1673   1675 	INC	HL
1816f6f5  72            1674   1676 	LD	(HL),D
1817f6f6  23            1675   1677 	INC	HL
1818f6f7  23            1676   1678 	INC	HL
1819f6f8  71            1677   1679 	LD	(HL),C	     ;AND USER P.C.
1820f6f9  23            1678   1680 	INC	HL
1821Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 29
1822Source file: zapple.asm
1823Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
1824
1825LOC   OBJECT CODE   LINE   STMT SOURCE CODE
1826f6fa  70            1679   1681 	LD	(HL),B
1827f6fb  c5            1680   1682 	PUSH	BC
1828f6fc  0e 40         1681   1683 	LD	C,'@'	     ;DISPLAY BREAK ADDRESS.
1829f6fe  cd 7d f4      1682   1684 	CALL	CO
1830f701  e1            1683   1685 	POP	HL
1831f702  cd 82 f5      1684   1686 	CALL	LADR
1832f705  21 25 00      1685   1687 	LD	HL,TLOCX
1833f708  39            1686   1688 	ADD	HL,SP
1834f709  01 00 02      1687   1689 	LD	BC,200H
1835f70c  5e            1688   1690 RES4:	LD	E,(HL)	     ;REPLACE BYTES TAKEN FOR TRAP
1836f70d  71            1689   1691 	LD	(HL),C	     ;ZERO OUT STORAGE AREA
1837f70e  23            1690   1692 	INC	HL
1838f70f  56            1691   1693 	LD	D,(HL)
1839f710  71            1692   1694 	LD	(HL),C
1840f711  23            1693   1695 	INC	HL
1841f712  7b            1694   1696 	LD	A,E
1842f713  b2            1695   1697 	OR	D	     ;DO NOTHING IF ZERO
1843f714  28 02         1696   1698 	JR	Z,RES5
1844f716  7e            1697   1699 	LD	A,(HL)
1845f717  12            1698   1700 	LD	(DE),A	     ;STORE BYTE
1846f718  23            1699   1701 RES5:	INC	HL	     ;SAME THING
1847f719  10 f1         1700   1702 	DJNZ	RES4	     ;FOR OTHER BREAKPOINT
1848f71b  08            1701   1703 	EX	AF,AF'	     ;GET ALTERNATE SET OF REG.'S
1849f71c  d9            1702   1704 	EXX
1850f71d  e5            1703   1705 	PUSH	HL	     ;AND STORE IN WORKSPACE
1851f71e  d5            1704   1706 	PUSH	DE
1852f71f  c5            1705   1707 	PUSH	BC
1853f720  f5            1706   1708 	PUSH	AF
1854f721  dd e5         1707   1709 	PUSH	IX
1855f723  fd e5         1708   1710 	PUSH	IY
1856f725  ed 57         1709   1711 	LD	A,I	     ;GET INTERUPT VECTOR BYTE
1857f727  47            1710   1712 	LD	B,A
1858f728  ed 5f         1711   1713 	LD	A,R	     ;GET REFRESH BYTE
1859f72a  4f            1712   1714 	LD	C,A
1860f72b  c5            1713   1715 	PUSH	BC	     ;SAVE
1861f72c  c3 67 f0      1714   1716 	JP	START	     ;BACK TO START
1862                    1715   1717 ;
1863                    1716   1718 ; THIS IS THE INTERNAL KEYBOARD
1864                    1717   1719 ; HANDLING ROUTINE. IT WILL IGNORE
1865                    1718   1720 ; RUBOUTS (0FFH) AND BLANKS (00),
1866                    1719   1721 ; AND IT WILL NOT ECHO CR'S & N'S.
1867                    1720   1722 ; (NO N'S FOR THE "NULL" COMMAND).
1868                    1721   1723 ; IT CONVERTS LOWER CASE TO UPPER
1869                    1722   1724 ; CASE FOR THE LOOK-UP OF COMMANDS.
1870                    1723   1725 ;
1871                    1724   1726 ; OTHER CHARACTERS ARE ECHOED AS THEY
1872                    1725   1727 ; ARE RECEIVED.
1873                    1726   1728 ;
1874f72f  cd 18 f6      1727   1729 KI:	CALL	CI	     ;GET CHARACTER FROM CONSOLE
1875f732  e6 7f         1728   1730 	AND	7FH	     ;CLEAR PARITY BIT
1876f734  c9            1729   1731 	RET
1877                    1730   1732 ;
1878f735  cd 2f f7      1731   1733 TI:	CALL	KI
1879f738  3c            1732   1734 	INC	A	     ;IGNORE RUBOUTS
1880f739  f8            1733   1735 	RET	M
1881f73a  3d            1734   1736 	DEC	A	     ;IGNORE NULLS
1882f73b  c8            1735   1737 	RET	Z
1883f73c  fe 4e         1736   1738 	CP	'N'	     ;IGNORE N'S FOR NULL CMND
1884f73e  c8            1737   1739 	RET	Z
1885f73f  fe 6e         1738   1740 	CP	'n'
1886Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 30
1887Source file: zapple.asm
1888Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
1889
1890LOC   OBJECT CODE   LINE   STMT SOURCE CODE
1891f741  28 10         1739   1741 	JR	Z,TI0
1892f743  fe 0d         1740   1742 	CP	CR	     ;IGNORE CR'S
1893f745  c8            1741   1743 	RET	Z
1894f746  c5            1742   1744 	PUSH	BC
1895f747  4f            1743   1745 	LD	C,A
1896f748  cd 7d f4      1744   1746 	CALL	CO
1897f74b  79            1745   1747 	LD	A,C
1898f74c  c1            1746   1748 	POP	BC
1899f74d  fe 40         1747   1749 	CP	'A'-1	     ;CONVERT TO UPPER CASE
1900f74f  d8            1748   1750 	RET	C
1901f750  fe 7b         1749   1751 	CP	'z'+1
1902f752  d0            1750   1752 	RET	NC
1903f753  e6 5f         1751   1753 TI0:	AND	05FH
1904f755  c9            1752   1754 	RET
1905                    1753   1755 ;
1906                    1754   1756 ; THIS ROUTINE ALLOWS EXAMINATION OF
1907                    1755   1757 ; ANY INPUT PORT, OR THE SENDING OF
1908                    1756   1758 ; ANY VALUE TO ANY PORT.
1909                    1757   1759 ;
1910                    1758   1760 ; QO<N>,<V>[CR]
1911                    1759   1761 ;	OUTPUT TO PORT <N>, THE VALUE <V>
1912                    1760   1762 ;
1913                    1761   1763 ; QI<N>[CR]
1914                    1762   1764 ;	DISPLAY THE PORT <N>
1915                    1763   1765 ;
1916f756  cd 35 f7      1764   1766 QUERY:	CALL	TI
1917f759  fe 4f         1765   1767 	CP	'O'
1918f75b  28 1c         1766   1768 	JR	Z,QUO
1919f75d  fe 49         1767   1769 	CP	'I'
1920f75f  c2 57 f4      1768   1770 	JP	NZ,ERROR
1921f762  cd 38 f5      1769   1771 	CALL	EXPR1
1922f765  c1            1770   1772 	POP	BC
1923f766  ed 58         1771   1773 	IN	E,(C)
1924f768  06 08         1772   1774 BITS:	LD	B,8	     ;DISPLAY 8 BITS
1925f76a  cd 7b f4      1773   1775 	CALL	BLK
1926f76d  cb 23         1774   1776 QUE2:	SLA	E
1927f76f  3e 18         1775   1777 	LD	A,'0'>1
1928f771  8f            1776   1778 	ADC	A,A	     ;MAKE "0" OR "1"
1929f772  4f            1777   1779 	LD	C,A
1930f773  cd 7d f4      1778   1780 	CALL	CO
1931f776  10 f5         1779   1781 	DJNZ	QUE2
1932f778  c9            1780   1782 	RET
1933f779  cd 3a f5      1781   1783 QUO:	CALL	EXPR
1934f77c  d1            1782   1784 	POP	DE
1935f77d  c1            1783   1785 	POP	BC
1936f77e  ed 59         1784   1786 	OUT	(C),E
1937f780  c9            1785   1787 	RET
1938                    1786   1788 ;
1939                    1787   1789 ; THIS ROUTINE VERIFIES THE CONTENTS
1940                    1788   1790 ; OF ONE MEMORY BLOCK WITH ANOTHER.
1941                    1789   1791 ;
1942                    1790   1792 ; V<ADDR1>,<ADDR2>,<ADDR3>
1943                    1791   1793 ;	VERIFY FROM <1> THRU <2> WITH
1944                    1792   1794 ; THE CONTENTS OF MEMORY BEGINNING AT <3>
1945                    1793   1795 ;
1946f781  cd 2d f5      1794   1796 VERIFY:	CALL	EXPR3	     ;GET 3 PARAMETERS
1947f784  0a            1795   1797 VERI0:	LD	A,(BC)
1948f785  be            1796   1798 	CP	(HL)
1949f786  28 05         1797   1799 	JR	Z,VERI1
1950f788  c5            1798   1800 	PUSH	BC
1951Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 31
1952Source file: zapple.asm
1953Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
1954
1955LOC   OBJECT CODE   LINE   STMT SOURCE CODE
1956f789  cd 50 f1      1799   1801 	CALL	CERR	     ;DISPLAY ERRORS
1957f78c  c1            1800   1802 	POP	BC
1958f78d  03            1801   1803 VERI1:	INC	BC
1959f78e  cd 66 f5      1802   1804 	CALL	HILOX
1960f791  18 f1         1803   1805 	JR	VERI0
1961                    1804   1806 ;
1962                    1805   1807 ; <SYSTEM I/O LOOK-UP TABLE>
1963                    1806   1808 ;
1964                    1807   1809 ; THE FIRST CHARACTER IS THE DEVICE NAME
1965                    1808   1810 ; (ONE LETTER) AND THE NEXT FOUR ARE THE
1966                    1809   1811 ; NAMES OF THE FOUR POSSIBLE DRIVERS TO BE
1967                    1810   1812 ; ASSIGNED.
1968                    1811   1813 ;
1969                    1812   1814 LTBL:
1970f793  43            1813   1815 	DEFB	'C'	     ;CONSOLE ASSIGNMENTS
1971f794  54            1814   1816 	DEFB	'T'	     ;CTTY	T=TELEPRINTER
1972f795  43            1815   1817 	DEFB	'C'	     ;CCRT	C=CRT (VIDEO MONITOR)
1973f796  42            1816   1818 	DEFB	'B'	     ;BATCH= COMMANDS FROM READER
1974f797  55            1817   1819 	DEFB	'U'	     ;CUSE	USER
1975                    1818   1820 ;
1976f798  52            1819   1821 	DEFB	'R'	     ;READER ASSIGNMENTS
1977f799  54            1820   1822 	DEFB	'T'	     ;RTTY
1978f79a  50            1821   1823 	DEFB	'P'	     ;RPTR	P=PAPER TAPE
1979f79b  43            1822   1824 	DEFB	'C'	     ;RCAS	C=CASSETTE
1980f79c  55            1823   1825 	DEFB	'U'	     ;RUSER	USER
1981                    1824   1826 ;
1982f79d  50            1825   1827 	DEFB	'P'	     ;PUNCH ASSIGNMENTS
1983f79e  54            1826   1828 	DEFB	'T'	     ;PTTY
1984f79f  50            1827   1829 	DEFB	'P'	     ;PPTP
1985f7a0  43            1828   1830 	DEFB	'C'	     ;PCAS	C=CASSETTE
1986f7a1  55            1829   1831 	DEFB	'U'	     ;PUSER	USER
1987                    1830   1832 ;
1988f7a2  4c            1831   1833 	DEFB	'L'	     ;LIST ASSIGNMENTS
1989f7a3  54            1832   1834 	DEFB	'T'	     ;LTTY	LIST=TELEPRINTER
1990f7a4  43            1833   1835 	DEFB	'C'	     ;LCRT	LIST=CRT
1991f7a5  4c            1834   1836 	DEFB	'L'	     ;LINE PRINTER
1992f7a6  55            1835   1837 	DEFB	'U'	     ;LUSER	USER
1993                    1836   1838 ;
1994                    1837   1839 ;
1995                    1838   1840 ; THIS IS A SHORT PROGRAM, EXECUTED
1996                    1839   1841 ; UPON EXECUTING A "GO" COMMAND. IT
1997                    1840   1842 ; IS PLACED IN THE WORK AREA WHEN
1998                    1841   1843 ; THE MONITOR IS INITIALIZED, AS IT
1999                    1842   1844 ; REQUIRES RAM FOR PROPER OPERATION.
2000                    1843   1845 ;
2001                    1844   1846 EXIT:			     ;EXIT ROUTINE (LOADS ALL REGISTERS)
2002f7a7  c1            1845   1847 	POP	BC
2003f7a8  79            1846   1848 	LD	A,C
2004f7a9  ed 4f         1847   1849 	LD	R,A
2005f7ab  78            1848   1850 	LD	A,B
2006f7ac  ed 47         1849   1851 	LD	I,A
2007f7ae  fd e1         1850   1852 	POP	IY
2008f7b0  dd e1         1851   1853 	POP	IX
2009f7b2  f1            1852   1854 	POP	AF
2010f7b3  c1            1853   1855 	POP	BC
2011f7b4  d1            1854   1856 	POP	DE
2012f7b5  e1            1855   1857 	POP	HL
2013f7b6  08            1856   1858 	EX	AF,AF'
2014f7b7  d9            1857   1859 	EXX
2015f7b8  d1            1858   1860 	POP	DE
2016Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 32
2017Source file: zapple.asm
2018Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
2019
2020LOC   OBJECT CODE   LINE   STMT SOURCE CODE
2021f7b9  c1            1859   1861 	POP	BC
2022f7ba  f1            1860   1862 	POP	AF
2023f7bb  e1            1861   1863 	POP	HL
2024f7bc  f9            1862   1864 	LD	SP,HL
2025f7bd  00            1863   1865 	NOP		     ;RESERVED FOR ENABLE INTERUPTS
2026f7be  21 00 00      1864   1866 	LD	HL,0
2027f7c1  c3 00 00      1865   1867 	JP	0
2028                    1866   1868 ;
2029f7c4  00 00         1867   1869 	DEFW	0	     ;STORAGE AREA FOR TRAP DATA
2030f7c6  00            1868   1870 	DEFB	0
2031f7c7  00 00         1869   1871 	DEFW	0
2032f7c9  00            1870   1872 	DEFB	0
2033                    1871   1873 ;
2034                    1872   1874 ; DISPLACEMENTS OF REGISTER
2035                    1873   1875 ; STORAGE FROM NORMAL STACK
2036                    1874   1876 ; LOCATION.
2037                    1875   1877 ;
2038                    1876   1878 ENDX:
2039                    1877   1879 ;
20400015                1878   1880 ALOC	EQU	15H
20410013                1879   1881 BLOC	EQU	13H
20420012                1880   1882 CLOC	EQU	12H
20430011                1881   1883 DLOC	EQU	11H
20440010                1882   1884 ELOC	EQU	10H
20450014                1883   1885 FLOC	EQU	14H
20460031                1884   1886 HLOC	EQU	31H
20470030                1885   1887 LLOC	EQU	30H
20480034                1886   1888 PLOC	EQU	34H
20490017                1887   1889 SLOC	EQU	17H
20500035                1888   1890 TLOC	EQU	35H
20510025                1889   1891 TLOCX	EQU	25H
20520020                1890   1892 LLOCX	EQU	20H
2053                    1891   1893 ;
20540009                1892   1894 APLOC	EQU	09H
2055000b                1893   1895 BPLOC	EQU	0BH
2056000a                1894   1896 CPLOC	EQU	0AH
2057000d                1895   1897 DPLOC	EQU	0DH
2058000c                1896   1898 EPLOC	EQU	0CH
20590008                1897   1899 FPLOC	EQU	08H
2060000f                1898   1900 HPLOC	EQU	0FH
2061000e                1899   1901 LPLOC	EQU	0EH
20620007                1900   1902 XLOC	EQU	07
20630005                1901   1903 YLOC	EQU	05
20640002                1902   1904 RLOC	EQU	02
20650003                1903   1905 ILOC	EQU	03
2066                    1904   1906 ;
2067                    1905   1907 ;
2068                    1906   1908 ; THIS IS THE TABLE USED TO DETERMINE
2069                    1907   1909 ; A VALID REGISTER IDENTIFIER, AND IT'S
2070                    1908   1910 ; DISPLACEMENT FROM THE STACK POINTER.
2071                    1909   1911 ;
2072                    1910   1912 ; POSITION ONE= REGISTER NAME, WITH BIT 7 INDICATING
2073                    1911   1913 ; END OF TABLE.
2074                    1912   1914 ;
2075                    1913   1915 ; POSITION TWO=	BIAS FROM CURRENT STACK LEVEL OR'ED
2076                    1914   1916 ; WITH A TWO-BIT FLAG.	00XXXXXX=BYTE
2077                    1915   1917 ;			10XXXXXX=WORD
2078                    1916   1918 ;			11XXXXXX=SPECIAL FOR "M" REG.
2079                    1917   1919 ;
2080                    1918   1920 ACTBL:		;NORMAL SET OF REGISTERS (8080)
2081Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 33
2082Source file: zapple.asm
2083Title:       <Zapple Monitor, Version 1.11, Dec. 18, 1976>
2084
2085LOC   OBJECT CODE   LINE   STMT SOURCE CODE
2086                    1919   1921 ;		;PLUS THE INTERUPT REGISTER ("I")
2087                    1920   1922 ;
2088f7ca  41 15         1921   1923 	DEFB	'A',ALOC | 0
2089f7cc  42 13         1922   1924 	DEFB	'B',BLOC | 0
2090f7ce  43 12         1923   1925 	DEFB	'C',CLOC | 0
2091f7d0  44 11         1924   1926 	DEFB	'D',DLOC | 0
2092f7d2  45 10         1925   1927 	DEFB	'E',ELOC | 0
2093f7d4  46 14         1926   1928 	DEFB	'F',FLOC | 0
2094f7d6  48 31         1927   1929 	DEFB	'H',HLOC | 0
2095f7d8  4c 30         1928   1930 	DEFB	'L',LLOC | 0
2096f7da  4d f1         1929   1931 	DEFB	'M',HLOC | 0C0H
2097f7dc  50 b4         1930   1932 	DEFB	'P',PLOC | 080H
2098f7de  53 97         1931   1933 	DEFB	'S',SLOC | 080H
2099f7e0  49 03         1932   1934 	DEFB	'I',ILOC | 0
2100f7e2  80            1933   1935 	DEFB	80H
2101                    1934   1936 ;
2102                    1935   1937 PRMTB:		;ADDITIONAL SET OF REGISTERS (Z-80)
2103                    1936   1938 ;
2104f7e3  41 09         1937   1939 	DEFB	'A',APLOC | 0
2105f7e5  42 0b         1938   1940 	DEFB	'B',BPLOC | 0
2106f7e7  43 0a         1939   1941 	DEFB	'C',CPLOC | 0
2107f7e9  44 0d         1940   1942 	DEFB	'D',DPLOC | 0
2108f7eb  45 0c         1941   1943 	DEFB	'E',EPLOC | 0
2109f7ed  46 08         1942   1944 	DEFB	'F',FPLOC | 0
2110f7ef  48 0f         1943   1945 	DEFB	'H',HPLOC | 0
2111f7f1  4c 0e         1944   1946 	DEFB	'L',LPLOC | 0
2112f7f3  4d cf         1945   1947 	DEFB	'M',HPLOC | 0C0H
2113f7f5  58 87         1946   1948 	DEFB	'X',XLOC | 080H
2114f7f7  59 85         1947   1949 	DEFB	'Y',YLOC | 080H
2115f7f9  52 02         1948   1950 	DEFB	'R',RLOC | 0
2116f7fb  80            1949   1951 	DEFB	80H
2117                    1950   1952 ;
2118                    1951   1953 Z:
2119                    1952   1954 		;END OF PROGRAM
2120                    1953   1955 ;
2121                    1954   1956 ;
2122f7fc                1955   1957 	END
2123Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 34
2124Source file: zapple.asm
2125Title:       Symboltable
2126
2127ABS0     f25a 	ACTBL    f7ca 	AHEAD    f04a 	ALOC     0015
2128APLOC    0009 	ASERR    f0ed 	ASS0     f0cf 	ASS1     f0d8
2129ASS2     f0d9 	ASS3     f0e6 	ASS4     f0f0 	ASS5     f0f3
2130ASS6     f0fe 	ASS7     f100 	ASSIGN   f0c3 	BASE     f000
2131BATCH    0002*	BEGIN    f031 	BELL     0007 	BITS     f768
2132BLK      f47b 	BLOC     0013 	BPLOC    000b 	BY1      f117
2133BYE      f114 	CCHK     f451*	CCRT     0001*	CERR     f150
2134CI       f618 	CI1      f628 	CI2      f634 	CILOC    f800
2135CLOC     0012 	CMSK     00fc 	CO       f47d 	CO0      f48e
2136CO1      f49b 	COLOC    f803 	COM1     f144 	COMP     f141
2137CONV     f4fa 	COPCK    f604 	CPLOC    000a 	CR       000d
2138CRLF     f509 	CRTBE    0080 	CRTDA    0040 	CRTI     0051
2139CRTIN    f62b 	CRTO     0051 	CRTOUT   f491 	CRTS     0050
2140CS0      f51c 	CS1      f521 	CS2      f525*	CS3      f528
2141CSLOC    f818 	CSTS     f511 	CTTY     0000*	CUSE     0003*
2142DIS0     f165 	DIS1     f168 	DISP     f162 	DL0      f64a
2143DLOC     0011 	DONE     f277 	DONE2    f35e 	DPLOC    000d
2144ELOA     f6a5 	ELOA0    f6a7 	ELOA1    f6b5 	ELOC     0010
2145ENDX     f7ca 	EOF      f179 	EPLOC    000c 	ERR2     f274*
2146ERR3     f26e 	ERROR    f457 	EX0      f53d 	EX1      f540
2147EX2      f54e 	EX3      f558 	EXF      f55f 	EXIT     f7a7
2148EXLF     f504 	EXPR     f53a 	EXPR1    f538 	EXPR3    f52d
2149FALSE    0000 	FI1      f198 	FIL      0000 	FILL     f195
2150FIND     f337 	FINDC    f332 	FLOC     0014 	FOUND    f346
2151FPLOC    0008 	GOT0     f1b9 	GOT1     f1bf 	GOT2     f1d4
2152GOT2A    f1dc 	GOT3     f1e7 	GOTO     f1a2 	HELLO    f062
2153HEXN     f576 	HILO     f56c 	HILOX    f566 	HLOC     0031
2154HLSP     f478 	HPLOC    000f 	ILOC     0003 	IOBYT    efff
2155IOCHK    f110 	IOSET    f10b 	J        f81b*	KI       f72f
2156LAD      f590 	LADR     f582 	LBYTE    f587 	LC1      f2ad
2157LCRT     0040 	LE0      f59e 	LEAD     f59b 	LF       000a
2158LFADR    f475 	LINE     0080 	LLO1     f261 	LLOC     0030
2159LLOCX    0020 	LMSK     003f 	LNLOC    f812 	LO       f49f
2160LOAD     f680 	LOAD0    f689 	LOAD1    f68b 	LOAD2    f692
2161LOAD3    f69c 	LOD0     f22d 	LOD1     f285 	LOD3     f291
2162LOD4     f269 	LOD5     f28a 	LODCB    f2a3 	LODR     f283
2163LPLOC    000e 	LTBL     f793 	LTTY     0000*	LULOC    f815
2164LUSER    00c0*	MARK     f596 	MAX      0007 	MEM0     f5b8
2165MEM1     f5c1 	MEM2     f5ce 	MEMC     f5ae 	MEMCK    f5a4
2166MEMSIZ   f5b1 	MO1      f211 	MOVE     f20e 	MSG      f021
2167MSGL     0010 	NIBBLE   f5d8 	NN       0000*	NULL     f4ee
2168PADR     f5e8 	PBYTE    f5ed 	PCAS     0020 	PCASO    0007
2169PCASS    0006 	PCHK     f609 	PCSBE    0080 	PEOL     f4b2
2170PLOC     0034 	PMSK     00cf 	PO0      f4c4 	PO1      f4ce
2171PPTP     0010 	PRMTB    f7e3 	PTPL     f80c 	PTTY     0000*
2172PULOC    f80f 	PUO      f4b9 	PUSER    0030*	PUTA     f122
2173PUTA1    f129 	PUTA2    f138 	PUTA3    f13d 	QCHK     f60c
2174QUE2     f76d 	QUERY    f756 	QUO      f779 	RCAS     0008
2175RCSD     0007 	RCSDA    0001 	RCSS     0006 	REA0     f228
2176READ     f219 	RES0     f6cc 	RES1     f6e3 	RES2     f6ee
2177RES3     f6ef 	RES4     f70c 	RES5     f718 	RESTART  f6bd
2178RI       f638 	RI0      f641 	RI1      f652 	RI2      f656
2179RI3      f65b 	RI4      f662 	RI5      f66d*	RI6      f671
2180RIBBLE   f5d5 	RID      f658 	RIFF     f467 	RIX      f67a
2181RLOC     0002 	RMSK     00f3 	RPTPL    f806 	RPTR     0004
2182RST7     0038 	RTTY     0000*	RUB      00ff*	RULOC    f809
2183RUSER    000c*	SBYTE    f2b3 	SIZE     f46e 	SLOC     0017
2184STARO    f073 	START    f067 	STKIT    f05f 	STORE    f2c6
2185SUB0     f2d6 	SUB1     f2ef 	SUB2     f2f8 	SUB3     f2f0
2186SUBS     f2d2 	SWITCH   00ff 	TBL      f08f 	TELL     f354
2187TEST     f1f0 	TEST1    f1f3 	TEST2    f208 	TI       f735
2188TI0      f753 	TLOC     0035 	TLOCX    0025 	TOM      f442
2189Z80-Assembler	Release 1.9	Wed May 16 19:49:49 2018	Page 35
2190Source file: zapple.asm
2191Title:       Symboltable
2192
2193TOM1     f445 	TRAP     f01e 	TRUE     ffff*	TTI      0011
2194TTO      0011 	TTS      0010 	TTS2     0012 	TTYBE    0002
2195TTYDA    0001 	TTYIN    f61f 	TTYOUT   f484 	TYP0     f2fe
2196TYP1     f303 	TYP2     f30a 	TYP3     f30c 	TYPE     f2fb
2197UNL      f4e2 	UNLD     f4d6 	USER     f800 	VERI0    f784
2198VERI1    f78d 	VERIFY   f781 	WAIT     f4f1 	WHER0    f31d
2199WHERE    f31b 	WRITE    f363 	WRT0     f369 	WRT1     f374
2200WRT2     f386 	WRT3     f392 	WRT4     f39e 	XAM      f3a3
2201XAM0     f3bb 	XAM1     f3c7 	XAM2     f3ca 	XAM3     f3e3
2202XAM4     f3fc 	XAM5     f402 	XAM6     f407 	XAM7     f40a
2203XAM8     f433 	XAM9     f438 	XLOC     0007 	YLOC     0005
2204Z        f7fc*