Il c16 ha un bit/attributo apposta per il flash di ogni carattere, credo come per i colori, che il c64 non ha. Io ho provato a fare una routine MOLTO spartana che gestisce UNA sola stringa flashante alla volta...
; print flashing string
; v0.1 iAN CooG/HokutoForce
; sys 49152,delay,method,x,y,string
; sys 49152,0
*= $c000
JSR getnumpar ; 1o param; 0 spegne, >0 durata del ritardo
sta $02
sta $fe
beq deactivateirq
jsr getnumpar ; 2o param
STA method ; 0 norm/rev, >0 norm/spazi (flash)
jsr getnumpar ; 3o param; X coord
STA $04
jsr getnumpar ; 4o param; Y coord
STA $05
; 5o param, stringa
JSR getstrparam
sta $fb; lunghezza
stx $fc;<indirizzo della stringa
sty $fd;>indirizzo della stringa
sei
lda $02
bne activateirq
deactivateirq
jsr $fd15
lda #0
jmp fine
activateirq
lda irqflag; irq installato?
bne irqok
lda #<irq
ldx #>irq
sta $0314
stx $0315
irqok
ldy $fb ; prepara le stringhe
lda #$92 ; aggiunge alla stringa il rvsoff
sta stringa,y; altrimenti rimarrebbe settato
lda #0
sta stringa+1,y;terminatore di stringa
sta spaces,y
loopcopy
dey
lda ($fc),y
sta stringa,y
lda #$20 ;spazio
sta spaces,y
cpy #$0
bne loopcopy
sty $06
lda #1
fine
sta irqflag
cli
rts
;--------------------
irq
lda $fe ; counter del blink
bne exitirq
lda $02 ; resetta il counter innazitutto
sta $fe
sei
jsr decidi; decide come stampare
cli
exitirq
dec $fe
jmp $ea31
decidi
inc $06
lda $06 ; flipflop
and #$01 ; tiene buono solo 0 e 1 (pari e dispari)
bne norm
lda method
beq rev
lda #<spaces;stampa gli spazi anziche' la stringa
ldy #>spaces
jmp printstr
rev
lda #$12;revs on
bne *+4
norm
lda #$92;revs off
sta reverse
lda #<reverse
ldy #>reverse
printstr
sta printptrs+1
sty printptrs+3
ldx $D6;salva la pos cursore corrente
stx repoint+1
ldx $D3
stx repoint+3
ldx $05;cursorey
stx $D6
ldx $04;cursorex
stx $D3
JSR $E56C
printptrs
lda #00
ldy #00
jsr $ab1e; stampa la stringa in YA
repoint
lda #00 ; riposiziona il cursore
ldx #00
sta $D6
stx $D3
JSR $E56C
rts
;--------------------
getnumpar
JSR $AEFD; salta la virgola
jsr $ad9e; BASIC prmeval
jsr $b7f7; converte in int in $14-$15
lda $14 ; restituiamo il byte basso in A
rts
getstrparam
JSR $AEFD
JSR $ad9e; evaluta espressione, crea var temp, A=Lunghezza
JSR $B6A3; de-alloca var temp e restituisce l'indirizzo in YX
rts
;------------
irqflag .byte 0
method .byte 0
;reverse on o off, parte a scrivere la stringa da qua
reverse .byte 0
stringa
;lasciamo 256byte+1 flag reverse+1 per 0 terminatore di stringa
*= stringa +$102
;stringa dummy per flash
spaces