Sie sind auf Seite 1von 110

T1

EMEDZI=ECJ
UMMEONNE ME WSEMOSIM OW UMW MWSIMUNONSOWE UMW NW MN MU WWWWWWUMMWOM MS NW WWWWIN WWWWWNWEWN EMORNMISUM USN WM OW WINMES NWISISSIU NUM W

wimmumum immumms
UMUSISSWMIUMMOWWWWWWWSWIWWWWWWWW .0 WM WOWSUMSI UWE Urn Miummommiummilmmammarmillimmommow Ems me Ammo MONEWMUMMUMWWWWWWWWWWINEMSEMWWWWWM WWII ISIM WM Mmismommasimmimmipmelignimmummammumm mum

10 milumiminimmumnimimimmemmiThiONOMilirnmprim m

m " Milli ,,----- -- isfts .--mull

7,-11011:1;
mull NUM MUM BOO US

--

mu

i.:::"

1)1lir TRICK ffi a UM _ 1 II Ili


[lei
_ 0

-i

4f-----,

-moligi

fille

mu

: -_ - .---

o.---_,- -v>-

1------

---

'

0 -

it .
:

,,

MNIN WWII UWE UMW


WIN

Iv

w NUM MAME

"

--'ii mo. m um m. mom a


MEW M WOW slim Nail : : gi

11

-- .-m 11

MUM MOW ...Ez

Wirm

:::MO --m

KisT

Plia

lb.

4 a row, milms =awal _

41116:---4

PAW'
r
111.11111M

A 0 ell1 ,4 0 ' . 0 't

mummimmormilmammommommom mmwmmwsmmmwmmrmmmms :rnilim immwm immilm imilm mime um


MUM

Programme

31s11

ss

ALLEM
DIE

^7-AARI-IF-4%ms, cipmp.urriR mx-r mial-im -rum wnwarq, mulFt zu

IMPRESSUM

H. Zoschkel DIE TRICKVISTE. TIPS UND TRICKS FUR ATARI-COMPUTER (C) 1983 by Ingenieur-BUro HARALD ZOSCHKE Kleinhartpenning 7a D-8150 HOLZKIRCHEN 2

Samtliche Rechte (auch die des auszugsweisen Nachdrucks, der Fotokopie, der Ubersetzung und der Speicherung au+ magnetischen und sonstigen InformationstrAgern) vorbehalten. Die in diesem Ouch wiedergegebenen Verfahren und Programme werden ohne RUcksicht au+ die Patentlage mitgeteilt; sie sind ausschlieOlich +Ur Amateurund Lehrzwecke bestimmt und dUrfen nicht gewerblich genutzt werden. Fur Folgen, die au+ fehlerhafte Angaben zurUckzuflihren sind, kann weder eine Garantie noch die juristische Verantwortung oder irgendeine Haftung Ubernommen werden. Dies gilt ebenfalls +Ur samtliche Nachteile wie Garantieverlust, Beschadigungen etc., die durch offnen von OriginalgerAten und deren unautorisierter Manipulation entstehen..

Fur eine Mitteilung eventueller Fehler sowie Anregungen ist der Autor jederzeit dankbar (Anschrift s.o.)

ATARI ist eingetragenes Warenzeichen von ATARI Inc., Sunnyvale, einer Division der Warner Communications.

1. Auflage 1983

I NI 1--1 dc=k

-11-

Seite Hardware-Reset-Taste fUr Atari 400/800 Einbau des Reset-Tasters in den Atari 800 Einbau des Reset-Tasters in den Atari 400 Kurze GegenUberstellung: POWER-ON- und SYSTEM-RESET Sound-Erzeugung im Atari-Computer Musik im Vertikal-Blank-Interrupt VBIMUSIC: Vierstimmiges VBI-Musikprogramm VBIDEMO: Zweistimmiges Musikprogramm Disketten-Analyse mit DISK MAP Programmschutz: Allgemeines Datenschutz Teil 1: Der Hardware-SchlUssel . Hardware-Schlassel: Schaltungstypen SchlUssel-Abfrage im Vertikal-Blank-Interrupt Datenschutz Teil 2: Verschliasselte Angaben Programm-Beispiel: Copyright-VerschlUssler Maschinenprogramm-Umwandlung in Strings HilfsprograMme dazu: Diskfile- und RAM-Version Sprachsynthesizer S.A.M. (tm) spricht deutsch _. Phonem-Tester Phonetisches S.A.M.-Alphabet (deutsch) S.A.M. im Einsatz: Das sprechende Gesicht Arbeitsblatt fUr SAM.-Graphik S.A.M.'s Blues: S.A.M. singt mit Begleitung Hex-Dump mit Sprachausgabe Schnellfeuer-Zusatz fUr,SteuerknUppel im Eigenbau Monkey Wrench II: Befehlsdbersicht Tabelle: Diskant- und Bassnoten fUr den SOUND-Befehl Beispiel mit Bass-Begleitung: Der Trickkisten-Blues Wichtige Drucker-Steuerzeichen fUr Epson und NEC Laderoutine far Bilder in GRAPHICS 7+ Programm: Kunstausstellung mit Micro-Painter-Bildern Tips, Tricks und Updates fur den ABC-BASIC-Compiler Einbauanleitung: Audio-Buchse fur Atari 400 Auf einen Buick: Hex-/Dez.-/Assembler-/Bildschirm-Codes . SteuerknUppel-Tricks: Verbessern Sie Ihren Joystick Der Zeichensatz-Tester Testprogramm als Assembler-Listing und Hex-Dump ' Page-Flipping leicht gemacht Warum brauche ich Page-Flipping") Page-Flipping-Methode 1 mit Beispielen Page-Flipping-Methode 2 mit Beispielen Tolle Sounds aus dem Konsolen-Lautsprecher Numerische Zusatz-Tastatur im Eigenbau BASIC: Erneutes "RUN" nach Dracken von <SYSTEM RESET> Buntgemixtes zum SchluB Hinweis auf die TK-Programmdiskette

5 11 16 17 28 32 36 38 43 44 45 51 53 -J,.., 56 57 59 60 61 62 66 67 69 71 67 77 77 78 79 80 81 86 89 90 92 92 95 96 98 _ 100 101 102 105 105 106

113 IFC

ILAJ C3 FR

-I-

Dieses Mich, lieber ATARI-Fan, hat einen etwas unkonventionellen Charakter. Es ist weder im Fotosatz gedruckt, noch ist es sauberlich in Kapitel unterteilt. Beides hat seine Grunde. Um den Preis fur Sie niedrig zu halten und Druckfehler in Programm-Listings zu vermeiden, erfolgte der Ausdruck mit einem Matrixdrucker. Und um Ihnen die hier prasentierten Tips und Tricks unabhangig von Interessen Dritter mitteilen zu konnen, geschah die gesamte Herstellung unter 'eigener Regie'. Zum anderen handelt es sich hier nicht um em n Lehrbuch, sondern eben um die TRICK-KISTE. Sowohl der Einsteiger als auch der Fortgeschrittene soil hier eine Menge Tips und Tricks mitgeteilt bekommen, und zwar moglichst solche, die er vorher noch nicht kannte. Sollten Sie doch das eine oder andere schon wissen, bedenken Sie bitte da0 nicht alle Atari-Besitzer dieselben Moglichkeiten haben, sich zu informieren: der eine hat vielleicht wenig Zeit, der andere wohnt in einer Gegend, in der es wenig Gleichgesinnte zum Erfahrungsaustausch gibt. Deshalb wurde versucht, +dr jeden etwas zu bieten. Wahrend der Arbeit an diesem Buch wurde auch die neue XL-Serie von Atari angekundigt. Obwohl auf diversen Ausstellungen vorgefdhrt, war es leider unmaglich, rechtzeitig vor Druckbeginn eines dieser Berate unter die Lupe zu nehmen. Da jedoch nur praktisch Erprobtes abgedruckt werden saute, wurde hier auf 'Trockendbungen' verzichtet. Grundsatzlich sollten aber die meisten hier vorgestellten Tips, Tricks und Programme auch auf den neuen Atari-Computern lauf en, so-fern sie nicht extra -mit '400/800' gekennzeichnet sind. SchlieGlich hat sich ja der Hersteller nach einigen Schwierigkeiten mit dem Modell 1200 lobenswerterweise wieder auf Kompatibilitat mit den alten (?) Geraten besonnen. Hier noch em n paar Hinweise: haben, sind Alle DRUCKFEHLER, die wir nicht gefunden 1) selbstverstandlich beabsichtigt. Denn die TRICK-KISTE soil ja fur jeden etwas bieten - auch fdr die Leute, die nur nach Fehlern suchen!. 2) Flat- ihre kameradschaftliche Unterstdtzung bedanke ich mich herzlich bei Renate Pfeifer, Manfred Kickstein, Peter Gerstner, und alien anderen, die rum Enstehen dieses Buches beigetragen haben. 3) AbschlieBend erlauben Siemir bitte, mit dem magischen Wort

die Aufmerksamkeit auch jener Leser auf diese Seite zu lenken, die em n Vorwort normalerweise ilberblattern. Durch die Herausgabe dieses Buches werde ich (hoffentlich) nicht armer; trotzdem ware es mit Sicherheit lohnender, den wesentlich groBeren englischsprachigen Markt zu bedienen. Bitte respektieren Sie mein Entgegenkommen gegendber den deutschen Atari-Benutzern, indem Sie weder die TRICK-KISTE noch die dazugehtirigen Programme vervielfaltigen. Vielen Dank!

SEX

Holzkirchen, Oktober 1983

Harald Zoschke

1-14=111W imi lREFZEET Tinr


Int T ocilFZI

.41-.01101

10

"Mein Atari-Computer hat doch bereits eine Reset-Taste!" Das wird sich bestimmt der eine oder andere beim Lesen der Oberschrift denken. Was Sie durch DrUcken von SYSTEM RESET bewirken, unterscheidet sich jedoch wesentlich von den Ma8nahmen, die das Betriebssystem beim Einschalten des Computers ergreift. Am deutlichsten merkt man dies, wenn sich der Computer 'aufgehangt' hat, und auch hartnackigstes .Attackieren der SYSTEM-RESET-Taste ihn nicht mehr zum Weiterarbeiten bewegen kann. Hier hilft dann nur noch Ausschalten und erneutes Einschalten. Denn beim Einschaltvorgang . wird stets der sogenannte POWER-ON-RESET durchgefuhrt. Dies ist die einzige Bedingung, unter der die RESET-Leitung der 6502-CPU im Atari-Computer aktiviert wird. Wie das funktioniert, zeigt der folgende Schaltungsauszug, dargestellt am Beispiel des Atari 800 (identisch beim Atari 400, dort nur andere Bauteile-Numerierung):

R154 MOM IM 27 3 RESET A103A


CD4050

R156 470k I R155 100k


C198 0,1 1: or

.P.1.5 Volt

cR102

Unser neuer

RESETTaster

Die POWER-ON-RESET-Schaltung im Atari Bee (R) Abbildung 1: Die POWER-ON-RESET-Schaltung im ATARI 800

Wird der Computer eingeschaltet, erreicht die 5-Volt-Betriebsgleichspannung des Systems kiber den Widerstand R156 den Kondensator C198. Da dieser noch ungeladen 1st, flie8t Strom hinein, soda8 die Spannung an R155 gering ist. Der nachgeschaltete Treiber A103A setzt den RESET-Eingang der CPU daher vorUbergehend auf log. 0. Damit wird der Reset-Vorgang eingeleitet, d.h. die 6502-CPU holt sich den sog. Reset-Vektor und fahrt die Initialisierungsroutine aus, auf deren Startadresse der Vektor zeigt. - Nach Auf laden des Kondensators flieSt kein Strom mehr, soda8 die Spannung wieder ansteigt und der RESET-Eingang auf log. 1 liegt.

Es gibt gute Grande dafar, diesen Vorgang durch eine Reset-Taste auszuldsen, anstatt jedesmal den Computer aus- und wieder einzuschalten: 1. Schaltet man den Rechner nach dem Ausschalten allzu schnell wieder em, sind die Kondensatoren im Netzteil noch sehr stark aufgeladen. Es kann zu Spannungsspitzen kommen, wie sie gerade far dynamische RAMs AuBerst unbekdmmlich sind. 2. Bei haufiger Benutzung ist em n frahzeitiger VerschleiB des Ein-/Ausschalters zu befarchten. Wer aber etwas Bastler-Geschick verfagt und den Hut hat, semen Computer zu dffnen, kann eine derartige Taste leicht nachrUsten. Denn alles, was wir zu tun haben, ist, den Kondensator C198 per Tastendruck kurzfristig zu aberbracken, um den Treiber - und damit den CPU-RESET-Eingang - auf log. 0 zu setzen. R154 - ansonsten Ladewiderstand f(.u- den Kondensator dient dabei als Strombegrenzer auf ca. 10 uA. Anzumerken sei jedoch, clan in seltenen Ausnahmefallen trotzdem durch Neu-Einschalten gestartet werden muB, namlich dann, wenn sich PIA, POKEY, ANTIC oder GTIA aus irgendeinem Grunde 'aufgehangt' haben.

FRISCH ANS WERK. Daraberhinaus sei an dieser Stelle auf den Garantieverlust hingewiesen, der durch Eingriffe nichtauthorisierter Personen entstehen kann (siehe Impressum). Was brauchen wir zum Einau des Reset-Tasters? An Material wird, besondes wenn man die groBe Wirkung bedenkt, erfrischend wenig beniitigt, namlich: 1) Zwei StOcke danne isolierte Litze, jeweils gut 30 cm lang, sowie etwas" LOtzinn und natarlich 2) em n einpoliger Taster (SchlieBer). Da der Taster zwischen den Laftungsschlitzen vorne unter der Gehauseunterseite montiert werden soil, empfiehlt es sich, em n moglichst kleines Modell zu nehmen. In vielen Elektronik-Shops bekommt man z.B. japanische Miniaturtaster, deren Befestigungs-Schraubgewinde einen Durchmesser von nur ca. 4,5 mm hat. Auch an Werkzeug wird nicht allzuviel benotigt: 1) Kreuzschlitzschraubenzieher zum bffnen und Zerlegen des Computers (und natarlich zum Zusammenschrauben!) 2) Latkolben, moglichst feine Spitze und Niederspannungsausfahrung. 3) Kleine Rundfeile o... zur Erweiterung des Laftungsschlitzes far die Taster-Montage. 4) Zange zum Abisolieren der Drahtenden und zum Festziehen der Befestigungsmutter far den Taster. em n groBer 5) Ganz wichtig: freier Tisch! Gefahr Wegen der Atafladung elektrostatischer sehr gefahrlicn far Atari's Innenleben - sollte er moglichst keine Kunststoffoberflache haben. Desweiteren kann es nicht schaden, wenn man sich em n paar kleine Behalter (Streichholzschachteln, Eierbecher o.a.) bereitstellt, in denen man die herausgedrehten Schrauben ablegt. Sie brauchen dann spater nicht auf dem Teppich nach ihnen zu suchen und wissen, welche Schrauben zusammengehoren.

EINBAU DES RESET-TASTERS IN DEN ATARI 800


Atari-400-Besitzer brauchen die TRICKKISTE jedoch nicht enttauscht aus der Hand zu legen: aufgrund des abweichenden Aufbaus erfolgt die Einbauanleitung +Ur den Atari 400 gleich anschlieBend. Im Bedarfsfalle also einfach em n paar Seiten weiterblattern! Um die Sache moglichst nachbausicher zu gestalten, wurde der ganze Vorgang in kleine Teilschritte zerlegt. Wenn Sie keinen Schritt auslassen, kann eigentlich garnichts schiefgehen! (Stromversorgung, Sie ALLE Steckverbindungen 1. Entfernen Schnittstelle, TV, Joystick) vom Atari 800 und stellen Sie Ihn auf Ihren (ausnahmsweise) freigeraumten Tisch. 2. offnen Sie die ROM-Modul-Klappe und nehMen Sie die ganze Abdeckung ab, indem Sie die beiden seitlichen Riegel umlegen und die Abdeckung leicht nach vorne ziehen. Entfernen Sie ALLE Module, also ROM- und RAM-Einschube, 3. Betriebssystem, sowie ggf. 80-Zeichen-Karte, RAM-Disk etc. 4. Drehen Sie den Computer um und Ibsen Sie die 5 Schrauben, mit denen die untere Gehauseschale befestigt ist (siehe Abbildung 2).

Hintere Luftungsschlitze

s 1

Op .- = E = 1 7

': ,

Spater wird hier einer der LUftungsschlitze etwas erweitert,

E.

damit der Taster hineinpasst. -

UNTER5EITE

.SCHRAuBEN (herausdrehen) OGummifUsse


Abbildung 2

5. Nehmen Sie die untere Gehauseschale ab und legen Sie sie. irgendwo hin, wo Sie nicht versehentlich drauftreten konnen. 6. Rechts vorne sehen Sie den Konsolen-Lautsprecher. Ziehen Sie den Steckverbinder ab und legen Sie auch den Lautsprecher an einen sicheren Platz. 7. Das Herz des Computers befindet sich in einem Metallgehause (die Abschirmung der Atari-Computer konnte zahlreichen anderen Herstellern als Beispiel dienen!). Entfernen Sie die untere Abdeckplatte dieses Gehauses, indem Sie zunachst die 11 dazugehorigen Schrauben losen (siehe Abbildung 3).

Netzteilplatine (hinten) Untere Metal l-Abdeckplatte

F.
E
i...J
, -

Diese TastaturBefestigungsschraube braucht MIGHT entfernt zu werden. Konsolenlautsprecher Stecker abziehen

ur

(varne) *= SCHRAUBEN (herausdrehen)

Abbildung 3: Unterseite bei abgenommenem Gehauseunterteil

8. Drehen Sie den Rest Ihres Computers nun wieder vorsichtig um. Halten Sie die 'Innereien' dabei gut fest, da sie jezt lose sind. 9. Nehmen Sie nun die obere Gehauseschale ab. Stellen Sie dazu die Riegel, mit denen die Modul-Abdeckhaube sonst festgehalten wird so, daB sie das Abheben nicht behindern. 10. Kippen Sie die Gehauseschale zu sich nach vorn. Wie Sie nun sehen, ist sie noch mit dem Tastatur-Steckverbinder mit dem Computer verbunden. Ziehen Sie diesen Steckverbinder einfach ab. Legen Sie die Gehauseoberteil-/Tastatur-Einheit ebenfalls an einen sicheren Platz. 11. Um an den gesuchten Kondensator auf der Mutterplatine zu gelangen, muB auch noch die Netzteilplatine entfernt werden. Ziehen Sie deshalb nun die Stecker 3202 und 3203 ab (siehe Abbildung 4).

fRAM-

0 --Netzteil-Platine N N 4p , --,

(Steck - j
(platze

I
10

10k RUM I

1 o-----------,* ...0". ... ...--Ii .00 -rtJ202


"MEOW

NSChrauben ,entfernen ..---,' Antennenstecker abziehenCJ203) Steckverbinder der Netzteilplatine liSsen Konsolensch.stecker liSsen

...oar

N....

c== 7 1) ..._

-Hier wird

Tastatur.s, I Steckverbinder -AflutterliSsen -- Platine unsere Litze herausgefUhrt


Abbildung 4

12. Lasen Sie die drei Schrauben, mit denen die Netzteilplatine befestigt ist. 13. Ziehen Sie die Netzteilplatine nach oben ab, aber ganz vorsichtig, da sie noch auf dem Steckverbinder 3201 steckt. 14. Wenn Sie nun das Metallgehause abheben, offenbart Ihnen Ihr Atari 800 seine letzten Geheimnisse. So sehen Sie jetzt z.B. hinter den RAM-Steckplatzen noch eine weitere Karte, namlich die CPU-Karte mit dem 6502-Mikroorozessor, ANTIK und GTIA. Im vorderen Bereich der Platine sitzen zwei weitere wichtige Vierzigbeiner, und zwar POKEY und PIA (siehe Abbildung 5).

CPUPlatine [RAM-

Steckverbinder fur Testzwecke +. ... Steckplatze fUr RAM - u-80 - Zeichen[Steck-+- Karten etc.

BetriebsSystem

[pliitze7jflOk ROM j

Modul- '''' - t L . Schichte Pokey-

,R

'

Abgleichspule Sound CLIO')

fUr

111 Iffl-, ?q/1 -..,


]

Steckverbinder zur Netzteil-Platine

PIA-1

m,

100 1 .., if
--

115ELe7z--

Joystick-Buchsen

Abbildung 5: Buick auf die Mutterplatine des Atari 800

15. Ganz in der Nahe von POKEY und PIA finden wir auch das Ziel unseres Unternehmens: den Kondensator C198, wie Abbildung 6 als vergraBerter Ausschnitt zeigt. Rechts von POKEY (A101) und unterhalb des ICs A104 (3086) befinden sich - parallel angeordnet - zehn axiale Bauteile. Das dritte von links ist unser C198 (nicht mit der links daneben befindlichen Diode verwechseln!).
16. Als nachstes werden nun die zwei Litzen an beiden Enden 2 bis 3 mm abisoliert und verzinnt. Verdrillen Sie beiden Leitungen miteinander. Dort, wo die Kontakte des C198 in die Platine fUhren, loten Sie je em n Ende der Litze an ( siehe AusschnittvergreBerung in Abbildung 6). Achtung: Lotstelle nicht zu lange erhitzen! Kontakte des verdrillten Litzenpaares .../ Mit den Anschlassen Von C198 verloten .. *. 4104 (3086) .. c1101 ... 1...... ........ ....... I 00
3.747'

..

.om .T

)" .."--

r:117:17 /i
Unser neuer ,, Reset - Taster ._ 40 .

1:PL101 C198

.41 i j Z103 Z104

Abbildung 6: vergroBerter Ausschnitt aus Abb. 5 17. An das andere Ende des Kabelpaares loten Sie : die beiden Kontakte IhresTasters. Es ist ratsam, die Lotverbindungen mit etwas Isolierband zu schUtzen. - FUhren Sie die Leitung in Abbildung 6 gezeigt heraus, damit sie spater in der linken Ecke des Matallgehauses herausgefUhrt werden kann. 18. Jetzt haben wir es schon.fast geschaf ft. Die meisten Teile konnen Sie jetzt wieder zusammensetzen. Setzen Sie zunachst das Metallgehause wieder Uber die Modulschachte und achten Sie darauf, daB ihr Taster-Kabel wie bereits erwahnt in der linken vorderen Ecke zu liegen kommt. 19. Stecken Sie nun die Netzteil-Platine auf den wieder Steckverbinder J201. Achtung: diese Art von Steckkontakten ist etwas kritisch zum ZusammenfUgen. Achten Sie darauf, daB Sie die Platine nicht versehentlich um einen Kontakt ver'setzt aufstecken und daB Sie keine AnschlUsse umbiegen!

20. Schrauben Sie die Schrauben).

Netzteilplatine

wieder

fest

(drei

21. Stecken Sie das TV-Kabel wieder an (J203). Sollten Sie als Bildschirm einen Video-Monitor benutzen, konnen Sie das Kabel natdrlich auch weglassen. - Stecken Sie auch J202 wieder auf (achten Sie auf die richtige Polaritat!). 22. Kontrollieren Sie noch einmal, oh Sie his jetzt nichts vergessen haben. Stecken Sie nun den Tastatur-Steckverbinder vorsichtig wieder an und setzen Sie das Gehauseoberteil wieder auf den Computer. Kontrollieren Sie den Schalter, der den Computer Modulfachs indem Sie einen beim . des abschaltet, kiffnen Zahnstocher oder einen kleinen Schraubenzieher in die ffnung stecken, in die spater wider der Zapfen rechts im Moduldeckel eintaucht. 23. Drehen Sie den Computer nun wieder vorsichtig um, ohne daB alles auseinanderfAllt. 24. Nehmen Sie den unteren Gehausedeckel zur Hand und schauen Sie sich noch einmal Abbildung 2 an. Erweitern Sie wie dort gezeigt sodaB das etwa in der Mitte einen der Luftungsschlitze, Monagegewinde des Tasters dazwischenpaBt. Am besten nehmen Sie dazu eine Rundfeile; not-Falls tut es auch em n Schraubenzieher mit einer 5 his 6 mm breiten Klinge. 25. Schrauben Sie nun die Metallplatte des Abschirmungsgehauses wieder fest (11 Schrauben). 26. Vergessen Sie nicht, den . Lautsprecher wieder anzustecken und in seiner alten Position unterzubringen. Am besten tun Sie es sofort! Stecken Sie nun den neuen Taster mit seinem Gewinde in den zu -diesem Zweck erweiterten Luftungsschlitz der unteren Gehauseschale - und schrauben Sie ihn mit der dazugehorigen Mutter fest (wegen der Starke der Gehausewand war bei unserem Mustergerat leider kein Platz fur eine Unterlegscheibe). 28. Bringen Sie das Gehauseunterteil in Position und schrauben Sie es wieder fest ( 5 Schrauben). 29. Drehen Sie den Computer wieder um und stecken Sie alle Einschube hinein. Achten Sie dabei auf die korrekte Anordnung ( 10k-Betriebssystem-Einschub,IMMER in den allerersten Steckplatz!). 30. Nun brauchen Sie nur noch die Modul-Abdeckhaube wieder aufzusetzen und zu verriegeln.. Fertig! Die ganze Aktion dauert etwa eine Stunde, wenn man sich Zeit laBt. Und die sollte man sich immer reichlich nehmen, wenn man semen Computer Offnet, da man in Eile allzu leicht etwas beschadigt oder beim Zusammenmontieren vergiBt.

45"

TEST - TEST - TEST Sicher wollen Sie Ihren neuen Reset-Taster nun gleich einmal ausprobieren, stimmts? Stecken Sie dazu bei AUSGESCHALTETEM Computer alle Kabel wieder an Falls vorhanden, konnen Sie nun auch Ihre Diskettenstation einschalten und eine automatisch startende Diskette (Autoboot) hineinstecken. Wenn Ste nun Ihren Computer einschalten, sollte alles wie bisher ablaufen: eine ggf. vorhandene Diskette wird geladen ('gebootet') oder BASIC - falls hineingesteckt - meldet sich mit READY. Solite der Bildschirm dunkel bleiben oder sich sonst irgendeine Storung Zeigen, schalten Sie den Computer SOFORT wieder aus und kontrollieren Ste Anordnung und korrekten Sitz aller Einschube, sowie alle Kabelverbindungen (Trafo, TV etc.). Meldet sich Ihr System - wie anzunehmen - korrekt, driicken Sie nun einmal auf Ihre neue Reset-Taste. Wie Sie sehen, ist das Ergebnis dasselbe wie beim Einschalten ('Power-Up') des Computers: eine ggf. vorhandene Diskette wird erneut geladen ('gebootet') oder BASIC - falls hineingesteckt - meldet sich wieder mit READY. Herzlichen GlUckwunsch. In Zukunft werden Sie es beim Arbeiten mit Ihrem Computer nicht nur etwas bequemer haben, sondern auch noch seine wertvolle Elektronik und semen Ein/Ausschalter schonen. WICHTIG: Denken Sie daran, dass im Unterschied zu SYSTEM RESET- bei Betatigung des CPU-Reset-Tasters stets dieselben Schritte zur System-Initialisierung ausgelost werden, wie beim Einschalten: DER GESAMTE RAM-SPEICHER WIRD 6EL6SCHT! Nachfolgend kommen wir nun zum Einbau des Reset-Tasters in den Atari 400. Um den Unterschied zwischen dl neuen Reset-Taste und SYSTEM RESET herauszustellen, erfolgt dann abschlieBend zu diesem eine Gegenuberstellung der Kapitel wichtigsten Initialisierungs-Schritte, die im einen oder anderen Fall ausgefuhrt werden.

110

EINBAU DES RESET-TASTERS IN DEN ATARI 400


Nun kommt Ihre groBe Stunde, lieber Atari-400-Besitzer: nachdem wir zunachst den Einbau des CPU-Reset-Tasters in den Atari 800 beschrieben haben, lesen Sie hier wegen des abweichenden Aufbaus die Einbauanleitung far den 400er. Grundsatzlich 1st die sogenannte POWER-ON-RESET-Schaltung beim Atari 400 genauso aufgebaut wie beim Atari 800. Lediglich die Bauteile-Bezeichnung im Schaltplan und auf der Platine 1st unterschiedlich (siehe Abbildung 7).

R181

um
1M J.-

R183 470k R162

+5 Volt CR103

RESET (CPU)

15 *--\ 14 100k AillF C189 CD4050 0,1 VT' o1-1

Unser neuer RESETTaster

Die POWER-ON - RESET-Schaltung


im Atari 400 (R)
Abbildung 7

Auch fur den Atari 400 wurde der ganze Vorgang in kleine Teilschritte zerlegt. Lassen Sie keinen Schritt aus und halten Sie sich an die Reihenfolge. Dann kann eigentlich garnichts schiefgehen! Es kann also losgehen: (Stromversorgung, Sie ALLE Steckverbindungen 1. Entfernen Schnittstelle, TV, Joystick) vom Atari 400 und stellen Sie Ihn auf Ihren (ausnahmsweise) freigeraumten Tisch. em n evtl. 2. offnen Sie die ROM-Modul-Klappe und entfernen Sie noch eingestecktes Modul. SchlieBen Sie die Klappe dann wieder. 3. Drehen Sie den Computer um und losen Sie die 4 Schrauben, mit denen die untere Gehauseschale befestigt ist (siehe Abbildung 8).

Hintere Luftungsschlitze Antennenkabell , =


I

=
LT.

74 :4

UNTERSEITE

=
0

OGummifUsse

iSCHRAUBEN (herausdrehen)

Abbildung B

Nehmen Sie die untere GehAuseschale ab und legen Sie sie 4. beiseite. Vorsicht: das Antennenkabel hAngt noch dran! 5. Rechts vorne sehen Sie den Konsolen-Lautsprecher. Ziehen Sie den Steckverbinder ab und legen Sie auch den Lautsprecher an einen sicheren Platz.

7. Das Herz des Computers befindet sich in einem MetallgehAuse.


Entfernen Sie die untere Abdeckplatte dieses Gehduses, indem Sie zunAchst die 8 dazugehbrigen Schrauben losen (siehe Abbildung 9). Unter der Metallplatte befindet sich . noch eine Pappe, die Sie spAter beim Zusammenbau nicht vergessen sollten.

Hintere LUftungs,Hier wird das schlitze des / Taster-Kabel GehSuseoberteils / herausgefuhrt


./
1 11111 III iiiiii I 110

P0
0

MetallAbdeckplatte

1 SpSter wird hier einer der Luftungsschlitze etwas erweitert, damit der Taster hineinpasst.
--

17

" Tastatur Lautsprecher

4=5CHPAUBEN (herausdrehen!)

Tastatur - Flachkabel
Abbildung

8. Nach Abnehmen der Metallplatte blicken Sie auf die Ltitseite der Mutterplatine. Um an den gesuchten Kondensator zu gelangen,

brauchen wir jedoch deren Bauteileseite. Ziehen Sie die Platine dazu aus dem Metallgehause heraus. Achten Sie darauf, dass sie auch mit der Netzteilplatine verbunden ist. Losen Sie den dazugehorigen Steckverbinder vorsichtig und achten Sie darauf, daB Sie die Steckkontakte nicht verbiegen. Andernfalls gibts Schwierigkeiten beim Zusammenbau. 9. Sehen Sie sich die Mutterplatine einmal genau an: hier offenbart Ihnen Ihr Atari 400 seine letzten Geheimnisse. So sehen Sie jetzt ganz hinten auf der Platine zwei weitere Karten, namlich die CPU-Karte mit dem 6502-Mikroprozessor, ANTIK und GTIA, sowie die 16k (bzw. 48k) RAM-Karte. Links in der Mitte auf der Platine sitzen zwei weitere wichtige Vierzigbeiner, und zwar POKEY und PIA. AuBerdem finden Sie dart drei ICs mit 24 Anschlussen. Dies sind die ROMs des 10k-Betriebssystems, namlich . 4k+4k4-2k (siehe Abbildung 10). Beim Atari 800 sind sie auf einer Extra-Karte untergebracht.

, _
. 1

Plat ine II r---1 s ROMAbilleichspule Schacht 7 777" :------' fUr Sound L101 _ ROM'E' -, Steckverbinder ROM'F' -,' -= zur Netztell PIA c..-1 Platine .ROMID 1 POKEY [7: zur =====Tastatur . Lautspr. t..., .s,Eigmg . Stecker 1 1 1 [

Hier wird das Kabel des neuen Reset-Tasters durchgefUhrt Steckverbinder . F-71c=ortmbmir-- fur Testzwecke CPUPlatine .-.. ......Siehe . RAMAD // I -.,\ Ausschnitt! 1=

1 1 r--1 F4

1-1 Fl

Joystick-Buchsen
Abbildung 10

10. Ober den groBen ICs sehen Sie den Stecksockel fur die ROM-Moduln. Rechts daneben finden wir auch das Ziel unseres Unternehmens: den Kondensator C189, wie auch Abbildung 11 als vergrOBerter Ausschnitt zeigt, Ober dem IC A111 (4050) befinden elf axiale Bauteile. Das dritte von sich - parallel angeordnet oben ist unser C189 (siehe Platinenaufdruck!). 11. Als nachstes werden nun die zwei Litzen an beiden Enden 2 bis 3 mm abisoliert und verzinnt. Verdrillen Sie beiden Leitungen miteinander. Dort, wo die Kontakte des C189 in die Platine fuhren, lten Sie je em n Ende der Litze an ( siehe Abbildung 11). Achtung: Lotstelle nicht zu lange erhitzen!

Kontakte des verdrillten Litzenpaares mit den AnschlUssen von C189 verFaten

RAM-Platine

i, / _ ........../.............. ..em , / ,...... N 7/ .4=1..


-

Unser neuer i tui l 4T21.-1 Reset-Taster ) I (4050) ,

< /

-C=-

-C=1.C=1. ei=h.4=1.

Abbildung 11

12. An das andere Ende des Kabelpaares laten Sie die beiden Kontakte Ihres Tasters. Es ist ratsam, die Lotverbindungen mit etwas Isolierband zu schutzen. Verlegen Sie die Leitung wie in Abbildung11 gezeigt so, dass sie spater durch die gekennzeichnete Aussparung der Metallabdeckplatte herausgefuhrt werden kann. 13. Jetzt haben wir es schon fast geschafft: Sie konnen die Mutterplatine nun wieder vorsichtig in das Metallgehause einsetzen. Achten Sie darauf, daB Ihr Taster-Kabel korrekt zu liegen kommt, und daB Sie den Steckverbinder zur Netzteilplatine wieder richtig aufstecken, sowie auf den Sitz der' ROM-Modul-Fidhrung. 14. Legen Sie nun die Metall-Abdeckplatte (mit der Pappe darunter) wieder auf das Abschirmgehause. Fuhren Sie das Kabel Ihres neuen Tasters durch die rechte obere Aussparung in der Platte. Die Aussparung ist weit genug, um noch Platz fur die Durchfiihrung des Kabels zu bieten. 15. Schrauben Sie nun die Metallplatte des Abschirmungsgehauses wieder fest (8 Schrauben). 23. Schauen Sie sich noch einmal Abbildung 2 an. Erweitern Sie wie dort gezeigt etwa in der Mitte einen der hinteren Luftungsschlitzi sodaB das Morkagegewinde des Tasters dazwischenpaft. Am besten nehmen Sie dazu eine Rundfeile; notfalls tut es auch emn Schraubenzieher nit einer 5 bis 6 mm breiten Klinge. 26. Vergessen Sie nicht, den Lautsprecher wieder anzustecken und in seiner alten Position unterzubringen. Am besten tun Sie es so-fort! 27. Stecken Sie nun den neuen Taster mit seinem Gewinde in den zu diesem Zweck erweiterten LLftungsschlitz an der GehauserUckseite. Schrauben Sie ihn mit der dazugehorigen Mutter fest (wegen der Starke der Gehausewand war bei unserem Mustergerat leider kein Platz fur eine Unterlegscheibe). 1

Air

20. Legen Sie das Gehauseunterteil auf und schrauben Sie es wieder fest ( 4 Schrauben). Damit das Unterteil paf3t, mUssen Sie dabei auf sorgfaltiges Verlegen des Antennenkabels innerhalb des Gehauses achten. Auch die korrekte Lage des Lautsprechers sollten Sie aus diesem Grunde im Auge behalten. 29. Drehen Sie den Computer wieder um und stecken Sie bei Bedarf z.B. BASIC hinein. Fertig! Die ganze Aktion dauert etwa eine Stunde, wenn man sich Zeit laBt. Und die sollte man sich immer reichlich nehmen, wenn man semen Computer off net, da man in Eile allzu leicht etwas beschadigt oder beim Zusammenmontieren vergiBt. TEST - TEST - TEST Sicher wollen Sie Ihren neuen Reset-Taster nun gleich einmal ausprobieren, stimmts? Stecken Sie dazu bei AUSGESCHALTETEM Computer alle . Kabel wieder an. Falls vorhanden, konnen Sie nun auch Ihre Diskettenstation einschalten und eine automatisch startende Diskette (Autoboot) hineinstecken. Wenn Sie nun Ihren Computer einschalten, saute alles wie bisher ablaufen: eine ggf. vorhandene Diskette wird geladen ('gebootet') oder BASIC - falls hineingesteckt - meldet sich mit READY. Sollte der Bildschirm dunkel bleiben oder sich sonst irgendeine Storung zeigen, schalten Sie den Computer so-Fort wieder aus und kontrollieren Sie Position und korrekten Sitz aller EinschUbe t sowie alle Kabelverbindungen (Trafo, TV etc.). Meldet sich Ihr System - wie anzunehmen - korrekt, drucken Sie nun einmal auf Ihre neue Reset-Taste. Wie Sie sehen, ist das Ergebnis dasselbe wie beim Einschalten ("Power-Up') des Computers: eine ggf. vorhandene Diskette wird erneut geladen ('gebootet') oder BASIC - falls hineingesteckt - meidet sich wieder mit READY. Herzlichen Gluckwunsch. In Zukunft werden Sie es beim Arbeiten mit Ihrem Computer nicht nur etwas bequemer haben, sondern auch noch seine wertvolle Elektronik und semen Ein/Ausschalter schonen. WICHTIG: Denken Sie daran, dass im Unterschied zu SYSTEM RESET bei Betatigung des CPU-Reset-Tasters stets dieselben Schritte zur System-Initialisierung ausgelbst werden, wie beim Einschalten: DER GESAMTE RAM-SPEICHER WIRD GELoSCHT! Um die unterschiedliche Reaktion des Systems auf Drucken von SYSTEM RESET und Betatigen des neuen CPU RESET (bzw. Einschalten) zu verdeutlichen, olgt abschlieBend zu diesem Kapitel eine kurze Gegenuberstel lung.

DIE ZWEI INITIALISIERUNGSMoGLICHKEITEN IHRES ATARI-COMPUTERS: EINE KURZE GEGENuBERSTELLUNG.


Vielleicht werden Sie sich fragen, was es mit der INITIALISIERUNG auf sich hat. Kurz gesagt handelt es sich dabei um eine Reihe von Schritten, die das System Uberhaupt erst in einen betriebsfahigen Zustand versetzen. Alle Werte des Betriebssystems, wie z.B. ZAhler, die sich wAhrend des Betriebes Andern, dflrf en ja nicht in (unverAnderlichen) ROM-Zellen stehen, sondern mUssen im (verAnderlichen) RAM abgelegt werden. Dazu ist es eben erforderlich, daB das Betriebssystem zunAchst Anfangswerte in alle Zellen schreibt, die beim Arbeiten mit dem Computer yam Betriebssystem benutzt werden. Damit hat der Computer einen Grundzustand, von dem aus er mit seiner Arbeit beginnen kann. Besonders, wenn sich der Computer 'aufgehangt' hat, ist es wichtig, wieder zu diesem Grundzustand zurUckkehren zu konnen. - Was darUberhinaus noch alles passiert, je nachdem, ob Sie den Computer neu einschalten (bzw. Ihre NEUE Reset-Taste benutzen!) oder SYSTEM RESET drUcken, zeigt die folgende Aufstel lung.

A) EINSCHALTEN DES COMPUTERS ODER DRUCK AUF DIE NEUE RESET-TASTE


(KALTSTART): * * * * * * * * * * * Ermittlung der hOchsten verfidgbaren RAM-Adresse. Loschen des gesamten RAM-Speichers (alle Zellen mit Nullen fallen). Aufbau aller Interrupt-Vektoren, die im RAM stehen (z.B. DOSINI). Aufbau der GerAte-Tabelle (Device table: Drucker, Diskette etc.). Abfrage, ob ROM-Modul eingesteckt ist (linker/rechter Schacht). Falls vorhanden, Initialisierung der ROM-Module. Aufbau der Grafik-Stufe 0 (Textdarstellung 24 x 40 Zeichen). Cassette laden (!booten'), falls START gedruckt wird. Falls ROM-Modul vorhanden, Abfrage, ob Disk 'gebootet' werden soll. Ggf. Laden ('booten') der Diskette, so-fern Laufwerk vorhanden. Je nachdem, welche Kenndaten das Betriebssystem von den ProgrammtrAgern bisher bekommen hat, wird die weitere Kontrolle des Systems an das von Diskette oder Cassette geladene Programm oder an das ROM-Modul Ubergeben. * Steht weder em n Programm von Diskette, Cassette noch ROM-Modul zur VerfUgung, erscheint die Mitteilung 'ATARI COMPUTER MEMO PAD'.

B) BETATIGUNG DER TASTE 'SYSTEM RESET' (WARMSTART): Jedesmal, wenn Sie auf SYSTEM RESET drucken, fUhrt das Betriebssystem einige, jedoch nicht alle Schritte aus, die auch beim Einschalten vorgenommen werden. Die wichtigsten davon sind: * Loschen der yam Betriebssystem benutzten RAM-Zellen. * Alle RAM-Interrupt-Vektoren werden wieder auf die standardmABig vom Betriebssystem vorgesehenen Sprungadressen gesetzt. * Auch die GerAte-Tabelle, die Sie evtl. geAndert oder ergAnzt hatten, wird wieder in ihrer ursprUnglichen Form aufgebaut. * Vorhandene ROM-Module werden neu initialisiert. * Falls vom Programmierer vorgesehen (z.B. BASIC: POKE 580,1), wird die Diskette erneut 'gebootet', was einem Kaltstart (siehe oben) gleichkommt.
* Aufbau der Grafik Stufe 0 (Textdarstellung 24 x 40 Zeichen).
-

* Obergabe der Programm-Kontrolle an Disketten- Cassetten- oder ROM-Modul-Programm (bzw. 'MEMO PAD', falls keines vorhanden).

1 43

D LP D FR ZJIU3 I Fl

-I- ect IR I

Der ATARI 400/800 hat durch sein spezielles Sounderzeugungssystem viele Moglichkeiten. Dass Ihr Computer akustisch unheimlich wesentlich mehr zu bieten hat, als die in zahlreichen Spielen der verwendeten Explosionsgerausche l zeigt ja z.B. Sprach-Synthesizer S.A.M. des Software-Herstellers Don't Ask, der zur Erzeugung seiner gut verstAndlichen keinstlichen Sprache ohne zusAtzliche Hardware auskommt. All dies passiert dank des von so genannten POKEY-Chip, der die 6502-CPU wesentlich Atari entlastet. Mit ihm konnen Sie wahre Klangzaubereien realisieren, vielen anderen Heimcomputern teure Zusatz-Hardware die bei erfordern. vier voneinander unabhAngige Ihr Atari-Computer besitzt SoundkanAle. Jeder von ihnen hat em n Frequenzregister, das die Tonhohe bestimmt, sowie em n Kontrollregister, das die LautstArke und Klangfarbe (Verzerrung) des dazugehorigen Frequenzregisters festlegt. Mit einem gemeinsamen Kontrollregister lassen sich noch verschiedene zusAtzliche Effekte erzeugen. Doch zuerst einige ErklArungen: Was ist eigentlich eine FREQUENZ? Die Frequenz ist praktisch die Anzahl der Schwingungen pro Sekunde. Sie wird in Hz (Hertz) angegeben. So ist 1 Hz=1 Schwingung pro Sek. 1Khz=1000 Schwingungen pro Sek.(Kilo-Hertz) 1MHz=1000000 Schwingungen pro Sek. (Mega-Hertz) Und was ist ein PULS: em n Puls ist sozusagen eine urplOtzliche SpannungsAnderung von einem Spannungszustand in den anderen und wieder zuriick. Also z.B. von Null Volt auf +5 Volt. Oder umgekehrt. Im ersten Fall spricht man von einem positiven Puls, im zweiten Fall von einem negativen:

+5V

0V

positiv

negativ

Abbildung 1

RECHTECK:Ein Rechteck 1st eine bestimmte Wellenform wie Sagezahn, Sinus oder Dreieck. Ein einzelnes Rechteck ist vergleichbar mit einem Puls. HAngt man mehrere Rechtecke im gleichen VerhAltnis aneinander (z.B.1000 pro Sek.),bekommt man einen horbaren Ton,

'.7

hier z.B. mit 1000 Hz, also 1 kHz. z. B.:

EinzelSchwingun9

Schwingungsfolge (Ton)
Abbildung 2

Ein Schieberegister SCHIEBEREGISTER: ist praktisch emn Speicherplatz. Man kann jedoch das dort abgelegte Bitmuster verschieben, z.B. um eine Stelle nach rechts. Dann +Alit das ganz rechte Bit heraus und- das Bit, das am linken Eingang steht, wird hineingeschoben. Wir sehen also, dass em n Schieberegister ausser semen Bitzellen auch noch aber einen Eingang und einen Ausgang verftagt.Den Verschiebevorgang kann man sich wie folgt vorstellen:

EINGANGS- -PULSE

AUSGANGST PULSE

--

AUDF=4 (nur jeder 4-te Puls kommt zum Ausgang)


Abbildung 3

TONERZEUGUNG 1.DIE AUDIOFREQUENZREGISTER (AUDF1 bis 4)


Zuerst einmal die Adressen +Ur die 4 Audio-Frequenz-Register: AUDF1=53760 dez.=$D200 ($ vor der Zahl = hexadezimal) AUDF2=53762 dez.=$D202 AUDF3=53764 dez.=$D204 AUDF4=53766 dez.=$D206 Was hat es nun mit diesen vier Registern auf sich? Die Frequenz, die der Audiokanal erzeugen soil, ergibt sich aus einer Eingangsfrequenz (Clock), die durch den Inhalt der dazugehorigen Speicherzelle (AUDF1 bis 4) geteilt wird. Steht also in der Speicherzelle die Zahl 'n', so kommt nur jeder n-te Impuls der

Eingangsfrequenz

am Ausgang des Audiokanals heraus.

Ein Beispiel:

El HG.

1 2 3 4 5 '
-

AUSG

Abbildung 4

Je hoher also 'n' wird, umso tiefer wird die Ausgangsfrequenz, und umgekehrt. Ganz zum Schluss wird diese Augangsfrequenz dann noch durch 2 geteilt.

2.DIE AUDIGKONTROLLREGISTER (AUDC1-4):


Zunachst wieder erst einmal die Adressen der 4 Register: AUDC1=537b1 dez.=$D201 AUDC2=53763 dez.=$D203 . . AUDC3=53765 dez.=$D205 AUDC4=53767 dez.=$D207 Jeder Audiokanal hat em n mit ihm korrespondierendes KONTROLLREGISTER. Diese Register kontrollieren die Lautstarke und Verzerrung (Klangcharakter) eines jeden Audiokanals. Das Kontrollregister hat folgende Bit-Zusammensetzung:

AUDC 1-4

VERZERR WIG

6 5

3 2 1 0 VOLUME CLautstUrke3

VOL . ONLY BIT

Abbildung 5

Hier nun die einzelnen ErklArungen:

VOLUME:
Die niedrigeren 4 Bits (Bit 0-3) bestimmen die LautstArke (engl. volume) des vom Audiofrequenzregisters erzeugten Tones. Es sind 16 Lautstarke-Stufen (0-15) moglich. 0 ist demnach Lautstarke 0 (nichts hdrbar), und 15 ist die maximale Lautstarke. Als Faustregel gilt jedoch, dass die Summe der Volumen-Bits aller 4 KanAle die Zahl 32 nicht Ubersteigen sollte, da sonst am Audioausgang ungewollte Verzerrungen auftreten konnen.

VOLUME-ONLY-BIT (NUR-LAUTSTARKE-BIT):
Wird Bit #4 von AUDC1-4 gesetzt, so wird die Information der 4 Volumen-Bits direkt zum TV-Lautsprecher geschickt. D.h.: man kann durch setzen dieses Volume-Only-Bits mittels der Volumen-Bits direkt die Position der Lautsprechermembrane bestimmen. Macht man z.B. folgendes Statement, so wird man emn 'Popp'-Gerdusch aus dem Lautsprecher haren:

POKE 53761,32:POKE 53761,16


In beiden Fallen wird das Volume-Only-Bit gesetzt. Im ersten POKE-Befehl werden jedoch noch zusAtzlich die 4 Volumen-Bits auf 1 gesetzt (=15). Dieses veranlaOt die Lautsprecher-Membrane, sich nach vorne zu bewegen. Setzt man danach die 4 Volumen-Bits wieder auf 0, so bewegt sich die Membrane wieder in ihre Ruheposition (zweiter POKE-Befehl). Dieses ergibt das gehorte Popp-Grausch. Die Membrane bleibt so lange in ihrer bestimmten Position, bis sie durch neue Befehle wieder verAndert wird. Angenommen man setzt die 4 Volumen-Bits auf 8 und nimmt dies als Ruheposition (Mittenposition) der Membrane an, so konnte man durch folgende Anderung der 4 Volumen-Bits einen ziemlich reinen Sinuston erzeugen: 8,9,10,11,10,9,8,7,6,5,6,7...usw. Dies funktioniert allerdings nur in Maschinensprache, da BASIC fUr die notwendige schnelle Anderung viel- zu langsam ist. Zur Erzeugung noch praziserer Wellenformen kann es sogar erforderlich werden, dass man die Bildschirmdarstellung abschaltet ($ 22F auf $00 setzen, um den Bildschirm-DMA zu unterbinden. DMA= direkter Speicherzugriff).

Membranauslenkung 11 10 9
8 7 6 5

Abbildung 6

Mit dieser Methode und etwas Proqrammieraufwand ist man praktisch in der Lope, fast alle Schwinqunqsformen nachzubilden!!

DISTORTION(VERZERRUNG.GERAUSCHE): Jeder Audiokanal besitzt 3 Verzerrungs-Bits, die ebenfalls im Audiokontrollregister enthalten sind (Bit 5-7). Diese werden
benotigt, um die speziellen Soundeffekte und Gerausche zu erzielen. Um diese Gerauscherzeugung zu verstehen, muB man sich erst einmal die Funktion eines sag. 'Polycounters' im Klaren werden: In der folgenden Zeichnung wird z.B. Bit als Zufallspuls aus dem Schieberegister entnommen. Der Eingang wiederum ist eine Verkndpfung aus Bit #3 und Bit #5.

SCHIEBE REGISTER EINGANG 1 2 3 4 5


al

>

AUSGANG ZUFALLSPULSE

I.PERKNUPFUNG CBIT-PROZESSOR)

Abbildung 7

Der Bitprozessor verknUpft verschiedene Bits (hier Bit 3 u. 5). Das daraus entstehende Bit wird wieder in den Eingang (Bit 1) hineingeschoben. Diese Polycounter sind allerdings nicht wirklich zufallig, da sich ihre Bitfolge nach einer bestimmten Zeitspanne wiederholt. Diese Wiederholungszeit resultiert aus der Bitlange des Schieberegisters. D.h. je grosser (langer) das Schieberegister ist, umso langer dauert, es bis sich das Bitmuster wiederholt.

Beim ATARI 400/800 werden diese Zufallspulse benotigt, um eine Auswahlschaltung anzusteuern, die Atari 'selection circuit' nennt. Sie besteht aus einem digitalen Vergleicher, dessen Funk tionsweise uns jedoch nicht weiter zu interessieren braucht. kommen nun die Tonpulse vain An dieser Auswahlschaltung Audiofrequenzregister und die Zufallspulse vom Polycounter an Es wird nur dann am Ausgang em n Puls erscheinen, wenn an den 2 Eingangen auch ein Puls vorhanden ist. Dadurch warden in einer Zufallsform verschiedene Pulse yam AUDF ausgeloscht. Die folgende Abbildung soil dies veranschaulichen:

ZUFALLSPULSE VOM POLYCOUNTER

TONPUL SE

AUSGANGSPULSE -

Now..

a*.sss1

Abbildung 8

Man kann praktisch sagen, dass mittels der polycounterpulse ausgewahlt wird, welcher Tonpuls zum Ausgang kommt und welcher nicht. Da die Polycounterpulse ihre Folge wiederholen, wird auch die Ausgangsfolge stgndig wiederkehren. Somit kann man recht einfach Gerausche mit sich wiederholenden Mustern erzeugen (Motoren usw.) 3 Polycountern verschiedener Lange Der ATARI 400/800 ist mit ausgestattet. Dadurch kann man verschiedene Wiederholungsmuster erzeugen. Die kleinen Polycounter (4 und 5 Bits lang) wiederholen sich oft genug, um driihnende . - Gerausche zu erzeugen. Der lange Polycounter (17-Bits lang) braucht derart vial Zeit bis zu seiner Wiederholung, dass er ideal far Rauschgerausche wie Explosionen, Dampf, Wind usw. geeignet ist. Hier em n Beispiel: SOUND 0,100,8,8:POKE 53768,64> erzeugt weisses Rauschen. ("weiss' heisst hier: gleichmAssiger Anteil aller Frequenzen im Rausch-Spektrum)

Jeder Audiokanal hat-6 verschiedene Kombinationsmaglichkeiten der 3 Polycounter: Bit Nr 765 III 0 0 0 --> 0 X 1 --> 0 1 0 --> 1 0 0 --> 1 X 1 --> 1 1 0 -->
.

Takt/Frequ. l erst Takt/Frequ.,dann Takt/Frequ.,erst Takt/Frequ.,dann Takt/Frequ.,dann Takt/Frequ.,dann

5-Bit dann 17-Bit poly., dann /2 5-Bit Poly., dann /2 5-Bit dann 4-Bit Poly.,dann /2 17-Bit Poly., dann /2 /2 (keine polyc.= reiner Ton) 4-Bit Poly., dann /2

Anmerkung: Ein 'X' bedeutet, dass es egal ist, oh das Bit gesetzt wird oder nicht. Die letzten 3 Bits von AUDC1-4 kann man sich auch als 3 Schalter im Tonerzeugungssystem vorstellen. Das folgende Diagramm verschafft Ihnen Klarheit: AUDCTL Bit I4BIT PCILY[ OBIT POLY'
.

sr.

1
I

0
.

*
-

"./

I 55I1 POLY'

-,.., N.
* ''..: ," 71 1

-.

/ZUM TV L AUT5PR ,

TON PUL 5 *=AL1514AHL5CHALTUNG

Abbildung 9

Jede neue Kombination der Polycounter ergibt praktisch em n anderes Gergusch, da sich der Kiang einer Kombination je nach Frequenzbereich total gndert. Nachfolgend . inden Sie eine
Tabelle, die Ihnen beim Experimentieren mit Bit 5,6 und 7 der Audio-Kontrollregister hilfreich sein wird. Probieren Sie einfach einmal die sechs moglichen Kombinationen in den verschiedenen Frequenzbereichen aus und tragen Sie in der Tabelle em, an was das horbare Ergebnis erinnert (z.B. Kombination 110 bei tiefer Frequenz = Flugzeug). AUDIO-KONTROLLREGISTER 1 bis 4 BIT NR. 7 6 5 I hohe Frequenzen mitt lere Frequenzen tiefe Frequenzen O 0 0 I

O X 1 I O 1 0 I
1 0 0 I 1 X 1 I 1101

3. DAB GEMEINSAME AUDIOKONTROLLREGISTER (AUDCTL)


Adresse:AUDCTL = 537468 dez. = $D208 Zusatzlich zu den 4 Audiofrequenz- und Kontrollregistern gibt es noch em n Kontrollregister, welches auf alle 4 Audiokanale einen Einfluss hat. Jedes einzelne Bit in diesem Register hat eine andere Funktion:

AUDCTL BIT NR. 765 432 I. 0

Abbildung 10

Bit Nr.: 0--> schaltet den Haupt-Takt von 64KHz auf 15KHz 1--> fagt in den Kanal 2 ein Hochpassfilter em, das von Kanal 4 gesteuert wird 2--> fagt in den Kanal 1 ein Hochpassfilter em, das von Kanal 3 gesteuert wird 3--> hAngt Kanal 4 an Kanal 3 an. (16-Bit Auflosung) 4--> hAngt Kanal 2 an Kanal 2 an. (16-Bit Auflosung) 5--> taktet Kanal 3 mit 1.79 MHz 6--> taktet Kanal 1 mit 1.79 MHz 7--> wandelt den 17-Bit Polycounter auf 9-Bit um Bevor wir das AUDCTL-Register naher erklAren, wollen wir erst einmal den Begriff 'Takt' etwas durchleuchten. Die sog. 'Takt' ist eine stetige Folge von Pulsen, die hauptsdchlich dazu verwendet werden, den Computer jede millionstel Sekunde zu synchronisieren. Ein 'Takt' hat, genau wie der Mensch, einen regelmABigen Puls; jeder Puls bedeutet far die Elektronik, einen neuen Arbeitsschritt auszufahren. Im Abschnitt aber die Tonerzeugung haben wir erfahren, da19 emn Frequenzteiler nur jeden n-ten Eingangsimpuls zum Ausgang lABt. Aber wo kommen die Eingangsimpulse her? Richtig. Natarlich vom Takt! Im ATARI-Computer werden mehrere solcher 'Takts' bentitigt, und mit dem AUDCTL-Register sind wir nun in der Lage, den Takt, der far die Tonerzeugung benotigt. wird, bei Bedarf zu Andern. D.h., wenn wir den Takt Andern, Andert sich damit auch die Tonfrequenz. Dazu em n Beispiel: Takt = 20 KHz = 5 (nur jeder 5-te Puls kommt rum Ausgang) AUDF Ausgang = 4 KHz (20/5) Nun Andern wir den Takt auf 50 KHz, ohne das Frequenzregister zu Andern: Takt = 50 KHz AUDF = 5 (wie gehabt) Ausgang = 10 KHz --> der Ton wird hoher! Folglich lautet die Formel zur Bestimmung der Ausgangsfrequenz des Audiofrequenzregisters AUSGANGSFREQUENZ=CLOCK/N (N=Inhalt des Frequenzregisters) Mit dem 1.Bit (Bit 0) von AUDCTL kann man nun den Takt Andern. Wird es gesetzt, schaltet der Takt von 64KHz auf 15KHz. Dieses hat zur Folge, daB nun bei allen 4 AudiokanAlen die Eingangsfrequenz (Takt), und somit auch die Ausgangsfrequenz abgesenkt werden. Der oder die Tone werden also tiefer. Beispiel: SOUND 0,128,10,8 --> Ton mittlerer Frequenz POKE 53768,1 --> Takt von 64Khz auf 15KHz

Dasselbe kann man nun auch mit den Audiokandlen 1 und 3 machen. Nur clan sich hier nicht der Takt absenken, sondern um den Faktor 30 (auf 1.79MHz) erhohen laBt. Dieses geschieht, indem man Bit #5 oder #6 von AUDCTL setzt. Der Ton wird hierbei also wesentlich hither werden.

Del spiel: SOUND 0,255,10,8 POKE 53768,64 SOUND 2,255,10,8 POKE 53768,32

--> --> --> -->

tiefer Tan au+ Takt fur Kanal tiefer Ton au+ Takt fur Kanal

Kanal 1 1 wird auf 1.79MHz gebracht Kanal 3 3 wird auf 1.79MHz gebracht

16-BIT-AUFLoSUNG:
Durch Setzen des 3. oder 4. Bits von AUDCTL ist man in der Lage) 2 Kandle zu einem einzigen Kanal zu verketten. Das ergibt einen grOBeren Frequenzumfang und die Moglichkeit einer feineren Frequenzabstimmung. Jeder Kanal fur sich hat einen Frequenzbereich von 0-255 (Frequenzregister hat 8 Bits). HAngt man nun 2 Kandle zusammen, geht der Frequenzbereich von 0-65535 (Frequenzregister hat nun 16 Bits). Mit dieser Methode ist es sogar moglich, einige 'Popps' im Abstand von mehreren Sekunden zu erzeugen. Das folgende Programm verwendet bereits diese 16-Bit-Auflosung. Es benutzt einen Joystick zurFrequenzsteuerung (Buchse #1): 10 SOUND 0,0,0,0:REM Initialisieren

20 POKE 53768,80:REM Kanal 1 m. 1.79MHz; Kanal 2 an K 1 hangen 30 REM Kana1 1 ata5-, Kanal 2 . einschalten (reiner Ton)
40 50 60 70 80 90 POKE 53761,160:POKE 53763,168: S=STICK(0): REM Variable f. Joystick FEIN=FEIN+(S=14)-(S=13):IF FEIN <0 THEN FEIN =0 GROB=GROB+(S=11)-(S=7) :IF GROB <0 THEN GROB =0 POKE 53760,FEIN:POKE 53762,GROB GOTO 50

Durch Bewegen des Joysticks nach links oder rechts kannen Sie eine Grobabstimmung, und durch Bewegen nach oben oder unten eine Feinabstimmung der Tonhahe durchfuhren. Dieses Programm setzt zuerst die Bits 4 und 6 von AUDCTL. Das bedeutet: takte Kanal 1 mit 1.79MHz und hdnge Kanal 2 und Kanal 1 aneinander. Es sind also beide 8-Bit Frequenzregister zu einem 16-Bit Register zusammengewachsen. Dieses bestimmt nun, durch welchen Wert der Eingangstakt geteilt wird. Als ndchstes ist das Volumen-Bit von Kanal 1 auf 0 gesetzt warden. Dies geschieht deshalb, weil Kanal 1 fur sich allein bedeutungslos geworden ist. Das Frequenzregister von Kanal 1 wird nun als das +eine 'low-Byte' und das von Kanal 2 als das grobe 'high-Byte' verwendet. Schreibt man eine 1 in das Frequenzregister von Kanal 1, so erhdlt man eine Teilung durch 1. Schreibt man jedoch eine 1 in das Frequenzregister von Kanal 2, so bekommt man eine Teilung durch 256. Wird eine 1 in beide Register geschrieben, so wird durch 257 geteilt.

KANAL 1 7 6 5 4 3218

KANAL 2 7654 01 3 2 1 f0 - 255 3

f-- 0 - 255 --3 POKE 53768,16 KANAL 2

KANAL 1

1514/3121110 98 7 6 5 4 3 2 1 0 0 - 65535
Abbildung 11

--4

HOCHPASSFILTER: Mit den Bits 1 und 2 von AUDCTL sind Sie in der Lage, Sog. Hochpassfilter zu steuern. Ein Hochpassfilter ist emn Filter, das). passieren wie der Name schon sagt, nur die hoheren Frequenzen Alle Frequenzen unter einem bestimmten Punkt (Filterbeschneidungspunkt) werden unterdrackt. z.B. ab ca. 1000Hz:

filterkurve

11(Hz

2101z f

Abbildung 12 POLYCOUNTER-UMWANDLUNG: Mit Bit #7 von AUDCTL kann man den 17-Bit langen Polycounter in einen 9-Bit langen Andern. Damit kann man das Wiederholungsmuster dieses Polycounters 4ndern (siehe Polycounter-Beschreibung) Beispiel (wichtig: beim zweiten Befehl genau hinharen!): SOUND 0,80,8,8 --> 17-Bit Polycounter POKE 53768,128 --> wechselt in 9-Bit

"7.

1.< I Ilvi la -T Ii< L_ L_ i=1 IN I

ILJF'

Sie sich schon gewundert, wieso Ihr Sicherlich haben ATARI-Computer GerAusche oder Musik erzeugen kann, obwohl das eigenliche Programm voller Aktion gleichzeitig weiterlAuft. Nun, das Beheimnis liegt in semen ausgezeichneten Moglichkeiten,den Computer fUr eine kurze Zeit zu unterbrechen, um ihn etwas ganz anderes ausfUhren zu lassen. Dieses muB natUrlich an einer Stelle geschehen, wo man nichts davon merkt. Dazu bietet sich gerade eine Sache an, an der eigentlich Ihr FernsehgerAt oder Monitor schuld 1st. NAmlich immer, wenn der Elektronenstrahl Ihres FernsehgerAtes em n Bild gezeichnet hat und an der rechten unteren Ecke des Bildschirms angelangt ist, muB er natUrlich wieder, um em n neues Bild zu zeichnen, an die linke obere Ecke zuruckgefahrt werden. Dieser Vorgang ist jedoch so extrem kurz, daB Sie davon nichts merken. Da aber Ihr Computer ein sehr sehr schneller Denker ist, kann er wAhrend dieser Zeit noch sehr viele Befehle abarbeiten! Z.B. kann man in dieser Zeit die Information fur die vier Audiofrequenzregister Andern und kann somit, ohne ihn weiter zu belasten, Musik erzeugen.

VERTIKAL BLANK INTERRUPT \ \


\

HAUPTPROGRAMM

:.11

VBI-UNTERPROGRAMM (Z.B. MUSIK,

WEITER IN I I HAUPTPROGRAMM

Funktionsprinzip des Vertical Blank Interrupt

Die Programme auf den folgenden Seiten machen sich dieses PhAnomen zunutze.

Zuerst em n Paar orundleoende ErklArungen zum Vertikal-Blank-Interrupt:


Ihr ATARI-Computer bestitzt einen Zdhler (Timer)) der bei jedem VBI um ems herunterzahlt. 1st er nun bei Null angelangt, schaut er in zwei Registern nach, wo er wAhrend eines VBI's weitermachen soil. Schreibt man nun in diese zwei Adressen die Startadresse, aufgeteilt in High und Low, seines Musikprogramms, und setzt den ZAhler auf Eins, so wird der Computer beim nAchsten VBI zu dieser Adresse springen und das dort stehende Programm abarbeiten. Dieses Programm darf natUrlich nicht zu lang sein, da fUr einen VBI ca. 20.000 Maschinenzyklen Zeit zur Verfugung stehen. Das
1E1

VBI-Unterprogramm muB natarlich zum SchluB den ZAhler wieder auf Eins setzen, damit es beim nachsten VBI sofort wieder angesprungen wird. Die Grundidee dieser zwei Programme besteht darin, wahrend eines jeden VBI's diverse Zahler zu testen, und wenn sie bei Null angelangt sind, einen neuen Notenwert in die AUDF-Register zu schreiben. Gleichzeitig werden zu diesem Notenwert auch wieder die dazugehOrigen Zahler mit der Lange der neuen Note gesetzt. Es werden also bei jedem VBI (es sind abrigen5 50 pro Sekunde) die Zahler far die Notenlange um ems heruntergezahlt. Wenn nun einer der Uhler Null erreicht hat, bedeutet das: 'die Note ist aus', und es wird eine neue Note eingelesen.

BESCHREIBUNG DES VIERSTIMMIGEN MUSIKPROGRAMMS 'VBIMUSIC'


Zusatzlich zum eigentlichen VBI-Programm wurde noch em n kleines Programm angehAngt, um zu zeigen, wie man gleichzeitig mit der Musik auch die Farben seines ATARI-Computers andern kann. AuBerdem sehen Assembler-Programmierer hier, wie man in Maschinensprache Graphikstufen erreichen kann. Nun zum Programm: ZEILE 10-280: Hier werden den benotigten Adressen sag.. 'Labels' zugeordnet. D.h., daB die Adressen Namen bekommen, die man anstatt der Adressennummer verwenden kann. ZEILE 290: ist die Startadresse des Programms. ZEILE 300-390: Dies ist die sag.. Initialisierung, bei der alle spater benotigten Zahler und Zwischenspeicher auf Null gesetzt werden. ZEILE 400: Um alle 4 Soundkanale zu initialisieren, mue man in die Adresse AUDCTL eine 0 schreiben (haben wir in Zeile 310 bereits gemacht), und in die Adresse SKCTL eine 3 schreiben. ZEILE 420-450: Damit die Begleitung etwas leiser ist als die Melodie, setzen wir die Volumen-Bits der dazugehorigen Kontrollregister auf Lautstarke 4 und die Distortion-Bits auf 160 (=reiner Ton). Das ergibt dann zusammen 164 (=$A4). ZEILE 460-470: Die Melodie bekommt nun etwas mehr 'Power' (Lautstarke 8). Da der reine Ton bleibt, speichern wir in das Kontrollregister far die Melodie die Zahl $A8. ZEILE 480-510: errechnet die Startadresse (zerlegt in HI und LO) unserers VBI-Unterprogramms, und legt sie in den zwei Vektoradressen des VBI-Zahlers (Sysytemtimer 2) ab. ZEILE 520-530: setzt den Zahler selbst auf 1, damit beim nachsten VBI unser Unterprogramm ausgefahrt wird. ZEILE 540: Nachdem wir jetzt alle Bedingungen far den VBI erfallt haben und dieser ab jetzt vollig automatisch ablauft, kann sich unser Computer nun dem 2.Teil des Programmes widmen. Doch wir widmen uns erst einmal dem VBI -Unterprogramm. ZEILE 580-690: testen, ob einer oder mehrere der Notenlangenzahler far die vier Stimmen schon bei 0 angelangt sind. 1st em n Zahler

auf 0, so verzweigt das Programm zu dem jeweiligen, dem Zahler zugeordneten Umterprogramm, um eine neue Note zu holen. 1st der Zahler noch nicht auf 0, so wird er um ems heruntergezahlt, und es wird der Zahler +Ur die nachste Stimme getestet. ZEILE 700-710: Zu diesen Zeilen gelangt der Computer, wenn er samtliche 4 Stimmen getestet und modifiziert hat. Hier setzen wir wieder unseren VBI-Zahler auf 2, damit unser Programm beim Ubernachsten VBI wieder dabei ist. ZEILE 720: Dies ist der Befehl um das VBI-Unterprogramm zu verlassen. ZEILE 730-830: Hier ist nun das erste Unterprogramm, das uns eine neue Note nebst dazughoriger Notenlange +Ur die 1. Stimme beschafft. In Zeile 730 laden wir das X-Register mit dem Wert, der in der Zelle 'XSAVE1' steht. Beim allerersten Durchlauf steht bier eine Null, so da8 in Zeile 740 der Akkumulator mit dem ersten verfUgbaren Notenwert geladen werden kann (siehe Litaratur Uber Adressierungsarten des 6502). Dieser Wert wird nun in Zeile 750 mit der Hex-Zahl $FF verglichen. Bei unserem Programm bedeutet $FF keine Tonhohe, sondern, daB nun die letzte Note erreicht ist, und diese Stimme wieder von vorne beginnt. So verzweigt dementsprechend bei Notenende unser Programm in Zeile 760 zu einem weiteren Unterprogramm, dass den Wert der Zelle 'XSAVE1' entprechend dem Anfagston neu setzt. 1st jedoch die letzte Note noch nicht erreicht, speichert die Zeile 770 den in Zeile 740 gefundenen Wert in das Audiofrequenzregister 411 ab. Gleichzeitig schreibt die Zeile 780 denselben Wert in em n Farbregister. Da bei der 1.Stimme, die bei uns die Begleitung dbernommen hat t alle Noten dieselbe Lange haben, brauchen wir uns diesen Wert nicht aus einer Tabelle holen, sondern ktinnen ihn wie in Zeile 790 und 800 direkt in unseren Notenlangenzahler Ubernehmen. Da wir beim nachsten Aufruf dieses Unterprogramms nicht wieder dieselbe Note horen wollen, mUssen wir nun das X-Register um ems erhahen (Zeile 810) und den Wert dieses Registers wieder in unserem Zwischenspeicher ablegen (Zeile 820). Diese Zwischenspeicher werden aus dem Grund bentitigt, weil alle 4 Stimmen nicht bei der gleichen immer Notenanzahl ist. D.h. bei der Musikstelle, die wir vielleicht gerade haren, ist die Begleitung bereits bei der 23. Note, wobei die Melodie erst bei der 10. Note ist. So mUssen wir eben den Wert des X-Registers fur jede Stimme separat zwischenspeichern, um kein Durcheinander zu bekommen. Nachdem also das X-Register abgespeichert ist, verzweigt unser Programm zur Abfrage, ob der Notenlangenzahler fur die nachste Stimme schon abgelaufen ist. Diese Vorgange sind +Ur die weiteren drei Stimmen vollig identisch. Diese Unterprogramme ZEILE 1160-1270: werden, wie schon dann beschrieben, immer angesprungen, wenn bei einer Stimme die letzte Note erreicht warden ist. 1st z.B. die erste Stimme am Ende angelangt, verzweigt sie zu Zeile 1160, wo der Zwischenspeicher fur das X-Register mit dem Wert geladen wird, bei dem die 1. Stimme wieder beginnen soil (Zeile 1170). Danach verzweigt das Programm wieder zur nachsten Stimme. ZEILE 1320-1870: Diese Zeilen beinhalten nun die Tabellen fUr die Tonhohen und Tonlangen aller vier Stimmen. FUr die Tondauer wurde davon ausgegangen, daB eine Viertel-Note dem Wert $10 entspricht. Da wir uns in einem 6/8-Takt befinden, entspricht demnach der Wert $30 einer Ganzen-Note, der Wert $08 einer Achtel-Note und der Wert $04 einer Sechzehntel-Note. Die Werte +dr die Tonhohen kann man

entweder im 'BASIC-REFERENZ-MANUAL', cider in der vom Herausgeber erschienenen 'HZ - INFOCARD' nachlesen. ZEILE 1910-2340: Nun kbnnen wir uns ebenfalls der eigentlichen Programmfortfdhrung widmen (der Computer tut dies bereits seit einiger Zeit). Die Zeilen 1910-2340 stellen eine kleine farbige Graphik dar, deren Farben im Takt der Musik wechseln. Hier soil jedoch nicht naher auf die Handhabung der IOCB's von Maschinensprache aus eingehen, da dies em n eigenes Kapitel fUr sich ist. Wer ganz genau dardber Bescheid wissen will, dem sei auch das 'OPERATING SYSYTEM USERS MAUAL' und 'DE RE ATARI' wdrmstens empfohlen. FUr alle, die sich schon etwas auskennen, hier eine grobe Zusammenfassung vom Rest des Programms: In den Zeilen 1910-2020 wird der IOCB-Kanal #6 fdr den Bildschirm (Screen geaffnet. Die Zeilen 1980-1990 sagen . dem IOCB Handler, daB nur auf den Bildschirmgeschrieben werden soil. In den Zeilen 2000-2010 spricht man die Graphikstufe 3 an und dberlasst den Rest dem zentralen E/A-Einsprung (CIOV). AnschlieBend wird der Graphik-Cursor in den Zeilen 2050 und 2060 in die linke obere Ecke gebracht, und mit den Zeilen 2070-2270 zeichnen wir unsere bunten Linien auf den Bildschirm. Die Zeile 2280 bildet eine Endlos-Schleife. Bei Bedarf kennen Sie hier natarlich auch sogenannte Abbruch-Kriterim einbauen, z.B. eine Abfrage, ob jemand die START-Taste drdckt. In diesem Fall sollten Sie jedoch nicht vergessen, den IOCB-Kanal #6 zu schlieBen
-

Wer dieses Programm eintippt, wird von den musikalischen Qualitaten seines Atari-Computers echt uberrascht sein. Zur problemlosen Eingabe und Assemblierung wurde es abrigens nicht mit irgend einem Exotik-Assembler, sondern mit der ASSEMBLER-EDITOR-Cartridge von ATARI geschrieben. Programmstart ist bei $4F00. Die Kommentarzeilen brauchen nicht mit abgetippt werden. Falls Sie in die Technik der Musikerzeugung im VBI erst einmal 'hineinschnuppern' wollen: direkt anschliessend an das vierstimmige Musik-Programm finden Sie eine einfachere zweistimmige Ausfahrung.

04 ;************************************************************ 05 ;* UBIMUSIC: VIERSTIMMIGE MUSIK IM VERTICAL BLANK INTERRUPT * 06 ;************************************************************ 10 AUDF1=$D200 ;FREOUENZREGISTERI 20 AUDC1=$D201 WONTROLLREGISTER1 30 AUDF2=$D202 ;FREQUENZREGISTER2 40 AUDC2=$D203 ;KONTROLLREGISTER2 50 AUDF3=$D204 ;FREQUENZREGISTER3 60 AUDC3=$D205 ;KONTROLLREGISTER3 70 AUDF4=$D206 ;FREQUENZREGISTER4 80 AUDC4=$D207 ;KONTROLLREGISTER4 90 AUDCTL=$D208 ;KONTROLLREGISTER GESAMT 0100 SKCTL=$D2OF ;SERIELLE PORT-KONTROLLE 0110 CDTMV2=$021A ;SYSTEM-TIMER 2 0120 CDTMA2=$0228 ;VEKTORADRESSE V. TIMER 2 0130 Z1=$C0 ;NOTENLANGENZAHLER 1.STIMME 0140 Z2=$C1 ;NOTENLANGENZAHLER 2.STIMME 0150 Z3=$C2 ;NOTENLANGENZAHLER 3.STIMME 0160 Z4=$C3 ;NOTENLANGENZAHLER 4.STIMME 0170 XSAVE1=$C4 ;HIER WIRD DAB X-REGISTER 0180 XSAVE2=$C6 ;FUR JEDE STIMME NACH JEDEM 0190 XSAVE3=$C7 ;NOTENWECHSEL ABGESPEICHERT 0200 XSAVE4=$C8 0210 ICCMD=$0342 ;IOCB-BEFEHLS-BYTE ;IOCB-PUFFERADRESSE LOW 0220 ICBAL=$0344 0230 ICBAH=$0345 ;IOCB-PUFFERADRESSE HIGH 0240 ICBLL=$0348 ;IOCB-PUFFERLANGE LOW ;IOCB-PUFFERLANGE HIGH 0250 ICBLH=$0349 ;IOCB-AUX-BYTE 1 0260 ICAX1=$034A 0270 ICAX2=$034B ;10CB-AUX-BYTE 2 0280 CIOV=$E456 ;IOCB-EINSPRUNG 0290 *=$4F00 0300 LDA #$00 ;ALLE REGISTER UND ZAHLER ;AUF NULL SETZEN 0310 STA AUDCTL 0320 STA ZI 0330 STA Z2 0340 STA Z3 0350 STA Z4 0360 STA XSAVE1 0370 STA XSAVE2 0380 STA XSAVE3 0390 STA XSAVE4 ;SOUNDREGISTER INITIALISIEREN 0400 LDA #$03 0410 STA SKCTL ;LAUTSTARKE UND KLANGFARBE (REINER TON) 0420 LDA #$A4 ;FUR BEGLEITUNG 0430 STA AUDC1 0440 STA AUDC3 0450 STA AUDC4 0460 LDA #$A8 ;LAUTSTARKE UND KLANGFARBE (REINER TON) 0470 STA AUDC2 ;FuR MELODIE 0480 LDA #VBISTRT&255;STARTADRESSE DES VBI-UNTERPROGRAMMS 0490 STA CDTMA2 ;FESTSTELLEN UND IN DEN VEKTORADRESSEN 0500 LDA #VBISTRT/256;DES SYSTEMTIMERS 2 ;ABLEGEN 0510 STA CDTMA2+1 0520 LDA #$01 ;SYSTEMTIMER 2 AUF EINS SETZEN 0530 STA CDTMV2 0540 JMP DISPL ;WEITER IM PROGRAMM 0550; 0560 ;STARTADRESSE FuR VBI-UNTERPROGRAMM 0570 ; 0580 VBISTRT LDA Z1 ZZAHLER I AUF NULL -3 ;JA-NACHSTE NOTE 0590 BEQ SOUND1

0600 0610 0620 0630 0640 0650 0660 0670 0680 0690 0700 0710 0720 0730 0740 0750 0760 0770 0780 0790 0800 0810 0820 0830 0840 0850 0860 0870 0880 0890 0900 0910 0920 0930 0940 0950 0960 0970 0980 0990 1000 1010 1020 1030 1040 1050 1060 1070 1080 1090 1100 1110 1120 1130 1140 1150 1160 1170 1180 1190 1200 1210

TEST2 DEC Z1 ;NEIN-ZAHLER 1 ERNIEDRIGEN TEST21 LDA Z2 ;ZAHLER 2 AUF NULL? BEQ SOUND2 ;JA-NACHSTE NOTE TEST3 DEC Z2 ;NEIN-ZAHLER 2 ERNIEDRIGEN TEST31 LDA Z3 ;ZAHLER 3 AUF NULL? BEQ SOUND3 ;JA-NACHSTE NOTE TEST4 DEC Z3 ;NEIN-ZAHLER 3 ERNIEDRIGEN TEST41 LDA Z4 ;ZAHLER 4 AUF NULL'" BEQ SOUND4 ;JA-NACHSTE NOTE RET DEC Z4 ;NEIN-ZAHLER 4 ERNIEDRIGEN RET1 LDA #$02 ;SYSTEMTIMER 2 SETZEN STA CDTMV2 RTS ;VBI-UNTERPROGRAMM VERLASSEN SOUND1 LDX XSAVE1;X-REGISTER LADEN LDA VOICE1,X ;NACHSTE NOTE IN DEN AKKU HOLEN CMP #$FF ;LETZTE NOTE? BEQ END1 ;JA->UNTERPROGRAMM 'END!' STA AUDF1 ;NEIN-NOTENWERT IN FREQ.REG.1 ABLEGEN STA $2C5 ;NOTENWERT IN FARBREGISTER ABLEGEN LDA #$08 ;ZAHLER 1 NEU SETZEN STA Z1 INX ;X-REG. ERHuHEN STX XSAVE1 ;UND ABSPEICHERN JMP TEST2 ;NACHSTE STIMME SOUND2 LDX XSAVE2;X-REGISTER LADEN LDA VOICE2,X ;NACHSTE NOTE IN DEN AKKU HOLEN CMP #$FF ;LETZTE NOTE") BEI? END2 ;JA->UNTERPROGRAMM 'END2' STA AUDF2 ;NEIN-NOTENWERT IM FREQU.REG.2 ABLEGEN STA $2C6 ;NOTENWERT IM FARBREGISTER ABLEGEN LDA ZEIT2,X ;NOTENDAUER IN AKKU NOLEN STA Z2 ;UND IN ZAHLER 2 ABLEGEN INX ;X-REG. ERHoHEN STX XSAVE2 ;UND ABSPEICHERN JMP TEST3 ;NACHSTE STIMME SOUND3 LDX XSAVE3;SIEHE VOICE 2 LDA VOICE3,X CMP #$FF BEQ END3 STA AUDF3 STA $2C4 LDA ZEIT3,X STA Z3 INX STX XSAVE3 JMP TEST4 SOUND4 LDX XSAVE4;SIEHE VOICE 2 LDA VOICE4,X CMP #$FF BEQ END4 STA AUDF4 LDA ZEIT4,X STA Z4 INX STX XSAVE4 JMP RET ;LETZTE STIMME END! LDA #$18 ;X-REG. FuR 1.STIMME NEU SETZEN STA XSAVE1 JMP TEST21 ;NACHSTE STIMME END2 LDA #$04 ;X-REG. FuR 2.STIMME NEU SETZEN STA XSAVE2 JMP TEST31 ;NACHSTE STIMME

1220 END3 LDA #$14 ;X-REG. FUR 3.STIMME NEU SETZEN 1230 STA XSAVE3 1240 JMP TEST41 ;NACHSTE STIMME 1250 END4 LDA #$14 ;X-REG. FuR 4.STIMME NEU SETZEN 1260 STA XSAVE4 1270 JMP RET1 ;LETZTE STIMME 1280 -BYTE $00,$00,$00,$00,$00,$00 1290 ; 1300 ;TONHoHE FuR 1.STIMME 1310 ; 1320 VOICE1 -BYTE $D9,$AD,$90,$6C,$90,$AD,$D9,$AD,$90,36C,$90,$AD 1330 .BYTE $D9,$AD,$90,$6C,$90,$AD,$D9,$AD,$90,$6C,$90$AD 1340 -BYTE $D9,$AD,$90,$6C,$90,$AD,$C1,$90,$72,$60,$72,$90 1350 -BYTE $D9,$AD,$90,$6C,$90,$AD,$D9,$AD,$90,$79,$90,$AD 1360 .BYTE $A2,$80,$6C,$51 1 $6C,$80,$A2,$80,$6C,$51,$6C,$80 1370 -BYTE $D9,$AD,$90,$6C,$90,$AD,$D9,$AD,$90,$6C,$90,$AD 1380 .BYTE $C1,$A2,$80,$60,$80,$42,$E6,$C1,$90,572,$90,$C1 1390 -BYTE $D9$AD,$90,$6C,$90,$AD,$D9,$AD,$80,$6C,$80,$AD 1400 -BYTE $C1,$99,$80,$60,$80,$99,$C1,$99,$80,$60,$80,$99 1410 .BYTE $C1,$A2,$90,$72,$90,$A2,$C1,$A2,$90,$72,$90,$A2,$FF 1420 ; 1430 ;TONHoHE FuR 2.STIMME 1440 ; 1450 VOICE2 -BYTE $00,$00,$00,$00,$55,$51,$48,$72,$6C,$00 1460 -BYTE $6C,$60,$55,$51,$48,$40$3C,$35,$40,$28,$2A,$35 1470 .BYTE $35,$39,$40,$51,$48,$60,$55,$48,$40,$48 1480 -BYTE $4C,$48,$40,$60,$6C,$72,$6C,$60,$55,$51,$FF 1490 ; 1500 ;TONDAUER FuR 2.STIMME 1510 ; 1520 ZEIT2 -BYTE $30,$30,$30,$30,$28,$08,$28,$08,$30,$10 1530 .BYTE $04,$04,$04,$04,$04,$04,$04,$04,$30,$20,$10,$30 1540 -BYTE $20,510,$18,$18,$18,$18,$20,$10,$20,$10 1550 .BYTE $20,$08,$08,$28,$08$18,$18,$18,$10,$08 1560 ; 1570 ;TONHoHE FuR 3.STIMME 1580; 1590 VOICE3 .BYTE $00,$00,$00,$00 1600 .BYTE $00,$00,$00,$00,$00,$00,$00$00,$00,$00,$00 1610 .BYTE $00,$00,$00,$00,$00 1620 .BYTE $6C,$72,$6C,$6C,$60,$55,$51,$40,$48,$55,$6C,$60,$55 1630 .BYTE $60,$72,$6C,$80,$60,$60,$80,$72$72,$FF 1640 ; 1650 ;TONDAUER FuR 3.STIMMEN 1660 ; 1670 ZEIT3 -BYTE $30,$30,$30,$30 1680 -BYTE $30,530,530,530,530,$30,530,$30,$30,530,$30 1690 .BYTE $30,$30,$30,$30,$30 1700 -BYTE $30,$30,$30,$10,$10,$10,$30,$20,$10,$30,$10,$10,$10 1710 -BYTE $30,$30,$30,$30,$30,$20,$10,$30,$30 1720 ; 1730 ;TONHoHE FuR 4.STIMME 1740 ; 1750 VOICE4 .BYTE $00,$00,$00,$00 1760 .BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 1770 -BYTE $00,$00,$00,$00,$00 1780 -BYTE $55,$60,$55,$35,$3C,$48,$40,$35,$39,$48,$55,$51,$48 1790 -BYTE $51,$60,$55,$6C,$4C,$4C,$55,$60,$60,$FF 1800 ; 1810 ;TONDAUER FUR 4.STIMME 1820 ; 1830 ZEIT4 -BYTE $30,$30,$30,$30

1840 .BYTE $30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30 1850 .BYTE $30,$30,$30,$30,$30 1860 .BYTE $30,$30,$30 1 $10,$10,$10,$30,$20,$10 1 $30,$10,$10,$10 1870 .BYTE $30,$30,$30,$30,$30,$20,$10,$30,$30 1880 ; 1890 :ROUTINE FUR FARBORGEL 1900 : 1910 DISPL LDX #$60 ;IOCB #6 1920 LDA #$03 :oFFNEN 1930 STA ICCMD,X 1940 LDA #NAME&255 ;PUFFERADRESSE LOW 1950 STA ICBAL,X 1960 LDA #NAME/256 ;PUFFERADRESSE HIGH 1970 STA ICBAH,X ;SCHREIBEN AUF DEN BILDSCHIRM 1980 LDA #$08 1990 STA ICAX1,X ;GRAPHICS #3 2000 LDA #$03 2010 STA ICAX2,X ;IOCB EINSPRUNG 2020 %MR CIOV ;PUT CHARACTER 2030 LDA *SOB 2040 9Th ICCMD,X ;CURSOR LINKS OBEN 2050 LDA #$00 2060 5Th $54 2070 NXTLNE LDX #$00 ;40 BYTES AUF 1 SETZEN 2080 LOOP LDA BUFF,X 2090 CLC 2100 ADD ADC #$01 ;WENN >3 DANN 1 2110 AND #$03 2120 BEQ ADD 2130 STA BUFF,X 2140 INX ;SCHON 40 BYTES? 2150 CPX #$28 ;NEIN- NACHSTES BYTE 2160 BNE LOOP ;IOCB #6 2170 LDX #$60 2180 LDA #BUFF&255 ODUFFERADRESSE LOW 2190 STA ICBAL,X 2200 LDA #BUFF/256 ;PUFFERADRESSE HIGH 2210 STA ICBAH,X ;PUFFERLANGE=40 BYTES 2220 LDA #$28 2230 STA ICBLL,X ;IOCB EINSPRUNG 2240 JSR CIOV ;LETZTE BILDSCHIRMZEILE" 2250 LDA $54 ;ES BIND 24 ZEILEN 2260 CMP #$18 ;NEIN- NACHSTE ZEILE 2270 BNE NXTLNE 2280 ENDLOS JMP ENDLOS ;ENDLOS-SCHLEIFE 2290 ; (BEI BEDARF AENDERN) 2370; 2380 ;PUFFER ZUM oFFNEN DER IOCB

2390 2400 2410 2420 2430 2440 2450 2460 2470

; NAME .BYTE "S:",$9B : ;PUFFER FUR BILDSCHIRMZEILEN(40 BYTES PRO ZEILE) ; BUFF -BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 -BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 -BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00,$00

04 ;*********************************************************** 05 ;* VBIDEMO: ZWEISTIMMIGE MUSIK IM VERTICAL BLANK INTERRUPT * 06 ;*********************************************************** 10 AUDF1=$D200 ;AUDIOFREQUENZREGISTER 1 20 AUDC1=$D201 ;AUDIOKONTROLLREGISTER 1 30 AUDF2=$D202 ;AUDIOFREQUENZREGISTER 2 40 AUDC2=$D203 ;AUDIOKONTROLLREGISTER 2 50 AUDCTL=$D208 ;KONTROLLREGISTER GESAMMT 60 SKCTL=$D2OF ;SERIELLE PORT-KONTROLLE 70 CDTMV2=$021A ;SYSTEMTIMER 2 80 CDTMA2=$0228 ;VEKTORADRESSE FuR SYSTEMTIMER 2 90 Z1=$C0 ;NOTENLANGENZAHLER FUR 1.STIMME 0100 Z2=$C1 ;NOTENLANGENZAHLER FOR 2.STIMME 0110 XSAVE1=$C2 ;ZWISCHENSPEICHER FuR X-REGISTER 1.STIMME 0120 XSAVE2=$C3 ;ZWISCHENSPEICHER FuR X-REGISTER 2.STIMME 0130 *=$4F00 ;STARTADRESSE 0140 LDA #$00 ;INITIALISIEREN 0150 STA AUDCTL ;(ALLE ZAHLER UND ZWISCHENSPEICHER 0160 STA ZI ;AUF NULL SETZEN) 0170 STA Z2 0180 STA XSAVE1 0190 STA XSAVE2 0200 LDA #$03 ;SOUNDREGISTER 0210 STA SKCTL ;INITIALISIEREN 0220 LDA #$A8 ;LAUTSTARKE UND KLANGFARBE (REINER TON) 0230 STA AUDCI ;FuR 1.STIMME 0240 LDA #$A6 ;LAUTSTARKE UND KLANGFARBE (REINER TON) 0250 STA AUDC2 ;FUR 2.STIMME 0260 LDA #VBISTRT&255;STARTADRESSE FuR VBI-UNTERPROGRAMM 0270 STA CDTMA2 ;FESTSTELLEN UND IN DEN VEKTORADRESSEN 0280 LDA #VBISTRT/256;DES SYSTEMTIMERS 2 0290 STA CDTMA2+1 ;ABLEGEN 0300 LDA #$01 ;SYSTEMTIMER #2 AUF I SETZEN 0310 STA CDTMV2 ;PROGRAM ABBRECHEN 0320 BRK 0324 0325 ;BEGINN DES VBI-UNTERPROGRAMMS 0326 0330 VBISTRT LDA Z1 ;ZAHLER 1 AUF NULL? ;JA-NACHSTE NOTE 0340 BEQ SOUND1 ;NEIN-ZAHLER 1 ERNIEDRIGEN 0350 TEST2 DEC ZI ;ZAHLER 2 AUF NULL? 0360 TEST21 LDA Z2 ;JA-NACHSTE NOTE 0370 BEQ SOUND2 ;NEIN-ZAHLER 2 ERNIEDRIGEN 0380 RET DEC Z2 ;SYSTEMTIMER 2 AUF EINS SETZEN 0390 RET1 LDA #$01 0400 STA CDTMV2 ;VBI-UNTERPROGRAMM VERLASSEN 0410 RTS SOUND1 LDX XSAVE1;X-REGISTER LADEN 0420 ;NACHSTE-NOTEN IN DEN AKKU NOLEN 0430 LDA VOICEI,X 0440 CMP #$FF ;IST ES DIE LETZTE NOTE? ;JA->UNTERPROGRAMM 'END1' 0450 BEQ END1 ;NEIN-NOTENWERT IM FREQU.REG.1 ABLEGEN 0460 STA AUDF1 ;WERT FUR NOTENDAUER IN DEN AKKU HOLEN 0470 LDA ZEIT1,X ;UND IM ZAHLER Z1 ABLEGEN 0480 STA 21 ;X-REGISTER UM EINS ERH6HEN 0490 INX 0500 STX XSAVEI ;UND IM ZWISCHENSPEICHER ABLEGEN ;->NACHSTE STIMME 0520 JMP TEST2 0530 SOUND2 LDX XSAVE2;SIEHE 'SOUNDI' 0540 LDA VOICE2,X 0550 CMP #$FF 0560 BEQ END2 0570 STA AUDF2

0580 LDA ZEIT2,X 0590 STA Z2 0600 INX 0610 STX XSAVE2 0630 JMP RET ;LETZTE STIMME 0640 END1 LDA #$04 ;ZWISCHENSPEICHER FOR X-REG. 1.STIMME 0650 STA XSAVE1 ;NEU SETZEN ;NACHSTE STIMME TESTEN 0660 JMP TEST21 0670 END2 LDA #500 ;ZWISCHENSPEICHER FuR X-REG. 2.STIMME 0680 STA XSAVE2 ;WIEDER AUF NULL SETZEN 0690 JMP RET1 ;LETZTE STIMME 0691 ; 0692 ;TONHoHE FuR 1.STIMME 0693 ; 0700 VOICE1 -BYTE $00,$00,$00,$00 0710 .BYTE $79,$79,$6C,$66,$60,$3C,$00,$48,$58,$51,$66,$6C,$FF 0711 ; 0712 ;TONDAUER FuR 1.STIMME 0713 ; 0720 ZEIT1 -BYTE $40,$40,$40,$40 0730 -BYTE $40,$10,$08,$08,$08,$10,$08,$18,$28,$30,$08,$08 0731 ; 0732 ;TONHoHE FuR 2.STIMME (BEGLEITUNS) 0733 ; 0740 VOICE2 .BYTE $F3,$00,$F3,$00,$F3,$00,$F3,$00,$F3,$00,$F3,$00 0750 -BYTE $F3,$00,$F3,$00 0760 .BYTE $F3 1 $00,$F3,$00,$F3,$00,$F3,$00,$F3,$00,$F3,$00 0770 .BYTE $F3,$00,$F3,$00 0780 .BYTE $B6,$00,$B6,$00,$B6,$00,$B6,$00,$B6,$00,$B6,$00 0790 =BYTE $B6,$00,$B6,$00 0800 .BYTE $A2,$00 1 $A2,$00,$A2,$00,$A2,$00,$A2,$00,$A2,$00 0810 .BYTE $A2,$00,$A2,$00,$FF 0811 ; 0812 ;TONDAUER FOR 2.STIMME (BEGLEITUNG) 0813 ; 0820 ZEIT2 -BYTE $06,$02,$06,$02,$06,$02,$06,$02,$06,$02,$06,$02 0830 .BYTE $06,502,$06,$02 0840 .BYTE $06,$02,$06,$02,$06,$02,$06,$02,$06,$02,$06,$02 0850 .BYTE $06,$02,$06,$02 0860 .BYTE $06,$02,$06,$02,$06,$02,$06,$02,506,$02,$06,$02 0870 .BYTE $06,$02,$06,$02 0880 -BYTE 506,502,506,502,$06,502,506,502,506,$02,506,$02 0890 -BYTE $06,$02,$06,$02

ID I

rhi I

1.< IN1 ir%

'

sich eine Diskette mit den DOS-Befehlen J bzw. 0 (DUPLIKATE DISK) nicht kopieren, kann dies zwei Grunde haben: entweder ist sie kopiergeschdtzt, oder sie ist defekt. In jedem Fall gibt das Maschinenprogramm DISKMAP Aufschlu8. Nach Einstecken der zu prilfenden Diskette ins 810-Laufwerk und Drdcken der START-Taste am Computer werden die 720 Diskettensektoren auf dem Bildschirm dargestellt: SEKTOR 1 --> ************************************ *****************************!!!**** ************************************ ***********!*****!****************** ************************************ ************************************ ************************************ ************************************ ************************************ ************************************ ***

Lain

<-- SEKTOR 720 Beispiel-Disk mit beschriebenen, leeren und defekten Sektoren. Eine 810-Diskette besteht ja bekanntlich aus 720 Sektoren, angeordnet in 40 Spuren mit 18 Sektoren pro Spur. Um den Zustand samtlicher Sektoren gleichzeitig darstellen zu konnen, wurde, wie das obige Beispiel zeigt, folgendes Format gewahlt: Ein Zeichen pro Sektor. 2 Spuren, also 36 Sektoren pro Zeile. Dabei bedeuten die Zeichen: * beschriebener Sektor . leerer Sektor ! defekter Sektor Die Auflistung der Sektoren laGt sich durch Drucken der OPTION-Taste jederzeit abbrechen. DISKMAP ist dann bereit zur Analyse einer weiteren Diskette. Ahnliche Routinen wie DISKMAP sind natdrlich in zahlreichen kauflichen Disketten-Hilfsprogrammen fix und fertig enthalten. Bei DISKMAP handelt es sich jedoch vielmehr um em n Beispiel, daS Ihnen dabei helfen soil, WIE man derartige Hilfsprogramme in Maschinensprache schreibt. Daher wurde das Assembler-Listing ausfdhrlich dokumentiert. Viele hier gezeigte Verfahren lassen sich auch fdr andere Maschinenprogramme verwenden, wie z.B. die Ausgabe von Texten auf dem Bildschirm oder die Abf rage der Konsolen-Tasten. Der geneigte Programmierer wird DISKMAP wahrscheinlich in mannigfaltiger Weise ausbauen. Interessant waren z.B. eine Nummern-Skala am Bildschirmrand und die Moglichkeit der Drucker-Ausgabe.

05 iDISKETTENANALYSE MIT DISK MAP 07; 10 DCCMD=$0302 ;Command-Byte fUr Diskhandler 20 DSTAT=$0303 ;Status-Byte fur Diskhandler 30 DBUFL=$0304 ;Pufferadresse low far Diskhandler 40-DBUFH=$0305 ;Pufferadresse high far Diskhandler 50 DBYTL=$0308 ;Pufferlange low +Ur Diskhandler 60 DBYTH=$0309 ;Pufferlange high fur Diskhandler 70. DAUX1=$030A ;Sektornummer low fUr Diskhandler 80 DAUX2=$0306 ;Sektornummer high fur Diskhandler 90 DSK1NV=$E453 ;Betiebssystem Einsprung fUr Diskhandler 0100 1CCMD=$0342 ;Command-Byte far IOCB 0110 1CBAL=$0344 ;Pufferadresse low far IOCB 0120 1CBAH=$0345 ;Pufferadresse high fUr IOCB 0130 1CBLL=$0348 ;Pufferlange low +Ur IOCB 0140 1CBLH=$0349 ;PufferlAnge high +Ur IOCB 0150 1CAX1=$034A ;AUX-Byte 1 far IOCB 0160 ICAX2=$034B ;AUX-Byte 2 +Ur IOCB 0170 CONSOL=V:001F ;Adresse far die Funktionstasten 0180 CIOV=$E456 ;Betriebssystemeinsprung +Ur IOCB 0190 COLOR1=$02C5 ;Farbregister 1 0200 COLOR2=$02C6 ;Farbregister 2 0210 COLOR4=$02C8 ;Farbregister 4 0220 AUDF1=$D200 ;Frequenzregister 1 0230 AUDC1=$D201 ;Audiokontrollregister 1 0240 AUDCTL=$D208 ;Audiokontrollregister gesammt 0250 SKCTL=$D2OF ;serielle Portkontrolle 0260 *=$3500 ;Startadresse des Programms 0270 LDX #$10 ;Zeile 270-380 0280 LDA #$03 ;offnen des 0290 STA ICCMD,X ;IOCB-Kanals #1 0300 LDA #0BUF&255 ;far Screen-Editor (E:) 0310 STA 1CBAL,X ;zum Lesen und Schreiben 0320 LDA #0BUF/256 ;in der Graphicstufe '0' 0330 STA ICBAH - ,X 0340 LDA #$OC 0350 STA ICAX1,X 0360 LDA #$00 0370 STA ICAX2,X 0380 JSR CIOV 0390 LDA #$83 ;Farbe far Hintergrund 0400 STA COLOR2 ;und Rand 0410 STA COLOR4 0420 LDA #$OB Helligkeit far 0430 STA COLOR1 ;Buchstaben 0440 LDA #$OB ;Zeile 440-540 0450 STA ICCMD,X ;Ausgabe des ErOffnugstextes 0460 LDA #TXTBUF&255 ;auf den Bildschirm 0470 STA ICBAL,X 0480 LDA #TXTBUF/256

0490 STA ICBAH,X 0500 LDA #$70; LAnge d.


0510 0520 0530 0540 0550 0560 0570 0580 0590 0600

Ertiffnungstextes STA ICBLL,X LDA #$00 STA ICBLH,X JSR CIOV STRTKY LDA CONSUL ;Abfrage ob CMP #$06 ;START-Taste gedrUckt BNE STRTKY iwurde LDA #$28 ;neue Farbe fUr STA COLOR2 ;Hintergrund STA COLOR4 ;Rand

0610 LDA #$00 ;und 0620 STA COLOR1 ;Buchstaben 0630 JSR SOUND ;Soundunterprogramm 0640 LDX #$10 UOCB #1 0650 LDA #CLRBUF&255 ;Bildschirm 0660 STA ICBAL,X ;loschen 0670 LDA #CLRBUF/256 ;und linken 0680 STA ICBAH,X ;Cursorrand 0690 LDA #$01 ;auf '4' setzen 0700 STA ICBLL,X 0710 LDA #$04 0720 STA $52 ;Adresse fur linken Cursorrand 0730 JSR CIOV 0740 LDA #$03 ;Cursor 3 Zeilen nach unten rucken 0750 STA $54 ;Adresse fiir ROWCRS 0760 LDA #$52 ;Lesen von der 0770 STA DCCMD ;Diskette 0780 LDA #DBUF&255 ;Adresse low und high 0790 STA DBUFL ;fill- die Daten 0800 LDA #DBUF/256 ;eines Disketten0810 STA DBUFH ;sektors 0820 LDA #$00 ;Sektorzeiger auf '0' 0830 STA DAUX1 ;setzen 0840 LDA #$00 0850 STA DAUX2 0855 NXTSECTR LDA CONSUL 0857 CMP #$03 ; Abf rage der OPTION-Taste 0860 BNE WEITER 0861 JSR SOUND 0862 JMP END 0865 WEITER LDA DAUX1 ;Zeire 670-790 0870 CLC ;Sektornummer um '1' erhahen 0880 ADC #$01 ;und prUfen, ob Sektor 0890 STA DAUX1 ;720 schon erreicht 0900 LDA DAUX2 ;ist 0910 ADC #$00 0920 STA DAUX2 0930 CMP 4$02 0940 BNE DSK 0950 LDA DAUX1 0960 CMP #$D1 0970 BEQ END ;Sektor 720 ist erreicht 0980 DSK JSR DSKINV 0990 BMI ERROR ;Sektor Kaputt 1000 LDX #$80 ;128 Bytes pro Sektor 1010 NXTBYT LDA DBUF,X ;Alle Bytes auf '0'? 1020 BNE VOLL ;nein-Sektor ist beschrieben 1030 DEX 1040 BEG LEER ;ja-Sektor ist leer 1050 JMP NXTBYT 1060 ERROR LDX #$10 ;Sektor Kaputt! 1070 LDA #ERRBUF&255 ;Symbol '!' auf dem 1080 STA ICBAL,X ;Bildschirm ausgeben 1090 LDA #ERRBUF/256 1100 STA ICBAH,X 1110 JSR CIOV 1120 JMP NXTSECTR ;ndchsten Sektor lesen 1130 VOLL LDX #$10 ;Sektor 1st beschrieben! 1140 LDA #VOLLBUF&255 ;Symbol '*' auf dem 1150 STA ICBAL,X ;Bildschirm ausgeben 1160 LDA 4tVOLLBUF/256 1170 STA ICBAH,X 1180 JSR CIOV

1190 JMP NXTSECTR ;nachsten Sektor lesen 1200 LEER LDX #$10 ;Sektor ist leer! 1210 LDA #LEERBUF&255 ;Symbol auf dem 1220 STA ICBAL,X ;Bildschirm ausgeben 1230 LDA #LEERBUF/256 1240 STA ICBAH,X 1250 JSR CIOV 1260 JMP NXTSECTR ;n4chsten Sektor lesen 1270 END LDX #$10 ;letzter Sektor bzw. OPTION-Taste 1280 LDA #TXT1BUF&255 ;Text auf dem 1290 STA ICBAL,X ;Bildschirm ausgeben 1300 LDA #TXT1BUF/256 1310 STA ICBAH,X 1320 LDA #$2E Textldnge (s.u.) 1330 STA ICBLL,X 1340 JSR CIOV 1350 JMP STRTKY ;zur Abf rage fUr die START-Taste springen. 1370 SOUND LDA #$00 ;Sound initialisieren 1380 STA AUDCTL 1390 LDA #$03 1400 STA SKCTL 1410 LDA #$A8 ;Lautstarke Kanal 1 1420 STA AUDC1 1430 LDA #$28 ;Tonhiihe Kanal 1 1440 STA AUDF1 1450 LDX #$10 ;Verzogerungsschleife 1460 LOOP LDY #$FF 1470 LOOP1 DEY 1480 BNE LOOP1 1490 DEX 1500 BNE LOOP 1510 LDA #$00 1520 STA AUDC1 1530 RTS 1540 OBUF -BYTE "E-",$9B DISK MAP",$9B 1550 TXTBUF .BYTE " 1560 .BYTE "Bitte legen Sie die zu ueberpruefende",$9B 1570 -BYTE "Diskette ein,",$9B 1580 -BYTE "und druecken Sie die START-Taste.",$9B 1590 TXT1BUF -BYTE $9B,"Fuer naechste Disk-Map",$98 1600 -BYTE "bitte START druecken." 1610 CLRBUF .BYTE "U" 1620 ERRBUF .BYTE "!" 1630 LEERBUF -BYTE 1640 VOLLBUF -BYTE "*" 1650 DBUF .BYTE $00

*** 3500 3508 3510 3518 3520 3528 3530 3538 3540 3548 3550 3558 3560 3568 3570 3578 3580 3588 3590 3598 35A0 35A8 35B0 3588 35C0 35C8 35D0 35D8 35E0 35E8 35F0 A2 3F 03 9D 8D 8D A9 45 00 1F 8D 8D A9 45 04 85 E4 03 8D DO AD 03 03 C9 OD CA A9 45 A2 36 93 10 9D A9 48 C6 C5 42 03 9D DO C6 C5 EO 03 85 54 A9 44 OC 03 02 02 9D A9 49 C9 02 02 9D A9 52 A9 04 00 03 20 03 OR 02 FO 80 27 9D 20 A9 45 A2 03 03 9D 20 BD A9 44 70 03 06 8D 20 44 01 20 52 03 8D AD 1B 18 03 DO 48 BD 4C 44 56 E3 03 10 9D A9 4A 56 C8 OR 03 9D 20 DO C8 1B 03 9D 56 8D A9 OA IF 36 69 69 07 20 E4 C3 03 E4 9D 20 A9

DISK 42 36 03 E4 02 9D A9 48 56 F9 02 36 A9 48 E4 02 36 03 DO 4C 01 00 AD 53 36 35 A9 4C 44 56 E2 03 A9 9D 45 A9 00 A9 83 A9 OR 42 03 36 9D 03 A9 E4 AD A9 28 A9 00 A2 10 36 9D 03 A9 A9 03 03 A9 8D 05 A9 00 C9 03 04 36 8D OA 8D OR OA 03 E4.30 DO 18 A2 10 36 9D 93 35 03 A9 E4 4C 9D 44

MAP

*** 03 E4 9D A9 4C A9 01 10 F8 3A 20 20 DO 65 53 7A 70 65 74 75 63 20 D2 2E 20 65 61 20 72 7D A9 4C 44 2E 47 03 D2 AO A9 9B 20 C4 9B 20 69 75 72 98 65 6E 6B 64 D4 98 6E 20 70 D3 75 21 36 93 03 9D 35 8D A9 FF 00 1D 20 C9 1D 6C 65 20 75 44 20 64 65 69 2D 98 61 44 98 D4 65 2E 9D 35 A9 48 A9 OF 28 88 8D 1D 20 D3 1D 65 20 75 65 69 65 20 6E 65 54 1D 65 69 62 Cl 63 2A 45 A2 36 03 00 D2 8D DO 01 1D 20 CB 42 67 64 65 66 73 69 64 20 20 61 46 63 73 69 D2 6B 00 03 10 9D 20 8D A9 00 FD D2 20 20 AO 69 65 69 62 65 68 6E 72 53 D3 73 75 68 68 74 D4 65 41 20 A9 45 56 08 A8 D2 CA 60 20 20 CD 74 6E 65 65 6E 65 2C 75 69 D4 74 65 73 2D 74 20 6E 55 56 B2 03 E4 D2 8D A2 DO 45 20 20 Cl 74 20 20 72 64 74 98 65 65 Cl 65 72 74 4D 65 64 2E 44

sp
A9 08 06 OA AD C9 D1 A2 FO El 03 10 9D 35

35F8 3600 3608 3610 3618 3620 3628 3630 3638 3640 3648 3650 3658 3660 3668 3670 3678 3680 3688 3690 3698 36A0 36A8 3680 36B8 36C0 36C8 36D0 36D8 36E0

STARTADRESSE=ANFANGSADRESSE=$3500 ENDADRESSE=$36E4
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

***

OBERRASCHUNG

***

HIER 1ST NOCH GENUS PLATZ FuR EINE KLEINE uBERRSCHUNGSROUTINE. GEBEN SIE DAS PROGRAMM EINFACH HEXADEZIMAL EIN (Z.B. MIT DEM ATARI-ASSEMBLER-MODUL), STARTEN SIE ES BEI $0600 UND SCHLIEBEN SIE EINEN STEUERKNuPPEL AN BUCHSE 1 AN. SIE HABEN DANN
DIE GELEGENHEIT, IHREN SPEICHER

0600 0608 0610 0618 0620 0628 0630 0638 0648 0650 0658 0660 0668 0670 0678 0680

AD 85 OF 49 AO CC 20 B1 06 38 E9 OA 01 91 A2 DO

30 CD C9 C9 04 C8 78 CC
CC

02 AD OD 07 81 81 06 38 OA 01 91 AO CC 20 AO 60

85 78 FO FO CC CC 18 E9

CC 02 21 2F 18 69 90 28

AD C9 C9 18 69 00 D4 91

31 OE OR 90 28 91 AO CC

02 FO FO EA 91 CC 04 C8

0640 81

00 91

CC 20 78

EINMAL AUS EINER GANZ ANDEREN PERSPEKTIVE ZU BETRACHTEN' STARTADR.=ANFANGSADR.=$0600 ENDADR.=$0683

4C E9 00 06 91 CC 10 F8

06 AO 04 81 CC 91 CC CB 81 CC CC 20 78 06 4C

04 C8 78 FE 00

B1 81 06 88 00

CC CC 4C DO 00

18 69 OA FD 00

69 00 06 CA 00

IF'FRIC3C3FZicNIP-IPIE3C17-1-11311 - 2:= E=IIP4 P'Al(NFR (NL_L_C3EEMEEIMEE Lir3EEFL_EI- C3LJNIC3EEP4 Thema leidigen beim einmal wieder war-en wir Hiermit SOFTWARE-SCHUTZ. Spatestens wenn ein Programmierer seine eigenen Programme per Tauschliste angeboten bekommt, wird ihm klar, daB er fur den Schutz seiner geistigen Produkte zuwenig getan hat. Sicher: sobald eine neue Schutzmethode auf dem Markt auftaucht, machen sich die Knacker an die Arbeit, das passende Gegenmittel emn herauszufinden. Fur viele Tilftler ist dies sicher nur Denksport; in der Regel fidhrt es jedoch dazu, daB Ihr in monatelanger Arbeit erstelltes Programm, wenn es erst einmal 'entschiltzt' ist, sozusagen rum Freiwild wird. Ob es dann in Clubs kostenlos getauscht oder von Dritten unter anderem Namen verkauft wird, kann Ihnen dann letztlich egal sein - SIE gehen in jedem Fall leer aus. Blo zahlreiche Einbausatze ATARI Mittlerweile werden fdr angeboten, mit deren Hilfe die Diskettenstation wesentlich 'intelligenter' wird. Hit derartig aufgerusteten Geraten lassen sich auch viele Disketten duplizieren, die bis dahin dank spezieller FormatierungsmaBnahmen +dr den Endverbraucher als unkopierbar galten. Fur den ernsthaf ten Anwender rum Segen: nicht wenige Hersteller Finanz- und ihre Programmiersprachen, werfen Textverarbeitungs-Programme etc. auf kopiergeschutzten Disketten auf den Markt. Ein mitgeliefertes Sicherheits-Duplikat ist die. Ausnahme, und nicht selten mdssen Sie oder Ihr Handler langere Zeit auf Ersatzlieferung aus USA warten, wenn mal eine Diskette kaputtgeht und umgetauscht werden muB. Da freut sich naturlich wenn er von wichtigen Programmen selbst eine jeder, Sicherheitskopie machen kann. Und nicht im Schadensfall wochenlang ohne Korrespondenz oder Buchhaltung auskommen mu132 Angesichts der Tatsache, daB auf jedes verkaufte Programm mehrere Raubkopien kommen - die Statistiken schwanken derzeit zwischen 2 bis 10 Kopien pro Original - muB man jedoch auch die Sorgen der Software-Hersteller verstehen: wahrend jemand programmiert, egal ob am Feierabend oder hauptberuflich, kann er nichts anderes machen. Wird sein Programm dann unerlaubt kopiert, hat er praktisch umsonst gearbeitet, die Investition zahlt sich nicht aus. Hundertprozentigen Programm-Schutz gibt es naturlich sowieso nicht. Insbesondere aber, solange das Urheberrecht fur Software noch in den Kinderschuhen steckt, obliegt es Ihnen, den 'Piraten und Knackern' das Leben mtiglichst schwer zu machen. Wir wollen uns hier zwei Methoden herausgreifen: (1) Softwareschutz mit Hilfe von Hardware-Schldsseln. Jeder kann Ihr Programm kopieren - benutzen kann es nur, wer den Schldssel hat. Verschlusselte Urheberrechtsangaben und Benutzerhinweise. Besonders wirksam bei Maschinen- und kompilierten BASIC-Programmen.

(2)

ati

nic%mmici-myrz

Wie bereits angesprochen, besteht gerade bei professioneller Anwender-Software (z.B. Finanzbuchhaltung) die Notwendigkeit, im Bedarfsfall so-fort auf Sicherheitskopien zurackgreifen zu ktinnen. Soil der Anwender in der Lage sein, diese Kopien selbst anzufertigen, das Programm aber trotzdem gegen miBbrauchliche Vervielfaltigung geschatzt sein, bietet sich far Atari-Computer der HARDWARE-SCHLOSSEL an.

Wie funktioniert so em n Programmschutz-Schlassel? Im wesentlichen besteht der Schlassel aus einem 9-poligen Stecker, in dessen Gehause sich die verschiedensten elektronischen Bauelemente befinden konnen. Auf eine der Steuerknappel-Buchsen gesteckt, wird die korrekte Funktion dieser Bauelemente vom Programm laufend abgefragt. Fehlt der Stecker, oder ist es nicht der Richtige, wird dem Benutzer der Zugriff zum Programm versagt. Die Abf rage von Bauelementen wie ICs, Widerstande, Drahtbracken etc. ist bei den Atari-Computern besonders einfach, da die Steuerknappel-Buchsen mit dreierlei Schnittstellen ausgestattet sind. Pro Buchse finden wir: 4 TTL-kompatible Leitungen, einzeln als Ein- oder Ausgang programmierbar I TTL-kompatible Triggerleitung, nur als Eingang verwendbar (entprellt!) 2 Analog/Digital-Wandler zur Abf rage von Widerstanden (50 Abfragen/sec.) AuGerdem sind in jeder Buchse die Masseleitung und die TTL-kompatible Versorgungsspannung (+5 Volt) vorhanden (Siehe Abbildung 1).

.44,41:1

JOYSTICKBUCHSEN-BELEGUNG PIN 1 2 3 4 5 6 7 8 if BUCHSE 1 2 BIT BIT BIT BIT PADD . STRIG +5 V MASSE PADD . 0 1 2 3 1 0 4 5 6 7 3 1 BUCHSE 3 4 BIT BIT BIT BIT PAM). STRIG +5 V MASSE PADD . 0 1 2 3 5 2 4 5 6 7 7 3 RICHTUNG VORWARTS RUCK W. LINKS RECHTS ( * C1) \ 8 C23 10 (3) (4) a ) C5)

0 2

46 Abbildung 1

a X6)

a C7)

a / (8) CV

Ein ganz einfacher DatenschutzschlUssel lieBe sich z.B. bauen, indem man von Stift 7 (+5 Volt) je einen Widerstand zu den Paddle-Eingangen (Stift 5 und 9) lotet, und z.B. eine DrahtbrUcke 3 (Steuerkn. nach links) zu Stift 8 (Masse). Bevor Sie von Stift den Stecker mit seinem Gehause verschrauben, sorgen Sie mit etwas Klebstoff noch dafUr, daB niemand hineinschauen kann, um Ihrem Geheimnis auf die Spur zu kommen. Die Abfrage des Schlassels kann dann, natUrlich gut versteckt, aus Ihrem (listgeschUtzten) BASIC-Programm heraus erfolgen: 30 40 50 60 99 REM FUER PADDLEEING. TOLERANZ ZULASSEN' IF PADDLE(0)<80 OR PADDLE(0))85 THEN 99 IF PADDLE(1)<120 OR PADDLE(1)>125 THEN 99 IF STICK(0) el-11 THEN 99 -"DATENSCHUTZ-SCHLUESSEL FEHLT":NEW

Ein derart einfacher SchlUssel ist von gewitzten 'Knackern' naturlich schnell durchschaut. Wird sein Innenleben mit Hilfe der Befehle ?STICK(0), WADDLE(0) etc. durchleuchtet, ist es nicht weiter schwierig, ihn auch nachzubauen. Schlassel arbeiten daher aktiven 'Intelligentere' mit Bauelementen, meist mit integrierten Schaltungen. Dazu werden einige der TTL-kompatiblen E/A-Leitungen als Ausgange geschaltet und bilden die Eingtinge der SchlUssel-Schaltung. Abhangig vom logischen Zustand dieser Leitungen (0 oder 1) gibt die Schaltung em n Ausgangssignal ab, das wiederum einem als Eingang definierten Anschlue der SteuerknUppel-Buchse zugefUhrt wird. Das dazugehorige Programm sendet also bestimmte Bit-Kombinationen zur abgefragten Buchse und prUft dann, ob dies mit dem korrekten Signal beantwortet wird. Dabei sind im wesentlichen drei Schaltungstypen denkbar:
(1) Gatter-Loqik: mehrere digitale Eingangsleitungen,

(2)

(3)

von deren Pegel der Zustand einer oder mehrerer digitaler Ausgangsleitungen abhangt. Zeitqlied: die Schaltung erhalt em n digitales Eingangsignal und gibt mit festgelegter zeitlicher Verzogerung em n digitales Ausgangssigal ab. Dicatal/Analoq-Wandler: mehrere digitale Eingangsleitungen, von deren Pegel em n analoger Ausgangswert (fUr PADDLE) abhangt.

41-

Bei den Schaltungstypen (2) und (3) muB man mit fertigungsbedingeten Abweichungen rechnen und bei der Abf rage entsprechende Toleranzen einrAumen. Demgegenaber liefert die Schaltung (1) aufgrund ihrer rein digitalen Bauweise stets ei"deutige Resultate, was zu mehr Sicherheit und einfacherer Programmierung fahrt. Far unser Beispiel eines wirklich schwer zu knackenden Schlassels vewenden wir daher den SCHALTUNGSTYP (1). Als Schaltlogik benutzen wir die 4 NAND-Batter des TTL-Bausteins 74LS00. Abgefragt wird die BUCHSE1 des Atari 400/800 (welchem PIA-Register dies bei den Modellen 600, 1400 etc. entspricht, lag uns bei RedaktionsschluB nach nicht vor; maBte aus KompatibilitAtsgranden aber eigentlich identisch semi. - Ggf. ausprobieren!).

BUCHSE BIT WERT

111111311110110
3 4
2

ICHICHIG A A El A PIA-Ausgang PIA7PORT . '4:


6 12 .11 9
G4 13 10 Y=A+F.0 8 G3 am

PIA-Eingang

+5 to tai4
,

or

E3Masse 8 7 G1 G4 -7 741.500 Cn=Anschl -Hp) Sti ft V. Steuerkn.-8uchse C

Abbildung 2 Abbildung 2 zeigt die Verbindung der NAND7Gatter miteinander. Man sieht, daB die Verknapfung so gewAhlt wurde, clan die Schaltung aber drei EingAnge und omen Ausgang verfagt. Mit drei Leitungen, die jeweils logisch 0 odor logisch 1 sein konnen, sind 8 verschiedene Bit-Kombinationen mglich. Durch die logische Verknapfung der Gatter ist der Ausgang bei manchen Kombinationen stets log.1 und bei anderen Kombinationen stets log.0. Diese GesetzmABigkeit zeigt die sogennannte Wahrheitstabelle, die alle moglichen Eingangskombinationen (hier:8) durchspielt: Wert EingAnge Ausgang C B A 0 1
2

000 001
0 10

0
0
0 0

3 4 5 6 7

1 01 100 101 10 1 111

1 1 0 1

Wahrheitstabelle far unser Schlassel-Beispiel aus Abbildung 2.

Far andere Zusammenschaltungen selbtverstdndlich auch andere

der Gatter ergeben sich Ausgangs-Ergbnisse in den

Wahrheitstabellen. Allein vom hier gezeigten Schema (3 Eingange/1

Ausgang) lassen sich 254 verschiedene Variationen ertUftein (eigentlich 256, aber nur Einsen oder nur Nuller als Ausgangssignale sind naturlich nicht sehr sinnvoll. Nach dermaBen vie]. Theorie beginnen wir nun am besten gleich mit dam praktischen Aufbau unseres ersten Schldssels. Wahrend Sie das dabei entstehende Ergebnis noch mit zahlreichen anderen Lesern teilen, wird Sie die gesammelte Erfahrung in die Lage versetzen, Ihre personlichen Datenschutzschlassel zu entwerfen. Verstecken Sie die Abfrage(n) gut genug im Programm und verkleben oder vergieBen Sie den Stacker anstandig, entlockt Ihnen Ihr Geheimnis so schnell niemand. Bestatigt wird dies durch den geringen Anteil von jenen Programmen am 'grauen Markt', die mit der Schlassel-Methode geschatzt sind.

ZUERST DIE HARDWARE: WAS SIE BRAUCHEN: 1-TTL-IC 74L600 (z.B. von Texas Instruments) 1 neunpoligen Min-D-Steckverbinder (Buchsenseite) 1 Gehause dazu, und zwar moglichst groB genug, daB das IC hineinpaBt (z.B. von Harting) - Achtung: wegen geanderter Abmessungen des Einsteckbereichs bei Atari 600/800XL etc. zuvor maenehmen! dunne isolierte Litze (Wrire-Wrap-Draht eignet sich gut) dannes Lotzinn 7 sowie das bliche Werkzeug (Feinliitkolben, Abisolierzange, etc.)

In Abbildung 2 sehen Sie, welche Verbindungen Sie zwischen den einzelnen Gatter-Ein- und Ausgangen herstellen mussen, und mit welchen AnschluB-Stiften des Steckers die Schaltung verbunden warden muB. Achtung: Die nebenstehenden Nummern geben an, um welchen der 14 AnschlUsse des IC-Gehduses as sich jeweils handelt (invers gedruckte Zahlen: Stecker-Kontakte). Abbildung 3 zeigt die Anordnung der einzelnen Anschlusse am IC, und zwar von oben gesehen. Damit Sie erkennen, welcher Kontakt Nummer 1 ist, bringen die Hersteller entweder an einer der Schmalseiten eine Kerbe an, bzw. Kennzeichnen Kontakt 1 mit einem Punkt.

+5 volt

0 0

Masse

Abbildung 3

Verzinnen Sie zunachst die Kontakte des ICs und Anschlasse des Steckverbinders. Verbinden 'Sie dann jene IC-Kontakte direkt miteinander, die gemd8 Abb.2 zusammengehoren, namlich 1+2, 3+4, 6+12 sowie 9+10+11. Far die erste Experimentier-Version werden dann die sechs Leitungen zum Stecker (3xEIN, lxAUS und 2xIC-Stromversorgung) ca. 10 cm lang gemacht. Nach erfolgreichem Test der Schlassel-Elektronik wird die Litze dann auf ca. 15 mm verkarzt, damit das Ganze problemlos ins Steckergehause pal3t. Nachdem alle Verbindungen zwischen Stecker und TTL-IC hergestelit sind, pra-fen Sie Ihr Werk noch einmal durch Vergleich mit Abbildung 2 und 3. BESONDERS WICHTIG: Kurzschlasse unbedingt vermeiden'l TEST ** TEST ** TEST Nachdem Sie sich vom ordnungsgema8en Aufbau Ihrer Schaltung aberzeugt haben, kOnnen Sie den Schlassel mit dem folgenden kleinen BASIC-Programm testen. Es generiert Ihnen eine Wahrheitstabelle, die unbedingt mit der oben gezeigten Tabelle Ubereinstimmen muO, andernfalls liegt ein Schaltungsfehler vor. (Anmerkung: sowohi das BASIC-Testprogramm als auch die im folgenden gezeigte Abfrage-Routine gehen von der Benutzung des niedrigeren Halb-Bytes von PIA-Port A des Atari 400/800 aus, also Steuerknappel-Buchse 1, ganz links. Far die Benutzung anderer Buchsen und/oder anderer Computer sind die Programme entsprechend zu modifizieren.) 10 REM SCHLUESSELTEST 20 BUCHSE1=54016:CRA=54018:DIM BITMUSTER$(3) 30 POKE CRA,56:REM RICHTUNGSREGISTER 40 POKE BUCHSE1,247:REM F7 50 POKE CRA,60:REM PORT EINSCHALTEN 52 ", "WAHRHEITSTABELLE"CI 53 "# CBA Y" 54 ? " 55 FOR I=0 TO 7 60 READ BITMUSTER$ 70 POKE BUCHSE1,I 75 '-' I;" ";BITMUSTERS; 80 IF PEEK(BUCHSE1)>=8 THEN '? " 1" 90 IF PEEK(BUCHSE1)<8 THEN -) " 0" 95 NEXT I 96 STOP 100 DATA 000,001,010,011,100,101,110,111

WAHRHEITSTABELLE 4# CBA Y 0 1 2 3 4 5 6 7 000 001 010 011 100 101 110 111 0 0 0 0 1 1 0 1

ERFOLGREICHER PROBELAUF,

Hat Ihr Muster den Test erfolgreich bestanden, kohnen Sie nun die AnschluBdrahte verkurzen und das IC So zurechtracken, da0 es'im Steckergehause Platz hat. Achten Sie darauf, dal -3 beim Einpassen in das Gehause keine unerwanschten Verbindungen entstehen! 1st der Stecker verschraubt (oder verklebt), konnen wir mit der Abfrage-Routine beg innen.
NUN ALSO ZUR SOFTWARE.

Probieren Sie doch einmal, welches Ergebnis Ihnen eine Abfrage Ihres Schlassels mit ?STICK(0) gibt. Um die Antwort vowegzunehmen: Der Rechner zeigt STICK(0)=15, also dasselbe Ergebnis, als ob an die Buchse 1 aberhaupt nichts angeschlossen ware! - Wer nun schon einen derart raffinierten Hardware-Schlassel hat, braucht natarlich auch eine clevere Abfrage-Routine. Grundsatzlich bieten sich zwei Moglichkeiten der Abfrage an: (A) Einzelabfrage an wichtigen Stellen im Programm. (B) Standige Schlassel-Abfrage im Interrupt-Betrieb. Zu (A): Diese Methode bedarf wohl keiner weiteren Erklarung. Wie der Schlassel aus BASIC heraus angesprochen und gepraft wird, geht aus dem gerade gezeigten Testprogramm her-var. Aber denken Sie immer daran: Die Sicherheit, die der Schlassel bieten kann, steht und +alit damit, wie gut Sie die Abfrage verstecken! Also: LISTund Variablenschutz anwenden, Abfrage maglichst Uber das gesamte Programm verteilen und dafar sorgen, da8 es nicht mehr lauft, wenn jemand auch nur eine Zeile herausnimmt. Wenn moglich, kompilieren! Zu (B): Die standige Abfrage laet sich beim Atari recht leicht realisieren, da der Programmierer seine eigenen Maschinenprogramme in den VERTIKAL-BLANK-INTERRUPT-PROZESS (VBI) einfagen kann. Dieser ProzeB wird im Abschnitt 'MUSIK IM VERTIKAL BLANK INERRUPT' eingehend erlautert und auch in meinem Buch DIE FUNDGRUBE-TIPS UND TRICKS FOR ATARI-COMPUTER anhand eines ausfahrlichen Programmbeispiels praktisch erprobt (Bildschirmhelligkeitsregelung, Seite 76/77). Daher soil er hier nicht nochmals ausfahrlich erartert werden. Was ist also zu tun? Wir bauen unsere Schlassel-Abfrage in den VBI mit em n und setzen den TIMER2-Vektor auf die Startadresse unserer Abfrage-Routine. Den TIMER2 selbst setzen wir zu Beginn und bei jedem Durchlauf auf Eins. Damit wird TIMER2 bei jedem VBI auf Null herabgezahlt, soda unser Schlassel 50-mal pro Sekunde abgefragt wird! Hintereinander werden die 8 moglichen Eingangskombinationen an die Schaltung ausgegeben und das korrekte Ausgangssignal abgefragt (siehe Wahrheitstabelle): 0100 0110 0120 0130 0140 0150 LDA STA LDA LDA BIT DUI #$ 5; BITMUSTER 010... DDRA; ...AN PORT A AUSGEBEN DDRA; PORT A GLEICH WIEDER LESEN... itsce; ...UM BIT 4 VON PORT A ZU PRUEFEN DDRA; WENN BIT4=0 DANN STOP; ZUR ABSCHALT-ROUTINE

Wie man sieht, lnt sich der Ausgang unserer Gatterkombination sehr leicht mit Hilfe des BIT-Befehls der 6502-CPU abfragen. Lie-fart er nicht das gewanschte Ergebnis, springt unsere Routine

.41-

zunAchst zum Abschnitt 'STOP', um die weitere Benutzung des Rechners solange zu blockieren, wie kein ordnungsgemAGer Schlussel auf Buchse 1 steckt. Dazu wird der Bildschirm verdunkRlt (DMA - Abschaltung) und die Tastatur verriegelt (POKMSK-Sperrung). Das zu schdtzende Programm bleibt bei dieser Methode vollkommen funktionsfAhig, nur daB es ohne Ihren SchlOssel nicht benutzt werden kann. Lediglich die Abfrage-Routine arbeitet nach der Blockierung oeiter. Sobald der Schldssel aufgesteckt wird, werden Bildschirm und Tastatur wieder freigegeben. Naturlich nur, solange der Schlussel steckt! Diese Methode der Abf rage bietet gerade fur professionell genutzte Software einen groBen Vorteil: mut3 die zur Programmbenutzung authorisierte Person den Arbeitsraum vorrdbergehend verlassen, kann das Programm mit alien gerade in Bearbeitung befindlichen Daten im Rechner verweilen; es braucht lediglich der SchlUssel abgezogen zu werden. Kehrt der Anwender zurdck, stehen Programm und Daten sofort wieder zur Verfugung. Generell lassen sich mit dem Datenschutz-Schldssel natdrlich auch sehr gut Teilbereiche eines Programmpaketes gegen unerlaubte Benutzung sichern. Z.B. wenn eine SekretArin zwar Adressen eingeben darf, aber keinesfalls in der Lage sein soil, unerlaubte Adren-Listen fur die Konkurrenz auszudrucken. Oder wenn emn VerkAufer aus einer Artikelliste zwar Verkaufspreise, aber keine Einkaufspreise entnehmen oder gar Andern darf. Oft soil auch die WARTUNG eines Programms nur von bestimmten Personen durchfdhrbar sein. Aber zurdck zur Abfrage-Routine: nachdem Sie das Programm eingegeben und assembliert haben, speichern Sie den Objekt-Code am Besten erst einmal ab. Vdr.den Einsatz der Routine in Ihrem BASIC-Programmm empfiehlt es einen bestimmten SchlQssel erstellte sich, das +Ur Maschinenprogramm in DATA-Anweisungen umzuwandeln, z.B. mit dem Hilfsprogramm DATAMAKER an anderer Stelle in diesem Buch. Ein separates Maschinen-Programm auf Ihrer Diskette ist nur allzu leicht durchschaut und ausgebaut. Fur den gezeigten Muster-Schldssel wurde die Umwandlung in DATAs bereits vorgenommen - siehe folgendes BASIC-Programmbeispiel. Ganz Neugierige kannen damit vor dem Selbst-Assemblieren auch mal schnell ausprobieren, wie die VBI-Routine funktioniert. 1st die Routine erst einmal initialisiert, stoppt das Demo-Programm sofort, wenn Sie den Schldssel abziehen. Fur den 'Ernstfall' ist es natdrlich unbedingt erforderlich, einige weitere Schutzma8nahmen zu treffen..Die wichtigsten sind: 1. Auf Drucken von SYSTEM RESET wdrde die VBI-Routine verlassen werden. Dies mu8 verhindert werden mit: POKE 580,1 (neues Booten bei Drucken von RESET), oder POKE 202,1 (lost bei DrUcken von RESET den NEW-Befehl aus) 2. Die BREAK-Taste wird durch unser VBI-Programm 'so ganz nebenbei' mit verriegelt. Bis die VBI-Routine jedoch initialisiert ist, sollte man BREAK moglichst ganz zu Beginn mit POKE 16,64:POKE 53774,64 sperren. 3. Alle DATAs, POKEs, USRs, GOSUBs etc. mdssen GRONDLICH verschlusselt werden. Siehe dazu PROGRAMMSCHUTZ TEIL 2.

0000 021A 0228 D300 D302 0600 0601 0603 0606 0608 0608 060D 0610 0612 0615 0617 061A 061C 061F 0620 0622 0625 0627 0629 062C 062E 0630 0633 0635 0637 063A 063C 063E 0641 0643 0645 0648 064A 064C 064F 0651 0653 0656 0658 065A 065D 065F 0661 0664 0666 0669 066A 066C 066E 0671 0674 0677 067A 067C 067F

68 A920 8D2802 A906 8D2902 A901 8D1A02 A938 8D02D3 A9F7 8D00D3 A93C 8D02D3 60 A900 207406 D043 A901 207406 DO3C A902 207406 D035 A903 207406 D02E A904 207406 F027 A905 207406 F020 A906 207406 D019 A907 207406 F012 A922 8D2F02 A940 8510 8DOED2 A901 8D1A02 60 A900 8510 8D2F02 4C6406 8D00D3 ADOOD3 A908 2C00D3 60

0100 0110 0120 0130 0140 0150 0160 0170 0180 0190 0200 0210 0220 0230 0240 0250 0260 0270 0280 0290 000 0310 020 0330 0340 0350 0360 0370 0380 0390 0400 0410 0420 0430 0440 0450 0460 0470 0480 0490 0500 0510 0520 0530 0540 0550 0560 0570 0580 0590 0600 0610 0620 0630 0640 0650 0660 0670 0680 0690 0700

;SCHLUESSELABFRAGE V1.1 *= $600 = CDTMV2 $21A ;WERT VON TIMER1 CDTMA2 = $228 ;VEKTOR VON TIMER1 DDRA = $D300; RICHTUNGSREGISTER/PORT A CRA = $D302;STEUERREGISTER A INIT PLA LDA #$20 ;VEKTORADR.=$0620 STA CDTMA2 LDA #$6 STA CDTMA2+1 #$1 LDA ;ZAEHLER = 1 STA CDTMV2 LDA #$38 ;RICHTUNGSREG. A ANWAEHLEN STA CRA LDA #$F7 ;BITS 0,1 UND 2 = AUSGANG STA DDRA ;BIT 3 = EING. LDA #$3C ;PORT A ANWAEHLEN STA GRA RTS LDA #$00 ; BITMUSTER 0 PRUEFEN JSR PRUEF BNE STOP LDA #$01 ; BITMUSTER 1 PRUEFEN JSR PRUEF BNE STOP LDA #$02 ; BITMUSTER 2 PRUEFEN JSR PRUEF BNE STOP LDA #$03 ; BITMUSTER 3 PRUEFEN JSR PRUEF BNE STOP LDA #$04 ; BITMUSTER 4 PRUEFEN JSR PRUEF BEQ STOP LDA #$05 ; BITMUSTER 5 PRUEFEN JSR PRUEF BEQ STOP LDA #$06 ; BITMUSTER 6 PRUEFEN JSR PRUEF BNE STOP LDA #$07 ; BITMUSTER 7 PRUEFEN JSR PRUEF BEQ STOP LDA #$22 STA $22F ;DMA WIEDERHERSTELLEN LDA #$ 40 STA $10 ;POKMSK WIEDERHERSTELLEN STA $D2OE SETZEN LDA #$01 STA CDTMV2 RTS LDA #$00 STOP ; POKMSK SPERREN STA $10 ; DMA ABSCHALTEN STA $22F ; ABFRAGE FORTSETZEN JMP SETZEN DDRA PRUEF STA DDRA LDA ; BIT 4 VON PORT A 41$08 LDA DDRA BIT RTS

Hier nun das Beispiel fur den Einbau der VBI - Schlusselroutine in Ihr BASIC-Programm: 100 REM EINFACHES BEISPIEL ZUM EINBAU DER 110 REM SCHLUESSELROUTINE IN EIN BASIC-PROGRAMM 120 FOR A=0 TO 127 130 READ B:POKE 1536+A,B 140 NEXT A 150 X=USR(1536) 160 "DM/DOLLAR-UMRECHNUNG" 165 -1 11 PROGRAMM STOPPT BEI ABZIEHEN" 167 ")- DES DATENSCHUTZSCHLUESSELS !" 170 "DM-BETRAG "::INPUT DM 180 '7' "ENTSPRICHT ";DM*2.7:" DOLLAR" 190 GOTO 170 1000 DATA 104,169,32,141,40,2 1010 DATA 169,6,141,41,2,169 1020 DATA 1,141,26,2,169,56 1030 DATA 141,2,211,169,247,141 1040 DATA 0,211,169,60,141,2 1050 DATA 211,96,169,0,32,116 1060 DATA 6,208,67,169,1,32 1070 DATA 116,6,208,60,169,2 1080 DATA 32,116,6,208,53,169 1090 DATA 3,32,116,6,208,46 1100 DATA 169,4,32,116,6,240 1110 DATA 39,169,5,32,116,6 1120 DATA 240,32,169,6,32,116 1130 DATA 6,208,25,169,7,32 1140 DATA 116,6,240,18,169,34 1150 DATA 141,47,2,169,64,133 1160 DATA 16,141,14,210,169,1 1170 DATA 141,26,2,96,169,0 1180 DATA 133,16,141,47,2,76 1190 DATA 100,6,141,0,211,173 1200 DATA 0,211,169,8,44,0 1210 DATA 211,96 AbschlieBend noch em n paar Tips: 1. Von jedem neuen Schldssel-Typ zuerst em n Muster mit verschiedenfarbigen Litzen anfertigen. Spdter platzsparenden Wire-Wrap-Draht benutzen. 2. Bei Gatterkombinationen zundchst auf dem Papier durchspielen, welches die gunstigsten Anordnung ist, also am IC die wenigsten Kreuz-und-Quer-Verbindungen verursacht. Besonders wichtig +dr die Serienproduktion! 3. Arbeiten Sie bei der Gatter-Kombination mit Bool'scher Algebra. Zum Einstieg gut geeignet, weil praxisbezogen: 'Digitale Elektronik fUr Anfanger' (Kleemann, RPB-Band 179 vom Franzis-Verlag). 4. Bei der Entwicklung Ihrer Schaltlogik hilft Ihnen auch die Obersicht 'LOGISCHE VERKNOPFUNGEN', siehe weiter hinten. 5. NAND Gatter wie im 74LS00 eignen sich besonders gut zur Herstellung der verschiedensten Verkndpfungen far Ihre Schlussel-Logik. 6. Um Platz zu sparen, IC-Beine mit Seitenschneider kdrzen. 7. Teilen Sie Ihrem Kunden sicherheitshalber mit, daB es sich bei 'seinem' Schldssel nicht notwendigerweise um em n Onikat handelt. 8. Arbeiten Sie sorgfaltig und vermeiden Sie KurzschlUsse und andere ungewollte Verbindungen. 1st der Schldssel erst einmal verklebt oder gar vergossen, sind keine Korrekturen mehr moglich!
-

nimk -ruirz
EEE t1

A) Verschlasselte Maschinenprogramme Zahlreiche Hilfsprogramme ermoglichen em n Anschauen von Speicherund Disketteninhalten sowohl in Hexadezimal- als auch in ASCII-Darstellung. Damit z.B. das Maschinenprogramm zur Schlasselabfrage aus Teil 1 nicht so leicht zu entdecken ist, empfiehlt es sich, zu jedem DATA-Wert eine Zahl hinzuzuzahlen (odor abzuziehen). Beim Generieren des Maschinenprogramms mit READ und POKE darf man dann allerdings nicht vergessen, die DATAs im umgekehrten Verfahren zuvor zu korrigieren. Auch der dazu verwendete Programmabschnitt sollte natarlich nicht auf den ersten Buick durchschaubar sein. Damit niemand Ihr Maschinenprogramm einfach durch den Befehl 'RTS' ($60, Unterprogramm-Racksprung) ersetzt, sind folgende MaGnahmen angebracht: a) Verschlasseln Sie auch den Unterprogramm-Einsprung. b) Fragen Sie mit PEEK des Ofteren einzelne besonders wichtige Bytes Ihres Maschinenprogramms ab und machen Sie den weiteren Programmverlauf von deren Vorhandensein abhangig. c) Sehen Sie (ebenfalls verschlasselte) Byte-Prafsummen vor. d) Installieren Sie zur Tarnung und Irrefahrung eine (leichter zu findende) Schutzroutinen-Attrappe.

B) Verschlasselte Copyright-Hinweise Auch Ihr Urheberrechts-Vermerk sollte sich nicht so leicht entfernen odor gar durch fremde Namen ersetzen lassen. Dazu 1st es erforderlich, da0 der Vermerk nirgendwo im Klartext steht, auGer zur Tarnung, vesteht sich! Speicher- und Diskettensuchprogramme ihn sonst allzu schnell au-F.. Da das sparen Verschlasselungs-Problem des fteren auftaucht, sollten Sie sich zu diesem Zweck entsprechende Hilfsprogramme machen. Ein Beispiel dazu finden Sie auf Seite 55 unten. Es erzeugt, far dieses Beispiel willkarlich gewahlt l zwei DATA-Zeilen. In diese Zeilen, es sind hier Nr.500 und 510, wird der von Ihnen als Eingabe geforderte Text verschlasselt eingesetzt: Von jedem ASCII-Zeichen wird der Wert 6 abgezogen, sodaB em n anscheinend sinnloser Text entsteht, der eher an em n Maschinenprogramm erinnert (Am besten ihn daher 'versteckt' man auch zwischen Maschinenprogramm-DATA-Zeilen. RESTORE nicht vergessen!) Die vom Hilfsprogramm zur Demonstration erzeugten DATA-Zeilen wurden dann in das auf Seite 55 oben abgedruckte BASIC-Programm der eingesetzt. Dies ist das Programm, das den Titel TRICKKISTE-Programmdiskette anzeigt (Hinweise zu dieser Diskette Neben der hier angewendeten siehe letzte Seite). Copyright-Verschlasselung zeigt dieses Programm deutlich, wie habsch sich em n Bildschirm mit geanderter Display-Liste macht. Um Ihnen nicht die Ubersicht zu verbauen, wurde die Kodierung nicht zu tief getrieben. Noch effektiver ware es z.B., innerhalb der Umsetzungsschleife (Hilfsprogr. Zeile 60 bis 100) jeden ASCII-Wert des Eingabe-Strings mit einem yam Schleifenzahler I abhangigen mathematischen Die Ausdruck zu verknapfen, z.B. 3*I 4. Entschlasselung wird dann mit einem entsprechenden umgekehrten Ausdruck versehen. Dabei ist jedoch darauf zu achten, dae - nur
-

sinnvolle Zeichen entstehen darfen, so AnfUhrungszeichen innerhalb eines Strings etc.

z.B.

keine

Am besten geben Sie das Titelbild-Programm einmal em, um daran IHRE ganz persOnliche Copyright-Schutzroutine zu entwickeln.

BASIC-KOMPILIERUNG: Besonders gut geschUtzt wird Ihr . nach obigen


Vorschlagen aufbereitetes Programm, wenn Sie es anschlieBend kompilieren. Dazu bietet sich besonders der ABC COMPILER von MONARCH DATA SYSTEMS an, und zwar aus gutem Grund: Der ABC COMPILER beginnt die Kompilierung Ihres BASIC-Programms, indem er einen sogenannten Run-Time-Interpreter auf Ihre Diskette schreibt. An ihn heran hangt er dann Ihr kompiliertes Programm, _das praktisch nur noch aus Zeigern in den Interpreter besteht. Damit wird Ihr Werk unlistbar und praktisch undurchschaubar. Es ist daher angebracht, stets eine unkompilierte Version des Programms aufzubewahren - andernfalls konnen auch Sie bei spater entdeckten Fehlern kaum noch Veranderungen vornehmen. Im Gegensatz zum ABC COMPILER erzeugen einige andere Maschinen-Code, den Ihnen BASIC-Compiler em n gelibter Assembler-Programmierer relativ leicht 'auseinandernimmt'.

C) Copyright-VerschlUsselung in Maschinensprache. Auch in Assembler-Programmen lassen sich Copyright- und andere Vermerke recht gut verschlasseln. Hier bietet sich z.B. die EXCLUSIV-ODER-VerknUpfung_ der einzelnen ASCII-Zeichen mit ebenfalls erst durch logische VerknUpfung entstehenden Zahlenwerten an.Wirkungsvoll ist auch die Methode, jedes Zeichen der Textmitteilung durch Zusammensetzen von Werten aus zwei Tabellen zu bilden - als eine der beiden Tabellen wird das Maschinenprogramm selbst benutzt! Auch bei Maschinenprogrammen sollte man einzelne Bytes -der verschlUsselten Meldung lauf end darauf abfragen, ob irgendein baser Mensch sie etwa trotz unserer Bemahungen entfernt hat. Und es empfiehlt sich natUrlich auch hier, dieselbe Meldung nochmals im Klartext leicht auffindbar einzufUgen.

D) MaBnahmen bei yam -Programm festgestellten Veranderungen. Oft ist es garnicht so sinnvoll, em n Programm gleich total 'abstarzen' zu lassen, wenn eine Manipulation festgestellt wird. trotzdem em n auf den ersten Buick ist Wirkungsvoller dessen Fehlverhalten vom funktionierendes Programm, miBbrauchlichen Vertreiber Ihrer Software zUnachst Ubersehen wird und erst bei dessen Kundenzu VerdruB fiihrt. Welche MaBnahmen emn dessen Schutzroutinen eine Veranderung Programm ergreift, Ein paar afgespUrt haben, hangt vom Anwendungsbereich ab. Beispiele: GESCHAFTSPROGRAMME, die sich stets 'verrechnen', wenn es sich um eine illegale Kopie handelt. SPIELE, bei denen zwar em n Spielfeld erscheint, aber keine Spielfiguren. HILFSPROGRAMME, z.B. em n Kopierprogramm, das Immer einen Sektor 'vergiBt'. TEXTVERARBEITUNGSPROGRAMME, die nach Eintippen des fanfhundertsten Wortes abstUrzen (besonders argerlich!).

100 REM BEISPIEL FLIER EINEM PROGRAMM110 REM TITEL MIT VERSCHILUESSELTER 120 REM COPYRIGHT-ANGABE 130 REM 140 DIM GEHEIMS(1.00),NAMES(1.00) 150 GRAPHICS 1+10:G=500:X=G,50 160 SETCOLOR 2,0,0:SETCOLOR 0,13,6 170 SETCOLOR 1,4,10:5ETCOLOR 4,0,0 160 SETCOLOR 3,9,12 190 REM AENDERUNG DER DISPLAY - LI -STE 200 DL=PEEK(5150) -11- PEEKC5G1I -N- 25G 210 POKE DU+11,7:POKE DL+13,2:POKE DU+14,2 220 REM 230 POSITION 0,3 240 7 Wr6;" INGENTEUR - OUERO" 250 UG;" HARALD ZOSCHKE" 2 150 7 2415;"

270 7 31115" 260 7

die trick - kiste"


#15;"

290 REM COPYRIGHT ENTSCHLUESSEUN 300 REM UND AUSGEBEN 310 RESTORE G:GOSUO 420:7 #0;" 320 RESTORE G -I- X:GOSUB 420:7 330 POSITION 0,14 4* Tips" 340 7 UG;" Tricks" 350 7 1401," programme' 3150 7 #61," Tabellen" 370 7 1146;" 360 POSITION 0 20 fuel'- ihren" 390 7 Z1161." aTari com.uTer" 2416;" 400 410 GOTO 410:REM HIER GEHT5 METTER 420 REM ENTSCHLUESSELUNGSROUTINE 430 NAMES=' :READ GEHEIMS 440 FOR M=1 TO LENCGEHEIMS, 450 NOMES(I,X)=CHRSCASCCGEHEIMSCI,X11+152 46.0 NEXT 470 GEHEIMS="":RETURN 496 REM 499 REM VERSCHLUESSELTE DATEN 500 DATA pift 1-BC1Cf-A-A-Tim3be 510 DATA "3# 16+32 -1.6ifTec13b_h GOO REM im Klar- TexT: 610 REM on Harald Zoschke 620 REM Cc) 1903 Holzkir - chen

Ra;MIAMES ";NAMES

10 REM VERSCHLUESSELUNGSROUTINE 20 REM CBEISPIELI 30 DIM NAMES(100)=CODIES(100) 40 FOR ZEILE=500 TO 510 STEP 10 CHRS(125);"TEHT";:INPUT NAMES 50 GO FOR 1=1 TO LEN (NAMES) 70 CODESCI,X)=CHRSCASCIENAMESCI,X12-151 60 NEXT 90 FOR 1=1 TO LEN (CODES) 100 NEXT 110 GRAPHICS 0:POSITION 2,4 120 7 ZEILE;" DATA 66 ;CODES:7 "CONT" 125 REM EINUESEN PER DATA-ZEILEN

126 REM Ill FORCED-READmoDus

130 POSITION 2,0 140 POKE 042,13:STOP 150 POKE 642,12 160 NEXT ZEILE

M intiC H I M EMI

M M E r=4IL

Sie kennen das Problem: Oft sind Sie als BASIC-Programmierer z.B. aus Geschwindigkeitsgrunden - gezwungen, Teile Ihres Programms in Assembler-Sprache zu schreiben. So-fort taucht dann die Frage auf, wie man dieses Maschinenprogramm aus seinem BASIC-Programm heraus lddt oder erzeugt. Grundsatzlich bieten sich drei Maglichkeiten an:

1. Ablegen des Maschinenprogramms in DATA-Zeilen. Einlesen mit READ und POKE. Beispiel: 10 20 30 40 50 60 70 MEM = 1536:REM ANFANG DES MASCHINENPROGRAMMS (BEISPIEL) FOR I = MEM TO MEM+6 READ BYTE POKE MEM,BYTE NEXT I X=USR(START):REM HIER STARTADRESSE EINSETZEN DATA 104,169,00,141,197,02,96

2. Laden des Maschinen-Codes von der Diskette. Beispiel: 10 15 20 25 30 35 40 45 50 55 60 65 MEM = 1536:REM ANFANG DES MASCHINENPROGRAMMS (BEISPIEL) OPEN #1,4,0,"D:PROGNAME" FOR I= 1 TO 6:REM KOPFDATEN (STARTADR. ETC.) ENTFERNEN GET #1,BYTE NEXT I TRAP 60:REM AUF EOF/DATEIENDE ABBRECHEN GET #1,BYTE POKE MEM,BYTE MEM = MEM+1 GOTO 70 CLOSE #1:REM MASCHINEN-CODE KOMPLETT EINGELESEN X=USR(START):REM HIER STARTADRESSE EINSETZEN

3. Einbetten des Maschinen-Codes in einen String Beispiel: 10 DIM PROG$(9):REM PROGRAMMLAENGE . 20 PROG$="hellHatildegift" 30 X=USR(ADR(PROG$+X)):REM +X, WENN STARTADR. <> ANFANGSADR.

Jede dieser drei Moglichkeiten hat ihre Vor- und Nachteile, z.B. was die Anderbarkeit der Maschinenprogramme betrifft. Oft bietet sich jedoch die dritte Methode in jeder Hinsicht als einfachst -e Losung an, zumal sie auch noch den Vorzug der automatischen (das bedeutet naturlich, dal-3 Verschieblichkeit mit sich bringt das Maschinenprogramm relokatibel, d.h. verschieblich auch geschrieben werden mu8!). - AuBerdem erspart man sich eventuell auftretende Probleme mit Doppelbelegungen der haufig benutzten 'page 6' (das ist der freie RAM-Bereich von $0600 bis $06FF, also 256 Bytes).

Wie aber bringe ich mein Maschinenprogramm in einen BASICString hinein? Zu Fun ware das sicher sehr umstandlich. Recht einfach geht's aber mit dem auf den folgenden Seiten abgedruckten Hilfsprogramm 'USRSTRNG'. Ihr Maschinenprogramm kann z.B. zunachst mit dem DOSBefehl 'L (BINARY LOAD)' geladen werden; anschlienend gehen Sie mit 'B (RUN CARTRIDGE)' ins BASIC und laden das BASICProgramm 'USRSTRNG', das Ihr Maschinenprogramm automatisch in einen String umwandelt. USRSTRNG loscht sich nach vollendeter Arbeit selbst. Obrig bleibt Ihr MaschinenprogrammString, den Sie mit LIST abspeichern. Mit dem Befehl ENTER konnen Sie Ihn dann in Ihr BASICProgramm einfidgen. Je nach Anwendungsfall haben Sie die Wahl zwischen zwei Ausfuhrungen des Programms 'USRSTRNG': USRSTRNG.RAM erwartet Ihren MaschinenCode bereits im RAM. USRSTRNG.DSK bolt sich Ihren MaschinenCode von der Diskette.

USRSTRNG.RAM: USRSTR1NG ' 1 GRAPHICS WOKE 752,1s? 0 2 POKE 82,10 0 TIMANDLUNG VON NASCHINENCODE IN STRINGS' 3 ? :? :? 'ACHTUNG: Es wird vorausgesetzt,':? "class sich lhr Naschinencode bereits':? 'is Computer-RAN befindet.' 4? "(z.B.: tit DOS BINARY LOAD AL0) 1 0 'Wenn dies der Fall ist, START druecken 1 0 'Ansonsten Naschinencode laden.' 5 IF PEEK(53279)06 THEN 5 6? '0':? 1? :? 'Dieses Programs eodifiziert sich' 7? 'soweit selbst, 'lass as Ende nur noch':? "die BASIC-Zeilen sit des String"0 'bleiben.' 8? 'Diese Zeilen kann ean sit LIST auf die's? 'Disk laden, und dann pit ENTER an sein Progress anhaengen.' 9 POKE 752,0:? :? :? 'Startaddresse (dez.) 1 6-INPUT START 10 ? :? 'Endaddresse (dez.)MINPUT END!? :? 'Zeilennummer (>34) 1 1:INPUT LINE:LINE=LINE-1 11 GOSUB 30:FOR 1=1 10 10:? I:NEXT I1GOSUB 31 12 BYTENUPEND-START:BYTENUN=BYTENUN+1 13 COUNT=INT(BYTENUN/90)+1:A=-89:0=0:120=0 14 FOR I=START TO ENDIIF PEEK(I)=34 OR PEEK(1)=155 THEN 0110+1 15 NEXT 1:IF 020 THEN 8010 17 16 DIN Z(M,BYTE(D) 17 606118 30:FOR 1=1 TO COUNT:A=A+90044.90-1:LINE=LINE+I
18 IF BAYTENUN THEN PHYTENUN 19? LINE;' A$(';A; 1 1 ";81")01CHR$(34)1

20 FOR Z=A TO BI8YTEEPEEK(START+1-1)11F BYTE/134 OR BYTE=155 THEN 011411+11Z(00)=Z:BYTE(OD)=BYTEt? CHR$(32)11NEXT Z 21? CHR1(27);CHRUBYTE); 22 NEXT Z:? CHR$(34) 23 NEXT I 24 IF g=0 THEN SOTO 29 25 110=1:FOR 1=1 TO INT(8/5)+1:N=0
26? 27? AWII(00)i",';INQW)=CHRi('ilYTE(00);'):";:N=N+1:1F N=5 OR 0-00=0 THEN ? "8":00412+1:NEXT I:80TO 29

28 00404.1180T0 27 29 GOSUB 31160SUB 30:FOR 1=11 TO 28:? I:NEXT I:606118 31:60TO 33


30? CHR$(125):? :RETURN

31?'CONT':POSITION 2,000KE 842,13:STOP


32 POKE 842,12:RETURN 33 606118 30:FOR 1=29 TO 34:? I:NEXT Is? '? CHR$(125):LIST:POKE 842,12' 34 POSITION 2,0:POKE 842,13:STOP

Anmerkung: Wo im Listing das Zeichen 'Cr' erscheint, geben Sie bitte die Tastenfolge ESC CTRLCLEAR (=Bildschirm loschen=CHR$(125)) ein.

USRSTRNG: DISKFILEVERSION 1 GRAPHICS 0:POKE 752,10 0 ' USR8TRIN8 DISK ' 2 POKE 821 1:? :? "UMWANDLUNG YON MASCHINENCODE IN STRINGS' 3? t? 'ACHTUNS: Bitte Diskette eit Maschinen-"0 'codefile einlegen und START druecken.' 4 IF- PEEK(53279)06 THEN 4 5 ? '0'1? 0 0 'Dieses Program sodifiziert sich"0 'soweit selbst, dass ae Endo nur noch' 6? 'die BASIC-Zeilen sit des String':? "bleiben.":? 'Diese Zeilen kann can nit LIST auf die' 7? 'Disk laden, und don sit ENTER an sein Prograee anhaengen.' 8 DIN FN$(14),F$(14) 9 POKE 752,00 0 'FILENAME: ';:INPUT FM:FS:FM:IF FN$(1,1)=4" THEN IF FN$(2,2)="1" OR FN$(3,3) 0 0 THEN 11 10 F$(1,2)=901F$(3)=FN$ 11? 'Zeilennumeer (>39) ';:INPUT LINEILINE=LINE-1:TRAP 3210PEN 01 1 4 1 01 FfiCLOSE 01:TRAP 40000 12 GOSUB 36:FOR I=1 TO 11:? I:NEXT IISOSUB 37:60SUB 13:8010 16 13 CLOSE 01:0PEN 01,4 1 0,F$OET 01018ET 01,AISET 01,LOISET 01,HI 14 START*L0+256*HIISET 01,LOIGET 01,HIILET END=L0+2564111:BYTENUM2END-START:BYTENUM=BYTENUPIIRETURN 16 0201FOR 1 21 TO BYTENUM:GET 111,BYTE:IF BYTE=34 OR BYTE=155 THEN g=g+1 17 NEXT IIIF g=0 THEN 80SUB 13:00TO 19 18 DIM Z(i1),BYTEIMOOSUB 13 19 80SUB 36:COUNT=INT(5YTENUM/90)+1:A=-89:0100:FOR 1=1 TO COUNT:A=A+90:134+90-1:LINE=LINE+1 20 IF DBYTENUM THEN B=BYTENUM 21? LINE;' ASCIA;',"IBI9= 1 ;CHRI(34); 22 FOR Z=A TO B:SET 01,BYTE:IF BY1E=34 OR BYTE=155 THEN gg=g0+1:Z(011)=Z:BYTEIgg)=BYTE0 CHR$(32);:NEXT Z 23? CHRS(27);CHRS(BYTE); 24 NEXT ZO CHR$(34) 25 NEXT 1:CLOSE 01 26 IF 0=0 THEN 8010 31 27 gg=1:FOR 1=1 TO INT(Q/5)+1100 28?LINE+I; 29? AWIZ(110)1 1 ,4Z(gg);')=CHRW;BYTE(gg)1 1 ):";:N=N+1:1F N=5 OR 0-00=0 THEN ? 1 8 1 :004114.1:NEXT 118010 31 30 gg=1104.1:00TO 29 31 80SUB 37160SUB 36:FOR 1=12 TO 30:? IINEXT I:60SUB 37:6010 39 32 POKE 7520:POSITION 1,210 "CIFILE LEIDER NICHT 6EFUNDEN.' 33 POSITION 1,220 'BITTE RICHTI6E DISK EINLESEN OW:POSITION 1,231? 'START DRUECKEN!'; 34 IF PEEK(53279)06 THEN 34 35 CLOSE 010 4 1 :80TO 9 36?CHR$(125)0 :RETURN 37?"CONT":POSITION 0,01POKE 842,13:STOP 38 POKE 842,12:RETURN 39 GOSUB 361FOR 1=31 TO 391? I1NEXT I:? ? CHR$(125):LIST:POKE 842,12 1 :POSITION 0,0:POKE 842,13:STOP

Anmerkung: Wo im Listing das Zeichen 'id' erscheint, geben Sie bitte die Tastenfolge ESC CTRLCLEAR (Bildschirm loschen) em.

- i. r- I 41-at
4=1

C -t. rick 3

Seit mehr als einem Jahr ist nun das Sprachsynthese-Programm S.A.M. (Software Automatik Mouth) des kreativen amerikanischen Software-Herstellers DON'T ASK auf dem Markt. Auch zu zahlreichen deutschen Atari-Fans hat es semen Weg gefunden, zeigt es doch wieder einmal mehr, wieviel Hardware Atari uns fur unser Geld beschert: wahrend die ebenfalls erhaltliche Apple-Version eine teure Zusatzplatine erfordert, arbeitet die Atari-Ausfdhrung des S.A.M. ausschlieBlich auf Software-Basis. Ein gutes Beispiel dafdr, welche phantastischen Mdglichkeiten im POKEY-Chip stecken. 1st die S.A.M.-Original-Diskette einmal geladen ("gebootet'), sich die Sprachausgabe auf einfachste Art programmieren. Man braucht lediglich einen String namens SAM$ zu carnensionieren und den zu sprechenden Text als S.A.M.-Lautschrift in diesen String hineinzuschreiben. Durch Aufruf des S.A.M.-Programms mit X=USR(8192) wird der. Text dann automatisch gesprochen. Durch Einfdgen von Zahlen (1 bis 8) laBt sich sogar noch die Betonung beeinflussen. - Beispiel: 10 20 30 40 REM S.A.M. sagt: 'Hallo, ich bin em n Computer!' DIM SAM$(100) SAM$="/HAH4LOW. IHJ BIHN AYN KUMPYUW4TEHR8." X=USR(8192)

'ant

Dardberhinaus lassen sich durch zwei einfache POKE-Befehle die Sprechgeschwindigkeit und _ die Tonhohe verandern. Zur Ausgabe von englischsprachigem Text kann man sich auBerdem des Zusatzprogramms RECITER bedienen, das sich ebenfalls auf der S.A.M.-Originaldiskette befindet. Es ermifiglicht die Verwendung von Klartext, der dann automatisch in die von S.A.M. interpretierbaren Phoneme dbersetzt wird. DaB S.A.M. trotz seiner leichten Bedienbarkeit bei vielen Anwendern hierzulande nach erstauntem Anhoren der Demo-Programme in der Diskettenbox verschwand, liegt wahrscheinlich an den vermeintlichen Schwierigkeiten, S.A.M. deutsch sprechen zu lassen, sowie eine gleichzeitige Bildschirmdarstellung ohne Sprachverzerrung zu erreichen. Beides ist jedoch, wie Ihnen die folgenden Seiten zeigen werden, in den Griff zu bekommen. Da ist zunachst das deutsche S.A.M.-Alphabet. Es soil keineswegs em n Ersatz +dr das englischsprachige Manual sein, sondern eine Erganzung. Wer wissen will, wie man 'Computer' im S.A.M.-Alphabet buchstabiert, schlagt deshalb am Besten weiterhin im Original-S.A.M.-Handbuch nach. Die im folgenden gezeigte Zusammenstellung soil vielmehr auf die deutschen Sprachbesonderheiten eingehen, wie z.B. Umlaute etc. Alphabetisch und nach Lautgruppe geordnet finden Sie dort die Phoneme, die S.A.M. zum Sprechen der gewanschten Laute bewegen. Um daraus Wiirter zu bilden, werden die entsprechenden Phoneme einfach aneinandergefdgt. Dabei mussen jedoch bestimmte Regeln eingehalten werden. Da man hier oft leichter durch Probieren als durch Studieren weiterkommt, finden Sie hier em n kleines Programm, das Ihnen dabei helfen soil.

Bei dem Hilfsprogramm handelt es sich um einen Phonem -Tester, der Ihre Worter auf S.A.M. - verstandliche Schreibweise UberprUft. Laden Sie zunachst S.A.M und dann das Testprogramm. Geben Sie em n Wort in Phonem-Schreibweise em n und drucken Sie <RETURN>. War das Wort korrekt geschrieben, Wird S.A.M. es jetzt sprechen und, damit Sie in Ruhe kontrollieren kannen, ob die Aussprache Hirer Vorstellung entspricht, solange wiederholen, big auf Sie die START-Taste drilcken. Dann fordert das Programm eine neue Eingabe an. Jetzt kannen Sie entweder einen neuen Begriff eintippen, oder mit Hilfe der_ Cursor-Tasten und Editierfunktionen Ihren vorangegengenen Text verandern. - War Ihr Text nach S.A.M.'s Gesichtspunkten jedoch fehlerhaft, wird er nicht gesprochen, sondern Ihr Wort wird noch einmal angezeigt. Damit Sie Ihren Fehler gleich finden, erscheint das erste falsche Zeichen invers. Neben den bereits erlauterten Merkmalen konnen Sie bei Verwendung des Testprogramms die Tonhohe und die Sprechgeschwindigkeit andern, indem Sie, wenn Ihr (korrekter) Text gesprochen wird, die OPTION- bzw. SELECT-Taste dracken. Bei jedem Schleifendurchlauf werden dann diese beiden Parameter verringert. 1st em n Grenzwert erreicht, werden die Miller auf ihre Anfangswerte zurackgesetzt. Wird die Sprechschleife mit START abgebrochen, zeigt das Testprogramm stets die zuletzt benutzten Werte der Tonhahen- und Geschwindigkeitsregister an. Jedem Anwender steht es natUrlich frei, das Testprogramm nach semen personlichen Vorstellungen zu erweitern. Sinnvoll ware es zum Beispiel, die korrekt gesprochenen Worter automatisch in DATA-Zeilen abzuspeichern, ebenso die gewUnschten Tonhohen- und Geschwindigkeits-Parameter. Techni ken zur Erzeugung von Programmzeilen ('Forced Read Mode') finden Sie an anderer Stelle in diesem Buch, z.B. in der Verschldsselungs=Routine aus Seite 55 unten. 100 REM PHONEM-TESTER FUER S.A.M. (tm DON'T ASK) 110 DIM SAM$(50):SPEED=8208:PITCH=8209:TASTE=53279 120 SETCOLOR 2,0,0:SETCOLOR 1,0,14 *** SAMTEST V1. ***" 130 '1 CHR$(125);" "AENDERUNG DER TONHOEHE MIT OPTION" 140 "? "AENDERUNG DER GESCHW. MIT SELECT" 150 ? 160 ? :"" "ABBRUCH DER SCHLEIFE MIT START ":") 170 INPUT SAM$ 180 IF PEEK(TASTE)=3 THEN GOSUB 320 190 IF PEEK(TASTE)=5 THEN GOSUB 340 200 X=USR(8192) 210 IF PEEK(8211)<255 THEN GOSUB 270:GOTO 170 220 IF PEEK(TASTE)<>6 THEN GOTO 260 230 ? "> GESCHW.=";PEEK(SPEED); 240 ? " TONHOEHE=";PEEK(PITCH);" <" 250 GOTO 170 260 FOR W=1 TO 300:NEXT W:GOTO 180 270 REM FEHLER-ROUTINE 280 P=PEEK(8211):REM N=FEHLERPOSITION 290 REM FEHLER INVERS ANZEIGEN 300 SAM$(P,P)=CHR$(ASC(SAM$(P,P))+128) 310 ? SAMS:RETURN 320 IF PEEK(PITCH)>110 THEN POKE PITCH,20 330 POKE PITCH,PEEK(PITCH)+5:RETURN 340 IF PEEK(SPEED)>150 THEN POKE SPEED, 20 350 POKE SPEED,PEEK(SPEED)+10:RETURN

4EF

1='1-14=tirl

-t.I

cIi

El

Po - ri

f1 Iplin ,a.11=t

S.A.M. ist eingetr. Warenzeichen von DON'T ASK COMPUTER SOFTWARE.

S.A.M.-PHOMEM,BEISPMEE:

A E X 0 11 14 0 ii,V

AA EH IV OH UM EH ER
IIE

Bahn Mehl Knie Sohn Duch Sage, iilis Fuhilier-

AM EH IH,MH A0:A0 Ull AE ER V

Klappe BotT Knack Topf Bus Sacke viillig FUller,

DoPPel aUTe

5.A.M. - PHOMEM,BEISPIEL:

AU EX EU NU

AN AV OV OV

Bauch Elmer Eule Saulek

Konsonanten S.A.M. - PHOMEM,BEISPIEL: B D G -.., L M N HG NK 0 R 14


ST2mMloSe

S -tiMMhafte

B D G
V o ...J IL

M N HG -Dem. MK KM M-* It V

Ball Dach Hagen Jochen Tal Baum Plan Stange Schranke Ouelle Rosen Nasser

angenehm NMI( ankommen


HMG

KonsonanTieLn C CH F H K P PS 5 SCH T I) H Z P

50.M. - PHOMEM,BEMSPIEL.:

TZ -11,CH F ,H K P5 S SH T F KZ TS Z
P

Ace -ton Michael Hafen Ahorn Kuchen Paul Klaps Gras Fisch Kar-te Va -ter Taxe Zoo 5 -trape

Clan

Vase

ist schwer darstellbar. Wenn moglich, weichen Das lange Sie auf em n anderes Wort aus. ** 'Schranke' ist em n typisches Beispiel dafidr, daB sich durch Silbentrennung em n natilrlicherer Kiang ergibt (SHRAHNQKEH). *** Oft klingt das R 'deutscher', wenn man ihm em n Q voroder nachstellt (z.B. drei=DQRAY oder Regen=RQEHGEHN).

- _ D

III EIt
1:z E I-1 E r.4

1Z I IC I-I -

Nachdem wir nun gesehen haben, daD S.A.M., wenn auch mit etwas deutsch sprechen kann, ware naturlich noch eine weitere Sache von Interesse: Deutlich verstandliche Sprache bei gleichzeitiger Bilddarstellung. Zu diesem Thema bemerkt das S.A.M. -Manual, da0 bei nicht abgeschalteter Bilderzeugung die Stimme verstummelt wird, da ja 50-mal pro Sekunde etwas Rechenzeit fur die Bildaufbereitung abgezweigt werden mun (DMA). Wer bereit ist, extrem verzerrte Sprachwiedergabe hinzunehmen, kann den Bildschirm mittels POKE 8210,1 eingeschaltet lassen. Das Ergebnis ist dann allerdings tatsAchlich sehr traurig.Es geht aber auch anders:

Experimente mit S.A.M. haben ergeben, daB es immerhin EINE Grafikstufe gibt, die praktisch kaum zu Verzerrungen fiihrt ndmlich GRAPHICS 3+16! Diese Stufe bietet Ihnen eine Auflasung von 40 x 24 Punkten, wobei jeder Punkt eine von drei moglichen Farben haben kann. Hinzu kommt eine vierte Hintergrundfarbe. Auf diesen Erkenntnissen baut das BASIC-Programm SAMFACE auf. Es zeichnet em n freundliches Gesicht auf den Bildschirm. Damit es zu mu8 zuvor naturlich das Ihnen spricht, S.A.M.-Sprachsynthese-Programm geladen werden. Der Mund unseres Stellungen einnehmen netten Sprechers kann drei verschiedende (siehe Abbildung 1):

Mh..

Ahh.. Abbildung 1

Oh..

Vor jeder gesprochenen Silbe wird eines von drei Unterprogrammen


angesprungen, das die jeweils dazu passende Mundstellung auf den

Bildschirm bringt. Dazu wird jede Mundstellung unter Verwendung eines anderen Farbregisters gezeichnet. Dies geschieht, indem wir VOR den jeweiligen PLOT- und DRAWTO-Befehlen mittels COLOR angeben, durch

welchen SETCOLOR-Befehl sich die die Punkte sp&ter farblich


verAndern lassen sollen.

Alle Teile unserer Abbildung, die gerade nicht sichtbar sein sollen, lassen wir dann auf ganz einfache Weise verschwinden: wir setzen sie mit SETCOLOR auf den Farb- und Helligkeitswert, wie ihn der Hintergrund hat. Welche Farbregister in unserem Beispiel far die drei Bildteile jeweils benutzt werden, geht aus Abbildung 3a-c hervor. Hier sieht man auch, dan der obere Teil des Mundes aus Abbildung 2a, sozusagen die Oberlippe, zur Darstellung des Mundes in Abbildung 2b und 2c mitbenutzt wird. Um derartige Abbildungen schnell entwerfen zu konnen, finden Sie in Abbildung 3 das GRAPHICS-3-ARBEITSBLATT, dan Sie sich far den personlichen Gebrauch fotokopieren konnen. Bei einer geringen Auflosung wie in GRAPHICS 3 ist es noch ni , :ht allzu schwer, die HandzeichnUng dann 'zu Fun' in PLOT- und DRAWTO-Befehle umzusetzen. kann die Wer .noch keinen S.A.M.-Sprachsynthesizer besitzt, Mundbewegungen unseres Computergesichtes auch ohne Sprache ausprobieren. Ersetzen Sie die Zeilen 10 bis 99 des Listings 'SAMFACE' einfach durch den unten auf dieser Seite gezeigten Programmabschnitt Schliet3lich zeigt dieses Programm ja auch, wie man Computer-Animation unabhangig von Techni ken wie Player-Missile-Grafik und Page-Flipping realisieren kann. Zum Umschalten von S.A.M. auf Bildschirm-Betrieb wurde im Programm 'SAMFACE' abrigens nicht der Befehl POKE 8210,1 benutzt. Vielmehr wird in Zeile 50 em n SAM.-Maschinenbefehl mit dem Wert 234 (= $EA = Leerbefehl) aherschrieben. Die POKE-Register far Sprachgeschwindigkeit und Tonhohe bleiben dann dieselben wie bei abgeschaltetem Bildschirm-DMA. Um die Mundbewegungen auf den gesprochenen Text abzustimmen, bedarf es einigen Experimentierens; auch das hier gezeigte Programmbeispiel stellt mit Sicherheit noch nicht das Nonplusultra dar. Ferner warden Grafikstufen mit mehr Farben und/oder hdherer Auflosung bessere Bewegungsablaufe erlauben, fahren jedoch wie erwahnt zu verzerrter Sprachwiedergabe. Es ware jedoch nicht weiter verwunderlich, wenn DON'T ASK in spateren S.A.M.-Versionen nicht auch dieses Problem meistern warde...

10 REM GESICHT: DEMO FLIER EIN 11 REM SPRECHENDES GESICHT IN GRAPHICS3+16 12 REM MIT DREI MUNDSTELLUNGEN 15 REM 20 GOSUB 110:REM SESICHT ZEICHNEN 25 REM 30 REM MUNDBEWEGUNBENOHNES.A.M.(tm) 35 REM DURCHSPIELEN 40 REM 50 RESTORE 901FOR In TO 4 60 READ SPRUNG:GOSUB SPRUNGISOSUB 95:REM WARTESCHLEIFE 70 NEXT I 80 8010 50 83 REM 85 REM UNTERPROGRAMMEINSPRUENGE 86 REM FLIER DIE MUNDSTELLUNGEN 90 DATA 10100,10200,10100,10300 95 FOR 01 TO 150tNEXT W1RETURN 99 REM HIER GEHT'S WEITER WIE BE! 'SAMFACE'

eSs.

GRAPIIICS-3-CiR6EITSBLATT'..

. Grt4PHIICS -ARBEIT-SBLCiTT

111111111111101111111131111111111111111111111 13C11:10DIN111111- 11111111181:11111111111311111111111111111116


I 1 1_1_1_

10 REM SANFACE, DAB SPRECHENDE GESICHT. ACHTUNG: 15 REM FUER DIESES PROBRANN MUSS ZUNAECHST DER SPRACH-SYNTHESIZER 20 REM S.A.M. (to DON'T ASK Inc.) 8ELADEN WERDEN! 25 REM 30 GOSUB 110:REN GESICHT ZEICHNEN 40 DIM SAM$(100) 50 POKE 8550,23400KE 8551,2341POKE 8552,2340EN SAN AUF BILDSCHIRM-BETRIEB! 60 RESTORE 901FOR SILBE=1 TO 81READ MUND,SAMS:80SU8 MUND:X=USR(8192):NEXT SILK 70 BOTO 60 80 REM DATEN FUER SILBEN U. MUNDBEWEGUNGEN ('HALLO, ICH BIN EIN COMPUTER") 90 DATA 10200,/HAH4 1 10300,LOWG.,10200,1M10100,BIHN I 10200,AVN,10300,KUM,10200,PYUW4,10300,TEHR8. 99 REM 100 REM ZEICHENROUTINEN 105 REM 110 GRAPHICS 3+161POKE 559,0:COLOR 11PLOT 11,14:DRAWTO 22,14 120 PLOT 14 1 51DRAWTO 16,51DRAWTO 16,7:DRAWTO 14,71DRAWTO 14,6 125 PLOT 23,5:DRAWTO 25 1 5:DRAWTO 25 1 7:DRAWTO 23 1 7:DRAWTO 23 1 6 130 PLOT 18 1 101DRAWTO 18,91DRAWTO 19,8:DRAWTO 20,8:DRAWTO 21,91DRAWTO 21,101REN WAGE 140 RESTORE 1000:REM GESICHTSUMRISS 150 READ W:PLOT X,Y 160 FOR 1=1 TO 18:READ X I Y:DRAWTO X,Y 170 NEXT I 180 PLOT 13 1 11PLOT 15,11PLO1 17,1:PLOT 19,1tPLOT 21 1 11PLOT 23,1:PLOT 25,11PLOT 15,0:PLOT 17 1 0:PLOT 19,01PLOT 21,0 185 PLOT 23 1 0:PLOT 16,221DRAWTO 15 1 23:PLOT 23,22:DRAWTO 24,23:REM HAARE+HALS 190 PLOT 8,10:DRAWTO 1,9:DRAWTO 6,9:DRAWTO 6,14:DRAWTO 8 1 161REN OHR LINKS 195 PLOT 31 1 101DRAWTO 32 1 9:DRAWTO 33 1 9:DRAWTO 33 1 141DRAWTO 32,15:DRAWTO 31,161REM OHR RECHTS 199 REM 200 RESTORE 2000:COLOR 2 210 READ IV:PLOT X 1 Y 220 FOR 1=1 TO 14:READ X,YORAWTO X,V 230 NEXT I 299 REM 300 RESTORE 3000:COLOR 3 310 READ X,VIPLOT X 1 Y 320 FOR 1=1 TO 51READ X I VIDRAWTO X 1 Y 330 NEXT I 340 REM 350 REM BILDSCHIRM WIEDER EINSCHALTEN 355 REM BRUNDFARBEN SETZEN UND DANN 360 REM ZURUECK ZU IHREM PROGRAM 370 REM 400 GOSUB 101001POKE 559 1 34:RETURN 410 REM 420 REM ZEICHENDATEN FUER GESICHT UND MUNDSTELLUNSEN 1000 DATA 12,2 1 10,1 1 10 1 8 1 9,9 1 9,16,10 1 17,10 1 18,13,21,26,21 1 29,18,29,17,30,16 1 30,9,29,8,29,6,28,5,28,4,27,2,12,2 2000 DATA 12,10,14,12 0 13,12,13,16,14,17,14,18,15,19 2010 DATA 24,19,25 1 18 1 25 1 17 1 26 1 16,26 1 11,27 1 10,24,13 1 15,13 3000 DATA 16,15,16,17,17 1 18,22,18 1 23,17 1 231 15 4000 REM 10000 REM UNTERPROBRAMME ZUN SETZEN DER FARBREGISTER 10010 REM FUER DIE YERSCHIEDENEN MUNDSTELLUNGEN 10100 SETCOLOR 0 1 1,10:SETCOLOR 1,0 1 0;SETCOLOR 2,0 1 0 10105 REM WARTESCHLEIFE 'MUND GESCHLOSSEN' 10110 FOR W=1 TO 20;NEXT W:RETURN 10200 GOSUB 10100:SETCOLOR 0,1 1 101SETCOLOR 1,1 1 101SETCOLOR 2,0 1 0:RETURN 10300 GOSUB 101002SETCOLOR 0 1 1 1 101SETCOLOR 1,0,0:SETCOLOR 2,1,10:RETURN

4E1p

rii

IN4 C3 (1., VA
ina

E IM Pi 1_ /NI lE) LihreEt

E.;

1PN F. I
-

L_ -

Eigentlich milBte die Oberschrift lauten: noch zweimal S.A.M., denn als AbschluB unseres Kapitels zum Thema Sprachsynthese folgen nun noch zwei konkrete Anwendungsbeispiele. 1) S.A.M.'s BLUES: S.A.M. singt mit Begleitung. Wie eingangs erwahnt, laBt sich die Tonhohe der Stimme mit Hilfe eines Poke-Befehls verandern. Damit steht S.A.M.'s Karriere ale Sanger nichts mehr im Wege, auch wenn er nicht gerade die Oualitat eines Operntenors erreicht. In unserem kleinen Beispiel singt er jedenfalls einwandfrei einen Blues - und das sogar noch mit Begleitung. Der Text ist hier allerdings - wie so oft bei leichter Musik - weder sehr aussagestark noch umfangreich ('Das ist Sam's Atari-Blues").

Die Zur Begleitung werden Ubrigens auch Bass-Noten verwendet. Technik dazu ist einfach: da man mit dem unverzerrten SOUND Befehl (SOUNDx,y,10,z) nicht allzu ti e+ kommt, verwendet mann +Ur die Basse den Verzerrungswert 12 (SOUNDx,y,12,z). Hier gelten jedoch andere Zahlenwerte als beim Arbeiten mit dem Verzerrungswert 10. Damit Sie nicht lange herumprObieren massen, finden Sie die Notenwerte fUr beide Bereiche fix und fertig in einer Tabelle an anderer Stelle in diesem Buch. Experimentieren mUssen Sie jedoch mit der korrekten Tonhohe von S.A.M., da sie auBer vom POKE-Wert in Zelle 8209 auch noch vom jeweiligen Text abhangt. Zu diesem Zweck finden Sie hier em n kleines Hilfsprogramm.
-

Laden Sie zunachst S.A.M. - und dann das untenstehende Programm. Nach Eingabe eines Anfangswertes +Ur die Tonhohe - der nutzbare Bereich betragt etwa 20 bis 150 - wiederholt S.A.M. fortlauf end die Silbe 'BAA' (hier konnen Sie natdrlich auch einen anderen Laut einsetzen). Die Tonhehe laBt sich nun mit Hilfe eines SteuerknUppels an Buchse 1 verdndern. Bewegen Sie den KnOppel elach oben, wird der Ton hoher, bewegen Sie ihn nach unten, wird der Ton niedriger. Suchen Sie nun den richtigen Wert, indem Sie die Tonhiihe der S.A.M.-Silbe mit einer Stimmpfeife vergleichen, oder indem Sie in das Programm einfach den Befehl SOUND1,n,10,8 einfugen. Die Zahl 'n' entspricht dabei dem +Ur SOUND geltenden Notenwert aus der Tabelle weiter hinten in diesem Buch. Stimmt die Tonhahe, drucken Sie bitte die START-Taste. Bei der Zahl, die nun hinter dem Kommentar 'LETZTER WERT' angezeigt wird, handelt es sich um den korrekten POKE-Wert fUr die Tonhahe. Nachdem Sie ihn notiert haben, ktinnen Sie durch Eingabe eines neuen Anfangswertes die Tonhohe fur die nachste zu singende Silbe bzw. Phrase ermitteln. Wie man gefundene Werte programmtechnisch verarbeiten kann, zeigt Ihnen das Blues-Programm. Falls Sie beabsichtigen, in eigenen Programmen langere Gesangstexte vorzusehen, bringen Sie diese am besten zusammen mit den dazugehorigen Notenwerten in DATA-Zeilen unter.

10 DIM SAM8(50):PITCH=8209:SAMO'DAAAA"
20 ? CHR$(125):? 'S.A.M. TONHOEHENTESTER':SETCOLOR 2,0,0:SETCOLOR 4,0,0:SETCOLOR 1,0,14 30 ? :? IANFANGSNERT ";:INPUT A:POKE PITCH,A 40 XRUSR(8192);IF STICK(0)1114 THEN POKE PITCH I PEEMITCH1-1:80TO 40 50 IF STICK(0)=13 THEN POKE PITCH,PEEK(PITCH)+1:50TO 40 60 IF PEEK(53279)06 THEN 40 70 ? 'LETZTER WERT: ';PEEK(PITCH):RUN

IBIL_LP

-Ni...

100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270 280 290 300 310 320 330 340 350 360 370 380 390 400 410 420 430 440 450 460 470 480 490 500 510 520 530 540 550

REM ************************* REM * S.A.M.'S BLUES REM * ACHTUNG: ZUVOR MUSS * REM * S.A.M.(tm DON'T ASK) * REM * GELADEN WERDEN! REM ************************* DIM SAM$(100),CHORD$(2):PITCH=8209:SPEED=8208 POKE SPEED,70:POKE 8550,234:POKE 8551,234:POKE 8552,234 GOSUB 440 SAM$="DAH3S IH4ST SAEMS AADTAAAA8RIY4 BLUH4UH2UH8S" REM BLUESSCHEMA (12 TAKTE) FOR I=1 TO 12:READ CHORD$ SETCOLOR 0,I/2,8:SETCOLOR 1,1,8 SETCOLOR 2,I+3,8:SETCOLOR 4,1-1,2 IF CHORD$="C" THEN BASS=63:SAM=67:HIGH=60 IF CHORD$="F" THEN BAS6=48:SAM=53:HIGH=45 IF CHORD$="G" THEN BASS=42:SAM=49:HIGH=40 IF CHORD$="GX" THEN BASS=85:SAM=84:HIGH=40 POKE PITCH,SAM SOUND 1,BASS,12,4:SOUND 2,HIGH,10,3 SOUND 3,HIGH-1,103:SOUND 0,BASS,12,6 X=USR(8192) NEXT I SOUND 1,0,0,0:SOUND 2,0,0,0:SOUND 3,0,0,0 FOR W=1 TO 100:NEXT W POKE PITCH,38:SAM$="BIHDTEH NAM AYN3MAAL-SAEMM" X=USR(8192) FOR W=1 TO 100:NEXT W POKE PITCH,120:SAM$="0W4KEYBEY4BIY" X=USR(8192) FOR W=1 TO 100:NEXT W RESTORE :GOTO 190 DATA C,C,C,C,F,F,C,C,G,F,C,GX REM ZEICHENROUTINE ZUM SCHREIBEN VON 'S.A.M.' IN GR.3 GRAPHICS 3+16 SETCOLOR 00,8:SETCOLOR 1,4,8 SETCOLOR 2,4,8:SETCOLOR 4,8,0 COLOR 1:PLOT 11,6:DRAWTO 5,6:DRAWTO 5,9 DRAWTO 11,9:DRAWTO 11,12:DRAWTO 5,12 PLOT 13,12 COLOR 2: PLOT 15,12:DRAWTO 15,10:DRAWTO 21,10:DRAWTO 21,12 PLOT 15,9:PLOT 21,9:PLOT 16,8:PLOT 20,8 PLOT 17,7:PLOT 19,7:PLOT 18,6:PLOT 23,12 COLOR 3:PLOT 25,12:DRAWTO 25,6:DRAWTO 28,9 DRAWTO 31,6:DRAWTO 31,12:PLOT 33,12 RETURN

P.S.: Interessant ware sicher auch die Kombination eines S.A.M.SAngers mit dem Gesicht aus dem vorangegangenen Programm!

2) Hex- und ASCII-Dump mit Sprachausgabe. Hat man em n Maschinenprogramm als Hex-Dump eingetippt, mull der Speicherinhalt oft noch einmal mit der gedruckten Vorlage verglichen werden. Wer nicht gerade einen geduldigen Mitmenschen in der Ndhe hat, dem er endlos lange Hexadezimale Zahlenkolonnen vom Bildschirm vorlesen kann, damit dieser sie mit dem Listing vergleicht, wird sich vielleicht aber das Hilfsprogramm SAMDUMP freuen. Laden Sie zuerst S.A.M. und starten Sie dann SAMDUMP. Stecken Sie nun die Diskette ins Laufwerk, auf der sich die zu untersuchende Datei oder das Maschinenprogramm befindet. SAMDUMP fragt Sie nach dem Namen der zu untersuchenden Datei. Geben sie also den Namen em n und dracken Sie <RETURN>. Solite irgendetwas nicht stimmen (z.B. Time-Out oder falscher Dateiname), erscheint eine entsprechende Fehlermeldung. Andernfalls warnt S.A.M.: 'ACHTUNG, START!". Das bedeutet far Sie, daB Sie jetzt in Ihr Listing schauen sollten, da S.A.M. wenige Sekunden spAter damit beginnen wird, alle Bytes der Datei laut vorzulesen. Ein tiefer Signalton zeigt an, daB die beiden nAchsten Bytes die Adresse

der folgenden acht Bytes darstellt; nach der Adresse, also vor den
Daten horen Sie einen hohen Signalton. Die Adresse ist relativ und beginnt stets bei $0000. Dies kannen Sie bei Bedarf natUrlich Andern. Die Auflistung beginnt stets mit dem ersten Byte, bei Maschinenprogrammen also mit FF/FF/STARTADR./ENDADR (siehe Beispiel).

*** DISK-FILEDLIMP ***.

Datei-Ausgabe in HEX- und ATASCII-Code


WELCHE DATEI CD:NAME)

?D:JUX.SYS ATASCII AD 85 OF 49 AO CC 20 30 .,A1/.0 CD 1,..11,. C9 .x C9 84 C8 78 ..0011. x

UNTER5BRECHEN MIT OPTION AM ZEILENENDE ADR. *** HEX *** 06 AD C9 C9 18 69 00 83 31 OE 05 99 28 91 06 02 FO FO EA 91 CC 0900: FF FF 00 0008: 02 85 CC 8010: AD 78 02 0018: OD F8 21 0020: 07 FO 2F 0028: 51 CC 18 0030: EU CC 69

ffEITER, MEIJI STARTEN OTOP (W,N,S)

Wird das Ende der auszugebenden Datei (EOF) erreicht, sagt S.A.M.: 'ENDE!'. Nach Dracken der START-Taste ist SAMDUMP zur Ausgabe neuer Disketten-Daten bereit. Befindet sich auf Ihrer Diskette emn Menueprogramm, kannen Sie dieses mit der SELECT-Taste aufrufen. SAMDUMP laBt sich aber auch schon vor Datei-Ende unterbrechen, indem man die OPTION-Taste betAtigt. Das Programm unterbricht dann die
Ausgabe und fordert Sie auf, eine dieser drei Tasten zu drucken:

(W) = Weitermachen

(N) = Neu starten

(S) = Stop

Um bei den gesprochenen Hexadezimalzahlen akustische Verwechselungen auszuschlieBen, wurde folgende Buchstabierung verwendet: 0=NULL, 1=EINS, 2=ZWEI, 3=DREI, 4=VIER, 5=FONF, 6=SECHS, 7=SIEBEN B=ACHT, 9=NEUN, A=A, B=BETA, C=C, D=DELTA, E=E, F=F

4E. 456

ocIMDILIMI="=
108 110 140 150 168 170 180 190 200 210 228 240

mx -r-

REM HEX/ATASCII - DUMP MIT 5PRACHAUS6ABE V1.1 REM WICHTIG: ZUVOR MUSS S.A.M. (tn DON'T A5K) GELADEN WERDEN !!! 00=8:01=1:04=4:05=5:06=6:013=13:015=15:016=161020=28:0256=256 8EEP1=948:8EEP2=150:5AM=0:0458=568:0752=752:0279=53279:XX=800 GRAPHICS RO:POKE 82,00:SETCOLOR 2,00,8:SETCOLOR Q1,00,05+05:5ETCOLOR 04,00,08:DIM H$(016) DIM SAM$(20),11$(2),F$(0151,5$(0151,0(015) POKE 65,0:REM DISK - TON AUS 11$="012345678948C0EF" ':? :? ? "I *** DISK - FILEDUMP *** ? "Datei -Ausgabe in HEX- und ATASCII -Code" IF SAM=1 THEN 288 ? :? "1ST S.A.M. BEREITS GELADEN (J/N) ";:INPUT SAMS

240 IF SAM$="J" OR SAMS="j" THEN 270 250 ? ;? " BITTE LADEN SIE ZUERST S.A.M.,":? " UND DAMN WIEDER DIESE5 PROGRAMM!":END 278 SAM=I:GOTO 200 280 ? :? :? 'WELCHE DATEI (:NAME) ";:INPUT F$ 290 IF f$(01,011 "D" THEN G ="DI:":GS(LEN(G$)4-01)=FS:MG$ 300 TRAP 518:0PEN 1405,04,00 F$ *** HEX *** ATASCII ':? 310 ? "cUNTERBBRECHEN MIT OPTION AM ZEILENENDE":PRINT :PRINT ;' ADP, 320 RESTORE XX+30:GOSUB 710:REM 'ACHTUNG, START! 338 FOR W=I TO 50:NEXT W:RESTORE XX+40:GOSUB 710:FOR W=I TO 99:NEXT W 340 OSUB BEEP1 350 0=MM/02563:G0SW 0450:V=A-CV*0256):GO5U8 Q450:GOS08 BEEP2:PRINT ;": ";:SS=" 360 FOR H=01 TO 8:GET 005,41:60508 0450:PRINT ;" "; 370 5$(14)=".":IF V(154 THEN 5$(X)=CHRS(V) 388 IF (V=020) OR (V=I25) OR (V=127) OR (V=252) OR (V=155) OR (V=156) OR V=(157)-) 390 A=A+01:NEXT X:PRINT ;";5$:LINE=LINE+01 4 OR (V=158) OR (V=159) THEN 5$(11)="." 488 6051111 BEEP1:IF LINE=028 THEN GOSUB 620 418 IF PEEK(0279)03 THEN 358 420 POKE 0752,01PRINT :PRINT "ffEITER, EfEll STARTEN OTOP (W,N,S) ?"; 430 OPEN 1101,4,8,"K:":GET UQ1,X:CLOSE UC11:IF X=87 THEN 310 448 IF X=78 THEN RUN 450 IF X083 THEN 438 460 STOP 478 POKE 0752,001CLOSE U01:CLOSE U05 488 RESTORE XX+30:GO5118 710 490 FOR I=1 TO 3:605116 BEEP1:SETCOLOR 2,3,8:SETCOLOR 4,3,8:5ETCOLOR 1,0,0 500 GOSUB BEEP2:SETCOLOR 2,0,0:5ETCOLOR 4,0,0:SETCOLOR 1,0,10:NEXT I:GOTO 200 510 V=PEEK(195):IF V0136 THEN PRINT "4FEHLER U";V;" ";:GOTO 470 528 FOR A=X TO 016:PRINT ;" ";:NEXT A:? ;" ";5$:? :? " DATEIENDE CEOF)" 530 RESTORE XX+50:60508 710:GOTO 650 540 GOTO 200 560 H=INT(V/016):L=V - (11*016):PRINT ;H$CH+01,H+01);H$CL+01,L+011;:REM HEX-BERECHNUNG 578 RESTORE XX+11:GOSUB 710 588 FOR N=1 TO 30:NEXT W 598 RESTORE XX+L:GOSUB 710 608 FOR W=1 TO 99:NEXT W:RETURN 628 LINE=08:? " WEITER MIT START' 630 IF PEEK(0279)0. 06 THEN 630 648 ? "t";;RETURN 658 ? :? "NOCH EIN FILEDUMP --> :? "ZURUECK 11111 MENDE --> 660 IF PEEK(0279)(05 OR PEEK(0279) 06 THEN 668 670 IF PEEK(0279)=05 THEN RUN "D:MENUE" 688 IF PEEK(0279)=06 THEN RUN 690 GOTO 280 710 READ 5AMS:YY=11SR(8192):RETURN :REM SPRACHAUSGABEROUTINE 720 REM HEXZAHLEN 0-F IM SAM-FORMAT 808 DATA NUXL 801 DATA AYNS 802 DATA TWAY 803 DATA MAY 884 DATA FIYR 885 DATA FERNF 886 DATA SEHKS 887 DATA SIYBEHN 888 DATA AHAH/HDT 809 DATA NOYN 810 DATA AA 811 DATA BEIWITAH 812 DATA TSEHEH 813 DATA DENMAN 814 DATA EHEHEH 815 DATA EHEHF 817 REM DIVERSE SAM=WOERTER 838 DATA AH4/HODTUHNK 840 DATA STAARDT 858 DATA EH5N0DEH 860 DATA DEHLOTAH 870 DATA EHEHEH 880 DATA EHEHF 898 REM DIVERSE SAM=WOERTER 988 DATA 4H4/HODTUHNK 910 DATA STAARDT 920 DATA EH5NODEH 948 FOR W=1 TO 48:50UND 3,255,18,6:NEXT W:SOUND 3,0,8,0:RETURN :REM SOUNDROUTINEN 958 FOR W=1 TO 40:5OUND 3,128,10,6:NEXT W:50UND 3,0,8,0:RETURN

Mar

HI C3 F -F r- c=1 r-

= B1

I-i I r-t r-t cgi gr-4

It-r r-

r-t CIL r3

1 -

Mal ehrlich: viele Computerspiele erfordern em n derartig schnelles und haufiges 'SchieBen' mit dem Feuerknopf, daB schon nach kurzer Spielzeit der Daumen schmerzt. Abhilfe schafft bier eine kleine Zusatzelektronik, die einfach zwischen zwischen Steuerknuppel und der ist mit Die Wirkung geschaltet wird. Computer Wiederholfunktion der Tastatur vergleichbar: auch hier nimmt uns Impulsgeber die MUhe des fortlaufenden DrUckens em n . einundderselben Taste ab. Alles, was wir zu tun haben, ist also, den roten Feuerknopf unseres Joysticks nachtraglich mit einem Impulsgeber auszurUsten. Dann wird vollkommen automatisch solange geschossn, wie der Knopf gedrUckt wird - sozusagen das Maschinengewehr im Steuerkndppel. auf unterschiedliche Weise Eine solcher Zusatz laBt sich haben uns fur die Verwendung des TTL ICs 74LS13 realisieren. Wir entschieden, weil es beim Aufbau der Schaltung extrem wenig zusatzliche Bauteile erfordert - einen Kondensator und einen (einstellbaren) Widerstand. Ansonsten werden lediglich noch emn paar mechanische Teile benkitigt. AuBerdem bietet es sich an, den Schnellfeuer-Zusatz gleichzeitig als Verlangerungskabel vorzusehen (siehe Abbildung 1). Deshalb machen wir den Impulsgeber abschaltbar.,
-

zum Computer

HIST 51101
FUr das Schaltbeispiel brauchen Sie also folgende Bauteile: 1 1 1 1 1 TTL-IC 74LS13 (z.B. Texas instruments) Kondensator 47 uF / 16 Volt Potentiometer 2k/lin. (u. passender Knopf dazu) Schalter 1xUM (ggf. Besfestigungsschrauben dazu) kleines Kunststoffgehause (z.B. Bopla oder Teko) (oder eine Kunststoff-Seifendose) 1 9-polige Buchse mit Gehause 1 9-poliger Stecker ohne Gehause 1,5 bis 2 m Rundkabel, 9- oder 7-polig

AuBerdem benotigen Sie natUrlich Lotkolben, Schraubenzieher, Abisoliermesser oder 7Zange, Klebstoff, sowie Bohrer und Feile zuM

Bearbeiten des Geh.4use5Bevor wir mit dem Bau unseres Schnellfeuer-Zusatzes beginnen, zum besseren Verstandnis noch etwas Theorie. SchlieBlich sollen Sie ja auch etwas lernen. Werfen Sie also zunachst einen Buick auf Abbildung 2 auf der folgenden Seite.

71

Abbildung 2

Hier sehen Sie das Funktionsprinzip des verwendeten Impulsgebers. Es arbeitet mit einem NAND-Gatter mit vier Eingangen. Gleich zwei 74LS13. Wegen der im TTL-Baustein davon finden Sie NAND-Charakteristik geht der Ausgang eines solchen Gatters nur dann auf log.0, wenn ALLE Eingange log.1 sind. Legt man alle vier Eingangsleitungen uber einen Kondensator Cl auf Masse und +Wirt

den Gatter - Ausgang ber einen Widerstand R1 auf die Eingange


zuriick, entsteht em n Impulserzeuger: der'Ausgang schaltet laufend zwischen log.0 und log.1 um, abhangig vom Ladungszustand des Kondensators. Somit wird die Zeitkonstante des Impulsgebers, und damit seine Frequenz, von zwei GroBen bestimmt: namlich von der Kapazitat des Kondensators und vom Wert des Ruckkopplungswiderstandes. Eine derartige Schaltung funktioniert einwandfrei, wenn die 'Grauzone' der nur dann allerdings Gattereingange zwischen log.0 und log.1 moglichst gering ist. Diese Bedingung erfUllen Gatter, die mit einem sogenannten Schmitt-Trigger ausgestattet sind, wie dies beim 74LS13 der Fall ist (siehe Abbildung 3).

+5 Volt

Masse * = keine interne Verbindung


Abbildung 3 Verwendet man R1 einen fiir einstellbaren Widerstand (Potentiometer), laBt sich die SchuBgeschwindigkeit variieren. Da die Impulse natUrlich nur auf Wunsch abgegeben werden sollen, ist noch eine Zusatzlogik erforderlich, die den Taktgeber nur dann arbeiten laBt, wenn der rote Feuerknopf gedruckt wird. Wie bereits erwahnt, schaltet das Gatter des Impulsgebers nur dann, wenn ALLE vier Leitungen log.1 werden. Also brauchen wir . lediglich eine der vier Leitungen auf log.0 zu halten und lassen sie immer nur dann auf log.1 gehen, wenn der Feuerknopf betatigt wird. Da sein Herunterdrucken jedoch eine Verbindung mit Masse, also log.0 bewirkt, muB der Logikpegel noch invertiert, also umgekehrt werden. Glucklicherweise befindet sich im IC 74LS13 noch emn weiteres NAND-Gatter. Wir benutzen es als Inverter, indem wir alle

vier Eingdnge miteinander verbinden und den Ausgang an den vierten Eingang unseres Impulsgeber-Gatters anschlieBen. manchen Spielen oder Da die Schnelifeuer-Einrichtung bei machen wir sie sein dUrfte, Hilfsprogrammen unerwUnscht die Umschalter kann Mit dem einpoligen abschaltbar. STRIG-Eingangsleitung des Atari-Computers bei Bedarf direkt mit mit dem Feuerknopf verbunden werden. Soviel zur Arbeitsweise unseres elektronischen Maschinengewehres.
Die komplette Schaltung sehen Sie in Abbildung 4.

I
Masse
:EA

2k

C1= 47 pF 11

i3
Abbildung 4

Da die Schaltung nur wenige Bauteile benotigt, kann der Aufbau ohne Sockel und Platine erfolgen. Bereiten Sie das IC 74LS13 dazu wie folgt vor (siehe auch Abbildung 5): 1) Verzinnen Sie die 14 AnschluBkontakte. 2) verbinden Sie mittels abisolierter Litze die Kontakte 1,2,3 und 4 miteinander. 3) verbinden Sie mittels abisolierter Litze die Kontakte 9,10,11,12 und 13 miteinander. 4) verbinden Sie mittels abisolierter Litze die Kontakte 5 und B miteinander. Als ndchstes sollten Sie sich die Bearbeitung des Gehduses vornehmen. Bevor Sie jedoch mit den Ausschnitten bzw. Bohrungen fur Schalter, Buchse etc. beginnen, sehen Sie sich bitte Abbildung 5 an. Dort finden Sie einen Gestaltungsvorschlag fUr die Anordnung der Bedienungselemente. Wenn Sie sich den rechten Teil der Abbildung fotokopieren, kiinnen Sie ihn sowohl als Bohrschablon -e als auch zum Aufkleben aufs Gehause verwenden. Besonders attraktiv wird's, wenn Sie die Vorlage auf farbiges Papier kopieren und vor dem Aufkleben mit selbstklebender Klarsichtfolie Uberziehen.

SLOW

FAST!

SLOW

FAST! 5pEED I I

spEED -I I

FIRST 511101`
Ar-OFF

FIRST SHOT
ON-- OFF

Abbildung 5

Nachdem Sie sich davon dberzeugt haben, daB Buchse, Schalter, Poti und Kabel in die dafur vorgesehenen Offnungen passen, kleben Sie das IC an geeigneter Stelle ins Gehause. Verdrahten Sie die Schaltung gemAB Abbildung 4 und 6. Beim Anloten des Kabels, beachten Sie bitte, daB die Bezifferung der Buchse genau spiegelbildlich zu der des Steckers erfolgt. Die AnschluBbelegung finden Sie auch auf Seite 45. Bei der weiteren Verdrahtung des ICs gilt zu beachten, daB Sie die Kontakte jetzt von unten sehen.

-1.5U von OBEN gesehen! 0

OM 1E1 El MI El El 151

et

zu ci miliftilatiiaiia I I j.j., u .R1


[ von UNTEN gesehen !

j _AL",EN Masse
zu RI u.zum UPiSchalter

zum SteelierStift#6

*5 u 111111111111

minesiommasome 1-a,--,,,,,-,..z-LT
Abbildung 6

Arbeiten Sie auf jeden Fall sorgfdltig und vermeiden Sie Kurzschldsse und andere ungewollte Verbindungen. Sollten Sie im Elektronik-Selbstbau nicht so firm sein, lassen Sie sich von einem Hobby-Elektroniker helfen.

TEST *** TEST *** TEST Bevor Sie das GehAuse nun endgilltig zusammenschrauben, sollten Sie sich nochmals grundlich vergewissern, dal -3 alle Leitungen so verlaufen, wie es in den Abbildungen gezeigt wird. 1st alles in Ordnung, steht einer praktischen Erprobung nichts mehr im Wege. Anstelle eines Spiels konnen Sie dazu auch das folgende kleine Testprogramm verwenden: 10 20 30 40 50 REM FASTSHOT-TEST IF STRIG(0)=1 THEN 10 FOR 1=1 TO 5:SOUND 1,1,8,14:NEXT I SOUND 1,0,0,0: IF STRIG(0)=0 THEN 40 GOTO 20

Wie Sie nun feststellen werden, 1A8t sich die SchuBrate mit dem Potentiometer variieren. Andern Sie einmal versuchsweise den Zdhler der Sound-Schleife in Zeile 40, z.B. auf I=1 TO 20. Sie

werden damit

auf eine Erscheinung stoBen, die sich auch bei

diversen Spielen bemerkbar macht: durch die Zeitdauer des mit dem SchuB verbundenen Sound-Effektes wird die Feuerrate begrenzt. Weiterhin kann es, wAhrend Sie den Feuerknopf heruntergedruckt halten, zu einem salvenartigen SchieBeffekt kommen. Dieser Effekt resultiert aus einer Oberlagerung der Software-Zeitkonstanten des des Schusses mit der Hardware-Zeitkonstanten Schnellfeuer-Impulsgebers. Vor jedem Spiel sollte man daher in einem Probelauf die gunstigste Regler-Stellung ausfindig machen. Falls Sie zu den Viel-Spielern gehtiren, wird es Ihnen Ihr Daumen auf jeden Fall danken, wenn Sie sich zum Bau dieses nutZlichen kleinen Zubehdrs entschlieBen.

Anmerkungen: 1) Wie Abbildung 4 zeigt, werden die vier Richtungsleitungen des Steuerknuppels ohne jede Unterbrechung durchgeschleift. Soil Ihr FASTSHOT auch als VerlAngerungskabel fUr Drehregler (Paddles) dienen, verfahren Sie genauso mit den beiden Paddle-Leitungen (Buchsenkontakte 9 und 5). 2) Um die Feuerrate nach oben zu begrenzen, empfiehlt es sich, in Serie mit dem Potentiometer einen Widerstand von 220 Ohm (1/8 W) einzubauen. 3) Ebenso ist es empfehlenswert, am GehAuse einen Knick- sowie Zugentlastungsschutz fr das Kabel vorzusehen.

NIKEVWFZEMIGH II EgEV- ElIALOIELEFCIICIAT

BASIC-BEFEHLE BEFEHL PARAMETER


>A >I) >M >E .>>11 >V >VP >LP >U >SE >S >CO >MO >F >X (Zeilennr.VON) (Ieilennr.BIS) (Zeilennr.VON) (Zeilerpr.BIS) (Zeilennr.) (Schrittweite) (Zeilennr.VON) (Zeilennr.BIS) (linker Rand) (rechter Rand) (Startadr.) (Endadr.) (Startzeilennr.) (Schrittweite)

FUNKTION

BEMERKUNGEN

Automat. Zeilennumerierung Abbruch mit 'Break' LOschen von Zeilenblocken Nur von 0 bis 39' Bildschirmrand-Anderung Umbelegung der Cursor-Tasten Zurdck: nochmals >E Adressen hexadezimal RAM-Test Ma. 478 Zeilen Zeilen-Renumerierung Disketten-Inhaltsverzeichnis n=Laufwerk-Nr. Anzeige aller Variablen mit Drucker-Ausgabe Anzeige alter Variablen
Spezielles LIST-Format Spezielles LIST-Format mit Drucker - Ausgabe Grabuchstaben-Verriegelung nochm. >il = Entriegelung BASIC-LIST vor- U. rfickwarts mit START bzw. SELECT SE-Betriebsart ausschalten Kopieren von Zeilenbldcken Verschieben v. BlOcken Suchen nachlext, Namen etc. Abbruch m. Leertaste Suchen + Austausch von Text // = Null-String Umrechnung in Hex-Zahl max. 65535 max. $FFFF Umrechnung in Dezimalzahl Sprung zum Monitor Maschinensprache

(VON) (BIG) (NACH) (VON) (BIG) (NACH) /TEXT/ (VON) (BIG) /ALT/NEU/ (VON) (BIG) (Dezimalzahl) (Hex-Zahl)

*
MASCHINENSPRACHE-MONITOR BEFEHL PARAMETER
XXXX YYYY XXXX YYYY

(alle Angaben HEXADEZIMAL!) FUNKTION


Befehlseingabe-Zeichen Speicherinhalt auflisten Speicherinhalt auflisten Register anzeigen Speicherzellen indern 6502-Register andern GOTO (Programm-Start) Auf Cassette abspeichern Von Cassette laden String-:Suche (ASCII) Code-Suche (Hex) Disassemblieren Disass.-Listing andern Sprungweiten-Berechnung Drucker einschalten Drucker ausschalten Rucksprung ins ATARI-DOS Rdcksprung zum BASIC FEHLER-Anzeige

BEMERKUNGEN
vor alien Befehlen! Start-/Endadresse zusatzl. ATASCII-Anzeige CPU-Register (6502) m. Cursor dberschreiben m. Cursor ilberschreiben Mon.-Rucksprung auf BRK Endadresse+1 angeben ! Ab beliebiger RAM-Adr. Max. 20 Zeichen Max. 20 Bytes Abbrechen m. Leertaste Hex-Code m. Cursor dberschreiben (max. 3 Bytes) fur relative Adressen zum Protokollieren Ohne DOS --> MEMO PAD Falscher Befehl, unkorr. Hex-Daten oder Versuch, ROM zu andern

XXXX XXXX YYYY XXXX XXXX YYYY 'ZZZZZ XXXX YYYY ZZ ZZ ZZ XXXI XXXX YYYY PS PC A X

MONKEY WRENCH ist eingetr. Warenzeichen van Eastern House Software

DIki=bRIT LYME, lE3KAINVOITINI CIIILJT4IDEgEF- EFAIL P- CJIIFZ ECEIM

NOTEN-WERTE FUR DEN SOUND-BEFEHL DISKANT - NOTEN NOTE OKTAVE 1 14 15 16 17 18 19 21 22 23 24 26 27 29 31 33 35 37 40 42 45 47 50 53 57 3 60 64 68 72 76 81 85 91 96 102 108 114 4 121 128 136 144 153 162 173 182 193 204 217 230 5 243 255 BASS-NOTEN 4 5 31 vK 36 37 40 42 45 48 51 55 57 60
-

6 67 67 72 75 82 85 90 97 102 112

Alt, Bb A 6#,Ab 6 F#,Gb

D# 1 Eb C#,Db

25 27 28 30

FORMAT:

SOUND K,N,10,L

SOUND K,N,12,L

K=KANAL=0-3, N=NOTE (s. o.), L=LAUTSTARKE=0-15

10 REM BEISPIEL: BLUES MIT DISKANT- U. BASSNOTEN 15 GOSUB 600 20 FOR TAKT=1 TO 12:RESTORE 500+TAKT:READ T,BASS 30 RESTORE T*100:FOR V=1 TO 4:REM VIERTELNOTEN 40 SOUND 2,BASS,12,14-3*V 50 READ HIGH 60 FOR L=14 TO 1 STEP -0.5:REM LAUTSTAERKE 70 SOUND 1,HI6H,10,L:NEXT L 80 FOR W=1 TO 30:NEXT W:NEXT V:NEXT TAKT 90 GOTO 20 100 DATA 121,96,91,81 200 DATA 91,72,68,60 300 DATA 81,64,60,53 400 DATA 162,128,121,108 500 REM BLUES-SCHEMA: TAKT+BASSNOTE 501 DATA 1,63 502 DATA 1,63 503 DATA 1,63 504 DATA 1,63 505 DATA 2,48 506 DATA 2,48 507 DATA 1,63 508 DATA 1,63 509 DATA 3,42 510 DATA 2,48 511 DATA 1,63 512 DATA 4,85 600 GRAPHICS 2: POSITION 8,3:? *6; "DER" 610 POSITION 1,5:? #6;"trickkisten blues" 620 POKE 752,1:? :? " MIT DISKANT- UND BASSNOTEN":RETURN

DEZ. 07 08 09 10 ti 12 13 14 15 18 19 20 --)A t -T 29
30

HEX 07 08 09 OA OB OC OD OE OF 12 13 14 40 AG, 1D 1F 22 1B,n 1B,21 1B,22 1B,23 18,24 1B,28 1B,29 1B,2D 1B,30 18,31 1B,32 18,33 1B,38 1B,39 1B,40 18,41 1B,42 1B,43 1B,44 1B,45 18,46 1B,47 18,48 1B,4A 1B,4B 1B,4C 1B,4D 1B,4E 1B,4F 1B,50 18,51 18,52 18,53 18,54 18,55 18,57 18,58 1B 1 59 18,65 18,66 1B,6C 1B,6D 1B,73

ASCII CTRL-G CTRL-H CTRL-I CTRL-J CTRL-K CTRL-L CTRL-M CTRL-N CTRL-0 CTRL-R CTRL-S CTRL-T 1-.7- 01 -V ^ l-rtrisESC CTRL- = ESC CTRL--* " ESC n ESC ! ESC " ESC it ESC $ ESC ( ESC ) ESC ESC 0 ESC 1 ESC 2 ESC 3 ESC 8 ESC 9 ESC ESC A ESC B
ESC C ESC D ESC E ESC F ESC G

EPSON MX,RX..

NEC 8023 Backspace Horiz. Tab. Zeilenvorschub (LF) Vert. Tab. Formularvorschub Wagenrucklauf (CR) Breitschrift EIN Schmalschrift EIN Breitschr.EIN,nur JA7 Drucker deaktivieren Breitschr.AUS,nur 3A7 Alles vor CAN loschen VFU-Start VFU-Ende Vertikal Tab. (VFU) Drucker aktivieren Abstand n Punkte (1-6) Fettschrift EIN Fettschrift AUS Interne Grafik-Zeichen Standard-Zeichensatz 1-16 hor. Tabs setzen 1-16 hor. Tabs loeschen

Summer Backspace Horiz. Tab. Zeilenvorschub (LF) Vert. Tab. Formularvorschub Wagenrucklauf (CR) Breitschrift EIN Schmalschrift EIN Schmalschrift AUS Breitschrift AUS
-

1E ESC CTRL-

31 34 27,n 27,33 27,34 27,35 27,36 27,40 27,41 27,45 27,48 27,49 27,50 27,51 27,56 27,57 27,64 27,65 27,66 27,67 27,68 27,69 27,70 27,71 27,72 27,74 27,75 27,76 27,77 27,78 27,79 27,80 27,81 27,82 27,83 27,84 27,85 27,87 27,88 27,89 27,101 27,102 27,108 27,109 27,115

Unterstr.EIN/AUS 1/0 Unter Zeilenabst. 1/8" Zeile Zeilenabst. 7/72" Zeile Zeilenabst. 1/6" Zeile Zeilenabst.n/216" Zeile Papiersensor AUS Papie Papiersensor EIN Papie Drucker initialis. Druck Zeile Zeilenabst. n/72" Vert.Tab.(nur MX..) Vert. Blattlange (Zeilen) Blatt Hor.Tab. (nur MX..) Hor.T Fettschrift EIN Fetts Fettschrift AUS Fetts Doppe Doppeldruck EIN Doppe Doppeldruck AUS Zeile Zeilenabst. n/216" Grafik: norm. Dichte Grafi Grafik: dopp. Dichte Grafi Elite EIN (nur RX..) Setze unteren Rand Setze Unt.Rand setzen AUS Unt.R Elite Elite AUS (nur RX..) Zeilenlange setzen Zeile Zeich Zeichensatz-Auswahl Hoch/Tiefzahlen EIN Hoch/ Hoch/Tiefzahlen AUS Hoch/ Unidi Unidirekt. EIN/AUS Doppeldruck EIN/AUS Doppe RX: Hor/Vert.Tab EIN RX: Hor/Vert. Sprung RX:Se RX:Setze linken Rand RX: Sonderz. EIN/AUS RX: InGeschw.EIN/AUS RX: 14
"7' El

Horiz. Tab. laschen

Zeilenabst. 6 Z./Zoll Zeilenabst. 8 Z./Zoll

12 Zeichen/Zoll setzen

ESC H ESC J ESC K ESC L ESC M ESC N ESC 0


ESC P

Linken Rand setzen Setze 10 Zeichen/Zoll Proportionalschr. EIN 17 Zeichen/Zoll setzen Einzelpunktgrafik EIN Zeilenabst. n/44" Unterstreichen EIN Unterstreichen AUS

ESC Q ESC R ESC S


ESC T

ESC U ESC W
ESC X ESC Y

ESC e ESC f ESC 1 ESC m ESC s

LIPIJOEIRICOUTIME NI IG Ft PI F:3'

Ct3 FZ -

100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270 280 290 300 310 320 330 340 350 360 370 380 390 400 410 420 430 440 450 460 470 480 490 500 510 520 530 540 550 560 570 580

REM * LADEROUTINE FUER BILDER IN GRAPHICS E (7+) * REM * (z.B. MICROPAINTER(tm)-Bilder ) * REM GRAPHICS 8+16 GOSUB 550 DSPLST=USR(DP,560) DSPMEM=USR(DP,DSPLST+4) REM REM * GRAPHICS 8 --> GRAPHICS E (7+) * REM POKE DSPLST+3,78 FOR A=0 TO 92:POKE DSPLST+6+A,14:NEXT A:POKE DSPLST+6+93,78 FOR A=96 TO 192:POKE DSPLST+6+A,14:NEXT A REM REM * Bilddaten von Disk laden * REM TRAP 500:REM bei Fehler CLOSE #1 REM REM * Hier den Bild-Namen angeben! * REM OPEN #1,4,0,"D:BEISPIEL.EXT" REM REM * IOCB #0 = 832. Also: 832+16 * REM IOCB=832+16:REM +16 wegen IOCB #1 POKE IOCB+2,7:REM 7=Befehl fuer GET #1, Binary Record (Puffer) REM REM * Pufferadresse setzen * REM DUMMY=USR(DP,IOCB+4,DSPMEM) REM LAENGE=7680:DUMMY=USR(DP,IOCB+8,LAENGE) REM REM * 810-Aufruf * REM DUMMY=USR . (ADR i"htbtard21- 1-1 4=1") p GI REM REM * Color-Register setzen * REM GET #1,A:POKE 712,A:FOR A=0 TO 2:GET #1,B:POKE 708+A,B:NEXT A CLOSE #1 GOTO 510:REM * >> HIER . GEHT'S WEITER! REM REM * DPEEK / DPOKE * REM DP=ADR( 6 " 1-bE31-47111). P 4h 0 him:3* LP TH 1. P ) : RETURN REM REM AUFPASSEN BEI DER EINGABE DER STRINGS!! REM (Eingabe erfolgt z.T. mit CTRL-Codes)

Es gibt eine ganze Reihe von Grafik-Programmen, die das 'Malen' mit Hilfe des Steuerknuppels auf dem Bildschirm ermaglichen. Besonders interessant ist der MICRO-PAINTER von DataSoft, da Sie mit ihm vierfarbige Bilder bei einer Auflosung von 192x160 Bildpunkten erstellen konnen. Dies geschieht in der Graphikstufe 7+, die mit Atari 400/800 nur in Maschinensprache erreichbar ist. Daher besteht die Schwierigkeit im Einbinden der Bilder in eigene BASIC-Programme. Die oben gezeigte Laderoutine soil Ihnen dabei helfen. Sie brauchen sie nur in Ihr Programm einzufdgen und in Zeile 300 den Namen des von der Diskette zu ladenden Bildes anzugeben!

ILJN1 S

IL- L- !JIM IG

ri i -r

IFRCP

F> ok 1,4 -T

F;Ctm _IEILIEE FZ IsI

Wer mit seinem Micro-Painter bereits eine ganze 'Bildergalerie' geschaffen hat, mochte sie natdrlich auch gerne Freunden und Bekannten zeigen. Dabei macht sich das Eintippen der Bildernamen nicht sehr repraSentativ aus, zumal es gerade hier oft zum beliebten 'Vorfdhreffekt' kommt. Recht attraktiv fdhren Sie Ihre Kunstwerke mit dem unten abgedruckten Programm vor, das eine Erweiterung des auf der vorangegangenen Seite gezeigten Bildladers darstellt. Mit Hilfe der START- und SELECT-Taste kann dg Betrachter von Bild zu Bild vor- bzw. zurdckblattern. Gehen Sie zur Vorbereitung Ihrer Kunstausstellung wie folgt vor: 1. Tippen Sie das hier gezeigte Listing em, auch die Zeilen 130,300 und 510. 2. Speichern Sie das Programm ab, und zwar mit LIST"D:GALERIE.LST" 3. Laden Sie die Routine von der vorangegangenen Seite. 4. Laden Sie das Programm dieser Seite hinzu, und zwar mit ENTER"D:GALERIE.LST 5. Geben Sie, ab Zeile 1000 durchgehend numeriert, die Namen Ihrer Bilder em. (wie als Beispiel gezeigt) 6. Setzen Sie in Zeile 25 die Zahl der vorzufdhrenden Bilder emn (z.B. bei 8 Bildern: MAX=8), und in /eile 40 Ihren Namen. 7. Das Programm ist nun komplett. Speichern Sie es am Besten auf der Disk ab, auf, der sich DOS und Ihre Bilder befinden. Sofern Sie dber einen AUTORUN.SYS-Generator verfdgen (siehe DIE FUNDGRUBE S.82), sollten Sie +Ur einen automatischen Start des Ihre Sie Galerie-Programms sorgen (RUN"D:GALERIE.BAS). Wenn Diskette verschicken, gendgt dann der Kommentar 'BASIC/Autoload'; komlizierte Lade-Anweisungen entfallen. Der Betrachter kann sofort mit dem Blattern in Ihren Kunstwerken beginnen. 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 REM KUNSTAUSSTELLUNG! REM AUTOMATISCHES VORFUEHREN REM VON BILDERN IN GRAPHICS 7+ START=1000:MAX=3:REM MAX=ZAHL DER BILDER DIM FN$(15):TASTE=53279:POKE 752,1 GRAPHICS 2:POSITION 4,3:? #6;"BILDERGALERIE" POSITION 9,5:? #6 :1"von":POSITION 5,7:? #6;"H. BEISPIEL":POKE 752,1 ? :? " VORWAERTSBLAETTERN mit KSTART'.>" ? " RUECKWAERTSBLAETTERN mit <SELECT>":GOTO 60 READ FN$:GOSUB 130 IF PEEK(TASTE)=7 THEN 60 IF PEEK(TASTE)=6 THEN START=START+1 IF PEEK(TASTE)=5 THEN START=START-1 IF START<1000 THEN START=1000+MAX IF START>1000+MAX THEN START=1001 RESTORE START:GOTO 55 HIER EINFuGEN: LISTING VON DER VORHERGEHENDEN SEITE (NOTWENDIGE ANDERUNGEN SIEHE UNTEN) IN DER EINGEFOGTEN LADEROUTINE SIND 1000 REM VAMEN DER BILDER FOLGENDE ZEILEN ZU ANDERN: 1001 DATA D:BILD1 130 GRAPHICS 8+48 1002 DATA D:BILD2 300 OPEN #1,4,0,FN$ 1003 DATA D:BILD3 510 RETURN 1004 REM .. USW.

Tis 4_( r-s ci Tr-i acla 13 1G la Pic

rI L_ IN1 Po IR I-1 )

Was ist em n BASIC-Compiler? FUr alle Atari-Besitzer, die dieses wertvolle Hilfsmittel noch nicht kennen, sei vorausgeschickt, worum es sich dabei handelt. Um es kurz zu machen: em n Compiler dient dazu, em n Programm, das in einer hoheren Programmiersprache - z.B. BASIC - geschrieben wurde, in em n Maschinenprogramm umzuwandeln. Das Ergebnis ist emn Programm, das wesentlich schneller lauft als das Original, da der besonders fUr BASIC typische zeitaufwendige ProzeB des Interpretierens drastisch gekUrzt wird oder ganz entfallt. So %/or werden z.B. zahlreiche BASIC-Spiele richtig interessant, die dem Kompilieren wegen mangelnden Tempos eher einschlafernd wirkten. Hinzu kommt, daB die kompilierten Programme als 'echte' Maschinenprogramme laufen, also ohne BASIC-Modul. Fur das Atari-BASIC werden aberraschenderweise erst seit kurzem BASIC-Compiler angeboten, dafUr jedoch gleich mehrere. Einer davon hat sich bei uns nach langerem Test verschiedener Fabrikate als besonders leistungsfahig herausgestellt, und zwar der ABC BASIC Compiler von Monarch Data Systems. Auch in unseren Landen hat er mittlerweile eine weite Verbreitung gefunden, und das nicht ganz unberechtigt, wie die folgende Ubersicht zeigt: * Steigerung der Programm-AusfUhrungsgeschwindigkeit um den Faktor 4 bis 12, je nach Funktionen. * Die meisten Programme brauchen kaum oder nur wenig Anderungen. * Auch in DIM, GOTO, GOSUB und RESTORE sind AusdrUcke erlaubt. * Verwendung von 3-Byte-Ganzzahlarithmetik (Bereich: + 8 Mio.). * Kompilierung in nur EINEM Durchlauf mit einer Geschwindigkeit von ca. 100 Zeilen/Minute. * GroBe Kapazitat: 40 k RAM erlauben die Kompilierung von ca. 1000 BASIC-Zeilen. * USR-Funktion und Disk-E/A unktionieren * Ein Hilfsprogramm ermOglicht die Erstellung von relokatiblem Code. * Ihr Programm wird unlistbar. NatUrlich ist auch der ABC Compiler nicht frei von 'Macken' und fordert wpm Programmierer em n paar Zugestandnisse. Dennoch sich ganz gut mit ihm arbeiten. Was nicht im Handbuch steht, sondern sich aufgrund eigener Erfahrungen sowie Informationen aus USA bis zum RedaktionsschluB angesammelt hat, lesen Sie auf den folgenden Seiten. Den Betrachtungen und Anmerkungen liegt die Version 1.02 zugrunde.

laot

1. MaBnahmen bei Benutzung von mehr als zwei SOUND-Kanalen Wer bereits BASIC-Programme mit drei oder vier SOUND-Kanalen kompiliert hat, wird sich wahrscheinlich gewundert haben, daB nur zwei davon zu htiren waren. Das Problem liegt darin begrUndet, daB yam Betriebssystem zwei Kanale dazu benutzt werden, bei Disk- und Druckerbetrieb den DatenfluB akustisch zu untermalen. Da der yam Compiler vor jedes Programm gesetzte Run-Time-Code die entsprechenden Steuerregister anscheinend nicht zurUcksetzt, mUssen wir selbst Abhilfe schaffen. Setzen Sie einfach die folgende Befehlszeile an den Anfang Ihres Programms und wiederholen Sie sie nach jeder Benutzung der seriellen

Systemschnittstelle (Disk bzw. Drucker): POKE 562,3:POKE 53775,3:POKE 53768,0 2. Farbwechsel beim DRAWTO-Befehl Probleme gibt's bisweilen mit dem DRAWTO-Befehl: er arbeitet nicht mit der Farbe l die zuvor im COLOR-Befehl angegeben wurde; vielmehr nimmt er den zuletzt fUr PLOT oder PRINT verwendeten Wert. Abhilfe: Benutzen Sie "POKE 763,C", wobei C die gewUnschte Farbe angibt. PLOT direkt gefolgt von DRAWTO arbeitet Ubrigens einwandfrei. 3. Das Verhalten der ASCO-Funktion bei lAngeren Strings Die ASC()-Funktion ergibt einen falschen Wert, nAmlich stets Null, so-Fern die LAnge eines Strings genau em n Vielfaches von 256 betrAgt. Dieses Problem umgeht man am Besten, indem man die ASC()-Funktion nur auf Substrings, d.h. Teilabschnitte eines Strings ansetzt. Hit anderen Worten: arbeiten Sie bei lAngeren Strings mit ASC(SS(N,N)) anstelle von ASC(SS(N)). 4. Was man bei der VAL()-Funktion beachten muB Die VAL()-Funktion ignoriert frahrende Nullen NICHT. Abhilfe: schreiben Sie em n kleines BASIC7Unterprogramm, um die fUhrenden Nullen auszusondern. 5. Wissenswertes Uber die DATA-Anweisung Ahnliche Probleme bringt die DATA-Anweisung mit sich: numerische Werte dUrfen hier keine vorangestellten Leerstellen aufweisen. Das liegt einfach daran, (Jag zur Umwandlung der in DATA-Zeilen gefundenen Zahlenwerte die VAL()-Funktion benutzt wird. Also: in DATA-Zeilen hinter den Kommas keine Leerzeichen eingeben! 6. ON ... GOSUB bei einer groBeren Anzahl von Sprungzielen. Auch wenn es AuBerst selten passieren dUrfte, daB Sie in diese GrEiBenordnung kommen, sollten Sie darilber Bescheid wissen: Der ABC Compiler kommt ins Schwitzen, wenn er in einem ON..GOSUB-Befehl mehr als.20 Zeilennummern zur Auswahl findet. Abhilfe: Brechen Sie die Zeile in mehrere ON..GOSUB-Zeilen auf, wobei Sie den ON...-Wert um die Zahl der Sprungziele der vorangegangenen Zeile verkleinern. Dazu em n Beispiel: Anstelle von schreiben Sie: ON X GOSUB 10,20,30,40,50,60, ... ON X GOSUB 10,20,30,40,50 ON X-5 GOSUB 60,70,80,90

7. Probleme mit dem PLOT-Befehl nach 'FILL' Nach Benutzung von XIO 18,#6,0,0,"S:", dem FILL-Befehl also, stellt man erstaunt fest, da0 man mit PLOT nicht einen Punkt mehr auf den Bildschirm bekommt. Schuld daran ist die erste Null nach der GerAtenummer. An dieser Stelle wird nAmlich der Schreib-/Lese-Modus angegeben. Dadurch, daB die meisten Programmierer hier eine Null hineinschreiben, ist em n weiteres Beschreiben oder Lesen des Bildschirms nicht mehr mOglich. Das Atari-BASIC selbst kUmmert sich nicht darum: schlieBlich benutzt es die Standard-Ausgaberoutine des Betriebssystems ja nicht.

einmal LOCATE nach einem derartigen Probieren Sie jedoch Fill-Befehl aus, dann sehen Sie, wo das Problem liegt. Die Losung ist allerdings einfach. Schreiben Sie einfach XIO 18,46,12,0,"S". Dann funktioniert's. S. Das Geheimnis der RENAME-Funktion (XIO RENAME-Funktion Schwierigkeiten bereitet bisweilen die 32,...). Sie arbeitet nicht immer einwandfrei, da der Puffer +Ur den String mit den Namen nur 15 Zeichen lang bemessen wurde. Sollten Sie hier Probleme bekommen, umgehen Sie die Rename-Funktion am Besten mit einer eigenen Assembler-Routine. 9. Ausgabe der Zeilennummer bei Auftreten von Fehlern

Wie beim BASIC werden die Speicherzellen 186 und 187 zur Ablage jener Zeilennummer benutzt, bei der em n Fehler aufgetreten ist. Zur Anzeige der Zeilennummer muB bei der Programmierung allerdings Eine unbedingt die gezeigte Reihenfolge eingehalten werden. Anderung des, Ausdrucks hat dessen Fehlfunktion zur Folge, da sich die Zellen 186/187 mitten im Run-Time-Stack des ABC-Compilers befinden. Den Ausdruck also immer folgendermaBen formulieren: PRINT PEEK(186)+PEEK(187)*256 10. Zeilennummer bei Run-Time Fehlern.

Die Zeilennummer, die beim Auftreten eines Run-Time-Fehlers, also wahrend der Ausfiihrung eines kompilierten Programms angezeigt wird, stimmt Obrigens nicht immer. Der Grund dafur liegt in der Tabellen-Suchroutine des Run-Time-Interpreters, der zwei Bytes nicht immer korrekt miteinander vergleicht. Abhilfe gibt es hier nicht. Man sollte nur wissen, daB man sich im Zweifelsfalle nicht 1007dg auf die angezeigte Zeilennummer verlassen kann, wenn man sein unkompiliertes Listing auf Programmierfehler QberpriAft. Probleme mit eventuell falsch angezeigten Fehler-Zeilennummern lassen sich allerdings weitgehend vermeiden, indem man, wie es natUrlich ohnehin sein sollte, sein Programm VOR dem Kompilieren von Fehlern aller Art saubert ('Debugging') und den Dialog mit dem Benutzer moglichst 'idiotensicher' gestaltet. 11. Automatisches Starten von kompilierten Programmen

Sofern man DOS 2.09 verwendet, 1st es besonders einfach: um das kompilierte Programm automatisch beim 'Booten' der Diskette starten zu lassen, nennen Sie es einfach 'AUTORUN.SYS'. Falls Sie mit OS/A+ (tm) von Optimized Systems Software (OSS) arbeiten, brauchen Sie lediglich einen File namens 'STARTUP.EXC' mit auf die Diskette zu schreiben, der den Namen Ihres Programms (z.B. DEM01.COM ) enthalt. Mit REM konnen Sie hier sogar noch Kommentare hinzufagen, die wahrend des automatischen Ladens angezeigt werden. Problematisch wir ,, wenn Sie Ihr Programm verkaufen wollen. Sofern Sie kein e:jenes kleines DOS schreiben wollen, sollten Sie eventuellen Liz,mz-Schwierigkeiten aus dem Wege gehen, indem Sie Diskette -Hine DOS vertreiben und den Kaufer auffordern, vor Ihre Erstbenutzung -elbst DOS draufzuspielen ('H' im DUP.SYS-Menu von DOS 2.0).

9'U:then mehrere kompilierte Programme zum Laden zur Auswahl, empfiehlt sich em n kleines MenUprogramm in Maschinensprache, das Sie auf Ihrer Diskette AUTORUN.SYS nennen. 12. Was ist zu tun, um vor dem kompilierten Programm zuvor den RS- 232-Handler zu starten? Um em n kompiliertes Programm automatisch zu starten, zuvor jedoch den RS-232-Handler oder z.B. einen Frontbuchsen-Drucker-Treiber zu initialisieren, macht man- am Besten aus beiden Programmen eines und nennt es ebenfalls 'AUTORUN.SYS. Gehen Sie dazu zweckmAGigerweise so vor: a) Kompilieren Sie Ihr BASIC-Programm. b) Stecken Sie die Diskette ins Laufwerk, auf der sich unter dem Namen AUTORUN.SYS auch der betreffende Peripherie-Treiber befindet (typische Lange: meist 1 bis 2 Sektoren). c) Gehen Sie ins DOS- MenU und verschweiBen Sie Ihr kompiliertes

Programm mit dem Treiber durch Eingabe folgender Befehlet


(Computer schreibt:) (SIE geben em:) (Computer schreibt:) (SIE geben em:) SELECT ITEM OR RETURN FOR MENU C <RETURN> COPY - FROM,TO? PROGNAME.CMP,AUTORUN.SYS/A

das die das ".../A", Fall auf keinen Sie Vergessen 'Append'-Funktion des DOS aktiviert. Ihr kompiliertes Programm wird dann an das bereits vorhandene Programm namens AUTORUN.SYS angehAngt, statt es zu Uberschreiben. Bei jeder Neufassung Ihres Programms mue diese Prozedur natUrlich wiederholt werden. Bewahren Sie sich deshalb unbedingt eine Kopie Ihres urspranglichen AUTORUN.SYS-Programms au-f! 13. Diskettenwechsel beim Kompilieren. Versucht man das Kompilieren eines Programms, ohne daB sich die Original-Compiler-Diskette in Laufwerk #1 befindet y zeigt ABC eine entsprechende Mitteilung an und fordert Sie auf, zur Fortsetzung <RETURN> zu drUcken. Dann passiert's: um tatsAchlich weitermachen zu ktinnen, ist wegen eines 'Bugs' im Compiler em n erneutes Laden ('Booten') erforderlich. Meist passiert einem dies, wenn man mehrere Programme hintereinander kompilieren will. Sehr leicht vergiBt man dann vor dem Druck auf die START-Taste, zunAchst seine Arbeitsdiskette herauszunehmen und wieder den ABC-Compiler hineinzustecken. Stolze Besitzer zweier Diskettenstationen konnen dieses Problem vermeiden, indem sie die ABC-Diskette stets in Laufwerk #1 lassen und fur alle Schreib- und Leseoperationen Laufwerk #2 benutzen. Allen anderen kann man nur raten, besser aufzupassen. 14. Abwehr von Software-Piraten Purch Verwendung des ABC-Compilers ergeben sich eine ganze Reihe \on Maglichkeiten, dem Software-Klau entgegenzuwirken. Von Haus aus wird Ihr Programm durch.das Kompilieren schon mal unlistbar. Auch beim Betrachten mit Disketten- oder Speicheranalyse-Hilfsprogrammen, Disassemblern etc. bleibt es nahezu undurchschaubar y da es fast nur noch aus Zeigern in den Run-Time-Interpreter besteht, der zu Beginn der Kompilierung vor jedes Programm gesetzt wird. Diese Eigenschaft konnen Sie sich zunutze machen: E34

a) VerschlUsseln Sie die ASCII-Zeichen, die zur Anzeige Ihres Copyright-Hinweises benutzt werden. b) Falls Sie Schutzroutinen in Maschinensprache benutzen (z.B. zur etc.), Sektoren defekten Hardware-Schlasseln, Abf rage von verschlUsseln Sie die DATA-Werte, aus denen diese Routinen generiert werden. Einzelheiten Uber Verschlasselungstechniken siehe Seite 43 ff. 15. 'RUN' weiterer kompilierter Programme.

kompilierten Normalerweise ist es nicht moglich, aus einem n anderes (kompiliertes) Programm zu starten. Programm heraus em Mit einem kleinen Trick geht's aber doch, vorausgesetzt, Sie arbeiten mit DOS 2.0: OPEN #1,4,0,"D:NEXTPROG.EXT" X=USR(5576) Vielen Dank an Jerry White +Ur diesen natzlichen Hinweis. 16. Wo endet mein Programm im Speicher?

wo das FUr manche AnwendungsfAlle muB ermittelt werden, Anwenderprogramm endet. In BASIC geschieht das normalerweise, indem man in MEMTOP (Zelle 144/145) nachschaut. Arbeiten Sie mit dem Compiler, verwenden Sie jedoch besser APPMHI, also die Zellen 14 und 15, da dies sowohl mit BASIC als auch mit Ihrem kompilierten Programm funktioniert. Wichtig: bevor sie hier nach dem Ende Ihres Programms schauen, mUssem ALLE Arrays und Strings DIMensioniert werden, da ja auch dies Speicherplatz beansprucht. AuBerdem sollte man zu der in den Zellen 14 und 15 gefundenen Adresse einen Sicherheitszuschlag von etwa 1000 Bytes hinzurechnen. 17. Unerwartete Meldung des 'ERROR 10'

Solite Ihnen der Compiler einmal vdllig unerwartet die Meldung 'ERROR 10' bringen, ist ihm meist der in der beroffenen Zeile stehende Ausdruck zu kompliziert. Um dieses Problem zu beseitigen, brauchen Sie den Ausdruck lediglich in mehrere einf ache AusdrUcke zu zerlegen.

Soweit die Tips und Tricks zum Umgang mit Monarch's ABC-BASIC-Compiler. Moglicherweise ist Ihnen beim Lesen dieser Seiten der Eindruck entstanden, daB das Programm sehr viele 'Bugs' enthalt. Dies stimmt jedoch nicht ganz. In Relation zur Zahl der Schwachstellen und Fehler muB man sich unbedingt vor Augen halten,
welche Leistungsfahigkeit die Programmierer in diesen Compiler

hineingesteckt haben, insbesondere im Vergleich mit momentan erhaltlichen Alternativprodukten. AuBerdem kann man, wie wir gesehen haben, mit den meisten bisher erkannten 'Bugs' ganz gut leben, wenn man sie kennt. Den Schwachstellen steht em n Stuck Software gegenUber, das sich durch Komfort, einf ache Bedienung und

Vielseitigkeit auszeichnet.

*F3

DID-ECLJC I-11E31E

FF

ii L(DC)

BekanntermaBen unterscheidet sich der Atari 400 vom Atari BOO nicht nur im Preis, sondern auch in der Ausstattung. Oft hat der Geldbeutel den Ausschlag gegeben, sich zunachst fur das kleinere Gerat zu entscheiden. Das ist auch garnicht so unvernUnftig, wenn man sich das breitgefacherte Angebot an Aufrustungs-Zubehor fUr den 400er ansieht: 48k-RAM-Erweiterung, mechanische Tastatur und ROM-Modul mit Steckplatzen fUr 16 k machen aus ihm einen Computer, der seinem "groBen Bruder' (fast) in nichts nachsteht. Aber eben nur fast. Was noch fehlt, ist die AnschluBmOglichkeit eines Video-Monitors und einer Stereoanlage. Beides ist jedoch kein Ding der Unmdglichkeit und wurde in unserem Labor bereits funktionsfahig aufgebaut. Leider war eine nachbausichere Anleitung zur Monitor-Nachrustung bei Druckbeginn der TRICK-KISTE noch nicht ganz abgeschlossen. Dem Einbau einer
Audio-Buchse steht jedoch nichts mehr im Wege. Damit konnen dann auch Sie, lieber Atari-400-Besitzer, programmierte Musikstucke Uber Ihre Stereo-Anlage wiedergeben und bei Bedarf hochwertige

Cassetten- oder Tonbandaufnahmen davon machen. Auch zahlreiche Spiele, wie z.B. STAR RAIDER (tm Atari), win-en mit volumindserem Kiang noch realistischer.

FRISCH ANS WERK Auch hier sei mal wieder vorausgeschickt, daB derartige Arbeiten etwas Erfahrung im Elektronik-Basteln erfordern, und daB die Garantie Ihres Computers darunter leiden konnte. Wer sich noch immer zum Eingriff ermutigt fUhlt, braucht an Werkzeug dieselbe Ausstattung, wie auf Seite 4 zum Einbau des Reset-Tasters beschrieben. AuBerdem brauchen Sie folgendes Material: 1. Zweipolige isolierte dUnne Litze (ca. 30 cm), z.B. 2 Flachbandkabel-Adern, moglichst verschiedenfarbig 2. Eine 2,5mm-Einbau-Klinkenbuchse 3. FUr das Verbindungskabel zur Stereo-Anlage: em n 2,5mm-Klinkenstecker, 1,5 m abgeschirmtes einpoliges Kabel sowie den zu Ihrem Phono-Eingang passenden Stecker (meist Cinch oder DIN) 4. Und natUrlich wieder etwas Lotzinn und Isolierband.

SCHRITT FuR SCHRITT. 1. Der AnschluB der Audio-Duchse erfolgt auf der Mutterplatine. Um Platz fUr weitere Tips und Tricks zu sparen, sollen hier nicht noch einmal die Schritte aufgefiihrt werden, die zum Freilegen namlich dieselben wie dieser Platine erforderlich sind. Es sind beim Einbau des Reset-Tasters. FUhren Sie also zunachst die Schritte 1 bis 10 so aus, wie sie auf den Seiten 11 bis 13 ausfUhrlich beschrieben sind!

4EIs

CPUPlatine Platine ROMSchacht ROM' E' ROM 1 F 1 PTA

Steckverbinder intr---1 fur Testzwecke "_LFEllau==u -Abgleichspule E ftir Sound L101 W g

oon

J'''

L-41 7 " 4' u

_g= cm
El El 17_7

Verbindungspunkt zwischen ' R160 Coben, und C164 (unten)


zur Tastatur

ROM , D , POKEY Lautspm Stecker

Abbildung 1

11. Somit folgt hier bereits der 11. Schritt. Sehen Sie sich dazu bitte Abbildung 1 an. Ahnlich wie auf Seite 13 sehen Sie hier die Mutterplatine; in diesem Fall 'finden Sie jedoch em n paar Kondensatoren und Widerstande eingezeichnet, die zum Auffinden des richtigen Anschluepunktes wichtig sind. Genauer gesagt geht es um den Widerstand R160 und den in einer Linie unmittelbar darunter liegenden Kondensator C164. Diese beiden Bauteile, deren Bezeichnung auch auf die Platine aufgedruckt ist, befinden sich DIREKT rechts neben dem Pokey-Chip. Zum besseren Verstandnis, wo der korrekte AnschluBpunkt zu finden ist, werfen Sie bitte auch einen Buick auf Abbildung 2: . .

+5 Volt B , L101 +5 Volt A R162 Li82 2 LW / i . ci /00 I )

C178 820 pF

)!04; ,,, m i k,,... OZ .-K \ .,1


Ci77

k R 160 AUD---(Pokey)

1 1
f Audio -

1 820 pF R161

C164

1----1 0,1 LIF . 18 k


Si-nal atisrelfen ,
Abbildung

R163
9,1 k

Hier

Masse

Hier sehen Sie einen Teil der Schaltung, die sich auf der Mutterplatine befindet. Entscheidend fur die Sound-Erzeugung ist der Pokey-Chip sowie eine zusatzliche Oszillator-Schaltung. Zur korrekten Anzapfung des Audio-Signals brauchen wir daher jenen Punkt, an dem die AUD-Leitung vom Pokey-Chip mit dem Ausgang des Oszillators zusammentrifft. Diese Stelle wurde in der Abbildung 2 mit X gekennzeichnet. Es ist zugleich der Punkt, an dem R160 und

ist C164 miteinander verbunden sind. Eben diese Verbindungsstelle es, die wir mit unserer Audio-Signalleitung anzapfen mUssen. Sehen Sie .sich nun noch einmal Abbildung 1 an md machen Sie dann den gesuchten Lotpunkt au+ Ihrer Mutterplatine ausfindig. Liiten Sie nun von der UNTERSEITE der Platine die signalfahrende Leitung Ihrer Doppellitze an.
12. Die andere Leitung dient zur Masse-Verbindung. Sie konnen sie z.B. - ebenfallt auf der Platinenunterseite - dart anloten, wo der k) mit Masse verbunden ist (breite R163 (9,1 Widerstand Leiterbahn). 13. Die anderen beiden Enden der Litze werden nun mit der Klinkenbuchse verbunden. Vorsicht! Eine 'beliebte' Fehlerquelle besteht darin, daB man bei derartigen Buchsen die falschen Kontakte erwischt. Stecken Sie den Stecker hinein, dann kann man ganz gut verfolgen, welcher Kontakt wohin gehert: die Spitze des Steckers sollte die signalfUhrende Leitung sein, wahrend der Schaft mit Masse verbunden wird. Entsprech'end loten Sie die beiden Litzen an die Buchsenkontakte an. 14. Blattern Sie nun bitte auf Seite 14 zurUck, denn wiederum kommen nun em n paar Handgriffe, die bereits erkart wurden. Setzen Sie Ihren Computer wieder zusammen, indem Sie die auf Seite 14 genannten Schritte durchfahen. Wer in semen Atari 400 bereits den Reset-Taster eingebaut hat, wird's sicherlich bemerkt haben: die Numerierung der einzelnen Schritte stimmt nicht ganz, dafUr aber die Reihenfolge. Leider war diese Seite bereits im Druck, als es bemerkt wurde. - ZurUck zu unserer Sound-Buchse: damit der Einbau ins Gehause genauso unproblematisch wird wie beim Reset-Taster, verwenden wir die 2,5mm-Klinkenbuchse. Die Installation erfolgt ebenfalls zwischen den LUftungstchlitzen auf der Rilckseite des Atari 400. Montieren Sie die Buchse dort, wo es fur Sie am gUnstigsten ist. Mit den ebenfalls nicht ganz korrekt numerierten - Schritten auf Seite 15 ist die Einbauaktion dann beendet. 16. Loten Sie nun das Verbindungskabel fur Ihre Stereoanlage zusammen. Welche Eingangsbuchse Sie verwenden, hangt von Ihrem Stereo-Gerat ab. Unser 400er im Labor lieferte an seiner Audio-Buchse einige hundert mV, was einem normalen Phono-Eingang (ohne Magnet-Vorverstarker) entspricht. EIN PAAR ANMERKUNGEN: a) KurzschlUste im Kabel sollten Sie unbedingt vermeiden. b) Die Stereo-Anlage saute auf mono gestellt werden. Audio-Ausgang, auf die c) Ihres Um den Empfindlichkeit Stereo-Gerates einstellen zu konnen und eine Beeintrachtigung des TV-Tons zu vermeiden empfiehlt sich der Einbau des in Abb. 3 gezeigten Reglers. Um weder am Computer noch am Stereo-Gerat bohren zu mUssen, kann er - in em n kleines Kastchen eingebaut - in das Verbindungskabel eingeschleift werden. Abgri

ffX
0,1yr Poti 27...50k \4_00 zur Stereo-Anlaye I T

Abbildung 3

EIO

1LJF E NI E

/2c I__ I 1G

DEZIMAL- UND HEX-ZAHLEN, BILDSCHIRMZEICHEN UND ASSEMBLER-BEFEHLE


DEZ HEX CH OP-CODE DC! HEX CHR OP-CODE RTI EOR (M,X) DEZ HEX CHR OP-CODE DEZ HEX COO 192 CO rg 193 Cl Ci] 194 C2 gi 195 C3 Is 3 196 C4 [...-1 197 C5 E: 198 C6 [;1 199 C7 Eft 200 CO 51 201 C9 Kg 202 CA fin 203 CB 13 204 CC RI 205 CD fr_ 206 CE 51 207 CF Ilt] 208 DO 1:;/ 209 DI W 210 D2 [.A 211 D3 Q OP-CODE CPY IMM CMP (M I X)

0 00 * : BRK 1 01 1.0 ORA (M,X) 11) 202 3 03 .4 C 4 04 .1 D 5 05 1 E ORA ZP 606 ,,,F ASL ZP 7 07 N.6 8 08 4 H PHP 9 09 1 ORA IMM 10 OA 6,..1ASL A 11 OB K 12 Of... 1 13 OD II BRA M 14 OE _N ASL II 15 OF . 0 16 10 +2. P BPL 17 11 rQ ORA (M) , Y 18 12 R 19 13 +S 20 14 . T 21 15 ,., U BRA ZP,X 22 16 I V ASL ZP,X 23 17 -I-II 24 18 -L. I CLC 25 19 N I ORA M,Y 26 1A I-2 27 113 C. 28 1C 129 1D 4. ORA M,X ' 30 1E 4ASL M,X 31 IF + 32 20 LEERZ. JSR M AND (M,)() 33 21 ! 34 22 " 35 23 # 36 24 $ BIT ZP AND ZP 37 25 V. ROL ZP 38 26 & 39 27 '

40 28 (
41 29 ) 42 2A * 43 28 + 44 2C , 45 20 46 2E . 47 2F / 48 30 0 49 31 1 50 32 2 51 33 3 52 , 34 4 53 35 5 54 36 6 55 37 7 56 38 8 57 39 9 58 3A : 59 38 ; 60 3C < 61 3D = 62 3E > 63 3F ?

PLP
AND IMM ROL A BIT M AND 11 ROL M BMI REL AND (M),Y

64 40 @ 65 41 A 66 42 B 67 43 C 68 44 D 69 45 E 70 46 F 71 47 6 72 48 H 73 49 I 74 4A J 75 4B K 76 4C L 77 4D M 78 4E N 79 4F 0 BO 50 P 81 51 Q 82 52 R 83 53 S 84 54 T 85 55 U 86 56 V 87 57 W 88 58 X 89 59 Y 90 5A Z 91 58 C 92 5C \ 93 5D 3 94 5E " 95 5F _ 96 60 97 61 a 98 62 b 99 63 c 100 64 d 101 65 e 102 66 f 103 67 g 104 68 h 105 69 i 106 6A j 107 68 k 108 6C 1 109 6D m 110 6E n 111 6F o 112 70 p 113 71 q 114 72 r 115 73 s 116 74 t

EOR ZP LSR ZP PHA EOR IMM LSR A JMP M EOR M LSR M BVC REL EOR (M),Y

128 80 E:7 129 8111:0 5Th (M),X 130 82 11 B 131 83 ,7.1C 132 84 :11D STY ZP 133 85 1 E STA ZP 134 86 074F STX ZP 135 87 06 136 88 r- H DEY 137 89 I 138 8A NI J TXA 139 88 11. K 140 BC ,,,N L STY M 141 8D 0111 5Th M 142 BE Ell N STX M 143 8F gra 144 90 E p BCC REL 145 91 r: Q STA ( M ) !Y 146 92 .7.R 147 93 :: S

CPY ZP CMP ZP DEC ZP INY CMP IMM DEX CPY M CMP M DEC M BNE REL CHP (M),Y

148 94 DI STY ZP, X


EOR ZP, X LSR ZP,X CLI EOR M,Y 149 95 U STA ZP,X 150 96 if I/ STX ZP,Y 151 97 152 98l':, I TYA 153 99 I 'I STA M,Y 154 9A LI TXS 155 98 RETURN 156 9C 157 9D El 5Th M,X 158 9E 101 159 9F 101 160 AO le LDY IMM 161 Al 1[1 LDA (M,X) 162 A2 IN LDX IMM 163 A3 rn 164 A4 EJ LDY ZP 165 AS E2 LDA ZP 166 A6 f.2 LDX ZP 167 A7 II 168 AS El TAY 169 A9 El LDA IMM 170 AA rj TAX 171 AB LI 172 AC LDY M 173 AD = LDA M 174 AE LDX M 175 AF 12 176 BO [::) BCS REL 177 131 EM LDA (M),Y 178 B2 El 179 83 lg 180 84 LDY ZP,X 181 85.51 LDA ZP,X 182 86 El LDX ZP,Y 183 B7 p 184 B8 0 CLV 185 89 0 LDA M,Y 186 BA NI TSX 187 BB la 188 BC G1 LDY M,X 189 BD a LDA M,X 190 BE 0:1 LDX MO, 191 BF 0

212 D4 EN
213 D5 M 214 D6 El 215 D7 216 D8 En 217 D9 k'i 218 DA E-3 219 DB ii 220 DC FM 221 DD [I 222 DE = 223 DF mal 224 E0 E) 225 El El 226 E2 El 227 E3 228 E4 E!] 229 E5 rg 230 E6 ICA 231 E7 01 232 E8 rn 233 E9 Fl 234 EA 1111 235 ED PA 236 EC Ig 237 ED T 238 EE WI 239 EF In s 240 FO rj 241 Fl 21 242 F2 CM 243 F3 M 244 F4 Ei 245 F5 EA 246 F6 El 247 F7 M 248 F8 E1 249 F9 En 250 FA 9 251 FB El 252 FC II 253 FD 2 254 FE Ell 255 FF 11 CMP ZP,X DEC ZP,X CLD CMP M,Y

n: w

EOR M,X LSR M,X RTS ADC (M, X) ADC ZP ROR PLA ADC IMM ROR A JMP (M) ADC M ROR 11 BVS REL ADC (M),Y

CMP MO( DEC M,X CPX IMM SBC (M,X)

[a

CPX ZP SBC ZP INC ZP INX SBC IMM NOP CPX M SRC M INC M BEQ REL SBC (M),Y

ra

AND ZP,X ROL ZP,X SEC AND M,Y

117 75 u
118 76 v 119 77 w 120 78 x 121 79 y 122 7A z 123 7B 4 124 7C 1 125 7D KT 126 7E 4 127 7F 0

ADC ZP, X
ROR ZP,X SEI ADC M, Y

SBC ZP,X INC ZP,X SED SBC M,Y

AND M,X ROL M,X

ADC M,X ROR M,X

SBC M, X INC M, X

leichter etwas das Programmiererleben Diese Tabelle wird Ihnen kann ja, je nachdem wie es von der CPU Byte Jedes machen. interpretiert wird, eine unterschiedliche Bedeutung haben. So kann oder den ATASCII-Zeichen es sich dabei um einen Zahlenwert, ein kann daher Die Tabelle handeln. eines Assembler-Befehls Teil folgende Funktionen erfullen: 1) Zahlenwandlung dezimal/hexadezimal und umgekehrt 2) Auffinden des CHR$0- oder Hex-Wertes zur Darstellung eines bestimmten Buchstabens oder Grafik-Zeichens 3) Schnelles Disassemblieren 'zu 4) Manuelles Assemblieren kurzer Maschinenprogramme 3 SP

ILJ

Ft.< 11%1E3 Pl="EL_-11-

MACHEN SIE MEHR AUS

IHREM ATARI-JOYSTICK

'normale' der Mal ehrlich: zum Atari-Telespiel . (VCS) paBt Steuerknuppel von Atari ja ganz gut, aber hatte unser wertvoller Computer nicht was Besseres verdient? Diese Oberlegung haben anscheinend auch sehr viele Fremdhersteller angestellt, denn inzwischen gibt es "Lumus'-Steuerkniippel in Wine und FlIe, auch wenn nicht alle so hochwertig und zuverlassig sind, wie sie aussehen. Wer nicht unbedingt DM 100,- and mehr fur einen 'Neuen' ausgeben will, um semen 'Alten' wegzuwerfen, kann auch semen Billig-Knuppel ganz schtin aufmdbeln, wie die folgenden Anregungen zeigen. 1. STABILER TISCH-STANDER

Bereits vor einiger Zeit brachte die US-Firma K-Byte emn Hilfsmittel heraus, das sich 'Stick Stand' nennt. Dabei handelt es
sich um einen stabilen Kunststoff-Sockel mit Gummifilssen, in den der Atari-Joystick genau hineinpaBt, damit man ihn kippsicher auf den Tisch stellen kann. Derartiges laBt sich mit etwas Geschick naturlich auch im Eigenbau anfertigen. Man braucht dazu lediglich em n paar Holz- oder Spanplattenabfalle, einige Schrauben, sowie Sage and Bohrmaschine. Wie die Halterung aussehen soil, zeigt Abbildung 1. Bis auf die Aussparung fur das Joystick-Gehause sind die Abmessungen recht unkritisch; die eingetragenen Marie (in mm) sollen nur als Richtschnur dienen. Je starker die Bodenplatte ist, desto sicherer steht Ihr Steuerknuppel auf dem Tisch (besonders wichtig fUr hektische Spieler). Zur Arretierung des KnUppel-Behauses sollten Sie, wie gezeigt, seitlich eine Schraube vbrsehen. Um die Rutschfestigkeit zu verbessern, kleben Sie em n paar Gummifusse auf die Unterseite der Platte. Lassen Sie auf der Oberseite der Platte am Besten links and rechts einen Rand. Dann kann man sie bei Bedarf auch mit Schraubzwingen am Tisch befestigen. Besonders professionell sieht Ihr Joystick-Sthnder aus, wenn Sie ihn nach Fertigstellung schwarz anstreichen.

, 30 .* 87

K
20

>

30

. > Lj0 20,

Abbildung 1

4:2

2) KUGELGRIFF - WIE IN DER SPIELHALLE


eine rote 'Stick Stand' von K-Byte gehtirt auch noch Zum mit etwa 5 cm Durchmesser, die auf den Kunststoffkugel Steuerkndppel gesteckt wird. Damit hat man dann etwas mehr das Gefuhl, einen 'professionellen' Steuerkniappel in der Hand zu haben, wie man ihn auf den Spielhallen-MUnzgerdten findet. Auch so etwas kann man ohne groGen Aufwand selbermachen. Passende Kugeln fanden wir z.B. in der Gardinen-Abteilung eines Kaufhauses! Dort gibt es zwei Sorten: die einen werden als AbschluB auf Gardinenstangen aufgesteckt, die anderen sind -Fur Schndre von Rollos und Jalousien bestimmt. So-fern eine evtuell bereits vorhandene Bohrung zu groB ist, wird vor dem Aufstecken der Kugel eine entsprechende Menge Isolierband um den Steuerknuppel gewickelt. - Sehr gut lassen sich Ubrigens auch die Holzkugeln verwenden, die als Rohlinge in alien mtiglichen GritiBen in Bastelgeschaften zu haben sind. Zum Bohren sol1te man allerdings Utter eine elektrische Bohrmaschine verflagen, moglichst auch Gber Bohrstander mit Schraubstock. Man saute moglichst mit einen kleinem Bohrer-Durchmesser beginnen, um das Loch genau zu zentrieren. Auch verhindert man so, daB die Holzkugel aufplatzt. 3) NOCH EINE PREISWERTE AUFWERTUNG FOR IHREN STEUERKNOPPEL!

Hier noch em n Tip, wie Sie den Atari-Steuerknappel fur ca. em n bis zwei Mark handlicher machen konnen. Gehen Sie einfach zum achsten Fahrradhandler und schauen Sie sich die verschiedenen Gummi- und Kunststoffgriffe an, die dort fdr Fahrradlenker angeboten werden. Sie glauben nicht, wieviel handlicher Ihr SteuerknUppel mit so einem Sri-f+ werden kann! Um den Unterschied zum groBeren Innendurchmesser der Griffhillse auszugleichen, umwickeln Sie den Steuerknuppel vor dem Aufstecken der HUlse einfach mit der entsprechenden Menge Isolierband. Fiir unser Probeexemplar haben wir einen derartig schtinen farblich passenden Griff (das Paar zu DM 1,35) gefunden, daB es verschiedentlich far einen vollig neueh Steuerknuppel gehalten wurde! 4) MEHR SPASS MIT DEM FUSS-TASTER

Fr zahlreiche Spiele, jedoch auch +dr 'ndtzliche' Programme kann


es interessant sein, anstelle des roten Feuerknopfes einen FuB-Schalter zur VerfUgung zu haben. So gibt es beispielsweise verschiedene Autorennen, bei denen mit dem Feuerknopf gebremst bzw. Gas gegeben wird. So etwas ist mit einem 'Pedal' natdrlich wesentlich realistischer. Um so ein Pedal zu bauen, brauchen Sie lediglich mine 9-polige Buchse, einen 9-poligen Stecker, ca. 1,5 m zweipoliges Kabel und einen FuB-Taster. Am Besten verwenden Sie dazu em n fertiges FuB-Pedal, wie es als Zubehor zu DiktiergerAten in Kaufhausern relativ preiswert angeboten wird. Als alternative Billiglasung bietet sich ein Turklingeltaster an, den man auf emn kleines Brett schraubt. Die Schaltung 1st einfach: schlieBlich braucht der FuB-Taster ja lediglich mit dem roten Feuerknopf
parallelgeschaltet zu werden. Man baut zunachst aus den bei den 9-poligen Steckverbindern das Zwischenstdck, das zwischen

SteuerknUppel-Stecker und Computer-Buchse gesteckt wird. Dazu legt man Buchse und Stecker mit ihren LotanschlUssen spiegelbildlich aneinander und verldtet die Kontakte jeweils miteinander. Dann kommt ein AnschluB des zweipoligen Kabels an Kontakt 6 (STRIG), der andere an Kontakt 8 (Masse). Die beiden Anschlasse am anderen Ende des Kabels verbinden Sie mit den Kontakten Ihres Tasters, der - genau wie der Feuerknopf - normalerweise offen 1st und bei Betatigung schlieSt.

DIEFC zE 10 I-1 E /*1 rct

3rE Fc

Es sind diverse Programme in Umlauf, mit deren Hilfe man eigene Zeichensatze erstellen und auf Diskette abspeichern kann. Damit ist es maglich, anstelle der standardmaBig vorhandenen Zeichen z.B. altdeutsche Schrift oder elektronische Schaltzeichen auf den Bildschirm zu bringen. Hier nun em n Programm, das Ihnen dabei in soil, die Zeichensatze Ihrer zu helfen Diskettensammlung sichten. Sie konnen entweder das unten gezeigte Listing direkt assemblieren oder den Hexadezimal-Code auf der Gbernachsten Seite eintippen. Soil der Tester in andere Programme es sich werden, empfiehlt jedoch, den Weg eingebaut des Assemblierens zu gehen. Die Bedienung ist einfach: starten Sie das Geben Programm ('L' im DOS2.0). Sie Namen des nun den an oder aufzulistenden Zeichensatzes drucken Sie <RETURN>. Sie bekommen dann das Inhaltsverzeichnis Ihrer Diskette angezeigt und werden erneut nach einem Dateinamen gefragt. Nach Eingabe eines komplett gultigen Namens wird der Zeichensatz geladen und aufgelistet (siehe Abbildung 1 und 2).
10 ICCM0=50342 28 IC0AL=50344 30 IC8AH=50345 48 ICKL=$0348 50 ICBLH=S0349 68 ICAX1=5034A 78 ICAX2=58348 88 CIOV=5E456 90 OPEN=503 0100 0POIR=506 0110 CLO5E=50C 0120 READ=504 0138 RENR=50C 0140 MEN1OP=564 0158 CHBA5=52F4 8160 GETXT=505 8178 6EBYT=507 8180 PUTXT=509 0190 PUBYT=588 0200 EOL=598 0210 COL1=5205 0220 COL2=S2C6 0238 COL4=52C8 0240 RONCRS=554 0250 COLCRS=555 0260 LMARGN=552 0278 BUFF=SBO 8288 BUFL:$112 0290 CHRBAS=504 0388 CHRBA5ALT=585 0310 *=$3480 8320 LOA MENTOP 0338 SEC 8340 SBC #588 8350 STA CHRBAS 0360 LDA CHBAS 8370 STA CHRBASALT 0380 JSR OPENS 0390 LOA #TXTBUFS&255 8408 STA BUFF 0410 LOA 14TXTB1JFS/256 0420 STA BUFF+1 0438 LDA 8504 8440 STA BUFL 0450 LOA 001 0468 STA BUFL+1 0470 JSR MAUS 0480 INPT LOA #DATNNE&255 8490 STA BUFF 8500 LOA UDATNME/256
0510 STA BUFF+1

8520 0538 8540 0550 8560 0570 0588 0590 8600 0610 0620 8630 8648 0650 0668

LOA U5OD STA BUFL JSR TXTEIN LOA DATNME CMP UEOL BEQ DIR LOA #001.1F0&255 STA BUFF LDA #0BUFD/256 STA BUFF+1 JSR OPEND LOA 000 STA BUFL STA BUFF LOA CHRBAS

8670 STA OUFF+1 0680 LOA 004 0690 STA BUFL+1 0700 JSR GETOSK 0710 LOA CHRBAS 0728 STA GHBAS 0730 JSR CLR 0740 LOA 002 0758 STA BUFL 0760 LOA 000 0770 STA BUFL+1 8780 LOA 14518 0790 STA CHRBUF 8800 LOA 000 0810 STA CHRBUF+1 0828 LOA UCHROUNK255 0830 STA BUFF 0840 LOA #CHRBUF/256 0850 STA BUFF+1 8860 NXTCHR JSR TXTAUS 0870 INC CHRBUF+1 0888 ONE NXTCHR 8890 LOA #EOL 8100 STA CHRBUF 0910 LDA 8501 0920 STA BUFL 0938 JSR 1N14115 0140 JMP NXTEINGBE 0950 DIR LOX 020 0960 LOA #OPEN 8970 STA ICCMD,X 0988 LOA UADIR00F&255 0990 STA ICBAL,X 1888 LOA #0DIRBUF/256 1010 STA ICBAH,X 1028 LDA #OPOIR 1030 STA ICAX1,X 1840 LOA 8508 1850 STA ICAX2,11 1068 J5R CIOV 1070 LOA UDIRBUFA255 1080 STA MALI( 1090 STA BUFF 1100 LOA 2*DIRBUF/256 1110 STA ICBAH,X 1120 STA BUFF+1 1130 LOA 012 1140 STA ICBLL,X 1150 STA BUFL 1160 LOA 000 1170 STA ICBLH,X 1180 STA BUFL+1 1190 LOA #GEBYT 1280 STA ICCMD,X 1218 JSR CIOV 1220 JSR CLR 1230 LOA CHRBASALT 1248 STA CHBAS 1258 JSR TXTAUS 1268 MOIR LOX 020 1270 JSR CIOV 1280 LOX 001 1298 LOA DIRBUF,X 1300 CUP 22520 1310 ONE OLOCRS 1320 JSR TXTAUS .

1438 LOA RONCRS 1348 CMP #511 1350 BEQ NENCRS 1360 JNP MOIR 1370 NENCRS LOA 015 1380 STA LMARGN 1390 STA COLCRS 1408 LOA 000 1410 STA RONCRS 1420 JP NXTDIR 1430 OLDCR5 LOA 8502 1440 STA LMARGN 1450 STA COLCRS 1460 LDA #513 1478 STA RONCRS 1488 NXTEINGBE LOX 020 1430 JSR CLSE 1500 LOA UEIN6BE&255 1510 STA BUFF 1520 LOA HEINGBE1256 1530 STA BUFF+1 1540 LOA 00C 1558 STA BUFL 1560 LOA 22580 1570 STA BUFL+1 1588 JSR TXTAUS 1590 JUP INPT 1600 OPENS LOX 010 1610 LOA UOPEN 1628 STA ICCMD,X 1630 LOA 800UF5&255 1640 STA ICBAL,X 1650 LOA #0BUFS/256 1668 STA 'COMA 1670 LOA #RENR 1680 STA ICAX1,X 1690 LOA 000 1788 STA ICAX2,X 1710 JSR CIOV 1720 LOA 008 1738 STA COL1 1740 LOA #504 1750 STA C012 1760 STA COL4 1770 RT5 1780 MAUS LOX 010 1799 LOA UPUBYT 1880 STA ICCMD,X 1810 LOA BUFF
1820 STA ICBAldt

1830 LOA BUFF+1 1840 STA ICBAH,X 1850 LOA OUFL 1860 STA ICOLLA 1878 LOA BUFL+1 1880 STA ICBMX 1890 JSR CIOV 1900 RTS 1910 TXTEIN LOX 8519 1928 LOA UGETXT 1930 STA ICCMD,X 1940 LOA BUFF 1958 STA ICBAL,X 1368 LDA BUFF+1 1978 STA ICBAH,X 1980 IDA DUEL 1990 STA 'Mid( ---> .

2000 2010 2020 2838 2040 2050 2068 2870 2888 2890 2100 2110 2120 2130 2140 2150 2160 2178 2180 2190 2200 2210 2220 2230 2240 2250 2260 2278 2280 2298 2300 2310 2328 2330 2340 2150 2368 2370 2380 2390

J5R CIOV RT5 OPEND LDX U$20 IDA WIPER STA ICCMO,X LDA BUFF STA ICBAL,X LDA BUFF+1 STA ICBAH,X LDA MEAD STA ICAX1,14 LDA WOO STA ICAX2,X J5R CIOV BMI ERROR RTS GETDSK LDA UGEBYT STA ICCMD,X LDA BUFF STA.ICBAL,X LDA 0UFF+1 STA ICBAH,X LDA BUFL STA ICKL,X LDA BUFL+1 STA ICBLH,X JSR CIOV R15 CL5E LDA =LOSE STA ICCMD,X JSR CIOV RTS ERROR PLA PLA JSR CLR LDA ifERRBUF&255 STA BUFF LDA UERRBUF/256 STA BUFF+1 LDA 41068

2400 2410 2420 2422 2423 2430 2440 2450 2468 2470 2488 2490 2588 2510 2528 2530 2548 2558 2568 2578 2580 2598 2600

STA BUFL LDA U$00 STA BUFL+1 LDA CHRBASALT STA CHBAS JSR TXTAU5 JMP NXTEINGBE CLR LDX U$10 LDA UPUBYT STA ICCMD,X LDA UCLRBUM55 STA ICBAL,X LDA UCLRBUF/256 STA ICBAH,X LDA USOI STA ICOLL,X LDA uSee STA ICBLH,X JSR CIOV US OBOES .BYTE "E:",EOL TESTER",EOL TXTBUFS .BYTE "g++44+4+CHARACTER-5ET .BYTE "444Dieses Program laedt Ihren auf",EOL 2610 BYTE "Diskette gespeicherten neuen",EOL 2628 .BYTE "Character - Satz, und zeigt ihn auf dem",EOL 2630 .BYTE "Bildschirm.",EOL 2640 .BYTE "48itte geben Sie den Dateinameo ein,",EOL 2650 .BYTE "oder druecken Sie die RETURN-Taste",EOL 2660 .BYTE "fuer eine Diskettenuebersicht.",EOL 2670 EINGBE .BYTE "4Dateiname? " 2680 HUED .BYTE "D:" 2690 DATNME BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00,S08,$00,$00,S00 2700 CHRBUF .BYTE $00,000 2718 ERRBUF .BYTE 1 344Datei leider nicht gefunden!",EOL 2720 .8YTE "Bitte Dateinamen oder Diskette",EOL 2730 ,BYTE "ueber ruefen.",EOL =Diskettenuebersicht)",EOL 2732 .BYTE "4 ' 2748 ODIRBUF ,BYTE "D:*.*",EOL 2750 CLRBUF .BYTE "g" 2760 DIRBUF ,BYTE $00

CHARACTER-SET

TESTER

Dieses Programm laedt Ihren auf Diskette gespeicherten neuen Character-Satz, und zeigt ihn auf dem Bildschirm. Bitte geben Sie den Dateinamen em, oder druecken Sie die RETURN-Taste fuer eine Diskettenuebersicht. Dateiname? ENGLI5H.FNTE
Abbildung 1: Anforderung eines Zeichensatz-Namens

"Vill\AA."%a"r-floval-rul 1%00-4 ! " tax & )*+,-./0123456789:;<=>?edinDEFGHIJK

LtitOPQRSTuVwxnuoA_IabodlafghijklmnoRq Er ns ituvwxy z +I m 31:Erraivr

Bateiname?
Abbildung 2: Ein Zeichensatz wurde geladen und gelistet

3400 3408 3410 3418 3420 3428 3470 3438 3440 3448 3450 3458 3460 3468 3470 3478 3480 3488 3490 3498 3440 3448 3480 3488 34C0 34C8 3480 3488 34E0 34E8 34F0 34F8 3500 3508 3510 3518 3520 3528 3530 3538 3540 3548 3550 3558 3560 3568 3570 3578 3580 3588 3590 3598 3540 3548 3580 3588

45 F4 14 04 52 85 75 49 20 BO 83 02 49 37 85 35 88 52 0303 98 20 85 81 49 07 F2 52 01 20 03 85 34 13 49 49 20 49 44 OC 03 02 02 03 9D 45 60 AS 45 56 42 81 03 E4 03 98

64 02 85 85 35 81 AD 18 88 45 20 20 00 49 BO EE 27 75 9D 49 44 56 80 49 00 9D 35 35 BD 52 4C 55 49 85 OC OC 52 03 03 98 20 49 60 45 45 83 42 BO 03 E4 07 9D 49 30 45 45

38 85 BO 82 49 49 IA 85 35 84 AC F2 85 00 49 28 37 4C 42 37 03 E4 49 12 98 42 45 42 98 35 DA 49 02 54 85 85 35 98 49 44 56 04 42 BO 03 98 10 98 45 60 45 45 00 27 BO 03

E9 85 49 49 14 OD 77 80 49 85 35 35 83 88 37 37 49

op
03 - 9D 49 49 37 98 49 03 85 20 37 AS 34 00 85 42 BO 82 4C 42 36 03 E4 88 10 98 45 49 49 44 82 42 BO 03 98 60 9D 45

08 20 36 01 85 85 r9 49 00 81 45 49 49 28 85 DO 01 35 49 45 00 98 98 48 03 20 88 20 C9 54 49 85 52 20 49 49 22 03 98 49 49 C6 49 44 82 03 05 03 9D 20 9D 49 48 49 44 82

85 26 85 85 BO 82 98 37 85 49 84 02 18 37 81 F8 85 42 94 03 98 98 45 03 85 56 F4 56 20 C9 15 54 85 20 37 00 34 49 45 00 00 02 08 03 9D 20 9D 45 48 49 44 04 03 07 03 9D

3500 45 83 98 49 03 35C8 60 49 OC 9D 42

3580 E4 60 68 68 20
35D8 29 85 BO A9 37

35E0' 35E8 35F0 35F8

68 85 08 03

85 8D 35 49

82 F4 42 94

A9 02 10 9D

00 20 49 44

84 AD 3600 98 45 03 49 01 9D 48 07 35 49 3608 49 00 98 49 03 20 56 E4 81 49 3610 60 45 34 98 7D IF 1F 1F 87 20 3618 1F 1F 1F 1F C3 C8 Cl 82 49 37 3620 Cl C3 84 C5 82 AD 83 C5 20 71 3628 D4 AO AO AO 84 C5 83 D4 FO 55 3630 C5 82 98 18 18 18 44 69 85 81 ' 3638 65 73 65 73 20 50 72 6F 82 85 3640 67 72 61 68 68 20 6C 61 . 04 85 3648 65 64 74 20 49 68 72 65 88 F4 3650 6E 20 61 75 66 98 44 69 85 82 3658 73 68 65 74 74 65 20 67 88 27 3660 65 73 . 70 65 69 63 68 65 49 27 3668 72 74 65 6E 20 6E 65 75 20 52 3670 65 6E 98 43 68 61 72 61 49 98 3678 63 74 65 72 28 53 61 74 82 20 3680 74 2C 20 75 6E 64 20 74 20 49 .3688 65 69 67 74 20 69 68 6E 98 44 3690 20 61 75 66 20 64 65 AD 49 06 3698 98 42 69 6C 64 73 63 68 48 07; 3640 69 72 68 2E 98 18 42 69 44 03 3648 74 74 65 20 67 65 62 65 03 85 3680 6E 20 53 69 65 20 64 65 85 82 3688 6E 20 44 61 74 65 69 6E 83 49 36C0 61 68 65 6E 20 65 69 6E E4 20 36C8 2C 98 6F 64 65 72 20 64 02 20 3.480 72 75 65 63 68 65 6E 20 E4 42 3688 53 69 65 20 64 69 65 20 80 . 19 36E0 82 C5 84 85 82 CE 28 54 11 FO 36E8 61 73 74 65 98 66 75 65' 85 52 36F0 72 20 65 69 6E 65 20 44 4C DA 36F8 69 73 68 65 74 74 65 6E 55 49 3700 75 65 62 65 72 73 69 63 C? 35 3708 68 74 2E 98 18 44 61 74 85 81 3710 65 69 6E 61 68 65 3F 20. 85 83 3718 44 34 98 00 00 00 00 00' 42 10 7720 00 00 00 00 00 00 00 00'11 9D. 3728 00 FD 18 18 44 61 74 65 03 49 3730 69 20 6C 65 69 64 65 72 98 48 3738 20 6E 69 63 68 74 20 67 3740 65 66 75 6E 64 65 6E 21 88 C5 8D C8 3748 98 42 69 74 74 65 20 44 98 42 3750 61 74 65 69 6E 61 68 65 . 3758 6E 20 6F 64 65 72 20 44 45 81 48 03 3760 69 73 68 65 74 74 65 98 56 E4 3768 75 65 62 65 72 70 72 75 42 03 3770 65 66 65 6E 2E 98 18 28 81 98 3778 82 C5 84 85 D2 CE 3D 44 03 20 3780 69 73 68 65 74 74 65 6E 03 9D 3788 75 65 62 65 72 73_69 63 03 45 3790 68 74 29 98 44 34 24 2E 9D 44 3798 24 98 7D 20 56 . Abspeichern des Zeichen-Testers 98 42 . DOS mit 45 81 48 03 I. Gehen Sie ins DOS . 20 56 E4 2. Geben Sie 'K' (Binary Save) ein. 56 03 20 3. Auf die Frage nach Name, StartF2 35 49 adresse etc.. antworten Sie: 85 81 A9 85 83 45 CHRTEST.SYS,3400,3798, - .3400 <RETURN> 52 35 4C 08 98 42 Zum automatischen Starten nennen 03 49 37 Sie das Programm 'AUTORUN.SYS'.
.4411-

P' 10 10E EL I FF I N1

L E XIGH T

E Mink10 1-( T

Wer sich bereits mit dem Programm 'Das sprechende Gesicht' auf Seite 62 ff beschaftigt hat, kennt schon eine Technik der Animation, also der 'Belebung' von Abbildungen. Durch gezieltes Hell- bzw. Dunkelschalten von Farbregistern wurde mit dem dort vorgestellten Programm der Eindruck erweckt, als warde sich der Mund des abgebildeten Gesichtes bewegen. Hier soil nun eine noch vielseitigere Methode gezeigt werden, wie Sie Bewegung in Ihre Computer-Bilder bringen. Es geht um das sogenannte -"PAGE FLIPPING'.

WAS 151 PAGE FLIPPING? Zum besseren Verstandnis sei kurz vorausgeschickt, daD sich jedes Bild, das Ihnen Ihr Atari auf den Schirm bringt, aus zwei wichtigen DatenblOcken zusammensetzt, namlich den Bilddaten und der Display-Liste. Die Display-Liste 1st em n kleines Maschinenprogramm far den Graphik-Mikroprozessor ANTIC, der im Atari-Computer far die Art der Darstellung von paten auf dem Bildschirm zustandig ist. Hier erfahrt er, mit welchen Zeilenzahlen und Graphikstufen er eine Abbildung aufbereiten soil. Frei abersetzt kOnnte man Page-Flipping als Seiten-Umschaltung Mit dieser Technik macht man sich namlich die bezeichnen. Eigenschaft zunutze, daB em n Bildschirminhalt mit der dazugehorigen Display-Liste irgendwo in einem beliebigen freien Bereich im RAM stehen kann. Mit einigen wenigen Speicherzellen wird Buch daraber gefahrt, wo Ihr Bild im RAM-Speicher abgelegt ist. Sicher ahnen Sie schon, was das bedeutet: Je nachdem, wieviel RAM zur Verfagung steht, ist auch far mehrere Bilder gleichzeitig Platz vorhanden. Welche Abbildung gerade auf dem Bildschirm zu sehen ist, hangt von der Adresse ab, die man in den buchfahrenden Speicherzellen angegeben hat. Durch einfachen Wechsel dieser Adresse kann man nun seine Bilder sozusagen 'weiterblattern'!

ik,2k, 4k bzw.4: Bk RAM t.

OBERE RAM-GRENZE Display - Listei C 20 - 202 Bytes) Daten zu BILD1 (251-7900 Bytes) II Display-Liste2 Daten zu BILD2 gm II Disp1ay-Liste3 II Daten zu BILD3 11 Disp1ay-Liste4 11 Daten zu BILD4 weitere Bilder, soweit genug RAM vorhanden 1st IHR PROGRAM (BASIC od. Hasch.) 2ero-Page,5tack,05 - Daten etc. UNTERE RAH-GRENZE
Abbildung 1

Die Aufteilung des RAM - Speichers im Atari--Computer geht aus Abbildung 1 hervor. Sofern yam Programmierer nicht _enders angegeben, wird em n Bild - egal in welcher Graphikstufe - immer an des obere Ende gelegt. Beim Hinzufugen weiterer Bilder arbeitet man im RAM daher von oben nach unten. Wieviele Bilder Sie gleichzeitig im Speicher haben konnen, hangt von der verwendeten Graphikstufe ab, da die Zahl der henotigten Bytes ja bekanntlich mit der Auflasung steigt. Daruberhinaus.beleot Ihr Programm selbst natUrlich auch noch Speicherplatz. Schlie(3lich sollten Sie noch folgende Speicheradressen kennen: 106 (RAMTOP): Beim Einschalten des Computers schreibt das Betriebssystem hier hinein, wieviel 265-Byte-Blocke RAM-Speicher zur VerfUgung stehen. 88,39 (SAVMSC): -Hier findet man die niedrigste Adresse des BiIdschirmspeichers. 540,561 (Sr)LSTL): In diesen beiden Zellen -wird die Startadresse der Display-Liste abgelegi.

WARUM BRAUCHE ICH PAGE FLIPPING? FUr diese Methode gibt es praktisch unzahlige Anwendungen. Um nur einige herauszugreifen: Auf Knopfdruck lassen sich als * Lm geschaftlichen Bereich: mehrerer Balkendiagramme dargestellte Umsatzentwicklungen Jahrgange ohne langesNachladen wechseln. * Im Spiele-Bereich: Sicher kennen auch Sie des Weltraum-Spiel STAR RAIDER (tm Atari). Hier kann man z.B. zwischen darn Buick ins Weltall und der 'galaktischen Karte hin- und herschalten. _, . , 1: _ * In der Werbung: Selbst in den haherauflosenden Graphikstufen passen noch mehrere Bilder gleichzeitig in den Speicher, sodaB z.B. auf einem . Bildschirm im Schaufenster verschiedene gezeigt werden ktinnen, ohne da8 bei jedem Werbebotschaften Bildwechsel neue Daten geladen warden mUssen. Bei Dauerbetrieb wurde dies eine Diskettenstation ganz schon strapazieren. * In der Unterhaltung: Wie in einem Zeichentrickfilm lessen sich Bewegungsablaufe in Einzelbilder zerlegen. Bringt man diese Bilder nacheinander maglichst ruckfrei auf den Bildschirm, ensteht der Eindruck einer flieBenden Bewegung. Einige Seiten waiter finden Sie dazu eine kleine Demo (BEISPIEL 2).

WIE MACHT MAN PAGE FLIPPING? Programme, die mit dieser Technik arbeiten, sieht man eigentlich immer noch relativ selten. Dabei ist Page Flipping nicht nur sondern auch einfach zu programmieren, wie die folgenden nut:zilch Beispiele zeigen. In Abbildung 1 sehen Sie, da0 eine Display-Liste im Speicher dazugehorigen Bilddaten liegt. Neben der jeweils oberhalb Informationen ilber leere Bildschirmzeilen, zu verwendende Graphikstufe(n) u.a. gibt sie mit ihrem vierten und funften Byte die Adresse an, ab der die Bilddaten zu finden sind. FUr das Page Flipping gibt es daher zwei etwas unterschiedliche Maglichkeiten:

'SP.&

Paoe-Flippino-Methode Nummer 1: Wir Andern einfach die in 560/561 gespeicherte Adresse. Damit wird eine andere Display-Liste angesprungen, was auch die Anzeige eines anderen Bildinhalts bewirkt. Klar, daG man zuvor far jede neue Adresse auch tatsAchlich jeweils eine Display-Liste mit dazugeharigen Bilddaten vorsehen muG. Andernfalls gerAt ANTIC durcheinander. Sehen Sie sich dazu BEISPIEL 1 an. Das Programm zeichnet zwei GRAPHIC-3-Bilder, die damn abwechselnd angezeigt werden. erste Bild Nach dem das erstellt. Ab Zeile 120 wird GRAPHICS-Befehl wird in Zeile 130 die Adresse der Display-Liste festgehal ten. In Zeile 140 wird em n Quadrat gezeichnet, in Zeile 150 em n Text hinzugefagt. In Zeile 160 halten wir die obere Grenze des verfagbaren RAM-Speichers fest (ALT). AnschlieGend soil diese Grenze soweit nach unten verlegt werden, daB wir em n neues Bild anfertigen konnen, ohne das vorherige zu aberschreiben. Far emn GRAPHICS-3-Bild mit Textfenster reichen drei 256-Byte-Blocke aus. Also: NEU=ALT-3 (far jedes Bild in GRAPHICS 8 maGten wir jeweils 32 Blacke subtrahieren). In Zeile 170 verlegen wir nun also die obere Speichergrenze, um ab Zeile 180 mit unserem zweiten Bild beginnen zu konnen. In Zeile 200 wird ebenfalls em n Quadrat gezeichnet, allerdings an anderer Stelle und in einer anderen Farbe, damit man auch deutlich sieht, (Jan es sich hier um em n vollkommen verschiedenes Bild handelt. Das eigentliche Page-Flipping findet in den Zeilen 220/230 statt, indem wir - mit einer Warteschleife dazwischen - die Adresse der Display-Liste umschalten. Da wir nur mit ganzen 256-Byte-Blacken arbeiten, wird dazu nur das hohere Byte der Adresse in Zelle 561 benutzt, die ja ebenf all in 256 Byte-Schritten zAhlt. Die niedere HAlfte der Display-Listen-Adresse ,(560) zAhlt, wie bei Zwei-Byte-Adressen ablich, in einzelnen Bytes und wird in Zeile 130 bzw. 190 nur der VollstAndigkeit halber aufgefahrt, falls spAter einmal damit gearbeitet werden soil. Dank Zeile 240 kann man die lauf end wechselnde Anzeige der beiden Bilder durch Dracken der START-Taste verlassen. WICHTIG: damit nicht die Gefahr besteht, dass. Ihr Computer nach dem Verlassen einer Page-Flipping-Routine durcheinander gerAt, sollten Sie ihm unbedingt wieder mitteilen, wo die 'echte' obere Speichergrenze liegt. In unserem Beispiel geschieht dies in Zeile 260. In Zeile 270 steht das Unterprogramm mit der Warteschleife, die far die Geschwindigkeit des Bildwechsels verantwortlich ist.

49'7

BEISPIEL

(Oehe vorangegangene Seite)

100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270

REM PAGE - FLIPPING-DEMO MIT 2 GRA - BILDERN REM GRAPHICS 3 DI5PLISTLI=PEEKT560):DISPLI5THI:PEEK45611 COLOR 1:PLOT 5 L5IDRANTO 10,5:DRANTO 10_ 110!1RANTO 5,10:DRANTO 5,5 ? :7 " SEITE My' (ABBRUCH MIT W111)" ALT=PEEKC1061;NEO=ALT - 3.REM ZAHL DER PRO BILD ERFORDERL. 256-BYTE-BLOECKE POKE 106,NEH GRAPHICS 3:PUKE 752,1 DISPLIST12=PEEK(560):DI5PLI5TH2=PEEKC561) COLOR 2:PLOT 2411.10:DRAWTO 25,10:DRANTO 25,15:DRAWTO 20,15:0R4N10 2040 ? :? " SEITE OBERON MIT POKE 561,DI5PLI5THI:GOS9B 270 POKE 561,0I5PLI5T112:GOSHB 270 IF PEEK(53279)=6 THEN 260 GOTO 220 POKE 106,ALT:GRAPHICS 0:STOP FOR N=I TO 300;NEXT WRETURN

BEISPIEL 2 arbeitet nach derselben Methode wie das vorangegangene Beispiel, allerdings in der Graphikstufe 0. Hier soil verdeutlicht werden, wie man durch Page-Flipping Bewegungen darstellen kann. Nacheinander werden vier GRAPHICS-O-Bilder angezeigt. Das Hotly ist ein aus Graphikzeichen zusammengesetztes Mannchen, dessen Haltung sich auf den einzelnen Bildern jeweils etwas dem Umschalten der unterscheidet. Die Warteschleife nach Display-List-Adressen wurde so dimensioniert, daB durch den Bildwechsel .der Eindruck einer flieBenden Bewegung entsteht. In unserem Beispiel ware noch genug Platz far acht big neun weitere GRAPHICS-0-Bilder, sodaB eine wesentlich hOhere Auflesung der Bewegung Moglich ware. Auf ieden Fall lassen sich auf diese Weise auch kleine 'Zeichentrickfilme realisieren. Da Sie Ihreeigenen Zeichensatze erstellen konnen, sind Sie dabei keineswegs nur an die standardmaGig vorhandenen 6RAPHICS-0-Sonderzeichen gebunden. Pausen innerhalb einer Szene kOnnte man dazu benutzen, neue Bilder von der Diskette nachzuladen. Wer noch mehr Bilder gleichzeitig im RAM-Speicher haben will verwendet am Besten die speichersparenden Graphikstufen 3 oder 4.

(BEISPIEL 2 finden Sie auf der folgenden Seite)

1000 REM ,* RAGE-FLIPPING - DEMO * 1018 REM * MIT 4 GRA-BILDERN * 1020 REM MALES DER VIER BILDER 1030 GRAPHIC5 0:POKE 752,1:POKE 82,2 1040 ? :? :? HIM 1050 ? 1 DIE " 1060 ? "IHURRAd / TRICK " 1070 ? 0-0 1080 ? " - -V 7.31(I5TE " 1090 II 1100 I ll ugm I. If 1110 1120 Ut ;-4 1130 mommwamm " 1140 1150 II 1160 9 it n 1170 1180 ? 1198 ? 1200 ? HZ" 1210 2 11 1220 ANFAN6=PEEK(106) 1230 DISPLI=PEEK(560):DISPH1=PEEK(561) 1240 REM 045 WAR FULD 1 1250 POKE 106,ANF4NG - 8 1260 GRAPHICS 0:POKE 752,1 1270 ? :7 :? I. 111I11 1280 2II 11 1290 "'SORRA!' / DIE " 1300 ? VI 0 .0 -TRICK " 1318 ? " 1, V 1328 ? " =flasTE " II 1330 II v 1340 ? 11 * 1350 7" NEW " 1360 7 al I 1370 ? It II ssssoms 11 1388 II 1350 ? II It 1480 ? as 1410 ? II 1420 ? II 11 1430 III HZ" 1440 11 1450 DISPL2=PEEK(560):DISPH2=PEEK(561) 1460 REM DAS WAR BILD 2 1470 POKE 106,ANFANG - 16 1480 5RAPHIC5 0:POKE 752,1 1490 ? :? :? II 1500 11 1510 ? 1520 ? 0 1530 7 DIE- " 1540 sSaTRICK " ? 1550 " 1568 ? es 1570 a Ut 1580 ? II ? 11 1590 OBI " I 11 1600 ? 1610 ? 1620 ? 11 1630 ? 11 1640 ? 11 1650 ? 1660 HZ" 1670 DI5PL3=PEEK(560):DI5PH3=PEEK(561) 1680 REM DAS WAR BILD 1690 POKE 106,ANFAN6-24 1700 GRAPHICS 0:POKE 752,1 1710 ? :? :? 1720 ? 11 11 1730 / II 11 0-1.1 1740 ? II ? It 1750 1768 7" ' DIE " 1770 TRICK " 1780 =)KISTE " " 1790 u ? II 1800 u 1810 1820 NEW " 11 1830 ? II ? Sg ssssss " 1840 111 1850 ? ,\ II 1868 II 1878 7 II 1880 HZ" 1898 60508 2030 1908 DI5P14=PEEK(560):DI5PH4=PEEK(561) 1910 REM DAS WAR BILD 4
.

itiv
.

NJ

1920 1130 1940 1950 1960 1970 1980 1950 2000 2010 2020 2030 2040 2050 2060 2070 2080 2056 2100 2110 2120 2130 2140 2150 2160 2170 2188 2190 2200 2210 2220 2230 2240 2250 2260 2270 2280 2290 2300 2310 2320

REM UMSCHALTUNG (PAGE FLIPPING) POKE 560,DISPLI:POKE 561,DISPH1:0568 POKE 560,DISPL2:POKE 561,DI5PH2:GOSUB POKE 560,DISPL3:POKE 561,0151413:60506 POKE 560,D1514.4:POKE 561,D15PH4:605UB GOSUB 2310:0568 2318 POKE 560,DI5PL3:POKE 561,DI5PH3:60S116 POKE 560,DISPL2:POKE 561,D15PH2:0508 POKE 560,DISPL1:POKE 561,DISPH1:GOSUB GOTO 1930

2318 2310 2318 2310 2310 2410 2310

REM MUSIK IM VBI


RESTORE 2050:FOR 1=1536 TO 1685:READ B:POKE 1,6 NEXT I:RESTORE :X=USR(1536):RETORN DATA 104,169,40,141,40,2 DATA 161,6,141,41,2,169 DATA 1,141,26,2,165,3 DATA 141,15,210,169,0,141 DATA 8,218,133,203,165,168 DATA 141,1,210,141,3,210 DATA 141,5,210,96,138,72 DATA 166,203,224,22,248,95 DATA 185,77,6,141,0,210 DATA 141,19,6,141,2,210 DATA 189,121,6,141,4,210 DATA 232,134,263,169,10,141 DATA 26,2,104,170,96,121 DATA 81,162,81,121,81,162 DATA 81,121,81,162,81,182 DATA 121,182,121,182,162,144 DATA 128,121,0,0,96,0 DATA 96,0,56,0,56,0 DATA 96,0,96,0,144,0 DATA 144,144,128,121,108,56 DATA 0,47,60,81,60,47 DATA 60,81,60,47,60,81 DATA 60,45,60,72,91,40 DATA 53,64,53,47,0,165 DATA 0,133,203,76,42,6 REM WARTESCHLEIFE+FARBE SETCOLOR 2,RND(0)*15,0:SETCOLOR 1,0,1 FOR W=1 TO 7:NEXT W:RETURN

BEISPIEL 2

'

c7 49'

Page-Flinping-Methode Mummer 2:
Das Umschalten auf andere Display-Liste geschehen: denen die Anfangsadresse bringt der ANTIC-Chip em n Bilder kann auch mit nur einer einzigen Andern Sie dort einfach die Bytes, mit der Bilddaten angegeben wird, und schon anderes Bild auf den Schirm.

Im BEISPIEL 3 werden zwei GRAPHICS-B-Bilder benutzt, die zuvor von der Diskette geladen werden. Zu diesem Zweck verfugt das Programm Uber eine entsprechende Laderoutine in Zeile 120 bis 200. Achten. Sie beim Eintippen der Zeile 120 bitte auf die korrekte Eingabe der Zeichen des Maschinenprogramm-Strings Z3$. Er enthAlt Sonderzeichen, die Sie z.B. der HZ INFOCARD 1 oder der hinteren Einbandseite des Atari BASIC Reference Manuals entnehmen konnen. Beim Durchschauen des Listings +alit Ihnen sicher auf, daB in den Zeilen 260 und 370 nicht nur der vertraute Wert DISPL+5, sondern auch noch DISPL+101 auftaucht. Dies ist auf eine Besonderheit bei der Graphikstufe 8 zurUckzufahren. Da wegen einer Hardware-BeschrAnkung hachstens 4 kByte Bildschirmdaten auf einmal geladen Werden kOnnen, setzen sich GRAPHICS-B-Bilder aus zwei Teilblacken zusammen. FUr den zweiten Block wird natilrlich auch eine separate Anfangsadresse benotigt. Diese finden Sie in der GRAPHICS-8-Display-Liste in Byte 100 (niedrigere AdreB-HAlfte) und 101 (hdhere AdreB-HAlfte). Da wir in diesem Beispiel Byte zweiten 256-Byte-weise zAhlen, brauchen wir auch fUr den Bildabschnitt nur die hohere HAlfte, also Byte 101. Alles klar? Zwischen den beiden Bildern konnen Sie mit Hilfe der START- bzw. SELECT-Taste umschalten; durch DrUcken der OPTION-Taste kann das Programm abgebrochen werden. Vergessen Sie nicht, in den Zeilen 240 und 280 die korrekten Namen der zu ladenden Bilder anzugeben. BEISPIEL 3
108 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270 280 290 300 310 328 330 340 350 360 370 380 390 400 REM PAGE-FLIPPING MIT GRAPHICS -8-BILDERN DIM 23$00),25$141,20$(20) 22=PEEK(87):IF Z2=0 THEN 22=8:23$="hhhcihnEAhnOhnlJhBHJ Vde,014:EN":GOTO 220 REM BILDLADEROUTINE 27=7688:OPEN 41 1 4,0,20$:GET U1,28:IF 28=7 THEN Z7=3840:22=7 IF 28(7 OR 208 THEN 22=8:G051J8 200:POKE 29,28:29=29+1:27=27 - 1:GOTO 170 22=28 SETCOLOR 1,1,12:5ETCOLOR 2,1,2:POKE 850,7:A010=U58(ADRU30 1 16,21 1 Z7):4010=MCADR(23$),16,708,5) SETCOLOR 1,1,12:SETCOLOR 4,1 1 2:5ETCOLOg 2,1,2 CLOSE ill:RETURN 29=PEEK(88)+PEEK(89)*256:RETURN REM PAGE-FLIP-ROUTINE GRAPHICS 8 4LT=PEEK(106) 20$="D:BILD1":G05110 140 DI5PL=PEEKt560)+PEEKi561)*256 Y=PEEK(DI5PL+5):2=PEEK(DMPL+101) POKE 106,ALT-32:POKE 89,Y-32 20$="0:8ILD2":GOSUB 140 REM FUNKTIONSTASTEN -ABFRAGE TA5TE=PEEK(53279) IF TASTE=3 THEN 390:REM OPTION=ABBRUCH IF TA5TE=5 THEN 350:REM SELECT=8IL82 IF TASTE=6 THEN 370:REM 5TART=BILD1 IF TASTE:? THEN 300 POKE DISPL .15,Y-32:POKE DISPL+181,2 - 32 GOTO 300 POKE DISPL+5,Y:POKE DISPL+101,2 GOTO 388 POKE 106,ALT:REM ALIEN ZU5TAND WIEDERHERSTELLEN END

Um Ihnen das Eintippen zu erleichtern, hier noch einmal der Maschinenprogramm-String Z3$ aus Zeile 120:
Z3S

= "1-111-0-4111-43E-Itint>

-1

1-I1ialh

el lit-1 4.14:lerV01-4:1112411"

rcJLLIE

DLJFJI1B

1LJ

Neben den vier Soundkanalen, die Uber den TV-Ton wiedergegeben werden, verfugen die Atari-400/800-Computer noch Uber eine funfte Gerauschquelle, namlich den Konsolen-Lautsprecher. Von Haus aus gibt er allerdings nur em n paar schrille -Nine von sich, z.B. am Ende einer BASIC-Zeile oder nach Eingabe von CLOAD. Im Laufe der Zeit hat es sich jedoch gezeigt, daB man dem kleinen Lautsprecher doch etwas mehr entlocken kann. Will man lediglich das Standard-Signal ertonen lassen, gibt man CONTROL-2 em. Innerhalb eines Programms schreibt man: PRINT CHR$(253). Wie der Ton reiner klingt, geht aus BEISPIEL 1 hervor. Um den Lautsprecher klicken zu lassen, schreibt man eine Null in die Adresse, unter . der man ihn erreicht: POKE 53279,0. Dieser POKE bewegt die Membran allerdings nur in eine Richtung: . um sie auch in die andere Richtung auszulenken, schreibt man eine acht in das Register 53279. Wiederholt man das Klicken schnell genug, entsteht em n Ton (siehe BEISPIEL 2). Bei abgeschaltetem Bildschirm (DMACTL, 54272) wird der Kiang rein genug, um verschieden hohe Tone erzeugen zu konnen (siehe BEISPIEL 3). Einen praktischen Anwendungsvorschlag fUr einen geanderten Konsolenlautsprecher Sound zeigt BEISPIEL 4. Probieren Sie die gezeigten Beispiele einmal aus. Sie werden erstaunt sein, was sich mit dem kleinen Lautsprecher alles machen laBt! 100 110 120 130 140 100 110 120 130 100 110 120 130 140 150 160 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 300 REM KONSOLEN-LAUTSPRECHER BEISPIEL 1 REM POKE 54286,0 FOR I=1 TO 5:? CHR$(253);:NEXT I POKE 54286,255 REM KONSOLEN-LAUTSPRECHER BEISPIEL 2 REM N=100 FOR I=0 TO N:POKE 53279,0:POKE 53279,8:NEXT REM KONSOLEN-LAUTSPRECHER BEISPIEL3 REM LS=53279 POKE 54286,128:POKE 54272,0 FOR A=10 TO 0 STEP -1:FOR 8=1 TO 20:POKE LS,8 FOR C=0 TO A:NEXT C:POKE LS,O:NEXT B:NEXT A POKE 54286,255 REM KONSOLEN-LAUTSPRECHER BEISPIEL 4 REM LS=53279:DIM TITEL$(10):POKE 752,1 SETCOLOR 2,2,4:SETCOLOR 1,0,0 ? :? CHR$(125):') "DIESE DISKETTE ENTHAELT:":? POKE 54286,128 FOR Z=1 TO 5:SETCOLOR 2,2,2*Z+2 FOR A=10 TO 0 STEP -1:FOR B=1 TO 2:POKE LS,8 FOR C=0 TO A:NEXT C:POKE LS,O:NEXT B:NEXT A FOR A=0 TO 10:FOR B=1 TO 2:POKE LS,8 FOR C=0 TO A:NEXT C:POKE LS,O;NEXT B:NEXT A POKE 54286,255 READ TITEL$: -) " ";TITEL$ NEXT Z USW.":STOP ? :? " DATA PROGRAMM A,PROGRAMM B,PROGRAMM C,PROGRAMM D,PROGRAMM E
1 Cs IL

MUMEIRIICHE ZiLilinaTZTPI

TLJIFZ

IM

Wer semen Atari hasfig mit groBen Zahlenmengen fattert, z.B. zu statistischen oder kaufmannischen Zwecken, hat sich bestimmt schon des Ofteren eine numerische Zusatztastatur gewUnscht. So emn separator Zehnerblock, auf dem die Zahlen von null bis noun zusammengefaBt sind, erleichtert die Eingabe von Zahlenkolonnen namlich ganz erheblich. Derartige Zusatze werden +Ur Atari -Computer zwar gleich von mehreren Herstellern angeboten; allerdings bewegen sich die Preise im Bereich von mehreren hundert Mark. Aber es geht auch billiger, wie der hier vorgestellte Selbstbau-Vorschlag zeigt. DarUberhinaus hat unsere Do-ItYourself-Tastatur den Vorzug, da6 man sie anwendungsspezifisch einsetzen kann. So lassen sich anstelle der Zahlen beispielsweise Funktionen wie JA, NEIN, WEITER etc. verwenden und die Tastatur entsprechend beschriften.

_I i F_.11 _1 _I q.11
7 4_3j 43 F3
F4

Abbildung 1 Was brauchen wir zum Bau unserer Zusatztastatur? An Material wird auch hier wieder einmal erfrischend wenig benotigt, und zwar: Jo nach Ausbau 12 bis 15 einpolige Taster (SchlieBer) (zum Beschriften ggf. mit transparenter abnehmbarer Kappe), eine Lotpunktraster-Platine (z.B. Veroboard), 22 Universal-Dioden (z.B. 1N4148 odor 1N914), ca. 1 m 5- odor mehrpol. Kabel mit verschiedenfarbigen Litzen, em n 9-poliger Stocker (zur Joystick-Buchse) mit Gehause, etwas Lotzinn sowie ein passendes Kunststoffgehduse (und Gummi-ft:113e dazu). in Elektronik-Shops Ubrigens Mit etwas Gluck bekommt man gebrauchte Zehnertastaturen aus Registrierkassen o.., die sich fOr unsere Zwecke verwenden lassen. An Werkzeug benotigen Sie wiederum Lotkolben, Zangen etc.

Taster

22x 1N4148 f4

Zr. :131 00
-0 0

1 2 3 4 5 6789 JoystickBuchse

B -11-- 1 I

E2I
,11 . 1

1111

111

=I 6 -0 0-7

immusi 111

Farbring!

1111110

U=I

-14

pi
DIODE

-0

0--

4321
Abbildung 2

Praktischer Aufbau. Sie Ihre beginnen, sollten Bevor Sie mit dem Laten 1) Punktrasterplatine so zurechtsagen (notfalls brechen), da8 sie in das Gehause paBt. Am Besten bohren Sie auch schon die Befestigungslocher hinein. 2) Ordnen Sie die Taster Ihren WUnschen entsprechend an, z.B. wie in Abbildung 1 gezeigt. Je nachdem, was fUr eine Type Sie bekommen haben, werden die Taster auf die Platine gesteckt und verletet; oder Sie haben welche gekauft, die direkt in die Gehauseoberseite werden (Zentrallochbefestigung). Dann kiinnten Sie montiert gegebenenfalls auf die Platine verzichten. In jedem Fall sollten Sie an Ihrem Gehause jetzt mit Hilfe von Bohr-em n und Feile die Durchbruche -fur die Taster und das Verbindungskabel ausarbeiten. 3) Wie in Abbildung 2 gezeigt, werden jetzt alle Taster mit je einem ihrer AnschlUsse untereinander verbunden. Hier wird auch die Masse-Leitung des Verbindungskabels angeschlossen (Stift 8 am SteuerknUppel-Stecker).

4) Nehmen Sie an den noch freien TasteranschlUssen die aus dem Schaltplan ersichtlichen Dioden-Verbindungen var. Achten Sie dabei unbedingt auf die richtige Polaritat und erhitzen Sie die AnschuBdrahte der Dioden nicht zu lange. 5) Die Numerierung der vier Leitungen entspricht den AnschluB-Stiften des Steuerknuppel-Steckers. Verbinden Sie also die Litzen am einen Ende mit der Tastatur und am anderen Ende mit dem Stecker. Vor dem Anloten des Steckers sollten Sie Obrigens nicht vergessen, das dazugehdrige Gehause auf das Kabel zu schieben! 6) Vergewissern Sie sich noch einmal, daB Sie alle KabelanschlUsse und die zahlreichen Diodenverbindungen korrekt durchgefuhrt haben. Nun brauchen Sie die Tastatur nur noch in das Gel-Ause einzubauen. Fur das Verbindungskabel sollten Sie Ubrigens unbedingt eine Zugentlastung vorsehen (z.B. eine Kabelschelle). In der SteuerknUppel - Buchse sind aueerdem noch drei weitere Anschlusse vorhanden (2xPOT, ly.STRIG). Auch diese Leitungen lassen sich in die Tastatur mit einbeziehen. Ein zusatzlich an die STRIG-Leitung angeschlossener Taster kann z.B. als eine Art 'SHIFT-Taste dienen und die Zahl der Eingabemoglichkeiten verdoppeln. Desweiteren laBt sich die Zahl der an die vier STICK-Leitungen angeschlossenen Taster um drei weitere erheihen, indem man das hier benutzte Dioden-Verfahren konsequent beibehalt (wer genau hinsieht, erkennt in der Verdrahtung das binare Zahlenschema: 0001, 0010 usw.). Sie sollten sich also vor dem Aufbau der Tastatur ilberlegen, ob Sie evtl mehr als 12 Tasten benotigen.

Die Abf rage der Zusatz-Tastatur Da es, wie eingangs erwahnt, vollkommen offen ist, ob Sie die Zahleneingabe verwenden oder sie irgendeinerTastatur zur Sonderaufgabe widmen, finden Sie hier keine spezielle Abfrage-Software. Allerdings ist em n derartiges Programm schnell geschrieben: SchlieBlich verhalt sich die Tastatur ja wie emn SteuerknUppel. Die Diodeh sorgen lediglich dafar, daB wir fur jeden moglichen Wert eine separate Taste zur . Verfugung haben (jeder Tastendruck fuhrt zu einem bestimmten 4-Bit-Wort). In einem Steuerknuppel tritt dieses Problem nicht auf, da bei Biegung in diagonale Richtungen jeweils zwei Kontakte gleichzeitig geschlossen werden. SchlieBen Sie die Tastatur z.B. an Buchse 0 an. Zur Abfrage konnen Sie dann entweder die Funktion STICK(0) odor PEEK(632) verwenden. 1st keine Taste gedruckt, ergibt die Abf rage den Wert 15. Druckt ergibt 13 usw. Es ist man Taste 1, ergibt dies den Wert 14, 2 daher auBerst einfach, die Tastatur-Abf rage in BASIC zu programmieren. Solite dies einmal nicht ausreichen, kann man dafur auch eine kleine Assemblerroutine vorsehen. Besonders elegant und unabhangig vom BASIC-Programm geht dies im Vertical Blank Interrupt (VBI). Ein Beispiel dafur, wie man eine VBI-Routine installiert, finden Sie im Kapitel "Schlilsselabfrage' auf Seite 50 ff. Gegebenenfalls lieBe sich auch em n spezieller Handler fur die Zusatztastatur installieren (z.B. "T:").

E r r-k

ILA

Fe: LP

r-k

'Y'

--

r-

ri

Das BemUhen eines jeden Programmierers sollte es .sein, seine Programme mdglichst bedienungssicher zu gestalten, damit auch Computer-Laien ihre ungetrubte Freude daran. haben. Bestimmt ist Ihnen der Befehl POKE 580,1 gelaufig. An den Anfang eines Programms gestellt, bewirkt er beim Drucken der SYSTEM-RESET-Taste em n neues Laden der Diskette. Zwar ist es lobenswert, daB Atari diese Moglichkeit im Betriebssystem vorgesehen hat; oft ist diese Methode durch den Ladevorgang zu zeitraubend. AuBerdem ist es erforderlich, daB die Diskette im Laufwerk verbleibt. Hier nun eine kleine Routine, Uber die sich auch die CASSETTEN-Benutzer freuen darften. Die fun+ Zeilen sollten die ersten in Ihrem BASIC-Programm sein. Bei Beginn der ProgrammausfUhrung wird eine kleine . Maschinen-Routine installiert, deren Startadresse in den DOSINI-Vektor geschrieben wird (siehe Memory Map in der FUNDGRUBE). Dadurch fuhrt des Drucken auf die SYSTEM-RESET-Taste bequemerweise durch einen automatisch erzeugten RUN-Befehl. zum

neuen Start ihres Programms.


0 REM ERNEUTES 'RUN' BEI <RESET> '!! 1 DATA 169,148,141,197,2,169,125,32,164,246,169,2033,84,169,0,169,82,32,164,246,169,85,32,164 2 DATA 246,169,78,32,164,246,169,28,32,164,246,169,28,32,164,246,169,13,141,74,3,76,0,160 3 RESTORE 1:FOR Am0 TO 48:READ B:POKE 1536+A,B:NEXT A 4 POKE 12,0:POKE 13,6:POKE 842,12:GRAPHICS 0 10? "DRUECKEN SIE BITE <RESETW:GOTO 10

E3 LJ r-k -It 10 20 30 40 50

C3e2,. inn 1 >c 1= ee, .s5.

2:

LA irk

4=

1-1 1 -I13

REM TAB-DEMO FOR TAB=3 TO 18 POKE 201 TAB ? 1,2,3 NEXT TAB

10 REM SCHUTZ-DEMO

20 30 40 50

POKE 202,1 ? "BITTE DRUECKEN SIE <RESET>" ? "UND LISTEN SIE DANN IHR PROGRAM", ? "(UEBERRASCHUNG!)"

10 20 30 40

REM TEXTFENSTER IN GR.0 GRAPHICS 0:POI<E 703,4:POPE 752,1 ? #6;"TExTFENSTER IN GRAPHICS 0" ? "DEMO ";:00TO 40

10 20 70 40

REM DER TOTAL VERRUECKTE BILDSCHIRM REM SCREEN-DEMO POPE 755,4:POKE 559,47 FOR I=1 TO 50:' "12745678 9 0";:NEXT I

Ubrigens... Falls Sie keine deutsche Memory Map und keine ausfuhrlichen Erklarungen der Fehlermeldungs-Nummern (natUrlich ebenfalls in deutsch) haben und nicht wissen, wie man die SteuerknUppel-Buchsen programmiert, oder wie em n ROM-Modul aufgebaut ist, oder wenn Ihnen noch em n pear Tips und Tricks fehlen, dann gehoren Sie hochstwahrscheinlich zu jener bedauernswerten Minderheit, der durch den Kauf des Ruches DIE FUNDGRUBE (selber Autor, selber empf. Preis) geholfen werden kann!
CD M

LA C.:

Ul

ES EA

.0 17_ I 1-1 r

wie Sie eine 'echte' Reset-Taste in Ihren Atari 400/800 einbauen. welche bisher kaum bekannten Sound -Moglichkeiten in Ihrem Computer stecken. wie Sie Musik und andere Dinge im Vertikal-BlankInterrupt laufen lassen - unabhangig von BASIC! wie Sie Ihre Software wirkungsvoll schUtzen, zum Beispiel mit einem Hardware-SchlUssel. wie Sie Maschinenprogramme in Strings umwandeln. wie Sie S.A.M. (tm Don't Ask) deutsch sprechen lassen. wie Sie S.A.M. bei eingeschaltetem Bildschirm-DMA
verzerrungsfrei sprechen und singen lassen.

... mit welchen einfachen Mitteln Sie eine preiswerte

numerische Zusatztastatur selbstbauen kiinnen. welche Updates und Tricks es fur den ABC-BASIC-COMPILER (tm Monarch) gibt. wie Sie fUr wenig Geld einen Schnellfeuer-Zusatz fUr lhren Steuerknappel bauen. wie bie mRbiu-meloalen mit massbegieitung schreii wie Sie mit Ihren BASIC-Programmen Bilder in GRAPHICS 7+ und GRAPHICS 8 laden. noch viel, viel mehr!

LAS

-iF

r-

3.

ra

ft-%

c:f

.9

(A) TIPPEN SIE GERNE LISTINGS EIN ? Dann ist DIE TRICK-KISTE genau das Richtige ft:1r Sie, denn sie enthalt jede Menge Hilfsprogramme (Utilities), Programmbeispiele und Anwendungen, die nur darauf warten, yon Ihnen eingegeben zu werden! (B) TIPPEN SIE NUR UNGERN LISTINGS EIN ? Dann brauchen Sie auBer der TRICK-KISTE unbedingt auch noch die Sie enthalt alle in der TRICK-KISTE TK-PROGRAMMDISKETTE. abgedruckten BASIC- und Assemblerprogramme, letztere nicht nur als auch ,als lauffahige assemblierte sondern Quelltexte, Maschinenprogramme (insgesamt mehr als 40 Files). Sparen Sie Zeit und Nerven! Die TK-Programmdiskette bekommen Sie Uberall dort, wo es auch die TRICK-KISTE gibt, und zwar zum selben empfohlenen Preis wie dieses Buch. Achtung! Lassen Sie sich keine Raubkopie andrehen! Die TK-PROGRAMMDISKETTE ist nur echt mit dem Namenszug des Autors H. Zoschke auf der Diskettenruckseite!

Das könnte Ihnen auch gefallen