Hallo allerseits,
Ich habe kürzlich in meinem früheren Kinderzimmer mein altes Elektor
80535 Compuboard ausgegraben. Da ich ein bisschen nostalgisch angehaucht
bin, wollte ich wissen, ob diesen über 30 Jahre alte Board noch läuft.
Dank ein gut funktionierendem Backup Konzepts habe ich auch noch alle
Sourcen von damals, inklusive aller Programme der Elektor Diskette. Die
exe-Dateien laufen zwar heutzutage nicht mehr, aber glücklicherweise
waren damals auch die Pascal Sourcen dabei, die ich gemeinsam im ChatGPT
recht schnell nach Python konvertiert habe.
Und siehe da, das Board funktioniert noch einwandfrei. Ich habe es mit
einigen Beispiel HEX Dateien (aus Assembler generiert) von damals
probiert und die laufen auch.
Jetzt möchte ich den Keil C51 verwenden, um zumindest ein Hello World
zum Laufen zu bringen. Und da habe ich jetzt aber ein Problem. Ich hoffe
ich kann das einigermaßen erklären.
Das Board ist so aufgeteilt
1 | ROM 0x0000 – 0x3FFF
|
2 | RAM 0x4000 – 0x7FFF
|
3 | ROM 0x8000 – 0xBFFF
|
4 | RAM 0xC000 – 0xFFFF
|
Mein Code muss also an der Stelle 0x4000 starten. Die Einstellungen vom
Compiler bzw Linker sind in dem Bild ersichtlich.
Das generierte HEX Programm läuft aber nicht. Der Code könnte banaler
nicht sein:
1 | #include <reg515.h>
|
2 | #include <stdio.h>
|
3 |
|
4 | void ser_init()
|
5 | {
|
6 | SCON = 0x52; /* SCON */
|
7 | TMOD = 0x20; /* TMOD */
|
8 | TCON = 0x69; /* TCON */
|
9 | TH1 = 0xf3; /* TH1 */
|
10 | }
|
11 |
|
12 | int main() {
|
13 | ser_init();
|
14 | while(1) {
|
15 | printf("Hello world\n");
|
16 | }
|
17 | }
|
Das HEX File schaut so aus:
1 | :0D541E0048656C6C6F20776F726C640A003B
|
2 | :0D541100759852758920758869758DF32294
|
3 | :0C542B0091117BFF7A54791E116280F60B
|
4 | :0300000002543770 <------ Warum hier 0000 ???
|
5 | :0C543700787FE4F6D8FD75812102542B2B
|
6 | :10500000E517240BF8E60517227808300702780B1D
|
7 | :10501000E475F0011253B402535C2000EB7F2ED2F2
|
8 | :10502000008018EF540F2490D43440D4FF30040B88
|
9 | :10503000EF24BFB41A0050032461FFE51860021585
|
usw...
Das Problem ist die markiert Zeile. Hier will er in die Adresse 0x0000
schreiben. Vielleicht weil normalerweise das Board nach dem Einschalten
hier startet. Wenn ich hier manuell 0x4000 eintrage, das manipulierte
HEX File hochlade und dann das Programm an der Adresse 0x4000 starte,
funktioniert es wie es soll. Aber ich finde einfach keine Einstellung,
wie ich den Compiler dazu bringen kann, nicht bei 0x0000 zu starten.
Ich hoffe ich konnte mich einigermaßen verständlich ausdrücken?
Vielleicht kann sich ja jemand von euch an damals erinnern und hat einen
Tipp für mich?
Würde mich sehr freuen, auch wenn es natürlich nicht sonderlich sinnvoll
ist 😉 Aber es sind einfach schöne Erinnerungen an meine Kindheit...
Liebe Grüße aus Wien
Harald