Mercurial > hg > Members > kono > os9 > sbc09
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 |