Forum: PC-Programmierung Bin-Datei vom Z80 umwandeln in eine Data-Zeile


von Peter B. (funkheld)


Lesenswert?

Hallo, guten Tag.
Ich habe eine reine Bin-Datei von einer ASM für den Z80.

Die soll jetzt so umgewandelt werden :
DATA 0000002A01001157001922

Eingelesen wird sie dann so:
READ code$,check$

Das ist dann das umwandeln:
20 Datazeilen werden hier umgewandelt
-----------------------------
1450 FOR i%=1 TO 20
1460 READ code$
1470 FOR j%=1 TO 21 STEP 2
1480 byte%=VAL("&H"+MID$(code$,j%,2))
1490 POKE address%,byte%
1500 address%=address%+1
1510 NEXT
1520 NEXT
-------------------------------

Wie heisst bitte das Umwandelprogramm für die Data.

Danke.
GRuss

: Bearbeitet durch User
von Einer (Gast)


Lesenswert?

Es gibt nicht nur ein BASIC.
Stringkonstanten in data müssen in Anführungszeichen.

Siehe Beispiele
http://www.antonis.de/qbebooks/gwbasman/read.html

von Chregu (Gast)


Lesenswert?

Hex-Editor

von Theor (Gast)


Lesenswert?

Unter dem Stichwort "bin2hex" wirst Du vermutlich ein (fast) passendes 
Programm finden.
Vermutlich wirst Du die Datei mit den Hex-Zahlen noch nachbearbeiten 
müssen; etwa Leerzeichen entfernen.

Beitrag #6381371 wurde von einem Moderator gelöscht.
von Εrnst B. (ernst)


Lesenswert?

Lösung mit Unix-Hausmitteln:
1
hexdump -v -e '"DATA " 20/1 "%02X" "\n" ' test.bin

ergibt
1
DATA 68747470733A2F2F7777772E6D696B726F636F6E
2
DATA 74726F6C6C65722E6E65742F746F7069632F3530
3
DATA 323131370A0A140A87DBC7CB71E4E38E93CFC7F1
4
DATA 7E6FEB10DA30C5D77CF763A5141B110EADE42E13
5
DATA 594676C4AA63641F8045D685378A92D925E5C00A
6
DATA 8BE4B52425974FB8B70AACE796F36829C39E736D
7
...

von Yalu X. (yalu) (Moderator)


Lesenswert?

Peter B. schrieb:
> Wie heisst bitte das Umwandelprogramm für die Data.

Es heißt PETERSDATAUMWANDELPROGRAMM.BAS ;-)

Exakt das von dir Gesuchte (mit Zeilennummer, DATA-Schlüsselwort und
Prüfsumme) gibt es wahrscheinlich noch nicht, aber als erfahrener
Basic-Programmier schreibst du so etwas in wenigen Minuten selber.

von Schlaumaier (Gast)


Lesenswert?

So was was du suchst nennt man RE-Compiler.

Der Nachteil dieser Teile ist, das sie nur für/(eher gegen)  ein 
speziellen Compiler arbeiten.

Einfach gesagt :  Exe/hex Code erstellt mit QBasic // Re-Compiliert mit 
einen Qbasic Recompiler.

Und um die Sache noch schlimmer zu machen, verschlüsseln Compiler ihren 
Code so das dies nicht /oder kaum möglich ist.  Und Dokumentation wie 
der Compiler arbeitet sind eh Firmengeheimnisse die rückt keine Firma 
raus. Im Gegenteil sie steuern sogar gegen.

Davon abgesehen verstößt dein Vorhaben vermutlich gegen das 
AGB/Urheberrecht . Denn in jeden Lizenzbedingungen die ich bisher 
gelesen habe steht eine Klausel die Re-Compilieren verbietet.

Und das ist auch RICHTIG so. Ich mag es nämlich auch nicht, wenn 
jemand Routinen an den ich ne Woche gearbeitet habe, einfach kopiert 
oder einfach gesagt KLAUT. Das finde ich nämlich schlimmer als wenn er 
das ganze Programm illegal nutzt. Da hätte ich wenigstens noch Werbung 
für mein Werk.

Beitrag #6381433 wurde von einem Moderator gelöscht.
von Schlaumaier (Gast)


Lesenswert?

Datazeilen sind nix anderen wie DATA(en). Eine Methode mit der man vor 
40 Jahren Hex-Programme die auf Papier gedruckt wurden, in den Comupter 
übertragen wurden. (C=64 Listings waren dafür berühmt)

Wenn er eine reine HEX hat, und die in den Computer POKEN will, macht 
man das nicht mit Data-Zeilen sondern mit ein Serial-Read.  Lese Bytes, 
setze es an Speicherstelle xx, und nehme das nächste.

Data-Zeilen müllen ein Code nur unnütz auf.

Beitrag #6381471 wurde von einem Moderator gelöscht.
Beitrag #6381488 wurde von einem Moderator gelöscht.
von Schlaumaier (Gast)


Lesenswert?

HuelfreichSeiDerMenschUndGut schrieb im Beitrag #6381471:
> Wo soll denn da "Serial" etwas herkommen.

Peter B. schrieb:
> Ich habe eine reine Bin-Datei von einer ASM für den Z80.

ER hat sie ja.  Und dann ist es ja wohl völlig wurst oder er daraus 
data-Zeilen macht oder sie Serial (d.h. byte für byte) einliest. Was das 
Prg. ja eh macht.

adresse = 16233 'startadresse des Speichers
open "komische_hex.bin" for input #1
Do while not EOF(#1)
  E$ = imput #1,(1) ' liest das nächste Bytes aus den String
  adresse = adresse + 1
  poke addresse, asc(e$)
loop
close #1

Mann ich hab so alten Code schon seit 40 Jahren nicht mehr geschrieben, 
sorry wenn Befehle nicht die richtige Syntax haben, weil das ist uralter 
Basic Code. Das selbe ist aber auch mit VB möglich. Da sind nur die 
Syntax anders.

Davon mal ganz abgesehen. Wenn man den Code oben erweitert , schreibt 
das Programm sogar sich selbst. z.b. so.


data_nr = 0 : Data_text$ = ""
adresse = 16233 'startadresse des Speichers

open "komische_hex.bin" for input #1
open "neues_prg.bas" for output #2

Do while not EOF(#1)
  e$ = imput #1,(1) ' liest das nächste Bytes aus den String
  adresse = adresse + 1
  poke addresse, asc(e$)
  data_nr = data_nr + 1
  if data_nr >8 then
    data_text$ = data_text$ + chr(10)+ chr(13)
    print #2, data_text$
    data_text$  ="DATA " + asc(e$)
  else
    data_text$ = data_text$ "," + asc(e$)
  end if
loop
close #1
close #2

Falls Zeilen-Nr. erwünscht sind, muss man diese noch dazu tun.

Und mit ein paar Zeilen extra, kann man sogar den Bootloader für die 
data-zeilen davor schreiben. ;)

Wieso muss man die Welt immer so kompliziert machen.

von Peter B. (funkheld)


Lesenswert?

Danke für die Hilfe.

Ich habe mal etwas in Basic programmiert aus den Befehlen die ich oben 
gesehen habe mit Open...
Ein Teil funktioniert schon.

Gruss

von NichtZuFassen (Gast)


Lesenswert?

Peter B. schrieb:
> Danke für die Hilfe.
>
> Ich habe mal etwas in Basic programmiert aus den Befehlen die ich oben
> gesehen habe mit Open...
> Ein Teil funktioniert schon.
>
> Gruss

ja zeig halt mal her, vielleicht taugt's was und noch jemand kann's 
gebrauchen

von Schlaumaier (Gast)


Lesenswert?

Peter B. schrieb:
> Danke für die Hilfe.
>
> Ich habe mal etwas in Basic programmiert aus den Befehlen die ich oben
> gesehen habe mit Open...
> Ein Teil funktioniert schon.
>
> Gruss

Freut mich das der Code dir hilft. Du musst ihn natürlich auf das 
Basic-System was du benutzt anpassen. Wenn du ihn in Visual-Basic 
schreibst ist die Anpassung etwas schwerer. Aber auch nicht wirklich ein 
Problem.

Der Code von mir ist eher QBasic. Also uralter Stil. Fakt ist aber, 
abgepasst funktioniert er in jeden Code-System was Festplattenzugriff 
hat.

Sag mal dein Entwicklungs-System.

von Joachim B. (jar)


Lesenswert?

Theor schrieb:
> Vermutlich wirst Du die Datei mit den Hex-Zahlen noch nachbearbeiten
> müssen; etwa Leerzeichen entfernen.

oder ", 0x" einsetzen müssen

je nach dem

http://www.byteme.org.uk/2014/02/07/a-z80-assembler-in-c-with-ide/

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.