Gönderen Konu: Zx Spectrum için Assembler Araç Zinciri oluşturmak  (Okunma sayısı 51195 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2872
  • Advanced User Simulator
    • ae unutmadan
09.03.2014 edit: ilgili paketin hazır hali şu başlıkta paylaşılmıştır: http://retrojen.org/pano/index.php?topic=539.msg4197#msg4197 Download



Crimson editörün admin olmayan kullanıcılarda bazı kullanım zorlukları bulunduğundan dolayı context ile değiştirilmiştir.

Zx Spectrum'a Assembler ile girişmek istiyorsanız ben kendi kullandığım yöntemi buraya yazıyorum, daha iyisini bulan varsa lütfen eklesin:

Benim kullandığım toolchain pasmo+crimson editör+specemu'dan oluşuyor. Yıllardır spectrum coderları ile konuşuyorum, üzerinde uzlaşılmış ideal bir ortam yok. Neden bu üçlüyü tercih ettiğimi şöyle açıklayayım:

Pasmo, özellikle zx spectrum düşünülerek geliştirilmiş bir derleyici. İşini de çok iyi yapıyor, derleyiciyi yazan arkadaş wos forumlarının en aktif kullanıcılarından biri.

Specemu, bugünlerde 3.0 sürümü çıktı. Gerçek makine davranışına en yakın emülatör. Çok sade, multiface ve çeşitli disk emülasyonu dışında hiçbir aksesuarı desteklemiyor, hatta joystick desteği bile yok. Fakat, eğer yazdığınız program specemu üzerinde çalışıyorsa, gerçek bir spectrumda da aynı şekilde çalışacaktır. Ayrıca Specemu'da eşsiz bir Debugger mevcut. Çok acaip noktalara çok acaip şekillerde breakpoint koyabiliyorsunuz. Örneğin ekran çizilmeden önceki son frame'de, rom'dan ayrılırken, belli bir yere yazma ya da okuma yapıldığında, interrupt başında vs. Specemu'ya bu konudaki tek alternatif WinFuse gibi görünüyor, ama o da çok karmaşık bir emülatör, yani seçim specemu.

Crimson Editor ise güzel bir editör, elbette başka bir editör kullanabilirsiniz, bundan önce Context kullanıyordum, windows7 ile birlikte pencere boyutlarında tuhaflıklar çıkmaya başladı ve kod penceresini ikiye bölme gibi bir özellik yok, bundan dolayı crimson editör'e geçtim.

BAŞLANGIÇ

Download ve Kurulum:
Pasmo 0.53  400kb
Specemu 3.0 900kb
Crimson Editor 2.86 1.4MB

Crimson Editörü setupından kuruyoruz, Pasmo ile Specemu'yu path'i kısa olan bir klasöre (örn: D:\dev\z80\ altına) açıyoruz, aynı klasördeymiş gibi anlatacağım, siz ayarlarsınız.

AYARLAR
Crimson editör'ü çalıştırıyoruz.

Önce ASM tipi olarak z80'i öncelikli yapalım. Yoksa intel 8080'i seçiyor crimson.
* Üstteki menülerden Document > Syntax Type > Customize... seçiyoruz.
* Açılan pencerede sol taraftaki Syntax Type liste kutusunda aşağılara kayarak "-Empty-" soketi bulup seçiyoruz.
*Kutucukları şöyle dolduruyoruz (aşağıdan direkt copy-paste yapabilirsiniz, ya da browse edip dosyaları gösterebilirsiniz):
Description : Z80 Asm
Lang. Spec:   Z80-ASM.SPC
Keywords:     Z80-ASM.Key
* Oluşturduğumuz yeni z80 asm slotunu YUKARI OK butonuna basarak en üste taşıyoruz.
OK butonuna basarak pencereyi kapatıyoruz.

Menüde üstteki gibi görebilmemiz gerek. Artık Autodetect olarak bırakabiliriz buradaki ayarı, asm dosyalarını z80 olarak görecektir, görmezse de gidip kolayca elle seçebiliriz.

Sırada PASMO'yu eklemek var:
Şimdi yine üst menüden TOOLS > "Conf. User Tools" seçeneğini seçiyoruz.
Aşağıdaki preferences penceresi görünecek:


* Resimde 1 numara ile işaretlenmiş "user tool | hot key" şeklinde gösterilen liste kutusunda "-EMPTY-" yazan bir soket buluyoruz ve onu seçiyoruz.
* 4 numaralı "Menu Text" kısmına "Compile with Pasmo" yazıyoruz.
* Command kısmının yanında 3 ile gösterilen butona basıyoruz ve PASMO.exe'yi koyduğumuz klasörde bulup seçiyoruz. O kutucukta örneğimize göre şöyle yazmalı:
D:\dev\z80\pasmo.exe
* Hemen altında 5 ile işaretli "ARGUMENT" kutusuna aynen şunu yazıyoruz:
-v --tapbas $(FilePath) $(FileDir)\$(FileTitle)_out.tap
* bir altındaki 6 ile işaretli "INITIAL DIR" kısmına $(FileDir) yazıyoruz.
* Hotkey kutusuna klikleyip, kutucuk aktif iken ctrl+1 tuşlarına basarak bu görevi ctrl+1 kombinasyonuna atıyoruz.
* Capture Output (8) ve Save before execute(9) seçiyoruz.
* Resimde 2 ile işaretli yukarı butonuna basarak bu aracımızı listenin üstüne taşıyoruz (eğer altta kaldıysa).
* Save Tools diyoruz (bazen kaybolabiliyor toollar) ve bu ayarımızı bir isim altında kaydediyoruz.

* Pencereyi KAPATMIYORUZ.

Şu anda pasmo hazır olmalı. Ama listeye pasmo'nun çıktısını hızla test etmemize yardımcı olacak olan
specemu'yu da ekleyelim.

* Resimde 1 numara ile işaretlenmiş "user tool | hot key" şeklinde gösterilen liste kutusunda "-EMPTY-" yazan yeni bir soket buluyoruz ve onu seçiyoruz.
* 4 numaralı "Menu Text" kısmına "Run with Specemu" yazıyoruz.
* Command kısmının yanında 3 ile gösterilen butona basıyoruz ve specemu.exe'yi koyduğumuz klasörde bulup seçiyoruz. O kutucukta örneğimize göre şöyle yazmalı:
D:\dev\z80\specemu.exe
* Hemen altında 5 ile işaretli "ARGUMENT" kutusuna aynen şunu yazıyoruz:
$(FileDir)\$(FileTitle)_out.tap
* bir altındaki 6 ile işaretli "INITIAL DIR" kısmına $(FileDir) yazıyoruz.
* Hotkey kutusuna klikleyip, kutucuk aktif iken ctrl+2 tuşlarına basarak bu görevi ctrl+2 kombinasyonuna atıyoruz.
* Capture Output (8) ve Save before execute(9) seçiyoruz.
* Resimde 2 ile işaretli yukarı butonuna basarak bu aracımızı listenin üstüne taşıyoruz (eğer altta kaldıysa).
* Bu sefer son olarak Save Tools diyoruz ve bu ayarımızı bir isim altında kaydediyoruz.
* OK ile bu pencereyi kapatıp çıkıyoruz.

Artık ctrl 1 ve 2 tuşlarına pasmo ve specemu'yu eklemiş olduk. Aynı şekilde TOOLS menüsünü açarsanız artık iki ayrı menü göreceksiniz.


Fakat daha bitmedi.

Şimdi specemu'yu uygun şekilde ayarlayalım:

Options > Options (f8) menüsüne giriyoruz şu seçenekleri ayarlıyoruz:

Display:
ULA Snow effect
Enable Vsync
Show Tape Disk icons in the border
Bu üç kutucuk seçili olsun, diğerlerini temizleyin.

Sound:
Output: Mono
High Quality AY emulation
None
22khz
diğer kutucuklar boş

Hardware:

ZX Spectrum 48k ve 128k için ZX Spectrum +2 dışında bir model kullanmayın.
Use late timings for this model
Diğer tüm kutucuklar boş

Tape:
Burası önemli, BOOST opsiyonları dışındaki tüm kutucukları işaretleyin.

Advanced:
En alttaki Ask before exiting specemu kutucuğunu tercihen temizleyin.

Ok diyerek çıkın ve emülatörü kapatın. Ayarlarınızı otomatik olarak kaydedecektir.

Artık çalışmaya hazırız.

Hemen şu test programını deneyelim:


Kod: [Seç]
org 40000   ;Başlangıç adresi

Call $0D6B  ;Ekranı temizler (Basic CLS)

ld de,16384 ;Ekran belleğinin adresi
ld hl,3000  ;Rom'daki rastgele bir nokta, veri kopyalayacağız
ld bc,2048  ;Kopyalanacak veri uzunluğu
ldir        ;LoaD with Increment and Repeat (bu kopyalamayı yapan komut)

end 40000  ;Bu pasmo'ya otomatik bir loader eklemesini söyleyen komut. 40000 ise başlangıç adresi oluyor.
Yukarıdaki kodu crimson editörde boş bir sayfa oluşturup içine yapıştırıyoruz, hemen dosyayı kaydediyoruz, örneğin "karmasa.asm" olarak.
Daha sonra CTRL+1 tuşuna basarsanız şöyle bir metin görünecek editörün altında:


Terminated with exit code 0 gördüyseniz hatasız derlenmiş demektir. Pasmo bizim için bir TAP dosyası yarattı bile. Dosyayı asm dosyasını kaydettiğiniz klasörde bulabilirsiniz. Ama bununla uğraşmayalım diye specemu'yu ayarlamıştık:

Şimdi CTRL+2 tuşuna basıp biraz bekliyoruz, specemu açılıyor, açıldığı gibi dosyamızı otomatik olarak yükleyip kodu da otomatik olarak çalıştırması lazım. Ekranda karmaşık bir görüntü göreceksiniz, rom datasını ekrana kopyaladığımız için parazitten başka birşey yok:



Bitti.




Son olarak win7 kullanıcıları için Crimson Editör her açılışta admin onayı istiyor. Bunu kapatmak mümkün ama bunun için Microsoft Compatibility Administrator isimli programı indirip kurmanız gerek. Bununla uğraşmak istemeyenler için Context ayarlarını da çok kısa geçeceğim:

Context kullanıyorsanız, aynı ayarları şöyle yapıyoruz:
Options > Environment Options > Execute Keys >
ADD butonuna bas, "asm" (küçük harfle) ekle.
Listede asm kategorisi görünecek, onun altındaki F9'u seç:
Execute: pasmo.exe
Start in: D:\dev\z80\
parameters: -v --tapbas %n %p\%F_out.tap
Window: normal
Hint: boş
Save: Current file before execution
Use short dos names seçili
Capture Console Output seçili
Compiler output parsel rule boş
Scroll Console seçili
Idle Priority boş
[APPLY] butonuna bas,

Sonra .asm altındaki F10'u seç:
Execute: Specemu.exe
Start in: D:\dev\z80\
parameters: %p\%F_out.tap

diğerleri üstteki gibi.

Burada F9 ile asm dosyalarını derliyor, F10 ile specemu'ya atıyoruz.

Benden bu kadar.
Daha pratik yöntemler vardır mutlaka, fakat ben çok yoğun bir asm kullanıcısı olmadığım için bukadar bulabildim. Kolay gelsin.


Bu metne aksesuar olarak şunları iliştirmek istiyorum, aslında konu ile alakaları pek yok:

Z80 için sprite geliştrmek için 7up kullanabilirsiniz.
ftp://ftp.worldofspectrum.org/pub/sinclair/tools/pc/SevenuP-v1.20-win.zip

Grafik çizmek için ZX Paintbrush:
http://www.zxmodules.de/zxpaintbrush/download.html

Müzik için PC üzerinde Vortex Tracker II var, genel olarak Sound Tracker gibi spectrum tabanlı programlar kullanılır.
ftp://ftp.worldofspectrum.org/pub/sinclair/music/players-pc/VT1.0beta14.zip

Çevrimdışı nightlord

  • RAAT
  • Tedavideki Retromanik
  • *
  • İleti: 389
    • Night Network
Ynt: Zx Spectrum için Assembler Araç Zinciri oluşturmak
« Yanıtla #1 : 09 Şubat 2012, 19:28:00 »
abi bu supper bi kaynak olmus ellerine saglik

Çevrimdışı hades

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 179
Ynt: Zx Spectrum için Assembler Araç Zinciri oluşturmak
« Yanıtla #2 : 09 Şubat 2012, 20:57:06 »
OLMUYOR OLMUYOR OLMUYOR >:( :'(

Çalışmalarım (.asm dosyalarım) G:\_RETRO\ZX SPECTRUM\MY WORKS klasöründe
Pasmo.exe G:\_RETRO\ZX SPECTRUM\pasmo 0.53 klasöründe
SpecEmu.exe G:\_RETRO\ZX SPECTRUM\SpecEmu-3.0.b010212 klasöründe bulunuyor.

F9 için;
Execute: pasmo.exe
Start in: D:\dev\z80\ yerine G:\_RETRO\ZX SPECTRUM\MY WORKS\ yazıyorum
Parametreleri aynen yazıyorum ve gerekli seçimleri yapıp uyguluyorum.

F10 için;
Execute: Specemu.exe
Start in: G:\_RETRO\ZX SPECTRUM\MY WORKS\
Parameters: G:\_RETRO\ZX SPECTRUM\MY WORKS\out.tap
Gerekli seçimleri yapıp uyguluyorum.

Herhangi bir .asm dosyasını yükleyip F9'a bastığımda " '.asm' uzantısıyla ilişkilendirilmiş bir kullanıcı komutu yok. Ortam Ayarları / Execute Keys diyalog tuşlarını kullanarak ilişkilendirebilirsiniz." şeklinde bir pencere çıkıyor.
Hatta SpecEmu'nun bütün dosyalarını ve Pasmo.exe'yi my works içine kopyalayıp ayarları değiştiriyorum yine olmuyor.

Çevrimdışı ozayturay

  • Retroman
  • ***
  • İleti: 76
  • Commodore Forever
Ynt: Zx Spectrum için Assembler Araç Zinciri oluşturmak
« Yanıtla #3 : 09 Şubat 2012, 21:30:24 »
Pasmo ile Specemu'yu path'i kısa olan bir klasöre (örn: D:\dev\z80\ altına) açıyoruz, aynı klasördeymiş gibi anlatacağım, siz ayarlarsınız.

Sorun klasör adlarındaki boşluklarda olabilir.

G:\_RETRO\ZX SPECTRUM\MY WORKS -> G:\_RETRO\ZX\WORK şeklinde deneyebilirsin.

http://www.retrodergi.com - http://www.e-turay.com

* Commodore 64C, 1541-II
* Amiga 500, Cortex Floppy Emu

* XBox (TSOP Flash, XBMC)
* Wii (SoftMod, USB Loader GX)
* PS3 Slim (Rogero Cobra, webMAN + mmCM)
* PS2 (FHDB, OPS2L)
* PS1 (ModChip)
* XBox360 (JTAG, Aurora)

Çevrimdışı hades

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 179
Ynt: Zx Spectrum için Assembler Araç Zinciri oluşturmak
« Yanıtla #4 : 09 Şubat 2012, 22:05:38 »
Sorun klasör adlarındaki boşluklarda olabilir.

G:\_RETRO\ZX SPECTRUM\MY WORKS -> G:\_RETRO\ZX\WORK şeklinde deneyebilirsin.

Bu ihtimalide düşündüm ve yukarıdaki mesajı gönderdikten hemen sonra G:\_RETRO\Z80\WORKS şeklinde bir klasör açtım ve pasmo.exe'yi buraya kopyaladım. Ayrıca specemu'yuda ayrı bir klasör olarak works'un içine kopyaladım. Context'in ayarlarını değiştirdim ama sonuç yine aynı.
Belkide vazgeçsem iyi olacak.

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2872
  • Advanced User Simulator
    • ae unutmadan
Ynt: Zx Spectrum için Assembler Araç Zinciri oluşturmak
« Yanıtla #5 : 10 Şubat 2012, 00:45:49 »
Herhangi bir .asm dosyasını yükleyip F9'a bastığımda " '.asm' uzantısıyla ilişkilendirilmiş bir kullanıcı komutu yok.

Tamam hata bende, fakat hata kodu gayet açıklayıcıymış hades? "add" butonuna bastığında ".asm" değil, "asm" olarak oluşturman gerekiyor kategoriyi, yani nokta olmadan. Sonra sorun hallolacak. Aslında enteresan, 5 sayfa metin yazıyorum, screenshot'lı basamaklı falan, ama ufacık bir "nokta" herşeyi boşa yaptırmış oluyor.



Alıntı
G:\_RETRO\ZX SPECTRUM\MY WORKS\out.tapG:\_RETRO\ZX SPECTRUM\MY WORKS\out.tap
Yanlız bu şekilde specemu dosyayı açamaz. LAkin pasmo parametresini de ona göre düzenlemen lazım. Benim ayarlarımda her dosya kendi klasörüne, kendi adının sonuna xxx_out.tap şeklinde çıkış alıyor ve bu şekilde specemu'ya geçiyor. Eğer sen her dosya out.tap olsun istiyorsan kesin path ver, hiç "%" switchleri kullanma.


Çevrimdışı Shax

  • Yönetici
  • Normalleşmiş Retroman
  • *
  • İleti: 1207
Ynt: Zx Spectrum için Assembler Araç Zinciri oluşturmak
« Yanıtla #6 : 10 Şubat 2012, 10:13:51 »
 Bu ne kadar guzel bi sey olmus yav. Yani "Server ne demek?" safhasinda olan kullanicidan tut, mimariler arasi jonglorluk yapan adama kadar her kesime hitab ediyor. Icim bi hos oldu bak.
Sahip oldukların zamanla sana sahip olur.

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2872
  • Advanced User Simulator
    • ae unutmadan
Ynt: Zx Spectrum için Assembler Araç Zinciri oluşturmak
« Yanıtla #7 : 10 Şubat 2012, 11:10:07 »
Çalışmalarım (.asm dosyalarım) G:\_RETRO\ZX SPECTRUM\MY WORKS klasöründe
Pasmo.exe G:\_RETRO\ZX SPECTRUM\pasmo 0.53 klasöründe
SpecEmu.exe G:\_RETRO\ZX SPECTRUM\SpecEmu-3.0.b010212 klasöründe bulunuyor.

F9 için;
Execute: pasmo.exe
Start in: D:\dev\z80\ yerine G:\_RETRO\ZX SPECTRUM\MY WORKS\ yazıyorum
Parametreleri aynen yazıyorum ve gerekli seçimleri yapıp uyguluyorum.

Start in: "G:\_RETRO\ZX SPECTRUM\pasmo 0.53"
olması gerek, path'de boşluklar varsa tırnak içine alman gerek. En güzeli path'de boşluk olmaması, sadece harf ve sayılardan oluşması.

Çevrimdışı hades

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 179
Ynt: Zx Spectrum için Assembler Araç Zinciri oluşturmak
« Yanıtla #8 : 10 Şubat 2012, 17:27:00 »
Ayrıca, context'i bırakıp hazır linkini de verdiğim crimson editör'e geçer misin? Bak ne güzel fotograflı izahlı anlatmışım.

Crimson'u kurup çalıştırdığımda makinaya restart yaptırıyordu. Sonra context'i kurmuştum.

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2872
  • Advanced User Simulator
    • ae unutmadan
Ynt: Zx Spectrum için Assembler Araç Zinciri oluşturmak
« Yanıtla #9 : 10 Şubat 2012, 18:10:48 »
Crimson'u kurup çalıştırdığımda makinaya restart yaptırıyordu. Sonra context'i kurmuştum.

Abovvv. O zaman bilican lazım.. Context yukarıdaki düzeltmeleri yapınca çalışmıyor mu?

Çevrimdışı hades

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 179
Ynt: Zx Spectrum için Assembler Araç Zinciri oluşturmak
« Yanıtla #10 : 10 Şubat 2012, 19:14:46 »
Şimdi eve geldim ve hemen .asm'yi asm olarak değiştirdim.
Aşağıdaki yazılar çıktı. Ama .tap dosyası ortada yok. :(


> Executing: C:\Program Files\ConTEXT\ConExec.exe "pasmo.exe" -v --tapbas G:\Z80\WORKS\overscan.asm G:\Z80\WORKS\ overscan.asm_out.tap

Loading file: G:\Z80\WORKS\overscan.asm in 0
Finished loading file: G:\Z80\WORKS\overscan.asm in 97
Entering pass 1
Pass 1 finished
Entering pass 2
Pass 2 finished
ERROR: Error creating object file
> Execution finished.

Aynen böyle diyor.

Edit:F9 parametrelerini -v --tapbas %n %p %F.tap olarak değiştirdim. .asm_out yazısından kurtuldum. Sırada ERROR var. Acaba Pasmo komutlarında bir hata olabilir mi?

> Executing: C:\Program Files\ConTEXT\ConExec.exe "pasmo.exe" -v --tapbas G:\Z80\WORKS\overscan.asm G:\Z80\WORKS\ overscan.tap

Loading file: G:\Z80\WORKS\overscan.asm in 0
Finished loading file: G:\Z80\WORKS\overscan.asm in 97
Entering pass 1
Pass 1 finished
Entering pass 2
Pass 2 finished
ERROR: Error creating object file
> Execution finished.

F10 parametresinide G:\Z80\WORKS\%F.tap olarak değiştirince Specemu ilgili dosya adına sahip dosyayı (overscan.tap) yüklemeye çalışıyor. Haliyle dosya olmadığı için bir işe yaramıyor. Böylece hem F9, hem de F10 parametrelerinde %F.tap olursa compile edilen asm dosyası aynı isimle .tap olarak SpecEmu'ya yüklenmiş olacak.

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2872
  • Advanced User Simulator
    • ae unutmadan
Ynt: Zx Spectrum için Assembler Araç Zinciri oluşturmak
« Yanıtla #11 : 11 Şubat 2012, 10:06:33 »

> Executing: C:\Program Files\ConTEXT\ConExec.exe "pasmo.exe" -v --tapbas G:\Z80\WORKS\overscan.asm G:\Z80\WORKS\ overscan.asm_out.tap


çıkış dosyası path'inde boşluk var yine hades.

G:\Z80\WORKS\ overscan.asm_out.tap
             ^
             |
             +--  şurda



birde yine hata yapmış olabilirim, son kez execute key parametrelerini şu şekilde hiç değiştirmeden düzenleyip dener misin?

F9 için:
Parameters: -v --tapbas %n %p\%F_out.tap

F10 için:
%p\%F_out.tap

yalnız en iyisi buradan olduğu gibi copy-paste yapman, elle yazınca boşluklar oluşabilir. Ayrıca büyük küçük harfler de önemli, senin çıkışında fazladan görünen harflerin sebebi bu.

Çevrimdışı hades

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 179
Ynt: Zx Spectrum için Assembler Araç Zinciri oluşturmak
« Yanıtla #12 : 11 Şubat 2012, 18:24:13 »
F9 parametresi
-v --tapbas %n %p%F.tap

F10 parametresi
G:\Z80\WORKS\%F.tap

Çalıştırınca;
> Executing: C:\Program Files\ConTEXT\ConExec.exe "pasmo.exe" -v --tapbas G:\Z80\WORKS\overscan.asm G:\Z80\WORKS\overscan.tap

Loading file: G:\Z80\WORKS\overscan.asm in 0
Finished loading file: G:\Z80\WORKS\overscan.asm in 98
Entering pass 1
Pass 1 finished
Entering pass 2
Pass 2 finished
> Execution finished.

> Executing: C:\Program Files\ConTEXT\ConExec.exe "SpecEmu.exe" G:\Z80\WORKS\overscan.tap

> Execution finished.

İşte bu kadar.
Ancak .tap dosyasında loader'den sonra "bytes  G:\Z80\WOR" olarak çıkıyor. Bunuda bir şekilde düzeltirim artık.

.asm dosyasını Spin ile derleyip çalıştırınca düzgün görüntü elde ettiğim halde .tap haline getirince sapıtıyordu. Aynı dosyayı context + pasmo ile derlediğimde de .tap dosyası bozuk çıkması ise aslında kodun hatalı olduğunu gösteriyor. Demekki spin'in editörü sakat :)
Ben kod yazmaya gidiyorum.

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2872
  • Advanced User Simulator
    • ae unutmadan
Ynt: Zx Spectrum için Assembler Araç Zinciri oluşturmak
« Yanıtla #13 : 12 Şubat 2012, 14:23:05 »
Demekki spin'in editörü sakat :)
Ben kod yazmaya gidiyorum.
Aslında spin'in editörü sakat değil ama yaratılan kodun uygulanma şekli ve emülatörün kendisi (demo programcısı için) sakat.

Şöyle ki, senin kullanma şeklini hatırlıyorum 7D'den, spin'in editöründen start veriyordun, bu durumda o sırada belki de rom'da bir işlem yapan basic editörü, spin'in asm editörü tarafından işinden alı konularak (o andaki registerlerin durumunu bilmeden) PC değiştirilmek suretiyle senin koduna aniden yönlendiriliyor. Halbuki exec ortamının yaratılması gerek önce, örneğin basic sistem değişkenlerini CLEAR komutuyla güvenli bir yere almak, Registerleri pushlamak ve sıfırlamak vs gibi.

Pasmoda bu durum USR komutu ile sağlandığı için normal bir başlangıç ortamı yakalanıyor. Ayrıca testleri genel olarak 48k üzerinde yapmak, sonra 128k'ya göre ayrı bir timing ayarı çekmek gerekiyor. Şunlara dikkat etmek gerek:

128k spectrumda CPU 3.54690 MHz hızında iken 48k'da 3.50000 MHz hızında.
128k spectrumda  her tarama satırı (scanline) 228 T-state tutarken, 48k'da  224ts tutuyor, yani 128k ulası biraz daha yavaş.
128k spectrumda her karede 311 tarama satırı var, 48'k da 312.
128k spectrumda görüntü oluşmadan önce border alanında 63 tarama satırı var, 48k'da 64.


Bir de border konusunda ince bir detay var, şöyle ekleyeyim:
Çerçeveyi çizen aletin de ULA olduğunu düşünürsek ve ula'nın arada sırada data okumak için -ekranı çizmeye ara vererek- ram'a eriştiğini ve ramdaki datayı kendi registerine çektiğini bildiğimize göre, işte o anlarda meşgul olduğundan kelli, border rengini değiştirme işlemi de "contended memory"-gecikmeli yazma/okuma kurallarına göre işlemekte. Yani border efektleri yapmak için birkaç kural var. Yani istesen de tam istediğin anda border rengini değiştiremeyebilirsin. Bunlar üzerinde pek durmadığım için detayları ben de pek bilmiyorum. Belki bir gün.

Sen özellikle deli gibi ince timing yapan border işleri kastığın için bu bilgi çok faydalı olacaktır diye tahmin ediyorum.

Bu arada amstrad yapımı +2a/b ve +3'lerinkine hiç girmiyorum, onlar komple farklı, ve malesef bunun sebebi sinclair 128k kullanma kılavuzundaki bir baskı hatası! Amstrad sinclair markasını satın alıp yeni modelleri üretirken, amstrad mühendisleri kullanma kılavuzundaki değerlere göre tasarlamışlar çipi, halbuki gerçekte makinenin timingleri yukarıdaki gibiymiş. Tabii bir grup oyun programcısı da aynı hatayı yaptığı için (kılavuzdaki değerlere göre zamanlama yapmışlar) 128k'da kötü çalışan birsürü oyun amstrad makineler sayesinde kurtulmuşlar.. Acaip bir durum :)

Alıntı
Ancak .tap dosyasında loader'den sonra "bytes  G:\Z80\WOR" olarak çıkıyor. Bunuda bir şekilde düzeltirim artık.
Bunun sebebi pasmo'nun yarattığı tap dosyasının blok adı olarak dosya adını truncate etmesi. Zx spectrumda dosya adları 10 harfle sınırlı.  pasmo'nun otomatik Tap loader'inde 10 load "" code: randomize usr 40000 yazıyor, arada bir cls olsaymış güzel olacakmış. Bunu düzeltmek mümkün değil ama, benim örneğimde yaptığım gibi başlamadan önce ekranı temizlemek gerekiyor.

bunun için basic'den cls komutunu çağırabilirsin,
Call $0D6B

Çevrimdışı ozayturay

  • Retroman
  • ***
  • İleti: 76
  • Commodore Forever
Ynt: Zx Spectrum için Assembler Araç Zinciri oluşturmak
« Yanıtla #14 : 12 Şubat 2012, 14:33:45 »
Hem C64 hem de ZX programlama için bir araç zinciri oluşturdum. Deneyip fikirlerinizi belirtiseniz sevinirim.

http://retrojen.org/pano/index.php?topic=191.0

http://www.retrodergi.com - http://www.e-turay.com

* Commodore 64C, 1541-II
* Amiga 500, Cortex Floppy Emu

* XBox (TSOP Flash, XBMC)
* Wii (SoftMod, USB Loader GX)
* PS3 Slim (Rogero Cobra, webMAN + mmCM)
* PS2 (FHDB, OPS2L)
* PS1 (ModChip)
* XBox360 (JTAG, Aurora)