Add decimal factorial result printing using the division routines
authorNick Downing <nick@ndcode.org>
Mon, 10 Jun 2019 04:02:50 +0000 (14:02 +1000)
committerNick Downing <nick@ndcode.org>
Mon, 10 Jun 2019 04:02:50 +0000 (14:02 +1000)
sm.asm

diff --git a/sm.asm b/sm.asm
index 5fb2a5f..9c72f71 100644 (file)
--- a/sm.asm
+++ b/sm.asm
        .db     <adj_isp
        .dw     2
 
-       .db     esc
-       ex      de,hl
-       call    print_word
-       call    print_crlf
+;      ; print it the easy way
+;      .db     <esc
+;      ex      de,hl
+;      call    print_word
+;      call    print_crlf
+;      ex      de,hl
+;      call    sm
+
+       ; print 10000s
+       .db     <div_iuw
+       .dw     10000
+       .db     <add_iw
+       .dw     '0
+       .db     <call_i
+       .dw     sm_print_char
+       .db     <adj_isp
+       .dw     2
+
+       ; print 1000s
+       .db     <div_iuw
+       .dw     1000
+       .db     <add_iw
+       .dw     '0
+       .db     <call_i
+       .dw     sm_print_char
+       .db     <adj_isp
+       .dw     2
+
+       ; print 100s
+       .db     <div_iuw
+       .dw     100
+       .db     <add_iw
+       .dw     '0
+       .db     <call_i
+       .dw     sm_print_char
+       .db     <adj_isp
+       .dw     2
+
+       ; print 10s
+       .db     <div_iuw
+       .dw     10
+       .db     <add_iw
+       .dw     '0
+       .db     <call_i
+       .dw     sm_print_char
+       .db     <adj_isp
+       .dw     2
+
+       ; print 1s
+       .db     <add_iw
+       .dw     '0
+       .db     <call_i
+       .dw     sm_print_char
+       .db     <adj_isp
+       .dw     2
+
+       .db     <imm_w
+       .dw     0xd
+       .db     <call_i
+       .dw     sm_print_char
+       .db     <adj_isp
+       .dw     2
+
+       .db     <imm_w
+       .dw     0xa
+       .db     <call_i
+       .dw     sm_print_char
+       .db     <adj_isp
+       .dw     2
+
+       .db     <esc
        rst     0 ; can't return into ccp as clobbered by stack growth
 
 sm_factorial:
@@ -92,6 +159,15 @@ sm_factorial:
        ; return 
        .db     <jmp
 
+sm_print_char:
+       .db     <esc
+       ld      hl,0
+       add     hl,sp
+       ld      a,(hl)
+       call    print_char
+       call    sm
+       .db     <jmp
+
 digits:
        .ascii  '0123456789abcdef'
 
@@ -137,7 +213,7 @@ print_space:
        pop     af
        ret
 
-print_stack:
+print_trace:
        push    af
        push    bc
        push    de
@@ -272,7 +348,7 @@ print_char:
        .org    0x330
 
 ; print stack
-       jp      print_stack
+       ret ;jp print_trace
 
        .org    0x338