]>
Commit | Line | Data |
---|---|---|
0c4244e5 | 1 | ; Disassembled ddtz.com, version "DDT/Z [8101]"\r |
ed6c425a | 2 | ; with modified relocater.\r |
0c4244e5 | 3 | ;\r |
ed6c425a L |
4 | ; Build steps:\r |
5 | ; - Assemble to a .REL file with M80 or a compatible assembler.\r | |
6 | ; - Use Digital Research Link-80 to generate a .PRL file (op switch).\r | |
7 | ; - Cut the .PRL header (first 256 byte) end rename the result to DDTZ.COM.\r | |
0c4244e5 | 8 | \r |
0f361185 | 9 | \r |
dfd599a0 L |
10 | maclib config.inc\r |
11 | \r | |
0f361185 L |
12 | ; Some greneral definitions\r |
13 | \r | |
14 | BS equ 08h\r | |
15 | TAB equ 09h\r | |
16 | CR equ 0dh\r | |
17 | LF equ 0ah\r | |
18 | DEL equ 7fh\r | |
19 | CNTRX equ 'X'-'@'\r | |
20 | \r | |
21 | ; CP/M memory layout\r | |
22 | \r | |
23 | BDOS equ 5\r | |
24 | TPA equ 0100h\r | |
25 | \r | |
26 | ; ddtz specific definitions\r | |
27 | \r | |
28 | STACK_SIZE equ 80 ;ddtz internal stack\r | |
29 | CONBUF_SIZE equ 80 ;Size of console input buffer\r | |
30 | BP_CNT equ 12 ;Number of breakpoints\r | |
31 | BP_SIZE equ 4 ;Size of a breakpoint record\r | |
32 | \r | |
33 | bitmap_size equ (prog_size+7)/8\r | |
34 | \r | |
35 | ;-------------------------------------------------------------------------------\r | |
efc2486e | 36 | \r |
ed6c425a | 37 | cseg\r |
92315951 L |
38 | start:\r |
39 | ddtz_base:\r | |
0f361185 L |
40 | jr reloc\r |
41 | nop\r | |
42 | l0003h:\r | |
43 | rst 30h ;rst used by ddtz\r | |
44 | di_or_ei: ;ints enabled/disabled while ddtz is running\r | |
45 | nop\r | |
46 | ret\r | |
efc2486e | 47 | \r |
0f361185 | 48 | ;-------------------------------------------------------------------------------\r |
efc2486e L |
49 | \r |
50 | signon:\r | |
efc2486e L |
51 | db 'DDTZ/180'\r |
52 | db ' - Version '\r | |
53 | maclib version.inc\r | |
54 | defvers\r | |
0f361185 | 55 | dc ' ('\r |
51e6b03c | 56 | \r |
fb224211 L |
57 | ;-------------------------------------------------------------------------------\r |
58 | \r | |
59 | reloc_getbit macro\r | |
60 | local nextbit\r | |
61 | exx\r | |
62 | djnz nextbit\r | |
63 | ld b,8 ;reload bit counter\r | |
64 | ld e,(hl) ;get next 8 relocation bits\r | |
65 | inc hl\r | |
66 | nextbit:\r | |
67 | sla e\r | |
68 | exx\r | |
69 | endm\r | |
70 | \r | |
efc2486e | 71 | ;-------------------------------------------------------------------------------\r |
a3bccdeb L |
72 | ; Clear old position\r |
73 | \r | |
74 | cmde_clr:\r | |
75 | ld (hl),0\r | |
76 | inc hl\r | |
77 | dec bc\r | |
78 | ld a,b\r | |
79 | or c\r | |
80 | jr nz,cmde_clr\r | |
81 | \r | |
82 | ; Determine current position\r | |
0c4244e5 | 83 | \r |
0f361185 | 84 | reloc:\r |
a3bccdeb L |
85 | ld bc,(028h-2)\r |
86 | ld de,(028h)\r | |
87 | ld a,i ;get iff2\r | |
88 | ex af,af'\r | |
89 | di\r | |
90 | ld sp,028h ;rst instr needs a minimal stack\r | |
0f361185 | 91 | ld hl,0e9e1h ;opcpdes pop hl/jp (hl)\r |
a3bccdeb L |
92 | ld (028h),hl\r |
93 | rst 028h\r | |
0f361185 | 94 | wearehere:\r |
a3bccdeb L |
95 | ld (028h-2),bc\r |
96 | ld (028h),de\r | |
0f361185 L |
97 | ld de,-(wearehere-ddtz_base)\r |
98 | add hl,de ; hl:\r | |
51e6b03c | 99 | \r |
0f361185 L |
100 | ld de,ddtz_base ; de:\r |
101 | or a\r | |
51e6b03c | 102 | sbc hl,de\r |
0f361185 | 103 | ex de,hl ; de: reloc offset\r |
a3bccdeb L |
104 | ld hl,stack\r |
105 | add hl,de\r | |
106 | ld sp,hl\r | |
107 | ex af,af'\r | |
108 | push af\r | |
109 | pop bc\r | |
110 | bit 2,c\r | |
111 | jr z,$+3\r | |
112 | ei\r | |
0f361185 L |
113 | ld hl,ddtz_end ;start of reloc bitmap\r |
114 | add hl,de\r | |
a3bccdeb | 115 | push hl\r |
0f361185 | 116 | exx\r |
a3bccdeb | 117 | pop hl\r |
fb224211 | 118 | ld b,1 ;init bit counter b\r |
0f361185 | 119 | exx\r |
a3bccdeb | 120 | \r |
0f361185 L |
121 | LD HL,ddtz_base\r |
122 | add hl,de ;--> ddtz_base\r | |
fb224211 | 123 | \r |
51e6b03c | 124 | reloc_lp:\r |
fb224211 L |
125 | push de\r |
126 | push hl\r | |
127 | \r | |
128 | ld de,4\r | |
129 | ld a,2\r | |
130 | ld hl,0\r | |
131 | reloc_l:\r | |
132 | reloc_getbit\r | |
133 | jr nc,reloc_got\r | |
134 | cp 16\r | |
135 | jr z,reloc_done\r | |
136 | add hl,de\r | |
137 | ld b,a\r | |
138 | ex de,hl\r | |
139 | reloc_l1:\r | |
140 | add hl,hl\r | |
141 | djnz reloc_l1\r | |
142 | ex de,hl\r | |
143 | add a,a\r | |
144 | jr reloc_l\r | |
145 | reloc_got:\r | |
146 | ex de,hl\r | |
147 | ld hl,0\r | |
148 | ld b,a\r | |
149 | reloc_bitloop:\r | |
150 | reloc_getbit\r | |
151 | adc hl,hl\r | |
152 | djnz reloc_bitloop\r | |
153 | add hl,de\r | |
154 | pop de\r | |
155 | add hl,de\r | |
156 | pop de\r | |
157 | \r | |
51e6b03c L |
158 | LD A,(HL)\r |
159 | ADD A,E\r | |
160 | LD (HL),A\r | |
161 | INC HL\r | |
162 | LD A,(HL)\r | |
163 | ADC A,D\r | |
164 | LD (HL),A\r | |
efc2486e | 165 | inc hl\r |
fb224211 L |
166 | jr reloc_lp\r |
167 | reloc_done:\r | |
168 | exx\r | |
169 | ld (bitmap_end),hl\r | |
0c4244e5 | 170 | ;-------------------------------------------------------------------------------\r |
0c4244e5 | 171 | \r |
0c4244e5 | 172 | \r |
92315951 | 173 | init:\r |
0f361185 | 174 | LD SP,stack\r |
0c4244e5 | 175 | \r |
dfd599a0 L |
176 | if CPM\r |
177 | \r | |
0f361185 | 178 | ld hl,(1) ;wboot addr\r |
58a0ff85 | 179 | ld de,convec\r |
0f361185 L |
180 | ex de,hl\r |
181 | ld b,3\r | |
182 | vini_l:\r | |
183 | inc de\r | |
184 | inc de\r | |
185 | inc de\r | |
186 | inc hl\r | |
187 | ld (hl),e\r | |
188 | inc hl\r | |
189 | ld (hl),d\r | |
190 | inc hl\r | |
191 | djnz vini_l\r | |
dfd599a0 L |
192 | else\r |
193 | xor a\r | |
194 | dec a\r | |
195 | daa ; Z80: 099H, x180+: 0F9H\r | |
196 | cp 99h ; Result on 180 type cpus is F9 here. Thanks Hitachi\r | |
197 | jr z,ini_z80\r | |
198 | \r | |
199 | xor a\r | |
200 | call cinit\r | |
201 | ld a,1\r | |
202 | call cinit\r | |
203 | jr ini_sign\r | |
204 | ini_z80:\r | |
205 | ; if ...\r | |
206 | ; .printx Error: Not yet implemented!\r | |
207 | ; db "Stop\r | |
208 | ; endif\r | |
209 | endif ; CPM\r | |
210 | \r | |
211 | ini_sign:\r | |
0f361185 L |
212 | ld hl,signon\r |
213 | call pstr\r | |
214 | ld hl,ddtz_base\r | |
215 | call out_hl\r | |
216 | call pstr_inl\r | |
217 | dc ' - '\r | |
fb224211 L |
218 | ld hl,(bitmap_end)\r |
219 | dec hl\r | |
0f361185 L |
220 | call out_hl\r |
221 | call pstr_inl\r | |
222 | dc ')',CR,LF\r | |
9711a430 | 223 | \r |
0f361185 L |
224 | ld a,i\r |
225 | ld (reg.i),a\r | |
226 | ld a,0f3h\r | |
227 | jp po,l0093h\r | |
228 | ld a,0fbh\r | |
229 | l0093h:\r | |
230 | ld (reg.iff),a\r | |
231 | call di_or_ei\r | |
232 | ld hl,ddtz_base\r | |
233 | ld l,000h\r | |
234 | ld (reg_sp),hl\r | |
0c4244e5 | 235 | \r |
0f361185 | 236 | jp mainloop\r |
0c4244e5 | 237 | \r |
9711a430 L |
238 | ;-------------------------------------------------------------------------------\r |
239 | \r | |
dfd599a0 L |
240 | if CPM\r |
241 | \r | |
242 | convec:\r | |
243 | const: jp 0 ; return console input status\r | |
244 | conin: jp 0 ; return console input character\r | |
245 | conout: jp 0 ; send console output character\r | |
246 | \r | |
247 | else\r | |
248 | \r | |
249 | include z180reg.inc\r | |
250 | \r | |
251 | iobyte equ 3\r | |
252 | \r | |
253 | max_device equ 3\r | |
254 | \r | |
255 | ;-------------------------------------------------------------------------------\r | |
256 | \r | |
257 | ; init device\r | |
258 | cinit: ; a = device\r | |
259 | call vector_io_0\r | |
260 | dw as0init\r | |
261 | dw rret\r | |
262 | dw rret\r | |
263 | dw rret\r | |
264 | \r | |
265 | ; character input status\r | |
266 | const: ; return a != 0 if character waiting\r | |
267 | call vector_io\r | |
268 | dw as0ista\r | |
269 | dw null$status\r | |
270 | dw csio_ista\r | |
271 | dw null$status\r | |
272 | \r | |
273 | ; character input\r | |
274 | conin: ; return a = input char\r | |
275 | call vector_io\r | |
276 | dw as0inp\r | |
277 | dw null$input\r | |
278 | dw csio_inp\r | |
279 | dw null$input\r | |
280 | \r | |
281 | ; character output\r | |
282 | conout: ; c = output char\r | |
283 | call vector_io\r | |
284 | dw as0out\r | |
285 | dw rret\r | |
286 | dw csio_out\r | |
287 | dw rret\r | |
288 | \r | |
289 | ;-------------------------------------------------------------------------------\r | |
290 | \r | |
291 | vector_io:\r | |
292 | ld a,(iobyte)\r | |
293 | vector_io_0:\r | |
294 | pop hl\r | |
295 | cp max_device\r | |
296 | jr c,exist\r | |
297 | ld a,max_device ; use null device if a >= max$device\r | |
298 | exist:\r | |
299 | call add_hl_a2\r | |
300 | ld a,(hl)\r | |
301 | inc hl\r | |
302 | ld h,(hl)\r | |
303 | ld l,a\r | |
304 | jp (hl)\r | |
305 | \r | |
306 | ;-------------------------------------------------------------------------------\r | |
307 | \r | |
308 | null$input:\r | |
309 | ld a,1Ah\r | |
310 | rret:\r | |
311 | ret\r | |
312 | ret$true:\r | |
313 | or 0FFh\r | |
314 | ret\r | |
315 | \r | |
316 | null$status:\r | |
317 | xor a\r | |
318 | ret\r | |
319 | \r | |
320 | ;-------------------------------------------------------------------------------\r | |
321 | ;\r | |
322 | ; TC = (f PHI /(2*baudrate*Clock_mode)) - 2\r | |
323 | ;\r | |
324 | ; TC = (f PHI / (32 * baudrate)) - 2\r | |
325 | ;\r | |
326 | ; Init Serial I/O for console input and output (ASCI1)\r | |
327 | ;\r | |
328 | \r | |
329 | \r | |
330 | \r | |
331 | as0init:\r | |
332 | ld hl,initab0\r | |
333 | jp ioiniml\r | |
334 | \r | |
335 | as1init:\r | |
336 | ld hl,initab1\r | |
337 | jp ioiniml\r | |
338 | \r | |
339 | \r | |
340 | ld a,M_MPBT\r | |
341 | out0 (cntlb1),a\r | |
342 | ld a,M_RE + M_TE + M_MOD2 ;Rx/Tx enable\r | |
343 | out0 (cntla1),a\r | |
344 | ld a,M_RIE\r | |
345 | out0 (stat1),a ;Enable rx interrupts\r | |
346 | \r | |
347 | ret ;\r | |
348 | \r | |
349 | \r | |
350 | initab0:\r | |
351 | db 1,stat0,0 ;Disable rx/tx interrupts\r | |
352 | ;Enable baud rate generator\r | |
353 | db 1,asext0,M_BRGMOD+M_DCD0DIS+M_CTS0DIS\r | |
354 | db 2,astc0l,low 28, high 28\r | |
355 | db 1,cntlb0,M_MPBT ;No MP Mode, X16\r | |
356 | db 1,cntla0,M_RE+M_TE+M_MOD2 ;Rx/Tx enable, 8N1\r | |
357 | db 0\r | |
358 | \r | |
359 | initab1:\r | |
360 | db 1,stat1,0 ;Disable rx/tx ints, disable CTS1\r | |
361 | db 1,asext1,M_BRGMOD ;Enable baud rate generator\r | |
362 | db 2,astc1l,low 3, high 3\r | |
363 | db 1,cntlb1,M_MPBT ;No MP Mode, X16\r | |
364 | db 1,cntla1,M_RE+M_TE+M_MOD2 ;Rx/Tx enable, 8N1\r | |
365 | db 0\r | |
366 | \r | |
367 | ;-------------------------------------------------------------------------------\r | |
368 | \r | |
369 | ioiniml:\r | |
370 | push bc\r | |
371 | xor a\r | |
372 | ioml_lp:\r | |
373 | ld b,(hl)\r | |
374 | inc hl\r | |
375 | cp b\r | |
376 | jr z,ioml_e\r | |
377 | \r | |
378 | ld c,(hl)\r | |
379 | inc hl\r | |
380 | otimr\r | |
381 | jr ioml_lp\r | |
382 | ioml_e:\r | |
383 | pop bc\r | |
384 | ret\r | |
385 | \r | |
386 | ;-------------------------------------------------------------------------------\r | |
387 | \r | |
388 | as0ista:\r | |
389 | in0 a,(stat0)\r | |
390 | rlca\r | |
391 | sbc a,a\r | |
392 | ret\r | |
393 | \r | |
394 | as1ista:\r | |
395 | in0 a,(stat1)\r | |
396 | rlca\r | |
397 | sbc a,a\r | |
398 | ret\r | |
399 | \r | |
400 | as0inp:\r | |
401 | in0 a,(stat0)\r | |
402 | rlca\r | |
403 | jr nc,as0inp\r | |
404 | in0 a,rdr0\r | |
405 | ret\r | |
406 | \r | |
407 | as1inp:\r | |
408 | in0 a,(stat1)\r | |
409 | rlca\r | |
410 | jr nc,as1inp\r | |
411 | in0 a,rdr1\r | |
412 | ret\r | |
413 | \r | |
414 | as0out:\r | |
415 | in0 a,(stat0)\r | |
416 | and M_TDRE\r | |
417 | jr z,as0out\r | |
418 | out0 (tdr0),c\r | |
419 | ld a,c\r | |
420 | ret\r | |
421 | \r | |
422 | as1out:\r | |
423 | in0 a,(stat1)\r | |
424 | and M_TDRE\r | |
425 | jr z,as1out\r | |
426 | out0 (tdr1),c\r | |
427 | ld a,c\r | |
428 | ret\r | |
429 | \r | |
430 | ;-------------------------------------------------------------------------------\r | |
431 | \r | |
c0b1aafa L |
432 | \r |
433 | csio_rx_tmp: db 0ffh\r | |
434 | \r | |
dfd599a0 | 435 | csio_ista:\r |
c0b1aafa L |
436 | ld hl,csio_rx_tmp\r |
437 | ld a,(hl)\r | |
438 | cp 0ffh\r | |
439 | jr nz,csist_1\r | |
440 | ld a,01\r | |
441 | call csio_wr\r | |
442 | call csio_rd\r | |
443 | call csio_rd\r | |
444 | ld (hl),a\r | |
445 | sub a,0ffh\r | |
446 | ret z\r | |
447 | csist_1:\r | |
448 | or 0ffh\r | |
449 | ret\r | |
450 | \r | |
dfd599a0 | 451 | csio_inp:\r |
c0b1aafa L |
452 | ld hl,csio_rx_tmp\r |
453 | ld a,(hl)\r | |
454 | ld (hl),0ffh\r | |
455 | cp 0ffh\r | |
456 | ret nz\r | |
457 | csin_1:\r | |
458 | ld a,01\r | |
459 | call csio_wr\r | |
460 | call csio_rd\r | |
461 | call csio_rd\r | |
462 | cp 0ffh\r | |
463 | jr z,csin_1\r | |
dfd599a0 L |
464 | ret\r |
465 | \r | |
c0b1aafa L |
466 | csio_rd:\r |
467 | ld a,M_CSIO_RE\r | |
468 | call csio_cmd_wait\r | |
469 | in0 a,(trdr)\r | |
470 | ret\r | |
dfd599a0 | 471 | \r |
c0b1aafa L |
472 | csio_out:\r |
473 | ld a,02\r | |
474 | call csio_wr\r | |
475 | call csio_rd\r | |
476 | call csio_rd\r | |
477 | or a\r | |
478 | jr z,csio_out\r | |
479 | \r | |
480 | ld a,c\r | |
481 | inc a ;ff..02 --> 00..03\r | |
482 | cp 04h\r | |
483 | jr nc,csout_1\r | |
484 | ld a,00h\r | |
485 | call csio_wr\r | |
486 | csout_1:\r | |
487 | ld a,c\r | |
488 | csio_wr:\r | |
dfd599a0 L |
489 | out0 (trdr),a\r |
490 | ld a,M_CSIO_TE\r | |
c0b1aafa | 491 | csio_cmd_wait:\r |
dfd599a0 | 492 | out0 (cntr),a\r |
c0b1aafa | 493 | cswr_wait:\r |
dfd599a0 | 494 | in0 a,(cntr)\r |
c0b1aafa L |
495 | and M_CSIO_TE+M_CSIO_RE\r |
496 | jr nz,cswr_wait\r | |
58a0ff85 L |
497 | ret\r |
498 | \r | |
dfd599a0 | 499 | endif ; CPM\r |
58a0ff85 L |
500 | \r |
501 | ;-------------------------------------------------------------------------------\r | |
502 | \r | |
92315951 | 503 | CMDTAB:\r |
a3bccdeb L |
504 | ; dw ERROR ;cmd_@ ;examine/substitute the displacement register @\r |
505 | ; dw ERROR ;cmd_A ;Assemble\r | |
ac35765e | 506 | dw cmd_B ;Breakpoints display/set/clear\r |
3628b074 | 507 | dw ERROR ;cmd_C ;trace over Calls\r |
ac35765e | 508 | dw cmd_D ;Display memory in hex and ascii\r |
a3bccdeb | 509 | dw cmd_E ;rElocate debugger\r |
25e453a7 | 510 | dw ERROR ;cmd_F ;specify Filename and command line\r |
ac35765e L |
511 | dw cmd_G ;Go\r |
512 | dw cmd_H ;compute Hex and other expressions\r | |
513 | dw cmd_I ;Input a byte from port\r | |
514 | dw ERROR ;\r | |
515 | dw ERROR ;\r | |
516 | dw cmd_L ;List disassembled code\r | |
517 | dw cmd_M ;Move memory [and verify]\r | |
518 | dw ERROR ;\r | |
519 | dw cmd_O ;Output a byte to port\r | |
520 | dw ERROR ;\r | |
521 | dw cmd_Q ;Qery memory for byte string\r | |
ca1c9c55 | 522 | dw cmd_R ;Read binary or hex file\r |
ac35765e L |
523 | dw cmd_S ;Substitute memory\r |
524 | dw cmd_T ;Trace\r | |
525 | dw ERROR ;\r | |
526 | dw cmd_V ;Verify (compare) two memory areas\r | |
25e453a7 | 527 | dw ERROR ;cmd_W ;Write a file to disk\r |
ac35765e | 528 | dw cmd_X ;eXamine [and substitute] registers\r |
1190f4f0 | 529 | dw ERROR ;cmd_Y ;examine [and substitute] Y variables\r |
ac35765e L |
530 | dw cmd_Z ;Zap (fill) memory with a byte string\r |
531 | \r | |
474b928c | 532 | ERROR:\r |
474b928c L |
533 | call pstr_inl\r |
534 | dc '?',CR,LF\r | |
535 | ;fall thru\r | |
92315951 | 536 | mainloop:\r |
0716e834 | 537 | ld sp,stack\r |
ac35765e | 538 | ld hl,(reg.pc)\r |
0716e834 L |
539 | call bp_clr_temporary\r |
540 | ld hl,(cmd_rpt)\r | |
541 | ld de,mainloop\r | |
d0ff7c76 | 542 | push de\r |
0716e834 L |
543 | call cp_hl_de\r |
544 | ld a,'>'\r | |
545 | call outchar\r | |
546 | call nz,outchar\r | |
547 | call z,outbl\r | |
548 | call get_line\r | |
549 | call skipbl\r | |
550 | jr z,exe_hl\r | |
d0ff7c76 L |
551 | pop hl\r |
552 | push hl\r | |
0716e834 L |
553 | ld (cmd_rpt),hl\r |
554 | inc de\r | |
a3bccdeb | 555 | sub 'B'\r |
0716e834 L |
556 | jr c,ERROR\r |
557 | cp 'Z'+1-'@'\r | |
558 | jr nc,ERROR\r | |
0716e834 | 559 | ld hl,CMDTAB\r |
6bc52899 | 560 | call add_hl_a2\r |
0716e834 L |
561 | ld a,(hl)\r |
562 | inc hl\r | |
563 | ld h,(hl)\r | |
564 | ld l,a\r | |
0c4244e5 | 565 | exe_hl:\r |
b270cd3a | 566 | CALL_HL:\r |
d0ff7c76 | 567 | jp (hl)\r |
0c4244e5 | 568 | \r |
9711a430 L |
569 | ;-------------------------------------------------------------------------------\r |
570 | \r | |
ac35765e | 571 | crlf:\r |
37ade8ec | 572 | call pstr_inl\r |
474b928c | 573 | dc CR,LF\r |
b5b85b4c | 574 | xor a\r |
ac35765e | 575 | ld (con_col),a\r |
b5b85b4c | 576 | call inchar\r |
ac35765e L |
577 | jr c,mainloop\r |
578 | ret\r | |
579 | \r | |
0c4244e5 | 580 | sub_01d9h:\r |
37ade8ec L |
581 | call pstr_inl\r |
582 | dc '-'\r | |
a3bccdeb | 583 | jp neg.hl\r |
0c4244e5 L |
584 | \r |
585 | out_hl_dec_neg:\r | |
0716e834 L |
586 | push hl\r |
587 | call sub_01d9h\r | |
d1d6fee5 | 588 | defb 03eh ;ld a,.. swallow push hl\r |
0c4244e5 | 589 | out.hl.dec:\r |
0716e834 L |
590 | push hl\r |
591 | ld b,006h\r | |
592 | call sub_01f9h\r | |
593 | pop hl\r | |
37ade8ec L |
594 | call pstr_inl\r |
595 | dc '.'\r | |
0c4244e5 | 596 | l01f3h:\r |
0716e834 L |
597 | call outbl\r |
598 | djnz l01f3h\r | |
599 | ret\r | |
8bc5ea22 | 600 | \r |
0c4244e5 | 601 | sub_01f9h:\r |
0716e834 L |
602 | dec b\r |
603 | push de\r | |
604 | ld de,10\r | |
605 | call div_hl_de\r | |
606 | ld a,h\r | |
607 | or l\r | |
608 | call nz,sub_01f9h\r | |
609 | ld a,e\r | |
610 | pop de\r | |
611 | jr out_dgt\r | |
0c4244e5 L |
612 | \r |
613 | out_hl_neg:\r | |
0716e834 L |
614 | push hl\r |
615 | call sub_01d9h\r | |
616 | call out_hl\r | |
617 | pop hl\r | |
618 | ret\r | |
0c4244e5 L |
619 | \r |
620 | out_hl:\r | |
0716e834 L |
621 | ld a,h\r |
622 | call out_hex\r | |
623 | ld a,l\r | |
0c4244e5 L |
624 | \r |
625 | out_hex:\r | |
0716e834 L |
626 | push af\r |
627 | rra\r | |
628 | rra\r | |
629 | rra\r | |
630 | rra\r | |
631 | call out_dgt\r | |
632 | pop af\r | |
0c4244e5 L |
633 | \r |
634 | out_dgt:\r | |
f81f70a9 L |
635 | or 0f0h\r |
636 | daa\r | |
637 | add a,0a0h\r | |
638 | adc a,040h\r | |
0716e834 | 639 | jr outchar\r |
5023df4f | 640 | \r |
01cb8973 L |
641 | out.bin.w:\r |
642 | ld a,h\r | |
643 | call out.bin.b\r | |
644 | ld a,l\r | |
645 | out.bin.b:\r | |
646 | ld b,8\r | |
647 | l01c9h:\r | |
d1d6fee5 L |
648 | rlca\r |
649 | push af\r | |
a3bccdeb L |
650 | and 1\r |
651 | call out_dgt\r | |
01cb8973 L |
652 | pop af\r |
653 | djnz l01c9h\r | |
654 | ld a,'"'\r | |
655 | jr outchar\r | |
656 | \r | |
0c4244e5 | 657 | out.ascii:\r |
d24eec89 L |
658 | push bc\r |
659 | ld c,a\r | |
0716e834 L |
660 | res 7,a\r |
661 | cp ' '\r | |
5023df4f L |
662 | push af\r |
663 | call nc,outbl\r | |
6bc52899 L |
664 | call pstr_inl\r |
665 | dc ''''\r | |
5023df4f | 666 | pop af\r |
0716e834 L |
667 | jr nc,l0242h\r |
668 | sub 0c0h\r | |
d24eec89 | 669 | ld b,a\r |
37ade8ec L |
670 | call pstr_inl\r |
671 | dc '^'\r | |
d24eec89 | 672 | ld a,b\r |
0c4244e5 | 673 | l0242h:\r |
0716e834 | 674 | call outchar\r |
0716e834 L |
675 | cp ''''\r |
676 | call z,outchar\r | |
6bc52899 L |
677 | call pstr_inl\r |
678 | dc ''''\r | |
d24eec89 L |
679 | sla c\r |
680 | pop bc\r | |
681 | ret nc\r | |
0716e834 | 682 | ld a,'.'\r |
d24eec89 | 683 | jr outchar\r |
646e8b05 | 684 | \r |
01cb8973 L |
685 | outbl6:\r |
686 | call outbl2\r | |
687 | outbl4:\r | |
688 | call outbl2\r | |
689 | outbl2:\r | |
690 | call outbl\r | |
691 | outbl:\r | |
692 | ld a,' '\r | |
0c4244e5 | 693 | outchar:\r |
85b57f2a L |
694 | push ix\r |
695 | push iy\r | |
0716e834 L |
696 | push hl\r |
697 | push de\r | |
698 | push bc\r | |
699 | push af\r | |
700 | and 07fh\r | |
12eea40b | 701 | ld c,a\r |
58a0ff85 | 702 | call conout\r |
0716e834 L |
703 | ld hl,con_col\r |
704 | inc (hl)\r | |
705 | pop af\r | |
706 | pop bc\r | |
707 | pop de\r | |
708 | pop hl\r | |
85b57f2a L |
709 | pop iy\r |
710 | pop ix\r | |
0716e834 | 711 | ret\r |
9bed91b3 | 712 | \r |
08d0db09 | 713 | p_goto_col:\r |
8bc5ea22 L |
714 | ld a,(con_col)\r |
715 | cp c\r | |
08d0db09 L |
716 | ret nc\r |
717 | ret z\r | |
718 | call outbl\r | |
719 | jr p_goto_col\r | |
720 | \r | |
9711a430 | 721 | ;-------------------------------------------------------------------------------\r |
8bc5ea22 | 722 | \r |
b5b85b4c L |
723 | incharw:\r |
724 | call inchar\r | |
725 | jr nc,incharw\r | |
12eea40b L |
726 | ret\r |
727 | \r | |
728 | ;-------------------------------------------------------------------------------\r | |
729 | \r | |
0c4244e5 | 730 | inchar:\r |
1d3941c8 | 731 | push ix\r |
0716e834 L |
732 | push hl\r |
733 | push de\r | |
734 | push bc\r | |
58a0ff85 | 735 | call const\r |
0716e834 | 736 | and a\r |
12eea40b | 737 | jr z,inch1\r |
58a0ff85 | 738 | call conin\r |
0716e834 | 739 | scf\r |
12eea40b | 740 | inch1:\r |
0716e834 L |
741 | pop bc\r |
742 | pop de\r | |
743 | pop hl\r | |
1d3941c8 | 744 | pop ix\r |
0716e834 | 745 | ret\r |
ac35765e | 746 | \r |
12eea40b L |
747 | ;-------------------------------------------------------------------------------\r |
748 | \r | |
749 | DELC:\r | |
750 | ld a,b\r | |
751 | or a\r | |
752 | ret z\r | |
753 | call DELC1\r | |
754 | dec hl\r | |
755 | dec b\r | |
12eea40b L |
756 | ld a,(hl)\r |
757 | cp ' '\r | |
758 | ret nc\r | |
759 | DELC1:\r | |
b5b85b4c L |
760 | call pstr_inl\r |
761 | dc BS,' ',BS\r | |
12eea40b L |
762 | ret\r |
763 | \r | |
764 | DELL:\r | |
765 | ld a,b ;\r | |
766 | or a ;\r | |
767 | ret z ;\r | |
768 | call DELC ;\r | |
769 | jr DELL ;\r | |
770 | \r | |
771 | ;-------------------------------------------------------------------------------\r | |
772 | \r | |
01cb8973 | 773 | get_line:\r |
12eea40b L |
774 | push hl ;\r |
775 | ld hl,conbuf ;\r | |
0f361185 | 776 | ld b,0 ;\r |
12eea40b | 777 | inlnxtch:\r |
0f361185 L |
778 | ld a,b ;\r |
779 | cp CONBUF_SIZE ;\r | |
12eea40b | 780 | jr z,inl_e ;\r |
b5b85b4c | 781 | call incharw ;\r |
12eea40b L |
782 | cp CR ;\r |
783 | jr z,inl_e ;Accept line\r | |
784 | cp LF ;\r | |
785 | jr z,inl_e ;Accept line\r | |
b5b85b4c | 786 | \r |
12eea40b | 787 | cp BS ;\r |
b5b85b4c | 788 | jr z,gl_1 ;\r |
12eea40b L |
789 | cp DEL ;\r |
790 | jr nz,gl_2 ;\r | |
b5b85b4c | 791 | gl_1:\r |
12eea40b L |
792 | call DELC ;Delete Char\r |
793 | jr inlnxtch ;\r | |
794 | gl_2:\r | |
795 | cp CNTRX ;\r | |
796 | jr nz,gl_3 ;\r | |
797 | call DELL ;Delete Line\r | |
798 | jr inlnxtch ;\r | |
799 | gl_3:\r | |
800 | cp TAB ;\r | |
801 | jr nz,gl_4 ;\r | |
802 | ld a,' ' ;\r | |
803 | gl_4:\r | |
804 | ld (hl),a ;\r | |
805 | cp ' ' ;\r | |
806 | jr nc,gl_5 ;\r | |
807 | ld a,'^' ;Controll characters\r | |
b5b85b4c | 808 | call outchar ;\r |
12eea40b L |
809 | ld a,(hl) ;\r |
810 | add a,'@' ;\r | |
811 | gl_5:\r | |
b5b85b4c | 812 | call outchar ;\r |
12eea40b L |
813 | inc hl ;\r |
814 | inc b ;\r | |
12eea40b L |
815 | jr inlnxtch ;\r |
816 | \r | |
817 | inl_e:\r | |
818 | ld (hl),0\r | |
12eea40b | 819 | call CRLF ;\r |
0f361185 | 820 | ld de,conbuf ;\r |
12eea40b L |
821 | pop hl ;\r |
822 | ret ;\r | |
d1f2492e | 823 | \r |
9711a430 L |
824 | ;-------------------------------------------------------------------------------\r |
825 | \r | |
0c461f1d L |
826 | get_char_upper:\r |
827 | ld a,(de)\r | |
01cb8973 L |
828 | toupper:\r |
829 | cp 'a'\r | |
830 | ret c\r | |
831 | cp 'z'+1\r | |
1d3941c8 L |
832 | ccf\r |
833 | ret c\r | |
01cb8973 | 834 | and 05fh\r |
0716e834 | 835 | ret\r |
0c4244e5 | 836 | \r |
9711a430 L |
837 | ;-------------------------------------------------------------------------------\r |
838 | \r | |
0c4244e5 | 839 | skipbl0:\r |
0716e834 | 840 | inc de\r |
0c4244e5 | 841 | skipbl:\r |
0c461f1d | 842 | call get_char_upper\r |
b5b85b4c L |
843 | cp ' '\r |
844 | jr z,skipbl0\r | |
0716e834 L |
845 | or a\r |
846 | ret\r | |
0c4244e5 | 847 | \r |
b5b85b4c L |
848 | ;-------------------------------------------------------------------------------\r |
849 | \r | |
0c4244e5 | 850 | next_arg:\r |
0716e834 L |
851 | call skipbl\r |
852 | cp ','\r | |
853 | ret nz\r | |
b5b85b4c | 854 | call skipbl0\r |
0716e834 L |
855 | cp a\r |
856 | ret\r | |
0c4244e5 L |
857 | \r |
858 | assert_eol:\r | |
0716e834 L |
859 | call skipbl\r |
860 | ret z\r | |
0c4244e5 | 861 | to_error:\r |
0716e834 | 862 | jp ERROR\r |
0c4244e5 | 863 | \r |
9711a430 L |
864 | ;-------------------------------------------------------------------------------\r |
865 | \r | |
85b57f2a | 866 | chk_stack:\r |
0716e834 L |
867 | push hl\r |
868 | push de\r | |
869 | ld hl,0\r | |
870 | add hl,sp\r | |
0dc44d17 | 871 | ld de,stack-(STACK_SIZE-28)\r |
0716e834 L |
872 | call cp_hl_de\r |
873 | pop de\r | |
874 | pop hl\r | |
875 | jr c,to_error\r | |
876 | ret\r | |
0c4244e5 | 877 | \r |
9711a430 L |
878 | ;-------------------------------------------------------------------------------\r |
879 | \r | |
6bc52899 L |
880 | add_hl_a2:\r |
881 | add a,a\r | |
01cb8973 L |
882 | add_hl_a:\r |
883 | add a,l\r | |
884 | ld l,a\r | |
885 | ret nc\r | |
886 | inc h\r | |
887 | ret\r | |
888 | \r | |
0c4244e5 | 889 | cp_hl_de:\r |
0716e834 L |
890 | and a\r |
891 | sbc hl,de\r | |
892 | add hl,de\r | |
893 | ret\r | |
6bc52899 | 894 | \r |
9711a430 L |
895 | ;-------------------------------------------------------------------------------\r |
896 | \r | |
0c4244e5 | 897 | lookupch:\r |
0716e834 | 898 | ld b,0\r |
0c4244e5 | 899 | l02f5h:\r |
0716e834 L |
900 | ld a,(hl)\r |
901 | and a\r | |
902 | ret z\r | |
0c461f1d | 903 | call get_char_upper\r |
0716e834 L |
904 | cp (hl)\r |
905 | jr z,l0300h\r | |
906 | inc hl\r | |
907 | inc b\r | |
908 | jr l02f5h\r | |
0c4244e5 | 909 | l0300h:\r |
0716e834 L |
910 | scf\r |
911 | inc de\r | |
912 | ret\r | |
0c4244e5 L |
913 | \r |
914 | sub_0303h:\r | |
f81f70a9 | 915 | ld hl,t_reg_names\r |
0716e834 | 916 | ld b,07fh\r |
0c4244e5 | 917 | l030ch:\r |
0716e834 L |
918 | inc b\r |
919 | ld a,(hl)\r | |
920 | and a\r | |
921 | ret z\r | |
922 | call sub_031ch\r | |
923 | jr nc,l030ch\r | |
924 | res 7,b\r | |
925 | ret\r | |
0c4244e5 | 926 | \r |
0c4244e5 | 927 | sub_031ch:\r |
0716e834 L |
928 | push bc\r |
929 | push de\r | |
0c4244e5 | 930 | l031eh:\r |
0c461f1d | 931 | call get_char_upper\r |
0716e834 L |
932 | xor (hl)\r |
933 | and 07fh\r | |
934 | jr nz,l0336h\r | |
935 | bit 7,(hl)\r | |
936 | inc hl\r | |
937 | inc de\r | |
938 | jr z,l031eh\r | |
939 | scf\r | |
940 | bit 7,b\r | |
941 | call z,sub_060ch\r | |
942 | jr nc,l0339h\r | |
943 | pop af\r | |
944 | scf\r | |
945 | pop bc\r | |
946 | ret\r | |
0c4244e5 | 947 | l0336h:\r |
8c416d5a | 948 | call str_sel_next\r |
0c4244e5 | 949 | l0339h:\r |
0716e834 L |
950 | pop de\r |
951 | and a\r | |
952 | pop bc\r | |
953 | ret\r | |
646e8b05 | 954 | \r |
8c416d5a L |
955 | str_sel:\r |
956 | inc b\r | |
957 | jr str_sel2\r | |
958 | str_sel1:\r | |
959 | call str_sel_next\r | |
960 | str_sel2:\r | |
961 | djnz str_sel1\r | |
962 | ret\r | |
963 | \r | |
964 | str_sel_next:\r | |
0716e834 L |
965 | ld a,(hl)\r |
966 | and a\r | |
967 | ret z\r | |
0c4244e5 | 968 | l0348h:\r |
0716e834 L |
969 | ld a,(hl)\r |
970 | inc hl\r | |
971 | and a\r | |
972 | ret m\r | |
973 | jr l0348h\r | |
646e8b05 | 974 | \r |
a3bccdeb | 975 | get_arg_range_target:\r |
0716e834 L |
976 | call get_arg_range\r |
977 | push hl\r | |
978 | push bc\r | |
979 | call next_arg\r | |
a3bccdeb | 980 | call get_arg_final\r |
0716e834 L |
981 | ex de,hl\r |
982 | pop bc\r | |
983 | pop hl\r | |
984 | ret\r | |
0c4244e5 L |
985 | \r |
986 | sub_035dh:\r | |
0716e834 L |
987 | call expr\r |
988 | jr c,error0\r | |
989 | ret\r | |
0c4244e5 | 990 | \r |
a3bccdeb | 991 | get_arg_final:\r |
0716e834 | 992 | call sub_035dh\r |
0c4244e5 | 993 | l0366h:\r |
0716e834 | 994 | jp assert_eol\r |
0c4244e5 L |
995 | \r |
996 | get_lastarg_def:\r | |
0716e834 L |
997 | call get_arg_def\r |
998 | jr l0366h\r | |
b0b4005c | 999 | \r |
0c4244e5 | 1000 | get_arg_def:\r |
0716e834 L |
1001 | push hl\r |
1002 | call expr\r | |
1003 | jr c,l0375h\r | |
1004 | ex (sp),hl\r | |
0c4244e5 | 1005 | l0375h:\r |
0716e834 L |
1006 | pop hl\r |
1007 | ret\r | |
b0b4005c | 1008 | \r |
0c4244e5 | 1009 | sub_0377h:\r |
0716e834 L |
1010 | call b_037c_start\r |
1011 | jr l0366h\r | |
0c4244e5 L |
1012 | \r |
1013 | b_037c_start:\r | |
d1d6fee5 | 1014 | defb 0e6h ;and a,.. clear carry\r |
0c4244e5 | 1015 | get_arg_range:\r |
0716e834 L |
1016 | scf\r |
1017 | ex af,af'\r | |
1018 | push bc\r | |
1019 | push hl\r | |
1020 | call expr\r | |
1021 | jr nc,l038ch\r | |
1022 | ex af,af'\r | |
1023 | jr c,error0\r | |
1024 | ex af,af'\r | |
1025 | pop hl\r | |
d1d6fee5 | 1026 | defb 03eh ;ld a,.. swallow pop af\r |
0c4244e5 | 1027 | l038ch:\r |
0716e834 L |
1028 | pop af\r |
1029 | call get_range\r | |
1030 | jr nc,l0398h\r | |
1031 | ex af,af'\r | |
1032 | pop bc\r | |
1033 | ret nc\r | |
0c4244e5 | 1034 | error0:\r |
0716e834 | 1035 | jp ERROR\r |
0c4244e5 | 1036 | l0398h:\r |
0716e834 L |
1037 | pop af\r |
1038 | ret\r | |
0c4244e5 | 1039 | \r |
b0b4005c | 1040 | get_range:\r |
0716e834 L |
1041 | call next_arg\r |
1042 | cp 'S'\r | |
1043 | jr nz,l03a2h\r | |
1044 | inc de\r | |
0c4244e5 | 1045 | l03a2h:\r |
0716e834 | 1046 | push hl\r |
85b57f2a | 1047 | push af ;'S' flag\r |
0716e834 L |
1048 | call expr\r |
1049 | jr c,l03b8h\r | |
1050 | ld b,h\r | |
1051 | ld c,l\r | |
1052 | pop af\r | |
1053 | pop hl\r | |
85b57f2a | 1054 | jr z,l03b6h ;'S'?\r |
0716e834 L |
1055 | ld a,c\r |
1056 | sub l\r | |
1057 | ld c,a\r | |
1058 | ld a,b\r | |
1059 | sbc a,h\r | |
1060 | ld b,a\r | |
1061 | inc bc\r | |
0c4244e5 | 1062 | l03b6h:\r |
0716e834 L |
1063 | and a\r |
1064 | ret\r | |
0c4244e5 | 1065 | l03b8h:\r |
0716e834 L |
1066 | pop af\r |
1067 | pop hl\r | |
85b57f2a | 1068 | jr z,error0 ;'S', but no expression following\r |
0716e834 L |
1069 | scf\r |
1070 | ret\r | |
0c4244e5 | 1071 | \r |
9711a430 L |
1072 | ;-------------------------------------------------------------------------------\r |
1073 | \r | |
0c4244e5 | 1074 | expr:\r |
0716e834 | 1075 | call skipbl\r |
0c4244e5 | 1076 | expr1:\r |
0716e834 L |
1077 | call do_factor\r |
1078 | ret c\r | |
0c4244e5 | 1079 | l0433h:\r |
0716e834 L |
1080 | call do_binary_op\r |
1081 | push hl\r | |
1082 | push bc\r | |
1083 | call do_factor\r | |
1084 | pop bc\r | |
1085 | ex de,hl\r | |
1086 | ex (sp),hl\r | |
1087 | jr nc,l0447h\r | |
1088 | pop de\r | |
1089 | ld a,b\r | |
1090 | or c\r | |
1091 | ret z\r | |
1092 | jp ERROR\r | |
0c4244e5 L |
1093 | \r |
1094 | l0447h:\r | |
0716e834 L |
1095 | ld a,b\r |
1096 | or c\r | |
1097 | push bc\r | |
1098 | ret nz\r | |
1099 | pop bc\r | |
0c4244e5 L |
1100 | \r |
1101 | doop_add:\r | |
0716e834 | 1102 | add hl,de\r |
0c4244e5 | 1103 | l044dh:\r |
0716e834 L |
1104 | pop de\r |
1105 | jr l0433h\r | |
0c4244e5 L |
1106 | \r |
1107 | doop_sub:\r | |
0716e834 L |
1108 | and a\r |
1109 | sbc hl,de\r | |
1110 | jr l044dh\r | |
0c4244e5 L |
1111 | \r |
1112 | doop_mlt:\r | |
0716e834 L |
1113 | push bc\r |
1114 | ld b,h\r | |
1115 | ld c,l\r | |
1116 | ld hl,0\r | |
1117 | ld a,010h\r | |
0c4244e5 | 1118 | l045dh:\r |
0716e834 L |
1119 | add hl,hl\r |
1120 | ex de,hl\r | |
1121 | add hl,hl\r | |
1122 | ex de,hl\r | |
1123 | jr nc,l0464h\r | |
1124 | add hl,bc\r | |
0c4244e5 | 1125 | l0464h:\r |
0716e834 L |
1126 | dec a\r |
1127 | jr nz,l045dh\r | |
1128 | pop bc\r | |
1129 | jr l044dh\r | |
0c4244e5 L |
1130 | \r |
1131 | doop_div:\r | |
0716e834 L |
1132 | call div_hl_de\r |
1133 | jr l044dh\r | |
0c4244e5 L |
1134 | \r |
1135 | doop_mod:\r | |
0716e834 L |
1136 | call div_hl_de\r |
1137 | ex de,hl\r | |
1138 | jr l044dh\r | |
0c4244e5 L |
1139 | \r |
1140 | ; divide x/y\r | |
1141 | ; hl: x\r | |
1142 | ; de: y\r | |
1143 | ; return:\r | |
1144 | ; hl: q (x/y)\r | |
1145 | ; de: r (x%y)\r | |
1146 | \r | |
1147 | div_hl_de:\r | |
f33961b5 L |
1148 | push bc\r |
1149 | ex de,hl ;de: x\r | |
1150 | ld b,h ;bc: y\r | |
1151 | ld c,l\r | |
1152 | ld hl,0 ;hl: r\r | |
1153 | ld a,16\r | |
0c4244e5 L |
1154 | \r |
1155 | ; de: x (x shifted out, q shifted in)\r | |
1156 | ; bc: y\r | |
1157 | ; hl: r (initially 0)\r | |
1158 | \r | |
f33961b5 L |
1159 | div_lp:\r |
1160 | ex de,hl\r | |
1161 | add hl,hl ;x <<= 1\r | |
1162 | ex de,hl\r | |
1163 | adc hl,hl ;r <<= 1\r | |
1164 | inc de\r | |
1165 | or a\r | |
1166 | sbc hl,bc\r | |
1167 | jr nc,div_norestore\r | |
1168 | dec de\r | |
1169 | add hl,bc\r | |
1170 | div_norestore:\r | |
1171 | dec a\r | |
1172 | jr nz,div_lp\r | |
1173 | ex de,hl\r | |
1174 | pop bc\r | |
0716e834 | 1175 | ret\r |
0c4244e5 L |
1176 | \r |
1177 | doop_and:\r | |
0716e834 L |
1178 | ld a,h\r |
1179 | and d\r | |
1180 | ld h,a\r | |
1181 | ld a,l\r | |
1182 | and e\r | |
1183 | ld l,a\r | |
1184 | jr l044dh\r | |
0c4244e5 L |
1185 | \r |
1186 | doop_or:\r | |
0716e834 L |
1187 | ld a,h\r |
1188 | or d\r | |
1189 | ld h,a\r | |
1190 | ld a,l\r | |
1191 | or e\r | |
1192 | ld l,a\r | |
1193 | jr l044dh\r | |
0c4244e5 L |
1194 | \r |
1195 | doop_xor:\r | |
0716e834 L |
1196 | ld a,h\r |
1197 | xor d\r | |
1198 | ld h,a\r | |
1199 | ld a,l\r | |
1200 | xor e\r | |
1201 | ld l,a\r | |
1202 | jr l044dh\r | |
0c4244e5 L |
1203 | \r |
1204 | do_binary_op:\r | |
0716e834 L |
1205 | push hl\r |
1206 | ld hl,tab_op_a\r | |
1207 | call lookupch\r | |
1208 | ld a,b\r | |
1209 | ld hl,tblf_opa\r | |
6bc52899 | 1210 | call add_hl_a2\r |
0716e834 L |
1211 | ld c,(hl)\r |
1212 | inc hl\r | |
1213 | ld b,(hl)\r | |
1214 | pop hl\r | |
1215 | ret\r | |
0c4244e5 L |
1216 | \r |
1217 | tab_op_a:\r | |
1218 | DB '+-*/%&!#',0\r | |
1219 | \r | |
1220 | tblf_opa:\r | |
0716e834 L |
1221 | dw doop_add\r |
1222 | dw doop_sub\r | |
1223 | dw doop_mlt\r | |
1224 | dw doop_div\r | |
1225 | dw doop_mod\r | |
1226 | dw doop_and\r | |
1227 | dw doop_or\r | |
1228 | dw doop_xor\r | |
1229 | dw 0\r | |
0c4244e5 | 1230 | \r |
9711a430 L |
1231 | ;-------------------------------------------------------------------------------\r |
1232 | \r | |
0c4244e5 | 1233 | fact_factor:\r |
0716e834 L |
1234 | call do_factor\r |
1235 | ret nc\r | |
1236 | jp ERROR\r | |
0c4244e5 L |
1237 | \r |
1238 | do_factor:\r | |
85b57f2a | 1239 | call chk_stack\r |
0716e834 L |
1240 | call get.number\r |
1241 | ret nc\r | |
1242 | inc de\r | |
0f35ae66 | 1243 | ld hl,ddtz_base-1\r |
0716e834 L |
1244 | cp 'T'\r |
1245 | ret z\r | |
1246 | ld hl,(high_load)\r | |
1247 | cp 'H'\r | |
1248 | ret z\r | |
1249 | ld hl,(max_load)\r | |
1250 | cp 'M'\r | |
1251 | ret z\r | |
1252 | ld hl,TPA\r | |
1253 | cp 'L'\r | |
1254 | ret z\r | |
0f361185 L |
1255 | ld hl,(reg.pc)\r |
1256 | cp '$'\r | |
1257 | ret z\r | |
0716e834 L |
1258 | cp '-'\r |
1259 | jr z,fact_factneg\r | |
1260 | cp '~'\r | |
1261 | jr z,fact_factinv\r | |
1262 | cp '+'\r | |
1263 | jr z,fact_factor\r | |
1264 | cp '^'\r | |
1265 | jr z,fact_reg.CPU\r | |
0716e834 L |
1266 | cp '('\r |
1267 | jr z,fact_mem\r | |
1268 | cp '['\r | |
3a4deef9 | 1269 | jr z,expr_brckt\r |
0716e834 L |
1270 | cp ''''\r |
1271 | jr z,fact_factstring\r | |
1272 | dec de\r | |
1273 | scf\r | |
1274 | ret\r | |
0c4244e5 | 1275 | \r |
9711a430 L |
1276 | ;-------------------------------------------------------------------------------\r |
1277 | \r | |
0c4244e5 | 1278 | fact_factstring:\r |
0716e834 | 1279 | ld hl,0\r |
0c4244e5 | 1280 | l054bh:\r |
0716e834 L |
1281 | ld a,(de)\r |
1282 | cp ''''\r | |
1283 | jr z,l0557h\r | |
1284 | and a\r | |
1285 | ret z\r | |
0c4244e5 | 1286 | l0552h:\r |
0716e834 L |
1287 | ld h,l\r |
1288 | ld l,a\r | |
1289 | inc de\r | |
1290 | jr l054bh\r | |
0c4244e5 | 1291 | l0557h:\r |
0716e834 L |
1292 | inc de\r |
1293 | ld a,(de)\r | |
1294 | cp ''''\r | |
1295 | jr z,l0552h\r | |
1296 | sub '.'\r | |
1297 | or a\r | |
1298 | ret nz\r | |
1299 | inc de\r | |
1300 | set 7,l\r | |
1301 | ret\r | |
0c4244e5 L |
1302 | \r |
1303 | fact_reg.CPU:\r | |
0716e834 | 1304 | call sub_0caeh\r |
30673dea | 1305 | jr nc,error1\r |
0716e834 L |
1306 | ld a,(hl)\r |
1307 | inc hl\r | |
1308 | ld h,(hl)\r | |
1309 | ld l,a\r | |
1310 | and a\r | |
1311 | bit 0,c\r | |
1312 | ret nz\r | |
1313 | ld h,000h\r | |
1314 | ret\r | |
0c4244e5 | 1315 | \r |
a3bccdeb L |
1316 | fact_factinv:\r |
1317 | call fact_factor\r | |
1318 | jr cpl.hl\r | |
1319 | \r | |
0c4244e5 | 1320 | fact_factneg:\r |
0716e834 | 1321 | call fact_factor\r |
a3bccdeb | 1322 | neg.hl:\r |
0716e834 | 1323 | dec hl\r |
0c4244e5 | 1324 | cpl.hl:\r |
0716e834 L |
1325 | ld a,h\r |
1326 | cpl\r | |
1327 | ld h,a\r | |
1328 | ld a,l\r | |
1329 | cpl\r | |
1330 | ld l,a\r | |
1331 | ret\r | |
0c4244e5 | 1332 | \r |
0c4244e5 | 1333 | fact_mem:\r |
0716e834 | 1334 | call expr1\r |
30673dea | 1335 | jr c,error1\r |
0716e834 L |
1336 | ld a,(de)\r |
1337 | cp ')'\r | |
30673dea | 1338 | jr nz,error1\r |
0716e834 L |
1339 | inc de\r |
1340 | ld a,(hl)\r | |
1341 | inc hl\r | |
1342 | ld h,(hl)\r | |
1343 | ld l,a\r | |
1344 | ld a,(de)\r | |
1345 | inc de\r | |
1346 | cp '.'\r | |
1347 | ret z\r | |
1348 | dec de\r | |
1349 | xor a\r | |
1350 | ld h,a\r | |
1351 | ret\r | |
0c4244e5 L |
1352 | \r |
1353 | expr_brckt:\r | |
0716e834 | 1354 | call expr1\r |
30673dea | 1355 | jr c,error1\r |
0716e834 L |
1356 | ld a,(de)\r |
1357 | cp ']'\r | |
1358 | inc de\r | |
1359 | ret z\r | |
30673dea | 1360 | error1:\r |
0716e834 | 1361 | jp ERROR\r |
0c4244e5 | 1362 | \r |
9711a430 L |
1363 | ;-------------------------------------------------------------------------------\r |
1364 | \r | |
0c4244e5 | 1365 | get.number:\r |
0716e834 L |
1366 | call get.hexdigit\r |
1367 | ret c\r | |
1368 | push de\r | |
0c4244e5 | 1369 | test_number:\r |
0716e834 L |
1370 | inc de\r |
1371 | call get.hexdigit\r | |
1372 | jr nc,test_number\r | |
1373 | pop de\r | |
1374 | cp '.'\r | |
1375 | jr z,get_dec_number\r | |
1376 | cp '"'\r | |
1377 | jr z,get_bin_number\r | |
1378 | ld hl,0\r | |
0c4244e5 | 1379 | next_hexdigit:\r |
0716e834 L |
1380 | call get.hexdigit\r |
1381 | jr c,hexnum_done\r | |
1382 | add hl,hl\r | |
1383 | add hl,hl\r | |
1384 | add hl,hl\r | |
1385 | add hl,hl\r | |
1386 | call add_hl_a\r | |
1387 | inc de\r | |
1388 | jr next_hexdigit\r | |
0c4244e5 L |
1389 | \r |
1390 | hexnum_done:\r | |
0716e834 L |
1391 | xor 'H'\r |
1392 | ret nz\r | |
1393 | inc de\r | |
1394 | ret\r | |
0c4244e5 L |
1395 | \r |
1396 | get_bin_number:\r | |
0716e834 | 1397 | ld hl,0\r |
0c4244e5 | 1398 | next_bindigit:\r |
0716e834 | 1399 | call get.bindigit\r |
0c4244e5 | 1400 | l05dbh:\r |
0716e834 L |
1401 | inc de\r |
1402 | jr c,l05e4h\r | |
1403 | add hl,hl\r | |
1404 | call add_hl_a\r | |
1405 | jr next_bindigit\r | |
0c4244e5 | 1406 | l05e4h:\r |
0716e834 | 1407 | cp '"'\r |
1bfdbe14 | 1408 | jr nz,error11\r |
0716e834 L |
1409 | call get.bindigit\r |
1410 | jr nc,l05dbh\r | |
1411 | or a\r | |
1412 | ret\r | |
0c4244e5 L |
1413 | \r |
1414 | get_dec_number:\r | |
0716e834 | 1415 | ld hl,0\r |
0c4244e5 | 1416 | next_decdigit:\r |
0716e834 L |
1417 | call get.decdigit\r |
1418 | inc de\r | |
1419 | jr c,decnum_done\r | |
1420 | push bc\r | |
1421 | add hl,hl\r | |
1422 | ld b,h\r | |
1423 | ld c,l\r | |
1424 | add hl,hl\r | |
1425 | add hl,hl\r | |
1426 | add hl,bc\r | |
1427 | pop bc\r | |
1428 | call add_hl_a\r | |
1429 | jr next_decdigit\r | |
0c4244e5 | 1430 | decnum_done:\r |
0716e834 L |
1431 | cp '.'\r |
1432 | ret z\r | |
1bfdbe14 | 1433 | error11:\r |
0716e834 | 1434 | jp ERROR\r |
0c4244e5 L |
1435 | \r |
1436 | sub_060ch:\r | |
0c461f1d | 1437 | call get_char_upper\r |
d1d6fee5 | 1438 | cp 'Z'+1\r |
0716e834 | 1439 | jr l0614h\r |
0c4244e5 L |
1440 | \r |
1441 | get.hexdigit:\r | |
c788b3b7 | 1442 | ld a,(de)\r |
0c4244e5 | 1443 | hex_digit:\r |
0c461f1d | 1444 | call toupper\r |
c788b3b7 | 1445 | cp 'F'+1\r |
0c4244e5 | 1446 | l0614h:\r |
c788b3b7 L |
1447 | ccf\r |
1448 | ret c\r | |
1449 | cp 'A'\r | |
1450 | jr c,l061eh\r | |
1451 | sub 'A'-10\r | |
1452 | ret\r | |
0c4244e5 L |
1453 | \r |
1454 | get.decdigit:\r | |
0c461f1d | 1455 | call get_char_upper\r |
0c4244e5 | 1456 | l061eh:\r |
c788b3b7 L |
1457 | cp '9'+1\r |
1458 | jr l0625h\r | |
0c4244e5 L |
1459 | \r |
1460 | get.bindigit:\r | |
0c461f1d | 1461 | call get_char_upper\r |
c788b3b7 | 1462 | cp '1'+1\r |
0c4244e5 | 1463 | l0625h:\r |
c788b3b7 L |
1464 | ccf\r |
1465 | ret c\r | |
1466 | cp '0'\r | |
1467 | ret c\r | |
1468 | sub '0'\r | |
1469 | ret\r | |
0c4244e5 | 1470 | \r |
9711a430 L |
1471 | ;-------------------------------------------------------------------------------\r |
1472 | \r | |
25a690e5 | 1473 | p_cpustat0:\r |
0716e834 | 1474 | call assert_eol\r |
25a690e5 | 1475 | p_cpustat:\r |
0716e834 L |
1476 | call p_f\r |
1477 | call outbl2\r | |
1478 | ld hl,b_06e9_start\r | |
1479 | ld de,b_0709_start\r | |
1480 | ld b,6\r | |
0c4244e5 | 1481 | l063eh:\r |
0716e834 L |
1482 | call p_regs\r |
1483 | djnz l063eh\r | |
27a5c416 | 1484 | call outbl6\r |
0716e834 L |
1485 | push hl\r |
1486 | push de\r | |
ac35765e | 1487 | ld iy,(reg.pc)\r |
0716e834 | 1488 | call p_disas_instr\r |
d24eec89 | 1489 | pop de\r |
8320b8eb | 1490 | pop hl\r |
0716e834 L |
1491 | call crlf\r |
1492 | call p_f2\r | |
1493 | call outbl2\r | |
0716e834 | 1494 | ld b,7\r |
0c4244e5 | 1495 | l065bh:\r |
0716e834 L |
1496 | call p_regs\r |
1497 | djnz l065bh\r | |
0716e834 | 1498 | jp crlf\r |
0c4244e5 | 1499 | \r |
25a690e5 | 1500 | p_f:\r |
0716e834 L |
1501 | ld a,(reg.f)\r |
1502 | call p_flags\r | |
1503 | ld a,(reg.iff)\r | |
1504 | cp 0f3h\r | |
8320b8eb | 1505 | jr z,outbl_1\r |
0716e834 L |
1506 | ld a,'E'\r |
1507 | jp outchar\r | |
25a690e5 | 1508 | p_f2:\r |
0716e834 L |
1509 | ld a,(reg.f2)\r |
1510 | call p_flags\r | |
8320b8eb | 1511 | jr outbl_1\r |
d24eec89 | 1512 | \r |
25a690e5 | 1513 | p_flags:\r |
836f48ab L |
1514 | push hl\r |
1515 | ld hl,t_flag_names+7\r | |
1516 | ld c,a\r | |
1517 | ld b,8\r | |
1518 | fl_loop:\r | |
1519 | ld a,' '\r | |
1520 | cp (hl)\r | |
1521 | ld a,c\r | |
1522 | rlca\r | |
1523 | ld c,a\r | |
1524 | jr z,fl_skip\r | |
1525 | ld a,(hl)\r | |
1526 | call c,outchar\r | |
1527 | call nc,outbl\r | |
1528 | fl_skip:\r | |
1529 | dec hl\r | |
1530 | djnz fl_loop\r | |
1531 | pop hl\r | |
1532 | ret\r | |
25a690e5 L |
1533 | \r |
1534 | p_regs:\r | |
0716e834 L |
1535 | push de\r |
1536 | call pstr\r | |
37ade8ec L |
1537 | call pstr_inl\r |
1538 | dc '='\r | |
0716e834 L |
1539 | ex (sp),hl\r |
1540 | ld e,(hl)\r | |
1541 | inc hl\r | |
1542 | ld d,(hl)\r | |
1543 | inc hl\r | |
1544 | ld a,(hl)\r | |
1545 | inc hl\r | |
1546 | push hl\r | |
1547 | and a\r | |
1548 | jr z,l06deh\r | |
d24eec89 L |
1549 | ex de,hl\r |
1550 | ld e,(hl)\r | |
1551 | inc hl\r | |
1552 | ld d,(hl)\r | |
1553 | ex de,hl\r | |
0716e834 L |
1554 | call out_hl\r |
1555 | jr l06e2h\r | |
0c4244e5 | 1556 | l06deh:\r |
0716e834 L |
1557 | ld a,(de)\r |
1558 | call out_hex\r | |
0c4244e5 | 1559 | l06e2h:\r |
0716e834 L |
1560 | pop de\r |
1561 | pop hl\r | |
8320b8eb L |
1562 | outbl_1:\r |
1563 | jp outbl\r | |
0c4244e5 L |
1564 | \r |
1565 | b_06e9_start:\r | |
1566 | DC 'A '\r | |
1567 | DC 'BC '\r | |
1568 | DC 'DE '\r | |
1569 | DC 'HL '\r | |
1570 | DC 'SP'\r | |
1571 | DC 'PC'\r | |
899547a8 L |
1572 | DC 'a'''\r |
1573 | DC 'bc'''\r | |
1574 | DC 'de'''\r | |
1575 | DC 'hl'''\r | |
0c4244e5 L |
1576 | DC 'IX'\r |
1577 | DC 'IY'\r | |
1578 | DC 'I'\r | |
1579 | DB 0\r | |
1580 | \r | |
1581 | b_0709_start:\r | |
0716e834 L |
1582 | dw reg.a\r |
1583 | db 000h\r | |
1584 | dw reg.c\r | |
1585 | db 001h\r | |
1586 | dw reg.e\r | |
1587 | db 001h\r | |
1588 | dw reg.l\r | |
1589 | db 001h\r | |
1590 | dw reg_sp\r | |
1591 | db 001h\r | |
ac35765e | 1592 | dw reg.pc\r |
0716e834 L |
1593 | db 002h\r |
1594 | dw reg.a2\r | |
1595 | db 000h\r | |
1596 | dw reg.c2\r | |
1597 | db 001h\r | |
1598 | dw reg.e2\r | |
1599 | db 001h\r | |
1600 | dw reg.l2\r | |
1601 | db 001h\r | |
1602 | dw reg.ix\r | |
1603 | db 001h\r | |
1604 | dw reg.iy\r | |
1605 | db 001h\r | |
1606 | dw reg.i\r | |
1607 | db 000h\r | |
1608 | db 000h\r | |
0c4244e5 | 1609 | \r |
a3bccdeb L |
1610 | ;-------------------------------------------------------------------------------\r |
1611 | ; > E addr\r | |
1612 | ; relocate debugger to addr\r | |
1613 | ; > ER addr\r | |
1614 | ; relocate just below addr\r | |
1615 | ;\r | |
1616 | ; Move debugger to given address and restart.\r | |
1617 | ; New location must not overlap with current location.\r | |
1618 | \r | |
1619 | \r | |
1620 | cmd_E:\r | |
1621 | call skipbl\r | |
1622 | sub 'R'\r | |
1623 | jr nz,$+3\r | |
1624 | inc de\r | |
1625 | push af\r | |
1626 | call get_arg_final\r | |
1627 | \r | |
fb224211 L |
1628 | ex de,hl\r |
1629 | ld hl,(bitmap_end)\r | |
1630 | ld bc,ddtz_base\r | |
1631 | or a\r | |
1632 | sbc hl,bc\r | |
1633 | ld b,h\r | |
1634 | ld c,l\r | |
1635 | ex de,hl\r | |
a3bccdeb L |
1636 | pop af\r |
1637 | jr nz,cmde_bottom\r | |
1638 | sbc hl,bc\r | |
1639 | cmde_bottom:\r | |
1640 | ld ix,cmde_clr-ddtz_base\r | |
1641 | ex de,hl ;de = dst\r | |
1642 | add ix,de\r | |
1643 | ld hl,ddtz_base ;hl = src\r | |
1644 | \r | |
1645 | push hl\r | |
1646 | or a\r | |
1647 | sbc hl,de\r | |
1648 | call c,neg.hl ;abs(distance)\r | |
1649 | or a\r | |
1650 | sbc hl,bc\r | |
1651 | jp c,error\r | |
1652 | pop hl\r | |
1653 | push hl\r | |
1654 | push bc\r | |
1655 | ldir\r | |
1656 | pop bc\r | |
1657 | pop hl\r | |
1658 | jp (ix)\r | |
1659 | \r | |
9711a430 L |
1660 | ;-------------------------------------------------------------------------------\r |
1661 | ; > G [startaddr] [;breakp..]\r | |
1662 | ; Go [to start] [with temporary breakpoints]\r | |
1663 | \r | |
0c4244e5 | 1664 | cmd_G:\r |
0716e834 | 1665 | sub a\r |
4bb547a7 | 1666 | ld (bp_p_cpu_flag),a\r |
0716e834 L |
1667 | call expr\r |
1668 | jr c,l0740h\r | |
ac35765e | 1669 | ld (reg.pc),hl\r |
0c4244e5 | 1670 | l0740h:\r |
0716e834 | 1671 | call skipbl\r |
4bb547a7 | 1672 | jr z,user_go0\r |
0716e834 L |
1673 | cp ';'\r |
1674 | jp nz,ERROR\r | |
1675 | inc de\r | |
1676 | ld a,002h\r | |
1677 | call bp_enter\r | |
4bb547a7 | 1678 | user_go0:\r |
0716e834 | 1679 | jp user_go\r |
0c4244e5 | 1680 | \r |
9711a430 | 1681 | ;-------------------------------------------------------------------------------\r |
1bfdbe14 L |
1682 | \r |
1683 | bpl_init:\r | |
1684 | ld b,BP_CNT\r | |
1685 | ld ix,bp_tab\r | |
1686 | ex (sp),hl\r | |
1687 | ld (pbl_loop_adr),hl\r | |
1688 | ex (sp),hl\r | |
1689 | ret\r | |
1690 | \r | |
1691 | bpl_next:\r | |
1692 | ld de,BP_SIZE\r | |
81c1eadb | 1693 | push af\r |
1bfdbe14 | 1694 | add ix,de\r |
81c1eadb | 1695 | pop af\r |
1bfdbe14 L |
1696 | dec b\r |
1697 | ret z\r | |
1698 | \r | |
1699 | ex (sp),hl\r | |
1700 | ld hl,(pbl_loop_adr)\r | |
1701 | ex (sp),hl\r | |
1702 | ret\r | |
1703 | \r | |
0c4244e5 | 1704 | bp_clr_temporary:\r |
1bfdbe14 L |
1705 | call bpl_init\r |
1706 | \r | |
0716e834 L |
1707 | ld a,(ix+000h)\r |
1708 | and 0f1h\r | |
1709 | ld (ix+000h),a\r | |
1bfdbe14 L |
1710 | \r |
1711 | call bpl_next\r | |
0716e834 | 1712 | ret\r |
0c4244e5 | 1713 | \r |
9711a430 L |
1714 | ;-------------------------------------------------------------------------------\r |
1715 | ; > B\r | |
1716 | ; display all breakpoints\r | |
1717 | ; > B breakp [breakp..]\r | |
1718 | ; set breakpoints\r | |
1719 | ; > BX\r | |
1720 | ; clear all breakpoints\r | |
d2df51e3 | 1721 | ; > BX breakp [breakp..]\r |
9711a430 L |
1722 | ; clear breakpoints\r |
1723 | ;\r | |
d2df51e3 | 1724 | ; breakp can be any valid expression\r |
9711a430 | 1725 | \r |
0c4244e5 | 1726 | cmd_B:\r |
0716e834 | 1727 | call skipbl\r |
4903b8b8 | 1728 | jr z,bp_print\r |
0716e834 L |
1729 | inc de\r |
1730 | cp 'X'\r | |
4903b8b8 | 1731 | jr z,bp_clr0\r |
0716e834 L |
1732 | dec de\r |
1733 | ld a,001h\r | |
1734 | jp bp_enter\r | |
81c1eadb | 1735 | \r |
4903b8b8 | 1736 | bp_clr0:\r |
0716e834 L |
1737 | call skipbl\r |
1738 | jr z,bp_clr_all\r | |
4903b8b8 | 1739 | bp_clr_next:\r |
0716e834 L |
1740 | call expr\r |
1741 | jp c,assert_eol\r | |
1742 | push de\r | |
1743 | call bp_clr\r | |
1744 | pop de\r | |
1745 | call next_arg\r | |
4903b8b8 | 1746 | jr bp_clr_next\r |
0c4244e5 L |
1747 | \r |
1748 | bp_clr_all:\r | |
0716e834 | 1749 | scf\r |
0c4244e5 | 1750 | bp_clr:\r |
1bfdbe14 L |
1751 | call bpl_init\r |
1752 | \r | |
0716e834 L |
1753 | push af\r |
1754 | jr c,l07a7h\r | |
1755 | ld e,(ix+002h)\r | |
1756 | ld d,(ix+003h)\r | |
1757 | call cp_hl_de\r | |
1758 | jr nz,l07aeh\r | |
0c4244e5 | 1759 | l07a7h:\r |
0716e834 | 1760 | ld (ix+000h),000h\r |
0c4244e5 | 1761 | l07aeh:\r |
0716e834 | 1762 | pop af\r |
1bfdbe14 | 1763 | call bpl_next\r |
0716e834 | 1764 | ret\r |
0c4244e5 | 1765 | \r |
4903b8b8 | 1766 | bp_print:\r |
3628b074 | 1767 | ld c,0\r |
1bfdbe14 L |
1768 | call bpl_init\r |
1769 | \r | |
0716e834 | 1770 | bit 0,(ix+000h)\r |
4903b8b8 | 1771 | jr z,bp_pr_cont\r |
0716e834 L |
1772 | ld l,(ix+002h)\r |
1773 | ld h,(ix+003h)\r | |
35b535f6 | 1774 | call out_hl\r |
3628b074 L |
1775 | call outbl2\r |
1776 | inc c\r | |
4903b8b8 | 1777 | bp_pr_cont:\r |
1bfdbe14 | 1778 | call bpl_next\r |
3628b074 L |
1779 | ld a,c\r |
1780 | or a\r | |
1781 | call nz,crlf\r | |
0716e834 | 1782 | ret\r |
0c4244e5 | 1783 | \r |
9711a430 | 1784 | ;-------------------------------------------------------------------------------\r |
0c4244e5 L |
1785 | ; Add break points to list\r |
1786 | ; A = 1 Permanent (B command)\r | |
1787 | ; A = 2 Temporary (G command)\r | |
1788 | \r | |
1789 | bp_enter:\r | |
0716e834 L |
1790 | ld b,a\r |
1791 | call skipbl\r | |
1792 | ret z\r | |
3628b074 | 1793 | \r |
0716e834 L |
1794 | push bc\r |
1795 | call expr\r | |
1bfdbe14 | 1796 | jr c,error12\r |
0716e834 L |
1797 | pop bc\r |
1798 | bit 0,b\r | |
1799 | push bc\r | |
1800 | push de\r | |
1801 | push hl\r | |
1802 | call nz,bp_clr\r | |
1803 | pop hl\r | |
1804 | call bp_get_freeslot\r | |
1805 | pop de\r | |
1806 | ld (ix+002h),l\r | |
1807 | ld (ix+003h),h\r | |
0716e834 L |
1808 | call next_arg\r |
1809 | pop af\r | |
1810 | ld (ix+000h),a\r | |
1811 | and 00fh\r | |
1812 | jr bp_enter\r | |
0c4244e5 L |
1813 | \r |
1814 | bp_get_freeslot:\r | |
1bfdbe14 L |
1815 | call bpl_init\r |
1816 | \r | |
0716e834 L |
1817 | ld a,(ix+000h)\r |
1818 | and 00fh\r | |
1819 | ret z\r | |
1bfdbe14 L |
1820 | \r |
1821 | call bpl_next\r | |
1822 | error12\r | |
0716e834 | 1823 | jp ERROR\r |
0c4244e5 | 1824 | \r |
0c4244e5 | 1825 | \r |
9711a430 | 1826 | ;-------------------------------------------------------------------------------\r |
a768c062 | 1827 | ; Breakpoint handling routine.\r |
9711a430 | 1828 | \r |
0c4244e5 | 1829 | bpddtz:\r |
0716e834 L |
1830 | ld (reg.l),hl\r |
1831 | pop hl\r | |
1832 | dec hl\r | |
ac35765e | 1833 | ld (reg.pc),hl\r |
0716e834 L |
1834 | ld (reg_sp),sp\r |
1835 | ld sp,reg.l\r | |
1836 | push de\r | |
1837 | push bc\r | |
1838 | push af\r | |
1839 | push ix\r | |
1840 | push iy\r | |
1841 | ld a,i\r | |
4bb547a7 | 1842 | call di_or_ei\r |
0716e834 L |
1843 | ld h,a\r |
1844 | ld l,000h\r | |
1845 | push hl\r | |
4bb547a7 | 1846 | ld a,0f3h ; EI\r |
0716e834 | 1847 | jp po,l08dfh\r |
4bb547a7 | 1848 | ld a,0fbh ; DI\r |
0c4244e5 | 1849 | l08dfh:\r |
0716e834 L |
1850 | ld (reg.iff),a\r |
1851 | ex af,af'\r | |
1852 | push af\r | |
1853 | exx\r | |
1854 | push bc\r | |
1855 | push de\r | |
1856 | push hl\r | |
4bb547a7 | 1857 | call bp_restore_mem\r |
0716e834 L |
1858 | ld a,(b_21e2_start)\r |
1859 | dec a\r | |
1860 | jr z,l090bh\r | |
4bb547a7 L |
1861 | call inchar ;Keyboard hit?\r |
1862 | jr c,do_break ;yes\r | |
0716e834 L |
1863 | call sub_0913h\r |
1864 | and a\r | |
1865 | jp z,user_go\r | |
1866 | and 083h\r | |
1867 | jp z,l2151h\r | |
4bb547a7 | 1868 | do_break:\r |
0716e834 L |
1869 | call bp_clr_temporary\r |
1870 | call p_cpustat\r | |
1871 | jp mainloop\r | |
0c4244e5 L |
1872 | \r |
1873 | l090bh:\r | |
0716e834 L |
1874 | ld (b_21e2_start),a\r |
1875 | ld c,007h\r | |
1876 | jp l0a41h\r | |
0c4244e5 L |
1877 | \r |
1878 | sub_0913h:\r | |
0716e834 L |
1879 | ld a,080h\r |
1880 | ex af,af'\r | |
1881 | sub a\r | |
4bb547a7 | 1882 | ld (bp_p_cpu_flag),a\r |
1bfdbe14 L |
1883 | call bpl_init\r |
1884 | \r | |
0716e834 L |
1885 | ld a,(ix+000h)\r |
1886 | and 007h\r | |
1887 | jr z,l0938h\r | |
1888 | ld e,(ix+002h)\r | |
1889 | ld d,(ix+003h)\r | |
ac35765e | 1890 | ld hl,(reg.pc)\r |
0716e834 | 1891 | call cp_hl_de\r |
d2df51e3 | 1892 | jr nz,l0938h\r |
0716e834 L |
1893 | ex af,af'\r |
1894 | res 7,a\r | |
0716e834 L |
1895 | or (ix+000h)\r |
1896 | ex af,af'\r | |
d2df51e3 L |
1897 | l0938h:\r |
1898 | call bpl_next\r | |
1899 | ex af,af'\r | |
0716e834 | 1900 | ret\r |
0c4244e5 | 1901 | \r |
4bb547a7 | 1902 | bp_restore_mem:\r |
1bfdbe14 L |
1903 | call bpl_init\r |
1904 | \r | |
0716e834 L |
1905 | bit 5,(ix+000h)\r |
1906 | res 5,(ix+000h)\r | |
1907 | jr z,l099ah\r | |
1908 | ld l,(ix+002h)\r | |
1909 | ld h,(ix+003h)\r | |
1910 | ld a,(l0003h)\r | |
1911 | cp (hl)\r | |
1912 | jr nz,l099ah\r | |
1913 | ld a,(ix+001h)\r | |
1914 | ld (hl),a\r | |
0c4244e5 | 1915 | l099ah:\r |
0716e834 | 1916 | res 3,(ix+000h)\r |
1bfdbe14 L |
1917 | \r |
1918 | call bpl_next\r | |
0716e834 | 1919 | ret\r |
0c4244e5 | 1920 | \r |
4bb547a7 | 1921 | bp_tst_@pc:\r |
1bfdbe14 L |
1922 | call bpl_init\r |
1923 | \r | |
0716e834 L |
1924 | ld a,(ix+000h)\r |
1925 | and 003h\r | |
4a39ae18 | 1926 | jr z,bp_tst_e\r |
0716e834 L |
1927 | ld e,(ix+002h)\r |
1928 | ld d,(ix+003h)\r | |
ac35765e | 1929 | ld hl,(reg.pc)\r |
0716e834 L |
1930 | call cp_hl_de\r |
1931 | ret z\r | |
4a39ae18 | 1932 | bp_tst_e:\r |
1bfdbe14 | 1933 | call bpl_next\r |
0716e834 L |
1934 | sub a\r |
1935 | inc a\r | |
1936 | ret\r | |
0c4244e5 | 1937 | \r |
4bb547a7 | 1938 | bp_trace_enter:\r |
0716e834 | 1939 | call bp_get_freeslot\r |
0716e834 L |
1940 | ld (ix+002h),l\r |
1941 | ld (ix+003h),h\r | |
0716e834 L |
1942 | ld a,(b_21e2_start)\r |
1943 | and a\r | |
1944 | ld a,008h\r | |
4a39ae18 | 1945 | jr nz,bp_t_e\r |
1d3941c8 | 1946 | rra\r |
4a39ae18 | 1947 | bp_t_e:\r |
0716e834 L |
1948 | ld (ix+000h),a\r |
1949 | ret\r | |
0c4244e5 | 1950 | \r |
1d3941c8 | 1951 | bp_set_to_mem:\r |
1bfdbe14 L |
1952 | call bpl_init\r |
1953 | \r | |
0716e834 L |
1954 | ld a,(ix+000h)\r |
1955 | and c\r | |
1956 | jr z,l0a1dh\r | |
1957 | set 5,(ix+000h)\r | |
1958 | ld l,(ix+002h)\r | |
1959 | ld h,(ix+003h)\r | |
1960 | ld a,(hl)\r | |
1961 | ld (ix+001h),a\r | |
1962 | ld a,(l0003h)\r | |
1963 | ld (hl),a\r | |
1964 | and 038h\r | |
1965 | ld h,000h\r | |
1966 | ld l,a\r | |
1967 | ld (hl),0c3h\r | |
1968 | inc hl\r | |
1969 | ld de,bpddtz\r | |
1970 | ld (hl),e\r | |
1971 | inc hl\r | |
1972 | ld (hl),d\r | |
0c4244e5 | 1973 | l0a1dh:\r |
1bfdbe14 L |
1974 | \r |
1975 | call bpl_next\r | |
0716e834 | 1976 | ret\r |
0c4244e5 | 1977 | \r |
9711a430 L |
1978 | ;-------------------------------------------------------------------------------\r |
1979 | \r | |
0c4244e5 | 1980 | user_go:\r |
0716e834 L |
1981 | sub a\r |
1982 | ld (b_21e2_start),a\r | |
4bb547a7 | 1983 | ld a,(bp_p_cpu_flag)\r |
0716e834 L |
1984 | and a\r |
1985 | call nz,p_cpustat\r | |
4bb547a7 | 1986 | call bp_tst_@pc\r |
0716e834 L |
1987 | ld c,007h\r |
1988 | jr nz,l0a41h\r | |
1989 | ld a,001h\r | |
1990 | ld (b_21e2_start),a\r | |
4a39ae18 | 1991 | call tc_set_bp\r |
0716e834 | 1992 | ld c,008h\r |
0c4244e5 | 1993 | l0a41h:\r |
1d3941c8 | 1994 | call bp_set_to_mem\r |
0716e834 L |
1995 | ld sp,reg.l2\r |
1996 | pop hl\r | |
1997 | pop de\r | |
1998 | pop bc\r | |
1999 | pop af\r | |
2000 | exx\r | |
2001 | ex af,af'\r | |
2002 | pop af\r | |
2003 | ld i,a\r | |
2004 | pop iy\r | |
2005 | pop ix\r | |
2006 | pop af\r | |
2007 | pop bc\r | |
2008 | pop de\r | |
2009 | pop hl\r | |
2010 | ld sp,(reg_sp)\r | |
2011 | jp reg.iff\r | |
0c4244e5 | 2012 | \r |
9711a430 L |
2013 | ;-------------------------------------------------------------------------------\r |
2014 | ; > Y\r | |
2015 | ; examine all Y variables\r | |
2016 | ; > Y[0..9]\r | |
2017 | ; examine (and substitute) an Y variable\r | |
2018 | \r | |
0c4244e5 | 2019 | \r |
9711a430 L |
2020 | ;-------------------------------------------------------------------------------\r |
2021 | ; > X\r | |
2022 | ; eXamine (display) all cpu registers and\r | |
2023 | ; the instruction at the current program counter\r | |
2024 | ; > X register\r | |
2025 | ; eXamine (and substitute) a register\r | |
2026 | \r | |
2027 | \r | |
0c4244e5 | 2028 | cmd_X:\r |
0716e834 L |
2029 | call skipbl\r |
2030 | call sub_0caeh\r | |
2031 | jp nc,p_cpustat0\r | |
2032 | call assert_eol\r | |
2033 | ld a,b\r | |
a942c6d5 | 2034 | cp 25\r |
0716e834 | 2035 | jr z,l0c5fh\r |
a942c6d5 | 2036 | cp 26\r |
0716e834 | 2037 | jr z,l0c4fh\r |
0716e834 | 2038 | ex de,hl\r |
f81f70a9 | 2039 | ld hl,t_reg_names\r |
a942c6d5 | 2040 | call pstr_sel\r |
0716e834 | 2041 | call l0c33h\r |
35b535f6 | 2042 | \r |
0716e834 L |
2043 | call outbl\r |
2044 | push de\r | |
2045 | push bc\r | |
2046 | call get_line\r | |
2047 | call skipbl\r | |
2048 | jr z,l0c30h\r | |
a3bccdeb | 2049 | call get_arg_final\r |
cab0d80a L |
2050 | ex de,hl\r |
2051 | pop bc\r | |
0716e834 | 2052 | pop hl\r |
cab0d80a L |
2053 | ld (hl),e\r |
2054 | bit 0,c\r | |
0716e834 L |
2055 | ret z\r |
2056 | inc hl\r | |
cab0d80a | 2057 | ld (hl),d\r |
0716e834 | 2058 | ret\r |
0c4244e5 | 2059 | l0c30h:\r |
0716e834 L |
2060 | pop af\r |
2061 | pop hl\r | |
2062 | ret\r | |
d1f2492e | 2063 | \r |
0c4244e5 | 2064 | l0c33h:\r |
37ade8ec L |
2065 | call pstr_inl\r |
2066 | dc '='\r | |
0716e834 | 2067 | ld a,(de)\r |
cab0d80a | 2068 | bit 0,c\r |
0716e834 L |
2069 | jp z,out_hex\r |
2070 | ld l,a\r | |
2071 | inc de\r | |
2072 | ld a,(de)\r | |
2073 | dec de\r | |
2074 | ld h,a\r | |
35b535f6 | 2075 | jp out_hl\r |
0c4244e5 L |
2076 | \r |
2077 | l0c4fh:\r | |
0716e834 L |
2078 | call p_f\r |
2079 | ld a,0f3h\r | |
2080 | ld (reg.iff),a\r | |
2081 | scf\r | |
2082 | call sub_0c6ah\r | |
2083 | ld (reg.f),a\r | |
2084 | ret\r | |
0c4244e5 | 2085 | l0c5fh:\r |
0716e834 L |
2086 | call p_f2\r |
2087 | and a\r | |
2088 | call sub_0c6ah\r | |
2089 | ld (reg.f2),a\r | |
2090 | ret\r | |
d24eec89 | 2091 | \r |
0c4244e5 | 2092 | sub_0c6ah:\r |
d24eec89 | 2093 | push af\r |
0716e834 L |
2094 | call outbl\r |
2095 | call assert_eol\r | |
2096 | call get_line\r | |
d24eec89 L |
2097 | pop af\r |
2098 | ex af,af'\r | |
b0451b39 | 2099 | ld b,0\r |
0c4244e5 | 2100 | l0c76h:\r |
0716e834 L |
2101 | call skipbl\r |
2102 | ld a,b\r | |
2103 | ret z\r | |
2104 | push bc\r | |
f81f70a9 | 2105 | ld hl,t_flag_names\r |
0716e834 L |
2106 | call lookupch\r |
2107 | jp nc,ERROR\r | |
f81f70a9 L |
2108 | inc b\r |
2109 | xor a\r | |
2110 | scf\r | |
2111 | nxt_f:\r | |
2112 | rla\r | |
2113 | djnz nxt_f\r | |
2114 | pop bc\r | |
2115 | jr c,l0c97h\r | |
2116 | or b\r | |
2117 | ld b,a\r | |
0716e834 | 2118 | jr l0c76h\r |
f81f70a9 | 2119 | \r |
0c4244e5 | 2120 | l0c97h:\r |
0716e834 L |
2121 | ex af,af'\r |
2122 | jp nc,ERROR\r | |
2123 | ex af,af'\r | |
2124 | ld a,0fbh\r | |
2125 | ld (reg.iff),a\r | |
0716e834 | 2126 | jr l0c76h\r |
0c4244e5 | 2127 | \r |
f81f70a9 | 2128 | t_flag_names:\r |
0c4244e5 L |
2129 | db 'CNV H ZSE',0\r |
2130 | \r | |
2131 | sub_0caeh:\r | |
0716e834 L |
2132 | call sub_0303h\r |
2133 | ret nc\r | |
2134 | ld a,b\r | |
2135 | add a,b\r | |
2136 | add a,b\r | |
2137 | ld hl,b_0cfa_start\r | |
2138 | call add_hl_a\r | |
2139 | ld c,(hl)\r | |
2140 | inc hl\r | |
2141 | ld a,(hl)\r | |
2142 | inc hl\r | |
2143 | ld h,(hl)\r | |
2144 | ld l,a\r | |
2145 | scf\r | |
2146 | ret\r | |
0c4244e5 | 2147 | \r |
f81f70a9 | 2148 | t_reg_names:\r |
a942c6d5 L |
2149 | DC 'BC''' ;0\r |
2150 | DC 'DE''' ;1\r | |
2151 | DC 'HL''' ;2\r | |
2152 | DC 'BC' ;3\r | |
2153 | DC 'DE' ;4\r | |
2154 | DC 'HL' ;5\r | |
2155 | DC 'A''' ;6\r | |
2156 | DC 'B''' ;7\r | |
2157 | DC 'C''' ;8\r | |
2158 | DC 'D''' ;9\r | |
2159 | DC 'E''' ;10\r | |
2160 | DC 'H''' ;11\r | |
2161 | DC 'L''' ;12\r | |
2162 | DC 'A' ;13\r | |
2163 | DC 'B' ;14\r | |
2164 | DC 'C' ;15\r | |
2165 | DC 'D' ;16\r | |
2166 | DC 'E' ;17\r | |
2167 | DC 'H' ;18\r | |
2168 | DC 'L' ;19\r | |
2169 | DC 'IX' ;20\r | |
2170 | DC 'IY' ;21\r | |
2171 | DC 'SP' ;22\r | |
2172 | DC 'PC' ;23\r | |
2173 | DC 'I' ;24\r | |
2174 | DC 'F''' ;25\r | |
2175 | DC 'F' ;26\r | |
0c4244e5 L |
2176 | DB 0\r |
2177 | \r | |
2178 | b_0cfa_start:\r | |
0716e834 L |
2179 | db 003h\r |
2180 | dw reg.c2\r | |
2181 | db 003h\r | |
2182 | dw reg.e2\r | |
2183 | db 003h\r | |
2184 | dw reg.l2\r | |
2185 | db 003h\r | |
2186 | dw reg.c\r | |
2187 | db 003h\r | |
2188 | dw reg.e\r | |
2189 | db 003h\r | |
2190 | dw reg.l\r | |
2191 | db 000h\r | |
2192 | dw reg.a2\r | |
2193 | db 000h\r | |
2194 | dw reg.b2\r | |
2195 | db 000h\r | |
2196 | dw reg.c2\r | |
2197 | db 000h\r | |
2198 | dw reg.d2\r | |
2199 | db 000h\r | |
2200 | dw reg.e2\r | |
2201 | db 000h\r | |
2202 | dw reg.h2\r | |
2203 | db 000h\r | |
2204 | dw reg.l2\r | |
2205 | db 000h\r | |
2206 | dw reg.a\r | |
2207 | db 000h\r | |
2208 | dw reg.b\r | |
2209 | db 000h\r | |
2210 | dw reg.c\r | |
2211 | db 000h\r | |
2212 | dw reg.d\r | |
2213 | db 000h\r | |
2214 | dw reg.e\r | |
2215 | db 000h\r | |
2216 | dw reg.h\r | |
2217 | db 000h\r | |
2218 | dw reg.l\r | |
2219 | db 003h\r | |
2220 | dw reg.ix\r | |
2221 | db 003h\r | |
2222 | dw reg.iy\r | |
2223 | db 003h\r | |
2224 | dw reg_sp\r | |
2225 | db 003h\r | |
ac35765e | 2226 | dw reg.pc\r |
0716e834 L |
2227 | db 000h\r |
2228 | dw reg.i\r | |
0716e834 L |
2229 | db 000h\r |
2230 | dw reg.f2\r | |
2231 | db 000h\r | |
2232 | dw reg.f\r | |
0c4244e5 | 2233 | \r |
9711a430 L |
2234 | ;-------------------------------------------------------------------------------\r |
2235 | ; > S [startaddr]\r | |
2236 | ; Substitute memory\r | |
2237 | \r | |
0c4244e5 | 2238 | cmd_S:\r |
0716e834 L |
2239 | ld hl,(last_S)\r |
2240 | call get_lastarg_def\r | |
0c4244e5 | 2241 | l0d60h:\r |
0716e834 | 2242 | ld (last_S),hl\r |
35b535f6 | 2243 | call out_hl\r |
0716e834 L |
2244 | call outbl\r |
2245 | ld a,(hl)\r | |
2246 | call out_hex\r | |
2247 | call outbl2\r | |
2248 | call get_line\r | |
2249 | call skipbl\r | |
2250 | inc hl\r | |
2251 | jr z,l0d60h\r | |
2252 | dec hl\r | |
2253 | inc de\r | |
2254 | cp '.'\r | |
85b57f2a | 2255 | jr nz,cmds_dash\r |
0c461f1d | 2256 | call get_char_upper\r |
85b57f2a L |
2257 | or a\r |
2258 | jr nz,l0d8ah\r | |
2259 | ret\r | |
2260 | cmds_dash:\r | |
0716e834 L |
2261 | jp z,assert_eol\r |
2262 | cp '-'\r | |
2263 | jr nz,l0d8ah\r | |
0c461f1d | 2264 | call get_char_upper\r |
0716e834 L |
2265 | or a\r |
2266 | dec hl\r | |
2267 | jr z,l0d60h\r | |
2268 | inc hl\r | |
0c4244e5 | 2269 | l0d8ah:\r |
0716e834 L |
2270 | dec de\r |
2271 | call sub_0ef8h\r | |
2272 | jr l0d60h\r | |
0c4244e5 | 2273 | \r |
9711a430 L |
2274 | ;-------------------------------------------------------------------------------\r |
2275 | ; > @\r | |
2276 | ; examine (substitute) displacement register @\r | |
2277 | \r | |
35b535f6 | 2278 | ;cmd_@:\r |
0c4244e5 | 2279 | \r |
9711a430 L |
2280 | ;-------------------------------------------------------------------------------\r |
2281 | ; >>I [port]\r | |
2282 | ; Input a byte from port\r | |
2283 | \r | |
0c4244e5 | 2284 | cmd_I:\r |
0716e834 L |
2285 | ld (cmd_rpt),hl\r |
2286 | ld hl,(last_I)\r | |
2287 | call get_lastarg_def\r | |
2288 | ld (last_I),hl\r | |
2289 | ld b,h\r | |
2290 | ld c,l\r | |
2291 | in a,(c)\r | |
2292 | push af\r | |
2293 | call out_hex\r | |
2294 | call outbl4\r | |
2295 | pop af\r | |
2296 | call out.bin.b\r | |
2297 | jp crlf\r | |
0c4244e5 | 2298 | \r |
9711a430 L |
2299 | ;-------------------------------------------------------------------------------\r |
2300 | ; >>O [byte] [port]\r | |
2301 | ; Output a byte to a port\r | |
2302 | \r | |
0c4244e5 | 2303 | cmd_O:\r |
0716e834 L |
2304 | ld (cmd_rpt),hl\r |
2305 | ld hl,(last_O_val)\r | |
2306 | call get_arg_def\r | |
2307 | ld a,l\r | |
2308 | ld (last_O_val),a\r | |
2309 | push af\r | |
2310 | call next_arg\r | |
2311 | ld hl,(last_O_addr)\r | |
2312 | call get_lastarg_def\r | |
2313 | ld (last_O_addr),hl\r | |
2314 | ld b,h\r | |
2315 | ld c,l\r | |
2316 | pop af\r | |
2317 | out (c),a\r | |
2318 | ret\r | |
0c4244e5 | 2319 | \r |
9711a430 | 2320 | ;-------------------------------------------------------------------------------\r |
a3bccdeb | 2321 | ; > V startaddr endaddr targetaddr\r |
9711a430 L |
2322 | ; Verify (compare) two memory areas\r |
2323 | \r | |
0c4244e5 | 2324 | cmd_V:\r |
a3bccdeb | 2325 | call get_arg_range_target\r |
0c4244e5 | 2326 | l0dedh:\r |
0716e834 L |
2327 | push bc\r |
2328 | ld a,(de)\r | |
2329 | ld b,(hl)\r | |
2330 | cp b\r | |
2331 | jr z,l0e10h\r | |
2332 | ld c,a\r | |
35b535f6 | 2333 | call out_hl\r |
0716e834 L |
2334 | call outbl\r |
2335 | ld a,b\r | |
2336 | call out_hex\r | |
2337 | call outbl2\r | |
2338 | ld a,c\r | |
2339 | call out_hex\r | |
2340 | call outbl\r | |
2341 | ex de,hl\r | |
35b535f6 | 2342 | call out_hl\r |
0716e834 L |
2343 | ex de,hl\r |
2344 | call crlf\r | |
0c4244e5 | 2345 | l0e10h:\r |
0716e834 | 2346 | pop bc\r |
0716e834 | 2347 | inc de\r |
391ac6fb L |
2348 | cpi\r |
2349 | jp pe,l0dedh\r | |
0716e834 | 2350 | ret\r |
0c4244e5 | 2351 | \r |
9711a430 | 2352 | ;-------------------------------------------------------------------------------\r |
391ac6fb L |
2353 | ; > M startaddr endaddr destaddr\r |
2354 | ; Move memory\r | |
9711a430 | 2355 | \r |
0c4244e5 | 2356 | cmd_M:\r |
a3bccdeb | 2357 | call get_arg_range_target\r |
0716e834 | 2358 | call cp_hl_de\r |
3f9577cd | 2359 | jr nc,cmdm_up\r |
0716e834 L |
2360 | add hl,bc\r |
2361 | ex de,hl\r | |
2362 | add hl,bc\r | |
2363 | ex de,hl\r | |
2364 | dec hl\r | |
2365 | dec de\r | |
2366 | lddr\r | |
0f361185 | 2367 | ret\r |
3f9577cd L |
2368 | cmdm_up:\r |
2369 | ldir\r | |
0716e834 | 2370 | ret\r |
0c4244e5 | 2371 | \r |
9711a430 L |
2372 | ;-------------------------------------------------------------------------------\r |
2373 | ; > H\r | |
2374 | ; display Highest load address of last filed loaded, Maximum "High"\r | |
2375 | ; off all loaded files, and Top address of available memory\r | |
9711a430 L |
2376 | ; > H expression\r |
2377 | ; evaluate expression and display result in hex, decimal and other formats\r | |
9711a430 | 2378 | \r |
0c4244e5 | 2379 | cmd_H:\r |
0716e834 L |
2380 | call expr\r |
2381 | jp c,p_max_high0\r | |
0716e834 | 2382 | call assert_eol\r |
0716e834 L |
2383 | call out_hl\r |
2384 | call outbl2\r | |
2385 | call out_hl_neg\r | |
2386 | call outbl4\r | |
2387 | call out.hl.dec\r | |
2388 | call outbl2\r | |
2389 | call out_hl_dec_neg\r | |
2390 | call outbl4\r | |
2391 | call out.bin.w\r | |
ca1c9c55 | 2392 | call outbl2\r |
0716e834 L |
2393 | ld a,l\r |
2394 | call out.ascii\r | |
2395 | jp crlf\r | |
0c4244e5 | 2396 | \r |
9711a430 L |
2397 | ;-------------------------------------------------------------------------------\r |
2398 | ; > Q[J] startaddr endaddr bytes\r | |
2399 | ; Query memory for a byte string [Justified]\r | |
2400 | \r | |
0c4244e5 | 2401 | cmd_Q:\r |
0716e834 L |
2402 | call get_arg_range\r |
2403 | push bc\r | |
2404 | push hl\r | |
2405 | call sub_0ee6h\r | |
2406 | pop hl\r | |
0c4244e5 | 2407 | l0e96h:\r |
c18ba819 L |
2408 | push hl\r |
2409 | push de\r | |
2410 | push bc\r | |
2411 | l0edah:\r | |
2412 | ld a,(de)\r | |
2413 | cp (hl)\r | |
2414 | jr nz,l0ee2h\r | |
2415 | inc de\r | |
2416 | inc hl\r | |
2417 | djnz l0edah\r | |
2418 | l0ee2h:\r | |
2419 | pop bc\r | |
2420 | pop de\r | |
2421 | pop hl\r | |
0716e834 L |
2422 | jr nz,l0eb0h\r |
2423 | push bc\r | |
0716e834 | 2424 | ld bc,16\r |
c18ba819 | 2425 | and a ;clear carry\r |
0716e834 | 2426 | call sub_0f58h\r |
0716e834 | 2427 | pop bc\r |
0c4244e5 | 2428 | l0eb0h:\r |
0716e834 L |
2429 | inc hl\r |
2430 | ex (sp),hl\r | |
2431 | dec hl\r | |
2432 | ld a,h\r | |
2433 | or l\r | |
2434 | ex (sp),hl\r | |
2435 | jr nz,l0e96h\r | |
2436 | pop bc\r | |
2437 | ret\r | |
0c4244e5 | 2438 | \r |
9711a430 L |
2439 | ;-------------------------------------------------------------------------------\r |
2440 | ; > Z startaddr endaddr bytes\r | |
2441 | ; Zap (fill) memory with a byte string\r | |
2442 | \r | |
0c4244e5 | 2443 | cmd_Z:\r |
0716e834 L |
2444 | call get_arg_range\r |
2445 | push bc\r | |
2446 | push hl\r | |
2447 | call sub_0ee6h\r | |
2448 | ld a,b\r | |
2449 | pop hl\r | |
2450 | pop bc\r | |
2451 | push hl\r | |
2452 | ex de,hl\r | |
0c4244e5 | 2453 | l0ec7h:\r |
0716e834 L |
2454 | ldi\r |
2455 | jp po,l0ed3h\r | |
2456 | dec a\r | |
2457 | jr nz,l0ec7h\r | |
2458 | pop hl\r | |
2459 | ldir\r | |
2460 | ret\r | |
0c4244e5 | 2461 | l0ed3h:\r |
0716e834 L |
2462 | pop hl\r |
2463 | ret\r | |
0c4244e5 | 2464 | \r |
0c4244e5 | 2465 | sub_0ee6h:\r |
0f361185 | 2466 | ld hl,conbuf\r |
0716e834 | 2467 | call sub_0ef7h\r |
0f361185 | 2468 | ld de,conbuf\r |
0716e834 L |
2469 | and a\r |
2470 | sbc hl,de\r | |
2471 | ld b,l\r | |
2472 | ret nz\r | |
2473 | jp ERROR\r | |
0c4244e5 | 2474 | \r |
c18ba819 L |
2475 | sub_0ef7h: ;from cmd_Q, cmd_Z\r |
2476 | db 0e6h ;and 037h (clear carry)\r | |
2477 | sub_0ef8h: ;from cmd_S\r | |
0716e834 | 2478 | scf\r |
0c4244e5 | 2479 | l0ef9h:\r |
0716e834 L |
2480 | push af\r |
2481 | call next_arg\r | |
0716e834 L |
2482 | cp ''''\r |
2483 | jr z,l0f1eh\r | |
2484 | push hl\r | |
2485 | call expr\r | |
2486 | ld a,l\r | |
2487 | pop hl\r | |
2488 | jr c,l0f42h\r | |
0716e834 L |
2489 | ld (hl),a\r |
2490 | inc hl\r | |
2491 | jr l0f3ah\r | |
0c4244e5 | 2492 | l0f1eh:\r |
0716e834 L |
2493 | inc de\r |
2494 | ld a,(de)\r | |
2495 | cp ''''\r | |
2496 | jr z,l0f2bh\r | |
2497 | or a\r | |
2498 | jr z,l0f42h\r | |
0c4244e5 | 2499 | l0f27h:\r |
0716e834 L |
2500 | ld (hl),a\r |
2501 | inc hl\r | |
2502 | jr l0f1eh\r | |
0c4244e5 | 2503 | l0f2bh:\r |
0716e834 L |
2504 | inc de\r |
2505 | ld a,(de)\r | |
2506 | cp ''''\r | |
2507 | jr z,l0f27h\r | |
2508 | cp '.'\r | |
2509 | jr nz,l0f3ah\r | |
2510 | inc de\r | |
2511 | dec hl\r | |
2512 | set 7,(hl)\r | |
2513 | inc hl\r | |
0c4244e5 | 2514 | l0f3ah:\r |
0716e834 L |
2515 | pop af\r |
2516 | jr nc,l0ef9h\r | |
2517 | ld (last_S),hl\r | |
2518 | jr l0ef9h\r | |
0c4244e5 | 2519 | l0f42h:\r |
0716e834 L |
2520 | pop af\r |
2521 | ret nc\r | |
2522 | ld (last_S),hl\r | |
2523 | ret\r | |
0c4244e5 | 2524 | \r |
9711a430 L |
2525 | ;-------------------------------------------------------------------------------\r |
2526 | ; >>D [startaddr] [endaddr]\r | |
2527 | ; Display memory in hex and ASCII\r | |
2528 | \r | |
0c4244e5 | 2529 | cmd_D:\r |
0716e834 L |
2530 | ld (cmd_rpt),hl\r |
2531 | ld hl,(last_D)\r | |
2532 | ld bc,128\r | |
2533 | call sub_0377h\r | |
2534 | scf\r | |
0c4244e5 | 2535 | sub_0f58h:\r |
0716e834 L |
2536 | push bc\r |
2537 | push de\r | |
2538 | push hl\r | |
d24eec89 | 2539 | push af\r |
0c4244e5 | 2540 | l0f5ch:\r |
35b535f6 | 2541 | call out_hl\r |
c18ba819 | 2542 | call outbl2\r |
0716e834 | 2543 | ld de,0\r |
0c4244e5 | 2544 | l0f68h:\r |
0716e834 L |
2545 | ld a,(hl)\r |
2546 | inc hl\r | |
2547 | call out_hex\r | |
2548 | call outbl\r | |
2549 | dec bc\r | |
2550 | inc e\r | |
2551 | ld a,e\r | |
2552 | cp 010h\r | |
2553 | jr z,l0f80h\r | |
2554 | and 003h\r | |
2555 | call z,outbl\r | |
2556 | ld a,b\r | |
2557 | or c\r | |
2558 | jr nz,l0f68h\r | |
0c4244e5 | 2559 | l0f80h:\r |
0716e834 L |
2560 | call outbl\r |
2561 | and a\r | |
2562 | sbc hl,de\r | |
0c4244e5 | 2563 | l0f86h:\r |
0716e834 L |
2564 | ld a,(hl)\r |
2565 | call sub_0fa3h\r | |
2566 | call outchar\r | |
2567 | inc hl\r | |
2568 | dec e\r | |
2569 | jr nz,l0f86h\r | |
d24eec89 L |
2570 | pop af\r |
2571 | push af\r | |
0716e834 L |
2572 | jr nc,l0f97h\r |
2573 | ld (last_D),hl\r | |
0c4244e5 | 2574 | l0f97h:\r |
0716e834 L |
2575 | call crlf\r |
2576 | ld a,b\r | |
2577 | or c\r | |
2578 | jr nz,l0f5ch\r | |
d24eec89 | 2579 | pop af\r |
0716e834 L |
2580 | pop hl\r |
2581 | pop de\r | |
2582 | pop bc\r | |
2583 | ret\r | |
0c4244e5 L |
2584 | \r |
2585 | sub_0fa3h:\r | |
0716e834 L |
2586 | and 07fh\r |
2587 | cp 07fh\r | |
2588 | jr z,l0fach\r | |
2589 | cp ' '\r | |
2590 | ret nc\r | |
0c4244e5 | 2591 | l0fach:\r |
0716e834 L |
2592 | ld a,'.'\r |
2593 | ret\r | |
0c4244e5 | 2594 | \r |
9711a430 L |
2595 | ;-------------------------------------------------------------------------------\r |
2596 | ; > Fcommandline\r | |
2597 | ; specifiy filenames and command line\r | |
2598 | \r | |
25e453a7 | 2599 | ;cmd_F:\r |
0c4244e5 | 2600 | \r |
9711a430 | 2601 | ;-------------------------------------------------------------------------------\r |
25e453a7 L |
2602 | ; > R [displacement]\r |
2603 | ; Read Intel Hex File from console [add displacement]\r | |
9711a430 | 2604 | \r |
25e453a7 L |
2605 | cmd_R:\r |
2606 | ld hl,0\r | |
2607 | call get_lastarg_def ;get offset from command line\r | |
2608 | push hl\r | |
2609 | ld hl,0\r | |
2610 | ld (high_load),hl\r | |
2611 | w_recstart:\r | |
2612 | call i.getchar\r | |
2613 | jr z,rdhex_done\r | |
2614 | cp ':'\r | |
2615 | jr nz,w_recstart\r | |
2616 | ld c,0 ;init checksum\r | |
2617 | call i.gethexbyte ;record len\r | |
2618 | ld b,a\r | |
2619 | call i.gethexbyte ;address high\r | |
2620 | ld h,a\r | |
2621 | call i.gethexbyte ;address low\r | |
2622 | ld l,a\r | |
2623 | call i.gethexbyte ;record type (ignored)\r | |
2624 | ld a,b\r | |
2625 | and a ;record len == 0?\r | |
2626 | jr z,rdhex_done\r | |
2627 | l16c6h:\r | |
2628 | call i.gethexbyte\r | |
2629 | pop de ;offset\r | |
c788b3b7 | 2630 | push de\r |
25e453a7 | 2631 | push hl\r |
c788b3b7 | 2632 | add hl,de\r |
25e453a7 L |
2633 | call i.storebyte\r |
2634 | pop hl\r | |
c788b3b7 | 2635 | inc hl\r |
25e453a7 L |
2636 | djnz l16c6h ;repeat for record len\r |
2637 | call i.gethexbyte ;checksum\r | |
2638 | ld a,c\r | |
2639 | and a\r | |
b270cd3a | 2640 | jr nz,error2 ;exit if checksum error\r |
25e453a7 | 2641 | jr w_recstart ;next record\r |
b270cd3a | 2642 | \r |
25e453a7 L |
2643 | rdhex_done:\r |
2644 | pop hl\r | |
2645 | call i.gethexbyte\r | |
2646 | jp p_max_high\r | |
9711a430 | 2647 | \r |
25e453a7 L |
2648 | i.gethexbyte:\r |
2649 | call sub_16f6h\r | |
2650 | rlca\r | |
2651 | rlca\r | |
2652 | rlca\r | |
2653 | rlca\r | |
2654 | ld d,a\r | |
2655 | call sub_16f6h\r | |
2656 | add a,d\r | |
2657 | ld d,a\r | |
2658 | add a,c\r | |
2659 | ld c,a\r | |
2660 | ld a,d\r | |
c788b3b7 | 2661 | ret\r |
0c4244e5 | 2662 | \r |
25e453a7 L |
2663 | sub_16f6h:\r |
2664 | call i.getchar\r | |
2665 | jr z,error2\r | |
2666 | call hex_digit\r | |
2667 | ret nc\r | |
2668 | error2:\r | |
2669 | jp ERROR\r | |
0c4244e5 | 2670 | \r |
25e453a7 | 2671 | i.getchar:\r |
b5b85b4c | 2672 | call incharw\r |
25e453a7 | 2673 | cp 01ah\r |
0716e834 | 2674 | ret\r |
0c4244e5 | 2675 | \r |
25e453a7 | 2676 | i.storebyte:\r |
0716e834 L |
2677 | push af\r |
2678 | push de\r | |
92315951 | 2679 | ld de,ddtz_base ;don't load over ddtz\r |
0716e834 | 2680 | call cp_hl_de\r |
92315951 L |
2681 | jr nc,ist_1\r |
2682 | \r | |
fb224211 | 2683 | ld de,(bitmap_end)\r |
0716e834 | 2684 | call cp_hl_de\r |
30673dea | 2685 | jr nc,error2\r |
92315951 | 2686 | ist_1:\r |
0716e834 L |
2687 | ld de,(high_load)\r |
2688 | call cp_hl_de\r | |
2689 | jr c,l1157h\r | |
2690 | ld (high_load),hl\r | |
0c4244e5 | 2691 | l1157h:\r |
0716e834 L |
2692 | ld de,(max_load)\r |
2693 | call cp_hl_de\r | |
2694 | jr c,l1163h\r | |
2695 | ld (max_load),hl\r | |
0c4244e5 | 2696 | l1163h:\r |
0716e834 L |
2697 | pop de\r |
2698 | pop af\r | |
25e453a7 | 2699 | ld (hl),a ;store byte\r |
0716e834 | 2700 | ret\r |
0c4244e5 | 2701 | \r |
9711a430 | 2702 | ;-------------------------------------------------------------------------------\r |
9711a430 | 2703 | \r |
25a690e5 | 2704 | p_max_high0:\r |
d1f2492e | 2705 | call assert_eol\r |
25a690e5 | 2706 | p_max_high:\r |
d1f2492e | 2707 | call pstr_inl\r |
0c4244e5 | 2708 | DC 'High = '\r |
d1f2492e L |
2709 | ld hl,(high_load)\r |
2710 | call out_hl\r | |
2711 | call pstr_inl\r | |
0c4244e5 | 2712 | DC ' Max = '\r |
d1f2492e L |
2713 | ld hl,(max_load)\r |
2714 | call out_hl\r | |
3a4deef9 L |
2715 | call pstr_inl\r |
2716 | DC ' Top = '\r | |
0f35ae66 | 2717 | ld hl,ddtz_base-1\r |
3a4deef9 | 2718 | call out_hl\r |
d1f2492e | 2719 | jp crlf\r |
0c4244e5 | 2720 | \r |
9711a430 L |
2721 | ;-------------------------------------------------------------------------------\r |
2722 | ; > Wstartaddr endaddr\r | |
2723 | ; Write a file to disk\r | |
2724 | \r | |
25e453a7 | 2725 | ;cmd_W:\r |
0c4244e5 | 2726 | \r |
9711a430 L |
2727 | ;-------------------------------------------------------------------------------\r |
2728 | ; > A [startaddr]\r | |
2729 | ; Assemble Zilog Z180 mnemonics\r | |
2730 | \r | |
786e99f6 | 2731 | ;cmd_A:\r |
ac35765e | 2732 | \r |
9711a430 L |
2733 | ;-------------------------------------------------------------------------------\r |
2734 | ; >>L [startaddr] [endaddr]\r | |
2735 | ; List disassembled code\r | |
2736 | \r | |
0c4244e5 | 2737 | cmd_L:\r |
0716e834 L |
2738 | ld (cmd_rpt),hl\r |
2739 | call expr\r | |
2740 | jr nc,l18dbh\r | |
2741 | ld hl,(last_L)\r | |
0c4244e5 | 2742 | l18dbh:\r |
0716e834 L |
2743 | call next_arg\r |
2744 | call get_range\r | |
2745 | jr nc,l1905h\r | |
2746 | call assert_eol\r | |
2747 | ld b,16\r | |
0c4244e5 | 2748 | l18ebh:\r |
0716e834 | 2749 | push bc\r |
85b57f2a | 2750 | call cmdl_p_line\r |
0716e834 L |
2751 | pop bc\r |
2752 | djnz l18ebh\r | |
2753 | ret\r | |
85b57f2a | 2754 | \r |
0c4244e5 | 2755 | l1905h:\r |
0716e834 | 2756 | call assert_eol\r |
85b57f2a L |
2757 | ld d,h\r |
2758 | ld e,l\r | |
2759 | add hl,bc\r | |
2760 | ex de,hl\r | |
0c4244e5 | 2761 | l190fh:\r |
85b57f2a L |
2762 | push de\r |
2763 | call cmdl_p_line\r | |
2764 | pop de\r | |
2765 | call cp_hl_de\r | |
2766 | jr c,l190fh\r | |
2767 | ret\r | |
2768 | \r | |
9711a430 L |
2769 | ;-------------------------------------------------------------------------------\r |
2770 | \r | |
85b57f2a L |
2771 | cmdl_p_line:\r |
2772 | push hl\r | |
35b535f6 | 2773 | call out_hl\r |
a942c6d5 | 2774 | call outbl2\r |
0716e834 L |
2775 | sub a\r |
2776 | ld (con_col),a\r | |
85b57f2a L |
2777 | push hl\r |
2778 | pop iy\r | |
0716e834 | 2779 | call p_disas_instr\r |
6bc52899 L |
2780 | call crlf\r |
2781 | pop hl\r | |
2782 | ld c,b\r | |
2783 | ld b,0\r | |
2784 | add hl,bc\r | |
2785 | ld (last_L),hl\r | |
35b535f6 | 2786 | ret\r |
0c4244e5 | 2787 | \r |
9711a430 L |
2788 | ;-------------------------------------------------------------------------------\r |
2789 | \r | |
25a690e5 | 2790 | p_disas_instr:\r |
0716e834 L |
2791 | call disas_get_instrlen\r |
2792 | jr nc,l197fh\r | |
85b57f2a L |
2793 | push bc\r |
2794 | ld a,(con_col)\r | |
2795 | add a,5\r | |
2796 | ld c,a\r | |
b270cd3a | 2797 | call pstr ;print mnemonic\r |
08d0db09 | 2798 | call p_goto_col\r |
2c2c7492 | 2799 | call pr_instr_args ;print arguments\r |
0716e834 | 2800 | pop bc\r |
0716e834 L |
2801 | scf\r |
2802 | ret\r | |
0c4244e5 L |
2803 | \r |
2804 | l197fh:\r | |
d1f2492e | 2805 | call pstr_inl\r |
0c4244e5 | 2806 | DC '???'\r |
85b57f2a | 2807 | ld b,1\r |
d1f2492e L |
2808 | sub a\r |
2809 | ret\r | |
0c4244e5 L |
2810 | \r |
2811 | disas_get_instrlen:\r | |
0716e834 L |
2812 | sub a\r |
2813 | ld (isprefix_ixiy),a\r | |
2814 | ld a,(iy+000h)\r | |
2815 | cp 0edh\r | |
100f8242 | 2816 | jr z,disas_pfx.ED\r |
0716e834 L |
2817 | cp 0ddh\r |
2818 | jr z,l19abh\r | |
2819 | cp 0fdh\r | |
2820 | jr z,l19afh\r | |
0c4244e5 | 2821 | sub_19a0h:\r |
0716e834 L |
2822 | ld a,(iy+000h)\r |
2823 | cp 0cbh\r | |
100f8242 L |
2824 | jr z,disas_pfx.CB\r |
2825 | jr disas_nopfx\r | |
0c4244e5 | 2826 | l19abh:\r |
0716e834 L |
2827 | ld a,1\r |
2828 | jr l19b1h\r | |
0c4244e5 | 2829 | l19afh:\r |
0716e834 | 2830 | ld a,2\r |
0c4244e5 | 2831 | l19b1h:\r |
0716e834 L |
2832 | ld (isprefix_ixiy),a\r |
2833 | call disas_pfx.DDFD\r | |
2834 | ret nc\r | |
2835 | push bc\r | |
2836 | call sub_19a0h\r | |
2837 | pop af\r | |
2838 | add a,b\r | |
2839 | ld b,a\r | |
2840 | scf\r | |
2841 | ret\r | |
0c4244e5 | 2842 | \r |
9711a430 L |
2843 | ;-------------------------------------------------------------------------------\r |
2844 | \r | |
100f8242 L |
2845 | disas_nopfx:\r |
2846 | ld hl,b_1b54_start ;2 byte opcodes\r | |
2847 | call lookup_op_arg\r | |
2848 | ld b,2\r | |
2849 | ret c\r | |
2850 | ld hl,b_1ab6_start ;1 byte opcodes (no parameters)\r | |
2851 | call lookup_op\r | |
2852 | ld b,1\r | |
2853 | ret c\r | |
2854 | ld hl,b_1ad1_start ;1 byte opcodes\r | |
2855 | call lookup_op_arg\r | |
2856 | ld b,1\r | |
2857 | ret c\r | |
2858 | ld hl,b_1b9b_start ;3 byte opcodes\r | |
2859 | call lookup_op_arg\r | |
2860 | ld b,3\r | |
2861 | ret\r | |
2862 | \r | |
2863 | ;-------------------------------------------------------------------------------\r | |
2864 | \r | |
2865 | disas_pfx.ED:\r | |
2866 | inc iy\r | |
0f82c444 L |
2867 | ld hl,l228bh\r |
2868 | call lookup_op_arg\r | |
2869 | ld b,3\r | |
2870 | ret c\r | |
2871 | ld hl,b_1c40_start\r | |
2872 | call lookup_op_arg\r | |
2873 | ld b,4\r | |
2874 | ret c\r | |
2875 | \r | |
100f8242 L |
2876 | ld hl,b_1bc9_start ;1 byte opcode, no arguments\r |
2877 | call lookup_op\r | |
0f82c444 L |
2878 | jr c,da_ed1\r |
2879 | \r | |
100f8242 L |
2880 | ld hl,b_1bf4_start\r |
2881 | call lookup_op_arg\r | |
0f82c444 | 2882 | ret nc\r |
201101b3 L |
2883 | \r |
2884 | ld a,e\r | |
2885 | cp a_noarg\r | |
2886 | jr nz,da_ed0\r | |
2887 | ld c,(iy+0)\r | |
2888 | ld a,c\r | |
2889 | rra\r | |
2890 | and 0ch\r | |
2891 | ld b,a\r | |
2892 | ld a,c\r | |
2893 | and 03h\r | |
2894 | call str_sel_ab\r | |
100f8242 | 2895 | \r |
201101b3 L |
2896 | da_ed0:\r |
2897 | scf\r | |
201101b3 | 2898 | da_ed1:\r |
0f82c444 | 2899 | ld b,2\r |
100f8242 L |
2900 | ret\r |
2901 | \r | |
2902 | ;-------------------------------------------------------------------------------\r | |
2903 | \r | |
2904 | disas_pfx.CB:\r | |
2905 | push iy\r | |
2906 | inc iy\r | |
2907 | ld a,(isprefix_ixiy)\r | |
2908 | and a\r | |
2909 | jr z,l1a42h\r | |
2910 | inc iy\r | |
2911 | l1a42h:\r | |
2912 | ld hl,b_1c55_start\r | |
2913 | call lookup_op_arg\r | |
2914 | pop iy\r | |
2915 | ld b,2\r | |
2916 | ret\r | |
2917 | \r | |
2918 | ;-------------------------------------------------------------------------------\r | |
2919 | \r | |
0c4244e5 | 2920 | disas_pfx.DDFD:\r |
0716e834 L |
2921 | inc iy\r |
2922 | ld hl,b_19ef_start\r | |
2923 | call test_DDFD\r | |
2924 | ld b,002h\r | |
2925 | ret c\r | |
2926 | ld hl,l1a0ah\r | |
2927 | call test_DDFD\r | |
2928 | ld b,001h\r | |
2929 | ret c\r | |
2930 | ld a,(iy+000h)\r | |
2931 | cp 0cbh\r | |
2932 | jr nz,l19edh\r | |
2933 | ld a,(iy+002h)\r | |
2934 | cp 036h\r | |
2935 | ret z\r | |
2936 | and 007h\r | |
2937 | cp 006h\r | |
2938 | jr nz,l19edh\r | |
2939 | ld b,002h\r | |
2940 | scf\r | |
2941 | ret\r | |
0c4244e5 | 2942 | l19edh:\r |
0716e834 L |
2943 | and a\r |
2944 | ret\r | |
0c4244e5 | 2945 | \r |
9711a430 | 2946 | ;-------------------------------------------------------------------------------\r |
eb982d46 | 2947 | ; DD/FD 3 byte (ix+d)/(iy+d)\r |
0c4244e5 | 2948 | b_19ef_start:\r |
0716e834 L |
2949 | db 034h\r |
2950 | db 035h\r | |
2951 | db 036h\r | |
2952 | db 046h\r | |
2953 | db 04eh\r | |
2954 | db 056h\r | |
2955 | db 05eh\r | |
2956 | db 066h\r | |
2957 | db 06eh\r | |
2958 | db 070h\r | |
2959 | db 071h\r | |
2960 | db 072h\r | |
2961 | db 073h\r | |
2962 | db 074h\r | |
2963 | db 075h\r | |
2964 | db 077h\r | |
2965 | db 07eh\r | |
2966 | db 086h\r | |
2967 | db 08eh\r | |
2968 | db 096h\r | |
2969 | db 09eh\r | |
2970 | db 0a6h\r | |
2971 | db 0aeh\r | |
2972 | db 0b6h\r | |
2973 | db 0beh\r | |
2974 | db 0\r | |
0c4244e5 | 2975 | \r |
eb982d46 | 2976 | ; DD/FD 2 byte\r |
0c4244e5 | 2977 | l1a0ah:\r |
0716e834 L |
2978 | db 009h\r |
2979 | db 019h\r | |
2980 | db 021h\r | |
2981 | db 022h\r | |
2982 | db 023h\r | |
2983 | db 029h\r | |
2984 | db 02ah\r | |
2985 | db 02bh\r | |
2986 | db 039h\r | |
2987 | db 0e1h\r | |
2988 | db 0e3h\r | |
2989 | db 0e5h\r | |
2990 | db 0e9h\r | |
2991 | db 0f9h\r | |
2992 | db 0\r | |
0c4244e5 | 2993 | \r |
9711a430 L |
2994 | ;-------------------------------------------------------------------------------\r |
2995 | \r | |
0f82c444 L |
2996 | test_DDFD:\r |
2997 | ld a,(hl)\r | |
2998 | and a\r | |
2999 | ret z\r | |
3000 | inc hl\r | |
3001 | cp (iy+000h)\r | |
3002 | jr nz,test_DDFD\r | |
3003 | scf\r | |
3004 | ret\r | |
3005 | \r | |
100f8242 | 3006 | lookup_op:\r |
0716e834 | 3007 | ld a,(hl)\r |
201101b3 | 3008 | inc hl\r |
0716e834 L |
3009 | cp 0ffh\r |
3010 | ret z\r | |
3011 | cp (iy+000h)\r | |
3012 | jr z,l1a7fh\r | |
3013 | inc hl\r | |
100f8242 | 3014 | jr lookup_op\r |
0c4244e5 | 3015 | l1a7fh:\r |
8c416d5a | 3016 | ld b,(hl)\r |
201101b3 | 3017 | ld e,a_noarg\r |
cab0d80a L |
3018 | jr get_mnemonic\r |
3019 | \r | |
100f8242 | 3020 | lookup_op_arg:\r |
0f82c444 L |
3021 | call lookup_branch_op\r |
3022 | ret nc\r | |
3023 | ld a,e\r | |
3024 | ld e,d\r | |
3025 | cp a,0ffh\r | |
2c2c7492 | 3026 | ret z ;carry clear\r |
0f82c444 L |
3027 | ld b,a\r |
3028 | \r | |
cab0d80a | 3029 | get_mnemonic:\r |
0716e834 | 3030 | ld hl,t_MNEMONICS\r |
8c416d5a L |
3031 | bit 7,b\r |
3032 | jr z,get_m1\r | |
3033 | res 7,b\r | |
3034 | ld a,(iy+000h)\r | |
3035 | rra\r | |
3036 | rra\r | |
3037 | rra\r | |
3038 | and 07h\r | |
201101b3 | 3039 | str_sel_ab:\r |
8c416d5a L |
3040 | add b\r |
3041 | ld b,a\r | |
3042 | get_m1:\r | |
3043 | call str_sel\r | |
0716e834 L |
3044 | scf\r |
3045 | ret\r | |
0c4244e5 | 3046 | \r |
2c2c7492 | 3047 | lookup_branch_op ;TODO\r |
0f82c444 L |
3048 | ld a,(hl)\r |
3049 | and a\r | |
3050 | ret z\r | |
2c2c7492 | 3051 | inc hl\r |
0f82c444 | 3052 | and (iy+000h)\r |
2c2c7492 | 3053 | cp (hl)\r |
2c2c7492 | 3054 | inc hl\r |
912247b3 | 3055 | jr z,l1aa8_br\r |
2c2c7492 L |
3056 | inc hl\r |
3057 | inc hl\r | |
0f82c444 | 3058 | jr lookup_branch_op\r |
2c2c7492 L |
3059 | \r |
3060 | l1aa8_br:\r | |
2c2c7492 L |
3061 | ld e,(hl)\r |
3062 | inc hl\r | |
3063 | ld d,(hl)\r | |
3064 | scf\r | |
3065 | ret\r | |
3066 | \r | |
9711a430 | 3067 | ;-------------------------------------------------------------------------------\r |
b0b4005c L |
3068 | ; 1 byte opcodes (no parameters)\r |
3069 | ; Format: db opcode, t_MNEMONICS-index\r | |
0c4244e5 | 3070 | b_1ab6_start:\r |
8c416d5a L |
3071 | db 076h,i_HALT ;halt\r |
3072 | db 0d9h,i_EXX ;exx\r | |
3073 | db 0f3h,i_DI ;di\r | |
3074 | db 0fbh,i_EI ;ei\r | |
3075 | db 000h,i_NOP ;nop\r | |
201101b3 L |
3076 | ; db 007h,i_RLCA ;rlca\r |
3077 | ; db 00fh,i_RRCA ;rrca\r | |
3078 | ; db 017h,i_RLA ;rla\r | |
3079 | ; db 01fh,i_RRA ;rra\r | |
3080 | ; db 027h,i_DAA ;daa\r | |
3081 | ; db 02fh,i_CPL ;cpl\r | |
3082 | ; db 037h,i_SCF ;scf\r | |
3083 | ; db 03fh,i_CCF ;ccf\r | |
8c416d5a | 3084 | db 0c9h,i_RET ;ret\r |
b0b4005c L |
3085 | db 0ffh\r |
3086 | \r | |
0c4244e5 | 3087 | \r |
cab0d80a | 3088 | ; 1 byte opcodes\r |
b0b4005c | 3089 | ; Format: db mask, match, t_MNEMONICS-index\r |
78c98259 | 3090 | ; dw argument formating function\r |
0c4244e5 | 3091 | b_1ad1_start:\r |
8c416d5a | 3092 | db 0c0h,040h,i_LD ;ld r[y],r[z]\r |
2c2c7492 | 3093 | db a_rr\r |
201101b3 L |
3094 | \r |
3095 | db 0c0h,080h,i_ADD+080h ;add a,r[z]\r | |
2c2c7492 | 3096 | db a_r\r |
201101b3 L |
3097 | \r |
3098 | ; db 0f8h,080h,i_ADD ;add a,r[z]\r | |
3099 | ; db a_ar\r | |
3100 | ; db 0f8h,088h,i_ADC ;adc a,r[z]\r | |
3101 | ; db a_ar\r | |
3102 | ; db 0f8h,090h,i_SUB ;sub r[z]\r | |
3103 | ; db a_r\r | |
3104 | ; db 0f8h,098h,i_SBC ;sbc a,r[z]\r | |
3105 | ; db a_ar\r | |
3106 | ; db 0f8h,0a0h,i_AND ;and r[z]\r | |
3107 | ; db a_r\r | |
3108 | ; db 0f8h,0a8h,i_XOR ;xor r[z]\r | |
3109 | ; db a_r\r | |
3110 | ; db 0f8h,0b0h,i_OR ;or r[z]\r | |
3111 | ; db a_r\r | |
3112 | ; db 0f8h,0b8h,i_CP ;cp r[z]\r | |
3113 | ; db a_r\r | |
3114 | \r | |
8c416d5a | 3115 | db 0c7h,0c0h,i_RET ;ret cc\r |
2c2c7492 | 3116 | db a_cc\r |
8c416d5a | 3117 | db 0c7h,0c7h,i_RST ;rst\r |
2c2c7492 | 3118 | db a_rst\r |
8c416d5a | 3119 | db 0cfh,0c1h,i_POP ;pop rp2\r |
2c2c7492 | 3120 | db a_p2\r |
8c416d5a | 3121 | db 0cfh,0c5h,i_PUSH ;push rp2\r |
2c2c7492 | 3122 | db a_p2\r |
8c416d5a | 3123 | db 0ffh,0e3h,i_EX ;ex (sp),hl\r |
2c2c7492 | 3124 | db a_esphl\r |
8c416d5a | 3125 | db 0ffh,0e9h,i_JP ;jp (hl)\r |
2c2c7492 | 3126 | db a_hl\r |
8c416d5a | 3127 | db 0ffh,0ebh,i_EX ;ex de,hl\r |
2c2c7492 | 3128 | db a_dehl\r |
8c416d5a | 3129 | db 0ffh,0f9h,i_LD ;ld sp,hl\r |
2c2c7492 | 3130 | db a_lsphl\r |
8c416d5a | 3131 | db 0cfh,003h,i_INC ;inc rp\r |
2c2c7492 | 3132 | db a_p\r |
8c416d5a | 3133 | db 0cfh,00bh,i_DEC ;dec rp\r |
2c2c7492 | 3134 | db a_p\r |
8c416d5a | 3135 | db 0c7h,004h,i_INC ;inc r[y]\r |
2c2c7492 | 3136 | db a_ry\r |
8c416d5a | 3137 | db 0c7h,005h,i_DEC ;dec r[y]\r |
2c2c7492 | 3138 | db a_ry\r |
8c416d5a | 3139 | db 0ffh,008h,i_EX ;ex af,af'\r |
2c2c7492 | 3140 | db a_eaf\r |
8c416d5a | 3141 | db 0cfh,009h,i_ADD ;add hl,rp\r |
2c2c7492 | 3142 | db a_hlp\r |
8c416d5a | 3143 | db 0efh,002h,i_LD ;ld (rp),a ;rp=bc,de\r |
2c2c7492 | 3144 | db a_pa\r |
8c416d5a | 3145 | db 0efh,00ah,i_LD ;ld a,(rp) ;rp=bc,de\r |
2c2c7492 | 3146 | db a_ap\r |
201101b3 L |
3147 | \r |
3148 | db 0c7h,007h,i_RLCA+080h;rlca\r | |
3149 | db a_noarg\r | |
3150 | \r | |
b0b4005c | 3151 | db 0\r |
0c4244e5 | 3152 | \r |
2c2c7492 | 3153 | ; 2 byte opcodes\r |
0c4244e5 | 3154 | b_1b54_start:\r |
8c416d5a | 3155 | db 0c7h,006h,i_LD ;ld r[y],nn\r |
2c2c7492 | 3156 | db a_rn\r |
201101b3 L |
3157 | \r |
3158 | db 0c7h,0c6h,i_ADD+080h ;add a,r[z]\r | |
2c2c7492 | 3159 | db a_n\r |
201101b3 L |
3160 | \r |
3161 | ; db 0ffh,0c6h,i_ADD ;add a,nn\r | |
3162 | ; db a_an\r | |
3163 | ; db 0ffh,0ceh,i_ADC ;adc a,nn\r | |
3164 | ; db a_an\r | |
3165 | ; db 0ffh,0d6h,i_SUB ;sub nn\r | |
3166 | ; db a_n\r | |
3167 | ; db 0ffh,0deh,i_SBC ;sbc a,nn\r | |
3168 | ; db a_an\r | |
3169 | ; db 0ffh,0e6h,i_AND ;and nn\r | |
3170 | ; db a_n\r | |
3171 | ; db 0ffh,0eeh,i_XOR ;xor nn\r | |
3172 | ; db a_n\r | |
3173 | ; db 0ffh,0f6h,i_OR ;or nn\r | |
3174 | ; db a_n\r | |
3175 | ; db 0ffh,0feh,i_CP ;cp nn\r | |
3176 | ; db a_n\r | |
3177 | \r | |
8c416d5a | 3178 | db 0ffh,010h,i_DJNZ ;djnz\r |
2c2c7492 | 3179 | db a_j\r |
8c416d5a | 3180 | db 0ffh,018h,i_JR ;jr\r |
2c2c7492 | 3181 | db a_j\r |
8c416d5a | 3182 | db 0e7h,020h,i_JR ;jr cc,\r |
2c2c7492 | 3183 | db a_ccj\r |
8c416d5a | 3184 | db 0ffh,0d3h,i_OUT ;out (nn),a\r |
2c2c7492 | 3185 | db a_ma\r |
8c416d5a | 3186 | db 0ffh,0dbh,i_IN ;in a,(nn)\r |
2c2c7492 | 3187 | db a_am\r |
b0b4005c | 3188 | db 0\r |
0c4244e5 | 3189 | \r |
cab0d80a | 3190 | ; 3 byte opcodes\r |
0c4244e5 | 3191 | b_1b9b_start:\r |
8c416d5a | 3192 | db 0c7h,0c2h,i_JP ;jp cc,mn\r |
2c2c7492 | 3193 | db a_ccnn\r |
8c416d5a | 3194 | db 0c7h,0c4h,i_CALL ;call cc,mn\r |
2c2c7492 | 3195 | db a_ccnn\r |
8c416d5a | 3196 | db 0cfh,001h,i_LD ;ld ww,mn\r |
2c2c7492 | 3197 | db a_rnn\r |
8c416d5a | 3198 | db 0ffh,0c3h,i_JP ;jp mn\r |
2c2c7492 | 3199 | db a_nn\r |
8c416d5a | 3200 | db 0ffh,0cdh,i_CALL ;call mn\r |
2c2c7492 | 3201 | db a_nn\r |
8c416d5a | 3202 | db 0ffh,022h,i_LD ;ld (mn),hl\r |
2c2c7492 | 3203 | db a_mmhl\r |
8c416d5a | 3204 | db 0ffh,02ah,i_LD ;ld hl,(mn)\r |
2c2c7492 | 3205 | db a_hlmm\r |
8c416d5a | 3206 | db 0ffh,032h,i_LD ;ld (mn),a\r |
2c2c7492 | 3207 | db a_mma\r |
8c416d5a | 3208 | db 0ffh,03ah,i_LD ;ld a,(mn)\r |
2c2c7492 | 3209 | db a_amm\r |
b0b4005c L |
3210 | db 0\r |
3211 | \r | |
3212 | ; Prefix ED + 1 byte opcode, no arguments\r | |
3213 | ; Format: opcode, t_MNEMONICS index\r | |
0c4244e5 | 3214 | b_1bc9_start:\r |
8c416d5a L |
3215 | db 044h,i_NEG ;neg\r |
3216 | db 045h,i_RETN ;retn\r | |
3217 | db 04dh,i_RETI ;reti\r | |
3218 | db 067h,i_RRD ;rrd\r | |
3219 | db 06fh,i_RLD ;rld\r | |
201101b3 L |
3220 | ; db 0a0h,i_LDI ;ldi\r |
3221 | ; db 0a1h,i_CPI ;cpi\r | |
3222 | ; db 0a2h,i_INI ;ini\r | |
3223 | ; db 0a3h,i_OUTI ;outi\r | |
3224 | ; db 0a8h,i_LDD ;ldd\r | |
3225 | ; db 0a9h,i_CPD ;cpd\r | |
3226 | ; db 0aah,i_IND ;ind\r | |
3227 | ; db 0abh,i_OUTD ;outd\r | |
3228 | ; db 0b0h,i_LDIR ;ldir\r | |
3229 | ; db 0b1h,i_CPIR ;cpir\r | |
3230 | ; db 0b2h,i_INIR ;inir\r | |
3231 | ; db 0b3h,i_OTIR ;otir\r | |
3232 | ; db 0b8h,i_LDDR ;lddr\r | |
3233 | ; db 0b9h,i_CPDR ;cpdr\r | |
3234 | ; db 0bah,i_INDR ;indr\r | |
3235 | ; db 0bbh,i_OTDR ;otdr\r | |
8c416d5a L |
3236 | db 08bh,i_OTDM ;otdm\r |
3237 | db 09bh,i_OTDMR ;otdmr\r | |
3238 | db 083h,i_OTIM ;otim\r | |
3239 | db 093h,i_OTIMR ;otimr\r | |
3240 | db 076h,i_SLP ;slp\r | |
b0b4005c | 3241 | db 0ffh ;<end mark>\r |
0c4244e5 L |
3242 | \r |
3243 | b_1bf4_start:\r | |
201101b3 L |
3244 | db 0e4h,0a0h,i_LDI\r |
3245 | db a_noarg\r | |
8c416d5a | 3246 | db 0ffh,070h,i_IN ;in (c) ;\r |
2c2c7492 | 3247 | db a_c\r |
8c416d5a | 3248 | db 0c7h,040h,i_IN ;in r,(c) ;r=b,c,d,e,h,l,a\r |
2c2c7492 | 3249 | db a_rc\r |
25ba7c19 | 3250 | db 0ffh,071h,0ffh ;out (c),0 ;\r |
2c2c7492 | 3251 | db a_cr\r |
8c416d5a | 3252 | db 0c7h,041h,i_OUT ;out (c),r ;r=b,c,d,e,h,l,a\r |
2c2c7492 | 3253 | db a_cr\r |
8c416d5a | 3254 | db 0cfh,042h,i_SBC ;sbc hl,rp\r |
2c2c7492 | 3255 | db a_hlp\r |
8c416d5a | 3256 | db 0cfh,04ah,i_ADC ;adc hl,rp\r |
2c2c7492 | 3257 | db a_hlp\r |
8c416d5a | 3258 | db 0ffh,046h,i_IM ;im 0\r |
2c2c7492 | 3259 | db a_im0\r |
8c416d5a | 3260 | db 0ffh,056h,i_IM ;im 1\r |
2c2c7492 | 3261 | db a_im1\r |
8c416d5a | 3262 | db 0ffh,05eh,i_IM ;im 2\r |
2c2c7492 | 3263 | db a_im2\r |
8c416d5a | 3264 | db 0e7h,047h,i_LD ;ld i,a ... ld a,r\r |
2c2c7492 | 3265 | db a_ai\r |
8c416d5a | 3266 | db 0cfh,04ch,i_MLT ;mlt rr\r |
2c2c7492 | 3267 | db a_p\r |
8c416d5a | 3268 | db 0c7h,004h,i_TST ;tst r\r |
2c2c7492 | 3269 | db a_ry\r |
b0b4005c L |
3270 | db 0\r |
3271 | \r | |
3272 | l228bh:\r | |
8c416d5a | 3273 | db 0ffh,030h,i_IN0 ;in0 (m)\r |
2c2c7492 | 3274 | db a_m\r |
8c416d5a | 3275 | db 0c7h,000h,i_IN0 ;in0 r,(m) ;r=b,c,d,e,h,l,a\r |
2c2c7492 | 3276 | db a_rm\r |
25ba7c19 | 3277 | db 0ffh,031h,0ffh ;out0 (m),0\r |
2c2c7492 | 3278 | db a_mr\r |
8c416d5a | 3279 | db 0c7h,001h,i_OUT0 ;out0 (m),r ;r=b,c,d,e\r |
2c2c7492 | 3280 | db a_mr\r |
8c416d5a | 3281 | db 0ffh,064h,i_TST ;tst m\r |
2c2c7492 | 3282 | db a_n\r |
8c416d5a | 3283 | db 0ffh,074h,i_TSTIO ;tstio m\r |
2c2c7492 | 3284 | db a_n\r |
b0b4005c | 3285 | db 0\r |
0c4244e5 | 3286 | \r |
78c98259 L |
3287 | ; Prefix ED + 1 byte opcode + 2 byte address\r |
3288 | ; Format: db mask, match, t_MNEMONICS-index\r | |
3289 | ; dw argument formating function\r | |
0c4244e5 | 3290 | b_1c40_start:\r |
8c416d5a | 3291 | db 0cfh,043h,i_LD ;ld (mn),ww ;ww=bc,de,hl,sp\r |
2c2c7492 | 3292 | db a_mmp\r |
8c416d5a | 3293 | db 0cfh,04bh,i_LD ;ld ww,(mn) ;ww=bc,de,hl,sp\r |
2c2c7492 | 3294 | db a_pmm\r |
b0b4005c L |
3295 | db 0\r |
3296 | \r | |
3297 | ; CB\r | |
0c4244e5 | 3298 | b_1c55_start:\r |
201101b3 | 3299 | db 0c0h,000h,i_RLC+080h ;rlc g\r |
2c2c7492 | 3300 | db a_cbr\r |
201101b3 L |
3301 | \r |
3302 | ; db 0f8h,000h,i_RLC ;rlc g\r | |
3303 | ; db a_cbr\r | |
3304 | ; db 0f8h,008h,i_RRC ;rrc g\r | |
3305 | ; db a_cbr\r | |
3306 | ; db 0f8h,010h,i_RL ;rl g\r | |
3307 | ; db a_cbr\r | |
3308 | ; db 0f8h,018h,i_RR ;rr g\r | |
3309 | ; db a_cbr\r | |
3310 | ; db 0f8h,020h,i_SLA ;sla g\r | |
3311 | ; db a_cbr\r | |
3312 | ; db 0f8h,028h,i_SRA ;sra g\r | |
3313 | ; db a_cbr\r | |
3314 | ; db 0f8h,038h,i_SRL ;srl g\r | |
3315 | ; db a_cbr\r | |
8c416d5a | 3316 | db 0c0h,040h,i_BIT ;bit b,g\r |
2c2c7492 | 3317 | db a_bcbr\r |
8c416d5a | 3318 | db 0c0h,080h,i_RES ;res b,g\r |
2c2c7492 | 3319 | db a_bcbr\r |
8c416d5a | 3320 | db 0c0h,0c0h,i_SET ;set b,g\r |
2c2c7492 | 3321 | db a_bcbr\r |
b0b4005c | 3322 | db 0\r |
0c4244e5 | 3323 | \r |
9711a430 | 3324 | ;-------------------------------------------------------------------------------\r |
2c2c7492 | 3325 | ;-------------------------------------------------------------------------------\r |
9711a430 | 3326 | \r |
25a690e5 | 3327 | \r |
2c2c7492 L |
3328 | pr_instr_args:\r |
3329 | ld hl,t_argf\r | |
3330 | ld d,0\r | |
3331 | add hl,de\r | |
3332 | pria_l:\r | |
3333 | ld a,(hl) ;get next token\r | |
3334 | inc hl\r | |
3335 | or a\r | |
3336 | ret z ;\r | |
3337 | jp m,pria_1\r | |
3338 | call outchar ;print as normal character\r | |
3339 | jr pria_l\r | |
25a690e5 | 3340 | \r |
2c2c7492 L |
3341 | pria_1: ;\r |
3342 | push hl\r | |
3343 | ld hl,do_arg_n\r | |
3344 | and 07fh\r | |
3345 | call add_hl_a2\r | |
3346 | ld a,(hl)\r | |
3347 | inc hl\r | |
3348 | ld h,(hl)\r | |
3349 | ld l,a\r | |
c1ae5a7d | 3350 | ld a,(iy+000h)\r |
2c2c7492 L |
3351 | call CALL_HL\r |
3352 | pop hl\r | |
3353 | jr pria_l\r | |
25a690e5 | 3354 | \r |
2c2c7492 L |
3355 | ;\r |
3356 | ; http://www.z80.info/decoding.htm\r | |
3357 | ;\r | |
3358 | ; | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |\r | |
3359 | ; | x | y | z |\r | |
3360 | ; | p | q |\r | |
3361 | ;\r | |
25a690e5 | 3362 | \r |
2c2c7492 L |
3363 | t_argf:\r |
3364 | ; 1 byte opcodes\r | |
3365 | a_rr equ $-t_argf\r | |
3366 | db fi_ry,',' ;ld r[y],r[z]\r | |
3367 | a_r equ $-t_argf\r | |
3368 | db fi_rz,0 ;op r[z]\r | |
0f82c444 L |
3369 | ;a_ar equ $-t_argf\r |
3370 | ; db 'A,',fi_rz,0 ;op A,r[z]\r | |
2c2c7492 L |
3371 | a_cc equ $-t_argf\r |
3372 | db fi_ccy,0 ;op cc[y]\r | |
3373 | a_rst equ $-t_argf\r | |
3374 | db fi_rst,0 ;rst y*8\r | |
3375 | a_p2 equ $-t_argf\r | |
3376 | db fi_rp2,0 ;rp2[p]\r | |
3377 | a_esphl equ $-t_argf\r | |
3378 | db '(SP),',fi_hlixiy,0 ;ex (sp),hl\r | |
3379 | a_hl equ $-t_argf\r | |
3380 | db '(',fi_hlixiy,')',0 ;jp (hl)\r | |
3381 | a_dehl equ $-t_argf\r | |
3382 | db 'DE,HL',0\r | |
3383 | a_lsphl equ $-t_argf\r | |
3384 | db 'SP,',fi_hlixiy,0 ;ld SP,HL\r | |
3385 | a_eaf equ $-t_argf\r | |
3386 | db 'AF,AF''',0 ;ex af,af'\r | |
3387 | a_hlp equ $-t_argf\r | |
3388 | db fi_hlixiy,',' ;add hl,rp\r | |
3389 | a_p equ $-t_argf\r | |
3390 | db fi_rp,0 ;rp[p]\r | |
3391 | a_pa equ $-t_argf\r | |
3392 | db '(',fi_rp,'),A',0 ;ld (rp),a ;rp=bc,de\r | |
3393 | a_ap equ $-t_argf\r | |
3394 | db 'A,(',fi_rp,')',0 ;ld a,(rp) ;rp=bc,de\r | |
25a690e5 | 3395 | \r |
2c2c7492 L |
3396 | ; 2 byte opcodes\r |
3397 | a_rn equ $-t_argf\r | |
3398 | db fi_ry,',',fi_n,0 ;ld r[y],n\r | |
201101b3 L |
3399 | ;a_an equ $-t_argf\r |
3400 | ; db 'A,' ;op a,n\r | |
2c2c7492 L |
3401 | a_n equ $-t_argf\r |
3402 | db fi_n,0 ;op n\r | |
3403 | a_ccj equ $-t_argf\r | |
3404 | db fi_ccy2,',' ;jr cc,j ;cc = nz,z,nc,c\r | |
3405 | a_j equ $-t_argf\r | |
3406 | db fi_j,0 ;jr j\r | |
3407 | a_ma equ $-t_argf\r | |
3408 | db '(',fi_n,'),A',0 ;out (n),a\r | |
3409 | a_am equ $-t_argf\r | |
3410 | db 'A,(',fi_n,')',0 ;in a,(n)\r | |
3411 | \r | |
3412 | ; 3 byte opcodes\r | |
3413 | a_ccnn equ $-t_argf\r | |
3414 | db fi_ccy,',',fi_nn,0 ;op cc[y],nn\r | |
3415 | a_rnn equ $-t_argf\r | |
3416 | db fi_rp,',' ;ld rp[p],nn\r | |
3417 | a_nn equ $-t_argf\r | |
3418 | db fi_nn,0 ;jp nn\r | |
3419 | a_mmhl equ $-t_argf\r | |
3420 | db '(',fi_nn,'),',fi_hlixiy,0 ;ld (nn),hl\r | |
3421 | a_hlmm equ $-t_argf\r | |
3422 | db fi_hlixiy,',(',fi_nn,')',0 ;ld hl,(nn)\r | |
3423 | a_mma equ $-t_argf\r | |
3424 | db '(',fi_nn,'),A',0 ;ld (nn),a\r | |
3425 | a_amm equ $-t_argf\r | |
3426 | db 'A,(',fi_nn,')',0 ;ld a,(nn)\r | |
b0b4005c | 3427 | \r |
2c2c7492 L |
3428 | ; Prefix ED + 1 byte opcode\r |
3429 | a_rc equ $-t_argf\r | |
3430 | db fi_ry,',' ;in r[y],(c)\r | |
3431 | a_c equ $-t_argf\r | |
3432 | db '(C)',0 ;in (c)\r | |
3433 | a_cr equ $-t_argf\r | |
3434 | db '(C),' ;out (c),r[y]\r | |
3435 | a_ry equ $-t_argf\r | |
3436 | db fi_ry,0 ;inc r[y]\r | |
3437 | a_im0 equ $-t_argf\r | |
3438 | db '0',0 ;im 0\r | |
3439 | a_im1 equ $-t_argf\r | |
3440 | db '1',0 ;im 1\r | |
3441 | a_im2 equ $-t_argf\r | |
3442 | db '2',0 ;im 2\r | |
3443 | a_ai equ $-t_argf\r | |
3444 | db fi_ir,0 ;ld a,i ... r,a\r | |
08d0db09 | 3445 | \r |
2c2c7492 L |
3446 | ; Prefix ED + 2 byte (opcode + immediate)\r |
3447 | a_rm equ $-t_argf\r | |
3448 | db fi_ry,',' ;in0 r[y],(n)\r | |
3449 | a_m equ $-t_argf\r | |
3450 | db '(',fi_n,')',0 ;in0 (n)\r | |
3451 | a_mr equ $-t_argf\r | |
3452 | db '(',fi_n,'),',fi_ry,0 ;out0 (n),r[y]\r | |
836f48ab | 3453 | \r |
2c2c7492 L |
3454 | ; Prefix ED + 3 byte (opcode + address)\r |
3455 | a_mmp equ $-t_argf\r | |
3456 | db '(',fi_nn,'),',fi_rp,0 ;ld (nn),rp\r | |
3457 | a_pmm equ $-t_argf\r | |
3458 | db fi_rp,',(',fi_nn,')',0 ;ld rp,(nn)\r | |
25a690e5 | 3459 | \r |
2c2c7492 L |
3460 | ; Prefix CB + 1 byte opcode\r |
3461 | a_bcbr equ $-t_argf\r | |
3462 | db fi_y,',' ;op y,r[z]\r | |
3463 | a_cbr equ $-t_argf\r | |
3464 | db fi_rz_cb,0 ;op r[z]\r | |
3465 | a_noarg equ $-t_argf\r | |
3466 | db 0\r | |
85b57f2a | 3467 | \r |
25a690e5 | 3468 | \r |
2c2c7492 L |
3469 | ;-------------------------------------------------------------------------------\r |
3470 | \r | |
3471 | argpf_index defl 0\r | |
3472 | \r | |
3473 | argpf macro x\r | |
3474 | fi_&x equ 80h+argpf_index\r | |
3475 | dw p_&x\r | |
3476 | argpf_index defl argpf_index+1\r | |
3477 | endm\r | |
3478 | \r | |
3479 | do_arg_n:\r | |
3480 | argpf ry\r | |
3481 | argpf rz\r | |
3482 | argpf ccy\r | |
3483 | argpf ccy2\r | |
3484 | argpf rst\r | |
3485 | argpf rp\r | |
3486 | argpf rp2\r | |
3487 | argpf hlixiy\r | |
3488 | argpf n\r | |
3489 | argpf j\r | |
3490 | argpf nn\r | |
3491 | argpf ir\r | |
3492 | argpf rz_cb\r | |
3493 | argpf y\r | |
3494 | \r | |
3495 | \r | |
c1ae5a7d L |
3496 | p_n:\r |
3497 | ld a,(isprefix_ixiy)\r | |
3498 | and a\r | |
3499 | ld a,(iy+001h)\r | |
3500 | jr z,out_hex_0\r | |
3501 | ld a,(iy+002h)\r | |
3502 | jr out_hex_0\r | |
3503 | \r | |
3504 | p_rst:\r | |
3505 | and 038h\r | |
3506 | out_hex_0:\r | |
3507 | jp out_hex\r | |
3508 | \r | |
3509 | \r | |
3510 | p_j:\r | |
3511 | ld c,(iy+001h)\r | |
3512 | ld a,c\r | |
3513 | rla\r | |
3514 | sbc a,a\r | |
3515 | ld b,a\r | |
3516 | push iy\r | |
3517 | pop hl\r | |
3518 | add hl,bc\r | |
3519 | inc hl\r | |
3520 | inc hl\r | |
3521 | jr out_hl_0\r | |
3522 | \r | |
3523 | p_nn:\r | |
3524 | ld l,(iy+001h)\r | |
3525 | ld h,(iy+002h)\r | |
3526 | out_hl_0:\r | |
3527 | jp out_hl\r | |
3528 | \r | |
2c2c7492 | 3529 | p_ir:\r |
e611c31d L |
3530 | rra\r |
3531 | rra\r | |
3532 | rra\r | |
3533 | and 03\r | |
3534 | ld hl,t_arg_IR\r | |
c1ae5a7d | 3535 | jr p_arg\r |
0c4244e5 | 3536 | \r |
0c4244e5 | 3537 | \r |
2c2c7492 L |
3538 | get_cb_opc:\r |
3539 | ld a,(isprefix_ixiy)\r | |
3540 | and a\r | |
3541 | ld a,(iy+001h)\r | |
3542 | ret z\r | |
3543 | ld a,(iy+002h)\r | |
3544 | ret\r | |
25a690e5 | 3545 | \r |
2c2c7492 | 3546 | p_y:\r |
998c0841 | 3547 | call get_cb_opc\r |
0716e834 L |
3548 | rra\r |
3549 | rra\r | |
3550 | rra\r | |
3551 | and 007h\r | |
2c2c7492 | 3552 | jp out_dgt\r |
25a690e5 | 3553 | \r |
514bb0fd | 3554 | p_rz_cb:\r |
998c0841 | 3555 | call get_cb_opc\r |
c1ae5a7d | 3556 | jr p_rz\r |
998c0841 | 3557 | \r |
514bb0fd | 3558 | p_ry:\r |
0716e834 L |
3559 | rra\r |
3560 | rra\r | |
3561 | rra\r | |
514bb0fd | 3562 | p_rz:\r |
0716e834 L |
3563 | and 007h\r |
3564 | cp 006h\r | |
a942c6d5 | 3565 | ld b,a\r |
514bb0fd | 3566 | ld hl,t_arg_r\r |
a942c6d5 | 3567 | jr nz,p_arg0\r |
0716e834 L |
3568 | ld a,(isprefix_ixiy)\r |
3569 | and a\r | |
a942c6d5 L |
3570 | jr z,p_arg0\r |
3571 | ld hl,t_lp_IXIY\r | |
0716e834 | 3572 | dec a\r |
a942c6d5 | 3573 | call p_arg\r |
0716e834 | 3574 | ld a,(iy+001h)\r |
836f48ab L |
3575 | push af\r |
3576 | rlca\r | |
3577 | ld a,'+'\r | |
3578 | jr nc,l1e61h\r | |
3579 | pop af\r | |
0716e834 | 3580 | neg\r |
836f48ab L |
3581 | push af\r |
3582 | ld a,'-'\r | |
3583 | l1e61h:\r | |
3584 | call outchar\r | |
3585 | pop af\r | |
2c2c7492 L |
3586 | call out_hex\r |
3587 | ld a,')'\r | |
3588 | jp outchar\r | |
7c2469ef | 3589 | \r |
514bb0fd | 3590 | p_rp2:\r |
514bb0fd | 3591 | ld hl,t_arg_rp2\r |
c1ae5a7d | 3592 | db 0ddh ;swallow t_arg_rp in ix\r |
514bb0fd | 3593 | p_rp:\r |
514bb0fd | 3594 | ld hl,t_arg_rp\r |
0716e834 L |
3595 | rra\r |
3596 | rra\r | |
3597 | rra\r | |
3598 | rra\r | |
3599 | and 003h\r | |
3600 | cp 002h\r | |
2c2c7492 L |
3601 | jr nz,p_arg\r |
3602 | p_hlixiy:\r | |
3603 | ld a,(isprefix_ixiy)\r | |
3604 | ld hl,t_HL.IX.IY\r | |
0716e834 | 3605 | jr p_arg\r |
646e8b05 | 3606 | \r |
2c2c7492 | 3607 | p_ccy2:\r |
2c2c7492 | 3608 | and 018h\r |
2c2c7492 | 3609 | p_ccy:\r |
0716e834 L |
3610 | rra\r |
3611 | rra\r | |
3612 | rra\r | |
3613 | and 007h\r | |
514bb0fd | 3614 | ld hl,t_arg_cc\r |
25a690e5 | 3615 | p_arg:\r |
0716e834 | 3616 | ld b,a\r |
a942c6d5 | 3617 | p_arg0:\r |
c1ae5a7d | 3618 | ;fall thru\r |
2c2c7492 | 3619 | \r |
c1ae5a7d | 3620 | pstr_sel:\r |
8c416d5a | 3621 | call str_sel\r |
c1ae5a7d L |
3622 | ;fall thru\r |
3623 | pstr:\r | |
3624 | ld a,(hl)\r | |
2c2c7492 | 3625 | inc hl\r |
c1ae5a7d L |
3626 | and a\r |
3627 | ret z\r | |
3628 | call outchar\r | |
3629 | ret m\r | |
3630 | jr pstr\r | |
2c2c7492 | 3631 | \r |
c1ae5a7d L |
3632 | pstr_inl:\r |
3633 | ex (sp),hl\r | |
3634 | call pstr\r | |
3635 | ex (sp),hl\r | |
3636 | ret\r | |
7c2469ef | 3637 | \r |
9711a430 L |
3638 | ;-------------------------------------------------------------------------------\r |
3639 | \r | |
3b18d7ae | 3640 | opc macro x\r |
a370992b | 3641 | \r |
3b18d7ae | 3642 | i_&x equ opc_index\r |
0f82c444 | 3643 | ;o_&x equ $-opc_tabstart\r |
3b18d7ae L |
3644 | dc '&x'\r |
3645 | opc_index defl opc_index+1\r | |
a370992b L |
3646 | endm\r |
3647 | \r | |
0c4244e5 | 3648 | t_MNEMONICS:\r |
0f82c444 | 3649 | ;opc_tabstart defl $\r |
a370992b | 3650 | opc_index defl 0\r |
7c2469ef L |
3651 | ; 1-byte other\r |
3652 | opc NOP\r | |
8c416d5a | 3653 | opc LD\r |
7c2469ef | 3654 | opc INC\r |
3b18d7ae | 3655 | opc DEC\r |
3b18d7ae | 3656 | opc DJNZ\r |
3b18d7ae | 3657 | opc JR\r |
7c2469ef L |
3658 | opc HALT\r |
3659 | \r | |
3660 | opc RLCA\r | |
3661 | opc RRCA\r | |
3662 | opc RLA\r | |
3663 | opc RRA\r | |
3664 | opc DAA\r | |
3665 | opc CPL\r | |
3666 | opc SCF\r | |
3667 | opc CCF\r | |
3668 | \r | |
3669 | ; 1-byte "alu"\r | |
3670 | opc ADD\r | |
3671 | opc ADC\r | |
3672 | opc SUB\r | |
3673 | opc SBC\r | |
3674 | opc AND\r | |
8c416d5a L |
3675 | opc XOR\r |
3676 | opc OR\r | |
7c2469ef L |
3677 | opc CP\r |
3678 | \r | |
3679 | opc RET\r | |
3b18d7ae | 3680 | opc POP\r |
7c2469ef L |
3681 | opc JP\r |
3682 | opc CALL\r | |
3b18d7ae | 3683 | opc PUSH\r |
7c2469ef L |
3684 | opc RST\r |
3685 | opc OUT\r | |
3686 | opc EXX\r | |
3687 | opc IN\r | |
3688 | opc EX\r | |
8c416d5a | 3689 | opc DI\r |
7c2469ef L |
3690 | opc EI\r |
3691 | ; CB\r | |
3b18d7ae | 3692 | opc RLC\r |
3b18d7ae | 3693 | opc RRC\r |
8c416d5a | 3694 | opc RL\r |
7c2469ef | 3695 | opc RR\r |
3b18d7ae L |
3696 | opc SLA\r |
3697 | opc SRA\r | |
8c416d5a L |
3698 | opc SLL\r |
3699 | opc SRL\r | |
7c2469ef L |
3700 | opc BIT\r |
3701 | opc RES\r | |
3702 | opc SET\r | |
3703 | \r | |
3704 | ; ED\r | |
3705 | opc NEG\r | |
3706 | opc RETN\r | |
3707 | opc RETI\r | |
8c416d5a | 3708 | opc IM\r |
7c2469ef | 3709 | opc RRD\r |
8c416d5a | 3710 | opc RLD\r |
7c2469ef | 3711 | \r |
0f82c444 | 3712 | ; Block instructions\r |
8c416d5a | 3713 | opc LDI\r |
7c2469ef L |
3714 | opc CPI\r |
3715 | opc INI\r | |
3716 | opc OUTI\r | |
3717 | opc LDD\r | |
3718 | opc CPD\r | |
3719 | opc IND\r | |
3720 | opc OUTD\r | |
3721 | opc LDIR\r | |
3722 | opc CPIR\r | |
3723 | opc INIR\r | |
3724 | opc OTIR\r | |
3725 | opc LDDR\r | |
3726 | opc CPDR\r | |
3727 | opc INDR\r | |
3728 | opc OTDR\r | |
3729 | \r | |
0f82c444 | 3730 | ; Z180\r |
3b18d7ae | 3731 | opc IN0\r |
3b18d7ae | 3732 | opc OUT0\r |
3b18d7ae | 3733 | opc TST\r |
7c2469ef | 3734 | opc MLT\r |
3b18d7ae | 3735 | opc TSTIO\r |
7c2469ef | 3736 | opc SLP\r |
8c416d5a | 3737 | opc OTIM\r |
7c2469ef L |
3738 | opc OTDM\r |
3739 | opc OTIMR\r | |
3740 | opc OTDMR\r | |
3741 | \r | |
0c4244e5 L |
3742 | DB 0\r |
3743 | \r | |
514bb0fd | 3744 | t_arg_r:\r |
0c4244e5 L |
3745 | DC 'B'\r |
3746 | DC 'C'\r | |
3747 | DC 'D'\r | |
3748 | DC 'E'\r | |
3749 | DC 'H'\r | |
3750 | DC 'L'\r | |
3751 | DC '(HL)'\r | |
3752 | DC 'A'\r | |
3753 | DB 0\r | |
514bb0fd | 3754 | t_arg_rp:\r |
0c4244e5 L |
3755 | DC 'BC'\r |
3756 | DC 'DE'\r | |
3757 | DC 'HL'\r | |
3758 | DC 'SP'\r | |
3759 | DB 0\r | |
514bb0fd | 3760 | t_arg_rp2:\r |
0c4244e5 L |
3761 | DC 'BC'\r |
3762 | DC 'DE'\r | |
0c4244e5 L |
3763 | DC 'HL'\r |
3764 | DC 'AF'\r | |
3765 | DB 0\r | |
0c4244e5 L |
3766 | t_HL.IX.IY:\r |
3767 | DC 'HL'\r | |
0c4244e5 L |
3768 | DC 'IX'\r |
3769 | DC 'IY'\r | |
3770 | DB 0\r | |
514bb0fd | 3771 | t_arg_cc:\r |
0c4244e5 L |
3772 | DC 'NZ'\r |
3773 | DC 'Z'\r | |
3774 | DC 'NC'\r | |
3775 | DC 'C'\r | |
3776 | DC 'PO'\r | |
3777 | DC 'PE'\r | |
3778 | DC 'P'\r | |
3779 | DC 'M'\r | |
0c4244e5 | 3780 | DB 0\r |
8320b8eb | 3781 | \r |
2c2c7492 L |
3782 | t_lp_IXIY:\r |
3783 | DC '(IX'\r | |
3784 | DC '(IY'\r | |
8320b8eb | 3785 | \r |
2c2c7492 L |
3786 | t_arg_IR:\r |
3787 | DC 'I,A'\r | |
3788 | DC 'R,A'\r | |
3789 | DC 'A,I'\r | |
3790 | DC 'A,R'\r | |
3791 | db 0\r | |
514bb0fd | 3792 | \r |
8320b8eb | 3793 | \r |
8320b8eb | 3794 | ;-------------------------------------------------------------------------------\r |
9711a430 | 3795 | \r |
4a39ae18 | 3796 | tc_set_bp:\r |
ac35765e | 3797 | ld hl,(reg.pc)\r |
0716e834 L |
3798 | ld a,h\r |
3799 | or l\r | |
3800 | jr z,l2037h\r | |
3801 | ld de,BDOS\r | |
3802 | and a\r | |
3803 | sbc hl,de\r | |
d2df51e3 | 3804 | ld hl,l20edh ;set break after BDOS call\r |
0716e834 | 3805 | jr z,l2031h\r |
ac35765e | 3806 | ld iy,(reg.pc)\r |
0716e834 L |
3807 | call disas_get_instrlen\r |
3808 | jp nc,ERROR\r | |
3809 | ld c,b\r | |
85b57f2a | 3810 | ld b,0\r |
ac35765e | 3811 | ld hl,(reg.pc)\r |
0716e834 | 3812 | add hl,bc\r |
4bb547a7 | 3813 | call bp_trace_enter\r |
ac35765e | 3814 | ld iy,(reg.pc)\r |
e611c31d | 3815 | ld hl,t_op_branch\r |
2c2c7492 | 3816 | call lookup_branch_op\r |
0716e834 L |
3817 | ccf\r |
3818 | ret c\r | |
3819 | ex de,hl\r | |
0c4244e5 | 3820 | l2031h:\r |
0716e834 | 3821 | call CALL_HL\r |
4bb547a7 | 3822 | call c,bp_trace_enter\r |
0c4244e5 | 3823 | l2037h:\r |
0716e834 L |
3824 | scf\r |
3825 | ret\r | |
0c4244e5 | 3826 | \r |
9711a430 L |
3827 | ;-------------------------------------------------------------------------------\r |
3828 | \r | |
e611c31d | 3829 | t_op_branch:\r |
2c2c7492 | 3830 | db 0ffh,0ddh ;Prefix DD\r |
b0b4005c | 3831 | dw l20a7h\r |
2c2c7492 | 3832 | db 0ffh,0fdh ;Prefix FD\r |
b0b4005c | 3833 | dw l20ach\r |
2c2c7492 | 3834 | db 0ffh,0edh ;Prefix ED\r |
b0b4005c | 3835 | dw l20b8h\r |
0f82c444 | 3836 | \r |
2c2c7492 | 3837 | db 0ffh,0cdh ;call mn\r |
b0b4005c | 3838 | dw l2080h\r |
2c2c7492 | 3839 | db 0ffh,0c3h ;jp mn\r |
b0b4005c | 3840 | dw l208bh\r |
2c2c7492 | 3841 | db 0ffh,0e9h ;jp ()\r |
b0b4005c | 3842 | dw l20a2h\r |
2c2c7492 | 3843 | db 0ffh,0c9h ;ret\r |
b0b4005c | 3844 | dw l20dch\r |
2c2c7492 | 3845 | db 0ffh,0cfh ;rst 8\r |
b0b4005c | 3846 | dw l2115h\r |
2c2c7492 | 3847 | db 0c7h,0c7h ;rst n\r |
b0b4005c | 3848 | dw l20f9h\r |
2c2c7492 | 3849 | db 0c7h,0c4h ;call cc,mn\r |
b0b4005c | 3850 | dw l2080h\r |
2c2c7492 | 3851 | db 0f7h,010h ;djnz d; jr d\r |
b0b4005c | 3852 | dw l2093h\r |
2c2c7492 | 3853 | db 0e7h,020h ;jr cc,d\r |
b0b4005c | 3854 | dw l2093h\r |
2c2c7492 | 3855 | db 0c7h,0c2h ;jp cc,mn\r |
b0b4005c | 3856 | dw l208bh\r |
2c2c7492 | 3857 | db 0c7h,0c0h ;ret cc\r |
b0b4005c L |
3858 | dw l20c5h\r |
3859 | db 0\r | |
0c4244e5 | 3860 | \r |
9711a430 | 3861 | ;-------------------------------------------------------------------------------\r |
4a39ae18 | 3862 | ; call mn call cc,mn\r |
0c4244e5 | 3863 | l2080h:\r |
4a39ae18 L |
3864 | \r |
3865 | ; jp mn jp cc,mn\r | |
0c4244e5 | 3866 | l208bh:\r |
0716e834 L |
3867 | ld l,(iy+001h)\r |
3868 | ld h,(iy+002h)\r | |
3869 | scf\r | |
3870 | ret\r | |
4a39ae18 | 3871 | \r |
0c4244e5 | 3872 | l2093h:\r |
0716e834 L |
3873 | ld c,(iy+001h)\r |
3874 | ld a,c\r | |
3875 | rla\r | |
3876 | sbc a,a\r | |
3877 | ld b,a\r | |
ac35765e | 3878 | ld hl,(reg.pc)\r |
0716e834 L |
3879 | add hl,bc\r |
3880 | inc hl\r | |
3881 | inc hl\r | |
3882 | scf\r | |
3883 | ret\r | |
4a39ae18 L |
3884 | \r |
3885 | ; jp (hl)\r | |
0c4244e5 | 3886 | l20a2h:\r |
0716e834 L |
3887 | ld hl,(reg.l)\r |
3888 | scf\r | |
3889 | ret\r | |
4a39ae18 L |
3890 | \r |
3891 | ; Prefix DD\r | |
0c4244e5 | 3892 | l20a7h:\r |
0716e834 L |
3893 | ld hl,(reg.ix)\r |
3894 | jr l20afh\r | |
4a39ae18 | 3895 | ; Prefix FD\r |
0c4244e5 | 3896 | l20ach:\r |
0716e834 | 3897 | ld hl,(reg.iy)\r |
0c4244e5 | 3898 | l20afh:\r |
0716e834 | 3899 | ld a,(iy+001h)\r |
4a39ae18 | 3900 | cp 0e9h ; jp (ix); jp (iy)\r |
0716e834 L |
3901 | scf\r |
3902 | ret z\r | |
3903 | and a\r | |
3904 | ret\r | |
4a39ae18 L |
3905 | \r |
3906 | ; Prefix ED\r | |
0c4244e5 | 3907 | l20b8h:\r |
0716e834 | 3908 | ld a,(iy+001h)\r |
4a39ae18 | 3909 | cp 04dh ; reti\r |
0716e834 | 3910 | jr z,l20dch\r |
4a39ae18 | 3911 | cp 045h ; retn\r |
0716e834 L |
3912 | jr z,l20dch\r |
3913 | and a\r | |
3914 | ret\r | |
0c4244e5 | 3915 | l20c5h:\r |
0716e834 L |
3916 | ld a,(iy+000h)\r |
3917 | ld (l20d7h),a\r | |
3918 | ld hl,(reg.f)\r | |
3919 | push hl\r | |
3920 | pop af\r | |
3921 | call l20d7h\r | |
3922 | scf\r | |
3923 | jr c,l20dch\r | |
3924 | ret\r | |
0c4244e5 | 3925 | l20d7h:\r |
0716e834 L |
3926 | nop\r |
3927 | and a\r | |
3928 | pop hl\r | |
3929 | inc hl\r | |
3930 | jp (hl)\r | |
0c4244e5 L |
3931 | \r |
3932 | l20dch:\r | |
0c4244e5 | 3933 | l20edh:\r |
d2df51e3 | 3934 | ld hl,(reg_sp) ;break on return address\r |
0716e834 L |
3935 | ld e,(hl)\r |
3936 | inc hl\r | |
3937 | ld d,(hl)\r | |
3938 | ex de,hl\r | |
4bb547a7 | 3939 | call bp_trace_enter\r |
4a39ae18 | 3940 | l2115h:\r |
0716e834 L |
3941 | and a\r |
3942 | ret\r | |
0c4244e5 L |
3943 | \r |
3944 | l20f9h:\r | |
0716e834 L |
3945 | ld a,(l0003h)\r |
3946 | cp (iy+000h)\r | |
3947 | ret z\r | |
3948 | ld a,(iy+000h)\r | |
3949 | and 038h\r | |
3950 | ld l,a\r | |
3951 | ld h,000h\r | |
3952 | ld a,(b_21e2_start)\r | |
3953 | and a\r | |
3628b074 | 3954 | ret z\r |
0716e834 L |
3955 | scf\r |
3956 | ret\r | |
9711a430 L |
3957 | \r |
3958 | ;-------------------------------------------------------------------------------\r | |
3959 | ; >>C[N][J] [steps]\r | |
3960 | ; >>C[N][J] W expression\r | |
3961 | ; >>C[N][J] U expression\r | |
3962 | ; trace over Calls [No list] [Jumps only] /.While./.Until.\r | |
3963 | \r | |
9711a430 L |
3964 | \r |
3965 | ;-------------------------------------------------------------------------------\r | |
3966 | ; >>T[N][J] [steps]\r | |
3967 | ; >>T[N][J] W expression\r | |
3968 | ; >>T[N][J] U expression\r | |
3969 | ; Trace [no List] [Jumps only] / .While. / .Until.\r | |
3970 | \r | |
0c4244e5 | 3971 | cmd_T:\r |
0716e834 | 3972 | ld (cmd_rpt),hl\r |
4a39ae18 | 3973 | ld hl,1 ;default: 1 step\r |
0716e834 | 3974 | call get_lastarg_def\r |
4a39ae18 | 3975 | ld (trace_cnt_or_ptr),hl\r |
0716e834 | 3976 | sub a\r |
4bb547a7 | 3977 | ld (bp_p_cpu_flag),a\r |
4a39ae18 L |
3978 | call tc_set_bp\r |
3979 | jr user_go1\r | |
0c4244e5 L |
3980 | \r |
3981 | l2151h:\r | |
0716e834 | 3982 | call bp_clr_temporary\r |
4a39ae18 | 3983 | ld hl,(trace_cnt_or_ptr)\r |
0716e834 | 3984 | dec hl\r |
4a39ae18 | 3985 | ld (trace_cnt_or_ptr),hl\r |
0716e834 L |
3986 | ld a,h\r |
3987 | or l\r | |
3628b074 L |
3988 | jp z,do_break\r |
3989 | \r | |
4a39ae18 | 3990 | call tc_set_bp\r |
3628b074 L |
3991 | jp nc,do_break\r |
3992 | sbc a,a\r | |
4bb547a7 | 3993 | ld (bp_p_cpu_flag),a\r |
4a39ae18 | 3994 | user_go1:\r |
0716e834 | 3995 | jp user_go\r |
0c4244e5 | 3996 | \r |
9711a430 L |
3997 | ;-------------------------------------------------------------------------------\r |
3998 | \r | |
4bb547a7 L |
3999 | con_col:\r |
4000 | db 0\r | |
4001 | \r | |
4002 | ;-------------------------------------------------------------------------------\r | |
4003 | \r | |
0c4244e5 | 4004 | b_21e2_start:\r |
9bed91b3 | 4005 | db 0\r |
4a39ae18 | 4006 | trace_cnt_or_ptr:\r |
9bed91b3 | 4007 | dw 0\r |
9bed91b3 | 4008 | \r |
4bb547a7 | 4009 | bp_p_cpu_flag:\r |
9bed91b3 L |
4010 | db 0\r |
4011 | \r | |
4012 | bp_tab:\r | |
4013 | rept BP_CNT\r | |
4014 | rept BP_SIZE\r | |
4015 | db 0\r | |
4016 | endm\r | |
4017 | endm\r | |
4018 | \r | |
9711a430 L |
4019 | ;-------------------------------------------------------------------------------\r |
4020 | \r | |
9bed91b3 L |
4021 | last_S:\r |
4022 | dw TPA\r | |
4023 | \r | |
4024 | last_I:\r | |
4025 | dw 0\r | |
4026 | \r | |
4027 | last_O_addr:\r | |
4028 | dw 0\r | |
4029 | last_O_val:\r | |
4030 | db 0\r | |
4031 | \r | |
9bed91b3 L |
4032 | last_D:\r |
4033 | dw TPA\r | |
4034 | \r | |
9bed91b3 L |
4035 | high_load:\r |
4036 | dw TPA\r | |
4037 | max_load:\r | |
4038 | dw TPA\r | |
4039 | \r | |
9bed91b3 L |
4040 | isprefix_ixiy:\r |
4041 | db 0\r | |
4042 | last_L:\r | |
4043 | dw TPA\r | |
0c4244e5 | 4044 | \r |
1bfdbe14 | 4045 | pbl_loop_adr:\r |
51e6b03c | 4046 | dw 0addeh\r |
1bfdbe14 | 4047 | \r |
fb224211 L |
4048 | bitmap_end:\r |
4049 | dw 0\r | |
4050 | \r | |
0f361185 L |
4051 | ;-------------------------------------------------------------------------------\r |
4052 | \r | |
92315951 | 4053 | conbuf:\r |
0f361185 L |
4054 | ds CONBUF_SIZE+1\r |
4055 | \r | |
4056 | ;-------------------------------------------------------------------------------\r | |
4057 | \r | |
4058 | rept (STACK_SIZE+3)/4\r | |
4059 | db 0deh,0adh,0beh,0efh\r | |
4060 | endm\r | |
92315951 | 4061 | stack:\r |
0f361185 L |
4062 | reg.l2: db 000h\r |
4063 | reg.h2: db 000h\r | |
4064 | reg.e2: db 000h\r | |
4065 | reg.d2: db 000h\r | |
4066 | reg.c2: db 000h\r | |
4067 | reg.b2: db 000h\r | |
4068 | reg.f2: db 000h\r | |
4069 | reg.a2: db 000h\r | |
4070 | db 000h\r | |
4071 | reg.i: db 000h\r | |
4072 | reg.iy: dw 0000h\r | |
4073 | reg.ix: dw 0000h\r | |
4074 | reg.f: db 000h\r | |
4075 | reg.a: db 000h\r | |
4076 | reg.c: db 000h\r | |
4077 | reg.b: db 000h\r | |
4078 | reg.e: db 000h\r | |
4079 | reg.d: db 000h\r | |
4080 | reg.l: db 000h\r | |
4081 | reg.h: db 000h\r | |
4082 | reg_sp: dw TPA\r | |
4083 | reg.iff:\r | |
4084 | db 0f3h\r | |
4085 | db 0c3h\r | |
4086 | reg.pc: dw TPA\r | |
4087 | \r | |
4088 | cmd_rpt:dw mainloop\r | |
92315951 | 4089 | db 0ffh,0ffh,0ffh\r |
0f361185 L |
4090 | ;-------------------------------------------------------------------------------\r |
4091 | \r | |
0c4244e5 | 4092 | ddtz_size equ $-ddtz_base\r |
0f361185 | 4093 | prog_size equ $-start\r |
92315951 | 4094 | ddtz_end:\r |
0c4244e5 L |
4095 | \r |
4096 | ;-------------------------------------------------------------------------------\r | |
0c4244e5 L |
4097 | \r |
4098 | end\r |