Robotrontechnik-Forum

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

Robotrontechnik-Forum » Technische Diskussionen » P8000 Firmware erzeugen - 16 Bit » Themenansicht

Autor Thread - Seiten: -1-
000
12.08.2009, 17:00 Uhr
Olli

Avatar von Olli

Da holm das ja gerade versucht - dachte ich - mache ich mal wieder n neues Thema auf

Also - ich bekomme hier auch mit folgendem p.dummy.s keine Firmware die 1:1 identisch mit der Originalfirmware ist hin.

-rwxrwxrwx 1 wega system 18432 Sep 2 21:50 MON16


Quellcode:
p.dummy.s
dummy module

$SECTION PROM

  internal
        array [%6b0 byte]        !auffuellung auf %1f0 byte!
        
end dummy

OK - am Ende sind nur Leerzeichen, aber vergleicht man mal den Hexdump wird man feststellen, das zummindest alles an anderen Stellen ist und die Jumps daher auf andere Adressen fuehren...
http://pofo.de/P8000/misc/EPROM-Sammlung/16BIT/full/unterschiede.diff
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
12.08.2009, 17:52 Uhr
holm

Avatar von holm

Dazu bin ich wegen Deiner Timergeschichte noch gar nicht gekommen, vermute aber, das das an einer anderen Anordnung der Objekte im Original liegt, als in der Doku steht.

Hmm, Im diff sieht das so aus, als ob da immer ein Offset von 0x20 in diversen Bytes
währe, ich vermute eine Schweinerei:

Zitat Hardwarehandbuch:

Quellcode:
Der On-Board-Speicher liegt im Segment 0, Offset-Adresse
           0000H ... 3FFEH Festwertspeicher
           4000H ... 47FFH Schreib-/Lesespeicher.
Bei     aktivem      On-Board-Speicher      beginnt      die
Hauptspeicheradresse   bei   <00>8000H.   Wegen   der nicht
vollstaendigen Adressdekodierung fuer     den   SRAM-Bereich
erscheint dieser im Bereich 4000 bis 6000 viermal in
Abstaenden zu je 2 KByte. Der Adressbereich <00>6000 bis
<00>7FFF ist leer.

Wenn die mal nicht die die RAMs auf anderen Andressen vollquatschen als dokumentiert..

Gruß,

Holm
--
float R,y=1.5,x,r,A,P,B;int u,h=80,n=80,s;main(c,v)int c;char **v;
{s=(c>1?(h=atoi(v[1])):h)*h/2;for(R=6./h;s%h||(y-=R,x=-2),s;4<(P=B*B)+
(r=A*A)|++u==n&&putchar(*(((--s%h)?(u<n?--u%6:6):7)+"World! \n"))&&
(A=B=P=u=r=0,x+=R/2))A=B*2*A+y,B=P+x-r;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
12.08.2009, 18:11 Uhr
Olli

Avatar von Olli

Ich weiss nur, das ich damals ne ganze Zeitlang rumprobiert hatte... irgendwie bin ich nich auf n gruenen Zweig gekommen.... Nur irgendwie muessen sie es ja erzeugt haben....
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
12.08.2009, 18:30 Uhr
holm

Avatar von holm

ja, aber eben anders als dokumentiert.
Du kannst ja mal vor dem strip im makefile nm über MON16 laufen lassen und
dir die Symbole angucken. Das ist das, was ich vor sa.timer eigntlich auch vor hatte..

Gruß,

Holm
--
float R,y=1.5,x,r,A,P,B;int u,h=80,n=80,s;main(c,v)int c;char **v;
{s=(c>1?(h=atoi(v[1])):h)*h/2;for(R=6./h;s%h||(y-=R,x=-2),s;4<(P=B*B)+
(r=A*A)|++u==n&&putchar(*(((--s%h)?(u<n?--u%6:6):7)+"World! \n"))&&
(A=B=P=u=r=0,x+=R/2))A=B*2*A+y,B=P+x-r;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
12.08.2009, 19:30 Uhr
holm

Avatar von holm

Ok, gucken wir uns doch mal die ersten beiden Zeilen mit Differenzen an:


Quellcode:
Original
-00000070  4d 00 0e 3a 00 02 50 52  0e 66 00 03 50 52 53 00  |M..:..PR.f..PRS.|
Eigenbau
+00000070  4d 00 0e 1a 00 02 50 52  0e 46 00 03 50 52 53 00  |M.....PR.F..PRS.|

das ist also innerhalb des ersten Moduls in p.init.s hier:


Quellcode:
006A 46             538         ARRAY [* BYTE] := 'F'
006C 0000*          539         WORD    := FILL
                    540
006E 0001           541         WORD    := 1
0070 4D             542         ARRAY [* BYTE] := 'M'
0072 0000*          543         WORD    := MOVE
                    544
0074 0002           545         WORD    := 2
0076 50  52         546         ARRAY [* BYTE] := 'PR'
0078 0000*          547         WORD    := PORT_READ
                    548
007A 0003           549         WORD    := 3

Da steht also auf der Adresse 0070, das dort ein "M" abgelegt werden soll (0x4d)
augenscheinlich ist hier ein String Ende mir 0x00 dran, denn hinter dem 0x4d steht ein Byte mit einer 0x00.
Danach soll der Linker die Referenz zu MOVE auf die Adresse 0x72 einsetzen, was der Eigenbau auch mit 0x0e und 0x1a macht, das Original aber mit 0x0e 0x3a.
Die von nm ausgegebenen Symbole zeigen das MOVE ein Datensymbol ist und auf Adresse 0x0e1a liegt: " 0e1a D MOVE".

Das heißt irgend etwas 20 byte langes lag im Original noch vor dem jetzigen Symbol.
Warscheinlich haben die das rausgeixt und dann in p.dummy.s die Zusammenfassung erfunden...

Ich suche mal wo das Stück fehlt....

Gruß,

Holm
--
float R,y=1.5,x,r,A,P,B;int u,h=80,n=80,s;main(c,v)int c;char **v;
{s=(c>1?(h=atoi(v[1])):h)*h/2;for(R=6./h;s%h||(y-=R,x=-2),s;4<(P=B*B)+
(r=A*A)|++u==n&&putchar(*(((--s%h)?(u<n?--u%6:6):7)+"World! \n"))&&
(A=B=P=u=r=0,x+=R/2))A=B*2*A+y,B=P+x-r;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
12.08.2009, 19:32 Uhr
Olli

Avatar von Olli

Jo... ich hatte auch schon in verschiedenen Modulen "dummy arrays" definiert um die Module zu verschieben...
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000

Dieser Beitrag wurde am 12.08.2009 um 19:32 Uhr von Olli editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
12.08.2009, 19:56 Uhr
Olli

Avatar von Olli

Ich hatte auch schonmal ueberlegt, ob die Firmware evtl. mit dem Z8000 Cross-Assembler unter UDOS erstellt wurde - ich glaube aber, das liess sich nicht assemblieren....
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
007
12.08.2009, 20:53 Uhr
holm

Avatar von holm

Na mal gucken, ich habe jetzt erst mal eine Stunde telefoniert, jetzt geht es weiter...
Gruß,

Holm
--
float R,y=1.5,x,r,A,P,B;int u,h=80,n=80,s;main(c,v)int c;char **v;
{s=(c>1?(h=atoi(v[1])):h)*h/2;for(R=6./h;s%h||(y-=R,x=-2),s;4<(P=B*B)+
(r=A*A)|++u==n&&putchar(*(((--s%h)?(u<n?--u%6:6):7)+"World! \n"))&&
(A=B=P=u=r=0,x+=R/2))A=B*2*A+y,B=P+x-r;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
008
12.08.2009, 23:18 Uhr
holm

Avatar von holm

Du hattest nur nicht genügend Geduld...
Wo die Nullen im Hexdump sind sieht man doch so schön.. :-)

Ich habsjetzt also. Nun müßte man nur noch über den CRC Scheiß nachdenken den die da anbieten, Du hattest doch damit auch schon mal herumgeopert?
in p.brk.s und in p.init.s sind 2 Platzhalterarrays mit %60 und %20 bytes drin und die position von p.dummy.s mit %630 bytes muß vor p.disk.s im makefile,
das war es dann schon.
Ich wickele Dir den Kram morgen zusammen und schicke Dir eine Mail.
Du kannst das dann irgendwo bei laladev haltbar anbringen und evtl. die mon16.doc
aktualisieren.

Gruß,

Holm
--
float R,y=1.5,x,r,A,P,B;int u,h=80,n=80,s;main(c,v)int c;char **v;
{s=(c>1?(h=atoi(v[1])):h)*h/2;for(R=6./h;s%h||(y-=R,x=-2),s;4<(P=B*B)+
(r=A*A)|++u==n&&putchar(*(((--s%h)?(u<n?--u%6:6):7)+"World! \n"))&&
(A=B=P=u=r=0,x+=R/2))A=B*2*A+y,B=P+x-r;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
009
13.08.2009, 06:48 Uhr
Olli

Avatar von Olli

Jo - mache das mal
Ich ueberlege mir dann ne schoene Stelle in meinem CVS fuer die ganzen Firmwares
Die 8-Bit Firmware habe ich unter UDOS auch nie so hinbekommen wie das Original *hint*

http://pofo.de/P8000/misc/sources/EAW/Firmware/Firmware_-_MON16-WDC/WDC/README

Dort steht was ueber die Checksummen... aber ich glaube in der crc.doc von mon16 steht auch was....
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
010
13.08.2009, 10:25 Uhr
Olli

Avatar von Olli

Ich habe den ganzen Spass jetzt auf cvs.laladev mal eingecheckt. Ich musste dazu die Struktur etwas anpassen.

http://cvs.laladev.de/index.html/P8000/

Ich denke von dort an sollte es selbsterklaerend sein. Ich werde jetzt nach und nach alle Sourcen die ich habe da reinpacken und dann mein misc/sources loeschen damit da nix doppelt rumliegt. Ich werde dann unter misc/sources ein CVS export des ganzen Trees bei Aenderung am Tree machen.....

EDIT:
CVS Reorg abgeschlossen.... tar.gz liegt unter http://pofo.de/P8000/misc/sources/P8000_sources.tar.gz
Da ist jetzt quasi alles drinn - aendert sich was im CVS gibts n naechtlich generiertes neues tar.gz - ansonsten nich
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000

Dieser Beitrag wurde am 13.08.2009 um 13:24 Uhr von Olli editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
011
13.08.2009, 17:37 Uhr
Enrico
Default Group and Edit


Sagt mal ihr 2, ich dachte die Firmware wäre in Assembler geschrieben?
Hatte da doch mal eine Quelle in der Hand?
--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
012
13.08.2009, 17:41 Uhr
holm

Avatar von holm

Naja doch, ist doch Assembler..

Sieht wohl nicht so aus? Das oben sind doch nur ein paar Datenfeldreservierungen,
sowas wie DW Symbol und DS ...

Was findest du daran komisch?

Ein Stückchen tiefer in der selben Datei sieht es dann so aus:


Quellcode:
!Berechnen der Zeichenzahl des eingeg. Kommandonamens!
CMDL1:
        resb    FLAG1, #%02     !Flag: NEXT-Betrieb ruecksetzen!
        ld      r11, INPTR      !Stand INPTR retten (zeigt auf 1. Zeichen)!
        ld      r8, #0          !r8 - Zeichenzaehler des eingeg. Kommandos!
CMDL2:
        call    GET_CHR         !rl0 := Zeichen, auf das INPTR zeigt,
                                 INPTR := INPTR + 1!
        jr      z, CMDL3        !Zeichen = CR!
        cpb     rl0, #' '
        jr      z, CMDL3        !Zeichen = SPACE!
        inc     r8, #1          !Zeichenzaehler erhoehen!
        jr      CMDL2           !naechstes Zeichen!
!Kommando in Kommandoliste suchen!
CMDL3:


..nur das das oben das Assembler List file ist und das hier drüber die Source.



Gruß,

Holm
--
float R,y=1.5,x,r,A,P,B;int u,h=80,n=80,s;main(c,v)int c;char **v;
{s=(c>1?(h=atoi(v[1])):h)*h/2;for(R=6./h;s%h||(y-=R,x=-2),s;4<(P=B*B)+
(r=A*A)|++u==n&&putchar(*(((--s%h)?(u<n?--u%6:6):7)+"World! \n"))&&
(A=B=P=u=r=0,x+=R/2))A=B*2*A+y,B=P+x-r;}

Dieser Beitrag wurde am 13.08.2009 um 17:44 Uhr von holm editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
013
13.08.2009, 17:44 Uhr
Enrico
Default Group and Edit


Ich hatte so den Eindruck, dass es wie C aussieht. Vielleicht auch nur mit dem andren Fred verwechslet?
--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
014
13.08.2009, 17:45 Uhr
holm

Avatar von holm

lies nochmal :-)
.. und nö, die Zuweisungen sehen eher wie Pascal aus :-)

Gruß,

Holm
--
float R,y=1.5,x,r,A,P,B;int u,h=80,n=80,s;main(c,v)int c;char **v;
{s=(c>1?(h=atoi(v[1])):h)*h/2;for(R=6./h;s%h||(y-=R,x=-2),s;4<(P=B*B)+
(r=A*A)|++u==n&&putchar(*(((--s%h)?(u<n?--u%6:6):7)+"World! \n"))&&
(A=B=P=u=r=0,x+=R/2))A=B*2*A+y,B=P+x-r;}

Dieser Beitrag wurde am 13.08.2009 um 17:45 Uhr von holm editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
015
13.08.2009, 17:48 Uhr
Enrico
Default Group and Edit


OK, schon viel besser

Mich hat das etwas irritiert, weil es weiter oben "makefile" etc. heisst.
--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
016
13.08.2009, 19:03 Uhr
holm

Avatar von holm

Enrico "make" ist ein Unix Tool, das nach in einem makefile definierten Regeln aAbläufe automatisieren kann. Das ist also sowas wie eine Batch Geschichte nur in sofern besser, als das es anhand der Verfügbarekein und Änderungszeiten der Quell und Zwischendateien selbständig festellt, was noch zu tun und was schon fertig ist.

Guck mal:

Quellcode:
OBJS=   p.init.o p.term.o p.comm.o p.brk.o p.test.o p.gesa.o \
        p.ldsd.o p.boot.o p.dummy.o p.disk.o p.crc.o p.ram.o

all:    MON16

clean:
    rm -f MON16 ${OBJS}
MON16:  ${OBJS}
    ld ${OBJS} -o MON16
    nm MON16 >symbols
    strip -h MON16

Das ist der Inhalt des obigen Makefiles.

Es gibt verschiedene Targets: "all", "clean" und "MON16"

man kann also schreiben make all, make clean, make MON16 oder einfach make,
dann macht der "all". "all" wiederum ist abhängig von der Existenz von "MON16",
deshalb macht das Ding "MON16".
"MON16" ist abhängig von ${OBJS} also von den Objektfiles die oben definiert sind,
nun guckt das Ding nach p.init.o, merkt das das nicht da ist und grast interne Regeln ab wie das eventuell zu bewerkstelligen währe, ein p.init.c würde durch den C-Compiler gewickelt, gibts aber nicht, dafür ein p.init.s wobei ".s" make anhand seiner internen Regeln als Assembler Source bekannt ist, deshalb leiert er das Ding selbständig durch den Assembler. Die Regeln können überschrieben werden.
make "clean" löscht die ganzen objekte und MON16 wieder weg...

Praktische Sache, oder häh?

Make ist einer der Gründe warum ich unter Unix mit der Tastatur viel viel schneller bin als irgend ein Mausschubser unter $innlo$...
Gruß,

Holm
--
float R,y=1.5,x,r,A,P,B;int u,h=80,n=80,s;main(c,v)int c;char **v;
{s=(c>1?(h=atoi(v[1])):h)*h/2;for(R=6./h;s%h||(y-=R,x=-2),s;4<(P=B*B)+
(r=A*A)|++u==n&&putchar(*(((--s%h)?(u<n?--u%6:6):7)+"World! \n"))&&
(A=B=P=u=r=0,x+=R/2))A=B*2*A+y,B=P+x-r;}
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
017
13.08.2009, 19:09 Uhr
Enrico
Default Group and Edit



Zitat:
holm schrieb
Praktische Sache, oder häh?

Scheint so zu sein. Nur verstehen muss mans, und sich mit beschäftigen.
Wie üblich.
--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
018
13.08.2009, 19:17 Uhr
Olli

Avatar von Olli

Naja - die Sourcen sind in PLZ/ASM geschrieben - das ist Assembler - aber auch nicht nur

http://pofo.de/P8000/notes/books/WEGA_Dienstprogramme_Band_A/1988_12/WEGA_Dienstprogramme_Band_A.pdf

kann ich da als Lektuere empfehlen.... Ansonsten gibts auch noch dedizierte Buecher zu PLZ/ASM was ja von Zilog "erfunden" wurde - wie PLZ/SYS.
--
P8000 adventures: http://pofo.de/blog/?/categories/1-P8000
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