www.mikrocontroller.net

Forum: PC-Programmierung DOS Programm Variabeln Watch

Autor: Andreas B. (Gast)
Datum: 25.06.2006 16:02

Ich habe hier ein altes DOS Programm das ein spezielles Diskettenformat
lesen und schreiben kann. Ich möchte ein eigenes Programm schreiben das
dieses Format ebenfalls lesen kann, die Software die ich habe ist nicht
wirklich zu gebrauchen und wird nicht mehr weiterentwickelt.
Ich suche jetzt eine Möglichkeit zur Laufzeit herauszufinden was das
Programm macht, also vor allem welche Daten eingelesen werden.
Gibt es ein Programm das wie ein Debugger die Werte die geschrieben /
gelesen werden anzeigt?
Das ganze ist wie gesagt eine DOS Anwendung, also 16Bit. Wird daher
unter Windows XP emuliert.

bin dankbar für jeden Tipp... Decompilieren habe ich schon versucht,
jedoch ist das Programm ziemlich gross, und ich will nur die
Diskettenzugriffe haben...

mfg Andreas
Autor: Wolfram (Gast)
Datum: 26.06.2006 09:28

Wenn es nicht mehr weiterentwickelt wird , probier doch mal mit dem
Autor Kontakt aufzunehmen. Da wirst du merken ob er den Programmcode
rausrückt oder Dir Hinweise gibt oder was er davon hält wenn du sein
Programm auseinandernimmst.
Zum auseinandernehmen, disassemblieren ist ohne erlaubnis absolut
illegal. Genauso wie das suchen von Diskettenzugriffen per Interrupt
oder Zugriffe auf die Diskettenports.
Grauzone wäre , wenn du dich mit einem Interrupthandler an den
Disketteninterrupt hängst oder mit Hardware an den Diskettenbus.
Dies alles, wird dich aber wesentlich mehr Zeit kosten, als wenn du
probierst die Disketten auszulesen und ihr Format zu erkennen.
Möglicherweise bekommst du das mit Linux oder rawrite hin. Zur Not
musst du dich mit dem Diskettencontroller auseinandersetzen.
Die Frage die sich stellt ist, wenn die Software so alt ist und auch
nicht wirklich zu gebrauchen ist, warum willst du dann diese Daten
einlesen?
Autor: Andreas B. (Gast)
Datum: 26.06.2006 11:11

Ich glaube ich habe das Problem umgangen, das Programm braucht ein
Dongle das es läuft, und unter Windows XP wurde der Dongle nicht
erkannt, aber ich habe gemerkt das das Programm das die Dateien
schriebt / liest auch ohne Dongle läuft...
Aber noch zu deinen Fragen...
>Die Frage die sich stellt ist, wenn die Software so alt ist und auch
>nicht wirklich zu gebrauchen ist, warum willst du dann diese Daten
>einlesen?
Weil es hier um eine alte Maschine geht, die in dem Format schreibt,
und diese Maschine funktioniert noch...
Und das Problem beim Format waren die Adressen, es gibt ein Index, und
die Dateien, die finde ich, aber den Zusammenhang fand ich nicht.
Wenn man das ganze auf einem Diagramm aufzeichnet gibts eine gezackte
Linie, also nichts lineares...

mfg Andreas
Autor: Wolfram (Gast)
Datum: 26.06.2006 12:55

>Weil es hier um eine alte Maschine geht, die in dem Format schreibt,
>und diese Maschine funktioniert noch
wie alt?
ist es überhaupt eine Dos-Maschine oder was anderes? (CP/M...)
was meinst du mit Format?
Das Hardwareformat der Diskette (xxSpuren,YY sektoren etc.)
oder das des darüberliegenden Dateisystems?
In welcher Form kommst du an die Dateien heran und könntest du damit
was anfangen?
Es gibt da ja auch noch andere Kommunikationswege als Disketten, z.B.
serielle Schnittstellen...
Was ist sonst noch an Programmiersoftware auf dem Rechner vorhanden?
Autor: Andreas B. (Gast)
Datum: 26.06.2006 13:10

Das Alter müsste zwischen 10 und 15 Jahren sein.
Unter was für einem OS diese Maschiene läuft weiss ich nicht wirklich,
wir hatten zwei verschiedene Spezialisten da (Schulung und so) der eine
Sagte es sein ein Unix und der andere sagte Multitasking DOS.
Die Disketten sind normal beschrieben, also das Problem ist das
Dateisytem. Die Dateien sind normal als ASCII abgelegt, es hat ein
Index, dort stehen die Namen, Typ (Programm, Unterprogramm...) und eine
Adresse drin.
Jedoch kann ich die Adresse nicht der Datei zuordnen. Da gibt es irgend
eine Berechnung dazwischen, die fehlt mir...
Serielle Schnittstelle hat die Maschine (etwa 20 Stück... funktioniert
alles über Serielle Schnittstellen) es wäre auch möglich so Daten
auszutauschen, aber ich möchte nicht einen PC gleich neben die Maschine
stellen, und es müsste trozdem fast alles auf Disketten gespeichert
werden, die Maschine hat einen 64KB EEProm für Daten, und 64KB Ram,
dort können auch noch Daten abgelegt werden.
>Was ist sonst noch an Programmiersoftware auf dem Rechner vorhanden?
Die Maschine selbst hat einen Editor, indem man Programme schreiben
kann.
Für den PC gibts das gleich, für Dos, aber wie oben geschrieben habe
ich gemerkt das die exe die für das schreiben / lesen zuständig ist
auch ohne Dongle läuft, der Rest läuft nicht.

mfg Andreas
Autor: Wolfram (Gast)
Datum: 26.06.2006 13:53

Bitte aeussere dich ,was du genau willst:
Willst du nur die Dateien von der unbekannten Maschine, auf einen PC
bekommen über Disketten oder bekommst du die Dateien problemlos auf den
PC hast aber keine Ahnung wie das interne Format dieser Dateien ist und
kannst deshalb die Daten nicht interpretieren/extrahieren?
Mit anderen Worten willst du nur das Programm zum Lesen/schreiben der
Disketten ersetzen oder das gesamte verdongelte Programm?
Autor: Andreas B. (Gast)
Datum: 26.06.2006 14:11
Dateianhang: 100.zip (11,7 KB, 26 Downloads)

Die Dateien sind im ASCII Format, also einfacher Text, aber die
Disketten sind nicht FAT formatiert, sondern was exotisches. Es geht
darum Textdateien auf die Diskette zu schreiben oder zu lesen.
Da aber das Programm das die Disketten schreiben / lesen kann ohne
Dongle läuft kann ichs jetzt trotzdem schreiben und lesen (halt mit Dos
GUI).
Trotzdem noch eine verzippte Diskette im Anhang.
Die Diskette enthält 100 Testdateien. Die Dateinamen sind T00 bis T99.
Die Adresse des ersten Indexes ist 0x9600.
Das erste Byte vor dem Namen "T64" mit dem Wert 1 ist der Typ der
Datei, dabei steht 1 für Programm und 2 für Unterprogramm, den Rest
brauche ich im Moment nicht. Hinter dem Dateienamen (immer 11 Zeichen,
unbenutzte Zeichen sind Leerzeichen) folgt die Adresse, hier
0x4b4a014b014c014d014e01000000000000.
Da es Testdateien sind haben alle den Inhalt "Testdatei Nr. xx -
Testdatei Nr...." wenn ich jetzt die dazugehörige Datei suche finde
ich sie an der Adresse 0xad400.
Ich hab aber bis jetzt noch nicht rausgefunden wie die Adresse mit der
Effektiven Dateiposition zusammenhängt.

mfg Andreas
Autor: Wolfram (Gast)
Datum: 26.06.2006 14:49

Anscheinend geht es dir erstmal nur um den Transport der Daten von einem
zum anderen Rechner.
Ich würde vorschlagen du findest raus was das für eine Maschine ist
dann
dürftest du auch wissen mit welchem Dateisystem du es zu tun hast.
Autor: Andreas B. (Gast)
Datum: 26.06.2006 14:59

Es ist eine CNC von Biesse, mit der Steuerung RT480. Das Diskettenformat
wurde eine Zeitlang von Biesse eingesetzt, ist aber nirgends
dokumentiert (konnte zumindest nichts finden). Auf jeden fall ist das
kein gebräuchliches Format, eine frisch formatierte Diskette enthält
alles 0xe2, ausser 8 Bytes, die sind "CNI     ". CNI ist der Typ der
Maschine.

Ich versuche einfach die Dos Software fernzusteuern.

mfg Andreas
Autor: Bartli (Gast)
Datum: 26.06.2006 19:42

Ist disassemblieren/debuggen wirklich illegal wenn es nur dem
Verständnis des Filesystems dient (und nicht etwa zum Beispiel
disassembliert wird mit dem Ziel, das Disassemblat in eine eigene
Software einzubauen)?

Wenn das eine DOS Software war, würd ich davon ausgehen, dass das Ding
den BIOS-Disketteninterrupt (0x13) benutzt, um Diskettensektoren zu
lesen/schreiben. Man könnte dann nach "int 0x13" Instruktionen
suchen, und das ganze von dort aus aufdröseln. Ob das schwierig oder
einfach ist hängt eigentlich nicht so sehr von der Gesamtgrösse des
Programms ab.
Autor: Andreas B. (Gast)
Datum: 26.06.2006 20:51

>Ist disassemblieren/debuggen wirklich illegal wenn es nur dem
>Verständnis des Filesystems dient (und nicht etwa zum Beispiel
>disassembliert wird mit dem Ziel, das Disassemblat in eine eigene
>Software einzubauen)?

Mein Programierlehrer meinte es sei legal, und werde sogar noch oft
gemacht...

Ich finde genau einen "int 0x13". Das ist wahrscheinlich eher wenig.
Und das Problem ist eben das ich nicht wirklich Assembler kann, und da
will ich mich auch nicht durch 72'000 Zeilen lesen...

Wenn ichs nach C decompiliere gibts nichts wirklich brauchbares (sehr
viele Funktionen die aber ziemlich viel ASM drin haben..)

Ich müsste wirklich zur Laufzeit auf die Variablen Zugriff haben.
Ich weiss das es solche Tools gibt, aber ich weiss nicht wie die
heissen...

mfg Andreas
Autor: Bartli (Gast)
Datum: 26.06.2006 21:29

> Ich finde genau einen "int 0x13". Das ist wahrscheinlich eher
wenig.

Würd ich (zunächst) mal als positiv betrachten, weil das bedeuten
könnte, dass halbwegs vernünftig programmiert wurde und die direkten
Zugriffe auf die Floppy nicht über das ganze Programm verstreut wurden
:D

Es kann allerdings auch sein, dass du beim disassemblieren nicht allen
Code "erwischt" hast.

> Und das Problem ist eben das ich nicht wirklich Assembler kann,
> und da
> will ich mich auch nicht durch 72'000 Zeilen lesen...

Das ist warscheinlich auch nicht notwendig, ausgehend von dem int 13h
könnte man vermutlich sämtliche File I/O Routinen ohne allzu viel Mühe
aufröseln.

> Wenn ichs nach C decompiliere gibts nichts wirklich
> brauchbares (sehr viele Funktionen die aber ziemlich
> viel ASM drin haben..)

Was anderes war ja auch nicht zu erwarten.
Autor: Bartli (Gast)
Datum: 26.06.2006 21:36

> Ich müsste wirklich zur Laufzeit auf die Variablen Zugriff haben.

Was versprichst du dir davon denn genau ?
Autor: Andreas B. (Gast)
Datum: 26.06.2006 21:41

Das ich sehe es wie er aus den Adressen die er liest die Adressen auf
die er zugreift berechnet. Das ganze ist ja nicht eine Operation,
sondern mehrer, wenn ich die Variablen sehe gehe ich davon aus das ich
nachvollziehen kann was er rechnet. Es wird nicht allzuviel sein, da es
ja auf der Maschine auch ausgeführt werden muss, und die ist
schätzungsweise mit 5MHz getaktet (naja, hat mehrere Prozessoren...).

Oder wie kann ich nachvollziehen was aus den Adressen gemacht wird?
Sobald da etwas binäre Operationen und sonstige Operationen gemischt
werden kann ich das nicht mehr nachvollziehen, zumindest nicht in
nützlicher Frist ;-)

mfg Andreas
Autor: Bartli (Gast)
Datum: 26.06.2006 22:00

> Sobald da etwas binäre Operationen und sonstige Operationen gemischt
> werden kann ich das nicht mehr nachvollziehen, zumindest nicht in
> nützlicher Frist

Also praktisch 0-Ahnung...da dann, viel Spass...
Autor: Wolfram (Gast)
Datum: 27.06.2006 09:31

Schau dir den Code in der Umgebung des int13 an, ob er logisch stimmen
könnte, also ob der Disassembler auch den richtigen Code erwischt hat.
Wenn du da nicht weiterkommst, schreibe einen int 13 Interrupthandler
der dir die Diskettenzugriffe mit Parametern angibt und die
Rücksprungadresse vom Stack. Dann beginne mit dem Programm zu arbeiten
und schau dir die aufeinanderfolgenden Zugriffe an. Über die
Rücksprungadresse kannst du checken an welcher Stelle im Programm der
Interrupt aufgerufen wird und ob es mehrere Stellen gibt.
Zu Programmen: z.B. Turbo Debugger
Leider erfordert das alles aber sehr viel Wissen in Assembler...
Warum nimmst du nicht erstmal den kurzen Weg? Wenn das Programm
Kommandozeilenparameter hat , schreib einen hübsche Oberfläche und
steuere das ganze mit Batchdateien.
Versuche Informationen über das Dateisystem zu finden. Dazu sollte man
erstmal sicher sein was das für eine Maschine ist und welches
Betriebssystem darauf läuft.
Versuche herauszufinden wie das Dateisystem funktioniert.
Dazu solltest du als erstes nur eine Datei erzeugen auf einer FRISCH
FORMATIERTEN Diskette. Das war das was mich am meissten an deinem Image
störte. Die Einträge gingen nicht geordnet von vorn nach hinten und die
Datenblöcke der Dateien waren vermischt.
Kann natürlich sein das es das Dateisystem so macht ,ist aber ehr
unwahrscheinlich auf einer frisch formatierten Diskette.
Mit formatieren meine ich richtig formatieren, also komplett mit Nullen
überschreiben, dann im Rechner formatieren, anschauen,mit dem Programm
eine erstmal kleine Datei erzeugen,anschauen, Rückschlüsse ziehen.
Was ich nicht verstehe:
eine kurzes Suchen bei Google ergibt die CNI RT480 bietet 2 Wege des
Datenaustauschs entweder Diskette oder Dateien über Seriellen Port.
Warum willst du unbedingt den schwierigeren Weg nehmen?
Autor: Andreas B. (Gast)
Datum: 27.06.2006 18:18
Dateianhang: disk.png (763 Bytes, 26 Downloads)
preview image for disk.png

>Warum nimmst du nicht erstmal den kurzen Weg? Wenn das Programm
>Kommandozeilenparameter hat , schreib einen hübsche Oberfläche und
>steuere das ganze mit Bachdateien.
eben KEINE Parameter, wenn das Programm gestartet wird erscheint ein
Menü, das ich leider nicht so einfach fernsteuern kann, es gibt eine
Möglichkeit über die Win API, jedoch ist das extrem langsam...

>Dazu solltest du als erstes nur eine Datei erzeugen auf einer FRISCH
>FORMATIERTEN Diskette. Das war das was mich am meisten an deinem
Image
>störte. Die Einträge gingen nicht geordnet von vorn nach hinten und
die
>Datenblöcke der Dateien waren vermischt.
Das habe ich gemacht (auch diese Diskette war frisch formatiert).
Die erste Datei wird in die Mitte der Diskette geschrieben, die zweite
davor UND danach, also fragmentiert, die dritte wurde wieder dahinter
geschrieben.

Im Anhang noch ein Diagramm, da ist klar zu sehen das die Daten immer
so fragmentiert werden. X ist die effektive Adresse, Y Adresse im
Index.

Aber sonst reicht auch das Dos Programm...
>Warum willst du unbedingt den schwierigeren Weg nehmen?
Es ist halt mein Hobby... und ich wollte jetzt dieses Format lesen (ich
habe mich schon länger damit beschäftigt, auch wenn manche Leute das
Gefühl haben ich hätte "0-Ahnung")

auf jeden Fall danke für die Hilfe.

mfg Andreas
Autor: Andreas B. (andreasb)
Datum: 20.10.2006 00:23
Dateianhang: screenshot.png (17,5 KB, 56 Downloads)
preview image for screenshot.png

Ich habe unterdessen ein Programm geschrieben das die Disketten lesen
und schreiben kann. Im Anhang ein Screenshot... Das ganze ist zwar nicht
ganz fertig aber es funktioniert soweit... Wer Interessen hat soll sich
melden.


mfg Andreas
Autor: Cassio Emer (oldnapalm)
Datum: 30.04.2008 05:05
Dateianhang: editor1.jpg (55,6 KB, 85 Downloads)
preview image for editor1.jpg

I wrote a program for reading and writing disks in CNI format, and a
simple program editor (see screenshot). My machine is a Biesse Rover
346, if there is someone interested in testing the program with other
RT480 machines please contact me.
I need a postprocessor for the Biesse Rover 346, if anyone can help me
with that I will be very grateful.

Google-Übersetzung auf Deutsch

Ich schrieb ein Programm zum Lesen und Schreiben von Festplatten in
CNI-Format, und ein einfaches Programm-Editor (siehe Screenshot). Meine
Maschine ist ein BIESSE Rover 346, wenn es jemanden interessiert, bei
der Prüfung des Programms mit anderen Maschinen RT480 wenden Sie sich
bitte an mich.
Ich brauche einen Postprozessor für die BIESSE Rover 346, wenn jemand
kann mir helfen mit, dass werde ich sehr dankbar.

Antwort schreiben

Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos verwenden, Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel





Hinweis: der Originalbeitrag ist mehr als 6 Monate alt.

webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net