From 45f519d0c226d8f3578d1e8fc4864949335736d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Strohh=C3=A4cker?= Date: Thu, 24 Nov 2005 21:11:45 +0000 Subject: [PATCH] adjust tandy DAC transfer size Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@2392 --- src/ints/bios.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/ints/bios.cpp b/src/ints/bios.cpp index 9e761c18..f6fb02ef 100644 --- a/src/ints/bios.cpp +++ b/src/ints/bios.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: bios.cpp,v 1.50 2005-11-24 18:25:20 qbix79 Exp $ */ +/* $Id: bios.cpp,v 1.51 2005-11-24 21:11:45 c2woody Exp $ */ #include "dosbox.h" #include "mem.h" @@ -133,7 +133,6 @@ static void Tandy_SetupTransfer(PhysPt bufpt,bool isplayback) { /* revector IRQ-handler if necessary */ RealPt current_irq=RealGetVec(tandy_sb.irq+8); if (current_irq!=tandy_DAC_callback->Get_RealPointer()) { - real_writed(0x40,0xd6,current_irq); real_writed(0x40,0xd6,current_irq); RealSetVec(tandy_sb.irq+8,tandy_DAC_callback->Get_RealPointer()); } @@ -155,18 +154,19 @@ static void Tandy_SetupTransfer(PhysPt bufpt,bool isplayback) { case 3: IO_Write(0x82,bufpage); break; } real_writeb(0x40,0xd4,bufpage); + /* calculate transfer size (respects segment boundaries) */ Bit32u tlength=length; if (tlength+(bufpt&0xffff)>0x10000) tlength=0x10000-(bufpt&0xffff); + real_writew(0x40,0xd0,(Bit16u)(length-tlength)); /* remaining buffer length */ + tlength--; + /* set transfer size */ IO_Write(tandy_sb.dma*2+1,(Bit8u)(tlength&0xff)); IO_Write(tandy_sb.dma*2+1,(Bit8u)((tlength>>8)&0xff)); IO_Write(0x0a,tandy_sb.dma); /* enable DMA channel */ - real_writew(0x40,0xd0,(Bit16u)(length-tlength)); /* remaining buffer length */ - Bitu delay=real_readw(0x40,0xd2)&0xfff; - /* set frequency */ IO_Write(tandy_sb.port+0xc,0x40); IO_Write(tandy_sb.port+0xc,256-delay*100/358);