| www.delorie.com/archives/browse.cgi | search |
| 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
| webmaster | delorie software privacy |
| Copyright © 2019 by DJ Delorie | Updated Jul 2019 |