013
08.11.2020, 18:22 Uhr
maleuma
|
Zitat: | PIC18F2550 schrieb Zum jetzigen Stand wäre in den 4 Ebenen von C & E das gleiche drin. |
OK, dann würde das jetzige CAOS erst einmal laufen.
Zitat: | C & User liegen doch im selben Adressbereich, gibt es Aufrufe von User die in C liegen? Wenn Ja müssten die doch alle über E gehen. |
Richtig. Als Beispiel die BASIC-Erweiterung "SWITCH". Diese befindet sich im CAOS-ROM-E und ruft Unterprogramme im BASIC-ROM auf, um die Parameter des Befehlt zu erhalten. Danach wird mit den Parametern das CAOS-UP 26H über den Programmverteiler 5 aufgerufen. Der Einsprungpunkt des PV5 steht ebenfalls im ROM-E. Auch der Eintrittspunkt des UP 26H befindet sich im ROM-E, die eigentliche SWITCH-Routine jedoch im CAOS-ROM-C. Dafür wird der CAOS-ROM-C kurz eingeblendet und nach Rückkehr wieder ausgeblendet.
Zitat: | Die zweite Frage bezieht sich auf E. Wieviel Speicherplatz würdest Du benötigen wenn Du alle Routinen die länger als 6 Byte sind in C auslagern Könntest? Betrachte dabei C mal als "Unendlichen" Speicher.
Du brauchst in E nur die Eintrittspunkte und Austrittspunkte zu beachten. |
Das ist schon schwerer zu beantworten. Im Quelltext stehen jede Menge Marken, die aber nicht unbedingt alles Eintrittspunkte sind. Vielmals gibt es aber aber schon Eintrittspunkte mitten in diese Routinen. Das müsste also für jede Marke einzeln untersucht werden. Außer den Code-Segmenten befinden sich aber im ROM-E auch noch die ganzen Tabellen, wie Zeichenbildtabelle, Tastaturtabelle, Steuerzeichen-Tabelle, Menüworte, Interrupt-Tabelle ... Das Prinzip habe ich schon verstanden. Auch hierzu ein Beispiel. Das CAOS-UP 33H benötigt 16 Byte im ROM-E und hat nur einen Eintrittspunkt:
Quellcode: | TCIF: LD A,(WINLG) SUB 1 RET C SUB E RET C LD A,(WINLG+1) SUB 1 RET C SUB D RET
|
Man könnte diese 16 Byte in ein Segment des ROM-C auslagern und dann im ROM-E nur den Aufruf dahin eintragen, benötigt aber noch einen Befehl zum Einschalten der ROM-C-Ebene und zum Abschalten nach dessen Ausführung. Übrig bleiben 9 bzw. 10 Byte, wenn das so funktionieren würde:
Quellcode: | TCIF: LD (CON1),A CALL TCIF_C LD (COFF),A RET
|
Das macht aber erst ab 10 Byte Sinn und nicht schon ab 6 Byte. 6 Byte wären nur dann möglich, wenn keine Weiterführung im ROM-E nötig ist und statt einen CALL in den ROM-C ein JP genutzt werden kann. Dann wäre der Befehl LD (COFF),A der vorletzte im ROM-C. Diesem folgt dann noch ein RET oder JP. Dann wird aber die Abschaltung des ROM-C sehr zeitkritisch! Oder im ROM-E steht einmal der Befehl zum Zurückschalten des ROM-C und jede Routine im ROM-C springt am Ende dort hin. Die Sache hat natürlich auch einen Nachteil: Die CPU muss für die Schalterei noch zusätzliche Befehle abarbeiten, was die Programmabarbeitung etwas verlangsamt. Wieviel das ausmacht ??? Und man kann das im JKCEMU nicht testen/debugen solange diese Zusatz-Hardware nicht unterstützt wird.
Aber wie gesagt, wieviel sich damit umverlagern lässt müsste für jede einzelne Programmstelle separat untersucht werden. -- Mario. Dieser Beitrag wurde am 08.11.2020 um 18:24 Uhr von maleuma editiert. |