]> cloudbase.mooo.com Git - ddt180.git/blobdiff - ddt180.z80
Convert relocater to an user command. WIP
[ddt180.git] / ddt180.z80
index 28b0199e71da6de3b9a75415d1280ca60d99099b..81b68b483138257f16069a1ba913cecc701e25ae 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
+       cseg\r
+ldr_start:\r
+       LD      SP,stack\r
+\r
+;      LD      DE,signon\r
+;      LD      C,BDOS_PSTR\r
+;      CALL    BDOS\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
+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
+\r
 ;-------------------------------------------------------------------------------\r
 ; Relocation loader\r
 ;\r
-TPA    equ     0100h\r
-       cseg\r
-       .phase  TPA\r
+       LD      HL,ddtz_end             ;start of reloc bitmap\r
+       ld      bc,0108h                ;init bit counter\r
 \r
-       jp      start\r
-       ds      3\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
 \r
-ldr_end:\r
-ldr_size       equ     $ - TPA\r
-current_phase  defl    $\r
+       push    hl\r
+       PUSH    BC\r
+       ld      de,ldr_end\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
+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
-       .dephase\r
-current_cseg   defl    $\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
@@ -49,38 +167,20 @@ BDOS_PSTR  equ     9       ;Print String
 \r
 STACK_SIZE     equ     80      ;ddtz internal stack\r
 CONBUF_SIZE    equ     80      ;Size of console input buffer\r
-EXPR_BUF_SIZE  equ     128     ;expressen buffer for conditional breakpoints\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 ddtz_bdos\r
+       jp 0\r
 l0003h:\r
        rst 30h\r
 di_or_ei:\r
        nop\r
        ret\r
-ddtz_bdos:\r
-       jp      0\r
-\r
-current_cseg   defl    $ - current_cseg\r
-       .phase  current_phase + current_cseg\r
-signon:\r
-       db      'DDTZ/180'\r
-       db      ' - Version '\r
-       maclib  version.inc\r
-       defvers\r
-       db      CR,LF,'$'\r
-msgz80:\r
-       db      'Z80 or better required!',cr,lf,'$'\r
-\r
-current_phase  defl    $\r
-       .dephase\r
-current_cseg   defl    $\r
-       ds      STACK_SIZE - (current_phase - signon)\r
 \r
+       ds      STACK_SIZE\r
 \r
 stack:\r
 reg.l2:        db      000h\r
@@ -116,54 +216,6 @@ cmd_rpt:dw mainloop
 conbuf:\r
        db      CONBUF_SIZE\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
-       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
-       ld hl,(1)               ;wboot addr\r
-       ld de,?const\r
-       ld b,6\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
-       jr mainloop\r
-\r
        ds      CONBUF_SIZE + 3 - ($ - conbuf)\r
 \r
 ;-------------------------------------------------------------------------------\r
@@ -171,9 +223,6 @@ vini_l:
 ?const:        jp      0               ; return console input status\r
 ?conin:        jp      0               ; return console input character\r
 ?cono: jp      0               ; send console output character\r
-?list: jp      0               ; send list output character\r
-?auxo: jp      0               ; send auxiliary output character\r
-?auxi: jp      0               ; return auxiliary input character\r
 \r
 CMDTAB:\r
        dw      ERROR ;cmd_@    ;examine/substitute the displacement register @\r
@@ -2493,13 +2542,22 @@ disas_nopfx:
 \r
 disas_pfx.ED:\r
        inc iy\r
+       ld hl,l228bh\r
+       call lookup_op_arg\r
+       ld b,3\r
+       ret c\r
+       ld hl,b_1c40_start\r
+       call lookup_op_arg\r
+       ld b,4\r
+       ret c\r
+\r
        ld hl,b_1bc9_start              ;1 byte opcode, no arguments\r
        call lookup_op\r
-       ld b,2\r
-       ret c\r
+       jr c,da_ed1\r
+\r
        ld hl,b_1bf4_start\r
        call lookup_op_arg\r
-       jr nc,da_ed1\r
+       ret nc\r
 \r
        ld a,e\r
        cp a_noarg\r
@@ -2515,16 +2573,8 @@ disas_pfx.ED:
 \r
 da_ed0:\r
        scf\r
-       ld b,2\r
-       ret\r
 da_ed1:\r
-       ld hl,l228bh\r
-       call lookup_op_arg\r
-       ld b,3\r
-       ret c\r
-       ld hl,b_1c40_start\r
-       call lookup_op_arg\r
-       ld b,4\r
+       ld b,2\r
        ret\r
 \r
 ;-------------------------------------------------------------------------------\r
@@ -2621,6 +2671,16 @@ l1a0ah:
 \r
 ;-------------------------------------------------------------------------------\r
 \r
+test_DDFD:\r
+       ld a,(hl)\r
+       and a\r
+       ret z\r
+       inc hl\r
+       cp (iy+000h)\r
+       jr nz,test_DDFD\r
+       scf\r
+       ret\r
+\r
 lookup_op:\r
        ld a,(hl)\r
        inc hl\r
@@ -2635,38 +2695,15 @@ l1a7fh:
        ld e,a_noarg\r
        jr get_mnemonic\r
 \r
-\r
-test_DDFD:\r
-       ld a,(hl)\r
-       and a\r
-       ret z\r
-       inc hl\r
-       cp (iy+000h)\r
-       jr nz,test_DDFD\r
-       scf\r
-       ret\r
-\r
 lookup_op_arg:\r
-       ld a,(iy+000h)\r
-       and (hl)\r
-       inc hl\r
-       cp (hl)\r
-       inc hl\r
-       jr z,l1aa8h\r
-       inc hl\r
-       inc hl\r
-       ld a,(hl)\r
-       and a\r
-       jr nz,lookup_op_arg\r
-       ret\r
-\r
-l1aa8h:\r
-       ld b,(hl)\r
-       inc b\r
+       call lookup_branch_op\r
+       ret nc\r
+       ld a,e\r
+       ld e,d\r
+       cp a,0ffh\r
        ret z                   ;carry clear\r
-       dec b\r
-       inc hl\r
-       ld e,(hl)\r
+       ld b,a\r
+\r
 get_mnemonic:\r
        ld hl,t_MNEMONICS\r
        bit 7,b\r
@@ -2686,18 +2723,17 @@ get_m1:
        ret\r
 \r
 lookup_branch_op               ;TODO\r
-       ld a,(iy+000h)\r
-       and (hl)\r
+       ld a,(hl)\r
+       and a\r
+       ret z\r
        inc hl\r
+       and (iy+000h)\r
        cp (hl)\r
        inc hl\r
        jr z,l1aa8_br\r
        inc hl\r
        inc hl\r
-       ld a,(hl)\r
-       and a\r
-       jr nz,lookup_branch_op\r
-       ret\r
+       jr lookup_branch_op\r
 \r
 l1aa8_br:\r
        ld e,(hl)\r
@@ -3008,8 +3044,8 @@ a_rr      equ     $-t_argf
        db      fi_ry,','               ;ld r[y],r[z]\r
 a_r    equ     $-t_argf\r
        db      fi_rz,0                 ;op r[z]\r
-a_ar   equ     $-t_argf\r
-       db      'A,',fi_rz,0            ;op A,r[z]\r
+;a_ar  equ     $-t_argf\r
+;      db      'A,',fi_rz,0            ;op A,r[z]\r
 a_cc   equ     $-t_argf\r
        db      fi_ccy,0                ;op cc[y]\r
 a_rst  equ     $-t_argf\r
@@ -3282,25 +3318,13 @@ pstr_inl:
 opc    macro   x\r
 \r
 i_&x   equ     opc_index\r
-o_&x   equ     $-opc_tabstart\r
+;o_&x  equ     $-opc_tabstart\r
        dc      '&x'\r
 opc_index      defl    opc_index+1\r
        endm\r
 \r
-opc1   macro   x,y\r
-\r
-i_&x&y equ     opc_index\r
-o_&x&y equ     $-opc_tabstart\r
-       db      '&x'\r
-i_&y   equ     opc_index+1\r
-o_&y   equ     $-opc_tabstart\r
-       dc      '&y'\r
-opc_index      defl    opc_index+2\r
-       endm\r
-\r
-\r
 t_MNEMONICS:\r
-opc_tabstart   defl    $\r
+;opc_tabstart  defl    $\r
 opc_index      defl    0\r
 ; 1-byte other\r
        opc NOP\r
@@ -3363,8 +3387,7 @@ opc_index defl    0
        opc RRD\r
        opc RLD\r
 \r
-;Block instructions\r
-t_mn_bli:\r
+; Block instructions\r
        opc LDI\r
        opc CPI\r
        opc INI\r
@@ -3382,7 +3405,7 @@ t_mn_bli:
        opc INDR\r
        opc OTDR\r
 \r
-;Z180\r
+; Z180\r
        opc IN0\r
        opc OUT0\r
        opc TST\r
@@ -3488,7 +3511,7 @@ t_op_branch:
        dw l20ach\r
        db 0ffh,0edh            ;Prefix ED\r
        dw l20b8h\r
-t_op_branch0:\r
+\r
        db 0ffh,0cdh            ;call mn\r
        dw l2080h\r
        db 0ffh,0c3h            ;jp mn\r
@@ -3671,91 +3694,6 @@ bp_tab:
         endm\r
        endm\r
 \r
-expr_buf:\r
-current_cseg   defl    $ - current_cseg\r
-       .phase  current_phase + current_cseg\r
-\r
-start:\r
-       LD      SP,ldr_end+(stack-ddtz_base)\r
-       LD      DE,signon               ;ldr_end+(expr_buf-ddtz_base)\r
-       LD      C,BDOS_PSTR\r
-       CALL    BDOS\r
-\r
-       xor     a\r
-       dec     a\r
-       jp      po,reloc\r
-       ld      de,msgz80\r
-       LD      C,BDOS_PSTR\r
-       CALL    BDOS\r
-       jp      0\r
-\r
-reloc:\r
-       LD      HL,ldr_end+ddtz_size    ;start of reloc bitmap\r
-       ld      bc,0108h                ;init bit counter\r
-\r
-       EXX\r
-       LD      HL,(BDOS+1)\r
-       LD      (ldr_end+(ddtz_bdos+1-ddtz_base)),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
-\r
-       push    hl\r
-       PUSH    BC\r
-       ld      de,ldr_end\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
-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
-       cpi\r
-       jp      pe,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
-current_phase  defl    $\r
-       .dephase\r
-current_cseg   defl    $\r
-\r
-       ds      EXPR_BUF_SIZE - ($ - expr_buf)\r
-expr_bufe:\r
-\r
 ;-------------------------------------------------------------------------------\r
 \r
 last_S:\r
@@ -3783,7 +3721,7 @@ last_L:
        dw      TPA\r
 \r
 pbl_loop_adr:\r
-       dw      0\r
+       dw      0addeh\r
 \r
 ddtz_size      equ     $-ddtz_base\r
 ddtz_end:\r