Autore Topic: Scansione Della Tastiera  (Letto 2147 volte)

Alberto

  • Utente
  • **
  • Post: 589
  • Gioco Preferito: Grand Prix Circuit
Scansione Della Tastiera
« il: 03 Maggio 2006, 22:27:43 »
 ...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

Codice: [Seleziona]
;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


iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Scansione Della Tastiera
« Risposta #1 il: 03 Maggio 2006, 22:53:43 »
 Ottimo.
Mi allaccio a questo thread per segnalare una piccola utility di diagnostica, proveniente da un numero non ben precisato di CCC, per controllare lo stato di tutti i tasti.

Versione basic+LM originale, con scan semileggibile:
http://iancoog.altervista.org/hid/keyboardscan.rar

Versione completamente convertita in asm:
http://iancoog.altervista.org/hid/kbdscan.rar
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -