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.trGenel KategoriProjeIRQHack64 - EPROM Kullanan :) Prg Yükleyici Kartuş
Sayfa: 1 ... 15 16 [17] 18 19   Aşağı git
Yazdır
Gönderen Konu: IRQHack64 - EPROM Kullanan :) Prg Yükleyici Kartuş  (Okunma Sayısı 165510 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
byeni
Üye
****
Mesaj Sayısı: 457



Üyelik Bilgileri WWW
« Yanıtla #240 : Haziran 30, 2017, 23:41:34 ÖS »

Nejat amibay'da 

http://www.amibay.com/showthread.php?93148-IRQHack64-cartridge-with-semitransparent-3d-printed-case
Logged
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #241 : Temmuz 01, 2017, 17:10:54 ÖS »

For sale'den farklı bir kısımda bahsedilseydi tabii daha iyiydi

Aynı eleman lemon64'de de satıyor, tanıyorum.
Logged

Every imagination is one's self reflection but not every self reflection is imagination. <I.R.on - 2001>

twitter | blog
AmigaEsref
Genel Yönetici
*****
Mesaj Sayısı: 7.576


love is where you find it.


Üyelik Bilgileri WWW
« Yanıtla #242 : Temmuz 01, 2017, 22:12:50 ÖS »

Helal abime
Logged

AMIGA 500 | GOTEK | 1 MB RAM | 1.3 ROM | Pi Zero HDMI
AMIGA 1200 | 8GB CF | 3.2 ROM | TF1230 Turbo Kart | HDMI-520
COMMODORE 64 | IRQHack64 | KissCart64 | 64K CUPCAKE-CART | Pi 1541 | 1084 S
'Cause I'm CRT., I'm retro | CRT, and I'll win the fight | CRT, I'm a power load | CRT, watch me shine
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #243 : Temmuz 03, 2018, 02:33:07 ÖÖ »

Arada sırada kartuşu kullanan eden var mı ne alemde diye böyle araştırıyorum.
Kısa kısa kartuştan haberler vereyim,

1. Aşağıdakine denk geldim,

https://www.ebay.it/itm/IRQHack64-PCB-ROM-SD-Card-Reader-for-CRT-PRG-TAP-Commodore64-/153054857515

PCB'si bile 10 avro ediyor, vay vay vay

2. http://www.c64os.com/buyersguide

Satınalma detayları henüz koyulmamış olsa da üstteki sitenin sahibi kartuşu listelemiş sonunda.

3. Ağustos ayında Amerikada düzenlenecek CRX 2018 organizasyonunun organizatörlerinden biri kartuşun video/ses özelliklerini demo etmek istediğini iletti. Geliştirmeye başladığım ama yarım kalan önce api yapma sonra da kartuşun basit özelliklerini api üstünden sunma mevzularına yeniden başladım. Amaç en azından kartuşun ses/video/streaming imkanlarını tek bir firmware altında toplayabilmek.
Logged

Every imagination is one's self reflection but not every self reflection is imagination. <I.R.on - 2001>

twitter | blog
freedom
Uzman
*****
Mesaj Sayısı: 1.466


Retro allows me to be free.


Üyelik Bilgileri WWW
« Yanıtla #244 : Temmuz 03, 2018, 09:50:50 ÖÖ »

@Sayın i_r_on,

Çalışmalarınız için sizi tebrik ederim.

CGTR ailesinde sizin gibi yetenekli bir arkadaşın olması çok güzel. Ümit ederim bu çalışmalar hem yurt içi ve hemde yurt dışı retro camiasında gereken ilgiyi de görecektir. Sizi tanımaktan dolayı bizleri de gururlandıracaktır.

Kolay gelsin.
Logged

Jax
Deneyimli
*****
Mesaj Sayısı: 840



Üyelik Bilgileri
« Yanıtla #245 : Temmuz 03, 2018, 10:47:59 ÖÖ »

IRQHack64 ile Last Ninja 1. bölümü oynadım. Çok keyifli. Keşke ara yüklemeli oyunları tam desteklese.
Logged
emarti
Uzman
*****
Mesaj Sayısı: 2.479


Only Amiga Makes It Possible █


Üyelik Bilgileri WWW
« Yanıtla #246 : Temmuz 03, 2018, 11:13:11 ÖÖ »

@i_r_on tebrikler aramızda olman büyük şans bizler için. Sayende C64 bilgi birikimimiz çoğalıyor, bizzat çok şeyler öğrendim ve öğrenmeye devam ediyorum. Çekirgen konuştu
Logged

https://github.com/emartisoft My GitHUB | http://csdb.dk/scener/?id=26786 My CSDB

READY.
SYS(64767): EMARTI
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #247 : Temmuz 03, 2018, 11:43:55 ÖÖ »

IRQHack64 ile Last Ninja 1. bölümü oynadım. Çok keyifli. Keşke ara yüklemeli oyunları tam desteklese.

MMC64 / Ide64 gibi benzer şekilde disk emülasyonu yapmayan projelerde oyunlar yamanarak ara yüklemeli oyunlara destek verilebiliyor. API'yi yaptıktan sonra belki aramızdan da kartuşa bu oyunları adapte edecek cracker arkadaşlar çıkar.

@i_r_on tebrikler aramızda olman büyük şans bizler için. Sayende C64 bilgi birikimimiz çoğalıyor, bizzat çok şeyler öğrendim ve öğrenmeye devam ediyorum. Çekirgen konuştu

Yok daha neler, c64 programmer's manual falan orada dururken master'lık bize düşmez yahu
Logged

Every imagination is one's self reflection but not every self reflection is imagination. <I.R.on - 2001>

twitter | blog
AmigaEsref
Genel Yönetici
*****
Mesaj Sayısı: 7.576


love is where you find it.


Üyelik Bilgileri WWW
« Yanıtla #248 : Temmuz 03, 2018, 13:18:18 ÖS »

Valla benim c64 almama i_r_on abi vesile olmuştur. Bu arada ben hala evi toparlayamadım. Bu haftasonu dolaplar için üstaya gidip ben mi yapsam diyorum nasılsa malzeme parasını ödedim 2 aydır bekliyorum. Zor bu işler.
Logged

AMIGA 500 | GOTEK | 1 MB RAM | 1.3 ROM | Pi Zero HDMI
AMIGA 1200 | 8GB CF | 3.2 ROM | TF1230 Turbo Kart | HDMI-520
COMMODORE 64 | IRQHack64 | KissCart64 | 64K CUPCAKE-CART | Pi 1541 | 1084 S
'Cause I'm CRT., I'm retro | CRT, and I'll win the fight | CRT, I'm a power load | CRT, watch me shine
Oğuzhan
Uzman
*****
Mesaj Sayısı: 4.222


There's no place like 127.0.0.1


Üyelik Bilgileri
« Yanıtla #249 : Temmuz 03, 2018, 13:26:36 ÖS »

Valla benim c64 almama i_r_on abi vesile olmuştur. Bu arada ben hala evi toparlayamadım. Bu haftasonu dolaplar için üstaya gidip ben mi yapsam diyorum nasılsa malzeme parasını ödedim 2 aydır bekliyorum. Zor bu işler.

Mobilya isinde parayi onden vermeyeceksin asla %10 kapora ver ben eve ilk mobilyalari alirken teslimati sordum ay sonu dedi. 31 agustosta teslim etti tam gununde parasini da aldi
Logged

Amiga 500/500+/1200
Commodore 64
Atari 1040STe/Falcon 030/Jaguar/2600
Vectrex
Roland MT-32 Rev.A&B/SC-88/SB-55/MT300s
Sony PS 1-2-3-4-5/PSP/Vita/PVM 20"/9"
Sega SMS1-2/MD2/Saturn/Dreamcast/GG
Nintendo NES/SNES/DMG/GB Color/GBA/GBA SP
Mattel Intellivision
AmigaEsref
Genel Yönetici
*****
Mesaj Sayısı: 7.576


love is where you find it.


Üyelik Bilgileri WWW
« Yanıtla #250 : Temmuz 03, 2018, 13:30:44 ÖS »

Aradım ustayı şantiyedeyim 10 gün yokum dedi sen ona 2 hafta ekle örümcek hikayesi oldu.
Logged

AMIGA 500 | GOTEK | 1 MB RAM | 1.3 ROM | Pi Zero HDMI
AMIGA 1200 | 8GB CF | 3.2 ROM | TF1230 Turbo Kart | HDMI-520
COMMODORE 64 | IRQHack64 | KissCart64 | 64K CUPCAKE-CART | Pi 1541 | 1084 S
'Cause I'm CRT., I'm retro | CRT, and I'll win the fight | CRT, I'm a power load | CRT, watch me shine
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #251 : Eylül 03, 2018, 03:47:42 ÖÖ »

Daha önce bahsini ettiğim Ağustos'taki CRX 2018 etkinliğine kartuşu yetiştiremedim. Ancak arada geçen zamanda kartuşla ilgili epey bir çalışma imkanım oldu.

Facebook'ta paylaşmıştım ancak burada biraz daha fazla detay verip bahsedeyim. Tersten başlayayım, başlangıca doğru geri gideyim.



Videoda sırasıyla şunları yapıyorum (C64 tv'me anten hattından picture in picture özelliği ile bağlı. IRQHack64 üstündeki arduino'nun seri hattı da pc'de arduino'nun terminal programıyla bağlı)

1. Başlangıçta seri bağlantı üstünden menü programını açıyorum (Sofistike bir olay değil, bu özelliği her zaman vardı kartuşun)

2. PETG uzantılı bir dosya açıyorum. Pet ekran tasarlama programları ile yaratılabilecek bir dosya bu 1000 byte karakter bilgisi, 1000 byte renk bilgisi, 2 byte arka plan ve ekran rengi olmak üzere 2002 byte'lık bir dosya.

3. Menüye tekrar dönüp KOA uzantılı bir dosya açıyorum. Koala painter programı ile yaratılmış resim programlarının uzantısı KOA oluyor. (Bu örnekte sanırım daha önce ekran görüntülerinden İlker'in çevirdiği resimlerden biri bu)

4. Sonra bir WAV dosyası açıyorum. WAV dosyası SID üzerinden 4 bit olarak, DIGIMAX üzerinden de 8 bit olarak eş zamanlı olarak çalıyor.

5. Nihai olarak da özel bir formatta video gösteriliyor.

Şimdi wav ve video gösterimini zaten daha önce bu kartuşta yapmıştım, ancak burada farklı olan bütün yukarıda saydıklarımın kartuşun üstündeki arduino'daki tek bir firmware ile yapılabilmesi. Video oynatma ve ses çalma bu donanımda arduino tarafında sırasıyla 400 byte ve 128 byte birer buffer gerektiriyor. Eski firmware'de epey bir özellik kartuş tarafında implement edildiği için ciddi bir flash ve sram kullanımı söz konusu oluyor ve bu bahsettiğim buffer'lar da işin içine girdiğinde bütün özellikleri sunma imkanı bulunmuyordu. Bu flash ve ram kullanımını azaltmak için yükün ciddi bir kısmını c64 tarafına kaydırmaya karar verdim ve firmware'in tasarımını ciddi ölçüde değiştirdim. ESP8266'ya kartuş kodlarını port ederken zaten C++'a geçiş yapmıştım, yine aynı code altyapısını kullandım. Heap'te global olarak tutulan buffer'lar yerine çoğunlukla fonksiyonlara lokal stack'te tutulan buffer ve değişkenlere yöneldim. (Interrupt kullanmak söz konusu olduğunda da bu buffer'lara pointer kullanılıyor)

Kartuşta donanımsal olarak da ufak bir fark var, şöyle ki eskiden C64 -> Arduino haberleşmesini Expansion port üzerindeki IRQ hattı üzerinden yapıyordum. Zaten bu iletişim de menüden seçilen komut ya da dosya indis değerinin kartuşa gönderilmesinden ibaretti. EasyKernal'i yaparken burada kullandığım iletişim protokolünden faydalanmıştım. Api fonksiyonalitesini getirirken de bu sefer EasyKernal'den kopya çekip oradaki daha genel amaçlı kullanıma uygun olarak yazdığım halini kartuşa port ettim. IRQ hattını kullanmaktan vazgeçtim zira IRQ hattı benim hassas olarak tetikleyebileceğim bir hat değildi, modüle etmek için CIA yahut VIC çipini programlayıp interrupt oluşturmasını beklemek durumundaydım. Bunun yerine hali hazırda kartuş I/O için ayrılmış /IO1 veya /IO2 hatlarını kullanabilirdim. /IO2 hattını tercih ettim. Bu IO bank'ı $DF00 - $DFFF aralığında. /IO2 seçim hattını Atmega328 üstündeki external interrupt destekleyen daha önce IRQ hattını bağladığım pin'e bağladım. Yani, $DF00 - $DFFF aralığındaki I/O belleğine yapılacak her türlü erişim Atmega328 üstünde bir interrupt oluşturabilmekte. İletişimin nasıl yapıldığını aşağıdaki c64 için çoklu kernal projemde okuyabilirsiniz.

http://www.commodore.gen.tr/forum/index.php?topic=14781.0

Bu arada api çalışmasıyla ilgili sonuçlanmayan daha önceki girişimimle ilgili de aşağıdaki mesajda yazmıştım. Api fonksiyonları (hatta neredeyse implementasyonları bile) aşağı yukarı aynı ancak yeni eklenen fonksiyonlar da oldu. Bunlar da streaming fonksiyonları daha çok.

http://www.commodore.gen.tr/forum/index.php?topic=11034.msg168223#msg168223


Madem donanımı hafifçe değiştirdik ve api de yazdık menü programının da fonksiyonalitesini ufak ufak değiştireyim dedim. Basit bir plugin mekanizması oluşturdum menü programında. Açılan dosya uzantısını buluyor sd karttan o uzantı için yazılmış plugin'i yüklüyor. PETG için misal PETGplugin.bin dosyasını yükleyip çalıştırıyor. Seçilmiş olan dosyanın ismini de kaset buffer bölgesinden plugin programına iletiyor. Bu plugin de kartuşla konuşarak dosyayı açıp / yükleyip gösteriyor. Diğer dosya uzantıları için de olay benzer şekilde gelişiyor.


Devamında hazır fuarı da kaçırmışken biraz fantaziye vurayım dedim ve başka bir şey denemeye karar verdim. Basitçe sürücü emülasyonu yapıp kernal rutinlerini kullanan programlara disk sürücü yerine kartuş üstündeki sd kart üzerinden dosya yükletebilmek idi bu. C64'de çalışan çoğu tracker vesaire utility tarzı program standart kernal rutinlerini kullanır. Bunların hızlı çalışmasını isteyen insanlar da C64'lerine fastloader kartuşu ve bilimum donanım takarak hızlandırırlar. Bir kısım oyun için de geçerli bu kullanım şekli.



Bu videonun başlarında yukarıda bahsini ettiğim donanımsal değişikliği (eski setup'a geçebilmek için ben oraya jumper koydum) görebilirsiniz.

Yaptığım bu fantazi proof of concept tadında, pratik kullanımını engelleyecek kısıtlamalar söz konusu.

Kodlamaya geçmeden öncelikle source'ları hali hazırda yayınlanmış bir programı denek olarak kullanmayı tercih ettim. Goattracker'ı yazan Cadaver'ın Ninja tracker'ını source'ları da olması sebebiyle tercih ettim.

İlk etapta dizin almayı pas geçerek sadece dosya yükleme fonksiyonalitesini sağlamaya çalıştım. Source'u da incelediğimde bu fonksiyonalite için aşağıdaki kernal fonksiyonlarının kullanıldığını gördüm, bunların bir kısmını değiştirerek kartuşla konuşan kendi rutinlerimi yazdım.

- setnam : bunu değiştirmeye gerek yok, yüklenecek dosya bilgilerini belirlemeye yarıyor. ancak set ettiği adresler daha sonra kullanılıyor. ($B7 : dosya ismi uzunluğu, , $BC : dosya ismi lokasyonu high , $BB : dosya ismi lokasyonu low)

- setlfs : hangi cihazla konuşulacağı, hangi logical file kullanılacağı gibi parametrelerin set edildiği fonksiyon. setnam gibi bunda da mevcut kernal fonksiyonalitesinin değiştirilmesine gerek yok.

- open : farklı implementasyonun sağlanması gereken rutinlerden en önemlilerinden biri bu. yeni implementasyonunda kartuşla iletişimi başlatıyor. Dosyayı açıyor ve dosya bilgilerini, en önemlisi de dosya boyutunu alıp bir yere yazıyor. Bitiminde de kartuşla iletişimi koparıyor.

- chrin : bir cihazda açılmış bir logical file'dan okuma yapmayı sağlayan fonksiyon bu. bu fonksiyonun implementasyonunda şöyle bir sorun yaşadım. bu fonksiyonu her byte için bir api fonksiyonunu çağırarak implement edemezdim. c64 bir yandan chrin yaparken bir anda open / close gibi fonksiyonları çağırma ihtiyacı yüzünden de bu çağrıların karşılığında kartuşta çalışacak ilgili api fonksiyonlarının çalışabilmesi gerekiyordu.

Arduino üzerinde C64->Arduino iletişimi düşük seviyede bir kuyruk ve bir interrupt handler ile idare ediliyor. Ancak komutları çalıştıran yapı bir döngü içinde kuyruğu temizlemeye çalışan bir ön plan rutini. (Arduino üzerinde Realtime os kullanaydık daha farklı bir yapı kullanmak mümkün olabilirdi ) Özetle, ön plan'da her chrin'e hızlı hızlı cevap vereyim derken başka bir komut kabul edebilmem mümkün değil. Kartuşun streaming fonksiyonunu kullanan wav çalıcı, video oynatıcı gibi şeylerde bu büyük sorun oluşturmuyor zira orada arduino üstündeki c64-Arduino arasındaki iletişimi sağlayan interrupt handler devre dışı bırakılıyor ve tamamen ilgili fonksiyonaliteye yönelik bir iş yapılıyor. c64 tarafında çalışan kod da doğrudan benim yazdığım kod zaten.

Çözüm şu, 256 byte'lık bir buffer kullanıyoruz ve c64 bu buffer'ı her tükettiğinde bir 256 byte daha okuyor. Yani bazı chrin çağrıları kartuşla konuşup uzun sürerken, bazıları ise hızlıca buffer'dan karşılanıyor. Böylece aralarda verilebilecek bir close/open çağrısının da karşılanabilmesi söz konusu.

- close : Kartuşla iletişime geçiyor, dosyayı kapatıyor ve iletişimi kesiyor.

- chkin : İletişim yapılacak logical file'ı ve iletişimin yönünü not ediyor.

- clrchn : Sürücüye gidilmesin diye dummy bir implementasyon ile değiştirdim.

C64 Kernal'i yaparlerken işin güzel kısmı bu fonksiyonların gerçek implementasyonlarını ram'deki bir jump table'a koymuşlar. Bu jump table rom'daki default implementasyonları içeriyor.  Aşağıdaki gibi bir kodla bu jump table üzerinde kendi rutinlerimizin adreslerini verdiğimizde yüklediğimiz programlar artık rom'daki implementasyon yerine bizim implementasyonumuza erişmiş oluyorlar.

Kod:
chrinVector = $0324
openVector = $031A
closeVector = $031C
chkinVector = $031E
clrchnVector = $0322

SETVECTORS
LDA #<NEW_CHRIN
STA chrinVector
LDA #>NEW_CHRIN
STA chrinVector + 1

LDA #<NEW_OPEN
STA openVector
LDA #>NEW_OPEN
STA openVector + 1

LDA #<NEW_CLOSE
STA closeVector 
LDA #>NEW_CLOSE
STA closeVector + 1

LDA #<NEW_CHKIN
STA chkinVector 
LDA #>NEW_CHKIN
STA chkinVector + 1

LDA #<NEW_CLRCHN
STA clrchnVector 
LDA #>NEW_CLRCHN
STA clrchnVector + 1
RTS

Videodan da anlaşılacağı üzere bu değişikliklerle Ninja tracker içerisinden sd kart'ta bulunan dosyaları açıp kullanabilmesini sağlayabildik.

Gelelim kısıtlamalara ;

1. Çoğu program gibi Ninja tracker da bir cruncher ile sıkıştırılmış halde geliyor. Benim kullanmaya çalıştığım bellek bölgesi de cruncher marifeti ile uçabiliyor. Source'larının olması avantajıyla crunch edilmemiş halini kullandım. Tabii bu denemeyi yapmak için ram'de $C000-$D000 arasındaki bölgeyi help metinleri için kullanan programdan bu help text'lerini silip yer açmam da gerekti.

2. İlk kurguda, diğer dosya uzantılarına nasıl plugin hizmet veriyorsa bu işi de bir plugin marifeti ile yapayım dedim. Ancak daha sonra denemeler daha basitçe yapılabilsin diye kendi rutinlerimi ninja tracker'ın sonuna binary olarak ekleyerek derlemeyi tercih ettim.

3. Harala gürele yazılmış, optimize edilmemiş ancak fonksiyonel anlamda da eksikleri (yazma, dizin çekme, dosya sistemi komutları) bulunan bu implementasyon 1.4K yer kaplıyor. Bu rutinlerin ram'de çalıştırılma durumunda bu kadar yer bulmak çoğunlukla mümkün olmayacaktır.

4. Üstte chrin implementasyonunda bahsettiğim bir 256 byte bellek kullanımı var. Implementasyonu bir şekilde custom kernal yahut kartuş üzerinde bir rom'da tutsak bile bu ram'i bir şekilde bulmak lazım ya da firmware'i değiştirip farklı bir çözüme gitmek lazım. (Aslında kartuşa ram ve rom ilavesi yapmak fena fikir değil )

5. C64'de birden fazla dosya açabilme desteği var ancak Atmega328 üstündeki 2k sram birden fazla dosya kullanılmaya çalışıldığında her bir dosya için yeterli buffer sağlamaya müsait değil. Bir byte bir dosyadan, bir byte başka bir dosyadan okuyan programlar için arduino'nun 512 byte okuyup daha sonra bu 512 byte'ı çöpe atıp diğer dosyadan 512 byte okuması gerekiyor, ve aynı şekilde devam etmesi. Oldukça verimsiz. Aynı anda birden fazla dosya açıp işlem yapacak programlar da herhalde c64 tarafında dosya kopyalama vesaire programları olacaktır.

Kapanışı bir soru ile yapayım,

Velev ki bu iş için bir custom kernal yaptım. Üstte saydığım rutinlerde hunharca kullanabileceğim bellek bölgeleri nerelerdir? (Rom'dan muhtemelen rs232 ve/veya teyp rutinleri koparılacak) 256 byte'lık buffer başta olmak üzere Firmware üstünde çalışıp custom rutinlerin ihtiyaç duyduğu bellek miktarını azaltabilirim hatta sıfırlayabilirim ancak bu da bize hız düşümü olarak geri dönecektir.
Logged

Every imagination is one's self reflection but not every self reflection is imagination. <I.R.on - 2001>

twitter | blog
LW3D
Yönetici
*****
Mesaj Sayısı: 11.291


Günü Kurtaran Avam Hiooargggh :)


Üyelik Bilgileri WWW
« Yanıtla #252 : Eylül 03, 2018, 13:21:34 ÖS »

Eline sağlık... Sorunun cevabını bilmiyorum Ama ciddi bir emek ve çalışma... sağolasın.
Logged

AmigaEsref
Genel Yönetici
*****
Mesaj Sayısı: 7.576


love is where you find it.


Üyelik Bilgileri WWW
« Yanıtla #253 : Eylül 03, 2018, 15:32:54 ÖS »

@Komodorcu seninle aynı duyguları paylaşıyorum. Bende iron abinin projeleri ilgiyle takip ediyorum ama aynı dili konuşamadığımız içinde çok üzülüyorum. 2 Aylık geniş bir proje aldı ajans arada pause yapabiliriz diye tahmin ediyorum. Çoğunlukla İstanbulda olacağım. Bursa'da oda mı toplama işleminde baya ilerledim. Bir ara iron abinin videolarınıda izleyip minik bir bizim gibi detarjancılar için bir video hazırlamayı düşünüyorum basit ve hızlı kullanım amacı ile. Sevgiler
Logged

AMIGA 500 | GOTEK | 1 MB RAM | 1.3 ROM | Pi Zero HDMI
AMIGA 1200 | 8GB CF | 3.2 ROM | TF1230 Turbo Kart | HDMI-520
COMMODORE 64 | IRQHack64 | KissCart64 | 64K CUPCAKE-CART | Pi 1541 | 1084 S
'Cause I'm CRT., I'm retro | CRT, and I'll win the fight | CRT, I'm a power load | CRT, watch me shine
Levent (Lvnt)
Uzman
*****
Mesaj Sayısı: 2.294



Üyelik Bilgileri
« Yanıtla #254 : Eylül 03, 2018, 17:04:18 ÖS »

Değişen sayıda açık dosya ve sabit miktarda buffer problemi için şöyle bir çözüm var: diyelim 512 byte buffer var. 1. dosya açıldı bufferin hepsi o dosyanın, 256 yazma 256 okuma vb. 2. dosya açıldı bufferleri ikiye böleceğiz, 128 byte'ı aşan bufferlenmiş yazma varsa hemen fazlası flush edilir (ya da okuma bufferiyse fazlası yok sayılır). 128/128 1.dosyaya, 128/128 2.dosyaya. 3.dosya açıldı, sadece 2. bufferleri aynı şekilde ikiye bölünür, 4.dosyada 1.dosyanınki ikiye bölünür. 5.açılan dosya için yine son 4.'nün bufferi bölünür, 6.da 3.nün bufferi bölünür...

Bir dosya kapanınca onun bufferini en çok kullanılan dosyanın bufferi ile birleştirmek lazım. O zamanda en çok kullanılan bufferin başında ya da sonunda kullanılmayan buffer olacak şekilde kullanımda olan bir bufferi başka yere taşımak gerek.

Dosya sadece okuma için açılabiliyorsa (c64'te böyle birşey var mı bilmiyorum) yazma bufferi ayrılmayabilir, ya da yazma bufferi hiç olmayabilir, yazma yapılacaksa bile.

Otomatik ayarlama işleri her senaryo düşünüldüğünde böyle bir sürü iş gerektiriyor. Bence en iyisi open yaparken gereken buffer miktarını da open'e parametre olarak vermek. Yanlış değer verilirse hata verir ve buffersiz çalışır mesela. Ama bu sizin sisteme uyarlanabilir mi bilmiyorum
« Son Düzenleme: Eylül 03, 2018, 17:06:42 ÖS Gönderen: Levent (Lvnt) » Logged

Use the brute force, Luke
Sayfa: 1 ... 15 16 [17] 18 19   Yukarı git
Yazdır
Gitmek istediğiniz yer: