]> cloudbase.mooo.com Git - ddt180.git/commitdiff
Command A,L: Reorg (HL instead of IY). Save/restore IX/IY around BDOS calls.
authorLeo C <erbl259-lmu@yahoo.de>
Thu, 18 Aug 2016 12:39:09 +0000 (14:39 +0200)
committerLeo C <erbl259-lmu@yahoo.de>
Thu, 18 Aug 2016 12:39:09 +0000 (14:39 +0200)
ddt180.z80

index 5b531f6667d73440427cff1e843e5f1c0a775695..4f12b0ab464249f215329ea3abdcf88e44ede4e1 100644 (file)
@@ -392,6 +392,8 @@ p_char_lparen:
 outquote:\r
        ld a,''''\r
 outchar:\r
+       push ix\r
+       push iy\r
        push hl\r
        push de\r
        push bc\r
@@ -406,6 +408,8 @@ outchar:
        pop bc\r
        pop de\r
        pop hl\r
+       pop iy\r
+       pop ix\r
        ret\r
 \r
 pstr:\r
@@ -535,7 +539,7 @@ assert_eol:
 to_error:\r
        jp ERROR\r
 \r
-chk_sp:\r
+chk_stack:\r
        push hl\r
        push de\r
        ld hl,0\r
@@ -824,14 +828,14 @@ get_range:
        inc de\r
 l03a2h:\r
        push hl\r
-       push af\r
+       push af                 ;'S' flag\r
        call expr\r
        jr c,l03b8h\r
        ld b,h\r
        ld c,l\r
        pop af\r
        pop hl\r
-       jr z,l03b6h\r
+       jr z,l03b6h             ;'S'?\r
        ld a,c\r
        sub l\r
        ld c,a\r
@@ -845,7 +849,7 @@ l03b6h:
 l03b8h:\r
        pop af\r
        pop hl\r
-       jr z,error0\r
+       jr z,error0             ;'S', but no expression following\r
        scf\r
        ret\r
 \r
@@ -1103,7 +1107,7 @@ fact_factor:
        jp ERROR\r
 \r
 do_factor:\r
-       call chk_sp\r
+       call chk_stack\r
        call get.number\r
        ret nc\r
        inc de\r
@@ -2317,6 +2321,12 @@ l0d60h:
        dec hl\r
        inc de\r
        cp '.'\r
+       jr      nz,cmds_dash\r
+       ld      a,(de)\r
+       or      a\r
+       jr      nz,l0d8ah\r
+       ret\r
+cmds_dash:\r
        jp z,assert_eol\r
        cp '-'\r
        jr nz,l0d8ah\r
@@ -3310,52 +3320,56 @@ close_file:
 cmd_A:\r
        ld hl,(last_A)\r
        call get_lastarg_def\r
-       push hl\r
-       pop iy\r
-       ld hl,l1259h\r
+       ld (last_A),hl\r
+       ld (cmd_A_prev),hl\r
+       ld hl,cmda_restart\r
        ld (error_func),hl\r
        ld (l1262h),sp\r
-l1211h:\r
-       push iy\r
-       pop hl\r
-       ld (last_A),hl\r
+cmda_loop:\r
+       ld hl,(last_A)\r
        ld (var.$),hl\r
        push hl\r
        call p_disas_line\r
-       pop iy\r
        ld de,(var.@)\r
        ld a,d\r
        or e\r
-       ld c,17\r
+       ld c,19\r
        jr z,l122dh\r
-       ld c,25\r
+       ld c,19+7\r
 l122dh:\r
        call p_fill_space\r
        ld c,b\r
        push bc\r
        call get_line\r
        pop bc\r
+       pop hl\r
        call skipbl\r
        cp '.'\r
        ret z\r
        cp '-'\r
        jr nz,l124bh\r
-       ld iy,(cmd_A_prev)\r
-       jr l1211h\r
+       ld hl,(cmd_A_prev)\r
+       jr cmda_lpend\r
 l124bh:\r
+       push hl\r
+       pop iy\r
+       push hl\r
        and a\r
-       call nz,sub_1268h\r
-       ld (cmd_A_prev),iy\r
+       call nz,asemble_line\r
        ld b,0\r
-       add iy,bc\r
-       jr l1211h\r
+       pop hl\r
+       ld (cmd_A_prev),hl\r
+       add hl,bc\r
+cmda_lpend:\r
+       ld (last_A),hl\r
+       jr cmda_loop\r
 \r
-l1259h:\r
+cmda_restart:\r
        call l0146h\r
        ld sp,(l1262h)\r
-       jr l1211h\r
+       jr cmda_loop\r
 \r
-sub_1268h:\r
+asemble_line:\r
        call skipbl\r
        ld hl,t_MNEMONICS\r
        call sub_030ah\r
@@ -4455,8 +4469,6 @@ cmd_L:
        jr nc,l18dbh\r
        ld hl,(last_L)\r
 l18dbh:\r
-       push hl\r
-       pop iy\r
        call next_arg\r
        call get_range\r
        jr nc,l1905h\r
@@ -4464,45 +4476,35 @@ l18dbh:
        ld b,16\r
 l18ebh:\r
        push bc\r
-       push iy\r
-       pop hl\r
-       push hl\r
-       call p_disas_line\r
-       call crlf\r
-       pop iy\r
-       ld c,b\r
-       ld b,0\r
-       add iy,bc\r
-       ld (last_L),iy\r
+       call    cmdl_p_line\r
        pop bc\r
        djnz l18ebh\r
        ret\r
+\r
 l1905h:\r
        call assert_eol\r
-       ld h,b\r
-       ld l,c\r
-       ld a,b\r
-       or c\r
-       jr nz,l190fh\r
-       dec hl\r
+       ld      d,h\r
+       ld      e,l\r
+       add     hl,bc\r
+       ex      de,hl\r
 l190fh:\r
-       push hl\r
-       push iy\r
-       pop hl\r
-       push hl\r
-       call p_disas_line\r
-       call crlf\r
-       pop iy\r
-       ld e,b\r
-       ld d,000h\r
-       add iy,de\r
-       ld (last_L),iy\r
-       pop hl\r
-       and a\r
-       sbc hl,de\r
-       ret z\r
-       ret c\r
-       jr l190fh\r
+       push    de\r
+       call    cmdl_p_line\r
+       pop     de\r
+       call    cp_hl_de\r
+       jr      c,l190fh\r
+       ret\r
+\r
+cmdl_p_line:\r
+       push    hl\r
+       call    p_disas_line\r
+       call    crlf\r
+       pop     hl\r
+       ld      c,b\r
+       ld      b,0\r
+       add     hl,bc\r
+       ld      (last_L),hl\r
+       ret\r
 \r
 p_disas_line:\r
        call p_label\r
@@ -4512,6 +4514,8 @@ p_disas_line:
        call outbl\r
        sub a\r
        ld (con_col),a\r
+       push    hl\r
+       pop     iy\r
        call p_disas_instr\r
        and a\r
        ret z\r
@@ -4540,20 +4544,24 @@ p_disas_instr:
        ld (l1ffdh),a\r
        call disas_get_instrlen\r
        jr nc,l197fh\r
-       push bc\r
-       call p_mnemonic\r
+       push    bc\r
+       ld      a,(con_col)\r
+       add     a,5\r
+       ld      c,a\r
+       call    pstr\r
+       call    p_fill_space\r
        ex de,hl\r
        call call_hl\r
        pop bc\r
        ld a,(l1ffdh)\r
-       ld hl,(l1ffbh)\r
+       ld hl,(disas_arg_16)\r
        scf\r
        ret\r
 \r
 l197fh:\r
        call pstr_inl\r
        DC      '???'\r
-       ld b,001h\r
+       ld b,1\r
        sub a\r
        ret\r
 \r
@@ -5140,9 +5148,9 @@ l1d4eh:
        ld a,002h\r
 sub_1d50h:\r
        ld (l1ffdh),a\r
-       ld (l1ffbh),hl\r
-       call out_hl\r
-       ret\r
+       ld (disas_arg_16),hl\r
+       jp out_hl\r
+\r
 p_arg_ww_mn:\r
        call p_arg_ww\r
        call p_char_comma\r
@@ -5152,6 +5160,7 @@ p_arg_addr_hl:
        call sub_1e13h\r
        call p_char_comma\r
        jp p_arg_hlixiy\r
+\r
 p_arg_hl_addr:\r
        call p_arg_hlixiy\r
        call p_char_comma\r
@@ -5357,13 +5366,6 @@ p_arg:
        call sel_dc_string\r
        jp pstr\r
 \r
-p_mnemonic:\r
-       ld      a,(con_col)\r
-       add     a,5\r
-       ld      c,a\r
-       call    pstr\r
-       jp      p_fill_space\r
-\r
 t_MNEMONICS:\r
        DC      'ADC'\r
        DC      'ADD'\r
@@ -5529,7 +5531,7 @@ sub_1ffeh:
        call disas_get_instrlen\r
        jp nc,ERROR\r
        ld c,b\r
-       ld b,000h\r
+       ld b,0\r
        ld hl,(reg.pc)\r
        add hl,bc\r
        call sub_09cah\r
@@ -5965,7 +5967,7 @@ isprefix_ixiy:
        db      0\r
 last_L:\r
        dw      TPA\r
-l1ffbh:\r
+disas_arg_16:\r
        dw      0\r
 l1ffdh:\r
        db      0\r