30.12.2012 Aufrufe

Untitled

Untitled

Untitled

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!