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
Programozástechnika
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
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. |
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.
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.
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 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.
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.
Példák: 1. Elektropotenciális csúcs
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
3. Félgömb
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):
ahol "a" és "b" tetszőleges érték. Lehet próbálkozni. |
|
Egy 3D kép alapvetően 3D koordinátarendszerben építhető fel. A 3D tárgynak egyidőben látszik hosszúsága, szélessége és a magassága is. A képernyőn, úgy mint a fényképeken, csak két dimenzió létezik, de lehetőség van egyszerű programozástechnikai fogásokkal szimulálni a 3D képet a 2D képernyőn.
Először is azt kell ismerni, hogyan reprezentálunk egy képet három dimenzióban. Vegyünk elő egy papírt, rajzoljunk rá egy két tengelyből álló x-y koordináta rendszert, de úgy, hogy az origó a papír bal alsó sarkába essen. Az x tengely jobbra, az y pedig felfelé mutat. Ebben a koordináta rendszerben minden egyes pont két koordinátával írható le (x,y). Ez gyakorlatilag a kétdimenziós koordináta geometria. A Spectrum PLOT utasítása is ennek megfelelően működik. Most vezessük be a harmadik tengelyt, mely úgyszintén az előbbi origóból indul ki, de jelen esetben csak egy pontnak látszik, és iránya a papír síkja felé mutat. Ez a tengely a z tengely. A 3D kép megmutatása a koordináta rendszer jelenlegi állásában nehézkes, így a látószöget általában átállítjuk, vagy úgy is mondhatjuk, a 3D koordináta rendszert térben elforgatjuk. A számítógépes gyakorlatban a 3D ábrázolás számos módszere ismert, most csak a fontosabb perspektívákat tekintjük itt át:
Izometrikus (éltartó) perspektíva:
Ebben az ábrázolási módban az egymástól 120 fokban elhelyezkedő tengelyekre valóságos méreteket mérünk fel, perspektivikus rövidülés, torzulás nincs.
Axonometrikus (területtartó) perspektíva:
Ebben az ábrázolási módban a két egymásra merőleges koordináta tengely által határolt terület a 2D képnek megfelelő, ezért területtartó, a harmadik tengely ezektől 135 fokra helyezkedik el, és a valóságos méret felét mérjük fel rá.
Iránypont perspektíva:
Ebben az ábrázolási módban egy térben kijelölt ponthoz igazodik a teljes perspektíva.
A 3D koordináta rendszerben már minden egyes pont három koordinátával írható le (x,y,z).
Példánk további részét tekintsük meg az izometrikus ábrázolás szabályainak megfelelően, a koordináta rendszert pedig forgassuk el 180 fokkal. A koordináta rendszerbe vázoljunk egy szabályos kockát, amelynek minden oldala 10 egységnyi:
A kocka egyik csúcspontja az origóba esik, innen pedig minden főtengely irányába 10 egység kiterjedésű.
Példánkban a testet a következő pontok írják le:
P1(0,0,0) P2(10,0,0) P3(0,10,0) P4(10,10,0) P5(0,0,10) P6(10,0,10) P7(0,10,10) P8(10,10,10)
Két dimenzióban nincs lehetőség ezekkel a koordináta értékekkel felrajzolni a 3D pontokat, ezért szükség van egy segédprogramra, amely a 3D pontokat átkonvertálja 2D pontokká, szimulálva ezzel a 3D képet.
Ismernünk kell azt is, hogy a test milyen pontok kapcsolatából épül fel, vagyis azt, hogy melyik pontokat kell összekötni egymással, a test kialakításához. Térjünk vissza ismét a már megismert példára. Minden csúcspontot elneveztünk egy P betűből és egy számból álló azonosítóval (P1-P8), ugyanezt tettük az élekkel is, itt az elnevezés egy L betű és egy szám (L1-L12).
Készítsük el a 3D-2D konvertáló programot, amely BASIC-ben is megoldható:
10 DIM P(8,3)
20 DIM L(12,2)
30 FOR I=0 TO 1
40 FOR J=0 TO 1
50 FOR K=0 TO 1
60 LET P(4*I+2*J+K+1,1)=10*K
70 LET P(4*I+2*J+K+1,2)=10*J
80 LET P(4*I+2*J+K+1,3)=10*I
90 NEXT K
100 NEXT J
110 NEXT I
120 FOR I=1 TO 12
130 FOR J=1 TO 2
140 READ L(I,J)
150 NEXT J
160 NEXT I
170 DATA 1,2,2,4,4,3,3,1
180 DATA 5,6,6,8,8,7,7,5
190 DATA 1,5,2,6,4,8,3,7
200 FOR I=1 TO 12
210 LET A=1: GO SUB 500
220 LET P1=5*P+128
230 LET Q1=5*Q+88
240 PLOT P1,Q1
250 LET A=2: GO SUB 500
260 DRAW 5*P+128-P1,5*Q+88-Q1
270 NEXT I
280 STOP
500 LET A=L(I,A)
510 LET X=P(A,1)
520 LET Y=P(A,2)
530 LET Z=P(A,3)
540 LET P=SQR(3)*(Y-X)/2
550 LET Q=Z-(Y+X)/2
560 RETURN
A 10. sorban dimenzionálunk egy tömböt, amely majd a csúcspontok koordinátáit fogja tartalmazni (8 csúcspont - 3 koordináta érték). A 20. sorban az éleknek biztosítunk egy tömböt (12 él - 2 pont között). A 30.-110. sorok inicializálják a P() tömböt, maid megtörténik a 10 egységnyi kocka csúcspont adatainak a tárolása. A 120-190. sorok az L() tömböt töltik be a megfelelő adatokkal. Itt megjegyeznénk, hogy erre a célra a legegyszerűbb megoldás a DATA sorok vagy az INPUT alkalmazása.
Ezt követi a program szíve, a kocka felrajzolása.
Feltételezünk egy pontot a 3D koordináta rendszerben (x,y,z), hozzárendelünk egy pozíciót a képernyőről (p,q), amelyet a PLOT utasítás mellé megadhatunk. Ezután már csak egy reális számítási mechanizmust kell kidolgoznunk, amely az x,y,z koordinátákat átkonvertálja érvényes p,q pozíciókká.
A 3D koordináta rendszer 2D-ra való átkonvertálására számos módszer ismeretes, most itt csak egy megoldás alapelvét ismertetjük, az izometrikus perspektíváét. A módszerben két alapképlet szükséges p és q meghatározásához:
LET P=SQR(3)*(Y-X)/2
LET Q=Z-(Y+X)/2
Azok részére, akik egy kicsit szeretnék gyakorolni a gépi kódú programozást, javasoljuk a számítási mechanizmus gépi kódú megfelelőjének áttekintését és alkalmazását:
40000
40003
40004
40006
40007
40008
40009
40010
40011
40014
40015
40016
40018
40020
40023
40025
40028
40030
40033
40036
40037
40040
40043
40044
40045
40050
40051
40052
40053
40054
40055
40057
40060
40063
40064
40065
40066
40067
40068
40069
40071
40074
40076
40077
40080
40083
40084
40085
40086
40087
40088
40091
40094
40095
40098
4010042,75,92
126
230,127
55
200
185
200
197
205,184,25
235
193
24,241
14,122
205,94,156
14,121
205,94,156
14,120
205,64,156
218,202,27
35
195,180,51
205,87,156
239
3
52,64,173,0,3
40
4
162
4
56
14,112
205,135,156
205,82,156
239
15
162
4
3
56
14,113
205,64,156
48,10
197
1,6,0
205,82,22
35
193
113
35
229
205,191,53
34,101,92
209
1,5,0
237,176
201LD HL,(23627)
LD A,(HL)
AND 127
SCF
RET Z
CP C
RET Z
PUSH BC
CALL 6584
EX DE,HL
POP BC
JR 40003
LD C,122
CALL 40030
LD C,121
CALL 40030
LD C,120
CALL 40000
JP C,7114
INC HL
JP 13236
CALL 40023
RST 40
DEFB=SUBTRACT
DEFB=STK.DATA
DEFB=SQR
DEFB=MULTIPLY
DEFB=CONST.HALF
DEFB=MULTIPLY
DEFB=ENDCALC
LD C,112
CALL 70071
CALL 40018
RST 40
DEFB=ADD
DEFB=CONST.HALF
DEFB=MULTIPLY
DEFB=SUBTRACT
DEFB=ENDCALC
LD C,113
CALL 40000
JR NC,40086
PUSH BC
LD BC,0
CALL 5717
INC HL
POP BC
LD (HL),C
INC HL
PUSH HL
CALL 13759
LD (23653),HL
POP DE
LD BC,5
LDIR
RET
; HL-ben a változóterület mutatója
; A = a következő változó byte
; A 7. bit fölösleges
; Visszatérés, ha a változót nem találta
; Visszatérés, ha a változót nem találta
; A keresett változónév tárolása
; ROM 19B8 hívása - DE-ben a következő
; változó mutatója
; A mutatót HL veszi fel
; C-ben a változónév kódja
; Ugrás vissza, keresés tovább
; A "z" változó kódja
; Ugrás a kereső szubrutinra
; Az "y" változó kódja
; Ugrás a kereső szubrutinra
; Az "x" változó kódja
; Keresés
; ROM 1C2E hívása - hibaözenet, ha
; nem találja a változót
; HL - változótartalom mutató
; ROM 33B4 hívása - változótartalom a
; kalkulátor verembe, majd visszatérés
; Y és X a kalkulátor veremben
; A verem tetején: Y,X
; Y-X
; Y-X,3
; Y-X,SQR(3)
; SQR(3)*(Y-X)
; SQR(3)*(Y-X),1/2
; SQR(3)*(Y-X)/2
; Műveletek vége
; A "p" változó kódja
; LET P=SQR(3)*(Y-X)/2
; z,y,x a kalkulátor veremben
; A veren tetején: Z,Y,X
; Z,Y+X
; Z,Y+X,1/2
; Z,(Y+X)/2
; Z-(Y+X)/2
; Műveletek vége
; A "q" változó kódja
; A változó keresése
; Ugrás, ha létezik
; A változó kódjának tárolása
; Helybiztosítás a
; változónak (ROM 1655 HEX)
; HL - új hely mutatója
; C - változónév kódja
; Tárolás
; HL - változótartalom
; Tárolás
; ROM 35BF hívása - HL-ben a verem
; utolsó elemének a címe
; Az elem törlése
; DE - változó tartalma
; Hossz beállítása
; A szám bemásolása a változóba
; Visszatérés
Ha vállalkozunk a gépi kódú rutin értelmezésére és bevitelére, a Basic programunkat módosítsuk. Töröljük az 540. és az 550. programsorokat, majd gépeljük be:
540 RANDOMIZE USR 40040
A gépi kódú rutin a megadott x, y, z koordináták alapján kiszámítja a p, q értékpárokat, és ezeknek megfelelően generál változót a változóterületen. Ezután már a BASIC program probléma nélkül el tudja végezni a pontok kijelölését. Természetesen merészebbek a teljes programot átírhatják gépi kóddá.
Ha programunkban megváltoztatjuk a 60.-80. programsorokat, pl. 6*K, 14*J, 17*I-re, nem kockát, hanem téglatestet kapunk eredményül. Próbáljuk meg megváltoztatni a koordináta értékeket és ismét nézzük meg az eredményt.
Az itt ismertetett mintapélda igen egyszerű és a kép felrajzolásán túl másra nem is képes.
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ő.
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!
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,5Futtassuk 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,2053610 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.
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!
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.
'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? SAM Computers Ltd Az új cég programjából:
Milyen software áll SAM-ünk előtt? LERM Software, 11 Beaconsfield Close, Az ősz elején startolt a gépre egy Desk-Top Publishing programcsomag is.
É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 INDUG, Format Publications SAM Hotline telefonvonal |
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
C91, 253, 127
62, 23
237, 121
201LD 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.
3,5 mm jack aljzat |
Aljzat: amerikai telefon-szabvány
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
8 pólosú tuchle aljzat
|
D9
|
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.
|
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:
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.
Az 'U' bekapcsolja az effektet, a 'W' szelektálja a hullámformát, de látunk egy új jelölést is: 'X1000'
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: |
Í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
201LD 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 |
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 |
8 |
C Cisz D Disz E F Fisz G Gisz A Aisz H |
2093.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ásaB1 0 - 'B' csatorna tiszta hang engedélyezése
1 - 'B' csatorna tiszta hang letiltásaB2 0 - 'C' csatorna tiszta hang engedélyezése
1 - 'C' csatorna tiszta hang letiltásaB3 0 - 'A' csatorna zaj engedélyezése
1 - 'A' csatorna zaj letiltásaB4 0 - 'B' csatorna zaj engedélyezése
1 - 'B' csatorna zaj letiltásaB5 0 - 'C' csatorna zaj engedélyezése
1 - 'C' csatorna zaj letiltásaB6 0 - R14 regiszter INPUT csatorna megnyitása
1 - R14 regiszter OUTPUT csatorna megnyitásaB7 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
3012133, 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, 117LD 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.