Speccy dünyasından kümülatif haberler

Başlatan Ref, 24 Mart 2015, 12:17:13

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

Ref

doktorun isteği üzerine eğlencelik haberler :

Just Speccy 128, Spectrum 128k klonu just speccy neredeyse hazır halde. Timing modeli olarak neyi taban aldığını henüz bilmiyorum, +2, +2ab ya da +3 olabilir, shock megademo çalışıyor (genelde ilk bu demo test edilir bu işlerde):

JUST Speccy 128 my clone of ZX Spectrum 128, first tests
https://www.youtube.com/watch?v=TmSbSkhlxOY

The Mahler Project, 12 zx spectrumu spectranet üzerinden bağlayarak, birlikte bir buçuk saate yakın bir süreye sahip mahler'in ilk senfonisini çalmışlar. Buradaki püf nokta, tüm senkronizasyon ve müzik çalma işlemi BASIC üzerinden BEEP komutu kullanılarak yapılmakta, videoda bunun sebebi açıklanıyor.
The Mahler Project
https://www.youtube.com/watch?v=LxPXLIALJJI


witchdoktor


Ref

Yanar dönerli meyve tabağı güzel bir arkadaşla gönderiyorum şimdi masana doktorcum

Ref

doktor için günün çerezleri,

zx spectrum'dan inkjet printer kullanmaca:

http://www.youtube.com/watch?v=wFo-KRnMtFw#


Orana burana yapıştırmak için sinclair logosu (zx spectrum kasalarındaki kabartmalı logonun yeniden üretimi aslında, eskisi çirkinleştiyse söküp bunu yapıştırabilirsiniz):

http://www.sellmyretro.com/offer/details/*NEW*-Sinclair-ZX-Spectrum%2B48-~~-ZX-Spectrum%2B128-Replacement-Rainbow-Badge-4188




witchdoktor

Alıntı yapılan: Ref - 25 Mart 2015, 15:12:19
doktor için günün çerezleri,

zx spectrum'dan inkjet printer kullanmaca:

Ref, baskı işlemi wyswyg mi? ;)

Retro dediğin daisywheel printer kullanır yahu :)

Bahaneyle millet de haberlerden nasipleniyor...

Shax

Alıntı yapılan: Ref - 24 Mart 2015, 12:17:1312 zx spectrumu spectranet üzerinden bağlayarak, birlikte bir buçuk saate yakın bir süreye sahip mahler'in ilk senfonisini çalmışlar.
Bir aylak bakkal ve dijital hassas terazi (0.0001 gr) hadisesi. Kalibrasyon agirligi olarak ne kullanildigini soylemeye terbiyem izin vermiyor. Oyle acayip ve mutaassip bir cocugum ayriyetten.
Sahip oldukların zamanla sana sahip olur.

witchdoktor

Alıntı yapılan: Ref - 24 Mart 2015, 12:17:1312 zx spectrumu spectranet üzerinden bağlayarak, birlikte bir buçuk saate yakın bir süreye sahip mahler'in ilk senfonisini çalmışlar.

Quadruple SID çipi, Poke komutları ve tek C64 ile halledilebilecek bir hadise ama buradaki önemli nokta 12 Spectrum'un ağ üzerinden senkronize çalışması mı oluyor? Ben seyirci kitlesine hayran oldum :)

Ref

Yok, senkronu sağlayan spectranet dışında standart donanım ve yazılım kullanılmış. Önemli nokta yak aslında, salla.

AmonR

Alıntı yapılan: witchdoktor - 25 Mart 2015, 21:07:39
Bahaneyle millet de haberlerden nasipleniyor...

Gerçekten gayet güzel bir "bahane" oldu da biz de nasipleniyoruz.  :)

Alıntı yapılan: Ref - 26 Mart 2015, 00:19:11
Yok, senkronu sağlayan spectranet dışında standart donanım ve yazılım kullanılmış. Önemli nokta yak aslında, salla.

Önemli nokta, "olayın" Spectrum tarafından yapılıyor olması, gerisi teferruat.  :)

Ref

Wos'un yokluğunda haberleri almak daha zor oluyor elbette ama, geçici forumda açılan bir muhabbet var, onu koyayım.

Renegade ve Target Renegade (2), zx spectrum'un en iyi oyunlarından ikisi. Fakat sonra çıkan renegade 3 tam bir fiyasko idi. Oyun tasarımı bu ünlü dövüş oyununu dandik ötesi bir "şey"e dönüştürmüştür, grafikleri tamamen monokrom, belli ki renegade efsanesinin getirisini ucuz yoldan söğüşlemek amaçlı bir oyundur.

Ralf, monokrom zx spectrum oyunlarının, standard buffer yapısından dolayı kolayca renklendirilebileceğini farkeden bir arkadaşımız, bu oyunu da renklendirdi.

Daha önce orjinali renksiz olan Outrun Europe, Mr.Heli ve Mr.Pacman oyunlarını renklendirmişti, renegade'i 1 saatten az bir sürede renkli hale getirdi. Oyun berbat olduğu için pek bir şey kazanmadı ama olsun.


Orjinal hali:


Yeni hali:



oyunun renkli halini arşivlerinize katmak isterseniz ekte bulunuyor





ayrıca http://trixter.oldskool.org/2012/12/17/maze-generation-in-thirteen-bytes/
13 byte ile maze generation yapılması durumu vardı. C64'de wisdom bunu 12 byte'a kadar çekmişti, fakat 2 byte mecburi bir header, yani aslında 10 byte denebilir kod için.

Aynı kodu cpc'de ssg https://github.com/ssg/mazecpc  adresinde paylaştığı üzere 12 byte'a indirmiş durumda.  Rastgele byte R registerinden elde ediliyor, CPC'de R registeri bayağı rastgele ilerliyor, interrupt kodu ne yapıyor belli değil (normalde shiftlerde 2, diğerlerinde 1 artması gerek).

Ben de zx spectrum'a dadandım elbette. Fakat bir problemim var. C64 ve CPC'nin karakter setinde \  ve / karakterleri yanyana duruyorlar. Dolayısı ile bir bit kullanarak karakter setini 1 karakter ötelemek kolay. örneğin, AND 1 komutu ile karakterinizin 40 ya da 41 olduğunu ayarlayabiliyorsunuz. Spectrum standard ASCII karakter setine sahip oldığı için bu karakterler 47 ve 92'de bulunuyor. Yani bildiğin ap ayrı iki rakam. Ayrıca 64'de karakter tabanlı bir ekran modu varken spectrumda böyle bir mod yok. Bu durumda iş benim için karmaşık oldu:
Neyse, ilk olarak şunu yaptım, 14 byte. Çünkü CPC'deki ld a,r spectrumda işe yaramadı. Spectrumda R ikişer ikişer artıyor, dolayısı ile ya düzgün bir pattern alıyoruz, rastgele bir görüntü çıkmıyor. Ama neyse ki daha iyi birşey buldum:

loop
in a,(&ff) ;get a random value from floatingbus
and &1 ;test it
jr z, jump ; select a character to print
ld a, &2f ; slash selected
defb &1 ;to skip next instruction, compiles to (LD BC, nn)
jump
ld a, &5c ; backslash selected
RST #10 ;print character
jr loop ;loop forever

sonra bu:

loop
in a, (&ff)
rra
ld a, &2f
jr c, jump
ld a, &5c
jump :
rst #10
jr loop


12 byte. burada birkaç avantaj var, o da spectrum'un floating bus denen bir hatası olması. Buna göre eğer herhangi bir aygıt takılı değilken bir giriş/çıkış portundan bilgi okursanız o sırada ula'nın yaptığı işleme göre rastgele bir rakam okumuş oluyorsunuz. Bu işlem 2 byte kaplıyor ama bir alet (örneğin divide) takılı olursa bu işe yaramaz. Ama expansion boş ise bayağı rastlantısal bir labirent elde ediyoruz.

Baktım asm bilgim beni ileri taşıyamayacak ve z80'ci arkadaşlara gönderdim kodu, ve bambaşka bir yaklaşımla sorunu 10 byte ile çözümlediler:

maze:
add a,(hl)
inc l
sbc a,a
and &2D
add a,&2F
rst &10
jr maze


John Metcalf, bunun yerine rom'daki bilgiyi okumayı tercih ediyor. Buradaki avantaj da şu, programı çağırdığınızda HL rom'da bir noktayı gösterir durumda, dolayısı ile hl'ye birşey yüklemeden direkt rom'daki bilgiyi alıyor rastgele rakam olarak. Bu daha uygun birşey ama kod hep aynı çıktıyı üretiyor elbette :D


bu kodun sonucu ektedir.



Ref

maze generation olayına jim bagley (midnight resistance coder'ı) de katıldı, yine 10 byte ama farklı yöntem, bu tür matematik hesapları lazım olabilir diye, arşiv amaçlı koyuyorum:

Start:
add a,(hl)
inc l
sbc a,a
and $73
xor $2f
rst 16
jr Start

memrah

ROM'dan byte okuma yontemi iki byte daha kisa olabilir ama bence senin floating bus trick'i cok daha yaraticiymis

memrah

Biraz gicik sorular sorup konuyu canlandirayim. Ref'in hic sesi cikmiyor bu gunlerde. :D

ilk olarak, bu rastgele labirent konusuna bizim Speccy'nin fontu cok uygun degil. Aralarda hep bosluk kaliyor. C64 fontu daha uygun. Ehehehe.

Simdi ana gicik soruya geldik. Bu rastgele labirent jeneratoru kodunun boyutunu ufaltma cabasi guzel hos ama bir noktada takiliyorum, o da: rst 16. Yani rutinimiz hangi "slash" karakterinin basilacagini kendine ozgu rastgele mantigi ile sectikten sonra ROM'dan ekrana karakter basma rutinini cagiriyor. Bu durumda acaba rutinin uzunlugu gercekten 10 kusur byte mi sayilmalidir, yoksa &16'dan baslayan print char rutininin uzunlugunu da buna byte cinsinden dahil etmek mi gerekir?

C64 ve CPC'de yazilmis olan kodlari gormedim ama tahminim onlar da ekrana karakter basmak icin ROM rutini kullaniyordur. Nedir gencler bu durumda yapmamiz gereken? Bu ikilem ve soru isaretleri yedi bitirdi beni. :D :D


PS. Uzun lafin kisasi, Ref'den yeni Speccy haberleri bekliyoruz bu kumulatif baslik altina ;)

Ref

Boşluk sorunu PC konsolunda da var, fazla takılmamak lazım :)

Alıntı yapılan: memrah - 08 Nisan 2015, 21:07:06
Bu durumda acaba rutinin uzunlugu gercekten 10 kusur byte mi sayilmalidir, yoksa &16'dan baslayan print char rutininin uzunlugunu da buna byte cinsinden dahil etmek mi gerekir?
bilmem, rom makinenin değişmez bir parçası olduğu için bence kabul edilebilir. Yoksa işlem sadece z80 ile yapılacaksa görüntüyü oluşturan çipleri de dışarıda bırakabiliriz, sonuç register'larda kalsın :D

Alıntı Yap
C64 ve CPC'de yazilmis olan kodlari gormedim ama tahminim onlar da ekrana karakter basmak icin ROM rutini kullaniyordur.
CPC'yi bilmiyorum ama C64'de karakter modu var. Yani vic ram'deki byte'ı okuyor ve ekrana karakteri çiziyor. Petscii tarzı grafikler bu tip karakter tabanlı ekran kaşesinin sonucu. Lakin karakter modundayken ekrana bir piksel basmak mümkün değil. Sanırım bu da c64 basic'in grafik yetenekleri ekrana karo maça iskambil kağıdı sembollerini basmakla sınırlıyor. Aslında suç basic'in grafik modu kullanmamasında. Sanırım karakter setini modifiye etmek mümkün, ama yine de... Neyse, bu sayede c64'cüler ekran belleğine karakter kodunu yazdıklarında ekrana çiziliveriyor. Bu da ROM çipi yerine başka bir çipi kullanmak demek aslında. Çizim işlemi yine 6502 ile yapılmamış oluyor.

lda #$11    ;R karakterinin karakter kodu
sta $0400  ;Ekran belleğine kopyala, ekranın en üst köşesinde R belirir.

C64'e birşeyler yüklenirken ekranın çöp tenekesine dönüşmesinin sebebi de makine açıldığında bu modda olmasından kaynaklanıyor. Yüklenen program ekran belleğinin üzerine yazınca vic ekranı ilgili karaktere çeviriyor.

wizofwor

Alıntı yapılan: memrah - 08 Nisan 2015, 21:07:06
Simdi ana gicik soruya geldik. Bu rastgele labirent jeneratoru kodunun boyutunu ufaltma cabasi guzel hos ama bir noktada takiliyorum, o da: rst 16. Yani rutinimiz hangi "slash" karakterinin basilacagini kendine ozgu rastgele mantigi ile sectikten sonra ROM'dan ekrana karakter basma rutinini cagiriyor. Bu durumda acaba rutinin uzunlugu gercekten 10 kusur byte mi sayilmalidir, yoksa &16'dan baslayan print char rutininin uzunlugunu da buna byte cinsinden dahil etmek mi gerekir?

C64 Scene'de bildiğim kadarıyla genel kural eğer Ram'e bir şey yazmıyorsan bu kısım koddan sayılmıyor. Senin örneğinin tersine ROM rutinleri pattern oluşturmak için veri olarak kullanan programlar da var. Orada da ROM'dan okunan data programın boyuna dahil edilmiyor. En azından benim takip ettiğim compolarda hep böyleydi.

Karakter modda görüntü üretmek için yazılan color ram ($d800-$dbff) ve char ram ($0400-$7ff) de yine program boyutundan hariç tutuluyor. Zero page adreslerinin sayılıp sayılmadığı kısmı ise gri.

 
Gosub ile gidilen yerden goto ile dönen adam