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