26 Ağustos 2014 Salı

C64 Rutinlere Devam

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: