PofoWiki

Die ultimative Informationsquelle zum ATARI Portfolio

Benutzer-Werkzeuge

Webseiten-Werkzeuge


hardware:doku:techrefguide:anhanga

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
hardware:doku:techrefguide:anhanga [26/07/2007 21:07] – ergänzt. uxthardware:doku:techrefguide:anhanga [Unbekanntes Datum] (aktuell) – Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1
Zeile 1: Zeile 1:
 ===== ANHANG A: .RUN PROGRAMM BEISPIEL ===== ===== ANHANG A: .RUN PROGRAMM BEISPIEL =====
  
-Abschnitt 3.6 hebt die wichtigsten Entwicklungsbedingungen hervor, die zu berücksichtigen sind wenn man .RUN Programme schreibt.\\+Abschnitt [[hardware:doku:techrefguide:abschnitt3#run|3.6.3]] hebt die wichtigsten Entwicklungsbedingungen hervor, die zu berücksichtigen sind wenn man .RUN Programme schreibt.\\
  
 Auf der Emulator-Diskette befinden sich folgende Dateien:\\ Auf der Emulator-Diskette befinden sich folgende Dateien:\\
Zeile 19: Zeile 19:
 Bemerkungen bezüglich der Verbindung zwischen "C" Dateien und dem RUN Befehl:\\ Bemerkungen bezüglich der Verbindung zwischen "C" Dateien und dem RUN Befehl:\\
  
-Für "C" Dateien müssen wesentlich mehr Segmente deklariert werden damit "C" den Code und die Daten an die richtigen Stelle in der .RUN Datei bekommt. Die .COM Datei wird durch Umbenennung in eine .RUN Datei gewandelt.\\+Für "C" Dateien müssen wesentlich mehr Segmente deklariert werden damit "C" den Code und die Daten an die richtigen Stellen in der .RUN Datei bekommt. Die .COM Datei wird durch Umbenennung in eine .RUN Datei gewandelt.\\
  
 RU_C.ASM ist der Header der für die Verbindung zu einem "C" Programm  verwendet werden kann. Wenn "C" Quelldateien ohne die entsprechenden Bibliotheken verwendet werden, kann die Datei R_CU direkt als Header benutzt werden. Falls Code aus Bibliotheken nötig ist, so muss der Header um die nötigen Initialisierungen erweitert werden.\\ RU_C.ASM ist der Header der für die Verbindung zu einem "C" Programm  verwendet werden kann. Wenn "C" Quelldateien ohne die entsprechenden Bibliotheken verwendet werden, kann die Datei R_CU direkt als Header benutzt werden. Falls Code aus Bibliotheken nötig ist, so muss der Header um die nötigen Initialisierungen erweitert werden.\\
Zeile 25: Zeile 25:
 Der RU_C.ASM Header funktioniert mit Turbo C und kann als Leitfaden zur Modifikation anderer "C" Header verwendet werden, die bei den unterschiedlichen "C" Compliler Bibliotheken vorkommen.\\ Der RU_C.ASM Header funktioniert mit Turbo C und kann als Leitfaden zur Modifikation anderer "C" Header verwendet werden, die bei den unterschiedlichen "C" Compliler Bibliotheken vorkommen.\\
  
-Die meisten "C" Header die mit "C" Compilern geliefert werden können für verschiedene Speichermodelle assembliert werden. Der Beispiel-Code in RU_C.ASM muss im in dem "C" Startup Header stehen und muss für SMALL model assembliert werden.\\+Die meisten "C" Header die mit "C" Compilern geliefert werden können für verschiedene Speichermodelle assembliert werden. Der Beispiel-Code in RU_C.ASM muss in dem "C" Startup Header stehen und muss für SMALL model assembliert werden.\\
  
-Kontaktieren sie Atari bezüglich RUN Starup Codes für die unterschiedlichen C Compiler.\\+Kontaktieren sie Atari bezüglich RUN Startup Codes für die unterschiedlichen C Compiler.\\
 \\ \\
 \\ \\
Zeile 224: Zeile 224:
  
 </code> </code>
 +\\
 +\\
 +\\
 \\ \\
 \\ \\
Zeile 262: Zeile 265:
  
 </code> </code>
 +\\
 +\\
 +\\
 +\\
 +\\
 +\\
 +\\
 +
 +<code asm>
 +
 +TITLE RU_C.ASM
 +
 +comment *
 + Copyright DIP Ltd., 1989
 +
 + 'C' header for creation of DIP Pocket PC .RUN files.
 +
 + Memory usage:
 +
 + -------------------------------------------- High memory -------
 + SP: Stack
 + ----------------------------------------------------------------
 + Uninitialised data
 + ----------------------------------------------------------------
 + DS/SS: Initialised data
 + ----------------------------------------------------------------
 + ES: PSP
 + -------------------------------------------- Low memory --------
 + *
 +
 +;       Segment and Group declarations
 +
 +; code and fixed data (less than 64k).
 +_TEXT   SEGMENT BYTE PUBLIC 'CODE'
 +_TEXT   ENDS
 +
 +; code ends (marker segment)
 +_TEXTEND   SEGMENT BYTE PUBLIC 'CEND'
 +_TEXTEND   ENDS
 +
 +; initialised data transferred into RAM.
 +_DATA   SEGMENT PARA PUBLIC 'DATA'
 +_DATA   ENDS
 +
 +; uninitialised data which is allocated space in RAM.
 +_BSS    SEGMENT WORD PUBLIC 'BSS'
 +_BSS    ENDS
 +
 +; uninitialised data end (marker segment).
 +_BSSEND SEGMENT BYTE PUBLIC 'STACK'
 +_BSSEND ENDS
 +
 +DGROUP GROUP _DATA,_BSS,_BSSEND ; dgroup is all data segments.
 +
 +        ASSUME  CS:_TEXT, DS:DGROUP
 +
 + extrn _main:near ; main 'C' routine.
 +
 +STACKSIZE equ 128 ; stack size in bytes.
 +
 +; At the start, SS, DS and ES all point to the program segment prefix.
 +; CS is a ptr into the memory card.
 +
 +_TEXT   SEGMENT
 +
 + org 0 ; ip is zero on entry.
 +
 +start proc near ; near is irrelevant, use fn 4c to
 + ; terminate.
 +
 + mov dx,ds ; ensure DS:0 is ptr to 1st data byte.
 + add dx,10h
 + mov     ds,dx
 +
 + mov bx,STACKSIZE
 + add bx,offset DGROUP:edata ; bx has bytes of reqd RAM.
 +
 + push bx ; this will be stack ptr.
 +
 + shr bx,1
 + shr bx,1
 + shr bx,1
 + shr bx,1
 + add bx,11h ; 10h for PSP, 1 for rounding.
 +
 + mov ah,4ah
 + int 21h ; reduce RAM to required RAM.
 + jc abort ; can't reduce.
 +
 + pop bx ; get calc'd p back.
 + mov ax,ds
 + mov ss,ax ; stack is in RAM.
 + mov sp,bx
 +
 + push ds
 + pop es ; target is allocated RAM after PSP.
 +
 + push cs
 + pop ds ; source is memory card.
 +
 + mov si, offset _TEXT:etext ; get ptr to last byte in code.
 + add si, 0Fh ; round up to 1st byte in data.
 + and si, 0FFF0h ; data is para aligned on the card.
 + ; ds:si is ptr to start of init data.
 + xor di,di ; put data at 0 offs into alloc'd RAM.
 + ; es:di is ptr to alloc'd RAM target.
 + mov cx, offset DGROUP:bdata ; get bytes in initialised data.
 + inc cx ; round up: ensure last byte is copied.
 + shr cx,1
 +
 + cld
 + rep movsw ; copy init data from memory card.
 +
 + push es
 + pop ds ; DS back to ptr to RAM.
 +
 + mov di,offset DGROUP:bdata ; ptr to where uninit data goes in RAM.
 + mov cx,offset DGROUP:edata ; ptr to end of all data.
 + sub cx,di ; calc bytes in BSS.
 + xor al,al ; clear to zero.
 + rep stosb
 +
 + call _main ; invoke program.
 +
 + mov ah,4ch ; terminate with main's return code.
 + int 21h
 +
 +abort:
 + mov ax,4c01h ; abort with error.
 + int 21h
 +start endp
 +
 +_TEXT ENDS
 +
 +
 +_TEXTEND   SEGMENT BYTE PUBLIC 'CEND'
 +etext label byte ;Last byte of text segment
 +_TEXTEND   ENDS
 +
 +_DATA   SEGMENT
 + public _errno
 +_errno dw 0
 +_DATA   ENDS
 +
 +_BSS    SEGMENT
 +bdata label   byte
 +_BSS    ENDS
 +
 +_BSSEND SEGMENT
 +edata label   byte
 +_BSSEND ENDS
 +
 + end start
 +</code>
 +
 +
hardware/doku/techrefguide/anhanga.1185477535.txt.gz · Zuletzt geändert: 16/02/2024 17:02 (Externe Bearbeitung)