Category Archives: Sinclair Zx Spectrum

Zx Spectrumda yeni bir görüntüleme tekniği: aSMP

Yok hayır, bu sadece bir teori. Ben uydurdum. Unutmadan yazayım dedim.

Şimdi, zx spectrum’un limitlerini konuşalım önce. Zx Spectrumda sadece 1 ekran modu var. O da basit. ekran 8×8 pixellik bloklara ayrılmış durumda. Bu bloklar 32×24’lük bir alanda, toplam 256×192 pixellik bir görüntü oluşturabiliyor. 8×8 pixellik bu alanlara “karakter hücresi” diyelim. Lakin tasarımın kökeninde ekrandaki 8×8 boyutundaki karakterleri (harf ve rakamları) rahatça görüntüleyebilmek yatıyor. Bu karakter hücrelerinin içinde sadece iki renk kullanılabiliyor. Bunlara Kağıt ve Mürekkep renklerinin karşılığı olan paper ve ink deniyor. Biri arkaplanı, diğeri ön plan rengini kontrol ediyor. Bu renkler siyah, mavi, kırmızı, pembe, yeşil, açık mavi, sarı ve beyaz’dan yani toplam 8 renkten biri olmak zorunda. Bunun haricinde, her hücrenin bir parlaklık kontrolü var. Bir hücrenin rengini parlak ya da normal yapabiliyoruz. Bu parlaklık hem arkaplan hem de ön plan rengine uygulanıyor. Yani koyu sarı üzerine açık sarı kullanmak mümkün değil. Tabii ki bu görüntü hiç cpu zamanı kullanılmadan görüntülenebiliyor.

Eğer cpu’nuza bir görev verip, görüntü işlemcisi ram’den bilgileri okumadan önce çok ince bir zamanlama ile renk bilgilerini sürekli değiştirirseniz, bu sefer multicolour dediğimiz moda ulaşıyoruz yani 8×8’lik renk limitini, 8×1’lik bir alana küçültebiliyoruz.

Multicolour modunu oluşturabilmek için cpu’nun ekran oluşturulurken sürekli çalışması gerek. Fakat buna karşın grafik işlemcisi çok daha hızlı tarıyor hafızayı ve tüm renkleri değiştirmek mümkün olmuyor. Bunun için zx spectrumda bugüne kadar ulaşılan en yüksek multicolor bloğu 18 sütun genişliğinde. Normalde bu grafikler 1995 yılında colordraw isimli boyama programının yardımıyla patlama yaptı. Colordraw maksimum 16 sütun kalınlığında grafikler oluşturabiliyor.

Fakat zx spectrum grafikleri ile uğraştıkça görüyorsunuz ki, bir multicolor grafiğin her hücresinin multicolour olması gerekmiyor. Çoğu zaman hücreler gerçekten 2 renk içeriyorlar. Hatta boş alanlar da var, ve gereksiz yere bunları doldurmak için cpu vakti ayrılıyor.

Geçen yıl Forever 2011’e katılmak üzere grafik çizerken bazı hücrelerin şiddetle detaylandırılması gerekiyordu. Geri kalanlar ise standard 8×8 modda gayet iyi işliyorlardı. Bu durumda tüm ekranı 8×1 lik hücrelere çevirme gayreti yerine, görüntünün farklı bölgelerinin multicolour olarak oluşturulması mümkün müydü? Konuyu zx spectrum’un zamanlama experlerine açtım.

Başta böyle birşey denenmediği için eleştirel yaklaşsalar da, sonra bu işin son derece mümkün olduğuna karar kıldık. Aslında önerim çok basitti: Colordraw’ın erişebildiği 16×24 hücrelik multicolour alanını ekranın farklı yerlerine dağıtmak. Bir grafik ile açıklamak istiyorum:

 

Orjinal PNG 24bit Grafik

Yukarıdaki grafik çevrim için kullandığım orjinal grafiktir. Bu grafiği bir araç yardımı ile zx spectrum grafiği haline dönüştürürsem aşağıdaki görüntüyü elde ederim:

Zx Spectrum Standard Mod, acele bir çevrim, pek güzel olmadı...

Görüyorsunuz ki zx spectrum iki renklik kutucuklar halinde görüntüyü gösterebiliyor. Bu sonuçtan kimse memnun değil. Eğer 18 sütunluk limit olmasaydı, bir multicolour grafiği şöyle görüntülenebilirdi:

Zx Spectrum Multicolour grafiği, fakat burada 18 sütunluk limit esnetilmiştir.

Tabiiki yukarıdaki görüntü kısmen daha güzel. Kısmen diyorum çünkü hala 8×1’lik hücre limiti mevcut. Ayrıca yukarıdaki görüntüyü zx spectrumda oluşturmak pek mümkün değil, çünkü şu ana kadar ulaşılan en geniş multicolour alan 144×192. Yukarıda 256×192 var. Yukarıya bakarsanız, sadece iki rengin hüküm sürdüğü bir çok alan var, örneğin örümcek adamın kıyafetinde bazı kısımlar sadece 2 renk içeriyor. Bu alanlarda multicolor kullanmaya gerek yok. Bu durumda,

Yüz, kontürler ve tuğlaların bazıları

önümüzdeki limit doğrultusunda yatay olarak 16 hücreyi aşmayacak kadar (çoğu zaman bu çok bile fazla geliyor, 8-10 hücre yeterli) multicolour hücreleri seçiyor ve sadece onları güncelliyoruz. Cpu zamanı bunlar için yeterli oluyor. Sonuç ise biraz daha düzeltilmiş, tam ekran, yarı multicolour, yarı standard colourdan oluşan bir tam ekran grafik:

Sonuç: bindirme ile yaratılmış tam ekran grafik

Bu ne standard grafik, ne de multicolour. İkisinin birleşimi, teorik olarak mümkün, henüz pratiğe dönüştürülmedi, ama yakında bu fikrin uygulamaya dönüşeceğinden emin olabilirsiniz.

 

Bu tekniği kullanarak Diver ve Riskej gibi zx grafik ustalarının neler yaratabileceklerini düşünemiyorum bile.

 

Zx Spectrum Graphics (G) Mode Editor: CheqEdit (For Zx Spectrum and ZX81)

CheqEdit
it’s a simple and small program that helps you to draw 64×48 graphics on screen in GRAPHICS MODE. Program can output as text in CHR$ format, control codes format, a special compressed data format or special Basin/Zmakebas format, all in Basic. (Edit: Chris Cowley reminded me that this mode is native resolution for ZX81, and as CheqEdit already supports zmakebas style output, it is somehow compatible with zx81 graphics.)

Program can also import/export image files (bmp, png, jpg etc..).
What is it for?
if you want to create big graphics using G mode, this program can help you.

How to import text into zx spectrum?
This is tricky, you have to find an emulator or a tool to convert plain text into zx basic format. I recommend using basin. For Zx81 there is a program called “zxtext2p”. You can find it’s web address at the bottom of the post.

Here is the screens:

Editing with a mouse (screencap software couldn't capture mouse)

Read more and download:

Continue reading Zx Spectrum Graphics (G) Mode Editor: CheqEdit (For Zx Spectrum and ZX81)

Toprağın bol olsun, Joffa

Zx Spectrum dünyasının çok sevdiği, çılgın ama samimi kişilik,  80’lerde zx spectrum’daki en iyi kodu yazan adam Jonathan Smith’i ölümünün birinci yılında anıyoruz.

Bu kayıp aslında 8bit kuşağının yakında iyice alışacağı kayıpların ilklerinden. Forumlarda bizimle yazışan bu joffa’nın attığı mesajları gördüğümde hep tuhaf oluyorum. Henüz başımıza gelmedi çünkü biz dijital çağın çocukları, internetin yaşı gibi genç olduğumuz için internet henüz ölmüşleri loglayan bir mezar yığını haline gelmedi. Bundan 20 yıl sonra her forum, her site, her blog ölmüşlerin attığı mesajlarla dolu olacak. Belki o zaman buna herkes alışmış olacak ama henüz çok hazırlıksızız.

Crash Dergisi, henüz Jonathan Smith’in kim olacağını bilmeyerek şu sözlerle anlatıyordu:

“Smith must be very abnormal person, everything is so out of this world, his imagination or his inspiration comes from nightmares”

(Smith çok sıradışı biri olmalı, herşey öylesine yabancı ki, hayal gücü ya da esin kaynağı kabuslardan geliyor olmalı)

http://www.worldofspectrum.org/showmag.cgi?mag=Crash/Issue15/Pages/Crash1500032.jpg

Joffa, toprağın bol olsun.

Son olarak, şu belgeselde joffa’nın bu mesleğe ilk atılışı görünüyor,dakika 3:22 ‘de.

http://video.google.com/videoplay?docid=-1012096952890708986#

Yine Ghostbusters, ama daha güzeli…

Ghostbusters oyununu ilk gördüğümde, o zamana kadar platform, shoot-em up ve horace serisini oynamış biriydim. Ghostbusters filmi de beni etkilemişti zaten. Oyunu yüklediğimde banka hesabıdır, alışveriştir, sokaklarda araba kullanmak ve hayaletleri çekmek, haritada gezmek, hayaletlere yemlerini bırakıp onları yakalamak, ve o zamanlar bir türlü çözemediğim “haritada dolaşan anahtar ve kilitle ne yapacağım, marshmallow man’in gelmesini nasıl durdurabilirim?” gibi sorular beni bu oyunu uzun süre oynamaya sevk etti. Oyunun tasarımı sıradışıydı.

Oyunun üzerinden neredeyse 30 yıl geçmişken, ekranı çizme şeklinin ne kadar ilkel olduğu konusunda bir tartışma çıktı wos’da. Oyun görüntüleyeceği her kareyi önce bir backbuffer’a çiziyor, sonra bir LDIR komutuyla kopyalıyor.  LDIR devasa bir operatör, 21 tstate harcıyor, bunun yerine açılmış bir LDI turu ve POP/PUSH metodu ile bu kopyalama işlemi ortalama 10-15tstate içinde yapılabiliyor. Kodlar ve yöntem ortadaydı, fakat uygulayan yoktu. Sonuç olarak tek bir ldir operatörü yerine alengirli bir metodla ekranı kopyalayan ghostbusters’ı (48k) önce hazırladım, sonra da SnapToTap ile Teyp dosyası haline getirdim. Oyun artık %25 daha hızlı çalışıyor, ayrıca %35 daha hızlı yükleniyor (bitbuster sağolsun) , güle güle oynayın.

Ghostbusters/pop/push yaması için (Jimmy): http://www.worldofspectrum.org/forums/showpost.php?p=533092&postcount=43

Download (20kb)

 

Connecting Ericsson Chatboard to a GP32

What the heck is a GP32?

It’s a first generation “open” handheld console, possibly the first one. Gp32 is designed and sold by a Korean Company called Gamepark (Creators of caanoo, wiz, gp2x etc). It has a big 3.5″ color LCD, 133mhz 32bit ARM processor, 8MB ram. It has no custom cpu or gpu, everything is handled by the CPU. The GP32 was sold between 2002-2005, then superceeded by Gp2X.  In it’s golden years, the console’s community was flourished by counltess homebrew originals, countless software ports and hardware hacks. There are even some original boxed smc cardtridge games. There are no official sales figures, but GP32 is suspected to sold about 15000 units worldwide.

a GP32 handheld console

We will take a look at the keyboard enhancement for GP32: a simple chatboard hack. Read on:

Continue reading Connecting Ericsson Chatboard to a GP32

Zx Spectrum’da SNA to Tap converter

Çevirici

 

 

While I was messing with my zx microdrives, I decided to put some games into one of my old microdrive carts for quick loading. But this proved to be not only difficult task, also it spinned off two different tools out of discussion: zxBoot and SnapToTap.

 

Converting sinclair zx spectrum snapshot (sna) files into standard loading tap files: Not an easy task at all!

There were some tolls to convert snapshots into Tape files, but because of the very nature of snapshot files and the way of starting them once they loaded, it is impossible (read:impossible) to load a snapshot into zx spectrum without corrupting the snapshot itself. To do this properly you need additional hardware.

a Snapshot file is a full memory backup *with* extra CPU register data. Speaking of which, that data resides *inside* CPU. So you need a way to put the data into CPU before resuming snapshot state. Ofcourse this task also need to handled with CPU itself, which needs some code to reside in RAM, which also corrupts snapshot image. But this is not the only issue.

The goal was to put snapshot files into zx microdrive. But you will need a custom loader which loads the data from microdrive. There are none. Or you will need a converter which converts the snapshot into a standard loading code block. You couldn’t find one of thouse either.

Standard loader always tries to return to basic after loading is done. Because it is a basic component. But a snapshot occupies whole memory, so basic will be overwritten while you load snapshot block. And even if you manage to load the all 48k of ram from tape, it will crash your machine because standard rom loader will return to address that’s not there anymore.

The trick is the preserve small portion of basic just to execute the loaded code.

I used bitbuster (originally developed for MSX by team bomba) compressor. It’s very effective windows based packer normally reduces almost every 48k image atleast by %10 which produces about 5k, more than enough for us to fit in basic. Also the z80 decompressor is 79bytes long, plus some bytes as buffer, that it won’t be corrupting that much.

So I managed to create a clever program to decompress, move, merge the snapshot data, load the registers into cpu and finaly jump the the program counter location of snapsot image thus executing image.

The result was VSC, a proof of concept, an experiment over converting snapshots into tap files.

While this program re-invented in WOS forums a while ago, and people complained about the crapness of gui, I prepared a simplistic gui with automatic converting: it is SnapToTap. You drag and drop the file and it will create a tapfile highly compressed thus loaded in seconds, and with standard loader!

So there are two versions. Here is the downloads:

1. Latest version 2.4: Snaptotap 2.4 download)

2. First release: Visual Snapshot Converter – 250kb advanced controls, optional uncompressed converter, you can decide where to put executer code thus preserving screen or any other data–do not try to use this, I really messed up while creating a gui. 🙂

Snaptotap r2

A little bit warning about the tools:

No error checking, so it may crash time to time, it’s normal. Resart the app and try again.

Those are dotnet framework binaries, you will need .net framework 2.0+ to run them. Windows Only!

If snaptotap didn’t work for you, try asm’s zxboot for command line support, but it’s still windows only.

ZX Spectrum: Elite Collection (iPhone)

25 yıllık yazılım firması “Elite”, yeni iTunes uygulamalarını duyurdu:

Bugünden itibaren iPhone kullanıcıları, sadece 56 Pence’e (1$’dan az) zx spectrum emülasyonu yapabilecekler. Elite Kolleksionundaki oyunlar şöyle imiş:

– Turbo Esprit #3 on top 100 best games, voted for by visitors to World of Spectrum
– Saboteur #10 on top 100 best games
– Chuckie Egg the classic, developed by Nigel Alderton
– Harrier Attack inspired by the conflict in the South Atlantic
– Frank Bruno’s Boxing the UK #1 Best-Seller
– Buggy Boy the arcade original driving game

http://www.elite-systems.co.uk/elite/htdocs/user_home.php?show=26

Doğrusu, Chuckie Egg’i düşününce, touch screen kullanarak nasıl oynanacağını bilemiyorum. Kaldı ki, diğer oyunların aksine, bence o oyun sadece ve sadece orjinal 48K’nın kauçuk tuşlarıyla mükemmel oynanabilir.