Joystick abfragen
Immer wieder wird der Joystick benutzt, meistens für Spiele aber auch zu Steuerung durch Programm-Menus. Die Abfrage in Assembler ist genauso einfach wie mit dem Basic Interpreter. Im linken Bild sieht man die Inhalte der jeweiligen Portregister bei Bewegung in die entsprechende Richtung. Die schwarzen Einträge entsprechen den Registern von Port 1 und die blauen daneben gehören zum Port 2. In der Mitte ist der Wert fuer die Feuertaste zu finden. Anhand dieser Daten ist eine Abfrage sehr einfach : to"joy.prg",cbm *=$1000 Loop lda $dc00 ; Port abfragen cmp #$6f ; Feuertaste wurde gedrueckt ? bne Loop ; nein, dann wieder zum Anfang rts ; zurueck ins BasicDas kleine Programm durchläuft die Schleife bis die Feuertaste gedrueckt wurde. Nach dem selben Schema koennen leicht Abfragen für Sprites und Menus programmiert werden. |
Eine Routine aus einem kleinen Experiment. Hier wird Sprite 1 gesteuert. Die maximale Bewungsmöglichkeiten sind auf den Bildschirm beschränkt. |
;---- Joystick-Auswertung -- Branch-Reichweite r_up lda $d001 ; rechts_hoch (diagonal) cmp #48 beq r_up_ex lda $d000 cmp #252 beq r_up_ex inc $d000 inc $d000 inc $d000 inc $d000 dec $d001 dec $d001 dec $d001 dec $d001 r_up_ex rts up lda $d001 ; hoch cmp #48 beq up_ex dec $d001 dec $d001 dec $d001 dec $d001 up_ex rts down lda $d001 ; runter cmp #196 beq d_ex inc $d001 inc $d001 inc $d001 inc $d001 d_ex rts forw lda $d000 ; rechts cmp #252 beq forw_ex inc $d000 inc $d000 inc $d000 inc $d000 forw_ex rts backw lda $d000 ; links cmp #40 beq backw_ex dec $d000 dec $d000 dec $d000 dec $d000 backw_ex rts ;------------------------------------------------- ; Auswertung des Ports (aus IRQ) ;------------------------------------------------- joystick lda joy2 cmp #$76 beq r_up ; rechts hoch cmp #$7a beq l_up ; links oben cmp #$79 beq l_down ; links unten cmp #$75 beq r_down ; rechts unten ror bcc up ; hoch ror bcc down ; runter ror bcc backw ; links ror bcc forw ; rechts rts ;------------------------------------------------- ;------------------------------------------------- r_down lda $d001 ; rechts_unten (diagonal) cmp #196 beq r_down_ex lda $d000 cmp #252 beq r_down_ex inc $d000 inc $d000 inc $d000 inc $d000 inc $d001 inc $d001 inc $d001 inc $d001 r_down_ex rts l_down lda $d001 ; links_unten (diagonal) cmp #196 beq l_down_ex lda $d000 cmp #40 beq l_down_ex dec $d000 dec $d000 dec $d000 dec $d000 inc $d001 inc $d001 inc $d001 inc $d001 l_down_ex rts l_up lda $d001 ; links_hoch (diagonal) cmp #48 beq l_up_ex lda $d000 cmp #40 beq l_up_ex dec $d000 dec $d000 dec $d000 dec $d000 dec $d001 dec $d001 dec $d001 dec $d001 l_up_ex rts ;---------------------------------- |
Letzte Änderung: 2019-01-03 11:42:09