rev |
line source |
pascal@19515
|
1 ;***************************************************************
|
pascal@19515
|
2 ;****** This file is distributed under GPL
|
pascal@19515
|
3 ;***************************************************************
|
pascal@19515
|
4 ideal
|
pascal@21984
|
5 %PAGESIZE 1000
|
pascal@19515
|
6 %crefref
|
pascal@19515
|
7 %noincl
|
pascal@19515
|
8 %nomacs
|
pascal@19636
|
9 ifdef NO386
|
pascal@19636
|
10 p8086
|
pascal@19636
|
11 else
|
pascal@19515
|
12 p386
|
pascal@19636
|
13 endif
|
pascal@19515
|
14
|
pascal@23996
|
15 group DGROUP _TEXT
|
pascal@19515
|
16 assume cs:DGROUP,ds:DGROUP
|
pascal@19515
|
17
|
pascal@19515
|
18 segment _TEXT byte public use16 'CODE'
|
pascal@19515
|
19
|
pascal@19515
|
20 ;***************************************************************
|
pascal@19515
|
21 ;void enable_a20_xmm();
|
pascal@19515
|
22 ;***************************************************************
|
pascal@19515
|
23 global _enable_a20_xmm:near
|
pascal@19515
|
24 proc _enable_a20_xmm near
|
pascal@19515
|
25
|
pascal@19515
|
26 mov ah,03h ;global enable a20
|
pascal@19515
|
27 call xmm_driver ;
|
pascal@19515
|
28 mov ah,05h ;local enable a20
|
pascal@19515
|
29 ;jmp xmm_driver ;
|
pascal@19515
|
30
|
pascal@19515
|
31 endp _enable_a20_xmm
|
pascal@19515
|
32
|
pascal@19515
|
33 ;***************************************************************
|
pascal@19515
|
34 ;Call xmm driver addr or 0 if no xmm
|
pascal@20142
|
35 ;void xmm_driver(ah)
|
pascal@19515
|
36 ;***************************************************************
|
pascal@19515
|
37 proc xmm_driver near
|
pascal@19515
|
38
|
pascal@21757
|
39 push ax ; save cmd
|
pascal@20142
|
40 mov ax,4300h ; installation check in al
|
pascal@19515
|
41 int 2fh
|
pascal@23996
|
42 mov bx,offset @@xmm_fail
|
pascal@23996
|
43 push cs
|
pascal@19515
|
44 pop es
|
pascal@19515
|
45 cmp al,80h
|
pascal@19515
|
46 jne @@err
|
pascal@20142
|
47 mov ax,4310h ; get driver address in es:bx
|
pascal@19515
|
48 int 2fh
|
pascal@19515
|
49 @@err:
|
pascal@21757
|
50 pop ax ; restore cmd
|
pascal@23996
|
51
|
pascal@23996
|
52 push cs ; call far
|
pascal@23996
|
53 call @@jmp_esbx
|
pascal@20142
|
54 dec ax ; Z=1=OK
|
pascal@19515
|
55 ret
|
pascal@23996
|
56
|
pascal@23996
|
57 @@jmp_esbx:
|
pascal@23996
|
58 push es ; \
|
pascal@23996
|
59 push bx ; > jmp far es:bx
|
pascal@23996
|
60 retf ; /
|
pascal@23996
|
61
|
pascal@23996
|
62 @@xmm_fail:
|
pascal@19538
|
63 xor ax,ax
|
pascal@19538
|
64 cwd
|
pascal@19538
|
65 retf
|
pascal@19538
|
66
|
pascal@19515
|
67 endp xmm_driver
|
pascal@19515
|
68
|
pascal@23992
|
69 ifdef WITH_XMM_ALLOC
|
pascal@22007
|
70 include "himem.inc"
|
pascal@20142
|
71
|
pascal@19515
|
72 ;***************************************************************
|
pascal@23992
|
73 ;_fastcall void xmm_alloc(si:struct image_himem *m)
|
pascal@19515
|
74 ;***************************************************************
|
pascal@20528
|
75 global @xmm_alloc$qp11image_himem:near
|
pascal@20528
|
76 proc @xmm_alloc$qp11image_himem near
|
pascal@19515
|
77
|
pascal@19515
|
78 ifndef NO386
|
pascal@23992
|
79 mov edx,[(image_himem si).size] ; m->size
|
pascal@20142
|
80 ;dec edx
|
pascal@19515
|
81 shr edx,10 ; to Kb
|
pascal@20486
|
82 inc edx
|
pascal@20486
|
83 mov ah,89h ;allocate blk of EDX kilobytes
|
pascal@19515
|
84 else
|
pascal@20142
|
85 ;mov ax,-1
|
pascal@20142
|
86 ;cwd
|
pascal@23992
|
87 ;add ax,[word (image_himem si).size] ; lo m->size
|
pascal@23992
|
88 ;adc dx,[word (image_himem si+2).size] ; hi m->size
|
pascal@23992
|
89 les ax,[dword (image_himem si).size] ; m->size
|
pascal@20142
|
90 mov cl,16-10
|
pascal@21791
|
91 extrn N_LXLSH@ES:near
|
pascal@21791
|
92 call N_LXLSH@ES
|
pascal@20486
|
93 inc dx
|
pascal@20486
|
94 mov ah,9h ;allocate blk of DX kilobytes (<64Mb)
|
pascal@19515
|
95 endif
|
pascal@19515
|
96 call xmm_driver ;
|
pascal@19538
|
97 jnz @@goerr
|
pascal@19515
|
98 ;now: dx=handle of the blk
|
pascal@19515
|
99 mov ah,0Ch ;lock blk
|
pascal@19515
|
100 call xmm_driver ;
|
pascal@19515
|
101 ;now: dx:bx=addr of blk
|
pascal@19515
|
102 xchg ax,bx
|
pascal@19538
|
103 @@goerr:
|
pascal@19538
|
104 jnz @@err
|
pascal@20142
|
105 mov [word (image_himem bx).buf],ax ; lo m->buf
|
pascal@20142
|
106 mov [word (image_himem bx+2).buf],dx ; hi m->buf
|
pascal@19515
|
107 @@err:
|
pascal@19538
|
108 ret
|
pascal@19538
|
109
|
pascal@20528
|
110 endp @xmm_alloc$qp11image_himem
|
pascal@23992
|
111 endif
|
pascal@19515
|
112
|
pascal@19515
|
113 ends _TEXT
|
pascal@19515
|
114
|
pascal@19515
|
115 end
|
pascal@19515
|
116
|
pascal@19515
|
117 ;###### END OF FILE ############################################
|