Guten Tag,
Ich probiere schon eine weile mit einem w65c02 Mikroprozessor inklusive EEPROM, RAM und IO-Interface herum. Bisher habe ich diesen immer mit VASM Assembly Code Programmiert und es hat auch alles geklappt. Allerdings möchte ich nun für Komplexere Programme diesen mit C Programmieren.
Nach einiger Recherche habe ich mir die vbcc Compiler heruntergeladen. Nun habe ich das Problem das dieser das Programm nicht Kompilieren will.
Kompilieren tu ich indem der folgende Befehl ausgeführt wird:
vc -65c02 +src\\W65C02.cfg -o bin\\a.out src\\main.c
Dieser wird auch soweit erfolgreich ausgeführt, allerdings wird am angegebenen Pfad keine Datei erstellt und es kommt auch keine Meldung das irgendetwas fehlgeschlagen ist.
Der Inhalt vom src\main.c ist nur ein leeres Programm:
void main(void) {
}
Der Inhalt von src\W65C02.cfg ist das Linker-Skript das genutzt wird (Wenn ich dieses option im Befehl weg lasse schlägt der Befehl mit der Ausgabe No config file! fehl). Hier habe ich zwei Inhalte ausprobiert. Den ersten habe ich mit Hilfe der vlink Dokumentation und etwas Recherche erstellt:
MEMORY {
EEPROM : ORIGIN = 0x8000, LENGTH = 0x7FF9
RAM : ORIGIN = 0x4000, LENGTH = 0x1FFF
}
SECTIONS {
.text : {
*(.text)
} > EEPROM
.data : {
*(.data)
} > RAM
}
Den zweiten habe ich in meiner Suche nach einer Lösung vom ChatGPT-4o erstellen lassen mit der Frage:
Schreibe ein Linker Skript für vlink das die Speicher Sektionen des 65c02 konfiguriert. Die Speicherbereiche sind folgende:
RAM: 4000 - 5FFF
EEPROM: 8000 - FFF9
Das Ergebnis war (zusammengefasst):
MEMORY {
RAM : ORIGIN = 0x4000, LENGTH = 0x2000 /* 4000 - 5FFF, Größe: 8 KB */
EEPROM: ORIGIN = 0x8000, LENGTH = 0x7FFA /* 8000 - FFF9, Größe: ca. 32 KB */
}
SEGMENTS {
CODE: load = EEPROM, type = ro
RODATA: load = EEPROM, type = ro
DATA: load = RAM, type = rw
BSS: load = RAM, type = bss
}
Egal ob ich das erstes Linker-Skript oder das zweite genutzt habe es ist immer so abgelaufen wie oben beschrieben.
Als ich auf Fehlersuche war habe ich bei vc auch die Option -vv (very verbose) aktiviert und dann kam beim ersten Linker Skript folgende Ausgabe:
vc frontend for vbcc (c) in 1995-2020 by Volker Barthelmann
flags=1414 opt=1 len=1490
Argument 6:src\main.c
File "src\main.c"=2
add_name: "C:\Users\<user>\AppData\Local\Temp\vbcc068c.asm"
add_name: "C:\Users\<user>\AppData\Local\Temp\vbcc068c.o"
add_name: "C:\Users\<user>\AppData\Local\Temp\vbcc068c.o"
Argument 7:MEMORY {
File "MEMORY {"=5
add_name: "MEMORY {"
Argument 8: EEPROM : ORIGIN = 0x8000, LENGTH = 0x7FF9
File " EEPROM : ORIGIN = 0x8000, LENGTH = 0x7FF9"=5
add_name: " EEPROM : ORIGIN = 0x8000, LENGTH = 0x7FF9"
Argument 9: RAM : ORIGIN = 0x4000, LENGTH = 0x1FFF
File " RAM : ORIGIN = 0x4000, LENGTH = 0x1FFF"=5
add_name: " RAM : ORIGIN = 0x4000, LENGTH = 0x1FFF"
Argument 10:}
File "}"=5
add_name: "}"
Argument 12:SECTIONS {
File "SECTIONS {"=5
add_name: "SECTIONS {"
Argument 13: .text : {
File " .text : {"=5
add_name: " .text : {"
Argument 14: *(.text)
File " *(.text)"=5
add_name: " *(.text)"
Argument 15: } > EEPROM
File " } > EEPROM"=5
add_name: " } > EEPROM"
Argument 17: .data : {
File " .data : {"=5
add_name: " .data : {"
Argument 18: *(.data)
File " *(.data)"=5
add_name: " *(.data)"
Argument 19: }
File " }"=5
add_name: " }"
Argument 20:}
File "}"=5
add_name: "}"
linklen=296
free p->obj
"C:\Users\<user>\AppData\Local\Temp\vbcc068c.o"
free p
free p->obj
"MEMORY {"
free p
free p->obj
" EEPROM : ORIGIN = 0x8000, LENGTH = 0x7FF9"
free p
free p->obj
" RAM : ORIGIN = 0x4000, LENGTH = 0x1FFF"
free p
free p->obj
"}"
free p
free p->obj
"SECTIONS {"
free p
free p->obj
" .text : {"
free p
free p->obj
" *(.text)"
free p
free p->obj
" } > EEPROM"
free p
free p->obj
" .data : {"
free p
free p->obj
" *(.data)"
free p
free p->obj
" }"
free p
free p->obj
"}"
free p
free p->obj
"C:\Users\<user>\AppData\Local\Temp\vbcc068c.asm"
free p
free p->obj
"C:\Users\<user>\AppData\Local\Temp\vbcc068c.o"
free p
Beim ausführen vom zweiten Linker Skript mit -vv kommt eine ähnliche Ausgabe wo ebenfalls das Linker-Skript teilweise wiederholt wird.
Hoffe jemand weiß was ich falsch mache und kann helfen, lg Suiram1.