fixed build, untested
authorJohn Tsiombikas <nuclear@member.fsf.org>
Thu, 8 Nov 2018 08:23:10 +0000 (10:23 +0200)
committerJohn Tsiombikas <nuclear@member.fsf.org>
Thu, 8 Nov 2018 08:23:10 +0000 (10:23 +0200)
Makefile
src/au_sb.c
src/ausamples.s [new file with mode: 0644]
src/dma.c
src/main.c

index cb6a3d6..1015733 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -17,6 +17,7 @@ opt = -O3 -ffast-math -fno-strict-aliasing
 dbg = -g
 warn = -pedantic -Wall -Wno-unused-function -Wno-unused-variable
 
+AS = $(TOOLPREFIX)as
 CC = $(TOOLPREFIX)gcc
 AR = $(TOOLPREFIX)ar
 CFLAGS = $(warn) -march=pentium $(dbg) $(opt) $(inc)
index ab12b9e..8ff4ea1 100644 (file)
@@ -169,18 +169,23 @@ void *sb_buffer(int *size)
 
 void sb_start(int rate, int nchan)
 {
+       int seg, pmsel;
        uint32_t addr;
        int size;
        _go32_dpmi_seginfo intr;
 
-       /* for now just use the are after boot2. it's only used by the second stage
-        * loader and the VBE init code, none of which should overlap with audio playback.
-        * It's not necessary to use low memory. We can use up to the first 16mb for this,
-        * so if this becomes an issue, I'll make a DMA buffer allocator over 1mb.
-        * start the buffer from the next 64k boundary.
-        */
-       addr = ((uint32_t)low_mem_buffer + 0xffff) & 0xffff0000;
-       buffer = (void*)addr;
+       if(!buffer) {
+               /* 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;
+               }
+
+               addr = ((uint32_t)(seg << 4) + 0xffff) & 0xffff0000;
+               buffer = (void*)addr;
+       } else {
+               addr = (uint32_t)buffer;
+       }
 
        xfer_mode = CMD_MODE_SIGNED;
        if(nchan > 1) {
diff --git a/src/ausamples.s b/src/ausamples.s
new file mode 100644 (file)
index 0000000..e74c9e7
--- /dev/null
@@ -0,0 +1,6 @@
+       .data
+       .global _snd_click
+       .global _snd_click_size
+_snd_click:
+       .incbin "click-s8_mono.pcm"
+_snd_click_size: .long . - _snd_click
index 9c6ad67..e483002 100644 (file)
--- a/src/dma.c
+++ b/src/dma.c
@@ -1,3 +1,4 @@
+#include <pc.h>
 #include "dma.h"
 
 /* 8bit DMA ports */
index 44f41b8..fd87b7a 100644 (file)
@@ -4,7 +4,7 @@
 
 static int au_callback(void *buffer, int size, void *cls);
 
-/* defined in sndsamples.s */
+/* defined in ausamples.s */
 extern signed char snd_click[];
 extern int snd_click_size;