Mercurial > hg > Members > kono > nitros9-code
annotate level1/cmds/asm.asm @ 537:765ff88d3db7
6309 assembler from Curtis Boyle
author | boisy |
---|---|
date | Sun, 13 Oct 2002 21:37:16 +0000 |
parents | 7dea3d77ba0b |
children | 5d025106d1ea |
rev | line source |
---|---|
0 | 1 ******************************************************************** |
537 | 2 * Asm - 6809/6309 Assembler |
3 * | |
4 * ASM V1.6 - Microware version - 6309 instruction assembly by | |
5 * L. Curtis Boyle | |
6 * | |
7 * Obtained by Boisy Pitre from L. Curits Boyle on 10/12/2002 | |
0 | 8 * |
9 * $Id$ | |
10 * | |
11 * Ed. Comments Who YY/MM/DD | |
12 * ------------------------------------------------------------------ | |
200
e9ce43cc215e
Made major changes to headers for consistency and identification
boisy
parents:
0
diff
changeset
|
13 * 6 Made compliant with 1900-2155 BGP 99/05/11 |
0 | 14 |
15 nam Asm | |
537 | 16 ttl 6809/6309 Assembler |
0 | 17 |
18 ifp1 | |
19 use defsfile | |
20 endc | |
21 | |
22 tylg set Prgrm+Objct | |
23 atrv set ReEnt+rev | |
537 | 24 rev set $02 |
25 edition set $06 | |
26 | |
27 mod eom,name,tylg,atrv,asm,size | |
0 | 28 |
537 | 29 * u002B Bit flag meanings: (Default=00110101) |
30 LitLine equ %10000000 Literal line to print | |
31 Comment equ %01000000 Comment field present in source line | |
32 Operand equ %00100000 Operand field present in source line | |
33 Command equ %00010000 Mnemonic command present in source line | |
34 Label equ %00001000 Label field present in source line | |
35 NoObjct equ %00000100 No object code to print | |
36 PrintPC equ %00000001 Print PC flag | |
37 DoNothng equ %00000000 Do nothing (no flags set) | |
0 | 38 |
537 | 39 Numop equ 148 # of opcodes in table (including pseudo-ops) |
40 | |
41 u0000 rmb 2 Ptr to start of current source line | |
0 | 42 u0002 rmb 1 |
43 u0003 rmb 1 | |
44 u0004 rmb 1 | |
45 u0005 rmb 1 | |
46 u0006 rmb 1 | |
47 u0007 rmb 1 | |
48 u0008 rmb 1 | |
49 u0009 rmb 1 | |
50 u000A rmb 1 | |
51 u000B rmb 1 | |
52 u000C rmb 1 | |
53 u000D rmb 1 | |
54 u000E rmb 1 | |
55 u000F rmb 1 | |
56 u0010 rmb 2 | |
57 u0012 rmb 2 | |
58 u0014 rmb 2 | |
59 u0016 rmb 1 | |
60 u0017 rmb 1 | |
537 | 61 u0018 rmb 1 Path number to source file |
0 | 62 u0019 rmb 1 |
537 | 63 u001A rmb 1 Some output path number |
0 | 64 u001B rmb 2 |
65 u001D rmb 1 | |
66 u001E rmb 1 | |
67 u001F rmb 1 | |
68 u0020 rmb 1 | |
69 u0021 rmb 1 | |
70 u0022 rmb 1 | |
71 u0023 rmb 1 | |
72 u0024 rmb 1 | |
73 u0025 rmb 1 | |
74 u0026 rmb 1 | |
75 u0027 rmb 1 | |
76 u0028 rmb 1 | |
77 u0029 rmb 1 | |
78 u002A rmb 1 | |
537 | 79 u002B rmb 1 Bit flags |
0 | 80 u002C rmb 1 |
81 u002D rmb 1 | |
82 u002E rmb 1 | |
537 | 83 u002F rmb 2 Ptr to start of current mnemonic |
84 u0031 rmb 2 Ptr to next field (or operand start) | |
0 | 85 u0033 rmb 1 |
86 u0034 rmb 1 | |
87 u0035 rmb 1 | |
537 | 88 u0036 rmb 1 Page height (default=66) |
89 u0037 rmb 1 Page width (default=80) | |
0 | 90 u0038 rmb 1 |
91 u0039 rmb 1 | |
92 u003A rmb 1 | |
93 u003B rmb 1 | |
94 u003C rmb 1 | |
95 u003D rmb 1 | |
96 u003E rmb 1 | |
97 u003F rmb 1 | |
98 u0040 rmb 1 | |
99 u0041 rmb 1 | |
100 u0042 rmb 1 | |
101 u0043 rmb 1 | |
102 u0044 rmb 1 | |
103 u0045 rmb 1 | |
537 | 104 u0046 rmb 1 # bytes in current instruction |
105 u0047 rmb 1 Current instructions flags/index handler byte | |
106 u0048 rmb 1 | |
0 | 107 u0049 rmb 1 |
537 | 108 u004A rmb 1 MSB of 16 bit # (for addresses & offsets) |
109 u004B rmb 1 LSB of 16 bit # | |
110 u004C rmb 1 Flag for DP($ff), Extended($01) or other($00) modes | |
111 u004D rmb 1 Indirect mode flag (0=no, >0=Yes) | |
112 u004E rmb 1 Indexed mode calc completed flag (0=no) | |
0 | 113 u004F rmb 1 |
114 u0050 rmb 1 | |
115 u0051 rmb 1 | |
116 u0052 rmb 1 | |
117 u0053 rmb 1 | |
118 u0054 rmb 1 | |
119 u0055 rmb 1 | |
120 u0056 rmb 1 | |
121 u0057 rmb 1 | |
122 u0058 rmb 1 | |
123 u0059 rmb 1 | |
124 u005A rmb 1 | |
125 u005B rmb 1 | |
126 u005C rmb 1 | |
127 u005D rmb 1 | |
128 u005E rmb 1 | |
129 u005F rmb 1 | |
130 u0060 rmb 1 | |
537 | 131 * The currently assembled instruction goes here |
132 u0061 rmb 1 Current instruction's pre-byte (see u0046) | |
133 u0062 rmb 1 Current instruction's opcode | |
134 u0063 rmb 1 More bytes as needed by instruction | |
0 | 135 u0064 rmb 1 |
136 u0065 rmb 4 | |
137 u0069 rmb 1 | |
138 u006A rmb 3 | |
139 u006D rmb 2 | |
140 u006F rmb 1 | |
141 u0070 rmb 1 | |
142 u0071 rmb 1 | |
143 u0072 rmb 1 | |
144 u0073 rmb 2 | |
145 u0075 rmb 11 | |
146 u0080 rmb 1 | |
147 u0081 rmb 2 | |
148 u0083 rmb 2 | |
149 u0085 rmb 2 | |
150 u0087 rmb 1 | |
151 u0088 rmb 2 | |
152 u008A rmb 2 | |
153 u008C rmb 1 | |
154 u008D rmb 1 | |
155 u008E rmb 1 | |
156 u008F rmb 8 | |
157 u0097 rmb 15 | |
158 u00A6 rmb 1 | |
159 u00A7 rmb 2 | |
160 u00A9 rmb 6 | |
161 u00AF rmb 7 | |
162 u00B6 rmb 11 | |
163 u00C1 rmb 1 | |
164 u00C2 rmb 1 | |
165 u00C3 rmb 3 | |
166 u00C6 rmb 8 | |
167 u00CE rmb 1 | |
168 u00CF rmb 8 | |
169 u00D7 rmb 10 | |
170 u00E1 rmb 7 | |
171 u00E8 rmb 4 | |
172 u00EC rmb 12 | |
537 | 173 u00F8 rmb 3848 Main buffer area |
0 | 174 size equ . |
537 | 175 name equ * |
176 fcs /Asm/ | |
0 | 177 fcb edition |
537 | 178 asm tfr u,d |
0 | 179 addd #$01C0 |
180 std <u0014 | |
181 std <u0016 | |
182 addd #$0009 | |
537 | 183 std <u0000 Start of current line in source ($1C9) |
0 | 184 addd #$0051 |
185 std <u0002 | |
186 addd #$0085 | |
187 std <u0004 | |
188 addd #$0092 | |
189 std <u0006 | |
190 std <u001F | |
191 std <u0008 | |
192 addd #$0050 | |
193 std <u000A | |
194 addd #$0028 | |
195 std <u000E | |
537 | 196 adda #$01 |
0 | 197 std <u0010 |
198 addd #$0034 | |
199 std <u001D | |
200 leau -$01,y | |
201 stu <u0012 | |
202 lds <u0014 | |
203 clra | |
204 ldb #$01 | |
205 sta <u0059 | |
206 sta <u005B | |
207 sta <u005E | |
208 sta <u005D | |
209 stb <u005C | |
210 sta <u0058 | |
211 sta <u005A | |
212 stb <u005F | |
213 sta <u0060 | |
214 sta <u003E | |
215 sta <u0018 | |
216 sta <u0019 | |
217 stb <u001A | |
218 ldb #$FF | |
219 stb <u0056 | |
220 sta <u0057 | |
537 | 221 ldb #66 Default page height |
0 | 222 stb <u0036 |
537 | 223 ldb #80 Default page width |
0 | 224 stb <u0037 |
225 lbsr L1696 | |
226 lda <u0056 | |
227 bmi L0081 | |
228 inc <u0057 | |
229 L0081 ldx <u0008 | |
230 clr ,x | |
231 ldx <u000A | |
232 clr ,x | |
233 ldx <u0010 | |
234 L008B clr ,x+ | |
235 cmpx <u0012 | |
236 bls L008B | |
237 ldb <u005D | |
238 beq L0099 | |
239 dec <u003E | |
240 bra L00A0 | |
241 L0099 bsr L00A5 | |
242 lbsr L1607 | |
243 inc <u003E | |
244 L00A0 bsr L00A5 | |
245 lbra L159F | |
246 L00A5 bsr L00B1 | |
247 L00A7 lbsr L1537 | |
248 bcc L00AD | |
249 rts | |
250 L00AD bsr L00D5 | |
251 bra L00A7 | |
252 L00B1 clra | |
253 clrb | |
254 std <u0028 | |
255 std <u0022 | |
256 std <u0026 | |
257 std <u0024 | |
258 std <u0040 | |
259 std <u0042 | |
260 stb <u003F | |
261 stb <u0055 | |
262 stb <u0054 | |
263 incb | |
264 std <u003A | |
265 std <u0038 | |
266 ldd <u000E | |
267 std <u001B | |
268 lbsr L1360 | |
269 lbsr L141A | |
270 rts | |
271 L00D5 clra | |
272 clrb | |
273 std <u004A | |
537 | 274 std <u0061 Clear prefix opcode & opcode bytes |
0 | 275 std <u0063 |
276 sta <u0065 | |
537 | 277 sta <u0046 Clear # bytes for current instruction |
0 | 278 sta <u002A |
279 sta <u0021 | |
537 | 280 sta <u004C Default memory addressing mode to indexed |
0 | 281 sta <u002C |
282 sta <u004F | |
283 sta <u004E | |
284 sta <u004D | |
537 | 285 lda #Operand+Command+NoObjct+PrintPC |
286 sta <u002B Initialize flags | |
0 | 287 ldd <u0040 |
288 std <u0044 | |
537 | 289 * Parse for label field |
290 ldx <u0000 Get ptr to start of line | |
291 lda ,x Get char | |
292 cmpa #$0D Blank line? | |
293 beq L0136 Yes, go ahead | |
294 cmpa #'* Comment line? | |
295 beq L0136 Ditto | |
296 cmpa #$20 Space? (No label field) | |
297 beq L0125 Yes, go somewhere else | |
298 * Label field found | |
299 ldb <u002B Set Label Present flag | |
300 orb #Label | |
0 | 301 stb <u002B |
302 lbsr L0368 | |
303 bcc L0119 | |
304 ldb #$01 | |
305 lbsr L02FA | |
306 bra L0125 | |
307 L0119 tst <u0054 | |
308 bne L0125 | |
309 lbsr L0F4A | |
310 bcc L0125 | |
311 lbsr L02FA | |
537 | 312 * Check for mnemonic field |
313 L0125 lbsr L1164 Find start of next field & get first char | |
314 cmpa #$0D End of line yet? | |
315 bne L0141 No, have ptr to mnemonic field | |
316 lda <u002B Get flags | |
317 bita #Label Was a label present? | |
318 beq L0136 No, print whole source line as literal comment | |
319 lda #Label+PrintPC Set Label & Print PC flags (label on line by | |
320 bra L0138 itself) | |
321 | |
322 L0136 lda #LitLine Whole line is comment flag | |
323 L0138 sta <u002B Save flags | |
0 | 324 lda <u0054 |
325 bne L018E | |
326 lbra L01F2 | |
537 | 327 * Process mnemonic field |
328 L0141 stx <u002F Save ptr to start of current mnemonic | |
329 L0143 lda ,x+ Get char | |
330 cmpa #$0D CR? | |
331 beq L0150 Yes, done line | |
332 cmpa #$20 Space? | |
333 bne L0143 No, continue getting chars | |
334 lbsr L1164 Find start of next field | |
335 L0150 stx <u0031 Save ptr to possible operand field | |
336 ldx <u002F Pointer to start of current op. in source code | |
337 ldb #Numop # of instructions in main table | |
338 leay >L03B8,pc Point to main opcode/pseudo-op table | |
339 lbsr L0344 Go point to it's opcode/flag bytes | |
340 bcc L0172 Legal opcode, go process | |
341 * Unknown mnemonic | |
342 L015F ldb #$02 Internal error #? | |
343 lbsr L02FA Print error message | |
344 ldb #$03 Set # bytes of current instruction to 3??? | |
0 | 345 stb <u0046 |
346 lda <u002B | |
537 | 347 anda #^Operand Shut off operand present flag |
0 | 348 sta <u002B |
537 | 349 ldx <u0031 Get ptr to next field & skip ahead |
0 | 350 bra L01C4 |
537 | 351 * Found mnemonic |
352 * Entry: Y=Ptr to opcode/flag bytes | |
353 L0172 lda <u0054 # of nested loop/if constructs??? | |
354 beq L0195 If none, skip ahead??? | |
355 ldb $01,y Get flag bytes | |
356 andb #%00001111 Only want index handler # | |
357 cmpb #$0D Pseudo op IFxx? | |
358 bne L0181 No, check next | |
359 inca Inc nested loop counter? | |
360 bra L018C Go save it & continue | |
361 L0181 cmpb #$0E Pseudo Op ELSE/ENDC? | |
362 bne L018E No, check next | |
363 deca Dec nested loop counter? | |
364 beq L0195 If down to zero, skip ahead | |
365 ldb ,y Get opcode byte | |
366 bne L018E If ELSE, skip ahead | |
367 L018C sta <u0054 Save updated nested loop counter? | |
368 L018E inc <u0039 ??? | |
0 | 369 bne L0194 |
370 inc <u0038 | |
371 L0194 rts | |
537 | 372 |
373 * Calculate pre-bytes if needed (or known yet in 6309's case) | |
374 L0195 ldd ,y Get opcode/flag bytes | |
375 sta <u0062 Save opcode | |
376 stb <u0047 Save flags/index handler nibbles | |
377 lda #$10 Preload $10 prefix | |
378 bitb #$10 Does this opcode require it? | |
379 bne L01A7 Yes, go store before normal opcode byte | |
380 lda #$11 Preload $11 prefix | |
381 bitb #$20 Does this opcode require it? | |
382 beq L01AB No prefix needed, skip ahead | |
383 L01A7 sta <u0061 Save prebyte | |
384 inc <u0046 Increase byte count of current instruction | |
385 | |
386 * Call proper index handler | |
387 L01AB leay >L0780,pc Point to 'opcode type' index | |
388 andb #%00001111 Mask out non-index information | |
389 lslb adjust for 2 bytes per offset entry | |
390 ldd b,y Get offset | |
391 jsr d,y Execute routine | |
392 lda <u002B Operand present flag set? | |
393 bita #Operand | |
394 beq L01C4 No, skip ahead | |
395 lda ,x Get next char in source code | |
396 clr ,x+ Clear that char in source line | |
397 cmpa #$0D Was it a CR? | |
398 beq L01D3 Yes, skip ahead | |
399 L01C4 lbsr L1164 Find next field | |
400 cmpa #$0D End of line? | |
401 beq L01D3 Yes, skip ahead | |
402 ldb <u002B Get flags | |
403 beq L01D3 If do nothing, skip ahead | |
404 orb #Comment Set Comment field preseent flag | |
0 | 405 stb <u002B |
537 | 406 L01D3 ldb <u005D One of the command line option flags??? |
0 | 407 beq L01DB |
408 ldb <u0021 | |
409 bne L01F2 | |
410 L01DB ldd <u0040 | |
411 addb <u0046 | |
412 adca #$00 | |
413 std <u0040 | |
414 bra L01F2 | |
415 L01E5 ldd #$2084 | |
416 ldx <u0004 | |
417 L01EA sta ,x+ | |
418 decb | |
419 bne L01EA | |
420 L01EF ldx <u0004 | |
421 rts | |
537 | 422 |
0 | 423 L01F2 ldb <u003E |
424 beq L01EF | |
425 ldb <u002B | |
426 beq L01EF | |
427 bsr L01E5 | |
428 tst <u0060 | |
429 bne L0205 | |
430 ldd <u0038 | |
431 lbsr L1084 | |
432 L0205 ldb <u002B | |
433 bitb #$80 | |
434 beq L0213 | |
435 ldb #$0D | |
436 ldy <u0000 | |
437 lbra L02AB | |
438 L0213 bitb #$01 | |
439 beq L0240 | |
440 lda #$45 | |
441 ldb <u0021 | |
442 bne L022F | |
443 lda #$44 | |
444 ldb <u002C | |
445 bne L022F | |
446 lda #$57 | |
447 ldb <u004F | |
448 beq L0236 | |
449 inc <u0023 | |
450 bne L022F | |
451 inc <u0022 | |
452 L022F ldb #$06 | |
453 lbsr L02E2 | |
454 sta ,x | |
455 L0236 ldb #$08 | |
456 lbsr L02E2 | |
457 ldd <u0044 | |
458 lbsr L1057 | |
459 L0240 ldb <u002B | |
460 bitb #$04 | |
461 beq L0272 | |
462 ldb <u0046 | |
463 beq L0272 | |
464 ldb #$61 | |
465 tfr dp,a | |
466 tfr d,u | |
467 ldb ,u+ | |
468 bne L0256 | |
469 L0254 ldb ,u+ | |
470 L0256 pshs b | |
471 lbsr L106B | |
472 puls a | |
473 ldb <u005D | |
474 beq L0265 | |
475 ldb <u0021 | |
476 bne L026E | |
477 L0265 lbsr L130D | |
478 inc <u0025 | |
479 bne L026E | |
480 inc <u0024 | |
481 L026E dec <u0046 | |
482 bne L0254 | |
483 L0272 ldy <u0000 | |
484 ldb <u002B | |
485 bitb #$08 | |
486 beq L0281 | |
487 ldb #$18 | |
488 bsr L02E2 | |
489 bsr L02C9 | |
490 L0281 ldb <u002B | |
491 bitb #$10 | |
492 beq L028F | |
493 ldb #$21 | |
494 bsr L02E2 | |
495 bsr L02C9 | |
496 leay $01,y | |
497 L028F ldb <u002B | |
498 bitb #$20 | |
499 beq L02A3 | |
500 ldb #$27 | |
501 bsr L02E2 | |
502 ldy <u0031 | |
503 lbsr L11BD | |
504 lda #$20 | |
505 sta ,x+ | |
506 L02A3 ldb <u002B | |
507 bitb #$40 | |
508 beq L02B7 | |
509 ldb #$32 | |
510 L02AB bsr L02E2 | |
511 L02AD lda ,y+ | |
512 cmpa #$0D | |
513 beq L02B7 | |
514 sta ,x+ | |
515 bra L02AD | |
516 L02B7 ldb <u002B | |
517 andb #$BF | |
518 cmpb #$04 | |
519 beq L02C8 | |
520 lbsr L1370 | |
521 inc <u0039 | |
522 bne L02C8 | |
523 inc <u0038 | |
524 L02C8 rts | |
525 L02C9 lda ,y+ | |
526 cmpa #$20 | |
527 beq L02C9 | |
528 L02CF cmpa #$0D | |
529 beq L02DF | |
530 cmpx <u001F | |
531 bcc L02D9 | |
532 sta ,x+ | |
533 L02D9 lda ,y+ | |
534 cmpa #$20 | |
535 bne L02CF | |
536 L02DF leay -$01,y | |
537 rts | |
538 L02E2 pshs u | |
539 tst <u0060 | |
540 beq L02EC | |
541 leax $01,x | |
542 bra L02F8 | |
543 L02EC ldu <u0004 | |
544 leau b,u | |
545 pshs u | |
546 cmpx ,s++ | |
547 bcc L02F8 | |
548 tfr u,x | |
549 L02F8 puls pc,u | |
537 | 550 |
551 * Error printing routine | |
552 * Entry: B=Internal error # (table entry #) | |
553 L02FA pshs u,y,x,d Preserve regs | |
0 | 554 tst <u005C |
555 beq L0325 | |
537 | 556 leay >L061C,pc Point to '***** Error' string |
0 | 557 ldx <u0004 |
537 | 558 lbsr L11BD Go print it |
559 clra Table offset is B-1 | |
0 | 560 decb |
537 | 561 lslb Adjust for 2 byte entries |
562 leay >L062A,pc Point to some table | |
563 ldd d,y Get 2 bytes @ offset D | |
564 leay d,y Point to Y to offset | |
565 lbsr L11BD Go print actual error message | |
0 | 566 ldb $01,s |
567 cmpb #$18 | |
568 bne L0322 | |
569 ldy $02,s | |
570 bsr L033D | |
571 L0322 lbsr L1368 | |
572 L0325 inc <u0021 | |
573 inc <u0029 | |
574 bne L032D | |
575 inc <u0028 | |
537 | 576 L032D puls pc,u,y,x,d Restore regs & return |
0 | 577 lbsr L01E5 |
578 ldb #$18 | |
579 bsr L02E2 | |
580 ldy <u0000 | |
581 bra L033D | |
537 | 582 |
583 L033B sta ,x+ Copy string up until CR & return | |
0 | 584 L033D lda ,y+ |
585 cmpa #$0D | |
586 bne L033B | |
587 rts | |
537 | 588 * Find opcode match |
589 * Entry: Y=Table ptr to look in for match | |
590 * X=Ptr to part of source we are currently checking | |
591 * B=# opcodes in current table | |
592 * Exit: Carry set if no matching mnemonic found | |
593 * Carry clear & Y is ptr to opcode & flag bytes is match IS found | |
594 L0344 pshs x,b Preserve source code ptr & # opcodes in table | |
595 L0346 lda ,y+ Get byte from table | |
596 bmi L035E If high bit set, skip ahead | |
597 eora ,x+ ??? | |
598 anda #$DF Uppercase conversion | |
599 beq L0346 If matches, keep doing until last character | |
600 L0350 lda ,y+ Doesn't match, search for end of current entry | |
0 | 601 bpl L0350 |
537 | 602 L0354 leay $02,y Skip opcode & flag bytes too |
603 ldx $01,s Reset source code ptr to start of instruction | |
604 decb Dec # opcodes counter | |
605 bne L0346 Check until all are done | |
606 comb All done, illegal opcode | |
607 puls pc,x,b Exit with error flag set | |
608 * Matches so far, on last byte of text mnemonic | |
609 L035E eora ,x+ ??? | |
610 anda #$5F Mask to uppercase & get rid of high bit | |
611 bne L0354 Doesn't match, check next | |
612 leas $03,s Eat stack | |
613 clrb No error & return | |
0 | 614 rts |
537 | 615 |
0 | 616 L0368 lbsr L1164 |
617 bsr L03A0 | |
618 bcs L03B7 | |
619 pshs u,y | |
620 ldu <u0016 | |
537 | 621 ldb #$08 Max # chars in label? |
622 leax 1,x | |
0 | 623 bra L0393 |
537 | 624 |
625 * Copy label into label table (only use most significiant 8 chars)? | |
626 L0379 lda ,x+ Get char | |
627 bsr L03A0 Check text chars | |
628 bcc L0393 Found one, skip special parsing | |
629 cmpa #'9 Higher than a 9? | |
630 bhi L039A Yes, skip ahead | |
631 cmpa #'0 Is it a number? | |
632 bhs L0393 Yes, go process | |
633 cmpa #'. Is it a period? | |
634 beq L0393 Yes, go process | |
635 cmpa #'$ Is it a dollar sign? | |
636 beq L0393 Yes, go process | |
637 cmpa #'_ Is it an underscore? | |
638 bne L039A No, skip ahead | |
639 * A=numeric, period, dollar sign or underscore | |
640 L0393 sta ,u+ Store character in label index | |
641 decb Do all 8 chars | |
0 | 642 bne L0379 |
537 | 643 bra L039C Skip ahead |
644 L039A leax -1,x | |
645 L039C clr ,u+ Append a NUL | |
646 puls pc,u,y Restore regs & return | |
647 | |
648 L03A0 cmpa #'A Uppercase A? | |
649 blo L03B5 Lower, return | |
650 cmpa #'Z If higher than uppercase Z, check for lower | |
0 | 651 bhi L03AD |
537 | 652 L03A8 anda #$5F Force to uppercase (redundant if already upper) |
653 andcc #$FE Clear carry (found text byte) & return | |
0 | 654 rts |
537 | 655 L03AD cmpa #'a If between 'Z' & 'a', we didn't find text char |
656 blo L03B5 | |
657 cmpa #'z If found lowercase text, convert to upper | |
0 | 658 bls L03A8 |
537 | 659 L03B5 orcc #$01 Non-alphabetic, set carry & return |
0 | 660 L03B7 rts |
537 | 661 * Opcode & Pseudo Opcode Table |
662 * Mnemonic words are high bit terminated | |
663 * First numeric byte is the base opcode (before addressing modes considered) | |
664 * 2nd is flags: | |
665 * Least significiant 4 bits = index into handler table | |
666 * 0= LBRA & LBSR (non comparitive long branches/no pre-byte) | |
667 * 1= Immediate (no register options) ex. ORCC | |
668 * 2= 16 bit register commands | |
669 * 3= 8 bit register commands | |
670 * 4= CLR, etc. Inherent (A,B,D,E,F,W all supported) | |
671 * 5= 'Fixed' (register not negotiable) inherent commands | |
672 * 6= LEAx - Indexed only | |
673 * 7= Register to register (TFR,EXG) (now patched for dual size 0 register) | |
674 * 8= | |
675 * 9= 16 bit Relative comparitive branches setup flag | |
676 * A= 8 bit Relative comparitive branches | |
677 * B= | |
678 * C= Pseudo op | |
679 * D= Pseudo op conditionals (IFxx) | |
680 * E= Pseudo op (ELSE & ENDC) | |
681 * F= UNUSED | |
682 * Most significiant 4 bits | |
683 * %00010000 : $10 prefix byte always needed | |
684 * %00100000 : $11 prefix byte always needed | |
685 * %01000000 : Immediate mode illegal | |
686 * %10000000 : Default to extended mode | |
687 | |
0 | 688 L03B8 fcs "ORG" |
537 | 689 fcb $00,$0C |
0 | 690 fcs "ENDC" |
537 | 691 fcb $00,$0E |
692 * Long branches without prebyte | |
0 | 693 fcs "LBRA" |
537 | 694 fcb $16,$00 |
0 | 695 fcs "LBSR" |
537 | 696 fcb $17,$00 |
697 * Immediate with no options for register names | |
0 | 698 fcs "ORCC" |
537 | 699 fcb $1A,$01 |
0 | 700 fcs "ANDCC" |
537 | 701 fcb $1C,$01 |
0 | 702 fcs "CWAI" |
537 | 703 fcb $3C,$01 |
704 fcs "LDMD" | |
705 fcb $3d,$21 | |
706 fcs "BITMD" | |
707 fcb $3c,$21 | |
708 * Register to register commands (need to be here since ADD would match too | |
709 * early) | |
710 fcs "ADDR" | |
711 fcb $30,$17 | |
712 fcs "ADCR" | |
713 fcb $31,$17 | |
714 fcs "SUBR" | |
715 fcb $32,$17 | |
716 fcs "SBCR" | |
717 fcb $33,$17 | |
718 fcs "ANDR" | |
719 fcb $34,$17 | |
720 fcs "ORR" | |
721 fcb $35,$17 | |
722 fcs "EORR" | |
723 fcb $36,$17 | |
724 fcs "CMPR" | |
725 fcb $37,$17 | |
726 | |
727 * 16 bit register commands | |
0 | 728 fcs "ADDD" |
537 | 729 fcb $C3,$02 |
0 | 730 fcs "SUBD" |
537 | 731 fcb $83,$02 |
0 | 732 fcs "LDD" |
537 | 733 fcb $CC,$02 |
0 | 734 fcs "LDX" |
537 | 735 fcb $8E,$02 |
0 | 736 fcs "LDU" |
537 | 737 fcb $CE,$02 |
0 | 738 fcs "CMPX" |
537 | 739 fcb $8C,$02 |
0 | 740 fcs "JSR" |
537 | 741 fcb $8D,$40+$02 Immediate mode not allowed |
0 | 742 fcs "STD" |
537 | 743 fcb $CD,$42 |
0 | 744 fcs "STX" |
537 | 745 fcb $8F,$42 |
0 | 746 fcs "STU" |
537 | 747 fcb $CF,$42 |
0 | 748 fcs "CMPU" |
537 | 749 fcb $83,$22 |
0 | 750 fcs "CMPS" |
537 | 751 fcb $8C,$22 |
0 | 752 fcs "CMPD" |
537 | 753 fcb $83,$12 |
0 | 754 fcs "CMPY" |
537 | 755 fcb $8C,$12 |
0 | 756 fcs "LDY" |
537 | 757 fcb $8E,$12 |
0 | 758 fcs "LDS" |
537 | 759 fcb $CE,$12 |
0 | 760 fcs "STY" |
537 | 761 fcb $8F,$52 |
0 | 762 fcs "STS" |
537 | 763 fcb $CF,$52 |
764 * 6309 additions here | |
765 fcs "SUBW" | |
766 fcb $80,$12 | |
767 fcs "CMPW" | |
768 fcb $81,$12 | |
769 fcs "SBCD" | |
770 fcb $82,$12 | |
771 fcs "ANDD" | |
772 fcb $84,$12 | |
773 fcs "BITD" | |
774 fcb $85,$12 | |
775 fcs "LDW" | |
776 fcb $86,$12 | |
777 fcs "STW" | |
778 fcb $87,$52 Immediate mode illegal | |
779 fcs "EORD" | |
780 fcb $88,$12 | |
781 fcs "ADCD" | |
782 fcb $89,$12 | |
783 fcs "ORD" | |
784 fcb $8A,$12 | |
785 fcs "ADDW" | |
786 fcb $8B,$12 | |
787 fcs "DIVQ" | |
788 fcb $8E,$22 | |
789 fcs "MULD" | |
790 fcb $8F,$22 | |
791 fcs "STQ" | |
792 fcb $CD,$52 Immediate mode illegal | |
793 fcs "LDQ" | |
794 fcb $CC,$12 Immediate needs new routine | |
795 * 8 bit register commands (handles A,B,E,F) | |
0 | 796 fcs "ADD" |
537 | 797 fcb $8B,$03 |
0 | 798 fcs "CMP" |
537 | 799 fcb $81,$03 |
0 | 800 fcs "SUB" |
537 | 801 fcb $80,$03 |
0 | 802 fcs "SBC" |
537 | 803 fcb $82,$03 |
0 | 804 fcs "AND" |
537 | 805 fcb $84,$03 |
0 | 806 fcs "BIT" |
537 | 807 fcb $85,$03 |
0 | 808 fcs "LD" |
537 | 809 fcb $86,$03 |
0 | 810 fcs "ST" |
537 | 811 fcb $87,$43 Immediate mode not allowed |
0 | 812 fcs "EOR" |
537 | 813 fcb $88,$03 |
0 | 814 fcs "ADC" |
537 | 815 fcb $89,$03 |
0 | 816 fcs "OR" |
537 | 817 fcb $8A,$03 |
818 fcs "DIVD" | |
819 fcb $8D,$23 | |
820 * Inherent register commands (now handles A,B,E,F,D & W) | |
0 | 821 fcs "NEG" |
537 | 822 fcb $00,$04 |
0 | 823 fcs "COM" |
537 | 824 fcb $03,$04 |
0 | 825 fcs "LSR" |
537 | 826 fcb $04,$04 |
0 | 827 fcs "ROR" |
537 | 828 fcb $06,$04 |
0 | 829 fcs "ASR" |
537 | 830 fcb $07,$04 |
0 | 831 fcs "LSL" |
537 | 832 fcb $08,$04 |
0 | 833 fcs "ASL" |
537 | 834 fcb $08,$04 |
0 | 835 fcs "ROL" |
537 | 836 fcb $09,$04 |
0 | 837 fcs "DEC" |
537 | 838 fcb $0A,$04 |
0 | 839 fcs "INC" |
537 | 840 fcb $0C,$04 |
0 | 841 fcs "TST" |
537 | 842 fcb $0D,$04 |
0 | 843 fcs "JMP" |
537 | 844 fcb $0E,$40+$04 |
0 | 845 fcs "CLR" |
537 | 846 fcb $0F,$04 |
847 * "Fixed" inherent commands (no options for register names) | |
848 * Single, unique opcode | |
0 | 849 fcs "RTS" |
537 | 850 fcb $39,$05 |
0 | 851 fcs "MUL" |
537 | 852 fcb $3D,$05 |
0 | 853 fcs "NOP" |
537 | 854 fcb $12,$05 |
0 | 855 fcs "SYNC" |
537 | 856 fcb $13,$05 |
0 | 857 fcs "DAA" |
537 | 858 fcb $19,$05 |
859 fcs "SEXW" | |
860 fcb $14,$05 | |
0 | 861 fcs "SEX" |
537 | 862 fcb $1D,$05 |
0 | 863 fcs "ABX" |
537 | 864 fcb $3A,$05 |
0 | 865 fcs "RTI" |
537 | 866 fcb $3B,$05 |
0 | 867 fcs "SWI2" |
537 | 868 fcb $3F,$15 |
0 | 869 fcs "SWI3" |
537 | 870 fcb $3F,$25 |
0 | 871 fcs "SWI" |
537 | 872 fcb $3F,$05 |
873 fcs "PSHSW" | |
874 fcb $38,$15 | |
875 fcs "PULSW" | |
876 fcb $39,$15 | |
877 fcs "PSHUW" | |
878 fcb $3A,$15 | |
879 fcs "PULUW" | |
880 fcb $3B,$15 | |
881 * Load effective address: Indexing mode ONLY | |
0 | 882 fcs "LEAX" |
537 | 883 fcb $30,$06 |
0 | 884 fcs "LEAY" |
537 | 885 fcb $31,$06 |
0 | 886 fcs "LEAS" |
537 | 887 fcb $32,$06 |
0 | 888 fcs "LEAU" |
537 | 889 fcb $33,$06 |
890 * Register to register | |
0 | 891 fcs "TFR" |
537 | 892 fcb $1F,$07 |
0 | 893 fcs "EXG" |
537 | 894 fcb $1E,$07 |
895 fcs "TFM" | |
896 fcb $38,$27 Prebyte of $11 | |
897 * Stack push/pull | |
0 | 898 fcs "PSHS" |
537 | 899 fcb $34,$08 |
0 | 900 fcs "PULS" |
537 | 901 fcb $35,$08 |
0 | 902 fcs "PSHU" |
537 | 903 fcb $36,$08 |
0 | 904 fcs "PULU" |
537 | 905 fcb $37,$08 |
906 * Normal long branches (except LBRA & LBSR) - probably sets flag & then | |
907 * carries on through short branch table below | |
908 fcs "LB" for long branches? | |
909 fcb $00,$19 | |
910 | |
911 * Short branches | |
0 | 912 L0530 fcs "BSR" |
537 | 913 fcb $8D,$0A |
0 | 914 fcs "BRA" |
537 | 915 fcb $20,$0A |
0 | 916 fcs "BRN" |
537 | 917 fcb $21,$0A |
0 | 918 fcs "BHI" |
537 | 919 fcb $22,$0A |
0 | 920 fcs "BLS" |
537 | 921 fcb $23,$0A |
0 | 922 fcs "BHS" |
537 | 923 fcb $24,$0A |
0 | 924 fcs "BCC" |
537 | 925 fcb $24,$0A |
0 | 926 fcs "BLO" |
537 | 927 fcb $25,$0A |
0 | 928 fcs "BCS" |
537 | 929 fcb $25,$0A |
0 | 930 fcs "BNE" |
537 | 931 fcb $26,$0A |
0 | 932 fcs "BEQ" |
537 | 933 fcb $27,$0A |
0 | 934 fcs "BVC" |
537 | 935 fcb $28,$0A |
0 | 936 fcs "BVS" |
537 | 937 fcb $29,$0A |
0 | 938 fcs "BPL" |
537 | 939 fcb $2A,$0A |
0 | 940 fcs "BMI" |
537 | 941 fcb $2B,$0A |
0 | 942 fcs "BGE" |
537 | 943 fcb $2C,$0A |
0 | 944 fcs "BLT" |
537 | 945 fcb $2D,$0A |
0 | 946 fcs "BGT" |
537 | 947 fcb $2E,$0A |
0 | 948 fcs "BLE" |
537 | 949 fcb $2F,$0A |
950 | |
951 * Pseudo ops | |
0 | 952 fcs "RMB" |
537 | 953 fcb $00,$0B |
0 | 954 fcs "FCC" |
537 | 955 fcb $01,$0B |
0 | 956 fcs "FDB" |
537 | 957 fcb $02,$0B |
0 | 958 fcs "FCS" |
537 | 959 fcb $03,$0B |
0 | 960 fcs "FCB" |
537 | 961 fcb $04,$0B |
0 | 962 fcs "EQU" |
537 | 963 fcb $05,$0B |
0 | 964 fcs "MOD" |
537 | 965 fcb $06,$0B |
0 | 966 fcs "EMOD" |
537 | 967 fcb $07,$0B |
0 | 968 fcs "SETDP" |
537 | 969 fcb $07,$0C |
0 | 970 fcs "SET" |
537 | 971 fcb $08,$0B |
0 | 972 fcs "OS9" |
537 | 973 fcb $09,$0B |
0 | 974 fcs "END" |
537 | 975 fcb $01,$0C |
0 | 976 fcs "NAM" |
537 | 977 fcb $02,$0C |
0 | 978 fcs "OPT" |
537 | 979 fcb $03,$0C |
0 | 980 fcs "TTL" |
537 | 981 fcb $04,$0C |
0 | 982 fcs "PAG" |
537 | 983 fcb $05,$0C |
0 | 984 fcs "SPC" |
537 | 985 fcb $06,$0C |
0 | 986 fcs "USE" |
537 | 987 fcb $08,$0C |
988 * Conditional assembly switches | |
0 | 989 fcs "IFEQ" |
537 | 990 fcb $00,$0D |
0 | 991 fcs "IFNE" |
537 | 992 fcb $01,$0D |
0 | 993 fcs "IFLT" |
537 | 994 fcb $02,$0D |
0 | 995 fcs "IFLE" |
537 | 996 fcb $03,$0D |
0 | 997 fcs "IFGE" |
537 | 998 fcb $04,$0D |
0 | 999 fcs "IFGT" |
537 | 1000 fcb $05,$0D |
0 | 1001 fcs "IFP1" |
537 | 1002 fcb $06,$0D |
0 | 1003 fcs "ELSE" |
537 | 1004 fcb $01,$0E |
1005 | |
1006 L061C fcc '***** Error: ' | |
0 | 1007 fcb $00 |
1008 | |
537 | 1009 * Pointers to error messages table |
1010 L062A fdb L065F-L062A Point to 'bad label' | |
1011 fdb L0669-L062A Point to 'bad instr' | |
1012 fdb L0673-L062A Point to 'in number' | |
1013 fdb L067D-L062A Point to 'div by 0' | |
1014 fdb L0686-L062A Point to ' ' | |
1015 fdb L0688-L062A Point to 'expr syntax' | |
1016 fdb L0694-L062A Point to 'parens' | |
1017 fdb L069B-L062A Point to 'redefined name' | |
1018 fdb L06AA-L062A Point to 'undefined name' | |
1019 fdb L06B9-L062A Point to 'phasing' | |
1020 fdb L06C1-L062A Point to 'symbol table full' | |
1021 fdb L06D3-L062A Point to 'address mode' | |
1022 fdb L06E0-L062A Point to 'out of range' | |
1023 fdb L06ED-L062A Point to 'result>255' | |
1024 fdb L06F8-L062A Point to 'reg name' | |
1025 fdb L0701-L062A Point to 'reg sizes' | |
1026 fdb L070B-L062A Point to 'input path' | |
1027 fdb L0716-L062A Point to 'object path' | |
1028 fdb L0722-L062A Point to 'index reg' | |
1029 fdb L072C-L062A Point to '] missing' | |
1030 fdb L0736-L062A Point to 'needs label' | |
1031 fdb L0742-L062A Point to 'opt list' | |
1032 fdb L074B-L062A Point to 'const def' | |
1033 fdb L0755-L062A Point to 'can't open' | |
1034 fdb L0761-L062A Point to 'label not allowed' | |
1035 fdb L0773-L062A Point to 'cond nesting' | |
1036 L065E fcb $00 | |
1037 L065F fcc 'bad label' | |
1038 L0668 fcb $00 | |
1039 L0669 fcc 'bad instr' | |
1040 L0672 fcb $00 | |
1041 L0673 fcc 'in number' | |
1042 L067C fcb $00 | |
1043 L067D fcc 'div by 0' | |
1044 L0685 fcb $00 | |
1045 L0686 fcc ' ' | |
1046 L0687 fcb $00 | |
1047 L0688 fcc 'expr syntax' | |
1048 L0693 fcb $00 | |
1049 L0694 fcc 'parens' | |
1050 L069A fcb $00 | |
1051 L069B fcc 'redefined name' | |
1052 L06A9 fcb $00 | |
1053 L06AA fcc 'undefined name' | |
1054 L06B8 fcb $00 | |
1055 L06B9 fcc 'phasing' | |
1056 L06C0 fcb $00 | |
1057 L06C1 fcc 'symbol table full' | |
1058 L06D2 fcb $00 | |
1059 L06D3 fcc 'address mode' | |
1060 L06DF fcb $00 | |
1061 L06E0 fcc 'out of range' | |
1062 L06EC fcb $00 | |
1063 L06ED fcc 'result>255' | |
1064 L06F7 fcb $00 | |
1065 L06F8 fcc 'reg name' | |
1066 L0700 fcb $00 | |
1067 L0701 fcc 'reg sizes' | |
1068 L070A fcb $00 | |
1069 L070B fcc 'input path' | |
1070 L0715 fcb $00 | |
1071 L0716 fcc 'object path' | |
1072 L0721 fcb $00 | |
1073 L0722 fcc 'index reg' | |
1074 L072B fcb $00 | |
1075 L072C fcc '] missing' | |
1076 L0735 fcb $00 | |
1077 L0736 fcc 'needs label' | |
1078 L0741 fcb $00 | |
1079 L0742 fcc 'opt list' | |
1080 L074A fcb $00 | |
1081 L074B fcc 'const def' | |
1082 L0754 fcb $00 | |
1083 L0755 fcc /can't open / | |
1084 L0760 fcb $00 | |
1085 L0761 fcc 'label not allowed' | |
1086 L0772 fcb $00 | |
1087 L0773 fcc 'cond nesting' | |
1088 L077F fcb $00 | |
0 | 1089 |
537 | 1090 * Index by opcode-type jump table |
1091 L0780 fdb L079E-L0780 $001E (LBRA/LBSR) (type 0) | |
1092 fdb L07A5-L0780 $0025 (orcc/andcc/cwai) (type 1) | |
1093 fdb L07B9-L0780 $0039 type 2 | |
1094 fdb L07CE-L0780 $004E type 3 | |
1095 fdb L07F3-L0780 $0073 (CLR,etc.) (type 4) | |
1096 fdb L0826-L0780 $00A6 type 5 | |
1097 fdb L082F-L0780 $00AF type 6 | |
1098 fdb L0846-L0780 $00C6 type 7 | |
1099 fdb L0884-L0780 $0104 type 8 | |
1100 fdb L089D-L0780 $011D | |
1101 fdb L08BA-L0780 $013A | |
1102 fdb L08DC-L0780 $015C | |
1103 fdb L08E1-L0780 $0161 | |
1104 fdb L08F9-L0780 $0179 | |
1105 fdb L0F29-L0780 $07A9 | |
1106 | |
1107 * LBRA/LBSR (type 0) | |
1108 L079E lda #$03 # bytes require for instruction | |
1109 sta <u0046 Save it | |
1110 lbra L0951 | |
1111 | |
1112 * orcc/andcc/cwai 2 byte immediate mode only, forced register name (type 1) | |
1113 L07A5 lbsr L0932 Go find '# for immediate mode | |
1114 bcc twobyte Found it, skip ahead | |
1115 ldb #$0C Error code $C 'address mode' | |
0 | 1116 lbsr L02FA |
537 | 1117 * Legal 8 bit immediate mode goes here |
1118 twobyte lda #$01 Force # bytes of instruction to 1 | |
0 | 1119 sta <u0046 |
537 | 1120 lda <u0047 Get flag/index option byte |
1121 bita #$20 Pre-byte 11 bit flag on? | |
1122 beq L07AF No, 2 byte instruction | |
1123 inc <u0046 Add 1 to # bytes to compensate for $11 | |
1124 L07AF lbsr L12F7 Immediate mode parser | |
1125 stb <u0063 Store immediate value following opcode | |
1126 inc <u0046 Add 1 to # of bytes for immediate value | |
0 | 1127 rts |
537 | 1128 |
1129 * ADDD, LDX, STU etc. (type 2) (16 bit register commands) (all modes) | |
1130 L07B9 inc <u0046 Add 1 to # bytes needed for instruction | |
1131 lbsr L0932 Check if immediate mode requested | |
1132 lbcs L09C6 No, go check memory-based modes | |
1133 ldd <u0061 Get prebyte & opcode | |
1134 cmpd #$10CC LDQ? | |
1135 bne norm16bt No, normal immediate mode | |
1136 ldd #$00CD Get immediate mode opcode | |
1137 sta <u0062 Save it over old opcode | |
1138 lda #$5 # of bytes for LDQ immediate | |
1139 clr <u0061 Clear out pre-byte | |
1140 * This is here since 32 bit numeric routines aren't here yet | |
1141 ldb #$c Error code for 'addr mode' | |
1142 lbra L02FA Exit with it | |
1143 | |
1144 norm16bt lbsr L12F1 Calculate immediate mode #'s | |
1145 std <u0063 Save 16 bit result after opcode | |
1146 inc <u0046 Add 2 to # bytes needed for instruction | |
0 | 1147 inc <u0046 |
537 | 1148 lbra L0941 Make sure immediate mode is legal & exit |
1149 | |
1150 * 8 bit A & B based instructions (ADD, SUB, CMP, etc.) (type $03) | |
1151 L07CE inc <u0046 Add 1 to # bytes needed for instruction | |
1152 ldd <u0061 Get pre-byte & opcode | |
1153 cmpd #$118d DIVD instruction? | |
1154 beq L07E7 Yes, skip register name parser | |
1155 lda ,x+ Get next byte from source | |
1156 anda #$5F Force to uppercase | |
1157 cmpa #'A Is it an A? | |
1158 beq L07E7 Yes, go process instruction | |
1159 cmpa #'E Is it an E? | |
1160 beq newreg Yes, process | |
1161 cmpa #'F Is it an F? | |
1162 bne notnew No, try B | |
1163 * E or F register | |
1164 newreg pshs a Preserve register name a moment | |
1165 lda <u0062 Get base opcode | |
1166 cmpa #$82 | |
1167 blo legalcmd SUB or CMP are ok | |
1168 cmpa #$86 | |
1169 blo illegal3 SBC,AND & BIT are not ok | |
1170 cmpa #$88 | |
1171 blo legalcmd Load & store are ok | |
1172 cmpa #$8b | |
1173 blo illegal3 EOR, ADC & OR are not ok (ADD falls through ok) | |
1174 * Legal E/F command, setup | |
1175 legalcmd lda #$11 Pre-byte for E/F based commands | |
1176 sta <u0061 Place before opcode | |
1177 inc <u0046 Add 1 to # bytes needed for instruction | |
1178 puls a Get back register name | |
1179 cmpa #'F Is it F? | |
1180 beq L07E1 Yes, add mask for F | |
1181 bra L07E7 Go process various modes | |
1182 notnew cmpa #'B Is it a B? | |
1183 beq L07E1 Yes, add B mask & process instruction | |
1184 bra illegal2 Illegal register name | |
1185 | |
1186 * Illegal register (or illegal command for E or F) | |
1187 illegal3 leas 1,s Eat E/F identifier byte | |
1188 illegal2 leas 2,s Eat JSR return address | |
1189 lbra L015F Exit with 'bad instr' error | |
1190 | |
1191 * Mask for B or F commands | |
1192 L07E1 ldb #$40 Add offset for B register to base opcode | |
0 | 1193 orb <u0062 |
1194 stb <u0062 | |
537 | 1195 * Process various modes (Extended, DP, Indexed, Immediate) |
1196 L07E7 lbsr L0932 Check for immediate mode | |
1197 lbcs L09C6 Not immediate, try memory modes | |
1198 lbsr L0941 Is this command allowed immediate mode? | |
1199 lbra L07AF Go do immediate mode (8 bit) | |
1200 | |
1201 * CLR/LSL,etc. | |
1202 L07F3 inc <u0046 Inc # bytes in current instruction | |
1203 lda <u0062 Get base opcode | |
1204 cmpa #$0E Is it JMP? | |
1205 beq L080B Yes, special case (no inherent) | |
1206 * Inherent register name commands | |
1207 lda ,x Get next char from source line | |
1208 anda #$5F Uppercase only | |
1209 * $xx40 commands here | |
1210 ldb #$40 Mask to opcode base for 'xxxA' | |
1211 cmpa #'A Is char an A? | |
1212 beq L0819 Yes, adjust opcode accordingly | |
1213 cmpa #'D Is char a D? | |
1214 bne notD No, check next | |
1215 Legal10 lda #$10 Pre-byte for 'D' commands | |
1216 Legal11 sta <u0061 Put it before the opcode | |
1217 inc <u0046 Add 1 to # bytes for this instruction | |
1218 bra L0819 Go append the main opcode | |
1219 notD cmpa #'E Is char an E? | |
1220 bne notE No, check next | |
1221 ChkEF lda <u0062 Get base opcode | |
1222 beq illegal NEGE/NEGF not allowed | |
1223 cmpa #$03 COMx? | |
1224 beq goodE Yes, legal | |
1225 cmpa #$0A LSR/ROR/ASR/LSL/ASL/ROL? | |
1226 blo illegal Not allowed | |
1227 goodE lda #$11 Rest are allowed, set pre-byte to $11 | |
1228 bra Legal11 | |
1229 | |
1230 * $xx50 commands here | |
1231 notE ldb #$50 Mask to opcode base for 'xxxB' | |
1232 cmpa #'B Is char a B? | |
1233 beq L0819 Yes, adjust opcode accordingly | |
1234 cmpa #'W Is char a W? | |
1235 bne notW No, check next | |
1236 lda <u0062 Get base opcode | |
1237 beq illegal There is no NEGW? | |
1238 cmpa #$7 ASRW? | |
1239 beq illegal Yes, there isn't one | |
1240 cmpa #$8 LSL/ASLW? | |
1241 bne Legal10 Rest are legal, prefix a $10 & append opcode | |
1242 | |
1243 * Illegal instructions go here | |
1244 illegal leas $02,s Eat JSR return address | |
1245 lbra L015F Exit with illegal opcode error | |
1246 notW cmpa #'F is it an F? | |
1247 bne L080B Definately not a register, try memory modes | |
1248 bra ChkEF Go to generic E/F handler | |
1249 | |
1250 L080B lbsr L09C6 Generic indexed/extended/direct handler??? | |
1251 ldb <u0062 Get base opcode | |
1252 bitb #%11110000 Any of the 4 bits of high nibble set? | |
1253 beq L0825 No, return | |
1254 orb #%01000000 Yes, force bit on & return | |
0 | 1255 stb <u0062 |
1256 rts | |
537 | 1257 * Mask in adjustment for register inherent |
1258 L0819 orb <u0062 Merge Mask for new inherent mode into opcode | |
1259 stb <u0062 Save new opcode | |
1260 leax 1,x Bump source code ptr up to next char | |
1261 ldb #%11011111 Shut off 'operand field in src line' flag | |
1262 andb <u002B And save new flag byte | |
0 | 1263 stb <u002B |
1264 L0825 rts | |
537 | 1265 |
1266 * type 5 - 'fixed' inherent commands (no options for registers, etc.) | |
1267 L0826 inc <u0046 Add 1 to # bytes this instruction | |
0 | 1268 ldb <u002B |
537 | 1269 andb #%11011111 Shut off 'operand present' flag |
0 | 1270 stb <u002B |
1271 rts | |
537 | 1272 |
1273 * type 6 - LEA* (indexed mode ONLY) | |
1274 L082F inc <u0046 Add 1 to # bytes this instruction | |
1275 lbsr L09C6 Go set up indexed mode | |
1276 lda <u004E Get indexed mode flag | |
1277 bne L0825 Is indexed mode, everything went fine, exit | |
1278 ldd #$1212 Otherwise, 2 NOP codes | |
1279 std <u0062 Save as opcodes | |
1280 ldb #$02 Force # bytes this instruction to 2 | |
0 | 1281 stb <u0046 |
537 | 1282 ldb #$0C 'address mode' error |
1283 lbra L02FA | |
1284 * type 7 - TFR/EXG & Register to register | |
1285 L0846 inc <u0046 at least 2 bytes in this instruction | |
1286 inc <u0046 | |
1287 lbsr L1164 Find next text field | |
1288 lbsr L096B Get 1st register name | |
1289 bcc L0857 If we found them, skip ahead | |
1290 L0852 ldb #$0F If didn't, exit with 'reg name' error | |
0 | 1291 lbra L02FA |
537 | 1292 |
1293 L0857 lda ,x+ Get next char | |
1294 cmpa #', comma? | |
1295 bne L0852 No, exit with 'reg name' error | |
1296 pshs b Preserve first register mask | |
1297 lbsr L096B Get 2nd register name | |
1298 puls a Get back 1st register name | |
1299 bcs L0852 If can't find 2nd, exit with error | |
1300 pshs d Preserve both | |
1301 anda #%00001000 Keep 8/16 bit size flag on first | |
1302 andb #%00001000 Keep 8/16 bit size flag on 2nd | |
1303 pshs b Preserve 2nd reg size flag | |
1304 eora ,s+ Check if they are same size | |
1305 beq L0879 Yes, continue | |
1306 lda #%00001100 '0' register mask | |
1307 cmpa ,s Is source register the 0 register? | |
1308 beq L0879 Yes, destination size doesn't matter | |
1309 ldb #$10 Otherwise, 'reg sizes' error | |
0 | 1310 leas $02,s |
1311 lbra L02FA | |
537 | 1312 |
1313 L0879 puls a Get back source register | |
1314 lsla Move into most significiant nibble | |
0 | 1315 lsla |
1316 lsla | |
1317 lsla | |
537 | 1318 ora ,s+ Merge with destination register |
1319 sta <u0063 Save after opcode & return | |
0 | 1320 rts |
537 | 1321 * type 8 (Stack push/pull) |
1322 L0884 ldb #$02 Force # bytes for instruction to 2 | |
0 | 1323 stb <u0046 |
537 | 1324 lbsr L1164 Parse to next field |
1325 L088B lbsr L096B Get register mask | |
1326 bcs L0852 Illegal one, exit with 'register name' error | |
1327 ora <u0063 Mask in bit for new reg into byte after opcode | |
0 | 1328 sta <u0063 |
537 | 1329 lda ,x+ Get next char from source |
1330 cmpa #', Comma? | |
1331 beq L088B Yes, more register masks to get | |
1332 leax -1,x Bump src code ptr back 1 & return | |
0 | 1333 rts |
537 | 1334 * type 9 (long branches except LBRA/LBSR) |
1335 L089D lda #$04 Force # of bytes of instruction to 4 | |
0 | 1336 sta <u0046 |
537 | 1337 leax -$01,x Bump ptr back to start of mnemonic |
1338 ldb #19 # opcodes to check in table | |
1339 leay >L0530,pc Point to branch opcode tables | |
1340 lbsr L0344 Go find & verify it | |
1341 bcc L08B3 Found it, continue | |
1342 leas $02,s Eat stack | |
1343 lbra L015F Exit with error | |
1344 | |
0 | 1345 L08B3 lda ,y |
1346 sta <u0062 | |
1347 lbra L0951 | |
537 | 1348 |
1349 * type 10 (short branches) | |
1350 L08BA lda #$02 Force # of bytes of instruction to 2 | |
0 | 1351 sta <u0046 |
1352 lbsr L12F1 | |
1353 subd <u0040 | |
1354 subd #$0002 | |
1355 cmpd #$007F | |
1356 bgt L08D2 | |
1357 cmpd #$FF80 | |
1358 bge L08D9 | |
1359 L08D2 ldb #$0D | |
1360 lbsr L02FA | |
1361 ldb #$FE | |
1362 L08D9 stb <u0063 | |
1363 rts | |
537 | 1364 |
1365 * type $B (Pseudo ops) | |
1366 L08DC leau <L08FE,pc Point to table | |
0 | 1367 bra L08EF |
537 | 1368 |
1369 L08E1 ldb <u002B | |
0 | 1370 bitb #$08 |
1371 beq L08EC | |
1372 ldb #$19 | |
1373 lbsr L02FA | |
537 | 1374 L08EC leau <L0912,pc Point to table |
1375 L08EF lbsr L1164 Hunt down next field in source string | |
0 | 1376 ldb <u0062 |
537 | 1377 lslb 2 byte entries |
0 | 1378 ldd b,u |
1379 jmp d,u | |
537 | 1380 |
1381 L08F9 leau <L0924,pc Point to table | |
0 | 1382 bra L08EF |
537 | 1383 |
1384 * 2 byte jump table | |
1385 | |
1386 L08FE fdb L0BA6-L08FE | |
1387 fdb L0C47-L08FE | |
1388 fdb L0CBF-L08FE | |
1389 fdb L0C6B-L08FE | |
1390 fdb L0CAD-L08FE | |
1391 fdb L0C27-L08FE | |
1392 fdb L0D60-L08FE | |
1393 fdb L0D40-L08FE | |
1394 fdb L0C2B-L08FE | |
1395 fdb L0D51-L08FE | |
1396 * Another 2 byte jump table | |
1397 L0912 fdb L0DB9-L0912 | |
1398 fdb L0DC1-L0912 | |
1399 fdb L0DD4-L0912 | |
1400 fdb L0E2C-L0912 | |
1401 fdb L0DFD-L0912 | |
1402 fdb L0E03-L0912 | |
1403 fdb L0E09-L0912 | |
1404 fdb L0EB3-L0912 | |
1405 fdb L0EC4-L0912 | |
1406 | |
1407 * Another 2 byte jump table | |
1408 L0924 fdb L0EE3-L0924 | |
1409 fdb L0EE8-L0924 | |
1410 fdb L0EED-L0924 | |
1411 fdb L0EF2-L0924 | |
1412 fdb L0EF7-L0924 | |
1413 fdb L0EFC-L0924 | |
1414 fdb L0F01-L0924 | |
1415 | |
1416 L0932 lbsr L1164 Parse for start of next field | |
1417 cmpa #'# Immediate mode specifier? | |
1418 bne L093E No, exit with carry set | |
1419 leax 1,x Bump source ptr up by 1, clear carry & return | |
1420 andcc #$FE | |
0 | 1421 rts |
537 | 1422 |
1423 L093E orcc #$01 | |
0 | 1424 rts |
537 | 1425 |
1426 * Immediate mode check | |
1427 L0941 ldb <u0047 Get current opcode's flag byte | |
1428 bitb #%01000000 Immediate mode legal? | |
1429 bne L0948 No, do something | |
1430 rts Yes, return | |
1431 | |
1432 L0948 ldb #$03 Set size of illegal instruction to 3 bytes | |
0 | 1433 stb <u0046 |
537 | 1434 ldb #$0C Error code $C 'address mode' |
0 | 1435 lbra L02FA |
537 | 1436 |
0 | 1437 L0951 lbsr L12F1 |
1438 subd <u0040 | |
1439 subb <u0046 | |
1440 sbca #$00 | |
1441 std <u0063 | |
1442 cmpd #$007F | |
1443 bgt L096A | |
1444 cmpd #$FF80 | |
1445 blt L096A | |
1446 inc <u004F | |
1447 L096A rts | |
537 | 1448 |
1449 * Entry: X=ptr to start of reg name from source | |
1450 * Exit: A=Bit mask for PSH/PUL | |
1451 * B=Bit mask for EXG/TFR | |
1452 L096B leay >L09A2,pc Point to register names | |
1453 pshs x Save start of current register we are checking | |
1454 ldb #16 # of register names to check | |
1455 L0973 lda ,y Get byte from reg. name | |
1456 beq L098F If NUL (empty entry), skip this entry | |
1457 cmpa ,x+ Compare with source | |
1458 beq L0981 Equal, skip ahead | |
1459 adda #$20 Make lowercase | |
1460 cmpa -$01,x Compare with source | |
1461 bne L098F Not equal, skip ahead | |
1462 * Found reg name we want | |
1463 L0981 lda $01,y Get 2nd char of reg name | |
1464 beq L099A NUL, only 1 char, so we match | |
1465 cmpa ,x+ 2nd char match too? | |
1466 beq L099A Yes, found reg | |
1467 adda #$20 Convert to lowercase | |
1468 cmpa -$01,x Does that match? | |
1469 beq L099A Yes, found it | |
1470 * Not the register name we want, try next one | |
1471 L098F ldx ,s Get ptr to start of current register | |
1472 leay $03,y Bump to next one | |
1473 decb Dec # registers left to check counter | |
1474 bne L0973 Keep doing till done | |
1475 orcc #$01 Set carry flag (illegal register name) | |
1476 puls pc,x Restore X & return | |
1477 * Found register name we wanted | |
1478 L099A decb Adjust B (EXG/TFR mask) | |
1479 leas $02,s Eat X off the stack | |
1480 lda $02,y Get PSH/PUL bit mask | |
1481 andcc #$FE No error & return | |
0 | 1482 rts |
537 | 1483 * Stack table: 2 bytes for reg. name, 1 byte for bit mask for PSH/PUL |
1484 * Positions (done in reverse from highest to lowest) indicates the bit | |
1485 * mask for register to register operations (ex. TFR) | |
1486 L09A2 fcc 'F' %1111 | |
1487 fcb $00,$00 | |
1488 | |
1489 fcc 'E' %1110 | |
1490 fcb $00,$00 | |
1491 | |
1492 fcb $00,$00,$00 %1101 (2nd zero register won't be used) | |
1493 | |
1494 fcc '0' %1100 Zero register | |
1495 fcb $00,$00 | |
1496 | |
1497 fcc 'DP' %1011 | |
1498 fcb $08 | |
1499 | |
1500 fcc 'CC' %1010 | |
1501 fcb $01 | |
1502 | |
1503 fcc 'B' %1001 | |
1504 fcb $00,$04 | |
1505 | |
1506 fcc 'A' %1000 | |
1507 fcb $00,$02 | |
1508 | |
1509 fcc 'V' %0111 | |
1510 fcb $00,00 | |
1511 | |
1512 fcc 'W' %0110 | |
1513 fcb $00,$00 | |
1514 | |
1515 fcc 'PC' %0101 | |
1516 fcb $80 | |
1517 | |
1518 fcc 'S' %0100 | |
1519 fcb $00,$40 | |
1520 | |
1521 fcc 'U' %0011 | |
1522 fcb $00,$40 | |
1523 | |
1524 fcc 'Y' %0010 | |
1525 fcb $00,$20 | |
1526 | |
1527 fcc 'X' %0001 | |
1528 fcb $00,$10 | |
1529 | |
1530 fcc 'D' %0000 | |
1531 fcb $00,$06 (A & B combined) | |
1532 | |
1533 * Generic memory mode addressing handler: Indexed, Extended, Direct Page | |
1534 L09C6 lbsr L1164 Parse for next field in source | |
1535 bsr L0A14 Check for '<' (DP) & '>' (Extended) modes | |
1536 cmpa #'[ Next char indicate indirect mode? | |
1537 bne L09D7 No, try next | |
1538 inc <u004D Set flag for indirect mode | |
1539 leax 1,x Bump src code ptr up by 1 | |
1540 lda ,x Get next byte | |
1541 bsr L0A14 Check for '<' or '>' & set flag | |
1542 L09D7 cmpa #', Comma? | |
1543 lbeq L0A64 Yes, skip ahead for ,R/,R auto inc/dec | |
1544 * comma is not first char | |
1545 ldb 1,x No, get next char into B | |
1546 cmpb #', Is it a comma? (ie 1st was register name?) | |
1547 bne L09F1 No, try label/number routine ??? | |
1548 anda #$DF Force to uppercase | |
1549 cmpa #'A Is it an A? | |
1550 beq L0A27 Yes, go process | |
1551 cmpa #'B Is it a B? | |
1552 beq L0A2B Yes, go process | |
1553 cmpa #'D Is it a D? | |
1554 beq L0A2F Yes, go process | |
1555 cmpa #'E Is it an E? | |
1556 beq MaskE | |
1557 cmpa #'F Is it an F? | |
1558 beq MaskF | |
1559 cmpa #'W Is it a W? | |
1560 beq MaskW | |
1561 * Not a R0,xx... try for numeric or label | |
1562 L09F1 lbsr L12F1 Parse for numeric (returns 16 bit # in D) | |
1563 bcc L09F8 Found one, preserve it | |
1564 clra Otherwise, default to 0 | |
1565 clrb | |
1566 L09F8 std <u004A Save 16 bit address | |
1567 lda ,x Get char from src code | |
1568 cmpa #', Comma? | |
1569 lbeq L0B18 Yes, skip way ahead | |
1570 ldb <u004D Get indirect mode flag | |
1571 bne L0A35 If on, skip ahead | |
1572 ldb <u004C Get Extended/DP/Indexed mode flag | |
1573 bmi L0A35 If Extended, go do it | |
1574 bne L0A53 If Direct Page, go somewhere else | |
0 | 1575 lda <u004A |
1576 cmpa <u003F | |
1577 beq L0A53 | |
1578 bra L0A35 | |
537 | 1579 |
1580 * Check for '>' or '<' (Extended or Direct Page addressing) | |
1581 * Set flag @ <u004C to $FF for >, $01 for < | |
1582 L0A14 ldb #$FF 16 bit addressing flag | |
1583 cmpa #'> 16 bit addressing? | |
1584 beq L0A20 Yes, set flag | |
1585 cmpa #'< 8 bit addressing? | |
1586 bne L0A26 No, return | |
1587 ldb #$01 8 bit addressing flag | |
1588 L0A20 stb <u004C Save bit size addressing flag | |
1589 leax 1,x Bump source ptr | |
1590 lda ,x Get next char & return | |
0 | 1591 L0A26 rts |
537 | 1592 |
1593 * A,R comes here | |
1594 L0A27 ldb #%10000110 | |
1595 bra L0A31 | |
1596 | |
1597 * B,R comes here | |
1598 L0A2B ldb #%10000101 | |
0 | 1599 bra L0A31 |
537 | 1600 |
1601 * D,R comes here | |
1602 L0A2F ldb #%10001011 | |
1603 bra L0A31 | |
1604 * E,R comes here | |
1605 MaskE ldb #%10000111 | |
0 | 1606 bra L0A31 |
537 | 1607 * F,R comes here |
1608 MaskF ldb #%10001010 | |
1609 bra L0A31 | |
1610 * W,R comes here | |
1611 MaskW ldb #%10001110 | |
1612 L0A31 leax 1,x Bump src ptr up by 1 | |
1613 bra L0A97 Skip ahead | |
1614 | |
1615 * Extended Indirect indexed or Extended modes go here | |
1616 L0A35 ldd <u004A Get 16 bit address | |
1617 inc <u0046 Add 2 to # bytes for instruction | |
0 | 1618 inc <u0046 |
537 | 1619 inc <u004F ??? |
1620 tst <u004D Indirect mode on? | |
1621 bne L0A4A Yes, Need to add $9F postbyte first | |
1622 std <u0063 Save extended address | |
1623 ldb #%00110000 Mask in bit flags for extended mode & return | |
0 | 1624 orb <u0062 |
1625 stb <u0062 | |
1626 rts | |
537 | 1627 |
1628 * Extended indirect (ex. JMP [<$2000]) | |
1629 L0A4A std <u0064 Store 16 bit address after post-byte | |
1630 ldb #%10011111 Append $9f post-byte for Extended Indirect | |
0 | 1631 stb <u0063 |
1632 lbra L0AEA | |
537 | 1633 |
1634 * Direct page mode | |
1635 L0A53 inc <u0046 Add 1 to # bytes this instruction | |
1636 ldb <u004B Get 8 bit # (LSB of D from L12F1) | |
1637 stb <u0063 Save it as DP address | |
1638 ldb <u0062 get opcode | |
1639 bitb #%11110000 Is it a $0-$F Direct page command? | |
1640 beq L0A63 Yes, opcode is fine | |
1641 orb #%00010000 No, force DP mode bit on in opcode | |
0 | 1642 stb <u0062 |
1643 L0A63 rts | |
537 | 1644 |
1645 * Comes here if first char is ',' (after parsing '[' if needed) | |
1646 L0A64 leax 1,x Bump source ptr up by 1 | |
1647 clr <u004A Clear 16 bit offset address | |
0 | 1648 clr <u004B |
537 | 1649 ldd ,x Get 2 chars from source |
1650 cmpd #$2D2D '--' ? | |
1651 beq L0A8D Yes, go merge mask for -- | |
1652 cmpa #'- '-' ? | |
1653 beq L0A93 Yes, go merge mask for - | |
1654 bsr L0AC7 Otherwise, Go find base index register (X,Y,U,S) | |
1655 lbcs L0B68 Couldn't find one, check for 'PC' offset | |
1656 * Found base register | |
1657 stb <u0063 Save base register bit mask in postbyte | |
1658 ldd ,x Get next 2 chars from src (after base reg. name) | |
1659 cmpd #$2B2B '++' ? | |
1660 beq L0AAB Yes, go process | |
1661 cmpa #'+ '+' ? | |
1662 beq L0AB1 Yes, go process | |
1663 lbra L0B22 | |
1664 | |
1665 * Mask for double dec. mode | |
1666 L0A8D leax 1,x Bump src ptr up by 1 | |
1667 ldb #%10000011 Mask for -- mode | |
1668 bra L0A97 Merge into post byte | |
1669 * Mask for single dec. mode | |
1670 L0A93 bsr L0ABD Make sure we aren't indirect-it's illegal | |
1671 ldb #%10000010 Mask for - mode | |
1672 L0A97 stb <u0063 Save mask in postbyte | |
1673 leax 1,x Bump src ptr up 1 byte | |
1674 bsr L0AC7 Go get base register (X,Y,U,S) | |
1675 bcc L0AA5 Found it, merge in base register mask | |
1676 L0A9F ldb #$13 illegal 'index reg' error | |
0 | 1677 lbsr L02FA |
537 | 1678 clrb So clear postbyte to 0 |
1679 L0AA5 orb <u0063 Merge in mask into postbyte | |
0 | 1680 stb <u0063 |
1681 bra L0AEA | |
537 | 1682 * Mask for double inc. mode |
1683 L0AAB ldb #%10000001 Mask for ++ mode | |
1684 leax 1,x Bump up src ptr by 1 | |
1685 bra L0AB5 Merge into postbyte | |
1686 * Mask for single inc. mode | |
1687 L0AB1 bsr L0ABD Make sure we aren't indirect-it's illegal | |
1688 ldb #%10000000 Mask for + mode | |
1689 | |
1690 L0AB5 leax 1,x Bump up src ptr by 1 | |
1691 orb <u0063 Merge in auto inc. modes | |
0 | 1692 stb <u0063 |
1693 bra L0AEA | |
537 | 1694 |
1695 * Check ,-R or ,R+: only legal in NON-INDIRECT mode | |
1696 L0ABD tst <u004D Check indirect mode flag | |
1697 beq L0AC6 Normal, exit | |
1698 ldb #$0C Indirect ,-R is illegal, exit with error | |
0 | 1699 lbsr L02FA |
1700 L0AC6 rts | |
537 | 1701 |
1702 * Exit: B=bit mask for proper index register (X,Y,U,S) | |
1703 * carry set=not legal register | |
1704 L0AC7 lda ,x+ Get next char from source | |
1705 anda #$5F Force to uppercase | |
1706 clrb X register mask | |
1707 cmpa #'X X register? | |
1708 beq L0AE2 Yes, acceptable | |
1709 ldb #%00100000 Y register mask | |
1710 cmpa #'Y Y register | |
0 | 1711 beq L0AE2 |
537 | 1712 ldb #%01000000 U register mask |
1713 cmpa #'U U register? | |
0 | 1714 beq L0AE2 |
537 | 1715 ldb #%01100000 S register mask |
1716 cmpa #'S S register? | |
1717 bne L0AE5 No, not a 'x,R' or 'R+/++' situation | |
1718 L0AE2 andcc #$FE No error & return | |
0 | 1719 rts |
537 | 1720 |
1721 L0AE5 leax -1,x Bump source ptr back | |
1722 orcc #$01 Set carry (couldn't find index register) & return | |
0 | 1723 rts |
537 | 1724 * Part of indexed mode handler |
1725 * This part sets the INDEXED mode bit in the opcode itself, and also sets | |
1726 * the INDIRECT bit in the postbyte. Both of these are compatible with the new | |
1727 * W modes (with W being the base register), so this routine does not have to | |
1728 * be changed. | |
1729 L0AEA ldb #%00100000 Mask bit for indexed instruction opcodes | |
1730 orb <u0062 Force instruction to indexed mode | |
0 | 1731 stb <u0062 |
537 | 1732 inc <u0046 Add 1 to size of instruction |
1733 inc <u004E ??? | |
1734 tst <u004D Indirect mode active? | |
1735 beq L0B08 No, skip ahead | |
1736 ldb #%00010000 Indirect mode bit mask | |
1737 orb <u0063 Mask into Postbyte | |
0 | 1738 stb <u0063 |
537 | 1739 lda ,x+ Get next char from source |
1740 cmpa #'] End of indirect mode? | |
1741 beq L0B08 Yes, go check for end of line | |
1742 ldb #$14 '] missing' error | |
0 | 1743 bra L0B14 |
537 | 1744 |
1745 L0B08 lda ,x Get char from source | |
1746 cmpa #$20 Space? | |
1747 beq L0B17 Yes, exit | |
1748 cmpa #$0D CR? | |
1749 beq L0B17 Yes, exit | |
1750 ldb #$0C 'Address mode' error | |
0 | 1751 L0B14 lbsr L02FA |
537 | 1752 L0B17 rts No error & return |
1753 | |
1754 L0B18 leax 1,x Bump src ptr up by 1 | |
0 | 1755 bsr L0AC7 |
1756 bcs L0B68 | |
1757 orb <u0063 | |
1758 stb <u0063 | |
1759 L0B22 ldd <u004A | |
1760 tst <u004C | |
1761 bmi L0B5A | |
1762 bne L0B52 | |
1763 ldd <u004A | |
1764 bne L0B32 | |
1765 ldb #$84 | |
1766 bra L0B62 | |
1767 L0B32 tst <u004D | |
1768 bne L0B46 | |
1769 cmpd #$000F | |
1770 bgt L0B46 | |
1771 cmpd #$FFF0 | |
1772 blt L0B46 | |
1773 andb #$1F | |
1774 bra L0B62 | |
1775 L0B46 cmpd #$007F | |
1776 bgt L0B5A | |
1777 cmpd #$FF80 | |
1778 blt L0B5A | |
1779 L0B52 stb <u0064 | |
1780 inc <u0046 | |
1781 ldb #$88 | |
1782 bra L0B62 | |
1783 L0B5A std <u0064 | |
1784 inc <u0046 | |
1785 inc <u0046 | |
1786 ldb #$89 | |
1787 L0B62 orb <u0063 | |
1788 stb <u0063 | |
1789 bra L0AEA | |
1790 L0B68 ldd ,x | |
1791 anda #$5F | |
1792 andb #$5F | |
1793 cmpd #$5043 | |
1794 lbne L0A9F | |
1795 leax $02,x | |
1796 lda ,x | |
1797 anda #$5F | |
1798 cmpa #$52 | |
1799 bne L0B82 | |
1800 leax $01,x | |
1801 L0B82 inc <u0046 | |
1802 ldd <u004A | |
1803 subd <u0040 | |
1804 subb <u0046 | |
1805 sbca #$00 | |
1806 subd #$0001 | |
1807 tst <u004C | |
1808 bmi L0B9B | |
1809 beq L0B9B | |
1810 stb <u0064 | |
1811 ldb #$8C | |
1812 bra L0B62 | |
1813 L0B9B subd #$0001 | |
1814 inc <u0046 | |
1815 std <u0064 | |
1816 ldb #$8D | |
1817 bra L0B62 | |
537 | 1818 |
1819 L0BA6 bsr L0BE4 | |
1820 pshs d | |
0 | 1821 addd <u0026 |
1822 std <u0026 | |
1823 bsr L0BEF | |
1824 beq L0BB6 | |
1825 lda #$04 | |
1826 bsr L0BF7 | |
1827 L0BB6 bsr L0BD8 | |
1828 bsr L0BEF | |
1829 beq L0BBE | |
1830 bsr L0C0A | |
1831 L0BBE addd ,s++ | |
1832 L0BC0 pshs a | |
1833 lda <u002B | |
1834 anda #$08 | |
1835 ora #$31 | |
1836 sta <u002B | |
1837 puls a | |
1838 tst <u005A | |
1839 beq L0BD3 | |
1840 std <u0040 | |
1841 rts | |
1842 L0BD3 std <u0042 | |
1843 inc <u002C | |
1844 rts | |
1845 L0BD8 tst <u005A | |
1846 beq L0BDF | |
1847 ldd <u0040 | |
1848 rts | |
1849 L0BDF ldd <u0042 | |
1850 std <u0044 | |
1851 rts | |
1852 L0BE4 lbsr L11C2 | |
1853 bcc L0BEE | |
1854 lbsr L02FA | |
1855 clra | |
1856 clrb | |
1857 L0BEE rts | |
1858 L0BEF pshs a | |
1859 lda <u002B | |
1860 bita #$08 | |
1861 puls pc,a | |
1862 L0BF7 ldu <u002D | |
1863 ldb u0008,u | |
1864 bmi L0C09 | |
1865 cmpb #$02 | |
1866 bne L0C07 | |
1867 cmpa #$02 | |
1868 beq L0C07 | |
1869 ora #$80 | |
1870 L0C07 sta u0008,u | |
1871 L0C09 rts | |
1872 L0C0A tst <u003E | |
1873 ble L0C24 | |
1874 cmpd u0009,u | |
1875 beq L0C26 | |
1876 pshs b,a | |
1877 lda u0008,u | |
1878 bmi L0C22 | |
1879 cmpa #$02 | |
1880 beq L0C22 | |
1881 ldb #$0A | |
1882 lbsr L02FA | |
1883 L0C22 puls b,a | |
1884 L0C24 std u0009,u | |
1885 L0C26 rts | |
537 | 1886 L0C27 lda #$03 |
0 | 1887 bra L0C2D |
537 | 1888 L0C2B lda #$02 |
0 | 1889 L0C2D bsr L0BEF |
1890 bne L0C38 | |
1891 ldb #$15 | |
1892 lbsr L02FA | |
1893 bra L0C46 | |
1894 L0C38 bsr L0BF7 | |
1895 bsr L0BE4 | |
1896 ldu <u002D | |
1897 bsr L0C0A | |
1898 std <u0044 | |
1899 ldb #$39 | |
1900 stb <u002B | |
1901 L0C46 rts | |
537 | 1902 L0C47 lda ,x+ |
0 | 1903 pshs a |
1904 cmpa #$0D | |
1905 beq L0C64 | |
1906 cmpa #$2F | |
1907 bhi L0C64 | |
1908 bsr L0C8D | |
1909 L0C55 lda ,x+ | |
1910 cmpa ,s | |
1911 beq L0C69 | |
1912 cmpa #$0D | |
1913 beq L0C64 | |
1914 lbsr L0CEC | |
1915 bra L0C55 | |
1916 L0C64 ldb #$17 | |
1917 lbsr L02FA | |
1918 L0C69 puls pc,a | |
537 | 1919 L0C6B lda ,x+ |
0 | 1920 pshs a |
1921 cmpa #$0D | |
1922 beq L0C64 | |
1923 cmpa #$2F | |
1924 bhi L0C64 | |
1925 bsr L0C8D | |
1926 L0C79 ldd ,x+ | |
1927 cmpa #$0D | |
1928 beq L0C64 | |
1929 cmpa ,s | |
1930 beq L0C69 | |
1931 cmpb ,s | |
1932 bne L0C89 | |
1933 ora #$80 | |
1934 L0C89 bsr L0CEC | |
1935 bra L0C79 | |
1936 L0C8D pshs x,a | |
1937 leax -$01,x | |
1938 L0C91 leax $01,x | |
1939 lda ,x | |
1940 cmpa #$0D | |
1941 beq L0CA1 | |
1942 cmpa ,s | |
1943 bne L0C91 | |
1944 leax $01,x | |
1945 lda ,x | |
1946 L0CA1 clr ,x+ | |
1947 stx <u0033 | |
1948 cmpa #$0D | |
1949 bne L0CAB | |
1950 sta ,x | |
1951 L0CAB puls pc,x,a | |
537 | 1952 L0CAD bsr L0CD5 |
0 | 1953 L0CAF lbsr L12F7 |
1954 tfr b,a | |
1955 bsr L0CEC | |
1956 lda ,x+ | |
1957 cmpa #$2C | |
1958 beq L0CAF | |
1959 leax -$01,x | |
1960 rts | |
537 | 1961 L0CBF bsr L0CD5 |
0 | 1962 L0CC1 lbsr L12F1 |
1963 pshs b | |
1964 bsr L0CEC | |
1965 puls a | |
1966 bsr L0CEC | |
1967 lda ,x+ | |
1968 cmpa #$2C | |
1969 beq L0CC1 | |
1970 leax -$01,x | |
1971 rts | |
1972 L0CD5 pshs x | |
1973 L0CD7 lbsr L12F1 | |
1974 lda ,x+ | |
1975 cmpa #$2C | |
1976 beq L0CD7 | |
1977 clr -$01,x | |
1978 stx <u0033 | |
1979 cmpa #$0D | |
1980 bne L0CEA | |
1981 sta ,x | |
1982 L0CEA puls pc,x | |
1983 L0CEC ldb <u0046 | |
1984 cmpb #$04 | |
1985 bcs L0CF4 | |
1986 bsr L0D03 | |
1987 L0CF4 pshs b,a | |
1988 tfr dp,a | |
1989 ldb #$62 | |
1990 tfr d,u | |
1991 puls b,a | |
1992 sta b,u | |
1993 inc <u0046 | |
1994 rts | |
1995 L0D03 pshs x,b,a | |
1996 ldb <u002A | |
1997 bne L0D14 | |
1998 ldx <u0033 | |
1999 lbsr L01C4 | |
2000 tst <u005B | |
2001 beq L0D27 | |
2002 bra L0D30 | |
2003 L0D14 tst <u005B | |
2004 bne L0D2D | |
2005 lda <u0056 | |
2006 pshs a | |
2007 clr <u0056 | |
2008 com <u0056 | |
2009 lbsr L01D3 | |
2010 puls a | |
2011 sta <u0056 | |
2012 L0D27 ldb #$04 | |
2013 stb <u002B | |
2014 bra L0D34 | |
2015 L0D2D lbsr L01D3 | |
2016 L0D30 ldb #$05 | |
2017 stb <u002B | |
2018 L0D34 ldd <u0040 | |
2019 std <u0044 | |
2020 clr <u0046 | |
2021 inc <u002A | |
2022 clr $01,s | |
2023 puls pc,x,b,a | |
537 | 2024 L0D40 ldd <u0051 |
0 | 2025 coma |
2026 comb | |
2027 std <u0062 | |
2028 ldb <u0053 | |
2029 comb | |
2030 lda <u002B | |
2031 anda #$DF | |
2032 sta <u002B | |
2033 bra L0D59 | |
537 | 2034 L0D51 ldd #$103F |
0 | 2035 std <u0062 |
2036 lbsr L12F7 | |
2037 L0D59 stb <u0064 | |
2038 ldb #$03 | |
2039 stb <u0046 | |
2040 rts | |
537 | 2041 L0D60 clra |
0 | 2042 clrb |
2043 stb <u0050 | |
2044 std <u0040 | |
2045 std <u0044 | |
2046 std <u0042 | |
2047 lbsr L1360 | |
2048 lbsr L0CD5 | |
2049 ldd #$87CD | |
2050 bsr L0D93 | |
2051 bsr L0D90 | |
2052 bsr L0D8E | |
2053 bsr L0DA9 | |
2054 bsr L0DA4 | |
2055 bsr L0DA9 | |
2056 bsr L0DA4 | |
2057 lda <u0050 | |
2058 coma | |
2059 bsr L0DA1 | |
2060 lda ,x | |
2061 cmpa #$2C | |
2062 bne L0DB8 | |
2063 bsr L0D8E | |
2064 L0D8E bsr L0DA9 | |
2065 L0D90 lbsr L12F1 | |
2066 L0D93 pshs b | |
2067 tfr a,b | |
2068 bsr L0D9B | |
2069 puls b | |
2070 L0D9B tfr b,a | |
2071 eorb <u0050 | |
2072 stb <u0050 | |
2073 L0DA1 lbra L0CEC | |
2074 L0DA4 lbsr L12F7 | |
2075 bra L0D9B | |
2076 L0DA9 lda ,x+ | |
2077 cmpa #$2C | |
2078 beq L0DB8 | |
2079 leax -$01,x | |
2080 ldb #$17 | |
2081 lbsr L02FA | |
2082 leas $02,s | |
2083 L0DB8 rts | |
537 | 2084 L0DB9 lbsr L0BE4 |
0 | 2085 std <u0044 |
2086 lbra L0BC0 | |
537 | 2087 L0DC1 ldb <u002B |
0 | 2088 andb #$08 |
2089 orb #$10 | |
2090 stb <u002B | |
2091 lbsr L01F2 | |
2092 lbsr L156C | |
2093 bcc L0DD3 | |
2094 leas $04,s | |
2095 L0DD3 rts | |
537 | 2096 L0DD4 ldb #$27 |
0 | 2097 ldu <u000A |
2098 L0DD8 lbsr L1164 | |
2099 lda <u003E | |
2100 bne L0DE3 | |
2101 lda ,u | |
2102 bne L0DFC | |
2103 L0DE3 lda ,x+ | |
2104 cmpa #$0D | |
2105 beq L0DF4 | |
2106 sta ,u+ | |
2107 decb | |
2108 bne L0DE3 | |
2109 lda #$0D | |
2110 L0DF0 cmpa ,x+ | |
2111 bne L0DF0 | |
2112 L0DF4 clr ,u | |
2113 leax -$01,x | |
2114 ldb #$30 | |
2115 stb <u002B | |
2116 L0DFC rts | |
537 | 2117 L0DFD ldb #$4F |
0 | 2118 ldu <u0008 |
2119 bra L0DD8 | |
537 | 2120 L0E03 lbsr L1408 |
0 | 2121 L0E06 leas $02,s |
2122 rts | |
537 | 2123 L0E09 bsr L0E21 |
0 | 2124 bcc L0E12 |
2125 ldb #$30 | |
2126 stb <u002B | |
2127 rts | |
2128 L0E12 stb ,-s | |
2129 beq L0E1D | |
2130 L0E16 lbsr L149A | |
2131 dec ,s | |
2132 bne L0E16 | |
2133 L0E1D leas $01,s | |
2134 bra L0E06 | |
2135 L0E21 lbsr L10B4 | |
2136 bcc L0E2B | |
2137 lbsr L02FA | |
537 | 2138 orcc #$01 |
0 | 2139 L0E2B rts |
2140 L0E2C ldb #$30 | |
2141 stb <u002B | |
2142 lbsr L1164 | |
537 | 2143 L0E33 clr ,-s Clear flag? |
2144 lda ,x+ Get char | |
2145 cmpa #'- Dash? | |
2146 bne L0E3F No, leave flag clear | |
2147 com ,s Set flag | |
2148 lda ,x+ Get next char | |
2149 L0E3F leau <L0EA3,pc Point to table | |
2150 ldb #08 # of entries | |
2151 cmpa #'a Is char lowercase? | |
2152 blo L0E4A No, no conversion needed | |
2153 suba #$20 Bump down to uppercase | |
2154 L0E4A cmpa ,u++ Same as first 1/2 of table entry? | |
2155 beq L0E68 Yes, skip ahead | |
2156 decb No, decrement # entries left | |
2157 bne L0E4A Keep checking all 8 | |
0 | 2158 puls b |
537 | 2159 cmpa #'D |
0 | 2160 beq L0E88 |
537 | 2161 cmpa #'W |
0 | 2162 beq L0E80 |
537 | 2163 cmpa #'L |
0 | 2164 beq L0E90 |
537 | 2165 cmpa #'N |
0 | 2166 beq L0E9B |
2167 L0E63 ldb #$16 | |
2168 lbra L02FA | |
537 | 2169 L0E68 ldb -1,u |
0 | 2170 tfr dp,a |
2171 tfr d,u | |
2172 puls a | |
2173 coma | |
2174 sta ,u | |
2175 L0E73 lda ,x+ | |
537 | 2176 cmpa #', |
0 | 2177 beq L0E33 |
537 | 2178 cmpa #$20 Space? |
0 | 2179 beq L0E2C |
2180 leax -$01,x | |
2181 rts | |
2182 L0E80 bsr L0E21 | |
2183 bcs L0E63 | |
2184 stb <u0037 | |
2185 bra L0E73 | |
2186 L0E88 bsr L0E21 | |
2187 bcs L0E63 | |
2188 stb <u0036 | |
2189 bra L0E73 | |
2190 L0E90 tstb | |
2191 beq L0E97 | |
2192 dec <u0056 | |
2193 bra L0E73 | |
2194 L0E97 inc <u0056 | |
2195 bra L0E73 | |
2196 L0E9B inc <u0060 | |
2197 lda #$1F | |
2198 sta <u0037 | |
2199 bra L0E97 | |
537 | 2200 |
2201 * Table: 2 byte entries | |
2202 L0EA3 fcb $43,$5f | |
2203 fcb $46,$59 | |
2204 fcb $4d,$5a | |
2205 fcb $47,$5b | |
2206 fcb $45,$5c | |
2207 fcb $53,$5e | |
2208 fcb $49,$5d | |
2209 fcb $4f,$58 | |
2210 | |
2211 L0EB3 lbsr L12F7 | |
0 | 2212 bcs L0EBA |
2213 stb <u003F | |
2214 L0EBA clra | |
2215 std <u0044 | |
2216 ldb #$31 | |
2217 stb <u002B | |
2218 inc <u002C | |
2219 rts | |
537 | 2220 L0EC4 lbsr L1164 |
0 | 2221 lbsr L15FB |
2222 bra L0ECE | |
2223 L0ECC leax -$01,x | |
2224 L0ECE ldb -$01,x | |
2225 cmpb #$20 | |
2226 beq L0ECC | |
2227 ldu <u001F | |
2228 ldb <u0018 | |
2229 pshu b | |
2230 stu <u001F | |
2231 sta <u0018 | |
2232 ldb #$30 | |
2233 stb <u002B | |
2234 rts | |
537 | 2235 L0EE3 bsr L0F0F |
0 | 2236 bne L0F0C |
2237 rts | |
537 | 2238 L0EE8 bsr L0F0F |
0 | 2239 beq L0F0C |
2240 rts | |
537 | 2241 L0EED bsr L0F0F |
0 | 2242 bge L0F0C |
2243 rts | |
537 | 2244 L0EF2 bsr L0F0F |
0 | 2245 bgt L0F0C |
2246 rts | |
537 | 2247 L0EF7 bsr L0F0F |
0 | 2248 blt L0F0C |
2249 rts | |
537 | 2250 L0EFC bsr L0F0F |
0 | 2251 ble L0F0C |
2252 rts | |
537 | 2253 L0F01 inc <u0055 |
0 | 2254 ldb #$10 |
2255 bsr L0F21 | |
2256 lda <u003E | |
2257 bne L0F0C | |
2258 rts | |
2259 L0F0C inc <u0054 | |
2260 rts | |
2261 L0F0F inc <u0055 | |
2262 ldb #$30 | |
2263 bsr L0F21 | |
2264 lbsr L12F1 | |
2265 bcc L0F1C | |
537 | 2266 puls pc,d |
0 | 2267 L0F1C cmpd #$0000 |
2268 rts | |
537 | 2269 |
0 | 2270 L0F21 tst <u005F |
2271 bne L0F26 | |
2272 clrb | |
2273 L0F26 stb <u002B | |
2274 rts | |
537 | 2275 |
2276 L0F29 ldb #$10 | |
0 | 2277 bsr L0F21 |
2278 lda <u0055 | |
2279 beq L0F42 | |
2280 lda <u0062 | |
2281 bne L0F3B | |
2282 dec <u0055 | |
2283 lda <u0054 | |
2284 beq L0F41 | |
2285 L0F3B lda <u0054 | |
2286 beq L0F0C | |
2287 dec <u0054 | |
2288 L0F41 rts | |
2289 L0F42 ldb #$1A | |
2290 lbsr L02FA | |
2291 clr <u0054 | |
2292 rts | |
2293 L0F4A pshs u,y,x | |
2294 bsr L0FC3 | |
2295 stx <u002D | |
2296 ldb <u003E | |
2297 bgt L0F7D | |
2298 bcc L0F63 | |
2299 lda #$01 | |
2300 ldu <u0040 | |
2301 lbsr L100B | |
2302 stx <u002D | |
2303 bcc L0F9E | |
2304 bra L0F9A | |
2305 L0F63 cmpa #$00 | |
2306 bne L0F71 | |
2307 lda #$01 | |
2308 ldu <u0040 | |
2309 sta $08,x | |
2310 stu $09,x | |
2311 bra L0F9E | |
2312 L0F71 cmpa #$02 | |
2313 beq L0F9E | |
2314 ora #$80 | |
2315 sta $08,x | |
2316 L0F79 ldb #$08 | |
2317 bra L0F9A | |
2318 L0F7D bcc L0F83 | |
2319 L0F7F ldb #$09 | |
2320 bra L0F9A | |
2321 L0F83 cmpa #$00 | |
2322 beq L0F7F | |
2323 bita #$80 | |
2324 bne L0F79 | |
2325 cmpa #$01 | |
2326 bne L0F9E | |
2327 ldd <u0040 | |
2328 cmpd $09,x | |
2329 beq L0F9E | |
2330 std $09,x | |
2331 ldb #$0A | |
537 | 2332 L0F9A orcc #$01 |
0 | 2333 puls pc,u,y,x |
537 | 2334 L0F9E andcc #$FE |
0 | 2335 puls pc,u,y,x |
2336 L0FA2 pshs u,y,x | |
2337 bsr L0FC3 | |
2338 ldb <u003E | |
2339 bne L0FBB | |
2340 bcc L0FB7 | |
2341 lda #$00 | |
2342 ldu #$0000 | |
2343 bsr L100B | |
2344 bcs L0F9A | |
2345 bra L0F9E | |
2346 L0FB7 ldd $09,x | |
2347 bra L0F9E | |
2348 L0FBB lda $08,x | |
2349 cmpa #$00 | |
2350 bne L0FB7 | |
2351 bra L0F7F | |
2352 L0FC3 bsr L0FFA | |
2353 ldx ,x | |
2354 bne L0FCD | |
2355 leay ,x | |
2356 bra L0FF7 | |
2357 L0FCD pshs x | |
2358 ldy <u0016 | |
2359 ldb #$08 | |
2360 L0FD4 lda ,y+ | |
2361 beq L0FE5 | |
2362 cmpa ,x+ | |
2363 bne L0FE9 | |
2364 decb | |
2365 bne L0FD4 | |
2366 L0FDF puls x | |
2367 lda $08,x | |
2368 clrb | |
2369 rts | |
2370 L0FE5 cmpa ,x+ | |
2371 beq L0FDF | |
2372 L0FE9 puls y | |
2373 bhi L0FF3 | |
2374 ldx $0B,y | |
2375 bne L0FCD | |
2376 bra L0FF7 | |
2377 L0FF3 ldx $0D,y | |
2378 bne L0FCD | |
537 | 2379 L0FF7 orcc #$01 |
0 | 2380 rts |
2381 L0FFA ldx <u0016 | |
2382 ldb ,x | |
2383 ldx <u0010 | |
2384 subb #$41 | |
2385 cmpb #$20 | |
2386 bcs L1008 | |
2387 subb #$06 | |
2388 L1008 lslb | |
2389 abx | |
2390 rts | |
2391 L100B ldx <u001D | |
2392 pshs x,a | |
2393 leax $0F,x | |
2394 cmpx <u0012 | |
2395 bcs L1023 | |
2396 ldb #$0B | |
2397 L1017 clr <u0056 | |
2398 lda #$01 | |
2399 sta <u003E | |
2400 lbsr L02FA | |
2401 lbra L15E9 | |
2402 L1023 stx <u001D | |
2403 sty ,--s | |
2404 bne L1032 | |
2405 leas $02,s | |
2406 bsr L0FFA | |
2407 leay -$0B,x | |
2408 bra L1040 | |
2409 L1032 ldx <u0016 | |
2410 L1034 lda ,x+ | |
2411 cmpa ,y+ | |
2412 beq L1034 | |
2413 puls y | |
2414 bcs L1040 | |
2415 leay $02,y | |
2416 L1040 ldx $01,s | |
2417 stx $0B,y | |
2418 ldy <u0016 | |
2419 lda ,y+ | |
2420 L1049 sta ,x+ | |
2421 lda ,y+ | |
2422 bne L1049 | |
2423 puls x,a | |
2424 sta $08,x | |
2425 stu $09,x | |
2426 clrb | |
2427 rts | |
2428 L1057 bsr L1065 | |
2429 bra L105D | |
2430 bsr L106B | |
2431 L105D pshs a | |
2432 lda #$20 | |
2433 sta ,x+ | |
2434 puls pc,a | |
2435 L1065 exg a,b | |
2436 bsr L106B | |
2437 tfr a,b | |
2438 L106B pshs b | |
2439 andb #$F0 | |
2440 lsrb | |
2441 lsrb | |
2442 lsrb | |
2443 lsrb | |
2444 bsr L1079 | |
2445 puls b | |
2446 andb #$0F | |
2447 L1079 cmpb #$09 | |
2448 bls L107F | |
2449 addb #$07 | |
2450 L107F addb #$30 | |
2451 stb ,x+ | |
2452 rts | |
537 | 2453 * Take number in D and convert to 5 digit ASCII string (stored at X) |
0 | 2454 L1084 pshs u,y,b |
537 | 2455 leau >L10AA,pc Point to powers of 10 table |
2456 ldy #$0005 5 entries (1-10000) | |
2457 L108E clr ,s Clear flag | |
2458 L1090 subd ,u Repeated subtract | |
2459 blo L1098 | |
2460 inc ,s Set flag to 1 | |
0 | 2461 bra L1090 |
2462 L1098 addd ,u++ | |
2463 pshs b | |
2464 ldb $01,s | |
537 | 2465 addb #$30 Make into ASCII # |
0 | 2466 stb ,x+ |
2467 puls b | |
2468 leay -$01,y | |
2469 bne L108E | |
2470 puls pc,u,y,b | |
537 | 2471 * Subtraction table for ASCII conversion |
2472 L10AA fdb 10000 | |
2473 fdb 1000 | |
2474 fdb 100 | |
2475 fdb 10 | |
2476 fdb 1 | |
0 | 2477 L10B4 lbsr L1164 |
2478 leax $01,x | |
2479 cmpa #$25 | |
2480 beq L111D | |
2481 cmpa #$24 | |
2482 beq L10C5 | |
2483 leax -$01,x | |
2484 bra L10F7 | |
2485 L10C5 leas -$04,s | |
2486 bsr L1134 | |
2487 L10C9 bsr L113B | |
2488 bcc L10DD | |
2489 cmpb #$61 | |
2490 bcs L10D3 | |
2491 subb #$20 | |
2492 L10D3 cmpb #$41 | |
2493 bcs L114D | |
2494 cmpb #$46 | |
2495 bhi L114D | |
2496 subb #$37 | |
2497 L10DD stb ,s | |
2498 ldd $02,s | |
2499 bita #$F0 | |
2500 bne L1160 | |
2501 lslb | |
2502 rola | |
2503 lslb | |
2504 rola | |
2505 lslb | |
2506 rola | |
2507 lslb | |
2508 rola | |
2509 addb ,s | |
2510 adca #$00 | |
2511 std $02,s | |
2512 inc $01,s | |
2513 bra L10C9 | |
2514 L10F7 leas -$04,s | |
2515 bsr L1134 | |
2516 L10FB bsr L113B | |
2517 bcs L114D | |
2518 stb ,s | |
2519 ldd $02,s | |
2520 lslb | |
2521 rola | |
2522 std $02,s | |
2523 lslb | |
2524 rola | |
2525 lslb | |
2526 rola | |
2527 bcs L1160 | |
2528 addd $02,s | |
2529 bcs L1160 | |
2530 addb ,s | |
2531 adca #$00 | |
2532 bcs L1160 | |
2533 std $02,s | |
2534 inc $01,s | |
2535 bra L10FB | |
2536 L111D leas -$04,s | |
2537 bsr L1134 | |
2538 L1121 ldb ,x+ | |
2539 subb #$30 | |
2540 bcs L114D | |
2541 lsrb | |
2542 bne L114D | |
2543 rol $03,s | |
2544 rol $02,s | |
2545 bcs L1160 | |
2546 inc $01,s | |
2547 bra L1121 | |
2548 L1134 clra | |
2549 clrb | |
2550 std $02,s | |
2551 std $04,s | |
2552 rts | |
2553 L113B ldb ,x+ | |
2554 cmpb #$30 | |
2555 bcs L1145 | |
2556 cmpb #$39 | |
2557 bls L1148 | |
537 | 2558 L1145 orcc #$01 |
0 | 2559 rts |
2560 L1148 subb #$30 | |
537 | 2561 andcc #$FE |
0 | 2562 rts |
2563 L114D leax -$01,x | |
2564 tst $01,s | |
2565 beq L1159 | |
2566 ldd $02,s | |
537 | 2567 andcc #$FE |
0 | 2568 bra L115D |
537 | 2569 L1159 orcc #$04 |
2570 L115B orcc #$01 | |
0 | 2571 L115D leas $04,s |
2572 rts | |
537 | 2573 L1160 andcc #$FB |
0 | 2574 bra L115B |
537 | 2575 |
2576 * Find next text field | |
2577 * Entry: X=Ptr to current location in source line | |
2578 * Exit: X=Ptr to start of next field in source line | |
2579 * A=First char in new field | |
2580 L1164 lda ,x+ Get char. | |
2581 cmpa #$20 Space? | |
2582 beq L1164 Yes, eat it | |
2583 leax -$01,x Found next field; point to it & return | |
0 | 2584 rts |
537 | 2585 |
2586 L116D pshs x,d | |
0 | 2587 lda $03,s |
2588 mul | |
2589 pshs b,a | |
2590 lda $02,s | |
2591 ldb $05,s | |
2592 mul | |
2593 addb ,s | |
2594 stb ,s | |
2595 lda $03,s | |
2596 ldb $04,s | |
2597 mul | |
2598 addb ,s | |
2599 stb ,s | |
2600 ldd ,s | |
2601 ldx #$0000 | |
2602 leas $06,s | |
2603 rts | |
2604 L118E pshs y,x,b,a | |
2605 ldd ,s | |
2606 bne L1198 | |
537 | 2607 orcc #$01 |
0 | 2608 bra L11B8 |
2609 L1198 ldd #$0010 | |
2610 stb $04,s | |
2611 clrb | |
2612 L119E lsl $03,s | |
2613 rol $02,s | |
2614 rolb | |
2615 rola | |
2616 subd ,s | |
2617 bmi L11AC | |
2618 inc $03,s | |
2619 bra L11AE | |
2620 L11AC addd ,s | |
2621 L11AE dec $04,s | |
2622 bne L119E | |
2623 tfr d,x | |
2624 ldd $02,s | |
537 | 2625 andcc #$FE |
0 | 2626 L11B8 leas $06,s |
2627 rts | |
2628 L11BB sta ,x+ | |
2629 L11BD lda ,y+ | |
2630 bne L11BB | |
2631 rts | |
537 | 2632 |
2633 L11C2 pshs u,y Preserve regs | |
2634 leau ,s Point U to copy of Y on stack | |
2635 bsr L1164 Parse for next field | |
2636 bsr L11D0 Check for special chars | |
2637 andcc #$FE Error flag off | |
2638 puls pc,u,y Restore regs & return | |
2639 | |
2640 L11CE leax 1,x | |
0 | 2641 L11D0 bsr L1211 |
537 | 2642 pshs d |
0 | 2643 L11D4 lda ,x |
537 | 2644 cmpa #'- |
0 | 2645 bne L11E2 |
2646 bsr L120F | |
2647 nega | |
2648 negb | |
2649 sbca #$00 | |
2650 bra L11E8 | |
2651 L11E2 cmpa #$2B | |
2652 bne L11EE | |
2653 bsr L120F | |
2654 L11E8 addd ,s | |
2655 std ,s | |
2656 bra L11D4 | |
2657 L11EE tsta | |
2658 beq L120D | |
2659 cmpa #$0D | |
2660 beq L120D | |
2661 cmpa #$20 | |
2662 beq L120D | |
2663 cmpa #$2C | |
2664 beq L120D | |
2665 cmpa #$29 | |
2666 beq L120D | |
2667 cmpa #$5D | |
2668 beq L120D | |
2669 L1205 ldb #$06 | |
2670 L1207 leas ,u | |
537 | 2671 orcc #$01 |
0 | 2672 puls pc,u,y |
537 | 2673 L120D puls pc,d |
2674 L120F leax 1,x | |
2675 | |
0 | 2676 L1211 bsr L123F |
537 | 2677 pshs d |
2678 | |
0 | 2679 L1215 lda ,x |
537 | 2680 cmpa #'/ |
0 | 2681 bne L122A |
2682 bsr L123D | |
2683 pshs x | |
2684 ldx $02,s | |
2685 lbsr L118E | |
2686 bcc L1237 | |
2687 ldb #$04 | |
2688 bra L1207 | |
537 | 2689 L122A cmpa #'* |
0 | 2690 bne L120D |
2691 bsr L123D | |
2692 pshs x | |
2693 ldx $02,s | |
2694 lbsr L116D | |
2695 L1237 puls x | |
2696 std ,s | |
2697 bra L1215 | |
2698 L123D leax $01,x | |
537 | 2699 |
0 | 2700 L123F bsr L126D |
537 | 2701 pshs d |
0 | 2702 L1243 lda ,x |
537 | 2703 cmpa #'& Logical AND? |
2704 bne L1251 No, check next | |
0 | 2705 bsr L126B |
2706 andb $01,s | |
2707 anda ,s | |
2708 bra L1267 | |
537 | 2709 L1251 cmpa #'! Logical OR? |
2710 bne L125D No, check next | |
0 | 2711 bsr L126B |
2712 orb $01,s | |
2713 ora ,s | |
2714 bra L1267 | |
537 | 2715 L125D cmpa #'? ??? |
0 | 2716 bne L120D |
2717 bsr L126B | |
2718 eorb $01,s | |
2719 eora ,s | |
2720 L1267 std ,s | |
2721 bra L1243 | |
537 | 2722 L126B leax 1,x Bump src code ptr up by 1 |
2723 L126D lda ,x Get char from source code | |
2724 cmpa #'^ Is it a NOT? | |
2725 bne L1279 No, check next | |
0 | 2726 bsr L1284 |
2727 comb | |
2728 coma | |
2729 bra L1283 | |
537 | 2730 L1279 cmpa #'- Is it negative? |
2731 bne L1288 No, check next | |
0 | 2732 bsr L1284 |
2733 nega | |
2734 negb | |
2735 sbca #$00 | |
2736 L1283 rts | |
537 | 2737 L1284 leax 1,x |
2738 L1286 lda ,x Get character from source code | |
2739 L1288 cmpa #'( Math grouping start symbol? | |
2740 bne L12A2 No, check next | |
0 | 2741 lbsr L11CE |
537 | 2742 pshs d |
0 | 2743 lda ,x |
537 | 2744 cmpa #') Math grouping end symbol? |
2745 puls d | |
0 | 2746 beq L12B6 |
2747 ldb <u0007 | |
2748 bra L129D | |
2749 L129D leas $02,s | |
2750 L129F lbra L1207 | |
537 | 2751 L12A2 cmpa #'* Multiply? |
2752 bne L12AA No, check next | |
0 | 2753 ldd <u0040 |
2754 bra L12B6 | |
537 | 2755 L12AA tst <u005A If some flag is set, check next |
0 | 2756 bne L12B9 |
537 | 2757 cmpa #'. Period? |
2758 bne L12B9 No, check next | |
0 | 2759 ldd <u0042 |
2760 inc <u002C | |
537 | 2761 L12B6 leax 1,x Bump src code ptr up & return |
0 | 2762 rts |
537 | 2763 L12B9 cmpa #$27 Tilde (') (eorr)? |
2764 bne L12C5 No, check next | |
0 | 2765 ldd ,x++ |
2766 cmpb #$0D | |
2767 beq L12D6 | |
2768 clra | |
2769 rts | |
537 | 2770 L12C5 cmpa #'" Quotes? |
2771 bne L12D9 No, check next | |
2772 leax 1,x | |
0 | 2773 ldd ,x++ |
2774 cmpa #$0D | |
2775 beq L12D6 | |
2776 cmpb #$0D | |
2777 beq L12D6 | |
2778 rts | |
2779 L12D6 lbra L1205 | |
2780 L12D9 lbsr L10B4 | |
2781 bcc L12EE | |
2782 beq L12E4 | |
2783 ldb #$03 | |
2784 bra L129F | |
2785 L12E4 lbsr L0368 | |
2786 bcs L12D6 | |
2787 lbsr L0FA2 | |
2788 bcs L129F | |
537 | 2789 L12EE andcc #$FE |
0 | 2790 rts |
537 | 2791 * Called by index mode handler |
0 | 2792 L12F1 lbsr L11C2 |
2793 bcs L1304 | |
2794 L12F6 rts | |
2795 L12F7 lbsr L11C2 | |
2796 bcs L1304 | |
2797 tsta | |
2798 beq L12F6 | |
2799 inca | |
2800 beq L12F6 | |
537 | 2801 ldb #$0E Result >255 error |
0 | 2802 L1304 lbsr L02FA |
2803 ldd #$FFFF | |
537 | 2804 orcc #$01 |
0 | 2805 rts |
2806 L130D bsr L134D | |
537 | 2807 pshs x,d |
0 | 2808 ldx <u001B |
2809 sta ,x+ | |
2810 stx <u001B | |
2811 cmpx <u0010 | |
2812 bcs L1321 | |
2813 bsr L1323 | |
2814 ldx <u000E | |
2815 stx <u001B | |
537 | 2816 L1321 puls pc,x,d |
2817 L1323 pshs y,x,d | |
0 | 2818 lda <u0058 |
2819 beq L1340 | |
2820 lda <u003E | |
2821 beq L1340 | |
2822 ldd <u001B | |
2823 subd <u000E | |
2824 beq L1340 | |
2825 tfr d,y | |
2826 ldx <u000E | |
2827 lda <u0019 | |
2828 beq L1340 | |
2829 os9 I$Write | |
2830 bcs L1342 | |
537 | 2831 L1340 puls pc,y,x,d |
0 | 2832 L1342 os9 F$PErr |
2833 ldb #$12 | |
2834 lbsr L02FA | |
2835 lbra L15A2 | |
537 | 2836 L134D pshs u,y,x,d |
0 | 2837 leax ,s |
2838 ldy #$0001 | |
2839 tfr dp,a | |
2840 ldb #$51 | |
2841 tfr d,u | |
2842 os9 F$CRC | |
537 | 2843 puls pc,u,y,x,d |
0 | 2844 L1360 ldd #$FFFF |
2845 std <u0051 | |
2846 stb <u0053 | |
2847 rts | |
2848 L1368 lda <u0057 | |
2849 beq L139A | |
2850 lda <u0056 | |
2851 bmi L139A | |
2852 L1370 lda <u0035 | |
2853 bne L137B | |
2854 pshs x | |
2855 lbsr L1408 | |
2856 puls x | |
2857 L137B bsr L138A | |
2858 lda <u003E | |
2859 beq L1387 | |
2860 lda <u0056 | |
2861 bmi L1387 | |
2862 dec <u0035 | |
2863 L1387 ldx <u0004 | |
2864 rts | |
2865 L138A lda <u0057 | |
2866 beq L1392 | |
2867 lda <u0056 | |
2868 bpl L139A | |
2869 L1392 lda <u005C | |
2870 beq L1387 | |
2871 lda <u0021 | |
2872 beq L1387 | |
2873 L139A lda <u003E | |
2874 beq L1387 | |
2875 pshs y,a | |
2876 bsr L13B8 | |
2877 clra | |
2878 ldb <u0037 | |
2879 ldx <u0004 | |
2880 leax d,x | |
2881 bsr L13B8 | |
2882 ldx <u0004 | |
2883 ldy #$0085 | |
2884 lda <u001A | |
2885 os9 I$WritLn | |
2886 puls pc,y,a | |
2887 L13B8 lda #$0D | |
2888 sta ,x+ | |
2889 rts | |
2890 L13BD leas -$06,s | |
2891 pshs x | |
2892 leax $02,s | |
2893 os9 F$Time | |
2894 puls x | |
2895 bcs L13F0 | |
2896 lda $01,s | |
2897 bsr L13F7 | |
2898 ldb #$2F | |
2899 stb ,x+ | |
2900 lda $02,s | |
2901 bsr L13F7 | |
2902 stb ,x+ | |
2903 lda ,s | |
2904 * 1900-2155 fix | |
537 | 2905 * ++START++ |
0 | 2906 cmpa #100 |
2907 blo L1900 | |
2908 suba #100 | |
2909 cmpa #100 | |
2910 blo L2000 | |
2911 L2100 suba #100 | |
2912 pshs a | |
2913 lda #21 | |
2914 bra PrtCty | |
2915 L2000 pshs a | |
2916 lda #20 | |
2917 bra PrtCty | |
2918 L1900 pshs a | |
2919 lda #19 | |
2920 PrtCty bsr L13F7 | |
2921 puls a | |
537 | 2922 * ++END++ |
0 | 2923 bsr L13F7 |
2924 bsr L13F2 | |
2925 lda $03,s | |
2926 bsr L13F7 | |
2927 ldb #$3A | |
2928 stb ,x+ | |
537 | 2929 lda $04,s |
0 | 2930 bsr L13F7 |
2931 stb ,x+ | |
2932 lda $05,s | |
2933 bsr L13F7 | |
2934 L13F0 leas $06,s | |
2935 L13F2 lda #$20 | |
2936 sta ,x+ | |
2937 rts | |
2938 L13F7 pshs b | |
2939 ldb #$2F | |
2940 L13FB incb | |
2941 suba #$0A | |
2942 bcc L13FB | |
2943 stb ,x+ | |
2944 adda #$3A | |
2945 sta ,x+ | |
2946 puls pc,b | |
2947 L1408 lda <u0056 | |
2948 bmi L1476 | |
2949 lda <u0059 | |
2950 beq L1414 | |
2951 bsr L147D | |
2952 bra L141A | |
2953 L1414 ldb <u0035 | |
2954 addb #$03 | |
2955 bsr L1471 | |
2956 L141A ldx <u0004 | |
2957 pshs x | |
2958 ldx <u0002 | |
2959 stx <u0004 | |
2960 ldb <u0036 | |
2961 subb #$04 | |
2962 stb <u0035 | |
2963 lbsr L01E5 | |
537 | 2964 leay <L14A5,pc Point to 'Microware OS-9 Assembler' etc. |
0 | 2965 lbsr L11BD |
2966 lbsr L13BD | |
2967 ldx <u0004 | |
2968 clra | |
2969 ldb <u0037 | |
2970 subb #$06 | |
2971 leax d,x | |
2972 ldd <u003A | |
2973 lbsr L1084 | |
2974 inc <u003B | |
2975 bne L1447 | |
2976 inc <u003A | |
2977 L1447 leax -$08,x | |
537 | 2978 leay <L149F,pc Point to 'Page' |
0 | 2979 lbsr L11BD |
2980 leax $03,x | |
2981 lbsr L1370 | |
2982 ldy <u000A | |
2983 lbsr L11BD | |
2984 bsr L13F2 | |
2985 lda #$2D | |
2986 sta ,x+ | |
2987 bsr L13F2 | |
2988 ldy <u0008 | |
2989 lbsr L11BD | |
2990 lbsr L1370 | |
2991 puls x | |
2992 stx <u0004 | |
2993 ldb #$01 | |
2994 L1471 bsr L1479 | |
2995 decb | |
2996 bne L1471 | |
2997 L1476 ldx <u0004 | |
2998 rts | |
2999 L1479 lda #$0D | |
3000 bra L147F | |
3001 L147D lda #$0C | |
537 | 3002 L147F pshs y,x,d |
0 | 3003 lda <u003E |
3004 beq L1498 | |
3005 lda <u0057 | |
3006 beq L1498 | |
3007 lda <u0056 | |
3008 bmi L1498 | |
3009 lda <u001A | |
3010 tfr s,x | |
3011 ldy #$0001 | |
3012 os9 I$WritLn | |
537 | 3013 L1498 puls pc,y,x,d |
0 | 3014 L149A ldx <u0004 |
3015 lbra L1370 | |
537 | 3016 |
3017 L149F fcc 'Page ' | |
0 | 3018 fcb $00 |
537 | 3019 |
3020 L14A5 fcc 'Microware OS-9 Assembler RS Version 01.00.00 ' | |
0 | 3021 fcb $00 |
537 | 3022 L14D6 fcc ' error(s)' |
3023 fcb $00 | |
3024 L14E0 fcc ' warning(s)' | |
0 | 3025 fcb $00 |
537 | 3026 L14EC fcc ' program bytes generated' |
0 | 3027 fcb $00 |
537 | 3028 L1505 fcc ' data bytes allocated' |
0 | 3029 fcb $00 |
537 | 3030 L151B fcc ' bytes used for symbols' |
0 | 3031 fcb $00 |
537 | 3032 L1533 fcc 'ASM:' |
3033 | |
3034 L1537 pshs u,y,x,d | |
0 | 3035 lda <u005D |
3036 beq L1549 | |
537 | 3037 leax <L1533,pc Point to 'ASM:' |
3038 ldy #$0004 Size of text | |
3039 lda <u001A Get output path # | |
3040 os9 I$Write Write it out | |
0 | 3041 L1549 ldx <u0000 |
3042 ldy #$0078 | |
3043 lda <u0018 | |
3044 L1551 os9 I$ReadLn | |
3045 bcc L156A | |
3046 cmpb #$D3 | |
3047 bne L1560 | |
3048 bsr L156C | |
3049 bcc L1549 | |
3050 L155E bra L156A | |
3051 L1560 os9 F$PErr | |
3052 ldb #$11 | |
3053 lbsr L02FA | |
3054 bsr L156C | |
537 | 3055 L156A puls pc,u,y,x,d |
0 | 3056 L156C ldu <u001F |
3057 L156E cmpu <u0006 | |
3058 bne L1576 | |
537 | 3059 orcc #$01 |
0 | 3060 rts |
3061 L1576 lda <u0018 | |
3062 pulu b | |
3063 stu <u001F | |
3064 stb <u0018 | |
3065 os9 I$Close | |
3066 bcc L1586 | |
3067 os9 F$PErr | |
3068 L1586 rts | |
3069 L1587 pshs b,a | |
3070 lda #$24 | |
3071 sta ,x+ | |
3072 ldd ,s | |
3073 lbsr L1057 | |
3074 puls b,a | |
3075 L1594 lbsr L1084 | |
3076 tfr u,y | |
3077 lbsr L11BD | |
3078 lbra L1368 | |
3079 L159F lbsr L1323 | |
3080 L15A2 lbsr L149A | |
3081 ldd <u0028 | |
537 | 3082 leau >L14D6,pc |
0 | 3083 bsr L1594 |
3084 ldd <u0022 | |
537 | 3085 leau >L14E0,pc |
0 | 3086 bsr L1594 |
3087 ldd <u0024 | |
537 | 3088 leau >L14EC,pc |
0 | 3089 bsr L1587 |
3090 ldd <u0026 | |
537 | 3091 leau >L1505,pc |
0 | 3092 bsr L1587 |
3093 ldd <u001D | |
3094 subd <u0010 | |
537 | 3095 leau >L151B,pc |
0 | 3096 bsr L1587 |
3097 lda <u005E | |
3098 beq L15D5 | |
3099 bsr L1612 | |
3100 L15D5 lda <u005D | |
3101 bne L15E9 | |
3102 lda <u0059 | |
3103 beq L15E2 | |
3104 lbsr L147D | |
3105 bra L15E9 | |
3106 L15E2 ldb <u0035 | |
3107 addb #$03 | |
3108 lbsr L1471 | |
3109 L15E9 ldu <u001F | |
3110 L15EB cmpu <u0006 | |
3111 beq L15F7 | |
3112 pulu a | |
3113 os9 I$Close | |
3114 bra L15EB | |
3115 L15F7 clrb | |
3116 os9 F$Exit | |
3117 L15FB lda #$01 | |
3118 os9 I$Open | |
3119 ldb #$18 | |
3120 lbcs L1017 | |
3121 rts | |
3122 L1607 lda <u0018 | |
3123 ldu #$0000 | |
3124 tfr u,x | |
3125 os9 I$Seek | |
3126 rts | |
3127 L1612 ldb <u0037 | |
3128 clra | |
3129 tfr d,x | |
3130 ldb #$10 | |
3131 lbsr L118E | |
3132 stb <u003D | |
3133 stb <u003C | |
3134 lbsr L149A | |
3135 ldu <u0010 | |
3136 ldb #$1A | |
3137 pshs b | |
3138 L1629 ldy ,u++ | |
3139 beq L1656 | |
3140 L162E pshs u,y | |
3141 bra L1644 | |
3142 L1632 leau ,y | |
3143 tfr d,y | |
3144 L1636 ldd $0B,y | |
3145 bne L1632 | |
3146 bsr L165F | |
3147 ldy $0D,y | |
3148 sty u000B,u | |
3149 bne L1636 | |
3150 L1644 ldu ,s | |
3151 ldy u000B,u | |
3152 bne L1636 | |
3153 leay ,u | |
3154 bsr L165F | |
3155 puls u,y | |
3156 ldy $0D,y | |
3157 bne L162E | |
3158 L1656 dec ,s | |
3159 bne L1629 | |
3160 leas $01,s | |
3161 lbra L1370 | |
3162 L165F pshs u,y | |
3163 ldd $09,y | |
3164 lbsr L1057 | |
537 | 3165 lda $08,y Get offset into table |
3166 leau <L1691,pc Point to table | |
3167 lda a,u Get table entry | |
3168 ldb #$20 2nd char is a space | |
3169 std ,x++ Store both of them | |
0 | 3170 ldb #$08 |
3171 L1673 lda ,y+ | |
3172 bne L1679 | |
3173 lda #$20 | |
3174 L1679 sta ,x+ | |
3175 decb | |
3176 bne L1673 | |
3177 dec <u003C | |
3178 beq L1688 | |
3179 lda #$20 | |
3180 sta ,x+ | |
3181 bra L168F | |
3182 L1688 lbsr L1370 | |
3183 ldb <u003D | |
3184 stb <u003C | |
3185 L168F puls pc,u,y | |
537 | 3186 |
3187 * Single byte entry table | |
3188 L1691 fcc 'ULSED' | |
0 | 3189 L1696 pshs y,x |
3190 lbsr L15FB | |
3191 sta <u0018 | |
3192 L169D lbsr L1164 | |
3193 cmpa #$0D | |
3194 beq L16CF | |
3195 lbsr L0E33 | |
3196 lda <u0058 | |
3197 beq L16CF | |
3198 lda -$01,x | |
3199 anda #$5F | |
3200 cmpa #$0D | |
3201 beq L16C7 | |
3202 ldb ,x | |
3203 cmpd #$4F3D | |
3204 bne L16C7 | |
3205 ldb #$16 | |
3206 lda <u0019 | |
3207 bne L16D1 | |
3208 leax $01,x | |
3209 bsr L16D4 | |
3210 bra L169D | |
3211 L16C7 lda <u0019 | |
3212 bne L16CF | |
3213 ldx ,s | |
3214 bsr L16D4 | |
3215 L16CF puls pc,y,x | |
3216 L16D1 lbra L1017 | |
3217 L16D4 lda #$06 | |
3218 ldb #$2F | |
3219 os9 I$Create | |
3220 ldb #$18 | |
3221 bcs L16D1 | |
3222 sta <u0019 | |
3223 rts | |
3224 emod | |
3225 eom equ * |