Subversion Repositories Kolibri OS

Rev

Rev 10002 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 10002 Rev 10008
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
2
;;                                                              ;;
3
;; Copyright (C) KolibriOS team 2004-2024. All rights reserved. ;;
3
;; Copyright (C) KolibriOS team 2004-2024. All rights reserved. ;;
4
;; Distributed under terms of the GNU General Public License    ;;
4
;; Distributed under terms of the GNU General Public License    ;;
5
;;                                                              ;;
5
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7
 
7
 
8
$Revision: 10002 $
8
$Revision: 10008 $
9
 
9
 
10
 
10
 
11
dpl0    =  10010000b      ; data read       dpl0
11
dpl0    =  10010000b      ; data read       dpl0
12
drw0    =  10010010b      ; data read/write dpl0
12
drw0    =  10010010b      ; data read/write dpl0
13
drw3    =  11110010b      ; data read/write dpl3
13
drw3    =  11110010b      ; data read/write dpl3
14
cpl0    =  10011010b      ; code read dpl0
14
cpl0    =  10011010b      ; code read dpl0
15
cpl3    =  11111010b      ; code read dpl3
15
cpl3    =  11111010b      ; code read dpl3
16
 
16
 
17
D32     =  01000000b      ; 32bit segment
17
D32     =  01000000b      ; 32bit segment
18
G32     =  10000000b      ; page gran
18
G32     =  10000000b      ; page gran
19
 
19
 
20
;;;;;;;;;;; task manager errors ;;;;;;;;;;
20
;;;;;;;;;;; task manager errors ;;;;;;;;;;
21
 
21
 
22
TASKMAN_ERROR_OUT_OF_MEMORY      = 30 ; 0x1E
22
TASKMAN_ERROR_OUT_OF_MEMORY      = 30 ; 0x1E
23
TASKMAN_ERROR_NOT_A_EXECUTABLE   = 31 ; 0x1F
23
TASKMAN_ERROR_NOT_A_EXECUTABLE   = 31 ; 0x1F
24
TASKMAN_ERROR_TOO_MANY_PROCESSES = 32 ; 0x20
24
TASKMAN_ERROR_TOO_MANY_PROCESSES = 32 ; 0x20
25
 
25
 
26
;;;;;;;;;;;;cpu_caps flags;;;;;;;;;;;;;;;;
26
;;;;;;;;;;;;cpu_caps flags;;;;;;;;;;;;;;;;
27
 
27
 
28
CPU_386        = 3
28
CPU_386        = 3
29
CPU_486        = 4
29
CPU_486        = 4
30
CPU_PENTIUM    = 5
30
CPU_PENTIUM    = 5
31
CPU_P6         = 6
31
CPU_P6         = 6
32
CPU_PENTIUM4   = 0x0F
32
CPU_PENTIUM4   = 0x0F
33
 
33
 
34
CAPS_FPU       =    00 ;on-chip x87 floating point unit
34
CAPS_FPU       =    00 ;on-chip x87 floating point unit
35
CAPS_VME       =    01 ;virtual-mode enhancements
35
CAPS_VME       =    01 ;virtual-mode enhancements
36
CAPS_DE        =    02 ;debugging extensions
36
CAPS_DE        =    02 ;debugging extensions
37
CAPS_PSE       =    03 ;page-size extensions
37
CAPS_PSE       =    03 ;page-size extensions
38
CAPS_TSC       =    04 ;time stamp counter
38
CAPS_TSC       =    04 ;time stamp counter
39
CAPS_MSR       =    05 ;model-specific registers
39
CAPS_MSR       =    05 ;model-specific registers
40
CAPS_PAE       =    06 ;physical-address extensions
40
CAPS_PAE       =    06 ;physical-address extensions
41
CAPS_MCE       =    07 ;machine check exception
41
CAPS_MCE       =    07 ;machine check exception
42
CAPS_CX8       =    08 ;CMPXCHG8B instruction
42
CAPS_CX8       =    08 ;CMPXCHG8B instruction
43
CAPS_APIC      =    09 ;on-chip advanced programmable
43
CAPS_APIC      =    09 ;on-chip advanced programmable
44
                       ;interrupt controller
44
                       ;interrupt controller
45
;                   10 ;unused
45
;                   10 ;unused
46
CAPS_SEP       =    11 ;SYSENTER and SYSEXIT instructions
46
CAPS_SEP       =    11 ;SYSENTER and SYSEXIT instructions
47
CAPS_MTRR      =    12 ;memory-type range registers
47
CAPS_MTRR      =    12 ;memory-type range registers
48
CAPS_PGE       =    13 ;page global extension
48
CAPS_PGE       =    13 ;page global extension
49
CAPS_MCA       =    14 ;machine check architecture
49
CAPS_MCA       =    14 ;machine check architecture
50
CAPS_CMOV      =    15 ;conditional move instructions
50
CAPS_CMOV      =    15 ;conditional move instructions
51
CAPS_PAT       =    16 ;page attribute table
51
CAPS_PAT       =    16 ;page attribute table
52
 
52
 
53
CAPS_PSE36     =    17 ;page-size extensions
53
CAPS_PSE36     =    17 ;page-size extensions
54
CAPS_PSN       =    18 ;processor serial number
54
CAPS_PSN       =    18 ;processor serial number
55
CAPS_CLFLUSH   =    19 ;CLFUSH instruction
55
CAPS_CLFLUSH   =    19 ;CLFUSH instruction
56
 
56
 
57
CAPS_DS        =    21 ;debug store
57
CAPS_DS        =    21 ;debug store
58
CAPS_ACPI      =    22 ;thermal monitor and software
58
CAPS_ACPI      =    22 ;thermal monitor and software
59
                       ;controlled clock supported
59
                       ;controlled clock supported
60
CAPS_MMX       =    23 ;MMX instructions
60
CAPS_MMX       =    23 ;MMX instructions
61
CAPS_FXSR      =    24 ;FXSAVE and FXRSTOR instructions
61
CAPS_FXSR      =    24 ;FXSAVE and FXRSTOR instructions
62
CAPS_SSE       =    25 ;SSE instructions
62
CAPS_SSE       =    25 ;SSE instructions
63
CAPS_SSE2      =    26 ;SSE2 instructions
63
CAPS_SSE2      =    26 ;SSE2 instructions
64
CAPS_SS        =    27 ;self-snoop
64
CAPS_SS        =    27 ;self-snoop
65
CAPS_HTT       =    28 ;hyper-threading technology
65
CAPS_HTT       =    28 ;hyper-threading technology
66
CAPS_TM        =    29 ;thermal monitor supported
66
CAPS_TM        =    29 ;thermal monitor supported
67
CAPS_IA64      =    30 ;IA64 capabilities
67
CAPS_IA64      =    30 ;IA64 capabilities
68
CAPS_PBE       =    31 ;pending break enable
68
CAPS_PBE       =    31 ;pending break enable
69
 
69
 
70
;ecx
70
;ecx
71
CAPS_SSE3      =    32 ;SSE3 instructions
71
CAPS_SSE3      =    32 ;SSE3 instructions
72
;                   33
72
;                   33
73
;                   34
73
;                   34
74
CAPS_MONITOR   =    35 ;MONITOR/MWAIT instructions
74
CAPS_MONITOR   =    35 ;MONITOR/MWAIT instructions
75
CAPS_DS_CPL    =    36 ;
75
CAPS_DS_CPL    =    36 ;
76
CAPS_VMX       =    37 ;virtual mode extensions
76
CAPS_VMX       =    37 ;virtual mode extensions
77
;                   38 ;
77
;                   38 ;
78
CAPS_EST       =    39 ;enhansed speed step
78
CAPS_EST       =    39 ;enhansed speed step
79
CAPS_TM2       =    40 ;thermal monitor2 supported
79
CAPS_TM2       =    40 ;thermal monitor2 supported
80
;                   41
80
;                   41
81
CAPS_CID       =    42 ;
81
CAPS_CID       =    42 ;
82
;                   43
82
;                   43
83
;                   44
83
;                   44
84
CAPS_CX16      =    45 ;CMPXCHG16B instruction
84
CAPS_CX16      =    45 ;CMPXCHG16B instruction
85
CAPS_xTPR      =    46 ;
85
CAPS_xTPR      =    46 ;
86
CAPS_XSAVE     =    32 + 26 ; XSAVE and XRSTOR instructions
86
CAPS_XSAVE     =    32 + 26 ; XSAVE and XRSTOR instructions
87
CAPS_OSXSAVE   =    32 + 27
87
CAPS_OSXSAVE   =    32 + 27
88
; A value of 1 indicates that the OS has set CR4.OSXSAVE[bit 18] to enable
88
; A value of 1 indicates that the OS has set CR4.OSXSAVE[bit 18] to enable
89
; XSETBV/XGETBV instructions to access XCR0 and to support processor extended
89
; XSETBV/XGETBV instructions to access XCR0 and to support processor extended
90
; state management using XSAVE/XRSTOR.
90
; state management using XSAVE/XRSTOR.
91
CAPS_AVX       =    32 + 28 ; not AVX2
91
CAPS_AVX       =    32 + 28 ; not AVX2
92
;
92
;
93
;reserved
93
;reserved
94
;
94
;
95
;ext edx /ecx
95
;ext edx /ecx
96
CAPS_SYSCAL    =    64 ;
96
CAPS_SYSCAL    =    64 ;
97
CAPS_XD        =    65 ;execution disable
97
CAPS_XD        =    65 ;execution disable
98
CAPS_FFXSR     =    66 ;
98
CAPS_FFXSR     =    66 ;
99
CAPS_RDTSCP    =    67 ;
99
CAPS_RDTSCP    =    67 ;
100
CAPS_X64       =    68 ;
100
CAPS_X64       =    68 ;
101
CAPS_3DNOW     =    69 ;
101
CAPS_3DNOW     =    69 ;
102
CAPS_3DNOWEXT  =    70 ;
102
CAPS_3DNOWEXT  =    70 ;
103
CAPS_LAHF      =    71 ;
103
CAPS_LAHF      =    71 ;
104
CAPS_CMP_LEG   =    72 ;
104
CAPS_CMP_LEG   =    72 ;
105
CAPS_SVM       =    73 ;secure virual machine
105
CAPS_SVM       =    73 ;secure virual machine
106
CAPS_ALTMOVCR8 =    74 ;
106
CAPS_ALTMOVCR8 =    74 ;
107
 
107
 
108
; CPU MSR names
108
; CPU MSR names
109
MSR_SYSENTER_CS         =     0x174
109
MSR_SYSENTER_CS         =     0x174
110
MSR_SYSENTER_ESP        =     0x175
110
MSR_SYSENTER_ESP        =     0x175
111
MSR_SYSENTER_EIP        =     0x176
111
MSR_SYSENTER_EIP        =     0x176
112
MSR_CR_PAT              =     0x277
112
MSR_CR_PAT              =     0x277
113
MSR_MTRR_DEF_TYPE       =     0x2FF
113
MSR_MTRR_DEF_TYPE       =     0x2FF
114
 
114
 
115
MSR_AMD_EFER            =     0xC0000080      ; Extended Feature Enable Register
115
MSR_AMD_EFER            =     0xC0000080      ; Extended Feature Enable Register
116
MSR_AMD_STAR            =     0xC0000081      ; SYSCALL/SYSRET Target Address Register
116
MSR_AMD_STAR            =     0xC0000081      ; SYSCALL/SYSRET Target Address Register
117
 
117
 
118
CR0_PE         =    0x00000001   ;protected mode
118
CR0_PE         =    0x00000001   ;protected mode
119
CR0_MP         =    0x00000002   ;monitor fpu
119
CR0_MP         =    0x00000002   ;monitor fpu
120
CR0_EM         =    0x00000004   ;fpu emulation
120
CR0_EM         =    0x00000004   ;fpu emulation
121
CR0_TS         =    0x00000008   ;task switch
121
CR0_TS         =    0x00000008   ;task switch
122
CR0_ET         =    0x00000010   ;extension type hardcoded to 1
122
CR0_ET         =    0x00000010   ;extension type hardcoded to 1
123
CR0_NE         =    0x00000020   ;numeric error
123
CR0_NE         =    0x00000020   ;numeric error
124
CR0_WP         =    0x00010000   ;write protect
124
CR0_WP         =    0x00010000   ;write protect
125
CR0_AM         =    0x00040000   ;alignment check
125
CR0_AM         =    0x00040000   ;alignment check
126
CR0_NW         =    0x20000000   ;not write-through
126
CR0_NW         =    0x20000000   ;not write-through
127
CR0_CD         =    0x40000000   ;cache disable
127
CR0_CD         =    0x40000000   ;cache disable
128
CR0_PG         =    0x80000000   ;paging
128
CR0_PG         =    0x80000000   ;paging
129
 
129
 
130
 
130
 
131
CR4_VME        =    0x000001
131
CR4_VME        =    0x000001
132
CR4_PVI        =    0x000002
132
CR4_PVI        =    0x000002
133
CR4_TSD        =    0x000004
133
CR4_TSD        =    0x000004
134
CR4_DE         =    0x000008
134
CR4_DE         =    0x000008
135
CR4_PSE        =    0x000010
135
CR4_PSE        =    0x000010
136
CR4_PAE        =    0x000020
136
CR4_PAE        =    0x000020
137
CR4_MCE        =    0x000040
137
CR4_MCE        =    0x000040
138
CR4_PGE        =    0x000080
138
CR4_PGE        =    0x000080
139
CR4_PCE        =    0x000100
139
CR4_PCE        =    0x000100
140
CR4_OSFXSR     =    0x000200
140
CR4_OSFXSR     =    0x000200
141
CR4_OSXMMEXPT  =    0x000400
141
CR4_OSXMMEXPT  =    0x000400
142
CR4_OSXSAVE    =    0x040000
142
CR4_OSXSAVE    =    0x040000
143
 
143
 
144
XCR0_FPU_MMX   =    0x0001
144
XCR0_FPU_MMX   =    0x0001
145
XCR0_SSE       =    0x0002
145
XCR0_SSE       =    0x0002
146
XCR0_AVX       =    0x0004
146
XCR0_AVX       =    0x0004
147
XCR0_MPX       =    0x0018
147
XCR0_MPX       =    0x0018
148
XCR0_AVX512    =    0x00e0
148
XCR0_AVX512    =    0x00e0
149
 
149
 
150
MXCSR_IE       =    0x0001
150
MXCSR_IE       =    0x0001
151
MXCSR_DE       =    0x0002
151
MXCSR_DE       =    0x0002
152
MXCSR_ZE       =    0x0004
152
MXCSR_ZE       =    0x0004
153
MXCSR_OE       =    0x0008
153
MXCSR_OE       =    0x0008
154
MXCSR_UE       =    0x0010
154
MXCSR_UE       =    0x0010
155
MXCSR_PE       =    0x0020
155
MXCSR_PE       =    0x0020
156
MXCSR_DAZ      =    0x0040
156
MXCSR_DAZ      =    0x0040
157
MXCSR_IM       =    0x0080
157
MXCSR_IM       =    0x0080
158
MXCSR_DM       =    0x0100
158
MXCSR_DM       =    0x0100
159
MXCSR_ZM       =    0x0200
159
MXCSR_ZM       =    0x0200
160
MXCSR_OM       =    0x0400
160
MXCSR_OM       =    0x0400
161
MXCSR_UM       =    0x0800
161
MXCSR_UM       =    0x0800
162
MXCSR_PM       =    0x1000
162
MXCSR_PM       =    0x1000
163
MXCSR_FZ       =    0x8000
163
MXCSR_FZ       =    0x8000
164
 
164
 
165
MXCSR_INIT     = MXCSR_IM + MXCSR_DM + MXCSR_ZM + MXCSR_OM + MXCSR_UM + MXCSR_PM
165
MXCSR_INIT     = MXCSR_IM + MXCSR_DM + MXCSR_ZM + MXCSR_OM + MXCSR_UM + MXCSR_PM
166
 
166
 
167
EFLAGS_CF      =    0x000001  ; carry flag
167
EFLAGS_CF      =    0x000001  ; carry flag
168
EFLAGS_PF      =    0x000004  ; parity flag
168
EFLAGS_PF      =    0x000004  ; parity flag
169
EFLAGS_AF      =    0x000010  ; auxiliary flag
169
EFLAGS_AF      =    0x000010  ; auxiliary flag
170
EFLAGS_ZF      =    0x000040  ; zero flag
170
EFLAGS_ZF      =    0x000040  ; zero flag
171
EFLAGS_SF      =    0x000080  ; sign flag
171
EFLAGS_SF      =    0x000080  ; sign flag
172
EFLAGS_TF      =    0x000100  ; trap flag
172
EFLAGS_TF      =    0x000100  ; trap flag
173
EFLAGS_IF      =    0x000200  ; interrupt flag
173
EFLAGS_IF      =    0x000200  ; interrupt flag
174
EFLAGS_DF      =    0x000400  ; direction flag
174
EFLAGS_DF      =    0x000400  ; direction flag
175
EFLAGS_OF      =    0x000800  ; overflow flag
175
EFLAGS_OF      =    0x000800  ; overflow flag
176
EFLAGS_IOPL    =    0x003000  ; i/o priviledge level
176
EFLAGS_IOPL    =    0x003000  ; i/o priviledge level
177
EFLAGS_NT      =    0x004000  ; nested task flag
177
EFLAGS_NT      =    0x004000  ; nested task flag
178
EFLAGS_RF      =    0x010000  ; resume flag
178
EFLAGS_RF      =    0x010000  ; resume flag
179
EFLAGS_VM      =    0x020000  ; virtual 8086 mode flag
179
EFLAGS_VM      =    0x020000  ; virtual 8086 mode flag
180
EFLAGS_AC      =    0x040000  ; alignment check flag
180
EFLAGS_AC      =    0x040000  ; alignment check flag
181
EFLAGS_VIF     =    0x080000  ; virtual interrupt flag
181
EFLAGS_VIF     =    0x080000  ; virtual interrupt flag
182
EFLAGS_VIP     =    0x100000  ; virtual interrupt pending
182
EFLAGS_VIP     =    0x100000  ; virtual interrupt pending
183
EFLAGS_ID      =    0x200000  ; id flag
183
EFLAGS_ID      =    0x200000  ; id flag
184
 
184
 
185
IRQ_PIC        =    0
185
IRQ_PIC        =    0
186
IRQ_APIC       =    1
186
IRQ_APIC       =    1
187
 
187
 
188
struct  TSS
188
struct  TSS
189
        _back       rw 2
189
        _back       rw 2
190
        _esp0       rd 1
190
        _esp0       rd 1
191
        _ss0        rw 2
191
        _ss0        rw 2
192
        _esp1       rd 1
192
        _esp1       rd 1
193
        _ss1        rw 2
193
        _ss1        rw 2
194
        _esp2       rd 1
194
        _esp2       rd 1
195
        _ss2        rw 2
195
        _ss2        rw 2
196
        _cr3        rd 1
196
        _cr3        rd 1
197
        _eip        rd 1
197
        _eip        rd 1
198
        _eflags     rd 1
198
        _eflags     rd 1
199
        _eax        rd 1
199
        _eax        rd 1
200
        _ecx        rd 1
200
        _ecx        rd 1
201
        _edx        rd 1
201
        _edx        rd 1
202
        _ebx        rd 1
202
        _ebx        rd 1
203
        _esp        rd 1
203
        _esp        rd 1
204
        _ebp        rd 1
204
        _ebp        rd 1
205
        _esi        rd 1
205
        _esi        rd 1
206
        _edi        rd 1
206
        _edi        rd 1
207
        _es         rw 2
207
        _es         rw 2
208
        _cs         rw 2
208
        _cs         rw 2
209
        _ss         rw 2
209
        _ss         rw 2
210
        _ds         rw 2
210
        _ds         rw 2
211
        _fs         rw 2
211
        _fs         rw 2
212
        _gs         rw 2
212
        _gs         rw 2
213
        _ldt        rw 2
213
        _ldt        rw 2
214
        _trap       rw 1
214
        _trap       rw 1
215
        _io         rw 1
215
        _io         rw 1
216
                    rb 24
216
                    rb 24
217
        _io_map_0   rb 4096
217
        _io_map_0   rb 4096
218
        _io_map_1   rb 4096
218
        _io_map_1   rb 4096
219
ends
219
ends
220
 
220
 
221
struct kernel_header
221
struct kernel_header
222
        jump       rb 3  ; jmp start_of_code
222
        jump       rb 3  ; jmp start_of_code
223
        signature  rb 10 ; 'KolibriOS '
223
        signature  rb 10 ; 'KolibriOS '
224
        version    rb 19 ; ASCII string
224
        version    rb 19 ; ASCII string
225
        b32_offset dd ?  ; offset of the 32-bit entry point in kernel binary
225
        b32_offset dd ?  ; offset of the 32-bit entry point in kernel binary
226
 
226
 
227
; uefi4kos adds the kernel's load address to the offset above and jumps directly
227
; uefi4kos adds the kernel's load address to the offset above and jumps directly
228
; to 32-bit entry point, skipping the real mode code part. This way the same
228
; to 32-bit entry point, skipping the real mode code part. This way the same
229
; KERNEL.MNT file can be booted on BIOS as well as on UEFI.
229
; KERNEL.MNT file can be booted on BIOS as well as on UEFI.
230
ends
230
ends
231
 
231
 
232
DRIVE_DATA_SIZE     = 16
232
DRIVE_DATA_SIZE     = 16
233
 
233
 
234
OS_BASE             = 0x80000000
234
OS_BASE             = 0x80000000
235
 
235
 
236
window_data         = OS_BASE + 0x0001000
236
window_data         = OS_BASE + 0x0001000
237
background_window   = window_data + sizeof.WDATA
237
background_window   = window_data + sizeof.WDATA
238
 
238
 
239
BOOT_VARS           = 0x9000
239
BOOT_VARS           = 0x9000
240
KERNEL_BASE         = 0x10000
240
KERNEL_BASE         = 0x10000
241
RAMDISK_BASE        = 0x100000
241
RAMDISK_BASE        = 0x100000
242
 
242
 
243
idts                = OS_BASE + 0x000B100
243
idts                = OS_BASE + 0x000B100
244
WIN_STACK           = OS_BASE + 0x000C000
244
WIN_STACK           = OS_BASE + 0x000C000
245
WIN_POS             = OS_BASE + 0x000C400
245
WIN_POS             = OS_BASE + 0x000C400
246
FDD_BUFF            = OS_BASE + 0x000D000     ;512
246
FDD_BUFF            = OS_BASE + 0x000D000     ;512
247
 
247
 
248
WIN_TEMP_XY         = OS_BASE + 0x000F300
248
WIN_TEMP_XY         = OS_BASE + 0x000F300
249
KEY_COUNT           = OS_BASE + 0x000F400
249
KEY_COUNT           = OS_BASE + 0x000F400
250
KEY_BUFF            = OS_BASE + 0x000F401 ; 120*2 + 2*2 = 244 bytes, actually 255 bytes
250
KEY_BUFF            = OS_BASE + 0x000F401 ; 120*2 + 2*2 = 244 bytes, actually 255 bytes
251
 
251
 
252
BTN_COUNT           = OS_BASE + 0x000F500
252
BTN_COUNT           = OS_BASE + 0x000F500
253
BTN_BUFF            = OS_BASE + 0x000F501
253
BTN_BUFF            = OS_BASE + 0x000F501
254
 
254
 
255
 
255
 
256
BTN_ADDR            = OS_BASE + 0x000FE88
256
BTN_ADDR            = OS_BASE + 0x000FE88
257
MEM_AMOUNT          = OS_BASE + 0x000FE8C
257
MEM_AMOUNT          = OS_BASE + 0x000FE8C
258
 
258
 
259
SYS_SHUTDOWN        = OS_BASE + 0x000FF00
259
SYS_SHUTDOWN        = OS_BASE + 0x000FF00
260
 
260
 
261
 
261
 
262
TMP_STACK_TOP       = 0x008CC00
262
TMP_STACK_TOP       = 0x008CC00
263
 
263
 
264
sys_proc            = OS_BASE + 0x008E000
264
sys_proc            = OS_BASE + 0x008E000
265
 
265
 
266
SLOT_BASE           = OS_BASE + 0x0090000
266
SLOT_BASE           = OS_BASE + 0x0090000
267
 
267
 
268
VGABasePtr          = OS_BASE + 0x00A0000
268
VGABasePtr          = OS_BASE + 0x00A0000
269
 
269
 
270
virtual at            OS_BASE + 0x05FFF80
270
virtual at            OS_BASE + 0x05FFF80
271
  tss  TSS
271
  tss  TSS
272
end virtual
272
end virtual
273
 
273
 
274
HEAP_BASE           = OS_BASE + 0x0800000
274
HEAP_BASE           = OS_BASE + 0x0800000
275
HEAP_MIN_SIZE       = 0x01000000
275
HEAP_MIN_SIZE       = 0x01000000
276
 
276
 
277
page_tabs           = 0xFDC00000
277
page_tabs           = 0xFDC00000
278
app_page_tabs       = 0xFDC00000
278
app_page_tabs       = 0xFDC00000
279
kernel_tabs         = page_tabs + (OS_BASE shr 10)   ;0xFDE00000
279
kernel_tabs         = page_tabs + (OS_BASE shr 10)   ;0xFDE00000
280
master_tab          = page_tabs + (page_tabs shr 10) ;0xFDFF70000
280
master_tab          = page_tabs + (page_tabs shr 10) ;0xFDFF70000
281
 
281
 
282
LFB_BASE            = 0xFE000000
282
LFB_BASE            = 0xFE000000
283
 
283
 
284
std_application_base_address   = 0
284
std_application_base_address   = 0
285
RING0_STACK_SIZE    = 0x2000
285
RING0_STACK_SIZE    = 0x2000
286
 
286
 
287
REG_SS              = RING0_STACK_SIZE -  4
287
REG_SS              = RING0_STACK_SIZE -  4
288
REG_APP_ESP         = RING0_STACK_SIZE -  8
288
REG_APP_ESP         = RING0_STACK_SIZE -  8
289
REG_EFLAGS          = RING0_STACK_SIZE - 12
289
REG_EFLAGS          = RING0_STACK_SIZE - 12
290
REG_CS              = RING0_STACK_SIZE - 16
290
REG_CS              = RING0_STACK_SIZE - 16
291
REG_EIP             = RING0_STACK_SIZE - 20
291
REG_EIP             = RING0_STACK_SIZE - 20
292
REG_EAX             = RING0_STACK_SIZE - 24
292
REG_EAX             = RING0_STACK_SIZE - 24
293
REG_ECX             = RING0_STACK_SIZE - 28
293
REG_ECX             = RING0_STACK_SIZE - 28
294
REG_EDX             = RING0_STACK_SIZE - 32
294
REG_EDX             = RING0_STACK_SIZE - 32
295
REG_EBX             = RING0_STACK_SIZE - 36
295
REG_EBX             = RING0_STACK_SIZE - 36
296
REG_ESP             = RING0_STACK_SIZE - 40  ;RING0_STACK_SIZE-20
296
REG_ESP             = RING0_STACK_SIZE - 40  ;RING0_STACK_SIZE-20
297
REG_EBP             = RING0_STACK_SIZE - 44
297
REG_EBP             = RING0_STACK_SIZE - 44
298
REG_ESI             = RING0_STACK_SIZE - 48
298
REG_ESI             = RING0_STACK_SIZE - 48
299
REG_EDI             = RING0_STACK_SIZE - 52
299
REG_EDI             = RING0_STACK_SIZE - 52
300
REG_RET             = RING0_STACK_SIZE - 56  ;irq0.return
300
REG_RET             = RING0_STACK_SIZE - 56  ;irq0.return
301
 
301
 
302
 
302
 
303
PAGE_SIZE           = 4096
303
PAGE_SIZE           = 4096
304
 
304
 
305
PG_UNMAP            = 0x000
305
PG_UNMAP            = 0x000
306
PG_READ             = 0x001
306
PG_READ             = 0x001
307
PG_WRITE            = 0x002
307
PG_WRITE            = 0x002
308
PG_USER             = 0x004
308
PG_USER             = 0x004
309
PG_PCD              = 0x008
309
PG_PCD              = 0x008
310
PG_PWT              = 0x010
310
PG_PWT              = 0x010
311
PG_ACCESSED         = 0x020
311
PG_ACCESSED         = 0x020
312
PG_DIRTY            = 0x040
312
PG_DIRTY            = 0x040
313
PG_PAT              = 0x080
313
PG_PAT              = 0x080
314
PG_GLOBAL           = 0x100
314
PG_GLOBAL           = 0x100
315
PG_SHARED           = 0x200
315
PG_SHARED           = 0x200
316
 
316
 
317
PG_SWR              = 0x003 ; PG_WRITE + PG_READ
317
PG_SWR              = 0x003 ; PG_WRITE + PG_READ
318
PG_UR               = 0x005 ; PG_USER + PG_READ
318
PG_UR               = 0x005 ; PG_USER + PG_READ
319
PG_UWR              = 0x007 ; PG_USER + PG_WRITE + PG_READ
319
PG_UWR              = 0x007 ; PG_USER + PG_WRITE + PG_READ
320
PG_NOCACHE          = 0x018 ; PG_PCD + PG_PWT
320
PG_NOCACHE          = 0x018 ; PG_PCD + PG_PWT
321
 
321
 
322
PDE_LARGE           = 0x080
322
PDE_LARGE           = 0x080
323
 
323
 
324
MEM_WB              = 6     ; write-back memory
324
MEM_WB              = 6     ; write-back memory
325
MEM_WC              = 1     ; write combined memory
325
MEM_WC              = 1     ; write combined memory
326
MEM_UC              = 0     ; uncached memory
326
MEM_UC              = 0     ; uncached memory
327
 
327
 
328
PAT_WB              = 0x000
328
PAT_WB              = 0x000
329
PAT_WC              = 0x008
329
PAT_WC              = 0x008
330
PAT_UCM             = 0x010
330
PAT_UCM             = 0x010
331
PAT_UC              = 0x018
331
PAT_UC              = 0x018
332
 
332
 
333
PAT_TYPE_UC         = 0
333
PAT_TYPE_UC         = 0
334
PAT_TYPE_WC         = 1
334
PAT_TYPE_WC         = 1
335
PAT_TYPE_WB         = 6
335
PAT_TYPE_WB         = 6
336
PAT_TYPE_UCM        = 7
336
PAT_TYPE_UCM        = 7
337
 
337
 
338
PAT_VALUE           = 0x00070106; (UC<<24)|(UCM<<16)|(WC<<8)|WB
338
PAT_VALUE           = 0x00070106; (UC<<24)|(UCM<<16)|(WC<<8)|WB
339
 
339
 
340
MAX_MEMMAP_BLOCKS   = 32
340
MAX_MEMMAP_BLOCKS   = 32
341
 
341
 
342
EVENT_REDRAW       = 0x00000001
342
EVENT_REDRAW       = 0x00000001
343
EVENT_KEY          = 0x00000002
343
EVENT_KEY          = 0x00000002
344
EVENT_BUTTON       = 0x00000004
344
EVENT_BUTTON       = 0x00000004
345
EVENT_BACKGROUND   = 0x00000010
345
EVENT_BACKGROUND   = 0x00000010
346
EVENT_MOUSE        = 0x00000020
346
EVENT_MOUSE        = 0x00000020
347
EVENT_IPC          = 0x00000040
347
EVENT_IPC          = 0x00000040
348
EVENT_NETWORK      = 0x00000080
348
EVENT_NETWORK      = 0x00000080
349
EVENT_DEBUG        = 0x00000100
349
EVENT_DEBUG        = 0x00000100
350
EVENT_NETWORK2     = 0x00000200
350
EVENT_NETWORK2     = 0x00000200
351
EVENT_EXTENDED     = 0x00000400
351
EVENT_EXTENDED     = 0x00000400
352
 
352
 
353
EVM_MOUSE_FILTER  = 0x80000000  ; see in macros.inc for apps
353
EVM_MOUSE_FILTER  = 0x80000000  ; see in macros.inc for apps
354
EVM_CURSOR_FILTER = 0x40000000
354
EVM_CURSOR_FILTER = 0x40000000
355
 
355
 
356
EV_INTR            = 1
356
EV_INTR            = 1
357
 
357
 
358
STDIN_FILENO       = 0
358
STDIN_FILENO       = 0
359
STDOUT_FILENO      = 1
359
STDOUT_FILENO      = 1
360
STDERR_FILENO      = 2
360
STDERR_FILENO      = 2
361
 
361
 
362
SYSTEM_SHUTDOWN    = 2
362
SYSTEM_SHUTDOWN    = 2
363
SYSTEM_REBOOT      = 3
363
SYSTEM_REBOOT      = 3
364
SYSTEM_RESTART     = 4
364
SYSTEM_RESTART     = 4
365
 
365
 
366
BLIT_CLIENT_RELATIVE = 0x20000000
366
BLIT_CLIENT_RELATIVE = 0x20000000
367
 
367
 
368
struct SYSCALL_STACK
368
struct SYSCALL_STACK
369
        eip     dd ?    ;  +0
369
        eip     dd ?    ;  +0
370
        edi     dd ?    ;  +4
370
        edi     dd ?    ;  +4
371
        esi     dd ?    ;  +8
371
        esi     dd ?    ;  +8
372
        ebp     dd ?    ; +12
372
        ebp     dd ?    ; +12
373
        esp     dd ?    ; +16
373
        esp     dd ?    ; +16
374
        ebx     dd ?    ; +20
374
        ebx     dd ?    ; +20
375
        edx     dd ?    ; +24
375
        edx     dd ?    ; +24
376
        ecx     dd ?    ; +28
376
        ecx     dd ?    ; +28
377
        eax     dd ?    ; +32
377
        eax     dd ?    ; +32
378
ends
378
ends
379
 
379
 
380
struct  LHEAD
380
struct  LHEAD
381
        next            dd ?   ;next object in list
381
        next            dd ?   ;next object in list
382
        prev            dd ?   ;prev object in list
382
        prev            dd ?   ;prev object in list
383
ends
383
ends
384
 
384
 
385
struct  MUTEX_WAITER
385
struct  MUTEX_WAITER
386
        list    LHEAD
386
        list    LHEAD
387
        task    dd ?
387
        task    dd ?
388
        type    dd ?
388
        type    dd ?
389
ends
389
ends
390
 
390
 
391
struct  MUTEX
391
struct  MUTEX
392
        wait_list       LHEAD
392
        wait_list       LHEAD
393
        count           dd ?
393
        count           dd ?
394
ends
394
ends
395
 
395
 
396
struct  RWSEM
396
struct  RWSEM
397
        wait_list       LHEAD
397
        wait_list       LHEAD
398
        count           dd ?
398
        count           dd ?
399
ends
399
ends
400
 
400
 
401
struct  FUTEX
401
struct  FUTEX
402
        list            LHEAD
402
        list            LHEAD
403
        magic           dd ?
403
        magic           dd ?
404
        handle          dd ?
404
        handle          dd ?
405
        destroy         dd ?
405
        destroy         dd ?
406
 
406
 
407
        wait_list       LHEAD
407
        wait_list       LHEAD
408
        pointer         dd ?
408
        pointer         dd ?
409
        flags           dd ?
409
        flags           dd ?
410
ends
410
ends
411
 
411
 
412
FUTEX_INIT      = 0
412
FUTEX_INIT      = 0
413
FUTEX_DESTROY   = 1
413
FUTEX_DESTROY   = 1
414
FUTEX_WAIT      = 2
414
FUTEX_WAIT      = 2
415
FUTEX_WAKE      = 3
415
FUTEX_WAKE      = 3
416
 
416
 
417
struct  FILED
417
struct  FILED
418
        list            LHEAD
418
        list            LHEAD
419
        magic           rd 1
419
        magic           rd 1
420
        handle          rd 1
420
        handle          rd 1
421
        destroy         rd 1
421
        destroy         rd 1
422
        mode            rd 1
422
        mode            rd 1
423
        file            rd 1
423
        file            rd 1
424
ends
424
ends
425
 
425
 
426
struct  PIPE
426
struct  PIPE
427
        pipe_ops        rd 1
427
        pipe_ops        rd 1
428
        buffer          rd 1
428
        buffer          rd 1
429
        readers         rd 1
429
        readers         rd 1
430
        writers         rd 1
430
        writers         rd 1
431
 
431
 
432
        pipe_lock       MUTEX
432
        pipe_lock       MUTEX
433
        count           rd 1
433
        count           rd 1
434
 
434
 
435
        read_end        rd 1
435
        read_end        rd 1
436
        write_end       rd 1
436
        write_end       rd 1
437
        rlist           LHEAD
437
        rlist           LHEAD
438
        wlist           LHEAD
438
        wlist           LHEAD
439
ends
439
ends
440
 
440
 
441
struct  PROC
441
struct  PROC
442
        list            LHEAD
442
        list            LHEAD
443
        thr_list        LHEAD
443
        thr_list        LHEAD
444
        heap_lock       MUTEX
444
        heap_lock       MUTEX
445
        heap_base       rd 1
445
        heap_base       rd 1
446
        heap_top        rd 1
446
        heap_top        rd 1
447
        mem_used        rd 1
447
        mem_used        rd 1
448
        dlls_list_ptr   rd 1
448
        dlls_list_ptr   rd 1
449
        pdt_0_phys      rd 1
449
        pdt_0_phys      rd 1
450
        pdt_1_phys      rd 1
450
        pdt_1_phys      rd 1
451
        io_map_0        rd 1
451
        io_map_0        rd 1
452
        io_map_1        rd 1
452
        io_map_1        rd 1
453
 
453
 
454
        ht_lock         rd 1
454
        ht_lock         rd 1
455
        ht_free         rd 1                ;htab[0] stdin
455
        ht_free         rd 1                ;htab[0] stdin
456
        ht_next         rd 1                ;htab[1] stdout
456
        ht_next         rd 1                ;htab[1] stdout
457
        htab            rd 1024-PROC.htab/4 ;htab[2] stderr
457
        htab            rd 1024-PROC.htab/4 ;htab[2] stderr
458
        pdt_0           rd 1024
458
        pdt_0           rd 1024
459
ends
459
ends
460
 
460
 
461
struct  DBG_REGS
461
struct  DBG_REGS
462
        dr0             dd ?
462
        dr0             dd ?
463
        dr1             dd ?
463
        dr1             dd ?
464
        dr2             dd ?
464
        dr2             dd ?
465
        dr3             dd ?
465
        dr3             dd ?
466
        dr7             dd ?
466
        dr7             dd ?
467
ends
467
ends
468
 
468
 
469
struct  POINT
469
struct  POINT
470
        x       dd ?
470
        x       dd ?
471
        y       dd ?
471
        y       dd ?
472
ends
472
ends
473
 
473
 
474
struct  RECT
474
struct  RECT
475
        left    dd ?
475
        left    dd ?
476
        top     dd ?
476
        top     dd ?
477
        right   dd ?
477
        right   dd ?
478
        bottom  dd ?
478
        bottom  dd ?
479
ends
479
ends
480
 
480
 
481
struct  BOX
481
struct  BOX
482
        left    dd ?
482
        left    dd ?
483
        top     dd ?
483
        top     dd ?
484
        width   dd ?
484
        width   dd ?
485
        height  dd ?
485
        height  dd ?
486
ends
486
ends
487
 
487
 
488
struct process_information
488
struct process_information
489
        cpu_usage             dd ?  ; +0
489
        cpu_usage             dd ?  ; +0
490
        window_stack_position dw ?  ; +4
490
        window_stack_position dw ?  ; +4
491
        window_stack_value    dw ?  ; +6
491
        window_stack_value    dw ?  ; +6
492
                              dw ?  ; +8
492
                              dw ?  ; +8
493
        process_name          rb 12 ; +10
493
        process_name          rb 12 ; +10
494
        memory_start          dd ?  ; +22
494
        memory_start          dd ?  ; +22
495
        used_memory           dd ?  ; +26
495
        used_memory           dd ?  ; +26
496
        PID                   dd ?  ; +30
496
        PID                   dd ?  ; +30
497
        box                   BOX   ; +34
497
        box                   BOX   ; +34
498
        slot_state            dw ?  ; +50
498
        slot_state            dw ?  ; +50
499
                              dw ?  ; +52
499
                              dw ?  ; +52
500
        client_box            BOX   ; +54
500
        client_box            BOX   ; +54
501
        wnd_state             db ?  ; +70
501
        wnd_state             db ?  ; +70
-
 
502
        event_mask            dd ?  ; +71
-
 
503
        keyboard_mode         db ?  ; +75
502
ends
504
ends
503
 
505
 
504
struct  APPDATA
506
struct  APPDATA
505
        app_name        rb 11
507
        app_name        rb 11
506
                        rb 5
508
                        rb 5
507
 
509
 
508
        list            LHEAD           ;+16
510
        list            LHEAD           ;+16
509
        process         dd ?            ;+24
511
        process         dd ?            ;+24
510
        fpu_state       dd ?            ;+28
512
        fpu_state       dd ?            ;+28
511
        exc_handler     dd ?            ;+32
513
        exc_handler     dd ?            ;+32
512
        except_mask     dd ?            ;+36
514
        except_mask     dd ?            ;+36
513
        pl0_stack       dd ?            ;+40
515
        pl0_stack       dd ?            ;+40
514
        exc_reserve_stack dd ?            ;+44
516
        exc_reserve_stack dd ?            ;+44
515
        fd_ev           dd ?            ;+48
517
        fd_ev           dd ?            ;+48
516
        bk_ev           dd ?            ;+52
518
        bk_ev           dd ?            ;+52
517
        fd_obj          dd ?            ;+56
519
        fd_obj          dd ?            ;+56
518
        bk_obj          dd ?            ;+60
520
        bk_obj          dd ?            ;+60
519
        saved_esp       dd ?            ;+64
521
        saved_esp       dd ?            ;+64
520
        io_map          rd 2            ;+68
522
        io_map          rd 2            ;+68
521
        dbg_state       dd ?            ;+76
523
        dbg_state       dd ?            ;+76
522
        cur_dir         dd ?            ;+80   ; directory this thread
524
        cur_dir         dd ?            ;+80   ; directory this thread
523
        wait_timeout    dd ?            ;+84
525
        wait_timeout    dd ?            ;+84
524
        saved_esp0      dd ?            ;+88
526
        saved_esp0      dd ?            ;+88
525
        wait_begin      dd ?            ;+92   +++
527
        wait_begin      dd ?            ;+92   +++
526
        wait_test       dd ?            ;+96   +++
528
        wait_test       dd ?            ;+96   +++
527
        wait_param      dd ?            ;+100  +++
529
        wait_param      dd ?            ;+100  +++
528
        tls_base        dd ?            ;+104
530
        tls_base        dd ?            ;+104
529
        event_mask      dd ?            ;+108   stores event types allowed for task
531
        event_mask      dd ?            ;+108   stores event types allowed for task
530
        tid             dd ?            ;+112   thread id
532
        tid             dd ?            ;+112   thread id
531
        def_priority    db ?            ;+116
533
        def_priority    db ?            ;+116
532
        cur_priority    db ?            ;+117
534
        cur_priority    db ?            ;+117
533
                        dw ?            ;+118
535
                        dw ?            ;+118
534
                        dd ?            ;+120
536
                        dd ?            ;+120
535
        state           db ?            ;+124   thread state
537
        state           db ?            ;+124   thread state
536
        wnd_number      db ?            ;+125
538
        wnd_number      db ?            ;+125
537
                        dw ?            ;+126
539
                        dw ?            ;+126
538
        window          dd ?            ;+128   ptr WDATA
540
        window          dd ?            ;+128   ptr WDATA
539
                        dd ?            ;+132
541
                        dd ?            ;+132
540
                        dd ?            ;+136
542
                        dd ?            ;+136
541
        counter_sum     dd ?            ;+140
543
        counter_sum     dd ?            ;+140
542
                        rd 4            ;+144
544
                        rd 4            ;+144
543
        ipc_start       dd ?            ;+160
545
        ipc_start       dd ?            ;+160
544
        ipc_size        dd ?            ;+164
546
        ipc_size        dd ?            ;+164
545
        occurred_events dd ?            ;+168  ; mask which accumulates occurred events
547
        occurred_events dd ?            ;+168  ; mask which accumulates occurred events
546
        debugger_slot   dd ?            ;+172  ; index in SLOT_BASE array
548
        debugger_slot   dd ?            ;+172  ; index in SLOT_BASE array
547
        terminate_protection dd ?       ;+176
549
        terminate_protection dd ?       ;+176
548
        keyboard_mode   db ?            ;+180
550
        keyboard_mode   db ?            ;+180
549
                        rb 3
551
                        rb 3
550
        exec_params     dd ?            ;+184
552
        exec_params     dd ?            ;+184
551
        dbg_event_mem   dd ?            ;+188
553
        dbg_event_mem   dd ?            ;+188
552
        dbg_regs        DBG_REGS        ;+192
554
        dbg_regs        DBG_REGS        ;+192
553
                        dd ?            ;+212
555
                        dd ?            ;+212
554
                        rd 4            ;+216
556
                        rd 4            ;+216
555
        priority        dd ?            ;+232
557
        priority        dd ?            ;+232
556
        in_schedule     LHEAD           ;+236
558
        in_schedule     LHEAD           ;+236
557
        counter_add     dd ?            ;+244
559
        counter_add     dd ?            ;+244
558
        cpu_usage       dd ?            ;+248
560
        cpu_usage       dd ?            ;+248
559
                        dd ?            ;+252  ; temporary place to save cursor
561
                        dd ?            ;+252  ; temporary place to save cursor
560
ends
562
ends
561
 
563
 
562
assert sizeof.APPDATA = 256
564
assert sizeof.APPDATA = 256
563
 
565
 
564
APP_OBJ_OFFSET  = 48
566
APP_OBJ_OFFSET  = 48
565
APP_EV_OFFSET   = 40
567
APP_EV_OFFSET   = 40
566
 
568
 
567
; Thread states:
569
; Thread states:
568
TSTATE_RUNNING        = 0
570
TSTATE_RUNNING        = 0
569
TSTATE_RUN_SUSPENDED  = 1
571
TSTATE_RUN_SUSPENDED  = 1
570
TSTATE_WAIT_SUSPENDED = 2
572
TSTATE_WAIT_SUSPENDED = 2
571
TSTATE_ZOMBIE         = 3
573
TSTATE_ZOMBIE         = 3
572
TSTATE_TERMINATING    = 4
574
TSTATE_TERMINATING    = 4
573
TSTATE_WAITING        = 5
575
TSTATE_WAITING        = 5
574
TSTATE_FREE           = 9
576
TSTATE_FREE           = 9
575
 
577
 
576
; Window constants:
578
; Window constants(fl_wstate):
577
WSTATE_NORMAL    = 00000000b
579
WSTATE_NORMAL    = 00000000b
578
WSTATE_MAXIMIZED = 00000001b
580
WSTATE_MAXIMIZED = 00000001b
579
WSTATE_MINIMIZED = 00000010b
581
WSTATE_MINIMIZED = 00000010b
580
WSTATE_ROLLEDUP  = 00000100b
582
WSTATE_ROLLEDUP  = 00000100b
581
WSTATE_USED      = 10000000b
583
WSTATE_USED      = 10000000b
582
 
584
 
583
; fl_redraw
585
; fl_redraw
584
WSTATE_REDRAW    = 00000001b
586
WSTATE_REDRAW    = 00000001b
585
WSTATE_WNDDRAWN  = 00000010b
587
WSTATE_WNDDRAWN  = 00000010b
586
 
588
 
587
WSTYLE_HASCAPTION     = 00010000b
589
WSTYLE_HASCAPTION     = 00010000b
588
WSTYLE_CLIENTRELATIVE = 00100000b
590
WSTYLE_CLIENTRELATIVE = 00100000b
589
 
591
 
590
ZPOS_DESKTOP            = -2
592
ZPOS_DESKTOP            = -2
591
ZPOS_ALWAYS_BACK        = -1
593
ZPOS_ALWAYS_BACK        = -1
592
ZPOS_NORMAL             = 0
594
ZPOS_NORMAL             = 0
593
ZPOS_ALWAYS_TOP         = 1     ;ZPOS_ALWAYS_TOP is always last and has max number!
595
ZPOS_ALWAYS_TOP         = 1     ;ZPOS_ALWAYS_TOP is always last and has max number!
594
 
596
 
595
CONTROL_EXCEPTION  = 'EXPT'
597
CONTROL_EXCEPTION  = 'EXPT'
596
 
598
 
597
; Window structure:
599
; Window structure:
598
struct  WDATA
600
struct  WDATA
599
        box             BOX
601
        box             BOX
600
        cl_workarea     dd ?
602
        cl_workarea     dd ?
601
        cl_titlebar     dd ?
603
        cl_titlebar     dd ?
602
        cl_frames       dd ?
604
        cl_frames       dd ?
603
        z_modif         db ?
605
        z_modif         db ?
604
        fl_wstate       db ?
606
        fl_wstate       db ?
605
        fl_wdrawn       db ?
607
        fl_wdrawn       db ?
606
        fl_redraw       db ?
608
        fl_redraw       db ?
607
        clientbox       BOX
609
        clientbox       BOX
608
        shape           dd ?
610
        shape           dd ?
609
        shape_scale     dd ?
611
        shape_scale     dd ?
610
        caption         dd ?
612
        caption         dd ?
611
        captionEncoding db ?
613
        captionEncoding db ?
612
                        rb 3
614
                        rb 3
613
        saved_box       BOX
615
        saved_box       BOX
614
        cursor          dd ?
616
        cursor          dd ?
615
        temp_cursor     dd ?
617
        temp_cursor     dd ?   ;?
616
        draw_bgr_x      dd ?
618
        draw_bgr_x      dd ?
617
        draw_bgr_y      dd ?
619
        draw_bgr_y      dd ?
618
        draw_data       RECT
620
        draw_data       RECT
619
        thread          dd ? ; ptr APPDATA
621
        thread          dd ? ; ptr APPDATA
-
 
622
        buttons         rd 1 ; ptr array buttons
620
                        rb 12
623
                        rb 12 - 4
621
ends
624
ends
622
 
625
 
623
label WDATA.fl_wstyle byte at WDATA.cl_workarea + 3
626
label WDATA.fl_wstyle byte at WDATA.cl_workarea + 3
624
 
627
 
625
assert sizeof.WDATA = 128
628
assert sizeof.WDATA = 128
626
 
629
 
627
struct  SYS_VARS
630
struct  SYS_VARS
628
        bpp             dd ?
631
        bpp             dd ?
629
        scanline        dd ?
632
        scanline        dd ?
630
        vesa_mode       dd ?
633
        vesa_mode       dd ?
631
        x_res           dd ?
634
        x_res           dd ?
632
        y_res           dd ?
635
        y_res           dd ?
633
ends
636
ends
634
 
637
 
635
struct  APPOBJ                  ; common object header
638
struct  APPOBJ                  ; common object header
636
        magic           dd ?    ;
639
        magic           dd ?    ;
637
        destroy         dd ?    ; internal destructor
640
        destroy         dd ?    ; internal destructor
638
        fd              dd ?    ; next object in list
641
        fd              dd ?    ; next object in list
639
        bk              dd ?    ; prev object in list
642
        bk              dd ?    ; prev object in list
640
        pid             dd ?    ; owner id
643
        pid             dd ?    ; owner id
641
ends
644
ends
642
 
645
 
643
struct  CURSOR          APPOBJ
646
struct  CURSOR          APPOBJ
644
        base            dd ?   ;allocated memory
647
        base            dd ?   ;allocated memory
645
        hot_x           dd ?   ;hotspot coords
648
        hot_x           dd ?   ;hotspot coords
646
        hot_y           dd ?
649
        hot_y           dd ?
647
 
650
 
648
        list_next       dd ?   ;next cursor in cursor list
651
        list_next       dd ?   ;next cursor in cursor list
649
        list_prev       dd ?   ;prev cursor in cursor list
652
        list_prev       dd ?   ;prev cursor in cursor list
650
        dev_obj         dd ?   ;device depended data
653
        dev_obj         dd ?   ;device depended data
651
ends
654
ends
652
 
655
 
653
 
656
 
654
struct  EVENT           APPOBJ
657
struct  EVENT           APPOBJ
655
        id              dd ?   ;event uid
658
        id              dd ?   ;event uid
656
        state           dd ?   ;internal flags
659
        state           dd ?   ;internal flags
657
        code            dd ?
660
        code            dd ?
658
                        rd 5
661
                        rd 5
659
ends
662
ends
660
 
663
 
661
 
664
 
662
struct  SMEM
665
struct  SMEM
663
        bk              dd ?
666
        bk              dd ?
664
        fd              dd ?    ;+4
667
        fd              dd ?    ;+4
665
        base            dd ?    ;+8
668
        base            dd ?    ;+8
666
        size            dd ?    ;+12
669
        size            dd ?    ;+12
667
        access          dd ?    ;+16
670
        access          dd ?    ;+16
668
        refcount        dd ?    ;+20
671
        refcount        dd ?    ;+20
669
        name            rb 32   ;+24
672
        name            rb 32   ;+24
670
ends
673
ends
671
 
674
 
672
struct  SMAP            APPOBJ
675
struct  SMAP            APPOBJ
673
        base            dd ?   ;mapped base
676
        base            dd ?   ;mapped base
674
        parent          dd ?   ;SMEM
677
        parent          dd ?   ;SMEM
675
ends
678
ends
676
 
679
 
677
struct  DLLDESCR
680
struct  DLLDESCR
678
        bk              dd ?
681
        bk              dd ?
679
        fd              dd ?    ;+4
682
        fd              dd ?    ;+4
680
        data            dd ?    ;+8
683
        data            dd ?    ;+8
681
        size            dd ?    ;+12
684
        size            dd ?    ;+12
682
        timestamp       dq ?
685
        timestamp       dq ?
683
        refcount        dd ?
686
        refcount        dd ?
684
        defaultbase     dd ?
687
        defaultbase     dd ?
685
        coff_hdr        dd ?
688
        coff_hdr        dd ?
686
        symbols_ptr     dd ?
689
        symbols_ptr     dd ?
687
        symbols_num     dd ?
690
        symbols_num     dd ?
688
        symbols_lim     dd ?
691
        symbols_lim     dd ?
689
        exports         dd ?   ;export table
692
        exports         dd ?   ;export table
690
        name            rb 260
693
        name            rb 260
691
ends
694
ends
692
 
695
 
693
struct  HDLL
696
struct  HDLL
694
        fd              dd ?   ;next object in list
697
        fd              dd ?   ;next object in list
695
        bk              dd ?   ;prev object in list
698
        bk              dd ?   ;prev object in list
696
        pid             dd ?   ;owner id
699
        pid             dd ?   ;owner id
697
 
700
 
698
        base            dd ?   ;mapped base
701
        base            dd ?   ;mapped base
699
        size            dd ?   ;mapped size
702
        size            dd ?   ;mapped size
700
        refcount        dd ?   ;reference counter for this process and this lib
703
        refcount        dd ?   ;reference counter for this process and this lib
701
        parent          dd ?   ;DLLDESCR
704
        parent          dd ?   ;DLLDESCR
702
ends
705
ends
703
 
706
 
704
struct DQ
707
struct DQ
705
        union
708
        union
706
                lo    dd ?
709
                lo    dd ?
707
                hi_be dd ?      ; big endian
710
                hi_be dd ?      ; big endian
708
        ends
711
        ends
709
        union
712
        union
710
                hi    dd ?
713
                hi    dd ?
711
                lo_be dd ?
714
                lo_be dd ?
712
        ends
715
        ends
713
ends
716
ends
714
 
717
 
715
struct e820entry
718
struct e820entry
716
        addr DQ ?
719
        addr DQ ?
717
        size DQ ?
720
        size DQ ?
718
        type dd ?
721
        type dd ?
719
ends
722
ends
720
 
723
 
721
RD_LOAD_FROM_FLOPPY = 1
724
RD_LOAD_FROM_FLOPPY = 1
722
RD_LOAD_FROM_HD     = 2
725
RD_LOAD_FROM_HD     = 2
723
RD_LOAD_FROM_MEMORY = 3
726
RD_LOAD_FROM_MEMORY = 3
724
RD_LOAD_FROM_FORMAT = 4
727
RD_LOAD_FROM_FORMAT = 4
725
RD_LOAD_FROM_NONE   = 5
728
RD_LOAD_FROM_NONE   = 5
726
 
729
 
727
struct boot_pci_data
730
struct boot_pci_data
728
        access_mechanism db ?
731
        access_mechanism db ?
729
        last_bus         db ?
732
        last_bus         db ?
730
        version          dw ?   ; bcd minor, then major
733
        version          dw ?   ; bcd minor, then major
731
        pm_entry         dd ?   ; physical address of protected-mode entry point
734
        pm_entry         dd ?   ; physical address of protected-mode entry point
732
ends
735
ends
733
 
736
 
734
struct  boot_data
737
struct  boot_data
735
        bpp             db ?    ; bits per pixel
738
        bpp             db ?    ; bits per pixel
736
        pitch           dw ?    ; scanline length
739
        pitch           dw ?    ; scanline length
737
                        db ?
740
                        db ?
738
                        dd ?
741
                        dd ?
739
        vesa_mode       dw ?
742
        vesa_mode       dw ?
740
        x_res           dw ?
743
        x_res           dw ?
741
        y_res           dw ?
744
        y_res           dw ?
742
                        dw ?
745
                        dw ?
743
                        dd ?
746
                        dd ?
744
        bank_switch     dd ?    ; Vesa 1.2 pm bank switch
747
        bank_switch     dd ?    ; Vesa 1.2 pm bank switch
745
        lfb             dd ?    ; Vesa 2.0 LFB address
748
        lfb             dd ?    ; Vesa 2.0 LFB address
746
        mtrr            db ?    ; 0 or 1: enable MTRR graphics acceleration
749
        mtrr            db ?    ; 0 or 1: enable MTRR graphics acceleration
747
        launcher_start  db ?    ; 0 or 1: start the first app (right now it's
750
        launcher_start  db ?    ; 0 or 1: start the first app (right now it's
748
                                ; LAUNCHER) after kernel is loaded
751
                                ; LAUNCHER) after kernel is loaded
749
        debug_print     db ?    ; if nonzero, duplicates debug output to the screen
752
        debug_print     db ?    ; if nonzero, duplicates debug output to the screen
750
        dma             db ?    ; DMA write: 1=yes, 2=no
753
        dma             db ?    ; DMA write: 1=yes, 2=no
751
        pci_data        boot_pci_data
754
        pci_data        boot_pci_data
752
                        rb 8
755
                        rb 8
753
        shutdown_type   db ?    ; see sysfn 18.9
756
        shutdown_type   db ?    ; see sysfn 18.9
754
                        rb 15
757
                        rb 15
755
        apm_entry       dd ?    ; entry point of APM BIOS
758
        apm_entry       dd ?    ; entry point of APM BIOS
756
        apm_version     dw ?    ; BCD
759
        apm_version     dw ?    ; BCD
757
        apm_flags       dw ?
760
        apm_flags       dw ?
758
                        rb 8
761
                        rb 8
759
        apm_code_32     dw ?
762
        apm_code_32     dw ?
760
        apm_code_16     dw ?
763
        apm_code_16     dw ?
761
        apm_data_16     dw ?
764
        apm_data_16     dw ?
762
        rd_load_from    db ?    ; Device to load ramdisk from, RD_LOAD_FROM_*
765
        rd_load_from    db ?    ; Device to load ramdisk from, RD_LOAD_FROM_*
763
                        db ?
766
                        db ?
764
        kernel_restart  dw ?
767
        kernel_restart  dw ?
765
        sys_disk        dw ?    ; Device to mount on /sys/, see loader_doc.txt for details
768
        sys_disk        dw ?    ; Device to mount on /sys/, see loader_doc.txt for details
766
        acpi_rsdp       dd ?
769
        acpi_rsdp       dd ?
767
        syspath         rb 0x17
770
        syspath         rb 0x17
768
        devicesdat_data dd ?
771
        devicesdat_data dd ?
769
        devicesdat_size dd ?
772
        devicesdat_size dd ?
770
        bios_hd_cnt     db ?    ; number of BIOS hard disks
773
        bios_hd_cnt     db ?    ; number of BIOS hard disks
771
        bios_hd         rb 0x80 ; BIOS hard disks
774
        bios_hd         rb 0x80 ; BIOS hard disks
772
        memmap_block_cnt dd ?   ; available physical memory map: number of blocks
775
        memmap_block_cnt dd ?   ; available physical memory map: number of blocks
773
        memmap_blocks   e820entry
776
        memmap_blocks   e820entry
774
                        rb sizeof.e820entry * (MAX_MEMMAP_BLOCKS - 1)
777
                        rb sizeof.e820entry * (MAX_MEMMAP_BLOCKS - 1)
775
ends
778
ends
776
 
779
 
777
virtual at BOOT_VARS
780
virtual at BOOT_VARS
778
        BOOT_LO boot_data
781
        BOOT_LO boot_data
779
end virtual
782
end virtual
780
virtual at OS_BASE + BOOT_VARS
783
virtual at OS_BASE + BOOT_VARS
781
        BOOT boot_data
784
        BOOT boot_data
782
end virtual
785
end virtual
783
 
786
 
784
MAX_SCREEN_WIDTH  = 3840
787
MAX_SCREEN_WIDTH  = 3840
785
MAX_SCREEN_HEIGHT = 2160
788
MAX_SCREEN_HEIGHT = 2160
786
 
789
 
787
struct  display_t
790
struct  display_t
788
        x               dd ?
791
        x               dd ?
789
        y               dd ?
792
        y               dd ?
790
        width           dd ?
793
        width           dd ?
791
        height          dd ?
794
        height          dd ?
792
        bits_per_pixel  dd ?
795
        bits_per_pixel  dd ?
793
        vrefresh        dd ?
796
        vrefresh        dd ?
794
        current_lfb     dd ?
797
        current_lfb     dd ?
795
        lfb_pitch       dd ?
798
        lfb_pitch       dd ?
796
 
799
 
797
        win_map_lock    RWSEM
800
        win_map_lock    RWSEM
798
        win_map         dd ?
801
        win_map         dd ?
799
        win_map_pitch   dd ?
802
        win_map_pitch   dd ?
800
        win_map_size    dd ?
803
        win_map_size    dd ?
801
 
804
 
802
        modes           dd ?
805
        modes           dd ?
803
        ddev            dd ?
806
        ddev            dd ?
804
        connector       dd ?
807
        connector       dd ?
805
        crtc            dd ?
808
        crtc            dd ?
806
 
809
 
807
        cr_list.next    dd ?
810
        cr_list.next    dd ?
808
        cr_list.prev    dd ?
811
        cr_list.prev    dd ?
809
 
812
 
810
        cursor          dd ?
813
        cursor          dd ?
811
 
814
 
812
        init_cursor     dd ?
815
        init_cursor     dd ?
813
        select_cursor   dd ?
816
        select_cursor   dd ?
814
        show_cursor     dd ?
817
        show_cursor     dd ?
815
        move_cursor     dd ?
818
        move_cursor     dd ?
816
        restore_cursor  dd ?
819
        restore_cursor  dd ?
817
        disable_mouse   dd ?
820
        disable_mouse   dd ?
818
        mask_seqno      dd ?
821
        mask_seqno      dd ?
819
        check_mouse     dd ?
822
        check_mouse     dd ?
820
        check_m_pixel   dd ?
823
        check_m_pixel   dd ?
821
 
824
 
822
        bytes_per_pixel dd ?
825
        bytes_per_pixel dd ?
823
 
826
 
824
        put_pixel       dd ?
827
        put_pixel       dd ?
825
        put_rect        dd ?
828
        put_rect        dd ?
826
        put_image       dd ?
829
        put_image       dd ?
827
        put_line        dd ?
830
        put_line        dd ?
828
        get_pixel       dd ?
831
        get_pixel       dd ?
829
        get_rect        dd ?
832
        get_rect        dd ?
830
        get_image       dd ?
833
        get_image       dd ?
831
        get_line        dd ?
834
        get_line        dd ?
832
ends
835
ends
833
 
836
 
834
struct  DISPMODE
837
struct  DISPMODE
835
        width   dw ?
838
        width   dw ?
836
        height  dw ?
839
        height  dw ?
837
        bpp     dw ?
840
        bpp     dw ?
838
        freq    dw ?
841
        freq    dw ?
839
ends
842
ends
840
 
843
 
841
 
844
 
842
struct  PCIDEV
845
struct  PCIDEV
843
        bk              dd ?
846
        bk              dd ?
844
        fd              dd ?
847
        fd              dd ?
845
        vendor_device_id dd ?
848
        vendor_device_id dd ?
846
        class           dd ?
849
        class           dd ?
847
        devfn           db ?
850
        devfn           db ?
848
        bus             db ?
851
        bus             db ?
849
                        rb 2
852
                        rb 2
850
        owner           dd ? ; pointer to SRV or 0
853
        owner           dd ? ; pointer to SRV or 0
851
ends
854
ends
852
 
855
 
853
struct  IDE_DATA
856
struct  IDE_DATA
854
        ProgrammingInterface dd ?
857
        ProgrammingInterface dd ?
855
        Interrupt            dw ?
858
        Interrupt            dw ?
856
        RegsBaseAddres       dw ?
859
        RegsBaseAddres       dw ?
857
        BAR0_val             dw ?
860
        BAR0_val             dw ?
858
        BAR1_val             dw ?
861
        BAR1_val             dw ?
859
        BAR2_val             dw ?
862
        BAR2_val             dw ?
860
        BAR3_val             dw ?
863
        BAR3_val             dw ?
861
        dma_hdd_channel_1    db ?
864
        dma_hdd_channel_1    db ?
862
        dma_hdd_channel_2    db ?
865
        dma_hdd_channel_2    db ?
863
        pcidev               dd ?       ; pointer to corresponding PCIDEV structure
866
        pcidev               dd ?       ; pointer to corresponding PCIDEV structure
864
ends
867
ends
865
 
868
 
866
struct  IDE_CACHE
869
struct  IDE_CACHE
867
        pointer              dd ?
870
        pointer              dd ?
868
        size                 dd ?   ; not use
871
        size                 dd ?   ; not use
869
        data_pointer         dd ?
872
        data_pointer         dd ?
870
        system_data_size     dd ?   ; not use
873
        system_data_size     dd ?   ; not use
871
        appl_data_size       dd ?   ; not use
874
        appl_data_size       dd ?   ; not use
872
        system_data          dd ?
875
        system_data          dd ?
873
        appl_data            dd ?
876
        appl_data            dd ?
874
        system_sad_size      dd ?
877
        system_sad_size      dd ?
875
        appl_sad_size        dd ?
878
        appl_sad_size        dd ?
876
        search_start         dd ?
879
        search_start         dd ?
877
        appl_search_start    dd ?
880
        appl_search_start    dd ?
878
ends
881
ends
879
 
882
 
880
struct  IDE_DEVICE
883
struct  IDE_DEVICE
881
        UDMA_possible_modes  db ?
884
        UDMA_possible_modes  db ?
882
        UDMA_set_mode        db ?
885
        UDMA_set_mode        db ?
883
ends
886
ends
884
 
887
 
885
; The following macro assume that we are on uniprocessor machine.
888
; The following macro assume that we are on uniprocessor machine.
886
; Serious work is needed for multiprocessor machines.
889
; Serious work is needed for multiprocessor machines.
887
macro spin_lock_irqsave spinlock
890
macro spin_lock_irqsave spinlock
888
{
891
{
889
        pushf
892
        pushf
890
        cli
893
        cli
891
}
894
}
892
macro spin_unlock_irqrestore spinlock
895
macro spin_unlock_irqrestore spinlock
893
{
896
{
894
        popf
897
        popf
895
}
898
}
896
macro spin_lock_irq spinlock
899
macro spin_lock_irq spinlock
897
{
900
{
898
        cli
901
        cli
899
}
902
}
900
macro spin_unlock_irq spinlock
903
macro spin_unlock_irq spinlock
901
{
904
{
902
        sti
905
        sti
903
}
906
}
904
 
907
 
905
struct  MEM_STATE
908
struct  MEM_STATE
906
        mutex           MUTEX
909
        mutex           MUTEX
907
        smallmap        dd ?
910
        smallmap        dd ?
908
        treemap         dd ?
911
        treemap         dd ?
909
        topsize         dd ?
912
        topsize         dd ?
910
        top             dd ?
913
        top             dd ?
911
        smallbins       rd 4*32
914
        smallbins       rd 4*32
912
        treebins        rd 32
915
        treebins        rd 32
913
ends
916
ends
914
 
917
 
915
struct  PG_DATA
918
struct  PG_DATA
916
        mem_amount      dd ?
919
        mem_amount      dd ?
917
        vesa_mem        dd ?
920
        vesa_mem        dd ?
918
        pages_count     dd ?
921
        pages_count     dd ?
919
        pages_free      dd ?
922
        pages_free      dd ?
920
        pages_faults    dd ?
923
        pages_faults    dd ?
921
        pagemap_size    dd ?
924
        pagemap_size    dd ?
922
        kernel_pages    dd ?
925
        kernel_pages    dd ?
923
        kernel_tables   dd ?
926
        kernel_tables   dd ?
924
        sys_page_dir    dd ?
927
        sys_page_dir    dd ?
925
        mutex           MUTEX
928
        mutex           MUTEX
926
ends
929
ends
927
 
930
 
928
struct  SRV
931
struct  SRV
929
        srv_name        rb 16    ;ASCIIZ string
932
        srv_name        rb 16    ;ASCIIZ string
930
        magic           dd ?     ;+0x10 ;'SRV '
933
        magic           dd ?     ;+0x10 ;'SRV '
931
        size            dd ?     ;+0x14 ;size of structure SRV
934
        size            dd ?     ;+0x14 ;size of structure SRV
932
        fd              dd ?     ;+0x18 ;next SRV descriptor
935
        fd              dd ?     ;+0x18 ;next SRV descriptor
933
        bk              dd ?     ;+0x1C ;prev SRV descriptor
936
        bk              dd ?     ;+0x1C ;prev SRV descriptor
934
        base            dd ?     ;+0x20 ;service base address
937
        base            dd ?     ;+0x20 ;service base address
935
        entry           dd ?     ;+0x24 ;service START function
938
        entry           dd ?     ;+0x24 ;service START function
936
        srv_proc        dd ?     ;+0x28 ;user mode service handler
939
        srv_proc        dd ?     ;+0x28 ;user mode service handler
937
        srv_proc_ex     dd ?     ;+0x2C ;kernel mode service handler
940
        srv_proc_ex     dd ?     ;+0x2C ;kernel mode service handler
938
ends
941
ends
939
 
942
 
940
struct USBSRV
943
struct USBSRV
941
        srv             SRV
944
        srv             SRV
942
        usb_func        dd ?
945
        usb_func        dd ?
943
ends
946
ends
944
 
947
 
945
struct USBFUNC
948
struct USBFUNC
946
        strucsize       dd ?
949
        strucsize       dd ?
947
        add_device      dd ?
950
        add_device      dd ?
948
        device_disconnect dd ?
951
        device_disconnect dd ?
949
ends
952
ends
950
 
953
 
951
DRV_ENTRY    =  1
954
DRV_ENTRY    =  1
952
DRV_EXIT     = -1
955
DRV_EXIT     = -1
953
 
956
 
954
struct  COFF_HEADER
957
struct  COFF_HEADER
955
        machine         dw ?
958
        machine         dw ?
956
        nSections       dw ?
959
        nSections       dw ?
957
        DataTime        dd ?
960
        DataTime        dd ?
958
        pSymTable       dd ?
961
        pSymTable       dd ?
959
        nSymbols        dd ?
962
        nSymbols        dd ?
960
        optHeader       dw ?
963
        optHeader       dw ?
961
        flags           dw ?
964
        flags           dw ?
962
ends
965
ends
963
 
966
 
964
struct  COFF_SECTION
967
struct  COFF_SECTION
965
        Name            rb 8
968
        Name            rb 8
966
        VirtualSize     dd ?
969
        VirtualSize     dd ?
967
        VirtualAddress  dd ?
970
        VirtualAddress  dd ?
968
        SizeOfRawData   dd ?
971
        SizeOfRawData   dd ?
969
        PtrRawData      dd ?
972
        PtrRawData      dd ?
970
        PtrReloc        dd ?
973
        PtrReloc        dd ?
971
        PtrLinenumbers  dd ?
974
        PtrLinenumbers  dd ?
972
        NumReloc        dw ?
975
        NumReloc        dw ?
973
        NumLinenum      dw ?
976
        NumLinenum      dw ?
974
        Characteristics dd ?
977
        Characteristics dd ?
975
ends
978
ends
976
 
979
 
977
struct  COFF_RELOC
980
struct  COFF_RELOC
978
        VirtualAddress  dd ?
981
        VirtualAddress  dd ?
979
        SymIndex        dd ?
982
        SymIndex        dd ?
980
        Type            dw ?
983
        Type            dw ?
981
ends
984
ends
982
 
985
 
983
struct  COFF_SYM
986
struct  COFF_SYM
984
        Name            rb 8
987
        Name            rb 8
985
        Value           dd ?
988
        Value           dd ?
986
        SectionNumber   dw ?
989
        SectionNumber   dw ?
987
        Type            dw ?
990
        Type            dw ?
988
        StorageClass    db ?
991
        StorageClass    db ?
989
        NumAuxSymbols   db ?
992
        NumAuxSymbols   db ?
990
ends
993
ends
991
 
994
 
992
struct  STRIPPED_PE_HEADER
995
struct  STRIPPED_PE_HEADER
993
        Signature           dw ?
996
        Signature           dw ?
994
        Characteristics     dw ?
997
        Characteristics     dw ?
995
        AddressOfEntryPoint dd ?
998
        AddressOfEntryPoint dd ?
996
        ImageBase           dd ?
999
        ImageBase           dd ?
997
        SectionAlignmentLog db ?
1000
        SectionAlignmentLog db ?
998
        FileAlignmentLog    db ?
1001
        FileAlignmentLog    db ?
999
        MajorOSVersion      db ?
1002
        MajorOSVersion      db ?
1000
        MinorOSVersion      db ?
1003
        MinorOSVersion      db ?
1001
        SizeOfImage         dd ?
1004
        SizeOfImage         dd ?
1002
        SizeOfStackReserve  dd ?
1005
        SizeOfStackReserve  dd ?
1003
        SizeOfHeapReserve   dd ?
1006
        SizeOfHeapReserve   dd ?
1004
        SizeOfHeaders       dd ?
1007
        SizeOfHeaders       dd ?
1005
        Subsystem           db ?
1008
        Subsystem           db ?
1006
        NumberOfRvaAndSizes db ?
1009
        NumberOfRvaAndSizes db ?
1007
        NumberOfSections    dw ?
1010
        NumberOfSections    dw ?
1008
ends
1011
ends
1009
STRIPPED_PE_SIGNATURE = 0x4503 ; 'PE' xor 'S'
1012
STRIPPED_PE_SIGNATURE = 0x4503 ; 'PE' xor 'S'
1010
SPE_DIRECTORY_IMPORT    = 0
1013
SPE_DIRECTORY_IMPORT    = 0
1011
SPE_DIRECTORY_EXPORT    = 1
1014
SPE_DIRECTORY_EXPORT    = 1
1012
SPE_DIRECTORY_BASERELOC = 2
1015
SPE_DIRECTORY_BASERELOC = 2
1013
 
1016
 
1014
struct  IOCTL
1017
struct  IOCTL
1015
        handle          dd ?
1018
        handle          dd ?
1016
        io_code         dd ?
1019
        io_code         dd ?
1017
        input           dd ?
1020
        input           dd ?
1018
        inp_size        dd ?
1021
        inp_size        dd ?
1019
        output          dd ?
1022
        output          dd ?
1020
        out_size        dd ?
1023
        out_size        dd ?
1021
ends
1024
ends
1022
 
1025
 
1023
struct  IRQH
1026
struct  IRQH
1024
        list            LHEAD
1027
        list            LHEAD
1025
        handler         dd ?   ;handler roututine
1028
        handler         dd ?   ;handler roututine
1026
        data            dd ?   ;user-specific data
1029
        data            dd ?   ;user-specific data
1027
        num_ints        dd ?   ;how many times handled
1030
        num_ints        dd ?   ;how many times handled
1028
ends
1031
ends
1029
 
1032
 
1030
MAX_MEMMAP_BLOCKS>
1033
MAX_MEMMAP_BLOCKS>
1031
 
1034
 
1032
MAX_MEMMAP_BLOCKS>
1035
MAX_MEMMAP_BLOCKS>
1033
 
1036
 
1034
MAX_MEMMAP_BLOCKS>
1037
MAX_MEMMAP_BLOCKS>
1035
 
1038
 
1036
MAX_MEMMAP_BLOCKS>
1039
MAX_MEMMAP_BLOCKS>
1037
 
1040
 
1038
MAX_MEMMAP_BLOCKS>
1041
MAX_MEMMAP_BLOCKS>
1039
 
1042
 
1040
MAX_MEMMAP_BLOCKS>
1043
MAX_MEMMAP_BLOCKS>