summaryrefslogtreecommitdiff
path: root/fpcsrc/rtl/watcom/prt0.as
blob: d0f69d54c1e92f9e494e4746d1f957fb24d69764 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
.387
.386p

	name prt0
	assume nothing
	extrn PASCALMAIN : near
	extrn HEAPSIZE : dword
	public start
	public ___exit
	public ___sbrk
	public HEAP
	public PSP_SELECTOR
	public ENV_SELECTOR
	public ENV_SIZE

.STACK 1000h
.CODE

start proc near
        	jmp     short main
        	db      "WATCOM"
	main:
		mov	ax,es             ; psp selector in es
		mov	PSP_SELECTOR,ax
		mov	gs,ax
		mov	bx,[gs:2Ch]       ; environment sel. at psp_sel:2C
		mov	ENV_SELECTOR,bx
		lsl	ecx,bx            ; get selector limit
		mov	ENV_SIZE,ecx
		push	ds
		pop	es
		push	ds
		pop	fs
		mov	eax,HEAPSIZE
		push	eax
		call	___sbrk           ; allocate heap  
		mov	HEAP,eax
		pop	eax
        	call    PASCALMAIN
start endp

___exit proc near
		pop	eax
		mov	ah,4Ch
		int	21h
___exit endp

___sbrk proc near
		mov	ebx,dword ptr [esp+4]
		mov	ecx,ebx
		shr	ebx,16
		mov	ax,501h
		int	31h
		jnc	sbrk_ok
		xor	eax,eax
		ret
	sbrk_ok:
		shl	ebx,16
		mov	bx,cx
		mov	eax,ebx
		ret
___sbrk endp

.DATA
	HEAP dd 0
	PSP_SELECTOR dw 0
	ENV_SELECTOR dw 0
	ENV_SIZE dd 0


end start