C64 Rutinlere Devam
Daha önceki blog girişlerinde ekranı silmek için BASIC'teki
PRINT CHR$(147)
komutu karşılığı
LDA #$93
JSR $FFD2
RTS
kullanmıştık. Ama daha kolay bir rutin var $E544. Örneği inceleyin.
; 10 SYS2176
*=$801
BYTE $0B, $08, $0A, $00, $9E, $32, $31, $37, $36, $00, $00, $00
*=$0880
basla JSR $E544 ; ekranı sil
LDX #$00 ; ekrana mesaj adresindeki texti yaz
dongu LDA MESAJ,X
STA $0428,X
INX
CPX #$27
BNE dongu
bekle LDA $DC01
CMP #$EF ; space veya fire tuşuna basana kadar bekle
BNE bekle
RTS ; BASIC'e dön
mesaj TEXT 'space tusuna basarak programi sonlandir'
Daha önce GETIN kernal rutinini klavye tamponundan karakter (ASCII) yakalamak için kullanmış ve akumulatore aktarıp işlem yapmıştık. Burada $DC01'deki değere göre space veya ateş tuşuna basılana kadar bekliyor.
$DC01 aslında PORTB yani joystick#1'e ait bitleri okuyabildiğimiz adres. Şöyle ki:
Örneğimizde CMP#$EF ile akumulatorü karşılaştırdık.
$EF yi ikilik düzende yazarsak %11101111, burada sağdan saymak ve sıfırdan başlamak üzere 4. bitin 0 olduğunu görürüz. Yani burası FIRE (Ateş) yada SPACE tuşuna basıldığının bit karşılığıdır. Peki diğer bitler ne işe yarar?
0. bit YUKARI (UP)
1. bit AŞAGI (DOWN),
2. bit SAĞ (RIGHT)
3. bit SOL (LEFT)
4. bit ATEŞ, BOŞLUK TUŞU (FIRE, SPACE)
Burada dikkat ettiyseniz aktif olan bit 0 oluyor.
Hiç yorum yok:
Yorum Gönder