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