Ahogy Grass írta a 8 bites gépek grafikus lehetőségeiről szóló cikkében, a demoscenén bizony időnként vannak dolgok, amik „kiverik a biztosítékot”. A 8 bites scenén a legutóbbi ilyen a Batman Forever című CPC demó volt: nevenincs csapat, szinte teljesen ismeretlen platformon futó demója, ami feladja a leckét a CPC-n kívül a C-64, de még az Atari ST és Amiga ECS demóknak is. A “nevenincs csapat”-kitételt rögtön el is intézhetjük azzal, hogy a Batman Group (mert erről van szó) 1995-ben már letette névjegyét az Amiga scene-en, ECS Amigára írt Batman Vuelve című demójával, amelynek a Forever C-n megjelent Batman Forever deklaráltan “az” utódja… De mi a helyzet a platformmal? Amstrad CPC? Ugyan… Ez valami Spectrum-klón?
E demó adta az apropóját ennek a cikknek: TLC / Coroners felkérésünkre meglehetősen masszív cikket írt az Amstrad CPC-ről, tovább után ennek az első részét olvashatjátok: először a gép történetét, sajátosságait járjuk körbe (történet: megkíséreljük elhelyezni a korabeli platformok közé, sajátosságok: a hardver-orientált coder szemével, közelről). A második részben folytatjuk a hardver sajátosságainak bemutatását, majd röviden kitérünk a CPC scene-re, és adunk néhány tippet az elinduláshoz, ha valakit komolyabban érdekelnek a gépre készült produkciók, esetleg konkrétan inspirációt kapott egy CPC-vel való kísérletezéshez.
Háttér
A történet 1983 végén, 1984 elején kezdődik. A korabeli Amstrad plc szórakoztatóelektronikai termékeket, tévéket, otthoni- ill. autó-hifit gyártó- és forgalmazó (brit) cég volt. Karakterét tekintve azon cégek közé tartozott, amelyek maguk nem túlzottan innovatívak; erőssége a piac felismerése, és létező fejlesztések fogyasztási cikk-ként történő, hmmm, újrafogalmazása (…amint az a hetvenes években a már említett tévék, szórakoztatóelektronikai termékek kapcsán is történt). A cég ebből a kiindulópontból vágott a mikroszámítógép-piac meghódításába, viszonylag későn, egy eléggé feszített iramú, rövid fejlesztési periódust követően, hogy aztán 1984 közepén megjelenjen az első CPC-vel, és egy kb. tízéves periódusra fő profiljává a számítástechnika váljon. …Magyarországról nézve, a történetből keveset láthattunk, mindenesetre tény, hogy az Amstrad 1984-1993 között kb. hárommillió CPC-konfigurációt adott el, többségében az Egyesült Királyságban, Nyugat-Németországban, Franciaországban, ill. Spanyolországban. Erre annak ellenére volt képes, hogy a CPC a konkurrenciával szemben kb. két év hátránnyal indult; illetve, hogy a cég értéke az első években évente megkétszereződött – azaz a gyors piaci térnyerés mellé a projekt masszív pénzügyi nyereségessége társult. A konstrukció “jól-pozicionáltságával”, és néhány speciális tulajdonságával – kitűnő felbontású megjelenítő, profi billentyűzet, jó háttértár, CP/M-támogatás – olyan szegmenseket is le tudott fedni, amelyekre más, korabeli konstrukciók nem voltak alkalmasak (pl. alkalmas eszköz volt kisebb cégek ügyviteli feladatainak ellátására), mindezt a háziszámítógép-szegmens árszintjén belül.
Áttekintés
Az Amstrad CPC (Color Personal Computer) egy számítógép-sorozat. Tagjai a CPC464, CPC472, CPC664, CPC6128, végül a 464+, 6128+, és a GX 4000 játékkonzol. A korai típusok (memóriaméretet- és háttértár-típust leszámítva) egymással teljesen kompatibilisek. A +-sorozat a klasszikus CPC-khez képest lényegesen fejlettebb, azokkal visszafelé többé-kevésbé kompatibilis.
A sorozat első képviselője, a CPC464, 1984 júniusában jelent meg. 4MHz-es Z80-processzor, 64k ram, színes, nagyfelbontású megjelenítő (27-féle szín, többféle grafikus módban), 3-csatornás hang, beépített Locomotive Basic jellemezte. A gépet monitorral egy csomagban forgalmazták (opcionálisan mono zöld- vagy színes verzióban).
Néhány hónappal a ‘464 megjelenése után mutatta be az Amstrad a géphez tervezett “profi” háttértárát, a DDI-1 floppy interface kártya + FD-1 floppy drive-csomagot. A csomag tartozékaként CP/M 2.2-lemezt is szállítottak. Itt jegyzendő meg, hogy az Amstrad gépei (az európai- és amerikai mikroszámítógép-piacon kb. egyedüliként) nem a Sony 3.5″-os-, hanem a Hitachi 3″-os lemezszabványát támogatták (3″-os meghajtó került a későbbi, beépített meghajtós CPC-kbe, a PCW-sorozatba, és a már szintén Amstrad-illetőségű Spectrum +3-ba is). A CPC gyárilag egyoldalas, 40-trackes meghajtót használ, és egy lemezoldalt 180k-ra formáz; a lemezek “üzemszerűen” megfordíthatóak – A- és B-oldaluk van, külön indexszel és írásvédelemmel.
…és a 3″-es lemezek.
CPC 664
CPC472, spanyol billentyűzettel
Amerikában néhány hónappal a ‘664 megjelenése után, Európában csak 1985 késő őszén került piacra a klasszikus CPC-k legerősebb típusa, a CPC6128; ez a ‘664-hez képest még egy banknyi (64k) ram-ot, sorrendben egy harmadik stílusú billentyűzetet, és a csomagban szállított CP/M Plus OS-t kapott. Egyúttal, a ‘664 gyártását megszüntették (…mivel a ‘472-höz hasonlóan a ‘664 is csak kb. fél évig készült, ma ebből a típusból is kevés példányt találni).
CPC6128
A hardver évekig nem változott lényegesen (egyetlen dologtól eltekintve: az Amstrad “optimalizálta” a gyártás költségeit, ennek megfelelően a késői példányokban több, korábban önálló áramköri elem egyetlen ASIC-be (alkalmazás-specifikus integrált áramkör) került – a költségcsökkentett hardver-verziót a különféle demók kitűnően detektálják…). A sorozat utolsó tagjai, a 464+ és a 6128+, csak 1990-ben kerültek piacra. Alapjaik a korábbi típusokéval azonosak, de a kép-, megszakítás- és buszvezérlés új (a gépet ellátták pl. hw sprite-okkal, hw finomscroll-képességgel, megnövelt palettával, timerekkel, és DMA-vezérlővel), amely az alapkonstrukcióhoz képest jelentős teljesítménynövekedést eredményezett… Apró gond, hogy mindez “túl későn” történt, amikorra az egész 8-bites mikroszámítógép-piac leszállóágba került. Utolsó lépésként, a Commodore-hoz hasonlóan az Amstrad is megpróbálta a már kifejlesztett hardvert játékkonzolként is értékesíteni (erős párhuzam lelhető fel a C64GS- és az Amstrad GX 4000-projectek között), …és hozzá hasonlóan ő is megbukott ezzel a kísérlettel. A CPC-vonal forgalmazása végül a ’90-es évek első harmadában, kb. 1993-ban szűnt meg.Megjegyzendő, hogy a CPC-t sikerrel koppintották – utolsó húzásaik egyikeként – NDK-s barátaink :-), és gyártották eléggé tűrhetően kompatibilis, bővített verzióban KC Compact néven 1989-től.
A hardver
Talán célszerű egy rövidebb kitérőt tennünk a korabeli mikroszámítógép-konstruktőrök felé, hogy a CPC-t, mint hardvert elhelyezhessük.
A korabeli mikroszámítógép-gyártókat két, nagy csoportra oszthatnánk: azokra, akik elég nagyok- és tőkeerősek voltak ahhoz, hogy custom chipeket – céláramköröket – gyárt(as)sanak- és alkalmazzanak, és azokra, akik nem. Előbbi csoportba volna sorolható az Atari, a Commodore, valamint a Texas (…és talán a japán gyártók közül egy-kettő); utóbbiba pedig gyakorlatilag mindenki más, köztük a Sinclair és az Amstrad.
Az, hogy a tervező egy gép felépítéséhez céláramkört használhat-e, alapvetően meghatározza a végeredményt; nézzük meg a VIC-20-at, a C64-et, az Atari 800XL-t (vagy az Amigát…), és meglátjuk, miért. Ha nincs saját chipset, a tervező kénytelen világpiacról beszerezhető közepes/nagyintegráltságú építőelemekből, valamint TTL-kapuáramkörökból építkezni. Előbbiek sosem olyan hatékonyak, mint a célirányosan kifejlesztett chipek, illetve az egy rendszerbe integrálásuk (…sok gyártó sokféle elképzelése arról, hogy milyen szervezésű rendszerbusz optimális) jó eséllyel problémás; utóbbiak pedig túl “egyszerűek”, kis integráltságúak ahhoz, hogy bonyolult funkciókat kevés chipből, kis helyen, kis áramfelvétellel (…valamennyi kritikus költségtényező) fel lehessen belőlük építeni. …Ebből az állításból talán levonható az a következtetés, hogy a “kis” cég tervezője két fronton: a leendő számítógép képességeit-, és a sorozatgyártás költségét tekintve is hátrányban van a “nagy”, custom chip felhasználását lehetővé tevő cég tervezőjéhez képest. Ezt a különbséget lelépni egy adott technológiai szinten – mondjuk ki – nem lehet. …”De”, ha a cég egy bizonyos tőkeerő-szintet azért meghalad, a hátrány csökkenthető fél-custom chipek alkalmazásával. A kor szintjén “fél-custom”-chip volt jellemzően minden maszk-programozott logikai áramkör – PLA-k, gate array-k, ULA-k stb. (….amelyekhez néhány éven belül csatlakoztak az ASIC-ek, alkalmazás-specifikus integrált áramkörök különféle generációi). Ezek “félkész” chipek, melyek struktúrája adott, azaz a gyártó egyszer fejleszti ki őket, és egy menetben gyárt belőlük, mondjuk, néhány tíz- vagy százezer lapkát. A felhasználó egy végső “maszk” formájában adhatja meg (…még mindig a gyártónak, aki a chip véglegesítését – a maszk felvitelét – és a tokozást elvégzi), hogy milyen konkrét logikai hálózatot szeretne a chipen kialakítani. Az ULA-k, gate array-k tehát tulajdonképp “custom chipek”, de nem rendelkeznek az “igazi” custom chipek esetében adott, csak a technológiai szint korlátozta “teljes szabadsággal”, illetve a rajtuk megvalósítható áramkör bonyolultsága amazokétól jelentősen elmarad. Mégis, PLA-kat, gate array-ket ill. ULA-kat alkalmazva – bár a “készen kapható” elemek problémája továbbra is fennáll – a nagy, egyébként TTL-kapukból felépítendő hálózatoktól meg lehet szabadulni. (A fél-custom chipekhez, konkrétan az ULA-k felhasználásához köthető az első, nagy szériában eladott Sinclair-gép, a ZX81 sikere; a ZX81 ui. az új ROM-ot leszámítva tulajdonképp nem más, mint egy olyan ZX80, amelyben a korábbi, jókora, drágán gyártható TTL-hálózatot egy darab ULA-n implementálták… És, az ULA említésének kapcsán mintha egy másik, szintén sok példányban elkelt számítógép is eszünkbe jutna… :-) ).
Architektúra
A CPC hardver-szempontból egy klasszikus, Z80-alapú mikroszámítógép, amelyet a világpiacon elérhető, “off-the-shelf”-alkatrészekből, custom chipek alkalmazása nélkül építettek. A rendszerbusz vezérlését, a képgenerálás- és megszakítás-logika bizonyos részeit egy gate array-be integrálták. (Konkrét áramköri feladatok megvalósítására továbbra is tartalmaz TTL-kapukat – de ez egyébként a korszak bármely más mikrogépére igaz.)
A végső hardvernek megvannak a maga erősségei- és gyengéi, …amelyeket valószínűleg mindenki abból a nézőpontból sorolna be, amilyen rendszeren szocializálódott ;-). Mindenképp pozitívumként volna értelmezhető a már említett igényes fizikai kivitel (…a CPC6128 billentyűzetének minősége pl. inkább emlékeztet a korabeli terminálok, mint a konkurrens mikrogépek billentyűzetének minőségére), a számos, használható I/O csatlakozó (Atari-stílusú joystick-port, hang 3.5-ös jack-en, parallel printer-port (sajnos 7-bites adattal), magnó, drive), a relatíve gyors processzor, a kitűnő bank-logika, a nagyfelbontású video-hardver, a floppy-controller rendszerbe integráltsága, illetve az egészet összefogó gyári szoftver. Átlagosnak volna mondható a gép hangja, vagy éppen a video-hardver gyakorlati használhatósága (nagyfelbontású-, színes képernyő “van”, de karakteres képernyőmód, hardver-finomscroll, sprite-ok, nincsenek). A gép konkrétan gyenge pontjai a belső I/O-ban találhatóak; nincsenek timerek, következésképp nincs timer-megszakítás, és nincs igazi rasztermegszakítás sem. Ezen felül, Commodore-hoz szokott szemnek elképesztő az a “szabatosság”, ami a CPC belső I/O-ját- és néhány konstrukciós megvalósítását jellemzi; az I/O címtartomány pl. nincs címszeletekké dekódolva, hanem egyes címvonalak (az IN- és OUT utasítások paramétereként megadott portcímek helyiérték-bitjei) közvetlenül szólítanak meg I/O eszközöket (némileg káoszos I/O “báziscímeket” és -tartományokat eredményezve), amely megoldás a programozónak egyúttal kényelmes lehetőséget biztosít egyszerre több I/O eszköz megszólítására, busz-összeütközések generálására is ;-). Egy másik, érdekes megoldás a hangchip rendszerbe illesztése (pontosabban annak “hiánya”). …Valószínű persze, hogy ezek a finomságok inkább általában Z80-alapú rendszerekre, mint konkrétan a CPC-re jellemzőek (nb.: a Spectrumban pontosan ugyanilyen típusú rendetlenség van), …mondhatjuk azt, hogy végsősoron nincs jelentőségük, a funkció ettől még adott.
Igen jellemző megfigyelni, ahogy a tervezők a gépet a neki szánt küldetésnek megfelelően optimalizálták, ahogy a rendelkezésükre álló technológia korlátaiból, radikális megoldásokkal, előnyt kovácsoltak. A kor számítógépeire pl. jellemző, hogy megjelenítőként tévét használnak. Ha azonban a tervező nem használhat céláramkört (márpedig a CPC tervezője nem), akkor a tévé “megszólítása” bajos- és drága játék… ráadásul rontja az elérhető képminőséget. A C64 esetében pl., amelyben a videovezérlő – a VIC-II – egy céláramkör, az ügy nem túlságosan nehéz; a VIC-II ui. eleve PAL- vagy NTSC-, kompozit szín- és fényességjelet állít elő. A klasszikus Spectrum esetében ellenben, ahol direktben, céláramkörrel PAL-jelet előállítani esély sem volt, az áramköri lap, tehát az előállítási költség jelentékeny része csak a PAL-színjel-, és persze az RF-jel előállításával kapcsolatos (…ami különösen annak fényében kínos, hogy a Spectrumnál költségérzékenyebben tervezett gépet nehezen lehetne találni… persze nyilvánvaló, hogy onnantól, hogy a Sinclair a géppel a “legolcsóbb”, még használható kategóriát célozta meg, nem volt más választása, mint a tévé-jelet előállítani, “kerül, amibe kerül”-alapon). A CPC esetében, a tervezők húztak egy merészet, és azt mondták, hogy a gép “nem” lesz tévé-kompatibilis. A gépen ennek megfelelően alapból csak analóg mono- és RGB-kimenet áll rendelkezésre, PAL-kódere és RF-modulátora nincs, a korabeli tévékre közvetlenül nem köthető, és sorozatban gyári (színes- vagy mono zöld) Amstrad-monitorokkal, csomagban hozták forgalomba. …Mindez a monitor extra költsége miatt elsőre öngólnak tűnik, a gyakorlatban viszont nagyon sikeres húzásnak bizonyult. A monitorok ui. tulajdonképp tévé-fődarabokból épülhettek – egy csomó, szükségtelen részegység nélkül, azaz az eredeti modelleknél olcsóbban (…és jegyezzük meg, hogy az Amstrad-nek, korábbról, enyhén szólva sem volt ismeretlen a tévé-technológia és -üzlet). A monitor, mint adottság, azt jelentette, hogy a gép tápegysége a monitorba kerülhetett – hopp, mínusz egy tápegység. És legfőképp: a monitor, ezek után tisztán, analóg RGB-vel meghajtva, nagy felbontású, zajmentes, borotvaéles képet biztosíthatott. Ezzel a húzással olyan képminőséget értek el, amellyel – az árszintet továbbra is alacsonyan tartva – a korabeli szinten fél-professzionális alkalmazásokat is meg tudtak célozni (…itt nyert egyúttal értelmet a gép szándékolt, erős CP/M-kompatibilitása is… a korabeli fél-professzionális világ alkalmazásai jellemzően CP/M-en álltak rendelkezésre; jól látható, hogy a döntéssel összességében sikerült egy jó, “helyi optimumot” találni) – ellentétben a kényszerűen tévéhez- illetve kompozit monitorhoz kötött konkurrensek gépeivel. Aki pedig mindenképp tévézni szeretett volna, a géphez opcionálisan vehetett táppal egybeépített PAL-kóder/RF-modulátor-egységet.
Processzor, rendszerbusz
A CPC “lelke” egy 4MHz-es órajelen futó, Z80-as processzor. (…Megjegyzendő, hogy első prototípusai 6502-es processzorral épültek – ebben az időben az alap 6502 már éppúgy kommersz építőelemnek számított, mint a Z80 –, a többféle verzió egyike szerint azért váltottak Z80-ra, mert az Intelligent Software a szűk határidő mellett nem vállalta a gépbe szánt Locomotive Basic 6502-es verziójának kifejlesztését.) Az adott korszakban (…és CPU-magként, beágyazott rendszerekben, máig is…) olcsó megoldásnak számított, különféle gyártók nagy mennyiségben szállították. A 6502-vel összehasonlítva, ahhoz képest jellemzően sok regisztere-, bonyolultabb utasításai vannak (van pl. önálló blokk-mozgató utasítása), bizonyos műveleteket 16-bites regiszterpárokkal, egy menetben képes elvégezni; nincs viszont “nulláslapos” indirekt címzésmódja, nem jellemzi a 6502 “szép”, ortogonálist közelítő utasításkészlete, és adott bonyolultságú utasítás ciklusideje a Z80-on jellemzően hosszabb, mint a 6502-n (…cserébe, azonos technológiai szinten, ahhoz képest magasabb órajelen képes működni).
A CPC-ben működő rendszerbusz “speciális”. A buszt ui. – megosztva – a video-hardvernek is el kell tudnia érni a képszerkesztéshez, lehetőleg úgy, hogy közben a processzorral egymást ne zavarják. Ennek megoldása a CPC-ben meglehetősen “egyszerű”. A CPU csak a rendszerbusz minden negyedik órajelciklusában végezhet busz-műveletet; ha buszciklust inicializál, és az időpont nem megfelelő, akkor a vezérlő-logika a következő szabad busz-időszeletig feltartja, tehát egy-egy ilyen alkalommal egy-kettő-három ciklusnyi időt veszít. Mivel a Z80 nem minden-, hanem csak bizonyos ciklusokban akar memória-műveletet végezni, ezért a korlátozás még elfogadható mértékben lassítja csak; a rendelkezésére álló memória-sávszélesség negyedelése ellenére, a sebessége nem csökken a negyedével sem, átlagban egy kb. 3.3MHz-es Z80-nak felel meg. Azok a Z80-opkódok, amelyek eleve csak 4-ciklusonként indítanak buszműveletet, sebességcsökkenés nélkül futnak le, mások viszont – különösen, ha sok, nem néggyel osztható számú ciklusra illesztve indítanak buszműveletet – jelentősen lassulnak). Az összeszinkronizálódás miatt (…minden opkód végrehajtása minimum egy buszművelettel, ti. az opkód maga beolvasásával jár) konkrétan felírható egy táblázat, hogy ebben a rendszerben egy-egy Z80-utasítás hány 1MHz-es ciklus alatt fut le. …Elszánt Commodore-kóderek fejében ennek hallatán elindul a vezérhangya: ebben a gépben egy-egy utasítás megjósolhatóan mindig ugyanannyi ciklus alatt fut le, és egy-egy megszakításkérés mindig érvényre jut; nincsenek badline-ok, amelyekkel számolni kell… és ez így is van.
A busz megosztásának vezérlését a gate array-be integrált logika végzi, a Z80 vezérlő-bemeneteinek felhasználásával.
A fentiekhez egy egyszerű, de meglehetősen hatékony bank-logika tartozik. A CPU szemszögéből: a CPC-ben a lapozás alapja a Z80 64k-s címtartományának 4 db., egyenként 16k-s ablaka, amelyekbe a rom- illetve ram egy-egy 16k-s szelete lapozható be. A legalsó- és legfelső ablakokba lapozhatóak az OS- ill. a Basic 16k-s rom-szeletei (…amelyek írásra transzparensek az “alájuk” belapozott ram-szeletekre, így pl. a video-ram az OS belapozottsága ellenére is, gond nélkül írható). A 64k-n “túli” ram belapozása szintén 16k-s laponként lehetséges, nem teljesen független kombinációkban, de a gyakorlatban jól használható módon. A gyári séma felső határa, változtatás nélkül, 512k ram… A bank-logikát implementálhatja egy esetleges külső egység maga (pl. ezt teszi a CPC464-hez készült gyári, extra 64k-s ram pack is), mivel a gép belső ramja, adott memória-ciklusra, a cartridge-port felől kompletten tiltható. (Megjegyzés: a képgenerátor teljes mértékben független a lapozó-logikától, és egységesen csak a legelső 64k-s ram-bankból dolgozik.)
A következő részben a grafikai és hang lehetőségek, illetve a CPC demoscene ismertetésével folytatjuk!
Baromi jó cikk, várjuk a folytatást!
Ha nincs Optimus a poueten, aki minden 3. kommentjében megírta, hogy mostmár inkább mennie kellene demót kódolni CPC-re, minthogy itt kommentelget, nem is tudtam volna, hogy van ilyen scene. A srácnak jelenleg van majd 9000 kommentje. :D
Aaaargh… Köszi… :-) Szóval, Bluefish-ben még nem tűnt ennyire tagolatlannak, és főleg nagynak :-D ; most már látszik, hogy végső formájában kb. olyan, mintha ZX81-re írtam volna Defender of the Crown-klónt, persze szigorúan kazettáról utántöltős változatban :-D. De így jött ki, így tűntek a dolgok logikusnak. Már mindegy. Hogy is volt ez?…
– Legközelebb nem hagyom otthon a pisztolyomat – gondolta Stirlitz.
– Legközelebb? – gondolta a medve….
nagyon jó a cikk, köszi. és várjuk a folytatást!
TLC: igen, három daraban is simán lemehetett volna, viszont szakmailag nagy komoly, le a kalappal!
ha kell háttérnek: http://www.mediafire.com/?cxh9shatdufv9j1
Istenkirály írás. Én magam is retro gyűjtögető vagyok. (Bár én inkább konzol vonalon.) De egyszer nekem is lesz egy CPC-m az biztos.