Assembler-Programme in Basic

Es gibt 84 Antworten in diesem Thema, welches 17.373 mal aufgerufen wurde. Der letzte Beitrag (31. März 2015 um 12:11) ist von BIF.

  • BIF:
    Stimmt, ich hatte es nicht getestet, da ich wenig Zeit gehabt hab und nur so - wie gesagt - schnell was herumgefrickelt hatte. Dabei hatte ich die Pokes verwechselt. Tja... besser immer noch mal testen, bevor man etwas veröffentlicht. :D

    Dunkel war's und die Milch ward sauer,
    Da legte sich die Wurst auf die Lauer,
    Und schubste den Käse von der Mauer.

  • Mike:

    Mein Programm funktioniert im Prinzip, allerdings muß man das a$ durch einen print-Code ersetzen, der den Bildschirmcode 96 = rts erzeugt:

    Code
    5 :a$=chr$(160):a=49152:
    10 :poke648,a/256:print"[home]"a$:poke648,4:
    11 :sysa:rem--aufruf


    Dein Programm ist offenbar ein Maschinencode, was man am sys erkennt.
    Was der macht, müßt ich mal testen.


    Schönen Gruß.

  • Mike:
    Hab ich mal versucht abzutippen, leider unterstützt meine Schmal-Tastatur nicht alle Zeichen, wie z.B. das Pfundzeichen, wie ich feststellen mußte.
    Hab gerade festgestellt, daß die Tasten woanders sind.

    Dafür hab ich mal Hexworx Code geladen, der im Interrupt die Rahmenfarbe flackern läßt.

    Schönen Gruß.

  • Mike:
    Ich hab´s abgetippt. Aber außer das String-printen macht das Programm leider noch nichts.
    Entweder ich hab einen Abtipp-Fehler oder es ist ein Fehler im Listing drin.
    Eine Download-Datei wär da auch nicht schlecht.
    Was macht denn das Programm?

    Schönen Gruß.

  • Mike:
    Da muß ich mal Fragen, ob das Zeichen in der ersten Zeile deines Listings ein Q ist ?
    Sieht zwar einem Q ähnlich, scheint es aber nicht zu sein ?

    Schönen Gruß.

  • Zitat von BIF

    Sieht zwar einem Q ähnlich, scheint es aber nicht zu sein?


    Ich kann jetzt zwar nicht wissen, wie die von dir verwendete Kombination aus Rechner, Betriebssystem, Browser und Bildschirmsichtgerät den Quellcode darstellt, es ist aber ein Q.

    Zitat

    Eine Download-Datei wär da auch nicht schlecht. Was macht denn das Programm?


    Also, bitte. Die paar Zeichen fehlerfrei einzugeben sollte doch nicht so schwer fallen.

    Es *könnte* im übrigen ja auch mit der Funktion zusammenhängen, daß die Zeile im Direktmodus eingegeben werden soll.

  • Also, ich hab´s bis jetzt nicht hinbekommen.
    Außer den String zu printen macht das Programm bislang noch nichts.
    Woran es liegt? Keine Ahnung.

    Schönen Gruß.

  • Mach' mal LIST. Vielleicht kommt dann zufällig was.

    Hab' den Screencode mal rangehängt. Kann man ja mal gebrauchen.

    Dateien

    Bitte melde dich an, um diesen Link zu sehen. Bitte melde dich an, um diesen Link zu sehen. Bitte melde dich an, um diesen Link zu sehen.

    Ex-TLI (The Level 99 Industries) & Ex-TNP (The New Patriots) & Ex-TEA (The East Agents) & ?

  • Hexworx:
    Ich hab das Programm runtergeladen und dann mit sys1024 ausgeführt.
    Ein List ergibt die Basiczeile 65535 und einige Pi´s .
    Das ist, was ich bislang feststellen konnte.
    Für weitere Aussagen müßte man wohl den MC-Code analysieren.

    Schönen Gruß.

  • Es ist im Grunde ganz simpel (korrigiere mich bitte jemand, falls ich die eine andere Aktion im ROM misinterpretiere):

    Code
    .C:0400  A9 01       LDA #$01    ; Basic-Startadresse
    .C:0402  A8          TAY         ; auf $0801 
    .C:0403  91 2B       STA ($2B),Y ; setzen und
    .C:0405  20 33 A5    JSR $A533   ; neue Zeile erzeugen.
    .C:0408  8A          TXA
    .C:0409  69 02       ADC #$02    ; Adresse für nächste
    .C:040b  85 2D       STA $2D     ; Zeile bzw. Variablen
    .C:040d  A5 23       LDA $23     ; ermitteln
    .C:040f  20 55 A6    JSR $A655   ; und setzen.
    .C:0412  4C 74 A4    JMP $A474   ; "READY."

    Alles was dieser kleine Code tut, ist eine leere Basiczeile zu erzeugen. Mehr nicht:

    Code
    >C:0800  00 07 08 00  00 00

    Dunkel war's und die Milch ward sauer,
    Da legte sich die Wurst auf die Lauer,
    Und schubste den Käse von der Mauer.

  • Zitat von Metalmorphosis

    Alles was dieser kleine Code tut, ist eine leere Basiczeile zu erzeugen. Mehr nicht:


    Nö.

    Zitat von Hexworx

    old.prg


    :zaunpfahl: :zaunpfahl: :zaunpfahl:

  • das ist ein UNnew und daher auch sinnig als screencode natuerlich.

    Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen.

  • Zitat von »Hexworx«
    old.prg

    Ach, ich hatte mich schon über den Dateinamen gewundert. Alles klar!


    Quatsch. Das ist nur 'ne alte Datei :D .

    Bitte melde dich an, um diesen Link zu sehen. Bitte melde dich an, um diesen Link zu sehen. Bitte melde dich an, um diesen Link zu sehen.

    Ex-TLI (The Level 99 Industries) & Ex-TNP (The New Patriots) & Ex-TEA (The East Agents) & ?

  • Äh, ja, ohne Erklärung nicht unbedingt einfach zu durchschauen.

    Ich hatte früher einmal ein Programm, daß AUTOOLD hieß, ich glaub, daß konnte man mit ,8,1 laden und hat dann ein gelöschtes Basic-PRG wiederhergestellt.

    In Basic gibt es da glaub ich auch einen Einzeiler, der mit dem BIND-Systemprogramm arbeitet.
    Wenn man das ein wenig modifiziert kann man auch die Endadresse eines Basic-Programms ermitteln.


    Schönen Gruß.

  • Zitat von BIF

    Äh, ja, ohne Erklärung nicht unbedingt einfach zu durchschauen.


    Eingeben des Einzeilers mit PRINT und SYS: 1 Minute.

    Sich wundern, warum "nichts" passiert: 10 Sekunden.

    (Falls im Emulator ausprobiert:) Start des Monitors und disassemblieren des Codes ab $0400: 50 Sekunden.

    Nachschlagen dreier Aufrufe in das BASIC-ROM, z.B. in AAY64: 3 Minuten.

    Nach spätestens 5 Minuten hat man schlimmstenfalls raus, was das Programm macht. Wenn man weiß, wo man suchen muß.

    Ich könnte dazu jetzt noch sagen, daß es vielen hier bei deinen Programmen ähnlich geht, aber:

    1. sind deine Programme meistens eh unnütz, was dann glücklicherweise denjenigen die Arbeit des Nachvollziehens erspart, die es könnten,

    und

    2. hast Du dich ohnehin nur doof gestellt.


    ...


    Ich warte immer noch auf deine Implementierung eines Direkt-Assemblers in BASIC.

  • Das String-Additionsverfahren ist zur Programmierung von Maschinencode wohl am schnellsten und einfachsten umzusetzen,auch wenn man hier nicht die orginal Assembler-Befehle hat.

    Selbst einfügen von Modulen und befehlsweise Kommentierung ist damit machbar.

    10 :a$=a$+gs$+chr$(.)+chr$(1):rem: sys 256

    Schönen Gruß.

  • 10 :a$=a$+gs$+chr$(.)+chr$(1):rem: sys 256


    Hab's grad mal eingegeben. Da passiert gar nix ?( .

    Bitte melde dich an, um diesen Link zu sehen. Bitte melde dich an, um diesen Link zu sehen. Bitte melde dich an, um diesen Link zu sehen.

    Ex-TLI (The Level 99 Industries) & Ex-TNP (The New Patriots) & Ex-TEA (The East Agents) & ?