comparison src/monitor.lst @ 57:2088fd998865

sbc09 directry clean up
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 23 Jul 2018 16:07:12 +0900 (2018-07-23)
parents
children ef64e3f4e229
comparison
equal deleted inserted replaced
56:4fa2bdb0c457 57:2088fd998865
1 0000: ;Buggy machine language monitor and rudimentary O.S. version 1.0
2 0000:
3 0000: * Memory map of SBC
4 0000: * $0-$40 Zero page variables reserved by monitor and O.S.
5 0000: * $40-$FF Zero page portion for user programs.
6 0000: * $100-$17F Xmodem buffer 0, terminal input buffer,
7 0000: * $180-$1FF Xmodem buffer 1, terminal output buffer.
8 0000: * $200-$27F Terminal input line.
9 0000: * $280-$2FF Variables reserved by monitor and O.S.
10 0000: * $300-$400 System stack.
11 0000: * $400-$7FFF RAM for user programs and data.
12 0000: * $8000-$DFFF PROM for user programs.
13 0000: * $E000-$E1FF I/O addresses.
14 0000: * $E200-$E3FF Reserved.
15 0000: * $E400-$FFFF Monitor ROM
16 0000:
17 0000: * Reserved Zero page addresses
18 0000: org $0000
19 0000: setdp 0
20 0000: * First the I/O routine vectors.
21 0000: getchar rmb 3 ;Jump to getchar routine.
22 0003: putchar rmb 3 ;Jump to putchar routine.
23 0006: getline rmb 3 ;Jump to getline routine.
24 0009: putline rmb 3 ;Jump to putline routine.
25 000C: putcr rmb 3 ;Jump to putcr routine.
26 000F: getpoll rmb 3 ;Jump to getpoll routine.
27 0012: xopenin rmb 3 ;Jump to xopenin routine.
28 0015: xopenout rmb 3 ;Jump to xopenout routine.
29 0018: xabortin rmb 3 ;Jump to xabortin routine.
30 001B: xclosein rmb 3 ;Jump to xclosein routine.
31 001E: xcloseout rmb 3 ;Jump to xcloseout routine.
32 0021: delay rmb 3 ;Jump to delay routine.
33 0024:
34 0024: *Next the system variables in the zero page.
35 0024: temp rmb 2 ;hex scanning/disasm
36 0026: temp2 rmb 2 ;Hex scanning/disasm
37 0028: temp3 rmb 2 ;Used in Srecords, H command
38 002A: timer rmb 3 ;3 byte timer, incremented every 20ms
39 002D: xpacknum rmb 1 ;Packet number for XMODEM block,
40 002E: xsum rmb 1 ;XMODEM checksum
41 002F: lastok rmb 1 ;flag to indicate last block was OK
42 0030: xcount rmb 1 ;Count of characters in buffer.
43 0031: xmode rmb 1 ;XMODEM mode, 0 none, 1 out, 2 in.
44 0032:
45 0032: * I/O buffers.
46 0080: buflen equ 128 ;Length of input line buffer.
47 0032: org $100
48 0100: buf0 rmb 128 ;Xmodem buffer 0, serial input buffer.
49 0180: buf1 rmb 128 ;Xmodem buffer 1, serial output buffer.
50 0200: linebuf rmb buflen ;Input line buffer.
51 0280:
52 0280:
53 0280: * Interrupt vectors (start at $280)
54 0280: * All interrupts except RESET are vectored through jumps.
55 0280: * FIRQ is timer interrupt, IRQ is ACIA interrupt.
56 0280: swi3vec rmb 3
57 0283: swi2vec rmb 3
58 0286: firqvec rmb 3
59 0289: irqvec rmb 3
60 028C: swivec rmb 3
61 028F: nmivec rmb 3
62 0292: xerrvec rmb 3 ;Error handler for XMODEM error.
63 0295: exprvec rmb 3 ;Expression evaluator in assembler.
64 0298: asmerrvec rmb 3 ;Error handler for assembler errors.
65 029B:
66 029B: * Next the non zero page system variables.
67 029B: oldpc rmb 2 ;Saved pc value for J command.
68 029D: addr rmb 2 ;Address parameter.
69 029F: length rmb 2 ;Length parameter.
70 02A1:
71 0004: brkpoints equ 4 ;Number of settable breakpoints.
72 02A1: bpaddr rmb brkpoints*3 ;Address and byte for each break point.
73 02AD: stepbp rmb 3 ;Address of P command break point.
74 02B0:
75 02B0: sorg rmb 2 ;Origin address of S record entry.
76 02B2: soffs rmb 2 ;Offset load adrr-addr in record
77 02B4:
78 02B4: oldgetc rmb 2 ;Old getchar address.
79 02B6: oldputc rmb 2 ;Old putchar address.
80 02B8: oldputcr rmb 2 ;Old putcr address.
81 02BA: lastterm rmb 1 ;Last terminating character.
82 02BB: filler rmb 1 ;Filler at end of XMODEM file.
83 02BC: xmcr rmb 1 ;end-of-line characters for XMODEM send.
84 02BD: savesp rmb 2 ;Save sp to restore it on error.
85 02BF:
86 02BF: * Following variables are used by assembler/disassembler.
87 02BF: prebyte rmb 1
88 02C0: opc1 rmb 1
89 02C1: opcode rmb 1
90 02C2: postbyte rmb 1
91 02C3: amode rmb 1
92 02C4: operand rmb 2
93 02C6: mnembuf rmb 5 ;Buffer to store capitalized mnemonic.
94 02CB: opsize rmb 1 ;SIze (in bytes) of extra oeprand (0--2)
95 02CC: uncert rmb 1 ;Flag to indicate that op is unknown.
96 02CD: dpsetting rmb 2
97 02CF:
98 02CF: endvars equ *
99 02CF:
100 0400: ramstart equ $400 ;first free RAM address.
101 02CF:
102 8000: ramtop equ $8000 ;top of RAM.
103 02CF:
104 02CF: * I/O port addresses
105 E000: aciactl equ $e000 ;Control port of ACIA
106 E000: aciasta equ $e000 ;Status port of ACIA
107 E001: aciadat equ $e001 ;Data port of ACIA
108 02CF:
109 02CF: * ASCII control characters.
110 0001: SOH equ 1
111 0004: EOT equ 4
112 0006: ACK equ 6
113 0008: BS equ 8
114 0009: TAB equ 9
115 000A: LF equ 10
116 000D: CR equ 13
117 0015: NAK equ 21
118 0018: CAN equ 24
119 007F: DEL equ 127
120 02CF:
121 00DF: CASEMASK equ $DF ;Mask to make lowercase into uppercase.
122 02CF:
123 02CF: * Monitor ROM starts here.
124 02CF: org $E400
125 E400:
126 E400: 1AFF reset orcc #$FF ;Disable interrupts.
127 E402: 4F clra
128 E403: 1F8B tfr a,dp ;Set direct page register to 0.
129 E405: 10CE0400 lds #ramstart
130 E409: 8EE520 ldx #intvectbl
131 E40C: CE0280 ldu #swi3vec
132 E40F: C61B ldb #osvectbl-intvectbl
133 E411: 8D37 bsr blockmove ;Initialize interrupt vectors from ROM.
134 E413: 8EE53B ldx #osvectbl
135 E416: CE0000 ldu #0
136 E419: C624 ldb #endvecs-osvectbl
137 E41B: 8D2D bsr blockmove ;Initialize I/O vectors from ROM.
138 E41D: 8D33 bsr initacia ;Initialize serial port.
139 E41F: 1C00 andcc #$0 ;Enable interrupts
140 E421: * Put the 'saved' registers of the program being monitored on top of the
141 E421: * stack. There are 12 bytes on the stack for cc,b,a,dp,x,y,u and pc
142 E421: * pc is initialized to $400, the rest to zero.
143 E421: 8E0000 ldx #0
144 E424: 1F12 tfr x,y
145 E426: CE0400 ldu #ramstart
146 E429: 3450 pshs x,u
147 E42B: 3430 pshs x,y
148 E42D: 3430 pshs x,y
149 E42F: 8E029B ldx #oldpc
150 E432: C634 ldb #endvars-oldpc
151 E434: 6F80 clvar clr ,x+
152 E436: 5A decb
153 E437: 26FB bne clvar ;Clear the variable area.
154 E439: CC1A03 ldd #$1A03
155 E43C: FD02BB std filler ;Set XMODEM filler and end-of-line.
156 E43F: 8EE5E2 ldx #welcome
157 E442: BDE502 jsr outcount
158 E445: 9D0C jsr putcr ;Print a welcome message.
159 E447: 7EE579 jmp cmdline
160 E44A: * Block move routine, from X to U length B. Modifies them all and A.
161 E44A: A680 blockmove lda ,x+
162 E44C: A7C0 sta ,u+
163 E44E: 5A decb
164 E44F: 26F9 bne blockmove
165 E451: 39 rts
166 E452:
167 E452: * Initialize serial communications port, buffers, interrupts.
168 E452: C603 initacia ldb #$03
169 E454: F7E000 stb aciactl
170 E457: C635 ldb #%00110101
171 E459: 39 rts
172 E45A:
173 E45A: * O.S. routine to read a character into B register.
174 E45A: F6E000 osgetc ldb aciasta
175 E45D: C501 bitb #$01
176 E45F: 27F9 beq osgetc
177 E461: F6E001 ldb aciadat
178 E464: 39 rts
179 E465:
180 E465: ;O.S. rotuine to check if there is a character ready to be read.
181 E465: F6E000 osgetpoll ldb aciasta
182 E468: C501 bitb #$01
183 E46A: 2602 bne poltrue
184 E46C: 5F clrb
185 E46D: 39 rts
186 E46E: C6FF poltrue ldb #$ff
187 E470: 39 rts
188 E471:
189 E471: * O.S. routine to write the character in the B register.
190 E471: 3402 osputc pshs a
191 E473: B6E000 putcloop lda aciasta
192 E476: 8502 bita #$02
193 E478: 27F9 beq putcloop
194 E47A: F7E001 stb aciadat
195 E47D: 3502 puls a
196 E47F: 39 rts
197 E480:
198 E480: * O.S. routine to read a line into memory at address X, at most B chars
199 E480: * long, return actual length in B. Permit backspace editing.
200 E480: 3412 osgetl pshs a,x
201 E482: D724 stb temp
202 E484: 4F clra
203 E485: 9D00 osgetl1 jsr getchar
204 E487: C47F andb #$7F
205 E489: C108 cmpb #BS
206 E48B: 2704 beq backsp
207 E48D: C17F cmpb #DEL
208 E48F: 2614 bne osgetl2
209 E491: 4D backsp tsta ;Recognize BS and DEL as backspace key.
210 E492: 27F1 beq osgetl1 ;ignore if line already zero length.
211 E494: C608 ldb #BS
212 E496: 9D03 jsr putchar
213 E498: C620 ldb #' '
214 E49A: 9D03 jsr putchar
215 E49C: C608 ldb #BS ;Send BS,space,BS. This erases last
216 E49E: 9D03 jsr putchar ;character on most terminals.
217 E4A0: 301F leax -1,x ;Decrement address.
218 E4A2: 4A deca
219 E4A3: 20E0 bra osgetl1
220 E4A5: C10D osgetl2 cmpb #CR
221 E4A7: 270D beq newline
222 E4A9: C10A cmpb #LF
223 E4AB: 2613 bne osgetl3 ;CR or LF character ends line.
224 E4AD: F602BA ldb lastterm
225 E4B0: C10D cmpb #CR
226 E4B2: 27D1 beq osgetl1 ;Ignore LF if it comes after CR
227 E4B4: C60A ldb #LF
228 E4B6: F702BA newline stb lastterm
229 E4B9: 9D0C jsr putcr
230 E4BB: 1F89 tfr a,b ;Move length to B
231 E4BD: 3512 puls a,x ;restore registers.
232 E4BF: 39 rts ;<--- Here is the exit point.
233 E4C0: C109 osgetl3 cmpb #TAB
234 E4C2: 270F beq dotab
235 E4C4: C120 cmpb #' '
236 E4C6: 25BD blo osgetl1 ;Ignore control characters.
237 E4C8: 9124 cmpa temp
238 E4CA: 27B9 beq osgetl1 ;Ignore char if line full.
239 E4CC: 9D03 jsr putchar ;Echo the character.
240 E4CE: E780 stb ,x+ ;Store it in memory.
241 E4D0: 4C inca
242 E4D1: 20B2 bra osgetl1
243 E4D3: C620 dotab ldb #' '
244 E4D5: 9124 cmpa temp
245 E4D7: 27AC beq osgetl1
246 E4D9: 9D03 jsr putchar
247 E4DB: E780 stb ,x+
248 E4DD: 4C inca
249 E4DE: 8507 bita #7 ;Insert spaces until length mod 8=0
250 E4E0: 26F1 bne dotab
251 E4E2: 20A1 bra osgetl1
252 E4E4:
253 E4E4: * O.S. routine to write a line starting at address X, B chars long.
254 E4E4: 3416 osputl pshs a,b,x
255 E4E6: 1F98 tfr b,a
256 E4E8: 4D tsta
257 E4E9: 2707 beq osputl1
258 E4EB: E680 osputl2 ldb ,x+
259 E4ED: 9D03 jsr putchar
260 E4EF: 4A deca
261 E4F0: 26F9 bne osputl2
262 E4F2: 3516 osputl1 puls a,b,x
263 E4F4: 39 rts
264 E4F5:
265 E4F5: * O.S. routine to terminate a line.
266 E4F5: 3404 oscr pshs b
267 E4F7: C60D ldb #CR
268 E4F9: 9D03 jsr putchar
269 E4FB: C60A ldb #LF
270 E4FD: 9D03 jsr putchar ;Send the CR and LF characters.
271 E4FF: 3504 puls b
272 E501: 39 rts
273 E502:
274 E502: * Output a counted string at addr X
275 E502: 3414 outcount pshs x,b
276 E504: E680 ldb ,x+
277 E506: 9D09 jsr putline
278 E508: 3514 puls x,b
279 E50A: 39 rts
280 E50B:
281 E50B: 0C2C timerirq inc timer+2
282 E50D: 2608 bne endirq
283 E50F: 0C2B inc timer+1
284 E511: 2604 bne endirq
285 E513: 0C2A inc timer
286 E515: 3B rti
287 E516: 12 aciairq nop
288 E517: 3B endirq rti
289 E518:
290 E518: * Wait D times 20ms.
291 E518: D32B osdly addd timer+1
292 E51A: 10932B dlyloop cmpd timer+1
293 E51D: 26FB bne dlyloop
294 E51F: 39 rts
295 E520:
296 E520: * This table will be copied to the interrupt vector area in RAM.
297 E520: 7EE517 intvectbl jmp endirq
298 E523: 7EE517 jmp endirq
299 E526: 7EE50B jmp timerirq
300 E529: 7EE516 jmp aciairq
301 E52C: 7EE56A jmp unlaunch
302 E52F: 7EE517 jmp endirq
303 E532: 7EEE4B jmp xerrhand
304 E535: 7EF6F9 jmp expr
305 E538: 7E0298 jmp asmerrvec
306 E53B: * And this one to the I/O vector table.
307 E53B: 7EE45A osvectbl jmp osgetc
308 E53E: 7EE471 jmp osputc
309 E541: 7EE480 jmp osgetl
310 E544: 7EE4E4 jmp osputl
311 E547: 7EE4F5 jmp oscr
312 E54A: 7EE465 jmp osgetpoll
313 E54D: 7EED44 jmp xopin
314 E550: 7EED67 jmp xopout
315 E553: 7EED8C jmp xabtin
316 E556: 7EEDCF jmp xclsin
317 E559: 7EEDAC jmp xclsout
318 E55C: 7EE518 jmp osdly
319 E55F: endvecs equ *
320 E55F:
321 E55F: * The J command returns here.
322 E55F: 3410 stakregs pshs x ;Stack something where the pc comes
323 E561: 347F pshs cc,b,a,dp,x,y,u ;Stack the normal registers.
324 E563: BE029B ldx oldpc
325 E566: AF6A stx 10,s ;Stack the old pc value.
326 E568: 2007 bra unlaunch1
327 E56A: * The G and P commands return here through a breakpoint.
328 E56A: * Registers are already stacked.
329 E56A: EC6A unlaunch ldd 10,s
330 E56C: 830001 subd #1
331 E56F: ED6A std 10,s ;Decrement pc before breakpoint
332 E571: 1C00 unlaunch1 andcc #$0 ;reenable the interrupts.
333 E573: BDE9C1 jsr disarm ;Disarm the breakpoints.
334 E576: BDE916 jsr dispregs
335 E579: 9D1E cmdline jsr xcloseout
336 E57B: 10FF02BD sts savesp
337 E57F: 8E0200 ldx #linebuf
338 E582: C680 ldb #buflen
339 E584: 9D06 jsr getline
340 E586: 5D tstb
341 E587: 27F0 beq cmdline ;Ignore line if it is empty
342 E589: 3A abx
343 E58A: 6F84 clr ,x ;Make location after line zero.
344 E58C: 8E0200 ldx #linebuf
345 E58F: E680 ldb ,x+
346 E591: C4DF andb #CASEMASK ;Make 1st char uppercase.
347 E593: C041 subb #'A'
348 E595: 253E bcs unk
349 E597: C11A cmpb #26
350 E599: 243A bcc unk ;Unknown cmd if it is not a letter.
351 E59B: 8EE5A1 ldx #cmdtab
352 E59E: 58 aslb ;Index into command table.
353 E59F: 6E95 jmp [b,x]
354 E5A1:
355 E5A1: FC02E9F7E5D5E784 cmdtab fdb asm,break,unk,dump
356 E5A9: E7DEEBA7E88BE857 fdb enter,find,go,hex
357 E5B1: E845E89AE5D5E5D5 fdb inp,jump,unk,unk
358 E5B9: EB6AE5D5E5D5E8B9 fdb move,unk,unk,prog
359 E5C1: E5D5E95DEA65E8C5 fdb unk,regs,srec,trace
360 E5C9: F6A2E5D5E5D5EE52 fdb unasm,unk,unk,xmodem
361 E5D1: E5D5E5D5 fdb unk,unk
362 E5D5:
363 E5D5: * Unknown command handling routine.
364 E5D5: 9D18 unk jsr xabortin
365 E5D7: 8EE5FF ldx #unknown
366 E5DA: BDE502 jsr outcount
367 E5DD: 9D0C jsr putcr
368 E5DF: 7EE579 jmp cmdline
369 E5E2:
370 E5E2:
371 E5E2:
372 E5E2: * Here are some useful messages.
373 E5E2: 1C welcome fcb unknown-welcome-1
374 E5E3: 57656C636F6D6520 fcc "Welcome to BUGGY version 1.0"
375 E5EC: 6F20425547475920
376 E5F4: 76657273696F6E20
377 E5FC: 312E30
378 E5FF: 0F unknown fcb brkmsg-unknown-1
379 E600: 556E6B6E6F776E20 fcc "Unknown command"
380 E609: 6F6D6D616E64
381 E60F: 0E brkmsg fcb clrmsg-brkmsg-1
382 E610: 427265616B706F69 fcc "Breakpoint set"
383 E619: 7420736574
384 E61E: 12 clrmsg fcb fullmsg-clrmsg-1
385 E61F: 427265616B706F69 fcc "Breakpoint cleared"
386 E628: 7420636C65617265
387 E630: 64
388 E631: 10 fullmsg fcb smsg-fullmsg-1
389 E632: 427265616B706F69 fcc "Breakpoints full"
390 E63B: 74732066756C6C
391 E642: 11 smsg fcb lastrec-smsg-1
392 E643: 4572726F7220696E fcc "Error in S record"
393 E64C: 53207265636F7264
394 E654: 0A lastrec fcb xsmsg-lastrec-1
395 E655: 5339303330303030 fcc "S9030000FC"
396 E65E: 43
397 E65F: 11 xsmsg fcb xrmsg-xsmsg-1
398 E660: 537461727420584D fcc "Start XMODEM Send"
399 E669: 44454D2053656E64
400 E671: 14 xrmsg fcb xamsg-xrmsg-1
401 E672: 537461727420584D fcc "Start XMODEM Receive"
402 E67B: 44454D2052656365
403 E683: 697665
404 E686: 17 xamsg fcb invmmsg-xamsg-1
405 E687: 584D4F44454D2074 fcc "XMODEM transfer aborted"
406 E690: 616E736665722061
407 E698: 626F72746564
408 E69E: 10 invmmsg fcb exprmsg-invmmsg-1
409 E69F: 496E76616C696420 fcc "Invalid mnemonic"
410 E6A8: 6E656D6F6E6963
411 E6AF: 10 exprmsg fcb modemsg-exprmsg-1
412 E6B0: 4578707265737369 fcc "Expression error"
413 E6B9: 6E206572726F72
414 E6C0: 15 modemsg fcb brmsg-modemsg-1
415 E6C1: 4164647265737369 fcc "Addressing mode error"
416 E6CA: 67206D6F64652065
417 E6D2: 72726F72
418 E6D6: 0F brmsg fcb endmsg-brmsg-1
419 E6D7: 4272616E63682074 fcc "Branch too long"
420 E6E0: 6F206C6F6E67
421 E6E6: endmsg equ *
422 E6E6:
423 E6E6: * Output hex digit contained in A
424 E6E6: 8B90 hexdigit adda #$90
425 E6E8: 19 daa
426 E6E9: 8940 adca #$40
427 E6EB: 19 daa ;It's the standard conversion trick ascii
428 E6EC: 1F89 tfr a,b ;to hex without branching.
429 E6EE: 9D03 jsr putchar
430 E6F0: 39 rts
431 E6F1:
432 E6F1: * Output contents of A as two hex digits
433 E6F1: 3402 outbyte pshs a
434 E6F3: 44 lsra
435 E6F4: 44 lsra
436 E6F5: 44 lsra
437 E6F6: 44 lsra
438 E6F7: 8DED bsr hexdigit
439 E6F9: 3502 puls a
440 E6FB: 840F anda #$0f
441 E6FD: 20E7 bra hexdigit
442 E6FF:
443 E6FF: * Output contents of d as four hex digits
444 E6FF: 3404 outd pshs b
445 E701: 8DEE bsr outbyte
446 E703: 3502 puls a
447 E705: 8DEA bsr outbyte
448 E707: 39 rts
449 E708:
450 E708: * Skip X past spaces, B is first non-space character.
451 E708: E680 skipspace ldb ,x+
452 E70A: C120 cmpb #' '
453 E70C: 27FA beq skipspace
454 E70E: 39 rts
455 E70F:
456 E70F: * Convert ascii hex digit in B register to binary Z flag set if no hex digit.
457 E70F: C030 convb subb #'0'
458 E711: 2513 blo convexit
459 E713: C109 cmpb #9
460 E715: 230C bls cb2
461 E717: C4DF andb #CASEMASK ;Make uppercase.
462 E719: C007 subb #7 ;If higher than digit 9 it must be a letter.
463 E71B: C109 cmpb #9
464 E71D: 2307 bls convexit
465 E71F: C10F cmpb #15
466 E721: 2203 bhi convexit
467 E723: 1CFB cb2 andcc #$FB ;clear zero
468 E725: 39 rts
469 E726: 1A04 convexit orcc #$04
470 E728: 39 rts
471 E729:
472 E729: DC24 scanexit ldd temp
473 E72B: 301F leax -1,x
474 E72D: 0D26 tst temp2
475 E72F: 39 rts ;<-- exit point of scanhex
476 E730:
477 E730: * Scan for hexadecimal number at address X return in D, Z flag is set it no
478 E730: * number found.
479 E730: 0F24 scanhex clr temp
480 E732: 0F25 clr temp+1
481 E734: 0F26 clr temp2
482 E736: 8DD0 bsr skipspace
483 E738: BDE70F scloop jsr convb
484 E73B: 27EC beq scanexit
485 E73D: 3404 pshs b
486 E73F: DC24 ldd temp
487 E741: 58 aslb
488 E742: 49 rola
489 E743: 58 aslb
490 E744: 49 rola
491 E745: 58 aslb
492 E746: 49 rola
493 E747: 58 aslb
494 E748: 49 rola
495 E749: EBE0 addb ,s+
496 E74B: DD24 std temp
497 E74D: 0C26 inc temp2
498 E74F: E680 ldb ,x+
499 E751: 20E5 bra scloop
500 E753:
501 E753: FD029F scan2parms std length
502 E756: 8DD8 bsr scanhex
503 E758: 2710 beq sp2
504 E75A: FD029D std addr
505 E75D: 8DA9 bsr skipspace
506 E75F: C12C cmpb #','
507 E761: 2607 bne sp2
508 E763: 8DCB bsr scanhex
509 E765: 2703 beq sp2
510 E767: FD029F std length
511 E76A: 39 sp2 rts
512 E76B:
513 E76B: * Scan two hexdigits at in and convert to byte into A, Z flag if error.
514 E76B: 8D9B scanbyte bsr skipspace
515 E76D: 8DA0 bsr convb
516 E76F: 2712 beq sb1
517 E771: 1F98 tfr b,a
518 E773: E680 ldb ,x+
519 E775: 8D98 bsr convb
520 E777: 270A beq sb1
521 E779: 48 asla
522 E77A: 48 asla
523 E77B: 48 asla
524 E77C: 48 asla
525 E77D: D724 stb temp
526 E77F: 9B24 adda temp
527 E781: 1CFB andcc #$fb ;Clear zero flag
528 E783: 39 sb1 rts
529 E784:
530 E784:
531 E784: * This is the code for the D command, hex/ascii dump of memory
532 E784: * Syntax: D or D<addr> or D<addr>,<length>
533 E784: 8E0201 dump ldx #linebuf+1
534 E787: CC0040 ldd #$40
535 E78A: BDE753 jsr scan2parms ;Scan address and length, default length=64
536 E78D: 10BE029D ldy addr
537 E791: 8610 dh1 lda #16
538 E793: 9725 sta temp+1
539 E795: 1F20 tfr y,d
540 E797: BDE6FF jsr outd
541 E79A: C620 ldb #' '
542 E79C: 9D03 jsr putchar
543 E79E: A6A0 dh2 lda ,y+ ;display row of 16 mem locations as hex
544 E7A0: BDE6F1 jsr outbyte
545 E7A3: C620 ldb #' '
546 E7A5: 9625 lda temp+1
547 E7A7: 8109 cmpa #9
548 E7A9: 2602 bne dh6
549 E7AB: C62D ldb #'-' ;Do a - after the eighth byte.
550 E7AD: 9D03 dh6 jsr putchar
551 E7AF: 0A25 dec temp+1
552 E7B1: 26EB bne dh2
553 E7B3: 3130 leay -16,y ;And now for the ascii dump.
554 E7B5: 8610 lda #16
555 E7B7: E6A0 dh3 ldb ,y+
556 E7B9: C120 cmpb #' '
557 E7BB: 2402 bhs dh4
558 E7BD: C62E ldb #'.'
559 E7BF: C17F dh4 cmpb #DEL
560 E7C1: 2502 blo dh5
561 E7C3: C62E ldb #'.' ;Convert all nonprintables to .
562 E7C5: 9D03 dh5 jsr putchar
563 E7C7: 4A deca
564 E7C8: 26ED bne dh3
565 E7CA: 9D0C jsr putcr
566 E7CC: FC029F ldd length
567 E7CF: 830010 subd #16
568 E7D2: FD029F std length
569 E7D5: 22BA bhi dh1
570 E7D7: 10BF029D sty addr
571 E7DB: 7EE579 jmp cmdline
572 E7DE:
573 E7DE: * This is the code for the E command, enter hex bytes or ascii string.
574 E7DE: * Syntax E or E<addr> or E<addr> <bytes> or E<addr>"string"
575 E7DE: 8E0201 enter ldx #linebuf+1
576 E7E1: BDE730 jsr scanhex
577 E7E4: 2703 beq ent1
578 E7E6: FD029D std addr
579 E7E9: 8D26 ent1 bsr entline
580 E7EB: 1026FD8A lbne cmdline ;No bytes, then enter interactively.
581 E7EF: C645 ent2 ldb #'E'
582 E7F1: 9D03 jsr putchar
583 E7F3: FC029D ldd addr
584 E7F6: BDE6FF jsr outd
585 E7F9: C620 ldb #' '
586 E7FB: 9D03 jsr putchar ;Display Eaddr + space
587 E7FD: 8E0200 ldx #linebuf
588 E800: C680 ldb #buflen
589 E802: 9D06 jsr getline ;Get the line.
590 E804: 3A abx
591 E805: 6F84 clr ,x
592 E807: 8E0200 ldx #linebuf
593 E80A: 8D05 bsr entline
594 E80C: 26E1 bne ent2
595 E80E: 7EE579 jmp cmdline
596 E811:
597 E811: * Enter a line of hex bytes or ascci string at address X, Z if empty.
598 E811: BDE708 entline jsr skipspace
599 E814: 5D tstb
600 E815: 272B beq entexit
601 E817: C122 cmpb #'"'
602 E819: 270F beq entasc
603 E81B: 301F leax -1,x
604 E81D: 10BE029D ldy addr
605 E821: BDE76B entl2 jsr scanbyte ;Enter hex digits.
606 E824: 2715 beq entdone
607 E826: A7A0 sta ,y+
608 E828: 20F7 bra entl2
609 E82A: 10BE029D entasc ldy addr
610 E82E: A680 entl3 lda ,x+
611 E830: 4D tsta
612 E831: 2708 beq entdone
613 E833: 8122 cmpa #'"'
614 E835: 2704 beq entdone
615 E837: A7A0 sta ,y+
616 E839: 20F3 bra entl3
617 E83B: 10BF029D entdone sty addr
618 E83F: 1CFB andcc #$fb
619 E841: 39 rts
620 E842: 1A04 entexit orcc #$04
621 E844: 39 rts
622 E845:
623 E845: *This is the code for the I command, display the contents of an address
624 E845: * Syntax: Iaddr
625 E845: 8E0201 inp ldx #linebuf+1
626 E848: BDE730 jsr scanhex
627 E84B: 1F01 tfr d,x
628 E84D: A684 lda ,x ;Read the byte from memory.
629 E84F: BDE6F1 jsr outbyte ;Display itin hex.
630 E852: 9D0C jsr putcr
631 E854: 7EE579 jmp cmdline
632 E857:
633 E857: *This is the code for the H command, display result of simple hex expression
634 E857: *Syntax Hhexnum{+|-hexnum}
635 E857: 8E0201 hex ldx #linebuf+1
636 E85A: BDE730 jsr scanhex
637 E85D: DD28 std temp3
638 E85F: BDE708 hexloop jsr skipspace
639 E862: C12B cmpb #'+'
640 E864: 2609 bne hex1
641 E866: BDE730 jsr scanhex
642 E869: D328 addd temp3
643 E86B: DD28 std temp3
644 E86D: 20F0 bra hexloop
645 E86F: C12D hex1 cmpb #'-'
646 E871: 260E bne hexend
647 E873: BDE730 jsr scanhex
648 E876: 53 comb
649 E877: 43 coma
650 E878: C30001 addd #1
651 E87B: D328 addd temp3
652 E87D: DD28 std temp3
653 E87F: 20DE bra hexloop
654 E881: DC28 hexend ldd temp3
655 E883: BDE6FF jsr outd
656 E886: 9D0C jsr putcr
657 E888: 7EE579 jmp cmdline
658 E88B:
659 E88B: * This is the code for the G command, jump to the program
660 E88B: * Syntax G or G<addr>
661 E88B: 8E0201 go ldx #linebuf+1
662 E88E: BDE730 jsr scanhex
663 E891: 2702 beq launch
664 E893: ED6A std 10,s ;Store parameter in pc location.
665 E895: BDE9DB launch jsr arm ;Arm the breakpoints.
666 E898: 35FF puls cc,b,a,dp,x,y,u,pc
667 E89A:
668 E89A: * This is the code for the J command, run a subroutine.
669 E89A: * Syntax J<addr>
670 E89A: 8E0201 jump ldx #linebuf+1
671 E89D: EC6A ldd 10,s
672 E89F: FD029B std oldpc ;Save old pc
673 E8A2: BDE730 jsr scanhex
674 E8A5: ED6A std 10,s ;Store parameter in PC location
675 E8A7: 1F41 tfr s,x
676 E8A9: 327E leas -2,s
677 E8AB: 1F43 tfr s,u
678 E8AD: C60C ldb #12 ;Move the saved register set 2 addresses
679 E8AF: BDE44A jsr blockmove ;down on the stack.
680 E8B2: CCE55F ldd #stakregs
681 E8B5: ED6C std 12,s ;Prepare subroutine return address.
682 E8B7: 20DC bra launch ;Jump to the routine.
683 E8B9:
684 E8B9:
685 E8B9: * This is the code for the P command, run instruction followed by breakpoint
686 E8B9: * Syntax P
687 E8B9: 10AE6A prog ldy 10,s ;Get program counter value.
688 E8BC: BDF3C9 jsr disdecode ;Find out location past current insn.
689 E8BF: 10BF02AD sty stepbp
690 E8C3: 20D0 bra launch
691 E8C5:
692 E8C5: * This is the code for the T command, single step trace an instruction.
693 E8C5: * Syntax T
694 E8C5: BDE8CE trace jsr traceone
695 E8C8: BDE916 jsr dispregs
696 E8CB: 7EE579 jmp cmdline
697 E8CE:
698 E8CE: 1A50 traceone orcc #$50 ;Disable the interrupts.
699 E8D0: ECE1 ldd ,s++
700 E8D2: FD029B std oldpc ;Remove saved pc from stack.
701 E8D5: CCE8EA ldd #traceret
702 E8D8: FD0287 std firqvec+1 ;Adjust timer IRQ vector.
703 E8DB: 13 sync ;Synchronize on the next timer interrupt.
704 E8DC: ;1 cycle
705 E8DC: 8E1159 ldx #4441 ;3 cycles
706 E8DF: 301F traceloop leax -1,x ;6 cycles\x4441= 39969 cycles.
707 E8E1: 26FC bne traceloop ;3 cycles/
708 E8E3: 12 nop ;2 cycles.
709 E8E4: 12 nop ;2 cycles.
710 E8E5: 12 nop ;2 cycles.
711 E8E6: 2102 brn traceret ;3 cycles.
712 E8E8: 35FF puls x,y,u,a,b,dp,cc,pc ;17 cycles, total=39999 20ms @ 2MHz
713 E8EA: ;Pull all registers and execute.
714 E8EA: ;Is timed such that next timer IRQ
715 E8EA: ;occurs right after it.
716 E8EA: 3501 traceret puls cc
717 E8EC: 347F pshs x,y,u,a,b,dp,cc;Store full register set instead of cc.
718 E8EE: CCE50B ldd #timerirq
719 E8F1: FD0287 std firqvec+1 ;Restore timer IRQ vector.
720 E8F4: 6E9F029B jmp [oldpc]
721 E8F8:
722 E8F8:
723 E8F8: * Display the contents of 8 bit register, name in B, contents in A
724 E8F8: 9D03 disp8 jsr putchar
725 E8FA: C63D ldb #'='
726 E8FC: 9D03 jsr putchar
727 E8FE: BDE6F1 jsr outbyte
728 E901: C620 ldb #' '
729 E903: 9D03 jsr putchar
730 E905: 39 rts
731 E906:
732 E906: * Display the contents of 16 bit register, name in B, contents in Y
733 E906: 9D03 disp16 jsr putchar
734 E908: C63D ldb #'='
735 E90A: 9D03 jsr putchar
736 E90C: 1F20 tfr y,d
737 E90E: BDE6FF jsr outd
738 E911: C620 ldb #' '
739 E913: 9D03 jsr putchar
740 E915: 39 rts
741 E916:
742 E916: * Display the contents of the registers and disassemble instruction at
743 E916: * PC location.
744 E916: C658 dispregs ldb #'X'
745 E918: 10AE66 ldy 6,s ;Note that there's one return address on
746 E91B: 8DE9 bsr disp16 ;stack so saved register offsets are
747 E91D: C659 ldb #'Y' ;inremented by 2.
748 E91F: 10AE68 ldy 8,s
749 E922: 8DE2 bsr disp16
750 E924: C655 ldb #'U'
751 E926: 10AE6A ldy 10,s
752 E929: 8DDB bsr disp16
753 E92B: C653 ldb #'S'
754 E92D: 1F42 tfr s,y
755 E92F: 312E leay 14,y ;S of the running program is 12 higher,
756 E931: ;because regs are not stacked when running.
757 E931: 8DD3 bsr disp16
758 E933: C641 ldb #'A'
759 E935: A663 lda 3,s
760 E937: 8DBF bsr disp8
761 E939: C642 ldb #'B'
762 E93B: A664 lda 4,s
763 E93D: 8DB9 bsr disp8
764 E93F: C644 ldb #'D'
765 E941: A665 lda 5,s
766 E943: 8DB3 bsr disp8
767 E945: C643 ldb #'C'
768 E947: A662 lda 2,s
769 E949: 8DAD bsr disp8
770 E94B: 9D0C jsr putcr
771 E94D: C650 ldb #'P'
772 E94F: 10AE6C ldy 12,s
773 E952: 8DB2 bsr disp16
774 E954: BDF3C9 jsr disdecode
775 E957: BDF4AC jsr disdisp ;Disassemble instruction at PC
776 E95A: 9D0C jsr putcr
777 E95C: 39 rts
778 E95D:
779 E95D:
780 E95D: * This is the code for the R command, display or alter the registers.
781 E95D: * Syntax R or R<letter><hex>
782 E95D: 8E0201 regs ldx #linebuf+1
783 E960: BDE708 jsr skipspace
784 E963: 5D tstb
785 E964: 2605 bne setreg
786 E966: 8DAE bsr dispregs ;Display regs ifnothing follows.
787 E968: 7EE579 jmp cmdline
788 E96B: 108EE9B7 setreg ldy #regtab
789 E96F: 4F clra
790 E970: C4DF andb #CASEMASK ;Make letter uppercase.
791 E972: 6DA4 sr1 tst ,y
792 E974: 1027FC5D lbeq unk ;At end of register tab, unknown reg
793 E978: E1A0 cmpb ,y+
794 E97A: 2703 beq sr2 ;Found the register?
795 E97C: 4C inca
796 E97D: 20F3 bra sr1
797 E97F: 3402 sr2 pshs a
798 E981: BDE730 jsr scanhex ;Convert the hex argument.
799 E984: 3406 pshs d
800 E986: A662 lda 2,s ;Get register number.
801 E988: 8104 cmpa #4
802 E98A: 2409 bcc sr3
803 E98C: E661 ldb 1,s ;It's 8 bit.
804 E98E: 3263 leas 3,s ;Remove temp stuff from stack.
805 E990: E7E6 stb a,s ;Store it in the reg on stack.
806 E992: 7EE579 jmp cmdline
807 E995: 8108 sr3 cmpa #8
808 E997: 240C bcc sr4
809 E999: 3510 puls x ;It's 16 bit.
810 E99B: 3261 leas 1,s
811 E99D: 48 lsla
812 E99E: 8004 suba #4 ;Convert reg no to stack offset.
813 E9A0: AFE6 stx a,s
814 E9A2: 7EE579 jmp cmdline
815 E9A5: 3540 sr4 puls u ;It's the stack pointer.
816 E9A7: 3261 leas 1,s
817 E9A9: 3354 leau -12,u
818 E9AB: 1F41 tfr s,x
819 E9AD: 1F34 tfr u,s ;Set new stack pointer.
820 E9AF: C60C ldb #12
821 E9B1: BDE44A jsr blockmove ;Move register set to new stack location.
822 E9B4: 7EE579 jmp cmdline
823 E9B7:
824 E9B7: 4341424458595550 regtab FCC "CABDXYUPS "
825 E9C0: 20
826 E9C1:
827 E9C1: * Disarm the breakpoints, this is replace the SWI instructions with the
828 E9C1: * original byte.
829 E9C1: 8E02A1 disarm ldx #bpaddr
830 E9C4: 8605 lda #brkpoints+1
831 E9C6: EE81 disarm1 ldu ,x++
832 E9C8: E680 ldb ,x+ ;Get address in u, byte in b
833 E9CA: 11830000 cmpu #0
834 E9CE: 2702 beq disarm2
835 E9D0: E7C4 stb ,u
836 E9D2: 4A disarm2 deca
837 E9D3: 26F1 bne disarm1
838 E9D5: CE0000 ldu #0
839 E9D8: EF1D stu -3,x ;Clear the step breakpoint.
840 E9DA: 39 rts
841 E9DB:
842 E9DB: * Arm the breakponts, this is replace the byte at the breakpoint address
843 E9DB: * with an SWI instruction.
844 E9DB: 8E02AD arm ldx #bpaddr+brkpoints*3
845 E9DE: 8605 lda #brkpoints+1 ;Arm them in reverse order of disarming.
846 E9E0: EE84 arm1 ldu ,x ;Get address in u.
847 E9E2: 270D beq arm2
848 E9E4: E6C4 ldb ,u
849 E9E6: E702 stb 2,x
850 E9E8: 11A36C cmpu 12,s ;Compare to program counter location
851 E9EB: 2704 beq arm2
852 E9ED: C63F ldb #$3F
853 E9EF: E7C4 stb ,u ;Store SWI instruction if not equal.
854 E9F1: 301D arm2 leax -3,x
855 E9F3: 4A deca
856 E9F4: 26EA bne arm1
857 E9F6: 39 rts
858 E9F7:
859 E9F7: * This is the code for the break command, set, clear display breakpoints.
860 E9F7: * Syntax B or B<addr>. B displays, B<addr> sets or clears breakpoint.
861 E9F7: 8604 break lda #brkpoints
862 E9F9: 9727 sta temp2+1 ;Store number of breakpoints to visit.
863 E9FB: 8E0201 ldx #linebuf+1
864 E9FE: BDE730 jsr scanhex
865 EA01: 273B beq dispbp ;No number then display breakpoints
866 EA03: 8E02A1 ldx #bpaddr
867 EA06: CE0000 ldu #0
868 EA09: 1F32 tfr u,y
869 EA0B: 10A384 bp1 cmpd ,x
870 EA0E: 2720 beq clearit ;Found the breakpoint, so clear it,
871 EA10: 11A384 cmpu ,x ;Is location zero
872 EA13: 2602 bne bp2
873 EA15: 1F12 tfr x,y ;Set free address to y
874 EA17: 3003 bp2 leax 3,x
875 EA19: 0A27 dec temp2+1
876 EA1B: 26EE bne bp1
877 EA1D: 108C0000 cmpy #0 ;Address not found in list of breakpoints
878 EA21: 2716 beq bpfull ;Was free address found.
879 EA23: EDA4 std ,y ;If so, store breakpoint there.
880 EA25: 8EE60F ldx #brkmsg
881 EA28: BDE502 bpexit jsr outcount
882 EA2B: 9D0C jsr putcr
883 EA2D: 7EE579 jmp cmdline
884 EA30: 4F clearit clra
885 EA31: 5F clrb
886 EA32: ED84 std ,x
887 EA34: 8EE61E ldx #clrmsg
888 EA37: 20EF bra bpexit
889 EA39: 8EE631 bpfull ldx #fullmsg
890 EA3C: 20EA bra bpexit
891 EA3E:
892 EA3E: 8E02A1 dispbp ldx #bpaddr
893 EA41: EC84 dbp1 ldd ,x
894 EA43: 2707 beq dbp2
895 EA45: BDE6FF jsr outd
896 EA48: C620 ldb #' '
897 EA4A: 9D03 jsr putchar
898 EA4C: 3003 dbp2 leax 3,x
899 EA4E: 0A27 dec temp2+1
900 EA50: 26EF bne dbp1
901 EA52: 9D0C jsr putcr
902 EA54: 7EE579 jmp cmdline
903 EA57:
904 EA57: * Scan hex byte into a and add it to check sum in temp2+1
905 EA57: BDE76B addchk jsr scanbyte
906 EA5A: 10270077 lbeq srecerr
907 EA5E: 1F89 tfr a,b
908 EA60: DB27 addb temp2+1
909 EA62: D727 stb temp2+1
910 EA64: 39 rts
911 EA65:
912 EA65: * This tis the code for the S command, the Motorola S records entry.
913 EA65: * Syntax SO<addr> or SS<addr>,<len> or S1<bytes> or S9<bytes>
914 EA65: 8E0201 srec ldx #linebuf+1
915 EA68: E680 ldb ,x+
916 EA6A: C4DF andb #CASEMASK
917 EA6C: C14F cmpb #'O'
918 EA6E: 2772 beq setsorg
919 EA70: C153 cmpb #'S'
920 EA72: 277C beq sendrec
921 EA74: E61F ldb -1,x
922 EA76: 0F28 clr temp3
923 EA78: C131 cmpb #'1'
924 EA7A: 2706 beq readrec
925 EA7C: C139 cmpb #'9'
926 EA7E: 2655 bne srecerr
927 EA80: 0C28 inc temp3
928 EA82: 0F27 readrec clr temp2+1 ;clear checksum.
929 EA84: 8DD1 bsr addchk
930 EA86: 8002 suba #2 ;discount the address bytes from the count.
931 EA88: 9729 sta temp3+1 ;Read length byte.
932 EA8A: 8DCB bsr addchk
933 EA8C: 3402 pshs a
934 EA8E: 8DC7 bsr addchk
935 EA90: 3504 puls b
936 EA92: 1E89 exg a,b ;Read address into d.
937 EA94: FE02B0 ldu sorg
938 EA97: 270F beq rr1
939 EA99: FE02B2 ldu soffs
940 EA9C: 260A bne rr1
941 EA9E: 3406 pshs d ;Sorg is nonzero and soffs is zero, now
942 EAA0: B302B0 subd sorg ;set soffs
943 EAA3: FD02B2 std soffs
944 EAA6: 3506 puls d
945 EAA8: B302B2 rr1 subd soffs ;Subtract the address offset.
946 EAAB: 1F02 tfr d,y
947 EAAD: 8DA8 rr2 bsr addchk
948 EAAF: 0A29 dec temp3+1
949 EAB1: 2704 beq endrec
950 EAB3: A7A0 sta ,y+
951 EAB5: 20F6 bra rr2
952 EAB7: 0C27 endrec inc temp2+1 ;Check checksum.
953 EAB9: 261A bne srecerr
954 EABB: 0D28 tst temp3
955 EABD: 1027FAB8 lbeq cmdline ;Was it no S9 record?
956 EAC1: 108C0000 cmpy #0
957 EAC5: 2703 beq endrec1
958 EAC7: 10AF6A sty 10,s ;Store address into program counter.
959 EACA: 4F endrec1 clra
960 EACB: 5F clrb
961 EACC: FD02B0 std sorg ;Reset sorg, next S loads will be normal.
962 EACF: FD02B2 std soffs
963 EAD2: 7EE579 jmp cmdline
964 EAD5: 9D18 srecerr jsr xabortin
965 EAD7: 8EE642 ldx #smsg ;Error in srecord, display message.
966 EADA: BDE502 jsr outcount
967 EADD: 9D0C jsr putcr
968 EADF: 7EE579 jmp cmdline
969 EAE2: BDE730 setsorg jsr scanhex ;Set S record origin.
970 EAE5: FD02B0 std sorg
971 EAE8: 4F clra
972 EAE9: 5F clrb
973 EAEA: FD02B2 std soffs
974 EAED: 7EE579 jmp cmdline
975 EAF0: * Send a memory region as S-records.
976 EAF0: CC0100 sendrec ldd #$100 ;Scan address and length parameter.
977 EAF3: BDE753 jsr scan2parms
978 EAF6: FC02B0 ldd sorg
979 EAF9: 2709 beq ss1
980 EAFB: FC029D ldd addr
981 EAFE: B302B0 subd sorg
982 EB01: FD02B2 std soffs ;Compute offset for origin.
983 EB04: FC029F ss1 ldd length
984 EB07: 2748 beq endss ;All bytes sent?
985 EB09: 10830010 cmpd #16
986 EB0D: 2502 blo ss2
987 EB0F: C610 ldb #16 ;If more than 16 left, then send 16.
988 EB11: D724 ss2 stb temp
989 EB13: 50 negb
990 EB14: FE029F ldu length
991 EB17: 33C5 leau b,u
992 EB19: FF029F stu length ;Discount line length from length.
993 EB1C: C653 ldb #'S'
994 EB1E: 9D03 jsr putchar
995 EB20: C631 ldb #'1'
996 EB22: 9D03 jsr putchar
997 EB24: 0F25 clr temp+1 ;Clear check sum
998 EB26: D624 ldb temp
999 EB28: CB03 addb #3
1000 EB2A: 8D30 bsr checkout ;Output byte b as hex and add to check sum.
1001 EB2C: FC029D ldd addr
1002 EB2F: 1F02 tfr d,y
1003 EB31: B302B2 subd soffs
1004 EB34: 1E89 exg a,b
1005 EB36: 8D24 bsr checkout
1006 EB38: 1E89 exg a,b
1007 EB3A: 8D20 bsr checkout ;Output address (add into check sum)
1008 EB3C: E6A0 ss3 ldb ,y+
1009 EB3E: 8D1C bsr checkout
1010 EB40: 0A24 dec temp
1011 EB42: 26F8 bne ss3
1012 EB44: 10BF029D sty addr
1013 EB48: D625 ldb temp+1
1014 EB4A: 53 comb
1015 EB4B: 8D0F bsr checkout ;Output checksum byte.
1016 EB4D: 9D0C jsr putcr
1017 EB4F: 20B3 bra ss1
1018 EB51: 8EE654 endss ldx #lastrec
1019 EB54: BDE502 jsr outcount
1020 EB57: 9D0C jsr putcr
1021 EB59: 7EE579 jmp cmdline
1022 EB5C: * Output byte in register B and add it into check sum at temp+1
1023 EB5C: 3402 checkout pshs a
1024 EB5E: 1F98 tfr b,a
1025 EB60: DB25 addb temp+1
1026 EB62: D725 stb temp+1
1027 EB64: BDE6F1 jsr outbyte
1028 EB67: 3502 puls a
1029 EB69: 39 rts
1030 EB6A:
1031 EB6A: * This is the code for the M command, move memory region.
1032 EB6A: * Syntax: Maddr1,addr2,length
1033 EB6A: 8E0201 move ldx #linebuf+1
1034 EB6D: BDE730 jsr scanhex
1035 EB70: 1027FA61 lbeq unk
1036 EB74: DD28 std temp3
1037 EB76: BDE708 jsr skipspace
1038 EB79: C12C cmpb #','
1039 EB7B: 1026FA56 lbne unk
1040 EB7F: BDE730 jsr scanhex
1041 EB82: 1027FA4F lbeq unk
1042 EB86: 1F03 tfr d,u
1043 EB88: BDE708 jsr skipspace
1044 EB8B: C12C cmpb #','
1045 EB8D: 1026FA44 lbne unk
1046 EB91: BDE730 jsr scanhex
1047 EB94: 1027FA3D lbeq unk
1048 EB98: 1F02 tfr d,y ;Read the argument separated by commas
1049 EB9A: 9E28 ldx temp3 ;src addr to x, dest addr to u, length to y
1050 EB9C: ;Don't tolerate syntax deviations.
1051 EB9C: A680 mvloop lda ,x+
1052 EB9E: A7C0 sta ,u+
1053 EBA0: 313F leay -1,y
1054 EBA2: 26F8 bne mvloop ;Perform the block move.
1055 EBA4: 7EE579 jmp cmdline
1056 EBA7:
1057 EBA7:
1058 EBA7: * This is the code for the F command, find byte/ascii string in memory.
1059 EBA7: * Syntax: Faddr bytes or Faddr "ascii"
1060 EBA7: 8E0201 find ldx #linebuf+1
1061 EBAA: BDE730 jsr scanhex
1062 EBAD: 1F02 tfr d,y ;Scan the start address.
1063 EBAF: BDE708 jsr skipspace
1064 EBB2: C122 cmpb #'"'
1065 EBB4: 2611 bne findhex
1066 EBB6: CE0200 ldu #linebuf ;Quote found, so scan for quoted string.
1067 EBB9: 4F clra
1068 EBBA: E680 fstrloop ldb ,x+
1069 EBBC: 271F beq startsrch ;End of line without final quote.
1070 EBBE: C122 cmpb #'"'
1071 EBC0: 271B beq startsrch ;End quote found
1072 EBC2: E7C0 stb ,u+
1073 EBC4: 4C inca
1074 EBC5: 20F3 bra fstrloop
1075 EBC7: CE0200 findhex ldu #linebuf ;Convert string of hex bytes.
1076 EBCA: 301F leax -1,x ;String will be stored at start of line
1077 EBCC: 4F clra ;buffer and may overwrite part of the
1078 EBCD: 3402 fhexloop pshs a ;already converted string.
1079 EBCF: BDE76B jsr scanbyte
1080 EBD2: 1F89 tfr a,b
1081 EBD4: 3502 puls a
1082 EBD6: 2705 beq startsrch
1083 EBD8: E7C0 stb ,u+
1084 EBDA: 4C inca
1085 EBDB: 20F0 bra fhexloop
1086 EBDD: 4D startsrch tsta ;Start searching, start addr in Y,
1087 EBDE: ;string starts at linebuf, length A
1088 EBDE: 1027F997 lbeq cmdline ;Quit with zero length string.
1089 EBE2: 0F28 clr temp3
1090 EBE4: 9729 sta temp3+1
1091 EBE6: 1F21 srchloop tfr y,x
1092 EBE8: 9629 lda temp3+1
1093 EBEA: 8CE100 cmpx #$e100
1094 EBED: 2409 bcc srch1
1095 EBEF: 3086 leax a,x
1096 EBF1: 8CE000 cmpx #$e000 ;Stop at I/O addresses.
1097 EBF4: 1024F981 lbcc cmdline
1098 EBF8: 1F21 srch1 tfr y,x
1099 EBFA: CE0200 ldu #linebuf
1100 EBFD: E680 srch2 ldb ,x+
1101 EBFF: E1C0 cmpb ,u+
1102 EC01: 2614 bne srch3 ;Not equal, try next address.
1103 EC03: 4A deca
1104 EC04: 26F7 bne srch2
1105 EC06: 1F20 tfr y,d
1106 EC08: BDE6FF jsr outd ;String found
1107 EC0B: 9D0C jsr putcr
1108 EC0D: 0C28 inc temp3
1109 EC0F: 9628 lda temp3
1110 EC11: 8110 cmpa #$10
1111 EC13: 1027F962 lbeq cmdline ;If 10 matches found, just stop.
1112 EC17: 3121 srch3 leay 1,y
1113 EC19: 20CB bra srchloop
1114 EC1B:
1115 EC1B: * Send the contents of the xmodem buffer and get it acknowledged, zero flag
1116 EC1B: * is set if transfer aborted.
1117 EC1B: C601 xsendbuf ldb #SOH
1118 EC1D: BDE471 jsr osputc ;Send SOH
1119 EC20: D62D ldb xpacknum
1120 EC22: BDE471 jsr osputc ;Send block number.
1121 EC25: 53 comb
1122 EC26: BDE471 jsr osputc ;and its complement.
1123 EC29: 0F2E clr xsum
1124 EC2B: 8680 lda #128
1125 EC2D: 8E0100 ldx #buf0
1126 EC30: E684 xsloop ldb ,x
1127 EC32: DB2E addb xsum
1128 EC34: D72E stb xsum
1129 EC36: E680 ldb ,x+
1130 EC38: BDE471 jsr osputc
1131 EC3B: 4A deca
1132 EC3C: 26F2 bne xsloop ;Send the buffer contents.
1133 EC3E: D62E ldb xsum
1134 EC40: BDE471 jsr osputc ;Send the check sum
1135 EC43: BDE45A waitack jsr osgetc
1136 EC46: C118 cmpb #CAN
1137 EC48: 270C beq xsabt ;^X for abort.
1138 EC4A: C115 cmpb #NAK
1139 EC4C: 27CD beq xsendbuf ;Send again if NAK
1140 EC4E: C106 cmpb #ACK
1141 EC50: 26F1 bne waitack
1142 EC52: 0C2D inc xpacknum
1143 EC54: 1CFB xsok andcc #$fb ;Clear zero flag after ACK
1144 EC56: 39 xsabt rts
1145 EC57:
1146 EC57: * Start an XMODEM send session.
1147 EC57: C601 xsendinit ldb #1
1148 EC59: D72D stb xpacknum ;Initialize block number.
1149 EC5B: BDE45A waitnak jsr osgetc
1150 EC5E: C118 cmpb #CAN
1151 EC60: 27F4 beq xsabt ;If ^X exit with zero flag.
1152 EC62: C115 cmpb #NAK
1153 EC64: 27EE beq xsok
1154 EC66: 20F3 bra waitnak ;Wait until NAK received.
1155 EC68:
1156 EC68: * Send ETX and wait for ack.
1157 EC68: C604 xsendeot ldb #EOT
1158 EC6A: BDE471 jsr osputc
1159 EC6D: BDE45A waitack2 jsr osgetc
1160 EC70: C118 cmpb #CAN
1161 EC72: 27E2 beq xsabt
1162 EC74: C115 cmpb #NAK
1163 EC76: 27F0 beq xsendeot
1164 EC78: C106 cmpb #ACK
1165 EC7A: 27D8 beq xsok
1166 EC7C: 20EF bra waitack2
1167 EC7E:
1168 EC7E: * Read character into B with a timeout of A seconds, Carry set if timeout.
1169 EC7E: 48 gettimeout asla
1170 EC7F: C632 ldb #50
1171 EC81: 3D mul
1172 EC82: 1F98 tfr b,a
1173 EC84: 9B2C adda timer+2
1174 EC86: BDE465 gt1 jsr osgetpoll
1175 EC89: 5D tstb
1176 EC8A: 2607 bne gtexit
1177 EC8C: 912C cmpa timer+2
1178 EC8E: 26F6 bne gt1
1179 EC90: 1A01 orcc #$1
1180 EC92: 39 rts
1181 EC93: BDE45A gtexit jsr osgetc
1182 EC96: 1CFE andcc #$fe
1183 EC98: 39 rts
1184 EC99:
1185 EC99: * Wait until line becomes quiet.
1186 EC99: 8603 purge lda #3
1187 EC9B: BDEC7E jsr gettimeout
1188 EC9E: 24F9 bcc purge
1189 ECA0: 39 rts
1190 ECA1:
1191 ECA1: * Receive an XMODEM block and wait till it is OK, Z set if etx.
1192 ECA1: 8603 xrcvbuf lda #3
1193 ECA3: 0D2F tst lastok
1194 ECA5: 2709 beq sendnak
1195 ECA7: C606 ldb #ACK
1196 ECA9: BDE471 jsr osputc ;Send an ack.
1197 ECAC: 8605 lda #5
1198 ECAE: 2005 bra startblock
1199 ECB0: C615 sendnak ldb #NAK
1200 ECB2: BDE471 jsr osputc ;Send a NAK
1201 ECB5: 0F2F startblock clr lastok
1202 ECB7: 8DC5 bsr gettimeout
1203 ECB9: 8603 lda #3
1204 ECBB: 25F3 bcs sendnak ;Keep sending NAKs when timed out.
1205 ECBD: C104 cmpb #EOT
1206 ECBF: 2752 beq xrcveot ;End of file reached, acknowledge EOT.
1207 ECC1: C101 cmpb #SOH
1208 ECC3: 2649 bne purgeit ;Not, SOH, bad block.
1209 ECC5: 8601 lda #1
1210 ECC7: 8DB5 bsr gettimeout
1211 ECC9: 2543 bcs purgeit
1212 ECCB: D12D cmpb xpacknum ;Is it the right block?
1213 ECCD: 2707 beq xr1
1214 ECCF: 5C incb
1215 ECD0: D12D cmpb xpacknum ;Was it the previous block.
1216 ECD2: 263A bne purgeit
1217 ECD4: 0C2F inc lastok
1218 ECD6: D72E xr1 stb xsum
1219 ECD8: 8601 lda #1
1220 ECDA: 8DA2 bsr gettimeout
1221 ECDC: 2530 bcs purgeit
1222 ECDE: 53 comb
1223 ECDF: D12E cmpb xsum ;Is the complement of the block number OK
1224 ECE1: 262B bne purgeit
1225 ECE3: 8E0100 ldx #buf0
1226 ECE6: 0F2E clr xsum
1227 ECE8: 8601 xrloop lda #1
1228 ECEA: 8D92 bsr gettimeout
1229 ECEC: 2520 bcs purgeit
1230 ECEE: E780 stb ,x+
1231 ECF0: DB2E addb xsum
1232 ECF2: D72E stb xsum
1233 ECF4: 8C0180 cmpx #buf0+128
1234 ECF7: 26EF bne xrloop ;Get the data bytes.
1235 ECF9: 8601 lda #1
1236 ECFB: 8D81 bsr gettimeout
1237 ECFD: 250F bcs purgeit
1238 ECFF: D12E cmpb xsum
1239 ED01: 260B bne purgeit ;Check the check sum.
1240 ED03: 0D2F tst lastok
1241 ED05: 269A bne xrcvbuf ;Block was the previous block, get next one
1242 ED07: 0C2F inc lastok
1243 ED09: 0C2D inc xpacknum
1244 ED0B: 1CFB andcc #$fb
1245 ED0D: 39 rts
1246 ED0E: BDEC99 purgeit jsr purge
1247 ED11: 209D bra sendnak
1248 ED13: 8603 xrcveot lda #3 ;EOT was received.
1249 ED15: C606 ldb #ACK
1250 ED17: BDE471 ackloop jsr osputc
1251 ED1A: 4A deca
1252 ED1B: 26FA bne ackloop ;Send 3 acks in a row.
1253 ED1D: 39 rts
1254 ED1E:
1255 ED1E:
1256 ED1E: 9E01 savevecs ldx getchar+1
1257 ED20: BF02B4 stx oldgetc
1258 ED23: 9E04 ldx putchar+1
1259 ED25: BF02B6 stx oldputc
1260 ED28: 9E0D ldx putcr+1
1261 ED2A: BF02B8 stx oldputcr
1262 ED2D: 7F02BA clr lastterm
1263 ED30: 39 rts
1264 ED31:
1265 ED31: BE02B4 rstvecs ldx oldgetc
1266 ED34: 9F01 stx getchar+1
1267 ED36: BE02B6 ldx oldputc
1268 ED39: 9F04 stx putchar+1
1269 ED3B: BE02B8 ldx oldputcr
1270 ED3E: 9F0D stx putcr+1
1271 ED40: 7F02BA clr lastterm
1272 ED43: 39 rts
1273 ED44:
1274 ED44: * O.S. routine to open input through XMODEM transfer.
1275 ED44: 3416 xopin pshs x,a,b
1276 ED46: 8EE65F ldx #xsmsg
1277 ED49: BDE502 jsr outcount
1278 ED4C: 9D0C jsr putcr ;Display message to start XMODEM send.
1279 ED4E: 8DCE bsr savevecs
1280 ED50: 8EF492 ldx #noop
1281 ED53: 9F04 stx putchar+1 ;Disable character output.
1282 ED55: 8EEE12 ldx #xgetc
1283 ED58: 9F01 stx getchar+1 ;
1284 ED5A: 0F2F clr lastok
1285 ED5C: 0F30 clr xcount
1286 ED5E: 8601 lda #1
1287 ED60: 972D sta xpacknum
1288 ED62: 4C inca
1289 ED63: 9731 sta xmode ;set xmode to 2.
1290 ED65: 3596 puls x,a,b,pc
1291 ED67:
1292 ED67: * O.S. routine to open output through XMODEM transfer.
1293 ED67: 3416 xopout pshs x,a,b
1294 ED69: 8DB3 bsr savevecs
1295 ED6B: 8EE671 ldx #xrmsg
1296 ED6E: BDE502 jsr outcount ;Display message to start XMODEM receive
1297 ED71: 9D0C jsr putcr
1298 ED73: 8EEDD9 ldx #xputc
1299 ED76: 9F04 stx putchar+1
1300 ED78: 8EEDF7 ldx #xputcr
1301 ED7B: 9F0D stx putcr+1
1302 ED7D: BDEC57 jsr xsendinit
1303 ED80: 102700B7 lbeq xerror
1304 ED84: 0F30 clr xcount
1305 ED86: 8601 lda #1
1306 ED88: 9731 sta xmode
1307 ED8A: 3596 puls x,a,b,pc
1308 ED8C:
1309 ED8C:
1310 ED8C: * O.S. routine to abort input through XMODEM transfer.
1311 ED8C: 9631 xabtin lda xmode
1312 ED8E: 8102 cmpa #2
1313 ED90: 263C bne xclsend
1314 ED92: BDEC99 jsr purge
1315 ED95: C618 ldb #CAN
1316 ED97: 8608 lda #8
1317 ED99: BDE471 xabtloop jsr osputc
1318 ED9C: 4A deca
1319 ED9D: 26FA bne xabtloop ;Send 8 CAN characters to kill transfer.
1320 ED9F: 8D90 bsr rstvecs
1321 EDA1: 0F31 clr xmode
1322 EDA3: 8EE686 ldx #xamsg
1323 EDA6: BDE502 jsr outcount
1324 EDA9: 9D0C jsr putcr ;Send diagnostic message.
1325 EDAB: 39 rts
1326 EDAC:
1327 EDAC: * O.S. routine to close output through XMODEM transfer.
1328 EDAC: 9631 xclsout lda xmode
1329 EDAE: 8101 cmpa #1
1330 EDB0: 261C bne xclsend
1331 EDB2: 0D30 tst xcount
1332 EDB4: 270C beq xclsdone
1333 EDB6: 8680 lda #128
1334 EDB8: 9030 suba xcount
1335 EDBA: F602BB xclsloop ldb filler
1336 EDBD: 8D1A bsr xputc
1337 EDBF: 4A deca
1338 EDC0: 26F8 bne xclsloop ;Transfer filler chars to force block out.
1339 EDC2: BDEC68 xclsdone jsr xsendeot ;Send EOT
1340 EDC5: 10270072 lbeq xerror
1341 EDC9: BDED31 jsr rstvecs
1342 EDCC: 0F31 clr xmode
1343 EDCE: 39 xclsend rts
1344 EDCF:
1345 EDCF: * O.S. routine to close input through XMODEM, by gobbling up the remaining
1346 EDCF: * bytes.
1347 EDCF: D631 xclsin ldb xmode
1348 EDD1: C102 cmpb #2
1349 EDD3: 26F9 bne xclsend
1350 EDD5: 9D03 jsr putchar
1351 EDD7: 20F6 bra xclsin
1352 EDD9:
1353 EDD9: * putchar routine for XMODEM
1354 EDD9: 3416 xputc pshs x,a,b
1355 EDDB: 9630 lda xcount
1356 EDDD: 0C30 inc xcount
1357 EDDF: 8E0100 ldx #buf0
1358 EDE2: E786 stb a,x ;Store character in XMODEM buffer.
1359 EDE4: 817F cmpa #127
1360 EDE6: 260D bne xputc1 ;is buffer full?
1361 EDE8: 0F30 clr xcount
1362 EDEA: 3460 pshs y,u
1363 EDEC: BDEC1B jsr xsendbuf
1364 EDEF: 10270048 lbeq xerror
1365 EDF3: 3560 puls y,u
1366 EDF5: 3596 xputc1 puls x,a,b,pc
1367 EDF7:
1368 EDF7: * putcr routine for XMODEM
1369 EDF7: 3404 xputcr pshs b
1370 EDF9: F602BC ldb xmcr
1371 EDFC: C502 bitb #2
1372 EDFE: 2704 beq xputcr1
1373 EE00: C60D ldb #CR
1374 EE02: 8DD5 bsr xputc
1375 EE04: F602BC xputcr1 ldb xmcr
1376 EE07: C501 bitb #1
1377 EE09: 2704 beq xputcr2
1378 EE0B: C60A ldb #LF
1379 EE0D: 8DCA bsr xputc
1380 EE0F: 3504 xputcr2 puls b
1381 EE11: 39 rts
1382 EE12:
1383 EE12: * getchar routine for XMODEM
1384 EE12: 3412 xgetc pshs x,a
1385 EE14: 0D30 tst xcount ;No characters left?
1386 EE16: 260D bne xgetc1
1387 EE18: 3460 pshs y,u
1388 EE1A: BDECA1 jsr xrcvbuf ;Receive new block.
1389 EE1D: 3560 puls y,u
1390 EE1F: 2710 beq xgetcterm ;End of input?
1391 EE21: 8680 lda #128
1392 EE23: 9730 sta xcount
1393 EE25: 9630 xgetc1 lda xcount
1394 EE27: 40 nega
1395 EE28: 8E0180 ldx #buf0+128
1396 EE2B: E686 ldb a,x ;Get character from buffer
1397 EE2D: 0A30 dec xcount
1398 EE2F: 3592 puls x,a,pc
1399 EE31: BDED31 xgetcterm jsr rstvecs
1400 EE34: 0F31 clr xmode
1401 EE36: F602BB ldb filler
1402 EE39: 3592 puls x,a,pc
1403 EE3B:
1404 EE3B: BDED31 xerror jsr rstvecs ;Restore I/O vectors
1405 EE3E: 0F31 clr xmode
1406 EE40: 8EE686 ldx #xamsg
1407 EE43: BDE502 jsr outcount
1408 EE46: 9D0C jsr putcr
1409 EE48: 7E0292 jmp xerrvec
1410 EE4B:
1411 EE4B: 10FE02BD xerrhand lds savesp
1412 EE4F: 7EE579 jmp cmdline
1413 EE52:
1414 EE52: * This is the code for the X command, various XMODEM related commands.
1415 EE52: * Syntax: XSaddr,len XLaddr,len XX XOcrlf,filler, XSSaddr,len
1416 EE52: 8E0201 xmodem ldx #linebuf+1
1417 EE55: A680 lda ,x+
1418 EE57: 84DF anda #CASEMASK ;Convert to uppercase.
1419 EE59: 8158 cmpa #'X'
1420 EE5B: 274A beq xeq
1421 EE5D: 814C cmpa #'L'
1422 EE5F: 2733 beq xload
1423 EE61: 814F cmpa #'O'
1424 EE63: 2747 beq xopts
1425 EE65: 8153 cmpa #'S'
1426 EE67: 1026F76A lbne unk
1427 EE6B: A684 lda ,x
1428 EE6D: 84DF anda #CASEMASK
1429 EE6F: 8153 cmpa #'S'
1430 EE71: 271A beq xss
1431 EE73: CC0100 ldd #$100 ;XSaddr,len command.
1432 EE76: BDE753 jsr scan2parms ;Send binary through XMODEM
1433 EE79: 9D15 jsr xopenout
1434 EE7B: FE029D ldu addr
1435 EE7E: 10BE029F ldy length
1436 EE82: E6C0 xsbinloop ldb ,u+
1437 EE84: 9D03 jsr putchar
1438 EE86: 313F leay -1,y
1439 EE88: 26F8 bne xsbinloop ;Send all the bytes through XMODEM.
1440 EE8A: 7EE579 jmp cmdline
1441 EE8D: 3001 xss leax 1,x ;XSSaddr,len command.
1442 EE8F: 9D15 jsr xopenout ;Send Srecords through XMODEM
1443 EE91: 7EEAF0 jmp sendrec
1444 EE94: BDE730 xload jsr scanhex ;XLaddr command
1445 EE97: 1F02 tfr d,y ;Load binary through XMODEM
1446 EE99: 9D12 jsr xopenin
1447 EE9B: 9D00 xlodloop jsr getchar
1448 EE9D: 0D31 tst xmode ;File ended? then done
1449 EE9F: 1027F6D6 lbeq cmdline
1450 EEA3: E7A0 stb ,y+
1451 EEA5: 20F4 bra xlodloop
1452 EEA7: 9D12 xeq jsr xopenin ;XX command
1453 EEA9: 7EE579 jmp cmdline ;Execute commands received from XMODEM
1454 EEAC: CC001A xopts ldd #$1a
1455 EEAF: BDE753 jsr scan2parms
1456 EEB2: B6029E lda addr+1
1457 EEB5: B702BC sta xmcr
1458 EEB8: B602A0 lda length+1
1459 EEBB: B702BB sta filler
1460 EEBE: 7EE579 jmp cmdline
1461 EEC1:
1462 EEC1: * mnemonics table, ordered alphabetically.
1463 EEC1: * 5 bytes name, 1 byte category, 2 bytes opcode, 8 bytes total.
1464 EEC1: 4142582020 mnemtab fcc "ABX "
1465 EEC6: 00 fcb 0
1466 EEC7: 003A fdb $3a
1467 EEC9: 4144434120 fcc "ADCA "
1468 EECE: 07 fcb 7
1469 EECF: 0089 fdb $89
1470 EED1: 4144434220 fcc "ADCB "
1471 EED6: 07 fcb 7
1472 EED7: 00C9 fdb $c9
1473 EED9: 4144444120 fcc "ADDA "
1474 EEDE: 07 fcb 7
1475 EEDF: 008B fdb $8b
1476 EEE1: 4144444220 fcc "ADDB "
1477 EEE6: 07 fcb 7
1478 EEE7: 00CB fdb $cb
1479 EEE9: 4144444420 fcc "ADDD "
1480 EEEE: 08 fcb 8
1481 EEEF: 00C3 fdb $c3
1482 EEF1: 414E444120 fcc "ANDA "
1483 EEF6: 07 fcb 7
1484 EEF7: 0084 fdb $84
1485 EEF9: 414E444220 fcc "ANDB "
1486 EEFE: 07 fcb 7
1487 EEFF: 00C4 fdb $c4
1488 EF01: 414E444343 fcc "ANDCC"
1489 EF06: 02 fcb 2
1490 EF07: 001C fdb $1c
1491 EF09: 41534C2020 fcc "ASL "
1492 EF0E: 0A fcb 10
1493 EF0F: 0008 fdb $08
1494 EF11: 41534C4120 fcc "ASLA "
1495 EF16: 00 fcb 0
1496 EF17: 0048 fdb $48
1497 EF19: 41534C4220 fcc "ASLB "
1498 EF1E: 00 fcb 0
1499 EF1F: 0058 fdb $58
1500 EF21: 4153522020 fcc "ASR "
1501 EF26: 0A fcb 10
1502 EF27: 0007 fdb $07
1503 EF29: 4153524120 fcc "ASRA "
1504 EF2E: 00 fcb 0
1505 EF2F: 0047 fdb $47
1506 EF31: 4153524220 fcc "ASRB "
1507 EF36: 00 fcb 0
1508 EF37: 0057 fdb $57
1509 EF39: 4243432020 fcc "BCC "
1510 EF3E: 04 fcb 4
1511 EF3F: 0024 fdb $24
1512 EF41: 4243532020 fcc "BCS "
1513 EF46: 04 fcb 4
1514 EF47: 0025 fdb $25
1515 EF49: 4245512020 fcc "BEQ "
1516 EF4E: 04 fcb 4
1517 EF4F: 0027 fdb $27
1518 EF51: 4247452020 fcc "BGE "
1519 EF56: 04 fcb 4
1520 EF57: 002C fdb $2c
1521 EF59: 4247542020 fcc "BGT "
1522 EF5E: 04 fcb 4
1523 EF5F: 002E fdb $2e
1524 EF61: 4248492020 fcc "BHI "
1525 EF66: 04 fcb 4
1526 EF67: 0022 fdb $22
1527 EF69: 4248532020 fcc "BHS "
1528 EF6E: 04 fcb 4
1529 EF6F: 0024 fdb $24
1530 EF71: 4249544120 fcc "BITA "
1531 EF76: 07 fcb 7
1532 EF77: 0085 fdb $85
1533 EF79: 4249544220 fcc "BITB "
1534 EF7E: 07 fcb 7
1535 EF7F: 00C5 fdb $c5
1536 EF81: 424C452020 fcc "BLE "
1537 EF86: 04 fcb 4
1538 EF87: 002F fdb $2f
1539 EF89: 424C4F2020 fcc "BLO "
1540 EF8E: 04 fcb 4
1541 EF8F: 0025 fdb $25
1542 EF91: 424C532020 fcc "BLS "
1543 EF96: 04 fcb 4
1544 EF97: 0023 fdb $23
1545 EF99: 424C542020 fcc "BLT "
1546 EF9E: 04 fcb 4
1547 EF9F: 002D fdb $2d
1548 EFA1: 424D492020 fcc "BMI "
1549 EFA6: 04 fcb 4
1550 EFA7: 002B fdb $2b
1551 EFA9: 424E452020 fcc "BNE "
1552 EFAE: 04 fcb 4
1553 EFAF: 0026 fdb $26
1554 EFB1: 42504C2020 fcc "BPL "
1555 EFB6: 04 fcb 4
1556 EFB7: 002A fdb $2a
1557 EFB9: 4252412020 fcc "BRA "
1558 EFBE: 04 fcb 4
1559 EFBF: 0020 fdb $20
1560 EFC1: 42524E2020 fcc "BRN "
1561 EFC6: 04 fcb 4
1562 EFC7: 0021 fdb $21
1563 EFC9: 4253522020 mnembsr fcc "BSR "
1564 EFCE: 04 fcb 4
1565 EFCF: 008D fdb $8d
1566 EFD1: 4256432020 fcc "BVC "
1567 EFD6: 04 fcb 4
1568 EFD7: 0028 fdb $28
1569 EFD9: 4256532020 fcc "BVS "
1570 EFDE: 04 fcb 4
1571 EFDF: 0029 fdb $29
1572 EFE1: 434C522020 fcc "CLR "
1573 EFE6: 0A fcb 10
1574 EFE7: 000F fdb $0f
1575 EFE9: 434C524120 fcc "CLRA "
1576 EFEE: 00 fcb 0
1577 EFEF: 004F fdb $4f
1578 EFF1: 434C524220 fcc "CLRB "
1579 EFF6: 00 fcb 0
1580 EFF7: 005F fdb $5f
1581 EFF9: 434D504120 fcc "CMPA "
1582 EFFE: 07 fcb 7
1583 EFFF: 0081 fdb $81
1584 F001: 434D504220 fcc "CMPB "
1585 F006: 07 fcb 7
1586 F007: 00C1 fdb $c1
1587 F009: 434D504420 fcc "CMPD "
1588 F00E: 09 fcb 9
1589 F00F: 1083 fdb $1083
1590 F011: 434D505320 fcc "CMPS "
1591 F016: 09 fcb 9
1592 F017: 118C fdb $118c
1593 F019: 434D505520 fcc "CMPU "
1594 F01E: 09 fcb 9
1595 F01F: 1183 fdb $1183
1596 F021: 434D505820 fcc "CMPX "
1597 F026: 08 fcb 8
1598 F027: 008C fdb $8c
1599 F029: 434D505920 fcc "CMPY "
1600 F02E: 09 fcb 9
1601 F02F: 108C fdb $108c
1602 F031: 434F4D2020 fcc "COM "
1603 F036: 0A fcb 10
1604 F037: 0003 fdb $03
1605 F039: 434F4D4120 fcc "COMA "
1606 F03E: 00 fcb 0
1607 F03F: 0043 fdb $43
1608 F041: 434F4D4220 fcc "COMB "
1609 F046: 00 fcb 0
1610 F047: 0053 fdb $53
1611 F049: 4357414920 fcc "CWAI "
1612 F04E: 02 fcb 2
1613 F04F: 003C fdb $3c
1614 F051: 4441412020 fcc "DAA "
1615 F056: 00 fcb 0
1616 F057: 0019 fdb $19
1617 F059: 4445432020 fcc "DEC "
1618 F05E: 0A fcb 10
1619 F05F: 000A fdb $0a
1620 F061: 4445434120 fcc "DECA "
1621 F066: 00 fcb 0
1622 F067: 004A fdb $4a
1623 F069: 4445434220 fcc "DECB "
1624 F06E: 00 fcb 0
1625 F06F: 005A fdb $5a
1626 F071: 454F524120 fcc "EORA "
1627 F076: 07 fcb 7
1628 F077: 0088 fdb $88
1629 F079: 454F524220 fcc "EORB "
1630 F07E: 07 fcb 7
1631 F07F: 00C8 fdb $c8
1632 F081: 4551552020 fcc "EQU "
1633 F086: 0D fcb 13
1634 F087: 0005 fdb 5
1635 F089: 4558472020 fcc "EXG "
1636 F08E: 0B fcb 11
1637 F08F: 001E fdb $1e
1638 F091: 4643422020 mnemfcb fcc "FCB "
1639 F096: 0D fcb 13
1640 F097: 0007 fdb 7
1641 F099: 4643432020 fcc "FCC "
1642 F09E: 0D fcb 13
1643 F09F: 0008 fdb 8
1644 F0A1: 4644422020 fcc "FDB "
1645 F0A6: 0D fcb 13
1646 F0A7: 0009 fdb 9
1647 F0A9: 494E432020 fcc "INC "
1648 F0AE: 0A fcb 10
1649 F0AF: 000C fdb $0c
1650 F0B1: 494E434120 fcc "INCA "
1651 F0B6: 00 fcb 0
1652 F0B7: 004C fdb $4c
1653 F0B9: 494E434220 fcc "INCB "
1654 F0BE: 00 fcb 0
1655 F0BF: 005C fdb $5c
1656 F0C1: 4A4D502020 fcc "JMP "
1657 F0C6: 0A fcb 10
1658 F0C7: 000E fdb $0e
1659 F0C9: 4A53522020 mnemjsr fcc "JSR "
1660 F0CE: 08 fcb 8
1661 F0CF: 008D fdb $8d
1662 F0D1: 4C42434320 fcc "LBCC "
1663 F0D6: 05 fcb 5
1664 F0D7: 1024 fdb $1024
1665 F0D9: 4C42435320 fcc "LBCS "
1666 F0DE: 05 fcb 5
1667 F0DF: 1025 fdb $1025
1668 F0E1: 4C42455120 fcc "LBEQ "
1669 F0E6: 05 fcb 5
1670 F0E7: 1027 fdb $1027
1671 F0E9: 4C42474520 fcc "LBGE "
1672 F0EE: 05 fcb 5
1673 F0EF: 102C fdb $102c
1674 F0F1: 4C42475420 fcc "LBGT "
1675 F0F6: 05 fcb 5
1676 F0F7: 102E fdb $102e
1677 F0F9: 4C42484920 fcc "LBHI "
1678 F0FE: 05 fcb 5
1679 F0FF: 1022 fdb $1022
1680 F101: 4C42485320 fcc "LBHS "
1681 F106: 05 fcb 5
1682 F107: 1024 fdb $1024
1683 F109: 4C424C4520 fcc "LBLE "
1684 F10E: 05 fcb 5
1685 F10F: 102F fdb $102f
1686 F111: 4C424C4F20 fcc "LBLO "
1687 F116: 05 fcb 5
1688 F117: 1025 fdb $1025
1689 F119: 4C424C5320 fcc "LBLS "
1690 F11E: 05 fcb 5
1691 F11F: 1023 fdb $1023
1692 F121: 4C424C5420 fcc "LBLT "
1693 F126: 05 fcb 5
1694 F127: 102D fdb $102d
1695 F129: 4C424D4920 fcc "LBMI "
1696 F12E: 05 fcb 5
1697 F12F: 102B fdb $102b
1698 F131: 4C424E4520 fcc "LBNE "
1699 F136: 05 fcb 5
1700 F137: 1026 fdb $1026
1701 F139: 4C42504C20 fcc "LBPL "
1702 F13E: 05 fcb 5
1703 F13F: 102A fdb $102a
1704 F141: 4C42524120 fcc "LBRA "
1705 F146: 06 fcb 6
1706 F147: 0016 fdb $16
1707 F149: 4C42524E20 fcc "LBRN "
1708 F14E: 05 fcb 5
1709 F14F: 1021 fdb $1021
1710 F151: 4C42535220 fcc "LBSR "
1711 F156: 06 fcb 6
1712 F157: 0017 fdb $17
1713 F159: 4C42564320 fcc "LBVC "
1714 F15E: 05 fcb 5
1715 F15F: 1028 fdb $1028
1716 F161: 4C42565320 fcc "LBVS "
1717 F166: 05 fcb 5
1718 F167: 1029 fdb $1029
1719 F169: 4C44412020 fcc "LDA "
1720 F16E: 07 fcb 7
1721 F16F: 0086 fdb $86
1722 F171: 4C44422020 fcc "LDB "
1723 F176: 07 fcb 7
1724 F177: 00C6 fdb $c6
1725 F179: 4C44442020 fcc "LDD "
1726 F17E: 08 fcb 8
1727 F17F: 00CC fdb $cc
1728 F181: 4C44532020 fcc "LDS "
1729 F186: 09 fcb 9
1730 F187: 10CE fdb $10ce
1731 F189: 4C44552020 fcc "LDU "
1732 F18E: 08 fcb 8
1733 F18F: 00CE fdb $ce
1734 F191: 4C44582020 fcc "LDX "
1735 F196: 08 fcb 8
1736 F197: 008E fdb $8e
1737 F199: 4C44592020 fcc "LDY "
1738 F19E: 09 fcb 9
1739 F19F: 108E fdb $108e
1740 F1A1: 4C45415320 fcc "LEAS "
1741 F1A6: 03 fcb 3
1742 F1A7: 0032 fdb $32
1743 F1A9: 4C45415520 fcc "LEAU "
1744 F1AE: 03 fcb 3
1745 F1AF: 0033 fdb $33
1746 F1B1: 4C45415820 fcc "LEAX "
1747 F1B6: 03 fcb 3
1748 F1B7: 0030 fdb $30
1749 F1B9: 4C45415920 fcc "LEAY "
1750 F1BE: 03 fcb 3
1751 F1BF: 0031 fdb $31
1752 F1C1: 4C534C2020 fcc "LSL "
1753 F1C6: 0A fcb 10
1754 F1C7: 0008 fdb $08
1755 F1C9: 4C534C4120 fcc "LSLA "
1756 F1CE: 00 fcb 0
1757 F1CF: 0048 fdb $48
1758 F1D1: 4C534C4220 fcc "LSLB "
1759 F1D6: 00 fcb 0
1760 F1D7: 0058 fdb $58
1761 F1D9: 4C53522020 fcc "LSR "
1762 F1DE: 0A fcb 10
1763 F1DF: 0004 fdb $04
1764 F1E1: 4C53524120 fcc "LSRA "
1765 F1E6: 00 fcb 0
1766 F1E7: 0044 fdb $44
1767 F1E9: 4C53524220 fcc "LSRB "
1768 F1EE: 00 fcb 0
1769 F1EF: 0054 fdb $54
1770 F1F1: 4D554C2020 fcc "MUL "
1771 F1F6: 00 fcb 0
1772 F1F7: 003D fdb $3d
1773 F1F9: 4E45472020 fcc "NEG "
1774 F1FE: 0A fcb 10
1775 F1FF: 0000 fdb $00
1776 F201: 4E45474120 fcc "NEGA "
1777 F206: 00 fcb 0
1778 F207: 0040 fdb $40
1779 F209: 4E45474220 fcc "NEGB "
1780 F20E: 00 fcb 0
1781 F20F: 0050 fdb $50
1782 F211: 4E4F502020 fcc "NOP "
1783 F216: 00 fcb 0
1784 F217: 0012 fdb $12
1785 F219: 4F52412020 fcc "ORA "
1786 F21E: 07 fcb 7
1787 F21F: 008A fdb $8a
1788 F221: 4F52422020 fcc "ORB "
1789 F226: 07 fcb 7
1790 F227: 00CA fdb $ca
1791 F229: 4F52434320 fcc "ORCC "
1792 F22E: 02 fcb 2
1793 F22F: 001A fdb $1a
1794 F231: 4F52472020 fcc "ORG "
1795 F236: 0D fcb 13
1796 F237: 000C fdb 12
1797 F239: 5053485320 fcc "PSHS "
1798 F23E: 0C fcb 12
1799 F23F: 0034 fdb $34
1800 F241: 5053485520 fcc "PSHU "
1801 F246: 0C fcb 12
1802 F247: 0036 fdb $36
1803 F249: 50554C5320 fcc "PULS "
1804 F24E: 0C fcb 12
1805 F24F: 0035 fdb $35
1806 F251: 50554C5520 fcc "PULU "
1807 F256: 0C fcb 12
1808 F257: 0037 fdb $37
1809 F259: 524D422020 fcc "RMB "
1810 F25E: 0D fcb 13
1811 F25F: 0000 fdb 0
1812 F261: 524F4C2020 fcc "ROL "
1813 F266: 0A fcb 10
1814 F267: 0009 fdb $09
1815 F269: 524F4C4120 fcc "ROLA "
1816 F26E: 00 fcb 0
1817 F26F: 0049 fdb $49
1818 F271: 524F4C4220 fcc "ROLB "
1819 F276: 00 fcb 0
1820 F277: 0059 fdb $59
1821 F279: 524F522020 fcc "ROR "
1822 F27E: 0A fcb 10
1823 F27F: 0006 fdb $06
1824 F281: 524F524120 fcc "RORA "
1825 F286: 00 fcb 0
1826 F287: 0046 fdb $46
1827 F289: 524F524220 fcc "RORB "
1828 F28E: 00 fcb 0
1829 F28F: 0056 fdb $56
1830 F291: 5254492020 fcc "RTI "
1831 F296: 00 fcb 0
1832 F297: 003B fdb $3b
1833 F299: 5254532020 fcc "RTS "
1834 F29E: 00 fcb 0
1835 F29F: 0039 fdb $39
1836 F2A1: 5342434120 fcc "SBCA "
1837 F2A6: 07 fcb 7
1838 F2A7: 0082 fdb $82
1839 F2A9: 5342434220 fcc "SBCB "
1840 F2AE: 07 fcb 7
1841 F2AF: 00C2 fdb $c2
1842 F2B1: 5345542020 fcc "SET "
1843 F2B6: 0D fcb 13
1844 F2B7: 000F fdb 15
1845 F2B9: 5345544450 fcc "SETDP"
1846 F2BE: 0D fcb 13
1847 F2BF: 000E fdb 14
1848 F2C1: 5345582020 fcc "SEX "
1849 F2C6: 00 fcb 0
1850 F2C7: 001D fdb $1d
1851 F2C9: 5354412020 fcc "STA "
1852 F2CE: 07 fcb 7
1853 F2CF: 0087 fdb $87
1854 F2D1: 5354422020 fcc "STB "
1855 F2D6: 07 fcb 7
1856 F2D7: 00C7 fdb $c7
1857 F2D9: 5354442020 fcc "STD "
1858 F2DE: 08 fcb 8
1859 F2DF: 00CD fdb $cd
1860 F2E1: 5354532020 fcc "STS "
1861 F2E6: 09 fcb 9
1862 F2E7: 10CF fdb $10cf
1863 F2E9: 5354552020 fcc "STU "
1864 F2EE: 08 fcb 8
1865 F2EF: 00CF fdb $cf
1866 F2F1: 5354582020 fcc "STX "
1867 F2F6: 08 fcb 8
1868 F2F7: 008F fdb $8f
1869 F2F9: 5354592020 fcc "STY "
1870 F2FE: 09 fcb 9
1871 F2FF: 108F fdb $108f
1872 F301: 5355424120 fcc "SUBA "
1873 F306: 07 fcb 7
1874 F307: 0080 fdb $80
1875 F309: 5355424220 fcc "SUBB "
1876 F30E: 07 fcb 7
1877 F30F: 00C0 fdb $c0
1878 F311: 5355424420 fcc "SUBD "
1879 F316: 08 fcb 8
1880 F317: 0083 fdb $83
1881 F319: 5357492020 fcc "SWI "
1882 F31E: 00 fcb 0
1883 F31F: 003F fdb $3f
1884 F321: 5357493220 fcb "SWI2 "
1885 F326: 01 fcb 1
1886 F327: 103F fdb $103f
1887 F329: 5357493320 fcb "SWI3 "
1888 F32E: 01 fcb 1
1889 F32F: 113F fdb $113f
1890 F331: 53594E4320 fcc "SYNC "
1891 F336: 00 fcb 0
1892 F337: 0013 fdb $13
1893 F339: 5446522020 fcc "TFR "
1894 F33E: 0B fcb 11
1895 F33F: 001F fdb $1f
1896 F341: 5453542020 fcc "TST "
1897 F346: 0A fcb 10
1898 F347: 000D fdb $0d
1899 F349: 5453544120 fcc "TSTA "
1900 F34E: 00 fcb 0
1901 F34F: 004D fdb $4d
1902 F351: 5453544220 fcc "TSTB "
1903 F356: 00 fcb 0
1904 F357: 005D fdb $5d
1905 F359:
1906 0093: mnemsize equ (*-mnemtab)/8
1907 F359:
1908 F359: * Register table for PUSH/PULL and TFR/EXG instructions.
1909 F359: * 3 bytes for name, 1 for tfr/exg, 1 for push/pull, 5 total
1910 F359: 582020 asmregtab fcc "X "
1911 F35C: 0110 fcb $01,$10
1912 F35E: 592020 fcc "Y "
1913 F361: 0220 fcb $02,$20
1914 F363: 552020 aregu fcc "U "
1915 F366: 0340 fcb $03,$40
1916 F368: 532020 aregs fcc "S "
1917 F36B: 0440 fcb $04,$40
1918 F36D: 504320 fcc "PC "
1919 F370: 0580 fcb $05,$80
1920 F372: 412020 fcc "A "
1921 F375: 0802 fcb $08,$02
1922 F377: 422020 fcc "B "
1923 F37A: 0904 fcb $09,$04
1924 F37C: 442020 fcc "D "
1925 F37F: 0006 fcb $00,$06
1926 F381: 434320 fcc "CC "
1927 F384: 0A01 fcb $0a,$01
1928 F386: 434352 fcc "CCR"
1929 F389: 0A01 fcb $0a,$01
1930 F38B: 445020 fcc "DP "
1931 F38E: 0B08 fcb $0b,$08
1932 F390: 445052 fcc "DPR"
1933 F393: 0B08 fcb $0b,$08
1934 F395: 3F2020 reginval fcc "? "
1935 F398:
1936 F398: 58595553 ixregs fcc "XYUS"
1937 F39C:
1938 F39C: * opcode offsets to basic opcode, depends on first nibble.
1939 F39C: 000000000000A090 opcoffs fcb 0,0,0,0,0,0,-$60,-$70
1940 F3A4: 00F0E0D000F0E0D0 fcb 0,-$10,-$20,-$30,0,-$10,-$20,-$30
1941 F3AC: * mode depending on first nibble of opcode.
1942 F3AC: 0300000000000504 modetab fcb 3,0,0,0,0,0,5,4,1,3,5,4,1,3,5,4
1943 F3B5: 03050401030504
1944 F3BC: * mode depending on category code stored in mnemtab
1945 F3BC: 0000010506070701 modetab2 fcb 0,0,1,5,6,7,7,1,2,2,0,8,9
1946 F3C5: 02000809
1947 F3C9: * modes in this context: 0 no operands, 1 8-bit immediate, 2 16 bit imm,
1948 F3C9: * 3, 8-bit address, 4 16 bit address, 5 indexed with postbyte, 6 short
1949 F3C9: * relative, 7 long relative, 8 pushpul, 9 tftetx
1950 F3C9:
1951 F3C9: * Decode instruction pointed to by Y for disassembly (and to find out
1952 F3C9: * how long it is). On return, U points to appropriate mnemonic table entry,
1953 F3C9: * Y points past instruction.
1954 F3C9: * It's rather clumsy code, but we do want to reuse the same table
1955 F3C9: * as used with assembling.
1956 F3C9: 7F02BF disdecode clr prebyte
1957 F3CC: 7F02C3 clr amode
1958 F3CF: A6A0 lda ,y+
1959 F3D1: 8110 cmpa #$10
1960 F3D3: 2704 beq ddec1
1961 F3D5: 8111 cmpa #$11
1962 F3D7: 2605 bne ddec2
1963 F3D9: B702BF ddec1 sta prebyte ;Store $10 or $11 prebyte.
1964 F3DC: A6A0 lda ,y+ ;Get new opcode.
1965 F3DE: B702C1 ddec2 sta opcode
1966 F3E1: 44 lsra
1967 F3E2: 44 lsra
1968 F3E3: 44 lsra
1969 F3E4: 44 lsra ;Get high nibble.
1970 F3E5: 8EF3AC ldx #modetab
1971 F3E8: E686 ldb a,x
1972 F3EA: F702C3 stb amode
1973 F3ED: 8EF39C ldx #opcoffs
1974 F3F0: A686 lda a,x
1975 F3F2: BB02C1 adda opcode ;Add opcode offset to opcode.
1976 F3F5: B702C0 ddec4 sta opc1 ;Store the 'basis' opcode.
1977 F3F8: CEEEC1 ldu #mnemtab
1978 F3FB: 8E0093 ldx #mnemsize
1979 F3FE: C60D ddecloop ldb #13
1980 F400: E145 cmpb 5,u ;Compare category code with 13
1981 F402: 2708 beq ddec3 ;13=pseudo op, no valid opcode
1982 F404: FC02BF ldd prebyte
1983 F407: 10A346 cmpd 6,u
1984 F40A: 2722 beq ddecfound ;Opcode&prebyte agree, operation found.
1985 F40C: 3348 ddec3 leau 8,u ;point to next mnemonic
1986 F40E: 301F leax -1,x
1987 F410: 26EC bne ddecloop
1988 F412: CEF091 ldu #mnemfcb ;mnemonic not found, use FCB byte.
1989 F415: 8603 lda #3
1990 F417: B702C3 sta amode ;Store mode 3, 8 bit address.
1991 F41A: B602C1 lda opcode
1992 F41D: 7D02BF tst prebyte
1993 F420: 2708 beq ddec5
1994 F422: B602BF lda prebyte ;if it was the combination prebyte
1995 F425: 7F02BF clr prebyte ;and opcode that was not found,
1996 F428: 313F leay -1,y ;FCB just the prebyte
1997 F42A: B702C5 ddec5 sta operand+1 ;The byte must be stored as operand.
1998 F42D: 39 rts
1999 F42E: 1183EFC9 ddecfound cmpu #mnembsr
2000 F432: 260A bne ddec6
2001 F434: 868D lda #$8d ;Is it really the BSR opcode?
2002 F436: B102C1 cmpa opcode
2003 F439: 2703 beq ddec6
2004 F43B: CEF0C9 ldu #mnemjsr ;We mistakenly found BSR instead of JSR
2005 F43E: B602C3 ddec6 lda amode
2006 F441: 84FE anda #$FE
2007 F443: 260A bne ddec7
2008 F445: A645 lda 5,u ;nibble-dependent mode was 0 or 1,
2009 F447: 8EF3BC ldx #modetab2 ;use category dependent mode instead.
2010 F44A: A686 lda a,x
2011 F44C: B702C3 sta amode
2012 F44F: B602C3 ddec7 lda amode
2013 F452: 48 asla
2014 F453: 8EF458 ldx #disdectab
2015 F456: 6E96 jmp [a,x] ;jump dependent on definitive mode.
2016 F458: F492F48CF493F48C disdectab fdb noop,opdec1,opdec2,opdec1,opdec2,opdecidx
2017 F461: 93F49D
2018 F464: F48CF493F497F497 fdb opdec1,opdec2,opdecpb,opdecpb
2019 F46C: F492F492F492F492 disdectab1 fdb noop,noop,noop,noop,noop,noop,noop,noop
2020 F475: 92F492F492F492
2021 F47C: F48CF493F492F492 fdb opdec1,opdec2,noop,noop,opdec1,opdec2,noop,opdec2
2022 F485: 8CF493F492F493
2023 F48C: E6A0 opdec1 ldb ,y+
2024 F48E: 1D sex
2025 F48F: FD02C4 od1a std operand
2026 F492: 39 noop rts
2027 F493: ECA1 opdec2 ldd ,y++
2028 F495: 20F8 bra od1a
2029 F497: E6A0 opdecpb ldb ,y+
2030 F499: F702C2 odpa stb postbyte
2031 F49C: 39 rts
2032 F49D: E6A0 opdecidx ldb ,y+
2033 F49F: 2AF8 bpl odpa ;postbytes <$80 have no extra operands.
2034 F4A1: F702C2 stb postbyte
2035 F4A4: C40F andb #$0f
2036 F4A6: 58 aslb
2037 F4A7: 8EF46C ldx #disdectab1
2038 F4AA: 6E95 jmp [b,x]
2039 F4AC:
2040 F4AC: * Display disassembled instruction after the invocation of disdecode.
2041 F4AC: * U points to mnemonic table entry.
2042 F4AC: 1F31 disdisp tfr u,x
2043 F4AE: C605 ldb #5
2044 F4B0: 9D09 jsr putline ;Display the mnemonic.
2045 F4B2: C620 ldb #' '
2046 F4B4: 9D03 jsr putchar
2047 F4B6: B602C3 lda amode
2048 F4B9: 48 asla
2049 F4BA: 8EF4BF ldx #disdisptab
2050 F4BD: 6E96 jmp [a,x] ;Perform action dependent on mode.
2051 F4BF: F492F4D3F4D7F4E1 disdisptab fdb noop,disim8,disim16,disadr8,disadr16
2052 F4C8: D9
2053 F4C9: F599F4E9F4F7F557 fdb disidx,disrel8,disrel16,distfr,dispush
2054 F4D2: 0E
2055 F4D3: 8D29 disim8 bsr puthash
2056 F4D5: 200A bra disadr8
2057 F4D7: 8D25 disim16 bsr puthash
2058 F4D9: 8D27 disadr16 bsr putdol
2059 F4DB: FC02C4 ldd operand
2060 F4DE: 7EE6FF jmp outd
2061 F4E1: 8D1F disadr8 bsr putdol
2062 F4E3: B602C5 lda operand+1
2063 F4E6: 7EE6F1 jmp outbyte
2064 F4E9: 8D17 disrel8 bsr putdol
2065 F4EB: F602C5 ldb operand+1
2066 F4EE: 1D sex
2067 F4EF: 109F24 dr8a sty temp
2068 F4F2: D324 addd temp
2069 F4F4: 7EE6FF jmp outd
2070 F4F7: 8D09 disrel16 bsr putdol
2071 F4F9: FC02C4 ldd operand
2072 F4FC: 20F1 bra dr8a
2073 F4FE:
2074 F4FE: C623 puthash ldb #'#'
2075 F500: 0E03 jmp putchar
2076 F502: C624 putdol ldb #'$'
2077 F504: 0E03 jmp putchar
2078 F506: C62C putcomma ldb #','
2079 F508: 0E03 jmp putchar
2080 F50A: C620 putspace ldb #' '
2081 F50C: 0E03 jmp putchar
2082 F50E:
2083 F50E: C60C dispush ldb #12
2084 F510: 8EF359 ldx #asmregtab ;Walk through the register table.
2085 F513: 0F24 clr temp
2086 F515: B602C2 regloop lda postbyte
2087 F518: A404 anda 4,x
2088 F51A: 2735 beq dispush1 ;Is bit corresponding to reg set in postbyte
2089 F51C: 8CF363 cmpx #aregu
2090 F51F: 260B bne dispush3
2091 F521: 9725 sta temp+1
2092 F523: B602C1 lda opcode
2093 F526: 8402 anda #2
2094 F528: 2627 bne dispush1 ;no u register in pshu pulu.
2095 F52A: 9625 lda temp+1
2096 F52C: 8CF368 dispush3 cmpx #aregs
2097 F52F: 260B bne dispush4
2098 F531: 9725 sta temp+1
2099 F533: B602C1 lda opcode
2100 F536: 8402 anda #2
2101 F538: 2717 beq dispush1 ;no s register in pshs puls.
2102 F53A: 9625 lda temp+1
2103 F53C: 43 dispush4 coma
2104 F53D: B402C2 anda postbyte ;remove the bits from postbyte.
2105 F540: B702C2 sta postbyte
2106 F543: 3404 pshs b
2107 F545: 0D24 tst temp
2108 F547: 2702 beq dispush2
2109 F549: 8DBB bsr putcomma ;print comma after first register.
2110 F54B: 8D2B dispush2 bsr disregname
2111 F54D: 0C24 inc temp
2112 F54F: 3504 puls b
2113 F551: 3005 dispush1 leax 5,x
2114 F553: 5A decb
2115 F554: 26BF bne regloop
2116 F556: 39 rts
2117 F557:
2118 F557: B602C2 distfr lda postbyte
2119 F55A: 44 lsra
2120 F55B: 44 lsra
2121 F55C: 44 lsra
2122 F55D: 44 lsra
2123 F55E: 8D07 bsr distfrsub
2124 F560: 8DA4 bsr putcomma
2125 F562: B602C2 lda postbyte
2126 F565: 840F anda #$0f
2127 F567: C60C distfrsub ldb #12
2128 F569: 8EF359 ldx #asmregtab
2129 F56C: A103 distfrloop cmpa 3,x
2130 F56E: 2705 beq distfrend
2131 F570: 3005 leax 5,x
2132 F572: 5A decb
2133 F573: 26F7 bne distfrloop
2134 F575: 8D01 distfrend bsr disregname
2135 F577: 39 rts
2136 F578:
2137 F578: 8603 disregname lda #3
2138 F57A: 1F13 tfr x,u
2139 F57C: E6C0 drnloop ldb ,u+
2140 F57E: C120 cmpb #' '
2141 F580: 2705 beq drnend
2142 F582: 9D03 jsr putchar
2143 F584: 4A deca
2144 F585: 26F5 bne drnloop
2145 F587: 39 drnend rts
2146 F588:
2147 F588: B602C2 disidxreg lda postbyte
2148 F58B: 44 lsra
2149 F58C: 44 lsra
2150 F58D: 44 lsra
2151 F58E: 44 lsra
2152 F58F: 44 lsra
2153 F590: 8403 anda #3
2154 F592: 8EF398 ldx #ixregs
2155 F595: E686 ldb a,x
2156 F597: 0E03 jmp putchar
2157 F599:
2158 F599: 0F24 disidx clr temp
2159 F59B: B602C2 lda postbyte
2160 F59E: 2B23 bmi disidx1
2161 F5A0: 841F anda #$1f
2162 F5A2: 8510 bita #$10
2163 F5A4: 2605 bne negoffs
2164 F5A6: BDF692 jsr outdecbyte
2165 F5A9: 200A bra discomma
2166 F5AB: C62D negoffs ldb #'-'
2167 F5AD: 9D03 jsr putchar
2168 F5AF: 8AF0 ora #$f0
2169 F5B1: 40 nega
2170 F5B2: BDF692 jsr outdecbyte
2171 F5B5: BDF506 discomma jsr putcomma ;Display ,Xreg and terminating ]
2172 F5B8: 8DCE disindex bsr disidxreg
2173 F5BA: 0D24 disindir tst temp ;Display ] if indirect.
2174 F5BC: 2704 beq disidxend
2175 F5BE: C65D ldb #']'
2176 F5C0: 9D03 jsr putchar
2177 F5C2: 39 disidxend rts
2178 F5C3: 8510 disidx1 bita #$10
2179 F5C5: 2706 beq disidx2
2180 F5C7: C65B ldb #'['
2181 F5C9: 9D03 jsr putchar
2182 F5CB: 0C24 inc temp
2183 F5CD: B602C2 disidx2 lda postbyte
2184 F5D0: 840F anda #$0f
2185 F5D2: 48 asla
2186 F5D3: 8EF672 ldx #disidxtab
2187 F5D6: 6E96 jmp [a,x] ;Jump to routine for indexed mode
2188 F5D8: 8602 disadec2 lda #2
2189 F5DA: 2002 bra disadeca
2190 F5DC: 8601 disadec1 lda #1
2191 F5DE: BDF506 disadeca jsr putcomma
2192 F5E1: C62D disadloop ldb #'-'
2193 F5E3: 9D03 jsr putchar
2194 F5E5: 4A deca
2195 F5E6: 26F9 bne disadloop
2196 F5E8: 20CE bra disindex
2197 F5EA: 8602 disainc2 lda #2
2198 F5EC: 2002 bra disainca
2199 F5EE: 8601 disainc1 lda #1
2200 F5F0: 9725 disainca sta temp+1
2201 F5F2: BDF506 jsr putcomma
2202 F5F5: BDF588 jsr disidxreg
2203 F5F8: 9625 lda temp+1
2204 F5FA: C62B disailoop ldb #'+'
2205 F5FC: 9D03 jsr putchar
2206 F5FE: 4A deca
2207 F5FF: 26F9 bne disailoop
2208 F601: 7EF5BA jmp disindir
2209 F604: C641 disax ldb #'A'
2210 F606: 9D03 jsr putchar
2211 F608: 7EF5B5 jmp discomma
2212 F60B: C642 disbx ldb #'B'
2213 F60D: 9D03 jsr putchar
2214 F60F: 7EF5B5 jmp discomma
2215 F612: C644 disdx ldb #'D'
2216 F614: 9D03 jsr putchar
2217 F616: 7EF5B5 jmp discomma
2218 F619: C63F disinval ldb #'?'
2219 F61B: 9D03 jsr putchar
2220 F61D: 7EF5BA jmp disindir
2221 F620: B602C5 disnx lda operand+1
2222 F623: 2B09 bmi disnxneg
2223 F625: BDF502 disnx1 jsr putdol
2224 F628: BDE6F1 jsr outbyte
2225 F62B: 7EF5B5 jmp discomma
2226 F62E: C62D disnxneg ldb #'-'
2227 F630: 9D03 jsr putchar
2228 F632: 40 nega
2229 F633: 20F0 bra disnx1
2230 F635: BDF502 disnnx jsr putdol
2231 F638: FC02C4 ldd operand
2232 F63B: BDE6FF jsr outd
2233 F63E: 7EF5B5 jmp discomma
2234 F641: BDF502 disnpc jsr putdol
2235 F644: F602C5 ldb operand+1
2236 F647: 1D sex
2237 F648: 109F26 disnpca sty temp2
2238 F64B: D326 addd temp2
2239 F64D: BDE6FF jsr outd
2240 F650: 8EF66E ldx #commapc
2241 F653: C604 ldb #4
2242 F655: 9D09 jsr putline
2243 F657: 7EF5BA jmp disindir
2244 F65A: BDF502 disnnpc jsr putdol
2245 F65D: FC02C4 ldd operand
2246 F660: 20E6 bra disnpca
2247 F662: BDF502 disdirect jsr putdol
2248 F665: FC02C4 ldd operand
2249 F668: BDE6FF jsr outd
2250 F66B: 7EF5BA jmp disindir
2251 F66E:
2252 F66E: 2C504352 commapc fcc ",PCR"
2253 F672:
2254 F672: F5EEF5EAF5DCF5D8 disidxtab fdb disainc1,disainc2,disadec1,disadec2
2255 F67A: F5B5F60BF604F619 fdb discomma,disbx,disax,disinval
2256 F682: F620F635F619F612 fdb disnx,disnnx,disinval,disdx
2257 F68A: F641F65AF619F662 fdb disnpc,disnnpc,disinval,disdirect
2258 F692:
2259 F692: * Display byte A in decimal (0<=A<20)
2260 F692: 810A outdecbyte cmpa #10
2261 F694: 2506 blo odb1
2262 F696: 800A suba #10
2263 F698: C631 ldb #'1'
2264 F69A: 9D03 jsr putchar
2265 F69C: 8B30 odb1 adda #'0'
2266 F69E: 1F89 tfr a,b
2267 F6A0: 0E03 jmp putchar
2268 F6A2:
2269 F6A2: * This is the code for the U command, unassemble instructions in memory.
2270 F6A2: * Syntax: U or Uaddr or Uaddr,length
2271 F6A2: 8E0201 unasm ldx #linebuf+1
2272 F6A5: CC0014 ldd #20
2273 F6A8: BDE753 jsr scan2parms ;Scan address,length parameters.
2274 F6AB: FC029D ldd addr
2275 F6AE: F3029F addd length
2276 F6B1: FD029F std length
2277 F6B4: 10BE029D ldy addr
2278 F6B8: 1F20 unasmloop tfr y,d
2279 F6BA: BDE6FF jsr outd ;Display instruction address
2280 F6BD: BDF50A jsr putspace
2281 F6C0: 3420 pshs y
2282 F6C2: BDF3C9 jsr disdecode
2283 F6C5: 3510 puls x
2284 F6C7: 109F24 sty temp
2285 F6CA: 0F26 clr temp2
2286 F6CC: A680 unadishex lda ,x+
2287 F6CE: BDE6F1 jsr outbyte
2288 F6D1: 0C26 inc temp2
2289 F6D3: 0C26 inc temp2
2290 F6D5: 9C24 cmpx temp
2291 F6D7: 26F3 bne unadishex ;Display instruction bytes as hex.
2292 F6D9: C620 unadisspc ldb #' '
2293 F6DB: 9D03 jsr putchar
2294 F6DD: 0C26 inc temp2
2295 F6DF: 860B lda #11
2296 F6E1: 9126 cmpa temp2 ;Fill out with spaces to width 11.
2297 F6E3: 26F4 bne unadisspc
2298 F6E5: 26E5 bne unadishex
2299 F6E7: BDF4AC jsr disdisp ;Display disassembled instruction.
2300 F6EA: 9D0C jsr putcr
2301 F6EC: 10BC029F cmpy length
2302 F6F0: 23C6 bls unasmloop
2303 F6F2: 10BF029D sty addr
2304 F6F6: 7EE579 jmp cmdline
2305 F6F9:
2306 F6F9: * Simple 'expression evaluator' for assembler.
2307 F6F9: E684 expr ldb ,x
2308 F6FB: C12D cmpb #'-'
2309 F6FD: 2603 bne pos
2310 F6FF: 5F clrb
2311 F700: 3001 leax 1,x
2312 F702: 3404 pos pshs b
2313 F704: 8D11 bsr scanfact
2314 F706: 270C beq exprend1
2315 F708: 6DE0 tst ,s+
2316 F70A: 2607 bne exprend ;Was the minus sign there.
2317 F70C: 43 coma
2318 F70D: 53 comb
2319 F70E: C30001 addd #1
2320 F711: 1CFB andcc #$fb ;Clear Z flag for valid result.
2321 F713: 39 exprend rts
2322 F714: 3504 exprend1 puls b
2323 F716: 39 rts
2324 F717:
2325 F717: E680 scanfact ldb ,x+
2326 F719: C124 cmpb #'$'
2327 F71B: 1027F011 lbeq scanhex ;Hex number if starting with dollar.
2328 F71F: C127 cmpb #'''
2329 F721: 260E bne scandec ;char if starting with ' else decimal
2330 F723: E680 ldb ,x+
2331 F725: A684 lda ,x
2332 F727: 8127 cmpa #'''
2333 F729: 2602 bne scanchar2
2334 F72B: 3001 leax 1,x ;Increment past final quote if it's there.
2335 F72D: 4F scanchar2 clra
2336 F72E: 1CFB andcc #$fb ;Clear zero flag.
2337 F730: 39 rts
2338 F731: C130 scandec cmpb #'0'
2339 F733: 252F blo noexpr
2340 F735: C139 cmpb #'9'
2341 F737: 222B bhi noexpr
2342 F739: 0F24 clr temp
2343 F73B: 0F25 clr temp+1
2344 F73D: C030 scandloop subb #'0'
2345 F73F: 251C bcs sdexit
2346 F741: C10A cmpb #10
2347 F743: 2418 bcc sdexit
2348 F745: 3404 pshs b
2349 F747: DC24 ldd temp
2350 F749: 58 aslb
2351 F74A: 49 rola
2352 F74B: 3406 pshs d
2353 F74D: 58 aslb
2354 F74E: 49 rola
2355 F74F: 58 aslb
2356 F750: 49 rola
2357 F751: E3E1 addd ,s++ ;Multiply number by 10.
2358 F753: EBE0 addb ,s+
2359 F755: 8900 adca #0 ;Add digit to 10.
2360 F757: DD24 std temp
2361 F759: E680 ldb ,x+ ;Get next character.
2362 F75B: 20E0 bra scandloop
2363 F75D: DC24 sdexit ldd temp
2364 F75F: 301F leax -1,x
2365 F761: 1CFB andcc #$fb
2366 F763: 39 rts
2367 F764: 1A04 noexpr orcc #$04
2368 F766: 39 rts
2369 F767:
2370 F767: * Assemble the instruction pointed to by X.
2371 F767: * Fisrt stage: copy mnemonic to mnemonic buffer.
2372 F767: 8605 asminstr lda #5
2373 F769: CE02C6 ldu #mnembuf
2374 F76C: E680 mncploop ldb ,x+
2375 F76E: 2715 beq mncpexit
2376 F770: C120 cmpb #' '
2377 F772: 2711 beq mncpexit ;Mnemonic ends at first space or null
2378 F774: C4DF andb #CASEMASK
2379 F776: C141 cmpb #'A'
2380 F778: 2504 blo nolet
2381 F77A: C15A cmpb #'Z'
2382 F77C: 2302 bls mnemcp1 ;Capitalize letters, but only letters.
2383 F77E: E61F nolet ldb -1,x
2384 F780: E7C0 mnemcp1 stb ,u+ ;Copy to mnemonic buffer.
2385 F782: 4A deca
2386 F783: 26E7 bne mncploop
2387 F785: 4D mncpexit tsta
2388 F786: 2707 beq mncpdone
2389 F788: C620 ldb #' '
2390 F78A: E7C0 mnfilloop stb ,u+
2391 F78C: 4A deca
2392 F78D: 26FB bne mnfilloop ;Fill the rest of mnem buffer with spaces.
2393 F78F: * Second stage: look mnemonic up using binary search.
2394 F78F: 9F28 mncpdone stx temp3
2395 F791: 0F24 clr temp ;Low index=0
2396 F793: 8693 lda #mnemsize
2397 F795: 9725 sta temp+1 ;High index=mnemsize.
2398 F797: D625 bsrchloop ldb temp+1
2399 F799: C1FF cmpb #$ff
2400 F79B: 2739 beq invmnem ;lower limit -1?
2401 F79D: D124 cmpb temp
2402 F79F: 2535 blo invmnem ;hi index lower than low index?
2403 F7A1: 4F clra
2404 F7A2: DB24 addb temp ;Add indexes.
2405 F7A4: 8900 adca #0
2406 F7A6: 44 lsra
2407 F7A7: 56 rorb ;Divide by 2 to get average
2408 F7A8: D726 stb temp2
2409 F7AA: 58 aslb
2410 F7AB: 49 rola
2411 F7AC: 58 aslb
2412 F7AD: 49 rola
2413 F7AE: 58 aslb
2414 F7AF: 49 rola ;Multiply by 8 to get offset.
2415 F7B0: CEEEC1 ldu #mnemtab
2416 F7B3: 33CB leau d,u ;Add offset to table base
2417 F7B5: 1F32 tfr u,y
2418 F7B7: 8605 lda #5
2419 F7B9: 8E02C6 ldx #mnembuf
2420 F7BC: E680 bscmploop ldb ,x+
2421 F7BE: E1A0 cmpb ,y+
2422 F7C0: 2606 bne bscmpexit ;Characters don't match?
2423 F7C2: 4A deca
2424 F7C3: 26F7 bne bscmploop
2425 F7C5: 7EF7DC jmp mnemfound ;We found the mnemonic.
2426 F7C8: D626 bscmpexit ldb temp2
2427 F7CA: 2405 bcc bscmplower
2428 F7CC: 5A decb
2429 F7CD: D725 stb temp+1 ;mnembuf<table, adjust high limit.
2430 F7CF: 20C6 bra bsrchloop
2431 F7D1: 5C bscmplower incb
2432 F7D2: D724 stb temp ;mnembuf>table, adjust low limit.
2433 F7D4: 20C1 bra bsrchloop
2434 F7D6: 8EE69E invmnem ldx #invmmsg
2435 F7D9: 7E0298 jmp asmerrvec
2436 F7DC: * Stage 3: Perform routine depending on category code.
2437 F7DC: 7F02CC mnemfound clr uncert
2438 F7DF: 10BE029D ldy addr
2439 F7E3: A645 lda 5,u
2440 F7E5: 48 asla
2441 F7E6: 8EF7F0 ldx #asmtab
2442 F7E9: AD96 jsr [a,x]
2443 F7EB: 10BF029D sty addr
2444 F7EF: 39 rts
2445 F7F0: F812F816F81AF82F asmtab fdb onebyte,twobyte,immbyte,lea
2446 F7F8: F855F868F87BF882 fdb sbranch,lbranch,lbra,acc8
2447 F800: F893F8A4F8B7F8D9 fdb dreg1,dreg2,oneaddr,tfrexg
2448 F808: F902F928 fdb pushpul,pseudo
2449 F80C:
2450 F80C: E7A0 putbyte stb ,y+
2451 F80E: 39 rts
2452 F80F: EDA1 putword std ,y++
2453 F811: 39 rts
2454 F812:
2455 F812: E647 onebyte ldb 7,u ;Cat 0, one byte opcode w/o operands RTS
2456 F814: 20F6 bra putbyte
2457 F816: EC46 twobyte ldd 6,u ;Cat 1, two byte opcode w/o operands SWI2
2458 F818: 20F5 bra putword
2459 F81A: E647 immbyte ldb 7,u ;Cat 2, opcode w/ immdiate operand ANDCC
2460 F81C: 8DEE bsr putbyte
2461 F81E: BDF94B jsr scanops
2462 F821: F602C3 ldb amode
2463 F824: C101 cmpb #1
2464 F826: 1026038A lbne moderr
2465 F82A: F602C5 ldb operand+1
2466 F82D: 20DD bra putbyte
2467 F82F: E647 lea ldb 7,u ;Cat 3, LEA
2468 F831: 8DD9 bsr putbyte
2469 F833: BDF94B jsr scanops
2470 F836: B602C3 lda amode
2471 F839: 8101 cmpa #1
2472 F83B: 10270375 lbeq moderr ;No immediate w/ lea
2473 F83F: 8103 cmpa #3
2474 F841: 102402BE lbhs doaddr
2475 F845: BDFAF6 jsr set3
2476 F848: 868F lda #$8f
2477 F84A: B702C2 sta postbyte
2478 F84D: 8602 lda #2
2479 F84F: B702CB sta opsize ;Use 8F nn nn for direct mode.
2480 F852: 7EFB03 jmp doaddr
2481 F855: E647 sbranch ldb 7,u ;Cat 4, short branch instructions
2482 F857: 8DB3 bsr putbyte
2483 F859: BDF943 jsr startop
2484 F85C: 301F leax -1,x
2485 F85E: BD0295 jsr exprvec
2486 F861: 10270349 lbeq exprerr
2487 F865: 7EFB6C jmp shortrel
2488 F868: EC46 lbranch ldd 6,u ;Cat 5, long brach w/ two byte opcode
2489 F86A: 8DA3 bsr putword
2490 F86C: BDF943 lbra1 jsr startop
2491 F86F: 301F leax -1,x
2492 F871: BD0295 jsr exprvec
2493 F874: 10270336 lbeq exprerr
2494 F878: 7EFB90 jmp longrel
2495 F87B: E647 lbra ldb 7,u ;Cat 6, long branch w/ one byte opcode.
2496 F87D: BDF80C jsr putbyte
2497 F880: 20EA bra lbra1
2498 F882: 8601 acc8 lda #1 ;Cat 7, 8-bit two operand instructions ADDA
2499 F884: B702CB sta opsize
2500 F887: BDF94B jsr scanops
2501 F88A: BDF929 jsr adjopc
2502 F88D: BDF80C jsr putbyte
2503 F890: 7EFB03 jmp doaddr
2504 F893: 8602 dreg1 lda #2 ;Cat 8, 16-bit 2operand insns 1byte opc LDX
2505 F895: B702CB sta opsize
2506 F898: BDF94B jsr scanops
2507 F89B: BDF929 jsr adjopc
2508 F89E: BDF80C jsr putbyte
2509 F8A1: 7EFB03 jmp doaddr
2510 F8A4: 8602 dreg2 lda #2 ;Cat 9, 16-bit 2operand insns 2byte opc LDY
2511 F8A6: B702CB sta opsize
2512 F8A9: BDF94B jsr scanops
2513 F8AC: BDF929 jsr adjopc
2514 F8AF: A646 lda 6,u
2515 F8B1: BDF80F jsr putword
2516 F8B4: 7EFB03 jmp doaddr
2517 F8B7: BDF94B oneaddr jsr scanops ;Cat 10, one-operand insns NEG..CLR
2518 F8BA: E647 ldb 7,u
2519 F8BC: B602C3 lda amode
2520 F8BF: 8101 cmpa #1
2521 F8C1: 102702EF lbeq moderr ;No immediate mode
2522 F8C5: 8103 cmpa #3
2523 F8C7: 2408 bhs oaind ;indexed etc
2524 F8C9: B602CB lda opsize
2525 F8CC: 4A deca
2526 F8CD: 2704 beq oadir
2527 F8CF: CB10 addb #$10 ;Add $70 for extended direct.
2528 F8D1: CB60 oaind addb #$60 ;And $60 for indexed etc.
2529 F8D3: BDF80C oadir jsr putbyte ;And nothing for direct8.
2530 F8D6: 7EFB03 jmp doaddr
2531 F8D9: BDF943 tfrexg jsr startop ;Cat 11, TFR and EXG
2532 F8DC: 301F leax -1,x
2533 F8DE: E647 ldb 7,u
2534 F8E0: BDF80C jsr putbyte
2535 F8E3: BDFBCC jsr findreg
2536 F8E6: E6C4 ldb ,u
2537 F8E8: 58 aslb
2538 F8E9: 58 aslb
2539 F8EA: 58 aslb
2540 F8EB: 58 aslb
2541 F8EC: F702C2 stb postbyte
2542 F8EF: E680 ldb ,x+
2543 F8F1: C12C cmpb #','
2544 F8F3: 102602BD lbne moderr
2545 F8F7: BDFBCC jsr findreg
2546 F8FA: E6C4 ldb ,u
2547 F8FC: FA02C2 orb postbyte
2548 F8FF: 7EF80C jmp putbyte
2549 F902: BDF943 pushpul jsr startop ;Cat 12, PSH and PUL
2550 F905: 301F leax -1,x
2551 F907: E647 ldb 7,u
2552 F909: BDF80C jsr putbyte
2553 F90C: 7F02C2 clr postbyte
2554 F90F: BDFBCC pploop jsr findreg
2555 F912: E641 ldb 1,u
2556 F914: FA02C2 orb postbyte
2557 F917: F702C2 stb postbyte
2558 F91A: E680 ldb ,x+
2559 F91C: C12C cmpb #','
2560 F91E: 27EF beq pploop
2561 F920: 301F leax -1,x
2562 F922: F602C2 ldb postbyte
2563 F925: 7EF80C jmp putbyte
2564 F928: pseudo ;Cat 13, pseudo oeprations
2565 F928: 39 rts
2566 F929:
2567 F929: * Adjust opcdoe depending on mode (in $80-$FF range)
2568 F929: E647 adjopc ldb 7,u
2569 F92B: B602C3 lda amode
2570 F92E: 8102 cmpa #2
2571 F930: 2708 beq adjdir ;Is it direct?
2572 F932: 8103 cmpa #3
2573 F934: 2401 bhs adjind ;Indexed etc?
2574 F936: 39 rts ;Not, then immediate, no adjust.
2575 F937: CB20 adjind addb #$20 ;Add $20 to opcode for indexed etc modes.
2576 F939: 39 rts
2577 F93A: CB10 adjdir addb #$10 ;Add $10 to opcode for direct8
2578 F93C: B602CB lda opsize
2579 F93F: 4A deca
2580 F940: 26F5 bne adjind ;If opsize=2, add another $20 for extended16
2581 F942: 39 rts
2582 F943:
2583 F943: * Start scanning of operands.
2584 F943: 9E28 startop ldx temp3
2585 F945: 7F02C3 clr amode
2586 F948: 7EE708 jmp skipspace
2587 F94B:
2588 F94B: * amode settings in assembler: 1=immediate, 2=direct/extended, 3=indexed
2589 F94B: * etc. 4=pc relative, 5=indirect, 6=pcrelative and indirect.
2590 F94B:
2591 F94B: * This subroutine scans the assembler operands.
2592 F94B: 8DF6 scanops bsr startop
2593 F94D: C15B cmpb #'['
2594 F94F: 2607 bne noindir
2595 F951: 8605 lda #5 ;operand starts with [, then indirect.
2596 F953: B702C3 sta amode
2597 F956: E680 ldb ,x+
2598 F958: C123 noindir cmpb #'#'
2599 F95A: 10270087 lbeq doimm
2600 F95E: C12C cmpb #','
2601 F960: 1027009A lbeq dospecial
2602 F964: C4DF andb #CASEMASK ;Convert to uppercase.
2603 F966: 8686 lda #$86
2604 F968: C141 cmpb #'A'
2605 F96A: 270C beq scanacidx
2606 F96C: 8685 lda #$85
2607 F96E: C142 cmpb #'B'
2608 F970: 2706 beq scanacidx
2609 F972: 868B lda #$8B
2610 F974: C144 cmpb #'D'
2611 F976: 2616 bne scanlab
2612 F978: E680 scanacidx ldb ,x+ ;Could it be A,X B,X or D,X
2613 F97A: C12C cmpb #','
2614 F97C: 260E bne nocomma
2615 F97E: B702C2 sta postbyte
2616 F981: 7F02CB clr opsize
2617 F984: BDFAF6 jsr set3
2618 F987: BDFAD8 jsr scanixreg
2619 F98A: 2041 bra scanend
2620 F98C: 301F nocomma leax -1,x
2621 F98E: 301F scanlab leax -1,x ;Point to the start of the operand
2622 F990: BD0295 jsr exprvec
2623 F993: 10270217 lbeq exprerr
2624 F997: FD02C4 std operand
2625 F99A: 7D02CC tst uncert
2626 F99D: 2609 bne opsz2 ;Go for extended if operand unknown.
2627 F99F: B302CD subd dpsetting
2628 F9A2: 4D tsta ;Can we use 8-bit operand?
2629 F9A3: 2603 bne opsz2
2630 F9A5: 4C inca
2631 F9A6: 2002 bra opsz1
2632 F9A8: 8602 opsz2 lda #2
2633 F9AA: B702CB opsz1 sta opsize ;Set opsize depending on magnitude of op.
2634 F9AD: B602C3 lda amode
2635 F9B0: 8105 cmpa #5
2636 F9B2: 260C bne opsz3 ;Or was it indirect.
2637 F9B4: 8602 lda #2 ;Then we have postbyte and opsize=2
2638 F9B6: B702CB sta opsize
2639 F9B9: 868F lda #$8F
2640 F9BB: B702C2 sta postbyte
2641 F9BE: 2005 bra opsz4
2642 F9C0: 8602 opsz3 lda #2
2643 F9C2: B702C3 sta amode ;Assume direct or absolute addressing
2644 F9C5: E680 opsz4 ldb ,x+
2645 F9C7: C12C cmpb #','
2646 F9C9: 10270086 lbeq doindex ;If followed by, then indexed.
2647 F9CD: B602C3 scanend lda amode
2648 F9D0: 8105 cmpa #5
2649 F9D2: 2510 blo scanend2 ;Was it an indirect mode?
2650 F9D4: B602C2 lda postbyte
2651 F9D7: 8A10 ora #$10 ;Set indirect bit.
2652 F9D9: B702C2 sta postbyte
2653 F9DC: E680 ldb ,x+
2654 F9DE: C15D cmpb #']' ;Check for the other ]
2655 F9E0: 102701D0 lbeq moderr
2656 F9E4: 39 scanend2 rts
2657 F9E5: BD0295 doimm jsr exprvec ;Immediate addressing.
2658 F9E8: 102701C2 lbeq exprerr
2659 F9EC: FD02C4 std operand
2660 F9EF: B602C3 lda amode
2661 F9F2: 8105 cmpa #5
2662 F9F4: 102701BC lbeq moderr ;Inirect mode w/ imm is illegal.
2663 F9F8: 8601 lda #$01
2664 F9FA: B702C3 sta amode
2665 F9FD: 39 rts
2666 F9FE: BDFAF6 dospecial jsr set3
2667 FA01: 7F02CB clr opsize
2668 FA04: 4F clra
2669 FA05: E680 adecloop ldb ,x+
2670 FA07: C12D cmpb #'-'
2671 FA09: 2603 bne adecend
2672 FA0B: 4C inca ;Count the - signs for autodecrement.
2673 FA0C: 20F7 bra adecloop
2674 FA0E: 301F adecend leax -1,x
2675 FA10: 8102 cmpa #2
2676 FA12: 1022019E lbhi moderr
2677 FA16: 4D tsta
2678 FA17: 262F bne autodec
2679 FA19: 7F02C2 clr postbyte
2680 FA1C: BDFAD8 jsr scanixreg
2681 FA1F: 4F clra
2682 FA20: E680 aincloop ldb ,x+
2683 FA22: C12B cmpb #'+'
2684 FA24: 2603 bne aincend
2685 FA26: 4C inca
2686 FA27: 20F7 bra aincloop ;Count the + signs for autoincrement.
2687 FA29: 301F aincend leax -1,x
2688 FA2B: 8102 cmpa #2
2689 FA2D: 10220183 lbhi moderr
2690 FA31: 4D tsta
2691 FA32: 260A bne autoinc
2692 FA34: 8684 lda #$84
2693 FA36: BA02C2 ora postbyte
2694 FA39: B702C2 sta postbyte
2695 FA3C: 208F bra scanend
2696 FA3E: 8B7F autoinc adda #$7f
2697 FA40: BA02C2 ora postbyte
2698 FA43: B702C2 sta postbyte
2699 FA46: 2085 bra scanend
2700 FA48: 8B81 autodec adda #$81
2701 FA4A: B702C2 sta postbyte
2702 FA4D: BDFAD8 jsr scanixreg
2703 FA50: 16FF7A lbra scanend
2704 FA53: 7F02C2 doindex clr postbyte
2705 FA56: BDFAF6 jsr set3
2706 FA59: E680 ldb ,x+
2707 FA5B: C4DF andb #CASEMASK ;Convert to uppercase.
2708 FA5D: C150 cmpb #'P'
2709 FA5F: 10270057 lbeq dopcrel ;Check for PC relative.
2710 FA63: 301F leax -1,x
2711 FA65: 7F02CB clr opsize
2712 FA68: 8D6E bsr scanixreg
2713 FA6A: FC02C4 ldd operand
2714 FA6D: 7D02CC tst uncert
2715 FA70: 2638 bne longindex ;Go for long index if operand unknown.
2716 FA72: 1083FFF0 cmpd #-16
2717 FA76: 2D18 blt shortindex
2718 FA78: 1083000F cmpd #15
2719 FA7C: 2E12 bgt shortindex
2720 FA7E: B602C3 lda amode
2721 FA81: 8105 cmpa #5
2722 FA83: 2717 beq shortind1 ;Indirect may not be 5-bit index
2723 FA85: ;It's a five-bit index.
2724 FA85: C41F andb #$1f
2725 FA87: FA02C2 orb postbyte
2726 FA8A: F702C2 stb postbyte
2727 FA8D: 16FF3D lbra scanend
2728 FA90: 1083FF80 shortindex cmpd #-128
2729 FA94: 2D14 blt longindex
2730 FA96: 1083007F cmpd #127
2731 FA9A: 2E0E bgt longindex
2732 FA9C: 7C02CB shortind1 inc opsize
2733 FA9F: C688 ldb #$88
2734 FAA1: FA02C2 orb postbyte
2735 FAA4: F702C2 stb postbyte
2736 FAA7: 16FF23 lbra scanend
2737 FAAA: 8602 longindex lda #$2
2738 FAAC: B702CB sta opsize
2739 FAAF: C689 ldb #$89
2740 FAB1: FA02C2 orb postbyte
2741 FAB4: F702C2 stb postbyte
2742 FAB7: 16FF13 lbra scanend
2743 FABA: E680 dopcrel ldb ,x+
2744 FABC: C4DF andb #CASEMASK ;Convert to uppercase
2745 FABE: C143 cmpb #'C'
2746 FAC0: 2506 blo pcrelend
2747 FAC2: C152 cmpb #'R'
2748 FAC4: 2202 bhi pcrelend
2749 FAC6: 20F2 bra dopcrel ;Scan past the ,PCR
2750 FAC8: 301F pcrelend leax -1,x
2751 FACA: C68C ldb #$8C
2752 FACC: FA02C2 orb postbyte ;Set postbyte
2753 FACF: F702C2 stb postbyte
2754 FAD2: 7C02C3 inc amode ;Set addr mode to PCR
2755 FAD5: 16FEF5 lbra scanend
2756 FAD8:
2757 FAD8: * Scan for one of the 4 index registers and adjust postbyte.
2758 FAD8: E680 scanixreg ldb ,x+
2759 FADA: C4DF andb #CASEMASK ;Convert to uppercase.
2760 FADC: 3410 pshs x
2761 FADE: 8EF398 ldx #ixregs
2762 FAE1: 4F clra
2763 FAE2: E180 scidxloop cmpb ,x+
2764 FAE4: 2707 beq ixfound
2765 FAE6: 8B20 adda #$20
2766 FAE8: 2AF8 bpl scidxloop
2767 FAEA: 7EFBB4 jmp moderr ;Index register not found where expected.
2768 FAED: BA02C2 ixfound ora postbyte
2769 FAF0: B702C2 sta postbyte ;Set index reg bits in postbyte.
2770 FAF3: 3510 puls x
2771 FAF5: 39 rts
2772 FAF6:
2773 FAF6: * This routine sets amode to 3, if it was less.
2774 FAF6: B602C3 set3 lda amode
2775 FAF9: 8103 cmpa #3
2776 FAFB: 2405 bhs set3a
2777 FAFD: 8603 lda #3
2778 FAFF: B702C3 sta amode
2779 FB02: 39 set3a rts
2780 FB03:
2781 FB03: * This subroutine lays down the address.
2782 FB03: B602C3 doaddr lda amode
2783 FB06: 8103 cmpa #3
2784 FB08: 250D blo doa1
2785 FB0A: F602C2 ldb postbyte
2786 FB0D: BDF80C jsr putbyte
2787 FB10: B602C3 lda amode
2788 FB13: 8401 anda #1
2789 FB15: 2715 beq doapcrel ;pc rel modes.
2790 FB17: B602CB doa1 lda opsize
2791 FB1A: 4D tsta
2792 FB1B: 27E5 beq set3a
2793 FB1D: 4A deca
2794 FB1E: 2706 beq doa2
2795 FB20: FC02C4 ldd operand
2796 FB23: 7EF80F jmp putword
2797 FB26: F602C5 doa2 ldb operand+1
2798 FB29: 7EF80C jmp putbyte
2799 FB2C: 10BF029D doapcrel sty addr
2800 FB30: FC02C4 ldd operand
2801 FB33: B3029D subd addr
2802 FB36: 830001 subd #1
2803 FB39: 7D02CC tst uncert
2804 FB3C: 2614 bne pcrlong
2805 FB3E: 1083FF80 cmpd #-128
2806 FB42: 2D0E blt pcrlong
2807 FB44: 1083FF81 cmpd #-127
2808 FB48: 2E08 bgt pcrlong
2809 FB4A: 8601 lda #1
2810 FB4C: B702CB sta opsize
2811 FB4F: 7EF80C jmp putbyte
2812 FB52: 830001 pcrlong subd #1
2813 FB55: 313F leay -1,y
2814 FB57: 7C02C2 inc postbyte
2815 FB5A: 3406 pshs d
2816 FB5C: F602C2 ldb postbyte
2817 FB5F: BDF80C jsr putbyte
2818 FB62: 8602 lda #2
2819 FB64: B702CB sta opsize
2820 FB67: 3506 puls d
2821 FB69: 7EF80F jmp putword
2822 FB6C:
2823 FB6C: * This routine checks and lays down short relative address.
2824 FB6C: 10BF029D shortrel sty addr
2825 FB70: B3029D subd addr
2826 FB73: 830001 subd #1
2827 FB76: 1083FF80 cmpd #-128
2828 FB7A: 2D2C blt brerr
2829 FB7C: 1083007F cmpd #127
2830 FB80: 2E26 bgt brerr
2831 FB82: BDF80C jsr putbyte
2832 FB85: 8604 lda #4
2833 FB87: B702C3 sta amode
2834 FB8A: 8601 lda #1
2835 FB8C: B702CB sta opsize
2836 FB8F: 39 rts
2837 FB90: * This routine lays down long relative address.
2838 FB90: 10BF029D longrel sty addr
2839 FB94: B3029D subd addr
2840 FB97: 830002 subd #2
2841 FB9A: BDF80F jsr putword
2842 FB9D: 8604 lda #4
2843 FB9F: B702C3 sta amode
2844 FBA2: 8602 lda #2
2845 FBA4: B702CB sta opsize
2846 FBA7: 39 rts
2847 FBA8:
2848 FBA8: 8EE6D6 brerr ldx #brmsg
2849 FBAB: 7E0298 jmp asmerrvec
2850 FBAE: 8EE6AF exprerr ldx #exprmsg
2851 FBB1: 7E0298 jmp asmerrvec
2852 FBB4: 8EE6C0 moderr ldx #modemsg
2853 FBB7: 7E0298 jmp asmerrvec
2854 FBBA: 3410 asmerr pshs x
2855 FBBC: 9D18 jsr xabortin
2856 FBBE: 3510 puls x
2857 FBC0: BDE502 jsr outcount
2858 FBC3: 9D0C jsr putcr
2859 FBC5: 10FE02BD lds savesp
2860 FBC9: 7EE579 jmp cmdline
2861 FBCC:
2862 FBCC: * Find register for TFR and PSH instruction
2863 FBCC: C60C findreg ldb #12
2864 FBCE: 3424 pshs y,b
2865 FBD0: CEF359 ldu #asmregtab
2866 FBD3: 1F12 findregloop tfr x,y
2867 FBD5: 8603 lda #3
2868 FBD7: E6C4 frcmps ldb ,u
2869 FBD9: C120 cmpb #' '
2870 FBDB: 2606 bne frcmps1
2871 FBDD: E6A4 ldb ,y
2872 FBDF: C141 cmpb #'A'
2873 FBE1: 2D18 blt frfound
2874 FBE3: E6A0 frcmps1 ldb ,y+
2875 FBE5: C4DF andb #CASEMASK
2876 FBE7: E1C0 cmpb ,u+
2877 FBE9: 2606 bne frnextreg
2878 FBEB: 4A deca
2879 FBEC: 26E9 bne frcmps
2880 FBEE: 4C inca
2881 FBEF: 200A bra frfound
2882 FBF1: 4C frnextreg inca
2883 FBF2: 33C6 leau a,u
2884 FBF4: 6AE4 dec ,s
2885 FBF6: 26DB bne findregloop
2886 FBF8: 16FFB9 lbra moderr
2887 FBFB: 33C6 frfound leau a,u
2888 FBFD: 1F21 tfr y,x
2889 FBFF: 3524 puls y,b
2890 FC01: 39 rts
2891 FC02:
2892 FC02: * This is the code for the A command, assemble instructions.
2893 FC02: * Syntax: Aaddr
2894 FC02: 8E0201 asm ldx #linebuf+1
2895 FC05: BDE730 jsr scanhex
2896 FC08: FD029D std addr
2897 FC0B: FC029D asmloop ldd addr
2898 FC0E: BDE6FF jsr outd
2899 FC11: C620 ldb #' '
2900 FC13: 9D03 jsr putchar ;Print address and space.
2901 FC15: 8E0200 ldx #linebuf
2902 FC18: C680 ldb #128
2903 FC1A: 9D06 jsr getline ;Get new line
2904 FC1C: 5D tstb
2905 FC1D: 1027E958 lbeq cmdline ;Exit on empty line.
2906 FC21: 3A abx
2907 FC22: 6F84 clr ,x ;Make line zero terminated.
2908 FC24: 8E0200 ldx #linebuf
2909 FC27: BDF767 jsr asminstr
2910 FC2A: 20DF bra asmloop
2911 FC2C:
2912 FC2C: * Jump table for monitor routines that are usable by other programs.
2913 FC2C: org $ffc0
2914 FFC0: 7EE6F1 jmp outbyte
2915 FFC3: 7EE6FF jmp outd
2916 FFC6: 7EE76B jmp scanbyte
2917 FFC9: 7EE730 jmp scanhex
2918 FFCC: 7EF717 jmp scanfact
2919 FFCF: 7EF767 jmp asminstr
2920 FFD2:
2921 FFD2:
2922 FFD2: * Interrupt vector addresses at top of ROM. Most are vectored through jumps
2923 FFD2: * in RAM.
2924 FFD2: org $fff2
2925 FFF2: 0280 fdb swi3vec
2926 FFF4: 0283 fdb swi2vec
2927 FFF6: 0286 fdb firqvec
2928 FFF8: 0289 fdb irqvec
2929 FFFA: 028C fdb swivec
2930 FFFC: 028F fdb nmivec
2931 FFFE: E400 fdb reset
2932 0000:
2933 0000: end
2934 0 Pass 2 errors.
2935
2936 SYMBOL TABLE
2937 ACC8 02 f882 ACIACTL 00 e000 ACIADAT 00 e001 ACIAIRQ 02 e516
2938 ACIASTA 00 e000 ACK 00 0006 ACKLOOP 02 ed17 ADDCHK 02 ea57
2939 ADDR 02 029d ADECEND 02 fa0e ADECLOOP 02 fa05 ADJDIR 02 f93a
2940 ADJIND 02 f937 ADJOPC 02 f929 AINCEND 02 fa29 AINCLOOP 02 fa20
2941 AMODE 02 02c3 AREGS 02 f368 AREGU 02 f363 ARM 02 e9db
2942 ARM1 02 e9e0 ARM2 02 e9f1 ASM 02 fc02 ASMERR 02 fbba
2943 ASMERRVEC 02 0298 ASMINSTR 02 f767 ASMLOOP 02 fc0b ASMREGTAB 02 f359
2944 ASMTAB 02 f7f0 AUTODEC 02 fa48 AUTOINC 02 fa3e BACKSP 02 e491
2945 BLOCKMOVE 02 e44a BP1 02 ea0b BP2 02 ea17 BPADDR 02 02a1
2946 BPEXIT 02 ea28 BPFULL 02 ea39 BREAK 02 e9f7 BRERR 02 fba8
2947 BRKMSG 02 e60f BRKPOINTS 00 0004 BRMSG 02 e6d6 BS 00 0008
2948 BSCMPEXIT 02 f7c8 BSCMPLOOP 02 f7bcBSCMPLOWER 02 f7d1 BSRCHLOOP 02 f797
2949 BUF0 02 0100 BUF1 02 0180 BUFLEN 00 0080 CAN 00 0018
2950 CASEMASK 00 00df CB2 02 e723 CHECKOUT 02 eb5c CLEARIT 02 ea30
2951 CLRMSG 02 e61e CLVAR 02 e434 CMDLINE 02 e579 CMDTAB 02 e5a1
2952 COMMAPC 02 f66e CONVB 02 e70f CONVEXIT 02 e726 CR 00 000d
2953 DBP1 02 ea41 DBP2 02 ea4c DDEC1 02 f3d9 DDEC2 02 f3de
2954 DDEC3 02 f40c DDEC4 02 f3f5 DDEC5 02 f42a DDEC6 02 f43e
2955 DDEC7 02 f44f DDECFOUND 02 f42e DDECLOOP 02 f3fe DEL 00 007f
2956 DELAY 02 0021 DH1 02 e791 DH2 02 e79e DH3 02 e7b7
2957 DH4 02 e7bf DH5 02 e7c5 DH6 02 e7ad DISADEC1 02 f5dc
2958 DISADEC2 02 f5d8 DISADECA 02 f5de DISADLOOP 02 f5e1 DISADR16 02 f4d9
2959 DISADR8 02 f4e1 DISAILOOP 02 f5fa DISAINC1 02 f5ee DISAINC2 02 f5ea
2960 DISAINCA 02 f5f0 DISARM 02 e9c1 DISARM1 02 e9c6 DISARM2 02 e9d2
2961 DISAX 02 f604 DISBX 02 f60b DISCOMMA 02 f5b5 DISDECODE 02 f3c9
2962 DISDECTAB 02 f458DISDECTAB1 02 f46c DISDIRECT 02 f662 DISDISP 02 f4ac
2963 DISDISPTAB 02 f4bf DISDX 02 f612 DISIDX 02 f599 DISIDX1 02 f5c3
2964 DISIDX2 02 f5cd DISIDXEND 02 f5c2 DISIDXREG 02 f588 DISIDXTAB 02 f672
2965 DISIM16 02 f4d7 DISIM8 02 f4d3 DISINDEX 02 f5b8 DISINDIR 02 f5ba
2966 DISINVAL 02 f619 DISNNPC 02 f65a DISNNX 02 f635 DISNPC 02 f641
2967 DISNPCA 02 f648 DISNX 02 f620 DISNX1 02 f625 DISNXNEG 02 f62e
2968 DISP16 02 e906 DISP8 02 e8f8 DISPBP 02 ea3e DISPREGS 02 e916
2969 DISPUSH 02 f50e DISPUSH1 02 f551 DISPUSH2 02 f54b DISPUSH3 02 f52c
2970 DISPUSH4 02 f53cDISREGNAME 02 f578 DISREL16 02 f4f7 DISREL8 02 f4e9
2971 DISTFR 02 f557 DISTFREND 02 f575DISTFRLOOP 02 f56c DISTFRSUB 02 f567
2972 DLYLOOP 02 e51a DOA1 02 fb17 DOA2 02 fb26 DOADDR 02 fb03
2973 DOAPCREL 02 fb2c DOIMM 02 f9e5 DOINDEX 02 fa53 DOPCREL 02 faba
2974 DOSPECIAL 02 f9fe DOTAB 02 e4d3 DPSETTING 02 02cd DR8A 02 f4ef
2975 DREG1 02 f893 DREG2 02 f8a4 DRNEND 02 f587 DRNLOOP 02 f57c
2976 DUMP 02 e784 ENDIRQ 02 e517 ENDMSG 02 e6e6 ENDREC 02 eab7
2977 ENDREC1 02 eaca ENDSS 02 eb51 ENDVARS 02 02cf ENDVECS 02 e55f
2978 ENT1 02 e7e9 ENT2 02 e7ef ENTASC 02 e82a ENTDONE 02 e83b
2979 ENTER 02 e7de ENTEXIT 02 e842 ENTL2 02 e821 ENTL3 02 e82e
2980 ENTLINE 02 e811 EOT 00 0004 EXPR 02 f6f9 EXPREND 02 f713
2981 EXPREND1 02 f714 EXPRERR 02 fbae EXPRMSG 02 e6af EXPRVEC 02 0295
2982 FHEXLOOP 02 ebcd FILLER 02 02bb FIND 02 eba7 FINDHEX 02 ebc7
2983 FINDREG 02 fbccFINDREGLOOP 02 fbd3 FIRQVEC 02 0286 FRCMPS 02 fbd7
2984 FRCMPS1 02 fbe3 FRFOUND 02 fbfb FRNEXTREG 02 fbf1 FSTRLOOP 02 ebba
2985 FULLMSG 02 e631 GETCHAR 02 0000 GETLINE 02 0006 GETPOLL 02 000f
2986 GETTIMEOUT 02 ec7e GO 02 e88b GT1 02 ec86 GTEXIT 02 ec93
2987 HEX 02 e857 HEX1 02 e86f HEXDIGIT 02 e6e6 HEXEND 02 e881
2988 HEXLOOP 02 e85f IMMBYTE 02 f81a INITACIA 02 e452 INP 02 e845
2989 INTVECTBL 02 e520 INVMMSG 02 e69e INVMNEM 02 f7d6 IRQVEC 02 0289
2990 IXFOUND 02 faed IXREGS 02 f398 JUMP 02 e89a LASTOK 02 002f
2991 LASTREC 02 e654 LASTTERM 02 02ba LAUNCH 02 e895 LBRA 02 f87b
2992 LBRA1 02 f86c LBRANCH 02 f868 LEA 02 f82f LENGTH 02 029f
2993 LF 00 000a LINEBUF 02 0200 LONGINDEX 02 faaa LONGREL 02 fb90
2994 MNCPDONE 02 f78f MNCPEXIT 02 f785 MNCPLOOP 02 f76c MNEMBSR 02 efc9
2995 MNEMBUF 02 02c6 MNEMCP1 02 f780 MNEMFCB 02 f091 MNEMFOUND 02 f7dc
2996 MNEMJSR 02 f0c9 MNEMSIZE 00 0093 MNEMTAB 02 eec1 MNFILLOOP 02 f78a
2997 MODEMSG 02 e6c0 MODERR 02 fbb4 MODETAB 02 f3ac MODETAB2 02 f3bc
2998 MOVE 02 eb6a MVLOOP 02 eb9c NAK 00 0015 NEGOFFS 02 f5ab
2999 NEWLINE 02 e4b6 NMIVEC 02 028f NOCOMMA 02 f98c NOEXPR 02 f764
3000 NOINDIR 02 f958 NOLET 02 f77e NOOP 02 f492 OADIR 02 f8d3
3001 OAIND 02 f8d1 OD1A 02 f48f ODB1 02 f69c ODPA 02 f499
3002 OLDGETC 02 02b4 OLDPC 02 029b OLDPUTC 02 02b6 OLDPUTCR 02 02b8
3003 ONEADDR 02 f8b7 ONEBYTE 02 f812 OPC1 02 02c0 OPCODE 02 02c1
3004 OPCOFFS 02 f39c OPDEC1 02 f48c OPDEC2 02 f493 OPDECIDX 02 f49d
3005 OPDECPB 02 f497 OPERAND 02 02c4 OPSIZE 02 02cb OPSZ1 02 f9aa
3006 OPSZ2 02 f9a8 OPSZ3 02 f9c0 OPSZ4 02 f9c5 OSCR 02 e4f5
3007 OSDLY 02 e518 OSGETC 02 e45a OSGETL 02 e480 OSGETL1 02 e485
3008 OSGETL2 02 e4a5 OSGETL3 02 e4c0 OSGETPOLL 02 e465 OSPUTC 02 e471
3009 OSPUTL 02 e4e4 OSPUTL1 02 e4f2 OSPUTL2 02 e4eb OSVECTBL 02 e53b
3010 OUTBYTE 02 e6f1 OUTCOUNT 02 e502 OUTD 02 e6ffOUTDECBYTE 02 f692
3011 PCRELEND 02 fac8 PCRLONG 02 fb52 POLTRUE 02 e46e POS 02 f702
3012 POSTBYTE 02 02c2 PPLOOP 02 f90f PREBYTE 02 02bf PROG 02 e8b9
3013 PSEUDO 02 f928 PURGE 02 ec99 PURGEIT 02 ed0e PUSHPUL 02 f902
3014 PUTBYTE 02 f80c PUTCHAR 02 0003 PUTCLOOP 02 e473 PUTCOMMA 02 f506
3015 PUTCR 02 000c PUTDOL 02 f502 PUTHASH 02 f4fe PUTLINE 02 0009
3016 PUTSPACE 02 f50a PUTWORD 02 f80f RAMSTART 00 0400 RAMTOP 00 8000
3017 READREC 02 ea82 REGINVAL 02 f395 REGLOOP 02 f515 REGS 02 e95d
3018 REGTAB 02 e9b7 RESET 02 e400 RR1 02 eaa8 RR2 02 eaad
3019 RSTVECS 02 ed31 SAVESP 02 02bd SAVEVECS 02 ed1e SB1 02 e783
3020 SBRANCH 02 f855SCAN2PARMS 02 e753 SCANACIDX 02 f978 SCANBYTE 02 e76b
3021 SCANCHAR2 02 f72d SCANDEC 02 f731 SCANDLOOP 02 f73d SCANEND 02 f9cd
3022 SCANEND2 02 f9e4 SCANEXIT 02 e729 SCANFACT 02 f717 SCANHEX 02 e730
3023 SCANIXREG 02 fad8 SCANLAB 02 f98e SCANOPS 02 f94b SCIDXLOOP 02 fae2
3024 SCLOOP 02 e738 SDEXIT 02 f75d SENDNAK 02 ecb0 SENDREC 02 eaf0
3025 SET3 02 faf6 SET3A 02 fb02 SETREG 02 e96b SETSORG 02 eae2
3026 SHORTIND1 02 fa9cSHORTINDEX 02 fa90 SHORTREL 02 fb6c SKIPSPACE 02 e708
3027 SMSG 02 e642 SOFFS 02 02b2 SOH 00 0001 SORG 02 02b0
3028 SP2 02 e76a SR1 02 e972 SR2 02 e97f SR3 02 e995
3029 SR4 02 e9a5 SRCH1 02 ebf8 SRCH2 02 ebfd SRCH3 02 ec17
3030 SRCHLOOP 02 ebe6 SREC 02 ea65 SRECERR 02 ead5 SS1 02 eb04
3031 SS2 02 eb11 SS3 02 eb3c STAKREGS 02 e55fSTARTBLOCK 02 ecb5
3032 STARTOP 02 f943 STARTSRCH 02 ebdd STEPBP 02 02ad SWI2VEC 02 0283
3033 SWI3VEC 02 0280 SWIVEC 02 028c TAB 00 0009 TEMP 02 0024
3034 TEMP2 02 0026 TEMP3 02 0028 TFREXG 02 f8d9 TIMER 02 002a
3035 TIMERIRQ 02 e50b TRACE 02 e8c5 TRACELOOP 02 e8df TRACEONE 02 e8ce
3036 TRACERET 02 e8ea TWOBYTE 02 f816 UNADISHEX 02 f6cc UNADISSPC 02 f6d9
3037 UNASM 02 f6a2 UNASMLOOP 02 f6b8 UNCERT 02 02cc UNK 02 e5d5
3038 UNKNOWN 02 e5ff UNLAUNCH 02 e56a UNLAUNCH1 02 e571 WAITACK 02 ec43
3039 WAITACK2 02 ec6d WAITNAK 02 ec5b WELCOME 02 e5e2 XABORTIN 02 0018
3040 XABTIN 02 ed8c XABTLOOP 02 ed99 XAMSG 02 e686 XCLOSEIN 02 001b
3041 XCLOSEOUT 02 001e XCLSDONE 02 edc2 XCLSEND 02 edce XCLSIN 02 edcf
3042 XCLSLOOP 02 edba XCLSOUT 02 edac XCOUNT 02 0030 XEQ 02 eea7
3043 XERRHAND 02 ee4b XERROR 02 ee3b XERRVEC 02 0292 XGETC 02 ee12
3044 XGETC1 02 ee25 XGETCTERM 02 ee31 XLOAD 02 ee94 XLODLOOP 02 ee9b
3045 XMCR 02 02bc XMODE 02 0031 XMODEM 02 ee52 XOPENIN 02 0012
3046 XOPENOUT 02 0015 XOPIN 02 ed44 XOPOUT 02 ed67 XOPTS 02 eeac
3047 XPACKNUM 02 002d XPUTC 02 edd9 XPUTC1 02 edf5 XPUTCR 02 edf7
3048 XPUTCR1 02 ee04 XPUTCR2 02 ee0f XR1 02 ecd6 XRCVBUF 02 eca1
3049 XRCVEOT 02 ed13 XRLOOP 02 ece8 XRMSG 02 e671 XSABT 02 ec56
3050 XSBINLOOP 02 ee82 XSENDBUF 02 ec1b XSENDEOT 02 ec68 XSENDINIT 02 ec57
3051 XSLOOP 02 ec30 XSMSG 02 e65f XSOK 02 ec54 XSS 02 ee8d
3052 XSUM 02 002e