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ımc64 romunu editleyebilir miyim?
Sayfa: [1]   Aşağı git
Yazdır
Gönderen Konu: c64 romunu editleyebilir miyim?  (Okunma Sayısı 8723 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
Cimihendriks
Deneyimli
*****
Mesaj Sayısı: 708



Üyelik Bilgileri WWW
« : 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?
Logged

Alacağın bir kaç nefes, hiç düşündün mü?
Ne kalacak senden, hiç düşündün mü?
Bir cansız vücudun, o da çürür toprak olur gider.
wizofwor
Genel Yönetici
*****
Mesaj Sayısı: 4.785


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« Yanıtla #1 : 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
;4=APPLE.
;3=COMMODORE.
;2=OSI
;1=MOS TECH,KIM
;0=PDP-10 SIMULATING 6502
Logged

emarti
Uzman
*****
Mesaj Sayısı: 2.589


Only Amiga Makes It Possible █


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

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

READY.
SYS(64767): EMARTI
ilkerficicilar
Uzman
*****
Mesaj Sayısı: 1.122


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



Logged

http://cbm.ficicilar.name.tr/ - Commodore Hacking
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



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

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

twitter | blog
Cimihendriks
Deneyimli
*****
Mesaj Sayısı: 708



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

Alacağın bir kaç nefes, hiç düşündün mü?
Ne kalacak senden, hiç düşündün mü?
Bir cansız vücudun, o da çürür toprak olur gider.
emarti
Uzman
*****
Mesaj Sayısı: 2.589


Only Amiga Makes It Possible █


Üyelik Bilgileri WWW
« Yanıtla #6 : 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
*=$0801

        BYTE    $27, $08, $0A, $00, $9E, $20, $28, $32, $33, $30, $34, $29, $3a
        BYTE    $8f, $20, $43, $4F, $44, $45, $44, $20, $42, $59, $20, $4D, $55
        BYTE    $52, $41, $54, $20, $4F, $5A, $44, $45, $4D, $49, $52, $00, $00
        BYTE    $00


*=$0900

start:

        LDX#$00         ;$a000 basic rom->ram kopyala rutin baslangici
        LDY#$20
loop1:
        LDA$A000,X
        STA$A000,X
        INX
        BNE loop1:

        INC loop1:+2
        INC loop1:+5
        DEY
        BNE loop1:

        LDA#$A0
        STA loop1:+2
        STA loop1:+5

        LDX#$00         ;$e000 kernel rom->ram kopyala rutin baslangici
        LDY#$20
loop2:
        LDA$E000,X
        STA$E000,X
        INX
        BNE loop2:

        INC loop2:+2
        INC loop2:+5
        DEY
        BNE loop2:

        LDA#$E0
        STA loop2:+2
        STA loop2:+5

        SEI
        LDA#$E5
        STA$FDD6
       
        LDA#$35
        STA$01
       
        LDX#$00
loop3:
        LDA mesaj,X     ;commodore.gen.tr 2017
        STA $E47E,X
        INX
        CPX#$15
        BNE loop3:

        LDX#$00
loop4:
        LDA ready,X     ;hazir
        STA $A378,X
        INX
        CPX#$05
        BNE loop4:

        CLI
        JMP$FCE2
        RTS

mesaj   byte $43, $4F, $4D, $4D, $4F, $44, $4F, $52, $45, $2E
        byte $47, $45, $4E, $2E, $54, $52, $20, $32, $30, $31, $37

ready   byte $48, $41, $5A, $49, $52




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


Logged

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

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



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

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

twitter | blog
ilkerficicilar
Uzman
*****
Mesaj Sayısı: 1.122


Üyelik Bilgileri WWW
« Yanıtla #8 : 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
« Son Düzenleme: Ocak 16, 2017, 08:14:54 ÖÖ Gönderen: ilkerficicilar » Logged

http://cbm.ficicilar.name.tr/ - Commodore Hacking
emarti
Uzman
*****
Mesaj Sayısı: 2.589


Only Amiga Makes It Possible █


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

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

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



Üyelik Bilgileri WWW
« Yanıtla #10 : 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/misc/neoram/neoram-level2c.png

Breadboard üzerinde denerim belki, 628512'lerden ve SOP32 to DIP32 adaptör&nbsp; 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.
« Son Düzenleme: Ocak 17, 2017, 00:38:57 ÖÖ Gönderen: i_r_on » Logged

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

twitter | blog
Sayfa: [1]   Yukarı git
Yazdır
Gitmek istediğiniz yer: