Kannst du dir dann erklären, warum wizball6502 ohne die Warteschleife Probleme hatte?
Weil er Port 2 haben wollte. Der Tastaturscanner verbindet am Ende ja den SID mit Port 1, und daher sind im nächsten Interrupt die POT-Werte von Port 1 bereits problemlos eingelesen worden.
Ich verstehe halt auch nicht ganz, wieso hier sicher gestellt ist, dass der IRQ stets vor der Tastaturabfrage ausgeführt wird.
Wie stellt der Code sicher, dass der Mouse-IRQ vor der Tastaturabfrage ausgeführt wird?
Wenn bei eingeschaltetem Kernal ein Interrupt auftritt, wird der Interrupthandler des Kernals angesprungen. Dieser erledigt ein paar Kleinigkeiten und springt dann über $314 die "normale" Interruptroutine des Kernals an, wo unter anderem die Tastatur abgefragt und TI erhöht wird.
Verbiegt man $314 auf eine eigene Routine und springt am Ende zur "normalen" Routine -> dann wird die eigene Routine natürlich immer direkt vor der "normalen" Routine ausgeführt.
Wozu speichert man den Standard-IRQ nochmal extra in IIRQ2?
Damit man weiß, wohin man am Ende der eigenen Routine springen muss.
Steht da nicht immer $ea31 drin?
Sobald der eigene Treiber installiert ist, nicht mehr. Der Beispielcode lässt sich daher mit anderen IRQ-Routinen kombinieren, solange diese ebenso "korrekt" programmiert wurden. Springt der eigene Code immer stur nach $ea31, sind alle vorher installierten Helferlein wieder weg.
Liegt das evtl. irgendwie daran, dass in seinem Code bei der IRQ-Installation CLI verwendet wurde und oben nicht?
Nein.
Folgt nicht eigentlich immer auf ein SEI auch ein CLI? Offenbar nicht.
Gibt es einen großen Unterschied zwischen der Verwendung von SEI..CLI und PHP SEI.. PLP (welches hier verwendet wird)?
Ich könnte es erklären, aber ich glaube, der Lerneffekt ist deutlich größer, wenn Du es selbst herausfindest. ![]()
Lies einfach mal nach, was SEI/CLI/PHP/PLP tun.
Sind die ersten drei Zeilen in INSTALL nicht überflüssig?
Ansichtssache. Sie verhindern eine Mehrfachinstallation, die zu einer Endlosschleife führen würde.
Ganz ehrlich: den ganzen Hardware-Kram kapiere ich nicht. Der ein sagt, man muss warten, der andere (@Mac Baco) sagt nicht.
Und wie passt das dann mit der Aussage von Mac Bacon zusammen?
Der SID macht kontinuierlich Messungen. Jede davon braucht eine gewisse Zeit. Während dieser Zeit sollte man tunlichst nicht den mit dem SID verbundenen Port wechseln. Der Tastaturscanner wird alle 16 bis 20ms aufgerufen und wechselt mehrmals den mit dem SID verbundenen Port - aber am Ende verbindet er den SID mit Port 1. Bis zum nächsten Aufruf des Tastaturscanners ist der SID also 16 bis 20ms lang mit Port 1 verbunden. Direkt vor dem nächsten Aufruf des Tastaturscanners kann man also problemlos die POT-Werte von Port 1 abfragen, ohne extra warten zu müssen. Will man die Werte von Port 2 haben, muss man Port 2 auswählen und eine gewisse Zeit abwarten, und während dieser Wartezeit darf auf keinen Fall der Tastaturscanner aktiv werden.