saturn-examples/scu-dsp/lib/unparse_base10.asm

58 lines
1.5 KiB
NASM

;;
;; inline function: unparse_base10
;;
;; argument: m2[0]
;; return: base10 + 16 in m3[56 - 63]
;; requires: div10_unsigned
unparse_base10:
;; clear end of m3
mov (64 - 8),ct3
mov 7,lop
lps
mov 0,mc3
mov (64 - 8),ct3
;; output: m3
unparse_base10_loop:
mov 0,ct2
mvi div10_unsigned,pc
;; [X ] [Y ] [D1 ]
mov mc2,y mov 1,lop ; mvi imm,pc delay slot (executed twice)
;; after function return:
mov all,mc0 ; m0[1] (1234)
mov all,pl
;; mod10: multiply by 10:
sl mov alu,a
sl mov alu,a
sl mov alu,a
add mov alu,a
add mov alu,a mov 0,ct0 ; restore ct0 after 'mov all,mc1'
;; a: 12340
mov mc0,a mov all,pl
;; a: 12345 m0[0]
;; p: 12340
;; mod10: subtract (a - p)
sub mov alu,a mov 16,pl
;; a: 5
;; convert to vdp2 character
add mov alu,a
;; store digit in m3
mov mc0,p clr a mov all,mc3 ; m0[1]
;; p: 1234
;; a: 0
add mov alu,a mov 0,ct0
;; a: 1234
jmp nz,unparse_base10_loop
mov all,mc0 ; jmp delay slot