Category : Assembly Language Source Code
Archive   : ASMLIB35.ZIP
Filename : STARTUP.ASM

 
Output of file : STARTUP.ASM contained in archive : ASMLIB35.ZIP
include asm.inc

extrn endprog:proc
extrn breaktrap:proc
extrn breakrelease:proc
IFDEF HEAP
extrn hinit:proc
ENDIF
extrn mymain:proc

; make LINK search through ASMLIB for external references
; so I don't have to specify ASMLIB on the command line
IF codesize EQ 1
IF datasize EQ 2
IFDEF NOXT
includelib 286huge
ELSE
includelib asmhuge
ENDIF
ELSE
IFDEF NOXT
includelib 286lib
ELSE
includelib asmlib
ENDIF
ENDIF
ELSE
IFDEF NOXT
includelib 286small
ELSE
includelib asmsmall
ENDIF
ENDIF

stacksize equ 1024

.stack stacksize

.data
public pspseg
pspseg dw ? ; storage for PSP segment

IFDEF HEAP
; make some space available for the local heap
heapsize equ 32767
heapbuffer db heapsize dup(0)
ENDIF

.code
start:
; start by pointing DS to DGROUP
mov dx,@data
mov ds,dx
assume ds:@data

; adjust for MS-LINK bug that puts SS in wrong segment
; THIS ADJUSTMENT IS REQURIED BY SEVERAL ASMLIB SUBROUTINES
mov ax,ss
sub ax,dx ; paragraph difference
mov cl,4
shl ax,cl ; converted to bytes
add sp,ax ; fix SP for new SS
mov ss,dx ; assume ss:DGROUP

; save PSP segment for DOS 2.xx
mov pspseg,es

; next, release memory beyond the end of the program
; The file ENDPROG.ASM has a definition for ZSEG, marking the
; end of the program's code, data and stack area. I want to
; release memory beyond ZSEG so I can use DOS function 48h for
; memory allocation.
; When linking ENDPROG.OBJ with your other object files, be sure
; ENDPROG is at the end of your list of object files. The new segment
; ZSEG surprises link, and it has little choice but to put ZSEG
; at the end of the program.
call endprog ; returns AX = last segment

mov bx,es ; first segment (ES = seg PSP)
sub bx,ax
neg bx ; size of program in paragraphs
mov ah,4Ah ; resize memory block
int 21h

IFDEF HEAP
; need to initialize the heap in order to work properly. A common cause
; of bombed programs is failure to initilaize the heap.
lea bx,heapbuffer
mov ax,heapsize
call hinit
ENDIF

; prevent an unintended program crash; trap Ctrl+Break, Ctrl+C and
; Ctrl+Alt+Del key combinations
call breaktrap

; call your main program here
call mymain

exit:
; de-activate the Ctrl+Break trap
call breakrelease

; normal program exit
mov ax,4C00h
int 21h

end start
end


  3 Responses to “Category : Assembly Language Source Code
Archive   : ASMLIB35.ZIP
Filename : STARTUP.ASM

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/