Merhaba, Ziyaretçi. Lütfen giriş yapın veya üye olun.

Kullanıcı adınızı, parolanızı ve aktif kalma süresini giriniz

  Gelişmiş Arama
insanın içinde varsa, commodore.gen.tr açığa çıkarır bunu.. bir nevi retro olaylarının dolunayıyız.(Arda)
commodore.gen.trCommodoreCommodore Yazılım$D018 (namı diğer 53272) 0. bit Bilmecesi
Sayfa: [1]   Aşağı git
Yazdır
Gönderen Konu: $D018 (namı diğer 53272) 0. bit Bilmecesi  (Okunma Sayısı 4430 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
Simon (Özay Turay)
Yönetici
*****
Mesaj Sayısı: 7.754


Commodore Forever


Üyelik Bilgileri WWW
« : 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. Masum

http://nightnetwork.org/writings_tr/c64_grafik_programlama/chunk/ch05s07.html
https://www.c64-wiki.com/wiki/53272
http://sta.c64.org/cbm64mem.html
http://unusedino.de/ec64/technical/aay/c64/vic24.htm (burada unused olarak belirtmiş)
« Son Düzenleme: Ekim 22, 2019, 12:45:24 ÖS Gönderen: Simon (Özay Turay) » Logged

https://retrodergi.com - https://e-turay.com - https://karizmawow.e-turay.com

Retro: Commodore 64, Amiga 500, Amiga 1200
Retromsu: Wii, XBox360, XBox, PS3 Slim, PS2 FAT, PS1, PS Vita, Nintendo 3DS, Nintendo 2DS
ilkerficicilar
Uzman
*****
Mesaj Sayısı: 1.122


Üyelik Bilgileri WWW
« Yanıtla #1 : 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


edit: Şurada daha kaliteli ve ayrıntılı fotoları varmış: http://mail.lipsia.de/~enigma/neu/6581.html
« Son Düzenleme: Ekim 22, 2019, 11:23:25 ÖÖ Gönderen: ilkerficicilar » Logged

http://cbm.ficicilar.name.tr/ - Commodore Hacking
Simon (Özay Turay)
Yönetici
*****
Mesaj Sayısı: 7.754


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #2 : Ekim 22, 2019, 11:25:38 ÖÖ »

Olabilir, eğer gerçekten kullanılmıyorsa boşa giden bir bite yanarım.
Logged

https://retrodergi.com - https://e-turay.com - https://karizmawow.e-turay.com

Retro: Commodore 64, Amiga 500, Amiga 1200
Retromsu: Wii, XBox360, XBox, PS3 Slim, PS2 FAT, PS1, PS Vita, Nintendo 3DS, Nintendo 2DS
wizofwor
Genel Yönetici
*****
Mesaj Sayısı: 4.785


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« Yanıtla #3 : 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.
Logged

Simon (Özay Turay)
Yönetici
*****
Mesaj Sayısı: 7.754


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #4 : 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.
Logged

https://retrodergi.com - https://e-turay.com - https://karizmawow.e-turay.com

Retro: Commodore 64, Amiga 500, Amiga 1200
Retromsu: Wii, XBox360, XBox, PS3 Slim, PS2 FAT, PS1, PS Vita, Nintendo 3DS, Nintendo 2DS
Sayfa: [1]   Yukarı git
Yazdır
Gitmek istediğiniz yer: