Save space and implement page1_imm_call, page1_call, page0_ret (not used yet)
authorNick Downing <nick@ndcode.org>
Sun, 16 Jun 2019 11:29:10 +0000 (21:29 +1000)
committerNick Downing <nick@ndcode.org>
Sun, 16 Jun 2019 11:29:10 +0000 (21:29 +1000)
sm2.asm

diff --git a/sm2.asm b/sm2.asm
index 61bd2db..ecaf66d 100644 (file)
--- a/sm2.asm
+++ b/sm2.asm
@@ -44,6 +44,9 @@ page0_xchg_w:
        ld      h,page0
        jp      (hl)
 
+imm_call:
+       push    de
+       dec     h ; page 0
 page0_imm_call:
        ld      a,(bc)
        inc     bc
@@ -59,13 +62,13 @@ page0_imm_call:
        jp      (hl)
 
 page0_call:
-       pop     hl
+       pop     de
+_call:
        push    bc
-       ld      c,l
-       ld      b,h
+       ld      c,e
+       ld      b,d
        inc     bc
        ld      l,(hl)
-       ld      h,page0
        jp      (hl)
 
 page0_imm_jfalse:
@@ -111,10 +114,11 @@ page0_jmp:
        ld      l,a
        jp      (hl)
 
-       .org    page0 * 0x100 + 0x83
+       .org    page0 * 0x100 + 0x88
 
-page0_imm_stkadj:
-imm_stkadj:
+imm_stkptr:
+       push    de
+page0_imm_stkptr:
        ld      a,(bc)
        inc     bc
        ld      l,a
@@ -122,19 +126,21 @@ imm_stkadj:
        inc     bc
        ld      h,a
        .db     0x3e ; ld a,
-page0_stkadj:
+page0_stkptr:
        pop     hl
-stkadj:
+stkptr:
        add     hl,sp
-       ld      sp,hl
+       ex      de,hl
        ld      a,(bc)
        inc     bc
        ld      l,a
-       ld      h,page0
+       ld      h,page1
        jp      (hl)
 
-page0_imm_stkptr:
-imm_stkptr:
+page0_ret:
+       pop     bc
+page0_imm_stkadj:
+imm_stkadj:
        ld      a,(bc)
        inc     bc
        ld      l,a
@@ -142,19 +148,20 @@ imm_stkptr:
        inc     bc
        ld      h,a
        .db     0x3e ; ld a,
-page0_stkptr:
+page0_stkadj:
        pop     hl
-stkptr:
+stkadj:
        add     hl,sp
-       ex      de,hl
+       ld      sp,hl
        ld      a,(bc)
        inc     bc
        ld      l,a
-       ld      h,page1
+       ld      h,page0
        jp      (hl)
 
-page0_imm_stkld_w:
 imm_stkld_w:
+       push    de
+page0_imm_stkld_w:
        ld      a,(bc)
        inc     bc
        ld      l,a
@@ -184,6 +191,7 @@ imm_xchg_stkst_w:
        ld      a,(bc)
        inc     bc
        ld      h,a
+stkst_entry:
        add     hl,sp
        ld      (hl),e
        inc     hl
@@ -198,15 +206,17 @@ page0_stkst_w:
        pop     de
 stkst_w:
        pop     hl
-       add     hl,sp
-       ld      (hl),e
-       inc     hl
-       ld      (hl),d
-       ld      a,(bc)
-       inc     bc
-       ld      l,a
-       ld      h,page0
-       jp      (hl)
+;      add     hl,sp
+;      ld      (hl),e
+;      inc     hl
+;      ld      (hl),d
+;      ld      a,(bc)
+;      inc     bc
+;      ld      l,a
+;      ld      h,page0
+;      jp      (hl)
+; the non-immediate stack load/store is hardly ever used and only for symmetry
+       jr      stkst_entry
 
 page0_imm_w:
        inc     h ; page1
@@ -271,20 +281,18 @@ st_w:
 
        .org    page1 * 0x100
 
+page1_imm_stkptr:
+       jr      imm_stkptr
+page1_stkptr:
+       ex      de,hl
+       jr      stkptr
 page1_imm_stkadj:
        push    de
        jr      imm_stkadj
 page1_stkadj:
        ex      de,hl
        jr      stkadj
-page1_imm_stkptr:
-       push    de
-       jr      imm_stkptr
-page1_stkptr:
-       ex      de,hl
-       jr      stkptr
 page1_imm_stkld_w:
-       push    de
        jr      imm_stkld_w
 page1_stkld_w:
        ex      de,hl
@@ -312,6 +320,13 @@ page1_page0:
        dec     h ; page 0
        jp      (hl)
 
+page1_imm_call:
+       jp      imm_call
+
+page1_call:
+       dec     h ; page 0
+       jp      _call
+
 page1_imm_and_w:
        ld      a,(bc)
        inc     bc