Hallo Besucher, der Thread wurde 3,9k mal aufgerufen und enthält 16 Antworten

letzter Beitrag von enthusi am

anfänger: wie speicherinhalte in $HEX auf den bildschirm bringen? (über rom-routinen, ohne irgendwelche umwandlung)

  • titel sagt alles, oder?


    wie speicherinhalte in $HEX auf den bildschirm bringen? (über rom-routinen, ohne irgendwelche umwandlung)


    ich kann strings von $0100 in ascii konvertieren und auf den bildschirm bringen über "strout" ($ab1e)
    aber wie kann ich mir $hex daten anzeigen lassen - NICHT konvertiert, also NICHT aus '$13' 'return' machen sondern '13' ausgeben - weiss das jemand?
    ist wahrscheinlich auch etwas ganz einfaches...


    geht das vielleicht mit "chrout/bsout" $ffd2 ?
    ich bin da gerade ziemlich überfragt und stöbere noch weiter hier im forum - aber irgendwie komme ich nicht so richtig weiter - könnte mal jemand helfen bitte? DANKE!

  • Grundsätzliches Vorgehen: Jede (1-Byte)-Hexzahl besteht ja fest aus zwei Zeichen.
    Dabei sind oberes und untreres Nibble je ein Zeichen. Das kann man ausnutzen:
    Speichere dein Byte zwischen.
    Maskiere unteres Nibble.
    Addiere $30 (und somit hast Du ein Zeichen von 0-x, wobei alles jenseits der 9 noch fehlerhaft wird.
    Vergleiche ob das Ergebnis größer als $39 ist. Wenn ja:
    Addiere $07, und du hast ein A-F
    Speichere dein Ergebnis zwischen.


    Wiederhole den Schritt für das obere Nibble (aus dem Zwischenspeicher neu einlesen), in dem Du es vier mal nach rechts shiftest und dann die oberen Schritte anwendest.


    Nun gib zuerst das obere Nibblechar, dann das untere Nibblechar aus. Fertig.

  • danke ogd, aber diese routinen äh, warum muss das so kompliziert gemacht werden?
    kann ich nicht meine 5 bytes einfach in einen string kopieren und von dort aus auf den screen printen?


    Code
    1. ; zum beispiel die 5 bytes von
    2. ; $b1a5 Konstante MFLPT-Darstellung von -32768
    3. ; - da musst ich ja nichts rechnen, das steht ja im speicher,
    4. ; nur wie bekomme ich das auf den screen?
  • ja es geht auch ums debuggen - ich sehe alle meine ergebnisse geordnet auf dem c64 screen aber eben NICHT in hex - könnte man die mal eben einfach mit den ergebnissen ausgeben würde ich das lieber tun als jedesmal den monitor anwerfen, die adressen absuchen etc etc aber


    @ bladerunner
    du hast schon recht, das muss 1. alles umgewandelt werden und 2. auch so wie du sagtest...
    gut, dann mache ich dort morgen weiter :-)


    DANKE!

  • ja es geht auch ums debuggen - ich sehe alle meine ergebnisse geordnet auf dem c64 screen aber eben NICHT in hex - könnte man die mal eben einfach mit den ergebnissen ausgeben würde ich das lieber tun als jedesmal den monitor anwerfen, die adressen absuchen etc etc aber


    @ bladerunner
    du hast schon recht, das muss 1. alles umgewandelt werden und 2. auch so wie du sagtest...
    gut, dann mache ich dort morgen weiter :-)


    DANKE!

    Naja, wenn Du eh ne Ausgaberoutine hast, kannst Du dort

    • ne Umwandlungroutiene einbauen, die hier schon gepostet wurde

    oder

    • oder alles fein säuberlich hinteinander im Speicher ablegen, und die Stelle auf einen Blick im MS-Monitor anscheuen.
  • Ich habe hier mal einen coolen Trick gesehen, da hat sich einer einen eigenen Zeichensatz gebastelt, der ja ebenfalls aus 256 Zeichen besteht und somit Platz fuer saemtliche 8-bit-Werte beinhaltet. Das heisst Du erstellst ein Zeichen fuer "00", eins fuer "01" usw. bis "FF", somit musst Du nur noch das Byte in den Bildschirmspeicher schreiben. Einziger Nachteil: Du musst dann halt entsprechend den Zeichensatz wechseln. Wenn Du aber z.B. die oberste oder unterste Zeile als Debug-Zeile nimmst, kannst Du das vielleicht je nach Projekt verschmerzen. Denkbar waere ja auch das an- und ausschaltbar zu machen per Tastendruck usw.


    EDIT: Oder Du machst Dir generell einen Hotkey mit dem Du den Zeichensatz fuer den kompletten Bildschirm hin- und herwechseln kannst zwischen dem, was Dein Programm/Spiel normalerweise benoetigt, und dem Hex-Zeichensatz. Somit kannst Du die Werte an jede beliebige Stelle auf dem Bildschirm schreiben und bei Bedarf mal kurz umswitchen um zu sehen, welche Werte da stehen.


    Zur Verdeutlichung ein Beispiel, wie dieser Zeichensatz aufgebaut ist:

  • Hatte grade ein wenig Muse und hab was hingebastelt:
    Oben erstmal ein kleines Beispiel in Basic, für den unteren Code.

    Code: test.bas
    1. 10 print chr$(147);
    2. 20 for i=0to20
    3. 30 sys49236,i*127
    4. 35 print
    5. 40 next


    Hier dann die kleinen Helferlein, mäßig dokumentiert, nicht optimiert, nicht sehr sauber, aber es läuft.
    HEEK (49152, c000) gibt den Hexwert des Datums an ADRESSE aus.


    HEXWORD_BE (49174, c016) gibt eine 16-Bit Integer an ADRESSE aus, im Big Endian Format (HHLL)
    HEXWORD_LE (49205, c035) tut selbiges, aber little Endian (LLHH)


    HEXADR (49236, c054) gibt den übergebenen Ausdruck als 16-Bit- big endian aus.


    DOLLAROUT gibt das führende '$' aus.


    BYTEOUT ist die Routine die ein Byte in die HEX-Darstellung wandelt und per CHROUT ausgibt.


    Die Routinen sind samt und sonders auch ohne den SYS-Aufruf machbar, dafür ist das Label in der Routine gedacht (zB WORD_BEOUT) - dann muss der Nutzer allerdings die ZP-Adressen $14/15 bzw. Akku und Y Register vorfüllen.


    Hoffe das hilft.

  • e2020: Hast du ein Sprite frei, was man missbrauchen kann? Ich hatte mir was gebastelt, wo man in ein "Info-Sprite" 3 Werte à max. 24 Byte ($xxx) anzeigen kann. Müsste ich nur etwas aus dem jetzigen Code extrahieren.

  • Yay, eine Compo! :D


  • @ ZeHa
    genial! :-) das merk ich mir! hab gleich verstanden was du meintest... kannste dich erinnern wo/wer/was/welche software das war? rockmon vielleicht, wo man noten über'n ganzen screen in hex eingeben musste? da hätte so eine lösung gepasst... ach und liegt dieser spezielle zeichensatz irgendwo im netz? damit könnte man echt mal rumspielen...
    (sollte ich mal bedarf haben mache ich mir den zur not mal selber)


    @ BladeRunner
    wow, DANKE! das ist VOLL hilfreich :-) - vor allen dingen die umwandlung für pc könnte interessant sein - also: das werde ich mir jetzt erstmal gleich genauer angucken... durch die zufällig passende zusätzliche ausgabe im pc-format scheint mir dein lösungsvorschlag etwas interessanter zu sein, egal ob sauber gecoded oder nicht (ehrlich gesagt kann ich qualitätsunterschiede im code noch nicht richtig bemerken/unterscheiden - ausser vielleicht über die länge des listings) - aber schritt für schritt erklären (können) muss ich mir das gleich erstmal alles...


    @ Hexworx
    ah, über einen sprite = auch gute idee! vor allen dingen könnte man die auch im border anzeigen wenn der screen voll ist... ABER man muesste ja trotzdem eine hex-umwandlung (wie von bladerunner und mac bacon gecoded) vornehmen um dann über den sprite anzeigen zu können, oder? (kann der vic in sprites irgendwie automatisch $hex anzeigen? ich denke nicht, oder?) hätte man diesen von zeha angeprochenen zeichensatz könnte man das vielleicht ziemlich schnell umsetzen und punktuell anzeigen - gute idee :-)


    @ Mac Bacon
    BESTEN DANK! :-) hatte diesen code mittlerweile auch an anderer stelle (hier im forum) gesehen (und sogar noch einen ähnlichen zu einem anderen ähnlichen thema, den aber nicht verstanden) - jetzt muss ich mir mal deinen vorschlag genauer angucken und mit bladerunners vergleichen und ein bisschen herumspielen - mal sehen was/ob/wie ich das nun mache...

  • @ ZeHa
    genial! das merk ich mir! hab gleich verstanden was du meintest... kannste dich erinnern wo/wer/was/welche software das war? rockmon vielleicht, wo man noten über'n ganzen screen in hex eingeben musste? da hätte so eine lösung gepasst... ach und liegt dieser spezielle zeichensatz irgendwo im netz? damit könnte man echt mal rumspielen...
    (sollte ich mal bedarf haben mache ich mir den zur not mal selber)

    Hier habe ich das mal vorgestellt, weil ich das fuer Caren so mache ;-)
    Caren and the Tangled Tentacles, enthusi & veto