57
|
1 \documentstyle[a4wide]{report}
|
|
2 \title{A macine language monitor for the 6809 Processor}
|
|
3 \author{L.C. Benschop}
|
|
4 \begin{document}
|
|
5 \maketitle
|
|
6 \tableofcontents
|
|
7 \chapter{Introduction}
|
|
8
|
|
9 The program {\tt monitor.asm} is a program that is intended to be included
|
|
10 in the ROM of a 6809 based single board computer. The program allows a user
|
|
11 to communicate with the single board computer through a serial port. It
|
|
12 allows a user to enter machine code, examine memory and registers, to set
|
|
13 breakpoints, to trace a program and more. Furthermore, data can be sent to
|
|
14 and be received from the single board computer through the X-MODEM protocol.
|
|
15
|
|
16 \section{A bit of history.}
|
|
17
|
|
18 In the seventies you could buy single board microcomputers that had a
|
|
19 hexadecimal keypad and 7-segment displays. These computers typically had
|
|
20 less than 1 kilobyte of RAM and a simple monitor program in ROM. An
|
|
21 interface to a cassette recorder (or paper tape reader/writer) and a
|
|
22 terminal was possible, but not standard. The typical way to program the
|
|
23 machine was entering hexadecimal machine codes on the keypad. Machine code
|
|
24 was the only language in which you could program them, especially if you
|
|
25 only had a hexadecimal keypad and 7-segment led displays. You typically used
|
|
26 these machines to experiment with hardware interfacing, as games and
|
|
27 calculations were a bit limited with only six 7-sengment digits.
|
|
28
|
|
29 Next came simple home computers, like the TRS80, the Apple ][ and the
|
|
30 Commodore PET. These machines had BASIC in ROM and they used a simple
|
|
31 cassette recorder to store data. These computers had a TV or a low quality
|
|
32 monitor as display and a QWERTY keyboard. These machines could be upgraded
|
|
33 with a floppy disk drive and a printer and then they could be used for
|
|
34 professional work. These machines had 4 to 64 kilobyts of memory.
|
|
35 Apart from assembly language you could use BASIC, Forth
|
|
36 and sometimes Pascal to program these machines. Most useful programs (and
|
|
37 the best games) were programmed in assembly language. Many of these machines
|
|
38 had BASIC in ROM and no machine code monitor. You had to load that
|
|
39 separately.
|
|
40
|
|
41 Today we have personal computers that run DOS, Windows, Unix or something
|
|
42 else. New computers have 4 to 16 megabytes of RAM and hard disks of more
|
|
43 than 500 Megabytes. Apart from having in the order of 1000 times more
|
|
44 storage, they are also 1000 times faster than the old 8-bit home computers.
|
|
45 Programming? You can use Visual BASIC, C++ and about
|
|
46 every other programming language on the planet. But programs have become
|
|
47 bigger and bigger. Programming is not the same as it was before.
|
|
48
|
|
49 I guess there is some demand for small 8-bit computer systems that are simple
|
|
50 to build, easy to interface to all kinds of hobby projects, fun to program
|
|
51 and small enough to integrate into a home-built project.
|
|
52 Do we want to use hexadecimal keyboards and 7-segment displays? I guess not
|
|
53 many people want to use them. Do we want to use a cassette recorder for data
|
|
54 storage and a TV as a display? Not me. And if you build your own 8-bit
|
|
55 microprocessor, do you want to waste your time and money on a hexadecimal
|
|
56 keypad or a cassette interface that you do not like to use and that you do
|
|
57 not need anyway? PCs of five years ago are more than adequate to run an
|
|
58 editor, a terminal program and a cross assembler for your favourite 8-bit
|
|
59 processor. If you equip an 8-bit system with some static CMOS RAM, a serial
|
|
60 interface and a monitor in ROM, you can use the keyboard, hard disk and
|
|
61 monitor of your PC for program development and the 8-bit micro can be
|
|
62 disconnected from the PC and do its task, once it is programmed.
|
|
63
|
|
64 Cross development is nothing special. How do you think the microprocessor in
|
|
65 you microwave was programmed? But it is not practical for a hobbyist to
|
|
66 program an EPROM for each program change. Professional developers of
|
|
67 embedded processors have expensive tools, like ROM emulators, processor
|
|
68 emulators etc. to see what the processor is doing on its way to the next
|
|
69 crash. For a hobbyist it is much more practival to have a slightly more
|
|
70 expensive embedded computer that you can run an interactive debugger on.
|
|
71 And you are not even limited to assembly language. If you have 32k ROM you
|
|
72 can have both the monitor program and a BASIC interpreter and some
|
|
73 aplication code in ROM. Nothing prevents you from having Forth as well.
|
|
74
|
|
75
|
|
76 \chapter{Hardware that the program is supposed to run on}
|
|
77
|
|
78 \chapter{Use of the monitor commands}
|
|
79
|
|
80 \item{Usage of the memory}
|
|
81
|
|
82 \chapter{Operating System Facilities}
|
|
83
|
|
84 \begin{description}
|
|
85 \item[getchar] address \$00.
|
|
86 \item[putchar] address \$03.
|
|
87 \item[getline] address \$06.
|
|
88 \item[putline] address \$09.
|
|
89 \item[putcr] address \$0C.
|
|
90 \item[getpoll] address \$0F.
|
|
91 \item[xopenin] address \$12.
|
|
92 \item[xopenout] address \$15.
|
|
93 \item[xabortin] address \$18.
|
|
94 \item[xclosein] address \$1B.
|
|
95 \item[xcloseout] address \$1E.
|
|
96 \item[delay] address \$21.
|
|
97 \end{description}
|
|
98
|
|
99
|
|
100 \end{description}
|
|
101
|
|
102 \chapter{Extending the built-in Assembler}
|
|
103
|
|
104 \appendix
|
|
105 \chapter{Assembly listing of monitor program}
|
|
106 {\footnotesize
|
|
107 \begin{verbatim}
|
|
108 0000: ;Buggy machine language monitor and rudimentary O.S. version 1.0
|
|
109 0000:
|
|
110 0000: * Memory map of SBC
|
|
111 0000: * $0-$40 Zero page variables reserved by monitor and O.S.
|
|
112 0000: * $40-$FF Zero page portion for user programs.
|
|
113 0000: * $100-$17F Xmodem buffer 0, terminal input buffer,
|
|
114 0000: * $180-$1FF Xmodem buffer 1, terminal output buffer.
|
|
115 0000: * $200-$27F Terminal input line.
|
|
116 0000: * $280-$2FF Variables reserved by monitor and O.S.
|
|
117 0000: * $300-$400 System stack.
|
|
118 0000: * $400-$7FFF RAM for user programs and data.
|
|
119 0000: * $8000-$DFFF PROM for user programs.
|
|
120 0000: * $E000-$E1FF I/O addresses.
|
|
121 0000: * $E200-$E3FF Reserved.
|
|
122 0000: * $E400-$FFFF Monitor ROM
|
|
123 0000:
|
|
124 0000: * Reserved Zero page addresses
|
|
125 0000: org $0000
|
|
126 0000: * First the I/O routine vectors.
|
|
127 0000: getchar rmb 3 ;Jump to getchar routine.
|
|
128 0003: putchar rmb 3 ;Jump to putchar routine.
|
|
129 0006: getline rmb 3 ;Jump to getline routine.
|
|
130 0009: putline rmb 3 ;Jump to putline routine.
|
|
131 000C: putcr rmb 3 ;Jump to putcr routine.
|
|
132 000F: getpoll rmb 3 ;Jump to getpoll routine.
|
|
133 0012: xopenin rmb 3 ;Jump to xopenin routine.
|
|
134 0015: xopenout rmb 3 ;Jump to xopenout routine.
|
|
135 0018: xabortin rmb 3 ;Jump to xabortin routine.
|
|
136 001B: xclosein rmb 3 ;Jump to xclosein routine.
|
|
137 001E: xcloseout rmb 3 ;Jump to xcloseout routine.
|
|
138 0021: delay rmb 3 ;Jump to delay routine.
|
|
139 0024:
|
|
140 0024: *Next the system variables in the zero page.
|
|
141 0024: temp rmb 2 ;hex scanning/disasm
|
|
142 0026: temp2 rmb 2 ;Hex scanning/disasm
|
|
143 0028: temp3 rmb 2 ;Used in Srecords, H command
|
|
144 002A: timer rmb 3 ;3 byte timer, incremented every 20ms
|
|
145 002D: xpacknum rmb 1 ;Packet number for XMODEM block,
|
|
146 002E: xsum rmb 1 ;XMODEM checksum
|
|
147 002F: lastok rmb 1 ;flag to indicate last block was OK
|
|
148 0030: xcount rmb 1 ;Count of characters in buffer.
|
|
149 0031: xmode rmb 1 ;XMODEM mode, 0 none, 1 out, 2 in.
|
|
150 0032:
|
|
151 0032: * I/O buffers.
|
|
152 0032: buflen equ 128 ;Length of input line buffer.
|
|
153 0032: org $100
|
|
154 0100: buf0 rmb 128 ;Xmodem buffer 0, serial input buffer.
|
|
155 0180: buf1 rmb 128 ;Xmodem buffer 1, serial output buffer.
|
|
156 0200: linebuf rmb buflen ;Input line buffer.
|
|
157 0280:
|
|
158 0280:
|
|
159 0280: * Interrupt vectors (start at $280)
|
|
160 0280: * All interrupts except RESET are vectored through jumps.
|
|
161 0280: * FIRQ is timer interrupt, IRQ is ACIA interrupt.
|
|
162 0280: swi3vec rmb 3
|
|
163 0283: swi2vec rmb 3
|
|
164 0286: firqvec rmb 3
|
|
165 0289: irqvec rmb 3
|
|
166 028C: swivec rmb 3
|
|
167 028F: nmivec rmb 3
|
|
168 0292: xerrvec rmb 3 ;Error handler for XMODEM error.
|
|
169 0295: exprvec rmb 3 ;Expression evaluator in assembler.
|
|
170 0298: asmerrvec rmb 3 ;Error handler for assembler errors.
|
|
171 029B:
|
|
172 029B: * Next the non zero page system variables.
|
|
173 029B: oldpc rmb 2 ;Saved pc value for J command.
|
|
174 029D: addr rmb 2 ;Address parameter.
|
|
175 029F: length rmb 2 ;Length parameter.
|
|
176 02A1:
|
|
177 02A1: brkpoints equ 4 ;Number of settable breakpoints.
|
|
178 02A1: bpaddr rmb brkpoints*3 ;Address and byte for each break point.
|
|
179 02AD: stepbp rmb 3 ;Address of P command break point.
|
|
180 02B0:
|
|
181 02B0: sorg rmb 2 ;Origin address of S record entry.
|
|
182 02B2: soffs rmb 2 ;Offset load adrr-addr in record
|
|
183 02B4:
|
|
184 02B4: oldgetc rmb 2 ;Old getchar address.
|
|
185 02B6: oldputc rmb 2 ;Old putchar address.
|
|
186 02B8: oldputcr rmb 2 ;Old putcr address.
|
|
187 02BA: lastterm rmb 1 ;Last terminating character.
|
|
188 02BB: filler rmb 1 ;Filler at end of XMODEM file.
|
|
189 02BC: xmcr rmb 1 ;end-of-line characters for XMODEM send.
|
|
190 02BD: savesp rmb 2 ;Save sp to restore it on error.
|
|
191 02BF:
|
|
192 02BF: * Following variables are used by assembler/disassembler.
|
|
193 02BF: prebyte rmb 1
|
|
194 02C0: opc1 rmb 1
|
|
195 02C1: opcode rmb 1
|
|
196 02C2: postbyte rmb 1
|
|
197 02C3: amode rmb 1
|
|
198 02C4: operand rmb 2
|
|
199 02C6: mnembuf rmb 5 ;Buffer to store capitalized mnemonic.
|
|
200 02CB: opsize rmb 1 ;SIze (in bytes) of extra oeprand (0--2)
|
|
201 02CC: uncert rmb 1 ;Flag to indicate that op is unknown.
|
|
202 02CD: dpsetting rmb 2
|
|
203 02CF:
|
|
204 02CF: endvars equ *
|
|
205 02CF:
|
|
206 02CF: ramstart equ $400 ;first free RAM address.
|
|
207 02CF:
|
|
208 02CF: ramtop equ $8000 ;top of RAM.
|
|
209 02CF:
|
|
210 02CF: * I/O port addresses
|
|
211 02CF: aciactl equ $e000 ;Control port of ACIA
|
|
212 02CF: aciasta equ $e000 ;Status port of ACIA
|
|
213 02CF: aciadat equ $e001 ;Data port of ACIA
|
|
214 02CF:
|
|
215 02CF: * ASCII control characters.
|
|
216 02CF: SOH equ 1
|
|
217 02CF: EOT equ 4
|
|
218 02CF: ACK equ 6
|
|
219 02CF: BS equ 8
|
|
220 02CF: LF equ 10
|
|
221 02CF: CR equ 13
|
|
222 02CF: NAK equ 21
|
|
223 02CF: CAN equ 24
|
|
224 02CF: DEL equ 127
|
|
225 02CF:
|
|
226 02CF: CASEMASK equ $DF ;Mask to make lowercase into uppercase.
|
|
227 02CF:
|
|
228 02CF: * Monitor ROM starts here.
|
|
229 02CF: org $E400
|
|
230 E400:
|
|
231 E400: 1AFF reset orcc #$FF ;Disable interrupts.
|
|
232 E402: 4F clra
|
|
233 E403: 1F8B tfr a,dp ;Set direct page register to 0.
|
|
234 E405: 10CE0400 lds #ramstart
|
|
235 E409: 8EE4FF ldx #intvectbl
|
|
236 E40C: CE0280 ldu #swi3vec
|
|
237 E40F: C61B ldb #osvectbl-intvectbl
|
|
238 E411: 8D37 bsr blockmove ;Initialize interrupt vectors from ROM.
|
|
239 E413: 8EE51A ldx #osvectbl
|
|
240 E416: CE0000 ldu #0
|
|
241 E419: C624 ldb #endvecs-osvectbl
|
|
242 E41B: 8D2D bsr blockmove ;Initialize I/O vectors from ROM.
|
|
243 E41D: 8D33 bsr initacia ;Initialize serial port.
|
|
244 E41F: 1C00 andcc #$0 ;Enable interrupts
|
|
245 E421: * Put the 'saved' registers of the program being monitored on top of the
|
|
246 E421: * stack. There are 12 bytes on the stack for cc,b,a,dp,x,y,u and pc
|
|
247 E421: * pc is initialized to $400, the rest to zero.
|
|
248 E421: 8E0000 ldx #0
|
|
249 E424: 1F12 tfr x,y
|
|
250 E426: CE0400 ldu #ramstart
|
|
251 E429: 3450 pshs x,u
|
|
252 E42B: 3430 pshs x,y
|
|
253 E42D: 3430 pshs x,y
|
|
254 E42F: 8E029B ldx #oldpc
|
|
255 E432: C634 ldb #endvars-oldpc
|
|
256 E434: 6F80 clvar clr ,x+
|
|
257 E436: 5A decb
|
|
258 E437: 26FB bne clvar ;Clear the variable area.
|
|
259 E439: CC1A03 ldd #$1A03
|
|
260 E43C: FD02BB std filler ;Set XMODEM filler and end-of-line.
|
|
261 E43F: 8EE5C1 ldx #welcome
|
|
262 E442: BDE4E1 jsr outcount
|
|
263 E445: 9D0C jsr putcr ;Print a welcome message.
|
|
264 E447: 7EE558 jmp cmdline
|
|
265 E44A: * Block move routine, from X to U length B. Modifies them all and A.
|
|
266 E44A: A680 blockmove lda ,x+
|
|
267 E44C: A7C0 sta ,u+
|
|
268 E44E: 5A decb
|
|
269 E44F: 26F9 bne blockmove
|
|
270 E451: 39 rts
|
|
271 E452:
|
|
272 E452: * Initialize serial communications port, buffers, interrupts.
|
|
273 E452: C603 initacia ldb #$03
|
|
274 E454: F7E000 stb aciactl
|
|
275 E457: C635 ldb #%00110101
|
|
276 E459: 39 rts
|
|
277 E45A:
|
|
278 E45A: * O.S. routine to read a character into B register.
|
|
279 E45A: F6E000 osgetc ldb aciasta
|
|
280 E45D: C501 bitb #$01
|
|
281 E45F: 27F9 beq osgetc
|
|
282 E461: F6E001 ldb aciadat
|
|
283 E464: 39 rts
|
|
284 E465:
|
|
285 E465: ;O.S. rotuine to check if there is a character ready to be read.
|
|
286 E465: F6E000 osgetpoll ldb aciasta
|
|
287 E468: C501 bitb #$01
|
|
288 E46A: 2602 bne poltrue
|
|
289 E46C: 5F clrb
|
|
290 E46D: 39 rts
|
|
291 E46E: C6FF poltrue ldb #$ff
|
|
292 E470: 39 rts
|
|
293 E471:
|
|
294 E471: * O.S. routine to write the character in the B register.
|
|
295 E471: 3402 osputc pshs a
|
|
296 E473: B6E000 putcloop lda aciasta
|
|
297 E476: 8502 bita #$02
|
|
298 E478: 27F9 beq putcloop
|
|
299 E47A: F7E001 stb aciadat
|
|
300 E47D: 3502 puls a
|
|
301 E47F: 39 rts
|
|
302 E480:
|
|
303 E480: * O.S. routine to read a line into memory at address X, at most B chars
|
|
304 E480: * long, return actual length in B. Permit backspace editing.
|
|
305 E480: 3412 osgetl pshs a,x
|
|
306 E482: D724 stb temp
|
|
307 E484: 4F clra
|
|
308 E485: 9D00 osgetl1 jsr getchar
|
|
309 E487: C47F andb #$7F
|
|
310 E489: C108 cmpb #BS
|
|
311 E48B: 2704 beq backsp
|
|
312 E48D: C17F cmpb #DEL
|
|
313 E48F: 2614 bne osgetl2
|
|
314 E491: 4D backsp tsta ;Recognize BS and DEL as backspace key.
|
|
315 E492: 27F1 beq osgetl1 ;ignore if line already zero length.
|
|
316 E494: C608 ldb #BS
|
|
317 E496: 9D03 jsr putchar
|
|
318 E498: C620 ldb #' '
|
|
319 E49A: 9D03 jsr putchar
|
|
320 E49C: C608 ldb #BS ;Send BS,space,BS. This erases last
|
|
321 E49E: 9D03 jsr putchar ;character on most terminals.
|
|
322 E4A0: 301F leax -1,x ;Decrement address.
|
|
323 E4A2: 4A deca
|
|
324 E4A3: 20E0 bra osgetl1
|
|
325 E4A5: C10D osgetl2 cmpb #CR
|
|
326 E4A7: 2704 beq newline
|
|
327 E4A9: C10A cmpb #LF
|
|
328 E4AB: 2607 bne osgetl3 ;CR or LF character ends line.
|
|
329 E4AD: 9D0C newline jsr putcr
|
|
330 E4AF: 1F89 tfr a,b ;Move length to B
|
|
331 E4B1: 3512 puls a,x ;restore registers.
|
|
332 E4B3: 39 rts ;<--- Here is the exit point.
|
|
333 E4B4: C120 osgetl3 cmpb #' '
|
|
334 E4B6: 25CD blo osgetl1 ;Ignore control characters.
|
|
335 E4B8: 9124 cmpa temp
|
|
336 E4BA: 27C9 beq osgetl1 ;Ignore char if line full.
|
|
337 E4BC: 9D03 jsr putchar ;Echo the character.
|
|
338 E4BE: E780 stb ,x+ ;Store it in memory.
|
|
339 E4C0: 4C inca
|
|
340 E4C1: 20C2 bra osgetl1
|
|
341 E4C3:
|
|
342 E4C3: * O.S. routine to write a line starting at address X, B chars long.
|
|
343 E4C3: 3416 osputl pshs a,b,x
|
|
344 E4C5: 1F98 tfr b,a
|
|
345 E4C7: 4D tsta
|
|
346 E4C8: 2707 beq osputl1
|
|
347 E4CA: E680 osputl2 ldb ,x+
|
|
348 E4CC: 9D03 jsr putchar
|
|
349 E4CE: 4A deca
|
|
350 E4CF: 26F9 bne osputl2
|
|
351 E4D1: 3516 osputl1 puls a,b,x
|
|
352 E4D3: 39 rts
|
|
353 E4D4:
|
|
354 E4D4: * O.S. routine to terminate a line.
|
|
355 E4D4: 3404 oscr pshs b
|
|
356 E4D6: C60D ldb #CR
|
|
357 E4D8: 9D03 jsr putchar
|
|
358 E4DA: C60A ldb #LF
|
|
359 E4DC: 9D03 jsr putchar ;Send the CR and LF characters.
|
|
360 E4DE: 3504 puls b
|
|
361 E4E0: 39 rts
|
|
362 E4E1:
|
|
363 E4E1: * Output a counted string at addr X
|
|
364 E4E1: 3414 outcount pshs x,b
|
|
365 E4E3: E680 ldb ,x+
|
|
366 E4E5: 9D09 jsr putline
|
|
367 E4E7: 3514 puls x,b
|
|
368 E4E9: 39 rts
|
|
369 E4EA:
|
|
370 E4EA: 0C2C timerirq inc timer+2
|
|
371 E4EC: 2608 bne endirq
|
|
372 E4EE: 0C2B inc timer+1
|
|
373 E4F0: 2604 bne endirq
|
|
374 E4F2: 0C2A inc timer
|
|
375 E4F4: 3B rti
|
|
376 E4F5: 12 aciairq nop
|
|
377 E4F6: 3B endirq rti
|
|
378 E4F7:
|
|
379 E4F7: * Wait D times 20ms.
|
|
380 E4F7: D32B osdly addd timer+1
|
|
381 E4F9: 10932B dlyloop cmpd timer+1
|
|
382 E4FC: 26FB bne dlyloop
|
|
383 E4FE: 39 rts
|
|
384 E4FF:
|
|
385 E4FF: * This table will be copied to the interrupt vector area in RAM.
|
|
386 E4FF: 7EE4F6 intvectbl jmp endirq
|
|
387 E502: 7EE4F6 jmp endirq
|
|
388 E505: 7EE4EA jmp timerirq
|
|
389 E508: 7EE4F5 jmp aciairq
|
|
390 E50B: 7EE549 jmp unlaunch
|
|
391 E50E: 7EE4F6 jmp endirq
|
|
392 E511: 7EEDED jmp xerrhand
|
|
393 E514: 7EF69B jmp expr
|
|
394 E517: 7E0298 jmp asmerrvec
|
|
395 E51A: * And this one to the I/O vector table.
|
|
396 E51A: 7EE45A osvectbl jmp osgetc
|
|
397 E51D: 7EE471 jmp osputc
|
|
398 E520: 7EE480 jmp osgetl
|
|
399 E523: 7EE4C3 jmp osputl
|
|
400 E526: 7EE4D4 jmp oscr
|
|
401 E529: 7EE465 jmp osgetpoll
|
|
402 E52C: 7EECE6 jmp xopin
|
|
403 E52F: 7EED09 jmp xopout
|
|
404 E532: 7EED2E jmp xabtin
|
|
405 E535: 7EED71 jmp xclsin
|
|
406 E538: 7EED4E jmp xclsout
|
|
407 E53B: 7EE4F7 jmp osdly
|
|
408 E53E: endvecs equ *
|
|
409 E53E:
|
|
410 E53E: * The J command returns here.
|
|
411 E53E: 3410 stakregs pshs x ;Stack something where the pc comes
|
|
412 E540: 347F pshs ccr,b,a,dp,x,y,u ;Stack the normal registers.
|
|
413 E542: BE029B ldx oldpc
|
|
414 E545: AF6A stx 10,s ;Stack the old pc value.
|
|
415 E547: 2007 bra unlaunch1
|
|
416 E549: * The G and P commands return here through a breakpoint.
|
|
417 E549: * Registers are already stacked.
|
|
418 E549: EC6A unlaunch ldd 10,s
|
|
419 E54B: 830001 subd #1
|
|
420 E54E: ED6A std 10,s ;Decrement pc before breakpoint
|
|
421 E550: 1C00 unlaunch1 andcc #$0 ;reenable the interrupts.
|
|
422 E552: BDE970 jsr disarm ;Disarm the breakpoints.
|
|
423 E555: BDE8C5 jsr dispregs
|
|
424 E558: 9D1E cmdline jsr xcloseout
|
|
425 E55A: 10FF02BD sts savesp
|
|
426 E55E: 8E0200 ldx #linebuf
|
|
427 E561: C680 ldb #buflen
|
|
428 E563: 9D06 jsr getline
|
|
429 E565: 5D tstb
|
|
430 E566: 27F0 beq cmdline ;Ignore line if it is empty
|
|
431 E568: 3A abx
|
|
432 E569: 6F84 clr ,x ;Make location after line zero.
|
|
433 E56B: 8E0200 ldx #linebuf
|
|
434 E56E: E680 ldb ,x+
|
|
435 E570: C4DF andb #CASEMASK ;Make 1st char uppercase.
|
|
436 E572: C041 subb #'A'
|
|
437 E574: 253E bcs unk
|
|
438 E576: C11A cmpb #26
|
|
439 E578: 243A bcc unk ;Unknown cmd if it is not a letter.
|
|
440 E57A: 8EE580 ldx #cmdtab
|
|
441 E57D: 58 aslb ;Index into command table.
|
|
442 E57E: 6E95 jmp [b,x]
|
|
443 E580:
|
|
444 E580: FBA4E9A6E5B4E7 cmdtab fdb asm,break,unk,dump
|
|
445 E588: E7BDEB56E86AE8 fdb enter,find,go,hex
|
|
446 E590: E824E879E5B4E5 fdb inp,jump,unk,unk
|
|
447 E598: EB19E5B4E5B4E8 fdb move,unk,unk,prog
|
|
448 E5A0: E5B4E90CEA14E8 fdb unk,regs,srec,trace
|
|
449 E5A8: F644E5B4E5B4ED fdb unasm,unk,unk,xmodem
|
|
450 E5B0: E5B4E5B4 fdb unk,unk
|
|
451 E5B4:
|
|
452 E5B4: * Unknown command handling routine.
|
|
453 E5B4: 9D18 unk jsr xabortin
|
|
454 E5B6: 8EE5DE ldx #unknown
|
|
455 E5B9: BDE4E1 jsr outcount
|
|
456 E5BC: 9D0C jsr putcr
|
|
457 E5BE: 7EE558 jmp cmdline
|
|
458 E5C1:
|
|
459 E5C1:
|
|
460 E5C1:
|
|
461 E5C1: * Here are some useful messages.
|
|
462 E5C1: 1C welcome fcb unknown-welcome-1
|
|
463 E5C2: 57656C636F6D65 fcc "Welcome to BUGGY version 1.0"
|
|
464 E5DE: 0F unknown fcb brkmsg-unknown-1
|
|
465 E5DF: 556E6B6E6F776E fcc "Unknown command"
|
|
466 E5EE: 0E brkmsg fcb clrmsg-brkmsg-1
|
|
467 E5EF: 427265616B706F fcc "Breakpoint set"
|
|
468 E5FD: 12 clrmsg fcb fullmsg-clrmsg-1
|
|
469 E5FE: 427265616B706F fcc "Breakpoint cleared"
|
|
470 E610: 10 fullmsg fcb smsg-fullmsg-1
|
|
471 E611: 427265616B706F fcc "Breakpoints full"
|
|
472 E621: 11 smsg fcb lastrec-smsg-1
|
|
473 E622: 4572726F722069 fcc "Error in S record"
|
|
474 E633: 0A lastrec fcb xsmsg-lastrec-1
|
|
475 E634: 53393033303030 fcc "S9030000FC"
|
|
476 E63E: 11 xsmsg fcb xrmsg-xsmsg-1
|
|
477 E63F: 53746172742058 fcc "Start XMODEM Send"
|
|
478 E650: 14 xrmsg fcb xamsg-xrmsg-1
|
|
479 E651: 53746172742058 fcc "Start XMODEM Receive"
|
|
480 E665: 17 xamsg fcb invmmsg-xamsg-1
|
|
481 E666: 584D4F44454D20 fcc "XMODEM transfer aborted"
|
|
482 E67D: 10 invmmsg fcb exprmsg-invmmsg-1
|
|
483 E67E: 496E76616C6964 fcc "Invalid mnemonic"
|
|
484 E68E: 10 exprmsg fcb modemsg-exprmsg-1
|
|
485 E68F: 45787072657373 fcc "Expression error"
|
|
486 E69F: 15 modemsg fcb brmsg-modemsg-1
|
|
487 E6A0: 41646472657373 fcc "Addressing mode error"
|
|
488 E6B5: 0F brmsg fcb endmsg-brmsg-1
|
|
489 E6B6: 4272616E636820 fcc "Branch too long"
|
|
490 E6C5: endmsg equ *
|
|
491 E6C5:
|
|
492 E6C5: * Output hex digit contained in A
|
|
493 E6C5: 8B90 hexdigit adda #$90
|
|
494 E6C7: 19 daa
|
|
495 E6C8: 8940 adca #$40
|
|
496 E6CA: 19 daa ;It's the standard conversion trick ascii
|
|
497 E6CB: 1F89 tfr a,b ;to hex without branching.
|
|
498 E6CD: 9D03 jsr putchar
|
|
499 E6CF: 39 rts
|
|
500 E6D0:
|
|
501 E6D0: * Output contents of A as two hex digits
|
|
502 E6D0: 3402 outbyte pshs a
|
|
503 E6D2: 44 lsra
|
|
504 E6D3: 44 lsra
|
|
505 E6D4: 44 lsra
|
|
506 E6D5: 44 lsra
|
|
507 E6D6: 8DED bsr hexdigit
|
|
508 E6D8: 3502 puls a
|
|
509 E6DA: 840F anda #$0f
|
|
510 E6DC: 20E7 bra hexdigit
|
|
511 E6DE:
|
|
512 E6DE: * Output contents of d as four hex digits
|
|
513 E6DE: 3404 outd pshs b
|
|
514 E6E0: 8DEE bsr outbyte
|
|
515 E6E2: 3502 puls a
|
|
516 E6E4: 8DEA bsr outbyte
|
|
517 E6E6: 39 rts
|
|
518 E6E7:
|
|
519 E6E7: * Skip X past spaces, B is first non-space character.
|
|
520 E6E7: E680 skipspace ldb ,x+
|
|
521 E6E9: C120 cmpb #' '
|
|
522 E6EB: 27FA beq skipspace
|
|
523 E6ED: 39 rts
|
|
524 E6EE:
|
|
525 E6EE: * Convert ascii hex digit in B register to binary Z flag set if no hex digit.
|
|
526 E6EE: C030 convb subb #'0'
|
|
527 E6F0: 2513 blo convexit
|
|
528 E6F2: C109 cmpb #9
|
|
529 E6F4: 230C bls cb2
|
|
530 E6F6: C4DF andb #CASEMASK ;Make uppercase.
|
|
531 E6F8: C007 subb #7 ;If higher than digit 9 it must be a letter.
|
|
532 E6FA: C109 cmpb #9
|
|
533 E6FC: 2307 bls convexit
|
|
534 E6FE: C10F cmpb #15
|
|
535 E700: 2203 bhi convexit
|
|
536 E702: 1CFB cb2 andcc #$FB ;clear zero
|
|
537 E704: 39 rts
|
|
538 E705: 1A04 convexit orcc #$04
|
|
539 E707: 39 rts
|
|
540 E708:
|
|
541 E708: DC24 scanexit ldd temp
|
|
542 E70A: 301F leax -1,x
|
|
543 E70C: 0D26 tst temp2
|
|
544 E70E: 39 rts <-- exit point of scanhex
|
|
545 E70F:
|
|
546 E70F: * Scan for hexadecimal number at address X return in D, Z flag is set it no
|
|
547 E70F: * number found.
|
|
548 E70F: 0F24 scanhex clr temp
|
|
549 E711: 0F25 clr temp+1
|
|
550 E713: 0F26 clr temp2
|
|
551 E715: 8DD0 bsr skipspace
|
|
552 E717: BDE6EE scloop jsr convb
|
|
553 E71A: 27EC beq scanexit
|
|
554 E71C: 3404 pshs b
|
|
555 E71E: DC24 ldd temp
|
|
556 E720: 58 aslb
|
|
557 E721: 49 rola
|
|
558 E722: 58 aslb
|
|
559 E723: 49 rola
|
|
560 E724: 58 aslb
|
|
561 E725: 49 rola
|
|
562 E726: 58 aslb
|
|
563 E727: 49 rola
|
|
564 E728: EBE0 addb ,s+
|
|
565 E72A: DD24 std temp
|
|
566 E72C: 0C26 inc temp2
|
|
567 E72E: E680 ldb ,x+
|
|
568 E730: 20E5 bra scloop
|
|
569 E732:
|
|
570 E732: FD029F scan2parms std length
|
|
571 E735: 8DD8 bsr scanhex
|
|
572 E737: 2710 beq sp2
|
|
573 E739: FD029D std addr
|
|
574 E73C: 8DA9 bsr skipspace
|
|
575 E73E: C12C cmpb #','
|
|
576 E740: 2607 bne sp2
|
|
577 E742: 8DCB bsr scanhex
|
|
578 E744: 2703 beq sp2
|
|
579 E746: FD029F std length
|
|
580 E749: 39 sp2 rts
|
|
581 E74A:
|
|
582 E74A: * Scan two hexdigits at in and convert to byte into A, Z flag if error.
|
|
583 E74A: 8D9B scanbyte bsr skipspace
|
|
584 E74C: 8DA0 bsr convb
|
|
585 E74E: 2712 beq sb1
|
|
586 E750: 1F98 tfr b,a
|
|
587 E752: E680 ldb ,x+
|
|
588 E754: 8D98 bsr convb
|
|
589 E756: 270A beq sb1
|
|
590 E758: 48 asla
|
|
591 E759: 48 asla
|
|
592 E75A: 48 asla
|
|
593 E75B: 48 asla
|
|
594 E75C: D724 stb temp
|
|
595 E75E: 9B24 adda temp
|
|
596 E760: 1CFB andcc #$fb ;Clear zero flag
|
|
597 E762: 39 sb1 rts
|
|
598 E763:
|
|
599 E763:
|
|
600 E763: * This is the code for the D command, hex/ascii dump of memory
|
|
601 E763: * Syntax: D or D<addr> or D<addr>,<length>
|
|
602 E763: 8E0201 dump ldx #linebuf+1
|
|
603 E766: CC0040 ldd #$40
|
|
604 E769: BDE732 jsr scan2parms ;Scan address and length, default length=64
|
|
605 E76C: 10BE029D ldy addr
|
|
606 E770: 8610 dh1 lda #16
|
|
607 E772: 9725 sta temp+1
|
|
608 E774: 1F20 tfr y,d
|
|
609 E776: BDE6DE jsr outd
|
|
610 E779: C620 ldb #' '
|
|
611 E77B: 9D03 jsr putchar
|
|
612 E77D: A6A0 dh2 lda ,y+ ;display row of 16 mem locations as hex
|
|
613 E77F: BDE6D0 jsr outbyte
|
|
614 E782: C620 ldb #' '
|
|
615 E784: 9625 lda temp+1
|
|
616 E786: 8109 cmpa #9
|
|
617 E788: 2602 bne dh6
|
|
618 E78A: C62D ldb #'-' ;Do a - after the eighth byte.
|
|
619 E78C: 9D03 dh6 jsr putchar
|
|
620 E78E: 0A25 dec temp+1
|
|
621 E790: 26EB bne dh2
|
|
622 E792: 3130 leay -16,y ;And now for the ascii dump.
|
|
623 E794: 8610 lda #16
|
|
624 E796: E6A0 dh3 ldb ,y+
|
|
625 E798: C120 cmpb #' '
|
|
626 E79A: 2402 bhs dh4
|
|
627 E79C: C62E ldb #'.'
|
|
628 E79E: C17F dh4 cmpb #DEL
|
|
629 E7A0: 2502 blo dh5
|
|
630 E7A2: C62E ldb #'.' ;Convert all nonprintables to .
|
|
631 E7A4: 9D03 dh5 jsr putchar
|
|
632 E7A6: 4A deca
|
|
633 E7A7: 26ED bne dh3
|
|
634 E7A9: 9D0C jsr putcr
|
|
635 E7AB: FC029F ldd length
|
|
636 E7AE: 830010 subd #16
|
|
637 E7B1: FD029F std length
|
|
638 E7B4: 22BA bhi dh1
|
|
639 E7B6: 10BF029D sty addr
|
|
640 E7BA: 7EE558 jmp cmdline
|
|
641 E7BD:
|
|
642 E7BD: * This is the code for the E command, enter hex bytes or ascii string.
|
|
643 E7BD: * Syntax E or E<addr> or E<addr> <bytes> or E<addr>"string"
|
|
644 E7BD: 8E0201 enter ldx #linebuf+1
|
|
645 E7C0: BDE70F jsr scanhex
|
|
646 E7C3: 2703 beq ent1
|
|
647 E7C5: FD029D std addr
|
|
648 E7C8: 8D26 ent1 bsr entline
|
|
649 E7CA: 1026FD8A lbne cmdline ;No bytes, then enter interactively.
|
|
650 E7CE: C645 ent2 ldb #'E'
|
|
651 E7D0: 9D03 jsr putchar
|
|
652 E7D2: FC029D ldd addr
|
|
653 E7D5: BDE6DE jsr outd
|
|
654 E7D8: C620 ldb #' '
|
|
655 E7DA: 9D03 jsr putchar ;Display Eaddr + space
|
|
656 E7DC: 8E0200 ldx #linebuf
|
|
657 E7DF: C680 ldb #buflen
|
|
658 E7E1: 9D06 jsr getline ;Get the line.
|
|
659 E7E3: 3A abx
|
|
660 E7E4: 6F84 clr ,x
|
|
661 E7E6: 8E0200 ldx #linebuf
|
|
662 E7E9: 8D05 bsr entline
|
|
663 E7EB: 26E1 bne ent2
|
|
664 E7ED: 7EE558 jmp cmdline
|
|
665 E7F0:
|
|
666 E7F0: * Enter a line of hex bytes or ascci string at address X, Z if empty.
|
|
667 E7F0: BDE6E7 entline jsr skipspace
|
|
668 E7F3: 5D tstb
|
|
669 E7F4: 272B beq entexit
|
|
670 E7F6: C122 cmpb #'"'
|
|
671 E7F8: 270F beq entasc
|
|
672 E7FA: 301F leax -1,x
|
|
673 E7FC: 10BE029D ldy addr
|
|
674 E800: BDE74A entl2 jsr scanbyte ;Enter hex digits.
|
|
675 E803: 2715 beq entdone
|
|
676 E805: A7A0 sta ,y+
|
|
677 E807: 20F7 bra entl2
|
|
678 E809: 10BE029D entasc ldy addr
|
|
679 E80D: A680 entl3 lda ,x+
|
|
680 E80F: 4D tsta
|
|
681 E810: 2708 beq entdone
|
|
682 E812: 8122 cmpa #'"'
|
|
683 E814: 2704 beq entdone
|
|
684 E816: A7A0 sta ,y+
|
|
685 E818: 20F3 bra entl3
|
|
686 E81A: 10BF029D entdone sty addr
|
|
687 E81E: 1CFB andcc #$fb
|
|
688 E820: 39 rts
|
|
689 E821: 1A04 entexit orcc #$04
|
|
690 E823: 39 rts
|
|
691 E824:
|
|
692 E824: *This is the code for the I command, display the contents of an address
|
|
693 E824: * Syntax: Iaddr
|
|
694 E824: 8E0201 inp ldx #linebuf+1
|
|
695 E827: BDE70F jsr scanhex
|
|
696 E82A: 1F01 tfr d,x
|
|
697 E82C: A684 lda ,x ;Read the byte from memory.
|
|
698 E82E: BDE6D0 jsr outbyte ;Display itin hex.
|
|
699 E831: 9D0C jsr putcr
|
|
700 E833: 7EE558 jmp cmdline
|
|
701 E836:
|
|
702 E836: *This is the code for the H command, display result of simple hex expression
|
|
703 E836: *Syntax Hhexnum{+|-hexnum}
|
|
704 E836: 8E0201 hex ldx #linebuf+1
|
|
705 E839: BDE70F jsr scanhex
|
|
706 E83C: DD28 std temp3
|
|
707 E83E: BDE6E7 hexloop jsr skipspace
|
|
708 E841: C12B cmpb #'+'
|
|
709 E843: 2609 bne hex1
|
|
710 E845: BDE70F jsr scanhex
|
|
711 E848: D328 addd temp3
|
|
712 E84A: DD28 std temp3
|
|
713 E84C: 20F0 bra hexloop
|
|
714 E84E: C12D hex1 cmpb #'-'
|
|
715 E850: 260E bne hexend
|
|
716 E852: BDE70F jsr scanhex
|
|
717 E855: 53 comb
|
|
718 E856: 43 coma
|
|
719 E857: C30001 addd #1
|
|
720 E85A: D328 addd temp3
|
|
721 E85C: DD28 std temp3
|
|
722 E85E: 20DE bra hexloop
|
|
723 E860: DC28 hexend ldd temp3
|
|
724 E862: BDE6DE jsr outd
|
|
725 E865: 9D0C jsr putcr
|
|
726 E867: 7EE558 jmp cmdline
|
|
727 E86A:
|
|
728 E86A: * This is the code for the G command, jump to the program
|
|
729 E86A: * Syntax G or G<addr>
|
|
730 E86A: 8E0201 go ldx #linebuf+1
|
|
731 E86D: BDE70F jsr scanhex
|
|
732 E870: 2702 beq launch
|
|
733 E872: ED6A std 10,s ;Store parameter in pc location.
|
|
734 E874: BDE98A launch jsr arm ;Arm the breakpoints.
|
|
735 E877: 35FF puls ccr,b,a,dp,x,y,u,pc
|
|
736 E879:
|
|
737 E879: * This is the code for the J command, run a subroutine.
|
|
738 E879: * Syntax J<addr>
|
|
739 E879: 8E0201 jump ldx #linebuf+1
|
|
740 E87C: EC6A ldd 10,s
|
|
741 E87E: FD029B std oldpc ;Save old pc
|
|
742 E881: BDE70F jsr scanhex
|
|
743 E884: ED6A std 10,s ;Store parameter in PC location
|
|
744 E886: 1F41 tfr s,x
|
|
745 E888: 327E leas -2,s
|
|
746 E88A: 1F43 tfr s,u
|
|
747 E88C: C60C ldb #12 ;Move the saved register set 2 addresses
|
|
748 E88E: BDE44A jsr blockmove ;down on the stack.
|
|
749 E891: CCE53E ldd #stakregs
|
|
750 E894: ED6C std 12,s ;Prepare subroutine return address.
|
|
751 E896: 20DC bra launch ;Jump to the routine.
|
|
752 E898:
|
|
753 E898:
|
|
754 E898: * This is the code for the P command, run instruction followed by breakpoint
|
|
755 E898: * Syntax P
|
|
756 E898: 10AE6A prog ldy 10,s ;Get program counter value.
|
|
757 E89B: BDF36B jsr disdecode ;Find out location past current insn.
|
|
758 E89E: 10BF02AD sty stepbp
|
|
759 E8A2: 20D0 bra launch
|
|
760 E8A4:
|
|
761 E8A4: * This is the code for the T command, single step trace an instruction.
|
|
762 E8A4: * Syntax T
|
|
763 E8A4: 7EE558 trace jmp cmdline
|
|
764 E8A7:
|
|
765 E8A7: * Display the contents of 8 bit register, name in B, contents in A
|
|
766 E8A7: 9D03 disp8 jsr putchar
|
|
767 E8A9: C63D ldb #'='
|
|
768 E8AB: 9D03 jsr putchar
|
|
769 E8AD: BDE6D0 jsr outbyte
|
|
770 E8B0: C620 ldb #' '
|
|
771 E8B2: 9D03 jsr putchar
|
|
772 E8B4: 39 rts
|
|
773 E8B5:
|
|
774 E8B5: * Display the contents of 16 bit register, name in B, contents in Y
|
|
775 E8B5: 9D03 disp16 jsr putchar
|
|
776 E8B7: C63D ldb #'='
|
|
777 E8B9: 9D03 jsr putchar
|
|
778 E8BB: 1F20 tfr y,d
|
|
779 E8BD: BDE6DE jsr outd
|
|
780 E8C0: C620 ldb #' '
|
|
781 E8C2: 9D03 jsr putchar
|
|
782 E8C4: 39 rts
|
|
783 E8C5:
|
|
784 E8C5: * Display the contents of the registers and disassemble instruction at
|
|
785 E8C5: * PC location.
|
|
786 E8C5: C658 dispregs ldb #'X'
|
|
787 E8C7: 10AE66 ldy 6,s ;Note that there's one return address on
|
|
788 E8CA: 8DE9 bsr disp16 ;stack so saved register offsets are
|
|
789 E8CC: C659 ldb #'Y' ;inremented by 2.
|
|
790 E8CE: 10AE68 ldy 8,s
|
|
791 E8D1: 8DE2 bsr disp16
|
|
792 E8D3: C655 ldb #'U'
|
|
793 E8D5: 10AE6A ldy 10,s
|
|
794 E8D8: 8DDB bsr disp16
|
|
795 E8DA: C653 ldb #'S'
|
|
796 E8DC: 1F42 tfr s,y
|
|
797 E8DE: 312E leay 14,y ;S of the running program is 12 higher,
|
|
798 E8E0: ;because regs are not stacked when running.
|
|
799 E8E0: 8DD3 bsr disp16
|
|
800 E8E2: C641 ldb #'A'
|
|
801 E8E4: A663 lda 3,s
|
|
802 E8E6: 8DBF bsr disp8
|
|
803 E8E8: C642 ldb #'B'
|
|
804 E8EA: A664 lda 4,s
|
|
805 E8EC: 8DB9 bsr disp8
|
|
806 E8EE: C644 ldb #'D'
|
|
807 E8F0: A665 lda 5,s
|
|
808 E8F2: 8DB3 bsr disp8
|
|
809 E8F4: C643 ldb #'C'
|
|
810 E8F6: A662 lda 2,s
|
|
811 E8F8: 8DAD bsr disp8
|
|
812 E8FA: 9D0C jsr putcr
|
|
813 E8FC: C650 ldb #'P'
|
|
814 E8FE: 10AE6C ldy 12,s
|
|
815 E901: 8DB2 bsr disp16
|
|
816 E903: BDF36B jsr disdecode
|
|
817 E906: BDF44E jsr disdisp ;Disassemble instruction at PC
|
|
818 E909: 9D0C jsr putcr
|
|
819 E90B: 39 rts
|
|
820 E90C:
|
|
821 E90C:
|
|
822 E90C: * This is the code for the R command, display or alter the registers.
|
|
823 E90C: * Syntax R or R<letter><hex>
|
|
824 E90C: 8E0201 regs ldx #linebuf+1
|
|
825 E90F: BDE6E7 jsr skipspace
|
|
826 E912: 5D tstb
|
|
827 E913: 2605 bne setreg
|
|
828 E915: 8DAE bsr dispregs ;Display regs ifnothing follows.
|
|
829 E917: 7EE558 jmp cmdline
|
|
830 E91A: 108EE966 setreg ldy #regtab
|
|
831 E91E: 4F clra
|
|
832 E91F: C4DF andb #CASEMASK ;Make letter uppercase.
|
|
833 E921: 6DA4 sr1 tst ,y
|
|
834 E923: 1027FC8D lbeq unk ;At end of register tab, unknown reg
|
|
835 E927: E1A0 cmpb ,y+
|
|
836 E929: 2703 beq sr2 ;Found the register?
|
|
837 E92B: 4C inca
|
|
838 E92C: 20F3 bra sr1
|
|
839 E92E: 3402 sr2 pshs a
|
|
840 E930: BDE70F jsr scanhex ;Convert the hex argument.
|
|
841 E933: 3406 pshs d
|
|
842 E935: A662 lda 2,s ;Get register number.
|
|
843 E937: 8104 cmpa #4
|
|
844 E939: 2409 bcc sr3
|
|
845 E93B: E661 ldb 1,s ;It's 8 bit.
|
|
846 E93D: 3263 leas 3,s ;Remove temp stuff from stack.
|
|
847 E93F: E7E6 stb a,s ;Store it in the reg on stack.
|
|
848 E941: 7EE558 jmp cmdline
|
|
849 E944: 8108 sr3 cmpa #8
|
|
850 E946: 240C bcc sr4
|
|
851 E948: 3510 puls x ;It's 16 bit.
|
|
852 E94A: 3261 leas 1,s
|
|
853 E94C: 48 lsla
|
|
854 E94D: 8004 suba #4 ;Convert reg no to stack offset.
|
|
855 E94F: AFE6 stx a,s
|
|
856 E951: 7EE558 jmp cmdline
|
|
857 E954: 3540 sr4 puls u ;It's the stack pointer.
|
|
858 E956: 3261 leas 1,s
|
|
859 E958: 3354 leau -12,u
|
|
860 E95A: 1F41 tfr s,x
|
|
861 E95C: 1F34 tfr u,s ;Set new stack pointer.
|
|
862 E95E: C60C ldb #12
|
|
863 E960: BDE44A jsr blockmove ;Move register set to new stack location.
|
|
864 E963: 7EE558 jmp cmdline
|
|
865 E966:
|
|
866 E966: 43414244585955 regtab FCC "CABDXYUPS "
|
|
867 E970:
|
|
868 E970: * Disarm the breakpoints, this is replace the SWI instructions with the
|
|
869 E970: * original byte.
|
|
870 E970: 8E02A1 disarm ldx #bpaddr
|
|
871 E973: 8605 lda #brkpoints+1
|
|
872 E975: EE81 disarm1 ldu ,x++
|
|
873 E977: E680 ldb ,x+ ;Get address in u, byte in b
|
|
874 E979: 11830000 cmpu #0
|
|
875 E97D: 2702 beq disarm2
|
|
876 E97F: E7C4 stb ,u
|
|
877 E981: 4A disarm2 deca
|
|
878 E982: 26F1 bne disarm1
|
|
879 E984: CE0000 ldu #0
|
|
880 E987: EF1D stu -3,x ;Clear the step breakpoint.
|
|
881 E989: 39 rts
|
|
882 E98A:
|
|
883 E98A: * Arm the breakponts, this is replace the byte at the breakpoint address
|
|
884 E98A: * with an SWI instruction.
|
|
885 E98A: 8E02AD arm ldx #bpaddr+brkpoints*3
|
|
886 E98D: 8605 lda #brkpoints+1 ;Arm them in reverse order of disarming.
|
|
887 E98F: EE84 arm1 ldu ,x ;Get address in u.
|
|
888 E991: 270D beq arm2
|
|
889 E993: E6C4 ldb ,u
|
|
890 E995: E702 stb 2,x
|
|
891 E997: 11A36C cmpu 12,s ;Compare to program counter location
|
|
892 E99A: 2704 beq arm2
|
|
893 E99C: C63F ldb #$3F
|
|
894 E99E: E7C4 stb ,u ;Store SWI instruction if not equal.
|
|
895 E9A0: 301D arm2 leax -3,x
|
|
896 E9A2: 4A deca
|
|
897 E9A3: 26EA bne arm1
|
|
898 E9A5: 39 rts
|
|
899 E9A6:
|
|
900 E9A6: * This is the code for the break command, set, clear display breakpoints.
|
|
901 E9A6: * Syntax B or B<addr>. B displays, B<addr> sets or clears breakpoint.
|
|
902 E9A6: 8604 break lda #brkpoints
|
|
903 E9A8: 9727 sta temp2+1 ;Store number of breakpoints to visit.
|
|
904 E9AA: 8E0201 ldx #linebuf+1
|
|
905 E9AD: BDE70F jsr scanhex
|
|
906 E9B0: 273B beq dispbp ;No number then display breakpoints
|
|
907 E9B2: 8E02A1 ldx #bpaddr
|
|
908 E9B5: CE0000 ldu #0
|
|
909 E9B8: 1F32 tfr u,y
|
|
910 E9BA: 10A384 bp1 cmpd ,x
|
|
911 E9BD: 2720 beq clearit ;Found the breakpoint, so clear it,
|
|
912 E9BF: 11A384 cmpu ,x ;Is location zero
|
|
913 E9C2: 2602 bne bp2
|
|
914 E9C4: 1F12 tfr x,y ;Set free address to y
|
|
915 E9C6: 3003 bp2 leax 3,x
|
|
916 E9C8: 0A27 dec temp2+1
|
|
917 E9CA: 26EE bne bp1
|
|
918 E9CC: 108C0000 cmpy #0 ;Address not found in list of breakpoints
|
|
919 E9D0: 2716 beq bpfull ;Was free address found.
|
|
920 E9D2: EDA4 std ,y ;If so, store breakpoint there.
|
|
921 E9D4: 8EE5EE ldx #brkmsg
|
|
922 E9D7: BDE4E1 bpexit jsr outcount
|
|
923 E9DA: 9D0C jsr putcr
|
|
924 E9DC: 7EE558 jmp cmdline
|
|
925 E9DF: 4F clearit clra
|
|
926 E9E0: 5F clrb
|
|
927 E9E1: ED84 std ,x
|
|
928 E9E3: 8EE5FD ldx #clrmsg
|
|
929 E9E6: 20EF bra bpexit
|
|
930 E9E8: 8EE610 bpfull ldx #fullmsg
|
|
931 E9EB: 20EA bra bpexit
|
|
932 E9ED:
|
|
933 E9ED: 8E02A1 dispbp ldx #bpaddr
|
|
934 E9F0: EC84 dbp1 ldd ,x
|
|
935 E9F2: 2707 beq dbp2
|
|
936 E9F4: BDE6DE jsr outd
|
|
937 E9F7: C620 ldb #' '
|
|
938 E9F9: 9D03 jsr putchar
|
|
939 E9FB: 3003 dbp2 leax 3,x
|
|
940 E9FD: 0A27 dec temp2+1
|
|
941 E9FF: 26EF bne dbp1
|
|
942 EA01: 9D0C jsr putcr
|
|
943 EA03: 7EE558 jmp cmdline
|
|
944 EA06:
|
|
945 EA06: * Scan hex byte into a and add it to check sum in temp2+1
|
|
946 EA06: BDE74A addchk jsr scanbyte
|
|
947 EA09: 10270077 lbeq srecerr
|
|
948 EA0D: 1F89 tfr a,b
|
|
949 EA0F: DB27 addb temp2+1
|
|
950 EA11: D727 stb temp2+1
|
|
951 EA13: 39 rts
|
|
952 EA14:
|
|
953 EA14: * This tis the code for the S command, the Motorola S records entry.
|
|
954 EA14: * Syntax SO<addr> or SS<addr>,<len> or S1<bytes> or S9<bytes>
|
|
955 EA14: 8E0201 srec ldx #linebuf+1
|
|
956 EA17: E680 ldb ,x+
|
|
957 EA19: C4DF andb #CASEMASK
|
|
958 EA1B: C14F cmpb #'O'
|
|
959 EA1D: 2772 beq setsorg
|
|
960 EA1F: C153 cmpb #'S'
|
|
961 EA21: 277C beq sendrec
|
|
962 EA23: E61F ldb -1,x
|
|
963 EA25: 0F28 clr temp3
|
|
964 EA27: C131 cmpb #'1'
|
|
965 EA29: 2706 beq readrec
|
|
966 EA2B: C139 cmpb #'9'
|
|
967 EA2D: 2655 bne srecerr
|
|
968 EA2F: 0C28 inc temp3
|
|
969 EA31: 0F27 readrec clr temp2+1 ;clear checksum.
|
|
970 EA33: 8DD1 bsr addchk
|
|
971 EA35: 8002 suba #2 ;discount the address bytes from the count.
|
|
972 EA37: 9729 sta temp3+1 ;Read length byte.
|
|
973 EA39: 8DCB bsr addchk
|
|
974 EA3B: 3402 pshs a
|
|
975 EA3D: 8DC7 bsr addchk
|
|
976 EA3F: 3504 puls b
|
|
977 EA41: 1E89 exg a,b ;Read address into d.
|
|
978 EA43: FE02B0 ldu sorg
|
|
979 EA46: 270F beq rr1
|
|
980 EA48: FE02B2 ldu soffs
|
|
981 EA4B: 260A bne rr1
|
|
982 EA4D: 3406 pshs d ;Sorg is nonzero and soffs is zero, now
|
|
983 EA4F: B302B0 subd sorg ;set soffs
|
|
984 EA52: FD02B2 std soffs
|
|
985 EA55: 3506 puls d
|
|
986 EA57: B302B2 rr1 subd soffs ;Subtract the address offset.
|
|
987 EA5A: 1F02 tfr d,y
|
|
988 EA5C: 8DA8 rr2 bsr addchk
|
|
989 EA5E: 0A29 dec temp3+1
|
|
990 EA60: 2704 beq endrec
|
|
991 EA62: A7A0 sta ,y+
|
|
992 EA64: 20F6 bra rr2
|
|
993 EA66: 0C27 endrec inc temp2+1 ;Check checksum.
|
|
994 EA68: 261A bne srecerr
|
|
995 EA6A: 0D28 tst temp3
|
|
996 EA6C: 1027FAE8 lbeq cmdline ;Was it no S9 record?
|
|
997 EA70: 108C0000 cmpy #0
|
|
998 EA74: 2703 beq endrec1
|
|
999 EA76: 10AF6A sty 10,s ;Store address into program counter.
|
|
1000 EA79: 4F endrec1 clra
|
|
1001 EA7A: 5F clrb
|
|
1002 EA7B: FD02B0 std sorg ;Reset sorg, next S loads will be normal.
|
|
1003 EA7E: FD02B2 std soffs
|
|
1004 EA81: 7EE558 jmp cmdline
|
|
1005 EA84: 9D18 srecerr jsr xabortin
|
|
1006 EA86: 8EE621 ldx #smsg ;Error in srecord, display message.
|
|
1007 EA89: BDE4E1 jsr outcount
|
|
1008 EA8C: 9D0C jsr putcr
|
|
1009 EA8E: 7EE558 jmp cmdline
|
|
1010 EA91: BDE70F setsorg jsr scanhex ;Set S record origin.
|
|
1011 EA94: FD02B0 std sorg
|
|
1012 EA97: 4F clra
|
|
1013 EA98: 5F clrb
|
|
1014 EA99: FD02B2 std soffs
|
|
1015 EA9C: 7EE558 jmp cmdline
|
|
1016 EA9F: * Send a memory region as S-records.
|
|
1017 EA9F: CC0100 sendrec ldd #$100 ;Scan address and length parameter.
|
|
1018 EAA2: BDE732 jsr scan2parms
|
|
1019 EAA5: FC02B0 ldd sorg
|
|
1020 EAA8: 2709 beq ss1
|
|
1021 EAAA: FC029D ldd addr
|
|
1022 EAAD: B302B0 subd sorg
|
|
1023 EAB0: FD02B2 std soffs ;Compute offset for origin.
|
|
1024 EAB3: FC029F ss1 ldd length
|
|
1025 EAB6: 2748 beq endss ;All bytes sent?
|
|
1026 EAB8: 10830010 cmpd #16
|
|
1027 EABC: 2502 blo ss2
|
|
1028 EABE: C610 ldb #16 ;If more than 16 left, then send 16.
|
|
1029 EAC0: D724 ss2 stb temp
|
|
1030 EAC2: 50 negb
|
|
1031 EAC3: FE029F ldu length
|
|
1032 EAC6: 33C5 leau b,u
|
|
1033 EAC8: FF029F stu length ;Discount line length from length.
|
|
1034 EACB: C653 ldb #'S'
|
|
1035 EACD: 9D03 jsr putchar
|
|
1036 EACF: C631 ldb #'1'
|
|
1037 EAD1: 9D03 jsr putchar
|
|
1038 EAD3: 0F25 clr temp+1 ;Clear check sum
|
|
1039 EAD5: D624 ldb temp
|
|
1040 EAD7: CB03 addb #3
|
|
1041 EAD9: 8D30 bsr checkout ;Output byte b as hex and add to check sum.
|
|
1042 EADB: FC029D ldd addr
|
|
1043 EADE: 1F02 tfr d,y
|
|
1044 EAE0: B302B2 subd soffs
|
|
1045 EAE3: 1E89 exg a,b
|
|
1046 EAE5: 8D24 bsr checkout
|
|
1047 EAE7: 1E89 exg a,b
|
|
1048 EAE9: 8D20 bsr checkout ;Output address (add into check sum)
|
|
1049 EAEB: E6A0 ss3 ldb ,y+
|
|
1050 EAED: 8D1C bsr checkout
|
|
1051 EAEF: 0A24 dec temp
|
|
1052 EAF1: 26F8 bne ss3
|
|
1053 EAF3: 10BF029D sty addr
|
|
1054 EAF7: D625 ldb temp+1
|
|
1055 EAF9: 53 comb
|
|
1056 EAFA: 8D0F bsr checkout ;Output checksum byte.
|
|
1057 EAFC: 9D0C jsr putcr
|
|
1058 EAFE: 20B3 bra ss1
|
|
1059 EB00: 8EE633 endss ldx #lastrec
|
|
1060 EB03: BDE4E1 jsr outcount
|
|
1061 EB06: 9D0C jsr putcr
|
|
1062 EB08: 7EE558 jmp cmdline
|
|
1063 EB0B: * Output byte in register B and add it into check sum at temp+1
|
|
1064 EB0B: 3402 checkout pshs a
|
|
1065 EB0D: 1F98 tfr b,a
|
|
1066 EB0F: DB25 addb temp+1
|
|
1067 EB11: D725 stb temp+1
|
|
1068 EB13: BDE6D0 jsr outbyte
|
|
1069 EB16: 3502 puls a
|
|
1070 EB18: 39 rts
|
|
1071 EB19:
|
|
1072 EB19: * This is the code for the M command, move memory region.
|
|
1073 EB19: * Syntax: Maddr1,addr2,length
|
|
1074 EB19: 8E0201 move ldx #linebuf+1
|
|
1075 EB1C: BDE70F jsr scanhex
|
|
1076 EB1F: 1027FA91 lbeq unk
|
|
1077 EB23: DD28 std temp3
|
|
1078 EB25: BDE6E7 jsr skipspace
|
|
1079 EB28: C12C cmpb #','
|
|
1080 EB2A: 1026FA86 lbne unk
|
|
1081 EB2E: BDE70F jsr scanhex
|
|
1082 EB31: 1027FA7F lbeq unk
|
|
1083 EB35: 1F03 tfr d,u
|
|
1084 EB37: BDE6E7 jsr skipspace
|
|
1085 EB3A: C12C cmpb #','
|
|
1086 EB3C: 1026FA74 lbne unk
|
|
1087 EB40: BDE70F jsr scanhex
|
|
1088 EB43: 1027FA6D lbeq unk
|
|
1089 EB47: 1F02 tfr d,y ;Read the argument separated by commas
|
|
1090 EB49: 9E28 ldx temp3 ;src addr to x, dest addr to u, length to y
|
|
1091 EB4B: ;Don't tolerate syntax deviations.
|
|
1092 EB4B: A680 mvloop lda ,x+
|
|
1093 EB4D: A7C0 sta ,u+
|
|
1094 EB4F: 313F leay -1,y
|
|
1095 EB51: 26F8 bne mvloop ;Perform the block move.
|
|
1096 EB53: 7EE558 jmp cmdline
|
|
1097 EB56:
|
|
1098 EB56:
|
|
1099 EB56: * This is the code for the F command, find byte/ascii string in memory.
|
|
1100 EB56: * Syntax: Faddr bytes or Faddr "ascii"
|
|
1101 EB56: 8E0201 find ldx #linebuf+1
|
|
1102 EB59: BDE70F jsr scanhex
|
|
1103 EB5C: 1F02 tfr d,y ;Scan the start address.
|
|
1104 EB5E: BDE6E7 jsr skipspace
|
|
1105 EB61: C122 cmpb #'"'
|
|
1106 EB63: 2611 bne findhex
|
|
1107 EB65: CE0200 ldu #linebuf ;Quote found, so scan for quoted string.
|
|
1108 EB68: 4F clra
|
|
1109 EB69: E680 fstrloop ldb ,x+
|
|
1110 EB6B: 271F beq startsrch ;End of line without final quote.
|
|
1111 EB6D: C122 cmpb #'"'
|
|
1112 EB6F: 271B beq startsrch ;End quote found
|
|
1113 EB71: E7C0 stb ,u+
|
|
1114 EB73: 4C inca
|
|
1115 EB74: 20F3 bra fstrloop
|
|
1116 EB76: CE0200 findhex ldu #linebuf ;Convert string of hex bytes.
|
|
1117 EB79: 301F leax -1,x ;String will be stored at start of line
|
|
1118 EB7B: 4F clra ;buffer and may overwrite part of the
|
|
1119 EB7C: 3402 fhexloop pshs a ;already converted string.
|
|
1120 EB7E: BDE74A jsr scanbyte
|
|
1121 EB81: 1F89 tfr a,b
|
|
1122 EB83: 3502 puls a
|
|
1123 EB85: 2705 beq startsrch
|
|
1124 EB87: E7C0 stb ,u+
|
|
1125 EB89: 4C inca
|
|
1126 EB8A: 20F0 bra fhexloop
|
|
1127 EB8C: 4D startsrch tsta ;Start searching, start addr in Y,
|
|
1128 EB8D: ;string starts at linebuf, length A
|
|
1129 EB8D: 1027F9C7 lbeq cmdline ;Quit with zero length string.
|
|
1130 EB91: 0F28 clr temp3
|
|
1131 EB93: 9729 sta temp3+1
|
|
1132 EB95: 1F21 srchloop tfr y,x
|
|
1133 EB97: 9629 lda temp3+1
|
|
1134 EB99: 8CE100 cmpx #$e100
|
|
1135 EB9C: 2409 bcc srch1
|
|
1136 EB9E: 3086 leax a,x
|
|
1137 EBA0: 8CE000 cmpx #$e000 ;Stop at I/O addresses.
|
|
1138 EBA3: 1024F9B1 lbcc cmdline
|
|
1139 EBA7: 1F21 srch1 tfr y,x
|
|
1140 EBA9: CE0200 ldu #linebuf
|
|
1141 EBAC: E680 srch2 ldb ,x+
|
|
1142 EBAE: E1C0 cmpb ,u+
|
|
1143 EBB0: 2614 bne srch3 ;Not equal, try next address.
|
|
1144 EBB2: 4A deca
|
|
1145 EBB3: 26F7 bne srch2
|
|
1146 EBB5: 1F20 tfr y,d
|
|
1147 EBB7: BDE6DE jsr outd ;String found
|
|
1148 EBBA: 9D0C jsr putcr
|
|
1149 EBBC: 0C28 inc temp3
|
|
1150 EBBE: 9628 lda temp3
|
|
1151 EBC0: 8110 cmpa #$10
|
|
1152 EBC2: 1027F992 lbeq cmdline ;If 10 matches found, just stop.
|
|
1153 EBC6: 3121 srch3 leay 1,y
|
|
1154 EBC8: 20CB bra srchloop
|
|
1155 EBCA:
|
|
1156 EBCA: * Send the contents of the xmodem buffer and get it acknowledged, zero flag
|
|
1157 EBCA: * is set if transfer aborted.
|
|
1158 EBCA: C601 xsendbuf ldb #SOH
|
|
1159 EBCC: BDE471 jsr osputc ;Send SOH
|
|
1160 EBCF: D62D ldb xpacknum
|
|
1161 EBD1: BDE471 jsr osputc ;Send block number.
|
|
1162 EBD4: 53 comb
|
|
1163 EBD5: BDE471 jsr osputc ;and its complement.
|
|
1164 EBD8: 0F2E clr xsum
|
|
1165 EBDA: 8680 lda #128
|
|
1166 EBDC: 8E0100 ldx #buf0
|
|
1167 EBDF: E684 xsloop ldb ,x
|
|
1168 EBE1: DB2E addb xsum
|
|
1169 EBE3: D72E stb xsum
|
|
1170 EBE5: E680 ldb ,x+
|
|
1171 EBE7: BDE471 jsr osputc
|
|
1172 EBEA: 4A deca
|
|
1173 EBEB: 26F2 bne xsloop ;Send the buffer contents.
|
|
1174 EBED: D62E ldb xsum
|
|
1175 EBEF: BDE471 jsr osputc ;Send the check sum
|
|
1176 EBF2: BDE45A waitack jsr osgetc
|
|
1177 EBF5: C118 cmpb #CAN
|
|
1178 EBF7: 270C beq xsabt ;^X for abort.
|
|
1179 EBF9: C115 cmpb #NAK
|
|
1180 EBFB: 27CD beq xsendbuf ;Send again if NAK
|
|
1181 EBFD: C106 cmpb #ACK
|
|
1182 EBFF: 26F1 bne waitack
|
|
1183 EC01: 0C2D inc xpacknum
|
|
1184 EC03: 1CFB xsok andcc #$fb ;Clear zero flag after ACK
|
|
1185 EC05: 39 xsabt rts
|
|
1186 EC06:
|
|
1187 EC06: * Start an XMODEM send session.
|
|
1188 EC06: C601 xsendinit ldb #1
|
|
1189 EC08: D72D stb xpacknum ;Initialize block number.
|
|
1190 EC0A: BDE45A waitnak jsr osgetc
|
|
1191 EC0D: C118 cmpb #CAN
|
|
1192 EC0F: 27F4 beq xsabt ;If ^X exit with zero flag.
|
|
1193 EC11: C115 cmpb #NAK
|
|
1194 EC13: 27EE beq xsok
|
|
1195 EC15: 20F3 bra waitnak ;Wait until NAK received.
|
|
1196 EC17:
|
|
1197 EC17: * Send ETX and wait for ack.
|
|
1198 EC17: C604 xsendeot ldb #EOT
|
|
1199 EC19: BDE471 jsr osputc
|
|
1200 EC1C: BDE45A waitack2 jsr osgetc
|
|
1201 EC1F: C118 cmpb #CAN
|
|
1202 EC21: 27E2 beq xsabt
|
|
1203 EC23: C115 cmpb #NAK
|
|
1204 EC25: 27F0 beq xsendeot
|
|
1205 EC27: C106 cmpb #ACK
|
|
1206 EC29: 27D8 beq xsok
|
|
1207 EC2B: 20EF bra waitack2
|
|
1208 EC2D:
|
|
1209 EC2D: * Read character into B with a timeout of A seconds, Carry set if timeout.
|
|
1210 EC2D: 48 gettimeout asla
|
|
1211 EC2E: 48 asla
|
|
1212 EC2F: BDE465 gt1 jsr osgetpoll
|
|
1213 EC32: 5D tstb
|
|
1214 EC33: 2606 bne gtexit
|
|
1215 EC35: 4A deca
|
|
1216 EC36: 26F7 bne gt1
|
|
1217 EC38: 1A01 orcc #$1
|
|
1218 EC3A: 39 rts
|
|
1219 EC3B: BDE45A gtexit jsr osgetc
|
|
1220 EC3E: 1CFE andcc #$fe
|
|
1221 EC40: 39 rts
|
|
1222 EC41:
|
|
1223 EC41: * Wait until line becomes quiet.
|
|
1224 EC41: 8603 purge lda #3
|
|
1225 EC43: BDEC2D jsr gettimeout
|
|
1226 EC46: 24F9 bcc purge
|
|
1227 EC48: 39 rts
|
|
1228 EC49:
|
|
1229 EC49: * Receive an XMODEM block and wait till it is OK, Z set if etx.
|
|
1230 EC49: 8603 xrcvbuf lda #3
|
|
1231 EC4B: 0D2F tst lastok
|
|
1232 EC4D: 2709 beq sendnak
|
|
1233 EC4F: C606 ldb #ACK
|
|
1234 EC51: BDE471 jsr osputc ;Send an ack.
|
|
1235 EC54: 860A lda #10
|
|
1236 EC56: 2005 bra startblock
|
|
1237 EC58: C615 sendnak ldb #NAK
|
|
1238 EC5A: BDE471 jsr osputc ;Send a NAK
|
|
1239 EC5D: 0F2F startblock clr lastok
|
|
1240 EC5F: 8DCC bsr gettimeout
|
|
1241 EC61: 8603 lda #3
|
|
1242 EC63: 25F3 bcs sendnak ;Keep sending NAKs when timed out.
|
|
1243 EC65: C104 cmpb #EOT
|
|
1244 EC67: 2752 beq xrcveot ;End of file reached, acknowledge EOT.
|
|
1245 EC69: C101 cmpb #SOH
|
|
1246 EC6B: 2649 bne purgeit ;Not, SOH, bad block.
|
|
1247 EC6D: 8601 lda #1
|
|
1248 EC6F: 8DBC bsr gettimeout
|
|
1249 EC71: 2543 bcs purgeit
|
|
1250 EC73: D12D cmpb xpacknum ;Is it the right block?
|
|
1251 EC75: 2707 beq xr1
|
|
1252 EC77: 5C incb
|
|
1253 EC78: D12D cmpb xpacknum ;Was it the previous block.
|
|
1254 EC7A: 263A bne purgeit
|
|
1255 EC7C: 0C2F inc lastok
|
|
1256 EC7E: D72E xr1 stb xsum
|
|
1257 EC80: 8601 lda #1
|
|
1258 EC82: 8DA9 bsr gettimeout
|
|
1259 EC84: 2530 bcs purgeit
|
|
1260 EC86: 53 comb
|
|
1261 EC87: D12E cmpb xsum ;Is the complement of the block number OK
|
|
1262 EC89: 262B bne purgeit
|
|
1263 EC8B: 8E0100 ldx #buf0
|
|
1264 EC8E: 0F2E clr xsum
|
|
1265 EC90: 8601 xrloop lda #1
|
|
1266 EC92: 8D99 bsr gettimeout
|
|
1267 EC94: 2520 bcs purgeit
|
|
1268 EC96: E780 stb ,x+
|
|
1269 EC98: DB2E addb xsum
|
|
1270 EC9A: D72E stb xsum
|
|
1271 EC9C: 8C0180 cmpx #buf0+128
|
|
1272 EC9F: 26EF bne xrloop ;Get the data bytes.
|
|
1273 ECA1: 8601 lda #1
|
|
1274 ECA3: 8D88 bsr gettimeout
|
|
1275 ECA5: 250F bcs purgeit
|
|
1276 ECA7: D12E cmpb xsum
|
|
1277 ECA9: 260B bne purgeit ;Check the check sum.
|
|
1278 ECAB: 0D2F tst lastok
|
|
1279 ECAD: 269A bne xrcvbuf ;Block was the previous block, get next one
|
|
1280 ECAF: 0C2F inc lastok
|
|
1281 ECB1: 0C2D inc xpacknum
|
|
1282 ECB3: 1CFB andcc #$fb
|
|
1283 ECB5: 39 rts
|
|
1284 ECB6: BDEC41 purgeit jsr purge
|
|
1285 ECB9: 209D bra sendnak
|
|
1286 ECBB: 8603 xrcveot lda #3 ;EOT was received.
|
|
1287 ECBD: C606 ldb #ACK
|
|
1288 ECBF: BDE471 ackloop jsr osputc
|
|
1289 ECC2: 4A deca
|
|
1290 ECC3: 26FA bne ackloop ;Send 3 acks in a row.
|
|
1291 ECC5: 39 rts
|
|
1292 ECC6:
|
|
1293 ECC6:
|
|
1294 ECC6: 9E01 savevecs ldx getchar+1
|
|
1295 ECC8: BF02B4 stx oldgetc
|
|
1296 ECCB: 9E04 ldx putchar+1
|
|
1297 ECCD: BF02B6 stx oldputc
|
|
1298 ECD0: 9E0D ldx putcr+1
|
|
1299 ECD2: BF02B8 stx oldputcr
|
|
1300 ECD5: 39 rts
|
|
1301 ECD6:
|
|
1302 ECD6: BE02B4 rstvecs ldx oldgetc
|
|
1303 ECD9: 9F01 stx getchar+1
|
|
1304 ECDB: BE02B6 ldx oldputc
|
|
1305 ECDE: 9F04 stx putchar+1
|
|
1306 ECE0: BE02B8 ldx oldputcr
|
|
1307 ECE3: 9F0D stx putcr+1
|
|
1308 ECE5: 39 rts
|
|
1309 ECE6:
|
|
1310 ECE6: * O.S. routine to open input through XMODEM transfer.
|
|
1311 ECE6: 3416 xopin pshs x,a,b
|
|
1312 ECE8: 8EE63E ldx #xsmsg
|
|
1313 ECEB: BDE4E1 jsr outcount
|
|
1314 ECEE: 9D0C jsr putcr ;Display message to start XMODEM send.
|
|
1315 ECF0: 8DD4 bsr savevecs
|
|
1316 ECF2: 8EF434 ldx #noop
|
|
1317 ECF5: 9F04 stx putchar+1 ;Disable character output.
|
|
1318 ECF7: 8EEDB4 ldx #xgetc
|
|
1319 ECFA: 9F01 stx getchar+1 ;
|
|
1320 ECFC: 0F2F clr lastok
|
|
1321 ECFE: 0F30 clr xcount
|
|
1322 ED00: 8601 lda #1
|
|
1323 ED02: 972D sta xpacknum
|
|
1324 ED04: 4C inca
|
|
1325 ED05: 9731 sta xmode ;set xmode to 2.
|
|
1326 ED07: 3596 puls x,a,b,pc
|
|
1327 ED09:
|
|
1328 ED09: * O.S. routine to open output through XMODEM transfer.
|
|
1329 ED09: 3416 xopout pshs x,a,b
|
|
1330 ED0B: 8DB9 bsr savevecs
|
|
1331 ED0D: 8EE650 ldx #xrmsg
|
|
1332 ED10: BDE4E1 jsr outcount ;Display message to start XMODEM receive
|
|
1333 ED13: 9D0C jsr putcr
|
|
1334 ED15: 8EED7B ldx #xputc
|
|
1335 ED18: 9F04 stx putchar+1
|
|
1336 ED1A: 8EED99 ldx #xputcr
|
|
1337 ED1D: 9F0D stx putcr+1
|
|
1338 ED1F: BDEC06 jsr xsendinit
|
|
1339 ED22: 102700B7 lbeq xerror
|
|
1340 ED26: 0F30 clr xcount
|
|
1341 ED28: 8601 lda #1
|
|
1342 ED2A: 9731 sta xmode
|
|
1343 ED2C: 3596 puls x,a,b,pc
|
|
1344 ED2E:
|
|
1345 ED2E:
|
|
1346 ED2E: * O.S. routine to abort input through XMODEM transfer.
|
|
1347 ED2E: 9631 xabtin lda xmode
|
|
1348 ED30: 8102 cmpa #2
|
|
1349 ED32: 263C bne xclsend
|
|
1350 ED34: BDEC41 jsr purge
|
|
1351 ED37: C618 ldb #CAN
|
|
1352 ED39: 8608 lda #8
|
|
1353 ED3B: BDE471 xabtloop jsr osputc
|
|
1354 ED3E: 4A deca
|
|
1355 ED3F: 26FA bne xabtloop ;Send 8 CAN characters to kill transfer.
|
|
1356 ED41: 8D93 bsr rstvecs
|
|
1357 ED43: 0F31 clr xmode
|
|
1358 ED45: 8EE665 ldx #xamsg
|
|
1359 ED48: BDE4E1 jsr outcount
|
|
1360 ED4B: 9D0C jsr putcr ;Send diagnostic message.
|
|
1361 ED4D: 39 rts
|
|
1362 ED4E:
|
|
1363 ED4E: * O.S. routine to close output through XMODEM transfer.
|
|
1364 ED4E: 9631 xclsout lda xmode
|
|
1365 ED50: 8101 cmpa #1
|
|
1366 ED52: 261C bne xclsend
|
|
1367 ED54: 0D30 tst xcount
|
|
1368 ED56: 270C beq xclsdone
|
|
1369 ED58: 8680 lda #128
|
|
1370 ED5A: 9030 suba xcount
|
|
1371 ED5C: F602BB xclsloop ldb filler
|
|
1372 ED5F: 8D1A bsr xputc
|
|
1373 ED61: 4A deca
|
|
1374 ED62: 26F8 bne xclsloop ;Transfer filler chars to force block out.
|
|
1375 ED64: BDEC17 xclsdone jsr xsendeot ;Send EOT
|
|
1376 ED67: 10270072 lbeq xerror
|
|
1377 ED6B: BDECD6 jsr rstvecs
|
|
1378 ED6E: 0F31 clr xmode
|
|
1379 ED70: 39 xclsend rts
|
|
1380 ED71:
|
|
1381 ED71: * O.S. routine to close input through XMODEM, by gobbling up the remaining
|
|
1382 ED71: * bytes.
|
|
1383 ED71: D631 xclsin ldb xmode
|
|
1384 ED73: C102 cmpb #2
|
|
1385 ED75: 26F9 bne xclsend
|
|
1386 ED77: 9D03 jsr putchar
|
|
1387 ED79: 20F6 bra xclsin
|
|
1388 ED7B:
|
|
1389 ED7B: * putchar routine for XMODEM
|
|
1390 ED7B: 3416 xputc pshs x,a,b
|
|
1391 ED7D: 9630 lda xcount
|
|
1392 ED7F: 0C30 inc xcount
|
|
1393 ED81: 8E0100 ldx #buf0
|
|
1394 ED84: E786 stb a,x ;Store character in XMODEM buffer.
|
|
1395 ED86: 817F cmpa #127
|
|
1396 ED88: 260D bne xputc1 ;is buffer full?
|
|
1397 ED8A: 0F30 clr xcount
|
|
1398 ED8C: 3460 pshs y,u
|
|
1399 ED8E: BDEBCA jsr xsendbuf
|
|
1400 ED91: 10270048 lbeq xerror
|
|
1401 ED95: 3560 puls y,u
|
|
1402 ED97: 3596 xputc1 puls x,a,b,pc
|
|
1403 ED99:
|
|
1404 ED99: * putcr routine for XMODEM
|
|
1405 ED99: 3404 xputcr pshs b
|
|
1406 ED9B: F602BC ldb xmcr
|
|
1407 ED9E: C502 bitb #2
|
|
1408 EDA0: 2704 beq xputcr1
|
|
1409 EDA2: C60D ldb #CR
|
|
1410 EDA4: 8DD5 bsr xputc
|
|
1411 EDA6: F602BC xputcr1 ldb xmcr
|
|
1412 EDA9: C501 bitb #1
|
|
1413 EDAB: 2704 beq xputcr2
|
|
1414 EDAD: C60A ldb #LF
|
|
1415 EDAF: 8DCA bsr xputc
|
|
1416 EDB1: 3504 xputcr2 puls b
|
|
1417 EDB3: 39 rts
|
|
1418 EDB4:
|
|
1419 EDB4: * getchar routine for XMODEM
|
|
1420 EDB4: 3412 xgetc pshs x,a
|
|
1421 EDB6: 0D30 tst xcount ;No characters left?
|
|
1422 EDB8: 260D bne xgetc1
|
|
1423 EDBA: 3460 pshs y,u
|
|
1424 EDBC: BDEC49 jsr xrcvbuf ;Receive new block.
|
|
1425 EDBF: 3560 puls y,u
|
|
1426 EDC1: 2710 beq xgetcterm ;End of input?
|
|
1427 EDC3: 8680 lda #128
|
|
1428 EDC5: 9730 sta xcount
|
|
1429 EDC7: 9630 xgetc1 lda xcount
|
|
1430 EDC9: 40 nega
|
|
1431 EDCA: 8E0180 ldx #buf0+128
|
|
1432 EDCD: E686 ldb a,x ;Get character from buffer
|
|
1433 EDCF: 0A30 dec xcount
|
|
1434 EDD1: 3592 puls x,a,pc
|
|
1435 EDD3: BDECD6 xgetcterm jsr rstvecs
|
|
1436 EDD6: 0F31 clr xmode
|
|
1437 EDD8: F602BB ldb filler
|
|
1438 EDDB: 3592 puls x,a,pc
|
|
1439 EDDD:
|
|
1440 EDDD: BDECD6 xerror jsr rstvecs ;Restore I/O vectors
|
|
1441 EDE0: 0F31 clr xmode
|
|
1442 EDE2: 8EE665 ldx #xamsg
|
|
1443 EDE5: BDE4E1 jsr outcount
|
|
1444 EDE8: 9D0C jsr putcr
|
|
1445 EDEA: 7E0292 jmp xerrvec
|
|
1446 EDED:
|
|
1447 EDED: 10FE02BD xerrhand lds savesp
|
|
1448 EDF1: 7EE558 jmp cmdline
|
|
1449 EDF4:
|
|
1450 EDF4: * This is the code for the X command, various XMODEM related commands.
|
|
1451 EDF4: * Syntax: XSaddr,len XLaddr,len XX XOcrlf,filler, XSSaddr,len
|
|
1452 EDF4: 8E0201 xmodem ldx #linebuf+1
|
|
1453 EDF7: A680 lda ,x+
|
|
1454 EDF9: 84DF anda #CASEMASK ;Convert to uppercase.
|
|
1455 EDFB: 8158 cmpa #'X'
|
|
1456 EDFD: 274A beq xeq
|
|
1457 EDFF: 814C cmpa #'L'
|
|
1458 EE01: 2733 beq xload
|
|
1459 EE03: 814F cmpa #'O'
|
|
1460 EE05: 2747 beq xopts
|
|
1461 EE07: 8153 cmpa #'S'
|
|
1462 EE09: 1026F7A7 lbne unk
|
|
1463 EE0D: A684 lda ,x
|
|
1464 EE0F: 84DF anda #CASEMASK
|
|
1465 EE11: 8153 cmpa #'S'
|
|
1466 EE13: 271A beq xss
|
|
1467 EE15: CC0100 ldd #$100 ;XSaddr,len command.
|
|
1468 EE18: BDE732 jsr scan2parms ;Send binary through XMODEM
|
|
1469 EE1B: 9D15 jsr xopenout
|
|
1470 EE1D: FE029D ldu addr
|
|
1471 EE20: 10BE029F ldy length
|
|
1472 EE24: E6C0 xsbinloop ldb ,u+
|
|
1473 EE26: 9D03 jsr putchar
|
|
1474 EE28: 313F leay -1,y
|
|
1475 EE2A: 26F8 bne xsbinloop ;Send all the bytes through XMODEM.
|
|
1476 EE2C: 7EE558 jmp cmdline
|
|
1477 EE2F: 3001 xss leax 1,x ;XSSaddr,len command.
|
|
1478 EE31: 9D15 jsr xopenout ;Send Srecords through XMODEM
|
|
1479 EE33: 7EEA9F jmp sendrec
|
|
1480 EE36: BDE70F xload jsr scanhex ;XLaddr command
|
|
1481 EE39: 1F02 tfr d,y ;Load binary through XMODEM
|
|
1482 EE3B: 9D12 jsr xopenin
|
|
1483 EE3D: 9D00 xlodloop jsr getchar
|
|
1484 EE3F: 0D31 tst xmode ;File ended? then done
|
|
1485 EE41: 1027F713 lbeq cmdline
|
|
1486 EE45: E7A0 stb ,y+
|
|
1487 EE47: 20F4 bra xlodloop
|
|
1488 EE49: 9D12 xeq jsr xopenin ;XX command
|
|
1489 EE4B: 7EE558 jmp cmdline ;Execute commands received from XMODEM
|
|
1490 EE4E: CC001A xopts ldd #$1a
|
|
1491 EE51: BDE732 jsr scan2parms
|
|
1492 EE54: B6029E lda addr+1
|
|
1493 EE57: B702BC sta xmcr
|
|
1494 EE5A: B602A0 lda length+1
|
|
1495 EE5D: B702BB sta filler
|
|
1496 EE60: 7EE558 jmp cmdline
|
|
1497 EE63:
|
|
1498 EE63: * mnemonics table, ordered alphabetically.
|
|
1499 EE63: * 5 bytes name, 1 byte category, 2 bytes opcode, 8 bytes total.
|
|
1500 EE63: 4142582020 mnemtab fcc "ABX "
|
|
1501 EE68: 00 fcb 0
|
|
1502 EE69: 003A fdb $3a
|
|
1503 EE6B: 4144434120 fcc "ADCA "
|
|
1504 EE70: 07 fcb 7
|
|
1505 EE71: 0089 fdb $89
|
|
1506 EE73: 4144434220 fcc "ADCB "
|
|
1507 EE78: 07 fcb 7
|
|
1508 EE79: 00C9 fdb $c9
|
|
1509 EE7B: 4144444120 fcc "ADDA "
|
|
1510 EE80: 07 fcb 7
|
|
1511 EE81: 008B fdb $8b
|
|
1512 EE83: 4144444220 fcc "ADDB "
|
|
1513 EE88: 07 fcb 7
|
|
1514 EE89: 00CB fdb $cb
|
|
1515 EE8B: 4144444420 fcc "ADDD "
|
|
1516 EE90: 08 fcb 8
|
|
1517 EE91: 00C3 fdb $c3
|
|
1518 EE93: 414E444120 fcc "ANDA "
|
|
1519 EE98: 07 fcb 7
|
|
1520 EE99: 0084 fdb $84
|
|
1521 EE9B: 414E444220 fcc "ANDB "
|
|
1522 EEA0: 07 fcb 7
|
|
1523 EEA1: 00C4 fdb $c4
|
|
1524 EEA3: 414E444343 fcc "ANDCC"
|
|
1525 EEA8: 02 fcb 2
|
|
1526 EEA9: 001C fdb $1c
|
|
1527 EEAB: 41534C2020 fcc "ASL "
|
|
1528 EEB0: 0A fcb 10
|
|
1529 EEB1: 0008 fdb $08
|
|
1530 EEB3: 41534C4120 fcc "ASLA "
|
|
1531 EEB8: 00 fcb 0
|
|
1532 EEB9: 0048 fdb $48
|
|
1533 EEBB: 41534C4220 fcc "ASLB "
|
|
1534 EEC0: 00 fcb 0
|
|
1535 EEC1: 0058 fdb $58
|
|
1536 EEC3: 4153522020 fcc "ASR "
|
|
1537 EEC8: 0A fcb 10
|
|
1538 EEC9: 0007 fdb $07
|
|
1539 EECB: 4153524120 fcc "ASRA "
|
|
1540 EED0: 00 fcb 0
|
|
1541 EED1: 0047 fdb $47
|
|
1542 EED3: 4153524220 fcc "ASRB "
|
|
1543 EED8: 00 fcb 0
|
|
1544 EED9: 0057 fdb $57
|
|
1545 EEDB: 4243432020 fcc "BCC "
|
|
1546 EEE0: 04 fcb 4
|
|
1547 EEE1: 0024 fdb $24
|
|
1548 EEE3: 4243532020 fcc "BCS "
|
|
1549 EEE8: 04 fcb 4
|
|
1550 EEE9: 0025 fdb $25
|
|
1551 EEEB: 4245512020 fcc "BEQ "
|
|
1552 EEF0: 04 fcb 4
|
|
1553 EEF1: 0027 fdb $27
|
|
1554 EEF3: 4247452020 fcc "BGE "
|
|
1555 EEF8: 04 fcb 4
|
|
1556 EEF9: 002C fdb $2c
|
|
1557 EEFB: 4247542020 fcc "BGT "
|
|
1558 EF00: 04 fcb 4
|
|
1559 EF01: 002E fdb $2e
|
|
1560 EF03: 4248492020 fcc "BHI "
|
|
1561 EF08: 04 fcb 4
|
|
1562 EF09: 0022 fdb $22
|
|
1563 EF0B: 4248532020 fcc "BHS "
|
|
1564 EF10: 04 fcb 4
|
|
1565 EF11: 0024 fdb $24
|
|
1566 EF13: 4249544120 fcc "BITA "
|
|
1567 EF18: 07 fcb 7
|
|
1568 EF19: 0085 fdb $85
|
|
1569 EF1B: 4249544220 fcc "BITB "
|
|
1570 EF20: 07 fcb 7
|
|
1571 EF21: 00C5 fdb $c5
|
|
1572 EF23: 424C452020 fcc "BLE "
|
|
1573 EF28: 04 fcb 4
|
|
1574 EF29: 002F fdb $2f
|
|
1575 EF2B: 424C4F2020 fcc "BLO "
|
|
1576 EF30: 04 fcb 4
|
|
1577 EF31: 0025 fdb $25
|
|
1578 EF33: 424C532020 fcc "BLS "
|
|
1579 EF38: 04 fcb 4
|
|
1580 EF39: 0023 fdb $23
|
|
1581 EF3B: 424C542020 fcc "BLT "
|
|
1582 EF40: 04 fcb 4
|
|
1583 EF41: 002D fdb $2d
|
|
1584 EF43: 424D492020 fcc "BMI "
|
|
1585 EF48: 04 fcb 4
|
|
1586 EF49: 002B fdb $2b
|
|
1587 EF4B: 424E452020 fcc "BNE "
|
|
1588 EF50: 04 fcb 4
|
|
1589 EF51: 0026 fdb $26
|
|
1590 EF53: 42504C2020 fcc "BPL "
|
|
1591 EF58: 04 fcb 4
|
|
1592 EF59: 002A fdb $2a
|
|
1593 EF5B: 4252412020 fcc "BRA "
|
|
1594 EF60: 04 fcb 4
|
|
1595 EF61: 0020 fdb $20
|
|
1596 EF63: 42524E2020 fcc "BRN "
|
|
1597 EF68: 04 fcb 4
|
|
1598 EF69: 0021 fdb $21
|
|
1599 EF6B: 4253522020 mnembsr fcc "BSR "
|
|
1600 EF70: 04 fcb 4
|
|
1601 EF71: 008D fdb $8d
|
|
1602 EF73: 4256432020 fcc "BVC "
|
|
1603 EF78: 04 fcb 4
|
|
1604 EF79: 0028 fdb $28
|
|
1605 EF7B: 4256532020 fcc "BVS "
|
|
1606 EF80: 04 fcb 4
|
|
1607 EF81: 0029 fdb $29
|
|
1608 EF83: 434C522020 fcc "CLR "
|
|
1609 EF88: 0A fcb 10
|
|
1610 EF89: 000F fdb $0f
|
|
1611 EF8B: 434C524120 fcc "CLRA "
|
|
1612 EF90: 00 fcb 0
|
|
1613 EF91: 004F fdb $4f
|
|
1614 EF93: 434C524220 fcc "CLRB "
|
|
1615 EF98: 00 fcb 0
|
|
1616 EF99: 005F fdb $5f
|
|
1617 EF9B: 434D504120 fcc "CMPA "
|
|
1618 EFA0: 07 fcb 7
|
|
1619 EFA1: 0081 fdb $81
|
|
1620 EFA3: 434D504220 fcc "CMPB "
|
|
1621 EFA8: 07 fcb 7
|
|
1622 EFA9: 00C1 fdb $c1
|
|
1623 EFAB: 434D504420 fcc "CMPD "
|
|
1624 EFB0: 09 fcb 9
|
|
1625 EFB1: 1083 fdb $1083
|
|
1626 EFB3: 434D505320 fcc "CMPS "
|
|
1627 EFB8: 09 fcb 9
|
|
1628 EFB9: 118C fdb $118c
|
|
1629 EFBB: 434D505520 fcc "CMPU "
|
|
1630 EFC0: 09 fcb 9
|
|
1631 EFC1: 1183 fdb $1183
|
|
1632 EFC3: 434D505820 fcc "CMPX "
|
|
1633 EFC8: 08 fcb 8
|
|
1634 EFC9: 008C fdb $8c
|
|
1635 EFCB: 434D505920 fcc "CMPY "
|
|
1636 EFD0: 09 fcb 9
|
|
1637 EFD1: 108C fdb $108c
|
|
1638 EFD3: 434F4D2020 fcc "COM "
|
|
1639 EFD8: 0A fcb 10
|
|
1640 EFD9: 0003 fdb $03
|
|
1641 EFDB: 434F4D4120 fcc "COMA "
|
|
1642 EFE0: 00 fcb 0
|
|
1643 EFE1: 0043 fdb $43
|
|
1644 EFE3: 434F4D4220 fcc "COMB "
|
|
1645 EFE8: 00 fcb 0
|
|
1646 EFE9: 0053 fdb $53
|
|
1647 EFEB: 4357414920 fcc "CWAI "
|
|
1648 EFF0: 02 fcb 2
|
|
1649 EFF1: 003C fdb $3c
|
|
1650 EFF3: 4441412020 fcc "DAA "
|
|
1651 EFF8: 00 fcb 0
|
|
1652 EFF9: 0019 fdb $19
|
|
1653 EFFB: 4445432020 fcc "DEC "
|
|
1654 F000: 0A fcb 10
|
|
1655 F001: 000A fdb $0a
|
|
1656 F003: 4445434120 fcc "DECA "
|
|
1657 F008: 00 fcb 0
|
|
1658 F009: 004A fdb $4a
|
|
1659 F00B: 4445434220 fcc "DECB "
|
|
1660 F010: 00 fcb 0
|
|
1661 F011: 005A fdb $5a
|
|
1662 F013: 454F524120 fcc "EORA "
|
|
1663 F018: 07 fcb 7
|
|
1664 F019: 0088 fdb $88
|
|
1665 F01B: 454F524220 fcc "EORB "
|
|
1666 F020: 07 fcb 7
|
|
1667 F021: 00C8 fdb $c8
|
|
1668 F023: 4551552020 fcc "EQU "
|
|
1669 F028: 0D fcb 13
|
|
1670 F029: 0005 fdb 5
|
|
1671 F02B: 4558472020 fcc "EXG "
|
|
1672 F030: 0B fcb 11
|
|
1673 F031: 001E fdb $1e
|
|
1674 F033: 4643422020 mnemfcb fcc "FCB "
|
|
1675 F038: 0D fcb 13
|
|
1676 F039: 0007 fdb 7
|
|
1677 F03B: 4643432020 fcc "FCC "
|
|
1678 F040: 0D fcb 13
|
|
1679 F041: 0008 fdb 8
|
|
1680 F043: 4644422020 fcc "FDB "
|
|
1681 F048: 0D fcb 13
|
|
1682 F049: 0009 fdb 9
|
|
1683 F04B: 494E432020 fcc "INC "
|
|
1684 F050: 0A fcb 10
|
|
1685 F051: 000C fdb $0c
|
|
1686 F053: 494E434120 fcc "INCA "
|
|
1687 F058: 00 fcb 0
|
|
1688 F059: 004C fdb $4c
|
|
1689 F05B: 494E434220 fcc "INCB "
|
|
1690 F060: 00 fcb 0
|
|
1691 F061: 005C fdb $5c
|
|
1692 F063: 4A4D502020 fcc "JMP "
|
|
1693 F068: 0A fcb 10
|
|
1694 F069: 000E fdb $0e
|
|
1695 F06B: 4A53522020 mnemjsr fcc "JSR "
|
|
1696 F070: 08 fcb 8
|
|
1697 F071: 008D fdb $8d
|
|
1698 F073: 4C42434320 fcc "LBCC "
|
|
1699 F078: 05 fcb 5
|
|
1700 F079: 1024 fdb $1024
|
|
1701 F07B: 4C42435320 fcc "LBCS "
|
|
1702 F080: 05 fcb 5
|
|
1703 F081: 1025 fdb $1025
|
|
1704 F083: 4C42455120 fcc "LBEQ "
|
|
1705 F088: 05 fcb 5
|
|
1706 F089: 1027 fdb $1027
|
|
1707 F08B: 4C42474520 fcc "LBGE "
|
|
1708 F090: 05 fcb 5
|
|
1709 F091: 102C fdb $102c
|
|
1710 F093: 4C42475420 fcc "LBGT "
|
|
1711 F098: 05 fcb 5
|
|
1712 F099: 102E fdb $102e
|
|
1713 F09B: 4C42484920 fcc "LBHI "
|
|
1714 F0A0: 05 fcb 5
|
|
1715 F0A1: 1022 fdb $1022
|
|
1716 F0A3: 4C42485320 fcc "LBHS "
|
|
1717 F0A8: 05 fcb 5
|
|
1718 F0A9: 1024 fdb $1024
|
|
1719 F0AB: 4C424C4520 fcc "LBLE "
|
|
1720 F0B0: 05 fcb 5
|
|
1721 F0B1: 102F fdb $102f
|
|
1722 F0B3: 4C424C4F20 fcc "LBLO "
|
|
1723 F0B8: 05 fcb 5
|
|
1724 F0B9: 1025 fdb $1025
|
|
1725 F0BB: 4C424C5320 fcc "LBLS "
|
|
1726 F0C0: 05 fcb 5
|
|
1727 F0C1: 1023 fdb $1023
|
|
1728 F0C3: 4C424C5420 fcc "LBLT "
|
|
1729 F0C8: 05 fcb 5
|
|
1730 F0C9: 102D fdb $102d
|
|
1731 F0CB: 4C424D4920 fcc "LBMI "
|
|
1732 F0D0: 05 fcb 5
|
|
1733 F0D1: 102B fdb $102b
|
|
1734 F0D3: 4C424E4520 fcc "LBNE "
|
|
1735 F0D8: 05 fcb 5
|
|
1736 F0D9: 1026 fdb $1026
|
|
1737 F0DB: 4C42504C20 fcc "LBPL "
|
|
1738 F0E0: 05 fcb 5
|
|
1739 F0E1: 102A fdb $102a
|
|
1740 F0E3: 4C42524120 fcc "LBRA "
|
|
1741 F0E8: 06 fcb 6
|
|
1742 F0E9: 0016 fdb $16
|
|
1743 F0EB: 4C42524E20 fcc "LBRN "
|
|
1744 F0F0: 05 fcb 5
|
|
1745 F0F1: 1021 fdb $1021
|
|
1746 F0F3: 4C42535220 fcc "LBSR "
|
|
1747 F0F8: 06 fcb 6
|
|
1748 F0F9: 0017 fdb $17
|
|
1749 F0FB: 4C42564320 fcc "LBVC "
|
|
1750 F100: 05 fcb 5
|
|
1751 F101: 1028 fdb $1028
|
|
1752 F103: 4C42565320 fcc "LBVS "
|
|
1753 F108: 05 fcb 5
|
|
1754 F109: 1029 fdb $1029
|
|
1755 F10B: 4C44412020 fcc "LDA "
|
|
1756 F110: 07 fcb 7
|
|
1757 F111: 0086 fdb $86
|
|
1758 F113: 4C44422020 fcc "LDB "
|
|
1759 F118: 07 fcb 7
|
|
1760 F119: 00C6 fdb $c6
|
|
1761 F11B: 4C44442020 fcc "LDD "
|
|
1762 F120: 08 fcb 8
|
|
1763 F121: 00CC fdb $cc
|
|
1764 F123: 4C44532020 fcc "LDS "
|
|
1765 F128: 09 fcb 9
|
|
1766 F129: 10CE fdb $10ce
|
|
1767 F12B: 4C44552020 fcc "LDU "
|
|
1768 F130: 08 fcb 8
|
|
1769 F131: 00CE fdb $ce
|
|
1770 F133: 4C44582020 fcc "LDX "
|
|
1771 F138: 08 fcb 8
|
|
1772 F139: 008E fdb $8e
|
|
1773 F13B: 4C44592020 fcc "LDY "
|
|
1774 F140: 09 fcb 9
|
|
1775 F141: 108E fdb $108e
|
|
1776 F143: 4C45415320 fcc "LEAS "
|
|
1777 F148: 03 fcb 3
|
|
1778 F149: 0032 fdb $32
|
|
1779 F14B: 4C45415520 fcc "LEAU "
|
|
1780 F150: 03 fcb 3
|
|
1781 F151: 0033 fdb $33
|
|
1782 F153: 4C45415820 fcc "LEAX "
|
|
1783 F158: 03 fcb 3
|
|
1784 F159: 0030 fdb $30
|
|
1785 F15B: 4C45415920 fcc "LEAY "
|
|
1786 F160: 03 fcb 3
|
|
1787 F161: 0031 fdb $31
|
|
1788 F163: 4C534C2020 fcc "LSL "
|
|
1789 F168: 0A fcb 10
|
|
1790 F169: 0008 fdb $08
|
|
1791 F16B: 4C534C4120 fcc "LSLA "
|
|
1792 F170: 00 fcb 0
|
|
1793 F171: 0048 fdb $48
|
|
1794 F173: 4C534C4220 fcc "LSLB "
|
|
1795 F178: 00 fcb 0
|
|
1796 F179: 0058 fdb $58
|
|
1797 F17B: 4C53522020 fcc "LSR "
|
|
1798 F180: 0A fcb 10
|
|
1799 F181: 0004 fdb $04
|
|
1800 F183: 4C53524120 fcc "LSRA "
|
|
1801 F188: 00 fcb 0
|
|
1802 F189: 0044 fdb $44
|
|
1803 F18B: 4C53524220 fcc "LSRB "
|
|
1804 F190: 00 fcb 0
|
|
1805 F191: 0054 fdb $54
|
|
1806 F193: 4D554C2020 fcc "MUL "
|
|
1807 F198: 00 fcb 0
|
|
1808 F199: 003D fdb $3d
|
|
1809 F19B: 4E45472020 fcc "NEG "
|
|
1810 F1A0: 0A fcb 10
|
|
1811 F1A1: 0000 fdb $00
|
|
1812 F1A3: 4E45474120 fcc "NEGA "
|
|
1813 F1A8: 00 fcb 0
|
|
1814 F1A9: 0040 fdb $40
|
|
1815 F1AB: 4E45474220 fcc "NEGB "
|
|
1816 F1B0: 00 fcb 0
|
|
1817 F1B1: 0050 fdb $50
|
|
1818 F1B3: 4E4F502020 fcc "NOP "
|
|
1819 F1B8: 00 fcb 0
|
|
1820 F1B9: 0012 fdb $12
|
|
1821 F1BB: 4F52412020 fcc "ORA "
|
|
1822 F1C0: 07 fcb 7
|
|
1823 F1C1: 008A fdb $8a
|
|
1824 F1C3: 4F52422020 fcc "ORB "
|
|
1825 F1C8: 07 fcb 7
|
|
1826 F1C9: 00CA fdb $ca
|
|
1827 F1CB: 4F52434320 fcc "ORCC "
|
|
1828 F1D0: 02 fcb 2
|
|
1829 F1D1: 001A fdb $1a
|
|
1830 F1D3: 4F52472020 fcc "ORG "
|
|
1831 F1D8: 0D fcb 13
|
|
1832 F1D9: 000C fdb 12
|
|
1833 F1DB: 5053485320 fcc "PSHS "
|
|
1834 F1E0: 0C fcb 12
|
|
1835 F1E1: 0034 fdb $34
|
|
1836 F1E3: 5053485520 fcc "PSHU "
|
|
1837 F1E8: 0C fcb 12
|
|
1838 F1E9: 0036 fdb $36
|
|
1839 F1EB: 50554C5320 fcc "PULS "
|
|
1840 F1F0: 0C fcb 12
|
|
1841 F1F1: 0035 fdb $35
|
|
1842 F1F3: 50554C5520 fcc "PULU "
|
|
1843 F1F8: 0C fcb 12
|
|
1844 F1F9: 0037 fdb $37
|
|
1845 F1FB: 524D422020 fcc "RMB "
|
|
1846 F200: 0D fcb 13
|
|
1847 F201: 0000 fdb 0
|
|
1848 F203: 524F4C2020 fcc "ROL "
|
|
1849 F208: 0A fcb 10
|
|
1850 F209: 0009 fdb $09
|
|
1851 F20B: 524F4C4120 fcc "ROLA "
|
|
1852 F210: 00 fcb 0
|
|
1853 F211: 0049 fdb $49
|
|
1854 F213: 524F4C4220 fcc "ROLB "
|
|
1855 F218: 00 fcb 0
|
|
1856 F219: 0059 fdb $59
|
|
1857 F21B: 524F522020 fcc "ROR "
|
|
1858 F220: 0A fcb 10
|
|
1859 F221: 0006 fdb $06
|
|
1860 F223: 524F524120 fcc "RORA "
|
|
1861 F228: 00 fcb 0
|
|
1862 F229: 0046 fdb $46
|
|
1863 F22B: 524F524220 fcc "RORB "
|
|
1864 F230: 00 fcb 0
|
|
1865 F231: 0056 fdb $56
|
|
1866 F233: 5254492020 fcc "RTI "
|
|
1867 F238: 00 fcb 0
|
|
1868 F239: 003B fdb $3b
|
|
1869 F23B: 5254532020 fcc "RTS "
|
|
1870 F240: 00 fcb 0
|
|
1871 F241: 0039 fdb $39
|
|
1872 F243: 5342434120 fcc "SBCA "
|
|
1873 F248: 07 fcb 7
|
|
1874 F249: 0082 fdb $82
|
|
1875 F24B: 5342434220 fcc "SBCB "
|
|
1876 F250: 07 fcb 7
|
|
1877 F251: 00C2 fdb $c2
|
|
1878 F253: 5345542020 fcc "SET "
|
|
1879 F258: 0D fcb 13
|
|
1880 F259: 000F fdb 15
|
|
1881 F25B: 5345544450 fcc "SETDP"
|
|
1882 F260: 0D fcb 13
|
|
1883 F261: 000E fdb 14
|
|
1884 F263: 5345582020 fcc "SEX "
|
|
1885 F268: 00 fcb 0
|
|
1886 F269: 001D fdb $1d
|
|
1887 F26B: 5354412020 fcc "STA "
|
|
1888 F270: 07 fcb 7
|
|
1889 F271: 0087 fdb $87
|
|
1890 F273: 5354422020 fcc "STB "
|
|
1891 F278: 07 fcb 7
|
|
1892 F279: 00C7 fdb $c7
|
|
1893 F27B: 5354442020 fcc "STD "
|
|
1894 F280: 08 fcb 8
|
|
1895 F281: 00CD fdb $cd
|
|
1896 F283: 5354532020 fcc "STS "
|
|
1897 F288: 09 fcb 9
|
|
1898 F289: 10CF fdb $10cf
|
|
1899 F28B: 5354552020 fcc "STU "
|
|
1900 F290: 08 fcb 8
|
|
1901 F291: 00CF fdb $cf
|
|
1902 F293: 5354582020 fcc "STX "
|
|
1903 F298: 08 fcb 8
|
|
1904 F299: 008F fdb $8f
|
|
1905 F29B: 5354592020 fcc "STY "
|
|
1906 F2A0: 09 fcb 9
|
|
1907 F2A1: 108F fdb $108f
|
|
1908 F2A3: 5355424120 fcc "SUBA "
|
|
1909 F2A8: 07 fcb 7
|
|
1910 F2A9: 0080 fdb $80
|
|
1911 F2AB: 5355424220 fcc "SUBB "
|
|
1912 F2B0: 07 fcb 7
|
|
1913 F2B1: 00C0 fdb $c0
|
|
1914 F2B3: 5355424420 fcc "SUBD "
|
|
1915 F2B8: 08 fcb 8
|
|
1916 F2B9: 0083 fdb $83
|
|
1917 F2BB: 5357492020 fcc "SWI "
|
|
1918 F2C0: 00 fcb 0
|
|
1919 F2C1: 003F fdb $3f
|
|
1920 F2C3: 5357493220 fcb "SWI2 "
|
|
1921 F2C8: 01 fcb 1
|
|
1922 F2C9: 103F fdb $103f
|
|
1923 F2CB: 5357493320 fcb "SWI3 "
|
|
1924 F2D0: 01 fcb 1
|
|
1925 F2D1: 113F fdb $113f
|
|
1926 F2D3: 53594E4320 fcc "SYNC "
|
|
1927 F2D8: 00 fcb 0
|
|
1928 F2D9: 0013 fdb $13
|
|
1929 F2DB: 5446522020 fcc "TFR "
|
|
1930 F2E0: 0B fcb 11
|
|
1931 F2E1: 001F fdb $1f
|
|
1932 F2E3: 5453542020 fcc "TST "
|
|
1933 F2E8: 0A fcb 10
|
|
1934 F2E9: 000D fdb $0d
|
|
1935 F2EB: 5453544120 fcc "TSTA "
|
|
1936 F2F0: 00 fcb 0
|
|
1937 F2F1: 004D fdb $4d
|
|
1938 F2F3: 5453544220 fcc "TSTB "
|
|
1939 F2F8: 00 fcb 0
|
|
1940 F2F9: 005D fdb $5d
|
|
1941 F2FB:
|
|
1942 F2FB: mnemsize equ (*-mnemtab)/8
|
|
1943 F2FB:
|
|
1944 F2FB: * Register table for PUSH/PULL and TFR/EXG instructions.
|
|
1945 F2FB: * 3 bytes for name, 1 for tfr/exg, 1 for push/pull, 5 total
|
|
1946 F2FB: 582020 asmregtab fcc "X "
|
|
1947 F2FE: 0110 fcb $01,$10
|
|
1948 F300: 592020 fcc "Y "
|
|
1949 F303: 0220 fcb $02,$20
|
|
1950 F305: 552020 aregu fcc "U "
|
|
1951 F308: 0340 fcb $03,$40
|
|
1952 F30A: 532020 aregs fcc "S "
|
|
1953 F30D: 0440 fcb $04,$40
|
|
1954 F30F: 504320 fcc "PC "
|
|
1955 F312: 0580 fcb $05,$80
|
|
1956 F314: 412020 fcc "A "
|
|
1957 F317: 0802 fcb $08,$02
|
|
1958 F319: 422020 fcc "B "
|
|
1959 F31C: 0904 fcb $09,$04
|
|
1960 F31E: 442020 fcc "D "
|
|
1961 F321: 0006 fcb $00,$06
|
|
1962 F323: 434320 fcc "CC "
|
|
1963 F326: 0A01 fcb $0a,$01
|
|
1964 F328: 434352 fcc "CCR"
|
|
1965 F32B: 0A01 fcb $0a,$01
|
|
1966 F32D: 445020 fcc "DP "
|
|
1967 F330: 0B08 fcb $0b,$08
|
|
1968 F332: 445052 fcc "DPR"
|
|
1969 F335: 0B08 fcb $0b,$08
|
|
1970 F337: 3F2020 reginval fcc "? "
|
|
1971 F33A:
|
|
1972 F33A: 58595553 ixregs fcc "XYUS"
|
|
1973 F33E:
|
|
1974 F33E: * opcode offsets to basic opcode, depends on first nibble.
|
|
1975 F33E: 000000000000A0 opcoffs fcb 0,0,0,0,0,0,-$60,-$70
|
|
1976 F346: 00F0E0D000F0E0 fcb 0,-$10,-$20,-$30,0,-$10,-$20,-$30
|
|
1977 F34E: * mode depending on first nibble of opcode.
|
|
1978 F34E: 03000000000005 modetab fcb 3,0,0,0,0,0,5,4,1,3,5,4,1,3,5,4
|
|
1979 F35E: * mode depending on category code stored in mnemtab
|
|
1980 F35E: 00000105060707 modetab2 fcb 0,0,1,5,6,7,7,1,2,2,0,8,9
|
|
1981 F36B: * modes in this context: 0 no operands, 1 8-bit immediate, 2 16 bit imm,
|
|
1982 F36B: * 3, 8-bit address, 4 16 bit address, 5 indexed with postbyte, 6 short
|
|
1983 F36B: * relative, 7 long relative, 8 pushpul, 9 tftetx
|
|
1984 F36B:
|
|
1985 F36B: * Decode instruction pointed to by Y for disassembly (and to find out
|
|
1986 F36B: * how long it is). On return, U points to appropriate mnemonic table entry,
|
|
1987 F36B: * Y points past instruction.
|
|
1988 F36B: * It's rather clumsy code, but we do want to reuse the same table
|
|
1989 F36B: * as used with assembling.
|
|
1990 F36B: 7F02BF disdecode clr prebyte
|
|
1991 F36E: 7F02C3 clr amode
|
|
1992 F371: A6A0 lda ,y+
|
|
1993 F373: 8110 cmpa #$10
|
|
1994 F375: 2704 beq ddec1
|
|
1995 F377: 8111 cmpa #$11
|
|
1996 F379: 2605 bne ddec2
|
|
1997 F37B: B702BF ddec1 sta prebyte ;Store $10 or $11 prebyte.
|
|
1998 F37E: A6A0 lda ,y+ ;Get new opcode.
|
|
1999 F380: B702C1 ddec2 sta opcode
|
|
2000 F383: 44 lsra
|
|
2001 F384: 44 lsra
|
|
2002 F385: 44 lsra
|
|
2003 F386: 44 lsra ;Get high nibble.
|
|
2004 F387: 8EF34E ldx #modetab
|
|
2005 F38A: E686 ldb a,x
|
|
2006 F38C: F702C3 stb amode
|
|
2007 F38F: 8EF33E ldx #opcoffs
|
|
2008 F392: A686 lda a,x
|
|
2009 F394: BB02C1 adda opcode ;Add opcode offset to opcode.
|
|
2010 F397: B702C0 ddec4 sta opc1 ;Store the 'basis' opcode.
|
|
2011 F39A: CEEE63 ldu #mnemtab
|
|
2012 F39D: 8E0093 ldx #mnemsize
|
|
2013 F3A0: C60D ddecloop ldb #13
|
|
2014 F3A2: E145 cmpb 5,u ;Compare category code with 13
|
|
2015 F3A4: 2708 beq ddec3 ;13=pseudo op, no valid opcode
|
|
2016 F3A6: FC02BF ldd prebyte
|
|
2017 F3A9: 10A346 cmpd 6,u
|
|
2018 F3AC: 2722 beq ddecfound ;Opcode&prebyte agree, operation found.
|
|
2019 F3AE: 3348 ddec3 leau 8,u ;point to next mnemonic
|
|
2020 F3B0: 301F leax -1,x
|
|
2021 F3B2: 26EC bne ddecloop
|
|
2022 F3B4: CEF033 ldu #mnemfcb ;mnemonic not found, use FCB byte.
|
|
2023 F3B7: 8603 lda #3
|
|
2024 F3B9: B702C3 sta amode ;Store mode 3, 8 bit address.
|
|
2025 F3BC: B602C1 lda opcode
|
|
2026 F3BF: 7D02BF tst prebyte
|
|
2027 F3C2: 2708 beq ddec5
|
|
2028 F3C4: B602BF lda prebyte ;if it was the combination prebyte
|
|
2029 F3C7: 7F02BF clr prebyte ;and opcode that was not found,
|
|
2030 F3CA: 313F leay -1,y ;FCB just the prebyte
|
|
2031 F3CC: B702C5 ddec5 sta operand+1 ;The byte must be stored as operand.
|
|
2032 F3CF: 39 rts
|
|
2033 F3D0: 1183EF6B ddecfound cmpu #mnembsr
|
|
2034 F3D4: 260A bne ddec6
|
|
2035 F3D6: 868D lda #$8d ;Is it really the BSR opcode?
|
|
2036 F3D8: B102C1 cmpa opcode
|
|
2037 F3DB: 2703 beq ddec6
|
|
2038 F3DD: CEF06B ldu #mnemjsr ;We mistakenly found BSR instead of JSR
|
|
2039 F3E0: B602C3 ddec6 lda amode
|
|
2040 F3E3: 84FE anda #$FE
|
|
2041 F3E5: 260A bne ddec7
|
|
2042 F3E7: A645 lda 5,u ;nibble-dependent mode was 0 or 1,
|
|
2043 F3E9: 8EF35E ldx #modetab2 ;use category dependent mode instead.
|
|
2044 F3EC: A686 lda a,x
|
|
2045 F3EE: B702C3 sta amode
|
|
2046 F3F1: B602C3 ddec7 lda amode
|
|
2047 F3F4: 48 asla
|
|
2048 F3F5: 8EF3FA ldx #disdectab
|
|
2049 F3F8: 6E96 jmp [a,x] ;jump dependent on definitive mode.
|
|
2050 F3FA: F434F42EF435F4 disdectab fdb noop,opdec1,opdec2,opdec1,opdec2,opdecidx
|
|
2051 F406: F42EF435F439F4 fdb opdec1,opdec2,opdecpb,opdecpb
|
|
2052 F40E: F434F434F434F4 disdectab1 fdb noop,noop,noop,noop,noop,noop,noop,noop
|
|
2053 F41E: F42EF435F434F4 fdb opdec1,opdec2,noop,noop,opdec1,opdec2,noop,opdec2
|
|
2054 F42E: E6A0 opdec1 ldb ,y+
|
|
2055 F430: 1D sex
|
|
2056 F431: FD02C4 od1a std operand
|
|
2057 F434: 39 noop rts
|
|
2058 F435: ECA1 opdec2 ldd ,y++
|
|
2059 F437: 20F8 bra od1a
|
|
2060 F439: E6A0 opdecpb ldb ,y+
|
|
2061 F43B: F702C2 odpa stb postbyte
|
|
2062 F43E: 39 rts
|
|
2063 F43F: E6A0 opdecidx ldb ,y+
|
|
2064 F441: 2AF8 bpl odpa ;postbytes <$80 have no extra operands.
|
|
2065 F443: F702C2 stb postbyte
|
|
2066 F446: C40F andb #$0f
|
|
2067 F448: 58 aslb
|
|
2068 F449: 8EF40E ldx #disdectab1
|
|
2069 F44C: 6E95 jmp [b,x]
|
|
2070 F44E:
|
|
2071 F44E: * Display disassembled instruction after the invocation of disdecode.
|
|
2072 F44E: * U points to mnemonic table entry.
|
|
2073 F44E: 1F31 disdisp tfr u,x
|
|
2074 F450: C605 ldb #5
|
|
2075 F452: 9D09 jsr putline ;Display the mnemonic.
|
|
2076 F454: C620 ldb #' '
|
|
2077 F456: 9D03 jsr putchar
|
|
2078 F458: B602C3 lda amode
|
|
2079 F45B: 48 asla
|
|
2080 F45C: 8EF461 ldx #disdisptab
|
|
2081 F45F: 6E96 jmp [a,x] ;Perform action dependent on mode.
|
|
2082 F461: F434F475F479F4 disdisptab fdb noop,disim8,disim16,disadr8,disadr16
|
|
2083 F46B: F53BF48BF499F4 fdb disidx,disrel8,disrel16,distfr,dispush
|
|
2084 F475: 8D29 disim8 bsr puthash
|
|
2085 F477: 200A bra disadr8
|
|
2086 F479: 8D25 disim16 bsr puthash
|
|
2087 F47B: 8D27 disadr16 bsr putdol
|
|
2088 F47D: FC02C4 ldd operand
|
|
2089 F480: 7EE6DE jmp outd
|
|
2090 F483: 8D1F disadr8 bsr putdol
|
|
2091 F485: B602C5 lda operand+1
|
|
2092 F488: 7EE6D0 jmp outbyte
|
|
2093 F48B: 8D17 disrel8 bsr putdol
|
|
2094 F48D: F602C5 ldb operand+1
|
|
2095 F490: 1D sex
|
|
2096 F491: 109F24 dr8a sty temp
|
|
2097 F494: D324 addd temp
|
|
2098 F496: 7EE6DE jmp outd
|
|
2099 F499: 8D09 disrel16 bsr putdol
|
|
2100 F49B: FC02C4 ldd operand
|
|
2101 F49E: 20F1 bra dr8a
|
|
2102 F4A0:
|
|
2103 F4A0: C623 puthash ldb #'#'
|
|
2104 F4A2: 0E03 jmp putchar
|
|
2105 F4A4: C624 putdol ldb #'$'
|
|
2106 F4A6: 0E03 jmp putchar
|
|
2107 F4A8: C62C putcomma ldb #','
|
|
2108 F4AA: 0E03 jmp putchar
|
|
2109 F4AC: C620 putspace ldb #' '
|
|
2110 F4AE: 0E03 jmp putchar
|
|
2111 F4B0:
|
|
2112 F4B0: C60C dispush ldb #12
|
|
2113 F4B2: 8EF2FB ldx #asmregtab ;Walk through the register table.
|
|
2114 F4B5: 0F24 clr temp
|
|
2115 F4B7: B602C2 regloop lda postbyte
|
|
2116 F4BA: A404 anda 4,x
|
|
2117 F4BC: 2735 beq dispush1 ;Is bit corresponding to reg set in postbyte
|
|
2118 F4BE: 8CF305 cmpx #aregu
|
|
2119 F4C1: 260B bne dispush3
|
|
2120 F4C3: 9725 sta temp+1
|
|
2121 F4C5: B602C1 lda opcode
|
|
2122 F4C8: 8402 anda #2
|
|
2123 F4CA: 2627 bne dispush1 ;no u register in pshu pulu.
|
|
2124 F4CC: 9625 lda temp+1
|
|
2125 F4CE: 8CF30A dispush3 cmpx #aregs
|
|
2126 F4D1: 260B bne dispush4
|
|
2127 F4D3: 9725 sta temp+1
|
|
2128 F4D5: B602C1 lda opcode
|
|
2129 F4D8: 8402 anda #2
|
|
2130 F4DA: 2717 beq dispush1 ;no s register in pshs puls.
|
|
2131 F4DC: 9625 lda temp+1
|
|
2132 F4DE: 43 dispush4 coma
|
|
2133 F4DF: B402C2 anda postbyte ;remove the bits from postbyte.
|
|
2134 F4E2: B702C2 sta postbyte
|
|
2135 F4E5: 3404 pshs b
|
|
2136 F4E7: 0D24 tst temp
|
|
2137 F4E9: 2702 beq dispush2
|
|
2138 F4EB: 8DBB bsr putcomma ;print comma after first register.
|
|
2139 F4ED: 8D2B dispush2 bsr disregname
|
|
2140 F4EF: 0C24 inc temp
|
|
2141 F4F1: 3504 puls b
|
|
2142 F4F3: 3005 dispush1 leax 5,x
|
|
2143 F4F5: 5A decb
|
|
2144 F4F6: 26BF bne regloop
|
|
2145 F4F8: 39 rts
|
|
2146 F4F9:
|
|
2147 F4F9: B602C2 distfr lda postbyte
|
|
2148 F4FC: 44 lsra
|
|
2149 F4FD: 44 lsra
|
|
2150 F4FE: 44 lsra
|
|
2151 F4FF: 44 lsra
|
|
2152 F500: 8D07 bsr distfrsub
|
|
2153 F502: 8DA4 bsr putcomma
|
|
2154 F504: B602C2 lda postbyte
|
|
2155 F507: 840F anda #$0f
|
|
2156 F509: C60C distfrsub ldb #12
|
|
2157 F50B: 8EF2FB ldx #asmregtab
|
|
2158 F50E: A103 distfrloop cmpa 3,x
|
|
2159 F510: 2705 beq distfrend
|
|
2160 F512: 3005 leax 5,x
|
|
2161 F514: 5A decb
|
|
2162 F515: 26F7 bne distfrloop
|
|
2163 F517: 8D01 distfrend bsr disregname
|
|
2164 F519: 39 rts
|
|
2165 F51A:
|
|
2166 F51A: 8603 disregname lda #3
|
|
2167 F51C: 1F13 tfr x,u
|
|
2168 F51E: E6C0 drnloop ldb ,u+
|
|
2169 F520: C120 cmpb #' '
|
|
2170 F522: 2705 beq drnend
|
|
2171 F524: 9D03 jsr putchar
|
|
2172 F526: 4A deca
|
|
2173 F527: 26F5 bne drnloop
|
|
2174 F529: 39 drnend rts
|
|
2175 F52A:
|
|
2176 F52A: B602C2 disidxreg lda postbyte
|
|
2177 F52D: 44 lsra
|
|
2178 F52E: 44 lsra
|
|
2179 F52F: 44 lsra
|
|
2180 F530: 44 lsra
|
|
2181 F531: 44 lsra
|
|
2182 F532: 8403 anda #3
|
|
2183 F534: 8EF33A ldx #ixregs
|
|
2184 F537: E686 ldb a,x
|
|
2185 F539: 0E03 jmp putchar
|
|
2186 F53B:
|
|
2187 F53B: 0F24 disidx clr temp
|
|
2188 F53D: B602C2 lda postbyte
|
|
2189 F540: 2B23 bmi disidx1
|
|
2190 F542: 841F anda #$1f
|
|
2191 F544: 8510 bita #$10
|
|
2192 F546: 2605 bne negoffs
|
|
2193 F548: BDF634 jsr outdecbyte
|
|
2194 F54B: 200A bra discomma
|
|
2195 F54D: C62D negoffs ldb #'-'
|
|
2196 F54F: 9D03 jsr putchar
|
|
2197 F551: 8AF0 ora #$f0
|
|
2198 F553: 40 nega
|
|
2199 F554: BDF634 jsr outdecbyte
|
|
2200 F557: BDF4A8 discomma jsr putcomma ;Display ,Xreg and terminating ]
|
|
2201 F55A: 8DCE disindex bsr disidxreg
|
|
2202 F55C: 0D24 disindir tst temp ;Display ] if indirect.
|
|
2203 F55E: 2704 beq disidxend
|
|
2204 F560: C65D ldb #']'
|
|
2205 F562: 9D03 jsr putchar
|
|
2206 F564: 39 disidxend rts
|
|
2207 F565: 8510 disidx1 bita #$10
|
|
2208 F567: 2706 beq disidx2
|
|
2209 F569: C65B ldb #'['
|
|
2210 F56B: 9D03 jsr putchar
|
|
2211 F56D: 0C24 inc temp
|
|
2212 F56F: B602C2 disidx2 lda postbyte
|
|
2213 F572: 840F anda #$0f
|
|
2214 F574: 48 asla
|
|
2215 F575: 8EF614 ldx #disidxtab
|
|
2216 F578: 6E96 jmp [a,x] ;Jump to routine for indexed mode
|
|
2217 F57A: 8602 disadec2 lda #2
|
|
2218 F57C: 2002 bra disadeca
|
|
2219 F57E: 8601 disadec1 lda #1
|
|
2220 F580: BDF4A8 disadeca jsr putcomma
|
|
2221 F583: C62D disadloop ldb #'-'
|
|
2222 F585: 9D03 jsr putchar
|
|
2223 F587: 4A deca
|
|
2224 F588: 26F9 bne disadloop
|
|
2225 F58A: 20CE bra disindex
|
|
2226 F58C: 8602 disainc2 lda #2
|
|
2227 F58E: 2002 bra disainca
|
|
2228 F590: 8601 disainc1 lda #1
|
|
2229 F592: 9725 disainca sta temp+1
|
|
2230 F594: BDF4A8 jsr putcomma
|
|
2231 F597: BDF52A jsr disidxreg
|
|
2232 F59A: 9625 lda temp+1
|
|
2233 F59C: C62B disailoop ldb #'+'
|
|
2234 F59E: 9D03 jsr putchar
|
|
2235 F5A0: 4A deca
|
|
2236 F5A1: 26F9 bne disailoop
|
|
2237 F5A3: 7EF55C jmp disindir
|
|
2238 F5A6: C641 disax ldb #'A'
|
|
2239 F5A8: 9D03 jsr putchar
|
|
2240 F5AA: 7EF557 jmp discomma
|
|
2241 F5AD: C642 disbx ldb #'B'
|
|
2242 F5AF: 9D03 jsr putchar
|
|
2243 F5B1: 7EF557 jmp discomma
|
|
2244 F5B4: C644 disdx ldb #'D'
|
|
2245 F5B6: 9D03 jsr putchar
|
|
2246 F5B8: 7EF557 jmp discomma
|
|
2247 F5BB: C63F disinval ldb #'?'
|
|
2248 F5BD: 9D03 jsr putchar
|
|
2249 F5BF: 7EF55C jmp disindir
|
|
2250 F5C2: B602C5 disnx lda operand+1
|
|
2251 F5C5: 2B09 bmi disnxneg
|
|
2252 F5C7: BDF4A4 disnx1 jsr putdol
|
|
2253 F5CA: BDE6D0 jsr outbyte
|
|
2254 F5CD: 7EF557 jmp discomma
|
|
2255 F5D0: C62D disnxneg ldb #'-'
|
|
2256 F5D2: 9D03 jsr putchar
|
|
2257 F5D4: 40 nega
|
|
2258 F5D5: 20F0 bra disnx1
|
|
2259 F5D7: BDF4A4 disnnx jsr putdol
|
|
2260 F5DA: FC02C4 ldd operand
|
|
2261 F5DD: BDE6DE jsr outd
|
|
2262 F5E0: 7EF557 jmp discomma
|
|
2263 F5E3: BDF4A4 disnpc jsr putdol
|
|
2264 F5E6: F602C5 ldb operand+1
|
|
2265 F5E9: 1D sex
|
|
2266 F5EA: 109F26 disnpca sty temp2
|
|
2267 F5ED: D326 addd temp2
|
|
2268 F5EF: BDE6DE jsr outd
|
|
2269 F5F2: 8EF610 ldx #commapc
|
|
2270 F5F5: C604 ldb #4
|
|
2271 F5F7: 9D09 jsr putline
|
|
2272 F5F9: 7EF55C jmp disindir
|
|
2273 F5FC: BDF4A4 disnnpc jsr putdol
|
|
2274 F5FF: FC02C4 ldd operand
|
|
2275 F602: 20E6 bra disnpca
|
|
2276 F604: BDF4A4 disdirect jsr putdol
|
|
2277 F607: FC02C4 ldd operand
|
|
2278 F60A: BDE6DE jsr outd
|
|
2279 F60D: 7EF55C jmp disindir
|
|
2280 F610:
|
|
2281 F610: 2C504352 commapc fcc ",PCR"
|
|
2282 F614:
|
|
2283 F614: F590F58CF57EF5 disidxtab fdb disainc1,disainc2,disadec1,disadec2
|
|
2284 F61C: F557F5ADF5A6F5 fdb discomma,disbx,disax,disinval
|
|
2285 F624: F5C2F5D7F5BBF5 fdb disnx,disnnx,disinval,disdx
|
|
2286 F62C: F5E3F5FCF5BBF6 fdb disnpc,disnnpc,disinval,disdirect
|
|
2287 F634:
|
|
2288 F634: * Display byte A in decimal (0<=A<20)
|
|
2289 F634: 810A outdecbyte cmpa #10
|
|
2290 F636: 2506 blo odb1
|
|
2291 F638: 800A suba #10
|
|
2292 F63A: C631 ldb #'1'
|
|
2293 F63C: 9D03 jsr putchar
|
|
2294 F63E: 8B30 odb1 adda #'0'
|
|
2295 F640: 1F89 tfr a,b
|
|
2296 F642: 0E03 jmp putchar
|
|
2297 F644:
|
|
2298 F644: * This is the code for the U command, unassemble instructions in memory.
|
|
2299 F644: * Syntax: U or Uaddr or Uaddr,length
|
|
2300 F644: 8E0201 unasm ldx #linebuf+1
|
|
2301 F647: CC0014 ldd #20
|
|
2302 F64A: BDE732 jsr scan2parms ;Scan address,length parameters.
|
|
2303 F64D: FC029D ldd addr
|
|
2304 F650: F3029F addd length
|
|
2305 F653: FD029F std length
|
|
2306 F656: 10BE029D ldy addr
|
|
2307 F65A: 1F20 unasmloop tfr y,d
|
|
2308 F65C: BDE6DE jsr outd ;Display instruction address
|
|
2309 F65F: BDF4AC jsr putspace
|
|
2310 F662: 3420 pshs y
|
|
2311 F664: BDF36B jsr disdecode
|
|
2312 F667: 3510 puls x
|
|
2313 F669: 109F24 sty temp
|
|
2314 F66C: 0F26 clr temp2
|
|
2315 F66E: A680 unadishex lda ,x+
|
|
2316 F670: BDE6D0 jsr outbyte
|
|
2317 F673: 0C26 inc temp2
|
|
2318 F675: 0C26 inc temp2
|
|
2319 F677: 9C24 cmpx temp
|
|
2320 F679: 26F3 bne unadishex ;Display instruction bytes as hex.
|
|
2321 F67B: C620 unadisspc ldb #' '
|
|
2322 F67D: 9D03 jsr putchar
|
|
2323 F67F: 0C26 inc temp2
|
|
2324 F681: 860B lda #11
|
|
2325 F683: 9126 cmpa temp2 ;Fill out with spaces to width 11.
|
|
2326 F685: 26F4 bne unadisspc
|
|
2327 F687: 26E5 bne unadishex
|
|
2328 F689: BDF44E jsr disdisp ;Display disassembled instruction.
|
|
2329 F68C: 9D0C jsr putcr
|
|
2330 F68E: 10BC029F cmpy length
|
|
2331 F692: 23C6 bls unasmloop
|
|
2332 F694: 10BF029D sty addr
|
|
2333 F698: 7EE558 jmp cmdline
|
|
2334 F69B:
|
|
2335 F69B: * Simple 'expression evaluator' for assembler.
|
|
2336 F69B: E684 expr ldb ,x
|
|
2337 F69D: C12D cmpb #'-'
|
|
2338 F69F: 2603 bne pos
|
|
2339 F6A1: 5F clrb
|
|
2340 F6A2: 3001 leax 1,x
|
|
2341 F6A4: 3404 pos pshs b
|
|
2342 F6A6: 8D11 bsr scanfact
|
|
2343 F6A8: 270C beq exprend1
|
|
2344 F6AA: 6DE0 tst ,s+
|
|
2345 F6AC: 2607 bne exprend ;Was the minus sign there.
|
|
2346 F6AE: 43 coma
|
|
2347 F6AF: 53 comb
|
|
2348 F6B0: C30001 addd #1
|
|
2349 F6B3: 1CFB andcc #$fb ;Clear Z flag for valid result.
|
|
2350 F6B5: 39 exprend rts
|
|
2351 F6B6: 3504 exprend1 puls b
|
|
2352 F6B8: 39 rts
|
|
2353 F6B9:
|
|
2354 F6B9: E680 scanfact ldb ,x+
|
|
2355 F6BB: C124 cmpb #'$'
|
|
2356 F6BD: 1027F04E lbeq scanhex ;Hex number if starting with dollar.
|
|
2357 F6C1: C127 cmpb #'''
|
|
2358 F6C3: 260E bne scandec ;char if starting with ' else decimal
|
|
2359 F6C5: E680 ldb ,x+
|
|
2360 F6C7: A684 lda ,x
|
|
2361 F6C9: 8127 cmpa #'''
|
|
2362 F6CB: 2602 bne scanchar2
|
|
2363 F6CD: 3001 leax 1,x ;Increment past final quote if it's there.
|
|
2364 F6CF: 4F scanchar2 clra
|
|
2365 F6D0: 1CFB andcc #$fb ;Clear zero flag.
|
|
2366 F6D2: 39 rts
|
|
2367 F6D3: C130 scandec cmpb #'0'
|
|
2368 F6D5: 252F blo noexpr
|
|
2369 F6D7: C139 cmpb #'9'
|
|
2370 F6D9: 222B bhi noexpr
|
|
2371 F6DB: 0F24 clr temp
|
|
2372 F6DD: 0F25 clr temp+1
|
|
2373 F6DF: C030 scandloop subb #'0'
|
|
2374 F6E1: 251C bcs sdexit
|
|
2375 F6E3: C10A cmpb #10
|
|
2376 F6E5: 2418 bcc sdexit
|
|
2377 F6E7: 3404 pshs b
|
|
2378 F6E9: DC24 ldd temp
|
|
2379 F6EB: 58 aslb
|
|
2380 F6EC: 49 rola
|
|
2381 F6ED: 3406 pshs d
|
|
2382 F6EF: 58 aslb
|
|
2383 F6F0: 49 rola
|
|
2384 F6F1: 58 aslb
|
|
2385 F6F2: 49 rola
|
|
2386 F6F3: E3E1 addd ,s++ ;Multiply number by 10.
|
|
2387 F6F5: EBE0 addb ,s+
|
|
2388 F6F7: 8900 adca #0 ;Add digit to 10.
|
|
2389 F6F9: DD24 std temp
|
|
2390 F6FB: E680 ldb ,x+ ;Get next character.
|
|
2391 F6FD: 20E0 bra scandloop
|
|
2392 F6FF: DC24 sdexit ldd temp
|
|
2393 F701: 301F leax -1,x
|
|
2394 F703: 1CFB andcc #$fb
|
|
2395 F705: 39 rts
|
|
2396 F706: 1A04 noexpr orcc #$04
|
|
2397 F708: 39 rts
|
|
2398 F709:
|
|
2399 F709: * Assemble the instruction pointed to by X.
|
|
2400 F709: * Fisrt stage: copy mnemonic to mnemonic buffer.
|
|
2401 F709: 8605 asminstr lda #5
|
|
2402 F70B: CE02C6 ldu #mnembuf
|
|
2403 F70E: E680 mncploop ldb ,x+
|
|
2404 F710: 2715 beq mncpexit
|
|
2405 F712: C120 cmpb #' '
|
|
2406 F714: 2711 beq mncpexit ;Mnemonic ends at first space or null
|
|
2407 F716: C4DF andb #CASEMASK
|
|
2408 F718: C141 cmpb #'A'
|
|
2409 F71A: 2504 blo nolet
|
|
2410 F71C: C15A cmpb #'Z'
|
|
2411 F71E: 2302 bls mnemcp1 ;Capitalize letters, but only letters.
|
|
2412 F720: E61F nolet ldb -1,x
|
|
2413 F722: E7C0 mnemcp1 stb ,u+ ;Copy to mnemonic buffer.
|
|
2414 F724: 4A deca
|
|
2415 F725: 26E7 bne mncploop
|
|
2416 F727: 4D mncpexit tsta
|
|
2417 F728: 2707 beq mncpdone
|
|
2418 F72A: C620 ldb #' '
|
|
2419 F72C: E7C0 mnfilloop stb ,u+
|
|
2420 F72E: 4A deca
|
|
2421 F72F: 26FB bne mnfilloop ;Fill the rest of mnem buffer with spaces.
|
|
2422 F731: * Second stage: look mnemonic up using binary search.
|
|
2423 F731: 9F28 mncpdone stx temp3
|
|
2424 F733: 0F24 clr temp ;Low index=0
|
|
2425 F735: 8693 lda #mnemsize
|
|
2426 F737: 9725 sta temp+1 ;High index=mnemsize.
|
|
2427 F739: D625 bsrchloop ldb temp+1
|
|
2428 F73B: C1FF cmpb #$ff
|
|
2429 F73D: 2739 beq invmnem ;lower limit -1?
|
|
2430 F73F: D124 cmpb temp
|
|
2431 F741: 2535 blo invmnem ;hi index lower than low index?
|
|
2432 F743: 4F clra
|
|
2433 F744: DB24 addb temp ;Add indexes.
|
|
2434 F746: 8900 adca #0
|
|
2435 F748: 44 lsra
|
|
2436 F749: 56 rorb ;Divide by 2 to get average
|
|
2437 F74A: D726 stb temp2
|
|
2438 F74C: 58 aslb
|
|
2439 F74D: 49 rola
|
|
2440 F74E: 58 aslb
|
|
2441 F74F: 49 rola
|
|
2442 F750: 58 aslb
|
|
2443 F751: 49 rola ;Multiply by 8 to get offset.
|
|
2444 F752: CEEE63 ldu #mnemtab
|
|
2445 F755: 33CB leau d,u ;Add offset to table base
|
|
2446 F757: 1F32 tfr u,y
|
|
2447 F759: 8605 lda #5
|
|
2448 F75B: 8E02C6 ldx #mnembuf
|
|
2449 F75E: E680 bscmploop ldb ,x+
|
|
2450 F760: E1A0 cmpb ,y+
|
|
2451 F762: 2606 bne bscmpexit ;Characters don't match?
|
|
2452 F764: 4A deca
|
|
2453 F765: 26F7 bne bscmploop
|
|
2454 F767: 7EF77E jmp mnemfound ;We found the mnemonic.
|
|
2455 F76A: D626 bscmpexit ldb temp2
|
|
2456 F76C: 2405 bcc bscmplower
|
|
2457 F76E: 5A decb
|
|
2458 F76F: D725 stb temp+1 ;mnembuf<table, adjust high limit.
|
|
2459 F771: 20C6 bra bsrchloop
|
|
2460 F773: 5C bscmplower incb
|
|
2461 F774: D724 stb temp ;mnembuf>table, adjust low limit.
|
|
2462 F776: 20C1 bra bsrchloop
|
|
2463 F778: 8EE67D invmnem ldx #invmmsg
|
|
2464 F77B: 7E0298 jmp asmerrvec
|
|
2465 F77E: * Stage 3: Perform routine depending on category code.
|
|
2466 F77E: 7F02CC mnemfound clr uncert
|
|
2467 F781: 10BE029D ldy addr
|
|
2468 F785: A645 lda 5,u
|
|
2469 F787: 48 asla
|
|
2470 F788: 8EF792 ldx #asmtab
|
|
2471 F78B: AD96 jsr [a,x]
|
|
2472 F78D: 10BF029D sty addr
|
|
2473 F791: 39 rts
|
|
2474 F792: F7B4F7B8F7BCF7 asmtab fdb onebyte,twobyte,immbyte,lea
|
|
2475 F79A: F7F7F80AF81DF8 fdb sbranch,lbranch,lbra,acc8
|
|
2476 F7A2: F835F846F859F8 fdb dreg1,dreg2,oneaddr,tfrexg
|
|
2477 F7AA: F8A4F8CA fdb pushpul,pseudo
|
|
2478 F7AE:
|
|
2479 F7AE: E7A0 putbyte stb ,y+
|
|
2480 F7B0: 39 rts
|
|
2481 F7B1: EDA1 putword std ,y++
|
|
2482 F7B3: 39 rts
|
|
2483 F7B4:
|
|
2484 F7B4: E647 onebyte ldb 7,u ;Cat 0, one byte opcode w/o operands RTS
|
|
2485 F7B6: 20F6 bra putbyte
|
|
2486 F7B8: EC46 twobyte ldd 6,u ;Cat 1, two byte opcode w/o operands SWI2
|
|
2487 F7BA: 20F5 bra putword
|
|
2488 F7BC: E647 immbyte ldb 7,u ;Cat 2, opcode w/ immdiate operand ANDCC
|
|
2489 F7BE: 8DEE bsr putbyte
|
|
2490 F7C0: BDF8ED jsr scanops
|
|
2491 F7C3: F602C3 ldb amode
|
|
2492 F7C6: C101 cmpb #1
|
|
2493 F7C8: 1026038A lbne moderr
|
|
2494 F7CC: F602C5 ldb operand+1
|
|
2495 F7CF: 20DD bra putbyte
|
|
2496 F7D1: E647 lea ldb 7,u ;Cat 3, LEA
|
|
2497 F7D3: 8DD9 bsr putbyte
|
|
2498 F7D5: BDF8ED jsr scanops
|
|
2499 F7D8: B602C3 lda amode
|
|
2500 F7DB: 8101 cmpa #1
|
|
2501 F7DD: 10270375 lbeq moderr ;No immediate w/ lea
|
|
2502 F7E1: 8103 cmpa #3
|
|
2503 F7E3: 102402BE lbhs doaddr
|
|
2504 F7E7: BDFA98 jsr set3
|
|
2505 F7EA: 868F lda #$8f
|
|
2506 F7EC: B702C2 sta postbyte
|
|
2507 F7EF: 8602 lda #2
|
|
2508 F7F1: B702CB sta opsize ;Use 8F nn nn for direct mode.
|
|
2509 F7F4: 7EFAA5 jmp doaddr
|
|
2510 F7F7: E647 sbranch ldb 7,u ;Cat 4, short branch instructions
|
|
2511 F7F9: 8DB3 bsr putbyte
|
|
2512 F7FB: BDF8E5 jsr startop
|
|
2513 F7FE: 301F leax -1,x
|
|
2514 F800: BD0295 jsr exprvec
|
|
2515 F803: 10270349 lbeq exprerr
|
|
2516 F807: 7EFB0E jmp shortrel
|
|
2517 F80A: EC46 lbranch ldd 6,u ;Cat 5, long brach w/ two byte opcode
|
|
2518 F80C: 8DA3 bsr putword
|
|
2519 F80E: BDF8E5 lbra1 jsr startop
|
|
2520 F811: 301F leax -1,x
|
|
2521 F813: BD0295 jsr exprvec
|
|
2522 F816: 10270336 lbeq exprerr
|
|
2523 F81A: 7EFB32 jmp longrel
|
|
2524 F81D: E647 lbra ldb 7,u ;Cat 6, long branch w/ one byte opcode.
|
|
2525 F81F: BDF7AE jsr putbyte
|
|
2526 F822: 20EA bra lbra1
|
|
2527 F824: 8601 acc8 lda #1 ;Cat 7, 8-bit two operand instructions ADDA
|
|
2528 F826: B702CB sta opsize
|
|
2529 F829: BDF8ED jsr scanops
|
|
2530 F82C: BDF8CB jsr adjopc
|
|
2531 F82F: BDF7AE jsr putbyte
|
|
2532 F832: 7EFAA5 jmp doaddr
|
|
2533 F835: 8602 dreg1 lda #2 ;Cat 8, 16-bit 2operand insns 1byte opc LDX
|
|
2534 F837: B702CB sta opsize
|
|
2535 F83A: BDF8ED jsr scanops
|
|
2536 F83D: BDF8CB jsr adjopc
|
|
2537 F840: BDF7AE jsr putbyte
|
|
2538 F843: 7EFAA5 jmp doaddr
|
|
2539 F846: 8602 dreg2 lda #2 ;Cat 9, 16-bit 2operand insns 2byte opc LDY
|
|
2540 F848: B702CB sta opsize
|
|
2541 F84B: BDF8ED jsr scanops
|
|
2542 F84E: BDF8CB jsr adjopc
|
|
2543 F851: A646 lda 6,u
|
|
2544 F853: BDF7B1 jsr putword
|
|
2545 F856: 7EFAA5 jmp doaddr
|
|
2546 F859: BDF8ED oneaddr jsr scanops ;Cat 10, one-operand insns NEG..CLR
|
|
2547 F85C: E647 ldb 7,u
|
|
2548 F85E: B602C3 lda amode
|
|
2549 F861: 8101 cmpa #1
|
|
2550 F863: 102702EF lbeq moderr ;No immediate mode
|
|
2551 F867: 8103 cmpa #3
|
|
2552 F869: 2408 bhs oaind ;indexed etc
|
|
2553 F86B: B602CB lda opsize
|
|
2554 F86E: 4A deca
|
|
2555 F86F: 2704 beq oadir
|
|
2556 F871: CB10 addb #$10 ;Add $70 for extended direct.
|
|
2557 F873: CB60 oaind addb #$60 ;And $60 for indexed etc.
|
|
2558 F875: BDF7AE oadir jsr putbyte ;And nothing for direct8.
|
|
2559 F878: 7EFAA5 jmp doaddr
|
|
2560 F87B: BDF8E5 tfrexg jsr startop ;Cat 11, TFR and EXG
|
|
2561 F87E: 301F leax -1,x
|
|
2562 F880: E647 ldb 7,u
|
|
2563 F882: BDF7AE jsr putbyte
|
|
2564 F885: BDFB6E jsr findreg
|
|
2565 F888: E6C4 ldb ,u
|
|
2566 F88A: 58 aslb
|
|
2567 F88B: 58 aslb
|
|
2568 F88C: 58 aslb
|
|
2569 F88D: 58 aslb
|
|
2570 F88E: F702C2 stb postbyte
|
|
2571 F891: E680 ldb ,x+
|
|
2572 F893: C12C cmpb #','
|
|
2573 F895: 102602BD lbne moderr
|
|
2574 F899: BDFB6E jsr findreg
|
|
2575 F89C: E6C4 ldb ,u
|
|
2576 F89E: FA02C2 orb postbyte
|
|
2577 F8A1: 7EF7AE jmp putbyte
|
|
2578 F8A4: BDF8E5 pushpul jsr startop ;Cat 12, PSH and PUL
|
|
2579 F8A7: 301F leax -1,x
|
|
2580 F8A9: E647 ldb 7,u
|
|
2581 F8AB: BDF7AE jsr putbyte
|
|
2582 F8AE: 7F02C2 clr postbyte
|
|
2583 F8B1: BDFB6E pploop jsr findreg
|
|
2584 F8B4: E641 ldb 1,u
|
|
2585 F8B6: FA02C2 orb postbyte
|
|
2586 F8B9: F702C2 stb postbyte
|
|
2587 F8BC: E680 ldb ,x+
|
|
2588 F8BE: C12C cmpb #','
|
|
2589 F8C0: 27EF beq pploop
|
|
2590 F8C2: 301F leax -1,x
|
|
2591 F8C4: F602C2 ldb postbyte
|
|
2592 F8C7: 7EF7AE jmp putbyte
|
|
2593 F8CA: pseudo ;Cat 13, pseudo oeprations
|
|
2594 F8CA: 39 rts
|
|
2595 F8CB:
|
|
2596 F8CB: * Adjust opcdoe depending on mode (in $80-$FF range)
|
|
2597 F8CB: E647 adjopc ldb 7,u
|
|
2598 F8CD: B602C3 lda amode
|
|
2599 F8D0: 8102 cmpa #2
|
|
2600 F8D2: 2708 beq adjdir ;Is it direct?
|
|
2601 F8D4: 8103 cmpa #3
|
|
2602 F8D6: 2401 bhs adjind ;Indexed etc?
|
|
2603 F8D8: 39 rts ;Not, then immediate, no adjust.
|
|
2604 F8D9: CB20 adjind addb #$20 ;Add $20 to opcode for indexed etc modes.
|
|
2605 F8DB: 39 rts
|
|
2606 F8DC: CB10 adjdir addb #$10 ;Add $10 to opcode for direct8
|
|
2607 F8DE: B602CB lda opsize
|
|
2608 F8E1: 4A deca
|
|
2609 F8E2: 26F5 bne adjind ;If opsize=2, add another $20 for extended16
|
|
2610 F8E4: 39 rts
|
|
2611 F8E5:
|
|
2612 F8E5: * Start scanning of operands.
|
|
2613 F8E5: 9E28 startop ldx temp3
|
|
2614 F8E7: 7F02C3 clr amode
|
|
2615 F8EA: 7EE6E7 jmp skipspace
|
|
2616 F8ED:
|
|
2617 F8ED: * amode settings in assembler: 1=immediate, 2=direct/extended, 3=indexed
|
|
2618 F8ED: * etc. 4=pc relative, 5=indirect, 6=pcrelative and indirect.
|
|
2619 F8ED:
|
|
2620 F8ED: * This subroutine scans the assembler operands.
|
|
2621 F8ED: 8DF6 scanops bsr startop
|
|
2622 F8EF: C15B cmpb #'['
|
|
2623 F8F1: 2607 bne noindir
|
|
2624 F8F3: 8605 lda #5 ;operand starts with [, then indirect.
|
|
2625 F8F5: B702C3 sta amode
|
|
2626 F8F8: E680 ldb ,x+
|
|
2627 F8FA: C123 noindir cmpb #'#'
|
|
2628 F8FC: 10270087 lbeq doimm
|
|
2629 F900: C12C cmpb #','
|
|
2630 F902: 1027009A lbeq dospecial
|
|
2631 F906: C4DF andb #CASEMASK ;Convert to uppercase.
|
|
2632 F908: 8686 lda #$86
|
|
2633 F90A: C141 cmpb #'A'
|
|
2634 F90C: 270C beq scanacidx
|
|
2635 F90E: 8685 lda #$85
|
|
2636 F910: C142 cmpb #'B'
|
|
2637 F912: 2706 beq scanacidx
|
|
2638 F914: 868B lda #$8B
|
|
2639 F916: C144 cmpb #'D'
|
|
2640 F918: 2616 bne scanlab
|
|
2641 F91A: E680 scanacidx ldb ,x+ ;Could it be A,X B,X or D,X
|
|
2642 F91C: C12C cmpb #','
|
|
2643 F91E: 260E bne nocomma
|
|
2644 F920: B702C2 sta postbyte
|
|
2645 F923: 7F02CB clr opsize
|
|
2646 F926: BDFA98 jsr set3
|
|
2647 F929: BDFA7A jsr scanixreg
|
|
2648 F92C: 2041 bra scanend
|
|
2649 F92E: 301F nocomma leax -1,x
|
|
2650 F930: 301F scanlab leax -1,x ;Point to the start of the operand
|
|
2651 F932: BD0295 jsr exprvec
|
|
2652 F935: 10270217 lbeq exprerr
|
|
2653 F939: FD02C4 std operand
|
|
2654 F93C: 7D02CC tst uncert
|
|
2655 F93F: 2609 bne opsz2 ;Go for extended if operand unknown.
|
|
2656 F941: B302CD subd dpsetting
|
|
2657 F944: 4D tsta ;Can we use 8-bit operand?
|
|
2658 F945: 2603 bne opsz2
|
|
2659 F947: 4C inca
|
|
2660 F948: 2002 bra opsz1
|
|
2661 F94A: 8602 opsz2 lda #2
|
|
2662 F94C: B702CB opsz1 sta opsize ;Set opsize depending on magnitude of op.
|
|
2663 F94F: B602C3 lda amode
|
|
2664 F952: 8105 cmpa #5
|
|
2665 F954: 260C bne opsz3 ;Or was it indirect.
|
|
2666 F956: 8602 lda #2 ;Then we have postbyte and opsize=2
|
|
2667 F958: B702CB sta opsize
|
|
2668 F95B: 868F lda #$8F
|
|
2669 F95D: B702C2 sta postbyte
|
|
2670 F960: 2005 bra opsz4
|
|
2671 F962: 8602 opsz3 lda #2
|
|
2672 F964: B702C3 sta amode ;Assume direct or absolute addressing
|
|
2673 F967: E680 opsz4 ldb ,x+
|
|
2674 F969: C12C cmpb #','
|
|
2675 F96B: 10270086 lbeq doindex ;If followed by, then indexed.
|
|
2676 F96F: B602C3 scanend lda amode
|
|
2677 F972: 8105 cmpa #5
|
|
2678 F974: 2510 blo scanend2 ;Was it an indirect mode?
|
|
2679 F976: B602C2 lda postbyte
|
|
2680 F979: 8A10 ora #$10 ;Set indirect bit.
|
|
2681 F97B: B702C2 sta postbyte
|
|
2682 F97E: E680 ldb ,x+
|
|
2683 F980: C15D cmpb #']' ;Check for the other ]
|
|
2684 F982: 102701D0 lbeq moderr
|
|
2685 F986: 39 scanend2 rts
|
|
2686 F987: BD0295 doimm jsr exprvec ;Immediate addressing.
|
|
2687 F98A: 102701C2 lbeq exprerr
|
|
2688 F98E: FD02C4 std operand
|
|
2689 F991: B602C3 lda amode
|
|
2690 F994: 8105 cmpa #5
|
|
2691 F996: 102701BC lbeq moderr ;Inirect mode w/ imm is illegal.
|
|
2692 F99A: 8601 lda #$01
|
|
2693 F99C: B702C3 sta amode
|
|
2694 F99F: 39 rts
|
|
2695 F9A0: BDFA98 dospecial jsr set3
|
|
2696 F9A3: 7F02CB clr opsize
|
|
2697 F9A6: 4F clra
|
|
2698 F9A7: E680 adecloop ldb ,x+
|
|
2699 F9A9: C12D cmpb #'-'
|
|
2700 F9AB: 2603 bne adecend
|
|
2701 F9AD: 4C inca ;Count the - signs for autodecrement.
|
|
2702 F9AE: 20F7 bra adecloop
|
|
2703 F9B0: 301F adecend leax -1,x
|
|
2704 F9B2: 8102 cmpa #2
|
|
2705 F9B4: 1022019E lbhi moderr
|
|
2706 F9B8: 4D tsta
|
|
2707 F9B9: 262F bne autodec
|
|
2708 F9BB: 7F02C2 clr postbyte
|
|
2709 F9BE: BDFA7A jsr scanixreg
|
|
2710 F9C1: 4F clra
|
|
2711 F9C2: E680 aincloop ldb ,x+
|
|
2712 F9C4: C12B cmpb #'+'
|
|
2713 F9C6: 2603 bne aincend
|
|
2714 F9C8: 4C inca
|
|
2715 F9C9: 20F7 bra aincloop ;Count the + signs for autoincrement.
|
|
2716 F9CB: 301F aincend leax -1,x
|
|
2717 F9CD: 8102 cmpa #2
|
|
2718 F9CF: 10220183 lbhi moderr
|
|
2719 F9D3: 4D tsta
|
|
2720 F9D4: 260A bne autoinc
|
|
2721 F9D6: 8684 lda #$84
|
|
2722 F9D8: BA02C2 ora postbyte
|
|
2723 F9DB: B702C2 sta postbyte
|
|
2724 F9DE: 208F bra scanend
|
|
2725 F9E0: 8B7F autoinc adda #$7f
|
|
2726 F9E2: BA02C2 ora postbyte
|
|
2727 F9E5: B702C2 sta postbyte
|
|
2728 F9E8: 2085 bra scanend
|
|
2729 F9EA: 8B81 autodec adda #$81
|
|
2730 F9EC: B702C2 sta postbyte
|
|
2731 F9EF: BDFA7A jsr scanixreg
|
|
2732 F9F2: 16FF7A lbra scanend
|
|
2733 F9F5: 7F02C2 doindex clr postbyte
|
|
2734 F9F8: BDFA98 jsr set3
|
|
2735 F9FB: E680 ldb ,x+
|
|
2736 F9FD: C4DF andb #CASEMASK ;Convert to uppercase.
|
|
2737 F9FF: C150 cmpb #'P'
|
|
2738 FA01: 10270057 lbeq dopcrel ;Check for PC relative.
|
|
2739 FA05: 301F leax -1,x
|
|
2740 FA07: 7F02CB clr opsize
|
|
2741 FA0A: 8D6E bsr scanixreg
|
|
2742 FA0C: FC02C4 ldd operand
|
|
2743 FA0F: 7D02CC tst uncert
|
|
2744 FA12: 2638 bne longindex ;Go for long index if operand unknown.
|
|
2745 FA14: 1083FFF0 cmpd #-16
|
|
2746 FA18: 2D18 blt shortindex
|
|
2747 FA1A: 1083000F cmpd #15
|
|
2748 FA1E: 2E12 bgt shortindex
|
|
2749 FA20: B602C3 lda amode
|
|
2750 FA23: 8105 cmpa #5
|
|
2751 FA25: 2717 beq shortind1 ;Indirect may not be 5-bit index
|
|
2752 FA27: ;It's a five-bit index.
|
|
2753 FA27: C41F andb #$1f
|
|
2754 FA29: FA02C2 orb postbyte
|
|
2755 FA2C: F702C2 stb postbyte
|
|
2756 FA2F: 16FF3D lbra scanend
|
|
2757 FA32: 1083FF80 shortindex cmpd #-128
|
|
2758 FA36: 2D14 blt longindex
|
|
2759 FA38: 1083007F cmpd #127
|
|
2760 FA3C: 2E0E bgt longindex
|
|
2761 FA3E: 7C02CB shortind1 inc opsize
|
|
2762 FA41: C688 ldb #$88
|
|
2763 FA43: FA02C2 orb postbyte
|
|
2764 FA46: F702C2 stb postbyte
|
|
2765 FA49: 16FF23 lbra scanend
|
|
2766 FA4C: 8602 longindex lda #$2
|
|
2767 FA4E: B702CB sta opsize
|
|
2768 FA51: C689 ldb #$89
|
|
2769 FA53: FA02C2 orb postbyte
|
|
2770 FA56: F702C2 stb postbyte
|
|
2771 FA59: 16FF13 lbra scanend
|
|
2772 FA5C: E680 dopcrel ldb ,x+
|
|
2773 FA5E: C4DF andb #CASEMASK ;Convert to uppercase
|
|
2774 FA60: C143 cmpb #'C'
|
|
2775 FA62: 2506 blo pcrelend
|
|
2776 FA64: C152 cmpb #'R'
|
|
2777 FA66: 2202 bhi pcrelend
|
|
2778 FA68: 20F2 bra dopcrel ;Scan past the ,PCR
|
|
2779 FA6A: 301F pcrelend leax -1,x
|
|
2780 FA6C: C68C ldb #$8C
|
|
2781 FA6E: FA02C2 orb postbyte ;Set postbyte
|
|
2782 FA71: F702C2 stb postbyte
|
|
2783 FA74: 7C02C3 inc amode ;Set addr mode to PCR
|
|
2784 FA77: 16FEF5 lbra scanend
|
|
2785 FA7A:
|
|
2786 FA7A: * Scan for one of the 4 index registers and adjust postbyte.
|
|
2787 FA7A: E680 scanixreg ldb ,x+
|
|
2788 FA7C: C4DF andb #CASEMASK ;Convert to uppercase.
|
|
2789 FA7E: 3410 pshs x
|
|
2790 FA80: 8EF33A ldx #ixregs
|
|
2791 FA83: 4F clra
|
|
2792 FA84: E180 scidxloop cmpb ,x+
|
|
2793 FA86: 2707 beq ixfound
|
|
2794 FA88: 8B20 adda #$20
|
|
2795 FA8A: 2AF8 bpl scidxloop
|
|
2796 FA8C: 7EFB56 jmp moderr ;Index register not found where expected.
|
|
2797 FA8F: BA02C2 ixfound ora postbyte
|
|
2798 FA92: B702C2 sta postbyte ;Set index reg bits in postbyte.
|
|
2799 FA95: 3510 puls x
|
|
2800 FA97: 39 rts
|
|
2801 FA98:
|
|
2802 FA98: * This routine sets amode to 3, if it was less.
|
|
2803 FA98: B602C3 set3 lda amode
|
|
2804 FA9B: 8103 cmpa #3
|
|
2805 FA9D: 2405 bhs set3a
|
|
2806 FA9F: 8603 lda #3
|
|
2807 FAA1: B702C3 sta amode
|
|
2808 FAA4: 39 set3a rts
|
|
2809 FAA5:
|
|
2810 FAA5: * This subroutine lays down the address.
|
|
2811 FAA5: B602C3 doaddr lda amode
|
|
2812 FAA8: 8103 cmpa #3
|
|
2813 FAAA: 250D blo doa1
|
|
2814 FAAC: F602C2 ldb postbyte
|
|
2815 FAAF: BDF7AE jsr putbyte
|
|
2816 FAB2: B602C3 lda amode
|
|
2817 FAB5: 8401 anda #1
|
|
2818 FAB7: 2715 beq doapcrel ;pc rel modes.
|
|
2819 FAB9: B602CB doa1 lda opsize
|
|
2820 FABC: 4D tsta
|
|
2821 FABD: 27E5 beq set3a
|
|
2822 FABF: 4A deca
|
|
2823 FAC0: 2706 beq doa2
|
|
2824 FAC2: FC02C4 ldd operand
|
|
2825 FAC5: 7EF7B1 jmp putword
|
|
2826 FAC8: F602C5 doa2 ldb operand+1
|
|
2827 FACB: 7EF7AE jmp putbyte
|
|
2828 FACE: 10BF029D doapcrel sty addr
|
|
2829 FAD2: FC02C4 ldd operand
|
|
2830 FAD5: B3029D subd addr
|
|
2831 FAD8: 830001 subd #1
|
|
2832 FADB: 7D02CC tst uncert
|
|
2833 FADE: 2614 bne pcrlong
|
|
2834 FAE0: 1083FF80 cmpd #-128
|
|
2835 FAE4: 2D0E blt pcrlong
|
|
2836 FAE6: 1083FF81 cmpd #-127
|
|
2837 FAEA: 2E08 bgt pcrlong
|
|
2838 FAEC: 8601 lda #1
|
|
2839 FAEE: B702CB sta opsize
|
|
2840 FAF1: 7EF7AE jmp putbyte
|
|
2841 FAF4: 830001 pcrlong subd #1
|
|
2842 FAF7: 313F leay -1,y
|
|
2843 FAF9: 7C02C2 inc postbyte
|
|
2844 FAFC: 3406 pshs d
|
|
2845 FAFE: F602C2 ldb postbyte
|
|
2846 FB01: BDF7AE jsr putbyte
|
|
2847 FB04: 8602 lda #2
|
|
2848 FB06: B702CB sta opsize
|
|
2849 FB09: 3506 puls d
|
|
2850 FB0B: 7EF7B1 jmp putword
|
|
2851 FB0E:
|
|
2852 FB0E: * This routine checks and lays down short relative address.
|
|
2853 FB0E: 10BF029D shortrel sty addr
|
|
2854 FB12: B3029D subd addr
|
|
2855 FB15: 830001 subd #1
|
|
2856 FB18: 1083FF80 cmpd #-128
|
|
2857 FB1C: 2D2C blt brerr
|
|
2858 FB1E: 1083007F cmpd #127
|
|
2859 FB22: 2E26 bgt brerr
|
|
2860 FB24: BDF7AE jsr putbyte
|
|
2861 FB27: 8604 lda #4
|
|
2862 FB29: B702C3 sta amode
|
|
2863 FB2C: 8601 lda #1
|
|
2864 FB2E: B702CB sta opsize
|
|
2865 FB31: 39 rts
|
|
2866 FB32: * This routine lays down long relative address.
|
|
2867 FB32: 10BF029D longrel sty addr
|
|
2868 FB36: B3029D subd addr
|
|
2869 FB39: 830002 subd #2
|
|
2870 FB3C: BDF7B1 jsr putword
|
|
2871 FB3F: 8604 lda #4
|
|
2872 FB41: B702C3 sta amode
|
|
2873 FB44: 8602 lda #2
|
|
2874 FB46: B702CB sta opsize
|
|
2875 FB49: 39 rts
|
|
2876 FB4A:
|
|
2877 FB4A: 8EE6B5 brerr ldx #brmsg
|
|
2878 FB4D: 7E0298 jmp asmerrvec
|
|
2879 FB50: 8EE68E exprerr ldx #exprmsg
|
|
2880 FB53: 7E0298 jmp asmerrvec
|
|
2881 FB56: 8EE69F moderr ldx #modemsg
|
|
2882 FB59: 7E0298 jmp asmerrvec
|
|
2883 FB5C: 3410 asmerr pshs x
|
|
2884 FB5E: 9D18 jsr xabortin
|
|
2885 FB60: 3510 puls x
|
|
2886 FB62: BDE4E1 jsr outcount
|
|
2887 FB65: 9D0C jsr putcr
|
|
2888 FB67: 10FE02BD lds savesp
|
|
2889 FB6B: 7EE558 jmp cmdline
|
|
2890 FB6E:
|
|
2891 FB6E: * Find register for TFR and PSH instruction
|
|
2892 FB6E: C60C findreg ldb #12
|
|
2893 FB70: 3424 pshs y,b
|
|
2894 FB72: CEF2FB ldu #asmregtab
|
|
2895 FB75: 1F12 findregloop tfr x,y
|
|
2896 FB77: 8603 lda #3
|
|
2897 FB79: E6C4 frcmps ldb ,u
|
|
2898 FB7B: C120 cmpb #' '
|
|
2899 FB7D: 2606 bne frcmps1
|
|
2900 FB7F: E6A4 ldb ,y
|
|
2901 FB81: C141 cmpb #'A'
|
|
2902 FB83: 2D18 blt frfound
|
|
2903 FB85: E6A0 frcmps1 ldb ,y+
|
|
2904 FB87: C4DF andb #CASEMASK
|
|
2905 FB89: E1C0 cmpb ,u+
|
|
2906 FB8B: 2606 bne frnextreg
|
|
2907 FB8D: 4A deca
|
|
2908 FB8E: 26E9 bne frcmps
|
|
2909 FB90: 4C inca
|
|
2910 FB91: 200A bra frfound
|
|
2911 FB93: 4C frnextreg inca
|
|
2912 FB94: 33C6 leau a,u
|
|
2913 FB96: 6AE4 dec ,s
|
|
2914 FB98: 26DB bne findregloop
|
|
2915 FB9A: 16FFB9 lbra moderr
|
|
2916 FB9D: 33C6 frfound leau a,u
|
|
2917 FB9F: 1F21 tfr y,x
|
|
2918 FBA1: 3524 puls y,b
|
|
2919 FBA3: 39 rts
|
|
2920 FBA4:
|
|
2921 FBA4: * This is the code for the A command, assemble instructions.
|
|
2922 FBA4: * Syntax: Aaddr
|
|
2923 FBA4: 8E0201 asm ldx #linebuf+1
|
|
2924 FBA7: BDE70F jsr scanhex
|
|
2925 FBAA: FD029D std addr
|
|
2926 FBAD: FC029D asmloop ldd addr
|
|
2927 FBB0: BDE6DE jsr outd
|
|
2928 FBB3: C620 ldb #' '
|
|
2929 FBB5: 9D03 jsr putchar ;Print address and space.
|
|
2930 FBB7: 8E0200 ldx #linebuf
|
|
2931 FBBA: C680 ldb #128
|
|
2932 FBBC: 9D06 jsr getline ;Get new line
|
|
2933 FBBE: 5D tstb
|
|
2934 FBBF: 1027E995 lbeq cmdline ;Exit on empty line.
|
|
2935 FBC3: 3A abx
|
|
2936 FBC4: 6F84 clr ,x ;Make line zero terminated.
|
|
2937 FBC6: 8E0200 ldx #linebuf
|
|
2938 FBC9: BDF709 jsr asminstr
|
|
2939 FBCC: 20DF bra asmloop
|
|
2940 FBCE:
|
|
2941 FBCE: * Jump table for monitor routines that are usable by other programs.
|
|
2942 FBCE: org $ffc0
|
|
2943 FFC0: 7EE6D0 jmp outbyte
|
|
2944 FFC3: 7EE6DE jmp outd
|
|
2945 FFC6: 7EE74A jmp scanbyte
|
|
2946 FFC9: 7EE70F jmp scanhex
|
|
2947 FFCC: 7EF6B9 jmp scanfact
|
|
2948 FFCF: 7EF709 jmp asminstr
|
|
2949 FFD2:
|
|
2950 FFD2:
|
|
2951 FFD2: * Interrupt vector addresses at top of ROM. Most are vectored through jumps
|
|
2952 FFD2: * in RAM.
|
|
2953 FFD2: org $fff2
|
|
2954 FFF2: 0280 fdb swi3vec
|
|
2955 FFF4: 0283 fdb swi2vec
|
|
2956 FFF6: 0286 fdb firqvec
|
|
2957 FFF8: 0289 fdb irqvec
|
|
2958 FFFA: 028C fdb swivec
|
|
2959 FFFC: 028F fdb nmivec
|
|
2960 FFFE: E400 fdb reset
|
|
2961 0000:
|
|
2962 0000: end
|
|
2963 0 Pass 2 errors.
|
|
2964
|
|
2965 SYMBOL TABLE
|
|
2966 ACC8 02 f824 ACIACTL 00 e000 ACIADAT 00 e001 ACIAIRQ 02 e4f5
|
|
2967 ACIASTA 00 e000 ACK 00 0006 ACKLOOP 02 ecbf ADDCHK 02 ea06
|
|
2968 ADDR 02 029d ADECEND 02 f9b0 ADECLOOP 02 f9a7 ADJDIR 02 f8dc
|
|
2969 ADJIND 02 f8d9 ADJOPC 02 f8cb AINCEND 02 f9cb AINCLOOP 02 f9c2
|
|
2970 AMODE 02 02c3 AREGS 02 f30a AREGU 02 f305 ARM 02 e98a
|
|
2971 ARM1 02 e98f ARM2 02 e9a0 ASM 02 fba4 ASMERR 02 fb5c
|
|
2972 ASMERRVEC 02 0298 ASMINSTR 02 f709 ASMLOOP 02 fbad ASMREGTAB 02 f2fb
|
|
2973 ASMTAB 02 f792 AUTODEC 02 f9ea AUTOINC 02 f9e0 BACKSP 02 e491
|
|
2974 BLOCKMOVE 02 e44a BP1 02 e9ba BP2 02 e9c6 BPADDR 02 02a1
|
|
2975 BPEXIT 02 e9d7 BPFULL 02 e9e8 BREAK 02 e9a6 BRERR 02 fb4a
|
|
2976 BRKMSG 02 e5ee BRKPOINTS 00 0004 BRMSG 02 e6b5 BS 00 0008
|
|
2977 BSCMPEXIT 02 f76a BSCMPLOOP 02 f75eBSCMPLOWER 02 f773 BSRCHLOOP 02 f739
|
|
2978 BUF0 02 0100 BUF1 02 0180 BUFLEN 00 0080 CAN 00 0018
|
|
2979 CASEMASK 00 00df CB2 02 e702 CHECKOUT 02 eb0b CLEARIT 02 e9df
|
|
2980 CLRMSG 02 e5fd CLVAR 02 e434 CMDLINE 02 e558 CMDTAB 02 e580
|
|
2981 COMMAPC 02 f610 CONVB 02 e6ee CONVEXIT 02 e705 CR 00 000d
|
|
2982 DBP1 02 e9f0 DBP2 02 e9fb DDEC1 02 f37b DDEC2 02 f380
|
|
2983 DDEC3 02 f3ae DDEC4 02 f397 DDEC5 02 f3cc DDEC6 02 f3e0
|
|
2984 DDEC7 02 f3f1 DDECFOUND 02 f3d0 DDECLOOP 02 f3a0 DEL 00 007f
|
|
2985 DELAY 02 0021 DH1 02 e770 DH2 02 e77d DH3 02 e796
|
|
2986 DH4 02 e79e DH5 02 e7a4 DH6 02 e78c DISADEC1 02 f57e
|
|
2987 DISADEC2 02 f57a DISADECA 02 f580 DISADLOOP 02 f583 DISADR16 02 f47b
|
|
2988 DISADR8 02 f483 DISAILOOP 02 f59c DISAINC1 02 f590 DISAINC2 02 f58c
|
|
2989 DISAINCA 02 f592 DISARM 02 e970 DISARM1 02 e975 DISARM2 02 e981
|
|
2990 DISAX 02 f5a6 DISBX 02 f5ad DISCOMMA 02 f557 DISDECODE 02 f36b
|
|
2991 DISDECTAB 02 f3faDISDECTAB1 02 f40e DISDIRECT 02 f604 DISDISP 02 f44e
|
|
2992 DISDISPTAB 02 f461 DISDX 02 f5b4 DISIDX 02 f53b DISIDX1 02 f565
|
|
2993 DISIDX2 02 f56f DISIDXEND 02 f564 DISIDXREG 02 f52a DISIDXTAB 02 f614
|
|
2994 DISIM16 02 f479 DISIM8 02 f475 DISINDEX 02 f55a DISINDIR 02 f55c
|
|
2995 DISINVAL 02 f5bb DISNNPC 02 f5fc DISNNX 02 f5d7 DISNPC 02 f5e3
|
|
2996 DISNPCA 02 f5ea DISNX 02 f5c2 DISNX1 02 f5c7 DISNXNEG 02 f5d0
|
|
2997 DISP16 02 e8b5 DISP8 02 e8a7 DISPBP 02 e9ed DISPREGS 02 e8c5
|
|
2998 DISPUSH 02 f4b0 DISPUSH1 02 f4f3 DISPUSH2 02 f4ed DISPUSH3 02 f4ce
|
|
2999 DISPUSH4 02 f4deDISREGNAME 02 f51a DISREL16 02 f499 DISREL8 02 f48b
|
|
3000 DISTFR 02 f4f9 DISTFREND 02 f517DISTFRLOOP 02 f50e DISTFRSUB 02 f509
|
|
3001 DLYLOOP 02 e4f9 DOA1 02 fab9 DOA2 02 fac8 DOADDR 02 faa5
|
|
3002 DOAPCREL 02 face DOIMM 02 f987 DOINDEX 02 f9f5 DOPCREL 02 fa5c
|
|
3003 DOSPECIAL 02 f9a0 DPSETTING 02 02cd DR8A 02 f491 DREG1 02 f835
|
|
3004 DREG2 02 f846 DRNEND 02 f529 DRNLOOP 02 f51e DUMP 02 e763
|
|
3005 ENDIRQ 02 e4f6 ENDMSG 02 e6c5 ENDREC 02 ea66 ENDREC1 02 ea79
|
|
3006 ENDSS 02 eb00 ENDVARS 02 02cf ENDVECS 02 e53e ENT1 02 e7c8
|
|
3007 ENT2 02 e7ce ENTASC 02 e809 ENTDONE 02 e81a ENTER 02 e7bd
|
|
3008 ENTEXIT 02 e821 ENTL2 02 e800 ENTL3 02 e80d ENTLINE 02 e7f0
|
|
3009 EOT 00 0004 EXPR 02 f69b EXPREND 02 f6b5 EXPREND1 02 f6b6
|
|
3010 EXPRERR 02 fb50 EXPRMSG 02 e68e EXPRVEC 02 0295 FHEXLOOP 02 eb7c
|
|
3011 FILLER 02 02bb FIND 02 eb56 FINDHEX 02 eb76 FINDREG 02 fb6e
|
|
3012 FINDREGLOOP 02 fb75 FIRQVEC 02 0286 FRCMPS 02 fb79 FRCMPS1 02 fb85
|
|
3013 FRFOUND 02 fb9d FRNEXTREG 02 fb93 FSTRLOOP 02 eb69 FULLMSG 02 e610
|
|
3014 GETCHAR 02 0000 GETLINE 02 0006 GETPOLL 02 000fGETTIMEOUT 02 ec2d
|
|
3015 GO 02 e86a GT1 02 ec2f GTEXIT 02 ec3b HEX 02 e836
|
|
3016 HEX1 02 e84e HEXDIGIT 02 e6c5 HEXEND 02 e860 HEXLOOP 02 e83e
|
|
3017 IMMBYTE 02 f7bc INITACIA 02 e452 INP 02 e824 INTVECTBL 02 e4ff
|
|
3018 INVMMSG 02 e67d INVMNEM 02 f778 IRQVEC 02 0289 IXFOUND 02 fa8f
|
|
3019 IXREGS 02 f33a JUMP 02 e879 LASTOK 02 002f LASTREC 02 e633
|
|
3020 LASTTERM 02 02ba LAUNCH 02 e874 LBRA 02 f81d LBRA1 02 f80e
|
|
3021 LBRANCH 02 f80a LEA 02 f7d1 LENGTH 02 029f LF 00 000a
|
|
3022 LINEBUF 02 0200 LONGINDEX 02 fa4c LONGREL 02 fb32 MNCPDONE 02 f731
|
|
3023 MNCPEXIT 02 f727 MNCPLOOP 02 f70e MNEMBSR 02 ef6b MNEMBUF 02 02c6
|
|
3024 MNEMCP1 02 f722 MNEMFCB 02 f033 MNEMFOUND 02 f77e MNEMJSR 02 f06b
|
|
3025 MNEMSIZE 00 0093 MNEMTAB 02 ee63 MNFILLOOP 02 f72c MODEMSG 02 e69f
|
|
3026 MODERR 02 fb56 MODETAB 02 f34e MODETAB2 02 f35e MOVE 02 eb19
|
|
3027 MVLOOP 02 eb4b NAK 00 0015 NEGOFFS 02 f54d NEWLINE 02 e4ad
|
|
3028 NMIVEC 02 028f NOCOMMA 02 f92e NOEXPR 02 f706 NOINDIR 02 f8fa
|
|
3029 NOLET 02 f720 NOOP 02 f434 OADIR 02 f875 OAIND 02 f873
|
|
3030 OD1A 02 f431 ODB1 02 f63e ODPA 02 f43b OLDGETC 02 02b4
|
|
3031 OLDPC 02 029b OLDPUTC 02 02b6 OLDPUTCR 02 02b8 ONEADDR 02 f859
|
|
3032 ONEBYTE 02 f7b4 OPC1 02 02c0 OPCODE 02 02c1 OPCOFFS 02 f33e
|
|
3033 OPDEC1 02 f42e OPDEC2 02 f435 OPDECIDX 02 f43f OPDECPB 02 f439
|
|
3034 OPERAND 02 02c4 OPSIZE 02 02cb OPSZ1 02 f94c OPSZ2 02 f94a
|
|
3035 OPSZ3 02 f962 OPSZ4 02 f967 OSCR 02 e4d4 OSDLY 02 e4f7
|
|
3036 OSGETC 02 e45a OSGETL 02 e480 OSGETL1 02 e485 OSGETL2 02 e4a5
|
|
3037 OSGETL3 02 e4b4 OSGETPOLL 02 e465 OSPUTC 02 e471 OSPUTL 02 e4c3
|
|
3038 OSPUTL1 02 e4d1 OSPUTL2 02 e4ca OSVECTBL 02 e51a OUTBYTE 02 e6d0
|
|
3039 OUTCOUNT 02 e4e1 OUTD 02 e6deOUTDECBYTE 02 f634 PCRELEND 02 fa6a
|
|
3040 PCRLONG 02 faf4 POLTRUE 02 e46e POS 02 f6a4 POSTBYTE 02 02c2
|
|
3041 PPLOOP 02 f8b1 PREBYTE 02 02bf PROG 02 e898 PSEUDO 02 f8ca
|
|
3042 PURGE 02 ec41 PURGEIT 02 ecb6 PUSHPUL 02 f8a4 PUTBYTE 02 f7ae
|
|
3043 PUTCHAR 02 0003 PUTCLOOP 02 e473 PUTCOMMA 02 f4a8 PUTCR 02 000c
|
|
3044 PUTDOL 02 f4a4 PUTHASH 02 f4a0 PUTLINE 02 0009 PUTSPACE 02 f4ac
|
|
3045 PUTWORD 02 f7b1 RAMSTART 00 0400 RAMTOP 00 8000 READREC 02 ea31
|
|
3046 REGINVAL 02 f337 REGLOOP 02 f4b7 REGS 02 e90c REGTAB 02 e966
|
|
3047 RESET 02 e400 RR1 02 ea57 RR2 02 ea5c RSTVECS 02 ecd6
|
|
3048 SAVESP 02 02bd SAVEVECS 02 ecc6 SB1 02 e762 SBRANCH 02 f7f7
|
|
3049 SCAN2PARMS 02 e732 SCANACIDX 02 f91a SCANBYTE 02 e74a SCANCHAR2 02 f6cf
|
|
3050 SCANDEC 02 f6d3 SCANDLOOP 02 f6df SCANEND 02 f96f SCANEND2 02 f986
|
|
3051 SCANEXIT 02 e708 SCANFACT 02 f6b9 SCANHEX 02 e70f SCANIXREG 02 fa7a
|
|
3052 SCANLAB 02 f930 SCANOPS 02 f8ed SCIDXLOOP 02 fa84 SCLOOP 02 e717
|
|
3053 SDEXIT 02 f6ff SENDNAK 02 ec58 SENDREC 02 ea9f SET3 02 fa98
|
|
3054 SET3A 02 faa4 SETREG 02 e91a SETSORG 02 ea91 SHORTIND1 02 fa3e
|
|
3055 SHORTINDEX 02 fa32 SHORTREL 02 fb0e SKIPSPACE 02 e6e7 SMSG 02 e621
|
|
3056 SOFFS 02 02b2 SOH 00 0001 SORG 02 02b0 SP2 02 e749
|
|
3057 SR1 02 e921 SR2 02 e92e SR3 02 e944 SR4 02 e954
|
|
3058 SRCH1 02 eba7 SRCH2 02 ebac SRCH3 02 ebc6 SRCHLOOP 02 eb95
|
|
3059 SREC 02 ea14 SRECERR 02 ea84 SS1 02 eab3 SS2 02 eac0
|
|
3060 SS3 02 eaeb STAKREGS 02 e53eSTARTBLOCK 02 ec5d STARTOP 02 f8e5
|
|
3061 STARTSRCH 02 eb8c STEPBP 02 02ad SWI2VEC 02 0283 SWI3VEC 02 0280
|
|
3062 SWIVEC 02 028c TEMP 02 0024 TEMP2 02 0026 TEMP3 02 0028
|
|
3063 TFREXG 02 f87b TIMER 02 002a TIMERIRQ 02 e4ea TRACE 02 e8a4
|
|
3064 TWOBYTE 02 f7b8 UNADISHEX 02 f66e UNADISSPC 02 f67b UNASM 02 f644
|
|
3065 UNASMLOOP 02 f65a UNCERT 02 02cc UNK 02 e5b4 UNKNOWN 02 e5de
|
|
3066 UNLAUNCH 02 e549 UNLAUNCH1 02 e550 WAITACK 02 ebf2 WAITACK2 02 ec1c
|
|
3067 WAITNAK 02 ec0a WELCOME 02 e5c1 XABORTIN 02 0018 XABTIN 02 ed2e
|
|
3068 XABTLOOP 02 ed3b XAMSG 02 e665 XCLOSEIN 02 001b XCLOSEOUT 02 001e
|
|
3069 XCLSDONE 02 ed64 XCLSEND 02 ed70 XCLSIN 02 ed71 XCLSLOOP 02 ed5c
|
|
3070 XCLSOUT 02 ed4e XCOUNT 02 0030 XEQ 02 ee49 XERRHAND 02 eded
|
|
3071 XERROR 02 eddd XERRVEC 02 0292 XGETC 02 edb4 XGETC1 02 edc7
|
|
3072 XGETCTERM 02 edd3 XLOAD 02 ee36 XLODLOOP 02 ee3d XMCR 02 02bc
|
|
3073 XMODE 02 0031 XMODEM 02 edf4 XOPENIN 02 0012 XOPENOUT 02 0015
|
|
3074 XOPIN 02 ece6 XOPOUT 02 ed09 XOPTS 02 ee4e XPACKNUM 02 002d
|
|
3075 XPUTC 02 ed7b XPUTC1 02 ed97 XPUTCR 02 ed99 XPUTCR1 02 eda6
|
|
3076 XPUTCR2 02 edb1 XR1 02 ec7e XRCVBUF 02 ec49 XRCVEOT 02 ecbb
|
|
3077 XRLOOP 02 ec90 XRMSG 02 e650 XSABT 02 ec05 XSBINLOOP 02 ee24
|
|
3078 XSENDBUF 02 ebca XSENDEOT 02 ec17 XSENDINIT 02 ec06 XSLOOP 02 ebdf
|
|
3079 XSMSG 02 e63e XSOK 02 ec03 XSS 02 ee2f XSUM 02 002e
|
|
3080
|
|
3081
|
|
3082 \end{verbatim}
|
|
3083 }
|
|
3084
|
|
3085 \end{document} |