77 lines
1.1 KiB
ArmAsm
77 lines
1.1 KiB
ArmAsm
// #LAYOUT# STD * #TAKE
|
|
// #LAYOUT# * BASIC_0 #TAKE
|
|
// #LAYOUT# * * #IGNORE
|
|
|
|
//
|
|
// Works similar to $BDCD in original C64 BASIC
|
|
//
|
|
|
|
print_integer:
|
|
|
|
// Tested with original C64 ROMs, that it trashes FAC1 too
|
|
|
|
sta FAC1_exponent+1
|
|
stx FAC1_exponent+0
|
|
|
|
// Check for 0
|
|
|
|
ora FAC1_exponent+0
|
|
bne print_integer_not_0
|
|
|
|
// Just print '0' and quit
|
|
|
|
lda #$30
|
|
jmp JCHROUT
|
|
|
|
print_integer_not_0:
|
|
|
|
// Try to find the index of the first digit
|
|
|
|
ldy #$04
|
|
!:
|
|
jsr print_integer_compare
|
|
bcs print_integer_digit
|
|
|
|
dey
|
|
bpl !- // branch always
|
|
|
|
print_integer_digit:
|
|
|
|
// Determine digit to print
|
|
|
|
ldx #$00
|
|
!:
|
|
jsr print_integer_compare
|
|
bcc !+
|
|
|
|
// Raise digit, lower the integer
|
|
|
|
inx
|
|
|
|
sec
|
|
lda FAC1_exponent+0
|
|
sbc print_integer_tab_lo, y
|
|
sta FAC1_exponent+0
|
|
lda FAC1_exponent+1
|
|
sbc print_integer_tab_hi, y
|
|
sta FAC1_exponent+1
|
|
|
|
bcs !- // branch always
|
|
!:
|
|
// Convert digit in .X to PETSCII in .A and print it out
|
|
|
|
txa
|
|
clc
|
|
adc #$30
|
|
|
|
jsr JCHROUT
|
|
|
|
// Check if next iteration is needed
|
|
|
|
dey
|
|
bpl print_integer_digit
|
|
|
|
// The end
|
|
|
|
rts
|