Hallo Besucher, der Thread wurde 1,3k mal aufgerufen und enthält 8 Antworten

letzter Beitrag von dg5kr am

Assign commands to F-Keys on C64

  • Code
    1. In order to stay in practice I started to program the probably 50th Basic Extender for the c64. It was important for me to program this again in 6502 assembler (that's a long time ago) and train the gray cells. As the saying goes, no pain, no gain. Now I am looking for an example routine to assign the F-Key with commands. Similar to the KEY command from BASIC 3.5. Who can help me? I am also happy to be contacted in German. It is not a duty.
    2. Kind regards,
    3. Robert
  • Sprache dieses Forms: DEUTSCH. (Sorry, habs übersehen ;()

    Hallo 6502 Fans. Ich dachte wenn ich es in Englisch versuche spreche ich ein breiteres Publikum an. Hab aber völlig vergessen das es sich hier um ein rein nationales Forum handelt. Sorry. Kommt nicht wieder vor.

    Meine Frage wie man in Assembler die F-Tasten mit Text belegt und abruft hat sich erledigt. Bin hier im Forum bei einem uralten Beitrag fündig geworden ^^

    Danke an alle die sich die Mühe gemacht haben dies hier zu lesen.


    Unnd nun nochmal:

    Ich schreibe gerade den wo möglich 50. BASIC Extender. Warum das denn werden einige fragen. Es gibt doch so viele. Nun, als 8Bit und 6502 Fan ist so ein Projekt eine gute Fingerübung und gibt einen schnell sichtbare erfolgserlebnisse und es ist wunderbar geeignet um sich mit 6502 Assembler und dem C64 ROM aus einander zu setzen.


    Die besten Grüße aus Herzogenrath

    Robert (DG5KR, JO30AU)

  • Für alle die es interessiert. Nach ein paar gefundenen Ideen habe ich mir diese Routine programmiert. Hier der Codesnipsel:



  • Vielleicht bisschen zum Programmierstil selbst und etwas Feinschliff:


    Code
    1. jsr CHRGET
    2. cmp #$00 ; Keine weiteren Param
    3. beq SHOWFKEY ;=0, dann zeige FKEY Belegung

    kann man ersetzen durch

    Code
    1. jsr CHRGET
    2. beq SHOWFKEY ;=0, dann zeige FKEY Belegung

    CHRGET setzt das Zero-Flag, wenn es auf eine "0" oder ":" (also Anweisungsende) stößt. Explizit auf 0 abfragen ist eigentlich falsch und berücksichtigt einen folgenden Doppelpunkt nicht. CMP #0 prüft nicht das Zero-Flag (das ja schon entsprechend gesetzt ist), sondern "nur" den Akku auf Wert = 0

    Siehe C64-Wiki: CHRGET


    Auch dieser Teil (kommt ja öfter in der Art vor)

    Code
    1. jsr BYTEGET ;Tastennummer holen (Ergebnis liegt in X)
    2. txa ;Lege Nr in A
    3. GETKEYNR clc
    4. cpx #9 ;KEYn > 8?
    5. sta FKEYNUM ;Sichere FKey- Nr
    6. bcs _Tab_Err10 ;'illegal quantity' anzeigen
    7. jmp _DEFK2
    8. _Tab_Err10 jmp $B248 ;'illegal quantity' anzeigen

    lässt sich so schreiben:

    Code
    1. jsr BYTEGET ;Tastennummer holen (Ergebnis liegt in X)
    2. GETKEYNR
    3. cpx #9 ;KEYn > 8?
    4. stx FKEYNUM ;Sichere FKey- Nr
    5. bcc _DEFK2
    6. _Tab_Err10 jmp $B248 ;'illegal quantity' anzeigen
    7. _DEFK2

    cpx/cmp/cpy setzen implizit das Carry-Flag - das muss man nicht vorbereiten. Außerdem bleibt der Wert in Register ja erhalten, daher kann man sich das Transferieren (Retten?) von X nach A eigentlich sparen und gleich den Wert in X in FKEYNUM speichern.

    Die Verzweigungsbedingung wurde umgedreht, um im "Gutfall" über die Fehlermeldung zu springen (statt in die Fehlermeldung beim "Schlechtfall").

    D.h. mit bcc ( entspr. < 9) weiter machen (und bei >=9 läuft man in den Error-Handler).


    Ähnlich dann auch bei der String-Parameterabfrage ...


    Soweit mal zur 6502-typischen Programmierung und Bug-Behebung (ohne jetzt noch weiteres durchgearbeitet zu haben) als Anregung. ;)