Spectrum Világ

Játéktörténelem
Csillapodó Londoni láz
Verseny a javából
A Software fejlesztés új iránya
SAM-től szemben
A TASMAN család
BASIC programok átsorszámozása
Vezérlés fordítottan ágyazott ciklusokkal
3D térbeli hálók készítése
Az Otto motor működése
Színskála demonstráció és memória státusz
Nagyított PRINT
POKE beviteli technika
Ismét a POKE-okról
Csillapodó hazai láz
Info a SAM-ről
128K


Játéktörténelem

Sok víz lefolyt már azóta a Dunán, amióta az első játékprogramok megjelentek a piacon Spectrum számítógépre. Az azóta eltelt mintegy öt év alatt a programozástechnika sokszoros fejlődésével összehasonlíthatatlanul jobb program-"alkotások" születtek az előzőeknél, s az útnak még messze nincs vége.
Tekintsünk vissza a kezdet kezdetére. A Spectrum-osoknak minden új szenzációnak számított, így hazai viszonylatban is örülhettünk, ha egy-egy új programhoz hozzá tudtunk jutni. Az első kazettáinkon mindenféle "saláta" megtalálható volt, begépeltük az újságok hasábjain található utolsó BASIC programot is, mindent felvettünk függetlenül attól, hogy tudtuk-e használni, vagy sem. Az első "nagy" 16K-s játékok (pl. PSION-Space Raiders, vagy ULTIMATE- Jet Pac) után egyre több 48K-s játék látott napvilágot, A kezdeti időszakban egy-egy játékforgalmazó szinte monopóliumot jelentett a piacon pl. PSION, ULTIMATE, ARTIC, Dk'TRONICS, IMAGINE), de egyre több ismeretlen név bukkant fel, és hívta fel magára a figyelmet kimagasló tevékenységével. 1984-re már kezdett telített lenni a piac, újabb és újabb játékötletek láttak napvilágot. Egyre több szimulációs és sportjáték, kalandjáték vált híressé, megindult a harc az egyes software-házak között, hogy azonos témában ki alkot jobbat. Ha egy témát már elsütöttek, nagy bátorság, és összehasonlíthatatlanul magasabb színvonalú kivitelezés kellett ahhoz, hogy az adott ötlet újra forgalomba kerüljön és elsöpörje az előzőt. Ilyen harc alakult ki a sportjátékok terén is. Hazai felhasználók körében is jelentős változást tapasztalhattunk, kezdtük megválogatni, mit veszünk fel, és mit dobunk ki. Bár természetesen akadtak "harácsolók", akik a legutolsó "szemetet" is begyűjtötték, és lehet, hogy igazuk volt, hiszen a sok "egyéb" között lapulhatott igaz. érték is. Ez csak később derült ki: 1984 és 1987 között mérföldes léptekkel haladt előre a programok minőségének javulása, a 16K-s programok elmaradtak, a 48K-s programok között 'szupercsodák' jelentek meg. Igen népszerűvé váltak az úgynevezett ULTIMATE klónok, vagyis a "szobás'' játékok, melyeknek újabb és újabb tagjai folyamatosan látnak napvilágot. A kalandjátékok láza egy kicsit visszaesett, bár ma is készülnek bonyolult konstrukciók ebből a játéktípusból, de ebben a kategóriában sok újat már nem tudnak kitalálni. A szimulációs játékok özöne is véget ér talán, egyedül az akciójátékok körében érezhető újra fellobbanás, és úgy tűnik, az érdeklődést egy ideig még fenn tudják tartani. A játékok fejlődése során szebbnél-szebb screen-ekkel találkozhattunk; az utóbbi időben csak ültünk és füléltünk, hogy egyetlen szerencsétlen BEEP-csatornával milyen szenzációs többszólamú zenét képesek alkotni (pl. PING-PONG); sőt 1987 a 128K-s Spectrum-tulajdonosok számára is hozott újdonságot, ugyanis több 48K-s játék a 128K- gépen 3 szólamban zenél (pl. ELEVATOR ACTION, THE TUBE, GLIDER RIDER). A játékok fejlődésével egyre trükkösebb védelmi formákkal találkozhatunk. A kezdet-kezdetén nem tűnt fel jelentősebb védelem. Később elsősorban az 'OCEAN' jóvoltából megjelent a Speed Lock turbósítás, majd egyre több turbós, Jerky-s (szaggatott TONE), rövid TONE-os (pl. FAIRLIGHT) software látott napvilágot. Ma már ezek a trükkök mind feltörhetők a 'MULTIFACE ONE' hardware eszközzel, régebben csak a TC-6, TC-7, esetleg elmélyült gépi kódú fejtegetés segíthetett. Sok gyári program védelem nélkül indult el, de útközben "megpiszkálták" - erre főleg Jugoszláviában került sor - de, mint ahogy minden szernek van ellenszere, ezeket a feladatokat is hamar feladatokat is megoldották honfitársaink.
Mindezeket összegezve megállapíthatjuk, hogy a cérna végén másolható program jut el a felhasználóhoz, még akkor is, ha menet közben kötöttek egy-két csomót a cérnára.

Csillapodó Londoni láz

Amikor egy Spectrumos először jár Londonban, a repülőtérre megérkezve repesve várja, hogy a hatalmas reklámtranszparensek között megpillantsa a Sinclair nevet, vagy valamely perifériát gyártó cég emblémáját. Sajnos csalódnia kell, ugyanis a töménytelen élelmiszer-, dohány-, italáru mellett sportkocsi kínálat, HI-FI berendezések reklámjai néznek farkasszemet a turistával. Elvétve fordul csak elő számítástechnika a falakon, de kivétel nélkül IBM PC és vele kompatibilis klónak gyártói kínálják portékáikat. A repülőtér óriási csarnokát elhagyva többféleképpen is megközelíthetjük a Brit főváros centrumát. A tehetősebbek úri módra beülhetnek az évtizedek óta hagyományos AUSTIN taxi-ba, akik ráérnek, felülhetnek a városba -tartó piros emeletes buszra, akik pedig gyorsan és viszonylag olcsón szeretnének utazni, igénybe vehetik a híres londoni metrót, melyet az 'őslakosok' egyszerűen csak TUBE-nak (cső) neveznek.
A városba érve újabb csalódás éri a lelkes Spectrumost. Nem érdemes úgy elindulni a belváros utcáin, hogy Sinclair számítógépekkel és tartozékaikkal foglalkozó üzletet keresünk, de még úgy sem, hagy kizárólag mikro-gépek software-eit elárusító boltba szeretnénk eljutni, mert előbb utóbb azon vesszük észre magunkat, hogy a Big-Ben toronyórája már az éjféli dallamokat játsza, ennek pedig egyenes következménye, hogy már csak néhány - kimondottan illatszereket és élelmiszert árusító - bolt tart nyitva, no meg a mulatók, éttermek is, de itt valószínűleg nem fog a pincér BATMAN-t kínálni nekünk féláron.
A lehetőségeinket teljesen más szemszögből kell felmérnünk. Londonban ill. az egész szigetországban óriási bolthálózatok és sok kis kereskedő együttes erővel küzd a fennmaradásért. Minden kereskedő jól megfontolja, mit tesz ki a kirakatba. Minden bolthálózatnak megvan a saját profilja. Az egyik legnagyobb monopólium a 'HARRODS', de ők sem részesítik előnyben a Sinclar gépek és tartozékaik árusítását. Több nagyobb bolthálózat (pl. DIXONS, W.H.SMITH) azt árulja, amire éppen igény van, pl. jelenpillanatban náluk már 16/48K gép nem is kapható, csak a 128K különböző módozataid (+; +2, '+3) árulják. A periféria ellátottság sem tökéletes, a vásárlóerő igen rövid idő alatt nagy mennyiséget szívott fel, és a kereslet egyszerűen visszaesett. Ebből adódóan MULTIFACE-re, vagy OPUS-ra elég nehezen bukkanhatunk. A speciális perifériákat inkább kisebb műszaki kereskedésekben érdemes keresni (pl. K. K. STATIONERS). Ezekben általában 'hegyekben' állnak a kicsomagolatlan dobozok, csak a vásárló szerencséjén múlik, hogy éppen talált olyat, ami érdekli (pl.: 3 csatornás hanggenerátort).
Ugyanez a 'pangás' érezhető a software forgalmazással kapcsolatban is. Software is csak a kijelölt bolthálózatokban kapható (pl. WOOLWORTH, LASKYS, BOOTS, RUMBELOWS, W.H.SMITH, COMET, stb.). Nem kell arra számítani, hogy ezekben a boltokban minden programot megvehetünk, amit szeretnénk, pl. a WOOLWORTH hálózat boltjaiban a hanglemezek, audio- és video-kazetták ill. CD lemezek mellett találjuk meg a polcokon a software-eket, de itt csak az olcsóbb (1-2 Font értékű) MASTERTRONIC, CODE MASTERS stb. programok kaphatók. A W. H. SMITH-nél már jobb a választék, de drágább, és felhasználói software itt sem kapható. Több napi csatangolást követően mindenki belátja, hogy az angolok főképpen megrendelésre vannak berendezkedve, nem is csoda, hogy software házak tömkelege kínálja portékáit a folyóiratok hasábjain, hiszen érdeke, hogy csak annyit sokszorosítson, amennyire igény mutatkozik. Mindettől függetlenül, ha összehasonlítjuk a jelenlegi helyzetképet az öt évvel ezelőttivel, megállapíthatjuk, hogy csillapodott a londoni Spectrum láz, az akkori fiatalak többsége ma már AMSTRAD, vagy ATART gépre pártolt át, igaz újabbak vették át a stafétabotot, mind a fejlesztők, mind a felhasználók-körében. Mi azért reméljük, hogy a hazautazó Spectrumos nem fog rossz szájízzel távozni a szigetországból, még akkor sem, ha megmaradt 2 Fontján a repülőtéren már csak csokoládét vehet, pedig a FEUD-ot 1,99-ért árulták a PICCADILLY mellett.


Verseny a javából

1988 nyarán is megrendezték (Nagy-Britanniában a számítógépes játékok nemzeti bajnokságát (National Computer Games Championship). Ez a fogalom nálunk még ismeretlen, pedig a lehető legjobb terep arra, hogy összerázza a különböző számítógépek iránt érdeklődő fiatalok népes táborát.
Hazánkban még mindig elég nagy a szakadék a Commodore rajongók és a Spectram-osok között, s a legérdekesebb, hogy az egykor nagyhangú Commodore-os ill. a Commodore-osokra fújó Spectrum-os ma már kéz- a kézben egymás mellett ül az IBM PC számítógépek előtt. Milyen érdekes, úgy hírlik, az IBM PC gépeken belül is igen széles a választék, az XT-n dolgozók vajon miért nem cikizik az AT-seket és fordítva? Ez a háború az utóbbi években csillapodott egy kicsit, de a magja még mindig a levegőben van. Talán bennünk van a hiba?
A brit verseny semmiféle viszályt nem tükröz, békésen elférnek egymás mellett a Spectrum és Commodore számítógépek tulajdonosai, mi több még választani is lehet, hogy az adott játékot melyik gépen szeretnénk teljesíteni
Az idei verseny szponzora a US Gold cég volt, a lebonyolítást támogatta továbbá a számítógépes klubok brit egyesülete, a persorai Personal Computer Show kiállítás rendezősége és a Newsfield Ltd. is, amely köztudott, hogy több ismert számítástechnikai sajtótermék kiadó vállalata. A versenyen Sinclair Spectrum 128K +3 és ommodore 128D számítógépeket használtak fel, melyeket, a hozzájuk tartozó monitorokkal együtt ismert bolthálózatok (pl. DIXONS) és vállalatok biztosítottak.
A verseny a sportversenyekhez hasonlóan előfutamokból, városi, megyei döntőkből állt, az itt szereplő legjobb 15 joystick-gyilkos jutott tovább a három részes döntőbe: Az első részt Edenburgh-ban bonyolították le, a Fet Lore Boys Glub asztalai mellett. A kiválasztott játék a US Gold - 720° c. játéka lett. Minden játékos 10 percet gyakorolhatott az éles küzdelem előtt. A verseny pontszámra ment, akik 100000 pontnál többet elértek, már jutalomtárgyat kaptak (pl. software). Ennek a harmadnak a győztese 138660 pontot ért el.
A második harmad Nailsworth-ban zajlott. Hat-hét kiválasztott játékban elért minél több együttes pont megszerzése volt a cél.
A döntő csúcspontját - amelyet Birningham-ben rendeztek - nagy várakozás előzte meg, ugyanis csak a verseny, helyszínen derült ki, hogy melyik játék vesz részt a versenyen. A Birmingham-i Highgate Sport & Leisure Centrum aulájában feszült csöndben hangzott el a 'Bionic Commando' c. játék neve, melyet nagy taps követett. A játékban a legjobb eredményt Commodore 128D számítógépen és KONIX típusú joystick-kel érték el (35990 pont).
Információink szerint hasonló versenyeket bonyolítottak le az utóbbi időben több Nyugat-Európai országban is. Az ilyen szabadidős program megítélésünk szerint messzemenőkig hasznos kikapcsolódás fiatal és idősebb számára egyaránt. Azt tanácsoljuk mindenkinek, aki személyi számítógéppel rendelkezik, vagy legalábbis elérhető számára, hogy otthon, munkahelyén, az iskolában kezdeményezzen hasonló programot, esetleg gyakorlásképpen próbálják ki otthon, hogy az említett játékokban elért bravúros pontszámot sikerül-e túlszárnyalni?
Zárszóként annyit szeretnénk megemlíteni, hogy a 'nevető harmadik'-ként emlegetett IBM PC számítógépekre is egyre több játék jelenik meg. Ez a géptípus kiváló semleges terepet biztosit olyan versenyek lebonyolítására, melyben a szereplők még mindig éreznek némi ellenszenvet a másik gépével kapcsolatban. Egy IBM PC `Tetris` vagy 'Xonix` átmenetileg segít eloszlatni a hamis érzelmeket. Javaslatunkat azért mertük közzétenni, mert egyre több IBM PC kompatibilis gép kerül be az országba, s ezek többsége - sokszor a hozzáértés hiánya miatt - hosszú ideig kihasználatlanul várja billentyűi simogatását. Bár tudjuk, az IBM nem játékgép, ezt a tényt azonban megcáfolja az a több tucatnyi játék, amelyet a mai napig fejlesztettek rá, s a jövő játékai is hasonló, professzionális számítógépekre fognak készülni.


A Software fejlesztés új iránya

Az utóbbi időben a SPECTRUM-ra készült felhasználói programok száma kicsit megcsappant, talán azért, mert sok új technikát ill. ötletet már nem nagyon tudtak kicsiholni a gépből a fejlesztők. A rajzolók, nyelvek, assemblerek, monitorok egész sora áll rendelkezésre, sokszor el sem tudjuk dönteni, hogy melyiket vegyük elő. A hagyományos 48K gépre az utóbbi időben már csak a LASER programcsalád, s néhány jelentősebb oktatóprogram készült el. A 128K + és +2 gépek megjelenésével pillanatnyi fellendülést érezhettünk, bár csak az eddigi jelentősebb rajzolók és assebler/rnonitor programok 128K-s átiratai láttak napvilágot. A +3 gép megjelenése úgy tűnik megcáfolja a lappangónak hitt felhasználói software piacot.
Új irány mutatkozik a SPECTUM felhasználói programok fejlesztése terén, a programozók a +3 adta DOS lehetőségeit kihasználva közelítik meg a célt, a DOS alatt futó segédprogramokat terveznek, s munkájukat úgy végzik, hogy figyelembe veszik a fejlesztés alatt álló MGT SAM képességeit is, törekszenek a maximális kompatibilitásra, hogy ezzel már a SAM megjelenésekor ne legyen probléma.
A +3 CP/M illesztésre - amelyen a +3 DOS-t fejlesztő LOCOMOTIVE Software dolgozik -, még várni kell. Elkészült azonban több színvonalas utility, amely minden bizonnyal megnyeri majd a +3 és SAM felhasználók tetszését.
Az Omega Software jóvoltából megjelent a "ZIP-ZAP''. Ez egy disk monitor, ill. disk-szektor editor, amely hatékonyan elősegíti a +3 gépen használt lemezek adatainak olvasását, írását, szerkesztését. Közvetlenül átírhatunk adatokat, pl. a BASIC program fejlécében az autostart sorszámát, stb. A 'ZlP-ZAP' elősegíti 'beteg' lemezek 'meggyógyítását', hibás sávok és szektorok javítására kiválóan alkalmas. A +3 a disk-en 40 sávot, ezen belül sávonként 9 szektort, szektoronként pedig 512 byte-ot tud lekezelni. A 'ZIP-ZAP' segítségével az összes sáv, szektor és byte külön-külön kezelhető, mindezen túl lehetőség van a kilencen felüli szektorok kezelésére is, amely elsősorban programvédelem esetén lehet hatásos. A 'ZlP-ZAP' egyszerűen vezérelhető a SYMBOL SHIFT + egy billentyű megnyomásával. Lehetőség van a hexadecimális / decimális számrendszer körötti konverzióra, a disk--en string vagy adat ill. adatlánc keresésére, nyomtatókezelésre is.
A Discovery cég is megjelent a piacon +3-ra készüli gépi képi kódú utility programjávak, ez a "The CODE Machine +3' nevet viseli. Köztudott, hogy a Spectrum-ra készült monitor programok többsége nem tudja lekezelni az un. Nem standard Z-80 utasításokat - erről már volt szó a 'Szemben a SPEEDLOCK-kal c. fejezetekben -, ezzel a programmal lehetőség van a valódi assembly lista előcsalogatására, azáltal a SPEEDLOCK-hoz hasonló védelmek hamar megfejthetők.
A játékprogram kategória sem felhőtlen a +3 gép esetében. A +3 hardware különbözik elődjeitől, a port címzésekben is differenciák mutatkoznak. Sok hagyományos Spectrum játék - pl. Arkanoid, Short Circuit, Top Gun, stb. - még a +3 48K üzemmódjában is el fog szállni, mert a hagyományos felépítésű (bár különböző) ULA áramkörök speciális portját olvassák (10495), és innen várnak megfelelő adatbyte-ot. Ez a +3 esetében drámát fog okozni, hiszen a 48K üzemmód kapcsoló a hardware-t sajnos nem képes megváltoztatni. Nem szándékos trükkről van szó, de így a +3 tulajdonosok rákényszerülnek arra, hogy megvegyék a program +3 verzióját. A SAM tervezői ezt a hibát is szem előtt tartják, így azoknak, akik a SAM mellett teszik le voksukat, nem kell megijedni, az adott ULA port ismét a helyén lesz.
A szigetországban mostanában sok a panasz, hogy kevés a 128K software, főként a +3 gépre nem fejlesztenek elég programot. Mint tudjuk a 128K gép egyes verziói csak a hangképzésben nyújtanak jelentősebb plusz szolgáltatást a 48K géphez képest, s nagyon sok 48K-s programot már eleve 48K/128K jelzéssel látnák el, avagy a program valójában futtatható a 48K gépen, és a 128K gépen is, csak ez utóbbin 3 szólamú zenét is produkál. A divat az lett, hogy elsősorban azokat a software-eket írják meg kimondottan 128K gépre, amelyek a 48K gépen. több részesek, pl. Army Moves, Rastan, Out Run, stb. Ilyenkor az egyes pályák közvetlenül, egymás után betöltődnek, és egyidőben rendelkezésünkre állnak a memóriában. A +3 gép sem nyújt többet grafikai és zenei vonatkozásban, itt a programok lemezen történő kezelése válik egyszerűvé, de sajnos - mint már említettük - igen sok 48K program hardware okokból a +3 48K-s üzemmódjában nem futtatható. Az lenne a cél, hogy elsősorban ezeknek a programoknak jelenjen meg a +3 verziója, ám sajnos ez nem minden software esetében van így, ezért a +3 tulajdonosok bizonyos mértékben mégis szegényebbek maradnak az előző típusok felhasználóihoz képest. Kósza hírek azt sugallják, nagy a titkos sürgés-forgás a SAM programfejlesztések terén is, talán végre kialakul a végleges irányvonal, amely úgy tűnik az AMSTRAD fejlesztésű Spectrum gépek esetében rosszul lett kitlizve.


SAM-től szemben

Az utóbbi időben egyre több olyan levelet kaptunk, melyekben érdeklődtek a készülő 'szupercsoda' a 'SAM' sorsárói. Nos meg kell nyugtatnunk mindenkit, a hír nem volt kacsa, a már eddig is szétkürtölt információkat most megerősíthetjük, hamarosan startol a 'SAM'. A megjelenés pontos idejét illetően még nem tudunk semmi konkrétat, de az biztos, hogy 1989 nyara előtt megjelenik, kb. 150 angol Font körüli áron. Tekintettel arra, hogy időközben néhány dologban változtattak a gép rendszerét illetően, így most közzé tesszük a véglegessé vált konstrukció felépítését, jelleemzőit.
A Miles Gordon Technology eddig kimagasló hírű termékkel nem rukkolt ki a Spectrum hardware piacon. Forgalomba hozták a +D Disc illesztőt, s ehhez ajánlanak többféle drive-ot is. Készítenek él-csatlakozó elosztót (beépített joystick illesztővel), 3,5" floppy lemezeket, video kép digitalizálót és különféle nyomtatókat is. A SAM áttörést jelent nem csak az MGT munkásságában, hanem a 8 bites mikrogépek világában is. Az MGT a számítógépek egy új irányzatának kidolgozását ígéri. Többet várhatunk tőle, mint az előzőleg hasonló tulajdonságokkal megáldott, és balszerencsés ENTERPRISE számítógépektől. A SAM a hagyományos alapgéphez (48K Spectrum) képest kiváló kapacitást és felülről kompatibilitást ígér, ezáltal nem kell eldobnunk az alapgépet, sőt még számos jelentős szolgáltatást nyújt. Teljesen kompatibilis a Spectrum software-ek nagy mennyiségével (a jelenlegi tesztek alapján mintegy 80 százalékával). A tervekben a SAM-nek két típusa várható, az alaptípus 256K RAM memóriával fog forgalomba kerülni (a másik gép - mely a SAM Coupé nevet kapja 512 K-s lesz), s a cég szándékosan csak a kisebb típust dobja kezdetben a piacra, magas szintű minőségi ellenőrzés mellett, azért hogy elkerülje a Sinclair gépek állandó problémáját.
A SAM-et az oktatás követelményeinek figyelembevételével tervezték, hogy biztosítsák a gép további sikerét. Mind az alacsony ár, mind a hálózatba kapcsolás lehetősége azt mutatja, hogy vonzó lesz ezen a területen. A gépbe épített chip-ek száma alacsony (mindössze 7), és ezen a továbbiakban sem szeretnének változtatni, hogy a gép költségeit is alacsonyan tartsák, nem beszélve a nagyobb mértékű megbízhatóságról. A gép egyszerűsége, megkönnyíti a technológia eladását külföldre is (licencia). Egy indiai gyártó már jelentkezett is, nem csak azért, hogy az indiai piacot feltöltse, hanem szívesen gyártana Angliába is.
A SAM első példányai várhatóan csak levélben tűztértő megrendelés útján lesznek majd elérhetők, de folyamatosan tervezik a tennék forgalmazásának kiterjesztését a különböző bolthálózatok bevonásával. Az MGT az első évben 56 ezer darabot szeretne eladni, ennek a felét Angliában.
Mind a COMMODORE, mind az ATARI technológia határozottan a 16 bites rendszer felé halad, a SAM mégis a 8 bites Z80B processzort használja. Az MGT ezt azzal indokolja, hogy alacsonyabb a költség, és nagyobb a software házak tapasztalata a Z80 processzorral felépített gépek terén. Az MGT fontosnak tartja, hogy már az indulás pillanatában egy csomó software rendelkezésre fog állni, sőt mi több a SAM processzora 6 MHz-el fut, a Spectrum 3.5 órajel frekvenciájával szemben.
A SAM fejlesztő munkájának legnagyobb részét az ULA (amely japán Fujitsu gyártmány lett) kifejlesztésére összpontosította. Ez a relatíve fejlettnek mondható chip olyan áramköri elemeket tartalmaz, amelyet 130 db. hagyományos integrált áramkörbe szokás építeni. A SAM mindösszesen 7 chip-et tartalmaz: Z80B mikroprocesszor, 32K ROM, 256K RAM 2 chip-ben, 6 csatornás sztereo hang-chip, 64 színű TV-modulátor chip és végül az ASIC, a midi vezérléséhez. A panelon bővíthető 256K RAM-mal (a második típusban SAM Coupé az 512K RAM már be lesz építve). Egy- vagy két disc drive a dobozba beépíthető a gép elején, a billentyűzet alatt (új CITIZEN ultra-vékony technológia).
A SAM hemzseg az interface-ektől. Elhelyeztek rajta egy standard Sinclair Joystick Interface-t (INTERFACE II), egy egér (mouse) port-ot, egy monitor ill TV kimenetet, egy audio kimenetet, MIDI IN / OUT csatlakozót (az OUT tartalmazza a THRU port-ot is), soros / párhuzamos nyomtató port-ot (ez támogatva lesz egy "inteligens" kábellel), fényceruza bemenetet, és végül egy kazettás magnetofon bemenetet. Találunk a gép hátoldalán egy bővítő él-csatlakozót is. 71 billentyűs klaviatúrát "simogathatunk" a gép felső részén, melyen minden billentyű működhet funkcióbillentyűként is a meglévő 10 funkcióbillentyűn kívül.
A ROM tervezője a Spectrum Beta Basic szerzője: Dr. Andy Wright. Aki használta a Beta Basic-et, az biztos lehet abban, hogy a 'SAM' egy jó gép lesz. A 48K Spectrum kulcsszó-rendszerével ellentétben a SAM BASIC-ben az utasításokat hagyományosan karakterről-karakterre kell begépelnünk. Be lett építve a DOS (Disk Operation System) is, amely a Plus D DOS-hoz hasonló, de lekezeli a véletlen elérésű file-okat is.
A gép tetszetős, szép kivitelezésű, alapszíne fehér. A hangképzés szíve egy PHILIPS chip (ellentétben a tervekkel) ez egy hatcsatornás (6!!!) sztereo chip (az AMIGA gépekben csak 4 csatornást helyeztek el), melynek kimenete csatlakoztatható fejhallgatóra, HI-FI-re ill. TV-re egyaránt. Ragyogó grafikával rendelkezik, 64 szín és 4 működési mód áll rendelkezésre.

A 'SAM Coupé' esetében még arra is lehetőség van, hogy egyidőben több módot is használjunk, pl. egy kalandjáték esetén a képernyő felső része tartalmazhatja a nagyfelbontású grafikát (mode 3), míg az alsó része a szövegeket (mode 4). Ugyancsak érdekes szolgáltatás a 'SAM Coupé' esetében a képernyő-memória helyének egy regiszter beállításával történő átállítása, így több képernyő gyors, egymás utáni megjelenítésére nyílik lehetőségünk.

A memória-lapozás rendszere szintén újszerú (különösen, ha összehasonlítjuk a Spectrum 128K-s rendszerével). A Z80 processzor egyidőben csak 64K memóriát tud elérni, ebből 32K a ROM, az 512K RAM lapozható. A SAM Coupé felhasználásakor speciális hardware nélkül csak 64K-t tudunk kihasználni. A 64K alap-memória 4 db. 16K-s szeletre lett bontva, s minden szelet egy betű azonosítót kapott: A (0000h-3FFFh), B, C, D (C000h-FFFFh). A SAM ROM 32K is két félből áll, az egyik részt (BASIC ROM) az 'A' szeletben, míg a másik részt (DOS) a 'D' szeletben helyezték el.
Szerepet kapott két 8 bites regiszter is a hardware-ben, amely segítségével kiválaszthatjuk, hogy az aktuális 16K RAM lapokat a rendelkezésre álló 256K (SAM Coupé esetében 512K) memóriából melyik szeletre illesztjük. A hardware az A-B-C-D szeleteket mindig sorba fogja helyezni. A 8 bites regiszterek nevet is kaptak: a REGLO állítja be, hogy melyik lap kerüljön az 'A' szeletbe, a hardware automatikusan a 'B' szeletbe fogja rendezni a következő lapot. A REGHI segítségével ugyanezt érhetjük el a 'C' ill.'D' szeletek esetén. Ez túl komplexnek hangzik, de két fontos előnye van. Az első az, hogy a teljes 64K memóriatérkép egy gépi kódú utasítással mozgatható, a REGLO és REGHI - mint egy 16 bites szerkezet - felhasználásával. A MULTITASKING üzemmód így megoldható, vagyis egyidőben - legfeljebb - négy program futtatható egyszerűen és gyorsan. A másik előnye pedig az, hogy lehetővé válik a teljes memóriát kihasználó programok megírása.
A 'SAM Coupé' előnyét még az is támogatja, hogy az 'A' szelet rugalmasan kezelhető, az itt található ROM helyére tetszőleges RAM-ot lapozhatunk, s mivel ez a terület nem írható, így az itt elhelyezett adataink un. írásvédelemmel lesznek ellátva. Ugyancsak ezzel a módszerrel egy teljesen új ROM-ot is letölthetünk erre a területre.

A félreértések elkerülése végett a 48K Spectrum ROM alaphelyzetben a 'SAM'-ben nem létezik. Azt először is kazettás magnetofonról be kell töltenünk, majd rá kell illesztenünk az 'A' memóriaszeletre, s csak ezután fogja emulálni jól megszokott gépünket. Sok-sok Spectrum játék betölthető és futtatható ezt követően minden probléma nélkül, gyorsabban és színesebben, sőt a SAM Coupé emulálja a hagyományos ULA-t is, így pl. az ARKANOID is működni fog, nem úgy mint a + 2A vagy a + 3 esetén. A SAM Coupé hardware segítségével emulálja a Spectrum BEEP parancsát, a normál SAM ezt még nem fogja tudni. Sajnos sem a SAM sem a SAM Coupé nem teszi lehetővé a Spectrum 128K-s programok futtatását (az eddigi híresztelésekkel ellentétben), de úgy gondoljuk, hogy a SAM rugalmas memóriakezelése és színvonalas hangja hamarosan a 128K Spectrum gépek halálát fogja okozni.

A Miles Gordon Technology újat alkotott a keményen felhasználó-orientált számítógép piacon. Lényeges, hogy az eddig leírtakon túlmenően a SAM is bővíthető, további hardware-ek csatlakoztathatók hozzá, sőt hálózatba is kapcsolható. Beépítettek a számítógépbe egy - a Snapshot freezer-hez hasonló - egységet is, vagyis egy varázsgomb megnyomására különböző manipulációkat végezhetünk el a teljes memóriával, pl. kimenthetjük az éppen bent lévő programunkat disk-re.
Végezetül annyit, mit mond Almi Miles a kétéves fejlesztés eredményéről: "Nem dobjuk el többé a számítógépet!"


A TASMAN család

A TASMAN cég az eltelt 7 év alatt sok-sok hasznos programmal lepte meg a Spectrumot elsősorban felhasználói célra alkalmazók táborát. A kezdet kezdetén megjelent a TASWORD, amelynek napvilágot látott 16K-s és 48K-s változata is. A program - amely az első normálisan kidolgozott szövegszerkesztő volt a Spectrumon - számos hibával rendelkezett. A TASWORD hibáiból okulva a szerzők újra összedugták a fejüket, és megalkották a TASWORD TWO-t. Már itt szeretnénk megjegyezni, hogy szoftvereik közül a mai napig ebből adtak el a legnagyobb példányszámban. A TASWORD érdemeit nem óhajtjuk taglalni, úgy gondoljuk magáért beszél az a sok-sok hazai klón, amit a TASWORD TWO-ból fejlesztettek ki, ezeket különböző betű toldalékokkal illették: pl. TASWORD TWO H,2H,M, stb. A szövegszerkesztő család angol honban is tovább bővült, 1985-ben megjelent a szenzációs folytatás, a TASWORD THREE, amellyel a microdrive felhasználók szűkebb táborának akartak kedvezni. A TASWORD itt említett verzióival részletesebben foglalkozik az LSI ATSz-nél 1987-ben megjelent SINCLAIR SPECTRUM JÁTÉK ÉS PROGRAM c. könyvsorozat IV. kötete. Akik behatóbban szeretnének foglalkozni a programok használatával, azoknak nagy segítséget nyújthat a könyv megfelelő fejezeteinek áttanulmányozása. A TASMAN az elmúlt időszakban még rátett egy lapáttal, kiadták a program külön 128K gépre készült verzióját is: TASWORD 128 néven, sőt megjelent a +2 ill. +3 verziós változat is (TASWORD +2, TASWORD +3). Itt jegyezzük meg, hogy a TASMAN fejlesztés eredményét a COMMODORE 64 gépeken is megtekinthetjük, ugyanis a C64-en futó TASWORD 64 c. program működésében teljesen ekvivalens a TASWORD THREE programmal.

A TASMAN cég gondolt a pont-mátrix nyomtatóval rendelkezőkre is, amikor megjelentette TASPRINT programját. Ez új nyomtatási lehetőséget teremt a számunkra. 5 különböző típusú karakterkészlet áll rendelkezésünkre. A COMPACTA egy erősebb, kövérebb típus, főként kiemelésekhez, a DATA RUN futurisztikus írásmódot eredményez, a LECTURA LIGHT tiszta, könnyen olvasható szövegek esetén javasolt, a MEDIAN-t pl. üzleti levelezéshez használhatjuk fel, míg a PALACE SCRIPT a kézíráshoz erősen hasonló, a magánlevelezést segítheti. Az említett készleteket képes megjeleníteni az összes pont-mátrix elven működő nyomtatón (pl. EPSON, SEIKOSHA, STAR, SHINWA, MANNESMANN-TALLY, BROTHER HR-5, stb.), kötöttség viszont az, hogy jelentősebb programozói beavatkozás nélkül csak a TASWORD programmal fésülhető össze.
A TASMERGE c. program elsősorban az üzleti célú levelezésben lehet hatékony segédeszközünk. Segítségével összekapcsolhatjuk a TASWORD TWO és a MASTERFILE programokat. Ennek eredményeképpen egy hatékony házi-üzleti programcsomagot kapunk. A TASMERGE egyidejűleg 15 különböző adatmezőt képes átemelni a MASTERFILE-ból a TASWORD TWO programba. A TASWORD TWO-ban megírt szövegeink természetesen kombinálhatók a MASTERFILE adataival, és egyszerű dokumentumként nyomtathatók szimpla vagy folytatólagos lapdobási funkcióval. Az üzleti levelezésben nélkülözhetetlen "MAIL-MERGE" tulajdonság is rendelkezésre áll, vagyis a TASWORD által megírt levelet a MASTERFILE-ban megadott nevekre és címekre nyomtathatjuk. A TASMERGE lehetővé teszi szöveg-file-ok ill. microdrive file-ok törlését is. Fontos megjegyeznünk, hogy a TASMERGE csak microdrive-on fut, és a TASWORD TWO programnak ill. a MASTERFILE-nak is a cartridge-on kell lennie. A TASMERGE elvégzi a kommunikációt a két software között. A TASMERGE kazettán is forgalomba került, ám a bejelentkező menüben közvetlenül elvégezhető a program átmentése microdrive-ra. Ez természetesen a TASWORD TWO és a MASTERFILE programokkal is hasonlóképpen elvégezhető. Fontos még azt is megjegyeznünk, hogy a TASMERGE hibátlan működéséhez a MASTERFILE 09. vagy későbbi verziója szükséges.

A TASWIDE egy un. képernyő tömörítő. Már a TASWORD TWO is új arcot mutatott a karakterek megjelenítésében a 64 oszlopos kiírási móddal. a TASWIDE segítségével saját programjainkba is beépíthetjük ezt a szolgáltatást. A képernyőn egyszerűen kezelhetjük a normál (32 oszlopos) és a tömörített(64 oszlopos) kiírást. A TASWIDE felhasználásával több információt nyerhetünk egyidejűleg a képernyőn.
A TAS-DIARY egy un. elektronikus naptár a microdrive felhasználásával. Gyors és hatékony eszköz, amely napról-napra friss információval tájékoztat bennünket. Jellemzője a jól elhatárolt képernyő-mezőkben történő megjelenítés. Rendelkezésre áll a lapozás lehetősége. Az év minden napjához tartozó oldalak tartalmazzák a pillanatnyi adatokat, a pontos időt, a naptárat az aktuális hónapról, valamint egy nagyobb területet, melybe mi írhatunk magunknak emlékeztetőt. A TAS-DIARY, a TASMERGE programhoz hasonlóan kazettán is forgalomba került, úgyszintén közvetlenül betöltés után a microdrive-ra menthető. Egy cartridge egy teljes év adatait képes tárolni. Ezzel a lehetőséggel a régebbi évek adatait is megőrizhetjük egy-egy cartridge-en, ugyanakkor hasonló módon a következő évekre is előre tervezhetünk. A TAS DIARY automatikus rendező lehetőséget is magába foglal. A bevitt adatokat a megfelelő helyre teszi le, és adatok, nevek keresésénél is figyelembe veszi a hónapok ill. napok elhelyezkedését. A program felbecsülhetetlen értékű segédeszköz rekordok kezeléséhez, saját emlékeztető készítéséhez, vagy egyéb adatok tárolásához, amely mindannyiunk számára egy dolgot takarít meg - az IDŐT!
A TASCOPY egy képernyő-hardcopy program. Képes kinyomtatni nagyfelbontású képernyő-file-okat normál, vagy színhelyes módban. Ez utóbbi esetben a pontsűrűségeket a képernyő színeknek megfelelően variálja. A TASCOPY működik minden 8 tűs pontmátrix nyomtatón, amely EPSON típusú vezérlőkódokkal dolgozik pl. EPSON RX..., FX... sorozatok, SHINWA CP80, MANNESMANN TALLY MT-80, STAR DMP 510/515, BROTHER HR-5, stb.
Az utóbbi 1-2 évben is megjelent néhány új TASMAN Software: TAS CALC (adatbáziskezelő), TAS MATH 1 (oktató) ill. TAS SIGN, mindezekhez még mi sem rendelkezünk bővebb információval.

Bízunk benne, hogy ez a kis tájékoztatónk segíti majd az eligazodást a TASMAN programok között.


BASIC programok átsorszámozása

Gyakran szükségünk lehet a BASIC programunk írása közben a programsorok átsorszámozására. Nem mindig van kéznél gépi kódú RENUMBER, nem beszélve arról, hogy többségük komplex program része, s lehet, hogy a memóriatakarékosság miatt nincs lehetőség tool-kit-et betölteni. AZ itt közölt program a RUN 9990 utasítással bekéri az átsorszámozni kívánt blokk kezdősorszámát, majd az átsorszámozás lépésközét. Ezután a teljes BASIC programot átsorszámozza a 9989. sorig bezárólag.


Vezérlés fordítottan ágyazott ciklusokkal

A legtöbb BASIC kézikönyv tiltja a fordítottan ágyazott ciklusok használatát, vagyis a

FOR I=...
FOR J=...
...
NEXT I
NEXT J

jellegű ciklus-szerkezetek alkalmazását. Valóban, ezek helytelenül strukturáltak, sőt, a legtöbb gép hibaüzenettel leáll, ha ilyennel találkozik, - de például a Spectrumon érdemes megnézni, hogy mire lehet használni őket.
Ha több ciklust fordítottan ágyazunk egymásba, annak az lesz az eredménye, hogy az első ciklus lefutása után beindul a második - de eközben az első sem áll le. Így pl. ha az első ciklus változójának végértéke 10, akkor ezt elérve elindul a második ciklus, de az első változó is tovább nő 11-re, 12-re, stb. Ez viszont sokban hasonlít egy félautomata vezérlőlánc működésére, amire a legszemléletesebb példa a szállítószalag. Amikor egy három részből álló szalagon kell valamit szállítani, akkor a kettes, illetve a hármas szalag bekapcsolására nincs szükség addig, amíg megfelelő idő el nem telik - vagyis amíg az anyag el nem éri a kellő szalagot.
Ezt a vezérlést illusztrálja a mintaprogram (FORDITOT.TAP): a ciklusok ágyazása jól megfigyelhető a 100., 110., 120., illetve a 160., 170. és a 180. sorokban. A vezérlés félautomata, hiszen a szalagok kikapcsolása már nem ebben a gazdaságos sorrendben, hanem egyszerre történik.
Az ilyen szerkezeteket azonban csak indokolt esetben célszerű használni, hiszen ha nem kellően gondoljuk át, olyan programhibákhoz vezethet, amelyeket kideríteni és megszüntetni igen nehéz.


3D térbeli hálók készítése

A matematikával foglalkozók számára érdekes lehet, hogyan állíthatunk elő a képernyőn térbeli görbéket, hálókat, hogyan ábrázolhatunk térbeli függvényeket? Az itt ismertetett BASIC program a képernyő területét arányosan kihasználva alkalmas a 3D térbeli hálók elkészítésére. A programba a 200. sorba kell elhelyezni a kizáró feltételeket, a 210. sorba pedig a függvényt.

10 BORDER 0: PAPER 0: INK 7: CLS
20 LET t=PI/4
30 FOR y=-70 TO 70 STEP 10
40 FOR x=-70 TO 70
50 GO SUB 200
60 NEXT x
70 NEXT y
80 FOR x=-70 TO 70 STEP 10
90 FOR y=-70 TO 70
100 GO SUB 200
110 NEXT y
120 NEXT x
130 STOP
200 REM feltetel
210 REM fuggveny
220 PLOT 70+x+(70+y)*COS t,z+(70+y)*SIN t
230 RETURN

Példák:

1. Elektropotenciális csúcs

200 IF x=0 AND y=0 THEN RETURN
210 LET z=1000/SQR (x*x+y*y)
215 IF z+(70+y)*SIN t>175 THEN RETURN

A 215. sor azért kell, hogy a képernyő belső területét elhagyva ne történjen kalkuláció, mivel az hibajelzéshez vezetne!

2. Sarkain felhajtott lemez
A 200. kezdeti feltétel nem szükséges.

210 LET z=(x*x+y*y)/150
215 IF z+(70+y)*SIN t>175 THEN RETURN

3. Félgömb

200 IF (x*x+y*y)>2500 THEN LET z=0: GO TO 220
210 LET z=SQR (2500-x*x-y*y)
215 IF z+(70+y)*SIN t>175 THEN RETURN

Ezen túlmenően javasoljuk még a következő függvények kipróbálását (a 200-as feltétel törlése után):

z=a*SIN (x/10)
z=(a*SIN (x/10)*(b*(4900-y*y))

ahol "a" és "b" tetszőleges érték. Lehet próbálkozni.
Megjegyezzük, hogy a program működése igen lassú, ezért a kész képet célszerű SCREEN$ állományként kazettára menteni.


Az Otto motor működése

Az itt közölt BASIC program (OTTO.TAP) elsősorban azoknak a Spectrumosoknak lehet hasznos, akik a számítástechnika mellett egyéb műszaki ismeretek felé is orientálódnak. A program szemléletesen bemutatja a négyütemű Otto motor működését, különös tekintettel az egyes ütemek (szívás, sűrítés, munkaütem, kipufogás) fázisainak megjelenítésére. A fázisrajzok jól ábrázolják a dugattyú, a hajtókar, valamint a szelepek ütemtől függő állapotát, ezáltal hamar elsajátítható a rendszer működése. A program oktatási célokra kiválóan alkalmas.


Színskála demonstráció és memória státusz

Az első program (SZINSKAL.TAP) a képernyőn szemlélteti a számunkra a 8 lehetséges színből kikeverhető színárnyalatok teljes arzenálját.
A második program (MEMORIA.TAP) kijelzi a mindenkori aktuális memória-státuszt. Célszerű a BASIC program végén elhelyezni, program írása közben a RUN 9995 utasítás kiadásakor megjelenik a képernyőn sorban a RAM státusz: a Microdrive státusz, az aktuális BASIC program hossza, a változóterület hossza, a még rendelkezésre álló szabad RAM memória nagysága, az UDG karakterkészlet képe és a bekapcsolás óta eltelt idő.


Nagyított PRINT

A most bemutatásra kerülő ötlet, egyszerűségéhez képest igen hatékonyan megoldja BASIC-ből, nagyított karakterek képernyőn történő megjelenítését.
Kedvcsinálónak gépeljük be, és futtassuk a következő programot:

5 BORDER 1: PAPER 1: INK 7: BRIGHT 1: CLS
10 LET a=64
20 LET a$="---------SPECTRUM VILAG---------"
30 FOR i=0 TO 7
40 POKE 23681,a+i: LPRINT a$
50 NEXT i
60 LET a=72
70 LET a$="--------1300 BUDAPEST-3--------"
80 FOR i=0 TO 7
90 POKE 23681,a+i: LPRINT a$
100 NEXT i
110 LET a=80
120 LET a$="---------Postan marado---------"
130 FOR i=0 TO 7
140 POKE 23681,a+i: LPRINT a$
150 NEXT i
160 GO TO 160

Az mindjárt a szemünkbe tűnik, hogy a program szívét két utasítás alkotja, a POKE 23681,x és az LPRINT a$.
Ha fellapozzuk az eredeti gépkönyvet és megnézzük a rendszerváltozókat, ott azt fogjuk látni, hogy a 23681-es rendszerváltozó nem használt (not used), vagyis szabadon felhasználható memóriarekesz. Másrészt az is különös, hogy az egyébként nyomtatóra dolgozó LPRINT utasítás miért dolgozik a képernyőre. A gépkönyv állítása nem helytálló, ugyanis a 23681-es rendszerváltozó tartalma alapértelmezésben 91, és ez egészen pontosan a nyomtató-puffer mutatója (annak a felső byte-ja). A nyomtató-puffer a képernyő-memóriát követően helyezkedik el, kezdőcíme 23296.
Ennek a címnek az alsó byte-ja 0, ez fix, a felső byte-ja pedig 91, és ez állítódik be alapértelmezésben a 23681-es rendszerváltozóba. Ha ezt az értéket átállítjuk, akkor a nyomtató-puffert is áthelyezzük a memóriában, s mivel a puffer-ben az adatok leképezése másképpen történik, ennek köszönhető az érdekes "nagyított" hatás. A puffer áthelyezését könnyen leellenőrizhetjük, nyomtassuk ki a nyomtató helyett a képernyőre a ROM memória egyes rekeszeinek tartalmát:

10 FOR i=0 TO 16383: LET a=64: FOR j=0 TO 7: POKE 23681, a+j: LPRINT PEEK i;" ": NEXT j: NEXT i

Meglátjuk, hogy a byte-értékek sorra megjelennek a képernyő felső részén.
Az 'a' változó értékével állíthatjuk be, hogy az információ a felső képernyő-harmadban (a=64), a középső harmadban (a=72) illetve az alsó harmadban (a=80) jelenjen meg. Érdekesebbé tehetjük az információ megjelenítését, ha a 0-7-ig tartó lépések számát kettes lépésközzel (STEP 2) adjuk meg.
A további finomításokhoz sok sikert kívánunk!


POKE beviteli technika

Mint tudjuk programjaink többsége nem az eredeti gyári file formátumban szerepel kazettáinkon, s ezek igen nagy százaléka azonos file-térképet muta. Pl.:

146/6916/20000/20536/1704, vagy
164/6912/20000/20536/6916/1704.

Nos az itt említett file térképű programok az un. SPEC-MATE cartridge-dzsel lettek lementve. A SPEC-MATE az AT&Y angol cég terméke, működésében hasonlít a MULTIFACE-hez, de nem tömöríti a memóriát.
Most egy POKE beviteli módszert ismertetünk, amely lehetővé teszi, hogy az ilyen formátumban rendelkezésünkre álló programba könnyen bevihessük POKE-jainkat.
A SPEC-MATE által lementett program két leglényegesebb része: 20000/20536. Az első blokk a 25000-44999 memóriaterületre töltődik, míg a második a 45000-65535 közötti területre. Itt most két módszert ismertetünk. Az egyik módszer arra az esetre vonatkozik, ha a beolvasandó POKE a 25000-44999 memóriaterületre mutat, a második módszer pedig értelemszerűen a másik memóriaterületet célozza meg.

1. módszer:

Írjuk be a következő kis programot:

10 CLEAR 24999
20 FOR I=23296 TO 23308
30 READ A: POKE I,A: NEXT I: RANDOMIZE USR 23296
40 DATA 221,33,168,97,17,32,78,62,255,55,195,86,5

Futtassuk a programot, ekkor a program készen áll arra, hogy ráolvassuk a SPEC-MATE formátummal lementett program 20000 byte-os részét. Amikor a számítógép kiírja az OK üzenetet, gépeljük be a megfelelő POKE-t, majd vegyük fel kazettán az eredeti helyére a 20000 byte-os részt:

SAVE "1" CODE 25000,20000

Nagyon fontos, hogy a magnetofon felvétel gombját csak a fejléc után nyomjuk le, azaz a kódot fejléc nélkül mentsük ki.
A játékot visszatöltve már működni fog a POKE.

2. módszer:

A teendő hasonló, mint az első esetben, csak most a 20536 byte hosszú részt kell betöltenünk, majd a POKE beírása után:
SAVE "2" CODE 45000,20536

10 CLEAR 24999
20 FOR I= 23296 TO 23308
30 READ A: POKE I,A: NEXT I: RANDOMIZE USR 23296
40 DATA 221,33,200,175,17,56,80,62,255,55,195,86,5

Természetesen biztonsági okokból célszerű a POKE által módosított blokkokat külön kazettára felvenni, ill. az új programot külön kazettán összerakni.


Ismét a POKE-okról

Az utóbbi időben szép számmal jelentek meg - a Spectrum tulajdonosok nagy örömére - olyan POKE utasítások, amelyek a nehezen játszható programokat is élvezhetővé teszik. Sajnos, sokak számára csak az használható, amelyekhez a részletes beviteli eljárás is rendelkezésre áll, a kiadványunkban rendszeresen publikált módszerekhez hasonló formában. A programok eltérő szerkezete miatt egységes módszert nem lehet alkalmazni, bizonyos irányelvek azonban sok segítséget nyújtanak azoknak, akik nem sajnálják a fáradságot ahhoz, hogy egy kicsit belepillantsanak a programok szerkezetébe. Egyébként sem árt senkinek, ha számítógépet nem csak video játékszerként használja, hanem igyekszik legalább egy kicsit megismerni annak lelkivilágát is. Az sem elhanyagolandó sikerélmény, ha a változatosság kedvéért a játékokban felbukkanó ellenségek helyett a bevitelnél jelentkező buktatókat sikerül eredményesen leküzdeni.
Adott szerkezetű programokhoz univerzálisan használható a SpV. 14.rész 25. oldalán ismertetett módszer. Ha a szóbanforgó blokk betöltési adatait ismerjük, akkor ugyanez az eljárás másfajta programokhoz is felhasználható - természetesen a megfelelő számérték beírásával.
Ha viszont valaki a COPY-COPY című másolóprogramot segítségül tudja hívni (ha nincs meg, érdemes beszerezni jó szolgáltatásai miatt - S130), annak rendkívül egyszerű lehetőséget kínál az a körülmény, hogy a másolóprogram POKE utasítás bevitelére is alkalmas. Ehhez azonban tudni kell, hogy ez a program a kazettáról betöltött blokkot a memóriában a 23040. címtől tárolja, vagyis a POKE beviteli címet a blokk tényleges kezdőcíme és 23040 közötti különbséggel kell megfelelően módosítani.
Nagyobb a gond, ha a betöltési címet nem ismerjük, és általában ez a helyzet a fejléc nélküli programblokkoknál. A szükséges adatokat magából a programból ismerhetjük meg, amitől annak sem kell megijednie, akinek még nincs jártassága a gépi kódú programozásban, de azért egy monitorprogram kezelésében el kell tudni igazodni.

A fejléc nélküli blokkok betöltését (és kimentését is) gépi kódú programmal lehet megoldani, a megfelelő ROM rutinba való belépéssel. Ezt a programot általában a BASIC betöltőben helyezik el. A betöltő többnyire nem listázható ki, de a BASIC listával amúgy sem mennénk sokra, mert legtöbbször a BASIC utasítások is a gépi kódú részben vannak 'elrejtve'. Nem ütközik viszont különösebb nehézségekbe a megfelelő monitor programmal való disassemblálás és kilistázás (csak olyan monitor használható, amelyik a megvizsgálni kívánt memóriaterületet szabadon hagyja).
A disassemblált listán a BASIC utasítások természetesen értelmetlennek tűnő formában jelennek meg, de erre most nincs is szükségünk (ha valamiért mégis kíváncsiak vagyunk a BASIC utasításokra, akkor a kódszámokat egyenként kell a Spectrum kézikönyv A. függelék segítségével megfejteni, ám erre a COPY-COPY másolóprogram listázó utasítása is kiválóan alkalmas). A gépi kódú utasítások között viszont különösebb szakértelem nélkül is könnyű felismerni a kazettáról való betöltés utasításait, így pl. a képernyő file (SCREEN$) betöltési utasításának szokásos alakja:

LD IX,16384
LD DE,6912
LD A,255
SCF
JP 1366

Jó erről annyit tudni, hogy az 1366 (DECIMÁLIS) memóriacímen kezdődő ROM rutin indításakor (amely a magnetofonról való betöltést vezérli) az IX regiszternek a betöltési kezdőcímet, a DE regiszterpárnak a blokk hosszát, míg az A regiszternek általában 255-öt kell tartalmaznia. Az átviteli jelzőbitet 1-be kell állítanunk, ezt végzi el az SCF utasítás. Ezen követelmények egy része más módon is teljesíthető, de az első két adatbeviteli utasítástól nem szokás eltérni. Vegyük még figyelembe, hogy ha pl. a SCREEN$ file betöltési utasítását sikerül azonosítani (amit az ismert cím és hossz adatok miatt a legkönnyebb megtalálni), akkor ugyanilyen módszert szokott a programozó alkalmazni a többi blokk betöltésére is. Ennél fogva a program egyes blokkjainak hossza és címe rendre meghatározható, és a POKE utasítás bevitelére most már tudjuk valamelyik módszert alkalmazni. Magától értetődik, hogy ez a módszer nem kötődik meghatározott szerkezetű programtípusokhoz, hanem bármilyen file-térképű programnál alkalmazható. A siker azonban sok egyéb tényezőtől is függ.

A sikertelenség okát csak ritkán kell az adatközlés hibájában (pl. sajtóhiba) keresni. Ezt leggyakrabban az okozza, hogy programunk felépítése eltér attól, amire a POKE utasítás vonatkozik. Két program azonosságának nem elegendő kritériuma a file-térképek azonossága, mert a belső szerkezetben is lehetnek eltérések, különösen, ha figyelembe vesszük, hogy a nálunk forgalomban lévő programok általában különböző beavatkozások után kezdenek terjedni (ezek nélkül nem is terjedhetnének). Az sem ritka eset, hogy a program közvetlenül a betöltés után - még a betöltőben lévő utasításokkal - átrendezi a memória tartalmát, nem annyira programvédelmi, mint inkább egyéb megfontolások alapján. Ilyenkor nem mindegy, hogy a POKE az áthelyezés előtti, vagy utáni állapotra vonatkozik. Az áthelyezésről a programban az LDIR vagy LDDR blokkmozgató utasítások árulkodnak, amelyeket megelőzően HL-be a blokk címét (LDIR-nél kezdőcím, LDDR-nél végcím), DE-be az áthelyezési címet (célcím), BC-be pedig a blokk hosszát kell töltenünk. Ezekből a mozgatott blokkról minden szükséges információ rendelkezésünkre áll, amelyek ismeretében meg lehet kísérelni a két cím különbségéből adódó, megfelelően eltolt címre való bevitelt.

Ha így sem jutunk dűlőre, akkor további próbálgatások helyett - már csak saját megnyugtatásunkra is - célszerű egy monitorprogrammal megvizsgálni, hogy milyen utasítás van a kérdéses címen, és erről feltételezhető-e, hogy pl. az életek számát befolyásolja. Akik ehhez kellő rutinnal nem rendelkeznek, azok sokat tanulhatnak a már sikeresen módosított programok szóbanforgó eredeti utasításának és környezetének a tanulmányozásából.
Ilyen vizsgálathoz szükség van a kérdéses programblokk betöltésére, ami viszont fejléc nélkül BASIC-ből nem oldható meg. Sikerrel alkalmazható viszont a programokban is használt, fentebb bemutatott gépi kódú rutin, de az utolsó sort módosítsuk CALL 1366 -ra, és írjunk mögé egy RET utasítást. Az IX-be és DE-be természetesen a megfelelő számértéket kell beírni. Teljesen azonos a kimentéshez használt rutin is, de itt a CALL 1218 utasítással hívjuk meg a ROM-ban lévő SAVE rutint. Vegyük észre, hogy ilyen szerkezetű betöltési utasításokat tartalmaz a SpV-ban közölt POKE beviteli módszerek nagy része is (ami a DATA sorok dekódolásával azonnal kiderül), és ebből áll a SpV 14. részben megjelent eljárás is. Ez utóbbinál ugyan fejléccel, BASIC-ből indítjuk a blokk kimentését, de ügyelni kell arra, hogy a fejléc ne kerüljön a kazettára.

Végezetül még egy jó tanács arra - a sajnos gyakori esetre, ha a problémával semmi módon nem tudunk megbirkózni: érvényesüljön az okosabb enged elve. Végtére is a téma később is bármikor elővehető, ha közben támad egy újabb ötletünk!


Csillapodó hazai láz

Semmi sem tart örökké, ezt mi is tudtuk, amikor elindítattuk ezt a kiadvány-sorozatot mintegy két évvel ezelőtt. Mielőtt megijedne a Tisztelt Olvasó, szeretnénk előrebocsátani, hogy ezzel a mondaital nem a SPECTRUM VILÁG megszűnését szándékoztuk előre jelezni, csak utalni szeretnénk arra a tényre, ami van: a SPECTRUM gépek iránti érdeklődés folyamatosan csökkenő tendenciát mutat, ez pedig kihatással van a kiadvány létére is. A folyamat már évekkel ezelőtt megindult Angliában, közelebbi országokban pedig igazán ki sem tudott forrni a túlzott és megmagyarázhatatlan COMMODORE nyomás miatt. A SpV 7. részében már beszámoltunk az 1987 nyarán aktuális Angliai helyzetről, ez azóta tovább romlott. Sajnos NSZK-ban ill. Ausztriában már szinte nem is jegyzik a gépet. Ausztriában a NIEDERMEYER üzlethálózat egyes szaküzletei még fújják a parazsat, de nem törekszenek arra, hogy minél előbb megszabaduljanak rendelkezésűkre álló készletüktől. Ezen sorok íróját perceken keresztül győzködte Bécsben a magyarul beszélő eladó, hogy COMMODORE 64-es gépet kell venni, nem SPECTRUM-ot, hiszen...
No persze azt nem tudhatta, hogy vannak még megszállottak, így felesleges volt fáradoznia. Miben rejlik a pangás oka? Ezt nehéz két szóval megmagyarázni. A fejlődés egy megállíthatatlan folyamat, nagyon sokan tovább lépnek, már hobby gépnek is elérhető áron beszerezhető egy-egy ATARI ST, AMIGA gép, no de azok a Spectrumosok, akik szinte hozzá nőttek kedvenc gépükhöz, több száz, sőt ezer programmal rendelkeznek, miért lépjenek tovább egy teljesen eltérő operációs rendszerrel rendelkező gép irányába, főként, ha ezt pénztárcájuk sem engedi. Talán a SAM oldhatná fel a pangás hangulatát, de hol van? Miért nem ontják el vele a világot, úgy mint annak idején ősapjával. Ám, ha el Is terjed a SAM, várható-e, hogy olyannyira sikeres lesz, mint a SPECTRUM, és mennyire fog elterjedni?
Gépeink egyre rosszabb egészségi állapotban vannak, bár orvosaink egyfolytában dolgoznak, de gyakori a fáradékonyság, a kényszerű pihenő, A gépek jósága viszont általában független gazdája egészségi állapotától (kivétel, ha éjjel-nappal püföljük, s eközben mi is heveny károsodást szenvedünk). A Spectrumosok tábora sajnos már nem olyan egységes mint régen, a nagy öregek közül is sokan elpártoltak - ilyen-olyan okok miatt-. Az okok kölcsönhatásából mi is részesülünk, az érdeklődés kiadványunk iránt folyamatosan csökken. Mint azt már beköszöntőnkben említettük, a kiadványunk léte csak, és kizárólag csak Önökön múlik. Az eladási példányszám egy bizonyos érték alá csökkenése esetén már nekünk kell fizetni azért, hogy egyáltalán megjelenjen a Specttum Világ, ezt pedig a mai gazdasági helyzetben nem tudjuk biztosítani. Igaz, voltak negatív rekordok, pl. a SpV. 7, részét a mai napig a legkevesebben vették meg (kb. 4500-an) (talán azért mert a borítón "véletlenül" szerepelt a kiadvány egyik "atyja"?).
A 13. szám megjelenésévei sikerült elérnünk, hogy a kiadvány kb. 9000 példányban keljen el, s ekkor jött a gazdaságilag szükségszerű áremelés (mi támogatást sehonnan nem kapunk, saját erőből és zsebből kell fedeznünk kiadásainkat, magánkiadásról lévén szó, vagyis a költségeink hirtelen emelkedése automatikusan be kell, hogy épüljön a fogyasztói árba is).
Két választásunk volt: ez, vagy a kiadvány megszűntetése. Nos, mi ezt választottuk, melynek eredményeképpen hirtelen mintegy 3000-en meggondolták magukat, és elfelejtették, hogy ők valaha vettek Spectrum Világ-ot.
Nagyon sokan elitéltek bennünket ezért, nyomdafestéket nem tűrő hangon, dorgáló szavakkal. A levelekből arra a következtetésre kellett jutnunk, hogy egyes Olvasóink a fától nem látják az erdőt, ugyanis sokan fordulnak hozzánk javaslatokkal, miszerint a fogyasztói ár emelésével párhuzamosan igazán növelhetnénk az oldalszámot is. No persze az világos, hogy ez maga után vonná a nyomdai költségek további növelését (technikailag csak 16 oldalanként tudnánk az oldalszámot növelni), ez pedig ismételt áremelést eredményezne, ennek így semmi értelme.
És itt jön a fa az erdőben. Mi folyamatosan megpróbáltunk több információt adni a rendelkezésünkre álló 32 oldalban, kisebb betűméretet és sortávolságot választva (egyben vállalva a nehezebben olvashatóságot is). Elég, ha csak annyit jegyzünk meg, hogy a SpV. 1. részében kb. 80000 karakter szöveges információ volt (39,- Ft-ért), az utóbbi részek átlaga kb. 200000 karakter, vagyis ez az induláshoz képest mintegy két és félszeres információnövekedést jelent (49,- Ft-ért), s az áremelés óta plusz szolgáltatásként megjelenő A3 méretű térképlapot nem is említjük.
A nagyobb méretű információ és a nagyobb "méretű" ár együtteséből úgy tűnik az utóbbi került ki győztesen, az eladott példányszámunk folyamatosan csökkent (vagyis nőtt a remittendánk), melynek eredményeként a Posta Hírlap-Kereskedelmi Osztálya kevesebb példányszámot (7000) vett át tőlünk. A kevesebb példányszám miatt újabb levélözön árasztott el bennünket, ám tehetetlenek voltunk. Az kiderült, hogy azok közül, akik nem jutnak hozzá a hírlapárusoknál a kiadványhoz, sajnos csak kevesen szánják rá magukat, hogy a postaköltséggel együtt drágább pénzért rendeljék meg tőlünk (mi minden számban közzétesszük, hogy, a kiadványok nálunk is megrendelhetők).
Különböző madarak elcsicseregték, hogy újabban a Spectrumosok már 4-5-en vesznek 1 példányt, s mindenki fénymásolja, ill. kitépi magának a megfelelő oldal(aka)t. Az előbbi jogilag tilos, az utóbbi pedig bunkóság. Itt szeretnénk megjegyezni azt is, hogy nem illik 10-20 Ft-ért a térkép-lap fénymásolatát klubokban és egyéb helyeken árulni, egyáltalán nem azért, mert bírósági pert fogunk indítani (jogilag megtehetnénk), ha valakit ezen rajtakapunk, hanem azért, mert ez is mind a SpV mielőbbi kipusztulását hivatott elősegíteni.
A 19. szám esetében a példányszámot tovább csökkentették 5900-ra, köszönhetően a "jelentős" érdeklődésnek, így dolgainkat ismét át kellett értékelni. Levelezésünkben nagyobb számban kaptunk már eddig is leveleket Commodore 64-gyel rendelkezőktől, mint Spectrumosoktól. Ők is hiányolták, és mi is szükségszerűnek láttuk, hogy egy - a SpV-hoz hasonló - kiadvány jusson el hozzájuk. Mind a nyomda, mind a Posta illetékesei a gyártást, ill. terjesztést csak olyan feltétellel vállalták, hogy váltott hónapokban jelentetjük meg ezeket a kiadványokat. Ezek figyelembevételével megkaptuk a lehetőséget, hogy a SpV-ot - a CoV-hoz hasonlóan 12000 példányban jelentessük meg, elsősorban arra alapozva, hogy kéthavonta talán jobban felszívja a piac. Mi ezt reméljük, és már itt szeretnénk előrebocsátani, hogy a további siker csak Önökön múlik. Amennyiben gazdasági egyenlegünk a SpV háza táján mégis romlani fog, ügy elképzelhető, hogy a jövő évtől tovább sűrítjük a CoV, ill. tovább ritkítjuk a SpV megjelenését, melynek kiszámíthatók a végső következményei.


Info a SAM-ről

'SAM Across the Nation' ... 'Check it Out Now!' ... 'SAM Coupe is at a shop near you' - ilyen és hasonló szlogenek jelentek meg 1990 nyarának elején a legtöbb - Spectrum témájú - angol szaksajtóban, a szigetország software-kereskedéseiben, valamint az utcai hirdetőtáblákon. Spectrum hívok százezreinek arcán tükröződött a boldogság: a Miles Gordon Technology végre kivonult a piacra, s erre a felemelő pillanatra sajnos elég sokat kellett várni. Nem telt el 1 hónap sem, s valami egészen megmagyarázhatatlan dolog történt. A kijelölt boltokban nem jelentek meg a gépek, ahol már lehetett kapni, ott kitették a 'LELTÁROZUNK' táblát, ezt követöen eltűnt a SAM a polcokról. az utcai hirdetéseket is kellemes hölgyek dezodor reklámjai váltották fel Akik eközben levélben rendelték meg a gépet közvetlenül a Miles Gordon Technology-tól, azok néhány soros választ kaptak: 'Az MGT megszűnt, az átszervezéssel járó kis ideig türelmüket kérjük!'. Nos, több hazai rajongó is átesett ezen a tűzkeresztségen, s többen fordultak hozzánk is levélben, most mit tegyenek?
Nem kell megijedni! Az élet nem állt meg, csak a cég ment át egy kis változáson. Augusztusban tehát csődbe ment a MGT Alan Miles és Bruce Gordon saját tőkével létrehozták a SAM Computers Ltd-t A Spectrum Világ 18 számban is közölt MGT címet tehát el lehet felejteni, az új cím:

SAM Computers Ltd
7 Clevedon Court, Swransea, SA2 0RG.

Az új cég programjából:

  • Általános szerviz szolgálat
    Forgalomba került mindőssze 12£-ért a SAM Coue Upgrade Pack amely tartalmazza az új ROM chip-et, az új Spectrum emulátor sottware-t, az új DOS-t és hasznos utility-ket (dr. Andy Wright jóvoltából - valahonnan ismerős a neve, nem?).
    • Új ROM: Alan és Bruce szerint ez a ROM már a végleges és többszörösen módosított változat.
    • Új emulátor: Az eddigi kompatibilitás nem váltotta be a hozzá fűzött reményeket (kezdetben 40-50 %-os kompatibilitás), a legújabb változat közelít a beígért 90 %-hoz.
    • Új DOS: Továbbra is 780K-t tud formázni a 3.5"-os disk-en. 80 track-es szervezésben. A Disciple és a Plus D tulajdonosokban most felvetődik a kérdés, a régi Spectrumos lemezeiket felhasználhatják-e a SAM-mel? Nos most már IGEN! A SAMDOS olvasni tudja azokat, csak felírni nem tud rájuk!
  • Szoros kapcsolat az Enigma Variations c. software céggel, valószínűleg ez a cég lesz az elsődleges fejlesztő a SAM-re.
  • Továbbra is 1 év garancia ill. ingyenes javítás meghibásodás esetén.

Milyen software áll SAM-ünk előtt?
1990 júliusban jelent meg az első, kimondottan SAM Coupe-re is átírt játék, az Enigma Variations jóvoltából: a Defenders of the Earth. Azóta követte a sorban Kick Off 2, World Boxing Manager, Snoball in Hell, Fun School 2, The Race, 3D Snooker and Super Lague, Play it Again SAM (ezt nem lehetett volna kihagyni!), Punchman, Spanish Gold and Granny's Garden. Nem olyan régen jelent meg a Mind Games 1 pack, amely 4 arcade stílusú játékot tartalmaz. Megjelent az első Graphic-Adventure is, Enid Blyton könyve alapján: The Famous Five on Treasure Island. Megjelent egy SAM Multi Pack 1 nevű csomag is, amely tartalmaz egy sportszimulációt (Futureball), valamint egy Arcade-Adventure játékot (SAM Strikes Out). Nyomul a Budget kategória is, október nagy slágere volt mindossze 3£-ért a BLOKADE, egy logikai játék.
A nagy dobás várhatóan a XENON II, lesz, amely a 16 bites gépek kimagasló sikert aratott Shoot'em Up játéka. Több software ház (többek között pl. az OCEAN) bejelentette, hogy a továbbiakban csak SAM-kompatibilis Spectrum játékokkal jelennek meg a piacon.
A felhasználói programok terén is érezhető egy kis mozgás. A Spectrum felhasználói programok között előkelő helyet kiharcolt LERM máris megjelent a piacon a SAMtape, valamint a SAMtape 3 programjával. Ez a két program Spectrum programok ezreinek hibamentes konvertálását segíti elő a SAM-re. Bővebb információk ügyében a LERM-hez lehet fordulni:

LERM Software, 11 Beaconsfield Close,
Whitley Bay, Tyne & Wear, NE25 9UW, England.

Az ősz elején startolt a gépre egy Desk-Top Publishing programcsomag is.
A pillanatnyi hardware kínálat:

  • SET 1: SAM Coupe, Power Pack, könyvek, szalagok és egy rajzoló program (180,- £)
  • SET 2: SAM Coupe, Power Pack, 1 db. disk drive, könyvek, szalagok es egy rajzoló program (250.- £)
  • SET 3: SAM Coupe, Power Pack, 2 db. disk drive, könyvek, szalagok es egy rajzoló program (330,- £)
  • Coupe drive. 90.- £
  • 256 Kbyte Memory Pack: 40,- £
  • Kommunikációs Interface: 30,- £
  • Külső drive Interface: 30,- £
  • SCART monitor kábel. 10,- £
  • MIDI kábel: 5.- £
  • 2m hosszú hálózati kábel: 5,- £
  • Bővített felhasználói kézikönyv: 16,- £

És végül: a SAM Computers Ltd-n kívül hová fordulhatunk információért, segítségért?

LLOYD'S SAM COUPE FORUM
CRASH, Ludlow, Shropshire, SY8 IJW, England

INDUG, Format Publications
34 Bourton Road, Gloucester, GL4 0LE, England

SAM Hotline telefonvonal
(Nagy-Britannia) 0898-299380.

128 K

Amstrad vagy Spectrum ?

Sokan feltették ezt a kérdést, amikor megjelent a piacon a 128K Spectrum új verziója, az immár AMSTRAD cég által továbbfejlesztett +2 változat. A Sinclair cég bukását követően az AMSTRAD által forgalmazott gépek szinte egyeduralkodóak voltak Angliában. Idén nyáron Londonban már nagyon sokat kellett járkálnia egy turistának ahhoz, hogy 48K-s gépet tudjon vásárolni, ellenben +2-t minden jobb szaküzletben árultak mindössze 149 Fontért.
Nos, a +2 tetszetős szürke dobozba épített számítógép, kiváló kemény billentyűzettel. A normál 128K-hoz képest alapvető változás, hogy a készülék egy beépített magnetofont is tartalmaz, amit nem akarunk dicsérni, de nem is lehet. A mechanika kemény, nehezen kezelhető, a számláló nagyon hiányzik, és nincs a gépnek 'EAR' csatlakozója sem, így külső magnetofon nem csatlakoztatható. Viszont elhelyezték a gépben az Interface II-t, azaz 2 db Joystick csatlakozót kapott, de - és most figyeljenek! - üzleti taktikai célból csak a géphez hozzá adott, vagy külön vásárolt SJS1 típusú joystick használható, mivel a D9 joystick aljzat bekötését megváltoztatták. No persze ez könnyen kivédhető, de ez esetben a géphez kapott joysticket vagy elajándékozhatjuk a szomszéd kisfiának, vagy tehetünk rá újabb dugót, mert a gyári egybeöntött.
A gép belső felépítése teljesen megváltozott, a portok kiosztása is más lett, a 32K EPROM-ot felváltotta két 16K-s ROM, stb. Működésében viszont nem sokban tér el elődjétől, így a továbbiakban általános programozástechnikai információkat adunk. Alapvetően azoknak a 128K tulajdonosoknak szánjuk, akik erre már hónapok óta repesve várnak, de úgy gondoljuk, hogy ezek az információk közérdeklődésre is számot tarthatnak. Elsősorban a 3 csatornás hang programozását fogjuk részletesen tárgyalni. Ez, mind 128K, mind 48K üzemmódban lehetséges, de ez utóbbi esetben csak gépi kódú oldalról.

A szabad memória nagysága
Gyakran igen hasznos lehet, ha a 128K üzemmódban meggyőződhetünk a még rendelkezésünkre álló szabad memóriaterület nagyságáról. BASIC-ből a 128K rendszer a 48K-n felüli területeket RAM-disc-ként kezeli, vagyis ide tetszés szerint menthetünk/tölthetünk különböző rutinokat, adatokat, vagy akár több kisebb BASIC programot is. A következő utasítássor segítségével meggyőződhetünk a RAM+RAM-disc szabad memória nagyságáról:

PRINT (65535-USR 7962+(PEEK 23429+256*PEEK 23430+65536*PEEK 23431))

Alaphelyzetben 118181 byte-ot kapunk eredményül.

A 'Spectrurm' utasítás

Ha 128K módban dolgozunk, és kiadjuk:

SPECTRUM [ENTER]

automatikusan áttérünk a 48K rendszerhez. 48K rendszerben nincs lehetőségünk a 128K extra utasítások kihasználására, csak a 3 csatornás hang kezelését tudjuk megoldani, gépi kódú oldalról. Ezért tapasztalhatjuk azt, hogy több 48K Spectrum játék (pl. THE TUBE, ELEVATOR ACTION, stb.) a 128K gépen 48K módban is 3 szólamú zenét produkál. A gyári kazettákon egyébként az ilyen játékokat már 48K/128K jelzéssel szokták ellátni.

Hiba a 128K BASIC-ben!

A 128K BASIC Interpreter, mint ismeretes, nem kulcsszavakkal dolgozik, hanem karakterenként kell bebillentyűznünk az egyes utasításokat. Matematikai kalkulációk esetén - a karakterek tokenizálásakor - egy bizonyos esetben hibajelenséggel találkozhatunk. Gépeljük be:

10 IF A>B-C THEN STOP

ENTER után a képernyőn a következő jelenik meg:

10 IF AB>-C THEN STOP

Nem kell megijedni, mert ettől még a programunk hibátlanul fog lefutni. Listázáskor viszont ez a forma zavaró lehet, ezért célszerű a sort átírni:

10 IF B-C < A THEN STOP

vagy így is eljárhatunk:

10 IF A>(B-C) THEN STOP

Megjegyzés: A probléma a 48K üzemmódban nem jelentkezik!

Plusz kontra Plusz 2
Az utóbbi időben igen nagy zűrzavarok alakultak ki a 128K tábor háza táján. Sajnos egyre több az eltérés a 128K gépek egyes változatai között, így például a most ismertetésre kerülő szerkesztő parancsok sem mindenkinél fognak működni. Az általunk használt normál 128K gépen ezek az információk helytállóak, +2 gépünk viszont már megcáfolja az itt leírtakat, így már most elnézést kérünk mindazon 128K gép tulajdonosaitól, akiknél ezek a parancsok nem működnek:

EXT + W - törlés a kurzor utáni space-ig
EXT + E - törlés a kurzort megelőző space-ig
EXT + T - ugrás a program utolsó sorra
EXT + I - ugrás a kurzor előtti space-re
EXT + P - ugrás 10 sorral lejjebb
EXT + K - sor törlése a kurzor előtt
EXT + J - sor törlése a kurzor után
EXT + N - ugrás a program első sorára
EXT + M - ugrás az aktuális sor végére
GRAPH + W - ld. EXT + N
GRAPH + Y - ugrás az aktuális sor elejére
GRAPH + X - ld. EXT + M
GRAPH + V - ld. EXT + T
GRAPH + Z - ld. Edit menüben: SCREEN

Sajnos a normál 128K gép szerkesztőjével 128 BASIC módban negatív tapasztalataink vannak. Azért figyelmeztetjük most a kedves Olvasót, mert kisebb figyelmetlenség árán több órai munka kárba veszhet.
A legsúlyosabb hiba program-sor javítása esetén léphet fel. Ha hiba van a sorban és megnyomjuk az ENTER-t, előfordulhat, hogy a gép a szintaktikai ellenőrzést követően a kurzort nem a hiba helyére helyezi. Ha ekkor megnyomjuk véletlenül a kurzor lefelé billentyűt és nem szállt el a gép, úgy összetehetjük kacsóinkat. Előfordulhat ugyanis az, hogy a kurzor a képernyő közepére ugrik, s ekkor akár ENTER, vagy kétszeri kurzor felfelé megnyomása esetén a rendszer azonnal elszáll. Próbáljunk egy rövid kis példával meggyőződni nálunk jelentkezik-e a hiba. Gépeljük be:

10 REM aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Fontos, hogy legalább- két-három karakter átnyúljon a másik sorba. Nyomjuk meg az ENTER-t, hiba nincs. Most menjünk vissza és töröljük ki a REM-ből az M-et, majd nyomjunk kétszer ENTER-t. Látszólag semmi sem történik, de ha most megnyomjuk a kurzor lefelé billentyűt, a hiba már elő is jött.
A + 2 esetében az említett hibajelenséggel nem találkoztunk.
Software tekintetben is vannak sajnos problémák, ezúton tájékoztatunk minden 128K tulajdonost, hogy a LIGHT & SOUND programok tökéletesen futnak, nem hibásak, de csak a + 2 gépen, a normál 128K-n nem futtathatók.

A RAM Disc

Kicsit meredeknek tűnik az a kijelentés, hogy a 128K Spectrumon úgy használhatjuk ki-a +80K memóriát (RAM disc), mint egy előre formattált lemezt, vagy microdrive kazettát. Mint tudjuk a Z-80 mikroprocesszor egyidőben mindössze csak 64 kbyte memóriaterületet tud kezelni, a 128K Spectrum további memóriáinak eléréséhez két lehetőségünk kínálkozik.
Az első, a teljes memória egyidőben történő kihasználása, amelyet BASIC-ből nem tudunk megoldani, ez csak gépi kód használata esetén hasznos, a lapozó rutinok felhasználásával (erről később lesz szó). A második és könnyebb lehetőségünk a háttér memória - mint tároló (a továbbiakban RAM disc) - BASIC-ből történő elérése. A RAM disc kezeléséhez a 128K BASIC üzemmódban több új BASIC utasítást vezettek be, a továbbiakban először ezeket tekintjük át:

SAVE ! "abc"
Elmenti a RAM disc-re az 'abc' nevű BASIC programot.

SAVE ! "abc" LINE xx
Elmenti a RAM disc-re az 'abc' nevű BASIC programot az xx. sortól automatikus indítással.

SAVE ! "abc" CODE xx,yy
Elmenti a RAM disc-re az 'abc' nevű gépi kódú programot (memóriatartalmat) az xx. címtől kezdve, yy. byte hosszon.

SAVE ! "abc" SCREEN$
Elmenti a RAM disc-re az 'abc' nevű képernyő-memória tartalmat.

SAVE ! "abc" DATA n()
Elmenti a RAM disc-re 'abc' néven az n() adattömböt.

SAVE ! "abc" DATA n$()
Elmenti a RAM disc-re 'abc' néven az n$() string-tömböt.

LOAD ! "abc"
Betölti a RAM disc-ről az 'abc' nevű BASIC programot.

LOAD ! "abc" CODE (xx,yy)
Betölti a RAM disc-ről az 'abc' nevű gépi kódú programot (memóriatartalmat), xx. és yy. memória-kezdőcím és hossz paraméterek megadhatók.

LOAD ! "abc" DATA n()
Betölti a RAM disc-ről 'abc' néven az n() adattömböt.

LOAD ! "abc" DATA n$()
Betölti a RAM disc-ről 'abc' néven az n$() string-tömböt.

MERGE ! "abc"
Összefésüli a memóriában található és a RAM disc-ről 'abc' névvel betöltött BASIC programot. Ha azonos sorszámok fordulnak elő, a memóriában lévők törlődnek.

CAT !
Kilistázza a képernyőre a RAM disc katalógusát.

ERASE ! "abc"
Törli a RAM disc-ről az 'abc' nevű file-t.

A memória

A Z-80 mikroprocesszor egyidőben 65536 cím megkülönböztetését tudja elvégezni (0000-FFFFh). A hagyományos 48K Spectrum esetében az alsó 16K a ROM, míg a felette elhelyezkedő 48K memória a RAM. A 128K Spectrum esetében a memóriatérkép hasonló, annyi különbséggel, hogy un. árnyék memóriaterületeket is találunk, amelyek megfelelő rutinok alkalmazásával lapozhatók. A 128K Spectrumban 2 ROM lap és összesen 10 RAM lap található, s minden egyes lap mérete 16K. Ebből adódóan összesen 131072 RAM és 32768 ROM byte-unk áll rendelkezésre, azaz összmemóriánk 163840 byte (160K). Mindettől függetlenül egyidőben akkor is csak 16K ROM és 48K RAM áll rendelkezésünkre.
A RAM 2 és a RAM 5 szelet mindig állandó, az itt található területre nem tudunk felüllapozni (4000h-C000h).
A RAM szempontjából érdekes terület a felső 16K (C000h-FFFFh), melyen belül újabb két típust különíthetünk el.
A RAM 4-7 a RAM 5-höz hasonlóan olyan memóriakörbe tartozik, amely részt vesz a video-kép kezelésében is, ezért kritikus idővel futó rutinok és ciklusok (pl. zene vagy töltő/mentő rutinok) itt nem futtathatók. Erre kiválóan alkalmasa RAM 0-3 terület, ahol ilyen gondba nem ütközünk.
Az egyes szeletek kijelölése a 32765 (7FFDh) I/0 portop keresztül címezve oldható meg, a jobb oldali adatbitek jelölése a következő:
D0-D2 : RAM kiválasztás
D3 : képernyő kiválasztás
D4 : ROM kiválasztás
D5 : 48K üzemmód kapcsoló
A D2-D0 3 bites adat (0-7) választja ki a megfelelő RAM szeletet (C000h-FFFFh). BASIC programok írásakor a RAM 0 hagyományos tároló, míg a RAM 7-ben tárolódnak el a megfelelő változó pufferek. A D3 a képernyő-kapcsoló, 0 esetén a RAM 5 elejére, míg 1 esetén a RAM 7 elejére áll a képernyő-memória i11. rendszerváltozók. Ez utóbbi esetben a teljes 48K szabadon felhasználható (4000h-FFFFh), természetesen csak gépi kódból folyamatos adatok ill. rutinok tárolására.
A D4 a ROM kapcsoló. 0 esetén ROM 0, a szerkesztő ROM, míg 1 esetén ROM 1, a BASIC ROM lesz kiválasztva.
A D5 aktív állapota a rendszert a 48K üzemmódba irányítja át, megjegyeznénk, hogy innen már csak a RESET segítségével léphetünk vissza ismét a 128K módba.

A memória kezelése

A hozzánk érkező levelekben nagyon sokan neheztelnek amiatt, hogy még ezidáig behatóbban nem foglalkoztunk a 128K memória lapozás módszerével, a teljes memória kihasználása érdekében. Az előzőekben már ismertettük a memóriaszeletek elhelyezkedését, itt kitértünk arra is, hogy melyik port-címmel lehetséges a lapozás végrehajtása, ám úgy tűnik fontos, hogy a módszert néhány mintapélda segítségével is illusztráljuk.

Az első félreértést az okozhatta, hogy összekeverhetők a RAM szeletek, a jelölési azonosságok miatt. Nos a felső memóriaterülethez (49152-65535 - C000h-FFFFh) a létező 8 db. RAM szelet mindegyike (RAM0-RAM7) hozzárendelhető, de azt tudnunk kell, hogy a RAM5, mindig a 16384-32767 (4000h-7FFFh) a RAM2 pedig mindig a 32768-49151 (8000h-BFFFh) területhez lesz rendelve, függetlenül attól, hogy azt esetleg fent is kijelöljük. Ez gyakorlatilag azt jelenti, hogy pl. ha a felső memóriaterülethez (49152-65535 - 0000h-FFFFh) a RAM2 szeletet rendeljük hozzá, úgy egyidőben két azonos 16K szelet lesz jelen a memóriában.

A lapozásra a 32765-ös port címet tudjuk felhasználni, a port egyes adat bitjeinek értelmezését már megismerhettük. A gyakorlatban mind BASIC, mind gépi kódú oldalról elvégezhető a lapozás.
Kapcsoljuk be a gépet, majd válasszuk ki a '128K BASIC' módot. A port D4-es bitje választja ki, hogy melyik ROM 'éljen', 0 esetén a 128K szerkesztő ROM, míg 1 esetén a hagyományos BASIC-kulcsszó ROM kerül kiválasztásra. Írjuk tehát először is be:

OUT 32765,16 (ENTER)

Látszólag semmi nem történt. Ez annak az oka, hogy ha nem változtatunk a RAM-ok felépítésén, úgy ez még nem elegendő a ROM kiválasztásához. Azt is tudjuk, hogy a D5-ös bit a 48K üzemmód kapcsoló, ez könnyen megjegyezhető, ugyanis a D3 (16) + D4 (32) értékét összegezve pontosan 48-at kapunk. Adjuk ki:

OUT 32765,48 (ENTER)

és a Copyright felirat már meg is jelenik, 48K-s módban vagyunk.
RESET-eljük a gépet, majd a '128K BASIC' kiválasztása után adjuk ki:

OUT 32765,17 (ENTER)

Látszólag ismét a 48K rendszerbe kerültünk, pedig nagy tévedés, mert a Copyright megjelenése ezt még nem támasztja alá. A RAM1-et választottuk ki, a D0 1-be állításával, s mivel a D4 bit is 1 értékű volt, átkerültünk a másik ROM-ba, de megmaradt a 128K rendszer is (akik MULTIFACE 128-cal rendelkeznek, azok erről könnyen meggyőződhetnek, ugyanis a varázsgomb megnyomásakor egyidőben jelenik meg a főmenüben az (e)xit, ás a (c)hange is). Írjunk be az érdekes memóriaszeletbe egy értéket:

POKE 49152,200 (ENTER)

majd váltsunk át pl. a RAM3-ba:

OUT 32765,19 (ENTER)

Nézzük meg, milyen értéket találunk a 49152-es címen:

PRINT PEEK 49152 (ENTER)

az eredmény természetesen zérus lesz. Váltsunk vissza RAM1-be:

OUT 32765,17 (ENTER)

és ismét nézzük meg a cím tartalmát:

PRINT PEEK 49152 (ENTER)

Lám a 200-as kód még mindig ott van, valóban rendelkezésünkre áll a teljes memória. Ha most viszont csak a másik ROM szeletbe kapcsolunk vissza (RAM1-et megtartva):

OUT 32765,1 (ENTER)

majd a keresett értéket lekérdezve:

PRINT PEEK 49152 (ENTER)

sajnos azt tapasztaljuk, hogy a 200 már nincs ott, vagyis az egyik ROM-szeletből a másikba való átkapcsolás - abban az esetben, ha visszatérünk az operációs rendszerhez -, a RAM területek törlését is maga után vonja.
A D3 bittel nem foglalkoztunk még. Ez lehetővé teszi, hogy a képernyő-memóriát áthelyezzük a RAM7 szeletre. Tekintsük meg ennek a hasznát is egy kis példa bemutatásán keresztül: RESET, majd válasszuk ki a '128K BASIC' módot, válasszuk ki a RAM7 szeletet:

OUT 32765,23 (ENTER)

átlépve a BASIC ROM-ba. Egyszerűen, BASIC-ból írjunk egy programot, amely felrajzol három kört, ás két vonalat a képernyőre, majd ezt a "bonyolult" ábrát áthelyezi a RAM7 szeletre. Itt megjegyeznénk, hogy RAM7-tel azonosítjuk a második képernyő memóriát is.

5 BORDER 7: PAPER 7: INK 0: CLS
10 PLOT 0,50: DRAW 255,0
20 PLOT 0,52: DRAW 255,0
30 CIRCLE 50,72,20
40 CIRCLE 90,72,20
50 CIRCLE 130,72,20
60 FOR i = 16384 TO 23295: POKE i+32768,PEEK i: NEXT i

Most váltsunk át a másik képernyőre:

OUT 32765,31 (ENTER)

aminek eredményeképpen egy nagy sötétség tárul elénk (ezt kapjuk a MULTIFACE (c)hange parancs aktivizálása esetén is alapállapotban). "Látatlanban" váltsunk vissza:

OUT 32765,23 (ENTER)

ismét itt a lista, és futtassuk a BASIC programot: RUN (ENTER).
A futás ideje majdnem másfél perc, ennyi időre van szüksége a BASIC-nek, hogy befejezze az átpakolást. Akinek ez lassú, az lappozzon hátrébb a 'gépi kódú tanfolyamhoz', az ott ismertetett blokk-kezelő utasítások segítségével a művelet a másodperc tört része alatt elvégezhető.
Ha most visszaváltunk a második képernyőre:

OUT 32765,31 (ENTER)

a képünk itt is megtalálható. Ismét "látatlanban" váltsunk vissza:

OUT 32765,23 (ENTER)

majd végezzünk el egy egyszerű trükköt. Töröljük ki a 60-as sort, a 30., 40., ás 50. sort pedig módosítsuk:

30 CIRCLE 70,72,20
40 CIRCLE 110,72,20
50 CIRCLE 150,72,20

Ezen túl írjuk a programhoz a következő sorokat:

60 OUT 32765,31
70 OUT 32765,23
80 GO TO 60

Ha futtatjuk, azt tapasztaljuk, hogy a két képernyő váltogatásával animációs hatást érhetünk el.

Egy dolog maradt még hátra, a lapozás gépi kódú utasításainak ismertetése. A RAM7 kiválasztása gépi kódú oldalról a következőképpen lehetséges:

30000
30003
30005
30007
01 FD 7F
3E 17
ED 79
C9
  
1, 253, 127
62, 23
237, 121
201

LD BC,32765
LD A,23
OUT (C),A
RET

Ezt a sémát már tetszés szerint beépíthetjük saját gépi kódú programjainkba.

Rendszerváltozók

A 48K Spectrum printer-puffer területe foglalt 128K üzemmódban a 128K saját rendszerváltozói számára. Ezek a rendszerváltozók a bővített memória-lapok közötti kommunikációt, az RS-232 vonal, a nemzetközi tízes billentyűzet használatát, a 128K BASIC Interpreter működését, valamint a toolkit-menü RENUMBER funkciójának végrehajtását támogatják.

Jelzés Cím Név Funkció
R20 23296 SWAP Lapozó szubrutin
R9 23316 YOUNGER Lapozó szubrutin
R18 23325 ONERR Lapozó szubrutin

R5 23343 PIN RS-232 INPUT rutin
R22 23348 POUT RS-232 token OUTPUT rutin
R14 23370 POUT2 RS-232 karakter OUTPUT rutin

N2 23384 TARGET ROM 1 szubrutin cím
X2 23386 RETADDR ROM 0 visszatérési cím

X1 23388 BANKM A legutolsó OUTPUT byte

X1 23389 RAMRST RST 8 parancs
N1 23390 RAMERR ROM 1 - hibakód

2 23391 BAUD RS-232 bit/sec T idő/26

N2 23393 SERFL 2. karakter, aktuális flag és DATA
N1 23395 COL Az aktuális oszlop száma
1 23396 WIDTH PAPER szlop-szélesség

1 23397 TVPARS RS-232 inline paraméterek száma

1 23398 FLAGS3 Változó flag-ek
N10 23399 N STR1 File-név
1 23409 HD 00 File kód típusa
2 23410 HD 0B Blokk-hossz
2 23412 HD 0D Blokk-start
2 23414 HD 0F Program hossz
2 23416 HD 11 Sorszám
1 23418 SC 00 Második készlet - file kód típusa
2 23419 SC 08 Második készlet - blokk-hossz
2 23421 SC 0D Második készlet - blokk-start
2 23423 SC 0F Második készlet - program hossz
X2 23425 OLDSP A régi SP TSTACK használatakor
X2 23427 SFNEXT Directory belépési cím-mutató
X3 23429 SFSPACE Megmaradt byte-ok száma (17 biten)

N1 23432 ROW01 Nemzetközi 10-es bill. flag-ek és az első sor
N1 23433 ROW23 Nemzetközi 10-es bill. 2-3. sor
N1 23434 ROW45 Nemzetközi 10-es bill. 4-5. sor

X2 23435 SYNRET ONERR visszatérési cím

5 23437 LASTV Kalkulátor utolsó eredménye

2 23442 RNLINE Átsorszámozás alatti aktuális sor száma
2 23444 RNFIRST Átsorszámozás start-sorszáma
2 23446 RNSTEP Átsorszámozás lépésköze

N8 23448 STRIP1 STRIPE1 bittérkép
N8 23456 STRIP2 STRIPE2 bittérkép

IN/OUT port-ok


Sinclair Spectrum +2

Az elmúlt időszakban igen sok 128K + gépet úgy értékesítettek szerte a világon, hogy a géphez a normál 48K+ kézikönyvét és demo programjait mellékelték. Kézenfekvő a probléma, az örömbe némi üröm is vegyül, hiszen a gépük plusz szolgáltatásainak kihasználásához elengedhetetlenek a kiegészítő információk. Igen sok levélíró kívánságának teszünk most eleget azzal, hogy a 128K Spectrum egyes csatlakozó pontjainak rajzait és bekötéseit ismertetjük. Az élcsatlakozót szándékosan hagytuk ki a sorból, ugyanis nincs eltérés a 48K és a 128K gép élcsatlakozójának bekötése között. Elterjedt egy hamis szóbeszéd a felhasználók között, miszerint a 128K gépet elsősorban azért nem érdemes megvenni, mert periféria-csatlakoztatás szempontjából nem kompatibilis a 48K géppel. Nos el kell oszlatnunk a rémhíreket, a dolog csak részben igaz. Elsősorban azoknak a perifériáknak a működésével lesznek gondjaink, amelyek árnyék-ROM területeket használnak (különféle nyomtató- és disk-illesztők). Meg kell nyugtatnunk mindenkit, hogy a hagyományos Sinclair perifériák (Interface I-I1, microdrive, stb.) teljesen kompatibilisek.

 

Audio OUT

3,5 mm jack aljzat
kimenet: 200 mV pk-pk, 5 kOhm

MIDI / RS-232

Aljzat: amerikai telefon-szabvány

MIDI
RS-232
láb funkció láb funkció
1 RETURN 1 GND
2 nem használt 2 TXD
3 nem használt 3 RXD
4 nem használt 4 DTR
5 DATA OUT 5 CTS
6 nem használt 6 +12V
RGB Out

8 pólosú tuchle aljzat

láb jel jelszint
1 összetett PAL 1.2V pk-pk / 75 Ohm
2 0V -
3 fényesség TTL
4 összetett sync TTL
5 vertikális sync TTL
6 zöld TTL
7 vörös TTL
8 kék TTL
Joystick (+2)

 

D9

láb funkció láb funkció
1 nem haszn. 6 jobbra
2 föld 7 balra
3 nem haszn. 8 föld
4 tűz 9 lefelé
5 felfelé    

 

KEYPAD
Az RS-232 ill. MIDI kimenettel egyező - amerikai telefonszabványú - aljzat. Nem mátrix elven működik, így csak a géphez rendszeresített nemzetközi tízes billentyűzet csatlakoztatható.

Az ismeretlen KEYPAD port

Az előző fejezetben szándékosan csak néhány szót ejtettünk erről a beépített csatlakozó aljzatról, különös tekintettel arra, hogy a +3 gépben néhány módosítás történt - az említett gép bemutatását pedig csak most eszközöljük.

KEYPAD (128K+, +2) AUX (128K +3)
láb funkció láb funkció
1 GND 1 GND
2 INPUT BIT 0 2 OUTPUT BIT 0
3 INPUT BIT 4 3 INPUT BIT 4
4 INPUT BIT 1 4 OUTPUT BIT 1
5 INPUT BIT 5 5 INPUT BIT 5
6 +12V 6 +12V

A 128K gép háromcsatornás hangjának előállítását egy AY-3-8912 típusú IC végzi el. A chip BASIC-ből történő vezérléséről (PLAY utasítás) később szólunk. A chip egyes regisztereinek BASIC-ből ill. gépi kódú oldalról történő vezérlésére is később fogunk visszatérni. A KEYPAD ill. AUX csatlakozók ismertetéséhez azonban elengedhetetlen néhány fontos információ, elsősorban azért, mert a csatlakozók működése összefüggésben áll a hanggenerátor chip-pel.
Az AY-3-8912 típusú ill. az azzal kompatibilis IC-k tizenhat programozható regisztert tartalmaznak, típustól függően bizonyos regiszterek nem használhatók. A chip hetedik illetve 14. és 15. regiszterei összefüggésben állnak egymással. A hetedik regiszter alsó hat bitje (0-5) a megfelelő hang ill. zajcsatorna be- és kikapcsolásában vesz részt. A hatodik bit első állapota a 14. regisztert állítja OUTPUT módba, 0 esetén INPUT mód áll elő. A hetedik bit jelen esetünkben lényegtelen, ugyanis ez alkalmas a 15. regiszter INPUT/OUTPUT módjának beállítására, de az AY-3-8912 IC ezt a funkciót nem használja. Erre csak az AY-3-8912 bátyja, az AY-3-8910 illetve az ezzel felülről kompatibilis chip-ek képesek.
Ha a 7. regiszter 6. bitje 0 értékű, akkor a 14. regiszter bitjei fogadószerepet töltenek be. A normál 128K és a +2 gépeken ezt a lehetőséget használták ki a külső nemzetközi tízes billentyűzet csatlakoztatására. Ezt a perifériát a 'KEYPAD' elnevezésű aljzatba csatlakoztathatjuk. A SINCLAIR tízes billentyűzeten 15 nyomógomb található. Beleértve azt az állapotot, amikor egy billentyűt sem nyomtunk meg, összesen 16 állapotot különböztethetünk meg, ez pedig egy négybites számmal írható le. Ha megnyomunk egy billentyűt a tízes billentyűzeten, a bitek állapotának megfelelően jelenik meg +12 V (zérus bit) illetve -11 V (1 állapotú bit) a KEYPAD csatlakozó megfelelő lábain. Ezt a feszültségértéket a számítógép visszakonvertálja az AY-3-8912 14. regiszterének elfogadható TTL jelszintre, és így jelenik meg ott a megfelelő érték. Mint látható az. AY chip 14. regiszterének csak 4 vonalát használjuk itt. A másik 4 vonal az RS232 / MIDI port vezérlésében vesz részt.

Nos a +3 konstruktőrei a csatlakozót némileg átalakították a 4 INPUT vonalat 2 INPUT és 2 OUTPUT vonalra cserélték. A ROM-ból is ki lett irtva a nemzetközi tízes billentyűzetet vezérlő rutin, így a +3-hoz ezt már nem tudjuk felhasználni. Az új nevén 'AUX' port egy második RS232-ként is felfogható.
Az AY chip regisztereinek kiválasztása az OUT 65533,x utasítással lehetséges (x=0-15), majd ezt követően beírhatjuk a kiválasztott regiszterbe a megfelelő adatot az OUT 49149,x utasítással (x=0-255), pl. küldjünk ki aktív jelet az AUX második és negyedik lábán:

OUT 65533,7: OUT 49149,64
OUT 65533,14: OUT 49149,3

A PLAY utasítás

128K módban BASIC-ből a PLAY utasítás teszi lehetővé a 3 csatornás hang programozását. A PLAY sokkal rugalmasabb a BEEP-nél, a három egymástól független hang segítségével a harmóniák és effektek igen széles arzenálja vonultatható fel. Használata rendkívül egyszerű.
Pl. szólaltassuk meg az "A" hangot az egyvonalas "C" alatt fél másodpercig:

PLAY "A"

Most játsszunk egy C major skálát:

PLAY "cdefgahC"

Megjegyeznénk, hogy az utolsó "C" nagy betű. Ez azt jelzi a PLAY utasításon belül, hogy egy oktávval magasabban szólaltassa meg, mint a kis "c" betűvel jelzett hangot. Az itt lejátszott skála tehát megfelel egy oktávnyi hangterjedelemnek. Az itt látható mintapéldát 'C major' skálának hívjuk, melynek érdekessége, hogy az egyetlen olyan major (dúr) skála, amelynek zongorával történő megszólaltatásához egyetlen fekete billentyű használata sem szükséges.
Két alapskálát különböztetünk meg, a majort és a minort. Most játsszuk le a 'c minor' skálát:

PLAY "cd$efg$a$bC"

Bevezettünk egy újabb jelet, a '$'-t. Ez fél hanggal lejjebb szállítja a mögötte álló hangot. A zenei életben "b" előjegyzésnek felel meg. Használhatjuk a PLAY utasításban a '#' előjegyzést is, amely egy fél hanggal feljebb szállítja a hangot, s ezt a valóságban is így jelöljük.
A PLAY utasítás 9 teljes oktávot (9-szer 7 hangot) képes átfogni. Az oktávok közötti váltás az "O" (nagybetű) és az azt követő szám (0-8) megadásával érhető el. Most tekintsük meg a következő programot:

10 LET o$="O5": LET n$="DECcg": LET a$=o$+n$
20 PLAY a$

Ez újabb lehetőséget tár elénk. Nem szükséges mindent a PLAY mellett megadnunk. A vezérlést stringbe is tehetjük, a stringeket összegezhetjük, s a PLAY segítségével mint egy stringre is hivatkozhatunk. Az itt látható kis program megfelel a következőnek:

PLAY "05DECcg"

Tekintetbe véve, hogy a PLAY nem korlátozza a string hosszát, viszont egy hosszabb string kezelése bonyolultabb lehet, így célszerűbb több rövidebb string összegzésével előállítani a cél-stringet. Változtassuk meg a 10. sorban az 'O'-öt 'O'-re, és futtassuk ismét a programot, ezután nézzük meg, mit eredményez az 'O2'. Ha nem definiáljuk az oktáv számát, azt a PLAY alapértelmezésben 5-nek veszi. A PLAY további elemzése előtt tekintsük meg a zenei skála-diagramot:

Láthatjuk, hogy a PLAY oktávjai átfedik egymást, pl. 'O3D' ugyanazt jelenti, mint 'O4d'. Ez megkönnyíti a dolgunkat, mivel nem kell olyan sűrűn oktávot váltani, mintha oktávonként csak egy skálát programozhatnánk. Néhány hang a legalsó oktávban egyszerűen nem szólal meg, mivel arra technikailag sem nyílt lehetőség. A PLAY segítségével beállítható az egyes hangjegyek megszólalási ideje (időtartama) is. Ez egyszerűen egy egyedülálló számjegy segítségével választható ki. Változtassuk meg a 10. sort:

10 LET o$="2"

és futtassuk ismét a programot. Ezután próbáljuk ezt az értéket megváltoztatni 1-9 között.
Megjegyzés: Ezek a konstansok nem konkrét időegységeket, csak arányokat állítanak be. Most tekintsük át a konstansok jelentését:

  1. tizenhatod
  2. nyújtott tizenhatod
  3. nyolcad
  4. nyújtott nyolcad
  5. negyed
  6. nyújtott negyed
  7. fél
  8. nyújtott fél
  9. egész
  10. 3 x tizenhatod
  11. 3 x nyolcad
  12. 3 x negyed

Azt az időt, amíg nincs megszólaló hang, szünetnek nevezzük, kottákon szünetjellel jelöljük, a PLAY utasításon belül "&" jelet kell alkalmazni. A szünet hossza mindig azonos az aktuális hangjegy hosszával. Pl.:

10 LET o$="04": LET n$="DEC&cg"

C és c között szünetet eredményez.
Két hangjegy megszakítás nélküli összefűzését "tied notes"-nek hívjuk, jelölése a PLAY mellett egy "_" (aláhúzás) karakter. Így egy negyed és egy fél hang összevonható a következőképpen: "5_7c". A numerikus értékeket nem szabad kevernünk! Pl: 10 LET o$="062" jelentése: a 6. oktávban egy nyújtott tizenhatod, de ezt így nem fogadja el a PLAY (n: out of range hiba), mivel '0' után egy numerikus értéket olvas, mely esetben a numerikus paramétereket el kell határolnunk egymástól egy "N" (nagybetű) karakter segítségével. Helyesen tehát:

10 LET o$="06N2"

A hangerő beállítható 0 és 15 (min-max) érték között, a "V" karakter és az azt követő számjegy segítségével. Megjegyezzük, hogy a 10-15 közötti értékek használata ajánlatos, mivel a 0-9 viszonylag halkan szól.
Egynél több csatorna párhuzamos megszólaltatása igen egyszerű, a PLAY mellett vesszővel elhatárolva kell megkülönböztetni az előre definiált stringeket:

10 LET a$="04cCcCgGgG": LET b$="06CaCe$bd$bD": LET c$= "05cCcCgGgG"
20 PLAY a$, b$, c$

A lejátszott zene sebessége ill. az egyes hangok hossza, a továbbiakban "tempó", csatornánként külön nem variálható, és kötelezően mindig az "A" csatorna stringjében (a PLAY utáni első string) kell megadni. Jele a "T" karakter ill. az ezt követő szám (60-240), alapértelmezése 120.

10 LET t$="T100": LET a$=t$+"04cCcCgGgG": LET b$="06CaCe$bd$bD"
20 LET c$="05cCcCgGgG": PLAY a$, b$, c$

Futtassuk a programot különböző tempóval.
Jelentős szolgáltatása a PLAY utasításnak az egyes zenei részletek ismétlési lehetősége. Egy string bármely részlete ismételhető, ha azt zárójelek közé helyezzük: pl.:

10 LET t$="T100": LET a$=t$+"04(cC)(gG)"
20 LET c$="05(cC)(gG)": PLAY a$, b$, c$

megfelel az előzőeknek.
Ha a string végére egy záró zárójelet teszünk (de nincs nyitó párja), úgy az adott string dallamát végtelen ideig ismételten játszani fogja. Ez igen hasznos pl. basszus vagy ritmus alapok bevezetéséhez. Pl. a PLAY "04N2cdefgfed)" ciklusból csak a BREAK segítségével léphetünk ki. Most próbáljuk ki a következőt:

PLAY "04N2cd(efgf)ed)"

Vagyis a végtelen ütemben játszott basszus alapon belül is elhelyezhetünk ismétlődő részleteket. Most futtassuk a következő programot:

10 LET a$="cegbdfaC": LET b$="04cC)": PLAY a$,b$

Futtatáskor azt tapasztaljuk, hogy a szóló befejezése után a basszus alap tovább szól, végtelen ciklusban. Nagyon hasznos dolog, ha a basszus alap is csak addig szól, amíg a főszólam. Erre a 'H' karakterrel nyílik lehetőség. Ha a 'H' karaktert bárhol elhelyezzük egy stringben ('H = HALT = megállás), a PLAY ezt úgy értelmezi, hogy abban a pillanatban kapcsoljon ki minden hangot, amely éppen szól.
Mindenekelőtt változtassuk meg az a$ stringet: LET a$="cegbdfaCH" és futtassuk újra a programot.

A PLAY mellett beállíthatjuk az aktuális hullámformát is, a 'W' karakter segítségével, és az ezt követő numerikus értékkel (0-7). Mindemellett be is kell kapcsolnunk a burkológörbe-generátort, amelyet az 'U' karakterrel adhatunk meg egy stringben. Hasonlóképpen a 'V' (VOLUME = hangerő) és az azt követő számérték (0-15) a hangerőt állítja be, s mindegyik csak arra a csatornára vonatkozik, amelyik stringben elhelyeztük. Az egyes burkológörbéket a jobb oldali ábrán láthatjuk.
Most próbáljuk ki a következőt:

10 LET a$="UX1000W0C&W1C&W2C&W3C&W4C&W5C&W6C&W7C"
20 PLAY a$

Az 'U' bekapcsolja az effektet, a 'W' szelektálja a hullámformát, de látunk egy új jelölést is: 'X1000'
Az 'X' melletti értékkel (0-65535) állítható be a burkológörbe-frekvencia, melynek alapértelmezése l000. Próbáltjuk megváltoztatni. A burkológörbe-frekvencia hatása csak a 4-7 hullámformák kiválasztása esetén hatásos. A PLAY parancs segítségével beállíthatjuk, hogy csatornánként tiszta hangot, fehér zajt, vagy e kettő keverékét szeretnénk előállítani. Ez az 'M' karakter és az ezt követő számérték (1-63) segítségével lehetséges. Nézzük meg használatához a beállító táblázatot:

 
Hang csatornák
Zaj csatornák
 
A
B
C
A
B
C
érték
1
2
4
8
16
32

Ki kell választanunk, hogy mit szeretnénk, majd össze kell adni az ezeknek megfelelő számértékeket. Pl. ha az 'A' csatornán zajt, a 'B' csatornán tiszta hangot, a 'C' csatornán pedig mindkettőt szeretnénk, úgy a következő értékeket össze kell adni:
8 + 2 + 4 + 32 = 46.

Írhatunk bonyolultabb szimfóniát is, de ez esetben célszerű itt-ott megjegyzéseket tennünk a stringek belsejébe, a könnyebb eligazodás céljából. Pl. egy bonyolultabb program része lehet:

2045 LET z$=z$+"CDcE3Ge4_6f! a 24. tetel vege !egeA"

A megjegyzéseket mindig felkiáltójelek közé kell helyeznünk.

MIDI PORT: Ha rendelkezünk elektronikus zenei berendezéssel (pl. szintetizátorral, dobgéppel, vagy sequencer-rel), amely tartalmaz MIDI port-ot, úgy ezek a berendezések vezérelhetők a SINCLAIR SPECTRUM 128K gép segítségével. Ez megoldható a PLAY utasítás segítségével, és gépi kódú oldalról is. Az 'Y' karakter és az azt követő érték (1-16) a megfelelő zenei csatornát választja ki, míg a 'Z' karakter után adjuk meg az aktuális MIDI program kódot.

A hanggenerátor programozása

Sok 128K géppel rendelkező levélíró kívánságának teszünk most eleget, amikor ismertetjük a 128K gép 3 csatornás hanggenerátorának közvetlen programozását. Az előzőekben már megismerhettük a hanggenerátor PLAY utasítás segítségével történő vezérlését, de ez gyakran megköti a kezünket, s bizonyára sokan vannak, akik gépi kódú oldalról is szeretnék elérni gépük hangbéli lehetőségeit. Az elmúlt alkalommal már megemlítettük, hogy a 128K gépbe egy AY-3 8912 típusú hanggenerátor IC-t építettek be, amely 16 programozható regisztert tartalmaz, ebből 14 (0-13) segíti elő a hangképzést, a 14-es a párhuzamos adat be/kivitelnél jelentős, a 15-öst ez az IC nem használja.
A hanggenerátor programozásakor ezeket a regisztereket kell megfelelő értékekkel feltöltenünk. A regiszterek feltöltése két lépésből áll:

Az utasítás szintaktikája BASIC-ben:

OUT 65533,a: OUT 49149,b

ahol 'a' a kiválasztott regiszter száma (0-13). 'b' pedig a kiválasztott regiszterbe írandó érték.
Gépi kódban a port címet előbb be kell tölteni a BC regiszterpárba, az adatot az A regiszterbe, majd ki kell adni egy 'OUT (C)A' utasítást. Az előző mintapéldának nézzük meg a gépi kódú változatát, feltételezzük hogy a kis rutint a 40000. címtől helyezzük el, ill. a kiválasztott regiszter legyen a 7-es, a beírandó érték pedig 56:

40000
40003
40005
40007
40010
40012
40014
01 FD FF
3E 07
ED 79
01 FD BF
3E 38
ED 79
C9
1, 253, 255
62, 7
237, 121
1, 253, 191
62, 56
237, 121
201
   LD BC,65533
LD A,7
OUT (C),A
LD BC,49149
LD A,56
OUT (C),A
RET

Ez a rutin RANDOMIZE USR 40000 kiadása esetén ugyanazt hajtja végre, mint a BASIC

OUT 65533,7: OUT 49149,56

utasítás.
A következőkben áttekintjük a programozható regisztereket:

R0 - Az A csatorna hangmagasságának finom beállítása (0-255)
R1 - Az A csatorna hangmagasságának durva beállítása (0-15)
R2 - A B csatorna hangmagasságának finom beállítása (0-255)
R3 - A B csatorna hangmagasságának durva beállítása (0-15)
R4 - A C csatorna hangmagasságának finom beállítása (0-255)
R5 - A C csatorna hangmagasságának durva beállítása (0-15)
R6 - A zajgenerátor szűrő-fokozat beállítása
R7 - A kimeneti csatornák megnyitása
R8 - Az A csatorna hangerejének beállítása (0-15)
R9 - A B csatorna hangerejének beállítása (0-15)
R10 - A C csatorna hangerejének beállítása (0-15)
R11 - A burkológörbe-frekvencia finom beállítása (0-255)
R12 - A burkológörbe-frekvencia durva beállítása (0-255)
R13 - A burkológörbe hullámformájának beállítása (8-15)

R14 - PIO adatregiszter
R15 - PIO adatregiszter (Csak az AY-3 8910 használja)

Most részletesen áttekintjük az egyes regiszterek programozását:

A hangmagasság beállítása
Minden csatorna hangmagassága 2 regiszterrel állítható be. Az alsó regisztereknek (R0, R2, R4) mind a 8 bitjét, a felső regisztereknek (R1, R3, R5) csak az alsó 4 bitjét használjuk. Ezzel a kapacitással összesen 4096 különböző hangot állíthatunk elő. A felső regiszterek felső 4 bitje a programozás szempontjából jelentéktelen, beállításuknak nincs kézzelfogható eredménye. Az 1 MHz-es leosztott hanggenerátor órajel esetében a regiszterekbe beírandó érték a frekvencia alapján a következő képlettel számítható ki:

N = 85800 / frekvencia

ahol N a regiszterbe írandó kétbyte-os szám, amelyet a kiszámítás után egész számjegyre kerekítettünk. Ha N értéke 256-nál kisebb, akkor csak az alsó regiszterbe írunk, a felsőt töröljük. 256 illetve nagyobb szám esetében a szám alsó / felső byte-os formára bontandó fel, így tudjuk tárolni.

Hanggenerátor frekvenciatáblázat

Oktáv
Hang
frekvencia
(Hz)
Alsó regiszter
(R0, R2, R4)
Felső regiszter
(R1,R3,R5)
Oktáv
Hang
frekvencia
(Hz)
Alsó regiszter
(R0, R2, R4)
Felső regiszter
(R1,R3,R5)
1
C
Cisz
D
Disz
E
F
Fisz
G
Gisz
A
Aisz
H
16.35
17.32
18.35
19.44
20.60
21.83
23.12
24.50
25.96
27.50
29.13
30.83
-
-
-
-
-
89
124
172
232
46
127
218
-
-
-
-
-
15
14
13
12
12
11
10
6
C
Cisz
D
Disz
E
F
Fisz
G
Gisz
A
Aisz
H

523.26
554.36
587.32
622.26
659.26
698.46
739.98
784.00
830.60
880.00
932.32
987.76

164
155
146
138
130
123
116
109
103
97
92
87
0
0
0
0
0
0
0
0
0
0
0
0
2
C
Cisz
D
Disz
E
F
Fisz
G
Gisz
A
Aisz
H
32.70
34.65
36.71
38.89
41.20
43.65
46.25
49.00
51.91
55.00
58.27
61.72
62
171
32
157
33
172
62
214
116
23
192
109
10
9
9
8
8
7
7
6
6
6
5
5
7
C
Cisz
D
Disz
E
F
Fisz
G
Gisz
A
Aisz
H
1046.52
1108.72
1174.64
1244.52
1318.52
1396.92
1479.96
1568.00
1661.20
1760.00
1864.64
1975.52
82
77
73
69
65
61
58
55
52
49
46
43
0
0
0
0
0
0
0
0
0
0
0
0
3
C
Cisz
D
Disz
E
F
Fisz
G
Gisz
A
Aisz
H
65.41
69.29
73.42
77.78
82.41
87.31
92.50
98.00
103.83
110.00
116.54
123.47
31
213
144
78
17
214
159
107
58
12
224
183

5
4
4
4
4
3
3
3
3
3
2
2

8
C
Cisz
D
Disz
E
F
Fisz
G
Gisz
A
Aisz
H

2093.04
2217.44
2349.28
2489.04
2637.04
2793.84
2959.92
3136.00
3322.40
3520.00
3729.28
3951.04

41
39
37
34
33
31
29
27
26
24
23
22
0
0
0
0
0
0
0
0
0
0
0
0
4
C
Cisz
D
Disz
E
F
Fisz
G
Gisz
A
Aisz
H
130.82
138.59
146.83
155.56
164.82
174.62
184.99
196.00
207.65
220.00
233.08
246.94
144
107
72
39
8
235
208
182
157
134
112
91
2
2
2
2
2
1
1
1
1
1
1
1
9
C
Cisz
D
Disz
E
F
Fisz
G
Gisz
A
Aisz
H
4186.08
4434.88
4698.56
4978.08
5274.08
5587.68
5919.84
6272.00
6644.80
7040.00
7458.56
7902.08
20
19
18
17
16
15
14
14
13
12
11
11
0
0
0
0
0
0
0
0
0
0
0
0
5
C
Cisz
D
Disz
E
F
Fisz
G
Gisz
A
Aisz
H
261.63
277.18
293.66
311.13
329.63
349.23
369.99
392.00
415.30
440.00
466.16
493.88
72
53
36
20
4
246
232
219
206
195
184
174
1
1
1
1
1
0
0
0
0
0
0
0
 

A zajgenerátor szűrő-fokozat beállítása
A zajgenerátor 0 és 31 közötti értékekkel programozható. A '0' az un. "sötét", a '31' a "világos" zajhatást eredményezi. A kívánt értékeket az R6 regiszterbe kell beírnunk. A következő példában a 'világos' zaj beállítását mutatjuk be:

0 0 0 1 1 1 1 1

Az R6 regiszter felső három bitjének gyakorlatilag semmi jelentősége nincs.

A kimeneti csatornák beállítása

B7 B6 B5 B4 B3 B2 B1 B0

B0 0 - 'A' csatorna tiszta hang engedélyetése
1 - 'A' csatorna tiszta hang letiltása
B1 0 - 'B' csatorna tiszta hang engedélyezése
1 - 'B' csatorna tiszta hang letiltása
B2 0 - 'C' csatorna tiszta hang engedélyezése
1 - 'C' csatorna tiszta hang letiltása
B3 0 - 'A' csatorna zaj engedélyezése
1 - 'A' csatorna zaj letiltása
B4 0 - 'B' csatorna zaj engedélyezése
1 - 'B' csatorna zaj letiltása
B5 0 - 'C' csatorna zaj engedélyezése
1 - 'C' csatorna zaj letiltása
B6 0 - R14 regiszter INPUT csatorna megnyitása
1 - R14 regiszter OUTPUT csatorna megnyitása
B7 0 - R15 regiszter INPUT csatorna megnyitása
1 - R15 regiszter OUTPUT csatorna megnyitása

A B0 / B1 / B2 és a B3 / B4 / B5 egymástól függetlenül is vezérelhető, vagyis ugyanazon csatornán egy időben hang és zaj is megjeleníthető.

Hangerő beállítása
Az R8 az 'A' csatornán, R9 a 'B' csatornán míg R10 a 'C' csatornán teszi lehetővé a hangerő beállítását. Például a 12-es fokozatú hangerőt az 'A' csatornán a következőképpen állíthatjuk be:

0 0 0 0 1 1 0 0

A hangerő beállítása szempontjából az alsó négy bitnek van jelentősége, tehát 16 fokozatban állítható (0-tól 15-ig).
Az negyedik bitnek kulcsfontosságú szerepe van: ha itt zérust helyezünk el, akkor az aktuális csatornára nincs hatással a burkoló-görbe generátor. Ha ezt a bitet egyre váltjuk akkor az alsó négy bit értéke nincs hatással a hangerőre, amely a burkológörbének megfelelően alakul.

A burkológörbe-frekvencia beállítása
A kiválasztott burkolópörbe frekvenciája az R11 ás R12 regiszterekben tárolt értékekkel szabályozható. A regiszterek értéke 0-255 között lehet. Alacsonyabb értékek esetén a felfutás illetve lecsengési idő gyorsabb, magasabb értékeknél pedig lassabb lesz.

A burkológörbe hullámformájának kiválasztása:
Egyidőben csatornánként különböző hullámformákat nem tudunk beállítani. A burkológörbe-generátor a beállított hullámformát csak arra a csatornára tudja beállítani, amelyiknek hangerő-regiszterében (R8 R9, R10) a negyedik bit értéke nem zérus. Ellenkeze esetben a hang állandó amplitúdójú lesz.
A hullámforma az R13 regiszter alsó 4 bitjének segítségével szelektálható. A beállítható hullámformák a következő ábrán láthatók:

R13
 
B3
B2
B1
B0
1
0
0
0
1
0
0
1
1
0
1
0
1
0
1
1
1
1
0
0
1
1
0
1
1
1
1
0
1
1
1
1

A lecsengés-felfutás elméleti diagramja a következőképpen néz ki:

Ahhoz, hogy megszólaltassuk a hanggenerátort, először is ki kell nyitni a kimeneti csatornákat. Ha tiszta hangot akarunk, ki kell kapcsolni a zajt (R7 = 56). Válasszunk mind a három csatornára közepes hangerő-értéket (R8-R10 = 8), majd adjunk tetszőleges értéket a hangmagasságoknak (R0, R2, R4). A mintaprogram a következőképpen néz ki:

10 OUT 65533,7: OUT 49149,56
20 OUT 65533,8: OUT 49149,8
30 OUT 65533,9: OUT 49149,8
40 OUT 65533,10: OUT 49149,8
50 OUT 65533,0: OUT 49149,200
60 OUT 65533,2: OUT 49149,133
70 OUT 65533,4: OUT 49149,103

Futtatás után azt tapasztaljuk, hogy a három hang megszólal, de elég hamisan. Szólaltassunk meg egy szép dó-mi-szó (C-E-G) hangzást a 4. oktávban. Előbbi programunkat módosítsuk az 50. sortól kezdve:

50 OUT 65533,0: OUT 49149,144
55 OUT 65533,1: OUT 49149,2
60 OUT 65533,2: OUT 49149,8
65 OUT 65533,3: OUT 49149,2
70 OUT 65533,4: OUT 49149,182
75 OUT 65533,4: OUT 49149,1

Futtassuk ismét a programot és azt, tapasztaljuk, hogy a hangok konszonánsak egymáshoz illenek.
Nullázzuk ki a hanggenerátor regisztereit, majd NEW paranccsal töröljük a programot is. A következő mintaprogram a csilingelő harangok vagy az üvegpoharak hangjára emlékeztető hangot szólaltat meg:

10 OUT 65533,0: OUT 49149,200
20 OUT 65533,1: OUT 49149,1
30 OUT 65533,2: OUT 49149,130
40 OUT 65533,4: OUT 49149,60
50 OUT 65533,7: OUT 49149,56
60 OUT 65533,8: OUT 49149,16
70 OUT 65533,9: OUT 49149,16
80 OUT 65533,10: OUT 49149,16
90 OUT 65533,12: OUT 49149,50
100 OUT 65533,13: OUT 49149,8

Most módosítsuk a következő sorokat, hogy egy pisztolylövéshez hasonlító hang szólaljon meg:

50 OUT 65533,7: OUT 49149,7
90 OUT 65533,12: OUT 49149,7
100 OUT 65533,13: OUT 49149,9
110 PAUSE 0: GO TO 10

A 110. sor jelentősége abban áll, hogy ha folyamatosan lenyomva tartunk egy billentyűt, egy gépfegyver zaját szimulálhatjuk.
Újabb módosításokkal a programunk egy közeledő gőzmozdony hangját produkálja:

1 LET A=31
10 OUT 65533,0: OUT 49149,200
20 OUT 65533,1: OUT 49149,7
30 OUT 65533,2: OUT 49149,130
35 OUT 65533,3: OUT 49149,7
40 OUT 65533,4: OUT 49149,60
50 OUT 65533,7: OUT 49149,31
60 OUT 65533,8: OUT 49149,16
70 OUT 65533,9: OUT 49149,16
80 OUT 65533,10: OUT 49149,16
85 OUT 65533,6: OUT 49149,INT A
90 OUT 65533,12: OUT 49149,12
100 OUT 65533,13: OUT 49149,9
105 LET A=A-0.1: lF A< 1 THEN STOP
110 FOR I=1 TO 10: NEXT 1: GO TO 10

Két csatornán szólaltassunk meg egymástól eltérő magasságú hangokat, a harmadikon pedig egy dobgép alapot. Ehhez a következő program futtatása szükséges:

10 OUT 65533,0: OUT 49149,36: OUT 65533,1: OUT 49149,1
20 OUT 65533,2: OUT 49149,32: OUT 65533,3: OUT 49149,9
30 OUT 65533,4: OUT 49149,144:OUT 65533,5: OUT 49149,4
40 OUT 65533,7: OUT 49149,56
50 OUT 65533,8: OUT 49149,12
60 OUT 65533,9: OUT 49149,11
70 OUT 65533,10: OUT 49149,16
80 OUT 65533,12: OUT 49149,5
90 OUT 65533,13: OUT 49149,8

Az alábbi program a véletlenszám-generátor felhasználásával szemléltet érdekes hatást:

10 OUT 65533,7: OUT 49149,56
20 OUT 65533,8: OUT 49149,INT (RND*15)
30 OUT 65533,9: OUT 49149,INT (RND*15)
40 OUT 65533,10: OUT 49149,INT (RND*15)
50 LET A=INT (RND*255): LET B=INT (RND*15)
60 LET C=INT (RND*255): LET D=INT (RND*15)
70 LET E=INT (RND*255): LET F=INT (RND*15)
80 OUT 65533,0: OUT 49149,A: OUT 65533,1: OUT 49149,B
90 OUT 65533,2: OUT 49149,C: OUT 65533,3: OUT 49149,D
100 OUT 65533,4: OUT 49149,E: OUT 65533,5: OUT 49149,F
110 GO TO 20

Mindezek után elérkezett az ideje, hogy valamilyen felismerhető dallamot is eljátsszunk. Használjuk ki a három csatornát, s egy ismert dallamot játsszunk el kánonban, vagyis az azonos - de különböző oktávon - megszólaló dallamok egymás után folyamatosan lépnek be, így igen érdekes hatást érünk el. A vezérlő szakasz a 10-50 sorok között lett elhelyezve, a 100. sortól találjuk az adatokat.

10 READ a
20 IF a=16 THEN OUT 65533,7: OUT 49149,63: STOP
30 IF a>16 AND a<21 THEN LET a=a-16: PAUSE 40/a: GO TO 10
40 READ b
50 OUT 65533,a: OUT 49149,b: GO TO 10
100 DATA 7,56,8,15,9,15,10,15
110 DATA 0,235,1,1,18,0,182,1,1,18,0,134,1,1,18,0,235,1,1,18
115 DATA 0,235,1,1,18,0,182,1,1,18,0,134,1,1,18,0,235,1,1,18
120 DATA 0,134,1,1,2,214,3,3,18,0,112,1,1,2,107,3,3,18,0,72,1,1,2,12,3,3,18,2,214,3,3,18
125 DATA 0,134,1,1,2,214,3,3,18,0,112,1,1,2,107,3,3,18,0,72,1,1,2,12,3,3,18,2,214,3,3,18
130 DATA 0,72,1,1,2,12,3,3,4,246,5,0,20,0,36,1,1,20,0,72,1,1,2,224,3,2,4,219,5,0,20,0, 112,1,1,20,0,134,1,1,2,144,3,2,4,195,5,0,18,0,235,1,1,4,246,5,0,18
135 DATA 0,72,1,1,2,12,3,3,4,246,5,0,20,0,36,1,1,20,0,72,1,1,2,224,3,2,4,219,5,0,20,0, 112,1,1,20,0,134,1,1,2,144,3,2,4,195,5,0,18,0,235,1,1,4,246,5,0,18
140 DATA 0,235,1,1,2,144,3,2,4,195,5,0,20,2,72,3,2,20,0,144,1,2,2,144,3,2,4,184,5,0,20, 2,224,3,2,20,0,235,1,1,2,12,3,3,4,164,5,0,18,2,214,3,3,18
145 DATA 0,235,1,1,2,144,3,2,4,195,5,0,20,2,72,3,2,20,0,144,1,2,2,144,3,2,4,184,5,0,20, 2,224,3,2,20,0,235,1,1,2,12,3,3,4,164,5,0,18,2,214,3,3,18

150 DATA 0,0,1,0,2,214,3,3,4,164,5,0,20,4,146,5,0,20,2,31,3,5,4,164,5,0,20,4,184,5,0, 20,2,214,3,3,4,195,5,0,18,4,246,5,0,18
155 DATA 0,0,1,0,2,214,3,3,4,164,5,0,20,4,146,5,0,20,2,31,3,5,4,164,5,0,20,4,184,5,0, 20,2,214,3,3,4,195,5,0,18,4,246,5,0,18
160 DATA 2,0,3,0,4,246,5,0,18,4,72,5,1,18,4,246,5,0,17
165 DATA 2,0,3,0,4,246,5,0,18,4,72,5,1,18,4,246,5,0,17
170 DATA 4,0,5,0,16

Az adatokat könnyen elgépelhetjük, így végezzük el a következő ellenőrzést:

LET z=0: FOR i=0 TO 470: READ a: LET z= z+a: NEXT i: PRINT z

Ha az eredményünk 17240, úgy minden rendben van, máskülönben nem árt ellenőrizni a listát! Attól persze nem kell félni, hogy 'elszáll' a program, csak itt-ott hamis hangokat fogunk hallani.
Bizonyára mindenkinek elnyeri tetszését a muzsika, de hogy állt össze az utolsónak közölt DATA sor? Nos a három szólamú zene elkészítésének folyamatát szemléljük végig egy rövid mintapéldán keresztül.
Előnyös kottáról dolgozni:

Nem célunk az általános kottaelméletről bővebben beszélni, de a legfontosabb dolgokra felhívjuk a figyelmet. Az itt látható kottasor elején egy 'violin-kulcs' látható, vagyis a 'C' hang a kottán megjelölt helyről indul. Figyelni kell, hogy látunk-e előjelzést a kulcs után. Kettőskereszt esetén egy fél hanggal feljebb, 'b' előjelzés esetén pedig egy fél hanggal lejjebb kerül az a hang amelyikre az előjelzés utal. A minta kottában három kettőskeresztet
látunk, ezek a 'C', 'F' és 'G' hangokat viszik fel egy fél hanggal feljebb mindenhol, kivétel ha a három hang bármelyike előtt feloldójelet nem találunk Ez hasonló mint a kettőskereszt, de jobb felső és bal alsó szára hiányzik. Ezután meg kell vizsgálni azt, hogy milyen hangjegyek szerepelnek a kottában. Itt pl. negyed, nyolcad és tizenhatod hangjegyeket látunk, vagyis 1:2:4 arányú időtagokat kell majd a programunkban elhelyezni. Ez azért lényeges, mert mi nem azt adjuk meg, hogy egy hang milyen hosszú ideig szóljon, hanem bekapcsoljuk a hangot, és egy fix időtag eltelte után hangmagasságot váltunk, vagy kikapcsoljuk azt.
A következő lépés a vonaldiagram elkészítése.

Ebben egymás alatt ábrázoljuk a három csatornát, valamint arányos léptékkel az időtagokat. A vonaldiagram alapján az adatsor könnyen elkészíthető, hiszen egy tizenhatod időtagot 20-szal, a nyolcadot 18-cal, míg a negyedet 17-tel jelöljük, az arányos szünetet a már ismertetett programban látható 30. sor fogja előállítani.
Ha felépültek az egyes vonalszakaszok, a kotta alapján mellé írjuk az összetartozó hangmagasságokat is. Amennyiben a három csatornát különböző oktávon akarjuk megszólaltatni, úgy célszerű a hangok mellé az oktáv számát is beírni. A közölt táblázatból kikereshetjük az összetartozó értékpárokat, ezt is érdemes felírni a vonaldiagramra. Ha a vonaldiagram elkészült kialakíthatjuk az adatsort. Kis mintapéldánk adatsora így a következőképpen alakul:

DATA 0,232,1,0,2,36,3,1,4,72,5,2,20,2,134,3,1,20,2,36,3,1,20,2,232,3,0,20,0, 232,1,0,2,36,3,1,20,2,134,3,1,20,0,195,1,0,2,36,3,1,4,72,5,2,20,2,134,3,1, 20,2,36,3,1,20,0,206,1,0,2,134,3,1,20,0,232,1,0,2,36,3,1,20,2,134,3,1

Természetesen a DATA sort mindenképpen a csatornák megnyitásával, hangerő beállításával stb. kell kezdeni (ld. program 100. sora), ill. a csatornák kikapcsolásával kelt befejezni (16-os kód).
Mindezek után igazán megérdemlünk egy szép zenét! A következő program (CSENDES.TAP) a "Stille Nacht" (Csendes Éj) c. karácsonyi dalt játssza le egyéni feldolgozásban.

A program futása során megfigyelhetjük, hogy egy ütemen belül minél több kapcsolást végzünk el, annál jobban lelassul a program futása. Ez sajnos a BASIC nyelv gyorsaságának köszönhető, természetesen a megoldás a gépi kódú változat megírásában rejlik. Sokan megijednek, amikor elővesszük a gépi kódot, pedig eddig még csak az alapokat ismertük meg a hanggenerátor programozásához, természetesen eddigi ismereteinket már előnyösen kamatoztathatjuk a továbbiakban.
Vágjunk tehát bele: ne ijedjünk meg, nem lesz ez olyan nehéz, meglátjuk megéri. Az előző mintazenénk vezérfonalán kússzunk tovább. Csak a vezérlő szakaszt kell átírnunk gépi kódra, a DATA sorok könnyen átolvashatók a memória bármely területére. A gépi kódú vezérlő programot a 30000. címtől helyezzük el, hossza 100 byte. Az assembly lista - mely egyénenként változó módon bevihető a memóriába - a következő:

30000
30003
30004
30005
30007
30009
30011
30013
30014
30015
30017
30019
30021
30023
30024
30025
30027
30029
30031
30033
30034
30035
30037
30039
30041
30044
30046
30048
30051
30053
30054
30055
30058
30060
30061
30062
30065
30067
30069
30072
30074
30076
30079
30081
30082
30084
30086
30088
30090
30092
30094
30097
30099
30101
30104
30106
30107
30108
30109
30111
30112
30113
30114
30115
30117
30118
30120
30121
   33, 172, 117
126
245
238, 17
32, 4
6, 240
24, 94
241
245
238, 18
32, 4
6, 120
24, 84
241
245
238, 20
32, 4
6, 60
24, 74
241
245
238, 16
32, 15
62, 7
1, 253, 255
237, 121
62, 63
1, 253, 191
237, 121
201
241
1, 253, 255
237, 121
35
126
1, 253, 191
237, 121
62, 13
1, 253, 255
237, 121
62, 9
1, 253, 191
237, 121
35
62, 127
219, 254
230, 31
254, 30
32, 167
62, 7
1, 253, 255
237, 121
62, 63
1, 253, 191
237, 121
201
241
197
6, 0
245
241
245
241
16, 250
193
16, 244
35
195, 57, 117
LD HL,30124
LD A,(HL)
PUSH AF
XOR 17
JR NZ,30013
LD B,240
JR 30107
POP AF
PUSH AF
XOR 18
JR NZ,30023
LD B,120
JR 30107
POP AF
PUSH AF
XOR 20
JR NZ,30033
LD B,60
JR 30107
POP AF
PUSH AF
XOR 16
JR NZ,30054
LD A,7
LD BC,65533
OUT (C),A
LD A,63
LD BC,49149
OUT (C),A
RET
POP AF
LD BC,65533
OUT (C),A
INC HL
LD A,(HL)
LD BC,49149
OUT (C),A
LD A,13
LD BC,35533
OUT (C),A
LD A,9
LD BC,49149
OUT (C),A
INC HL
LD A,127
IN A,(254)
AND 31
CP 30
JR NZ,30003
LD A,7
LD BC,65533
OUT (C),A
LD A,63
LD BC,49149
OUT (C),A
RET
POP AF
PUSH BC
LD B,0
PUSH AF
POP AF
PUSH AF
POP AF
DJNZ 30111
POP BC
DJNZ 30108
INC HL
JP 30003
; HL-ben tároljuk az adatok kezdőcímét
; a soron következő adat vizsgálata
; Az adatot eltesszük a verembe
; 17-es időzítési konstans?
; ha nem, ugrás tovább
; külső időzítési ciklus indítása
; ugrás az időzítő rutinra
; visszaolvassuk az adatot
; és ismét eltesszük a verembe
; 18-as időzítési konstans?
; ha nem, ugrás tovább
; külső időzítési ciklus beállítása
; ugrás az időzítő rutinra
; visszaolvassuk az adatot
; és ismét letesszük a verembe
; 20-as időzítési konstans?
; ha nem, ugrás tovább
; külső időzítési ciklus beállítása

; visszaolvassuk az adatot
; és ismét eltesszük a verembe
; adatmező vége?
; ha nem, ugrás tovább
; kimeneti csatornák lezárása





; zene vége
; az adat a kijelölt regiszter számát
; tartalmazza, a regisztert meghívjuk

; az adatmutatót növeljük
; beolvassuk a következő adatot

; és beírjuk a megfelelő regiszterbe
; burkológörbe-alak kiválasztása





; az adatmutatót továbbléptetjük
; SPACE megnyomására a kimeneti
; csatornákat lezárjuk és kilépünk
; a rutinból

; egyébként ugrás vissza az új adat
; vizsgálatához






; páros PUSH/POP biztosítása
; A külső ciklus értékét kimentjük a
; verembe és betöltjük a ciklus
; értékét, ezután 4 önmagában jelen-
; téktelen veremművelet következik
; ezek ciklikus végrehajtása.
; eredményezi az időtagot.
; belső ciklus.
; a külső ciklus értékének visszaírása
; külső ciklus
; az adatmutató tovább lép
; ugrás vissza a következő
; adatvizsgálathoz

Ez a gépi kódú rutin bármilyen, az előzőekben megismert adatsor lejátszására alkalmas. Az adatsor kezdőcíme a 30124. cím. Próbáljuk ki, hogyan szólnak gépi kódban a dallamok. A kánon mintapéldában írjuk be a következő sort:

90 FOR i=30124 TO 30594: READ a: POKE i,a: NEXT i

Futtassuk ezt a sort (RUN 90), és ha a gépi kódú rutin (30000-30123) is a memóriában van, bátran adjuk ki:

RANDOMIZE USR 30000 (ENTER)

A rutinból a SPACE billentyű megnyomásával bármikor kiléphetünk.
Ha összehasonlítjuk a BASIC és a gépi kódú verziót, megállapíthatjuk, hogy ez utóbbiban minden hang a helyén van, nem jelentkeznek a BASIC lassúságából eredő elcsúszások, késések. Sőt, a gépi kód felhasználása lehetőséget ad az ütemek finomítására is. Most 3 időtag kapott helyet a programban: a 30010. címen 240-et, a 30020. címen 120-at, míg a 30030. címen 60-at helyeztünk el. Írjunk most ezekre a címekre sorban 40-et, 20-at és 10-et, majd futtassuk ismét a rutint (RANDOMIZE USR 30000), meglátjuk jelentősen felgyorsítottuk a zene lejátszását.
Az elmúlt alkalmak során ismertetett módszer felhasználásával saját dallamokat is komponálhatunk, pl. kotta felhasználásával, majd az így elkészült adatsort fűzzük be a 30124. címtől, és futtassuk saját programunkat is. Egyet ne felejtsünk el, az adatsornak mindig 16-os adatbyte-tal kell záródnia, ezzel azonosítja a rutin is a zene végét.

Vissza