Files
Digital-Research-Source-Code/MPM OPERATING SYSTEMS/MPM-86/MISC DRI DISKS/03/STARTUP.A86
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

197 lines
3.9 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;***************************************************************;
; ;
; DIGITAL RESEARCH C COMPILER STARTUP MODULE ;
; ;
; SELECT ONE OF THE FOLLOWING MEMORY MODELS AND THEN ;
; ASSEMBLE WITH RASM-86 ;
; ;
; LOGIC IS AS FOLLOWS: ;
; ;
; Compiler generates call to _start (in lower case) ;
; Which calls _START (in upper case) ;
; Which init's SP, etc. then calls _GO (in upper case) ;
; Which calls _main (in lower case) which calls ;
; the user's main (in lower case) which then returns to ;
; _main which then returns then _GO calls exit in l. case ;
; ;
;***************************************************************;
SMALL_MODEL EQU 1
MEDIUM_MODEL EQU 0
COMPACT_MODEL EQU 0
BIG_MODEL EQU 0
IF SMALL_MODEL
CODE CSEG
CGROUP GROUP CODE
DGROUP GROUP _BREAK
EXTRN _GO:NEAR
PUBLIC _START
_START: MOV AX,DS
MOV SS,AX
MOV BX,6
MOV SP,[BX] ;set up ss:sp
MOV AX,WORD PTR ?MEMRY
MOV __break,AX ;set up __break for brk()
MOV BX,80H ;offset of command line
MOV AL,BYTE PTR [BX];get length
XOR AH,AH
PUSH AX
MOV AX,81H ;offset of command line data
PUSH AX
CALL _GO
DATA DSEG BYTE
PUBLIC ?MEMRY
?MEMRY RW 1
_BREAK DSEG BYTE COMMON
__break RW 1
ENDIF ;SMALL_MODEL
IF MEDIUM_MODEL
GO_CODE CSEG
EXTRN _GO:FAR
CODE CSEG
DGROUP GROUP DATA,_BREAK
PUBLIC _START
_START: MOV AX,DS
MOV BX,6
MOV SS,AX
MOV SP,[BX] ;set up ss:sp
MOV AX,WORD PTR ?MEMRY
MOV __BREAK,AX ;set up __BREAK for brk()
;
; NOW ZERO UN-INIT DATA
;
MOV CX,SP
SUB CX,100H ;LEAVE SOME SLOP
MOV BX,WORD PTR ?MEMRY ;GET STARTING LOCATION
SUB CX,BX ;CALC LENGTH INTO CX
INC CX
SHR CX,1 ;MAKE IT A WORD COUNT
MOV AX,0 ;FILL VALUE
MOV DX,DS
MOV ES,DX ;SET UP DEST SEG
MOV DI,BX ;SET UP DEST OFFSET
REP STOSW ;AND DOIT
MOV BX,80H ;offset of command line
MOV AL,BYTE PTR [BX];get length
XOR AH,AH
PUSH AX
MOV AX,81H ;offset of command line data
PUSH AX
CALLF _GO
DATA DSEG BYTE
PUBLIC ?MEMRY
?MEMRY RW 2
_BREAK DSEG BYTE COMMON
__BREAK RW 1
ENDIF ;MEDIUM_MODEL
IF COMPACT_MODEL
CODE CSEG
CGROUP GROUP CODE
DGROUP GROUP _BREAK
EXTRN _GO:NEAR
PUBLIC _START
_START:
MOV BX,0
MOV SS,15H[BX]
MOV SP,12H[BX] ;set up ss:sp
INC SP
MOV AX,0FH[BX]
MOV __BREAK+2,AX
SUB AX,AX
MOV __BREAK,AX ;set up __break for brk()
MOV BX,80H ;offset of command line
MOV AL,BYTE PTR [BX];get length
XOR AH,AH
PUSH AX
PUSH DS
MOV AX,81H ;offset of command line data
PUSH AX
CALL _GO
_BREAK DSEG BYTE COMMON
__BREAK RW 2
ENDIF ;COMPACT_MODEL
IF BIG_MODEL
DGROUP GROUP _BREAK
GO_CODE CSEG
EXTRN _GO:FAR
START_CODE CSEG
PUBLIC _START
_START:
MOV BX,0
MOV SS,15H[BX]
MOV SP,12H[BX] ;set up ss:sp
INC SP
MOV AX,0FH[BX]
MOV __BREAK+2,AX
SUB AX,AX
MOV __BREAK,AX ;set up __break for brk()
MOV BX,80H ;offset of command line
MOV AL,BYTE PTR [BX];get length
XOR AH,AH
PUSH AX
PUSH DS
MOV AX,81H ;offset of command line data
PUSH AX
CALLF _GO
_BREAK DSEG BYTE COMMON
__BREAK RW 2
ENDIF ;BIG_MODEL
END