Hallo Besucher, der Thread wurde 2,6k mal aufgerufen und enthält 17 Antworten

letzter Beitrag von Bytebreaker am

Python Data Liner kurz vorgestellt

  • Ich möchte denen, die es interessieren könnte, den Python Dataliner von mir kurz vorstellen.


    - In Windows Kommandozeile zu verwenden
    - Python.exe sollte in der Path-Umgebungsvariable stehen


    Syntax:



    python dataliner.py programm.prg data.txt 9000


    programm.prg = die in DATAS zu zerlegende Binärdatei (ggf. "/"-getrennte Pfadangabe voranstellen, z.B. z:/dateien/programm.prg)
    Das PRG muss ein C64 Assemblerprogramm ohne Basic-Header sein, welches in den ersten zwei Bytes die Startaddresse enthält.


    data.txt = Die zu erstellende Textdatei mit fertigen DATAs ((ggf. "/"-getrennte Pfadangabe voranstellen, z.B. z:/dateien/data.txt)
    9000 = Beginn der DATA-Zeilennummern. Es wird in 1er Schritten hochgezählt


    Es wird im ausführenden Verzeichnis eine temporäre Datei output.txt angelegt und nach Gebrauch wieder gelöscht. Sie enthält das Ergebnis der Wandlung von Binär-Bytes nach dezimale ASCII-Zeichen.


    Die zu scannende Binärdatei muss mindestens 19 Bytes groß sein. Die DATAs werden zu je 16 in eine DATA-Zeile gepackt.
    Die Addressbytes ganz am Anfang werden nicht in die DATAs übernommen.
    Es wird aber dem Anwender ausgegeben wo das Programm normalerweise am C64 starten würde und wie man seine For Next Einleseschleife dann in C64 Basic setzen muss.
    Der DATA-Rest < 16 Werte wird momentan als eine DATA-Zeile pro Wert genieriert. Diese kosmetische Sache behebe ich später noch. Natürlich wird sich auch der Code optimieren lassen.


    P.S.: Das xeyes-Programm kann man mit sys 49152 starten. In VICE Alt-Q nicht vergessen um die Maus zu aktivieren.


    P.S. 2: Ich dachte ich antworte hier auf meinen vorherigen Thread zum Thema "Hilfe! Poken von Opcodes ins RAM führt zu nichts". Der neue Thread ist ein Versehen, ein Mod kann gerne diesen Eintrag zusammenführen, wenn möglich.

  • Zitat von oobdoo

    Wofür braucht man heute noch Datazeilen?

    Wofür beschäftigt man sich heute noch mit dem C64. Oder gar dem CPC? ;-)


    Edit:
    Es war hauptsächlich eine Programmierübung für Python. Ich hätte es auch in C64 Basic oder Assembler machen können. Als Basic-Coder nutze ich außerdem gern Assembler-Schnipsel aus Basic heraus um Dinge schneller zu erreichen, z.B. Linien ziehen auf einer HiRes Bitmap und die Parameterübergabe kommt über Basic.

  • Den Dataliner gibt es jetzt auch als 32 Bit Kommandozeilen-exe für Windows, ohne dass man dazu Python installiert haben muss.


    Einfach entpacken und dafür sorgen, dass der Ordner mit der dataliner.exe und den 2 Zusatzdateien in der Windows Path-Variable registriert ist. Dann kann man dataliner.exe von jedem Ort im Dateisystem aus per Kommandozeile aufrufen.


    Dataliner Downloadlink


    Der Dataliner frisst alle Binaries, auch Word-Dateien. Hab es spaßeshalber mal probiert. ^^

  • Zitat von Kongo-Otto

    Aber warum muss die Datei mindestens 19 Byte groß sein?


    Das liegt an der Art, wie ich den Datenstrom in je 16 kommagetrennte DATA-Werte pro Zeile aufteile.


    Das Skript setzt zwingend voraus, dass es von Anfang an ab jeder 16. Stelle etwas zu trennen gibt und will mindestens einmal eine zweite Zeile mit mindestens einem Wert geschrieben haben. Das wären 16+1=17. 19, weil das Skript immer die ersten 2 Bytes des Datenstroms herausrechnet, weil unterstellt wird, dass dort die Ladeadresse steht, die man in der DATA-Zeile ja nicht braucht. Das Skript will also haben, dass unter Abzug von 2 Bytes mindestens 17 übrig sind, 16 für die erste Zeile und mindestens 1 Wert für die zweite. Heißt in Summe 19 Bytes. Das Skript fragt vorher die Dateigröße ab und meckert auch, wenn man zu wenig Parameter übergibt.


    Sicherlich kann man auch so programmieren, dass nur Programme ab 3 Bytes Größe verarbeitet werden. Auch die allerletzten DATAs, die nicht mit 16 aufgehen, stehen als Einzelwerte untereinander statt in einer Zeile. Auch das geht schöner.


    Für meinen persönlichen Hausgebrauch reicht es aber und es arbeitet korrekt. Sogar mit einer 7 MB großen Excel-Datei. Da hat er dann eben ein 38 MB großes Textfile erzeugt.


    Diese beiden Themen (Datei-Mindestgröße und letzte Datazeile schön machen) sind auf jeden Fall ein Thema für einen Regentag wo ich Stoff zum Knobeln haben will. Wenn es eine neue Version geben sollte, lade ich sie hier hoch.

  • So, kleines Update:


    In Eintrag 5 findet ihr unter dem bestehenden Link die aktualisierte Version des Dataliners als pyhon-unabhängige Windows-Exe. Allerdings muss das zu data-isierende PRG nach wie vor entweder im gleichen Ordner vorliegen in dem die Exe mit den 2 Zusatzdateien ist oder der Order mit dem Dataliner ist in der Windows Path Variable registriert.


    Die jetzige Version schreibt bis zum Ende Datas hintereinander und bricht in jeder Zeile vor dem 80. Zeichen um, auch die letzten 1 bis 16 Werte.
    Außerdem wurde ein kleiner Bug in der Hexdarstellung entfernt bei Ladeadressen < $1000. Die Mindestgröße bleibt 19 Bytes. Für 19 bytes und weniger brauche ich keinen DATA-Konverter.


    Die Python-Skriptversion hänge ich hier spaßeshalber an. Ich benutze selbst aber nur noch die Windows-exe.

  • Es klappt sogar, echte Basic-Programme die ab $0801 starten, in DATAs zu wandeln und dann nach Copy Paste in VICE mit einer Poke-Schleife ab 2049 zu laden und zu starten. Im Basic-Speicher steht dann das Listing.

    Vorsicht, danach zeigt der Zeiger auf das Programmende immer noch hinter die DATAs. Zur Laufzeit des Programms hätte man also deutlich weniger freien Speicher, und bei einem SAVE würde der Rest der nun unbenutzten (und unsichtbaren) DATAs ebenfalls mit abgespeichert. Nur so zur Info. ;)

  • Das Programm läuft unter Python2, richtig? Ich hab Python 3 installiert, da ist leider die Syntax der print-Funktion anders.


    Code
    1. File "dataliner.py", line 20
    2. print "Bitte alle Argumente vollstaendig angeben:"
    3. ^
    4. SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Bitte alle Argumente vollstaendig angeben:")?
  • Ich habe mal schnell eine Python3-Version von dataliner gebastelt, anbei. Fast hätte ich es geschafft dass die Version unter beiden Pythonversionen läuft, aber leider funktioniert das ord() in Python 3 nicht mit Nullbytes, darum musste ich die Umwandlung nach int mit der Funktion int.from_bytes(...) machen, die es nur in Python 3 gibt.

  • @atomcode


    Ich nutze bisher acme (und sehr wenig ca65). Hätte ich C64 Studio in Benutzung und DATA Support wäre eingebaut, wäre ich wohl nie auf die Idee gekommen diese Python-Übung zu machen.


    Möglichkeiten, DATA zu generieren gibt es ja wie Sand am Meer.


    Es geht ja nicht immer nur darum etwas zu machen was es vorher nicht gab sondern man lebt sein Hobby aus und macht als Nebeneffekt etwas das sich sogar benutzen lässt.

  • Hier


    Basic und Maschinensprache mit C64 Studio


    Heißt es:



    Zitat von Endurion

    C64Studio kann in einem Projekt beliebige Files verwalten; kompiliert werden kann davon aber jeweils immer nur ein Hauptfile; sonst das aktuell fokussierte.


    Bezüglich Data-Zeilen. (Leider nur) über das Menü kannst du einen Binär-Editor aufmachen: File->New->Binary Editor. Dort kannst du binäre Dateien öffnen bzw. in verschiedene Formate umwandeln. Auf dem zweiten Reiter kannst du mit To/From BASIC oder ASM in die jeweilige Richtung im- bzw. exportieren. Ist alles etwas rudimentär, die BASIC-Unterstützung ist bei weitem nicht so ausgereift wie die Assembler-Unterstützung.


    Dieser Stand ist 4 Jahre alt da hat sich sicher was getan.


    Wobei laut Entwickler-Website


    http://www.georg-rottensteiner.de/de/index.html


    ist in der Feature-Liste bis nicht von Basic DATA die Rede. Ist ja auch mehr was für Assemblanten das Ganze. ;-)

  • Ich hab keine Ahnung, ob das Studio das kann, sondern nur mit einem Ohr was davon mitbekommen. Da ich aber angefangen habe, damit zu arbeiten (und die Editoren für mich anzupassen), würde ich wahrscheinlich einen etwaigen darin eingebauten Data-Zeilen-Generator nutzen, sofern ich ihn bräuchte. Darum meine ernst gemeinte Frage. Ich meinte es nicht so, dass dein Programm überflüssig sein könnte.


    Möglichkeiten, DATA zu generieren gibt es ja wie Sand am Meer.

    Wusste ich auch nicht, weil ich es bis jetzt noch nicht gebraucht hatte. Aber sollte das mal der Fall sein, und das Studio könnte es nicht, benutze ich halt deines und sage danke. ;)


    Es geht ja nicht immer nur darum etwas zu machen was es vorher nicht gab sondern man lebt sein Hobby aus und macht als Nebeneffekt etwas das sich sogar benutzen lässt.

    Das stimmt. Ich bin immer froh über jeden neuen Beitrag, der die Szene belebt und unterstützt. Man darf auch nicht vergessen, dass das Studio nur für Windoof ist. Wenn man etwas selbst macht, hat das neben dem Übungseffekt auch den Vorteil, dass man es nach eigenen Vorstellungen verändern und erweitern kann. Eines der umfangreichsten Projekte, auf das dies zu trifft, ist ReactOS.

  • @atomcode


    Danke für dein Feedback. Ich möchte Dich dann aber bitten die Skript-Version aus Eintrag 8 dieses Threads zu nehmen oder die aktualisierte Standalone-Exe in Eintrag 5.


    Hier werden die letzten 1-16 Datas des Streams nämlich ordentlich in eine Zeile gepackt statt jeweils 1 Wert pro Data-Zeile. Außerdem ist ein Bug in der ausgegeben Hex-Darstellung behoben bei Ladeaddressen < $1000.


    Diese Version ist zudem noch nicht nach Python 3 übersetzt und es wäre mir eine Ehre wenn du kurz prüfen würdest ob das Umbauen der letzten Data-Zeile Python-3 konform ist und diesen Abschnitt ggf. anpasst.


    Edit:


    Wenn du magst nehme ich dann die finalen py2, py3 und Standalone Versionen, lade sie auf csdb und packe Dich in die Credits.