Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » Prüfsummenberechnung » Themenansicht

Autor Thread - Seiten: -1-
000
15.04.2007, 22:40 Uhr
Rüdiger
Administrator
Avatar von Rüdiger

Weißt jemand, wie zu EPROMs die Prüfsummen berechnet wurden?
Das Ergebnis war eine 2 Byte große Zahl.
War das nur einfaches Aufsummieren oder wie ging das?
--
Kernel panic: Out of swap space.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
16.04.2007, 06:12 Uhr
Olli

Avatar von Olli

Hallo Ruediger,

hier findest du ein C-Programm zur Berechnung:

http://www.pofo.de/P8000/misc/scripts/crc.c


Quellcode:
olivleh1@avocado misc> scripts/crc EPROM-Sammlung/16BIT/MON16_1H_3.1
crc_checksum: 6d61
olivleh1@avocado misc> grep MON16_1H_3.1 EPROM-Sammlung/16BIT.txt
MON16_1H_3.1       - 6D61 - WEGA 3.0 -> 3.1 Floppy      14.04.1989      U8000-Softwaremonitor Version 3.1
olivleh1@avocado misc>


--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000

Dieser Beitrag wurde am 16.04.2007 um 06:14 Uhr von Olli editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
16.04.2007, 14:49 Uhr
Rüdiger
Administrator
Avatar von Rüdiger

Kannst Du mir bitte das Programm für DOS compilieren?
Ich habe gerade keinen Compiler hier.
--
Kernel panic: Out of swap space.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
16.04.2007, 15:09 Uhr
Olli

Avatar von Olli

Ich auch nicht fuer DOS

Aber wozu habe ich WEGA-Cross
Ich werde mich da heute abend mal dran versuchen.
U880 ASM Code erstellen mittels WEGA-cc, dann den ASM-Translator aus den WEGA-Cross-Tools benutzen um x86-ASM Code zu erzeugen.
Dann den K1810WM86 Assembler + DOS-Linker verwenden.
Den Abschnitt ab K1810WM86-Assembler habe ich schonmal erfolgreich hinbekommen - inkl. EXE Datei welche dann sogar unter DOS lief

Ich melde mich heute Abend nochmal...
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
16.04.2007, 19:20 Uhr
Olli

Avatar von Olli

hat etwas gedauert, bis ich das C file so modifiziert hatte, bis es tadellos unter wega compilierte... der vom CC bzw LCC erzeugte ASM code laesst sich aber nicht mittels trans in x86asm code abaendern (versch. fehler), so das ich dir das leider nicht compilieren kann, evtl. findet sich ja noch wer.... habe crc.c neu hochgeladen mit der Version die auch unter wega compiliert (nur so zur info)
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
16.04.2007, 23:03 Uhr
DKt



Hallo Rüdiger,

siehe Mail.

Dirk
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
24.04.2007, 11:55 Uhr
Rüdiger
Administrator
Avatar von Rüdiger

Ollis Programm erzeugt leider nicht die Prüfsumme, die ich brauche.
Es gibt da 2 Verfahren: CRC (16 Bit) und SDLC.
Meine EPROM-Prüfsummen sind wahrscheinlich mit SDLC berechnet worden.
Hat / findet jemand ein Programm, das beide Prüfsummen für eine Datei ausgibt?
--
Kernel panic: Out of swap space.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
007
24.04.2007, 12:56 Uhr
Z1013



Hallo Rüdiger,
so 100%ig weiss ich nun nicht was Du mit SDLC meinst, für mich ist das ein Netzwerkprotokoll von IBM....
Aber probier doch mal den Hexeditor Hex-Workshop von www.bpsoft.com ( http://www.bpsoft.com/downloads/ ), da gibt es eine Funktion, die berechnet die Checksumme der geladenen Datei in alle möglichen Variationen. Vielleicht ist was für dich dabei.

Falls es die Prüfsumme eines IBM-kompatiblen BIOS sein soll, da ist das aber alles ganz anders berechnet. Da gab es mal Ende der 80er / Anfang 90er mal einen Beitrag in der c't . Falls es so sein sollte, mußt du nochmal Bescheid geben...

Holger
--
Viele Grüße
Holger

Dieser Beitrag wurde am 24.04.2007 um 13:34 Uhr von Z1013 editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
008
24.04.2007, 15:35 Uhr
Rüdiger
Administrator
Avatar von Rüdiger


Zitat:
Z1013 schrieb
so 100%ig weiss ich nun nicht was Du mit SDLC meinst, für mich ist das ein Netzwerkprotokoll von IBM....

Schau mal http://www.efg2.com/Lab/Mathematics/CRC.htm , unterste Tabelle.



Zitat:
Aber probier doch mal den Hexeditor Hex-Workshop von www.bpsoft.com

Bingo!
Die Prüfsumme, die dort als "CRC16/CCITT" bezeichhnet wird, ist's.


Zitat:
Falls es die Prüfsumme eines IBM-kompatiblen BIOS sein soll, da ist das aber alles ganz anders berechnet.

Nein. DDR-EPROMs.
--
Kernel panic: Out of swap space.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
009
24.04.2007, 16:59 Uhr
Olli

Avatar von Olli


Zitat:
Rüdiger schrieb
Ollis Programm erzeugt leider nicht die Prüfsumme, die ich brauche.
Es gibt da 2 Verfahren: CRC (16 Bit) und SDLC.
Meine EPROM-Prüfsummen sind wahrscheinlich mit SDLC berechnet worden.

Laut den ASM Quellen der Softwaremonitore ist das Verfahren welches der P8000 nutzt SDLC.
Im Grunde sind das auch alles nur "Namen" - ich kann das Ding ja SDLC nennen, und mir dann ein Bitverschiebungsmuster ausdenken welches ich toll finde.
Mein ALL-02 berechnet die EPROM Checksummen z.B. auch nach Gott-Was-Weis ich fuer einem Algorithmus.
Hast du die Software welche die Checksummen der EPROMs berechnet? Evtl. koennte man diese Deassemblieren und dadurch auf den Algoritmus kommen?
Aus welcher Aera stammt das ganze? Ich hatte hier mal einen EPROM aus einer K7673 Tastatur dessen aufgedruckten Checksumme mit der uebereinstimmt die mir mein P8000 errechnet hat. Also scheint "meine" Checksummenberechnung auch noch von anderen (robotron) Stellen so genutzt worden sein.
Ich haette auch noch EC1843 EPROM Images (Grafik, WDC usw), aber keine "Orginalchecksummen" aus dem EC1843 um das mal zu verifizieren...

Ich sehe gerade das du ja nun eh schon n Programmm gefunden hast welches die "richtige" Checksumme berechnet....

Uebrigens funktioniert mein Programm nicht bei der Berechnung der Checksummen von Floppies welche von COPY.DISK unter UDOS errechnet wird... da scheint es auch nochmal einen anderen Algo. zu geben.
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000

Dieser Beitrag wurde am 24.04.2007 um 17:01 Uhr von Olli editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
010
24.04.2007, 17:14 Uhr
Olli

Avatar von Olli

So, ich habe mal den Code von http://www.zorc.breitbandkatze.de/crc.html ausprobiert.
Wenn man jetzt CRC-CITT von "123456789" berechnet, kommt als Checksumme 0x29b1 raus.
Das gleiche Ergebnis kommt aber auch bei meinem Programm raus - nun bin ich verwirrt?

olivleh1@kartoffel olivleh1> printf "123456789" > 1
olivleh1@kartoffel olivleh1> hd -v 1
00000000 31 32 33 34 35 36 37 38 39 |123456789|
00000009
olivleh1@kartoffel olivleh1> /mnt/files/cvs/projects/P8000/crc 1
crc_checksum: 29b1
olivleh1@kartoffel olivleh1>

Was liefert denn dieser Hex-Workshop als CRC-CRITT fuer eine Datei die nur 1-9 enthaellt?
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
011
24.04.2007, 17:24 Uhr
Z1013



crc16 = bb3b
crc16 ccitt = 29b1


Zitat:
Olli schrieb
nun bin ich verwirrt?

Zu recht, ich auch...

Für Olli, da er kein Fensterprogramm hat

http://www.onlinestuffs.com/pictureupload/bild21/fciz32ovj3l1znonqgdf.gif

http://www.onlinestuffs.com/pictureupload/bild21/uo53dvezv2l498ysd2dv.jpg
--
Viele Grüße
Holger

Dieser Beitrag wurde am 24.04.2007 um 20:21 Uhr von Z1013 editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
012
24.04.2007, 20:14 Uhr
Rüdiger
Administrator
Avatar von Rüdiger


Zitat:
Olli schrieb
Hast du die Software welche die Checksummen der EPROMs berechnet?

Ja, das EPROMer-Programm vom PRG710.
Das errechnet aber nur die Prüfsumme des ganzen EPROMs.
Auf meinen EPROMs stehen 2 Prüfsummen jeweils für einen "Halb-EPROM" drauf.
Soll ich Dir das Programm schicken?



Zitat:
Aus welcher Aera stammt das ganze?

K1520. Genau gesagt PSA-Messcomputer.
--
Kernel panic: Out of swap space.

Dieser Beitrag wurde am 24.04.2007 um 20:15 Uhr von Rüdiger editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
013
24.04.2007, 20:29 Uhr
Olli

Avatar von Olli

@Ruediger
aber wenn mein crc.c nach dem gleichen Schema die Checksummen errechnet wie dieses CRC-CCITT (online) Ding dann waere doch auch meins gegangen? Du kannst bei meinem auch den Bereich angeben der fuer die Checksumberechnung herangegeben werden
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
014
24.04.2007, 20:32 Uhr
Rüdiger
Administrator
Avatar von Rüdiger


Zitat:
Olli schrieb
aber wenn mein crc.c nach dem gleichen Schema die Checksummen errechnet wie dieses CRC-CCITT (online) Ding dann waere doch auch meins gegangen?

Seltsamerweise nicht. Ich habe Dir eben eine Beispieldatei gemailt mit Prüfsumme über die gesamte Datei.
Da zeigt Dein Programm ein anderes Ergebnis an. Oder habe ich was falsch gemacht?
--
Kernel panic: Out of swap space.

Dieser Beitrag wurde am 24.04.2007 um 20:34 Uhr von Rüdiger editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
015
24.04.2007, 20:58 Uhr
Olli

Avatar von Olli

Das DOS Programm scheint anders zu funktionieren, als das unter UNIX compilierte:


Quellcode:
olivleh1@kartoffel olivleh1> cd /mnt/files/cvs/projects/P8000/
olivleh1@kartoffel P8000> rm crc
olivleh1@kartoffel P8000> cc -o crc crc.c
olivleh1@kartoffel P8000> cd -
olivleh1@kartoffel olivleh1> /mnt/files/cvs/projects/P8000/crc D01.ROM
crc_checksum: 3c01
olivleh1@kartoffel olivleh1>

das ist die gleiche Checksumme welche du in der Mail hattest...

Was ich mir beim Code vorstellen koennte - evtl zieht

while( read(f, &a1, sizeof(a1)) ) {

wegen des sizeof unter DOS zu viel Daten auf einmal und geht dadurch nicht byte fuer byte vor...
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
016
24.04.2007, 21:14 Uhr
tp



Um noch ein Beispiel zu bringen :

Quellcode:
tp@dali:/tmp/c [518] $ ls -la
total 23
drwxr-xr-x  2 tp   users  1024 2007-04-24 21:06 .
drwxrwxrwt 14 root root  18432 2007-04-24 21:06 ..
-rw-r--r--  1 tp   users  2864 2007-04-24 21:06 crc.c

tp@dali:/tmp/c [519] $ gcc -o crc crc.c
tp@dali:/tmp/c [520] $ i586-mingw32msvc-gcc -o crc.exe crc.c

Beim Textfile kommen gleiche Werte:

Quellcode:
tp@dali:/tmp/c [523] (1) $ ./crc crc.c
crc_checksum: 3d34

tp@dali:/tmp/c [524] $ wine crc.exe crc.c
crc_checksum: 3d34

Beim Binärfile nicht:

Quellcode:
tp@dali:/tmp/c [525] $ wine crc.exe crc.exe
crc_checksum: 1af9

tp@dali:/tmp/c [526] $ ./crc crc.exe
crc_checksum: f472


--
Die Zeit ist auch nicht mehr, was sie mal war! (Albert Einstein)

Dieser Beitrag wurde am 24.04.2007 um 21:17 Uhr von tp editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
017
24.04.2007, 21:49 Uhr
tp



So gehts:

Quellcode:
i586-mingw32msvc-gcc -o crc.exe crc.c /usr/i586-mingw32msvc/lib/binmode.o

Damit werden alle File-Operationen auf binär umgestellt und schon kommen die gleichen Prüfsummen raus:

Quellcode:
tp@dali:/tmp/c [577] $ wine crc.exe crc.exe
crc_checksum: ff0a
tp@dali:/tmp/c [578] $ ./crc crc.exe
crc_checksum: ff0a

Dass das Problem bei open/read auch existiert ist mir neu. Ich dachte immer das gibt's nur bei fopen/fread.
--
Die Zeit ist auch nicht mehr, was sie mal war! (Albert Einstein)
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
018
24.04.2007, 21:49 Uhr
Olli

Avatar von Olli

hmhm ich meine mich zu erinnern das es bei dem open() call unter DOS ein "BINARY" flag gibt da er es ansonsten als ASCII oeffnet wenn ich mich recht erinnere... vorher hatte ich es ja mit fopen, da gibts ja POSIX konform n "b" als flag... aber bei open() gibts in der DOS Welt irgendwas mit binary...

Edit: man kann sich TurboC 2.0 von der Borland Homepage downloaden:

http://bdn1.borland.com/article/0,1410,20841,00.html

Ich konnte das beschriebene unterschiedliche Verhalten nachvollziehen. Ich gucke mir das morgen mal genauer an... nun gehts erstmal ins Bettchen.

Edit: sehe gerade es gab schon eine Antwort... liegt also tatsaechlich am binmode wie vermutet.
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000

Dieser Beitrag wurde am 24.04.2007 um 22:16 Uhr von Olli editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
019
24.04.2007, 22:56 Uhr
Z1013




Zitat:
Olli schrieb
Edit: man kann sich TurboC 2.0 von der Borland Homepage downloaden:

http://bdn1.borland.com/article/0,1410,20841,00.html

Danke für den Tipp!

Turbo Pascal 5.5 hab ich auch noch gefunden
http://bdn1.borland.com/article/0,1410,20803,00.html

Gruß
Holger
--
Viele Grüße
Holger

Dieser Beitrag wurde am 24.04.2007 um 23:07 Uhr von Z1013 editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
020
24.04.2007, 23:38 Uhr
Deff



Aller guten Dinge sind nunmal 3!

Turbo C++ V1.01: http://bdn1.borland.com/article/0,1410,21751,00.html
--
Die Politik ist ein Versuch der Politiker, zusammen mit dem Volk mit den Problemen fertig zu werden, die das Volk ohne die Politiker niemals gehabt hätte. (Dieter Hildebrandt)
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
021
25.04.2007, 06:46 Uhr
Olli

Avatar von Olli

Hi,


Quellcode:
#ifdef O_BINARY
        f = open(filename, O_RDONLY|O_BINARY);
#else
        f = open(filename, O_RDONLY);
#endif

ist sozusagen des Raesels Loesung... zummindest fuer Turbo C unter DOS.
Ruediger, ich schicke dir mal die funktionierende CRC.EXE
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
022
05.05.2007, 13:16 Uhr
Z1013



Hallo Boys,
einen kleinen, aber feinen Hexeditor namens HxD, der die verschiedenen Prüfsummen auch ausgibt, hab ich jetzt auch hier gefunden: http://www.mh-nexus.de/hxd/
Ist in Deutsch erhältlich und ist Freesoft. Läuft ab Win95
--
Viele Grüße
Holger

Dieser Beitrag wurde am 05.05.2007 um 13:38 Uhr von Z1013 editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek