1
0
Fork 0

Allow reading from dma ports to get the current count.

Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@408
This commit is contained in:
Sjoerd van der Berg 2002-10-25 08:59:43 +00:00
parent bbebcd02b9
commit 9ed0094a0e

View file

@ -70,6 +70,32 @@ struct DMA_CONTROLLER {
};
static DMA_CONTROLLER dma[2];
static Bit8u read_dma(Bit32u port) {
/* only use first dma for now */
DMA_CONTROLLER * cont=&dma[0];
DMA_CHANNEL * chan=&cont->chan[port>>1];
Bit8u ret;
switch (port) {
case 0x00:case 0x02:case 0x04:case 0x06:
if (cont->flipflop) {
ret=chan->current_address & 0xff;
} else {
ret=(chan->current_address>>8)&0xff;
}
cont->flipflop=!cont->flipflop;
case 0x01:case 0x03:case 0x05:case 0x07:
if (cont->flipflop) {
ret=(chan->current_count-1) & 0xff;
} else {
ret=((chan->current_count-1)>>8)&0xff;
}
cont->flipflop=!cont->flipflop;
break;
default:
LOG_WARN("DMA:Unhandled read from %d",port);
}
return ret;
}
static void write_dma(Bit32u port,Bit8u val) {
@ -206,6 +232,7 @@ Bit16u DMA_16_Write(Bit32u dmachan,Bit8u * buffer,Bit16u count) {
void DMA_Init(Section* sec) {
for (Bit32u i=0;i<0x10;i++) {
IO_RegisterWriteHandler(i,write_dma,"DMA1");
IO_RegisterReadHandler(i,read_dma,"DMA1");
}
IO_RegisterWriteHandler(0x81,write_dma_page,"DMA Pages");
IO_RegisterWriteHandler(0x82,write_dma_page,"DMA Pages");