...nell'attesa di rilasciare una prima versione del TAP manager
Premetto che iAN CooG aveva già mostrato come scansionare la tastiera in un precedente post in questa sezione.
Un'applicazione interessante è quella di un blocco-tastiera a mò di "anti-list".Il programma permette all'utente di inserire una qualunque combinazione di
caratteri alfabetici e cifre (anche ripetuti),dopodichè torna all'interprete Basic.
L'input dell'utente viene ignorato fino a quando non viene ridigitata la combinazione
"segreta".Mentre la tastiera è bloccata risulta disattivata anche la combinazione di tasti RUN/STOP+RESTORE (NMI);inoltre,all'aumentare del numero di tasti,per i "ficcanaso" la difficoltà nel trovare la sequenza giusta cresce esponenzialmente.
Con soli 3 tasti,ad esempio,le combinazioni possibili sono 36^3 = 46656... :D
;BLOCCA TASTIERA PER C64
* = $c000
buff = $277
tape = $33c
row = $dc00
col = $dc01
nmi = $318
table = $eb81 ;<-EDIT usa la keyboard map del kernal
ldy #0
ldx #3
wait cpx $c6 ;finchè non si premono 3 tasti
bne wait
lda buff
sta tape
lda buff+1
sta tape+1
lda buff+2
sta tape+2
sty $289 ;maschera i tasti premuti
sty $c6
sty $fb
sty $289 ;blocca la tastiera
sei ;per consistenza IRQ
lda #<irq
sta $314
lda #>irq
sta $315
lda #$c1
sta nmi ;disattiva NMI
cli
rts
irq
ldx #8
rr dex
bmi exit ;nessun tasto premuto,esce
lda val,x
sta row ;legge riga tastiera
lda col
cmp #255
beq rr ;legge riga successiva
ldy #8 ;legge tasto premuto
rc asl
dey
bcs rc
txa
asl
asl
asl ;seleziona riga
sta $02
tya
adc $02
tax
cpx $c5
beq exit ;per evitare letture ripetute
ldy $fb
lda table,x
cmp tape,y ;cfr tasto digitato con combinaz
beq norm
ldy #$ff
sty $fb ;non corrisponde,resetta conteggio
norm
inc $fb
cpy #2 ;la sequenza corrisponde?
bne exit
lda #10
sta $289 ;sì,sblocca la tastiera
lda #$47
sta nmi ;riattiva NMI
exit
jmp $ea31
val .byte $fe,$fd,$fb,$f7,$ef,$df,$bf,$7f