]> 4ch.mooo.com Git - 16.git/blob - src/lib/doslib/hw/dos/tgusumid.c
added a bunch of things~ and midi stuff~
[16.git] / src / lib / doslib / hw / dos / tgusumid.c
1
2 #ifdef TARGET_WINDOWS
3 # include <windows.h>
4 #endif
5
6 #include <stdio.h>
7 #include <conio.h> /* this is where Open Watcom hides the outp() etc. functions */
8 #include <stdlib.h>
9 #include <string.h>
10 #include <stddef.h>
11 #include <unistd.h>
12 #include <malloc.h>
13 #include <assert.h>
14 #include <fcntl.h>
15 #include <dos.h>
16
17 #include <hw/cpu/cpu.h>
18 #include <hw/dos/dos.h>
19 #include <hw/dos/tgusumid.h>
20
21 #if !defined(TARGET_WINDOWS) && !defined(TARGET_OS2)
22 /* returns interrupt vector */
23 int gravis_ultramid_detect() {
24     unsigned char FAR *ex;
25     uint16_t s,o;
26     int i = 0x78;
27
28     while (i < 0x90) {
29 #if TARGET_MSDOS == 32
30         o = *((uint16_t*)(i*4U));
31         s = *((uint16_t*)((i*4U)+2U));
32 #else
33         o = *((uint16_t far*)MK_FP(0,(uint16_t)i*4U));
34         s = *((uint16_t far*)MK_FP(0,((uint16_t)i*4U)+2U));
35 #endif
36
37         if (o == 0xFFFF || s == 0x0000 || s == 0xFFFF) {
38             i++;
39             continue;
40         }
41
42         /* we're looking for "ULTRAMID" signature */
43 #if TARGET_MSDOS == 32
44         ex = (unsigned char*)((s << 4UL) + 0x103);
45         if (memcmp(ex,"ULTRAMID",8) == 0) return i;
46 #else
47         ex = MK_FP(s,0x103);
48         if (_fmemcmp(ex,"ULTRAMID",8) == 0) return i;
49 #endif
50
51         i++;
52     }
53
54     return -1;
55 }
56 #endif /* !defined(TARGET_WINDOWS) */
57