print lda $0200,x
In questo modo funziona solo da immediate mode, e non da programma. Bisognerebbe stabilire in testa alla funzione un puntatore copiando $7a-$7b in un puntatore utility e usare quello. Ho tentato di modificarlo ma anche cosi' non va "sempre" bene, perche' puo' trovare le stringhe da leggere a cavallo di 2 pagine.
* = $c000
lda #0
sta $22; $22-23 ptr buffer ($0200 imm. mode o indir. prg basic)
lda $7b
sta $23
lda #$2e
jsr param
stx $fb ; salva n.cifre da rappresentare (parte intera)
lda #$2c
jsr param
sta $02
inc $02
stx $fc ; salva n.cifre da rappr.(parte frazionaria) + spiazzamento
inc1
lda #$2e
jsr param
sta $03
inc $03
stx $fd ; calcola n.di cifre parte intera + spiazzamento
lda #$00
jsr param
stx $fe
lda $fc
cmp $fe
bcc error
lda $fb
cmp $fd
bcc error
beq ok
ldx $fb
jsr fill
ok ldy $02
lda #$2e
sta $ff
jsr print; scrive la parte intera
lda #$2e
jsr $ffd2; scrive .
ldy $03
lda #$00
sta $ff
jsr print
fill2 lda $fe
cmp $fc
beq exit
ldx $fc
sta $fd
jsr fill
exit rts ;jmp $a474; torna al prompt
print lda ($22),y
cmp $ff
beq done
cmp #$3a ;":"
beq done
jsr $ffd2; scrive la parte intera
iny
jmp print
done rts
fill lda #$30
jsr $ffd2
dex
cpx $fd
bne fill ; riempie di zeri la parte intera e frazionaria
rts
error jmp $b248; errore di formato
param sta $0313
ldx #$ff ; inizializza contatore per le cifre prima di .
ldy #$00
read lda ($7a),y; legge il carattere attuale
cmp $0313; se è il simbolo cercato,esce
beq ret
cmp #$3a ;":"
beq ret
inx ; incrementa puntatore
inc $7a ; incrementa puntatore al carattere
bne cont
inc $7b
cont jmp read
ret lda $7a
rts
Infatti se si prova un prg del genere
start tok64 testprtu.prg
0 dv=peek(186)
1 SYS57812"prtusing.prg",dv,0:POKE780,0:POKE781,0:POKE782,192:SYS65493
10 print"test print using"
11 print"test print using"
12 print"test print using"
13 print"test print using"
14 print"test print using"
15 print"test print using"
16 print"test print using"
17 print"test print using"
18 print"test print using"
19 print"test print using"
20 print"test print using"
21 print"test print using"
22 print"test print using"
23 print"test print using"
100 print "123.4 using xxx.xxx=";:sys49152,XXX.XXX,123.4:print" ok"
110 print "23.41 using xxx.xxx=";:sys49152,XXX.XXX,23.41:print" ok"
stop tok64
si vedra' che la riga 110 stampera' del garbage, mentre eliminando la riga 23 funziona.
Bisogna anche tenere conto che si potrebbe voler stampare una variabile e non un valore immediato.