k**PSUMME1 ;;Pr}fsumme 1* * * BB* * *AInterrupt HandlerA+*NMIENABLEQ>@;;(Bit 6) Einschalten des+'PNMIEN;;Vertikalsynchron-Interrupts+'QTRIG3;;Ist ein Modul eingesteckt ?+*PGINTLK;;(1=Ja, 0=Nein) Status sichern+:+*NMIVKT*NMIST;;ANTIC: Ist es ein DLI ?+IPNMI1;;Bit 7=0 => Nein ->+%!@VDSLST:;;Vektor zur DLI-Routine+&PNMI1-;;Vertikalsynchron-Interrupt +5;;Alle Register retten +&A;;(Bit 5=RNMI wird nicht getestet) +5 +C +5;;Ein beliebiger Wert setzt+!PNMIST;;die Statusbits zur}ck+&!@VVBLKI:;;Vektor zur IVBL-Rouitne+,IRQVKT-;;Pokey, par. Bus, PIA o. CPU IRQ++!@VIMIRQ:;;Sprung nach SYIRQ o. anderes+SYIRQ5;;A retten+(QIRQST;;Statusregister: Bit=0 => IRQ+-M> ;;Hat der ser. Eingang Daten gelesen ?+HSYIRQPDEV;;Nein ->+-Q>;;Ein in IRQST gesetztes (=0) Bit wird+.PIRQEN;;geloescht (=1), in dem es in IRQEN+.QPOKMSK;;auch kurz gesetzt (=0) wird. Dann+1PIRQEN;;noch den alten Zustand herstellen und++!@VSERIN:;;ISRSIR o. andere anspringen.+SYIRQPDEVA;;X retten+5+2QPDVS;;IRQ durch ein Ger{t am parallelen Bus ?+'MPDIMSK;;Darf das Ger{t anfordern ?+FSYIRQPOKY;;Nein -> + !@VPIRQ:;;NEUIOREQ o. andere!+1SYIRQPOKY$>;;Restliche POKEY IRQ's abfragen"+/SYIRQPLQMASKTAB9;;ODN,XD,T1,T2,T4,KB,BREAK#+%(>;;Test f}r Transmission Done ?$+HSYIRQPT;;Nein ->%+MPOKMSK;;IRQ erlaubt ?&+FSYIRQPC;;Nein ->'+$SYIRQPT*IRQST;;Ist es der IRQ ?(+FSYIRQPR;;Ja ->)+%SYIRQPC0;;Nein, Schleife bis alle*+%ISYIRQPL;;Bits getestet wurden ->++,!SYIRQ8;;POKEY wars nicht, PIA testen ->,+*SYIRQPRN>;;Statusbit wieder loeschen-+ PIRQEN.+ QPOKMSK;;Alte IRQ's erlauben/+ PIRQEN0+(>;;BREAK ?1+HSYIRQPJ;;Nein ->2+QKEYDIS;;Tastatur an ?3+HSYIRQ8;;Nein ->4+3SYIRQPJQVECTAB9;;Indizierter indirekter Sprung5+>;;Je nach IRQ wird aus der6+)QVDSLST9;;Tabelle ein Offset gelesen.7+*PJVECK;;Der Vektor, der an Stelle $2008+1QVDSLST9;;+Offset steht, wird nach (JVECK)9+PJVECK;;kopiert.:+7;;X wieder vom Stapel holen;+><+#!@JVECK:;;und Vektor anspringen=+0BRKEVENTQ>;;Die BREAK-Taste wurde gedr}ckt>+PBRKKEY;;Flag setzen?+$PSSFLAG;;Flag loeschen (Stop<>0)@+PCRSINH;;Cursor sichtbarA+-PATRACT;;Zeit bis Atractmodus r}ckstellenB+7C+9D+SYIRQ87;;PIA testenE+>;;X war noch auf dem StapelF+*PACTL;;CA1: Proceed IRQG+ISYIRQ9;;Nein ->H+1QPORTA;;Datum lesen & evtl. Quittung }ber CA2I+!!@VPRCED:;;(Zeigt auf SYIRQB)J+%SYIRQ9*PBCTL;;CB2: Interrupt IRQK+ISYIRQA;;Nein ->L+1QPORTB;;Datum lesen & evtl. Quittung }ber CB2M+!!@VINTER:;;(Zeigt auf SYIRQB)N+0SYIRQA7;;CPU testen. A vom Stapel und rettenO+ PJVECKP+*7;;Bei einem NMI oder IRQ wird nach demQ+&5;;Programmz{hler (2 Byte) auch dasR+-M>;;Statusregister autom. auf den StapelS+1FSYIRQC;;gebracht. Bit 4 (=1) zeigt IRQ durchT+ QJVECK;;einen BRK-Befehl an.U+5;;A wieder auf den Stapel.V+0!@VBREAK:;;!!PC zeigt auf 2. Byte nach BRK!!W+/SYIRQCQJVECK;;IRQ nicht erkannt. A zur}ck.X+5Y+ SYIRQB7Z+ SYRTI9[+1MASKTAB =@==;;Tabelle zum Ausmaskieren\+ === ;;eines Pokey IRQ]+/VECTAB 6===;;$0200+Offset aus VECTAB^+& == = ;;=Vektor f}r Pokey IRQ_+%WAITRST!WAITRST;;Warte auf RESET`+-SYSVBL#RTCLOK;;Softwareuhr, wird allea+ HSYSVB1;;1/50s um 1 erhoeht.b+##ATRACT;;Alle 256/50s =ca. 5.1sc+#RTCLOKd+ HSYSVB1e+ #RTCLOKf+"SYSVB1Q>;;Normale Helligkeitg+$>;;Keine Farbverschiebungh+%%ATRACT;;Schon groesser als 127 ?i+&IVBATRA;;Nein, kein Atractmodus ->j+ PATRACTk+*$RTCLOK;;Farbverschiebung alle 5.1sl+Q>;;Verminderte Helligkeitm+VBATRAPDRKMSKn+ &COLRSHo+$QCOLOR1;;Farbe von PF1 ver{ndernp+ NCOLRSHq+ MDRKMSKr+ PCOLPF1s+$>;;Timer 1t+" DCTIMR;;Erniedrigen falls <>0u+'HSYSVB2;;Hat nicht auf 0 gez{hlt ->v+ JTIMR1w+,SYSVB2QCRITIC;;Wenn gesetzt, IVBL Ende.x+*HXXIT;;S zeigt auf den n{chsten freieny+%@;;Platz. Auf dem Stapel sind hierz+0QSTACK9;;Y,X,A u. P, der Status vor einem{+(M>;;NMI (h.: IVBL). War I gesetzt ?|+#FSYSVB3;;Nein, weiter machen ->}+!XXIT!EXITVBL;;Ja, IVBL Ende.~+.SYSVB3QTRIG3;;Wurde ein Modul eingesteckt+"RGINTLK;;oder herausgenommen ?+HWAITRST;;Ja ->+%QPENV;;Position des Lichtgriffels+#PLPENV;;in die Schattenregister+ QPENH+ PLPENH+)QVDLIST;;Adresse der DList aus den+ PDLISTH;;Schattenreg. in die+QVDLIST;;Hardwareregister+ PDLISTL+QSDMCTL;;DMA+ PDMACTL+ QGPRIOR+ PPRIOR+,QVSFLAG;;Zwischenregister f}r vertikales+FNOSCROL;;Finescrollen+ "VSFLAG+Q>;;Bildschirm nach oben+;;;feinverschieben+ SVSFLAG+M>+ PVSCROL+"NOSCROL$>;;Freigeben aller 3+&CONSOL;;Tasten+-SCOLLP.;;Ein IRQ/NMI setzt es automatisch+'QPCOLR09;;Alle Farbregister vom Ram+NCOLRSH;;Farbverschiebung+MDRKMSK;;Helligkeit+ PCOLPM09+0+$ISCOLLP;;Weiter, bis alle 9ne ->+&QCHBAS;;Anfangsadresse Zeichensatz+ PCHBASE+$QCHACT;;Anzeigeweise der Zeichen+ PCHACTL+$>;;Timer 2+# DCTIMR;;erniedrigen, falls <>0+&HSYSVB4;;Wurde nicht auf 0 gez{hlt+ JTIMR2+SYSVB4$>+#SYSVBB2;;Erniedrige Timer 3,4,5+2+ QCDTMV19+LCDTMV19+!FSYSVBA;;Timer ist schon 0 ->+ DCTIMR+PCDTMA19;;Flags setzen+SYSVBA(>+!HSYSVBB;;Noch nicht fertig ->+!QSKSTAT;;Ist die letzte Taste+M>;;immer noch gedr}ckt ?+FSYSVB6A;;Ja ->+ QKEYDEL;;Tastaturentprellung+#FSYSVB6A;;Kein Tastenprellen ->+"KEYDEL;;3/50s+&SYSVB6AQSRTIMR;;=0 verhindert die+"FSYSVB7;;Tastenwiederholung ->+QSKSTAT;;Letzte Taste immer+M>;;noch gedr}ckt ?+HSYSVB6;;Nein ->+'"SRTIMR;;Ja, Zeit bis zum Einsetzen+#HSYSVB7;;der Tastenwiederholung+QKEYDIS;;Tastatur an ?+HSYSVB7;;Nein ->+ QKEYREP;;Geschwindigkeit der+PSRTIMR;;Tastenwiederholung+QKBCODE;;Gedr}ckte Taste+R>;;ctrl-1+FSYSVB7;;Ja ->+R>;;ctrl-F1+FSYSVB7;;Ja ->+R>;;ctrl-F2+FSYSVB7;;Ja ->+R>;;ctrl-F4+FSYSVB7;;Ja ->+"M>?;;Unbeachtet Shift/Ctrl die+R>;;HELP-Taste+FSYSVB7;;Ja ->+!QKBCODE;;Tastendruck ausgeben+PCH+ !SYSVB7+,SYSVB6Q>;;Ansprechen der Tastenwieder-+PSRTIMR;;holung verhindern+)SYSVB7QPORTA;;Joystickports auslesen+V?;;Es gibt nur noch 2 Ports+V?;;bei XL/XE. Die beiden+V?;;anderen werden+V?+ PSTICK1+PSTICK3;;simuliert+ QPORTA+M>+ PSTICK0+PSTICK2;;simuliert+QTRIG0;;Trigger auslesen+ PSTRIG0+PSTRIG2;;simuliert+ QTRIG1+ PSTRIG1+PSTRIG3;;simuliert+$>;;(POT LooP)+,POTLPQPOT09;;Auch die restlichen 4 Pots+(PPADDL09;;werden simuliert, obwohl -++PPADDL49;;die Anschl}sse gibts noch ...+0+ IPOTLP+)PPOTGO;;Startet neuen Messgang f. Pot+$>+%>+)PTRLPQSTICK08;;(Paddle TRigger LooP)+V?;;Joystickeing{nge als+V?;;Paddle Trigger+V?;;verwenden.+ PPTRIG19+PPTRIG59;;simuliert+Q>+U?+ PPTRIG09+PPTRIG49;;simuliert+0+0+1+ IPTRLP+!@VVBLKD:;;Verzoegerter VBL+$JTIMR1!@CDTMA1:;;Vektor Timer 1+$JTIMR2!@CDTMA2:;;Vektor Timer 2+)DCTIMR%CDTMV19;;Timer herunterz{hlen+HDCTIM1;;falls <>0+%CDTMV19, FNONZERO,"CDTMV19,DCTIM1"CDTMV19, HNONZERO,%CDTMV19, HNONZERO,"Q>;;Timer wurde auf 0 gez{hlt,:,(NONZEROQ>;;Timer wurde nicht auf 0 , :;;gez{hlt ,&SETVBLT?;;Routine zum setzen eines , PINTEMP;;Vektors/Timers. A*2 , A;;HI-Byte ,#$>;;Warteschleife beginnt nach,%PWSYNC;;dem Ende einer Bildzeile.,"SETVBW0;;(Verhindert einen NMI,%HSETVBW;;w{hrend des Setzens ???),$INTEMP;;Vektor Nummer,PVIMIRQ9;;HI-Byte, C;;(Geht STY VIMIRQ,X nicht?), PVIMIRQ9,:,(EXITVBL7;;(EXIT from Vertical BLank),?,7,>,7,9,ASystem MonitorA