]> cloudbase.mooo.com Git - ddt180.git/commitdiff
Add reloc command: cmd_E v0.5
authorLeo C <erbl259-lmu@yahoo.de>
Mon, 20 May 2019 13:09:41 +0000 (15:09 +0200)
committerLeo C <erbl259-lmu@yahoo.de>
Mon, 20 May 2019 13:09:41 +0000 (15:09 +0200)
; > E addr
;      relocate debugger to addr
; > ER addr
;      relocate just below addr

; Move debugger to given address and restart.
; New location must not overlap with current location.

ddt180.z80

index 437cbcca2344c99036606d0a9730f6b58b06ac5d..7f0ff31164631e5a4c324d173912a8a4bf746816 100644 (file)
@@ -57,18 +57,31 @@ signon:
        dc      '  ('\r
 \r
 ;-------------------------------------------------------------------------------\r
-; Determine current execution position\r
+; Clear old position\r
+\r
+cmde_clr:\r
+       ld      (hl),0\r
+       inc     hl\r
+       dec     bc\r
+       ld      a,b\r
+       or      c\r
+       jr      nz,cmde_clr\r
+\r
+; Determine current position\r
 \r
 reloc:\r
-       ld      bc,(0)\r
-       ld      de,(2)\r
-       ld      sp,4\r
+       ld      bc,(028h-2)\r
+       ld      de,(028h)\r
+       ld      a,i                     ;get iff2\r
+       ex      af,af'\r
+       di\r
+       ld      sp,028h                 ;rst instr needs a minimal stack\r
        ld      hl,0e9e1h               ;opcpdes pop hl/jp (hl)\r
-       ld      (0),hl\r
-       rst     0\r
+       ld      (028h),hl\r
+       rst     028h\r
 wearehere:\r
-       ld      (0),bc\r
-       ld      (2),de\r
+       ld      (028h-2),bc\r
+       ld      (028h),de\r
        ld      de,-(wearehere-ddtz_base)\r
        add     hl,de                   ; hl:\r
 \r
@@ -76,17 +89,24 @@ wearehere:
        or      a\r
        sbc     hl,de\r
        ex      de,hl                   ; de: reloc offset\r
+       ld      hl,stack\r
+       add     hl,de\r
+       ld      sp,hl\r
+       ex      af,af'\r
+       push    af\r
+       pop     bc\r
+       bit     2,c\r
+       jr      z,$+3\r
+       ei\r
        ld      hl,ddtz_end             ;start of reloc bitmap\r
        add     hl,de\r
-       ld      a,l\r
-       exx\r
-       ld      l,a\r
-       exx\r
-       ld      a,h\r
+\r
+       push    hl\r
        exx\r
-       ld      h,a\r
+       pop     hl\r
        ld      bc,0108h                ;init bit counter b (c==reload val)\r
        exx\r
+\r
        LD      HL,ddtz_base\r
        add     hl,de                   ;--> ddtz_base\r
        ld      bc,prog_size\r
@@ -118,10 +138,6 @@ reloc_next:
 ;-------------------------------------------------------------------------------\r
 \r
 \r
-\r
-;-------------------------------------------------------------------------------\r
-\r
-\r
 init::\r
        LD      SP,stack\r
 \r
@@ -168,107 +184,13 @@ l0093h:
 \r
 ;-------------------------------------------------------------------------------\r
 \r
-;; Relocation loader\r
-;;\r
-;ldr_start::\r
-;      LD      HL,ddtz_end             ;start of reloc bitmap\r
-;      ld      bc,0108h                ;init bit counter\r
-;\r
-;      EXX\r
-;      LD      HL,(BDOS+1)\r
-;;     LD      (ddtz_base+1),HL\r
-;      LD      BC,prog_size+bitmap_size-1\r
-;      LD      D,B\r
-;      LD      E,0FFH\r
-;      INC     DE                      ;size rounded up to next page boundary\r
-;      INC     BC                      ;ddtz_size\r
-;      OR      A\r
-;      SBC     HL,DE                   ;BDOS - size\r
-;;     LD      (BDOS+1),HL             ;-> new BDOS entry\r
-;\r
-;      push    hl\r
-;      PUSH    BC\r
-;      ld      de,ddtz_base\r
-;      sbc     hl,de\r
-;      EX      DE,HL                   ;-> DE\r
-;;     LD      HL,ldr_size\r
-;;     add     hl,bc\r
-;;     ld      b,h\r
-;;     ld      c,l\r
-;      ld      bc,prog_size\r
-;;     LD      HL,TPA                  ;--> ddtz_base\r
-;reloc_lp:\r
-;      EXX\r
-;      djnz    reloc_nl\r
-;      ld      b,c                     ;reload bit counter\r
-;      LD      e,(HL)                  ;get next 8 relocation bits\r
-;      INC     HL\r
-;reloc_nl:\r
-;      sla     e\r
-;      EXX\r
-;      JR      NC,reloc_next\r
-;      DEC     HL\r
-;      LD      A,(HL)\r
-;      ADD     A,E\r
-;      LD      (HL),A\r
-;      INC     HL\r
-;      LD      A,(HL)\r
-;      ADC     A,D\r
-;      LD      (HL),A\r
-;reloc_next:\r
-;      inc     hl\r
-;      dec     bc\r
-;      ld      a,b\r
-;      or      c\r
-;      jr      nz,reloc_lp\r
-;      dec     hl\r
-;\r
-;      POP     BC\r
-;      pop     de\r
-;      EX      DE,HL\r
-;      ADD     HL,BC\r
-;      EX      DE,HL\r
-;      DEC     DE\r
-;      LDDR\r
-;      LD      HL,conbuf+2-ddtz_base\r
-;      ADD     HL,DE\r
-;      JP      (HL)\r
-;\r
-;ldr_end::\r
-;ldr_size      equ     $ - ldr_start\r
-;\r
-;; Entry from relocator\r
-;;\r
-;;     ld sp,stack\r
-;;     exx\r
-;;     ld de,ddtz_base\r
-;;     call cp_hl_de\r
-;;     jr c,l0079h\r
-;;     ex de,hl\r
-;;l0079h:\r
-;;     ld de,TPA\r
-;;l007ch:\r
-;;     dec hl\r
-;;     ld (hl),000h\r
-;;     ld a,h\r
-;;     sub d\r
-;;     ld b,a\r
-;;     ld a,l\r
-;;     sub e\r
-;;     or b\r
-;;     jr nz,l007ch\r
-;\r
-;;     jp\r
-;\r
-;-------------------------------------------------------------------------------\r
-\r
 CMDTAB::\r
-       dw      ERROR ;cmd_@    ;examine/substitute the displacement register @\r
-       dw      ERROR ;cmd_A    ;Assemble\r
+;      dw      ERROR ;cmd_@    ;examine/substitute the displacement register @\r
+;      dw      ERROR ;cmd_A    ;Assemble\r
        dw      cmd_B           ;Breakpoints display/set/clear\r
        dw      ERROR ;cmd_C    ;trace over Calls\r
        dw      cmd_D           ;Display memory in hex and ascii\r
-       dw      ERROR           ;\r
+       dw      cmd_E           ;rElocate debugger\r
        dw      ERROR ;cmd_F    ;specify Filename and command line\r
        dw      cmd_G           ;Go\r
        dw      cmd_H           ;compute Hex and other expressions\r
@@ -314,7 +236,7 @@ mainloop::
        push hl\r
        ld (cmd_rpt),hl\r
        inc de\r
-       sub '@'\r
+       sub 'B'\r
        jr c,ERROR\r
        cp 'Z'+1-'@'\r
        jr nc,ERROR\r
@@ -342,8 +264,7 @@ crlf:
 sub_01d9h:\r
        call    pstr_inl\r
        dc      '-'\r
-       dec hl\r
-       jp cpl.hl\r
+       jp neg.hl\r
 \r
 out_hl_dec_neg:\r
        push hl\r
@@ -410,9 +331,8 @@ out.bin.b:
 l01c9h:\r
        rlca\r
        push    af\r
-       ld      a,'0'/2\r
-       adc     a,a\r
-       call    outchar\r
+       and     1\r
+       call    out_dgt\r
        pop af\r
        djnz l01c9h\r
        ld a,'"'\r
@@ -736,12 +656,12 @@ l0348h:
        ret m\r
        jr l0348h\r
 \r
-sub_034eh:\r
+get_arg_range_target:\r
        call get_arg_range\r
        push hl\r
        push bc\r
        call next_arg\r
-       call sub_0363h\r
+       call get_arg_final\r
        ex de,hl\r
        pop bc\r
        pop hl\r
@@ -752,7 +672,7 @@ sub_035dh:
        jr c,error0\r
        ret\r
 \r
-sub_0363h:\r
+get_arg_final:\r
        call sub_035dh\r
 l0366h:\r
        jp assert_eol\r
@@ -1077,8 +997,13 @@ fact_reg.CPU:
        ld h,000h\r
        ret\r
 \r
+fact_factinv:\r
+       call fact_factor\r
+       jr cpl.hl\r
+\r
 fact_factneg:\r
        call fact_factor\r
+neg.hl:\r
        dec hl\r
 cpl.hl:\r
        ld a,h\r
@@ -1089,10 +1014,6 @@ cpl.hl:
        ld l,a\r
        ret\r
 \r
-fact_factinv:\r
-       call fact_factor\r
-       jr cpl.hl\r
-\r
 fact_mem:\r
        call expr1\r
        jr c,error1\r
@@ -1370,6 +1291,49 @@ b_0709_start:
        db      000h\r
        db      000h\r
 \r
+;-------------------------------------------------------------------------------\r
+; > E addr\r
+;      relocate debugger to addr\r
+; > ER addr\r
+;      relocate just below addr\r
+;\r
+; Move debugger to given address and restart.\r
+; New location must not overlap with current location.\r
+\r
+\r
+cmd_E:\r
+       call    skipbl\r
+       sub     'R'\r
+       jr      nz,$+3\r
+        inc    de\r
+       push    af\r
+       call    get_arg_final\r
+\r
+       ld      bc,prog_size+bitmap_size\r
+       pop     af\r
+       jr      nz,cmde_bottom\r
+       sbc     hl,bc\r
+cmde_bottom:\r
+       ld      ix,cmde_clr-ddtz_base\r
+       ex      de,hl                   ;de = dst\r
+       add     ix,de\r
+       ld      hl,ddtz_base            ;hl = src\r
+\r
+       push    hl\r
+       or      a\r
+       sbc     hl,de\r
+       call    c,neg.hl                ;abs(distance)\r
+       or      a\r
+       sbc     hl,bc\r
+       jp      c,error\r
+       pop     hl\r
+       push    hl\r
+       push    bc\r
+       ldir\r
+       pop     bc\r
+       pop     hl\r
+       jp      (ix)\r
+\r
 ;-------------------------------------------------------------------------------\r
 ; > G [startaddr] [;breakp..]\r
 ;      Go [to start] [with temporary breakpoints]\r
@@ -1759,7 +1723,7 @@ cmd_X:
        call get_line\r
        call skipbl\r
        jr z,l0c30h\r
-       call sub_0363h\r
+       call get_arg_final\r
        ex de,hl\r
        pop bc\r
        pop hl\r
@@ -2031,11 +1995,11 @@ cmd_O:
        ret\r
 \r
 ;-------------------------------------------------------------------------------\r
-; > Vstartaddr endaddr targetaddr\r
+; > V startaddr endaddr targetaddr\r
 ;      Verify (compare) two memory areas\r
 \r
 cmd_V:\r
-       call sub_034eh\r
+       call get_arg_range_target\r
 l0dedh:\r
        push bc\r
        ld a,(de)\r
@@ -2067,7 +2031,7 @@ l0e10h:
 ;      Move memory\r
 \r
 cmd_M:\r
-       call sub_034eh\r
+       call get_arg_range_target\r
        call cp_hl_de\r
        jr nc,cmdm_up\r
        add hl,bc\r