Gönderen Konu: VIC kursu preview  (Okunma sayısı 34766 defa)

VIC kursu preview

« Yanıtla #30 : 06.01.2007 02:55:01 »
Hızlı düğmeleri aç

hades

İleti: 214

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
Aslında c64'te niye 1Mhz hızında çalışan bir işlemci kullanmışlar onu düşünmek lazım. Belki VIC, SID ve CIA'ların hızları uyum sağlasın diye öyle yapmışlardır diyeceğim ama programcının el kitabının son sayfalarında gerek 6510 gerekse 6526 için "1 Mhz ve 2Mhz de çalışabilme"  ifadesi yazılmış. Eğer gerçekten böyle bir özellik varsa bunun en basitinden bir kristal değişikliğiyle mümkün olması gerekmektedir. C64 şemasını incelemem lazım.
(Zira işyerinde ürettiğimiz cihazlara 16Mhz kristal yerine yanlışlıkla 8Mhz kristal takıldığında cihazların çalışması displaydeki görüntünün titremesi şeklinde değişiyor).
Ayrıca 6510'un modifiye edilmiş bir 6502 olduğundan hareket edersek ve 6502 lerin 1-2 ve 4Mhz de çalışan versiyonlarının bulunduğu dikkate alınırsa 6510'un 2 Mhz de çalıştırılabilmesi mümkün olabilir gibi geliyor bana.
Expansion porttaki /DMA girişi kullanılarak 6510'un adres ve data buslara erişimi engellenebiliyor. Bu özellik kullanılarak herhangi bir işlemci C64'ün belleğine doğrudan erişebilir. Yani dışarıdan takılacak hızlı bir 6502 versiyonu ile C64'ü x2, x4 gibi hızlandırmak mümkün.
Bir zamanlar C64 için 4,09 MHz Turbo Master CPU accelerator vardı.
Birde 20 Mhz'lik Super CPU var. Unutmamak lazım.

Bu hızlandırmalar sonucu VIC'in çalışma hızında değişiklik olurmu bilemiyorum. Ne bileyim belki normalde 4 dakika süren bir demo part 1 dakikada bitecektir. Veya kursör daha hızlı yanıp sönecektir, müzikler daha hızlı çalacaktır vs...

(1Mhz 6510 da yanyana 8 sprite basılabiliyorsa 4 Mhz'lik 6502 ile 32 sprite yanyana basılabilir.:D)

VIC kursu preview

« Yanıtla #31 : 06.01.2007 03:05:52 »
Hızlı düğmeleri aç

GnoStiC


  • Ziyaretçi
http://www.zimmers.net/anonftp/pub/cbm/documents/projects/accelerators/

burda c64'u 2 veya 4 mhz yapmak icin semalar var.. 2mhz'lik semalara bakarsak;
vic sadece 1mhz calistigindan ve clockunu sistem'den aldigindan dolayi, cpu ve vic'in clock'larini ayirmak gerekiyor.. boylece vic yine 1 mhz iken cpu 2 mhz olabiliyor ama bu seferde ram'lerin clock'unu da vic sagladigi icin ram'lere de mudahale gerekiyor..

sonucta ortalik 74xx kayniyor :)

Alıntı yapılan: hades
Eğer gerçekten böyle bir özellik varsa bunun en basitinden bir kristal değişikliğiyle mümkün olması gerekmektedir. C64 şemasını incelemem lazım.


6502'de;
1) 6510'un DMA yetenegi (AEC signal)
2) $00/$01 'daki 6 bit I/O port
yokmus..

Alıntı yapılan: hades
Ayrıca 6510'un modifiye edilmiş bir 6502 olduğundan hareket edersek ve 6502 lerin 1-2 ve 4Mhz de çalışan versiyonlarının bulunduğu dikkate alınırsa 6510'un 2 Mhz de çalıştırılabilmesi mümkün olabilir gibi geliyor bana.
« Son Düzenleme: 06.01.2007 03:10:38 Gönderen: GnoStiC »

VIC kursu preview

« Yanıtla #32 : 06.01.2007 03:37:00 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
ohoo konu SuperCPU'ya kadar gelmiş :) Bu arada şaşırtıcı bir durumdur ki yanılmıyorsam SuperCPU ile bile 9. sprite basılamadı. Herhalde VIC'in yapısından kaynaklanıyordur. Yani 4 MHZ != 4x8 sprite. Bu konu çok ince bir konu, doğrudan cycle sayısıyla ilgili değil herşey. Bu kadar lineer hesaplamalara gitmeyin. Crossbow'un IRC'den alınmış bir logu vardı 9. sprite ile ilgili. Yanılmıyorsam orda bahsediyordu "SuperCPU ile deneyin ama başaracağınızı sanmam" gibi bir ifadeden. Ya da benim hafızamda öyle kalmış.

VIC kursu preview

« Yanıtla #33 : 06.01.2007 03:45:45 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
Bakın buldum, bu tartışmadan bahsediyorum.
 
http://www.cei.net/~rreed/9sprites+fli.txt

VIC kursu preview

« Yanıtla #34 : 06.01.2007 03:53:58 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
Ahahaha bu diyaloğu unutmuşum yaw çok güldüm.
 
repose önce shifli formatının daha geniş bir alanda yapılabileceğinden bahsediyor. crossbow ona 8 sprite limitinden dolayı daha geniş yapılamadığını anlatıyor. bunun üzerine eleman "o zaman daha uzun yapılabilirdi" modeuna geçiyor ki 168 rasterda bir spriteların ne yaparsanız yapın DMA satırına denk geldiğini bilmiyor muhtemelen. Crossbow'da yapılsa yapılsa 1 raster satırı daha yüksek yapılabileceğini söylüyor. Eleman bunun bir bug olduğu konusunda Crossbow'u ikna etmeye çalışıyor. Crossbow'un son cümlesi süper "zaten bütün editör başlı başına bug!". ahahaha. doğru söze ne denir. inanmayan açsın baksın programcının el kitabına bakalım grafik modelarında shifli'ye yaklaşan birşey bulabilecek mi :)
 
Alıntı
yes, certainly taller is possible
also I think it is a bug, really, about the first line
I think you should start the raster a little earlier
hehehe...I could have done it...but it had needed a bigger displayer....
and a 100% stabel raster....
no excuse :) it's a bug :)
and I was to lazy... ;)
if I have time, in 2 days I would make a better one.. there is many things I wish I could try :(
but hey....who cares ....168 or 167 lines ;)
well, it bothers my sense of perfection :)
hehehe....try to remove this bug! :)
also I think you should save pictures with smaller files
the whole editor is a bug!

VIC kursu preview

« Yanıtla #35 : 06.01.2007 07:48:34 »
Hızlı düğmeleri aç

GnoStiC


  • Ziyaretçi
tam tum *fli serisini ogrendim galiba derken yeni prefix'ler goruyorum :p

bu mode'lari su site cok guzel aciklamis, resimli felan hem:
http://www.studiostyle.sk/dmagic/gallery/gfxmodes.htm

Alıntı yapılan: skate
..
repose önce shifli formatının daha geniş
...

VIC kursu preview

« Yanıtla #36 : 06.01.2007 09:14:09 »
Hızlı düğmeleri aç

esmaeild

İleti: 96

Çevrimdışı
  • **
  • Jr. Member
    • Profili Görüntüle
    • http://www.kodhane.com
işlemci 1 Mhz. donımsal olarak bir hack olmadığı sürecede 1 Mhz ok. oh be en azından 1 Mhz. :) fakat 6510 bu 1 Mhz nın yarım cycle ını kullanıyor.diğer yarım cycle da VIC kullanıyor.
hatta DMA ayağına yatıp 40 cycle da ikide bir 6510 dan gasp ediyor.  benim sorum şu 6510 VIC ten 63 cycle'ı gasp edebilir mi?  bu gasp mekanizması nasıl çalışıyor?
 
@skate:
evet yükleme olayındaki gibi ekranı kapatıp hız kazanıyordu. 2 mhz de geçmişten aklımın bir köşesinde duruyor. yani elbetteki üstadlar olarak siz daha iyisini bilirsiniz. iki olay kafamın içinde bir yerlerde ilişikenip karşıma bir bütün olarakta çıkmış olabilir :) Yani ısrarım bu olayın ayrı olaylarmı olduğunu yoksa gerçektende 2 mhz yi ordamı gördüğümü bir açıklığa kavuşturup kafamın içinde kalmış olan ? ni gidermek.  ama şunu iyi anladım acilen kocaman bir sürü rafı olan bir kitaplık almam gerekecek.  1. ve 2. sayının ekleri kayıp. scannerdan tarayıp websiteme aktarmak için yıllardır durdukları yerden çıkarmıştım. daha öncede 3-4 kez aynı sayılar kaybolup hiç ummadığım yerlerden çıkmıştı.
Coding Is Art.

VIC kursu preview

« Yanıtla #37 : 06.01.2007 09:40:04 »
Hızlı düğmeleri aç

esmaeild

İleti: 96

Çevrimdışı
  • **
  • Jr. Member
    • Profili Görüntüle
    • http://www.kodhane.com
Alıntı yapılan: nighlord
6510 için zaten yarım cycle kavramı yoktur. o yine 1 cycle içinde 1 cylce lık iş yapar. Ama o cycle içinde eğer belleğe erişmesi gerekiyorsa bunu cycle'ın ilk yarısında yapacak şekilde dizayn edilmiştir.

sorumun cevabıda bu galiba. yani bir şekilde VIC i durdursan bile belleğe erişmek için 6510 o cycle ları kullanamaz diyor. yahu insan oraya bir register koymaz mı set edince cycle'ın altını da üstünü de kullansın. 1 cycle içinde 1 cycle lık işyapar cümlesi üzerinde düşününce şimdi aklıma bir soru daha geldi. 6510 belleğe erişemediği diğer yarımlar esnasında ne iş yapıyor? şöyle mi : 1. cycle ın ilk yarısında bellekten okuyor. ikinci yarısında okuduğunu işliyor. 2. cycle ın ilk yarısında sonuçları belleğe yazıyor. ama 2. yarımlar esnasında belleğe erişmesi gereken bir durum oluşursa 1. yarımı beklmek durumunda. iş gücü kaybı. bir işlem yapacak. işlem çıktısını hesaplayacak zamanı var ama girdi için beklemek zorunda.
« Son Düzenleme: 06.01.2007 09:57:17 Gönderen: esmaeild »
Coding Is Art.

VIC kursu preview

« Yanıtla #38 : 06.01.2007 10:29:59 »
Hızlı düğmeleri aç

esmaeild

İleti: 96

Çevrimdışı
  • **
  • Jr. Member
    • Profili Görüntüle
    • http://www.kodhane.com
Alıntı yapılan: skate
Adam orda yalnızca ekranı kapatıyor ve azcık tasarruf ediyor DMA satırlarından hepsi bu. Yaklaşık oran da dediğim gibi %5. Aynı olay yükleme sırasında ekranın kapatılmasında da kullanılır. Yükleme zamanı azcık kısalsın diye ekranı kapatırsın, daha hızlı yükler.

burada da merak ettiğim bir şey var. 63 cycle lık belleğe erişmek için yarım zamanlara sahip VIC  25 karakter satırlık ekran olduğuna göre normal şartlarda her karakter satırının ilk raster satırında DMA sinyali ile belleğe erişecek ve 25 kez 6510 un belleğer erişme payanın 63 te 40 ını gasp edicek. yani 25 * %63.5 bu durumda full belleğe erişim gerektiren bir uygulamada bu çok büyük bir pay değilmi.
Coding Is Art.

VIC kursu preview

« Yanıtla #39 : 06.01.2007 20:15:43 »
Hızlı düğmeleri aç

esmaeild

İleti: 96

Çevrimdışı
  • **
  • Jr. Member
    • Profili Görüntüle
    • http://www.kodhane.com
Alıntı yapılan: nightlord
RasterIRQHazirla:
sei
6510 içinde “Dışarıdan Gelecek Kesinti ısteklerini Bloklama” imkanı mevcut. Bunun için Durum Registerinde Interrupt Flag adlı bir bit var. Bu bit 1 yapıldığı zaman 6510 IRQ pinine sinyal gelse bile kesinti uygulamaz ve hiçbirşey olmamış gibi devam eder. Sei komutu işte bu bit'i 1 yapar. Tersi olan cli komutu ise bu biti 0 yaparak bundan sonraki interruptlara izin verir. Yani sei ve cli komutlarının arasındaki komutlar çalışırken başka bir interrupt sinyali gelip de 6510'un herhangi bir yere atlama şansı yoktur. Bunun neden önemli olduğunu birazdan göreceksiniz.
lda #$7f
sta $dc0d
C64 içinde 6510'a kesinti isteği gönderebilen tek çip VIC değil. Disket sürücü, klavye gibi pekçok çevre birimini kontrol eden CIA çipleri de 6510'a kesinti isteği gönderebiliyor. Normalde C64 ilk açıldığında Kernal'deki başlangıç rutini içinde CIA çiplerinde bulunan timerlardan biri programlanır ve bu timer her 20 ms'de bir 6510'a kesinti isteği gönderir. Bu kesinti isteği ile beraber 6510 yine ROMdaki başka bir bölgeye atlar ve bazı rutin işlerle ilgilenir (klavyeyi kontrol etmek, cursoru yakıp söndürmek gibi). Bizim programımızda bu rutin hizmetlerin hiçbiri ile ilgilenmediğimiz için bu kesinti isteğinin gelmesini engellemek istiyoruz. Bunun için isteği gönderen CIA çipine “bana IRQ gönderme” dememiz gerekiyor. CIA çıpının ayrıntıları konumuz dışında. Fakat bu iki komutun bu işe yaradığını bilin yeter.

sei ile interrupt flagını 1 olarak set ettiğimizde artık 6510 un kesinti isteklerine cevap vermiyeceğini belirttiğiniz halde extradan cia neden kesinti isteği gönderme demek zorunda kalıyoruz?
Coding Is Art.

VIC kursu preview

« Yanıtla #40 : 06.01.2007 20:49:26 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
Alıntı yapılan: esmaeild
burada da merak ettiğim bir şey var. 63 cycle lık belleğe erişmek için yarım zamanlara sahip VIC  25 karakter satırlık ekran olduğuna göre normal şartlarda her karakter satırının ilk raster satırında DMA sinyali ile belleğe erişecek ve 25 kez 6510 un belleğer erişme payanın 63 te 40 ını gasp edicek. yani 25 * %63.5 bu durumda full belleğe erişim gerektiren bir uygulamada bu çok büyük bir pay değilmi.
@esmaeild: ekran açıkken 25 satırlık bölgede yalnızca her satırın başında 40 cyclelık bir kayıp oluyor. Bu da toplamda 25x40 = 1000 cycle ediyor. Toplam 312 raster satırı var ve bunlardan yalnızca 25'i DMA'ya denk geliyor anlayacağın.
 
312 x 63 = 19656 cycle var toplamda
ekran açıkken
19656 - (40x25) = 18656 cycleımız kalıyor.
bu da
18656/19656*100 = %94,912494912494912494912494912495
ediyor
Ben de tüm bu karışık hesaplara girip sana
%5,08750508750508750508750508751
oranında bir kayıp olduğunu söylemek yerine kafadan hesaplayıp yaklaşık %5 dedim. :)
 
"Bu arada ekranı kapatmak daha fazla hızlandırır mı acaba?" diye düşünme sakın. Bu ters mantık. Aslında ekranı kapatmak hiçbirşeyi hızlandırmaz. 19696 cycle'ı olduğu gibi kullanırsın sadece. Aksine ekranı açık tutmak cycle kaybına neden olur. Bu mantıkta ekrana basılan spritelar, ekstra çalışan interruptlar ve içlerinde gerçekleşen olaylar v.s. hepsi cyclelarınızı birer birer yerler. Örnek olarak ekrana sprite bastığımızda o spritelar da cycle yiyorlar ve bu defa ekranın kapalı ve açık olması arasında daha büyük bir oranda fark elde etmiş oluyoruz. Ama Commodore saniyede 50 kere ekran taraması yapar (50hz kısaca) ve her taramada 19656 cycle vardır. Bu iki gerçek ne yaparsak ekstra donanım kullanmadan asla ve asla değişmez. ıstisnası yoktur.

VIC kursu preview

« Yanıtla #41 : 06.01.2007 20:51:12 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
Alıntı yapılan: esmaeild
sei ile interrupt flagını 1 olarak set ettiğimizde artık 6510 un kesinti isteklerine cevap vermiyeceğini belirttiğiniz halde extradan cia neden kesinti isteği gönderme demek zorunda kalıyoruz?
SEI komutu CIA interruptlarını kesmez. Bu yüzden.

VIC kursu preview

« Yanıtla #42 : 06.01.2007 21:07:26 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
Bu arada madem c64 donanımıyla 1mhz'nin üstüne çıkmayla ilgili zihni sinir yöntemlerine bu kadar meraklısınız, o zaman size bu konudaki ilginç fikirlerden birini söyliim. şahsen hiç uygulamasını görmedim henüz. 1541'in içinde de ufak bir işlemci ve yanılmıyorsam 8k'lık bir hafıza var. Bunları kullanarak 1541'e asynchronous hesaplamalar yaptırmakla ilgili fikirler vardı. Örnek olarak ekranda çevirmen gereken 500 tane vertexin var ama cycle sayın yetmiyor. bir kısmını 1541'e veriyorsun, o hesaplıyor, sen o arada sonuçları beklemeksizin kendi hesaplamalarını yapıyorsun. daha sonra kendi işin bitince 1541'in hesapladığı değerleri de okuyorsun v.s. Böyle birşeylerden bahsedildiğini hatırlıyorum ama ekstra donanım modifikasyonu gerektiriyor mu ya da 1541'e ne yaptırıp ne yaptıramıyoruz hiçbir fikrim yok. Bu kadar kafayı taktığınız için sizinle paylaşiim dedim bu konuyu. Yine de bana kalırsa bu konuya hiç kafa yormayın. ınanın değmez :) Öncelikle cyclelar size yetmeyecek hale gelsin. Ondan sonra kafa kafaya verip bu tür konularda birlikte mantık yürütürüz.

VIC kursu preview

« Yanıtla #43 : 06.01.2007 21:20:47 »
Hızlı düğmeleri aç

GnoStiC


  • Ziyaretçi
c64 goes dualcore :D

1541 kullanma olayini 7d6'da hydrogen bahsetmisti.. party'den donunce bakindim, ilgili demonun adi Altered States 50% (by Taboo)..
http://www.pouet.net/prod.php?which=1413

Alıntı
The most shocking thing is the fact that coordinates for vector-part are calculated by 1541-disk drive and c64 does only filling/drawing..

Alıntı yapılan: skate
Bu arada madem c64 donanımıyla 1mhz'nin üstüne çıkmayla ilgili zihni sinir yöntemlerine bu kadar meraklısınız, o zaman size bu konudaki ilginç fikirlerden birini söyliim. şahsen hiç uygulamasını görmedim henüz. 1541'in içinde de ufak bir işlemci ve yanılmıyorsam 8k'lık bir hafıza var. Bunları kullanarak 1541'e asynchronous hesaplamalar yaptırmakla ilgili fikirler vardı. Örnek olarak ekranda çevirmen gereken 500 tane vertexin var ama cycle sayın yetmiyor. bir kısmını 1541'e veriyorsun, o hesaplıyor, sen o arada sonuçları beklemeksizin kendi hesaplamalarını yapıyorsun. daha sonra kendi işin bitince 1541'in hesapladığı değerleri de okuyorsun v.s. Böyle birşeylerden bahsedildiğini hatırlıyorum ama ekstra donanım modifikasyonu gerektiriyor mu ya da 1541'e ne yaptırıp ne yaptıramıyoruz hiçbir fikrim yok. Bu kadar kafayı taktığınız için sizinle paylaşiim dedim bu konuyu. Yine de bana kalırsa bu konuya hiç kafa yormayın. ınanın değmez :) Öncelikle cyclelar size yetmeyecek hale gelsin. Ondan sonra kafa kafaya verip bu tür konularda birlikte mantık yürütürüz.

VIC kursu preview

« Yanıtla #44 : 06.01.2007 21:23:08 »
Hızlı düğmeleri aç

esmaeild

İleti: 96

Çevrimdışı
  • **
  • Jr. Member
    • Profili Görüntüle
    • http://www.kodhane.com
hocam DMA satırları olmazsa 6510 un kazancı 1 sayfada belleğe erişim yönünden 25 * 40 = 1000 cycle olmaz mı.
Coding Is Art.