24 Ağustos 2014 Pazar

$FFD2 (CHROUT)


$FFD2 (chrout) kernal rutini

Çıkış kanalına ki bu varsayılan olarak ekran oluyor bir bayt gönderir. Örneğin şu basic satırını hatırlayın.

print"<shift><clr-home>"

Ekranı tamamen siler. Bunu assembler olarak kodlamanın bir yolu da şöyledir:

LDA #$93
JSR $FFD2
RTS

Aşağıdaki program kodlarını cbm prg studio'da derleyebilirsiniz.

; 10 SYS2080

*=$801

        BYTE    $0B, $08, $0A, $00, $9E, $32, $30, $38, $30, $00, $00, $00

*=$0820

chrout=$FFD2

        LDX #$00        ; X=0
DEVAM   LDA mesaj,x     ; mesaj adresindeki veriyi x'deki değişime göre al
        JSR chrout      ; çıkış kanalı default ekrana yazdır
        INX             ; x = x + 1
        CPX #$12        ; x 18'e eşit değil ise devam'a dallan
        BNE DEVAM
        RTS

mesaj   byte $0e, $93 ; küçük harf moduna geç ve ekranı sil
        byte $cd, $45, $52, $48, $41, $42, $41, $a0 ; Merhaba Dostum
        byte $c4, $4f, $53, $54, $55, $4d, $0d, $0d


Dizi Yazdırma $AB1E (strout) BASIC rutini


Dizi Yazdırma

CBM Prg Studio ile yeni bir assembler projesi oluşturun. ASCII kodları ile ekrana diziyi yazdıran $AB1E (strout) basic rutinini kullanmayı öğreneceğiz. Bu dizi mutlaka $00 ile sonlandırmalıdır. Yoksa $00'ı buluna kadar yazıyor deli dumrul :)

Diyelim ki yazdırmak istediğiniz mesaj yada text adresi $4580'da olsun.

.M 4580 CD 45 52 48 41 42 41 00 

strout basic rutinini kullanabilmek için mesaj içeriğinin başlangıç adresi olan $4580'nin alt ve üst byte olarak A ve Y registerlerine atamalı sonra rutini çağırmalıyız. A registerine alt, Y registerine ise üst byte tanımlanmalıdır.

Aşağıdaki kodları IDE içine yazıp derleyin. Çabuk sonuç için emulator kullanabilirsiniz. IDE ayarlarından emulator ayarlarını yaptıktan sonra CTRL + F5 ile kolaylıkla derleyip sonucu görebilirsiniz.

; String output
; strout $AB1E basic rutini

*=$0820 ; başlangıç adresi

strout    = $AB1E 

;        LDA $D018       ; küçük harf moduna geç
;        ORA #$02
;        STA $D018

        LDA #<mesaj     ; mesaj adresinin a ve y için tanımlanması
        LDY #>mesaj
        JSR strout      ; diziyi yazdır
        RTS             ; basic'e dön (programı bitir)

mesaj   byte $0e, $93 ; küçük harf moduna geç ve ekranı sil
        byte $cd, $45, $52, $48, $41, $42, $41, $a0 ; Merhaba Dostum
        byte $c4, $4f, $53, $54, $55, $4d, $0d, $0d
        byte $00

; mesajın sonu mutlaka $00 ile bitmelidir                   
; mesaj ASCII kodları ile yazılmalı          


23 Ağustos 2014 Cumartesi

C64 (Commodore 64) 6510 (6502) Assembler

6510 (6502) Assembler

Zaman buldukça C64 üzerinde isterseniz emulatorlerinde de deneyebileceğiniz assembler kodlarını paylaşmaya çalışacağım. Ne biliyorsam onu yazacağım için aşırı teknik ayrıntılara dalmadan kodların ne işe yaradıklarından da bahsedeceğim.

İlk öğrendiğim assembler olduğu için (ilk aşklar unutulmaz misali) ayrı bir yeri var benim için. Zamanında elimize aylık çıkan Commodore dergisinden başka kaynak yoktu. Bu dergiyi satır satır okuya okuya, o demo benim şu intro senin deyip kodlarını multi ice kartuşları ile kırarak öğrenmeye çalıştığımız makina dili. Bu dili sevmemin nedenlerinden biride donanımı yazılım ile evirip çeviriyorsunuz bunun zevki 64 bitlik i7'de bile yok emin olun. Bana 1 ve 0'ları sevdiren C64'e sonsuz teşekkürler.

Kodlamaları http://www.ajordison.co.uk/ adresinde bulunan cbm prg studio adlı Windows üzerinde rahatlıkla derleyebileceğiniz ide ile yazmayı uygun buldum. Buradan elde edilen p00, prg uzantılı dosyaları isterseniz direkt emulatorlerde deneyebilirsiniz. 


Gerçek C64'te denemek için benim tercihim d64 formatını kullanmak üzere e-bay.com 'dan satın aldığım 1541 drive taklitçisi SD2IEC emulator cihazıhttp://www.sd2iec.co.uk/id14.html sitesinde özelliklerini öğrenebileceğiniz cihaz fiyat olarak uygun ve yeterli düzeyde. 



Sipariş sonrası İngiltere'den 10 gün içinde elime ulaştı. Tek eksiği (pek de eksik sayılmaz bana göre) turbolu kayıt yapamaması. Bu da zaten sd2iec cihazlarının genel özelliği ama ileride yeni firmware sürümleri ile çözebilirler mi bilmem.

Neyse kodlamaya hazır mıyız?