File: memsupt.asm

package info (click to toggle)
dosemu-freedos 1%3A0.0.b9r5a%2Betch.1-0etch1
  • links: PTS
  • area: contrib
  • in suites: etch
  • size: 19,744 kB
  • ctags: 23,279
  • sloc: ansic: 143,864; asm: 20,397; makefile: 3,868; perl: 1,106; yacc: 690; sh: 553; pascal: 297; xml: 150; cpp: 67
file content (98 lines) | stat: -rw-r--r-- 1,832 bytes parent folder | download | duplicates (2)
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
;
; assembly support routines for FreeDOS MEM
;
        group   DGROUP _DATA

        segment	_DATA

        extern  _xms_drv:wrt DGROUP

        segment _TEXT class=CODE

; struct xms_dx call_xms_driver_dx_bl_al(unsigned char ah, ushort dx)
global _call_xms_driver_dx_bl_al
_call_xms_driver_dx_bl_al:
	mov	bx, sp
	mov	ah, [bx+2]
	mov	dx, [bx+4]
	call	far [_xms_drv]
	mov	ah, bl
	ret

; struct xms_bx call_xms_driver_bx(unsigned char ah, ushort dx)
global _call_xms_driver_bx_ax
_call_xms_driver_bx_ax:
	mov	bx, sp
	mov	ah, [bx+2]
	mov	dx, [bx+4]
	call	far [_xms_drv]
	mov	dx, bx
	ret

; ulong cdecl call_xms_driver_edx(unsigned char rah, ushort rdx);
global _call_xms_driver_edx
_call_xms_driver_edx:
	mov	bx, sp
	mov	ah, [bx+2]
	mov	dx, [bx+4]
	call	far [_xms_drv]
xms_ext_common: 
	test	bl, bl
	je	noerror
	xor	edx, edx
noerror:
	mov	ax, dx
	shr	edx, 0x10
	ret

; ulong cdecl call_xms_driver_eax(unsigned char rah, ushort rdx);
global _call_xms_driver_eax
_call_xms_driver_eax:
	mov	bx, sp
	mov	ah, [bx+2]
	mov	dx, [bx+4]
	call	far [_xms_drv]
	mov	edx, eax
        jmp	short xms_ext_common

; int cdecl is_386_(void)        
global _is_386_
_is_386_:
        pushf
        pushf
        pop     ax
        or      ax, 0x7000
        push    ax
        popf
        pushf
        pop     ax
        popf
        ret

; ulong check_e820(struct e820map far *e820map, ulong counter)
global _check_e820
_check_e820:
        mov	bx, sp
	push	di
	push	si
	les	di, [bx+2]
	mov	ax, [bx+6]
	mov	bx, [bx+8]
	shl	ebx, 0x10
	mov	bx, ax
	mov	eax, 0xe820
	mov	edx, 0x534d4150 ; SMAP
	mov	ecx, 0x14
	int	0x15
	jc	no386
	cmp	eax, 0x534d4150 ; SMAP
	je	yes386
 no386:
	xor	ebx, ebx
 yes386:
	mov	ax, bx
	shr	ebx, 16
	mov	dx, bx
	pop	si
	pop	di
	ret