Transcript

T1

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

wimmumum immummsUMUSISSWMIUMMOWWWWWWWSWIWWWWWWWW .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

-

1

4f-----,

-moligi

fille

mu

: -_ - .---

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

1------

---

'

0 -

it .:

,,

MNIN WWII UWE UMWWIN

Iv

w NUM MAME

"

--'ii mo. m um m. mom aMEW M WOW slim Nail : : gi

1

-

11

-- .-m 11

MUM MOW ...Ez

Wirm

:::MO --m

KisT

Plia

lb.

4 a row, milms =awal _

41116:---4

PAW'r111.11111M

A 0 ell1 ,4 0 ' . 0 't

mummimmormilmammommommom mmwmmwsmmmwmmrmmmms :rnilim immwm immilm imilm mime umMUM

I

Programme

31s11

ss

1

ALLEMDIE

^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 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 TinrInt 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 A103ACD4050

R156 470k I R155 100kC198 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 800Atari-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) OGummifUsseAbbildung 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.Ei...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

I10

10k RUM I

1

R

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

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

N

f

...oar

N....

c== 7 1) ..._

-Hier wird

Tastatur.s, I Steckverbinder -AflutterliSsen -- Platine unsere Litze herausgefUhrtAbbildung 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-

A

,R

j

'

-

/

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 003.747'

..

.om .T

)" .."--

r:117:17 /iUnser 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 400Nun 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

um1M 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-Schaltungim 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

A

0

=LT.

74 :4

H

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.

s

Hintere LUftungs,Hier wird das schlitze des / Taster-Kabel GehSuseoberteils / herausgefuhrt./1 11111 III iiiiii I 110

-

P00

MetallAbdeckplatte

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

17

" Tastatur Lautsprecher

.

-

4=5CHPAUBEN (herausdrehen!)

Tastatur - FlachkabelAbbildung

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-BuchsenAbbildung 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..-

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.

0

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

4

6 5

4

3 2 1 0 VOLUME CLautstUrke3

i

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,16In 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 98 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 werdenbenotigt, 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 5al

>

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.

6

i

7

I

1I

5

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 eineTabelle, 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 I1 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 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. Das1E1

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

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 ERIIE

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 14ST2mMloSe

S -tiMMhafte

B D GV 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( ankommenHMG

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 ZP

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

K

Clan

V

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 EIt1: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 Unterprogrammenangesprungen, 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 farblichverAndern 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

N

N

111111111111101111111131111111111111111111111 13C11:10DIN111111- 11111111181:11111111111311111111111111111116I 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

M

rii

IN4 C3 (1., VAina

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...

I

!

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 . 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 denDaten 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-CodeWELCHE 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 dieAusgabe 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


Recommended