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
bu kodun sonucu ektedir.