.inclu "b:global.mac" sect code ; Val16 converts a string at r1, r0 bytes long, to a number in r0 val16: push clr r3 10$: movb (r1)+, r2 cmp r2, #40 beq 20$ sub #'0, r2 mul #10., r3 add r2, r3 20$: sob r0, 10$ mov r3, r0 pop rts pc ; Same as Val16 but for long. The number is returned in r0/r1 Val32: push clr r3 clr r2 10$: push movb (r1)+, r4 cmp r4, #40 bne 20$ cmp (sp)+, (sp)+ br 30$ 20$: sub #'0, r4 ashc #2, r2 add (sp)+, r3 adc r2 add (sp)+, r2 ashc #1, r2 add r4, r3 adc r2 30$: sob r0, 10$ mov r2, r0 mov r3, r1 pop rts pc LDiv: push clr r2 mov #32., r3 ; A long is 32 bits wide! 10$: rol r1 rol r0 rol r2 cmp r2, 6(sp) bcs 20$ sub 6(sp), r2 20$: sob r3, 10$ rol r1 rol r0 com r1 com r0 mov r2, 6(sp) pop rts pc .even .end