Ich ärgere mich schon seit längerem mit dem Problem herum, dass man zyklische Abhängigkeiten bekommen kann, wenn man mit PRGs arbeitet, die andere PRGs nachladen. Ein Beispiel:
- PRG1 ist ein Programm, das PRG2 nachlädt und dann Unterroutinen aus PRG2 aufruft
- PRG2 soll als Startadresse die Adresse direkt hinter dem Ende von PRG1 bekommen
Jetzt ergibt sich eine zyklische Abhängigkeit:
- PRG1 kann nur kompiliert werden, wenn PRG2 vorher kompiliert wurde, da es ja die Adressen der Unterroutinen aus PRG2 wissen muss
- PRG2 kann nur kompiliert werden, wenn PRG1 vorher kompiliert wurde, weil seine Startadresse ja von der Länge von PRG1 abhängt
Bisher habe ich das mit scheußlichen Konstruktionen gelöst wie Printouts beim Kompilieren, die dann wiederum für Symbole in anderen Sourcefiles eingefügt werden müssen. Das wird aber schnell unübersichtlich und mühselig, wenn es mehr als zwei Files sind. Meine Hoffnung war eigentlich, dass das durch Verwendung von Objectfiles und einen Linker gelöst werden könnte (ca65 und ld65). Aber jetzt wollte ich es mal ausprobieren und habe festgestellt, dass das ja auch nicht so einfach ist. Ld65 kann natürlich sowas prima behandeln, wenn ein einziges Binary aus allen Objectfiles erzeugt werden soll. Aber fürs Nachladen müsste man dem Linker im Beispiel oben PRG1.obj und PRG2.obj übergeben, damit er die Symbole auflösen kann, aber ihm sagen, dass er getrennte PRG files für PRG1 und PRG2 erzeugen soll.
Mir scheint, dass das ein lösbares Problem ist, aber irgendwie habe ich keine Ahnung, wie man es praktisch angeht. Das müssen doch andere vor mir schon gemacht haben?