|
Konu Başlığı: c64 romunu editleyebilir miyim? Gönderen: Cimihendriks üzerinde Ocak 15, 2017, 01:59:49 ÖÖ Bir commodore rom'unun başlangıçtaki splash screen'ini değiştirmek istiyorum editlemem mümkün müdür?
Konu Başlığı: Ynt: c64 romunu editleyebilir miyim? Gönderen: wizofwor üzerinde Ocak 15, 2017, 09:39:33 ÖÖ Ortalıkta dolaşan "Fully Commented Commodore 64 ROM Disassembly" diye bir döküman var.
Splash screen'den neyi kastettiğini anlamadım ama bu adres işini görebilir. https://github.com/mist64/c64rom Eğer sadece açılıştaki mesajı editlemek istiyorsan Basic ROM'a bakman gerekiyor. Aslında rom dosyasını VICE monitörle açıp gerekli yerleri değiştirip kaydetsen yeterli olacaktır. Detaya girmek istersen Microsoft BASIC'in kaynak kodlarını inceleyebilirsin https://github.com/brajeshwar/Microsoft-BASIC-for-6502-Original-Source-Code-1978/blob/master/M6502.MAC.txt 78 senesinde İsviçre çakısı gibi kod yazmış adamlar. Kod: REALIO=4 ;5=STM Konu Başlığı: Ynt: c64 romunu editleyebilir miyim? Gönderen: emarti üzerinde Ocak 15, 2017, 10:23:03 ÖÖ Bir commodore rom'unun başlangıçtaki splash screen'ini değiştirmek istiyorum editlemem mümkün müdür? Açılış ekranında yazanları yada basic komutlarında yazım olarak değişiklik yapmak istiyor olmalısın. Yazılımsal olarak yanlış hatırlamıyorsam $01 adresini makine dili ile kontrol edip bazı bitlerle oyanıp var olan Basic romunu ram olarak kullanmak üzere yer açıp yine $A000 ile başlayan bölüme BASIC'i kopyalıyordum. Sonra ister bir makine dili editörü ile yada poke komutları ile istediğin değişikliği yapabiliyorsun. ROM yazdırma gibi durumlarda olabilir @i_r_on ve ilker abiye sormak lazım. Konu Başlığı: Ynt: c64 romunu editleyebilir miyim? Gönderen: ilkerficicilar üzerinde Ocak 15, 2017, 11:46:38 ÖÖ Açılıştaki yazıysa kastettiğiniz, $E473-E4AA arasında yer alıyor... Basit bir hexeditle değiştirilip, bir EPROM'a (C64c'ler için BASIC ile birlikte 27128'e, eski tip C64'ler için sadece kernal'i 24pinlik 8K EPROM'a) yazılabilir. Ya da EasyFlash 3'te bu değiştirilmiş kernal aktive edilebilir.
Kalıcı olmayan bir değişiklik içinse, A000-BFFF ve E000-DFFF arasını ROM'dan RAM'a kopyalatıp, $01'e #$35 (53) değerini verip, $FDD6'ya (64982) #$E5 (229) yazıp (reset'te tekrar ROM'a geçmesin diye), 58473'ten itibaren yeni mesajı yazıp, SYS64738 demek yeterli olacaktır. Hatta, meraktan hemen bir deneme yapalım: 10a=40960:b=49151:c=57344:d=65535 20fori=atob:pokei,peek(i):next 30fori=ctod:pokei,peek(i):next 40poke64982,229:poke1,53 50a$="cimihendriks" 60e=58494-1:f=len(a$) 70fori=1tof:pokee+i,asc(mid$(a$,i,1)):next 80sys64738 Çalışması lazım, denemek için ben de şimdi yukarıdakileri seçip kopyalayıp, VICE emülatörü içine yapıştırıyorum ve RUN deyip hızlandırmak için ALT-W'ye basıyorum şu cümle biter bitmez. :) Çalıştı. Konu Başlığı: Ynt: c64 romunu editleyebilir miyim? Gönderen: i_r_on üzerinde Ocak 15, 2017, 21:54:51 ÖS Kalıcılık için İlker'in de yazdığı gibi EasyFlash / 1541 ultimate ya da doğrudan Rom'ları eprom'la değiştirme yapman lazım.
İlker'in cimihendriks basic'ine ek yapalım :) 10a=40960:b=49151:c=57344:d=65535 20fori=atob:pokei,peek(i):next 30fori=ctod:pokei,peek(i):next 40poke64982,229:poke1,53 50a$="cimihendriks" 60e=58494-1:f=len(a$) 70fori=1tof:pokee+i,asc(mid$(a$,i,1)):next 75 poke 60633,15 : poke 60634, 12 : poke 58677,0 80sys64738 ECB9'dan itibaren VIC başlangıç değerleri var, bunları da değiştirebilirsin. Border : 60633 ($ECD9) default değer 14 (açık mavi) Ekran rengi : 60634 ($ECDA) default değer 06 (koyu mavi) Text rengi : 58677 : ($E535) default değeri 14 (açık mavi) ps: Şu an bakıp bulduğum değerler, text değeri kod içinde geçiyor direkt, çoklamışlarsa her durumda çalışmayabilir. Konu Başlığı: Ynt: c64 romunu editleyebilir miyim? Gönderen: Cimihendriks üzerinde Ocak 15, 2017, 21:58:51 ÖS Herkese ilgili ceapları için çok teşekkür ederim :), yarınki son finalimi girdikten sonra deneyeceğim.
Konu Başlığı: Ynt: c64 romunu editleyebilir miyim? Gönderen: emarti üzerinde Ocak 15, 2017, 23:17:31 ÖS BASIC ile insana fenalık geliyor emulatör ise nolimit yap hızı sıkıntı yok lakin gerçek bir C64'te ve 1541 ile disketten yükleniyorsa....
Bu iş assembler ile olur. Sadece 2-3 saniye sürüyor. Kodu Kod: ; 10 SYS (2304):REM coded by murat ozdemir Kod ile uğraşamam diyenler için link veriyorum. Kaynak kod ve prg uzantılı dosya mevcut. Emulatörde kullanılacak ise prg dosyasını emulatör penceresine sürüklemek yeterli. https://yadi.sk/d/wT4IRcX139DXhB (https://s29.postimg.org/fqves50fb/2017_01_15_23_14_38.png) Konu Başlığı: Ynt: c64 romunu editleyebilir miyim? Gönderen: i_r_on üzerinde Ocak 16, 2017, 01:43:57 ÖÖ self modifying code kullanmadan, her sayfanın transferi için ayrı LDA / STA çiftleri ile daha hızlı olur. Tabii 64 tane böyle çift yazman lazım ancak 64 byte transfer edince bir tane indeks arttırma ve döngü kontrolü yapacağın için epey bir hız kazanırsın.
muhtemelen transferden daha fazla zamanı reset alıyordur. 16384 * ( (LDA 4) + (STA 5) + (INX 2) + 2 küsür)... 0.25 milyon cycle... Saniyenin 3'te 4'te biri.. Basic hız anlamında iğrenç. Konu Başlığı: Ynt: c64 romunu editleyebilir miyim? Gönderen: ilkerficicilar üzerinde Ocak 16, 2017, 08:13:12 ÖÖ Bazen Döngü Açma (Unrolled Loop) işlemi için GeoRAM kullanıyorum. Yalnız, 512Kbyte'lık yaylayı 256 byte'lık kaldırım taşları üzerinden kullanmak içinse taşın sonunda GeoRAM'a page veya bank değiştirtiyorum, yeni sayfada program counter'ın denk geldiği yerde ise sayfa başına zıplama komutu var. her sayfa başında ise bir sonraki bank/page'e geçiş için bir hazırlık kodu.
Örnek: Önce bir kod yazalım ve GeoRAM'ın içini şu örnekteki gibi doldursun: GeoRAM Bank:0, Sayfa:0 DE00: INY DE01: LDA $A000 DE04: STA $A000 DE07: LDA $A001 DE0A: STA $A001 ... ... ... DEF0: LDA $A028 DEF3: STA $A028 DEF6: STY$DFFE DEF9: NOP ... Bir sonraki sayfa: Bank:0, Sayfa:1 DE00: INY DE01: LDA $A029 DE04: STA $A029 DE07: LDA $A02A DE0A: STA $A02A ... ... ... DEF0: LDA $A050 DEF3: STA $A050 DEF6: STY$DFFE DEF9: JMP$DE00 ... Son sayfada ise JMP yerine RTS kullanıyoruz. Yalnız Bank'lar 16K'lık, sınıra geldiğimizde aynı sayfada ama farklı bankta olacak şekilde hazırlamak gerekecek bellek organizasyonunu, çünkü aynı anda hem bank hem sayfa değiştiremiyoruz. Yani ilgili bank'ın son sayfasında LDY#$01'le başlayıp STY $DFFF ile bitirip Bank 1 Sayfa 63'e geçiyoruz. Oradan bu sefer DEY'lerle Bank 1 Sayfa 0'a kadar inebiliriz. Kısaca bir döngüyü GeoRAM içinde zigzag'lar çizerek açmak mümkün. Çalıştırmak içinse önce Bank 0 Page 0'a geçiyoruz: LDY #$00 STY $DFFE STY $DFFF ve GeoRAM'daki kodu çağırıyoruz: JSR $DE00 hepsi bu. Bu örnekte, 16384 byte'ı ROM'dan RAM'a kopyalamak yaklaşık olarak ~(4+4)*16384+(2+4+3)*410-3+6+6 cycle kadar sürüyor olmalı (yaklaşık 0.13 saniye). C128'de, C64 modunda iki kat hızlandırmak içinse LDA#$01;STA$D030 ile 2MHz'e geçmek, iş bitince de DEC$D030 ile 1MHz'e inmek yeterli. Şimdi bir puroce önerisi geliyor i_r_on, simon ve delimawi'ye: Pilli bir NeoRAM yapmaya ne dersiniz :) Konu Başlığı: Ynt: c64 romunu editleyebilir miyim? Gönderen: emarti üzerinde Ocak 16, 2017, 09:36:54 ÖÖ Resetlemede zaman kazanmak için 64738 yerine SYS 64767 kullanilabilir. Aynı şekilde assembler da jmp $FCE2 yerine de Jmp 64767. ::)
Konu Başlığı: Ynt: c64 romunu editleyebilir miyim? Gönderen: i_r_on üzerinde Ocak 17, 2017, 00:31:34 ÖÖ Battery backup neoram'in şurada yapılmışı var
http://www.cbmhardware.de/show.php?r=1&id=9/Neoram (http://www.cbmhardware.de/show.php?r=1&id=9/Neoram) http://www.cbmhardware.de/misc/neoram/neoram-level2c.png (http://www.cbmhardware.de/misc/neoram/neoram-level2c.png) Breadboard üzerinde denerim belki, 628512'lerden ve SOP32 to DIP32 adaptör sipariş ettim. Aslında bizim IRQHack64 tasarımına da monte edilebilir bu pcb tasarlanabilirse. Ara yükleme ile istediğin kadar doldur boşalt 2MB'ı. Tabii bir doldurma 60-70 saniye sürecek. Ama sallıyorum ihtiyacın 100K ise 4-5 saniyede işlem tamam. Bunun battery backup olmayan halini bir deneyeyim bakayım ben 32k sram ile. ps: Deneyeyim derken hemen sonuç gelmez orası ayrı :) ps: Tabii arduino'nun iptal olup bir atmega çiple değiştirilmesi, sd modül yerine komple pcb üstü bir şey lazım. Yine aynı şekild eprom yerine küçük bir paralel flash lazım. zor gibi sanki. |