]> cloudbase.mooo.com Git - ddt180.git/commitdiff
New relocator v0.7
authorLeo C <erbl259-lmu@yahoo.de>
Mon, 17 Jun 2019 21:22:58 +0000 (23:22 +0200)
committerLeo C <erbl259-lmu@yahoo.de>
Wed, 19 Jun 2019 09:14:39 +0000 (11:14 +0200)
Makefile
ddt180.z80

index 0d11916b6a756f670ceb3e69c725be0cf9208857..4fb0f3e702635aae39f255efdec160c29f9646eb 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -10,6 +10,11 @@ ifneq ($(CPM),0)
 else
   SUFFIX := 180
 endif
+CURCPM := $(shell awk -e '/CPM/ {print $$3}' config.inc 2>/dev/null)
+ifneq ($(CPM),$(CURCPM))
+  $(shell printf "     CPM     equ     $(CPM)\r\n\032" > config.inc)
+endif
+
 
 EXTRA_DIST := autorevision.cache version.inc
 
@@ -26,23 +31,26 @@ ZIP := zip
 
 AS_OPT := MFSX
 
-.phony: all
-all: $(PROG).com
+.PHONY: all
+all: $(PROG).com prl2offz
 
-.intermediate: $(PROG).180
+.INTERMEDIATE: $(PROG).180
 
 $(PROG).180: $(PROG).z80
        cp $< $@
 
-$(PROG).com: $(PROG).prl Makefile
-       @# Remove the PRL header record (256 bytes)
-       dd status=none bs=256 skip=1  if=$< of=$@
+$(PROG).com: $(PROG).prl Makefile prl2offz
+       @# Convert relocation bitmap to compressed list of offsets
+       ./prl2offz $< $@
 
 $(PROG).prl: $(OBJ)
        $(LINK) -'$(PROG)[op]'
 
 $(PROG).rel: config.inc version.inc
 
+prl2offz: prl2offz.c
+       gcc -Wall -Wextra -O2 -g -o $@ $<
+
 $(foreach X,$(subst =,:=,$(subst ",,$(filter VCS_%,\
        $(shell autorevision -t sh -o $(CURDIR)/autorevision.cache)))),$(eval $X))
 
@@ -58,20 +66,13 @@ ifeq ($(VCS_WC_MODIFIED),1)
   VERS := $(VERS)-dirty
 endif
 
-
-
 version.inc: autorevision.cache
        @echo update $@ to $(VERS)
        @printf "defvers        macro\r\n\
                db      '$(VERS)'\r\n\
                endm\r\n\032" > $@
 
-config.inc: Makefile
-       @printf "\
-       CPM     equ     $(CPM)\r\n\
-       \032" > $@
-
-.phony: dist
+.PHONY: dist
 dist: $(PROG).com version.inc
        $(GIT) archive --format=zip --prefix=$(PREFIX)/ -9 -o $(DIST_NAME) HEAD^{tree}
        @mkdir -p $(PREFIX)
@@ -79,7 +80,7 @@ dist: $(PROG).com version.inc
        $(ZIP) -r -9 $(DIST_NAME) $(PREFIX) $(PROG).com
        @$(RM) -r $(PREFIX)
 
-.phony: clean
+.PHONY: clean
 clean:
        rm -f $(PROG).com $(PROG).180 *.rel *.lst *.prl
 
@@ -90,7 +91,7 @@ clean:
 define cpm-asm =
 COMMAND="$(ASM) -$(basename $<)/$(AS_OPT)"; \
 OUTPUT=$$(mktemp); echo $${COMMAND}; \
-$${COMMAND} > $${OUTPUT}; \
+$${COMMAND} > $${OUTPUT} < $<; \
 grep -q '^ 0 Error(s) Detected' $${OUTPUT}; ERROR=$$? ; \
 if [ "$${ERROR}" != "0" ]; then cat $${OUTPUT}; rm -f $@; \
 else awk -f filter-unref.awk ddt180.lst; fi ; \
index adbe46fa526e3722f56db5467c68ca9c32fb8ee3..fd160766604e2b28dd78be3e3dc79eb9b95b316a 100644 (file)
@@ -54,6 +54,20 @@ signon:
        defvers\r
        dc      '  ('\r
 \r
+;-------------------------------------------------------------------------------\r
+\r
+reloc_getbit   macro\r
+       local   nextbit\r
+       exx\r
+       djnz    nextbit\r
+       ld      b,8                     ;reload bit counter\r
+       ld      e,(hl)                  ;get next 8 relocation bits\r
+       inc     hl\r
+nextbit:\r
+       sla     e\r
+       exx\r
+       endm\r
+\r
 ;-------------------------------------------------------------------------------\r
 ; Clear old position\r
 \r
@@ -98,27 +112,49 @@ wearehere:
        ei\r
        ld      hl,ddtz_end             ;start of reloc bitmap\r
        add     hl,de\r
-\r
        push    hl\r
        exx\r
        pop     hl\r
-       ld      bc,0108h                ;init bit counter b (c==reload val)\r
+       ld      b,1                     ;init bit counter b\r
        exx\r
 \r
        LD      HL,ddtz_base\r
        add     hl,de                   ;--> ddtz_base\r
-       ld      bc,prog_size\r
+\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
+       push    de\r
+       push    hl\r
+\r
+       ld      de,4\r
+       ld      a,2\r
+       ld      hl,0\r
+reloc_l:\r
+       reloc_getbit\r
+       jr      nc,reloc_got\r
+       cp      16\r
+       jr      z,reloc_done\r
+       add     hl,de\r
+       ld      b,a\r
+       ex      de,hl\r
+reloc_l1:\r
+       add     hl,hl\r
+       djnz    reloc_l1\r
+       ex      de,hl\r
+       add     a,a\r
+       jr      reloc_l\r
+reloc_got:\r
+       ex      de,hl\r
+       ld      hl,0\r
+       ld      b,a\r
+reloc_bitloop:\r
+       reloc_getbit\r
+       adc     hl,hl\r
+       djnz    reloc_bitloop\r
+       add     hl,de\r
+       pop     de\r
+       add     hl,de\r
+       pop     de\r
+\r
        LD      A,(HL)\r
        ADD     A,E\r
        LD      (HL),A\r
@@ -126,13 +162,11 @@ reloc_nl:
        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
-\r
+       jr      reloc_lp\r
+reloc_done:\r
+       exx\r
+       ld      (bitmap_end),hl\r
 ;-------------------------------------------------------------------------------\r
 \r
 \r
@@ -181,8 +215,8 @@ ini_sign:
        call    out_hl\r
        call    pstr_inl\r
        dc      ' - '\r
-       ld      de,prog_size+bitmap_size-1\r
-       add     hl,de\r
+       ld      hl,(bitmap_end)\r
+       dec     hl\r
        call    out_hl\r
        call    pstr_inl\r
        dc      ')',CR,LF\r
@@ -1591,7 +1625,14 @@ cmd_E:
        push    af\r
        call    get_arg_final\r
 \r
-       ld      bc,prog_size+bitmap_size\r
+       ex      de,hl\r
+       ld      hl,(bitmap_end)\r
+       ld      bc,ddtz_base\r
+       or      a\r
+       sbc     hl,bc\r
+       ld      b,h\r
+       ld      c,l\r
+       ex      de,hl\r
        pop     af\r
        jr      nz,cmde_bottom\r
        sbc     hl,bc\r
@@ -2639,7 +2680,7 @@ i.storebyte:
        call cp_hl_de\r
        jr nc,ist_1\r
 \r
-       ld de,ddtz_end+bitmap_size-1\r
+       ld de,(bitmap_end)\r
        call cp_hl_de\r
        jr nc,error2\r
 ist_1:\r
@@ -4004,6 +4045,9 @@ last_L:
 pbl_loop_adr:\r
        dw      0addeh\r
 \r
+bitmap_end:\r
+       dw      0\r
+\r
 ;-------------------------------------------------------------------------------\r
 \r
 conbuf:\r