Autor Thema: Ist Ptermres ohne Assembler möglich?  (Gelesen 10030 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline Mado

  • Benutzer
  • Beiträge: 200
Ist Ptermres ohne Assembler möglich?
« 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?
... ich bin ST-HIGH und eher so der Monochrom-Typ

Offline mfro

  • Benutzer
  • Beiträge: 1.640
Re: Ist Ptermres ohne Assembler möglich?
« Antwort #1 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?
« Letzte Änderung: So 10.07.2022, 00:33:34 von mfro »
And remember: Beethoven wrote his first symphony in C

Online Thorsten Otto

  • Benutzer
  • Beiträge: 1.316
Re: Ist Ptermres ohne Assembler möglich?
« Antwort #2 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.

Offline simonsunnyboy

  • Moderator
  • *****
  • Beiträge: 1.808
  • Rock'n'Roll is the thing - Jerry Lee is the king!
Re: Ist Ptermres ohne Assembler möglich?
« Antwort #3 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...
Paradize - ST Offline Tournament
Stay cool, stay Atari!
1x2600jr, 1x1040STFm, 1x1040STE 4MB+TOS2.06+SatanDisk, 1xF030 14MB+FPU+NetUS-Bee