added an old version of mikmod for dos
[dosdemo] / libs / oldmik / src / resample.asm
diff --git a/libs/oldmik/src/resample.asm b/libs/oldmik/src/resample.asm
new file mode 100644 (file)
index 0000000..afb2540
--- /dev/null
@@ -0,0 +1,132 @@
+.386p\r
+\r
+       NAME    resample\r
+        EXTRN   _rvolsel :WORD\r
+        EXTRN   _lvolsel :WORD\r
+\r
+       .model small,c\r
+\r
+DGROUP  GROUP   _DATA\r
+\r
+_TEXT   SEGMENT DWORD PUBLIC USE32 'CODE'\r
+        ASSUME  CS:_TEXT ,DS:DGROUP,SS:DGROUP\r
+\r
+        PUBLIC  AsmStereoNormal_\r
+        PUBLIC  AsmMonoNormal_\r
+        \r
+SS2     MACRO index\r
+        even\r
+        mov   edx,ebx\r
+        sar   edx,0bh\r
+        mov   al,[esi+edx]\r
+        add   ebx,ecx\r
+        mov   edx,es:[eax*4]\r
+        add   (index*8)[edi],edx\r
+        mov   edx,fs:[eax*4]\r
+        add   (4+(index*8))[edi],edx\r
+        ENDM\r
+\r
+SM2     MACRO index\r
+        even\r
+        mov   edx,ebx\r
+        add   ebx,ecx\r
+        sar   edx,0bh\r
+        mov   al,[esi+edx]\r
+        mov   edx,es:[eax*4]\r
+        add   (index*4)[edi],edx\r
+        ENDM\r
+\r
+\r
+AsmStereoNormal_ proc USES ebp fs es\r
+        mov    ax,_lvolsel\r
+        mov    es,ax                       ; voltab selector naar fs\r
+        mov    ax,_rvolsel\r
+        mov    fs,ax\r
+        xor    eax,eax\r
+        push   edx\r
+        shr    edx,4\r
+        jz     sskip16\r
+        mov    ebp,edx\r
+sagain16:\r
+        SS2    0\r
+        SS2    1\r
+        SS2    2\r
+        SS2    3\r
+        SS2    4\r
+        SS2    5\r
+        SS2    6\r
+        SS2    7\r
+        SS2    8\r
+        SS2    9\r
+        SS2    10\r
+        SS2    11\r
+        SS2    12\r
+        SS2    13\r
+        SS2    14\r
+        SS2    15\r
+        add    edi,(16*8)\r
+        dec    ebp\r
+        jnz    sagain16\r
+sskip16:\r
+        pop    edx\r
+        and    edx,15\r
+        jz     sskip1\r
+        mov    ebp,edx\r
+sagain1:\r
+        SS2    0\r
+        add    edi,8\r
+        dec    ebp\r
+        jnz    sagain1\r
+sskip1:\r
+       ret\r
+AsmStereoNormal_ endp\r
+\r
+\r
+AsmMonoNormal_ proc USES ebp es\r
+        mov    ax,_lvolsel\r
+        mov    es,ax                       ; voltab selector naar fs\r
+        xor    eax,eax\r
+        push   edx\r
+        shr    edx,4\r
+        jz     mskip16\r
+        mov    ebp,edx\r
+magain16:\r
+        SM2    0\r
+        SM2    1\r
+        SM2    2\r
+        SM2    3\r
+        SM2    4\r
+        SM2    5\r
+        SM2    6\r
+        SM2    7\r
+        SM2    8\r
+        SM2    9\r
+        SM2    10\r
+        SM2    11\r
+        SM2    12\r
+        SM2    13\r
+        SM2    14\r
+        SM2    15\r
+        add    edi,(16*4)\r
+        dec    ebp\r
+        jnz    magain16\r
+mskip16:\r
+        pop    edx\r
+        and    edx,15\r
+        jz     mskip1\r
+        mov    ebp,edx\r
+magain1:\r
+        SM2    0\r
+        add    edi,4\r
+        dec    ebp\r
+        jnz    magain1\r
+mskip1:\r
+       ret\r
+AsmMonoNormal_ endp\r
+\r
+_TEXT   ENDS\r
+\r
+_DATA   SEGMENT DWORD PUBLIC USE32 'DATA'\r
+_DATA   ENDS\r
+\r
+        END\r