atari-home.de - Foren

Software => Coding => Thema gestartet von: Mado am Sa 09.07.2022, 22:34:30

Titel: Ist Ptermres ohne Assembler möglich?
Beitrag von: Mado am Sa 09.07.2022, 22:34:30
Hi. Ich habe mein erstes TOS-Programm geschrieben. Es enthält neue Umsetzungstabellen von XBIOS Keytbl und soll den Speicher, den die neuen Tabellen brauchen, resident machen. Leider kann ich die vorhandenen Tabellen im EmuTOS nicht ändern, da diese im ROM liegen (Bus Error). Also braucht es frischen Speicher.

Ich habe jetzt Beispiele gefunden, um das Programm insgesamt resident zu machen, obwohl ich nur die neuen Tables benötige. Hier ist mal ein Beispiel mit Assembler:

https://github.com/mfro0/foldrxxx

Gibt es auch eine Möglichkeit, ein C-Programm resident zu machen, ohne, dass man Assembler braucht?

Im Prinzip ist wahrscheinlich der Overhead von C, vor allem bei einem Mint-Executable, viel zu groß, was den Speicherverbrauch angeht, so dass es mehr Sinn machen würde, das in Assembler zu schreiben.

Aber geht es nur in C? Heißt, gibt es irgendwie die Möglichkeit die Größe des Programms schon zur Compilierzeit zu bestimmen?
Titel: Re: Ist Ptermres ohne Assembler möglich?
Beitrag von: mfro am Sa 09.07.2022, 23:31:26
Das ist kein "Beispiel mit Assembler", das ist ein reinrassiges C-Programm.

Assembler wird nur für den (minimalen) Startup-Code verwendet (und der ist bei jedem C-Compiler in Assembler geschrieben). Der Standard-Startup-Code macht Dinge, die ich nicht brauche (beispielsweise wird ermittelt, ob das Programm als Accessory gestartet wurde oder das .bss-Segment gelöscht) oder die ich nicht brauchen kann (Verkleinerung der TPA mit Mshrink()).

Das Programm ist 755 Bytes groß. 256 Bytes davon sind die Basepage, auf die man sowieso nicht verzichten kann.

Mit "Assembler pur" könnte man sicher noch ein paar Bytes einsparen, aber warum sollte man?
Titel: Re: Ist Ptermres ohne Assembler möglich?
Beitrag von: Thorsten Otto am So 10.07.2022, 06:10:06
Aber geht es nur in C? Heißt, gibt es irgendwie die Möglichkeit die Größe des Programms schon zur Compilierzeit zu bestimmen?

Zur Compiler-Zeit nicht, aber zur Laufzeit. Wenn die normalen libs/startup code benutzt werden, gibt es eine globale Variable _PgmSize, die den Wert beinhaltet (sowohl bei mintlib als auch bei Pure-C). Allerdings würde ich dir empfehlen einen ähnlichen startup-code wie oben verlinkt zu verwenden, um Platz zu sparen.

Zu beachten ist, daß das BSS-Segment bei Pure-C schon die angegebene Stack-Grösse beinhaltet, bei gcc jedoch nicht.
Titel: Re: Ist Ptermres ohne Assembler möglich?
Beitrag von: simonsunnyboy am Mo 11.07.2022, 18:02:41
IIRC waren in der c't in den Jahrgängen 1986-1989 Beispielprogramme in C, die Ptermres() benutzen.
Aber welche wo genau, müsste man raussuchen. Müsste ne RAM Disk gewesen sein, wenn ich mich nicht sehr täusche...