|
Konu Başlığı: $D018 (namı diğer 53272) 0. bit Bilmecesi Gönderen: Simon (Özay Turay) üzerinde Ekim 22, 2019, 11:13:20 ÖÖ Bildiğiniz (veya bilmediğiniz) gibi C64'te $D018 adresindeki değere göre VIC-II çipinin ekran ve karakter belleği olarak kullanmasını istediğimiz bellek konumlarını belirleyebiliyoruz.
7,6,5,4. bitlerin oluşturduğu sayıyı $0400 ile çarparsak ekran belleğini buluyoruz. Varsayılan olarak bu %0001 değerine sahip, yani ekran belleği $0400 (1024) adresinde. 3,2,1. bitlerin oluşturduğu sayıyı $0800 ile çarparsak karakter belleğini buluyoruz. Varsayılan olarak bu %010 değerine sahip, yani karakter belleği $1000 (4096) adresinde. 0. bit ise varsayılan olarak %1 değerine sahip ama bu değeri 0 yapsak da bir değişiklik olmuyor gibi görünüyor. Araştırmalarım sonucu bu bitten bahseden hiçbir kaynak bulamadım. Karakter seti değişimi ile ilgili kodlarda BASIC'te bu bitin hep 1 olarak alındığını gördüm. Zaten varsayılan değer 1 olduğu için gayet mantıklı. POKE 53272,21:REM Büyük Harf/Grafik Karakter Seti (21 = %00010101) POKE 53272,23:REM Küçük/Büyük Harf Karakter Seti (23 = %00010111) Assembly kodlarında ise gördüğüm tüm örneklerde (nightlord üstadın muhteşem tutorial'ı dahil) bu bit hep 0 olarak alınmış. lda #$14 ;Büyük Harf/Grafik Karakter Seti ($14 = %00010100) sta $d018 lda #$16 ;Küçük/Büyük Harf Karakter Seti ($16 = %00010110) sta $d018 Bu bit gerçekten bir yerleri etkiliyor mu? Bilen varsa ya şimdi konuşsun ya da sonsuza kadar sussun. Muhtemelen gereksiz yere takılıyorum ve bu bit gerçekten kullanılmıyor ama yine de sorayım dedim. ::) http://nightnetwork.org/writings_tr/c64_grafik_programlama/chunk/ch05s07.html (http://nightnetwork.org/writings_tr/c64_grafik_programlama/chunk/ch05s07.html) https://www.c64-wiki.com/wiki/53272 (https://www.c64-wiki.com/wiki/53272) http://sta.c64.org/cbm64mem.html (http://sta.c64.org/cbm64mem.html) http://unusedino.de/ec64/technical/aay/c64/vic24.htm (http://unusedino.de/ec64/technical/aay/c64/vic24.htm) (burada unused olarak belirtmiş) Konu Başlığı: Ynt: $D018 (namı diğer 53272) 0. bit Bilmecesi Gönderen: ilkerficicilar üzerinde Ekim 22, 2019, 11:19:46 ÖÖ Bir olasılık VIC-II'nin silikonu incelenerek anlaşılabilir ilk bitin bir yere bağlı olup olmadığı:
http://visual6502.org/images/8565/Commodore_8565_die_shot_20x_1a_8500w.jpg (http://visual6502.org/images/8565/Commodore_8565_die_shot_20x_1a_8500w.jpg) edit: Şurada daha kaliteli ve ayrıntılı fotoları varmış: http://mail.lipsia.de/~enigma/neu/6581.html (http://mail.lipsia.de/~enigma/neu/6581.html) Konu Başlığı: Ynt: $D018 (namı diğer 53272) 0. bit Bilmecesi Gönderen: Simon (Özay Turay) üzerinde Ekim 22, 2019, 11:25:38 ÖÖ Olabilir, eğer gerçekten kullanılmıyorsa boşa giden bir bite yanarım. :P
Konu Başlığı: Ynt: $D018 (namı diğer 53272) 0. bit Bilmecesi Gönderen: wizofwor üzerinde Ekim 22, 2019, 15:34:26 ÖS İlk bitin bir işlevi yok diye biliyorum. Hesap kolaylığı açısından boş bırakılmış olmalı.
$d018'deki screen ram pointerı bir arttığında arttığında screen ram 4 blok ilerliyor. %0000, 0: $0000-$03FF, 0-1023. %0001, 1: $0400-$07FF, 1024-2047. %0010, 2: $0800-$0BFF, 2048-3071. %0011, 3: $0C00-$0FFF, 3072-4095. %0100, 4: $1000-$13FF, 4096-5119. %0101, 5: $1400-$17FF, 5120-6143. %0110, 6: $1800-$1BFF, 6144-7167. %0111, 7: $1C00-$1FFF, 7168-8191. %1000, 8: $2000-$23FF, 8192-9215. %1001, 9: $2400-$27FF, 9216-10239. %1010, 10: $2800-$2BFF, 10240-11263. %1011, 11: $2C00-$2FFF, 11264-12287. %1100, 12: $3000-$33FF, 12288-13311. %1101, 13: $3400-$37FF, 13312-14335. %1110, 14: $3800-$3BFF, 14336-15359. %1111, 15: $3C00-$3FFF, 15360-16383. character ram 8 blok kapladığı için pointer (low nibble) bir arttığında adres 8 blok ilerlemeli. Eğer ilk biti görmezden gelirsek, aralıklar 8 blok (iki kat büyük) olduğu halde ilgili pointer değerleri screen ram pointerıyla aynı oluyor. %0000, 0: $0000-$07FF, 0-2047. %0010, 2: $0800-$0FFF, 2048-4095. %0100, 4: $1000-$17FF, 4096-6143. %0110, 6: $1800-$1FFF, 6144-8191. %1000, 8: $2000-$27FF, 8192-10239. %1010, 10: $2800-$2FFF, 10240-12287. %1100, 12: $3000-$37FF, 12288-14335. %1110, 14: $3800-$3FFF, 14336-16383. Büyük ihtimalle işlemci tarafında da aynı devreyi tekrar kullanarak bir optimizasyon oluyordur. İlk başta ilk bit'de hesaba katılsaydı $8FFF adresine kadar character ram olarak kullanılabilirmiş, hesap kolaylığı için bundan feragat edilmiş gibi geliyor. VIC-II 8 bit alan adresleyebildiği için bir kayıp söz konusu değil. Her halukarda $3FFF'den sonrasını görmeyecekti. Konu Başlığı: Ynt: $D018 (namı diğer 53272) 0. bit Bilmecesi Gönderen: Simon (Özay Turay) üzerinde Ekim 22, 2019, 21:28:02 ÖS Bak bu gayet mantıklı. Donanımcı kafasıyla düşünmek gerekiyormuş demek ki.
!macro SelectVICMemory .screen_addr, .char_addr { lda #((((.screen_addr & $3fff) / $400) << 4) | (((.char_addr & $3fff) / $800) << 1)) sta $d018 } !macro CBMFontUpperGfx { +SelectVICMemory $0400, $1000 } !macro CBMFontLowerUpper { +SelectVICMemory $0400, $1800 } Makronun ikinci kısmında $800'e bölüp sola bir kere kaydıracağımıza (ki bu 2 ile çarpmak oluyor) aynen birinci kısımda olduğu gibi $400'e bölebiliriz. |