|
superham
初级用户
积分 112
发帖 2
注册 2002-12-17
状态 离线
|
『楼 主』:
请问DOS下怎样访问32位的地址空间?
菜鸟我最近做一个PCI卡,上面有512K的RAM。
BIOS把它映射到Baseaddress为D8000000的空间(3G以上)
请问我怎样才能访问到这块内存啊(DOS下),大侠救命!
WatcomC, DJGPP这类的32位编译器可以做到吗,怎么做,谢谢!
[此贴子已经被作者于2002-12-17 17:43:42编辑过]
|
|
2002-12-17 00:00 |
|
|
雨飞
初级用户
我帅我存在
积分 151
发帖 25
注册 2003-1-10
状态 离线
|
『第
2 楼』:
delphi for dos 下面可以用:mem[d8000000]来访问。
|
我是一颗菠菜,菜菜,菜菜,菜菜,菜菜菜菜菜 |
|
2003-1-11 00:00 |
|
|
szxxbb
初级用户
积分 133
发帖 8
注册 2003-2-4
状态 离线
|
『第
3 楼』:
1:use watcom in 32bit
char *buf=(char*)0xd800000;
i=*buf
2:use dos
typedef struct
{ char gdt0[8];
char gdt1[8];
unsigned int srclimit;
unsigned int srclw;
unsigned char srclb;
unsigned char srcrights;
unsigned char srcflag;
unsigned char srchb;
unsigned int trglimit;
unsigned int trglw;
unsigned char trglb;
unsigned char trgrights;
unsigned char trgflag;
unsigned char trghb;
char bioscs[8];
char biosss[8];
}gdt;
gdt For2_gdt;
int For2_read(unsigned long srcaddress,char far *bufer,unsigned int lenth)
{ unsigned int i,j;
unsigned char cc,ccl,cch;
char far *fp1;
int15init();
fp1=&bufer[0];
i=FP_SEG(fp1);
j=FP_OFF(fp1);
_asm{
mov ax,i
mov dx,ax
mov bx,j
mov cl,04h
shl dx,cl
rol ax,cl
and ax,0fh
add bx,dx
adc al,0
mov i,bx
mov cc,al
}
For2_gdt.trglimit=0xffff;
For2_gdt.trglw=i;
For2_gdt.trglb=cc;
For2_gdt.trghb=0;
For2_gdt.trgflag=0x4;
For2_gdt.srclimit=0xffff;
For2_gdt.srclw=(unsigned int)(srcaddress&0xffff);
For2_gdt.srclb=(unsigned char)((srcaddress>>16)&0xff);
For2_gdt.srchb=(unsigned char)((srcaddress>>24)&0xff);
For2_gdt.srcflag=0x4;
For2_gdt.srcrights=0x92;
For2_gdt.trgrights=0x92;
fp1=&(For2_gdt.gdt0[0]);
i=FP_SEG(fp1);
j=FP_OFF(fp1);
_asm{
mov ax,i
mov es,ax
mov si,j
mov cx,lenth
mov ah,87h
int 15h
mov i,ax
}
return i;
}
void int15init()
{ int i;
for(i=0;i<8;i++)
{ // For2_gdt.bioscs=0;
// For2_gdt.biosss=0;
For2_gdt.gdt0=0;
For2_gdt.gdt1=0;
}
For2_gdt.bioscs[0]=0xff;
For2_gdt.bioscs[1]=0xff;
For2_gdt.bioscs[2]=0;
For2_gdt.bioscs[3]=0;
For2_gdt.bioscs[4]=0x0f;
For2_gdt.bioscs[5]=0x9b;
For2_gdt.bioscs[6]=0;
For2_gdt.bioscs[7]=0;
For2_gdt.biosss[0]=0xff;
For2_gdt.biosss[1]=0xff;
For2_gdt.biosss[2]=0;
For2_gdt.biosss[3]=3;
For2_gdt.biosss[4]=0;
For2_gdt.biosss[5]=0x93;
For2_gdt.biosss[6]=0;
For2_gdt.biosss[7]=0;
}
|
|
2003-2-4 00:00 |
|
|