#define DATA_LEN_2 (27345) #define DATA_LEN_3 (17345) #define DATA_LEN_4 (18945) #define DATA_LEN_5 (37233) #define DATA_LEN_6 (18385) extern char far data_2[DATA_LEN_2]; extern char far data_3[DATA_LEN_3]; extern char far data_4[DATA_LEN_4]; extern char far data_5[DATA_LEN_5]; extern char far data_6[DATA_LEN_6]; char far *patterns[7] = { NULL, NULL, data_2, data_3, data_4, data_5, data_6 }; unsigned lengths[7] = { 0, 0, DATA_LEN_2-1, DATA_LEN_3-1, DATA_LEN_4-1, DATA_LEN_5-1, DATA_LEN_6-1 }; int accum = 0x80; char cc, skip; int i, dev, cb; int timer_pos; char far *MemoryPointer; int out_port; void interrupt (*old_isr)(); void set_clock(); void restore_clock(); #include "newisr.c" void start(int device, int baseport) { long temptick; accum = 0x80; skip = 0; i = 0; dev = device; if (device == 1) out_port = baseport; else if (device == 2) { asm { mov al, 90h out 43h, al in al, 61h or al, 3 out 61h, al } out_port = 0x42; } else if (device == 0) out_port = baseport + 0xC; else { asm mov ax, 3 asm int 10h outstring("\n\r\n\rInvalid Device\r\n$"); exit(1); } MemoryPointer = patterns[playlist[0]]; cur_len = lengths[playlist[0]]; set_clock(); } void detect_sb(int baseport) { asm { mov dx, baseport add dx, 6 mov al, 1 out dx, al sub cx, cx } delay_loop1: asm { dec cx jnz delay_loop1 mov dx, baseport add dx, 6 sub al, al out dx, al sub cx, cx } delay_loop2: asm { dec cx jnz delay_loop2 add dx, 8 in al, dx test al, 80h jz error_sb sub dx, 4 in al, dx cmp al, 0aah jne error_sb jmp noerror_sb } error_sb: outstring("\n\r\n\rSoundBlaster NOT detected.\n\r$"); exit(1); noerror_sb: } void stop() { restore_clock(); if (dev == 0) asm { mov dx, out_port sub dx, 6 mov al, 0d3h out dx, al } else if (dev == 2) asm { mov al, 0b6h out 43h, al in al, 61h and al, 0FCh out 61h, al } }