Ich hab mal eins gebaut, wo die Tasks dann halt allesamt im Mainloop laufen. Sprich: es wird immer nur die Returnaddresse des ansonsten nornal laufenden IRQs manipuliert.
Hier sogar dokumentiert: Bitte melde dich an, um diesen Link zu sehen. ![]()
Ich hab mal eins gebaut, wo die Tasks dann halt allesamt im Mainloop laufen. Sprich: es wird immer nur die Returnaddresse des ansonsten nornal laufenden IRQs manipuliert.
Hier sogar dokumentiert: Bitte melde dich an, um diesen Link zu sehen. ![]()
Einfach mal 20 Jahre liegen lassen
Perfekt
In SOLCHEN Kategorien muss man als "Retro-Coder" denken
Edit: Verrätst du auch noch, wie man den "Software-Interrupt" (also BRK) KORREKT erkennt?
Ich tippe so wie es der Kernal macht: auf dem Stack ins Statusregister linsen und das Break-Flag anschauen:
Sprites aktiviert lassen bei Kernal Load/Save.
Ganz beliebt: das 9. Bit für die Rasterzeile beim Setzen des Rasterinterrupts ignorieren. Je nach zufälligem Inhalt wird dann der Interrupt nie getriggert, weil es die Zeile mit gesetztem 9. Bit gar nicht gibt.
Entprellte Joystickabfrage in einem schnellen Loop:
wait_for_fire_press:
lda $dc00
and #%00010000 ; fire
bne wait_for_fire_press
wait_for_fire_release:
lda $dc00
and #%00010000 ; fire
beq wait_for_fire_release
; quick screen update
...
jmp wait_for_fire_press
Alles anzeigen
Funktioniert astrein im Emulator, aber auf echter Hardware wird nicht gescheit entprellt, weil der Joystick beim Tastendruck etliche Millisekunden lang auf der Leitung herumzappelt. Daher die Joystickabfrage am besten in den IRQ packen, nach einem Frame (ca. 20ms) ist die Zappelei auf jeden Fall vorüber.