hardware:doku:techrefguide:anhanga
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
hardware:doku:techrefguide:anhanga [26/07/2007 21:07] – angelegt uxt | hardware: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 |
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 " | Bemerkungen bezüglich der Verbindung zwischen " | ||
- | Für " | + | Für " |
RU_C.ASM ist der Header der für die Verbindung zu einem " | RU_C.ASM ist der Header der für die Verbindung zu einem " | ||
Zeile 25: | Zeile 25: | ||
Der RU_C.ASM Header funktioniert mit Turbo C und kann als Leitfaden zur Modifikation anderer " | Der RU_C.ASM Header funktioniert mit Turbo C und kann als Leitfaden zur Modifikation anderer " | ||
- | Die meisten " | + | Die meisten " |
+ | |||
+ | Kontaktieren sie Atari bezüglich RUN Startup Codes für die unterschiedlichen C Compiler.\\ | ||
+ | \\ | ||
+ | \\ | ||
+ | \\ | ||
+ | <code asm> | ||
+ | TITLE RNRN.ASM | ||
+ | |||
+ | comment * | ||
+ | (c) Copyright DIP, 1989 | ||
+ | |||
+ | Example .RUN program | ||
+ | |||
+ | For Appendix 1 of DIP Pocket PC Technical Reference Manual | ||
+ | |||
+ | * | ||
+ | |||
+ | DGROUP group _text, | ||
+ | |||
+ | STACKSIZE equ 400 ; | ||
+ | |||
+ | ; code segment. | ||
+ | _text segment public byte ' | ||
+ | assume cs: | ||
+ | |||
+ | org 0 ; IP is 0 on entry. | ||
+ | |||
+ | ; | ||
+ | ; rnrn_main ; | ||
+ | ; | ||
+ | ; RUN command test routine. ; | ||
+ | ; On entry, DS, SS and ES all point to the PSP in RAM. ; | ||
+ | ; CS is a ptr into the credit card, so may actually be in ROM! ; | ||
+ | ; When this routine is executed, the whole of RAM is allocated to the ; | ||
+ | ; process. ; | ||
+ | ; | ||
+ | ; Parameters: | ||
+ | ; | ||
+ | ; Returns: | ||
+ | ; | ||
+ | ; | ||
+ | |||
+ | rnrn_main proc near | ||
+ | |||
+ | mov bx, | ||
+ | mov ah, | ||
+ | int 21h | ||
+ | jc rnrn_err ; | ||
+ | |||
+ | mov bx, | ||
+ | sub bx, | ||
+ | add bx, | ||
+ | mov cl,4 | ||
+ | shr bx, | ||
+ | add bx, | ||
+ | mov ah, | ||
+ | int 21h ; | ||
+ | jc rnrn_err ; | ||
+ | |||
+ | mov ss, | ||
+ | mov sp, | ||
+ | |||
+ | push es ; | ||
+ | |||
+ | mov cx, | ||
+ | sub cx, | ||
+ | |||
+ | mov si, | ||
+ | push cs | ||
+ | pop ds ; source is on memory card. | ||
+ | xor di, | ||
+ | mov es, | ||
+ | cld | ||
+ | |||
+ | rep movsb ; | ||
+ | |||
+ | pop es ; restore PSP ptr. | ||
+ | |||
+ | mov si, | ||
+ | mov cx, | ||
+ | |||
+ | rnrn_fcb1: | ||
+ | mov dl, | ||
+ | inc si | ||
+ | mov ah,2 | ||
+ | int 21h ; | ||
+ | loop rnrn_fcb1 | ||
+ | |||
+ | mov si, | ||
+ | mov cx, | ||
+ | |||
+ | rnrn_fcb2: | ||
+ | mov dl, | ||
+ | inc si | ||
+ | mov ah,2 | ||
+ | int 21h ; | ||
+ | loop rnrn_fcb2 | ||
+ | |||
+ | push ss | ||
+ | pop ds ; DS is ptr to data in RAM. | ||
+ | |||
+ | mov al, | ||
+ | call rnrn_disp ; | ||
+ | |||
+ | inc _rnrn_val | ||
+ | |||
+ | mov al, | ||
+ | call rnrn_disp ; | ||
+ | |||
+ | mov rnrn_unin, | ||
+ | mov al, | ||
+ | call rnrn_disp ; | ||
+ | |||
+ | xor al, | ||
+ | jmp short rnrn_end | ||
+ | |||
+ | rnrn_err: | ||
+ | mov dx, | ||
+ | push cs | ||
+ | pop ds ; write directly from ROM card! | ||
+ | mov ah, | ||
+ | int 21h ; | ||
+ | mov al, | ||
+ | |||
+ | rnrn_end: | ||
+ | push ax ; | ||
+ | |||
+ | mov ah, | ||
+ | int 21h | ||
+ | |||
+ | pop ax ; get errorlevel code back. | ||
+ | mov ah, | ||
+ | int 21h | ||
+ | |||
+ | rnrn_main endp | ||
+ | |||
+ | |||
+ | ; | ||
+ | ; rnrn_disp ; | ||
+ | ; | ||
+ | ; Display the value in AL with a trailing space. ; | ||
+ | ; | ||
+ | ; Parameters: | ||
+ | ; AL Value to print, less than 100. ; | ||
+ | ; Returns: | ||
+ | ; | ||
+ | ; | ||
+ | rnrn_disp proc near | ||
+ | aam ; convert to two numbers. | ||
+ | add ax, | ||
+ | push ax ; | ||
+ | |||
+ | mov dl, | ||
+ | mov ah, | ||
+ | int 21h | ||
+ | |||
+ | pop dx | ||
+ | mov ah, | ||
+ | int 21h | ||
+ | |||
+ | mov dl,' | ||
+ | mov ah, | ||
+ | int 21h | ||
+ | |||
+ | ret | ||
+ | rnrn_disp endp | ||
+ | |||
+ | _text ends | ||
+ | |||
+ | |||
+ | ; initialised and uninitialised RAM data. | ||
+ | ; this is para since the segment will start at zero when it is copied | ||
+ | ; over into RAM. | ||
+ | _data segment public para ' | ||
+ | rnrn_dstart label byte | ||
+ | |||
+ | public _rnrn_val | ||
+ | _rnrn_val db 42 | ||
+ | |||
+ | rnrn_dend label byte | ||
+ | rnrn_ustart label byte ; | ||
+ | |||
+ | rnrn_unin db ? | ||
+ | |||
+ | rnrn_uend label byte ; | ||
+ | ; the stack is added on here, after initialised and uninitialised data. | ||
+ | _data ends | ||
+ | |||
+ | |||
+ | _cdata segment public byte ' | ||
+ | |||
+ | ; initialised data which doesn' | ||
+ | rnrn_mem db " | ||
+ | |||
+ | _cdata ends | ||
+ | end rnrn_main | ||
+ | |||
+ | </ | ||
+ | \\ | ||
+ | \\ | ||
+ | \\ | ||
+ | \\ | ||
+ | \\ | ||
+ | \\ | ||
+ | \\ | ||
+ | |||
+ | <code C> | ||
+ | /* MAIN.C | ||
+ | |||
+ | Copyright DIP Ltd, 1989 | ||
+ | |||
+ | DIP Pocket PC RUN file ' | ||
+ | */ | ||
+ | |||
+ | char buf[2]; | ||
+ | |||
+ | char *str=" | ||
+ | |||
+ | unsigned int __brklvl; | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | puts(str); | ||
+ | |||
+ | buf[0]=' | ||
+ | buf[1]=0; | ||
+ | |||
+ | puts(& | ||
+ | |||
+ | return(0); | ||
+ | } | ||
+ | |||
+ | void _exit() | ||
+ | /* | ||
+ | Dummy exit function required for the Turboc libraries. | ||
+ | */ | ||
+ | {} | ||
+ | |||
+ | </ | ||
+ | \\ | ||
+ | \\ | ||
+ | \\ | ||
+ | \\ | ||
+ | \\ | ||
+ | \\ | ||
+ | \\ | ||
+ | |||
+ | <code asm> | ||
+ | |||
+ | TITLE RU_C.ASM | ||
+ | |||
+ | comment * | ||
+ | Copyright DIP Ltd., 1989 | ||
+ | |||
+ | ' | ||
+ | |||
+ | Memory usage: | ||
+ | |||
+ | -------------------------------------------- High memory ------- | ||
+ | SP: | ||
+ | ---------------------------------------------------------------- | ||
+ | Uninitialised data | ||
+ | ---------------------------------------------------------------- | ||
+ | DS/ | ||
+ | ---------------------------------------------------------------- | ||
+ | ES: PSP | ||
+ | -------------------------------------------- Low memory -------- | ||
+ | * | ||
+ | |||
+ | ; | ||
+ | |||
+ | ; code and fixed data (less than 64k). | ||
+ | _TEXT | ||
+ | _TEXT | ||
+ | |||
+ | ; code ends (marker segment) | ||
+ | _TEXTEND | ||
+ | _TEXTEND | ||
+ | |||
+ | ; initialised data transferred into RAM. | ||
+ | _DATA | ||
+ | _DATA | ||
+ | |||
+ | ; uninitialised data which is allocated space in RAM. | ||
+ | _BSS SEGMENT WORD PUBLIC ' | ||
+ | _BSS ENDS | ||
+ | |||
+ | ; uninitialised data end (marker segment). | ||
+ | _BSSEND SEGMENT BYTE PUBLIC ' | ||
+ | _BSSEND ENDS | ||
+ | |||
+ | DGROUP GROUP _DATA, | ||
+ | |||
+ | ASSUME | ||
+ | |||
+ | extrn _main: | ||
+ | |||
+ | STACKSIZE equ 128 ; | ||
+ | |||
+ | ; At the start, SS, DS and ES all point to the program segment prefix. | ||
+ | ; CS is a ptr into the memory card. | ||
+ | |||
+ | _TEXT | ||
+ | |||
+ | org 0 ; ip is zero on entry. | ||
+ | |||
+ | start proc near ; | ||
+ | ; terminate. | ||
+ | |||
+ | mov dx, | ||
+ | add dx, | ||
+ | mov | ||
+ | |||
+ | mov bx, | ||
+ | add bx, | ||
+ | |||
+ | push bx ; | ||
+ | |||
+ | shr bx,1 | ||
+ | shr bx,1 | ||
+ | shr bx,1 | ||
+ | shr bx,1 | ||
+ | add bx, | ||
+ | |||
+ | mov ah, | ||
+ | int 21h ; | ||
+ | jc abort ; | ||
+ | |||
+ | pop bx ; get calc'd p back. | ||
+ | mov ax, | ||
+ | mov ss, | ||
+ | mov sp, | ||
+ | |||
+ | push ds | ||
+ | pop es ; target is allocated RAM after PSP. | ||
+ | |||
+ | push cs | ||
+ | pop ds ; source is memory card. | ||
+ | |||
+ | mov si, offset _TEXT: | ||
+ | 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, | ||
+ | ; es:di is ptr to alloc' | ||
+ | mov cx, offset DGROUP: | ||
+ | inc cx ; round up: ensure last byte is copied. | ||
+ | shr cx,1 | ||
+ | |||
+ | cld | ||
+ | rep movsw ; | ||
+ | |||
+ | push es | ||
+ | pop ds ; DS back to ptr to RAM. | ||
+ | |||
+ | mov di, | ||
+ | mov cx, | ||
+ | sub cx, | ||
+ | xor al, | ||
+ | rep stosb | ||
+ | |||
+ | call _main ; | ||
+ | |||
+ | mov ah, | ||
+ | int 21h | ||
+ | |||
+ | abort: | ||
+ | mov ax, | ||
+ | int 21h | ||
+ | start endp | ||
+ | |||
+ | _TEXT ENDS | ||
+ | |||
+ | |||
+ | _TEXTEND | ||
+ | etext label byte ; | ||
+ | _TEXTEND | ||
+ | |||
+ | _DATA | ||
+ | public _errno | ||
+ | _errno dw 0 | ||
+ | _DATA | ||
+ | |||
+ | _BSS SEGMENT | ||
+ | bdata label | ||
+ | _BSS ENDS | ||
+ | |||
+ | _BSSEND SEGMENT | ||
+ | edata label | ||
+ | _BSSEND ENDS | ||
+ | |||
+ | end start | ||
+ | </ | ||
- | Kontaktieren sie Atari bezüglich RUN Starup Codes für die unterschiedlichen C Compiler.\\ | ||
hardware/doku/techrefguide/anhanga.1185477025.txt.gz · Zuletzt geändert: 16/02/2024 17:02 (Externe Bearbeitung)