Bin-Datei vom Z80 umwandeln in eine Data-Zeile

OP #6381308
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
Beitrag #6381371 wurde von einem Moderator gelöscht.
#6381375
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
...
Gast #6381394
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.
Gast #6381447
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.
Gast #6381498
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.
Gast #6382787
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren