Bu sayfadaki yazılar
Sayfanın metni
Sayfa 25
rutin | Cmp Beg Cmp
Beg Lda
Lda
Bne Bitgt 2 Lda
Sta Lda
Sta Beg
# $40 Ex | # $SA
Bitgt 3 # $02
$0365
Ex İ # $30
$0365 # $00
$CI
; hâlâ senk. baytı mı? ; evet, öyleyse bekle ; güvenlik baytı? ; hayır, öyleyse senk. ; baytı aramaya devam.
; Rutin 3'ü göster
; kontrol toplamını ; sıfırla ; interrupt'tan çık
Burada da güvenlik baytı aranıyor. Eğer bayt ne senk. baytı ne de güvenlik baytıysa senkronizasyon yapılmamış demektir, başa dönüyoruz. Güvenlik baytıysa rutin
3'e geliyoruz. Rutin 3 Sta
Inc Lda
Cmp Bne Lda
Sta Bne Rutin 4 Ldy
Sta Eor Sta
Sta Inc
Inc Bne Inc Bitgt 5 Lda Cmp Lda
SBC Becc Lda
Sta Bne Rutin 5 Sta
Lda Sta Lda
$FB
Rutin 341 Rutin 34 1
$FF Exi # $43
$0365 Exİ # $00
($FB),Y $C1 $CI
$CI $DO20
$FB Bitgt 5 $FC $FB $FD
$FE Ex 1 # $65
$0365 $C2
# $FF $02 # $03
; Başlangıç, bitişi al. ; adresi bir artır ; $FB, $FC, $FD, $FE'ye ; değer yaz
; dört bayt da alınınca ; rutin 4'e geç
; baytı belleğe yaz ; kontrol toplamı ; kontrol toplamı ; hesapla ; çalıştığını göster
; yüklemenin sonuna ; geldik mi? : HAYIR! ; Rutin 5'e geldik
; kontrol toplamı oku ; Bitiş sinyali ; ver! ; Gene Bitgot'a
Sta $0365 ; Çevir Lda ; Bir daha kul- lanılâbilir Sta Rutin 341 ; hale gelir
Bne Exl
Yükleme kısmı bu kadarıyla ilgileniyor. Bu arada bütün yükleme boyunca çalışan bir de programımız vardı:
; Sinyal geldi mi? ; HAYIR! bek- le.
$03DD Lda $02 Beg $03DD İlk seferde bir şey yapmak istemediğimiz için normal
program olarak hiçbir şey koymadık. Yalnızca yüklemenin bilinmesini bekliyoruz.
Lda $00 Sta $01 ; sinyali temizle Ldoa # $07 ; ROM'lar içeri Sta $01 $03F3 ; Etrafı toparla! İsr $A663 ; CRL komutu Lda $CI ; kontrol top- lamarını Cmp $C2 ; karşılaştır Bne ERROR ; FARKLI!!! Jmp — A474 ; 'REDY.' yaz ERROR Ldx # $1D ; ?LOAD EROR' İmp — $A437 ; Mesajı yolla
Fark ettiğiniz gibi rutin AUTORUN için ayarlanmamış. Fakat bu işi yapmak çok kolay.
Jmp — $SA474 # yerine İsr $A659 Jmp —$A7AE
yazın. Dosya adı uzunluğunu üç artırın. Programınız artık AUTORUN da yapacaktır. $A7AE adresinde RUN komutu bulunmaktadır çünkü.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 24
Sta Lda
Sta Sta Lda
Lda
Lda Sta LDa Sta Lda Sta Lda Sta Lda Sta Lda Sta Lda
Sta Lda Sta Cli Jmp
$01 ; teyp de çalış- sın #$1F ; oluşacak inter- rupt türü $DCOD $DDOD $DDCOD ; Bu registerleri okuyarak $DDOD ; aktif hale ge- tiriyoruz # $68 ; $DCO4 ; Timer'ları # ; ayarla $DCOS ; # $90 ; Tape IRO'nun $DCOD ; aktif hale getir $FFFE ; IRO başlangıç ; adresi #$7B $FEFFA ; NMI'ı Bir BTI # $03 ; gösterecek şe- kilde $FFFB ; ayarla $00 ; sinyali $02 ; sıfırla $03DD
Yüklemeye giriş için gerekli tüm adresler ayarlandı.
02F3 Lda Sta Lda Sta Lmp 0300 word
# $03 $0302 # S$A4 $0303 $FF84 $E300,$02AB ; autostart adre- si
Burası sadece yüklemenin sonunda gelinen etrafı toparlama rutini.
Flame 0351
$0364
— “*isim Pha
Tya Pha Lda $DCOS Lday #$19 Sty $DCO3 Eor # $02 Lsr Lsr Rol Lda — $A9 Becc Hitgot Bes Exit
;Kullanılacak ; registerleri ; Stack'e at ; Timer'ı al ; Timer'ı yeni- den ; başlat
; Bit'in değerini ; CARRY'ye al ; Bayt'ı bayta al ; Bayt'ı al ; bayt tamam- landı bayt tamamlan- madı
Interrupt'ın girişinde, bit'i alıp, gerekli bayta ekliyoruz. Bayt tamamlanmadıysa, interrupt'tan çıkıyoruz. Tamamlandıysa:
Bitgot
Cmp # Bne Exit Lda #$16 Sta $0365
; Senkronizas- yon? ; hayır ; evet ; rutin 1'i göster
Burada oldukça etkili bir hile kullanılmış. $0364'teki Bcc'nin ikinci baytının değeriyle oynanarak, teypten bayt okunduğunda yapılan işlemler değiştiriliyor.
Ex 1
Exit
Lda — #$FE
Sta $A9 Lda $DCOD
Pla Tay Pla Rti
; Gelecek baytın bitişini ; anlamak için ; İnterrupt'ı te- mizle
Ve interrupt'ı terk edip asıl programa dönüyoruz.