mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-23 00:14:25 +00:00
153 lines
2.8 KiB
Plaintext
153 lines
2.8 KiB
Plaintext
|
||
CODE CSEG
|
||
|
||
DGROUP GROUP DATA,__pname,__tname,__lname,__xeof,_break
|
||
|
||
|
||
|
||
PUBLIC brk
|
||
PUBLIC __BDOS
|
||
PUBLIC _start
|
||
|
||
PUBLIC _ret
|
||
PUBLIC _swpll
|
||
|
||
JMP _start
|
||
DB 'C runtime library, Copyright 1982 by Digital Research 86V0.8'
|
||
DB 01AH
|
||
brk: PUSH BP
|
||
MOV BP,SP
|
||
PUSH DI
|
||
PUSH SI
|
||
|
||
MOV AX,6[BP] ;GET PARAMETER
|
||
MOV BX,SP ;GET STACK POINTER
|
||
SUB BX,200H ;LEAVE SOME SLOP
|
||
CMP BH,AH ;IN THE SAME GENERAL AREA?
|
||
JA BRKOK ;IS BH <= AH? IF NOT THEN OK, LEAVE IT ALONE
|
||
MOV AX,-1
|
||
JMP BRKXIT
|
||
|
||
BRKOK: MOV AX,0
|
||
BRKXIT: POP SI
|
||
POP DI
|
||
POP BP
|
||
RETF
|
||
|
||
|
||
_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 _main
|
||
CALLF exit
|
||
|
||
_swpll:
|
||
POP RET1
|
||
POP RET2
|
||
POP AX
|
||
POP BX
|
||
POP CX
|
||
POP DX
|
||
PUSH BX
|
||
PUSH AX
|
||
PUSH DX
|
||
PUSH CX
|
||
PUSH RET2
|
||
PUSH RET1
|
||
RETF
|
||
|
||
_ret: POP SI
|
||
POP SI ;FLUSH RET ADDR
|
||
LEA SI,0-4[BP]
|
||
MOV SP,SI
|
||
POP SI
|
||
POP DI
|
||
POP BP
|
||
RETF
|
||
|
||
__BDOS: ;(func,long)
|
||
PUSH BP
|
||
MOV BP,SP
|
||
PUSH DI
|
||
PUSH SI
|
||
CMP WORD PTR 6[BP],26 ;SET DMA?
|
||
JNZ NOTSETDMA ;BR IF NO
|
||
;
|
||
; OTHERWISE SET SEGMENT BASE EVERY TIME
|
||
;
|
||
MOV DX,DS
|
||
MOV CX,33H
|
||
PUSH BP
|
||
INT 0E0H
|
||
POP BP
|
||
|
||
NOTSETDMA:
|
||
MOV CX,6[BP]
|
||
MOV DX,8[BP]
|
||
PUSH BP
|
||
INT 0E0H
|
||
POP BP
|
||
POP SI
|
||
POP DI
|
||
POP BP
|
||
XOR AH,AH
|
||
RETF
|
||
|
||
DATA DSEG BYTE
|
||
|
||
PUBLIC ?MEMRY
|
||
?MEMRY RW 2
|
||
RET1 RW 1
|
||
RET2 RW 1
|
||
|
||
_break DSEG BYTE COMMON
|
||
__break RW 1
|
||
|
||
__pname DSEG BYTE COMMON
|
||
_pname DB 'Cprogram',0
|
||
|
||
__tname DSEG BYTE COMMON
|
||
_tname DB 'CON:',0
|
||
|
||
__lname DSEG BYTE COMMON
|
||
_lname DB 'LST:',0
|
||
|
||
__xeof DSEG BYTE COMMON
|
||
_xeof DB 01AH
|
||
_main.c_CODE CSEG
|
||
EXTRN _main:FAR
|
||
exit.c_CODE CSEG
|
||
EXTRN exit:FAR
|
||
|
||
END
|
||
|
||
|
||
|