1 /*         ______   ___    ___
2  *        /\  _  \ /\_ \  /\_ \
3  *        \ \ \L\ \\//\ \ \//\ \      __     __   _ __   ___
4  *         \ \  __ \ \ \ \  \ \ \   /'__`\ /'_ `\/\`'__\/ __`\
5  *          \ \ \/\ \ \_\ \_ \_\ \_/\  __//\ \L\ \ \ \//\ \L\ \
6  *           \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/
7  *            \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/
8  *                                           /\____/
9  *                                           \_/__/
10  *      By Shawn Hargreaves,
11  *      1 Salisbury Road,
12  *      Market Drayton,
13  *      Shropshire,
14  *      England, TF9 1AJ.
15  *
16  *      Some definitions for internal use by the library code.
17  *      This should not be included by user programs.
18  *
19  *      See readme.txt for copyright information.
20  */
21 
22 
23 #ifndef INTERNDJ_H
24 #define INTERNDJ_H
25 
26 #ifndef DJGPP
27 #error This file should only be used by the djgpp version of Allegro
28 #endif
29 
30 
31 #include <dos.h>
32 
33 
34 /* file access macros */
35 #define FILE_OPEN(filename, handle)             handle = open(filename, O_RDONLY | O_BINARY, S_IRUSR | S_IWUSR)
36 #define FILE_CREATE(filename, handle)           handle = open(filename, O_WRONLY | O_BINARY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR)
37 #define FILE_CLOSE(handle)                      close(handle)
38 #define FILE_READ(handle, buf, size, sz)        sz = read(handle, buf, size)
39 #define FILE_WRITE(handle, buf, size, sz)       sz = write(handle, buf, size)
40 #define FILE_SEARCH_STRUCT                      struct ffblk
41 #define FILE_FINDFIRST(filename, attrib, dta)   findfirst(filename, dta, attrib)
42 #define FILE_FINDNEXT(dta)                      findnext(dta)
43 #define FILE_ATTRIB                             ff_attrib
44 #define FILE_SIZE                               ff_fsize
45 #define FILE_NAME                               ff_name
46 #define FILE_TIME                               ff_ftime
47 #define FILE_DATE                               ff_fdate
48 
49 
50 /* macros to enable and disable interrupts */
51 #define DISABLE()   asm volatile ("cli")
52 #define ENABLE()    asm volatile ("sti")
53 
54 
enter_critical()55 __INLINE__ void enter_critical()
56 {
57    if (windows_version >= 3) {
58       __dpmi_regs r;
59       r.x.ax = 0x1681;
60       __dpmi_int(0x2F, &r);
61    }
62 
63    DISABLE();
64 }
65 
66 
exit_critical()67 __INLINE__ void exit_critical()
68 {
69    if (windows_version >= 3) {
70       __dpmi_regs r;
71       r.x.ax = 0x1682;
72       __dpmi_int(0x2F, &r);
73    }
74 
75    ENABLE();
76 }
77 
78 
79 /* interrupt hander stuff */
80 int _install_irq(int num, int (*handler)());
81 void _remove_irq(int num);
82 
83 typedef struct _IRQ_HANDLER
84 {
85    int (*handler)();             /* our C handler */
86    int number;                   /* irq number */
87    __dpmi_paddr old_vector;      /* original protected mode vector */
88 } _IRQ_HANDLER;
89 
90 
91 /* DPMI memory mapping routines */
92 int _create_physical_mapping(unsigned long *linear, int *segment, unsigned long physaddr, int size);
93 void _remove_physical_mapping(unsigned long *linear, int *segment);
94 int _create_linear_mapping(unsigned long *linear, unsigned long physaddr, int size);
95 void _remove_linear_mapping(unsigned long *linear);
96 int _create_selector(int *segment, unsigned long linear, int size);
97 void _remove_selector(int *segment);
98 void _unlock_dpmi_data(void *addr, int size);
99 
100 
101 /* bank switching routines */
102 void _vesa_window_1();
103 void _vesa_window_1_end();
104 void _vesa_window_2();
105 void _vesa_window_2_end();
106 
107 void _vesa_pm_window_1();
108 void _vesa_pm_window_1_end();
109 void _vesa_pm_window_2();
110 void _vesa_pm_window_2_end();
111 
112 void _vesa_pm_es_window_1();
113 void _vesa_pm_es_window_1_end();
114 void _vesa_pm_es_window_2();
115 void _vesa_pm_es_window_2_end();
116 
117 void _vbeaf_bank();
118 void _vbeaf_bank_end();
119 
120 void _vbeaf_linear_lookup();
121 void _vbeaf_linear_lookup_end();
122 
123 void _ati_bank();
124 void _ati_bank_end();
125 
126 void _mach64_write_bank();
127 void _mach64_write_bank_end();
128 void _mach64_read_bank();
129 void _mach64_read_bank_end();
130 
131 void _cirrus64_write_bank();
132 void _cirrus64_write_bank_end();
133 void _cirrus64_read_bank();
134 void _cirrus64_read_bank_end();
135 
136 void _cirrus54_bank();
137 void _cirrus54_bank_end();
138 
139 void _paradise_write_bank();
140 void _paradise_read_bank();
141 void _paradise_write_bank_end();
142 void _paradise_read_bank_end();
143 
144 void _s3_bank();
145 void _s3_bank_end();
146 
147 void _trident_bank();
148 void _trident_bank_end();
149 void _trident_read_bank();
150 void _trident_read_bank_end();
151 void _trident_write_bank();
152 void _trident_write_bank_end();
153 
154 void _et3000_write_bank();
155 void _et3000_write_bank_end();
156 void _et3000_read_bank();
157 void _et3000_read_bank_end();
158 
159 void _et4000_write_bank();
160 void _et4000_write_bank_end();
161 void _et4000_read_bank();
162 void _et4000_read_bank_end();
163 
164 void _video7_bank();
165 void _video7_bank_end();
166 
167 
168 /* stuff for the VESA and VBE/AF drivers */
169 extern __dpmi_regs _dpmi_reg;
170 
171 extern int _window_2_offset;
172 
173 extern void (*_pm_vesa_switcher)();
174 extern void (*_pm_vesa_scroller)();
175 extern void (*_pm_vesa_pallete)();
176 
177 extern int _mmio_segment;
178 
179 extern void *_af_driver;
180 
181 extern int _af_active;
182 
183 extern void *_af_set_bank;
184 extern void *_af_wait_till_idle;
185 extern void *_af_enable_direct_access;
186 
187 
188 /* stuff for setting up bitmaps */
189 long _vesa_vidmem_check(long mem);
190 
191 
192 /* sound lib stuff */
193 extern int _fm_port;
194 extern int _mpu_port;
195 extern int _sb_freq;
196 extern int _sb_port;
197 extern int _sb_dma;
198 extern int _sb_irq;
199 
200 int _sb_read_dsp_version();
201 int _sb_set_mixer(int digi_volume, int midi_volume);
202 
203 int _dma_allocate_mem(int bytes, int *sel, unsigned long *phys);
204 void _dma_start(int channel, unsigned long addr, int size, int auto_init);
205 void _dma_stop(int channel);
206 unsigned long _dma_todo(int channel);
207 void _dma_lock_mem();
208 
209 
210 #endif          /* ifndef INTERNDJ_H */
211