Forum: Compiler & IDEs bare metal m68k-elf.gcc.


von Holm T. (Gast)


Lesenswert?

Ich habe wahrscheinlich aus einem nostalgischen Anfall heraus eine 
meiner KATCE-1.4E Platinen hervorgekramt um damit wieder mal zu spielen.
Die KATCE waren wohl mal vor Jahrzehnten ein Projekt der MC (schade um 
diese Zeitung!) und wurden mit irgendeinem Pearl RTOS verkauft.
Ich habe 2 dieser Platinen aber mit Pearl oder Pascal da nie was am Hut 
gehabt.
Vor vielen Jahren habe ich die Dinger mit einer MC68010 CPU ausgerüstet, 
die gefiel mir besser al die MC68000, und darauf einen frei im 
Sourcecode erhältlichen Motorola Debugger portiert (FBUG). Der FBUg ist 
relativ komplex und enthält u.A. einen Assembler, einen Disassembler und 
ein Testsystem das u.a. die Traps der CPU nutzt und diese auch 
behandelt.
Der Debugger ist in Assembler und C geschrieben, ich habe die Syntax 
damals angepaßt und eine Cross Umgebung auf FreeBSD aufgesetzt 
(m68k-coff). Der Compiler war damals ein gcc-2.9.5.
Weiterhin hatte ich crt0.o etc angepaßt, das ich Programme compilieren 
und als s-Record auf diese KATCE laden und dort ausführen konnte, der 
Debugger übernahm einen Teil der IO-Bibliothek.

Einen gcc-2.9.5 kann ich auf "amd64-unknown-freebsd" nicht mehr 
vernünftig übersetzen, so bin ich jetzt bei binutils-2.16.1,newlib-1.9.0 
und gcc-3.3.6 gelandet, selbst da gabs noch einige Bugs die die 
Übersetzung erst mal verhinderten, habe aber noch gegoogelt und 
gepatched so das ich das Ding zumindest durchkompiliert bekomme.

Ich habe den FBUG neu übersetzt und eine Mimik gebastelt die mir die 
beiden ROMS erzeugt, das Ding läuft auch an aber wirft bei jedem 
Kommando exeptions.

Copyright Motorola Inc. 1989 All Rights Reserved
Fbug68 Monitor/Debugger Version 1.1 - 9/28/89

MOTOROLA> rd
im ersten case
in printreg()
PC   =$Address Error

"im ersten case und in printreg()) sind debugging printfs von mir, der 
Adress Error ist das Problem, normalerweise sollte der da die 
Registerinhalte der Debugging CPU (copy der Register im RAM) anzeigen.
Ich habe noch einen EPROM Satz der das kann und ich habe noch alte 
compilate auf der Platte. Deshalb bin ich auf einigeUnterscheide bei der 
Übersetzung gestoßen:

Hier Datenbereiche im .bss segment:

alt:
 COMMON         0x001fe000      0xa64 coldport.o
                0x001fe000                sizechar
                0x001fe004                condition
                0x001fe010                argv
                0x001fe060                tracecount
                0x001fe064                stackptr
                0x001fe070                brtable
                0x001fe110                lastcmd
                0x001fe160                asmaddr
                0x001fe164                handlerflag
                0x001fe170                assemblycode
                0x001fe1a0                actualfield
                0x001fe1e0                regdata
                0x001fe264                MIPOST
                0x001fe268                confres
                0x001fe26c                argc
                0x001fe270                opwordsyntax
                0x001fe338                overheadRTS
                0x001fe340                mpu
                0x001fe448                asmdata
                0x001fe44c                startbenchmark
                0x001fe450                m8
                0x001fe850                Field_option
                0x001fe85c                error
                0x001fe860                instructnum
                0x001fe870                Fieldoption
                0x001fe87c                snum

neu:
 COMMON         0x00000000001fe000      0xa0a coldport.o
                0x00000000001fe000                sizechar
                0x00000000001fe002                condition
                0x00000000001fe006                argv
                0x00000000001fe056                tracecount
                0x00000000001fe05a                stackptr
                0x00000000001fe05e                brtable
                0x00000000001fe0fe                lastcmd
                0x00000000001fe14e                asmaddr
                0x00000000001fe152                handlerflag
                0x00000000001fe156                assemblycode
                0x00000000001fe182                actualfield
                0x00000000001fe1b4                regdata
                0x00000000001fe238                MIPOST
                0x00000000001fe23c                confres
                0x00000000001fe240                argc
                0x00000000001fe244                opwordsyntax
                0x00000000001fe30c                overheadRTS
                0x00000000001fe310                mpu
                0x00000000001fe418                asmdata
                0x00000000001fe41c                startbenchmark
                0x00000000001fe420                m8
                0x00000000001fe81c                Field_option
                0x00000000001fe826                error
                0x00000000001fe82a                instructnum
                0x00000000001fe82e                Fieldoption
                0x00000000001fe838                snum


Man sieht, dass der Bereich sizechar im alten compilat 4 Byte groß ist, 
im neuen nur 2. Normalerweise ist das neue richtiger, denn sizechar ist 
als
char sizechar[2]; definiert, also Ein Feld mit 2 Byte Elementen. Mit den 
alten ROMS kann ich mir den Bereich anzeigen lassen und sehe das der 
auch nur das erste und dritte Byte benutzt.
Der Bereich regdata ist aber in beiden Compilaten 84Byte groß, das ist 
der Bereich in dem die oben angeführten Copies der CPU Register liegen.

Ich weiß nach all den Jahren in denen ich mit M68K nichts mehr gemacht 
habe nun nicht mehr wirklich wie die CPU auf ein Byte zugreift. Geht 
hier wirklich Byte Zugriff auf unaligned Adressen oder ist das das 
Problem mit dem Address Error?

Die KATCE 1.4 hat derzeit 2 Eproms mit 64Kbyte (27c512, das Debugging 
gestaltet sich durch die Erase/Burn Zyklen etwas zäh, auch mit einem 
Stapel Eproms) und 4 Stück 628128 RAMs, also 512K, beides 
Wortorganisiert.
Steht hier noch Jemand in der Materie?

BTW: Gibts hier Gnu LD Linkerscript-Spezis? Die ganzen komischen 
Sections in einem ELF File sind einfach nur krank. Da war COFF ja echt 
easy..

Ich lade das ganze fbug Directory mit den Sourcen und den Objects auf 
den Webserver.

In 10 Minuten mal auf http://www.tiffe.de/Robotron/Motorola/fbug 
gucken...

Gruß,

Holm

von Markus F. (mfro)


Lesenswert?

Holm Tiffe schrieb:
> Steht hier noch Jemand in der Materie?

ein wenig.

Wenn ich das auf die Schnelle richtig sehe, kracht's ja wohl hier:
1
print("=%c%8x   ",HEXDEL,reg[i].value);

Gehen wir mal davon aus, daß print() halbwegs richtig funktioniert 
(schließlich hast Du ja andere Ausgaben hingekriegt), kann der 
Addressfehler ja wohl nur bedeuten, daß reg[i].value (ein int) - warum 
auch immer - an einer ungeraden Adresse liegt.

Ich würde mal annehmen, daß mit deinem Compiler was nicht stimmt. Hier 
im Board gibt's irgendwo eine Anleitung, den m68k ELF compiler zu bauen, 
das hat für mich ohne Patchen auf Anhieb funktioniert.

von Myxo M. (myxom)


Lesenswert?

Holm Tiffe schrieb:
> Ich habe wahrscheinlich aus einem nostalgischen Anfall heraus eine
> meiner KATCE-1.4E Platinen hervorgekramt um damit wieder mal zu spielen.

Nein, das ist/war kein nostalgischer Anfall :-)

Angekotzt von den Arduino-Freds hier habe ich heute abend mein im 
Studium selbstgefädeltes Z80-Board(8255 etc.) (1MHz maximum) 
hervorgekramt und den Pascal-Compiler (im Soure) weiterentwickelt.
Mach weiter so!

von Holm T. (Gast)


Lesenswert?

Markus F. schrieb:
> Holm Tiffe schrieb:
>> Steht hier noch Jemand in der Materie?
>
> ein wenig.
>
> Wenn ich das auf die Schnelle richtig sehe, kracht's ja wohl hier:
>
>
1
print("=%c%8x   ",HEXDEL,reg[i].value);
>

..fast..

> Gehen wir mal davon aus, daß print() halbwegs richtig funktioniert

...nein.

ein print("blah\n"); funktioniert, ein print("balh%d\n",5); fliegt auf 
die Gusche.
Es knall scheinbar irgendwo in  int format(pfmt) im File printport.c.

> (schließlich hast Du ja andere Ausgaben hingekriegt), kann der
> Addressfehler ja wohl nur bedeuten, daß reg[i].value (ein int) - warum
> auch immer - an einer ungeraden Adresse liegt.
>
> Ich würde mal annehmen, daß mit deinem Compiler was nicht stimmt. Hier
> im Board gibt's irgendwo eine Anleitung, den m68k ELF compiler zu bauen,
> das hat für mich ohne Patchen auf Anhieb funktioniert.

Ich habe das eigentlich schon ein paar mal gemacht, meist zu den Zeiten, 
als es hier noch keine Anleitungen dafür gab.
/Binutils konfigurieren und bauen, danach gcc als Crosscompiler ohne 
standardincludes mit newlib konfigurieren und basteln. Das Ergebnis 
sollte tun..)

Ich schätze mal ein Teil meines Problems ist das ich unter x86_64 als 
Host arbeite, also mit einem 64 Bit System. Ich hatte auch gelesen das 
andere Leute so ihre Sorgen damit hatten, auch scheint m68k-elf 
zumindest im gcc-3.4.6 noch nicht das Gelbe vom Ei zu sein.

Ich scheine hier Probleme damit zu haben, das die alten gccs auf amd64 
nicht recht zu bauen sind und bei neueren compilern m68k nicht mehr 
taugt...

Ich werde morgen m68k noch mal als m68k-coff bauen und gucken was 
passiert (Binaries vergleichen) danach baue ich das ganze noch mal in 
einer 32Bit VM...

Hatte ich erwähnt das das Löschen und nachfolgende Bruzeln von 28F010 
viel länger dauert als das von 27C512 (bei selbem Inhalt)? Ich habe die 
Dinger wieder Beiseite gelegt. :-|

Gruß,

Holm

von Holm T. (Gast)


Lesenswert?

Myxo Matrose schrieb:
> Holm Tiffe schrieb:
>> Ich habe wahrscheinlich aus einem nostalgischen Anfall heraus eine
>> meiner KATCE-1.4E Platinen hervorgekramt um damit wieder mal zu spielen.
>
> Nein, das ist/war kein nostalgischer Anfall :-)
>
> Angekotzt von den Arduino-Freds hier habe ich heute abend mein im
> Studium selbstgefädeltes Z80-Board(8255 etc.) (1MHz maximum)
> hervorgekramt und den Pascal-Compiler (im Soure) weiterentwickelt.
> Mach weiter so!


...Ich habe nix gegen Arduinos. Ich finde die kleinen Platinen Klasse, 
allerdings habe ich die Software mit dem Arsch noch nicht angeguckt und 
werde das wohl auch nie tun.

Z80 Zeugs liegt hier auch rum. Pascal habe ich verlernt, unter 
Turbopascal 3.02A habe ich mal Pascal programmiert und bei C wie eine 
Sau ins Uhrwerk geguckt. Heute ist das irnkwie anders herum...

Gruß,

Holm

von Markus F. (mfro)


Lesenswert?

Wie gesagt, ich hatte keine Probleme, m68k-elf-gcc nach dieser: 
http://www.mikrocontroller.net/articles/GCC_M68k Anleitung zu bauen (nur 
neuere gcc-Version: 4.6.4 mit den dazugehörigen binutils) und der funzt 
einwandfrei. Mit x86_64 als host, versteht sich.

Holm Tiffe schrieb:
> Es knall scheinbar irgendwo in  int format(pfmt) im File printport.c.

Ok. Dann ist da wahrscheinlich der Hund begraben und der Compiler 
möglicherweise in Ordnung:
1
int print(pfmt)
2
char *pfmt;
3
{
4
  return(format(&pfmt));    /* pass ptr to fmt ptr */
5
}
6
7
int format(pfmt)
8
char **pfmt;        /* pointer to pointer to format string */
9
{
10
   ...
11
   pformat = *pfmt++;  /* set "format" to the format string */
12
   pargument = (char *) pfmt;

Variable Argumentliste ohne stdarg.h/varargs.h (ohne dem Compiler was 
davon zu verraten) und und dann irgendwann das da:
1
pvalue = *(int *)pargument;

Ich hab's nicht vollständig durchbohrt (ist also durchaus möglich, daß 
ich falsch liege), würde aber fast wetten, daß es da dran liegt.
1
print("irgendwas %d\n", 5);

Geht wohl schon schief, weil eben nicht die Adresse der Konstanten auf 
dem Stack liegt, sondern die Konstante selbst.
Erstaunlich, daß das schon mal funktioniert haben soll. In printunix.c 
scheint's  einigermaßen sauber gemacht zu sein (und da steht auch im 
Kommentar, warum's so gemacht werden muß).

: Bearbeitet durch User
von Holm T. (Gast)


Lesenswert?

Du hast sicherlich Recht, aber funktioniert hat das mal, ich habe ja 2 
EPROMS mit einem Compilat der selben Source drin das funktioniert.
Das war aber sicherlich ein GCC vom Anfang der 2er Versionen oder ein 
1.4 der das übersetzt hat, es rüde mich nicht wundern wenn sicher hier 
die calling conventions mittlerweile deutlich verändert haben.
Was die Programmierer von Motorola sich dabei gedacht haben ist auch für 
mich nicht so ohne Weiteres nachvollziehbar, dummerweise ist auch die 
printunix.c Version mit der alten pre-ISO Variante von Varargs seit gcc3
raus geflogen.

Ich werde als den varags- Kram lernen müssen und versuchen das zu 
portieren,
das habe ich bisher noch nie benutzt.

Der Vollständigkeit halber werde ich mal den gcc mit den configs die Du 
verlinkt hast durchdrehen, denke aber nicht das das was ändert.

Gruß,

Holm

von Holm T. (Gast)


Lesenswert?

So. Ich habe jetzt nach obier Anleitung den gcc4 mit Newlib gebaut und 
installiert. Zusätzlich habe ich das file printport.c geändert und das 
tiny printf von hier eingebaut: 
http://www.xappsoftware.com/wordpress/2011/01/17/a-tiny-printf-for-embedded-systems/

Ergebnis: Keine Änderung :-|

Jetzt knallt es in printi():

Copyright Motorola Inc. 1989 All Rights Reserved
Fbug68 Monitor/Debugger Version 1.1 - 9/28/89

MOTOROLA> rd
hallo 124Address Error

PC   =$124Address Error

PC   =$124Address Error

PC   =$124Address Error

PC   =$124Address Error

printi() hatte ich mit putchars gespickt, das sind diese "124"
1
#define PRINT_BUF_LEN 12
2
3
static int printi(char **out, int i, int b, int sg, int width, int pad, int letbase)
4
{
5
        char print_buf[PRINT_BUF_LEN];
6
        register char *s;
7
        register int t, neg = 0, pc = 0;
8
        register unsigned int u = i;
9
10
        if (i == 0) {
11
                print_buf[0] = '0';
12
                print_buf[1] = '\0';
13
                return prints (out, print_buf, width, pad);
14
        }
15
putcr('1');
16
17
        if (sg && b == 10 && i < 0) {
18
                neg = 1;
19
                u = -i;
20
        }
21
putcr('2');
22
23
        s = print_buf + PRINT_BUF_LEN-1;
24
        *s = '\0';
25
putcr('4');
26
27
        while (u) {
28
                t = u % b;
29
                if( t >= 10 )
30
                        t += letbase - '0' - 10;
31
                *--s = t + '0';
32
                u /= b;
33
        }
34
35
putcr('3');

Die Dateien auf dem Webserver sind aktualisiert.

Gruß,

Holm

von Markus F. (mfro)


Angehängte Dateien:

Lesenswert?

Nimm' das hier. Ist zwar auch größtenteils "zusammengeklaut", 
funktioniert aber.

xputchar() in xprintf.c wirst Du anpassen müssen, möglicherweise auch 
mangels FPU die Fließkomma-Ausgabe lieber entfernen, ansonsten müsste 
das aber tun.

von Holm T. (Gast)


Lesenswert?

Danke ... habe ich gemacht. Das Ergebnis:
1
Copyright Motorola Inc. 1989 All Rights Reserved
2
Fbug68 Monitor/Debugger Version 1.1 - 9/28/89 
3
4
MOTOROLA> rd
5
hallo 1 Address Error
6
7
PC   =$Address Error
8
9
PC   =$Address Error
10
11
PC   =$Address Error
12
13
PC   =$Address Error
14
15
PC   =$Address Error
16
17
PC   =$Address Error
18
19
PC   =$Address Error
20
21
PC   =$Address Error
22
23
PC   =$

Also im Prinzip das Selbe.
Nach mindestens 4 Compilern und 3 Varianten der Ausgabe scheppert das an 
der selben Stelle, kann doch nicht sein...
Dieses "hallo 1" oben ist ein    print("hallo 1 %d\n",1); 
(xprintf("hal..).
Der String wird jedes Mal ausgegeben, aber bei numerischen Variabeln 
bekomme ich eine Exeption.

Ich muß erst mal zur Familie, aktualisiere den Webserver noch...

Gruß,

Holm

von Holm T. (Gast)


Lesenswert?

Ich habe deutliche Unterschiede im Verhalten des alten cpp und As zu dem 
aktuellen festgestellt.

Der erste Code den der 68k nach Reset ausführen soll befindet sich in 
asmstartport.s. Im Makefile sieht die Übersetzung so aus:

asmstartport.o : textdef.h vardef.h userdef.h targetsys.h
                cpp asmstartport.s  > temp.s
                $(AS) -a=asmstartport.l  -o asmstartport.o temp.s
                rm temp.s

Die Assemblerquelle wird also erst durch den (system-)cpp geleiert um 
#include und #define -s aufzulösen und dann dem gas vorgeworfen.
Das asmstartport.l Listing der alten funktionierenden Variante sa so aus 
(sorry für das länglich Posting):
1
68K GAS  temp.s                         page 1
2
3
4
   1                    # 1 "asmstartport.s"
5
   2                    # 1 "targetsys.h" 1
6
   1:asmstartport.s **** #include "targetsys.h"
7
   3                    
8
   4                    
9
    .... leere Zeilen
10
 143                    
11
 144                            
12
 145                    
13
 146                    # 164 "targetsys.h"
14
 147                    
15
   1:targetsys.h   **** 
16
   2:targetsys.h   **** /*
17
   3:targetsys.h   **** This is the easiest place to make change. If you make a change here,
18
   4:targetsys.h   **** then all the .c files must be recompiled. This can be done with the
19
   5:targetsys.h   **** make command and the appropriate makefile.
20
   6:targetsys.h   **** */
21
   7:targetsys.h   **** 
22
   8:targetsys.h   **** /*
23
   9:targetsys.h   **** the boolean logic symbols defined for code readability.
24
  10:targetsys.h   **** */
25
  11:targetsys.h   **** 
26
  12:targetsys.h   **** #define TRUE 1
27
  13:targetsys.h   **** #define FALSE 0
28
  14:targetsys.h   **** 
29
30
  .... uswusf...
31
 189:targetsys.h   **** 
32
 190:targetsys.h   **** #endif
33
 191:targetsys.h   **** #endif
34
 154                    
35
 155
36
37
...leere Zeilen 447                    
38
 448                    # 1 "asmstartport.s" 2
39
 449                    
40
 450                    .file "asmstart.s"
41
 451                    .global start,abortstart
42
 452                    .text
43
 453                    
44
 454                    INITSP:         .long   0x0080000
45
 455                    INITPC:         .long   start
46
 456                    
47
 457                    start:          
48
 458                                    mov.l   &0x1,(0x0007e000+0x1000)
49
 459 0000 0008 0000     abortstart:     mov.l   &0x0007e000+0x1b00,%d0
50
 460 0004 0000 0008     
51
 461                                    mov.l   &0x0007e000+0x1000,%d1
52
 462                    
53
 463 0008 23FC 0000     
54
 463      0001 0007 
55
 463      F000 
56
 464 0012 203C 0007     
57
 464      FB00 
58
 465                    
59
 466 0018 223C 0007     
60
 466      F000 
61
 467                                    mov.l   &0x0,%d4
62
 468                                    mov.l   &0x0,%d5
63
 469                                    mov.l   &0x0,%d6
64
 470                                    mov.l   &0x0,%d7
65
 471                                    mov.l   &0x0,%a0
66
 472 001e 7800                          mov.l   &0x0,%a1
67
 473 0020 7A00                          mov.l   &0x0,%a2
68
 474 0022 7C00                          mov.l   &0x0,%a3
69
 475 0024 7E00                          mov.l   &0x0,%a4
70
 476 0026 207C 0000                     mov.l   &0x0,%a5
71
 476      0000 
72
 477 002c 227C 0000                     mov.l   &0x0,%a6
73
 477      0000 
74
 478 0032 247C 0000     
75
 478      0000 
76
 479 0038 267C 0000     
77
 479      0000 
78
 480 003e 287C 0000     
79
 480      0000 
80
 481 0044 2A7C 0000     
81
 481      0000 
82
 482 004a 2C7C 0000     
83
^L68K GAS  temp.s                       page 13
84
85
86
 482      0000 
87
 483                    
88
 484                                    movec.l %d0,%usp 485                    
89
 486                                    movec.l %d1,%vbr
90
 487                    
91
 488                    
92
 489 0050 4E7B 0800     
93
 490                    
94
 491 0054 4E7B 1801     
95
 492                                    mov.l   &0x0,%d0
96
 493                                    mov.l   &0x0,%d1
97
 494                                    mov.l   &0x0,%d2
98
 495                                    mov.l   &0x0,%d3
99
 496                    # 63 "asmstartport.s"
100
 497 0058 7000          
101
 498 005a 7200          # 109 "asmstartport.s"
102
 499 005c 7400          
103
 500 005e 7600                          mov.l   &0x0007e000+0x2000,%a7
104
 501                                    jmp     main_without__main
105
 502                    
106
 503                    
107
   2:asmstartport.s **** .file "asmstart.s"
108
   3:asmstartport.s **** .global start,abortstart
109
   4:asmstartport.s **** .text
110
   5:asmstartport.s **** 
111
   6:asmstartport.s **** INITSP:                .long   0x0080000
112
   7:asmstartport.s **** INITPC:                .long   start
113
   8:asmstartport.s **** 
114
   9:asmstartport.s **** start:         
115
  10:asmstartport.s ****                mov.l   &0x1,(SYSRAMLOC+0x1000)
116
  11:asmstartport.s **** abortstart:    mov.l   &SYSRAMLOC+0x1b00,%d0
117
  12:asmstartport.s **** #if(DEVICE>=68010)
118
  13:asmstartport.s ****                mov.l   &SYSRAMLOC+0x1000,%d1
119
... weiter mit Kommentar 108:asmstartport.s ****                short   0x0000          #fmove.x #0,fp7
120
 109:asmstartport.s **** #endif
121
 504                    
122
 505                    
123
 506                    
124
 507 0060 2E7C 0008     
125
 507      0000 
126
 508 0066 4EF9 0000     
127
 508      0000 
128
 509                    
129
 510                    ...
130
^L68K GAS  temp.s                       page 16
131
132
133
DEFINED SYMBOLS
134
              temp.s:459    e0:00000000 INITSP
135
              temp.s:460    e0:00000004 INITPC
136
              temp.s:462    e0:00000008 start
137
              temp.s:464    e0:00000012 abortstart
138
139
UNDEFINED SYMBOLS
140
.file
141
.file
142
.file
143
.file
144
.file
145
.file
146
.file
147
.file
148
.text
149
.data
150
.bss
151
main_without__main


Mit den neuen Tools sieht das anders aus, der cpp scheint sich nicht 
mehr um viel zu kümmern...
1
68K GAS  temp.s                         page 1
2
3
4
   1                    # 1 "asmstartport.s"
5
   1                    #include "targetsys.h"
6
   0                    
7
   0                    
8
   1                    
9
   2                    .file "asmstart.s"
10
   0                    
11
   3                    .global _start,abortstart
12
   4                    .text
13
   5                    
14
   6                    INITSP:         .long   0x0080000
15
   7                    INITPC:         .long   _start
16
   8                    
17
   9                    _start:         
18
  10                                    mov.l   &0x1,(SYSRAMLOC+0x1000)
19
  11                    abortstart:     mov.l   &SYSRAMLOC+0x1b00,%d0
20
  12                    #if(DEVICE>=68010)
21
  13                                    mov.l   &SYSRAMLOC+0x1000,%d1
22
  14                    #endif
23
  15                    #if(DEVICE>=68020)
24
  16                                    mov.l   &SYSRAMLOC+0x2000,%d2
25
  17                                    mov.l   &SYSRAMLOC+0x1c00,%d3
26
  18                    #endif
27
  19                                    mov.l   &0x0,%d4
28
  20                                    mov.l   &0x0,%d5
29
  21                                    mov.l   &0x0,%d6
30
  22                                    mov.l   &0x0,%d7
31
  23                                    mov.l   &0x0,%a0
32
  24                                    mov.l   &0x0,%a1
33
  25                                    mov.l   &0x0,%a2
34
  26                                    mov.l   &0x0,%a3
35
  27                                    mov.l   &0x0,%a4
36
  28                                    mov.l   &0x0,%a5
37
  29                                    mov.l   &0x0,%a6
38
  30                    #if(DEVICE>=68020)
39
  31                                    movec.l %d4,%caar
40
  32                                    movec.l %d4,%cacr
41
  33                                    movec.l %d4,%sfc
42
  34                                    movec.l %d4,%dfc
43
  35                    #endif
44
  36                                    movec.l %d0,%usp
45
  37                    #if(DEVICE>=68010)
46
  38                                    movec.l %d1,%vbr
47
  39                    #endif
48
  40                    #if(DEVICE>=68020)
49
  41                                    movec.l %d2,%isp
50
  42                                    movec.l %d3,%msp
51
  43                    #endif
52
  44                                    mov.l   &0x0,%d0
53
  45                                    mov.l   &0x0,%d1
54
  46                                    mov.l   &0x0,%d2
55
  47                                    mov.l   &0x0,%d3
56
  48                    #if(DEVICE==68030)
57
  49                                    lea.l   CRP_INIT,%a0
58
  50                                    short   0xf010
59
  51                                    short   0x4c00          #pmove (a0),crp
60
  52                                    short   0xf010
61
^L68K GAS  temp.s                       page 2
62
 53                                    short   0x4800          #pmove (a0),srp
63
  54                                    lea.l   LONG_0,%a0
64
  55                                    short   0xf010
65
  56                                    short   0x4000          #pmove (a0),tc
66
  57                                    short   0xf010
67
  58                                    short   0x0800          #pmove (a0),tt0
68
  59                                    short   0xf010
69
  60                                    short   0x0c00          #pmove (a0),tt1
70
  61                                    short   0xf010
71
  62                                    short   0x6000          #pmove (a0),psr
72
  63                    #endif
73
  64                    #if(DEVICE==68040 || COPROCESSOR==TRUE)
74
  65                                    short   0xf23c
75
  66                                    short   0x9000
76
  67                                    short   0x0000
77
  68                                    short   0x0000          #fmove.l #0,fpcr
78
  69                                    short   0xf23c
79
  70                                    short   0x8800
80
  71                                    short   0x0000
81
  72                                    short   0x0000          #fmove.l #0,fpsr
82
  73                                    short   0xf23c
83
  74                                    short   0x8400
84
  75                                    short   0x0000
85
  76                                    short   0x0000          #fmove.l #0,fpiar
86
  77                                    short   0xf23c
87
  78                                    short   0x4000
88
  79                                    short   0x1234
89
  80                                    short   0x5678          #fmove.x #0,fp0
90
  81                                    short   0xf23c
91
  82                                    short   0x4080
92
  83                                    short   0x0000
93
  84                                    short   0x0000          #fmove.x #0,fp1
94
  85                                    short   0xf23c
95
  86                                    short   0x4100
96
  87                                    short   0x0000
97
  88                                    short   0x0000          #fmove.x #0,fp2
98
  89                                    short   0xf23c
99
  90                                    short   0x4180
100
  91                                    short   0x0000
101
  92                                    short   0x0000          #fmove.x #0,fp3
102
  93                                    short   0xf23c
103
  94                                    short   0x4200
104
  95                                    short   0x0000
105
  96                                    short   0x0000          #fmove.x #0,fp4
106
  97                                    short   0xf23c
107
  98                                    short   0x4280
108
  99                                    short   0x0000
109
 100                                    short   0x0000          #fmove.x #0,fp5
110
 101                                    short   0xf23c
111
 102                                    short   0x4300
112
 103                                    short   0x0000
113
 104                                    short   0x0000          #fmove.x #0,fp6
114
 105                                    short   0xf23c
115
 106                                    short   0x4380
116
 107                                    short   0x0000
117
 108                                    short   0x0000          #fmove.x #0,fp7
118
 109                    #endif
119
^L68K GAS  temp.s                       page 3
120
121
122
 110 0060 2E7C 0008                     mov.l   &ISPLOC,%a7
123
 110      0000 
124
 111 0066 4EF9 0000                     jmp     main_without__main
125
 111      0000 
126
^L68K GAS  temp.s                       page 4
127
128
129
DEFINED SYMBOLS
130
                            *ABS*:0000000000000000 asmstart.s
131
          asmstart.s:9      .text:0000000000000008 _start
132
          asmstart.s:11     .text:0000000000000012 abortstart
133
          asmstart.s:6      .text:0000000000000000 INITSP
134
          asmstart.s:7      .text:0000000000000004 INITPC
135
136
UNDEFINED SYMBOLS
137
main_without__main

Hieraus WÜRDE ich entnehmen das der Assembler nur m letzten Stück 
überhaupt Code erzeugt, die ganzen Präprozessordirectiven stehen noch im 
Quelltext und sind durch cpp nicht ersetzt worden.
1
# 1 "asmhandler.s"
2
# 1 "<built-in>"
3
# 1 "<command-line>"
4
# 1 "asmhandler.s"
5
# 1 "targetsys.h" 1
6
# 2 "asmhandler.s" 2
7
.file "asmhandler.s"
8
.text
9
.global stackptr,handler,asmhandler,regdata,handlerflag
10
11
.equ SUSP, 8
12
.equ SMSP, 12
13
.equ SISP, 16
14
.equ SVBR, 20
15
.equ SCACR, 24
16
.equ SCAAR, 28
17
.equ SSFC, 32
18
.equ SDFC, 36
19
.equ SD0, 40
20
# 43 "asmhandler.s"
21
asmhandler:
22
  mov.l %a7,stackptr
23
  movm.l &0xffff,(regdata+SD0)
24
  movec.l %usp,%d0
25
26
  movec.l %vbr,%d1
27
  movec.l %sfc,%d2
28
  movec.l %dfc,%d3
29
30
31
  mov.l %ssp,%a0
32
33
  mov.l %d0,(regdata+SUSP)
34
35
  mov.l %d1,(regdata+SVBR)
36
  mov.l %d2,(regdata+SSFC)
37
  mov.l %d3,(regdata+SDFC)
38
39
40
  mov.l %a0,(regdata+SISP)
41
# 118 "asmhandler.s"
42
  jsr handler
43
  cmp.b &0,handlerflag
44
  blt backtomonitor
45
  mov.l (regdata+SUSP),%d0
46
47
  mov.l (regdata+SVBR),%d1
48
  mov.l (regdata+SSFC),%d2
49
  mov.l (regdata+SDFC),%d3
50
51
  movec.l %d0,%usp
52
53
  movec.l %d1,%vbr
54
  movec.l %d2,%sfc
55
  movec.l %d3,%dfc
56
57
58
  movm.l (regdata+SD0),&0xffff
59
# 185 "asmhandler.s"
60
  rte
61
62
backtomonitor: mov.w &0x2700,%sr
63
  jmp abortstart

Komischerweise löffelt das der Assembler trotzdem und erzeugt auch code 
wie im disassemblierten Listing zu sehen ist:
1
bug000TT.elf:     file format elf32-m68k
2
3
4
Disassembly of section .text:
5
6
00800000 <INITSP>:
7
  800000:       0008            .short 0x0008
8
        ...
9
10
00800004 <INITPC>:
11
  800004:       0080 0008 23fc  oril #533500,%d0
12
13
00800008 <_start>:
14
  800008:       23fc 0000 0001  movel #1,7f000 <RD0+0x7efd8>
15
  80000e:       0007 f000 
16
17
00800012 <abortstart>:
18
  800012:       203c 0007 fb00  movel #523008,%d0
19
  800018:       223c 0007 f000  movel #520192,%d1
20
  80001e:       7800            moveq #0,%d4
21
  800020:       7a00            moveq #0,%d5
22
  800022:       7c00            moveq #0,%d6
23
  800024:       7e00            moveq #0,%d7
24
  800026:       207c 0000 0000  moveal #0,%a0
25
  80002c:       227c 0000 0000  moveal #0,%a1
26
  800032:       247c 0000 0000  moveal #0,%a2
27
  800038:       267c 0000 0000  moveal #0,%a3
28
  80003e:       287c 0000 0000  moveal #0,%a4
29
  800044:       2a7c 0000 0000  moveal #0,%a5
30
  80004a:       2c7c 0000 0000  moveal #0,%fp
31
  800050:       4e7b            .short 0x4e7b
32
  800052:       0800 4e7b       btst #123,%d0
33
  800056:       1801            moveb %d1,%d4
34
  800058:       7000            moveq #0,%d0
35
  80005a:       7200            moveq #0,%d1
36
  80005c:       7400            moveq #0,%d2
37
  80005e:       7600            moveq #0,%d3
38
  800060:       2e7c 0008 0000  moveal #524288,%sp
39
  800066:       4ef9 0080 00f8  jmp 8000f8 <main_without__main>
40
41
0080006c <asmhandler>:
42
  80006c:       23cf 001f e06a  movel %sp,1fe06a <stackptr>
43
  800072:       48f9 ffff 001f  moveml %d0-%sp,1fe1ec <regdata+0x28>

Wie kriege ich das ursprüngliche Verhalten des cpp wieder hin?
Wie kriege ich vom Assembler eine Ausgabe über das was er ab _start 
generiert? Das das noch kein auf 800000 gelinkter Code ist, ist mir 
klar, aber da sind "rts" dazwischen über die der Disassembler stolpert, 
im Linkerscript steht drin, das der Linker mit rts füllen soll, ich weiß 
das, nur wie komme ich zu einem korrekten Listing?

Gruß,

Holm

von Markus F. (mfro)


Lesenswert?

wenn Du die Assemblerfiles durch den Präprozessor verwursten lassen 
willst, muß die Dateiendung ".S" (großes "S") statt ".s" lauten und Du 
solltest gcc (statt gas) drauf loslassen.

Kann mich aber nicht erinnern, daß das neu wäre - ich meine, das war 
schon immer so...

von Holm T. (Gast)


Angehängte Dateien:

Lesenswert?

Wenn man den gcc mit einem .s aufruft mag das so sein, bei einem Aufruf
wie  /home/holm/cross/m68k/bin/m68k-elf-cpp  asmstartport.s  > temp.s 
macht das keinerlei Unterschied, das habe ich gerade verifiziert.

temp.s sieht danach so aus:
1
# 1 "asmstartport.s"
2
# 1 "<built-in>"
3
# 1 "<command-line>"
4
# 1 "asmstartport.s"
5
# 1 "targetsys.h" 1
6
# 2 "asmstartport.s" 2
7
.file "asmstart.s"
8
.global _start,abortstart
9
.text
10
11
INITSP: .long 0x0080000
12
INITPC: .long _start
13
14
_start:
15
  mov.l &0x1,(0x0007e000 +0x1000)
16
abortstart: mov.l &0x0007e000 +0x1b00,%d0
17
18
  mov.l &0x0007e000 +0x1000,%d1
19
20
  mov.l &0x0,%d4
21
  mov.l &0x0,%d5
22
  mov.l &0x0,%d6
23
  mov.l &0x0,%d7
24
  mov.l &0x0,%a0
25
  mov.l &0x0,%a1
26
  mov.l &0x0,%a2
27
  mov.l &0x0,%a3
28
  mov.l &0x0,%a4
29
  mov.l &0x0,%a5
30
  mov.l &0x0,%a6
31
32
  movec.l %d0,%usp
33
34
  movec.l %d1,%vbr
35
36
  mov.l &0x0,%d0
37
  mov.l &0x0,%d1
38
  mov.l &0x0,%d2
39
  mov.l &0x0,%d3
40
# 110 "asmstartport.s"
41
  mov.l &0x0007e000 +0x2000,%a7
42
  jmp main_without__main

und ich frage mich wo der Code im Listing file hin ist:

m68k-elf-as -m68010 -a=asmstartport.l  -o asmstartport.o temp.s
1
   2                    .file "asmstart.s"
2
   0                    
3
   3                    .global _start,abortstart
4
   4                    .text
5
   5                    
6
   6                    INITSP:         .long   0x0080000
7
   7                    INITPC:         .long   _start
8
   8                    
9
   9                    _start:         
10
  10                                    mov.l   &0x1,(SYSRAMLOC+0x1000)
11
  11                    abortstart:     mov.l   &SYSRAMLOC+0x1b00,%d0
12
  12                    #if(DEVICE>=68010)
13
  13                                    mov.l   &SYSRAMLOC+0x1000,%d1
14
  14                    #endif
15
  15                    #if(DEVICE>=68020)
16
  16                                    mov.l   &SYSRAMLOC+0x2000,%d2
17
  17                                    mov.l   &SYSRAMLOC+0x1c00,%d3
18
  18                    #endif
19
  19                                    mov.l   &0x0,%d4
20
  20                                    mov.l   &0x0,%d5
21
  21                                    mov.l   &0x0,%d6
22
  22                                    mov.l   &0x0,%d7
23
  23                                    mov.l   &0x0,%a0
24
^L68K GAS  temp.s                       page 10
25
26
27
  24                                    mov.l   &0x0,%a1
28
  25                                    mov.l   &0x0,%a2
29
  26                                    mov.l   &0x0,%a3
30
  27                                    mov.l   &0x0,%a4
31
  28                                    mov.l   &0x0,%a5
32
  29                                    mov.l   &0x0,%a6
33
  30                    #if(DEVICE>=68020)
34
  31                                    movec.l %d4,%caar
35
  32                                    movec.l %d4,%cacr
36
  33                                    movec.l %d4,%sfc
37
  34                                    movec.l %d4,%dfc
38
  35                    #endif
39
  36                                    movec.l %d0,%usp
40
  37                    #if(DEVICE>=68010)
41
  38                                    movec.l %d1,%vbr
42
  39                    #endif
43
  40                    #if(DEVICE>=68020)
44
  41                                    movec.l %d2,%isp
45
  42                                    movec.l %d3,%msp
46
  43                    #endif
47
  44                                    mov.l   &0x0,%d0
48
  45                                    mov.l   &0x0,%d1
49
  46                                    mov.l   &0x0,%d2
50
  47                                    mov.l   &0x0,%d3
51
  48                    #if(DEVICE==68030)
52
  49                                    lea.l   CRP_INIT,%a0
53
  50                                    short   0xf010
54
  51                                    short   0x4c00          #pmove (a0),crp
55
  52                                    short   0xf010
56
  53                                    short   0x4800          #pmove (a0),srp
57
  54                                    lea.l   LONG_0,%a0
58
  55                                    short   0xf010
59
  56                                    short   0x4000          #pmove (a0),tc
60
  57                                    short   0xf010
61
  58                                    short   0x0800          #pmove (a0),tt0
62
  59                                    short   0xf010
63
  60                                    short   0x0c00          #pmove (a0),tt1
64
  61                                    short   0xf010
65
  62                                    short   0x6000          #pmove (a0),psr
66
  63                    #endif
67
  64                    #if(DEVICE==68040 || COPROCESSOR==TRUE)
68
  65                                    short   0xf23c
69
  66                                    short   0x9000
70
  67                                    short   0x0000
71
  68                                    short   0x0000          #fmove.l #0,fpcr
72
  69                                    short   0xf23c
73
  70                                    short   0x8800
74
  71                                    short   0x0000
75
  72                                    short   0x0000          #fmove.l #0,fpsr
76
  73                                    short   0xf23c
77
  74                                    short   0x8400
78
  75                                    short   0x0000
79
  76                                    short   0x0000          #fmove.l #0,fpiar
80
  77                                    short   0xf23c
81
  78                                    short   0x4000
82
  79                                    short   0x1234
83
  80                                    short   0x5678          #fmove.x #0,fp0
84
^L68K GAS  temp.s                       page 11
85
86
87
  81                                    short   0xf23c
88
  82                                    short   0x4080
89
  83                                    short   0x0000
90
  84                                    short   0x0000          #fmove.x #0,fp1
91
  85                                    short   0xf23c
92
  86                                    short   0x4100
93
  87                                    short   0x0000
94
  88                                    short   0x0000          #fmove.x #0,fp2
95
  89                                    short   0xf23c
96
  90                                    short   0x4180
97
  91                                    short   0x0000
98
  92                                    short   0x0000          #fmove.x #0,fp3
99
  93                                    short   0xf23c
100
  94                                    short   0x4200
101
  95                                    short   0x0000
102
  96                                    short   0x0000          #fmove.x #0,fp4
103
  97                                    short   0xf23c
104
  98                                    short   0x4280
105
  99                                    short   0x0000
106
 100                                    short   0x0000          #fmove.x #0,fp5
107
 101                                    short   0xf23c
108
 102                                    short   0x4300
109
 103                                    short   0x0000
110
 104                                    short   0x0000          #fmove.x #0,fp6
111
 105                                    short   0xf23c
112
 106                                    short   0x4380
113
 107                                    short   0x0000
114
 108                                    short   0x0000          #fmove.x #0,fp7
115
 109                    #endif
116
 110 0060 2E7C 0008                     mov.l   &ISPLOC,%a7
117
 110      0000 
118
 111 0066 4EF9 0000                     jmp     main_without__main
119
 111      0000 
120
^L68K GAS  temp.s                       page 12
121
122
123
DEFINED SYMBOLS
124
                            *ABS*:0000000000000000 asmstart.s
125
          asmstart.s:9      .text:0000000000000008 _start
126
          asmstart.s:11     .text:0000000000000012 abortstart
127
          asmstart.s:6      .text:0000000000000000 INITSP
128
          asmstart.s:7      .text:0000000000000004 INITPC
129
130
UNDEFINED SYMBOLS
131
main_without__main
Auf der Zeile 110 steht generierter Code, "0060 2e7c 0008"
aber wo ist der der Zeile 10 (_start) und der darauf folgenden 
geblieben?
Im Disassembler sehe ich den code aber
m68k-elf-objdump -S fbug000TT.elf >fbug000TT.disas:
1
Disassembly of section .text:
2
3
00800000 <INITSP>:
4
  800000:       0008            .short 0x0008
5
        ...
6
7
00800004 <INITPC>:
8
  800004:       0080 0008 23fc  oril #533500,%d0
9
10
00800008 <_start>:
11
  800008:       23fc 0000 0001  movel #1,7f000 <RD0+0x7efd8>
12
  80000e:       0007 f000 
13
14
00800012 <abortstart>:
15
  800012:       203c 0007 fb00  movel #523008,%d0
16
  800018:       223c 0007 f000  movel #520192,%d1
17
  80001e:       7800            moveq #0,%d4

Das ist mein Problem. Das alte Listing von asmstartport.l sieht so aus, 
da gibts Code Bytes in der linekn Spalte nach en Zeilennummern:
1
 448                    # 1 "asmstartport.s" 2
2
 449                    
3
 450                    .file "asmstart.s"
4
 451                    .global start,abortstart
5
 452                    .text
6
 453                    
7
 454                    INITSP:         .long   0x0080000
8
 455                    INITPC:         .long   start
9
 456                    
10
 457                    start:          
11
 458                                    mov.l   &0x1,(0x0007e000+0x1000)
12
 459 0000 0008 0000     abortstart:     mov.l   &0x0007e000+0x1b00,%d0
13
 460 0004 0000 0008     
14
 461                                    mov.l   &0x0007e000+0x1000,%d1
15
 462                    
16
 463 0008 23FC 0000     
17
 463      0001 0007 
18
 463      F000 
19
 464 0012 203C 0007     
20
 464      FB00 
21
 465                    
22
 466 0018 223C 0007     
23
 466      F000 
24
 467                                    mov.l   &0x0,%d4
25
 468                                    mov.l   &0x0,%d5
26
 469                                    mov.l   &0x0,%d6

Ich habe es gerade mal kontrolliert, Du meinst sicher einen 
Assembleraufruf dieser Art:
/home/holm/cross/m68k/bin/m68k-elf-gcc -c  -Wa,-alhn=asmstartport.l 
asmstartport.S

...der macht das Selbe wie mein Zeuch oben, also cpp und as 
hintereinander, das Listing sieht jedenfalls genauso aus und auch da 
fehlen die Code Bytes ab _start...
Allerdings macht es hier wirklich einen Unterschied ob ich '.s' oder 
'.S' verwende.

gcc selbst ist ja nur der Compiler driver, der die verschiedenen Pässe 
nacheinander ruft, aber zaubern tut der auch nicht. Das geht genauso 
wenn man das einzeln macht.

Ich war jetzt nur auf der Suche was "generell" falsch sein könnte und 
wollte mir den Initialisierungscode ansehen, dazu wäre ja ein 
Assemblerlisting nicht das Ungeeignetste. Irgend Jemand scheint was 
dagegen zu haben das ich das alte Schätzchen wecke. Ich habe aber noch 
ein 2. identisches und eine "Raubkatze" (nicht meine Idee) mit dem 68332 
habe ich auch noch. Es lohnt sich also die Toolchain mal zum Laufen zu 
bekommen..


Ich weiß ja nicht wie Ihr das hier so seht, aber für mich hat die 
Platine deutlich mehr Sexappeal als ein Arduino...

Gruß,

Holm

von Holm T. (Gast)


Lesenswert?

Hurra!

Es gibt Forschritte.

Irgendwann schoß mir durch den Kopf, das gemeinsam an allen 
ausprobierten printf - Routinen mit Integerausgabe eine Modulo - 
Division des Integers zur Zerlegung der Zahl ist. Mein Blick viiel auf 
die verwendeten Floatingpoint Routinen bzw. Bibliotheken. Da gibt es ja 
bei MC68K eine ganze Anzahl.
Ich hatte folgenden Library Path:



LD_LIBS= -L/usr/home/holm/cross/m68k/lib/gcc/m68k-elf/4.6.2/softfp
LD_LIBS+= -L/home/holm/cross/m68k/lib
LD_LIBS+= -L/home/holm/cross/m68k/m68k-elf/lib/m68000 -lgcc -liberty -lc

Wobei der oberste Teil scheinbar der Schuldige war.
Ich muß nachschalgen was "softfp" denn so zu bedeuten hat, ich hatte mir 
was Naheliegendes drunter vorgestellt.

Zur Auswahl stehen da noch:
crtbegin.o      libgcc.a        m5208           m5475           mfidoa
crtend.o        libgcov.a       m5307           m68000          plugin
include         m51qe           m5329           m68040          softfp
include-fixed   m5206           m5407           m68060
install-tools   m5206e          m54455          mcpu32

..und Ersatz der fraglichen Zeile durch
LD_LIBS= -L/usr/home/holm/cross/m68k/lib/gcc/m68k-elf/4.6.2/m68000
führte dazu das endlich was geht:
1
mm Memory Modify
2
rd Register Display
3
rm Register Modify
4
sd Symbol Define
5
tm Transparent Mode
6
tr Trace
7
8
MOTOROLA> rd
9
PC   =$00002000   SR   =$00002700   USP  =$00001B00   
10
SSP  =$00002000   VBR  =$00000000   SFC  =$00000000   DFC  =$00000000   
11
12
D0   =$00000000   D1   =$00000000   D2   =$00000000   D3   =$00000000   
13
D4   =$00000000   D5   =$00000000   D6   =$00000000   D7   =$00000000   
14
15
A0   =$00000000   A1   =$00000000   A2   =$00000000   A3   =$00000000   
16
A4   =$00000000   A5   =$00000000   A6   =$00000000   A7   =$00002000

Das sieht erst mal gut aus.
Das Memory Display hat noch Schluckauf, aber das finde ich auch noch:
1
MOTOROLA> md 2000
2
��(�w�����$00002000:  $0005  $4445  $0041  $4410  $0940  $0444  
3
$0000200C:  $4044  $4104  $4057  $0044  $0444  $4144  
4
$00002018:  $4054  $F4CD  $4156  $0A80  $0001  $0040  
5
$00002024:  $5545  $4C45  $0044  $0043  $0504  $4445  
6
$00002030:  $4045  $0045  $4C50  $0044  $4441  $4055  
7
$0000203C:  $8844  $4044  $4141  $4244  $0044  $4444  
8
$00002048:  $4744  $0444  $C454  $0144  $4446  $04C4  
9
$00002054:  $4064  $8445  $4444  $4569  $4001  $C0C4  
10
11
12
MOTOROLA>

zumal der Assembler/Disassembler zu funktionieren scheint:
1
MOTOROLA> as 800008
2
$00800008 23FC 0000 0001
3
          0007 F000       move.l        #$1,($7F000).L  ?  
4
$00800012 203C 0007 FB00  move.l        #$7FB00,D0      ?  
5
$00800018 223C 0007 F000  move.l        #$7F000,D1      ?  
6
$0080001E 7800            moveq.l       #$0,D4  ?  
7
$00800020 7A00            moveq.l       #$0,D5  ?  
8
$00800022 7C00            moveq.l       #$0,D6  ?  
9
$00800024 7E00            moveq.l       #$0,D7  ?  
10
$00800026 207C 0000 0000  movea.l       #$0,A0  ?  
11
$0080002C 227C 0000 0000  movea.l       #$0,A1  ?  
12
$00800032 247C 0000 0000  movea.l       #$0,A2  ?  
13
$00800038 267C 0000 0000  movea.l       #$0,A3  ?  
14
$0080003E 287C 0000 0000  movea.l       #$0,A4  ?  
15
$00800044 2A7C 0000 0000  movea.l       #$0,A5  ?  
16
$0080004A 2C7C 0000 0000  movea.l       #$0,A6  ?  .
17
MOTOROLA>

Ich aktualisiere mal den Webserver...
Gruß,

Holm

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.