Adressfragen bezüglich POKE bzw PEEK

  • Mahlzeit, ich wollte mal die Spezialisten fragen bezüglich 2 Adressen zwecks Abfrage bzw setzen:


    • wie kann ich den Joystick (Port 1 wie auch Port 2) per PEEK Abfragen. Ja, ich weiss, es gibt JOY aber ich möchte gern PEEK nutzen
    • wie kann ich das automatische INVERS beim Custom-Charset abstellen. Ich möchte gern Grossschreibung und die invertierten Zeichen dazu verändern

    Ich hoffe, ihr könnt mir da helfen.

  • Direkt mit Poke und Peek geht das nicht. Das liegt an der Architektur der 264, du musst das Keyboard Latch in TED triggern während auf den Datenleitungen das passende Bitmuster liegt und auslesen bevor dir der Keyboard-IRQ in den Weg kommt. BASIC ist dafür zu langsam. Bei der Abfrage via Assembler sollte man u.U. vorher ein SEI machen und danach ein CLI.

  • Den ensprechenden Teil der JOY-Funktion anzuspringen, funktioniert leider auch nicht. Zwar bleibt das ursprüngliche Bitmuster aus dem Port im X-Register erhalten, aber dann kommt ein Sprung sonstwohin statt RTS.
    Wenn es Dir nur darum geht, das selten dämliche Rückgabeformat von JOY() gegen simple Portbits einzutauschen, könntest Du Dir mit einem Mapping-Array helfen:

    Code
    1. j1=joy(1):j2=joy(2)
    2. b1=jm%(j1 and 15) or (j1 and 128):b2=jm%(j2 and 15) or (j2 and 128)

    Wenn es Dir darum geht, auch Kombinationen wie "rechts und links gleichzeitig" abfragen zu können, hilft das natürlich nicht.

  • Läuft:


    USR(0)=Port#1 / USR(<>0)=Port#2


    Wieso liefert der Feuer-Button bei einem Port 127, beim anderen 191 :nixwiss: . Egal, muss wohl so...


    SEI/CLI vergessen.

  • Wieso liefert der Feuer-Button bei einem Port 127, beim anderen 191

    Schau dir den Schaltplan an, dann wird es klar.


    Welcher Port abgefragt wird hängt davon ab welche Datenleitung (D1 oder D2) beim STA ins Keyboardlatch 0 ist. Beim abzufragenden Port ist diese Leitung 0. D1 und D2 auf 0 zu setzen dürfte Probleme geben.

  • Schau dir den Schaltplan an

    Sicher nicht ^^ .


    Aber natürlich Danke, dass du die Erklärung geliefert hast. Mag für manchen ja interessant sein. Ich hatte nur Bock, das softe Problem zu lösen :) .

  • Zum Vergleich JOY():

    Ob das Entprellen wirklich nötig ist, müsste man an realer Hardware testen...

  • Ob das Entprellen wirklich nötig ist, müsste man an realer Hardware testen...

    Vermutlich werden sich die Entwickler schon was bei gedacht haben...


    Den Einspung von JOY hab ich vorhin mangels ROM-Listing nicht gefunden. Jedenfalls kann man da ja nun nicht sinnvoll irgendwie/einfach rein/raus. Schade. Bleibt wirklich nur testen, ob das Entprellen wirklich Sinn macht. Zappelt da etwa beim TED was :| ? Was weiss ich... Zur Not muss man es halt so übernehmen, wie im ROM.

  • Den Einspung von JOY hab ich vorhin mangels ROM-Listing nicht gefunden.

    Ein 264-ROM-Listing hab ich auch nicht...

    Code
    1. xplus4
    2. moN
    3. h 8000 f000 08 ff

    Da kamen ein paar Ergebnisse, und bereits das erste stellte sich als JOY heraus. :D

    Bleibt wirklich nur testen, ob das Entprellen wirklich Sinn macht. Zappelt da etwa beim TED was :| ?

    Bei den CIAs im 64er macht das ROM auch

    Code
    1. - lda $dc00
    2. cmp $dc00
    3. bne -

    Wird schon seinen Grund haben...

  • Ein 264-ROM-Listing hab ich auch nicht...


    Da kamen ein paar Ergebnisse, und bereits das erste stellte sich als JOY heraus.

    Ich hab vorhin nach Byte-Folgen 64 <> 264 gesucht. Wer suchet.... :)

  • Danke für eure Antworten bezüglich der Joystickabfrage via PEEK. Ich habe mal das Memorymapping angehangen; für Leute, die es noch nicht haben aber mal benötigen könnten.
    Auch den Blick in diverse Fachliteratur von Data Becker und co brachten leider nichts. Muss ich wohl weiter JOY() benutzen.


    Ein weiteres Problem stellt sich mir noch dar, wie ich einen Zeichensatz nutzen kann, wo Grossbuchstaben und Invers verändert sind. So könnte ich 2 Zeichensätze auf einmal verwenden bzw. komplett 255 Zeichen und wäre nicht nur auf 128 beschränkt (pro Screen).

  • Wieso liefert der Feuer-Button bei einem Port 127, beim anderen 191

    Schau in den Schaltplan (doch, muß man tun, wenn man an der Hardwarew rumfummelt...)


    Auf die Weise kann man beide Knöpfe gleichzeitig abfragen. Wenn der Knopf im Stick auf GND schaltet ist es sogar egal was beim STA key_latch im Akku steht; ich weiß aber grad nicht ob CBM das bei seinem Spaßstock umgesetzt hat. Außerdem würde es die Schaltung für ein Dauerfeuer vereinfachen- was es aber m.W.n. nie für die 264er gab. Und für einen Dauerfeuer-tauglichen Adapter auf 'normale' 9polige Sticks nützt es leider herzlich wenig...

  • Ein weiteres Problem stellt sich mir noch dar, wie ich einen Zeichensatz nutzen kann, wo Grossbuchstaben und Invers verändert sind. So könnte ich 2 Zeichensätze auf einmal verwenden bzw. komplett 255 Zeichen und wäre nicht nur auf 128 beschränkt (pro Screen).

    Das geht schon, TED kann auf Zeichen aus dem RAM umgeschaltet werden und REVERSE in Hadware kann man abschalten. Du musst dazu aber erstmal den Zeichensatz ins RAM umkopieren und dafür sorgen, daß BASIC ihn nicht überschreibt. Für sowas sollte sich Beispielcode im Netz finden lassen.


    Das schöne ist dabei, TED hat vollen 64K-Zugriff, man braucht also keine Verrenkungen mit der VIC-Bank wie beim C64.

  • @Gerrit
    Danke, aber soviel weiss ich auch. Nur weiß ich eben nicht, wie ich das Hardware-Invers deaktivieren kann.
    Zum Umschalten des Charsets mach ich


    Code
    1. poke65298,peek(65298)and251:poke65299,peek(65299)and3or192

    192, da mein Zeichensatz auf $c000 bzw. 49152 liegt. Jetzt bräuchte ich halt nur noch den passenden POKE, damit ich die invertierten Zeichen auch modifizieren kann. 128 Zeichen reichen mir einfach nicht aus.