Schneider / Amstrad CPC Forum

Amstrad / Schneider CPC => Programmierung => Topic started by: oobdoo on 17. February 2015, 15:10:19

Title: Probleme mit Joystick-Abfrage
Post by: oobdoo on 17. February 2015, 15:10:19
Ich frage meinen Joystick ab:

call &bb24
di
push af
call &bb00
pop af
ei

cp 8 ; für rechts
jr rechts

usw.


Die Abfrage funktioniert soweit. Das Problem dabei ist, das sie viel zu schnell kommen die weiteren Impulse. Einmal nur kurz den Joystick angetippt und die Figur rast schon über den halben Bildschirm.
Dabei macht JOY(0) in BASiC auch nix anderes als &bb24 abzufragen. Und da funktioniert es.

Ich steh vor einem Rätsel.  :(
Title: Re: Probleme mit Joystick-Abfrage
Post by: oobdoo on 17. February 2015, 15:27:43
Mit einer normalen Rechtsbewegung am Joystick bekomme ich immer 3x A ausgegeben.

org &4000

.start

di
call &bb24

push af
call &bd19

pop af
ei

cp 8
jr nz,start
         ld a,65
         call &bb5a
         call&bb00
jr start


Ich will aber nur einmal A bei normalen Handbewegungen am Bildschirm sehen.
Title: Re: Probleme mit Joystick-Abfrage
Post by: Devilmarkus on 17. February 2015, 18:49:11
Vielleicht fehlt ja ein CP 0 ?
So dass es sperrt, wenn der Joystick ruhig ist?

Oder ein Stop-Befehl?
Title: Re: Probleme mit Joystick-Abfrage
Post by: oobdoo on 17. February 2015, 19:14:54
Ich versuche gerade eine Counter mit einzubauen, damit die Ereignisse nicht zu schnell kommen. Klappt aber noch nicht. :(
Title: Re: Probleme mit Joystick-Abfrage
Post by: Devilmarkus on 17. February 2015, 20:02:23
Bislang fragst du ja auch nur ab, was passieren soll, wenn Joystick gedrückt wird.
Aber wie setzt du die Bewegung zurück?
Das sollte erfolgen, wenn der Joystick <> 8 ist.

8 steht natürlich repräsentativ für die Bewegungsrichtung, die du abfragst...


Stell dir vor: Du drückst eine Taste, dann muss etwas erfolgen. Wenn Du diese Taste aber wiederum loslässt, muss auch etwas erfolgen.... Sonst bleibt intern die Taste gedrückt...
Title: Re: Probleme mit Joystick-Abfrage
Post by: oobdoo on 17. February 2015, 20:22:55
Das war nur ein schneller Experimentiercode.

Mir geht es folgenden BASIC-Code (siehe Bild)

Da klappt das vorzüglich mit dem Joystick. Will ich das aber in Assembler nachbilden, dann rennt die Figur nicht um eine Position, sondern immer um mehrere.
Ich könnt noch verrückt werden.  :motz:
Title: Re: Probleme mit Joystick-Abfrage
Post by: Devilmarkus on 17. February 2015, 20:24:14
Achso sorry, dann hatte ich dich falsch verstanden...
Vermutlich macht deine Figur nun zu schnelle Schritte?
Was, wenn Du zwischen den Schritten ganz einfach einen CALL &BD19 dort einfügst?

Edit: Könnte allerdings das gesamte Spiel verlangsamen... CALL &BD19 ist ja der Frameflyback Wait CALL...

Edit 2: Timer könnte aber klappen! Oder aber die Tastatursteuerung über Interrupt abfragen, wobei die Abfrage alle x Millisekunden erfolgt, und halt auch dann nur den Einzelschritt ausführt?
Title: Re: Probleme mit Joystick-Abfrage
Post by: oobdoo on 17. February 2015, 20:35:49
Ich hab noch einen Gedanken im Kopf. Den mach ich aber erst nach dem TV schauen. Birne raucht.

Interrupt, ja gerne. Ist aber ein weiteres Problem was ich noch nicht gelöst habe.  ;)
Title: Re: Probleme mit Joystick-Abfrage
Post by: Devilmarkus on 17. February 2015, 20:41:51
So in etwa?

InterruptInit:
ld a,(ix+0)
or a
jr z,InterruptDone
LD HL,BlocEvent
LD DE,InterruptHandle
LD BC,#8100
JP #BCD7

InterruptDone:
LD HL,BlocEvent
JP #BCDD
InterruptHandle:
DI
;; was soll ich hier machen?
ei
ret

BlocEvent:
DS 16



Edit: GGF. die Abfrage am Anfang entfernen! Dies hier basiert auf einem RSX-Befehl, welches den Interrupt ein - bzw. aus schaltet.
Title: Re: Probleme mit Joystick-Abfrage
Post by: oobdoo on 18. February 2015, 12:20:41
So, wie es ausschaut habe ich das Problem gelöst.  :D
Assembler führt mich manchmal auf den falschen Weg und später seh ich den Baum vor lauter Bäumen nicht.

Einfach nur &BB18 aufrufen und entsprechend auswerten. Hab mich im WinCPC durch die umdefinierte Tastatur auf den falschen Weg begeben.
Jetzt klappt das mit der mit der Zehnertastatur und gleichzeitig auch übern Joystick.

Ich denk noch immer zu sehr in BASIC-Dimensionen und überseh dann die Lösungen.  :motz:

Naja, hauptsache läuft.  :00008351:

Danke nochmal an Devilmarkus der mich mit Sourcen versorgt hat, wodurch ich wieder auf den richtigen Weg gebracht wurde.  :knuddel:
Title: Re: Probleme mit Joystick-Abfrage
Post by: TFM on 18. February 2015, 18:31:02
Ja, Assembler ist einfach viel schneller als BASIC. Da muss schon mal eine Warteschleife rein ;-)
Title: Re: Probleme mit Joystick-Abfrage
Post by: oobdoo on 18. February 2015, 22:37:22
Plöde Geschwindigkeit. Wahnsinnig macht einen dieses Assembler.  :banghead:
Hat man ein Problem gelöst, stolpert man über zwei neue.  :gruebel:
Title: Re: Probleme mit Joystick-Abfrage
Post by: TFM on 19. February 2015, 18:04:07
Ja, aber wenn's läuft, dann läufts ... und zwar für immer. Nur nicht aufgeben, am Ende ist es das alles wert.
Title: Re: Probleme mit Joystick-Abfrage
Post by: oobdoo on 19. February 2015, 20:04:11
Ach Z80 is kagge. Ich meißt den Scheiß ausm Fensta.  :motz:

Jetzt schreib ich die Routine fürs Monster extra neu und der Bug taucht immer noch auf.  :gruebel:
Title: Re: Probleme mit Joystick-Abfrage
Post by: TFM on 19. February 2015, 20:39:28
Mach mal Pause und schlaf eine Nacht darüber.  :)