Forum: Mikrocontroller und Digitale Elektronik Hilfe bei Disassembler 68000 Binary


von A. B. (branadic)


Angehängte Dateien:

Lesenswert?

Guten Abend,

ich habe anhängenden ROM Dump und suche Hilfe beim disassemblieren. Das 
ROM-File stammt aus einem Advantest R6581 (Toshiba 68303 Prozessor) und 
Ziel ist es die SCPI Kommandos und deren Menüstruktur zu identifizieren, 
die undokumentierten sind und die Zugriff auf die 
Linearisierungskoeffizienten der abschnittsweisen INL Korrektur 
erlauben. Hintergrund ist, dass in den Geräten leider nur gemittelte und 
keine individualisierten Koeffizienten hinterlegt sind, weswegen die INL 
deutlich größer ist als es theoretisch möglich wäre.
Hat jemand die notwendige Erfahrung mit Motorola 68k Prozessoren und 
kann hierbei unterstützen?

Mit zufälligen Befehlskombinationen bin ich bisher leider nicht 
erfolgreich gewesen. Es gibt jedoch einige Befehle, die eindeutig 
vorhanden sind und nicht dokumentiert sind, z.B. "EEPROM:", "HOSEI:", 
"HOSEI?", "DEF?", "NEW?"

Wäre toll, wenn jemand mit den entsprechenden Fähigkeiten unterstützen 
könnte und hier antwortet.

-branadic-

von Georg A. (georga)


Lesenswert?

Also wirklich reverse engineeren ist mühsam, da wird man locker einige 
Tage unterwegs sein. Man muss ja zumindest mal einen groben Überblick 
über die internen Abläufe bekommen und einen Grossteil der Unterroutinen 
erstmal inhaltlich einordnen. Und wenn dann noch Hardware-IO dazukommt, 
wirds nicht einfacher...

Aber der Bereich mit Befehlen und ähnlichem war recht einfach in dem 
Dump zu finden. Hier alles was sinnvoll aussieht und >=2 Chars ist. Ob 
das jetzt aber wirklich alles Befehle sind, weiss ich nicht...

*CLS  *ESE  *ESE?  *ESR?  *IDN?  *OPC  *OPC?  *OPT?  *RCL  *RST  *SAV 
*SRE  *SRE?  *STB?  *TRG  *TST?  *WAI  4WCH  4WCHECK  :ABOR  :ABORT 
:ARM:  :CAL:  :CALC:  :CALCULATE:  :CALIBRATION:  :CONF:  :CONF? 
:CONFIGURE:  :CONFIGURE?  :CURR:  :CURRENT:  :DISP  :DISP?  :DISPLAY 
:DISPLAY?  :FETC?  :FETCH?  :FORM  :FORM:  :FORM?  :FORMAT  :FORMAT: 
:FORMAT?  :FREQ:  :FREQUENCY:  :FRES:  :FRESISTANCE:  :INIT  :INIT: 
:INITIATE  :INITIATE:  :INP:  :INPUT:  :ITEM?  :ITEMPERATURE?  :LFRE? 
:LFREQUENCY?  :MMEM:  :MMEMORY:  :OUTP:  :OUTPUT:  :PER:  :PERIOD: 
:READ?  :RES:  :RESISTANCE:  :ROUT:  :ROUTE:  :SENS:  :SENSE:  :STAT: 
:STATUS:  :SYST:  :SYSTEM:  :TRAC:  :TRACE:  :TRIG:  :TRIGGER:  :TSYS: 
:TSYSTEM:  :VOLT:  :VOLTAGE:  :ZERO:  ABOR  ABORT  AC  AC:  ALL  ANAL: 
ANALOGOUT:  APER  APER?  APERTURE  APERTURE?  ARM:  ASC  ASCII  AT  AUTO 
AUTO?  AVER  AVER?  AVERAGE  AVERAGE?  B4  BCD:  BCDOUT:  BCON  BCON: 
BCON?  BCONTROL  BCONTROL:  BCONTROL?  BEEP  BEEP:  BEEP?  BEEPER 
BEEPER:  BEEPER?  BLOC  BLOC?  BLOCK  BLOCK?  BUS  CAL:  CALC: 
CALCULATE:  CALIBRATION:  CAT?  CATALOG?  CHAN  CHANNEL  CHEC  CHECK 
CLE  CLEAR  CLOS  CLOS?  CLOSE  CLOSE?  COL  COL?  COLUMN  COLUMN?  COMM 
COMMA  COMP  COMP?  COMPLETE  COMPLETE?  CONF:  CONF?  CONFIGURE: 
CONFIGURE?  CONT  CONT?  CONTINUOUS  CONTINUOUS?  COUN  COUN?  COUNT 
COUNT?  COUP  COUP?  COUPLING  COUPLING?  CRLF  CURR  CURR:  CURRENT 
CURRENT:  DATA  DATA:  DATA?  DATE  DATE?  DB  DB?  DBM  DBM?  DC  DC: 
DCV  DCV:  DCV?  DEF  DEF?  DEFAULT  DEL  DEL:  DEL?  DELAY  DELAY? 
DELETE  DELETE:  DELI:  DELIMITER:  DELT  DELTA  DEV  DEV?  DEVIATION 
DEVIATION?  DFIL  DFIL:  DFIL?  DFILTER  DFILTER:  DFILTER?  DIG  DIG? 
DIGITS  DIGITS?  DISP  DISP?  DISPLAY  DISPLAY?  DREC  DREC:  DRECALL 
DRECALL:  DST  DST:  DSTORE  DSTORE:  EEPROM:  ELEM  ELEM?  ELEMENTS 
ELEMENTS?  ENAB  ENAB?  ENABLE  ENABLE?  EOI  ERR?  ERROR?  EVEN? 
EVENT?  EXT  EXT:  EXT?  EXTERNAL  EXTERNAL:  EXTERNAL?  FAIL  FAST 
FAST:  FETC?  FETCH?  FILT  FILT?  FILTER  FILTER?  FLO  FLOAT  FORM 
FORM:  FORM?  FORMAT  FORMAT:  FORMAT?  FREE?  FREQ  FREQ:  FREQUENCY 
FREQUENCY:  FRES  FRES:  FRESISTANCE  FRESISTANCE:  FRON  FRON:  FRONT 
FRONT:  FULL  GAIN?  GPIB  GPIB:  GUAR  GUAR?  GUARD  GUARD?  HEAD 
HEADER  HI  HOSEI  HOSEI:  HOSEI?  HX  IMM  IMMEDIATE  INF  INFINITE 
INIT  INIT:  INITIALIZE  INITIATE  INITIATE:  INP:  INPUT:  INT  INT: 
INTEGER  INTERNAL:  IPTS  IPTS68  ITEM?  ITEMPERATURE?  ITS  ITS90  K4 
LAY2:  LAY:  LAYER2:  LAYER:  LENG  LENG?  LENGTH  LENGTH?  LEV  LEV: 
LEV?  LEVEL  LEVEL:  LEVEL?  LF  LFEO  LFEOI  LFRE?  LFREQUENCY?  LIM 
LIM:  LIM?  LIMIT  LIMIT:  LIMIT?  LINE  LOW  LOW?  LOWER  LOWER?  MAN 
MANUAL  MAX  MAXIMUM  MEAS  MEAS:  MEASUREMENT  MEASUREMENT:  MEM 
MEMORY  MID  MID?  MIN  MINIMUM  MMEM:  MMEMORY:  NEG  NEGATIVE  NEW? 
NONE  NPLC  NPLC?  NPLCYCLES  NPLCYCLES?  NULL  NULL:  NUMB  NUMB? 
NUMBER  NUMBER?  OCOM  OCOM?  OCOMPENSATED  OCOMPENSATED?  OFF  OFFS 
OFFS?  OFFSET  OFFSET?  OHM  OHM:  OHM?  OPEN  OPER:  OPERATION:  OTEM 
OTEM:  OTEMPERATURE  OTEMPERATURE:  OUTP:  OUTPUT:  PASS  PASS:  PASS? 
PER  PER:  PERIOD  PERIOD:  POIN  POIN?  POINTS  POINTS?  POS  POSITIVE 
POW  POW?  POWER  POWER?  PREC  PRECALL  PRES  PRESET  PRET  PRET? 
PRETRIGGER  PRETRIGGER?  PRIN:  PRINTER:  PROT  PROT?  PROTECTION 
PROTECTION?  PST  PSTORE  QN  QUE:  QUES:  QUESTIONABLE:  QUEUE:  RAM 
RAM?  RANG  RANG:  RANG?  RANGE  RANGE:  RANGE?  RAT  RAT?  RATE  RATE? 
RATIO  RATIO?  READ?  REAL  REAR  REAR:  REF?  RES  RES:  RESISTANCE 
RESISTANCE:  RMS  RMS?  ROUT:  ROUTE:  RTD  RTD:  RTD?  SCAL  SCAL: 
SCALING  SCALING:  SCAN  SCAN:  SCAN?  SENS:  SENSE:  SHE  SHEADER  SLOP 
SLOP?  SLOPE  SLOPE?  SLOW  SMO  SMO?  SMOOTHING  SMOOTHING?  SOUR 
SOUR:  SOUR?  SOURCE  SOURCE:  SOURCE?  SPAC  SPACE  STAT  STAT:  STAT? 
STATE  STATE?  STATISTICS:  STATUS:  STORE  STR  STR?  STRING  STRING? 
SUBM  SUBM:  SUBM?  SUBMEASURE  SUBMEASURE:  SUBMEASURE?  SYST:  SYSTEM: 
TEMP  TEMP?  TEMPERATURE?  TERM  TERM?  TERMINAL  TERMINAL?  TIM  TIM? 
TIME  TIME?  TIMER  TIMER?  TIMESTAMP  TLIN  TLINK  TRAC:  TRACE:  TRAN 
TRANSFER  TRIG:  TRIGGER:  TSYS:  TSYSTEM:  UNIT  UNIT?  UPP  UPP? 
UPPER  UPPER?  VERS?  VERSION?  VOLT  VOLT:  VOLTAGE  VOLTAGE:  WR  WV 
X?  XB  Y?  Z?  ZERO:  ZERO?  `SLOP  dHOSEI

von A. B. (branadic)


Lesenswert?

Hallo Georg,

das ist mir auch bewusst, aber vielleicht gibt es ja jemanden der an 
sowas besonders viel Spaß hat.
Die Befehle hatte ich auch schon extrahiert, allerdings nützen sie 
nichts, man braucht die Befehlsstruktur dahinter, da die einzelnen 
miteinander erst in bestimmter Reihenfolge kombiniert eine Funktion 
erfüllen und hierfür muss man die Firmware verstehen, um diese Struktur 
zu extrahieren. Daher hatte ich ja auch um Hilfe gefragt, weil das 
meinen Horizont überschreitet.

-branadic-

von R. Winkler (Gast)


Lesenswert?

Folgene Tools könnten dir helfen:
  - objdump
  - radare2
  - IDA pro

Das ist aber schon ein Brett was du dir da vorgenommen hast, gerade 
Mathematische operationen zurückzuwandels ist recht komplex, besonders 
wenn FPU emulation im Spiel ist.

von Christoph db1uq K. (christoph_kessler)


Angehängte Dateien:

Lesenswert?

Ein Dump mit dem alten strings.exe

Viel Spaß beim Knobeln. Online-Disassembler brauchen einen Hex-Text, das 
Binärfile wollte die erste Fundstelle jedenfalls nicht einlesen:
https://onlinedisassembler.com/odaweb/

von Lotta  . (mercedes)


Lesenswert?

meinst Du Intel-Hex?
Dann könnte ich das Bin mittels der Galep-Software umwandel.

mfg

von DerEgon (Gast)


Lesenswert?

Ohne die Startadresse des ROMs zu kennen, ist das nicht sehr 
zielführend. Zwar kennt der 68k weitestgehend relokatiblen Code, aber 
die diversen Vektoren haben feste Adressen.

von m.n. (Gast)


Lesenswert?

DerEgon schrieb:
> Ohne die Startadresse des ROMs zu kennen, ist das nicht sehr
> zielführend.

Die ist 0x400 ;-)
Zwar habe ich noch einen eingemotteten 68K-Rechner und auch Disassembler 
und Simulator, aber die 584 kB Code passen nicht mehr in den 
"Kernspeicher".

von Dieter (Gast)


Lesenswert?

m.n. schrieb:
>
> Die ist 0x400 ;-)

Der Offset der Datei R6581_A02_sw.ROM ist 0x00000000.
Ab 0x00000400 kommt dann der Code weil die ersten 0x400
die Vektoren sind.

Im Übrigen ist das Ermitteln des Offset eines unbekannten
680x0 Bianary nicht so schwierig, insbesondere wenn es das
komplette Binary inklusive Vektoren ist.

Das R6581_A02_sw.ROM läßt sich im Disassembler auch halbwegs
gut lesen, 680x0 Assembler Code ist sowiese gut lesbar.

Wenn man das Ganze halbwegs sinnvoll analysieren will hat man
das Gerät da stehen und prüft die Annahmen, die man aufgrund
des Firmware-Disassembly macht. Damit wird der Aufwand überschaubar.
Im Prinzip schaut man nur das im Firmware-Disassembly nach was man
nicht durch Ausprobieren der Kommandos am Gerät herausfindet.

von Lotta  . (mercedes)


Lesenswert?

Ist ein wirklich geiles Gerät:

https://xdevs.com/fix/r6581t/

mfg

von Lotta  . (mercedes)


Lesenswert?

... und es läuft mit nem RTOS der Firma "hunter & ready inc",
nicht schlecht. :-P

mfg

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Hallo Lotta. Der Name war mir im Strings-Text auch aufgefallen

https://vtechworks.lib.vt.edu/bitstream/handle/10919/41577/LD5655.V855_1987.M577.pdf?sequence=1&isAllowed=y
in dieser Master-Thesis von 1987 wird die Firma Hunter & Ready 15 mal 
genannt.

>meinst Du Intel-Hex?
soweit ich es verstehe, wollen jedenfalls die hier
https://onlinedisassembler.com/odaweb/
den ganzen Hex-Code als einfachen Ascii-Text haben, also 3 Byte pro 
Byte. Den darf man per Copy&Paste in das Fenster links reinwerfen, 
nachdem man noch von I386 auf M68k umgestellt hat.
Intel-Hex müsste man kräftig nachbearbeiten
https://de.wikipedia.org/wiki/Intel_HEX

: Bearbeitet durch User
von Dieter (Gast)


Lesenswert?

Christoph db1uq K. schrieb:

> Den darf man per Copy&Paste in das Fenster links reinwerfen,
> nachdem man noch von I386 auf M68k umgestellt hat.
> Intel-Hex müsste man kräftig nachbearbeiten
> https://de.wikipedia.org/wiki/Intel_HEX

Was soll denn so ein Online Disassembler bringen? Das hilft
vielleicht bei einem kleinen Binary aber nicht bei halbwegs
komplexen Code.

Bei dem R6581_A02_sw.ROM ist z.B. die Zuordnung von GPIB
Kommandos auf die entsprechende Funktion in Tabellen organisiert.
So was erkennt ein "normaler" Disassembler nicht. Dafür gibt es
interaktive Tools wie IDA Pro oder Ghidra. Dabei gibt man dem
Tool im Prinzip Hinweise wie es was behandeln soll (Daten,
Code usw.). Das ist ein iterativer Prozess, damit analysiert
man schrittweise die Stellen, die einen interessieren.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Ja klar, es gibt natürlich professionelle Software. Ich wollte halt erst 
mal reinschnuppern.

IDA hatte ich schon mal gelesen, aber die free Version kann nur x86
https://hex-rays.com/ida-free/

Ghidra scheint kostenlos zu sein, stammt aber von der NSA und ist 
ziemlich umfangreich.
https://github.com/NationalSecurityAgency/ghidra
"...help protect our nation and its allies..." die werben um Helfer.

von m.n. (Gast)


Lesenswert?

Dieter schrieb:
> Der Offset der Datei R6581_A02_sw.ROM ist 0x00000000.
> Ab 0x00000400 kommt dann der Code weil die ersten 0x400
> die Vektoren sind.

68K bedingt muß ROM immer bei 0x0 beginnen. Entscheidend ist, wohin das 
Programm dann springt. Mit 0x400 bleibt es leider im ROM.

Schön wäre es, wenn der Reset-Vektor zum Beispiel auf 0x100000 zeigen 
würde. Dann müßte nach dem Start ab 0x0 RAM liegen (Vektortabelle) und 
man könnte sich mit einem TRAPx an beliebigen Stellen einklinken, ohne 
den Rest anzufassen.
Vermutlich wird das Programm auch auf absolute Adressen gelinkt sein.
So bleibt alles im Konjunktiv.

von Hmmm (Gast)


Lesenswert?

m.n. schrieb:
> 68K bedingt muß ROM immer bei 0x0 beginnen.

Jein, nur die ersten 8 Bytes (SSP und PC), bei den danach folgenden 
Interrupt-Vektoren ist das je nach Anwendung eher störend.

Beim Atari ST wurden diese 8 Bytes deshalb aus dem (ansonsten woanders 
liegenden) ROM eingespiegelt.

von Dieter (Gast)


Lesenswert?

Christoph db1uq K. schrieb:
> Ja klar, es gibt natürlich professionelle Software. Ich wollte halt erst
> mal reinschnuppern.
>

Das hat nichts mit "professionell" zu tun, auch ein professioneller
Disassembler kann das nicht automatisch. Es geht um ein interaktives
Werkzeug zur Analyse. Damit "bearbeitet" man den disassemblierten
Code (z.B. Namen an Funktionen vergeben, die man identifiziert hat)
oder eben Hinweise darauf geben ob es Code oder Daten sind, auch den
Typ von Daten (Strings, Zahlen, Strukturen usw.)

Zum nur mal reinsehen ist so ein komplexes Teil wie R6581_A02_sw.ROM
auch nicht unbedingt geeignet, dafür sollte man sich irgendein
einfaches "Reverse me" Tutorial suchen.

von K.Thaler (Gast)


Lesenswert?

Christoph db1uq K. schrieb:
> Viel Spaß beim Knobeln. Online-Disassembler brauchen einen Hex-Text, das
> Binärfile wollte die erste Fundstelle jedenfalls nicht einlesen:
> https://onlinedisassembler.com/odaweb/

Ich hab das da hochladen können.

Arch m68k
Offset 0
Endianess default.

Er zeigt dann data. an.
Die Zeile mit dem Offset 0x400 anwählen und "c" drücken
dann wird ab da disassembliert.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Na wenigstens ein Teilerfolg. Den Disassembler habe ich ergoogled, hatte 
den noch nicht gekannt. Wahrscheinlich gibt es auch da besseres. 
Immerhin scheint er Labels zu vergeben, also nicht die unterste Stufe in 
der Kategorie.

von Irgendeiner (Gast)


Lesenswert?

A. B. schrieb:
> suche Hilfe beim disassemblieren.

Hmm, Du scheiterst schon beim Disassemblieren, willst aber später dir 
Firmware verstehen? Meinst Du nicht, da passt was nicht zusammen? Wie 
stellst Du Dir das vor?

von A. B. (branadic)


Lesenswert?

Dieter schrieb:
> Bei dem R6581_A02_sw.ROM ist z.B. die Zuordnung von GPIB
> Kommandos auf die entsprechende Funktion in Tabellen organisiert.

Danke, das ist ein erster wertvoller Hinweis, wie mir scheint.

-branadic-

von m.n. (Gast)


Lesenswert?

Irgendeiner schrieb:
> Wie stellst Du Dir das vor?

Das wird A. B. schon auf die Reihe bekommen, auch wenn Du ihm völlige 
Blödheit unterstellen möchtest.

von Jester (Gast)


Lesenswert?

Dieter schrieb:
> Christoph db1uq K. schrieb:
>> Ja klar, es gibt natürlich professionelle Software. Ich wollte halt erst
>> mal reinschnuppern.
>>
>
> Das hat nichts mit "professionell" zu tun, auch ein professioneller
> Disassembler kann das nicht automatisch. Es geht um ein interaktives
> Werkzeug zur Analyse. Damit "bearbeitet" man den disassemblierten
> Code (z.B. Namen an Funktionen vergeben, die man identifiziert hat)
> oder eben Hinweise darauf geben ob es Code oder Daten sind, auch den
> Typ von Daten (Strings, Zahlen, Strukturen usw.)

Genau darum, um das Interaktive, geht es.

Gut ist es, wenn man die ganzen "Schrittchen" als Script/Batch 
hinterlegen kann - weil eben die gleichen Schritte (segmentweise) immer 
und immer wieder aufgerufen werden müssen.

Als Student hatte ich mal den Ehrgeiz, mich an einer elektrischen 
Schreibmaschine zu versuchen - dort dann den Tatstatur-Scan ausgeräumt 
und durch IEEE-1284 Code und Fifo ersetzt. Ich meinte, ich hätte damals 
den Disassembler selbst geschrieben. Liegt vergraben auf 8"-Disketten 
...

von Christoph db1uq K. (christoph_kessler)


Angehängte Dateien:

Lesenswert?

K.Thaler hat recht, man kann nach der knappen Anleitung das Binary 
direkt hochladen, hier der Programmanfang ab 0x0400. Die gesamte 
Disassembly sind 17 MByte Text.

Ich habe mich zu Atari-Zeiten nur kurz mal mit 68k-Assembler befasst. 
Immerhin meinen Ein-Nadel-Drucker Seikosha GP-100 (vom AppleII) zur 
Ausgabe einer Bildschirm-Hardcopy gebracht. Hier die "Profi"-Software 
die ich dazu gekauft habe.
https://de.wikipedia.org/wiki/Unihammer
"Nachteile: starke Geräuschentwicklung"
das stimmt!

: Bearbeitet durch User
von A. B. (branadic)


Lesenswert?

Der Hinweis mit der Tabelle ist Gold wert, ich fange an die Tabelle und 
damit auch die Befehlsstruktur im Code zu erkennen. Der Rest ist 
vermutlich Fleißarbeit. Danke für den Tipp.

-branadic-

von Olav (Gast)


Lesenswert?

Na fein:
Hier mein Beitrag

m68k-elf-objdump -b binary -m68010 -D  R6581_A02_sw.ROM > R6581.S

Man erhält ein 68k-Source file in "fieser" AT&T-Notation (mit fp=a6), 
das 7 MB groß ist und das ich wegen der Größe nicht posten möchte 
(könnte sonst ja Senge geben von einigen Sheriffs hier).

Wie der Christian ja schon gepostet hat, startet der Toshiba 68303, über 
den ich kaum etwas gefunden habe, außer daß er ne Peripherie mitbringt, 
mit:
1
     400:   13fc 0080 00ff   moveb #-128,0xffff01
2
     406:  ff01 
3
     408:  33fc 200f 00ff   movew #8207,0xfffc00
4
     40e:  fc00 
5
     410:  13fc 0028 00ff   moveb #40,0xfffc03
6
     416:  fc03 
7
     418:  13fc 0008 00ff   moveb #8,0xfffc09
8
     41e:  fc09 
9
     420:  13fc 0008 00ff   moveb #8,0xfffc0b
10
     426:  fc0b 
11
     428:  3a3c 0001        movew #1,%d5
12
     42c:  0c45 0000        cmpiw #0,%d5
13
     430:  660a             bnes 0x43c
14
     432:  13fc 0011 00ff   moveb #17,0xffff01
15
     438:  ff01 
16
     43a:  6008             bras 0x444
17
     43c:  13fc 0051 00ff   moveb #81,0xffff01
18
     442:  ff01 
19
     444:  13fc 0005 00ff   moveb #5,0xffff03
20
     44a:  ff03 
21
     44c:  33fc 7ffc 00ff   movew #32764,0xfffc0c
22
     452:  fc0c 
23
     454:  2e7c 0021 fff0   moveal #2228208,%sp
24
     45a:  4eb9 0000 2660   jsr 0x2660
25
     460:  4eb9 0000 26e6   jsr 0x26e6
26
     466:  4eb9 0000 24ec   jsr 0x24ec
27
     46c:  4eb9 0002 9afa   jsr 0x29afa
28
     472:  203c 0000 0030   movel #48,%d0
29
     478:  4e40             trap #0
30
     47a:  0c80 0000 0000   cmpil #0,%d0
31
     480:  6660             bnes 0x4e2
32
     482:  33fc 7e30 007f   movew #32304,0x7ffc94
33
     488:  fc94 
34
     48a:  13fc 0080 007f   moveb #-128,0x7ffd8f
35
     490:  fd8f 
36
     492:  33fc 0000 007f   movew #0,0x7ffc96
37
     498:  fc96 
38
     49a:  203c 0000 0000   movel #0,%d0
39
     4a0:  223c 0000 0002   movel #2,%d1
40
     4a6:  243c 0000 0002   movel #2,%d2
41
     4ac:  263c 0000 0001   movel #1,%d3
42
     4b2:  207c 0001 33d4   moveal #78804,%a0
43
     4b8:  4e40             trap #0
44
     4ba:  203c 0000 0031   movel #49,%d0
45
     4c0:  4e40             trap #0
46
     4c2:  4e73             rte

Da wird anscheinend irgendwelche Peripherie im $ffffxx-Bereich 
initialisiert, möglw.,  da auch kein move #$800,sr o.ä. zu finden ist, 
auch die IRQ gesperrt und initialisert (?)

Apropos Exception und IRQ: Fast alle enden in Endlosschleifen. Keine 
Autovektorirq.
Erst ab Vektor $C0 finden sich weitere Einträge:
1
     300:  0000 2878        orib #120,%d0
2
     304:  0000 28d0        orib #-48,%d0
3
     308:  0000 290a        orib #10,%d0
4
     30c:  0000 04da        orib #-38,%d0
5
     310:  0000 2968        orib #104,%d0
6
     314:  0000 298a        orib #-118,%d0
7
     318:  0000 298c        orib #-116,%d0
8
     31c:  0000 298e        orib #-114,%d0

Ich vermute, daß hier 8 Vektor IRQ des 68303 angesiedelt sind - von hier 
- wäre zu vermuten - käme man in die IRQ-Routinen: SER-RCV, PAR-SEND und 
was immer.

Dann fällt auf, daß ja excessiv von trap #0 Gebrauch gemacht wird 
(Vektor $80) - der hüpft .... dann irgenwann schließlich hierhin:
1
     53c:  0c40 0011        cmpiw #17,%d0
2
     540:  6600 0088        bnew 0x5ca
3
     544:  5c8f             addql #6,%sp
4
     546:  201f             movel %sp@+,%d0
5
     548:  2f0e             movel %fp,%sp@-
6
     54a:  2c7a ffd2        moveal %pc@(0x51e),%fp
7
     54e:  2c56             moveal %fp@,%fp
8
     550:  2c56             moveal %fp@,%fp
9
     552:  2f00             movel %d0,%sp@-
10
     554:  40c0             movew %sr,%d0
11
     556:  806e 00a2        orw %fp@(162),%d0
12
     55a:  46c0             movew %d0,%sr
13
     55c:  201f             movel %sp@+,%d0
14
     55e:  4a2e 0096        tstb %fp@(150)
15
     562:  671c             beqs 0x580
16
     564:  536e 0094        subqw #1,%fp@(148)
17
     568:  665c             bnes 0x5c6
18
     56a:  2f0e             movel %fp,%sp@-
19
     56c:  2c6f 000e        moveal %sp@(14),%fp
20
     570:  cf4e             exg %sp,%fp
21
     572:  ddfc 0000 000e   addal #14,%fp
22
     578:  2f26             movel %fp@-,%sp@-
23
     57a:  3f26             movew %fp@-,%sp@-
24
     57c:  2f26             movel %fp@-,%sp@-
25
     57e:  2c66             moveal %fp@-,%fp
26
     580:  0c6e ffff 0018   cmpiw #-1,%fp@(24)
27
     586:  663e             bnes 0x5c6
28
     588:  2f00             movel %d0,%sp@-
29
     58a:  302f 0008        movew %sp@(8),%d0
30
     58e:  0240 0700        andiw #1792,%d0
31
     592:  6706             beqs 0x59a
32
     594:  b06e 00a0        cmpw %fp@(160),%d0
33
     598:  662a             bnes 0x5c4
34
     59a:  4a6e 00aa        tstw %fp@(170)
35
     59e:  6606             bnes 0x5a6
36
     5a0:  4a2e 001e        tstb %fp@(30)
37
     5a4:  671e             beqs 0x5c4
38
     5a6:  302f 0008        movew %sp@(8),%d0
39
     5aa:  0240 3fff        andiw #16383,%d0
40
     5ae:  0040 2000        oriw #8192,%d0
41
     5b2:  526e 0018        addqw #1,%fp@(24)
42
     5b6:  46c0             movew %d0,%sr
43
     5b8:  201f             movel %sp@+,%d0
44
     5ba:  48e7 030c        moveml %d6-%d7/%a4-%a5,%sp@-
45
     5be:  40c6             movew %sr,%d6
46
     5c0:  6000 0144        braw 0x706
47
     5c4:  201f             movel %sp@+,%d0
48
     5c6:  2c5f             moveal %sp@+,%fp
49
     5c8:  4e73             rte
50
     5ca:  0c40 0016        cmpiw #22,%d0
51
     5ce:  6646             bnes 0x616
52
     5d0:  2f0e             movel %fp,%sp@-
53
     5d2:  2c7a ff4a        moveal %pc@(0x51e),%fp
54
     5d6:  2c56             moveal %fp@,%fp
55
     5d8:  2c56             moveal %fp@,%fp
56
     5da:  40c0             movew %sr,%d0
57
     5dc:  806e 00a2        orw %fp@(162),%d0
58
     5e0:  46c0             movew %d0,%sr
59
     5e2:  7000             moveq #0,%d0
60
     5e4:  4a2e 0096        tstb %fp@(150)
61
     5e8:  6728             beqs 0x612
62
     5ea:  4a6e 0094        tstw %fp@(148)
63
     5ee:  661e             bnes 0x60e
64
     5f0:  526e 0094        addqw #1,%fp@(148)
65
     5f4:  2c6e 0098        moveal %fp@(152),%fp
66
     5f8:  cf4e             exg %sp,%fp
67
     5fa:  ddfc 0000 0014   addal #20,%fp
68
     600:  2f0e             movel %fp,%sp@-
69
     602:  2f26             movel %fp@-,%sp@-
70
     604:  2f26             movel %fp@-,%sp@-
71
     606:  2f26             movel %fp@-,%sp@-
72
     608:  2f26             movel %fp@-,%sp@-
73
     60a:  2c66             moveal %fp@-,%fp
74
     60c:  4e73             rte
75
     60e:  526e 0094        addqw #1,%fp@(148)
76
     612:  2c5f             moveal %sp@+,%fp
77
     614:  4e73             rte
78
     616:  48e7 030e        moveml %d6-%d7/%a4-%fp,%sp@-
79
     61a:  2a7a ff02        moveal %pc@(0x51e),%a5
80
     61e:  2a55             moveal %a5@,%a5
81
     620:  2c55             moveal %a5@,%fp
82
     622:  526e 0018        addqw #1,%fp@(24)
83
     626:  2e00             movel %d0,%d7
84
     628:  0c47 0031        cmpiw #49,%d7
85
     62c:  6200 0244        bhiw 0x872
86
     630:  7000             moveq #0,%d0
87
     632:  40c6             movew %sr,%d6
88
     634:  de47             addw %d7,%d7
89
     636:  de47             addw %d7,%d7
90
     638:  4efb 7002        jmp %pc@(0x63c,%d7:w)
91
     63c:  6000 02ca        braw 0x908
92
     640:  6000 042a        braw 0xa6c
93
     644:  6000 0528        braw 0xb6e
94
     648:  6000 056c        braw 0xbb6
95
     64c:  6000 0620        braw 0xc6e
96
     650:  6000 06a2        braw 0xcf4
97
     654:  6000 070e        braw 0xd64
98
     658:  6000 0782        braw 0xddc
99
     65c:  6000 0d02        braw 0x1360
100
     660:  6000 0d72        braw 0x13d4
101
     664:  6000 1ad6        braw 0x213c
102
     668:  6000 1ada        braw 0x2144
103
     66c:  6000 19da        braw 0x2048
104
     670:  6000 0ebe        braw 0x1530
105
     674:  6000 0f2a        braw 0x15a0
106
     678:  6000 0fba        braw 0x1634
107
     67c:  6000 0086        braw 0x704
108
     680:  6000 feba        braw 0x53c
109
     684:  6000 1ace        braw 0x2154
110
     688:  6000 0ff4        braw 0x167e
111
     68c:  6000 108a        braw 0x1718
112
     690:  6000 1aba        braw 0x214c
113
     694:  6000 ff34        braw 0x5ca
114
     698:  6000 142c        braw 0x1ac6
115
     69c:  6000 1466        braw 0x1b04
116
     6a0:  6000 150c        braw 0x1bae
117
     6a4:  6000 1624        braw 0x1cca
118
     6a8:  6000 16e2        braw 0x1d8c
119
     6ac:  6000 1714        braw 0x1dc2
120
     6b0:  6000 0052        braw 0x704
121
     6b4:  6000 0c4a        braw 0x1300
122
     6b8:  6000 0b94        braw 0x124e
123
     6bc:  6000 068a        braw 0xd48
124
     6c0:  6000 068e        braw 0xd50
125
     6c4:  6000 07c2        braw 0xe88
126
     6c8:  6000 08be        braw 0xf88
127
     6cc:  6000 0036        braw 0x704
128
     6d0:  6000 0e0a        braw 0x14dc
129
     6d4:  6000 097c        braw 0x1052
130
     6d8:  6000 0a16        braw 0x10f0
131
     6dc:  6000 0b0e        braw 0x11ec
132
     6e0:  6000 0b64        braw 0x1246
133
     6e4:  6000 0bde        braw 0x12c4
134
     6e8:  6000 1706        braw 0x1df0
135
     6ec:  6000 1744        braw 0x1e32
136
     6f0:  6000 17e4        braw 0x1ed6
137
     6f4:  6000 1894        braw 0x1f8a
138
     6f8:  6000 1918        braw 0x2012
139
     6fc:  6000 1ac8        braw 0x21c6
140
     700:  6000 1d98        braw 0x249a

Anscheinend verwendet das RTOS - wie Linux68k (war das nicht auch beim 
Atari so?) - den trap #0 Befehl als SYSCALL, um ins Kernelland zu 
kommen, wobei in D0 die Nummer des entsprechenden SYSCALL steht.
SYSCALL 17 und 22 haben anscheinend eine besondere Funktion, da wird in 
irgendeiner struct, deren Adresse sich in $51e (?) ist wohl falsch, muß 
doch wohl $51c =$300100 sein, im RAM, am FP, im SR rumgespielt.

Und dann kommt die SYSCALL Sprung Tabelle: D0->D7 und  mit jmp 
%pc@(0x63c,%d7:w) dahin, welcher ca. 50 SYSCALL gewünscht war.
Das geht dann aber noch in $872 weiter, wenn D7.w > 255 war.

Aber hier wäre ja schonmal ein Ansatzpunkt, an dem man weiter machen 
könnte: die SYSCALL werden ja Schreiben/Lesen zu den peripheren 
Schnittstellen bereitstellen, Taskwechsel, Semaphore sperren usw.
Wohl eher nicht die mathematischen Funktionen .....

Tso, das waren dann 2 KB diassembliert, bleiben noch so rund 498 KB.

Gruß
Olav

von Thomas Z. (usbman)


Angehängte Dateien:

Lesenswert?

A. B. schrieb:
> Wäre toll, wenn jemand mit den entsprechenden Fähigkeiten unterstützen
> könnte und hier antwortet.

naja 640kB Bincode ist der Wahnsinn. Das macht niemand freiwillig.

Ich habs mal durch den IDA gejagt und als LST exportiert. IDA hat 
erstaunlich viele Referenzen auf die Strings schon im ersten Lauf 
gefunden. Ich hab nur die Vector Tabelle bearbeitet und den RomStart als 
Funktion deklariert


Nun bist du dran.

von Dieter (Gast)


Lesenswert?

Thomas Z. schrieb:
>
> naja 640kB Bincode ist der Wahnsinn. Das macht niemand freiwillig.
>

Ach ja? Was ist denn dann Deiner Meinung nach ein schön lesbarer
Assembler? 680x0 Assembler ist doch klar aufgebaut und wirklich
einfach lesbar, auch ohne dass man ständig in der Opcode Referenz
nachschlägt.

Um zu sehen wie die eigentlichen Kommandos (GPIB bzw. SCPI) auf
die entsprechenden Funktionen abgebildet werden braucht man weniger
als 15 Minuten. Wobei das natürlich noch nicht heisst dass man die
Funktionen vollständig versteht aber so Dinge wie Antwort-String
zurücksenden oder GPIB Fehler behandeln sind schnell sichtbar.

Die eigentliche Arbeit ist das Verstehen von den komplexeren Funktionen,
aber so einfache Dinge wie GPIB "*IDN?" gehen recht schnell.

von (prx) A. K. (prx)


Lesenswert?

Dieter schrieb:
> Ach ja? Was ist denn dann Deiner Meinung nach ein schön lesbarer
> Assembler?

Binärcode:

RCA 1802. Wenig Befehle, und die sind oft in 4 Bit Opcode + 4 Bit 
Register dargestellt. Sprungadressen 8/16-Bit absolut.

Intel 8080 lässt sich in Oktaldarstellung mit etwas Übung auch lesen, 
weil weitgehend aus 2+3+3 Bits aufgebaut und ebenfalls nicht relativ 
adressierend.

Auch 68000 gewinnt etwas durch Oktaldarstellung, weil oft in 4+3+3+3+3 
Bits codiert.

: Bearbeitet durch User
von Dieter (Gast)


Lesenswert?

(prx) A. K. schrieb:
>
>
> RCA 1802. Wenig Befehle, und die sind oft in 4 Bit Opcode + 4 Bit
> Register dargestellt. Sprungadressen 8/16-Bit absolut.
>
> Intel 8080 lässt sich in Oktaldarstellung mit etwas Übung auch lesen,
> weil weitgehend aus 2+3+3 Bits aufgebaut und ebenfalls nicht relativ
> adressierend.
>
> Auch 68000 gewinnt etwas durch Oktaldarstellung, weil oft in 4+3+3+3+3
> Bits codiert.

Du meinst direkt die Bytes zu interpretieren? Ich meine Assembler Code,
dafür hat man ja Disassembler um nicht mehr die Bytes direkt anfassen
zu müssen.

Als Beispiel aus "R6581_A02_sw.ROM", man sieht in ein paar Sekunden
dass die Funktion "strlen" macht:
1
strlen:
2
3
arg_0    =  8
4
5
    link  a6,#0
6
    movem.l  d5/a5,-(sp)
7
    movea.l  arg_0(a6),a5
8
    moveq  #0,d5
9
10
loop_334DC:
11
    tst.b  (a5)+
12
    beq.s  exit_334E4
13
    addq.l  #1,d5
14
    bra.s  loop_334DC
15
16
exit_334E4:
17
    move.l  d5,d7
18
    movem.l  (sp)+,d5/a5
19
    unlk  a6
20
    rts

von (prx) A. K. (prx)


Lesenswert?

Dieter schrieb:
> Du meinst direkt die Bytes zu interpretieren? Ich meine Assembler Code,

Du schon, er schrieb aber von "640kB Bincode".

Keine Not, mir 68000 zu erklären. Den Opcode von NOP habe ich nach 4 
Jahrzehnten noch im Kopf. ;-)

: Bearbeitet durch User
von Dieter (Gast)


Lesenswert?

(prx) A. K. schrieb:
>
> Du schon, er schrieb aber von "640kB Bincode".
>

Ist ja schön wenn man die Bytes direkt interpretieren kann, nur sehe
ich heutzutage keine Grund mehr dass man das tun muss. Vor 35
Jahren vielleicht, aber nicht mehr heute. Und selbst da gab es
schon eingebaute Disassembler im ROM.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

>Toshiba 68303, über den ich kaum etwas gefunden habe

Datenblätter gibt es mindestens zwei:
http://www.datasheet-pdf.com/PDF/TMP68303F-16-Datasheet-Toshiba-528996
https://datasheetspdf.com/pdf-file/528995/Toshiba/TMP68303/1
202 und 161 Seiten. Nicht durchsuchbar.

von dfIas (Gast)


Lesenswert?

Christoph db1uq K. schrieb:
> Nicht durchsuchbar.
OCR sollte damit schon klarkommen.

von A. B. (branadic)


Angehängte Dateien:

Lesenswert?

Mit Hilfe des Handbuchs und des Firmware-Files habe ich jetzt 
nachfolgende Tabelle erstellt. So ganz komplett ist die Tabelle jedoch 
noch nicht, ich kann die Zuordnung der Befehle:

HOSEI:
HOSEI?
EEPROM:
DEF?
NEW?

Ich vermute, dass sie im Layer3 angesiedelt sind, aber ich kann nicht 
erkennen in welchem Layer1 und Layer2 Menu sie angesiedelt sind.
Meine Versuche sie als Layer2-Befehl aufzurufen waren nicht erfolgreich.

-branadic-

: Bearbeitet durch User
von Kurt M. (trukm)


Angehängte Dateien:

Lesenswert?

Hallo branadic,

Ich habe mir das File von Thomas Z. (R6581_A02_sw.zip) mal angeschaut 
und
kann bestätigen, dass es sich bei dem vorliegenden Betriebssystem-Kern
um den Kernel VRTX32/68000 Ver. 1.05 von Ready Systems handelt.

Hier gibt es neben anderen Dokumenten
http://www.bitsavers.org/pdf/hunterAndReady/
noch ein passendes User Manual dazu:
http://www.bitsavers.org/pdf/hunterAndReady/541311001_VRTX32_68000_Users_Guide_Release_1_Apr87.pdf

Der Kernel hat eine Grösse von 8124 Bytes und beginnt in dem Listing
auf Adresse $04FC. Das erste Byte nach dem Kernel ist auf $24B8.

Auf Adresse $51E ist ein Pointer auf die Config-Table ($0100), siehe
S. 4-3 im Manual. Der erste Eintrag in dieser Tabelle ist ein Pointer
auf die Workspace. Der Wert $0105 auf Adresse $0522 ist übrigens die
Versionsnummer (1.05).

Ich habe genau diesen Betriessystem-Kern vor etwa 30 Jahren, vermutlich
in einem Anflug von geistiger Umnachtung, disassembliert und 
kommentiert.

Im angehängten zip-File ist das disassemblierte Quellprogramm 
(vrtx32.src)
sowie 2 Include-Files mit Konstantendefinitionen und der Struktur der
Workspace. Das Listing habe ich mit einem m68k-elf-as gemacht.

von A. B. (branadic)


Lesenswert?

Ich habe gerade gesehen, dass in meinem letzten Post einige Sachen 
verloren gegangen sind, daher hier noch einmal in korrektem Deutsch:

Mit Hilfe des Handbuchs und des Firmware-Files habe ich jetzt
nachfolgende Tabelle erstellt. So ganz komplett ist die Tabelle jedoch
noch nicht, ich kann die Zuordnung der Befehle:

HOSEI
HOSEI:
HOSEI?
EEPROM:
REF?
DEF?
NEW?
RAM
RAM?
INTEGER

nicht identifizieren.
Ich vermute, dass sie im Layer3 angesiedelt sind, aber ich kann nicht
erkennen zu welchem Layer1 und Layer2 Menu sie gehören. Wirklich klar 
ist die Tabelle also doch nicht zu erkennen.
Meine Versuche sie als Layer2-Befehl z.B. ":SYST:HOSEI?" oder als 
Layer3-Befehl z.B. ":SYST:HOSEI:HOSEI?" aufzurufen waren bisher 
erfolglos.
Einen klassischen "DUMP?" Befehl habe ich auch nicht finden können, wie 
das bei anderen Geräten ja zum Teil der Fall ist.

-branadic-

: Bearbeitet durch User
von Sebastian M. (chick3n)


Lesenswert?

Ich habe hier ein Passwort Problem bei einem anderen Advantest gerät, 
auf dem auch VRTX32 läuft.

Vielleicht kann ein VRTX Experte mal reinschauen. Danke!

Beitrag "Advantest R3273 Passwort"

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.