mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-23 00:14:25 +00:00
197 lines
3.9 KiB
Plaintext
197 lines
3.9 KiB
Plaintext
;***************************************************************;
|
||
; ;
|
||
; 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
|
||
|
||
|
||
|