Hallo Besucher, der Thread wurde 1,4k mal aufgerufen und enthält 9 Antworten

letzter Beitrag von e2020 am

anfänger: kann texte aus string table nicht auf screen bringen - sollte einfacher fehler sein!

  • grosses HALLO! mit kleinem problem :-)


    es geht um eine einfache aufzählung, die so auf dem screen aussehen soll:
    1v3:
    2v3:
    3v3:
    (fertig; der restliche text im code ist nur unsinn/spass))


    ich möchte das über 'string tables' machen (im Turbo Macro Pro) ,nur bin ich gerade mal wieder ziemlicher wieder-anfänger und finde den aktuellen fehler nicht - könnt ihr mal bitte kurz gucken und mich/meinen code korrigieren wenn euch etwas auffällt? danke!
    eigentlich ne ganz einfach sache, nur warum was mache ich falsch?
    ist es die adressierung unten?



    1. wo kommen die zeichen zwischen den aufzählungtexten her und
    2. warum steht (in der schwarzen umrandung unten) 1v3 und nicht 3v3 ?

  • danke gerd!,
    hab die fehlende ausgabe-zeile oben eingetragen:
    41. jsr $ab1e ; "strout"


    in meinem code war sie / ist sie vorhanden...
    funktioniert trotzdem nicht...


    edit:
    hab noch einen anderen fehler gefunden und bin noch einen schritt weiter gekommen, jetzt sieht es aus wie auf dem bild (siehe oben)...

  • Die Indizes sind falsch gewählt. Du legst die Stringzeiger nacheinander im Speicher ab. Jeder Zeiger benötigt 2 Bytes. Du übergibst an die Ausgaberoutine aber Indizes von 0, 1 und 2 anstelle von 0, 2 und 4. Entweder paßt Du die Indizes an oder verdoppelst sie (z. B. per ASL) in der Ausgaberoutine.

    Code
    1. txa
    2. asl
    3. tax
    4. ldy texts+1,x ;get >high byte
    5. ;von "tables"
    6. lda texts,x ;get <low byte
    7. ;von "tables"
    8. jmp $ab1e ; "strout" (danke adac - hatte diese zeile vergessen :)

    Alternativ kannst Du die Tabelle der Stringzeiger auch aufspalten in eine Tabelle für die Lowadresse und eine Tabelle für die Highadresse.

  • Du adressierst die Texte mit X=0/1/2. Die Pointer stehen aber in einer Word-Tabelle, also wären die Indizes 0/2/4 richtig - oder man müsste die Tabelle in eine Low-Tabelle und eine High-Tabelle aufspalten.

  • Das Aufspalten in Low und High-Tabelle ist aus meiner Sicht die transparentere Methode.


  • bestens, DANKE! :-)


    1 word = 2 byte
    das war's...




    neues prob:
    wie kann ich text/variablen erweitern? über 2 zeilen?
    (bin auf c64 im 'turbo macro pro')


    möchte
    1. diesen string erweitern:

    Code
    1. text2 .byte $0d ;cr = return
    2. .text "2v3: sich über die schulter zu pinkeln,"
    3. .text "(während des fahrradfahrens)" ; <<< HIER: der string lässt sich so
    4. ; nicht erweitern - wie macht man das?


    und prinzipiell das gleiche problem: wie erweitere ich den table über 2/mehrere zeilen?
    2.

    Code
    1. table ; lable
    2. texts .word text1, text2, text3, text4 ;<<< HIER ist die zeile zu ende (40 zeichen)
    3. ; wie trage ich zusätzlich texte:
    4. .word text5, text6, text7 ; in die tabelle ein?
    5. ; einfach in die nächste zeile eintragen geht jedenfalls nicht
    6. ; , und + hatte ich getestet - ging auch irgendwie nicht...

    wie muss man das machen?


    danke für die antwort!

  • Eigentlich genau so, wie du es beschrieben hast. Die Daten werden vom Assembler nacheinander in den Speicher gelegt, ob die jetzt in einer Zeile oder mehreren Zeilen untereinander stehen, ist völlig irrelevant.


    Evtl. liegt das Problem woanders?


    Bei so etwas hilft das Durch-Debuggen! Prüfen, ob der Speicheraufbau ist wie gedacht, und ob der Code das tut, was er sollte.

  • ja, ich hatte kurz auch etwas anderes in verdacht (auch vice 3.1) - aber kann natürlich auch normaler bedienungsfehler (oder so) meinerseits gewesen sein; zusätzlich bekam ich so merkwürdige 'label missing' fehler, also:


    erst variablen über mehrere zeilen erweitert (wie oben beschrieben = so wie es eigentlich sein/gehen soll)
    .text "string ..."
    .text "... erweitert" (etc)


    und dann sah ich weiter unten im code das statt ldx (LDX) sowas ähnliches wie "l+x" stand:
    also der buchstabe "l"
    + [petscii grafik-zeichen (ich nenne es mal eben) "KREUZ"]
    + buchstabe "x"


    und das n paar mal, anscheinend überall dort wo vorher "ldx" stand ....
    und als ich dort dann drauf/drüber ging und zwischen l und x wieder das d eintrug (also l+x korrigierte zu ldx) stand unten "label missing"...


    ich hab noch ein bisschen mit dem fehler gespielt und so aber letztendlich hab ich einfach mit der letzten abgespeicherten version neu angefangen - und seitdem funktioniert alles wieder bestens - auch variablen über mehrere reihen... keine ahnung was das für'n fehler war :-)


    weiter geht's... :-)