Hallo Besucher, der Thread wurde 4,5k mal aufgerufen und enthält 52 Antworten

letzter Beitrag von TheRyk am

Warum gerät die Ausgabe "west" ins stocken?

  • Bei dieser Joy-Abfrage gerät die Ausgabe "west" nach dem zweiten drücken der Joytaste ins stocken, während die anderen immer zügig ausgegegeben werden.
    Woran liegt das?


    mfg


    Code
    1. 1 getb$
    2. 2 if b$="q" goto 200
    3. 10 a=peek(56320)
    4. 25 if a =127 then goto1
    5. 30 if (a and1)= 0 then print"nord"
    6. 31 if (a and2)= 0 then print"sued"
    7. 32 if (a and4)= 0 then print"west"
    8. 33 if (a and8)= 0 then print"east"
    9. 100 goto 1
    10. 200 print"end"
  • Vielleicht stört das Bewegen des Joysticks die Tastaturabfrage in Zeile 1 / 2.
    Wie sieht's aus, wenn Du Zeile 100 in "goto 10" änderst?

  • Am Emulator oder am echten C64? Falls am echten C64 und kein Tippfehler in Zeile10 ist, dann ist der C64 kaputt. Falls am Emulator, dann sehr wahrscheinlich weil der virtuelle Joystick auch mit dem virtuellen Control Port#1 verbunden ist.


    Die Bits, die der Joystick in diesem Port ändert sind die gleichen wie bei den Tasten 1, 2, <- (=Backarrow :)) CTRL und SPACE, d.h. das Betriebssystem des C64 kann nicht unterscheiden, ob die entsprechende Taste gedrückt oder der Joystick bewegt wurde.


    CTRL wird vom Basic als Ausgabebremse benutzt, daher die Verzögerung.

  • Dieses Problem hatte ich schon mal vor Jahren am realen C64 am Port 2 und jetzt am VICE.
    Hat mich jetzt halt interessiert, weil ich mich mit dem VIce mehr auseinandersetze als damals mit dem realen C64.
    Ich kann die Programme jetzt schneller umsetzen, testen, verbessern abspielen, umsetzen ,testen usw. was beim C64 etwas mühe bereitet und man sich die Arbeit nicht macht.


    mfg

  • Hmmh.


    Also irgendwas hat es doch damit auf sich, denn auch bei dieser Lösung hier
    Joystick über Function (aus Emu-Ecke.de)


    gibt es bei mir Probleme, und zwar auch bei Westen, aber mit Port 1 !
    Und das obwohl ich extra für Port1 "none" im Vice eingestellt habe und immer nur mit ALT+J tausche.
    An Doppelbelegung von Keysets kann es also eigentlich nicht liegen.


    Witzigerweise läuft die Schleife

    Code
    1. PRINT FN JOY(1):GOTO {selbe Zeile}

    fröhlich durch und zeigt flüssig 4en an, wenn man nach Nordwesten oder Südwesten hält (was ja eigentlich nicht abgefragt wird in der Billig-Lösung), nur bei Westen wird die Schleife enorm verlangsamt.

  • Nein, Port#1 ist ja gerade der, welcher mit der CTRL-Taste ins Gehege kommt. Schnucke hatte zwar Port2 abgefragt, aber halt auch den Joystick in Port#1 mitbewegt (vermute ich jedenfalls).


    Ich wüsste auch nicht, wie man dass mit reinem Basic abstellen kann. Schuld ist die Tastaturroutine, welche die Tastenreihe mit der CTRL-Taste zum Schluss abfragt und dann den CIA einfach auf dieser Reihe stehen lässt.

  • Nein, Port#1 ist ja gerade der, welcher mit der CTRL-Taste ins Gehege kommt. Schnucke hatte zwar Port2 abgefragt, aber halt auch den Joystick in Port#1 mitbewegt (vermute ich jedenfalls).


    Ich wüsste auch nicht, wie man dass mit reinem Basic abstellen kann. Schuld ist die Tastaturroutine, welche die Tastenreihe mit der CTRL-Taste zum Schluss abfragt und dann den CIA einfach auf dieser Reihe stehen lässt.

    Aaah. Langsam fällt der Groschen.


    Das betrifft dann aber nur VICE? Oder auch andere EMUs / echten C64?


    EDIT: CCS64 auf jeden Fall auch

  • Das ist auch am echten C64 so, wann immer ein Joystick in Port1 nach links bewegt wird. Evtl. gibts n paar Pokes, mit denen man das unterdrücken kann, aber k.A. welche das sind. :nixwiss:

    Dascha unter Umständen bei 2-Spieler-Mode voll unfair or what?


    Hat z.B. bei Beat-Em-Ups dann derjenige in Port1 immer die A-Karte? Wobei schlechtes Beispiel, bei BeatEmUps muss meistens Feuer gedrückt werden.

  • Naja, die meisten mir bekannten Kloppspiele sind ja ganz oder teilweise in Assembler geschrieben, da sieht das schon viel entspannter aus. Da ist dann die Tastaturabfrage i.d.R einfach ganz abgeschaltet oder wie auch die Ausgaberoutinen durch "handgedrechselte" Routinen ersetzt.


    Evtl. würds aber in Basic sogar schon reichen, einfach nix mit PRINT auszugeben, wenn man es eilig hat, da CTRL nur die Zeichenausgabe über PRINT ausbremst.

  • Hmm, wenn ich mit poke56333,127 den CIA-Interrupt abschalte, funkt CTRL immer noch dazwischen. Wenn ich aber den Interrupt auf ea81 verbiege, bleibt die Ausgabe irgendwann komplett stecken?!? (Vice und CCS getestet, sowohl per Poke als auch im Monitor verbogen und die Adresse 3x überprüft). Seltsam...


    Edit: *Klatsch* dc0d sollte man doch noch lesen, bevor man den irq verlässt :roll:

  • Ich weiß nicht ob das hier hilft, aber versucht's mal damit:


    Code
    1. DEF FN JOY2(X) = PEEK(56320) AND X
    2. IF FN JOY2(1) = 0 THEN PRINT"UP"
    3. IF FN JOY2(2) = 0 THEN PRINT"DOWN"
    4. IF FN JOY2(4) = 0 THEN PRINT"LEFT"
    5. IF FN JOY2(8) = 0 THEN PRINT"RIGHT"
    6. IF FN JOY2(16) = 0 THEN PRINT"FIRE!"
    7. GOTO 2


    Für Joystick 1 wäre es denn POKE 56321 anstelle von POKE 56320. Wenn die Schleife mit dem Druck auf 'Q' beendet werden soll mußt du die Zeile 7 ändern:


    Code
    1. 7 IF PEEK (197) <> 62 GOTO 2
    2. 8 POKE 198,0


    Damit wird die aktuell gedrückte Taste abgfragt, 62 ist der Wert für Q. Da der Tastendruck noch im Tastaturpuffer verbleibt, sollte er anschließend mit POKE 198,0 (Anzahl der Zeichen im Tastaturpuffer) gelöscht werden. Wenn du andere Tasten als Q verwenden willst, kannst du diese Routine verwenden um die Werte zu bekommen:


    Code
    1. PRINT PEEK(197) : GOTO 1


    Getestet habe ich das Proggi auf einem echten C128, kein Emulator oder so.

  • @Naquaada: Ja, die Joystickabfrage würde so auch aufm C64 funktionieren. Aber an dem Problem mit der verlangsamten Print-Ausgabe ändert das leider auch nix, das scheint sich wirklich nur durch Abändern der Tastaturabfrage- und/oder Print-Routinen beheben zu lassen.


    Erstaunlich, dass das immer noch auftritt, wenn man den Interrupt umbiegt oder abschaltet. Ich dachte eigentlich auch immer, da würd die Tastatur drin abgefragt, aber anscheinend wird die bzw. dc00 noch an anderer Stelle manipuliert. Sehr merkwürdig...