Caverns of the lost miner a cc65¢Michael Kalou③ (BAKTRA)¢================================¢¢Rozhodnul jsem se splnit si sv
j mal⑨ ataristick⑨ sen. Napsat alespo jednu trochu slu③nou hru. Napadlo mne, əe mohu portovat svou hru "Lost miner" z IBM/PC (s t m, əe vyuəiji jiə vytvo②en⑦ jeskyn❎).¢¢Kdyə jsem p②em⑨③lel nad t m, jak⑦ v⑨vojov⑦ prost②edky pouəiji, zavrhnul jsem nejprve BASIC (pro pomalost) a tak⑦ assembler (protoəe v assembleru jsem naprogramoval jedin⑦ mal⑦ demo a nem❎l jsem odvahu ps⇧t v n❎m celou hru). V❎d❎l jsem v③ak o existenci CC65.¢¢CC65 je cross-platform p②eklada⇨ jazyka C a m⇧ tyto sou⇨⇧sti:¢-p②eklada⇨ (C do ASM)¢-assembler (ASM do OBJ)¢-linker (OBJ do XEX)¢-standardn knihovnu¢¢V jazyce C programuji na IBM/PC a v m, əe p②eklada⇨e C jsou schopny generovat dostate⇨n❎ efektivn kd. Volba tedy padla pr⇧v❎ na CC65. Atari se od IBM/PC pon❎kud li③ a p②i tvorb❎ hry to bylo pot②eba vz t v ⑤vahu.¢¢1.Logika hry¢============¢Logiku hry - zejm⑦na pohyb horn ka po jeskyni - m⇧ na starosti hlavn program psan⑨ v C. Pot②ebuji udrəovat stav jeskyn❎ a vyhodnocovat pohyby horn ka. Zde mi jazyk C pom
əe sv⑨mi ② d c mi strukturami (podm nky, cykly, v❎tven ) - v③e lze v tomto jazyce p②ehledn❎ zapsat.¢¢Za pouəit C se plat pam❎t a v⑨po⇨etn m v⑨konem. Jak tuto cenu sn əit?¢¢Pro⇨ se na③emu obl ben⑦mu po⇨ ta⇨i ② k⇧ mal⑦ Atari? Protoəe m⇧ m⇧lo pam❎ti a jeho procesor malou taktovac frekvenci (ale p②esto um velk⑦ v❎ci). Je tedy vhodn⑦ omezit pl⑨tv⇧n . Kde to je moən⑦, pouə vat datov⑨ typ char m sto obl ben⑦ho datov⑦ho typu int. Mal⑦ Atari m⇧ tak⑦ mal⑨ z⇧sobn k a proto se vyplat ③et②it s prom❎nn⑨mi deklarovan⑨mi v t❎lech funkc . Nav c p② stup k t❎mto prom❎nn⑨m vyəaduje v ce instrukc . Trochu pam❎ti a v⑨konu se d⇧ u③et②it znovupouə v⇧n m jedn⑦ glob⇧ln prom❎nn⑦ pro ② zen cykl
.¢¢P②i tvorb❎ hry jsem se trochu b⇧l, jestli velikost programu nep②eroste Atari p②es pam❎④ov⑦ ⇨ipy, ale v⑨sledn⑨ch 10,5 KB hlavn ho programu nen aə tak moc a n⇧ro⇨nost na pam❎④ lze je③t❎ trochu sn əit. V assembleru by to ov③em dopadlo l⑦pe - za cenu n⇧ro⇨n❎j③ ⑤drəby kdu a men③ p②ehlednosti (star⇧ p sni⇨ka). S rychlost hlavn ho programu jsem byl spokojen. Bez pat②i⇨n⑦ho zpoə⇦ov⇧n horn k po jeskyni doslova l⑦tal.¢¢2. P②id⇧n dat a jejich rozm st❎n v pam❎ti¢=======================================¢10,5 KB pam❎ti je pry⇨. Ale bez jeskyn a bez grafiky si moji hru nikdo nezahraje. Grafika a topologie jeskyn jsou data, kter⇧ moje hra nezbytn❎ pot②ebuje. Na IBM/PC jsou tato data obvykle um st❎na v extern ch souborech na pevn⑦m disku. Jsem kazet⇧②, a tak preferuji software, kter⑨ se bez extern ch soubor
obejde...¢¢e③en m je p②ilepit data k hlavn mu programu. U topologi jeskyn je vcelku jedno, kde v pam❎ti budou um st❎ny, ale v p② pad❎ znakov⑦ sady nebo display listu to jedno nen . ¢¢Probl⑦m se v assembleru ②e③ jednodu③e direktivami pro nastaven aktu⇧ln adresy a vloəen dat:¢¢org $4000¢.incbin "file.dat"¢¢V jazyce C takto postupovat nelze. Je moən⑦ sice p②ev⑦st data na z⇧pis staticky alokovan⑦ho pole, ale nelze ur⇨it adresy na kter⑨ch bude obsah pole uloəen. V p② pad❎ display-listu nebo znakov⑦ sady bych byl ztracen. Rozm st❎n prom❎nn⑨ch v pam❎ti totiə neur⇨uje p②eklada⇨, ale linker. Linker, kter⑨ je sou⇨⇧st CC65 umoəuje um s④ovat bloky dat na konkr⑦tn adresu. Nane③t❎st se takov⇧ v❎c provede pomoc ⑤prav jeho konfigura⇨n ho souboru, coə je t❎əkop⇧dn⑦.¢¢V cesek⇨n form⇧t spustiteln⑨ch soubor
pro Atari umoəuje elegantn❎j③ ②e③en . Sta⇨ilo napsat vlastn jednoduch⑨ minilinker (minilinker.jar), kter⑨ jednodu③e ke spustiteln⑦mu souboru p②ilep dal③ sekce s daty a opat② je pat②i⇨nou hlavi⇨kou (po⇨⇧te⇨n a koncov⇧ adresa sekce). T m je p②id⇧v⇧n dat vy②e③eno. Jen je t②eba vz t v ⑤vahu, əe hlavn program roste od adresy $2E00.¢¢Jako kazet⇧② jsem dbal na to, aby se jednotliv⑦ sekce nep②ekr⑨valy. P②idal jsem tedy topologii jeskyn (p②evzatou z PC verze), grafiku (2bitov⑦ bitmapy) a jeden display-list. K p② prav❎ dat mi poslouəila tak⑦ unixov⇧ utilita dd - pomohla mi od②ezat nepot②ebn⑦ ⇨⇧sti soubor
z verze hry pro IBM/PC. ¢¢3.Hudba a zvuky¢===============¢Mus m s pravdou ven. Nev m, opravdu nev m... jak se programuje ⇨ip POKEY. P②i programov⇧n v BASICu jsem prost❎ pouə val SOUND a,b,c,d a to mi k əivotu sta⇨ilo. S CC65 se ə⇧dn⇧ knihovna na hran zvuk
nedod⇧v⇧. Panice jsem ov③em nepropadl, protoəe jsem si vzpomn❎l, əe v jist⑦m ⇨ sle magaz nu FLOP je n⇧vod, jak generovat zvuky jen pomoc pos l⇧n ⇨ sel na ur⇨it⑦ adresy, coə by bylo moən⑦ prov⇧d❎t i v jazyce C. Trvalo mi hezkou chv li, neə jsem n⇧vod objevil v ⇨ sle 34 a napsal podle n❎j funkci sound(). Spokojen jsem v③ak nebyl. Takto nelze p②ehr⇧vat zvuk "na pozad " a o hudb❎ se ned⇧ ani uvaəovat.¢¢Co te⇦? Pomohla op❎t vzpom nka na FLOP, tentokr⇧t ⇨ slo 48. Nepouə vala hra Cubico ke generov⇧n zvukov⑦ho efektu p②ehr⇧vac rutinu Raster Music Trackeru!? Pouə vala. Po prostudov⇧n dokumentace, p② klad
a zdrojov⑨ch kd
k RMT jsem doplnil svou jiə d② ve vytvo②enou hudbu o instrumenty ur⇨en⑦ ke hran zvukov⑨ch efekt
. V⑨sledkem byl soubor s hudebn mi daty a soubor s p②ehr⇧vac rutinou (jak uə to u takov⑨ch tracker
b⑨v⇧). V obou souborech nebyla ⇨ist⇧ data, ale rovnou sekce spustiteln⑦ho souboru. Musel jsem tedy upravit minilinker tak, aby dok⇧zal i takov⑦ soubory spr⇧vn❎ p②ilepovat. To se poda②ilo.¢¢P②ehr⇧vac rutin❎ se p②ed⇧vaj informace pomoc ⇨ sel uloəen⑨ch v registrech procesoru. Nav c jsem cht❎l p②ehr⇧vac rutinu volat b❎hem vertik⇧ln ho zp❎tn⑦ho b❎hu. Um st❎n ⇨ sel do registr
se mus ps⇧t v assembleru a obsluha VBI tak⑦. ⑧⇧dn⑨ velk⑨ probl⑦m to nebyl.¢¢4.P②id⇧n rutin v assembleru¢============================¢Jak jsem napsal v⑨③e, sou⇨⇧st CC65 je samoz②ejm❎ i assembler. Sta⇨ilo se pod vat, na co p②eloə CC65 pr⇧zdnou funkci. Pak uə zb⑨valo jen dopsat jej t❎lo a do hlavn ho programu p②ipsat jej prototyp. Vytvo②il jsem tedy n❎kolik funkc k ② zen p②ehr⇧vac rutiny v assembleru. P②idal jsem tak⑦ obsluhu VBI.¢¢Hlavn program a rutiny v assembleru se p②ekl⇧daly zvl⇧③④ a pak se slinkovaly. K prom❎nn⑨m deklarovan⑨m v souboru s rutinami v assembleru ③lo tak⑦ snadno p②istupovat z hlavn ho programu. V hlavn m programu se jen p②id⇧ k jejich deklaraci kl ⇨ov⑦ slovo extern. P②id⇧n rutin v assembleru ③lo ne⇨ekan❎ hladce. Dobr⇧ zpr⇧va pro program⇧tory r
zn⑨ch efekt
.¢¢5.Z⇧v❎rem¢=========¢Mysl m əe v⑨voj pomoc CC65 spluje z⇧kladn poəadavky atarist
- CC65 produkuje efektivn kd, umoəuje snadno vkl⇧dat rutiny v assembleru, nen probl⑦m um s④ovat data na konkr⑦tn adresy. Cenou za p②ehlednost programu je sp ③e zv⑨③en⇧ spot②eba pam❎ti, neə ztr⇧ta v⑨po⇨etn ho v⑨konu. Moje hra vznikla za necel⑦ 3 dny. ¢V ce neə tento text v⇧m ②eknou zdrojov⑦ kdy a kompila⇨n skripty, kter⑦ si m
əete st⇧hnout.¢V⑨voj pomoc CC65 doporu⇨uji zejm⑦na program⇧tor
m v BASICu a jeho variant⇧ch. Z skaj vy③③ v⑨kon p②i zachov⇧n vysoko⑤rovov⑦ho jazyka. A tak⑦ strojov⑦ rutiny ve form❎ DATA ②⇧dk
se stanou minulost . Maxim⇧ln v⑨kon ale z Atari nedostanete.¢