Untitled
Untitled
Untitled
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
ausgegeben und am Pin PB2 ein Strobe<br />
Impuls erzeugt, der die Aussprache startet.<br />
All dies geschieht so schnell, daB man<br />
keine Verzogerung bemerkt.<br />
Zum SchluB der Interrupt-Routine wird<br />
noch der oben schon erwahnte Zeiger aktualisiert.<br />
Er enthalt immer die Adresse<br />
des nachsten Byte und muB wegen der<br />
Struktur der verwendeten LDA-Adressierungsart<br />
in der Zeropage stehen. Nachdem<br />
auch die Register auf ihren ursprting<br />
lichen Stand gebracht wurden, gibt die<br />
Interrupt-Routine mit RTI die Kontrolle<br />
wieder an das unterbrochene Hauptprogramm<br />
zurtick, bis das Ende des Lautes<br />
wieder einen Interrupt auslost.<br />
Die eben beschriebenen Vorgange bei der<br />
Interrupt-Abarbeitung geJten in ahnlicher<br />
Weise fUr den maskierbaren Interrupt<br />
IRQ. Der Vollstandigkeit halber seien hier<br />
die Unterschiede kurz erwahnt: Die Startadresse<br />
der IRQ-Routine steht in den Speicherzellen<br />
$FFFE und $FFFF. 1m Origi<br />
nal-ROM ist sie $FF48. Hier werden zunachst<br />
aile Register gerettet und mit Hilfe<br />
des Break-Flag yom Stapel getestet, ob die<br />
Break-Routine angesprungen werden<br />
muB. Dies erfolgt dann tiber den RAM<br />
Vektor $0316/$0317 (790/791, Normalinhalt<br />
$FE66), wahrend die Interrupt<br />
Routine tiber $0314/$0315 (788/789, Normalinhalt<br />
$EA31) erreichbar ist. 1m Unterschied<br />
zur NMI-Routine sind also hier<br />
beim Sprung tiber die RAM-Vektoren bereits<br />
die Register auf den Stack gelegt.<br />
Das Programm SC-Ol INTERR.BAS enthalt<br />
die gerade beschriebene Maschinenroutine<br />
in DATAs. Es kann mitsamt der<br />
Unterroutinen ab Zeile 10 000 in eigene<br />
Programme eingebaut werden. Die Zeilen<br />
100 bis 190 stellen ein Beispielprqgramm<br />
Die Handshake-Leitung des CIA 6526 117<br />
dar, das die Handhabung demonstrieren<br />
solI.<br />
Das Unterprogramm ab Zeile 10 200 muB<br />
nur einmal zu Anfang des Programms<br />
aufgerufen werden. Es installiert zunachst<br />
die Maschinenroutine im Kassettenpuffer<br />
und andert dann den NMI-Vektor im<br />
RAM auf die neue Routine. Danach werden<br />
noch der User-Port und das Port-Bit<br />
PB2 auf Ausgang programmiert, und das<br />
Flag-Bit des CIA # 2 als Interruptquelle<br />
festgelegt.<br />
Zum Starten des Sprechvorgangs mu13 sich<br />
natiirlich eine Phonemkette im Speicher<br />
befinden. Sie kann vorher mit dem SC-Ol<br />
COMPILER dort abgelegt oder nachgeladen<br />
worden sein. Mit den zwei POKE<br />
Befehlen in den Zeilen 160 und 170 wird<br />
die Anfangsadresse der Phonemkette festgelegt.<br />
Dann folgt der Aufruf des zweiten<br />
Unterprogramms, das die Ubertragung<br />
anstOBt, indem einfach der Phonemwert 3<br />
(Pause) an den SC-Ol ausgegeben wird.<br />
Der Rechner steht wieder fUr weitere<br />
BASIC-Befehle zur VerfUgung, wahrend<br />
im Hintergrund die Sprachausgabe lauft,<br />
bis in der Phonemkette der End-Kennwert<br />
$FF (255) erreicht wird.<br />
Yom BASIC-Programm aus konnen Sie<br />
sogar tiberprtifen, wie weit die Ausgabe<br />
fortgeschritten ist, indem Sie die aktuelle<br />
Phonemadresse mit<br />
A=256*PEEK(252)+PEEK(251)<br />
auslesen. So konnen beispielsweise Aktionen<br />
gestartet werden, wenn die Sprachausgabe<br />
einen bestimmten Punkt tiberschritten<br />
hat.<br />
Zum Testen laden Sie zuerst SC-Ol IN<br />
TERR.BAS und anschlie13end den Beispiel<br />
text TXT.DEMO. Mit RUN konnen