page1_sl_w:
pop hl
call math_sl_w
- jr mul_w_done
+ jr add_w_done ;mul_w_done
page1_imm_sl_w:
rst 0x28
page1_slrev_w:
pop hl
call math_sl_w0
- jr mul_w_done
+ jr add_w_done ;mul_w_done
page1_imm_srrev_sw:
rst 0x28
page1_imm_slrev_l:
rst 0x38
- .db 0x3e ; ld a,
+ ;.db 0x3e ; ld a,
+ call math_sl_l0
+ jr page1_dispatch2
page1_sl_l:
- rst 0x30
+ ;rst 0x30
+ exx
+ pop de
+ exx
+ pop hl
call math_sl_l0
jr page1_dispatch2
page1_imm_srrev_sl:
rst 0x38
- .db 0x3e ; ld a,
+ ;.db 0x3e ; ld a,
+ call math_sr_sl0
+ jr page1_dispatch2
page1_sr_sl:
- rst 0x30
+ ;rst 0x30
+ exx
+ pop de
+ exx
+ pop hl
call math_sr_sl0
jr page1_dispatch2
page1_imm_srrev_ul:
- rst 0x38
- .db 0x3e ; ld a,
+ ;rst 0x38
+ ;.db 0x3e ; ld a,
+ call math_sr_ul0
+ jr page1_dispatch2
page1_sr_ul:
- rst 0x30
+ ;rst 0x30
+ exx
+ pop de
+ exx
+ pop hl
call math_sr_ul0
page1_dispatch2:
ld a,(bc)
page2_imm_cmprev_sl:
rst 0x38
- .db 0x3e ; ld a,
+ ;.db 0x3e ; ld a,
+ jp math_cmprev_sl
page2_cmp_sl:
- rst 0x30
+ ;rst 0x30
;call math_cmprev_sl
;jr page2_dispatch0
- jp math_cmprev_sl
+ jp math_cmprev_sl0
page2_imm_cmprev_ul:
rst 0x38
- .db 0x3e ; ld a,
+ ;.db 0x3e ; ld a,
+ jp math_cmprev_ul
page2_cmp_ul:
- rst 0x30
+ ;rst 0x30
;call math_cmprev_ul
;jr page2_dispatch0
- jp math_cmprev_ul
+ jp math_cmprev_ul0
page2_imm_cmp_sl:
rst 0x38
- .db 0x3e ; ld a,
+ ;.db 0x3e ; ld a,
+ jp math_cmp_sl
page2_cmprev_sl:
- rst 0x30
+ ;rst 0x30
;call math_cmp_sl
;jr page2_dispatch0
- jp math_cmp_sl
+ jp math_cmp_sl0
page2_imm_cmp_ul:
rst 0x38
- .db 0x3e ; ld a,
+ ;.db 0x3e ; ld a,
+ jp math_cmp_ul
page2_cmprev_ul:
- rst 0x30
+ ;rst 0x30
;call math_cmp_ul
;jr page2_dispatch0
- jp math_cmp_ul
+ jp math_cmp_ul0
; page 2 to 2
jp math_and_imm_l
page2_and_l:
- rst 0x30
+ ;rst 0x30
;call math_and_l
;jr page2_dispatch2
- jp math_and_l
+ jp math_and_l0
page2_imm_or_l:
;call math_or_imm_l
jp math_or_imm_l
page2_or_l:
- rst 0x30
+ ;rst 0x30
;call math_or_l
;jr page2_dispatch2
- jp math_or_l
+ jp math_or_l0
page2_imm_xor_l:
;call math_xor_imm_l
jp math_xor_imm_l
page2_xor_l:
- rst 0x30
+ ;rst 0x30
;call math_xor_l
;jr page2_dispatch2
- jp math_xor_l
+ jp math_xor_l0
page2_imm_add_l:
rst 0x38
- .db 0x3e ; ld a,
+ ;.db 0x3e ; ld a,
+ jr add_l_entry
page2_add_l:
- rst 0x30
+ ;rst 0x30
+ exx
+ pop de
+ exx
+ pop hl
+add_l_entry:
exx
add hl,de
exx
page2_imm_subrev_l:
rst 0x38
- .db 0x3e ; ld a,
+ ;.db 0x3e ; ld a,
+ jr sub_l_entry
page2_sub_l:
- rst 0x30
+ ;rst 0x30
+ exx
+ pop de
+ exx
+ pop hl
+sub_l_entry:
exx
ex de,hl
or a
; use addition for page2_imm_sub_l
page2_subrev_l:
- rst 0x30
+ ;rst 0x30
+ exx
+ pop de
+ exx
+ pop hl
exx
or a
sbc hl,de
jr mul_l_done
page2_mul_l:
- rst 0x30
+ ;rst 0x30
+ exx
+ pop de
+ exx
+ pop hl
ex de,hl
call math_mul_l
jr mul_l_done
page2_imm_divrev_sl:
rst 0x38
- .db 0x3e ; ld a,
+ ;.db 0x3e ; ld a,
+ call math_div_sl0
+ jr div_l_done
page2_div_sl:
- rst 0x30
+ ;rst 0x30
+ exx
+ pop de
+ exx
+ pop hl
call math_div_sl0
jr div_l_done
page2_imm_div_sl:
rst 0x38
- .db 0x3e ; ld a,
+ ;.db 0x3e ; ld a,
+ ex de,hl
+ call math_div_sl
+ jr div_l_done
page2_divrev_sl:
- rst 0x30
+ ;rst 0x30
+ exx
+ pop de
+ exx
+ pop hl
ex de,hl
call math_div_sl
jr div_l_done
page2_imm_divrev_ul:
rst 0x38
- .db 0x3e ; ld a,
+ ;.db 0x3e ; ld a,
+ call math_div_ul0
+ jr div_l_done
page2_div_ul:
- rst 0x30
+ ;rst 0x30
+ exx
+ pop de
+ exx
+ pop hl
call math_div_ul0
jr div_l_done
page2_imm_div_ul:
rst 0x38
- .db 0x3e ; ld a,
+ ;.db 0x3e ; ld a,
+ ex de,hl
+ call math_div_ul
+ jr div_l_done
page2_divrev_ul:
- rst 0x30
+ ;rst 0x30
+ exx
+ pop de
+ exx
+ pop hl
ex de,hl
call math_div_ul
div_l_done:
ld h,page1
jp (hl)
+math_and_l0:
+ exx
+ pop de
+ exx
+ pop hl
math_and_l: ; de:hl' &= hl:de'
exx
ld a,l
ld h,page1
jp (hl)
+math_or_l0:
+ exx
+ pop de
+ exx
+ pop hl
math_or_l: ; de:hl' |= hl:de'
exx
ld a,l
ld h,page1
jp (hl)
+math_xor_l0:
+ exx
+ pop de
+ exx
+ pop hl
math_xor_l: ; de:hl' ^= hl:de'
exx
ld a,l
; use inline code for math_cmp_uw, math_cmprev_uw
+math_cmp_sl0:
+ exx
+ pop de
+ exx
+ pop hl
math_cmp_sl: ; cf=1 de:hl' < hl:de', zf=1 de:hl' == hl:de', signed
ex de,hl
or a
ld h,page0
jp (hl)
+math_cmp_ul0:
+ exx
+ pop de
+ exx
+ pop hl
math_cmp_ul: ; cf=1 de:hl' < hl:de', zf=1 de:hl' == hl:de', unsigned
ex de,hl
or a
ld h,page0
jp (hl)
+math_cmprev_sl0:
+ exx
+ pop de
+ exx
+ pop hl
math_cmprev_sl: ; cf=1 hl:de' < de:hl', zf=1 hl:de' == de:hl', signed
or a
sbc hl,de
ld h,page0
jp (hl)
-math_cmprev_ul: ; cf=1 de:hl' < de:de', zf=1 de:hl' == hl:de', unsigned
+math_cmprev_ul0:
+ exx
+ pop de
+ exx
+ pop hl
+math_cmprev_ul: ; cf=1 de:hl' < hl:de', zf=1 de:hl' == hl:de', unsigned
or a
sbc hl,de
;ret nz
; debugging
print_trace: ; print af, bc, de:hl', hl:de', sp, (sp+2):(sp)
+ call print_trace2
+ ld a,(bc)
+ inc bc
+ ld l,a
+ jp (hl)
+print_trace2:
push hl
push af
pop hl
call print_word
ld a,'
call print_char
- ld hl,4
+ ld hl,6
add hl,sp
call print_word
ld a,'
call print_char
- ld hl,6
+ ld hl,8
add hl,sp
ld a,(hl)
inc hl
call print_word
ld a,':
call print_char
- ld hl,4
+ ld hl,6
add hl,sp
ld a,(hl)
inc hl
call print_char
pop af
pop hl
- ld a,(bc)
- inc bc
- ld l,a
- jp (hl)
+ ret
print_word:
push af