1
0
mirror of https://frontier.innolan.net/github/AmigaExamples.git synced 2025-11-23 20:01:40 +00:00
Files
AmigaExamples/028.bs/counter.s
2016-05-31 09:29:48 +10:00

166 lines
2.1 KiB
ArmAsm

xdef RenderCounter
xdef RenderCounterAtY
xdef ResetCounter
xdef IncrementCounter
xdef DecrementCounter
xdef RenderNumber5
xdef RenderNumber4
xdef RenderNumber3
xdef RenderNumber2
xdef ToAscii
RenderCounter:
;; d0.w x position
;; a1.l text
lea panel,a0
move.w #20,d1
jsr DrawText8
rts
RenderCounterAtY:
;; d0.w x position
;; d1.w y position
;; a1.l text
lea panel,a0
jsr DrawText8
rts
RenderNumber4:
;; d0.l number
;; d1.w x position
move.l d1,d3
move.l #4,d2
bsr ToAscii
move.l a0,a1
lea panel,a0
move.w #20,d1
move.w d3,d0
jsr DrawText8
rts
RenderNumber2:
;; d0.l number
;; d1.w x position
move.l d1,d3
move.l #2,d2
bsr ToAscii
move.l a0,a1
lea panel,a0
move.w #20,d1
move.w d3,d0
jsr DrawText8
rts
RenderNumber3:
;; d0.l number
;; d1.w x position
move.l d1,d3
move.l #3,d2
bsr ToAscii
move.l a0,a1
lea panel,a0
move.w #20,d1
move.w d3,d0
jsr DrawText8
rts
test:
dc.b "HELLO"
dc.b 0
RenderNumber5:
;; d0.l number
;; d1.w x position
move.l d1,d3
move.l #5,d2
bsr ToAscii
move.l a0,a1
lea panel,a0
move.w #20,d1
move.w d3,d0
jsr DrawText8
rts
ResetCounter:
move.l #"0000",(a0)
rts
IncrementCounter:
move.l a0,a1
add.l #3,a0
.loop:
sub.l d0,d0
move.b (a0),d0
addq.b #1,d0
cmp.b #'9',d0
ble .done
move.b #'0',d0
move.b d0,(a0)
sub.l #1,a0
cmp.l a1,a0
blt .startOfText
bra .loop
.done:
move.b d0,(a0)
.startOfText:
rts
DecrementCounter:
move.l a0,a1
add.l #3,a0
.loop:
sub.l d0,d0
move.b (a0),d0
cmp.b #'0',d0
beq .dontWrap
subq.b #1,d0
bra .done
.dontWrap:
move.b #'9',d0
move.b d0,(a0)
sub.l #1,a0
cmp.l a1,a0
blt .startOfText
bra .loop
.done:
move.b d0,(a0)
.startOfText:
rts
ToAscii:
;; d0.l number
;; d2.l numb chars
;; movem.l d0-d2/a1,-(a7)
lea staticBuffer,a0
move.l a0,a1
add.l d2,a0
move.b #0,(a0)
moveq #10,d2
.loop:
divu.w d2,d0
swap d0
addi.b #"0",d0
move.b d0,-(a0)
move.b #0,d0
swap d0
tst.w d0
bne.s .loop
.loop2:
cmp.l a0,a1
beq .done
move.b #'0',-(a0)
bra .loop2
.done:
;; movem.l (a7)+,d0-d2/a1
rts
staticBuffer:
dc.b "000000000"
dc.b 0