delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2005/11/29/23:15:41

X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f
From: blk5743 AT yahoo DOT com DOT tw
Newsgroups: comp.os.msdos.djgpp
Subject: Re: code from BC31(16bits) to DJGPP(32 bits)
Date: 29 Nov 2005 20:02:24 -0800
Organization: http://groups.google.com
Lines: 43
Message-ID: <1133323344.550990.86450@g49g2000cwa.googlegroups.com>
References: <1133146328 DOT 335307 DOT 54810 AT g44g2000cwa DOT googlegroups DOT com>
<dmf6p4$kke$1 AT domitilla DOT aioe DOT org>
<1133226276 DOT 234728 DOT 136880 AT f14g2000cwb DOT googlegroups DOT com>
<dmgcpm$u34$1 AT domitilla DOT aioe DOT org>
<1133234864 DOT 835782 DOT 126770 AT g49g2000cwa DOT googlegroups DOT com>
<dmi003$ntf$1 AT domitilla DOT aioe DOT org>
<1133314507 DOT 884056 DOT 150990 AT f14g2000cwb DOT googlegroups DOT com>
<dmj2e3$9jo$1 AT domitilla DOT aioe DOT org>
NNTP-Posting-Host: 61.66.169.71
Mime-Version: 1.0
X-Trace: posting.google.com 1133323349 19822 127.0.0.1 (30 Nov 2005 04:02:29 GMT)
X-Complaints-To: groups-abuse AT google DOT com
NNTP-Posting-Date: Wed, 30 Nov 2005 04:02:29 +0000 (UTC)
In-Reply-To: <dmj2e3$9jo$1@domitilla.aioe.org>
User-Agent: G2/0.2
X-HTTP-UserAgent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1),gzip(gfe),gzip(gfe)
X-HTTP-Via: 1.0 SVRPROXY
Complaints-To: groups-abuse AT google DOT com
Injection-Info: g49g2000cwa.googlegroups.com; posting-host=61.66.169.71;
posting-account=fl8v7w0AAAAQV4ThVU509YNPI8o0JeB3
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com
Errors-To: nobody AT delorie DOT com
X-Mailing-List: djgpp AT delorie DOT com
X-Unsubscribes-To: listserv AT delorie DOT com

? *VDS_Exist;  => check virtual DMA Service
? PRD_Pool; just a pool for cache data, define as char PRD_POOL[96*8]

yes, i want to

1) allocate XMS
2) set DMA to XMS
3) read CD
4) move DMA data to program

r_buffer just declare in program.
according to your clear explan.
it should at physical __djgpp_conventional_base+&r_buffer
it seems need not to allocate a DOS buffer to R/W data because buffer
above 1M+64K can do
Therefore, what i need to do is that

1. allocate XMS(AH 09 ) and lock the region(AH 0C),
    i will get a XMS Block Address: ulXMSBlockAddr = (DX<<4+BX) or
should be (DX<<16+BX)????
2. set the region to PRD data for DMA transfer use
    a. if VDS exist => SCATTER/GATHER LOCK REGION
        PRD_EDDS.Offset = __djgpp_conventional_base+&r_buffer,
PRD_EDDS.Segment = 0;???
        AX=8105, int 4b
    b. if VDS exist => LOCK DMA REGION
        PRD_DDS.Segment = 0;//????
        PRD_DDS.Offset =(ULONG)PRD_Table+__djgpp_conventional_base;
        AX=8103, int 4b
        get PRD_Addr.addr = PRD_DDS.PhysicalAddr;
        else //no VDS
            PRD_Addr.addr = ulXMSBlockAddr ;
3. enable bus master function and send Read command to CD
    set PRD_Addr.addr to Bus Master registers and enable
4. copy data from XMS region
    if VDS exist
        directly get data from r_buffer
    else
        use dosmemget to get data(copy XMS to r_buffer)

Dear Rod Pemberton
i can give you part of BC31 sample code if you have interesting

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019