2 - Bit - Digitizer

Mit dieser Hardware ist es möglich ohne großen Aufwand Sprache und Musik am C64 zu digitalisieren.

Die Schaltung und das Steuerprogramm stammen aus einem 64'er Heft. Da man kaum noch an die entsprechenden Hefte herankommt um sich interessante Schaltungen nachbauen zu können, habe ich beschlossen einige, in meinen Augen, interessante Sachen zu überarbeiten und in den Hardwarebereich zu setzen. Wenn irgendjemand damit Probleme hat schickt uns eine Mail und wir werden es von der Seite entfernen.


diese Seite beinhaltet:

Platinenlayout 

Platinenlayout für Digitizer

Das hier abgebildete Platinenlayout wurde mit Autotrax erstellt, die entsprechende Datei zu diesem Layout kann man hier: . ZIP-Datei mit Autotrax-Layout downloaden. Näheres zu Autotrax und Download findest Du auf der Hardware-Hauptseite.


Bestückungsplan


Bestückungsplan für Digitizer


Bauanleitung

Zuerst solltet Ihr die Drahtbrücken einlöten. Danach die Widerstände und den Trimmer. Als nächstes die Kondensatoren wobei bei den Tantal-Perlen auf die richtige Polung zu achten ist. Jetzt sind die ICs an der Reihe. Hierbei ist zu beachten, dass die Kerben auf der richtigen Seite sind. Nicht zu lange an den Beinchen "rumbraten", sonst sind die ICs gar. Nun steckt Ihr die 9pol. SUB-D-Buchse mittig auf die Stirnseite der Platine, so dass fünf Anschlüsse auf der Bestückungsseite und die anderen vier auf der Lötseite sind. Pin 7+8 werden mit den Leiterbahnen verlötet. Die Pins 1+2 werden mit einer Drahtbrücke an die jeweils gegenüber liegenden Lötaugen (Löcher links neben R1) verbunden. Die restlichen Pins auf der Lötseite können zur Stabilisierung verlötet werden. Aber Vorsicht, dass die Pins 6+9 nicht auf die Leiterbahnen von den Pins 7+8 mit drauf kommen. Um sicher zu gehen verkürzt Ihr die Pins 6+9 etwas. Zum Schluss schraubt Ihr die Chinch-Buchse in dem Loch fest und verlötet den Masse-Kontakt. Auch hier nicht zu lange dran "rumbraten", sonst verformt sich von dem Ding der Kunststoffanteil und Ihr bekommt keinen Stecker mehr hinein. Der innere Anschluss wird mit einer Drahtbrücke an das freie Beinchen des Kondensators C3 verbunden. Um die Sub-D-Buchse weiter zu stabilisieren könnt Ihr sie auf der Bestückungsseite mit Heißkleber fest kleben.


Bedienungsanleitung

Töne sind Dichteänderungen in der Luft mit einer Frequenz zwischen zum Beispiel 20 und 15000 Hertz. Damit Computer überhaupt mit Tönen arbeiten können, ist es notwendig, diese Dichteänderungen in eine für das Gerät meßbare Größe umzusetzen. Diese Aufgabe übernimmt etwa ein Mikrofon, indem es Dichteschwankungen in entsprechende Spannungsschwankungen umsetzt. Ein Digitalisierer hat jetzt die Aufgabe, das analoge, unendlich fein gestufte Signal in ein digitales, endlich fein gestuftes Signal umzusetzen. Je größer die Auflösung des Digitalisierers ist, desto feiner sind diese Stufen, desto besser ist also die Qualität bei einer späteren Wiedergabe. Leider ist der Speicherplatzverbrauch aber auch um so höher. Wir glauben, mit einer Auflösung von zwei Bit, also vier Werten, den besten Kompromiß zwischen Speicherkapazität des Computers und Widerstandsfähigkeit der Ohren gefunden zu haben.

Der Speech-Basic-Digitalisierer ist an den Kopfhörerausgang eines Diktiergerätes, eines Walkman®s , eines Radiorecorders oder einer Stereoanlage anzuschließen. Das analoge Signal wird vom Digitalisierer in einer Kette von drei Operationsverstärkern in vier Werte aufgeteilt. Der nachgeschaltete, invertierende Trigger sorgt dann für saubere und definierte Pegel. Im letzten IC werden die drei Signale noch zu zwei Bit zusammengefasst, wobei folgende Zuordnungstabelle Anwendung findet:

111 wird zu 00 = Wert 1
110 wird zu 01 = Wert 2
100 wird zu 10 = Wert 3
000 wird zu 11 = Wert 4

Die Schaltung führt diese zwei Bit jetzt zum Joystick-Port 2 als Joystick UP und Joystick DOWN. Dort werden diese beiden Bit dann bis zu 18000 mal pro Sekunde gelesen und zu je vier in einem Byte abgespeichert. Die spätere Wiedergabe erfolgt über das Lautstärkeregister $D418 des Soundchips, dafür ist die Schaltung also nicht notwendig. Dabei kann jeder der vier Digitalisierungsstufen eine beliebige Lautstärkestufe zugeordnet werden. Durch dynamische Änderung dieser Zuordnungstabelle sind dann die oben erwähnten Echo- und Halleffekte möglich.


Das erste Mal


Bevor die erste Aufnahme gemacht werden kann, sollte die Hardware einem Funktionstest und einem Abgleich unterzogen werden. Dazu ist die Basic-Erweiterung »Speech-Basic« (Listing 1, bitte mit dem MSE eingeben) und ein C 64 oder C 128 und ein Schraubendreher nötig.

Schalten Sie Ihren Computer aus und stecken Sie den Digitalisierer in den Joystick-Port 2, jedoch noch nicht an eine Tonquelle. Schalten Sie das Gerät wieder ein. Reagieren noch alle Tasten? Sehr gut! Dann haben Sie schon einmal keine groben Fehler beim Aufbau der Schaltung gemacht. Laden Sie jetzt das Programm Speech-Basic mit

LOAD "SPEECH-BASIC", 8

und starten Sie es mit RUN . Der Computer sollte sich sofort mit der Meldung C64 SPEECH SYSTEM V2:7 zurückmelden. Speech-Basic meldet sich immer im Kleinschriftmodus, Sollte dies einmal nicht der Fall sein (besonders nach <RUN­STOP + RESTORE>), kann durch den Befehl RESET eine Neuinitialisierung ohne Programmverlust durchgeführt werden. Da einige Cornmodore-Computer eine stark prellende RESTORE-Taste besitzen, kann es sein, daß der Restore mittendrin wieder abgebrochen wird, RESET bringt den Computer wieder in einen definierten Zustand.

Ordnen Sie jetzt den vier Digitalisierungsstufen mit dem Befehl COLDEF 0,11,12,15 vier gut unterscheidbare Farben zu (in diesem Beispiel vier Grautöne). Wenn Sie jetzt den Befehl HEAR SPEED 1 eingeben, gelangen Sie in den Mithörmodus. Der Bildschirm sollte abgeschaltet sein (wie beim Kassettenbetrieb) und eine der vier definierten Farben zeigen. Wenn Sie das Potentiometer auf der Platine vom ganz linken Anschlag bis an den ganz rechten Anschlag drehen, sollte der Bildschirm nacheinander die vier definierten Farben in der
Reihenfolge der Definition annehmen. Ist dies der Fall, geht die Schaltung einwandfrei.

Zum Abgleich drehen Sie das Potentiometer ganz und gefühlvoll wieder nach rechts, wobei Sie das Bild im Auge behalten sollten. Wenn die Bildschirmfarbe von Farbe 3 auf Farbe 2 (im Beispiel von mittelgrau auf dunkelgrau) umspringt, ist die Schaltung richtig eingestellt. Sie kann jetzt negative Auslenkungen ungefähr genauso gut umsetzen wie positive.

Achten Sie jedoch darauf, daß Sie Ihren Digitalisierer genau auf den Umschaltpunkt zwischen Stufe 2 und 3 einstellen. Der Bildschirm darf also nicht von selbst zwischen dunkel- und mittelgrau hin- und herspringen. Sonst bekommen Sie später bei der Aufnahme ein störendes Rauschen an leisen Stellen. Den Mithörmodus beenden Sie durch Drücken der Leertaste.


Einlesen von Ton


Speech-Basic selbst belegt den Speicherbereich von $0800 (2048) bis $1800 (6144). Daran schließt sich direkt der Speicherbereich für Basic-Programme und Variablen an. Dessen obere Grenze heißt HIMEM und liegt normalerweise bei $A000 (40960), kann jedoch mit dem gleichnamigen Befehl innerhalb sinnvoller Bereiche verändert werden. Der Speicherbereich für akustische Signale erstreckt sich dann von HIMEM bis (fast) zum physikalischen Ende des Speichers. Durch Verändern von HIMEM kann man also den Speicher zwischen Basic-Programm und Ton aufteilen. Für das Arbeiten im Direktmodus hat es sich als sinnvoll erwiesen den Tonspeicher so groß wie möglich zu machen. Mit dem Befehl HIMEM $1A00 reserviert man sich zirka 57,5 Kilobytes für den Tonspeicher. Für das Basic-Steuerprogramm stehen noch 512 Byte zur Verfügung. Sollte Ihnen die aktuelle Speicheraufteilung im Moment entfallen sein, können Sie sich diese durch den Befehl MEM auf den Bildschirm holen. Weiterhin sollten für die Aufnahme die Zuordnungstabellen der Farbwerte und der Lautstärkewerte sinnvoll belegt sein. Dies geschieht mit den Befehlen COLDEF 0,11,12,15 und VOLDEF 0,5,10,15. Sie können selbstverständlich auch eigene Werte einsetzen. Spulen Sie jetzt die Musikkassette an die gewünschte Stelle und drehen Sie die Lautstärke und die Bässe ganz auf null herunter. Der Digitalisierer muß für die Aufnahme natürlich sowohl an den Computer als auch an den Verstärker angeschlossen sein.

Geben Sie HEAR:RECORD SPEED 1 .(Funktionstaste 4) ein. Der Computer befindet sich jetzt wieder im Mithörmodus, diesmal ist es jedoch ernst! Starten Sie den Musikrecorder und drehen Sie die Lautstärke langsam höher. Achten Sie auf den Klang und auf die Verteilung der Streifen auf dem Bildschirm. Sie werden feststellen, daß der Klang meistens dann am besten ist, wenn alle vier Farben ungefähr gleich stark auf dem Bildschirm vertreten sind. Spielen Sie jetzt ein wenig mit dem Baßregler. Sie werden feststellen, daß zu starke Baßimpulse den Klang »zudecken«. Finden Sie die richtige Einstellung für den Baßregler und merken sich diese. Wenn Sie glauben, daß die Aussteuerung für dieses Stück optimal ist, spulen Sie den Musikrecorder zurück und starten Sie erneut. Sobald Sie die Leertaste drücken, beginnt Speech-Basic damit, die gelesenen Werte auch in den Speicher zu übertragen. Nach ungefähr 14 Sekunden ist der Speicher voll und der Computer meldet sich wieder; Sie könnnen die Aufnahme (und genauso die Wiedergabe) jedoch jederzeit mit Druck auf <RESTORE> (ohne <RUN/STOP>) abbrechen. Wenn Sie dabei im Direktmodus waren, bekommen Sie sogar noch die Abbruchadresse angezeigt.

Wollen Sie nicht den gesamten Speicher füllen, können Sie beim RECORD-Befehl auch einen Adreßbereich mit angeben. Die vollständige Syntax für RECORD lautet RECORD FROM anf TO end SPEED x

mit anf und end größer HIMEM und x größer 0. Die Wiedergabe von akustischen Signalen geschieht mit dem PLAY-Befehl (Funktionstaste 3), dessen Syntax der von RECORD entspricht. Mehr darüber später.



Diskettenoperationen


Da Speech-Basic gerade den RAM-Bereich unter den beiden ROMs besonders intensiv nutzt, mußten die LOAD- und SAVE-Routinen neu geschrieben werden. Die neuen Befehle heißen BLOAD und BSAVE und speichern immer den RAM-Inhalt ab. Beide Befehle arbeiten nur mit Diskettenstationen zusammen, da es ziemlich unsinnig wäre, 60 KByte auf Band speichern zu wollen. Um den gesamten Tonspeicher auf Diskette zu speichern, genügt es, »BSAVE "name" « anzugeben. Die vollständige Syntax lautet hier jedoch

BSAVE "name",dv FROM anf TO end.

Die Parameter können von hinten nach vorne weggelassen werden. Die Syntax des BLOAD-Befehles ist mit der von BSAVE identisch. Hier gibt anf die Adresse an, an die die Daten geladen werden sollen. Fehlt sie, Werden die Daten an die Originaladresse, von der sie gespeichert wurden, geladen. Der Wert end gibt einen Maximalwert an, der nicht überschritten wird. Ist die Datei länger als end, werden die überstehenden Bytes ignoriert. Dadurch ist eine vollständige Kontrolle des Ladevorganges möglich. Weiterhin unterstützt Speech-Basic die Diskettenbefehle DISK und DIR zum Senden von Diskettenbefehlen und zur Anzeige des Inhaltsverzeichnisses der Diskette. Die Syntax dieser Befehle entnehmen Sie bitte der tabellarischen Befehlsübersicht.



Das Isolieren von Worten - Die Blocktabelle



Es ist relativ einfach mit Speech-Basic einzelne Worte, Sätze oder andere Tonteile zu finden und zu isolieren. Dazu sollte man den betreffenden Speicherbereich zweimal mit PLAY abspielen und je einmal vor und hinter dem gewünschten Wort oder Satz die <RESTORE >-Taste bemühen. Dann hat man schon ungefähr die Anfangs- und Endadresse des Speicherblockes mit dem betreffenden Wort, Jetzt kann man sich diesen Bereich mit 

FROM anf TO end

anhören, die Grenzen noch ein wenig verschieben, sinnvollerweise seitenweise (also in 256-Byte-Schritten), bis man das Wort genau hat. Es ist aber sehr umständlich, die so gefundenen, mitunter recht »krummen« Zahlenwerte jedesmal wieder neu einzugeben, Viel sinnvoller ist es, diese Adressen in einem BLOCK zu hinterlegen und sich fortan nur noch auf diesen BLOCK zu beziehen. Ein sogenannter BLOCK wird mit dem gleichnamigen Befehl definiert. Die Syntax lautet

BLOCK x (FROM anf (TO end)) (str)

wobei anf und end die schon bekannten Anfangs- und Endadressen sind; str ist ein beliebiger, maximal acht Zeichen langer Kurzkommentar. Die Blocknummer x kann sich zwischen 1 und 31 bewegen. Dabei ist der Block Nummer 30 mit dem Adreßbereich der Funktionstastenbelegung vorgegeben, so daß diese leicht gespeichert werden kann. Block Nummer 31 enthält die Blocktabelle selbst, damit sich auch diese speichern läßt. Der Block Nummer 0 kann, obwohl er existiert, nicht definiert werden. Er stellt immer die Anfangs- und Endadresse des letzten BLOAD-Befehles zur Verfügung.

Immer und überall, wo man eine Anfangs- und Endadresse im Format FROM anf TO end angeben darf, kann man statt dessen auch einen Block im Format BLOCK x angeben.

Speech-Basic setzt dann die Anfangs- und Endadresse des Blocks ein. Dies ist der Fall bei den Befehlen PLAY, RECORD, BLOAD, BSAVE, MON und beim BLOCK-Befehl selbst. So ist zum Beispiel folgende Zeile möglich:

BLOCK 1 BLOCK 0 "Guten Tag"

um die Anfangs- und Endadressen der soeben geladenen Worte »Guten Tag« zu retten und so den Block 0 für den nächsten Ladevorgang frei zu machen. Genauso ist die Konstruktion

BSAVE "f-tasten",8 BLOCK 30

syntaktisch einwandfrei. Das Löschen der Blocktabelle geschieht mit der Schleife

FOR x=1 TO 29:BLOCK x "":NEXT x

Da sowohl die Anfangs- als auch die Endadresse fehlen werden automatisch die kleinste (HIMEM) und die größte ($FFF8) verfügbare Adresse eingesetzt.

Ansehen kann man sich die Blocktabelle jederzeit mit MAP x-y. Die Syntax ist dieselbe wie bei LIST, also etwa MAP 10, MAP -10 und so weiter. Das Wort BLOCK liegt im übrigen auf der Funktionstaste 6; wenn man sich die gesamte Blocktabelle ansehen will, genügt ein Druck auf <F6> und <RETURN>, denn BLOCK ohne alle Parameter entspricht dem Befehl MAP 0-31. Dadurch wird verhindert, daß man einen Block unbeabsichtigt löscht.



Spezialeffekte - als Programm und als Makro



Hat man erst mal einzelne Worte isoliert, ist es ein leichte Spezialeffekte zu programmieren - und das ist, das einzig wozu man den Programmodus noch braucht. Alle anderen Arbeiten erledigt man besser im Dialog. Der einfachste Effekt ist der Rap- oder Breakeffekt, also das mehrmalige Wiederholen von Worten oder Silben. Man definiert sich einfach das zu wiederholende Wort (2), den Satzteil davor (1) und den Teil dahinter (3) als Blöcke. Dann läßt man das Ganze im einfachsten Fall in der Reihenfolge 1,2,2,3 vorsprechen (Listing 2). Dabei kann dann noch die Geschwindigkeit der Wiedergabe verändert werden (»scratching«, Listing 3).

Definiert man das, Ende (das heißt die letzte Silbe) eines Satzes als Block und wiederholt ihn am Ende mehrmals mit geringer werdender Lautstärke, erzielt man, einen Echo- oder Halleffekt (Listing 4). Dabei wird schnell ein Nachteil deutlich: immer wenn ein Befehl beendet ist, blitzt der Bildschirm kurz auf. Außerdem gibt es jedesmal eine kurze, aber hörbare Unterbrechung im Tonablauf eines solchen Jingles. Abhilfe schafft hier der EXEC-Befehl. EXEC kennt nur einen Parameter, einen Kommandostring, der beliebig viele Buchstaben-Befehle enthalten kann. Das Programm

10 PLAY BLOCK 1 SFEED 1-
20 PLAY BLOCK 2:PLAY BLOCK 2 
30 PLAY BLOCK 3

läßt sich so zu

EXEC "s1plp2p2p3@"EXEC

zusammenfassen. Dabei wird der String wesentlich schneller abgearbeitet ‘als ‘das Programm, außerdem bleibt der Bildschirm bis zur vollständigen Abarbeitung des Strings abgeschaltet.

Sie wissen jetzt, wie man mit Speech-Basic arbeitet und was man mit Speech-Basic erreichen kann. Sie sollten trotzdem die folgende formale (und daher etwas trockene) Befehlsbeschreibung lesen oder zumindest überfliegen. Zum einen finden Sie dort noch weitere Befehle erklärt, die bisher nicht verwendet worden sind, zum anderen entdecken Sie dort noch viele wichtige Hinweise, wo Fehler zu suchen sind.


Befehlsliste nach Sachgruppen


Die Befehle in dieser Liste sind nach Sachgruppen geordnet. In der Befehlsbeschreibung bedeuten Großbuchstaben Befehlsworte, Kleinbuchstaben Parameter. Klammern dürfen nicht mit eingegeben werden, sondern geben Parameter an, die weggelassen werden dürfen. »Str« ist, soweit nicht anders angegeben, ein beliebiger Stringausdruck. Block ist ein Speicherblock im Format FROM anf TO end oder anf, end oder BLOCK x. A ist ein Zweibyte-Integerwert (Adresse). N ist ein »Einbyte-Integerwert. dv bezeichnet eine Gerätenummer (device number).

Alle Diskettenbefehle benutzen die logische Filenummer 127 zur Datenübertragung. Dieser Kanal wird durch <RUN/ STOP + RESTORE> mit CLOSE geschlossen. Sie sollten diese Filenummer in Ihren Programmen nicht benutzen.

Das Listing kann jederzeit mit <SHIFT> angehalten werden.

Es ist überall die Benutzung von Hex- und Binärzahlen mögllich (PRINT $A000, x=$FCE2 * %OllOll). Hexzahlen werden durch ein vorangestelltes »$« gekennzeichnet, Binärzahlen durch ein »%«. Eine Hexzahl, die die Folge »DEF« enthält, muß »DEF« geschrieben werden, da die Umwandlungsroutine des Betriebssystems sonst ein DEF-Token (vom DEF .FN - Befehl) einsetzt. Andernfalls kommt es zu einer Fehlermeldung.

In IF. .THEN-Konstruktionen muß nach dem THEN ein Doppelpunkt stehen, wenn neue definierte Befehle folgen. Sonst kommt es zu einem SYNTAX ERROR, obwohl der Befehl richtig wäre.



a) Grundbefehle zur Steuerung der Erweiterung



RESET - löscht den Soundchip, den Videocontroller und die CIAs. Außerdem wird die Vektortabelle des Kernels (ab $0390) neu belegt. RESET sollte der erste Befehl in jedem Programm sein.

BASIC - Abschalten von Speech-Basic. Im Direktmodus bekommen Sie zunächst die Frage »are you sure‘?« gestellt, die Sie mit »Y« beantworten müssen, damit der Befehl ausgeführt wird. Im, Programmodus geht das System davon aus, daß die Abschaltung gewollt ist, die Sicherheitsabfrage entfällt also. Basic setzt LOMEM nicht wieder auf $0800 und hält ein laufendes Programm nicht an. Lediglich die zusätzlichen Befehle werden abgeschaltet.

HELP -. zeigt eine Tabelle der Speech-Basic Befehlsto­kens. HELP* zeigt eine Tabelle der Basic V2-Tokens.



b) Utilities und Diskettenbefehle



KEY (n,str) - Funktionstasten belegen. KEY zeigt eine editierfähige Liste der Funktionstastenbelegung an. Das Zeichen »-« kann nicht auf eine Funktionstaste gelegt werden, es repräsentiert ein RETURN ($OD). Es können maximal 15 Zeichen auf eine Funktionstaste gelegt werden. Die Tasten sind mit folgenden Werten vorbelegt:

<Fl> RUN

<F2> LIST

<F3> PLAY

<F4> HEAR:RECORD

<F5> HELP/DISPLAY KEYS

<F6> BLOCK

<F7> DIRECTORY

<F8> DISK-STATUS

Die Taste <F5> sollte nach einer gewissen Einarbeitungszeit mit »SPEED« umbelegt werden. Die neue Version von Speech-Basic kann dann mit

BSAVE "SPEECH-BASIC",8 FROM $0801 T0 $1800

gespeichert werden.

MEM - gibt einen Überblick über die aktuelle Speicherverteilung, etwa in folgender Form:

BASIC: $1801 to $1803 - Länge des aktuellen Programmes

SOUND: $a000 to $fff8 - der Tonspeicher

KEYS: $0c6f to $0cef - Lage der Funktionstasten

BLOCKS: $165b to $l7db - Lage der Blocktabelle

DISK (str(,dv)) - Kommandokanal bearbeiten. DISK ohne Parameter liest den Kommandokanal der Diskettenstation aus und zeigt ihn auf dem Bildschirm an. Übergibt man einen Kommandostring, so wird der Fehlerstatus nicht ausgelesen, damit er einer Abfrage mit INPUT # und der entsprechenden Behandlung im Programm zur Verfügung steht.

DIR (str(,dv)) - Inhaltsverzeichnis anzeigen. DIR ohne Parameter gibt das Diskettendirectory »$« aus. Str kann eine der üblichen Suchmasken sein (»$:s* = p«)

BLOAD "name "(,dv) (block) - Die Programmdatei name wird vom Gerät dv geladen. Ist ein Block angegeben, wird die Programmdatei an die Adresse anf geladen, ansonsten übernimmt das Programm die Ladeadresse der Datei. Der Ladevorgang wird bei Erreichen der Adresse end abgebrochen. BLOAD wird wie ein normaler Basic-Befehl abgearbeitet, das laufende Programm startet nicht neu wie bei einem normalen LOAD. Die Anfangs- und die Endadresse des geladenen Programmes wird im BLOCK 0 übergeben. BLOAD lädt immer ins RAM, auch im Bereich $D000 bis $DFFF (Wert $34 in Speicherstelle 1).

Beispiele:

BLOAD "s.test"

BLOAD "s.test",8 FROM $A000 

BLOAD "s.test",8,$A000,$B000

BLOAD "b.test",8 BLOCK 31:REM blocktabelle laden

BSAVE "name" (,dv) (block)
- Der Block block wird in der Datei name auf dem Gerät dv gespeichert. Es wird empfohlen, Tondateien durch ein vorangestelltes »s.« oder »snd.« zu kennzeichnen. Für Blocktabellen sollte man »b.« oder »blk.« anhängen. Auf diese Kennzeichnung folgt der Name des Lade- und Vorführprogramms.

Beispiele:

BSAVE "s.test"

BSAVE "s.test",8 FROM $A000 TO $B000

BSAVE "s.test",8,$A000,$B000

BSAVE "b.test",8 BLOCK 31:REM blocktabelle speichern



c) Tonbefehle



HEAR (SPEED n) - erlaubt das Online-Mithören am Digitalisierer. Dabei werden den vier Digitalisierungsstufen bestimmte Farb- und Lautstärkewerte zugeordnet. Die Farbwerte werden in das VIC-Register $D020, die Lautstärken in das SID-Register $D418 geschrieben. Beenden mit der Leertaste. RECORD (block) (SPEED n) - arbeitet wie HEAR. Gleichzeitig werden die gelesenen Werte im Speicherbereich block mitprotokolliert. Die Aufnahme kann mit <RESTORE> vorzeitig abgebrochen werden. Geschah dies im Direktmodus, wird eine Abbruchadresse ausgegeben (»stopped at xxxxx«). Die maximale Aufnahmegeschwindigkeit ist 1; die langsamste, noch sinnvolle Geschwindigkeit etwa 40.

Beispiele:

RECORD

RECORD FROM $A000 TO $D000 

RECORD SFEED 1

RECORD BLOCK 1 SFEED 10

PLAY (block) (SPEED n)
- ist die Umkehrung von RECORD. Die Daten im angegebenen Block werden als Tondaten interpretiert, die zugeordneten Farb- und Tonwerte ausgegeben. Die maximale Wiedergabegeschwindigkeit ist 0, die PLAY-Routine ist also schneller als die RECORD-Routine.


VOLDEF (n(,n(,n(,n))))

COLDEF (n(,n(,n(,n))))
- Lautstärke und Farbzuordnung bestimmen. Die vom Digitalisierer gelieferten vier Werte werden nie direkt als Farbe oder Ton ausgegeben. Statt dessen wird der ihnen zugeordnete Wert in das entsprechende Register geschrieben. Die Befehle VOLDEF und COLDEF beeinflussen diese Zuordnungstabelle entsprechend.

Beispiele:

VOLDEF 0, 1, 2, 3:COLDEF 0,11,12,15 :REM leise und grau 

VOLDEF 0, 5, 10 ,15:COLDEF 7, 2, 5, 6 :REM laut und bunt




d) Erweiterte Tonbefefehle



BLOCK n (block) (str) - Definition: Ein Block ist ein durch Anfangs- und Endadresse eingegrenzter Speicherbereich. Anstelle des Formalparameters (»block«) muß entweder die direkte Bezugnahme auf Adressen in der Form »FROM anf TO end« oder kürzer »,anf,end« stehen oder der Verweis auf einen Block der Blocktabelle in der Form »BLOCK n«. Die Endadresse end muß dabei größer als die Anfangsadresse ard und kleiner als $FFF9 sein.

BLOCK ohne Parameter zeigt, analog zu KEY, die gesamte Blocktabelle an. Dadurch wird das versehentliche Löschen eines Blockes verhindert (theoretisch müßten ja HIMEM und $FFF8 als Default eingesetzt werden).

Es existieren die Blöcke 0 bis 31, der Block 0 kann jedoch nicht definiert werden. Er beschreibt den mit dem letzten BLOAD geladenen Speicherbereich. Die Blöcke 30 und 31 beschreiben die Lage der Funktionstastentabelle und der Blocktabelle selbst, können jedoch umdefiniert werden. Sollte das der Fall sein, können die Originalwerte durch MEM erfragt werden.

Der Stringausdruck Str kann maximal acht Zeichen lang sein und taucht nur bei der Ausgabe der Blocktabelle wieder auf. Er soll den Inhalt eines Blockes (meist nur ein Wort) kurz wiedergeben.

Die Blocktabelle kann durch die Befehlsfolge 

FOR n=1 to 29:BLOCK n "" :NEXT n

gelöscht werden.

Beispiele:

BLOCK 1 "":REM block 1 löschen

BLOCK 1,$A000:REM endadresse..ist $FFF8 

BLOCK 1,$A000,$B000:REM kurzform von

BLOCK 1 FROM $A000 TO $B000

BLOCK 1 BLOCK 0:REM block 0 retten

BLOCK 1 BLOCK 0 a$:REM block 0 retten und benennen 

BLOCK 1 TO $B000:REM FALSCH!


MAP (x(-(y)))/(-y)
- gibt die Blocktabelle in editierbarer Form aus. Der komplizierte Formalparameter hinter MAP ist kein Grund zur Panik. Er beschreibt eine Syntax, die mit der des LIST-Befehles identisch ist. Wie bei LIST dürfen auch hier keine Variablen stehen.

HIMEM a - bezeichnet die obere Grenze des Basic-Speichers. Sie bildet die erste für Tondaten benutzbare Adresse. Der Wert a kann nicht kleiner als die Endadresse des aktuel­en Programmes und nicht größer als $A000 sein. Der HIMEM-Befehl beinhaltet den CLR-Befehl.

Beispiele:

HIMEM $1A00:REM größtmöglicher speicher für ton

HIMEM $A000:REM größtmöglicher Speicher für basic

PAUSE (a)
- ohne Parameter wartet PAUSE auf eine Zustandsänderung am Port 2, das heißt auf ankornmende Tondaten. Wegen der Doppelbelegung der CIA mit Joystickport und Tastatur ist der Befehl im Direktmodus unbrauchbar. PAUSE mit Parameter hält ein Programm a Interruptzyklen (etwa a/60 Sekunden) lang an.

EXEC str - interpretiert den übergebenen String als einen Kommandostring, der eine Folge von abzuspielenden Blöcken angibt. Außerdem können Parameter wie Lautstärken oder Farben beschrieben werden. Die Art der Daten wird mit einem vorangestellten Buchstaben (Befehl) beschrieben. Folgende Befehle existieren:

p w - Block w abspielen

s w - Speedwert setzen

w w - w/60stel warten

v w,w,w,w - Lautstärketabelle definieren

c w,w,w,w - Tontabelle definieren

# str - "goto" String Str

" - Ende Kommandostring

Alle anderen Zeichen führen zum Abbruch von EXEC. Die einzelnen Befehle können, müssen aber nicht immer mit »:« getrennt werden.

Der Parameter w ist eine Konstante oder eine Variable. WICHTIG: Das Endekennzeichen (Klammeraffe) darf nicht weggelassen werden, sonst werden unter Umständen ungewollte Befehle ausgeführt.

Beispiele:

EXEC "sl:pl:pl:p2:p3:p2ip3:@"

EXEC ‘slv0, 5,10, 15pl # c$‘

EXEC a$+" ":REM mit Sicherheit beenden 

EXEC a$+b$+" "


Auf der Programmservice-Diskette befindet sich ein Beispiel (Pop im Kopp), das von den Möglichkeiten des EXEC-Befehles ausgiebig Gebrauch macht.



e) Sonstige Befehle 



HEX und DEZ - kann die Zahlenausgabe bei EXEC und MON beeinflussen. HEX wählt die hexadezimale Zahlenausgabe, DEZ die dezimale Ausgabe an.

SCREEN flag - Bildschirm an oder aus? Normalerweise wird der Bildschirm bei HEAR, RECORD, PLAY und EXEC abgeschaltet. Der SCREEN-Befehl erlaubt den Betrieb von Speech-Basic auch bei eingeschaltetem Bildschirm. Flag ist entweder das Token ON oder OFF oder ein Ausdruck gleich oder ungleich null.

MON (block) und < (Pfeil nach links) - Der Soundmonitor

Mit MON kann ein Speicherblock so, wie er gelesen wurde auf dem Bildschirm dargestellt werden. Je vier Tonwerte bilden ein Byte. Die einzelnen Werte werden dabei in den ihnen durch COLDEF zugeordneten Werten eingefärbt, um besser unterscheidbar zu sein.

Die Werte können durch Überschreiben geändert werden. Änderungen übernimmt man mit <RETURN>. Der Befehl » < « (Pfeil nach links) bewirkt die Übernahme der Werte. Zur Vermeidung der READY-Meldung springt er jedoch direkt in die Interpreterschleife. Daher kann er nicht im Programm eingesetzt werden. MON ermöglicht die Korrektur kurzer, verrauschter Pausen und das bytegenaue Auffinden von Worten. Außerdem ist MON eine gute Aussteuerungskontrolle.

Beispiel:

MON FROM $0400 TO $0401 bewirkt $0400:42444244
Gut ausgesteuert:$B000: 111122344433211
Zu hoch ausgesteuert:$B000: 111114444444111
Zu wenig ausgesteuert:$B000: 22232334332212


Software

Download der Software  D64 Diskettenimage mit Digitizer-Software  (30 KB)

Hucky 27.01.2004

"Die Option Drucken funktioniert erst ab Netscape V4.0 bzw. I-Explorer 5.0 !"

I Hardware-Hauptseite I Startseite I