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 ... 11 12 [13] 14 15 ... 20   Aşağı git
Yazdır
Gönderen Konu: IRQHack64 - EPROM Kullanan :) Prg Yükleyici Kartuş  (Okunma Sayısı 225752 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #180 : Mayıs 28, 2016, 15:16:23 ÖS »

Mp3'ü pc üstünde decode edip seri bağlantı ile arduinoya oradan da c64'e aktarıp çalmak mümkün

Ya da arduino Esp8266 yahut stm32 gibi bir şey ile değiştirilirse onun gücü ile mp3 decode edilip çalınabilir
Logged

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

twitter | blog
arnavutrafet
Ziyaretçi
« Yanıtla #181 : Mayıs 28, 2016, 19:01:31 ÖS »

Arduino yazılımı ile güncelleme yapacak arkadaşlar için benim seçimlerim,

tools - board - Arduino Pro or Pro mini
tools - processor - Atmega328
tools - programmer - USBasp
sketch - add file diyerek i_r_o_n ın hex dosyasını seçiyoruz,
sketch - upload.
« Son Düzenleme: Mayıs 28, 2016, 22:32:12 ÖS Gönderen: arnavutrafet » Logged
phantom
Deneyimli
*****
Mesaj Sayısı: 935



Üyelik Bilgileri
« Yanıtla #182 : Mayıs 28, 2016, 20:44:23 ÖS »

@i_r_on
Önünde saygıyla eğiliyorum
Kartuşu bugün ilk kez kullanma fırsatım oldu, r-type I birkaç saniyede monitörde görünce ne kadar sevindiğimi anlatamam
Kartuşu getir, yeni versiyon yükleyelim demiştin de bu bile benim başımı döndürecek kadar hızlı
Bu Emeğin karşılığı kesinlikle bu kadar cüzi bir para olamaz, en kısa sürede Görüşmek dileğiyle
Ellerine , emeğine ,aklına sağlık
Logged
arnavutrafet
Ziyaretçi
« Yanıtla #183 : Mayıs 29, 2016, 00:36:51 ÖÖ »

I_r_o_n hocam merhabalar,

turbo yu upload edince cihaz çalışmıyor çünkü upload edilecek sketch dosyasında ;

void SendLoaderStub() {
  for (int i = 0;i<stub_len;i++) {
    TransmitByteFastStd(pgm_read_byte(stubData + i));
  }

  for (int i = stub_len;i<256;i++) {
    TransmitByteFastStd(0x20); //Send space character
  }

  ResetIndex();


'stub_len' was not declared in this scope
hatası veriyor bilgine...
Logged
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #184 : Mayıs 29, 2016, 00:40:40 ÖÖ »

Source'lara bakarım ancak hex dosyasını yüklediğinde sorun olmaması lazım.

Edit: bat dosyalarından compile ediyorsan gereken tüm dosyaların olduğundan emin ol. Hata alıyor olabilir batch işlemler.
« Son Düzenleme: Mayıs 29, 2016, 00:44:58 ÖÖ 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
arnavutrafet
Ziyaretçi
« Yanıtla #185 : Mayıs 29, 2016, 00:49:09 ÖÖ »

byte currentIndex = 0;  bu satırın altına

byte stub_len = 0;
byte stubData = 0;

ekleyince çalıştı.
Logged
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #186 : Mayıs 29, 2016, 00:54:04 ÖÖ »

Olmaz ki öyle. Stub diye geçen program yüklendikten sonra kaset buffer'ına yüklenen rutin. Arduino kosu compile olur ama düzgün çalışmaz. Sistem path'inde 64tass var mı?
Logged

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

twitter | blog
arnavutrafet
Ziyaretçi
« Yanıtla #187 : Mayıs 29, 2016, 00:57:07 ÖÖ »

c nin altında 2 si de.  arduino 1.6.9 ve 64tass
Logged
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #188 : Mayıs 29, 2016, 00:59:35 ÖÖ »

Sistem yolunda olması lazım 64tass'ın

Standart lokasyon c:\windows

Men build olurken dosya bulunamadı diyordur muhtemelen.
Logged

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

twitter | blog
arnavutrafet
Ziyaretçi
« Yanıtla #189 : Mayıs 29, 2016, 01:04:43 ÖÖ »

Arduino: 1.6.9 (Windows 8.1), Board: "Arduino Pro or Pro Mini, ATmega328 (5V, 16 MHz)"

C:\Users\Volky\Documents\Arduino\IRQHack64\IRQHack64.ino: In function 'void SendLoaderStub()':

IRQHack64:201: error: 'stub_len' was not declared in this scope

   for (int i = 0;i<stub_len;i++) {

                    ^

In file included from C:\arduino-1.6.9\hardware\arduino\avr\cores\arduino/Arduino.h:28:0,

                 from sketch\IRQHack64.ino.cpp:1:

IRQHack64:202: error: 'stubData' was not declared in this scope

     TransmitByteFastStd(pgm_read_byte(stubData + i));

                                       ^

IRQHack64:205: error: 'stub_len' was not declared in this scope

   for (int i = stub_len;i<256;i++) {

                ^

exit status 1
'stub_len' was not declared in this scope

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
Logged
arnavutrafet
Ziyaretçi
« Yanıtla #190 : Mayıs 29, 2016, 01:05:11 ÖÖ »

hata kodu bu hocam
Logged
arnavutrafet
Ziyaretçi
« Yanıtla #191 : Mayıs 29, 2016, 01:19:15 ÖÖ »

Hocam
byte stub_len = 0;
byte stubData = 0;

dediğimiz sadece ilk işlem için bu değişkenlere sıfır atamıyor mu?
Logged
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #192 : Mayıs 29, 2016, 17:38:06 ÖS »

Hocam
byte stub_len = 0;
byte stubData = 0;

dediğimiz sadece ilk işlem için bu değişkenlere sıfır atamıyor mu?

Arduino sketch'i o değerleri Flashlib.h içinden okuyor. Build - I_R_on.bat veya Build - Wizofwor.bat'ı çalıştırdığında komutların verdiği çıktıları iyi kontrol et. Bir şekilde Flashlib.h boş oluşuyorsa o değerleri tanımsız görmesinin sebebi budur.

örneğin Build - I_R_on.bat 'ı çalıştırdığında şuna benzer bir çıktı alman lazım. Paylaştığım source'lar üstünden denedim, sıkıntı yok. Yine aynı şekilde ino dosyasını da açıp derleyebildim.


Kod:
C:\Users\nejat\Documents\Deneme\IRQHackC64>Call PreBuild.BAT

C:\Users\nejat\Documents\Deneme\IRQHackC64>64tass -c -b Loader\LoaderStub.65s -o build\LoaderStub.65s.bin --labels build\LoaderStub.65s.txt
64tass Turbo Assembler Macro V1.51.992
64TASS comes with ABSOLUTELY NO WARRANTY; This is free software, and you
are welcome to redistribute it under certain conditions; See LICENSE!

Assembling file:   Loader\LoaderStub.65s
Error messages:    None
Warning messages:  None
Passes:            2
Memory range:      $033c-$03b4

C:\Users\nejat\Documents\Deneme\IRQHackC64>64tass -c -b Loader\IRQLoader.65s -o build\IRQLoader.65s.bin --labels build\IRQLoader.txt
64tass Turbo Assembler Macro V1.51.992
64TASS comes with ABSOLUTELY NO WARRANTY; This is free software, and you
are welcome to redistribute it under certain conditions; See LICENSE!

Assembling file:   Loader\IRQLoader.65s
Error messages:    None
Warning messages:  None
Passes:            2
Memory range:      $8000-$80f3
Memory range:      $80ff-$80ff

C:\Users\nejat\Documents\Deneme\IRQHackC64>petcat -w2  0<Menus\I_R_on\IrqLoaderMenu.bas 1>build\IrqLoaderMenu.obj

Load address 0801
Control code set: enabled


C:\Users\nejat\Documents\Deneme\IRQHackC64>cd Menus\I_R_on

C:\Users\nejat\Documents\Deneme\IRQHackC64\Menus\I_R_on>64tass -c -b IrqLoaderMenuNew.65s -o ..\..\build\IrqLoaderMenuNew.65s.bin --labels ..\..\build\IrqLoaderMenuNew.txt
64tass Turbo Assembler Macro V1.51.992
64TASS comes with ABSOLUTELY NO WARRANTY; This is free software, and you
are welcome to redistribute it under certain conditions; See LICENSE!

Assembling file:   IrqLoaderMenuNew.65s
Reading file:      SidFile.bin
Error messages:    None
Warning messages:  None
Passes:            2
Memory range:      $080e-$0c48
Memory range:      $0d00-$15fe
Memory range:      $1aef-$1aef

C:\Users\nejat\Documents\Deneme\IRQHackC64\Menus\I_R_on>cd ..

C:\Users\nejat\Documents\Deneme\IRQHackC64\Menus>cd ..

C:\Users\nejat\Documents\Deneme\IRQHackC64>petcat -w2  0<Menus\I_R_on\IrqLoaderMenu.bas 1>build\IrqLoaderMenu.obj

Load address 0801
Control code set: enabled


C:\Users\nejat\Documents\Deneme\IRQHackC64>copy /b build\IrqLoaderMenu.obj + build\IrqLoaderMenuNew.65s.bin build\irqhack64.prg
build\IrqLoaderMenu.obj
build\IrqLoaderMenuNew.65s.bin
        1 file(s) copied.

C:\Users\nejat\Documents\Deneme\IRQHackC64>64tass -c -b Menus\KeyBooter\KeyBooter.65s -o build\KeyBooter.65s.bin --labels build\KeyBooter.txt
64tass Turbo Assembler Macro V1.51.992
64TASS comes with ABSOLUTELY NO WARRANTY; This is free software, and you
are welcome to redistribute it under certain conditions; See LICENSE!

Assembling file:   Menus\KeyBooter\KeyBooter.65s
Error messages:    None
Warning messages:  None
Passes:            2
Memory range:      $080e-$09f8

C:\Users\nejat\Documents\Deneme\IRQHackC64>copy /b build\IrqLoaderMenu.obj + build\KeyBooter.65s.bin build\keybooter.prg
build\IrqLoaderMenu.obj
build\KeyBooter.65s.bin
        1 file(s) copied.

C:\Users\nejat\Documents\Deneme\IRQHackC64>Call PostBuild.BAT

C:\Users\nejat\Documents\Deneme\IRQHackC64>64tass -c -b Menus\WarningMenu\Warning.65s -o build\Warning.65s.bin  --labels build\Warning.65s.txt
64tass Turbo Assembler Macro V1.51.992
64TASS comes with ABSOLUTELY NO WARRANTY; This is free software, and you
are welcome to redistribute it under certain conditions; See LICENSE!

Assembling file:   Menus\WarningMenu\Warning.65s
Error messages:    None
Warning messages:  None
Passes:            2
Memory range:      $080e-$08f2

C:\Users\nejat\Documents\Deneme\IRQHackC64>copy /b build\IrqLoaderMenu.obj + build\Warning.65s.bin build\warning.prg
build\IrqLoaderMenu.obj
build\Warning.65s.bin
        1 file(s) copied.

C:\Users\nejat\Documents\Deneme\IRQHackC64>..\tools\bin2Ardh build\warning.prg build\defaultmenu.h data_len cartridgeData
Processing build\warning.prg
Writing result : build\defaultmenu.h
Done!

C:\Users\nejat\Documents\Deneme\IRQHackC64>..\tools\bin2Ardh build\LoaderStub.65s.bin build\LoaderStub.h stub_len stubData
Processing build\LoaderStub.65s.bin
Writing result : build\LoaderStub.h
Done!

C:\Users\nejat\Documents\Deneme\IRQHackC64>copy avrincludehead.txt+build\defaultmenu.h build\head.tmp
avrincludehead.txt
build\defaultmenu.h
        1 file(s) copied.

C:\Users\nejat\Documents\Deneme\IRQHackC64>copy build\head.tmp + build\LoaderStub.h build\final.tmp
build\head.tmp
build\LoaderStub.h
        1 file(s) copied.

C:\Users\nejat\Documents\Deneme\IRQHackC64>copy build\final.tmp+avrincludefoot.txt  build\FlashLib.h
build\final.tmp
avrincludefoot.txt
        1 file(s) copied.

C:\Users\nejat\Documents\Deneme\IRQHackC64>copy build\FlashLib.h ..\Arduino\IRQHack64\FlashLib.h
        1 file(s) copied.

C:\Users\nejat\Documents\Deneme\IRQHackC64>del build\defaultmenu.h

C:\Users\nejat\Documents\Deneme\IRQHackC64>del build\IrqLoaderMenu.obj

C:\Users\nejat\Documents\Deneme\IRQHackC64>del build\final.tmp

C:\Users\nejat\Documents\Deneme\IRQHackC64>del build\LoaderStub.h

C:\Users\nejat\Documents\Deneme\IRQHackC64>..\tools\CreateEpromLoader build\IRQLoader.65s.bin build\IRQLoaderRom.bin  151 146 103 161 121 171 166 141 176 156
Will change position 151
Will change position 146
Will change position 103
Will change position 161
Will change position 121
Will change position 171
Will change position 166
Will change position 141
Will change position 176
Will change position 156
Processing build\IRQLoader.65s.bin
Writing result : build\IRQLoaderRom.bin
Done!
Press any key to continue...
Logged

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

twitter | blog
toddler
Uzman
*****
Mesaj Sayısı: 1.396



Üyelik Bilgileri
« Yanıtla #193 : Haziran 03, 2016, 01:35:23 ÖÖ »

EAB'nin ftp'sindeki tüm .prg'leri download etmiştim. IRQHack64'ü yeni versiyona güncelledim. Zaten harikaydı şimdi müthiş olmuş. Birkaç oyun oynayayım derken 4-5 saati C64 başında geçirmişim Kahkaha
Logged

C64|C|G|C128|1541U2
A500|A500+|Slim SDHxC|Gotek
A600|FuriaEC020 33MHz+FPU 40Mhz
A1200|BPPC|BVision|64MB Ram|3Com Eth.
A1200|ACA1230/56Mhz 64MB|IndivisionAGA MK2cr|RapidRoad USB|FastATA 1200 MK-V|Netgear MA401
Dingoo A320(OpenDingux)
Pandora(First Batch)
RaspberryPi 1-2-3
BananaPi/Pro
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #194 : Haziran 30, 2016, 03:27:55 ÖÖ »

Kurcala kurcala video oynatma konusunda ufak tefek bir şeyler elde ettim bu arada. Sizlerle de paylaşayım.



Daha fazla kurcalanırsa çözünürlük, renk sayısı, saniyedeki frame sayısı vesaire arttırılabilir. Kartuşun kapasitesinin %25'i falan aslında bu. Yazılım anlamında yaptığım cinliklerin bir miktar daha ötesine geçmek gerekiyor

Full ekran fli oynatmak falan pek tabii 1541 ultimate'de olduğu gibi ancak doldurulabilecek ek bir hafıza gibi bir kısım varsa mümkün olur, bu videonun süresi de pek tabii kısıtlı olur.

Aslında bu video gösterme işi ile ilgili hiç uğraşmayacaktım ancak koala resimlerini gösterme demosundan sonra direkt ilgi video'ya kaydığı için bir deneyeyim dedim.

Gösterilen video 80x48 çözünürlüğünde ve sadece 4 gri tonu kullanıyor. C64'deki siyah, beyaz, açık gri, koyu gri. Dolayısıyla sadece bitmap data transfer ediliyor. Renkler $D800 alanında ve ekran ram'inde önceden fix olarak set ediliyor. Ayrıca bir renk transferi yapılmıyor. 80x48 çözünürlük için bir frame'in boyutu (80/4) * 48 = 960 byte.

Bu videodaki demo programda program badline'ları raster irq'leri ile atlatıp kartuşun transfer rutinini her bir frame'de 15 defa çağırıyor. Her seferinde sadece 8 byte transfer ediyor. Yani 15*8 = 120 byte, 960/120 = 8 taramada 1 frame gösteriyor.

Bir iki sorunsal ile karşılaştım bu yüzden bu demoyu hazırlamak epey bir zaman aldı.

1. Arduino tarafında sd card'dan data okuma latency'si (hızı değil) yüksek olduğu için c64'de her bir 8 raster satırında data okuma ihtiyacını karşılayamıyordu. Epey bir debug seansının çok sonunda bunun farkına vardım. Çözüm olarak bir frame'i arduino üstünde buffer'lama ve buffer'ı doldurmayı transferler bittikten sonra c64'de vic bir sonraki kare için ilk interrupt'ı oluşturmadan önceye aldım. Bu şekilde sorun çözüldü. Daha iyi sonuçlar için sdfat kütüphanesinin içine girilebilir. Arduino üstünde kullanabileceğim maksimum ram kısıtlı bu arada

2. İlk yöntemim bir frame içinde DEN (Display enable) biti ile oynayıp ekranın bir satırından itibaren ekranı kapatıp kartuş üstünden doyasıya transfer yapmaktı. Burada da sonradan şöyle bir tespitim/sorunsalım oldu : Acaba VIC bir frame içinde DEN bitini sadece bir defa mı kontrol ediyor? Bu sorunun cevabını bulamadığım için demoda da kullandığım yönteme geçtim. Aslında basit bir test programı yazıp anlamak mümkün.

Şuradaki dokümantasyonda VIC sanki sadece $30 no'lu raster satırında bu bit'i kontrol ediyormuş gibi bir izlenim edindim. : http://www.zimmers.net/cbmpics/cbm/c64/vic-ii.txt

3. Son uyguladığım yöntem ile ilgili aşılması gereken bir diğer sorun da C64'deki IRQ handler'ın ciddi cycle tüketmesi idi. Akla ilk gelen çözüm ROM'daki $0314'e dallanan kısımla hiç uğraşmayıp 6502'nin default IRQ vektörünü kullanmak. Ancak işin içine kartuş girdiği zaman bunun bu kadar kolay olmadığını anladım.

Şöyle ki, kartuşun çalışabilmesi için kartuş rom'unun $8000 adresinde okunabilir olması lazım. Default IRQ vektörünü değiştirebilmem için de Kernal rom'un okuma için devre dışı kalması lazım.

Aşağıdaki tabloya baktığımızda $8000-$9FFF ve $E000-$FFFF kolonlarında $8000-$9FFF'in CART ROM LO, $E000-$FFFF'in ise RAM olduğu bir seçenek gözükmüyor

https://www.c64-wiki.com/index.php/Bank_Switching

IRQ handler'ın yediği cycle'ı azaltayım derken her bir şeyi değiştirip deveye hendek atlatmak gerekiyor, ben de mecburen o yola girdim

Bir kere şu gereksinim ortaya çıkıyor, uygun bir bellek konfigürasyonu olmadığı için bellek konfigürasyonunu bir yerlerde değiştirmem lazım. Kartuş NMI interrupt'ları için kernal'ın default vektörünü kullanıyor ve arduino üstündeki transfer rutini de nmi interrupt'ı yaratma ve gönderilecek datayı eprom'un bank'ını switch ederken oldukça zamanlaması ayarlanmış bir koda sahip. Bu anlamda mevcut transfer rutinini kullanmak mümkün değil. Transfer rutinin başı, sonu değiştirilip her şey tekrar düzenlenebilir, yeniden bir eprom oluşturulabilir. Ancak bu noktada tercihimi farklı bir yönden kullanıyorum. Diyorum ki, madem IRQ vektörü programın içinde ve RAM'de olacak. O zaman nmi vektörünü de ram'den kullanıp transfer rutinini de c64'de çalışan kodun içine alırım. Arduino tarafında da video streaming işi için ayrı bir transfer rutini yazarım.

Geriye tek bir sıkıntı kalıyor, sadece bellek konfigürasyonunu değiştirmenin benim işimi görmediğini görüyorum. Yukarıda paylaştığım linkteki tabloya dikkatle bakılınca şu da görülebiliyor. $8000-$9FFF'in CART ROM LO olduğu ve $E000-$FFFF'in RAM olduğu iki farklı bellek konfigürasyonu da yok. #$!!%%?? diye iç geçirmek elde değil

 
Neyse ki çözümü buluyorum. Kartuş normalde transferlere başladığında EXROM'u low'a çekip eprom'un $8000-$9FFF aralığında gözükmesini sağlıyor ve ancak tüm yükleme vesaire bittiğinde EXROM'u high'a çekip elini eteğini çekiyor. Normal şartlarda bunda sıkıntı yok ancak burada şunu yapmak gerekiyor. NMI interrupt RAM'deki vektör kullanılıp da tetiklendikten sonra EXROM'u low'a çekiyoruz. Kartuşun çalışma prensibi eprom'daki bank'lar arasında gönderilecek byte'a karşılık gelen bank'a switch yapmak ve bunun arduino ile c64'de çalışan kod arasında senkron olması olduğu için EXROM'u ancak yapılacak parça transfer bitip de c64'deki kodun kartuş rom'una ihtiyacı olmadığı anda HIGH'a çekmek gerekiyor.  Bunu da arduino üstündeki nmi interrupt'ını generate eden ve bank switch eden transfer rutini içine gömüyorum.

Genel olarak yöntem şu, kartuş rom'una ihtiyaç daha yok iken IRQ interrupt'ları açmadan önce $35 bellek konfigürasyonunu seçiyorum, böylece ROM'daki varsayılan vektörleri değiştirebiliyorum, hem NMI hem de IRQ vektörlerini programım içindekilerine değiştiriyorum. IRQ interrupt çalışmadan önce konfigürasyon hep $35 değerinde olmalı.

Arduino tarafında NMI oluşturduktan kısa bir süre sonra kartuş rom'unu devreye alıyorum, NMI handler'ın başında da bellek konfigürasyonunu default olan $37'ye alıyorum. Böylece c64'deki kod kartuş rom'unu görebilecek. Transferi yaptıktan sonra da nmi handler içinde bellek konfigürasyonunu tekrar $35 değerine çekiyorum.

Deve bu arada baya bildiğin helak oldu

Bu arada normalde benim kartuş eprom'undaki transfer kodumda şöyle bir kısım var esas transferi yapan. Buradaki $EA yerine o an hangi bank seçilmişse o değer geliyor.

Kod:
	LDA #$EA
STA (ACTUAL_LOW), Y
INY

Bu transfer rutinini ram'e koyduk, öyle kodun içinde löp löp elimize gelmiyor artık arduino'nun transfer ettiği byte. Çözüm? Kodun içinde olmasa da arduino bank switch yaptığı için aslında transfer edilen byte eprom üzerinde okunacak değişik adreslerde mevcut. Hatta bir tane rahat ulaşım için koymuş olduğum var, bugünler görülerek çok önceden yerleştirilmişti. Eprom üstünde $XXFF adresi her zaman için arduino tarafında switch edilmiş bank'ı yani transfer edilecek byte değerini veriyor.

Kodu şu hale getirmem RAM'de iken çalışmasını sağlayacak,

Kod:
	LDA $80FF
STA (ACTUAL_LOW), Y
INY

Pek tabii dönüp arduino üstünde daha önce bahsettiğim transfer rutinini de bu zamanlamayı dikkate alarak değiştiriyorum. Çünkü LDA #$EA immediate adresleme kullanırken LDA $80FF ise absolute adresleme kullanıyor. İlki 2 cycle, ikincisi ise 4 cycle. Bu zamanlama işini de tembelliğimden osiloskop ile ölçme değerlendirme yöntemi yerine deneme ve yanılma yöntemi ile yaptığım için deve bu noktada "hendek demiştin hacı?" formatına kayıyor biraz

Merak edenler için niha kod da şöyle bir şey oldu (Eski kodlardan standart kullandığım şeyler include edilen dosyalarda)

Kod:
.enc screen

ACTUAL_LOW = $6C
ACTUAL_HIGH = $6D
INITIALWAITTIME = 150


CHROUT    = $FFD2
IRQ6502 = $FFFE
NMI6502 = $FFFA

CURRENTFRAGMENT = $08
CURRENTSTEP = $09

*=$080E        
JSR INIT ;Clears screen, disables interrupts.
LDX #$00
STX CURRENTSTEP ;[0..14] the raster line to invoke an IRQ and start a partial transfer of 8 bytes.
.CHANGEBANK 3

JSR INIT_GFX_MEM
JSR SET_LO_COLOR
JSR SET_HI_COLOR
JSR SETMULTICOLOR

JSR KICKSTART ; Send video stream command to arduino

LDA #$00
STA $D01A
STA $D015

JSR INITIALWAIT

LDA $d011                     ; clear high bit of raster line
AND #$7f
STA $d011

LDX #$00
LDA RPP, X
STA $D012

LDA #<MRH
STA IRQ6502
LDA #>MRH
STA IRQ6502+1

LDA #<COPIEDNMIHANDLER
STA NMI6502
LDA #>COPIEDNMIHANDLER
STA NMI6502+1

LDA #$35
STA $01


LDA #$01
STA $D01A

LDY #$00
LDX #$00

CLI
HAYDI
LOOP
CLV
BVC LOOP
JMP LOOP

MRH     
SEI
LDA VIDEO_LO_B0, X
STA ACTUAL_LOW
LDA VIDEO_HI_B0, X
STA ACTUAL_HIGH

INX
CPX #120
BNE CONTINUED
LDX #$00
CONTINUED

LDY CURRENTSTEP
INY
CPY #15
BNE SETRASTER
LDY #$00
SETRASTER
LDA RPP, Y
STA $D012
STY CURRENTSTEP

LDY #$00
ASL $D019
RTI


COPIEDNMIHANDLER
LDA #$37 ;2 cycles
STA $01 ;3 cycles
NOP

LDA $80FF
STA (ACTUAL_LOW), Y
INY


LDA $80FF
STA (ACTUAL_LOW), Y
INY


LDA $80FF
STA (ACTUAL_LOW), Y
INY


LDA $80FF
STA (ACTUAL_LOW), Y
INY


LDA $80FF
STA (ACTUAL_LOW), Y
INY


LDA $80FF
STA (ACTUAL_LOW), Y
INY


LDA $80FF
STA (ACTUAL_LOW), Y
INY


LDA $80FF
STA (ACTUAL_LOW), Y

LDA #$35 ; Switch kernal+basic roms off
STA $01
RTI


WASTELINES
LDX #20
CONSUME
DEX
BNE CONSUME
RTS


INITIALWAIT
LDY #INITIALWAITTIME
-
LDA $D012
BNE -
JSR WASTELINES
DEY
BNE -
RTS



INIT ; Input : None, Changed : A
CLD
LDA #$93
JSR CHROUT
LDA #$00
STA $D020
LDA #$0B
STA $D021

JSR DISABLERASTERIRQ
JSR KILLCIA

RTS

.include "Common.65s"

.include "Transfer.65s"


VIDEO_B0 = PICTURE_LO

VIDEO_B1 = PICTURE_HI


L0      = VIDEO_B0 + 2960 + range(0, 160, 8)
L1      = VIDEO_B0 + 3280 + range(0, 160, 8)
L2      = VIDEO_B0 + 3600 + range(0, 160, 8)
L3      = VIDEO_B0 + 3920 + range(0, 160, 8)
L4      = VIDEO_B0 + 4240 + range(0, 160, 8)
L5      = VIDEO_B0 + 4560 + range(0, 160, 8)

   
VIDEO_LO_B0   
.byte <(L0)
.byte <(L1)
.byte <(L2)
.byte <(L3)
.byte <(L4)
.byte <(L5)

VIDEO_HI_B0
.byte >(L0)
.byte >(L1)
.byte >(L2)
.byte >(L3)
.byte >(L4)
.byte >(L5)




RPP .byte 119, 127, 135, 143, 151, 159, 167, 175, 183, 191, 199, 207, 215, 223, 231

Logged

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

twitter | blog
Sayfa: 1 ... 11 12 [13] 14 15 ... 20   Yukarı git
Yazdır
Gitmek istediğiniz yer: