]> cloudbase.mooo.com Git - ddt180.git/commitdiff
reloc to current load address
authorLeo C <erbl259-lmu@yahoo.de>
Sat, 18 May 2019 23:09:06 +0000 (01:09 +0200)
committerLeo C <erbl259-lmu@yahoo.de>
Sat, 18 May 2019 23:09:28 +0000 (01:09 +0200)
Makefile
ddt180.z80

index 905a397027ca3575d7158e97fcb8a09a3b19bd9d..0bf356d936f9e98cf7ebf1a9af27493915784e5f 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -25,12 +25,12 @@ all: $(PROG).com
 
 
 
-$(PROG).com: $(PROG).prl
+$(PROG).com: $(PROG).prl Makefile
        @# Remove the PRL header record (256 bytes)
        dd status=none bs=256 skip=1  if=$< of=$@
 
 $(PROG).prl: $(OBJ)
-       $(LINK) -'$(PROG)[op,$$SZ]'
+       $(LINK) -'$(PROG)[op]'
 
 $(PROG).rel: version.inc
 
index 81b68b483138257f16069a1ba913cecc701e25ae..437cbcca2344c99036606d0a9730f6b58b06ac5d 100644 (file)
 ;   - Use Digital Research Link-80 to generate a .PRL file (op switch).\r
 ;   - Cut the .PRL header (first 256 byte) end rename the result to DDTZ.COM.\r
 \r
-TPA    equ     0100h\r
+\r
+; Some greneral definitions\r
+\r
+BS             equ     08h\r
+TAB            equ     09h\r
+CR             equ     0dh\r
+LF             equ     0ah\r
+DEL            equ     7fh\r
+CNTRX          equ     'X'-'@'\r
+\r
+; CP/M memory layout\r
+\r
+BDOS           equ     5\r
+TPA            equ     0100h\r
+\r
+; ddtz specific definitions\r
+\r
+STACK_SIZE     equ     80      ;ddtz internal stack\r
+CONBUF_SIZE    equ     80      ;Size of console input buffer\r
+BP_CNT         equ     12      ;Number of breakpoints\r
+BP_SIZE                equ     4       ;Size of a breakpoint record\r
+\r
+bitmap_size    equ     (prog_size+7)/8\r
+\r
+;-------------------------------------------------------------------------------\r
 \r
        cseg\r
-ldr_start:\r
-       LD      SP,stack\r
+start::\r
+ddtz_base::\r
+       jr reloc\r
+       nop\r
+l0003h:\r
+       rst 30h                 ;rst used by ddtz\r
+di_or_ei:                      ;ints enabled/disabled while ddtz is running\r
+       nop\r
+       ret\r
 \r
-;      LD      DE,signon\r
-;      LD      C,BDOS_PSTR\r
-;      CALL    BDOS\r
+?const:        jp      0               ; return console input status\r
+?conin:        jp      0               ; return console input character\r
+?cono: jp      0               ; send console output character\r
 \r
-       ld hl,(1)               ;wboot addr\r
-       ld de,?const\r
-       ld b,3\r
-vini_l:\r
-       inc     hl\r
-       inc     hl\r
-       inc     hl\r
-       ex      de,hl\r
-       inc     hl\r
-       ld      (hl),e\r
-       inc     hl\r
-       ld      (hl),d\r
-       inc     hl\r
-       ex      de,hl\r
-       djnz    vini_l\r
+;-------------------------------------------------------------------------------\r
 \r
 signon:\r
-       call    pstr_inl\r
        db      'DDTZ/180'\r
        db      ' - Version '\r
        maclib  version.inc\r
        defvers\r
-       dc      CR,LF\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
-       ld a,i\r
-       ld (reg.i),a\r
-       ld a,0f3h\r
-       jp po,l0093h\r
-       ld a,0fbh\r
-l0093h:\r
-       ld (reg.iff),a\r
-       call di_or_ei\r
-       ld hl,ddtz_base\r
-       ld l,000h\r
-       ld (reg_sp),hl\r
-\r
-       jp mainloop\r
+       dc      '  ('\r
 \r
 ;-------------------------------------------------------------------------------\r
-; Relocation loader\r
-;\r
-       LD      HL,ddtz_end             ;start of reloc bitmap\r
-       ld      bc,0108h                ;init bit counter\r
+; Determine current execution position\r
 \r
-       EXX\r
-       LD      HL,(BDOS+1)\r
-       LD      (ddtz_base+1),HL\r
-       LD      BC,ddtz_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
+reloc:\r
+       ld      bc,(0)\r
+       ld      de,(2)\r
+       ld      sp,4\r
+       ld      hl,0e9e1h               ;opcpdes pop hl/jp (hl)\r
+       ld      (0),hl\r
+       rst     0\r
+wearehere:\r
+       ld      (0),bc\r
+       ld      (2),de\r
+       ld      de,-(wearehere-ddtz_base)\r
+       add     hl,de                   ; hl:\r
 \r
-       push    hl\r
-       PUSH    BC\r
-       ld      de,ldr_end\r
+       ld      de,ddtz_base            ; de:\r
+       or      a\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      HL,TPA\r
+       ex      de,hl                   ; de: reloc offset\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
+       exx\r
+       ld      h,a\r
+       ld      bc,0108h                ;init bit counter b (c==reload val)\r
+       exx\r
+       LD      HL,ddtz_base\r
+       add     hl,de                   ;--> ddtz_base\r
+       ld      bc,prog_size\r
 reloc_lp:\r
        EXX\r
        djnz    reloc_nl\r
@@ -125,106 +114,155 @@ reloc_next:
        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
 ;-------------------------------------------------------------------------------\r
-; DDT/Z core\r
-;\r
-\r
-; Some greneral definitions\r
-\r
-BS             equ     08h\r
-TAB            equ     09h\r
-CR             equ     0dh\r
-LF             equ     0ah\r
-DEL            equ     7fh\r
-CNTRX          equ     'X'-'@'\r
-\r
-; CP/M memory layout\r
-\r
-BDOS           equ     5\r
-TPA            equ     0100h\r
 \r
-; BDOS function calls\r
 \r
-BDOS_PSTR      equ     9       ;Print String\r
-\r
-; ddtz specific definitions\r
-\r
-STACK_SIZE     equ     80      ;ddtz internal stack\r
-CONBUF_SIZE    equ     80      ;Size of console input buffer\r
-BP_CNT         equ     12      ;Number of breakpoints\r
-BP_SIZE                equ     4       ;Size of a breakpoint record\r
 \r
 ;-------------------------------------------------------------------------------\r
 \r
-ddtz_base:\r
-       jp 0\r
-l0003h:\r
-       rst 30h\r
-di_or_ei:\r
-       nop\r
-       ret\r
-\r
-       ds      STACK_SIZE\r
 \r
-stack:\r
-reg.l2:        db      000h\r
-reg.h2:        db      000h\r
-reg.e2:        db      000h\r
-reg.d2:        db      000h\r
-reg.c2:        db      000h\r
-reg.b2:        db      000h\r
-reg.f2:        db      000h\r
-reg.a2:        db      000h\r
-       db      000h\r
-reg.i: db      000h\r
-reg.iy:        dw      0000h\r
-reg.ix:        dw      0000h\r
-reg.f: db      000h\r
-reg.a: db      000h\r
-reg.c: db      000h\r
-reg.b: db      000h\r
-reg.e: db      000h\r
-reg.d: db      000h\r
-reg.l: db      000h\r
-reg.h: db      000h\r
-reg_sp:        dw      TPA\r
-reg.iff:\r
-       db      0f3h\r
-       db      0c3h\r
-reg.pc:        dw      TPA\r
+init::\r
+       LD      SP,stack\r
 \r
-cmd_rpt:dw     mainloop\r
+       ld      hl,(1)          ;wboot addr\r
+       ld      de,?const\r
+       ex      de,hl\r
+       ld      b,3\r
+vini_l:\r
+       inc     de\r
+       inc     de\r
+       inc     de\r
+       inc     hl\r
+       ld      (hl),e\r
+       inc     hl\r
+       ld      (hl),d\r
+       inc     hl\r
+       djnz    vini_l\r
 \r
-;-------------------------------------------------------------------------------\r
+       ld      hl,signon\r
+       call    pstr\r
+       ld      hl,ddtz_base\r
+       call    out_hl\r
+       call    pstr_inl\r
+       dc      ' - '\r
+       ld      de,prog_size+bitmap_size-1\r
+       add     hl,de\r
+       call    out_hl\r
+       call    pstr_inl\r
+       dc      ')',CR,LF\r
 \r
-conbuf:\r
-       db      CONBUF_SIZE\r
+       ld      a,i\r
+       ld      (reg.i),a\r
+       ld      a,0f3h\r
+       jp      po,l0093h\r
+       ld      a,0fbh\r
+l0093h:\r
+       ld      (reg.iff),a\r
+       call    di_or_ei\r
+       ld      hl,ddtz_base\r
+       ld      l,000h\r
+       ld      (reg_sp),hl\r
 \r
-       ds      CONBUF_SIZE + 3 - ($ - conbuf)\r
+       jp      mainloop\r
 \r
 ;-------------------------------------------------------------------------------\r
 \r
-?const:        jp      0               ; return console input status\r
-?conin:        jp      0               ; return console input character\r
-?cono: jp      0               ; send console output character\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
+CMDTAB::\r
        dw      ERROR ;cmd_@    ;examine/substitute the displacement register @\r
        dw      ERROR ;cmd_A    ;Assemble\r
        dw      cmd_B           ;Breakpoints display/set/clear\r
@@ -257,7 +295,7 @@ ERROR:
        call    pstr_inl\r
        dc      '?',CR,LF\r
        ;fall thru\r
-mainloop:\r
+mainloop::\r
        ld sp,stack\r
        ld hl,(reg.pc)\r
        call bp_clr_temporary\r
@@ -479,7 +517,6 @@ DELC:
        call    DELC1\r
        dec     hl\r
        dec     b\r
-       inc     c\r
        ld      a,(hl)\r
        cp      ' '\r
        ret     nc\r
@@ -500,13 +537,10 @@ DELL:
 get_line:\r
        push hl                 ;\r
        ld hl,conbuf            ;\r
-       ld c,(hl)               ;\r
-       inc hl                  ;\r
-       ld b,000h               ;\r
-       inc hl                  ;\r
+       ld b,0                  ;\r
 inlnxtch:\r
-       ld a,c                  ;\r
-       or a                    ;\r
+       ld a,b                  ;\r
+       cp CONBUF_SIZE          ;\r
        jr z,inl_e              ;\r
        call incharw            ;\r
        cp CR                   ;\r
@@ -542,16 +576,12 @@ gl_5:
        call outchar            ;\r
        inc hl                  ;\r
        inc b                   ;\r
-       dec c                   ;\r
        jr inlnxtch             ;\r
 \r
 inl_e:\r
        ld (hl),0\r
-       ld hl,conbuf+1          ;\r
-       ld (hl),b               ;\r
        call CRLF               ;\r
-       inc     hl\r
-       ex      de,hl\r
+       ld de,conbuf            ;\r
        pop hl                  ;\r
        ret                     ;\r
 \r
@@ -986,6 +1016,9 @@ do_factor:
        ld hl,TPA\r
        cp 'L'\r
        ret z\r
+       ld hl,(reg.pc)\r
+       cp '$'\r
+       ret z\r
        cp '-'\r
        jr z,fact_factneg\r
        cp '~'\r
@@ -2044,7 +2077,7 @@ cmd_M:
        dec hl\r
        dec de\r
        lddr\r
-       db 01h          ;swallow ldir instruction (ld bc,...)\r
+       ret\r
 cmdm_up:\r
        ldir\r
        ret\r
@@ -2143,9 +2176,9 @@ l0ed3h:
        ret\r
 \r
 sub_0ee6h:\r
-       ld hl,conbuf+1\r
+       ld hl,conbuf\r
        call sub_0ef7h\r
-       ld de,conbuf+1\r
+       ld de,conbuf\r
        and a\r
        sbc hl,de\r
        ld b,l\r
@@ -3723,8 +3756,50 @@ last_L:
 pbl_loop_adr:\r
        dw      0addeh\r
 \r
+;-------------------------------------------------------------------------------\r
+\r
+conbuf::\r
+       ds      CONBUF_SIZE+1\r
+\r
+;-------------------------------------------------------------------------------\r
+\r
+       rept    (STACK_SIZE+3)/4\r
+       db      0deh,0adh,0beh,0efh\r
+       endm\r
+stack::\r
+reg.l2:        db      000h\r
+reg.h2:        db      000h\r
+reg.e2:        db      000h\r
+reg.d2:        db      000h\r
+reg.c2:        db      000h\r
+reg.b2:        db      000h\r
+reg.f2:        db      000h\r
+reg.a2:        db      000h\r
+       db      000h\r
+reg.i: db      000h\r
+reg.iy:        dw      0000h\r
+reg.ix:        dw      0000h\r
+reg.f: db      000h\r
+reg.a: db      000h\r
+reg.c: db      000h\r
+reg.b: db      000h\r
+reg.e: db      000h\r
+reg.d: db      000h\r
+reg.l: db      000h\r
+reg.h: db      000h\r
+reg_sp:        dw      TPA\r
+reg.iff:\r
+       db      0f3h\r
+       db      0c3h\r
+reg.pc:        dw      TPA\r
+\r
+cmd_rpt:dw     mainloop\r
+\r
+;-------------------------------------------------------------------------------\r
+\r
 ddtz_size      equ     $-ddtz_base\r
-ddtz_end:\r
+prog_size      equ     $-start\r
+ddtz_end::\r
 \r
 ;-------------------------------------------------------------------------------\r
 \r