dos33fsprogs/games/tfv/gr_put_num.s

199 lines
3.4 KiB
ArmAsm

;****** ** **** **** ** ** ****** **** ****** ****** ******
;** ** **** ** ** ** ** ** ** ** ** ** ** **
;** ** ** **** **** ****** **** ****** ** ****** ******
;** ** ** ** ** ** ** ** ** ** ** ** **
;****** ****** ****** **** ** **** ****** ** ****** **
;===========================
; gr put num
;===========================
; damage in DAMAGE_VAL_LO/HI (BCD)
; location in XPOS,YPOS
gr_put_num:
lda #$ff
; color should be in A when we get here
gr_put_num_color:
sta COLOR
lda #1
sta gr_put_num_leading_zero
; put high digit first
lda DAMAGE_VAL_HI
beq gr_put_num_bottom_byte
jsr gr_put_num_byte
gr_put_num_bottom_byte:
lda DAMAGE_VAL_LO
; fallthrough
;=================================
; print two-digit BCD number in A
gr_put_num_byte:
pha ; store on stack
gr_put_num_tens:
and #$f0
bne gr_put_num_print_tens
; was zero, check if we should print
lda gr_put_num_leading_zero ; if 1, we skip
bne gr_put_num_ones
pla ; restore value
pha
gr_put_num_print_tens:
; we were non-zero, notify leading zero
ldy #0
sty gr_put_num_leading_zero
; print tens digit
lsr
lsr
lsr
lsr
asl
tay
lda number_sprites,Y
sta INL
lda number_sprites+1,Y
sta INH
jsr put_sprite_mask
; point to next
lda XPOS
clc
adc #4
sta XPOS
gr_put_num_ones:
; we were non-zero, notify leading zero
ldy #0
sty gr_put_num_leading_zero
; print ones digit
pla
and #$f
asl
tay
lda number_sprites,Y
sta INL
lda number_sprites+1,Y
sta INH
jsr put_sprite_mask
rts
gr_put_num_leading_zero: .byte $01
; Numbers
; ****** ** **** **** ** ** ****** **** ****** ****** ******
; ** ** **** ** ** ** ** ** ** ** ** ** ** **
; ** ** ** **** **** ****** **** ****** ** ****** ******
; ** ** ** ** ** ** ** ** ** ** ** ** **
; ****** ****** ****** **** ** **** ****** ** ****** **
number_sprites:
.word number0_sprite
.word number1_sprite
.word number2_sprite
.word number3_sprite
.word number4_sprite
.word number5_sprite
.word number6_sprite
.word number7_sprite
.word number8_sprite
.word number9_sprite
.word numberX_sprite
.word numberX_sprite
.word numberX_sprite
.word numberX_sprite
.word numberX_sprite
.word numberX_sprite
number0_sprite:
.byte $3,$3
.byte $55,$A5,$55
.byte $55,$AA,$55
.byte $A5,$A5,$A5
number1_sprite:
.byte $3,$3
.byte $5A,$55,$AA
.byte $AA,$55,$AA
.byte $A5,$A5,$A5
number2_sprite:
.byte $3,$3
.byte $A5,$A5,$5A
.byte $5A,$A5,$A5
.byte $A5,$A5,$A5
number3_sprite:
.byte $3,$3
.byte $A5,$A5,$5A
.byte $A5,$A5,$5A
.byte $A5,$A5,$AA
number4_sprite:
.byte $3,$3
.byte $55,$AA,$55
.byte $A5,$A5,$55
.byte $AA,$AA,$A5
number5_sprite:
.byte $3,$3
.byte $55,$A5,$A5
.byte $A5,$A5,$5A
.byte $A5,$A5,$AA
number6_sprite:
.byte $3,$3
.byte $5A,$A5,$A5
.byte $55,$A5,$55
.byte $A5,$A5,$A5
number7_sprite:
.byte $3,$3
.byte $A5,$A5,$55
.byte $AA,$55,$AA
.byte $AA,$A5,$AA
number8_sprite:
.byte $3,$3
.byte $55,$A5,$55
.byte $55,$A5,$55
.byte $A5,$A5,$A5
number9_sprite:
.byte $3,$3
.byte $55,$A5,$55
.byte $A5,$A5,$55
.byte $AA,$AA,$A5
numberX_sprite:
.byte $3,$3
.byte $55,$55,$55
.byte $55,$55,$55
.byte $55,$55,$55