Gönderen Konu: Z80 Makine diline meraklı olan?  (Okunma sayısı 104422 defa)

0 Üye ve 2 Ziyaretçi konuyu incelemekte.

Çevrimdışı hades

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 179
Ynt: Z80 Makine diline meraklı olan?
« Yanıtla #120 : 26 Nisan 2022, 09:42:04 »
Alıntı
@hades kodun tamamı varsa ekleyebilir misin? parça parça anlatmışsın ama bir arada da bitmiş hali gibi bir asm dosyası kolay denemek için iyi oluyor.

@Ref mesajın sonunda kodun tamamı var zaten.

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2882
  • Advanced User Simulator
    • ae unutmadan
Ynt: Z80 Makine diline meraklı olan?
« Yanıtla #121 : 26 Nisan 2022, 11:47:41 »
Edit: Renkleri düzelten ayarı bulup, onu da ekledim mesaja. Ancak işte sorum gerçek 48k/128k cihazlarda ne oluyor? Bu ayar gerçek cihazda hangi durumda ortaya çıkıyor? Hakim değilim konuya.

Abi tekrar uyarıyorum, specemu dışında bir emülatör önermiyorum. zx spin'den kaçınmanı öneriyorum, zamanının iyi emülatörüydü ama 10 senedir güncellenmiyor, onu yapan adam sıfırdan başlayıp specemu'yu yazdı sonra.

Ula64 ek bir modern donanım (modern dediğim yine 20 sene oldu ahah, ama sayılmaz) o seçeneği kapalı tutuyorsun.

gerçek 48K/128K cihazlarda bildiğin göz yakan fosforlu renkler var. Register şu şekil 3 bit 8 normal renk ink + 3 bit 8 normal renk paper + 1 bit bright renk + 1 bit flash efekti. (Evet pc'de bright modlar daha canlı görünüyor ama, BORDER alanında bright kullanılmadığı için ana hat tasarımında normal tonları tercih ediyoruz genelde, brightlar yerine göre kullanılır).

Ula64 modu palet oluşturuyor, ve oradaki attribute byte indeksine göre boyuyor hücreyi. Ula64 eski oyunları da hiçbir müdahaleye gerek bırakmadan başka renklerle gösterebildiği için güzel hibrid bir format, fakat bunu gerçek donanımda görmek için makineden ULA'yı söküp yeriene SLAMula adında bir fpga takman gerekiyor. O yüzden emülatörler dışında yaygınlaşmadı. Dolayısı ile ulaplus, ula+, ula64 görünce o seçeneği kapatıyoruz.

 Ama ula color ramping'i aç, o gerçek spectrum davranışıdır. O da şu, ula koyu bir renkten açık bir renge anında değişemiyor, pixeller arası garip bir değişim oluyor voltaja göre, onu her spectrumda görürsün. Ama varla yok arası bir efekt aslında, büyük ekran tv'lerde RF bağlantıda daha belirgin oluyor. Ekte foto koyuyorum, pixellerin sağ tarafında hafif bir aydınlanma var. Bu efekti kullanan bir iki demo var, ama emülatörlerde hakkını vererek izleyemiyorsun.

Çevrimdışı Skate

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 175
Ynt: Z80 Makine diline meraklı olan?
« Yanıtla #122 : 27 Nisan 2022, 21:02:20 »
Hatasıyla, sevabıyla ilk çalışan versiyon. :)

Şimdi biraz adam ve optimize etmem lazım. Sonrasında paylaşırım maceralarımı.

Edit: Emülatörlerle uğraşmak istemeyenlere kolaylık olsun diye link ekledim.

http://speccy.akaydin.com/

Çevrimdışı matahari

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 209
    • The Blog of Mert Börü
Ynt: Z80 Makine diline meraklı olan?
« Yanıtla #123 : 27 Nisan 2022, 21:39:01 »
Hatasıyla, sevabıyla ilk çalışan versiyon. :)

"Deniz sakinken dümeni herkes tutar, gerçek kaptan fırtınalı havada belli olur" misali, emektar ZX Spectrum’a yazdığın daha ilk ürünle ustalığını konuşturmuşsun. Harikasın @Skate! 8)

Çevrimdışı Skate

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 175
Ynt: Z80 Makine diline meraklı olan?
« Yanıtla #124 : 27 Nisan 2022, 22:39:03 »
"Deniz sakinken dümeni herkes tutar, gerçek kaptan fırtınalı havada belli olur" misali, emektar ZX Spectrum’a yazdığın daha ilk ürünle ustalığını konuşturmuşsun. Harikasın @Skate! 8)

Çok teşekkür ederim @matahari, bu sözleri bir z80 gurusundan duymak benim için çok değerli. :)

Çevrimdışı hades

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 179
Ynt: Z80 Makine diline meraklı olan?
« Yanıtla #125 : 27 Nisan 2022, 23:24:25 »
Eline sağlık @Skate. Başlangıç böyleyse ilerleyen zamanlarda yapabileceklerin kimbilir nasıl olur?

Efektin kod uzunluğu ve hız bakımından 6510 versiyonu arasında bir karşılaştırma yapman mümkün mü?

Çevrimdışı Skate

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 175
Ynt: Z80 Makine diline meraklı olan?
« Yanıtla #126 : 28 Nisan 2022, 02:12:04 »
Bilmeyenler açısından da belirteyim, @hades ile yaş farkımız olsa da 90larda aynı scene grubunda yer alarak scene maceramıza başladık. 25 seneyi aşkın bir geçmişimiz olduğu için samimi hitap ediyorum İsmail'e, yoksa tabii ki abimdir. :)

Eline sağlık @Skate. Başlangıç böyleyse ilerleyen zamanlarda yapabileceklerin kimbilir nasıl olur?

Teşekkür ederim İsmail. Sadece yorumun için değil, böyle genel ve davetkâr bir başlık açarak Z80 programlamaya beni çeken faktörlerden biri olduğun için de ayrıca teşekkür ederim.

Efektin kod uzunluğu ve hız bakımından 6510 versiyonu arasında bir karşılaştırma yapman mümkün mü?

Bu soru başkasından gelse detaylı açıklamaya çalışırım ama sen hem 6502 hem Z80 ASM'ye hakimsin, üzerine donanımcısın. Yani bana sorarsan zaten bildiğin soruyu sormuşsun.

Mimarileri çok farklı iki işlemci oldukları için 6502 ve Z80'i kod uzunluğu açısından kıyaslamayı şu aşamada doğru bulmuyorum. Söz konusu olan efekt plot rutini olduğu zaman kapladıkları kod alanları, kullandıkları tablo uzunlukları çok farklı değil. Aslında bu konuda çok daha net konuşabilirdim. Ama Z80'e hakim değilim, 6502 ile doğdum sayılır. Yani şimdi "Z80'de aynı kod daha çok yer kaplıyor" gibi bir beyanda bulunacak olsam, büyük ihtimalle benim Z80'deki acemiliğimden kaynaklanan yanıltıcı bir beyan olur. Bir de Z80'e ve / veya ZX Spectrum'a özel bu işi yapmanın daha doğru yolları olabilir. Ben henüz o yolları keşfedebilmiş değilim. O yüzden kodu bildiğim kalıplarla yazdığımda sonuç çok da farklı olmuyor.

Hıza gelince şu şekilde bir benchmarking yapılabilir diye düşünüyorum. Belli işlevlerin tek bir frame içerisinde yüzde kaç işlemci gücü yediği. Örnek veriyorum, 256 plot'u silme rutinini ölçmüştüm, %7.22 CPU yiyor. Ancak silme rutinine yardımcı olmak için plot rutininin içine dahil edilmiş kısmı da sayarsak, o kısım %3.97 CPU harcıyor. Yani toplamda %11.19 gibi bir CPU'yu silme rutini harcıyor. C64'de %7.22 dediğim kısma karşılık gelen %5.2'ye düşüyor. Daha hızlı gibi gözüküyor ilk bakışta. Ama diğer %3.97'ye karşılık gelen plot rutininin içindeki kısım ise çok daha büyük oluyor. Ama yine toplamda devasa bir fark oluşmuyor sonuçta.

Peki bu hesap kitabı yapıyorum da neden detayları ya da kaynak kodu paylaşmıyorum? Çünkü hala öğrenme aşamasındayım. İki gün sonra "yahu ben ne saçmalamışım" diyeceğim şeyi örnek gibi paylaşmayı doğru bulmuyorum. Biraz daha kod içime sinsin, elbette ki yukarıdaki sayıları nasıl hesapladığımla beraber detaylarına girerim.

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2882
  • Advanced User Simulator
    • ae unutmadan
Ynt: Z80 Makine diline meraklı olan?
« Yanıtla #127 : 28 Nisan 2022, 17:27:43 »
Hatasıyla, sevabıyla ilk çalışan versiyon. :)

Şimdi biraz adam ve optimize etmem lazım. Sonrasında paylaşırım maceralarımı.

Edit: Emülatörlerle uğraşmak istemeyenlere kolaylık olsun diye link ekledim.

http://speccy.akaydin.com/

oooh subdomain bile açmışsın :D Gerisi gelir herhalde :D
matahariye katılıyorum, ustalığını gösteriyorsun. Senden daha azını da beklemezdim zaten.
bir tek şu emülatördeki ula+ sorununu halletmen gerek bence.  snapshot yükletiyorsun sanırım, jsSpeccy bile ula+ ekran açmış.

Biraz da spectrum öveyim o zaman, Spectrumun güzel tarafılarından biri kolay giriş yapabiliyor olmak. Basit yapısı sayesinde bir sürü şey öğrenmek gerekmiyor, bir iki nazı var, sonra dümeni nereye tutacağını seçmek kalıyor. Emülatörü bol, geliştirme ortamı çeşitli. Her yola geliyor.

şimdi bir de @memrah gelse de spectrum ortamı şenlense :D

Çevrimdışı Skate

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 175
Ynt: Z80 Makine diline meraklı olan?
« Yanıtla #128 : 28 Nisan 2022, 21:35:09 »
bir tek şu emülatördeki ula+ sorununu halletmen gerek bence.  snapshot yükletiyorsun sanırım, jsSpeccy bile ula+ ekran açmış.

jsSpeccy default ayarlarında, snapshot değil TAP kullanıyorum. HTML source'una bakarsan görebilirsin zaten.

Yeri gelmişken kodun alakası kalmadı ilk paylaştığım versiyonla. CPU kullanımı %90'lardan %70'lere geriledi. Hala mıncıklıyorum kodu, Z80 trickleri öğreniyorum.

Kod: [Seç]
emu = JSSpeccy(document.getElementById('jsspeccy'), {zoom: 2, sandbox: false, machine: 48, autoStart: true, autoLoadTapes: true, openUrl: 'tap/first.tap' })

Çevrimdışı MuzafferB

  • Retromanik
  • *****
  • İleti: 10
Ynt: Z80 Makine diline meraklı olan?
« Yanıtla #129 : 09 Aralık 2022, 13:50:25 »
download (lütfen kurulum kısmını da okuyun):
9.7MB Zip dosyası ZxToolchain Windows XP/7/8
Hocam dosyayi indiremedim, hala duruyor mu acaba?

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2882
  • Advanced User Simulator
    • ae unutmadan
Ynt: Z80 Makine diline meraklı olan?
« Yanıtla #130 : 27 Nisan 2023, 01:20:08 »
download (lütfen kurulum kısmını da okuyun):
9.7MB Zip dosyası ZxToolchain Windows XP/7/8
Hocam dosyayi indiremedim, hala duruyor mu acaba?
@MuzafferB
bunu görmemişim.
evet dosya duruyor. fakat artık sunucumuz güvenli https kullandığı için adresin başını düzeltmek gerekiyor:

Yani yeni adres şöyle olacak:

https://arda.kisafilm.org/fish/get/serve.php?b=zxtoolchain-retrojen.zip&d=24

Diğer bağlantıyı da güncelledim.

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2882
  • Advanced User Simulator
    • ae unutmadan
Ynt: Z80 Makine diline meraklı olan?
« Yanıtla #131 : 27 Nisan 2023, 01:47:48 »
Bu arada @Skate 'in kullandığı VsCode gibi modern bir text editöre henüz alışamadım. :D debuggerler falan iç içe, güzel birşey, fakat bir taraftan beceremedim de diyebiliriz.

Ama vscode'un güzelliklerinden de faydalanmak istedim, özellikle eski toprak context'te bulunmayan özellikler, örneğin bir kelimeyi seçtiğinizde onu kod içerisinde başka nerelerde kullanılmış gösteriyor olması gezinmeyi epey hızlandırıyor. Neyse sistemi aynı tutup editörü vscode'a nasıl çıkaracaksınız derseniz şöyle bir yöntem izledim ben.

1. VsCode'u kurun, çalıştırın. ctrl+shift+x basın ve pasmo aratın, kurun.
2. Ctrl+shift+P tuşuna basınca bir satır açılıyor, oraya "Preferences: Open Keyboard Shortcuts (JSON)" yazıyorsunuz ve seçiyorsunuz. Klavye kestirmeleri config dosyası geliyor.
3. boş dosya gelecektir belki sadece köşeli parantezler vardır, onu silin, şu kodu yapıştırın ve sonra ctrl+s ile kaydedin:
Kod: [Seç]
[
    {
        "key": "f9",
        "command": "workbench.action.tasks.runTask",
        "args": "compile"
    },
    {
        "key": "f10",
        "command": "workbench.action.tasks.runTask",
        "args": "run"
    }
]
4. şimdi projeniz için boş bir klasör oluşturun, örneğin klasörünüz masa üzerinde "zxprojeleri" olsun. (ileride 6.basamağı yapamayanlar için: ben bunu manuel olarak yaptım. klasörünüze ".vscode" diye bir klasör oluşturup içine boş bir "tasks.json" dosyası oluşturun. Böylece klasörü açtığınızda tasks hazır olacak)
5. vscode ile file>open folder seçin ve bu klasörü açın.
6. şimdi yukarıda f9 f10 tuşları için bir tasks.json dosyası oluşturmamız gerekiyor. Ctrl+Shift+P basın ile bu sefer "Tasks: Configure Task" yazın ve "Create tasks.json file from template" seçin, şablonlar arasından  "Others" seçin. (NOT. 4.basamakta elle oluşturduysanız sadece yandan tasks.json'u seçin)
7. şimdi şu kodu tasks.json dosyasına ekleyin ve kaydedin:
Kod: [Seç]
{
    "version": "2.0.0",
    "tasks": [
      {
        "label": "compile",
        "type": "shell",
        "command": "D:\\zxtoolchain-retrojen\\ConTEXT\\pasmo.exe",
        "args": [
            "-v",
            "--tapbas",
            "${file}",
            "${fileDirname}/${fileBasenameNoExtension}.tap"
        ],
        "group": "build",
        "presentation": {
          "reveal": "silent",
          "panel": "new"
        },
        "problemMatcher": [],
        "options": {
          "cwd": "${workspaceFolder}"
        }
      },
      {
        "label": "run",
        "type": "shell",
        "command": "D:\\zxtoolchain-retrojen\\ConTEXT\\SpecEmu.exe",
        "args": [
          "${fileDirname}/${fileBasenameNoExtension}.tap"
        ],
        "group": "test",
        "presentation": {
          "reveal": "silent",
          "panel": "new"
        },
        "problemMatcher": [],
        "options": {
          "cwd": "${workspaceFolder}"
        }
      }
    ]
  }
 

bu kurulumda zx-toolchain'in D:\zxtoolchain-retrojen\ olarak kurulduğunu varsaydım. başka bir yerde ise ona göre bunu düzenlersiniz. çift \\ slashlere dikkat.

tüm dosyaları kaydedin. vscode'u kapatıp açın.
F9- dosyanızı kaydeder ve pasmo ile compile eder.
F10-dosyanızı specemu üzerinde çalıştırır.

Örneğin test etmek için,
1. klasörünüzü vscode > open folder seçerek açın.
2. klasörünüzde vscode içinde yeni bir dosya oluşturun  örnek "test.asm"
3. yeni dosyanın içinde dosya tipini soran bir metin görürseniz oradaki linke tıklayarak "pasmo" olarak seçin.
şu metni yapıştırın:

Kod: [Seç]
org 32768
ld hl,16384
ld de,16385
ld (hl),144
ld bc,256
ldir
di
halt
end 32768

şimdi F9'a basın. dosya derlenecek. ardından F10'a basın.
 

ekranda üstteki specemu görüntüsü varsa herşey yolundadır.


Elbette ek olarak skate'in önerdiği eklentileri de kurun derim.

Çevrimdışı MuzafferB

  • Retromanik
  • *****
  • İleti: 10
Ynt: Z80 Makine diline meraklı olan?
« Yanıtla #132 : 28 Nisan 2023, 22:13:05 »
Tesekkurler!

download (lütfen kurulum kısmını da okuyun):
9.7MB Zip dosyası ZxToolchain Windows XP/7/8
Hocam dosyayi indiremedim, hala duruyor mu acaba?
@MuzafferB
bunu görmemişim.
evet dosya duruyor. fakat artık sunucumuz güvenli https kullandığı için adresin başını düzeltmek gerekiyor:

Yani yeni adres şöyle olacak:

https://arda.kisafilm.org/fish/get/serve.php?b=zxtoolchain-retrojen.zip&d=24

Diğer bağlantıyı da güncelledim.

Çevrimdışı hades

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 179
Ynt: Z80 Makine diline meraklı olan?
« Yanıtla #133 : 20 Mayıs 2023, 10:45:26 »
Hafızadaki bir ekran görüntüsünü yukarıdan aşağıya sütunlar halinde ekran belleğine transfer eden kısa bir rutin.
Önce bir karakterlik alanı transfer edip sonra attr bilgisini kopyalıyor. Halt komutlarını arttırarak gecikmeyi ayarlayabilirsiniz.

Kod: [Seç]
;=============================================;
; SCREEN TRANSFER ROUTINE #1                  ;
; 14.05.2023 - HADES/RET                      ;
; CODE LENGHT: 120 BYTES + screen data        ;
;=============================================;
org $8000
;---------------------------------------------;
maincode ld hl,screen+6144
ld (color),hl
ld hl,$5800
ld (attr),hl

ld ix,screen
ld iy,$4000
ld h,32
loop03 ld l,3
loop02 ld c,8
loop01 ld b,8
loop00 ld a,(ix+0)
ld (iy+0),a
inc ixh
inc iyh
djnz loop00
   
push hl
ld de,32
ld hl,(color)
ld a,(hl)
add hl,de
ld (color),hl

ld hl,(attr)
ld (hl),a
add hl,de
ld (attr),hl
pop hl

ld de,$f820
call newadr

dec c
jr nz,loop01

ld de,$0700
call newadr

dec l
jr nz,loop02

ld de,$e801
call newadr

push hl
ld hl,(attr)
ld de,$fd01
add hl,de
ld (attr),hl

ld hl,(color)
add hl,de
ld (color),hl
halt
halt
pop hl
dec h
jr nz,loop03

uloop jr uloop

newadr add ix,de
add iy,de
ret
;---------------------------------------------;
color dw 0
attr dw 0
;---------------------------------------------;
screen incbin "uridium_ekran.bin"
;---------------------------------------------;
end $8000
;=============================================;
[/font]