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> <1133226276 DOT 234728 DOT 136880 AT f14g2000cwb DOT googlegroups DOT com> <1133234864 DOT 835782 DOT 126770 AT g49g2000cwa DOT googlegroups DOT com> <1133314507 DOT 884056 DOT 150990 AT f14g2000cwb DOT googlegroups DOT com> NNTP-Posting-Host: 61.66.169.71 Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" 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: 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 Precedence: bulk ? *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