X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=dos_sbtest;a=blobdiff_plain;f=src%2Fau_sb.c;h=2046f915d515403865417373ac5642d88d390469;hp=8ff4ea1d430ae8b257b3461e36a1d181a865b091;hb=d08178b30de9363c1fda1de3499f541faf520924;hpb=85710b37e4082a5b8e6d35c16311cb024298e24f diff --git a/src/au_sb.c b/src/au_sb.c index 8ff4ea1..2046f91 100644 --- a/src/au_sb.c +++ b/src/au_sb.c @@ -3,6 +3,7 @@ #include #include #include +#include #include "audio.h" #include "au_sb.h" #include "dma.h" @@ -175,14 +176,19 @@ void sb_start(int rate, int nchan) _go32_dpmi_seginfo intr; if(!buffer) { + __djgpp_nearptr_enable(); + /* allocate a 64k-aligned 64k buffer in low memory */ if((seg = __dpmi_allocate_dos_memory(65536 * 2 / 16, &pmsel)) <= 0) { fprintf(stderr, "sb_start: failed to allocate DMA buffer\n"); return; } + printf("allocated seg: %d, addr: %lx\n", seg, (unsigned long)seg << 4); + addr = ((uint32_t)(seg << 4) + 0xffff) & 0xffff0000; - buffer = (void*)addr; + printf("aligned: %lx\n", (unsigned long)addr); + buffer = (void*)(addr - __djgpp_base_address); } else { addr = (uint32_t)buffer; }