call page0_jmp
.db <page0_imm_call
.dw sm_main
+ .dw 0
.db <page0_esc
jp 0
.dw 2
; call sm_factorial(argument)
- .db <page1_page0
- .db <page0_imm_call
+ .db <page1_imm_call
.dw sm_factorial
- .db <page0_imm_stkadj
.dw 4
; print 10000s
.db <page0_page1
.db page1_imm_add_w
.dw '0
- .db <page1_page0
- .db <page0_imm_call
+ .db <page1_imm_call
.dw sm_print_char
- .db <page0_imm_stkadj
.dw 2
; print 1000s
.db <page0_page1
.db page1_imm_add_w
.dw '0
- .db <page1_page0
- .db <page0_imm_call
+ .db <page1_imm_call
.dw sm_print_char
- .db <page0_imm_stkadj
.dw 2
; print 100s
.db <page0_page1
.db page1_imm_add_w
.dw '0
- .db <page1_page0
- .db <page0_imm_call
+ .db <page1_imm_call
.dw sm_print_char
- .db <page0_imm_stkadj
.dw 2
; print 10s
.db <page0_page1
.db page1_imm_add_w
.dw '0
- .db <page1_page0
- .db <page0_imm_call
+ .db <page1_imm_call
.dw sm_print_char
- .db <page0_imm_stkadj
.dw 2
; print 1s
.dw 0
.db page1_imm_add_w
.dw '0
- .db <page1_page0
- .db <page0_imm_call
+ .db <page1_imm_call
.dw sm_print_char
- .db <page0_imm_stkadj
.dw 2
; print cr
.db <page0_imm_w
.dw 0xd
- .db <page1_page0
- .db <page0_imm_call
+ .db <page1_imm_call
.dw sm_print_char
- .db <page0_imm_stkadj
.dw 2
; print lf
.db <page0_imm_w
.dw 0xa
- .db <page1_page0
- .db <page0_imm_call
+ .db <page1_imm_call
.dw sm_print_char
- .db <page0_imm_stkadj
.dw 2
; destroy stack frame
.dw 2
; return
- .db <page0_jmp
+ .db <page0_ret
sm_factorial:
.db <page0_trace
.dw 0
; call sm_factorial(argument - 1)
- .db <page1_page0
- .db <page0_imm_call
+ .db <page1_imm_call
.dw sm_factorial
- .db <page0_imm_stkadj
.dw 2
; get argument
; return
.db <page0_trace
- .db <page0_jmp
+ .db <page0_ret
1$:
; yes, set up for *result =
; return
.db <page0_trace
- .db <page0_jmp
+ .db <page0_ret
sm_print_char:
.db <page0_esc
ld a,(hl)
call print_char
ld h,page0
- jp page0_jmp
+ jp page0_ret