Rozhovor s jedním z předních remakerů her ze ZX Spectra, Romanem Dolejším si můžete přečíst zde. Pro MZunity připravil Zdeněk Adler
Ahoj Romane, Velice mne těší tvůj zájem pomoci dosavadnímu
dění okolo Sharpíka a moc si toho cením. Pokusím se Ti tedy položit několikero
otázek, tykajících se Tvého působení na SHARPu, ale i tvého současného zaměřeni:
Jaká byla Tvoje počítačová historie a
které z počítačů ti přirostly nejvíce k srdci?
K počítačům jsem se poprvé dostal, když jsem byl v 5. třídě.
Byl jsem tehdy velký fanda do elektrotechniky a i když jsem moc nevynikal
při stavbě různých elektrických obvodu, docela mne to bavilo. Tehdy jsme se
s našim elektrotechnickým kroužkem čas od času chodili dívat na velké sálové
počítače do tehdejšího PVT v Českých Budějovicích. Vzpomínám si, ze to byly
takové obrovské bedny s točícími se páskovými jednotkami a mne tam ti lide
v pláštích připadali jako ve snu. Když mi pak jednou udělali vlastni kondiciogram
a vyjeli ho na traktorový papír, můj osud byl zpečetěn :-)) Někdy v 6. třídě jsem
se jako zázrakem dostal do kroužku výpočetní techniky, ve kterém jsme měli několik
PMD-85 a par Slušovických IQ-151. O PMD byl obrovský zájem a jen málokdy jsem měl
možnost na něm něco dělat. Když už ta možnost byla, většinu času jsme na něm
hráli hry, ale ne vždy. Čas od času tam hry ale neměli, takže na nás zbyl Karel.
I stalo se, že jsem se Karla naučil ovládat a "programovat", čímž jsem
úspěšné započal mou programátorskou kariéru :-) Později jsem již na PMD moc
nechodil, spíše jsem seděl u věčné volných IQ-151 a snažil jsem se něco
programovat v Basicu. Později otevřela naše škola zájmový kroužek s IQ-151,
s jehož vedoucím jsme zkoušeli programovat různé malé věci v Basicu a hlavně
ovládat graficky modul Basic-G, který umožňoval, tuším, na svou dobu nevídané
jemnou grafiku 512x256 černobílých bodu. Když jsem šel jednou vrátit vedoucímu
vypůjčené materiály domů, shodou náhod jsem ho nezastihl a protože se mi nechtělo
jít tam znovu, počkal jsem na něj u jeho syna Ondry Staška, který byl ve stejném
věku jako já a navíc měl doma malý zázrak Sharp MZ-821 se zabudovaným kazetakem.
Ukázal mi nějaké staré hry (pamatuji se na Bruce Lee), které jsme hráli dlouho
do noci. Slovo dalo slovo a začal jsem k nim chodit čím dál častěji. Navíc se
ukázalo, že Ondru baví programovat stejně jako mne, takže jsme začali dělat
nějaké věci v Basicu a později také ve strojaku (to až potom, co jsme si přečetli
knihu Bity do Bytu, která nám ukázala, jak takové "pravé" programovaní
vypadá. Protože doma se jsem s mým počítačovým zaměřením setkal s trochou
pochopení, koupili mi rodiče ze skromných úspor na inzerát ZX Spectrum 48k
(legendárního gumáka). Na něm jsem objevil, jak vypadají opravdové hry a rozhodl
se, že na Sharpu přeci musí být hry také. Když jsme pak jednou na nějaké
zapomenuté Sharpacke kazetě objevili prográmek Spectrum Master, mysleli jsme,
že je to loader, do kterého se nahrají hry ze ZX Spectra a ty se pak prostě
spustí. Naše zklamaní z toho, že se jedná "jen" o jakýsi debugger, ale
netrvalo dlouho. Brzy jsem začal (s podporou Ondry Staška) zjišťovat, proč ony
hry nejde jednoduše pustit a jak to vlastně je s hardwarem ZX Spectra a Sharpa
MZ-800. Začal jsem předělávat hru, která se mi dostala do ruky (už si asi
nevzpomenu na název, ale tuším, že nikdy nakonec nebyla vypuštěna) a na ni jsem
zkoumal, jak na to. Postupně jsem získal znalosti toho, jak hry na Spectru a
grafické rutiny obecně vypadají. Zároveň s tím rostla i moje znalost hardwaru
Sharpa. Vybudoval jsem si základní rutiny pro předělávání her, jako byly emulace
klávesnice, barevné a černobíle přepisy obrazu (ty jsem ale ve hrách moc
nepoužíval), emulace zvuku, konverzní rutiny adres ze ZX-Vram do MZ-Vram a další
pomůcky. Někdy v té době jsem dokončil můj emulátor ZX Spectra na Sharpu, který
dělal prostě to, ze cyklicky zobrazoval obraz ZX Spectra, měl napíchnuté
klávesnicové a zvukové rutiny a v momentě, kdy do něj někdo nahrál standardním
loaderem nějaký blok kódu, prohledalo ho to a pokusilo se to všechny instrukce,
které by mohly nějak ovlivnit chod HW Spectra (nastavení přerusení, vstup či
výstup na port atd.) přepsat na odkazy na mé emulační rutiny. V mnoha případech
to docela fungovalo a prostě stačilo nahrát hru ze ZX do emulátoru a šla hrát
(i když pomalu a s přepisem). Myslel jsem si, ze bych si vydělal na vlastní
Sharp a tak jsem se rozhodl, ze emulátor budu prodávat.
Dal jsem inzerát do Annonce a čekal. Kromě jiných se mi ozval
i Otta Zemek (MZX), kterého jsem v té době ještě neznal a který shodou okolností
zrovna přesídlil z Českého Krumlova do Českých Budějovic. Ten mi navrhnul, abych
dělal hry a emulátor pro něj. Protože jsem nikdy moc neměl rád kšeftaření, rád
jsem s tím souhlasil a sám se věnoval čisté programovaní. Zároveň jsem se
seznámil s Davidem Voráčkem (alias Microcode), který později začal předělávat
hry také. Časem jsem pod značkou MZX udělal několik her a postupné si vydělal
na moje vlastni PC 386-DX40 se 4MB RAM a 1MB Video RAM v době, kdy do různých
podniků teprve nastupovaly 286 a 386SX. Moje první PC jsem začal hned (alespoň
částečné) používat k předělávání (za pomocí v té době vyvíjeného emulátoru Sharpa
kamaráda Jardy Kyselého) a později jsem si bez něj předělávání ani nedovedl
představit. Když Otta Zemek se svými Sharpistickými aktivitami skončil, začali
jsme s Davidem Voráčkem pod hlavičkou Dimension prodávat předělané hry sami. To
se ale zase tak moc nedařilo a cca po roce jsme s tím přestali. Od té doby jsem
se začal více zajímat o PC a jeho hardware. Věčným problémem, který jsem na PC
měl, bylo obsazení volné paměti v DOSu. U PC bylo volno 640kB pro DOS a programy
a horní část až do 1MB byla sice adresovatelná, ale byly tam pouze různé ROM
paměti jednotlivých připojených zařízeni (jako VGA, SCSI atd.). Jarda Kyselý
tehdy začal dělat ovladač, který na jeho čipové sadě PC povolil části vyšších
paměti jako RAM, takže se do nich daly nahrát rezidentní programy a tím se
uvolnilo drahocenné místo ve spodní paměti. Protože jsem sám měl jiný chipset PC,
převzal jsem Jardův jednoduchý program a postupně (cca 3 roky) ho programoval
tak, že z něj nakonec vzniknul univerzální ovladač UMB paměti pro DOS, který je
v současné době kupodivu stalé používán - viz hra Ultima, jejiž autoři RdosUMB
stalé doporučuji jako jedinou možnost, jak hru bez problému spustit. Vždy mne
bavila hudba a protože jsem tak trochu přilnul k té syntetické, začal jsem se
zajímat o programovaní FM-zvukové karty Adlib s čipem OPL-2. Sám jsem měl Sound
Blaster Pro3, který obsahoval čip OPL-3, a tak jsem mohl směle začít programovat.
Postupně z prvotních pokusů vznikl univerzální přehrávač velkého množství formátu
hudeb na OPL-2 a OPL-3 (hlavně z her a různých trackerů). RdosPlay je stalé ještě
(a asi už zůstane) s cca 20 podporovanými FM formáty jediný svého druhu a stalé
má své příznivce (podle ohlasu, které mi čas od času chodí). Později jsem s
k mému Sound Blasteru koupil ještě Gravis Ultrasound Interwave (zvukový wavetable
čip, který předběhl svou dobu) a moc mne zarmoutilo, že plně nepodporuje emulaci
Sound Blasteru a tak si Sound Blaster musím nechat. Rozhodl jsem se, ze zkusím
takový emulátor napsat sám. Nejprve mi mnoho usilí dalo zvládnutí programovaní
v Protected Mode Ring Level 0 (nejvyšší stupeň běhu procesoru, běží v něm
například jádro Windows či kernel Linuxu) a pak jsem již začal programovat
ovladače paměti XMS a EMS a samozřejmé emulační rutiny. Nakonec jsem zjistil, že
více než co jiného bych chtěl dělat univerzální emulátor jakékoli karty
na jakékoli kartě a tak vznikl REMUS - docela kuriózní projekt, který si získal
řadu příznivců diky skoro 100% emulaci Gravis Ultrasoundu na obyčejném D/A
převodníku za pár korun (či dolarů). Projektu bylo i víc (RAC - odchytávač
Adlib hudeb v protected módu, DXT - vzdálené bezdiskové přihlašovaní bezdiskovým
terminálem k Linuxu, Fellow - emulátor Amigy 500), ale těmi již nebudu zatěžovat.
Všechny jsou ke staženi na mé adrese http://sorry.vše.cz/~roman/dimension/rdos.
Později jsem zabředl do bouřlivých vod Linuxu a tam jsem i zůstal. V současné
době tvořím internetové aplikace (Linux, HP-UX, PHP, C, Oracle, PostgreSQL,
MySQL) a původním projektům se již nevěnuji (i když jsem na ně až tak docela
nezapomněl). Ze všech počítačů mi asi nejvíce prirostli k srdci dva: Sharp
MZ-800 a PC. Sharp pro svoji vyspělost v době svého vzniku, pro to, co mi
přinesl do života a pro jeho všeobecnou "útulnost". PC zase pro svoji
univerzálnost (díky které vlastně vydrželo až doteď).
Je o Tobě známo, ze jsi byl jedním z největších
dodavatelů softwaru přepsaného ze ZX Spectra na Sharpa pro MZX Software, později
jsi se stal i distributorem SW. Umožnil bys nám nahlédnout do své dílny, jak
takové přepisy softwaru probíhaly a kolik her jsi takto upravil?
Postup předělávání se u každé hry trochu lišil (to podle
programátora, který ji dělal), ale pokusím se popsat ho z pohledu ideálních
podmínek a ideálních prostředků pro předělávání (PC, potřebný software). Každou
hru bylo nejprve nutné získat v digitální podobě - tj. z tehdejšího Internetu
(který v ČSFR teprve začínal) či z pásky nahrát přes nějaký interface do PC. Pak
bylo dobré zhodnotit hru z hlediska "programátorské obtížnosti".
Jednou z mých menších pomůcek, které jsem si udělal ještě v dobách předělávání,
byl prográmek, který nahrál do paměti tehdy jediný emulátor ZX Spectra na PC - zxemu.
Po nahrátí ho "opravil", takže získal barvy, 128k zvuk a stránkování
a hlavně si zaznamenával seznam adres v paměťovém prostoru Z80, které zapisovaly
na obrazovku ZX Spectra. Když jsem zjistil, ze se mi nějaká hra libí a ze nemá
moc adres, které zapisují do Vram Spectra, začal jsem předělávat. V první fázi
jsem jel v Sharp emulátoru jeden podprogram za druhým a stalé sledoval, zda se
nezměnila vram spectra. Když ano, zkusil jsem to znovu až onomu místu a podíval
se do podprogramu, co ze tam tvůrci hry dělali. Někdy bylo například jen otázkou
čtvrt hodiny objevit a předělat rutinu zapisující texty na obrazovku a okamžité
bylo hotové hlavni menu hry (např. Cauldron II nebo Rick Dangerous). Když bylo
hotové menu a na obrazovce Sharpa již bylo něco vidět, většinou přišla na radu
klávesnice, aby se dala hra (alespoň ono předělané menu) ovládat. Opět jsem
hledal, v kterém podprogramku čekají autoři na stisk klávesy a ono čekání jsem
nahradil voláním mého emulačního kódu klávesnice, který obstaral kompletní
převod na klávesnici Sharpa a zpět. Nezřídka se stávalo, ze přepsáním tohoto
kódu začala pracovat klávesnice v cele hře. Jakmile bylo možné se dostat z
hlavního menu do hry, nastala opravdová práce.
Bylo nutné postupné předělat všechny vykreslovací rutiny tak, aby místo na ZX
Spectrum kreslily na Sharpa. Často nestačilo jen podle nějaké tabulky převést
adresu ZX Vram na Sharp Vram v místě zapísu na obrazovku (Cauldron II), ale bylo
kvůli rychlosti nebo grafickým změnám nutné předělat kompletní vykreslovací
rutiny (Dizzy 6 a Dizzy 5, Chase HQ, Hard Drivin a většina dalších). Když hra
již běžela, bylo potřeba dodělat ZX-48k zvuk (takové to pípání, ze kterého se
některým podařilo udělat slušné znějící hudby - David Whittacker 2 kanály a
bubny, Tím Follin dokonce 5 kanálu) - opět odkazem na mé emulační rutiny nebo
přímým přepisem portu a bitu v originálních rutinách (diky tomu, ze Sharp má
podobny hardware v sobě také). Třešničkou na dortu byl 128k zvuk - emulace
zvukového čipu AY 3-891x, který měl 3 nezávislé zvukové kanály a ke každému mohl
být zapnutý šumový generátor. Problém byl v tom, že Sharpuv 3-kanalový zvuk byl
oktávově posunutý trochu výše a tak nebylo možné nízké tóny plně emulovat.
Emulační rutiny tohoto čipu jsem (a to se musím přiznat bez mučení) sebral z
Lamačova FX Soundtracků III. Ten nízké tóny emuloval pomoci šumu a tak mu
(zřejmě) nezbývalo moc šumu na opravdové šumy AY. Později jsem získal ještě
jednu rutinu (už přesné nevím odkud, tuším že z Interkarate), která posunula
celou AY o oktavu výš a tak zbylo dost šumu i na šumový rozsah AY. Tato rutina
měla ale své chyby a tak se někdy do hudby vloudil nevhodný tón a rutina se
nedala použit. Ve finále jsem tedy používal obě dvě verze a sám jsem se nikdy
udělat vlastní emulaci ani nepokusil. Nejtěžší práce nastala s příchodem 128k
her. ZX Spectrum 128 mělo několik paměťových bank, které se po 16k mapovaly
do nejvyšší části paměti. Vzhledem k tomu, ze měl Sharp "pouze" 64k
RAM, je každému jasné, že odpovídající emulace stránkování ZX Spectra 128
nemohla být udělaná. Nejčastěji byla situace u 128-kovych her ještě ucházející -
používaly přídavnou paměť jen k ukládaní zvukových rutin a Spectrum prostě jednou
za čas přepnulo horní banku na jinou paměť, provedlo změnu nějakého tónu a přeplo
se zpět (např. Terramex či hudba z Mask3 v Total Eclipse). V takových případech
jsem prostě vzal zvukové rutiny, celé jsem je přepsal na jiné místo v paměti
(např. na místo ZX Vram nebo ZX ROM) a odtud se bez nutnosti přepínání stránek
volaly. Relokace rutin byla sice hrozná práce (člověk nikdy nevěděl, kde přesné
je kód, kde jsou data a kde jsou adresové informace o datech), ale nebyla až tak
zdlouhavá. Horší bylo, když se ve stránkovaných oblastech vyskytoval přídavný
grafický kód či jen grafické informace a ZX 128 stránkovalo jak zběsilé a tahalo
data na obrazovku ze všech koutů paměti (např. Total Recall, Robocop 3 či 128
extenze u Dizzy 5). Protože takovéto grafiky většinou již bylo moc a do 64k se
jednoduše nevešla, bylo nutné ji dát na ramdisk. Proto jsem si udělal univerzální
čtecí rutiny z ramdisku (zálohovaného i nezálohovaného), opět relokoval všechny
grafické rutiny z vedlejších stránek paměti a nakonec je předělal tak, aby četly
data přes moje ramdiskove rutiny. Když byla hra hotová, dodělal jsem do ní já
nebo kolega David Voráček přídavnou grafiku (někdy) a celou hru jsme zabalili
pomoci programu Uprava2 od J.O. Předělal jsem takto kolem dvacítky her, prakticky
všechny přímým přepisem grafických rutin na rutiny pro sharp. Všechny hry jsem
předělával pro 32k Vram a běžely jak z kazety, tak i z diskety.
Které tituly bys vyhodnotil jako vrchol tvé prace?
Už si na všechny mnou předělané hry nevzpomínám, ale určitě
bylo jedním z tvrdých ořišků Dizzy 5 (i se všemi 128-kovymi extenzemi) a starší
Dizzy 6, také Terramex či Total Recall (i když ten jsem už nedokončil).
Samozřejmě nesmím zapomenout na ZX-Emulator, který byl svým způsobem jedinečným
dílem (i když v použivatelnosti trochu pokulhaval).
Chtěl by jsi na závěr vzkázat něco současným fanouškům
SHARPa?
Stalé věřím, že Sharp MZ-800 je jedním z nejkvalitnějších
8-bitovych počítačů a všem současným příznivcům Sharpa držím palce, aby v jeho
podpoře setrvali. Určité si myslím, že i v dnešní době si muže najít dostatek
příznivců a přinést jim pěkné chvíle, tak jak je přinesl i mě. Kdo ví, třeba se
ještě u Sharpa setkáme.. s pozdravem Roman Dolejší - RDOS EuroTel