Include most *.inc files from $(KERNEL_TRUNK) directory.
This commit is contained in:
939
const.inc
939
const.inc
@@ -1,939 +0,0 @@
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
;; ;;
|
|
||||||
;; Copyright (C) KolibriOS team 2004-2015. All rights reserved. ;;
|
|
||||||
;; Distributed under terms of the GNU General Public License ;;
|
|
||||||
;; ;;
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
|
|
||||||
$Revision: 6929 $
|
|
||||||
|
|
||||||
|
|
||||||
dpl0 equ 10010000b ; data read dpl0
|
|
||||||
drw0 equ 10010010b ; data read/write dpl0
|
|
||||||
drw3 equ 11110010b ; data read/write dpl3
|
|
||||||
cpl0 equ 10011010b ; code read dpl0
|
|
||||||
cpl3 equ 11111010b ; code read dpl3
|
|
||||||
|
|
||||||
D32 equ 01000000b ; 32bit segment
|
|
||||||
G32 equ 10000000b ; page gran
|
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;cpu_caps flags;;;;;;;;;;;;;;;;
|
|
||||||
|
|
||||||
CPU_386 equ 3
|
|
||||||
CPU_486 equ 4
|
|
||||||
CPU_PENTIUM equ 5
|
|
||||||
CPU_P6 equ 6
|
|
||||||
CPU_PENTIUM4 equ 0x0F
|
|
||||||
|
|
||||||
CAPS_FPU equ 00 ;on-chip x87 floating point unit
|
|
||||||
CAPS_VME equ 01 ;virtual-mode enhancements
|
|
||||||
CAPS_DE equ 02 ;debugging extensions
|
|
||||||
CAPS_PSE equ 03 ;page-size extensions
|
|
||||||
CAPS_TSC equ 04 ;time stamp counter
|
|
||||||
CAPS_MSR equ 05 ;model-specific registers
|
|
||||||
CAPS_PAE equ 06 ;physical-address extensions
|
|
||||||
CAPS_MCE equ 07 ;machine check exception
|
|
||||||
CAPS_CX8 equ 08 ;CMPXCHG8B instruction
|
|
||||||
CAPS_APIC equ 09 ;on-chip advanced programmable
|
|
||||||
; interrupt controller
|
|
||||||
; 10 ;unused
|
|
||||||
CAPS_SEP equ 11 ;SYSENTER and SYSEXIT instructions
|
|
||||||
CAPS_MTRR equ 12 ;memory-type range registers
|
|
||||||
CAPS_PGE equ 13 ;page global extension
|
|
||||||
CAPS_MCA equ 14 ;machine check architecture
|
|
||||||
CAPS_CMOV equ 15 ;conditional move instructions
|
|
||||||
CAPS_PAT equ 16 ;page attribute table
|
|
||||||
|
|
||||||
CAPS_PSE36 equ 17 ;page-size extensions
|
|
||||||
CAPS_PSN equ 18 ;processor serial number
|
|
||||||
CAPS_CLFLUSH equ 19 ;CLFUSH instruction
|
|
||||||
|
|
||||||
CAPS_DS equ 21 ;debug store
|
|
||||||
CAPS_ACPI equ 22 ;thermal monitor and software
|
|
||||||
;controlled clock supported
|
|
||||||
CAPS_MMX equ 23 ;MMX instructions
|
|
||||||
CAPS_FXSR equ 24 ;FXSAVE and FXRSTOR instructions
|
|
||||||
CAPS_SSE equ 25 ;SSE instructions
|
|
||||||
CAPS_SSE2 equ 26 ;SSE2 instructions
|
|
||||||
CAPS_SS equ 27 ;self-snoop
|
|
||||||
CAPS_HTT equ 28 ;hyper-threading technology
|
|
||||||
CAPS_TM equ 29 ;thermal monitor supported
|
|
||||||
CAPS_IA64 equ 30 ;IA64 capabilities
|
|
||||||
CAPS_PBE equ 31 ;pending break enable
|
|
||||||
|
|
||||||
;ecx
|
|
||||||
CAPS_SSE3 equ 32 ;SSE3 instructions
|
|
||||||
; 33
|
|
||||||
; 34
|
|
||||||
CAPS_MONITOR equ 35 ;MONITOR/MWAIT instructions
|
|
||||||
CAPS_DS_CPL equ 36 ;
|
|
||||||
CAPS_VMX equ 37 ;virtual mode extensions
|
|
||||||
; 38 ;
|
|
||||||
CAPS_EST equ 39 ;enhansed speed step
|
|
||||||
CAPS_TM2 equ 40 ;thermal monitor2 supported
|
|
||||||
; 41
|
|
||||||
CAPS_CID equ 42 ;
|
|
||||||
; 43
|
|
||||||
; 44
|
|
||||||
CAPS_CX16 equ 45 ;CMPXCHG16B instruction
|
|
||||||
CAPS_xTPR equ 46 ;
|
|
||||||
;
|
|
||||||
;reserved
|
|
||||||
;
|
|
||||||
;ext edx /ecx
|
|
||||||
CAPS_SYSCAL equ 64 ;
|
|
||||||
CAPS_XD equ 65 ;execution disable
|
|
||||||
CAPS_FFXSR equ 66 ;
|
|
||||||
CAPS_RDTSCP equ 67 ;
|
|
||||||
CAPS_X64 equ 68 ;
|
|
||||||
CAPS_3DNOW equ 69 ;
|
|
||||||
CAPS_3DNOWEXT equ 70 ;
|
|
||||||
CAPS_LAHF equ 71 ;
|
|
||||||
CAPS_CMP_LEG equ 72 ;
|
|
||||||
CAPS_SVM equ 73 ;secure virual machine
|
|
||||||
CAPS_ALTMOVCR8 equ 74 ;
|
|
||||||
|
|
||||||
; CPU MSR names
|
|
||||||
MSR_SYSENTER_CS equ 0x174
|
|
||||||
MSR_SYSENTER_ESP equ 0x175
|
|
||||||
MSR_SYSENTER_EIP equ 0x176
|
|
||||||
MSR_CR_PAT equ 0x277
|
|
||||||
MSR_MTRR_DEF_TYPE equ 0x2FF
|
|
||||||
|
|
||||||
MSR_AMD_EFER equ 0xC0000080 ; Extended Feature Enable Register
|
|
||||||
MSR_AMD_STAR equ 0xC0000081 ; SYSCALL/SYSRET Target Address Register
|
|
||||||
|
|
||||||
CR0_PE equ 0x00000001 ;protected mode
|
|
||||||
CR0_MP equ 0x00000002 ;monitor fpu
|
|
||||||
CR0_EM equ 0x00000004 ;fpu emulation
|
|
||||||
CR0_TS equ 0x00000008 ;task switch
|
|
||||||
CR0_ET equ 0x00000010 ;extension type hardcoded to 1
|
|
||||||
CR0_NE equ 0x00000020 ;numeric error
|
|
||||||
CR0_WP equ 0x00010000 ;write protect
|
|
||||||
CR0_AM equ 0x00040000 ;alignment check
|
|
||||||
CR0_NW equ 0x20000000 ;not write-through
|
|
||||||
CR0_CD equ 0x40000000 ;cache disable
|
|
||||||
CR0_PG equ 0x80000000 ;paging
|
|
||||||
|
|
||||||
|
|
||||||
CR4_VME equ 0x0001
|
|
||||||
CR4_PVI equ 0x0002
|
|
||||||
CR4_TSD equ 0x0004
|
|
||||||
CR4_DE equ 0x0008
|
|
||||||
CR4_PSE equ 0x0010
|
|
||||||
CR4_PAE equ 0x0020
|
|
||||||
CR4_MCE equ 0x0040
|
|
||||||
CR4_PGE equ 0x0080
|
|
||||||
CR4_PCE equ 0x0100
|
|
||||||
CR4_OSFXSR equ 0x0200
|
|
||||||
CR4_OSXMMEXPT equ 0x0400
|
|
||||||
|
|
||||||
SSE_IE equ 0x0001
|
|
||||||
SSE_DE equ 0x0002
|
|
||||||
SSE_ZE equ 0x0004
|
|
||||||
SSE_OE equ 0x0008
|
|
||||||
SSE_UE equ 0x0010
|
|
||||||
SSE_PE equ 0x0020
|
|
||||||
SSE_DAZ equ 0x0040
|
|
||||||
SSE_IM equ 0x0080
|
|
||||||
SSE_DM equ 0x0100
|
|
||||||
SSE_ZM equ 0x0200
|
|
||||||
SSE_OM equ 0x0400
|
|
||||||
SSE_UM equ 0x0800
|
|
||||||
SSE_PM equ 0x1000
|
|
||||||
SSE_FZ equ 0x8000
|
|
||||||
|
|
||||||
SSE_INIT equ (SSE_IM+SSE_DM+SSE_ZM+SSE_OM+SSE_UM+SSE_PM)
|
|
||||||
|
|
||||||
IRQ_PIC equ 0
|
|
||||||
IRQ_APIC equ 1
|
|
||||||
|
|
||||||
struct TSS
|
|
||||||
_back rw 2
|
|
||||||
_esp0 rd 1
|
|
||||||
_ss0 rw 2
|
|
||||||
_esp1 rd 1
|
|
||||||
_ss1 rw 2
|
|
||||||
_esp2 rd 1
|
|
||||||
_ss2 rw 2
|
|
||||||
_cr3 rd 1
|
|
||||||
_eip rd 1
|
|
||||||
_eflags rd 1
|
|
||||||
_eax rd 1
|
|
||||||
_ecx rd 1
|
|
||||||
_edx rd 1
|
|
||||||
_ebx rd 1
|
|
||||||
_esp rd 1
|
|
||||||
_ebp rd 1
|
|
||||||
_esi rd 1
|
|
||||||
_edi rd 1
|
|
||||||
_es rw 2
|
|
||||||
_cs rw 2
|
|
||||||
_ss rw 2
|
|
||||||
_ds rw 2
|
|
||||||
_fs rw 2
|
|
||||||
_gs rw 2
|
|
||||||
_ldt rw 2
|
|
||||||
_trap rw 1
|
|
||||||
_io rw 1
|
|
||||||
rb 24
|
|
||||||
_io_map_0 rb 4096
|
|
||||||
_io_map_1 rb 4096
|
|
||||||
ends
|
|
||||||
|
|
||||||
DRIVE_DATA_SIZE equ 16
|
|
||||||
|
|
||||||
OS_BASE equ 0x80000000
|
|
||||||
|
|
||||||
window_data equ (OS_BASE+0x0001000)
|
|
||||||
|
|
||||||
CURRENT_TASK equ (OS_BASE+0x0003000)
|
|
||||||
TASK_COUNT equ (OS_BASE+0x0003004)
|
|
||||||
TASK_BASE equ (OS_BASE+0x0003010)
|
|
||||||
TASK_DATA equ (OS_BASE+0x0003020)
|
|
||||||
TASK_EVENT equ (OS_BASE+0x0003020)
|
|
||||||
|
|
||||||
CDDataBuf equ (OS_BASE+0x0005000)
|
|
||||||
|
|
||||||
;unused 0x6000 - 0x8fff
|
|
||||||
|
|
||||||
BOOT_VARS equ (OS_BASE) ;0x9000
|
|
||||||
|
|
||||||
idts equ (OS_BASE+0x000B100)
|
|
||||||
WIN_STACK equ (OS_BASE+0x000C000)
|
|
||||||
WIN_POS equ (OS_BASE+0x000C400)
|
|
||||||
FDD_BUFF equ (OS_BASE+0x000D000) ;512
|
|
||||||
|
|
||||||
WIN_TEMP_XY equ (OS_BASE+0x000F300)
|
|
||||||
KEY_COUNT equ (OS_BASE+0x000F400)
|
|
||||||
KEY_BUFF equ (OS_BASE+0x000F401) ; 120*2 + 2*2 = 244 bytes, actually 255 bytes
|
|
||||||
|
|
||||||
BTN_COUNT equ (OS_BASE+0x000F500)
|
|
||||||
BTN_BUFF equ (OS_BASE+0x000F501)
|
|
||||||
|
|
||||||
|
|
||||||
BTN_ADDR equ (OS_BASE+0x000FE88)
|
|
||||||
MEM_AMOUNT equ (OS_BASE+0x000FE8C)
|
|
||||||
|
|
||||||
SYS_SHUTDOWN equ (OS_BASE+0x000FF00)
|
|
||||||
TASK_ACTIVATE equ (OS_BASE+0x000FF01)
|
|
||||||
|
|
||||||
|
|
||||||
TMP_STACK_TOP equ 0x006CC00
|
|
||||||
|
|
||||||
sys_proc equ (OS_BASE+0x006F000)
|
|
||||||
|
|
||||||
SLOT_BASE equ (OS_BASE+0x0080000)
|
|
||||||
|
|
||||||
VGABasePtr equ (OS_BASE+0x00A0000)
|
|
||||||
|
|
||||||
CLEAN_ZONE equ (_CLEAN_ZONE-OS_BASE)
|
|
||||||
|
|
||||||
UPPER_KERNEL_PAGES equ (OS_BASE+0x0400000)
|
|
||||||
|
|
||||||
virtual at (OS_BASE+0x05FFF80)
|
|
||||||
tss TSS
|
|
||||||
end virtual
|
|
||||||
|
|
||||||
HEAP_BASE equ (OS_BASE+0x0800000)
|
|
||||||
HEAP_MIN_SIZE equ 0x01000000
|
|
||||||
|
|
||||||
page_tabs equ 0xFDC00000
|
|
||||||
app_page_tabs equ 0xFDC00000
|
|
||||||
kernel_tabs equ (page_tabs+ (OS_BASE shr 10)) ;0xFDE00000
|
|
||||||
master_tab equ (page_tabs+ (page_tabs shr 10)) ;0xFDFF70000
|
|
||||||
|
|
||||||
LFB_BASE equ 0xFE000000
|
|
||||||
|
|
||||||
|
|
||||||
new_app_base equ 0;
|
|
||||||
|
|
||||||
twdw equ 0x2000 ;(CURRENT_TASK-window_data)
|
|
||||||
|
|
||||||
std_application_base_address equ new_app_base
|
|
||||||
RING0_STACK_SIZE equ (0x2000 - 512) ;512 байт для контекста FPU
|
|
||||||
|
|
||||||
REG_SS equ (RING0_STACK_SIZE-4)
|
|
||||||
REG_APP_ESP equ (RING0_STACK_SIZE-8)
|
|
||||||
REG_EFLAGS equ (RING0_STACK_SIZE-12)
|
|
||||||
REG_CS equ (RING0_STACK_SIZE-16)
|
|
||||||
REG_EIP equ (RING0_STACK_SIZE-20)
|
|
||||||
REG_EAX equ (RING0_STACK_SIZE-24)
|
|
||||||
REG_ECX equ (RING0_STACK_SIZE-28)
|
|
||||||
REG_EDX equ (RING0_STACK_SIZE-32)
|
|
||||||
REG_EBX equ (RING0_STACK_SIZE-36)
|
|
||||||
REG_ESP equ (RING0_STACK_SIZE-40) ;RING0_STACK_SIZE-20
|
|
||||||
REG_EBP equ (RING0_STACK_SIZE-44)
|
|
||||||
REG_ESI equ (RING0_STACK_SIZE-48)
|
|
||||||
REG_EDI equ (RING0_STACK_SIZE-52)
|
|
||||||
REG_RET equ (RING0_STACK_SIZE-56) ;irq0.return
|
|
||||||
|
|
||||||
|
|
||||||
PAGE_SIZE equ 4096
|
|
||||||
|
|
||||||
PG_UNMAP equ 0x000
|
|
||||||
PG_READ equ 0x001
|
|
||||||
PG_WRITE equ 0x002
|
|
||||||
PG_USER equ 0x004
|
|
||||||
PG_PCD equ 0x008
|
|
||||||
PG_PWT equ 0x010
|
|
||||||
PG_ACCESSED equ 0x020
|
|
||||||
PG_DIRTY equ 0x040
|
|
||||||
PG_PAT equ 0x080
|
|
||||||
PG_GLOBAL equ 0x100
|
|
||||||
PG_SHARED equ 0x200
|
|
||||||
|
|
||||||
PG_SWR equ 0x003 ; (PG_WRITE+PG_READ)
|
|
||||||
PG_UR equ 0x005 ; (PG_USER+PG_READ)
|
|
||||||
PG_UWR equ 0x007 ; (PG_USER+PG_WRITE+PG_READ)
|
|
||||||
PG_NOCACHE equ 0x018 ; (PG_PCD+PG_PWT)
|
|
||||||
|
|
||||||
PDE_LARGE equ 0x080
|
|
||||||
|
|
||||||
PAT_WB equ 0x000
|
|
||||||
PAT_WC equ 0x008
|
|
||||||
PAT_UCM equ 0x010
|
|
||||||
PAT_UC equ 0x018
|
|
||||||
|
|
||||||
PAT_TYPE_UC equ 0
|
|
||||||
PAT_TYPE_WC equ 1
|
|
||||||
PAT_TYPE_WB equ 6
|
|
||||||
PAT_TYPE_UCM equ 7
|
|
||||||
|
|
||||||
PAT_VALUE equ 0x00070106; (UC<<24)|(UCM<<16)|(WC<<8)|WB
|
|
||||||
|
|
||||||
;;;;;;;;;;;boot time variables
|
|
||||||
|
|
||||||
BOOT_BPP equ 0x9000 ;byte bits per pixel
|
|
||||||
BOOT_PITCH equ 0x9001 ;word scanline length
|
|
||||||
BOOT_VESA_MODE equ 0x9008 ;word vesa video mode
|
|
||||||
BOOT_X_RES equ 0x900A ;word X res
|
|
||||||
BOOT_Y_RES equ 0x900C ;word Y res
|
|
||||||
BOOT_BANK_SW equ 0x9014 ;dword Vesa 1.2 pm bank switch
|
|
||||||
BOOT_LFB equ 0x9018 ;dword Vesa 2.0 LFB address
|
|
||||||
BOOT_MTRR equ 0x901C ;byte 0 or 1 : enable MTRR graphics acceleration
|
|
||||||
;BOOT_LOG equ 0x901D ;byte not used anymore (0 or 1 : enable system log display)
|
|
||||||
BOOT_LAUNCHER_START equ 0x901D ;byte (0 or 1) start the first app (right now it's LAUNCHER) after kernel is loaded?
|
|
||||||
;BOOT_DIRECT_LFB equ 0x901E ;byte 0 or 1 : enable direct lfb write, paging disabled
|
|
||||||
BOOT_DEBUG_PRINT equ 0x901E ;byte If nonzero, duplicates debug output to the screen.
|
|
||||||
BOOT_DMA equ 0x901F ;
|
|
||||||
BOOT_PCI_DATA equ 0x9020 ;8bytes pci data
|
|
||||||
BOOT_VRR equ 0x9030 ;byte VRR start enabled 1, 2-no
|
|
||||||
;BOOT_IDE_BASE_ADDR equ 0x9031 ;word IDEContrRegsBaseAddr ; now free and is not used
|
|
||||||
BOOT_MEM_AMOUNT equ 0x9034 ;dword memory amount
|
|
||||||
|
|
||||||
BOOT_APM_ENTRY equ 0x9040
|
|
||||||
BOOT_APM_VERSION equ 0x9044
|
|
||||||
BOOT_APM_FLAGS equ 0x9046 ;unused
|
|
||||||
BOOT_APM_CODE_32 equ 0x9050
|
|
||||||
BOOT_APM_CODE_16 equ 0x9052
|
|
||||||
BOOT_APM_DATA_16 equ 0x9054
|
|
||||||
;BOOT_IDE_BAR0_16 equ 0x9056 ; now free and is not used
|
|
||||||
;BOOT_IDE_BAR1_16 equ 0x9058 ; now free and is not used
|
|
||||||
;BOOT_IDE_BAR2_16 equ 0x905A ; now free and is not used
|
|
||||||
;BOOT_IDE_BAR3_16 equ 0x905C ; now free and is not used
|
|
||||||
;BOOT_IDE_PI_16 equ 0x905E ; now free and is not used
|
|
||||||
;BOOT_IDE_INTERR_16 equ 0x9060 ; now free and is not used
|
|
||||||
|
|
||||||
TMP_FILE_NAME equ 0
|
|
||||||
TMP_CMD_LINE equ 1024
|
|
||||||
TMP_ICON_OFFS equ 1280
|
|
||||||
|
|
||||||
|
|
||||||
EVENT_REDRAW equ 0x00000001
|
|
||||||
EVENT_KEY equ 0x00000002
|
|
||||||
EVENT_BUTTON equ 0x00000004
|
|
||||||
EVENT_BACKGROUND equ 0x00000010
|
|
||||||
EVENT_MOUSE equ 0x00000020
|
|
||||||
EVENT_IPC equ 0x00000040
|
|
||||||
EVENT_NETWORK equ 0x00000080
|
|
||||||
EVENT_DEBUG equ 0x00000100
|
|
||||||
EVENT_NETWORK2 equ 0x00000200
|
|
||||||
EVENT_EXTENDED equ 0x00000400
|
|
||||||
|
|
||||||
EV_INTR equ 1
|
|
||||||
|
|
||||||
STDIN_FILENO equ 0
|
|
||||||
STDOUT_FILENO equ 1
|
|
||||||
STDERR_FILENO equ 2
|
|
||||||
|
|
||||||
SYSTEM_SHUTDOWN equ 2
|
|
||||||
SYSTEM_REBOOT equ 3
|
|
||||||
SYSTEM_RESTART equ 4
|
|
||||||
|
|
||||||
BLIT_CLIENT_RELATIVE equ 0x20000000
|
|
||||||
|
|
||||||
struct SYSCALL_STACK
|
|
||||||
_eip dd ?
|
|
||||||
_edi dd ? ; +4
|
|
||||||
_esi dd ? ; +8
|
|
||||||
_ebp dd ? ; +12
|
|
||||||
_esp dd ? ; +16
|
|
||||||
_ebx dd ? ; +20
|
|
||||||
_edx dd ? ; +24
|
|
||||||
_ecx dd ? ; +28
|
|
||||||
_eax dd ? ; +32
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct LHEAD
|
|
||||||
next dd ? ;next object in list
|
|
||||||
prev dd ? ;prev object in list
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct MUTEX_WAITER
|
|
||||||
list LHEAD
|
|
||||||
task dd ?
|
|
||||||
type dd ?
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct MUTEX
|
|
||||||
wait_list LHEAD
|
|
||||||
count dd ?
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct RWSEM
|
|
||||||
wait_list LHEAD
|
|
||||||
count dd ?
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct FUTEX
|
|
||||||
list LHEAD
|
|
||||||
magic dd ?
|
|
||||||
handle dd ?
|
|
||||||
destroy dd ?
|
|
||||||
|
|
||||||
wait_list LHEAD
|
|
||||||
pointer dd ?
|
|
||||||
flags dd ?
|
|
||||||
ends
|
|
||||||
|
|
||||||
FUTEX_INIT equ 0
|
|
||||||
FUTEX_DESTROY equ 1
|
|
||||||
FUTEX_WAIT equ 2
|
|
||||||
FUTEX_WAKE equ 3
|
|
||||||
|
|
||||||
struct FILED
|
|
||||||
list LHEAD
|
|
||||||
magic rd 1
|
|
||||||
handle rd 1
|
|
||||||
destroy rd 1
|
|
||||||
mode rd 1
|
|
||||||
file rd 1
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct PIPE
|
|
||||||
pipe_ops rd 1
|
|
||||||
buffer rd 1
|
|
||||||
readers rd 1
|
|
||||||
writers rd 1
|
|
||||||
|
|
||||||
pipe_lock MUTEX
|
|
||||||
count rd 1
|
|
||||||
|
|
||||||
read_end rd 1
|
|
||||||
write_end rd 1
|
|
||||||
rlist LHEAD
|
|
||||||
wlist LHEAD
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct PROC
|
|
||||||
list LHEAD
|
|
||||||
thr_list LHEAD
|
|
||||||
heap_lock MUTEX
|
|
||||||
heap_base rd 1
|
|
||||||
heap_top rd 1
|
|
||||||
mem_used rd 1
|
|
||||||
dlls_list_ptr rd 1
|
|
||||||
pdt_0_phys rd 1
|
|
||||||
pdt_1_phys rd 1
|
|
||||||
io_map_0 rd 1
|
|
||||||
io_map_1 rd 1
|
|
||||||
|
|
||||||
ht_lock rd 1
|
|
||||||
ht_free rd 1 ;htab[0] stdin
|
|
||||||
ht_next rd 1 ;htab[1] stdout
|
|
||||||
htab rd 1024-PROC.htab/4 ;htab[2] stderr
|
|
||||||
pdt_0 rd 1024
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct DBG_REGS
|
|
||||||
dr0 dd ?
|
|
||||||
dr1 dd ?
|
|
||||||
dr2 dd ?
|
|
||||||
dr3 dd ?
|
|
||||||
dr7 dd ?
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct POINT
|
|
||||||
x dd ?
|
|
||||||
y dd ?
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct RECT
|
|
||||||
left dd ?
|
|
||||||
top dd ?
|
|
||||||
right dd ?
|
|
||||||
bottom dd ?
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct BOX
|
|
||||||
left dd ?
|
|
||||||
top dd ?
|
|
||||||
width dd ?
|
|
||||||
height dd ?
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct APPDATA
|
|
||||||
app_name rb 11
|
|
||||||
rb 5
|
|
||||||
|
|
||||||
list LHEAD ;+16
|
|
||||||
process dd ? ;+24
|
|
||||||
fpu_state dd ? ;+28
|
|
||||||
exc_handler dd ? ;+32
|
|
||||||
except_mask dd ? ;+36
|
|
||||||
pl0_stack dd ? ;+40
|
|
||||||
cursor dd ? ;+44
|
|
||||||
fd_ev dd ? ;+48
|
|
||||||
bk_ev dd ? ;+52
|
|
||||||
fd_obj dd ? ;+56
|
|
||||||
bk_obj dd ? ;+60
|
|
||||||
saved_esp dd ? ;+64
|
|
||||||
io_map rd 2 ;+68
|
|
||||||
dbg_state dd ? ;+76
|
|
||||||
cur_dir dd ? ;+80
|
|
||||||
wait_timeout dd ? ;+84
|
|
||||||
saved_esp0 dd ? ;+88
|
|
||||||
wait_begin dd ? ;+92 +++
|
|
||||||
wait_test dd ? ;+96 +++
|
|
||||||
wait_param dd ? ;+100 +++
|
|
||||||
tls_base dd ? ;+104
|
|
||||||
dd ? ;+108
|
|
||||||
event_filter dd ? ;+112
|
|
||||||
draw_bgr_x dd ? ;+116
|
|
||||||
draw_bgr_y dd ? ;+120
|
|
||||||
dd ? ;+124
|
|
||||||
wnd_shape dd ? ;+128
|
|
||||||
wnd_shape_scale dd ? ;+132
|
|
||||||
dd ? ;+136
|
|
||||||
dd ? ;+140
|
|
||||||
saved_box BOX ;+144
|
|
||||||
ipc_start dd ? ;+160
|
|
||||||
ipc_size dd ? ;+164
|
|
||||||
event_mask dd ? ;+168
|
|
||||||
debugger_slot dd ? ;+172
|
|
||||||
terminate_protection dd ? ;+176
|
|
||||||
keyboard_mode db ? ;+180
|
|
||||||
captionEncoding db ?
|
|
||||||
rb 2
|
|
||||||
exec_params dd ? ;+184
|
|
||||||
dbg_event_mem dd ? ;+188
|
|
||||||
dbg_regs DBG_REGS ;+192
|
|
||||||
wnd_caption dd ? ;+212
|
|
||||||
wnd_clientbox BOX ;+216
|
|
||||||
priority dd ? ;+232
|
|
||||||
in_schedule LHEAD ;+236
|
|
||||||
ends
|
|
||||||
|
|
||||||
APP_OBJ_OFFSET equ 48
|
|
||||||
APP_EV_OFFSET equ 40
|
|
||||||
|
|
||||||
struct TASKDATA
|
|
||||||
event_mask dd ?
|
|
||||||
pid dd ?
|
|
||||||
dw ?
|
|
||||||
state db ?
|
|
||||||
db ?
|
|
||||||
dw ?
|
|
||||||
wnd_number db ?
|
|
||||||
db ?
|
|
||||||
mem_start dd ?
|
|
||||||
counter_sum dd ?
|
|
||||||
counter_add dd ?
|
|
||||||
cpu_usage dd ?
|
|
||||||
ends
|
|
||||||
|
|
||||||
TSTATE_RUNNING = 0
|
|
||||||
TSTATE_RUN_SUSPENDED = 1
|
|
||||||
TSTATE_WAIT_SUSPENDED = 2
|
|
||||||
TSTATE_ZOMBIE = 3
|
|
||||||
TSTATE_TERMINATING = 4
|
|
||||||
TSTATE_WAITING = 5
|
|
||||||
TSTATE_FREE = 9
|
|
||||||
|
|
||||||
; constants definition
|
|
||||||
WSTATE_NORMAL = 00000000b
|
|
||||||
WSTATE_MAXIMIZED = 00000001b
|
|
||||||
WSTATE_MINIMIZED = 00000010b
|
|
||||||
WSTATE_ROLLEDUP = 00000100b
|
|
||||||
|
|
||||||
WSTATE_REDRAW = 00000001b
|
|
||||||
WSTATE_WNDDRAWN = 00000010b
|
|
||||||
|
|
||||||
WSTYLE_HASCAPTION = 00010000b
|
|
||||||
WSTYLE_CLIENTRELATIVE = 00100000b
|
|
||||||
|
|
||||||
ZPOS_DESKTOP = -2
|
|
||||||
ZPOS_ALWAYS_BACK = -1
|
|
||||||
ZPOS_NORMAL = 0
|
|
||||||
ZPOS_ALWAYS_TOP = 1 ;ZPOS_ALWAYS_TOP is always last and has max number!
|
|
||||||
; structures definition
|
|
||||||
struct WDATA
|
|
||||||
box BOX
|
|
||||||
cl_workarea dd ?
|
|
||||||
cl_titlebar dd ?
|
|
||||||
cl_frames dd ?
|
|
||||||
z_modif db ?
|
|
||||||
fl_wstate db ?
|
|
||||||
fl_wdrawn db ?
|
|
||||||
fl_redraw db ?
|
|
||||||
ends
|
|
||||||
|
|
||||||
label WDATA.fl_wstyle byte at WDATA.cl_workarea + 3
|
|
||||||
|
|
||||||
|
|
||||||
struct SYS_VARS
|
|
||||||
bpp dd ?
|
|
||||||
scanline dd ?
|
|
||||||
vesa_mode dd ?
|
|
||||||
x_res dd ?
|
|
||||||
y_res dd ?
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct APPOBJ ; common object header
|
|
||||||
magic dd ? ;
|
|
||||||
destroy dd ? ; internal destructor
|
|
||||||
fd dd ? ; next object in list
|
|
||||||
bk dd ? ; prev object in list
|
|
||||||
pid dd ? ; owner id
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct CURSOR APPOBJ
|
|
||||||
base dd ? ;allocated memory
|
|
||||||
hot_x dd ? ;hotspot coords
|
|
||||||
hot_y dd ?
|
|
||||||
|
|
||||||
list_next dd ? ;next cursor in cursor list
|
|
||||||
list_prev dd ? ;prev cursor in cursor list
|
|
||||||
dev_obj dd ? ;device depended data
|
|
||||||
ends
|
|
||||||
|
|
||||||
|
|
||||||
struct EVENT APPOBJ
|
|
||||||
id dd ? ;event uid
|
|
||||||
state dd ? ;internal flags
|
|
||||||
code dd ?
|
|
||||||
rd 5
|
|
||||||
ends
|
|
||||||
|
|
||||||
|
|
||||||
struct SMEM
|
|
||||||
bk dd ?
|
|
||||||
fd dd ? ;+4
|
|
||||||
base dd ? ;+8
|
|
||||||
size dd ? ;+12
|
|
||||||
access dd ? ;+16
|
|
||||||
refcount dd ? ;+20
|
|
||||||
name rb 32 ;+24
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct SMAP APPOBJ
|
|
||||||
base dd ? ;mapped base
|
|
||||||
parent dd ? ;SMEM
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct DLLDESCR
|
|
||||||
bk dd ?
|
|
||||||
fd dd ? ;+4
|
|
||||||
data dd ? ;+8
|
|
||||||
size dd ? ;+12
|
|
||||||
timestamp dq ?
|
|
||||||
refcount dd ?
|
|
||||||
defaultbase dd ?
|
|
||||||
coff_hdr dd ?
|
|
||||||
symbols_ptr dd ?
|
|
||||||
symbols_num dd ?
|
|
||||||
symbols_lim dd ?
|
|
||||||
exports dd ? ;export table
|
|
||||||
name rb 260
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct HDLL
|
|
||||||
fd dd ? ;next object in list
|
|
||||||
bk dd ? ;prev object in list
|
|
||||||
pid dd ? ;owner id
|
|
||||||
|
|
||||||
base dd ? ;mapped base
|
|
||||||
size dd ? ;mapped size
|
|
||||||
refcount dd ? ;reference counter for this process and this lib
|
|
||||||
parent dd ? ;DLLDESCR
|
|
||||||
ends
|
|
||||||
|
|
||||||
|
|
||||||
struct BOOT_DATA
|
|
||||||
bpp dd ?
|
|
||||||
scanline dd ?
|
|
||||||
vesa_mode dd ?
|
|
||||||
x_res dd ?
|
|
||||||
y_res dd ?
|
|
||||||
mouse_port dd ?
|
|
||||||
bank_switch dd ?
|
|
||||||
lfb dd ?
|
|
||||||
vesa_mem dd ?
|
|
||||||
log dd ?
|
|
||||||
direct_lfb dd ?
|
|
||||||
pci_data dd ?
|
|
||||||
dd ?
|
|
||||||
vrr dd ?
|
|
||||||
ide_base dd ?
|
|
||||||
mem_amount dd ?
|
|
||||||
pages_count dd ?
|
|
||||||
pagemap_size dd ?
|
|
||||||
kernel_max dd ?
|
|
||||||
kernel_pages dd ?
|
|
||||||
kernel_tables dd ?
|
|
||||||
|
|
||||||
cpu_vendor dd ?
|
|
||||||
dd ?
|
|
||||||
dd ?
|
|
||||||
cpu_sign dd ?
|
|
||||||
cpu_info dd ?
|
|
||||||
cpu_caps dd ?
|
|
||||||
dd ?
|
|
||||||
dd ?
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct display_t
|
|
||||||
x dd ?
|
|
||||||
y dd ?
|
|
||||||
width dd ?
|
|
||||||
height dd ?
|
|
||||||
bits_per_pixel dd ?
|
|
||||||
vrefresh dd ?
|
|
||||||
current_lfb dd ?
|
|
||||||
lfb_pitch dd ?
|
|
||||||
|
|
||||||
win_map_lock RWSEM
|
|
||||||
win_map dd ?
|
|
||||||
win_map_pitch dd ?
|
|
||||||
win_map_size dd ?
|
|
||||||
|
|
||||||
modes dd ?
|
|
||||||
ddev dd ?
|
|
||||||
connector dd ?
|
|
||||||
crtc dd ?
|
|
||||||
|
|
||||||
cr_list.next dd ?
|
|
||||||
cr_list.prev dd ?
|
|
||||||
|
|
||||||
cursor dd ?
|
|
||||||
|
|
||||||
init_cursor dd ?
|
|
||||||
select_cursor dd ?
|
|
||||||
show_cursor dd ?
|
|
||||||
move_cursor dd ?
|
|
||||||
restore_cursor dd ?
|
|
||||||
disable_mouse dd ?
|
|
||||||
mask_seqno dd ?
|
|
||||||
check_mouse dd ?
|
|
||||||
check_m_pixel dd ?
|
|
||||||
|
|
||||||
bytes_per_pixel dd ?
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct DISPMODE
|
|
||||||
width dw ?
|
|
||||||
height dw ?
|
|
||||||
bpp dw ?
|
|
||||||
freq dw ?
|
|
||||||
ends
|
|
||||||
|
|
||||||
|
|
||||||
struct PCIDEV
|
|
||||||
bk dd ?
|
|
||||||
fd dd ?
|
|
||||||
vendor_device_id dd ?
|
|
||||||
class dd ?
|
|
||||||
devfn db ?
|
|
||||||
bus db ?
|
|
||||||
rb 2
|
|
||||||
owner dd ? ; pointer to SRV or 0
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct IDE_DATA
|
|
||||||
ProgrammingInterface dd ?
|
|
||||||
Interrupt dw ?
|
|
||||||
RegsBaseAddres dw ?
|
|
||||||
BAR0_val dw ?
|
|
||||||
BAR1_val dw ?
|
|
||||||
BAR2_val dw ?
|
|
||||||
BAR3_val dw ?
|
|
||||||
dma_hdd_channel_1 db ?
|
|
||||||
dma_hdd_channel_2 db ?
|
|
||||||
pcidev dd ? ; pointer to corresponding PCIDEV structure
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct IDE_CACHE
|
|
||||||
pointer dd ?
|
|
||||||
size dd ? ; not use
|
|
||||||
data_pointer dd ?
|
|
||||||
system_data_size dd ? ; not use
|
|
||||||
appl_data_size dd ? ; not use
|
|
||||||
system_data dd ?
|
|
||||||
appl_data dd ?
|
|
||||||
system_sad_size dd ?
|
|
||||||
appl_sad_size dd ?
|
|
||||||
search_start dd ?
|
|
||||||
appl_search_start dd ?
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct IDE_DEVICE
|
|
||||||
UDMA_possible_modes db ?
|
|
||||||
UDMA_set_mode db ?
|
|
||||||
ends
|
|
||||||
|
|
||||||
; The following macro assume that we are on uniprocessor machine.
|
|
||||||
; Serious work is needed for multiprocessor machines.
|
|
||||||
macro spin_lock_irqsave spinlock
|
|
||||||
{
|
|
||||||
pushf
|
|
||||||
cli
|
|
||||||
}
|
|
||||||
macro spin_unlock_irqrestore spinlock
|
|
||||||
{
|
|
||||||
popf
|
|
||||||
}
|
|
||||||
macro spin_lock_irq spinlock
|
|
||||||
{
|
|
||||||
cli
|
|
||||||
}
|
|
||||||
macro spin_unlock_irq spinlock
|
|
||||||
{
|
|
||||||
sti
|
|
||||||
}
|
|
||||||
|
|
||||||
struct MEM_STATE
|
|
||||||
mutex MUTEX
|
|
||||||
smallmap dd ?
|
|
||||||
treemap dd ?
|
|
||||||
topsize dd ?
|
|
||||||
top dd ?
|
|
||||||
smallbins rd 4*32
|
|
||||||
treebins rd 32
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct PG_DATA
|
|
||||||
mem_amount dd ?
|
|
||||||
vesa_mem dd ?
|
|
||||||
pages_count dd ?
|
|
||||||
pages_free dd ?
|
|
||||||
pages_faults dd ?
|
|
||||||
pagemap_size dd ?
|
|
||||||
kernel_pages dd ?
|
|
||||||
kernel_tables dd ?
|
|
||||||
sys_page_dir dd ?
|
|
||||||
mutex MUTEX
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct SRV
|
|
||||||
srv_name rb 16 ;ASCIIZ string
|
|
||||||
magic dd ? ;+0x10 ;'SRV '
|
|
||||||
size dd ? ;+0x14 ;size of structure SRV
|
|
||||||
fd dd ? ;+0x18 ;next SRV descriptor
|
|
||||||
bk dd ? ;+0x1C ;prev SRV descriptor
|
|
||||||
base dd ? ;+0x20 ;service base address
|
|
||||||
entry dd ? ;+0x24 ;service START function
|
|
||||||
srv_proc dd ? ;+0x28 ;user mode service handler
|
|
||||||
srv_proc_ex dd ? ;+0x2C ;kernel mode service handler
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct USBSRV
|
|
||||||
srv SRV
|
|
||||||
usb_func dd ?
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct USBFUNC
|
|
||||||
strucsize dd ?
|
|
||||||
add_device dd ?
|
|
||||||
device_disconnect dd ?
|
|
||||||
ends
|
|
||||||
|
|
||||||
DRV_ENTRY equ 1
|
|
||||||
DRV_EXIT equ -1
|
|
||||||
|
|
||||||
struct COFF_HEADER
|
|
||||||
machine dw ?
|
|
||||||
nSections dw ?
|
|
||||||
DataTime dd ?
|
|
||||||
pSymTable dd ?
|
|
||||||
nSymbols dd ?
|
|
||||||
optHeader dw ?
|
|
||||||
flags dw ?
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct COFF_SECTION
|
|
||||||
Name rb 8
|
|
||||||
VirtualSize dd ?
|
|
||||||
VirtualAddress dd ?
|
|
||||||
SizeOfRawData dd ?
|
|
||||||
PtrRawData dd ?
|
|
||||||
PtrReloc dd ?
|
|
||||||
PtrLinenumbers dd ?
|
|
||||||
NumReloc dw ?
|
|
||||||
NumLinenum dw ?
|
|
||||||
Characteristics dd ?
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct COFF_RELOC
|
|
||||||
VirtualAddress dd ?
|
|
||||||
SymIndex dd ?
|
|
||||||
Type dw ?
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct COFF_SYM
|
|
||||||
Name rb 8
|
|
||||||
Value dd ?
|
|
||||||
SectionNumber dw ?
|
|
||||||
Type dw ?
|
|
||||||
StorageClass db ?
|
|
||||||
NumAuxSymbols db ?
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct STRIPPED_PE_HEADER
|
|
||||||
Signature dw ?
|
|
||||||
Characteristics dw ?
|
|
||||||
AddressOfEntryPoint dd ?
|
|
||||||
ImageBase dd ?
|
|
||||||
SectionAlignmentLog db ?
|
|
||||||
FileAlignmentLog db ?
|
|
||||||
MajorOSVersion db ?
|
|
||||||
MinorOSVersion db ?
|
|
||||||
SizeOfImage dd ?
|
|
||||||
SizeOfStackReserve dd ?
|
|
||||||
SizeOfHeapReserve dd ?
|
|
||||||
SizeOfHeaders dd ?
|
|
||||||
Subsystem db ?
|
|
||||||
NumberOfRvaAndSizes db ?
|
|
||||||
NumberOfSections dw ?
|
|
||||||
ends
|
|
||||||
STRIPPED_PE_SIGNATURE = 0x4503 ; 'PE' xor 'S'
|
|
||||||
SPE_DIRECTORY_IMPORT = 0
|
|
||||||
SPE_DIRECTORY_EXPORT = 1
|
|
||||||
SPE_DIRECTORY_BASERELOC = 2
|
|
||||||
|
|
||||||
struct IOCTL
|
|
||||||
handle dd ?
|
|
||||||
io_code dd ?
|
|
||||||
input dd ?
|
|
||||||
inp_size dd ?
|
|
||||||
output dd ?
|
|
||||||
out_size dd ?
|
|
||||||
ends
|
|
||||||
|
|
||||||
struct IRQH
|
|
||||||
list LHEAD
|
|
||||||
handler dd ? ;handler roututine
|
|
||||||
data dd ? ;user-specific data
|
|
||||||
num_ints dd ? ;how many times handled
|
|
||||||
ends
|
|
441
fdo.inc
441
fdo.inc
@@ -1,441 +0,0 @@
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
;; ;;
|
|
||||||
;; Copyright (C) KolibriOS team 2004-2015. All rights reserved. ;;
|
|
||||||
;; Distributed under terms of the GNU General Public License ;;
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
|
|
||||||
$Revision: 5363 $
|
|
||||||
|
|
||||||
_esp equ esp
|
|
||||||
|
|
||||||
;
|
|
||||||
; Formatted Debug Output (FDO)
|
|
||||||
; Copyright (c) 2005-2006, mike.dld
|
|
||||||
; Created: 2005-01-29, Changed: 2006-11-10
|
|
||||||
;
|
|
||||||
; For questions and bug reports, mail to mike.dld@gmail.com
|
|
||||||
;
|
|
||||||
; Available format specifiers are: %s, %d, %u, %x (with partial width support)
|
|
||||||
;
|
|
||||||
|
|
||||||
; to be defined:
|
|
||||||
; __DEBUG__ equ 1
|
|
||||||
; __DEBUG_LEVEL__ equ 5
|
|
||||||
|
|
||||||
macro debug_func name {
|
|
||||||
if used name
|
|
||||||
name@of@func equ name
|
|
||||||
}
|
|
||||||
|
|
||||||
macro debug_beginf {
|
|
||||||
align 4
|
|
||||||
name@of@func:
|
|
||||||
}
|
|
||||||
|
|
||||||
debug_endf fix end if
|
|
||||||
|
|
||||||
macro DEBUGS _sign,[_str] {
|
|
||||||
common
|
|
||||||
local tp
|
|
||||||
tp equ 0
|
|
||||||
match _arg:_num,_str \{
|
|
||||||
DEBUGS_N _sign,_num,_arg
|
|
||||||
tp equ 1
|
|
||||||
\}
|
|
||||||
match =0 _arg,tp _str \{
|
|
||||||
DEBUGS_N _sign,,_arg
|
|
||||||
\}
|
|
||||||
}
|
|
||||||
|
|
||||||
macro DEBUGS_N _sign,_num,[_str] {
|
|
||||||
common
|
|
||||||
pushf
|
|
||||||
pushad
|
|
||||||
local ..str,..label,is_str
|
|
||||||
is_str = 0
|
|
||||||
forward
|
|
||||||
if _str eqtype ''
|
|
||||||
is_str = 1
|
|
||||||
end if
|
|
||||||
common
|
|
||||||
if is_str = 1
|
|
||||||
jmp ..label
|
|
||||||
..str db _str,0
|
|
||||||
..label:
|
|
||||||
mov edx, ..str
|
|
||||||
else
|
|
||||||
esp equ esp+4*8+4
|
|
||||||
mov edx, _str
|
|
||||||
esp equ _esp
|
|
||||||
end if
|
|
||||||
if ~_num eq
|
|
||||||
if _num eqtype eax
|
|
||||||
if _num in <eax,ebx,ecx,edx,edi,ebp,esp>
|
|
||||||
mov esi, _num
|
|
||||||
else if ~_num eq esi
|
|
||||||
movzx esi, _num
|
|
||||||
end if
|
|
||||||
else if _num eqtype 0
|
|
||||||
mov esi, _num
|
|
||||||
else
|
|
||||||
local tp
|
|
||||||
tp equ 0
|
|
||||||
match [_arg],_num \{
|
|
||||||
mov esi, dword[_arg]
|
|
||||||
tp equ 1
|
|
||||||
\}
|
|
||||||
match =0 =dword[_arg],tp _num \{
|
|
||||||
mov esi, dword[_arg]
|
|
||||||
tp equ 1
|
|
||||||
\}
|
|
||||||
match =0 =word[_arg],tp _num \{
|
|
||||||
movzx esi, word[_arg]
|
|
||||||
tp equ 1
|
|
||||||
\}
|
|
||||||
match =0 =byte[_arg],tp _num \{
|
|
||||||
movzx esi, byte[_arg]
|
|
||||||
tp equ 1
|
|
||||||
\}
|
|
||||||
match =0,tp \{
|
|
||||||
'Error: specified string width is incorrect'
|
|
||||||
\}
|
|
||||||
end if
|
|
||||||
else
|
|
||||||
mov esi, 0x7FFFFFFF
|
|
||||||
end if
|
|
||||||
call fdo_debug_outstr
|
|
||||||
popad
|
|
||||||
popf
|
|
||||||
}
|
|
||||||
|
|
||||||
macro DEBUGD _sign,_dec {
|
|
||||||
local tp
|
|
||||||
tp equ 0
|
|
||||||
match _arg:_num,_dec \{
|
|
||||||
DEBUGD_N _sign,_num,_arg
|
|
||||||
tp equ 1
|
|
||||||
\}
|
|
||||||
match =0 _arg,tp _dec \{
|
|
||||||
DEBUGD_N _sign,,_arg
|
|
||||||
\}
|
|
||||||
}
|
|
||||||
|
|
||||||
macro DEBUGD_N _sign,_num,_dec {
|
|
||||||
pushf
|
|
||||||
pushad
|
|
||||||
if (~_num eq)
|
|
||||||
if (_dec eqtype eax | _dec eqtype 0)
|
|
||||||
'Error: precision allowed only for in-memory variables'
|
|
||||||
end if
|
|
||||||
if (~_num in <1,2,4>)
|
|
||||||
if _sign
|
|
||||||
'Error: 1, 2 and 4 are only allowed for precision in %d'
|
|
||||||
else
|
|
||||||
'Error: 1, 2 and 4 are only allowed for precision in %u'
|
|
||||||
end if
|
|
||||||
end if
|
|
||||||
end if
|
|
||||||
if _dec eqtype eax
|
|
||||||
if _dec in <ebx,ecx,edx,esi,edi,ebp,esp>
|
|
||||||
mov eax, _dec
|
|
||||||
else if ~_dec eq eax
|
|
||||||
if _sign = 1
|
|
||||||
movsx eax, _dec
|
|
||||||
else
|
|
||||||
movzx eax, _dec
|
|
||||||
end if
|
|
||||||
end if
|
|
||||||
else if _dec eqtype 0
|
|
||||||
mov eax, _dec
|
|
||||||
else
|
|
||||||
; add esp,4*8+4
|
|
||||||
esp equ esp+4*8+4
|
|
||||||
if _num eq
|
|
||||||
mov eax, dword _dec
|
|
||||||
else if _num = 1
|
|
||||||
if _sign = 1
|
|
||||||
movsx eax, byte _dec
|
|
||||||
else
|
|
||||||
movzx eax, byte _dec
|
|
||||||
end if
|
|
||||||
else if _num = 2
|
|
||||||
if _sign = 1
|
|
||||||
movsx eax, word _dec
|
|
||||||
else
|
|
||||||
movzx eax, word _dec
|
|
||||||
end if
|
|
||||||
else
|
|
||||||
mov eax, dword _dec
|
|
||||||
end if
|
|
||||||
esp equ _esp
|
|
||||||
; sub esp,4*8+4
|
|
||||||
end if
|
|
||||||
mov cl, _sign
|
|
||||||
call fdo_debug_outdec
|
|
||||||
popad
|
|
||||||
popf
|
|
||||||
}
|
|
||||||
|
|
||||||
macro DEBUGH _sign,_hex {
|
|
||||||
local tp
|
|
||||||
tp equ 0
|
|
||||||
match _arg:_num,_hex \{
|
|
||||||
DEBUGH_N _sign,_num,_arg
|
|
||||||
tp equ 1
|
|
||||||
\}
|
|
||||||
match =0 _arg,tp _hex \{
|
|
||||||
DEBUGH_N _sign,,_arg
|
|
||||||
\}
|
|
||||||
}
|
|
||||||
|
|
||||||
macro DEBUGH_N _sign,_num,_hex {
|
|
||||||
pushf
|
|
||||||
pushad
|
|
||||||
if (~_num eq) & (~_num in <1,2,3,4,5,6,7,8>)
|
|
||||||
'Error: 1..8 are only allowed for precision in %x'
|
|
||||||
end if
|
|
||||||
if _hex eqtype eax
|
|
||||||
if _hex in <eax,ebx,ecx,edx,esi,edi,ebp,esp>
|
|
||||||
if ~_hex eq eax
|
|
||||||
mov eax, _hex
|
|
||||||
end if
|
|
||||||
mov edx, 8
|
|
||||||
else if _hex in <ax,bx,cx,dx,si,di,bp,sp>
|
|
||||||
if ~_hex eq ax
|
|
||||||
movzx eax, _hex
|
|
||||||
end if
|
|
||||||
if (_num eq)
|
|
||||||
mov edx, 4
|
|
||||||
end if
|
|
||||||
else if _hex in <al,ah,bl,bh,cl,ch,dl,dh>
|
|
||||||
if ~_hex eq al
|
|
||||||
movzx eax, _hex
|
|
||||||
end if
|
|
||||||
if (_num eq)
|
|
||||||
mov edx, 2
|
|
||||||
end if
|
|
||||||
end if
|
|
||||||
else if _hex eqtype 0
|
|
||||||
mov eax, _hex
|
|
||||||
else
|
|
||||||
; add esp,4*8+4
|
|
||||||
esp equ esp+4*8+4
|
|
||||||
mov eax, dword _hex
|
|
||||||
esp equ _esp
|
|
||||||
; sub esp,4*8+4
|
|
||||||
end if
|
|
||||||
if ~_num eq
|
|
||||||
mov edx, _num
|
|
||||||
else
|
|
||||||
if ~_hex eqtype eax
|
|
||||||
mov edx, 8
|
|
||||||
end if
|
|
||||||
end if
|
|
||||||
call fdo_debug_outhex
|
|
||||||
popad
|
|
||||||
popf
|
|
||||||
}
|
|
||||||
|
|
||||||
;-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
debug_func fdo_debug_outchar
|
|
||||||
debug_beginf
|
|
||||||
pushad
|
|
||||||
movzx ecx, al
|
|
||||||
mov ebx, 1
|
|
||||||
call sys_msg_board
|
|
||||||
popad
|
|
||||||
ret
|
|
||||||
debug_endf
|
|
||||||
|
|
||||||
debug_func fdo_debug_outstr
|
|
||||||
debug_beginf
|
|
||||||
mov ebx, 1
|
|
||||||
.l1:
|
|
||||||
dec esi
|
|
||||||
js .l2
|
|
||||||
movzx ecx, byte[edx]
|
|
||||||
or cl, cl
|
|
||||||
jz .l2
|
|
||||||
call sys_msg_board
|
|
||||||
inc edx
|
|
||||||
jmp .l1
|
|
||||||
.l2:
|
|
||||||
ret
|
|
||||||
debug_endf
|
|
||||||
|
|
||||||
debug_func fdo_debug_outdec
|
|
||||||
debug_beginf
|
|
||||||
or cl, cl
|
|
||||||
jz @f
|
|
||||||
or eax, eax
|
|
||||||
jns @f
|
|
||||||
neg eax
|
|
||||||
push eax
|
|
||||||
mov al, '-'
|
|
||||||
call fdo_debug_outchar
|
|
||||||
pop eax
|
|
||||||
@@:
|
|
||||||
movi ecx, 10
|
|
||||||
push -'0'
|
|
||||||
.l1:
|
|
||||||
xor edx, edx
|
|
||||||
div ecx
|
|
||||||
push edx
|
|
||||||
test eax, eax
|
|
||||||
jnz .l1
|
|
||||||
.l2:
|
|
||||||
pop eax
|
|
||||||
add al, '0'
|
|
||||||
jz .l3
|
|
||||||
call fdo_debug_outchar
|
|
||||||
jmp .l2
|
|
||||||
.l3:
|
|
||||||
ret
|
|
||||||
debug_endf
|
|
||||||
|
|
||||||
debug_func fdo_debug_outhex
|
|
||||||
__fdo_hexdigits db '0123456789ABCDEF'
|
|
||||||
debug_beginf
|
|
||||||
mov cl, dl
|
|
||||||
neg cl
|
|
||||||
add cl, 8
|
|
||||||
shl cl, 2
|
|
||||||
rol eax, cl
|
|
||||||
.l1:
|
|
||||||
rol eax, 4
|
|
||||||
push eax
|
|
||||||
and eax, 0x0000000F
|
|
||||||
mov al, [__fdo_hexdigits+eax]
|
|
||||||
call fdo_debug_outchar
|
|
||||||
pop eax
|
|
||||||
dec edx
|
|
||||||
jnz .l1
|
|
||||||
ret
|
|
||||||
debug_endf
|
|
||||||
|
|
||||||
;-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
macro DEBUGF _level,_format,[_arg] {
|
|
||||||
common
|
|
||||||
if __DEBUG__ = 1 & _level >= __DEBUG_LEVEL__
|
|
||||||
local ..f1,f2,a1,a2,c1,c2,c3,..lbl
|
|
||||||
_debug_str_ equ __debug_str_ # a1
|
|
||||||
a1 = 0
|
|
||||||
c2 = 0
|
|
||||||
c3 = 0
|
|
||||||
f2 = 0
|
|
||||||
repeat ..lbl-..f1
|
|
||||||
virtual at 0
|
|
||||||
db _format,0,0
|
|
||||||
load c1 word from %-1
|
|
||||||
end virtual
|
|
||||||
if c1 = '%s'
|
|
||||||
virtual at 0
|
|
||||||
db _format,0,0
|
|
||||||
store word 0 at %-1
|
|
||||||
load c1 from f2-c2
|
|
||||||
end virtual
|
|
||||||
if c1 <> 0
|
|
||||||
DEBUGS 0,_debug_str_+f2-c2
|
|
||||||
end if
|
|
||||||
c2 = c2 + 1
|
|
||||||
f2 = %+1
|
|
||||||
DEBUGF_HELPER S,a1,0,_arg
|
|
||||||
else if c1 = '%x'
|
|
||||||
virtual at 0
|
|
||||||
db _format,0,0
|
|
||||||
store word 0 at %-1
|
|
||||||
load c1 from f2-c2
|
|
||||||
end virtual
|
|
||||||
if c1 <> 0
|
|
||||||
DEBUGS 0,_debug_str_+f2-c2
|
|
||||||
end if
|
|
||||||
c2 = c2 + 1
|
|
||||||
f2 = %+1
|
|
||||||
DEBUGF_HELPER H,a1,0,_arg
|
|
||||||
else if c1 = '%d' | c1 = '%u'
|
|
||||||
local c4
|
|
||||||
if c1 = '%d'
|
|
||||||
c4 = 1
|
|
||||||
else
|
|
||||||
c4 = 0
|
|
||||||
end if
|
|
||||||
virtual at 0
|
|
||||||
db _format,0,0
|
|
||||||
store word 0 at %-1
|
|
||||||
load c1 from f2-c2
|
|
||||||
end virtual
|
|
||||||
if c1 <> 0
|
|
||||||
DEBUGS 0,_debug_str_+f2-c2
|
|
||||||
end if
|
|
||||||
c2 = c2 + 1
|
|
||||||
f2 = %+1
|
|
||||||
DEBUGF_HELPER D,a1,c4,_arg
|
|
||||||
else if c1 = '\n'
|
|
||||||
c3 = c3 + 1
|
|
||||||
end if
|
|
||||||
end repeat
|
|
||||||
virtual at 0
|
|
||||||
db _format,0,0
|
|
||||||
load c1 from f2-c2
|
|
||||||
end virtual
|
|
||||||
if (c1<>0)&(f2<>..lbl-..f1-1)
|
|
||||||
DEBUGS 0,_debug_str_+f2-c2
|
|
||||||
end if
|
|
||||||
virtual at 0
|
|
||||||
..f1 db _format,0
|
|
||||||
..lbl:
|
|
||||||
__debug_strings equ __debug_strings,_debug_str_,<_format>,..lbl-..f1-1-c2-c3
|
|
||||||
end virtual
|
|
||||||
end if
|
|
||||||
}
|
|
||||||
|
|
||||||
macro __include_debug_strings dummy,[_id,_fmt,_len] {
|
|
||||||
common
|
|
||||||
local c1,a1,a2
|
|
||||||
forward
|
|
||||||
if defined _len & ~_len eq
|
|
||||||
_id:
|
|
||||||
a1 = 0
|
|
||||||
a2 = 0
|
|
||||||
repeat _len
|
|
||||||
virtual at 0
|
|
||||||
db _fmt,0,0
|
|
||||||
load c1 word from %+a2-1
|
|
||||||
end virtual
|
|
||||||
if (c1='%s')|(c1='%x')|(c1='%d')|(c1='%u')
|
|
||||||
db 0
|
|
||||||
a2 = a2 + 1
|
|
||||||
else if (c1='\n')
|
|
||||||
dw $0A0D
|
|
||||||
a1 = a1 + 1
|
|
||||||
a2 = a2 + 1
|
|
||||||
else
|
|
||||||
db c1 and 0x0FF
|
|
||||||
end if
|
|
||||||
end repeat
|
|
||||||
db 0
|
|
||||||
end if
|
|
||||||
}
|
|
||||||
|
|
||||||
macro DEBUGF_HELPER _letter,_num,_sign,[_arg] {
|
|
||||||
common
|
|
||||||
local num
|
|
||||||
num = 0
|
|
||||||
forward
|
|
||||||
if num = _num
|
|
||||||
DEBUG#_letter _sign,_arg
|
|
||||||
end if
|
|
||||||
num = num+1
|
|
||||||
common
|
|
||||||
_num = _num+1
|
|
||||||
}
|
|
||||||
|
|
||||||
macro include_debug_strings {
|
|
||||||
if __DEBUG__ = 1
|
|
||||||
match dbg_str,__debug_strings \{
|
|
||||||
__include_debug_strings dbg_str
|
|
||||||
\}
|
|
||||||
end if
|
|
||||||
}
|
|
69
kglobals.inc
69
kglobals.inc
@@ -1,69 +0,0 @@
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
;; ;;
|
|
||||||
;; Copyright (C) KolibriOS team 2004-2015. All rights reserved. ;;
|
|
||||||
;; Distributed under terms of the GNU General Public License ;;
|
|
||||||
;; ;;
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
|
|
||||||
$Revision: 5363 $
|
|
||||||
|
|
||||||
|
|
||||||
;------------------------------------------------------------------
|
|
||||||
; use "iglobal" for inserting initialized global data definitions.
|
|
||||||
;------------------------------------------------------------------
|
|
||||||
macro iglobal {
|
|
||||||
IGlobals equ IGlobals,
|
|
||||||
macro __IGlobalBlock { }
|
|
||||||
|
|
||||||
macro iglobal_nested {
|
|
||||||
IGlobals equ IGlobals,
|
|
||||||
macro __IGlobalBlock \{ }
|
|
||||||
|
|
||||||
;-------------------------------------------------------------
|
|
||||||
; use 'uglobal' for inserting uninitialized global definitions.
|
|
||||||
; even when you define some data values, these variables
|
|
||||||
; will be stored as uninitialized data.
|
|
||||||
;-------------------------------------------------------------
|
|
||||||
macro uglobal {
|
|
||||||
UGlobals equ UGlobals,
|
|
||||||
macro __UGlobalBlock { }
|
|
||||||
|
|
||||||
macro uglobal_nested {
|
|
||||||
UGlobals equ UGlobals,
|
|
||||||
macro __UGlobalBlock \{ }
|
|
||||||
|
|
||||||
endg fix } ; Use endg for ending iglobal and uglobal blocks.
|
|
||||||
endg_nested fix \}
|
|
||||||
|
|
||||||
macro IncludeIGlobals{
|
|
||||||
macro IGlobals dummy,[n] \{ __IGlobalBlock
|
|
||||||
purge __IGlobalBlock \}
|
|
||||||
match I, IGlobals \{ I \} }
|
|
||||||
|
|
||||||
|
|
||||||
macro IncludeUGlobals{
|
|
||||||
macro UGlobals dummy,[n] \{
|
|
||||||
\common
|
|
||||||
\local begin, size
|
|
||||||
begin = $
|
|
||||||
virtual at $
|
|
||||||
\forward
|
|
||||||
__UGlobalBlock
|
|
||||||
purge __UGlobalBlock
|
|
||||||
\common
|
|
||||||
size = $ - begin
|
|
||||||
end virtual
|
|
||||||
rb size
|
|
||||||
\}
|
|
||||||
match U, UGlobals \{ U \} }
|
|
||||||
|
|
||||||
macro IncludeAllGlobals {
|
|
||||||
IncludeIGlobals
|
|
||||||
IncludeUGlobals
|
|
||||||
}
|
|
||||||
|
|
||||||
iglobal
|
|
||||||
endg
|
|
||||||
|
|
||||||
uglobal
|
|
||||||
endg
|
|
@@ -3,9 +3,9 @@ format ELF
|
|||||||
__DEBUG__ = 1
|
__DEBUG__ = 1
|
||||||
__DEBUG_LEVEL__ = 1
|
__DEBUG_LEVEL__ = 1
|
||||||
|
|
||||||
|
include 'macros.inc'
|
||||||
include 'proc32.inc'
|
include 'proc32.inc'
|
||||||
include 'struct.inc'
|
include 'struct.inc'
|
||||||
include 'macros.inc'
|
|
||||||
include 'const.inc'
|
include 'const.inc'
|
||||||
include 'system.inc'
|
include 'system.inc'
|
||||||
include 'debug-fdo.inc'
|
include 'debug-fdo.inc'
|
||||||
|
6
kofu.c
6
kofu.c
@@ -1,6 +1,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
@@ -14,6 +15,11 @@ void prompt() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
|
if (argc != 2) {
|
||||||
|
printf("usage: kofu <file.xfs>\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
char cmd_buf[4096];
|
char cmd_buf[4096];
|
||||||
int fd = open(argv[1], O_RDONLY);
|
int fd = open(argv[1], O_RDONLY);
|
||||||
kos_fuse_init(fd);
|
kos_fuse_init(fd);
|
||||||
|
99
macros.inc
99
macros.inc
@@ -1,99 +0,0 @@
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
;; ;;
|
|
||||||
;; Copyright (C) KolibriOS team 2004-2015. All rights reserved. ;;
|
|
||||||
;; Distributed under terms of the GNU General Public License ;;
|
|
||||||
;; ;;
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
|
|
||||||
__REV = 0
|
|
||||||
|
|
||||||
macro $Revision a {
|
|
||||||
match =: Num =$,a \{
|
|
||||||
if __REV < Num
|
|
||||||
__REV = Num
|
|
||||||
end if
|
|
||||||
\}
|
|
||||||
}
|
|
||||||
|
|
||||||
$Revision: 5788 $
|
|
||||||
|
|
||||||
|
|
||||||
;// mike.dld, 2006-29-01 [
|
|
||||||
|
|
||||||
; macros definition
|
|
||||||
macro diff16 title,l1,l2
|
|
||||||
{
|
|
||||||
local s,d
|
|
||||||
s = l2-l1
|
|
||||||
display title,': 0x'
|
|
||||||
repeat 16
|
|
||||||
d = 48 + s shr ((16-%) shl 2) and $0F
|
|
||||||
if d > 57
|
|
||||||
d = d + 65-57-1
|
|
||||||
end if
|
|
||||||
display d
|
|
||||||
end repeat
|
|
||||||
display 13,10
|
|
||||||
}
|
|
||||||
macro diff10 title,l1,l2
|
|
||||||
{
|
|
||||||
local s,d,z,m
|
|
||||||
s = l2-l1
|
|
||||||
z = 0
|
|
||||||
m = 1000000000
|
|
||||||
display title,': '
|
|
||||||
repeat 10
|
|
||||||
d = '0' + s / m
|
|
||||||
s = s - (s/m)*m
|
|
||||||
m = m / 10
|
|
||||||
if d <> '0'
|
|
||||||
z = 1
|
|
||||||
end if
|
|
||||||
if z <> 0
|
|
||||||
display d
|
|
||||||
end if
|
|
||||||
end repeat
|
|
||||||
display 13,10
|
|
||||||
}
|
|
||||||
|
|
||||||
include 'kglobals.inc'
|
|
||||||
|
|
||||||
; \begin{diamond}[29.09.2006]
|
|
||||||
; may be useful for kernel debugging
|
|
||||||
; example 1:
|
|
||||||
; dbgstr 'Hello, World!'
|
|
||||||
; example 2:
|
|
||||||
; dbgstr 'Hello, World!', save_flags
|
|
||||||
macro dbgstr string*, f
|
|
||||||
{
|
|
||||||
local a
|
|
||||||
iglobal_nested
|
|
||||||
a db 'K : ',string,13,10,0
|
|
||||||
endg_nested
|
|
||||||
if ~ f eq
|
|
||||||
pushfd
|
|
||||||
end if
|
|
||||||
push esi
|
|
||||||
mov esi, a
|
|
||||||
call sys_msg_board_str
|
|
||||||
pop esi
|
|
||||||
if ~ f eq
|
|
||||||
popfd
|
|
||||||
end if
|
|
||||||
}
|
|
||||||
; \end{diamond}[29.09.2006]
|
|
||||||
|
|
||||||
|
|
||||||
; MOV Immediate.
|
|
||||||
; Useful for things like movi eax,10:
|
|
||||||
; shorter than regular mov, but slightly slower,
|
|
||||||
; do not use it in performance-critical places.
|
|
||||||
macro movi dst, imm
|
|
||||||
{
|
|
||||||
if imm >= -0x80 & imm <= 0x7F
|
|
||||||
push imm
|
|
||||||
pop dst
|
|
||||||
else
|
|
||||||
mov dst, imm
|
|
||||||
end if
|
|
||||||
}
|
|
13
makefile
13
makefile
@@ -1,17 +1,18 @@
|
|||||||
FASM=fasm
|
FASM=fasm
|
||||||
CC=gcc -m32
|
CC=gcc
|
||||||
CFLAGS=-Wall -g3 -O0 -D_FILE_OFFSET_BITS=64
|
CFLAGS=-m32 -Wall -Wextra -g -O0 -D_FILE_OFFSET_BITS=64
|
||||||
|
LDFLAGS=-m32
|
||||||
|
|
||||||
all: kofu kofuse
|
all: kofu kofuse
|
||||||
|
|
||||||
kofu: kofu.o kocdecl.o
|
kofu: kofu.o kocdecl.o
|
||||||
$(CC) $^ -o $@
|
$(CC) $(LDFLAGS) $^ -o $@
|
||||||
|
|
||||||
kofuse: kofuse.o kocdecl.o
|
kofuse: kofuse.o kocdecl.o
|
||||||
$(CC) $^ -o $@ `pkg-config fuse3 --libs`
|
$(CC) $(LDFLAGS) $^ -o $@ `pkg-config fuse3 --libs`
|
||||||
|
|
||||||
kocdecl.o: kocdecl.asm xfs.inc xfs.asm
|
kocdecl.o: kocdecl.asm $(KERNEL_TRUNK)/fs/xfs.inc $(KERNEL_TRUNK)/fs/xfs.asm
|
||||||
$(FASM) $< $@
|
INCLUDE="$(KERNEL_TRUNK);$(KERNEL_TRUNK)/fs" $(FASM) $< $@
|
||||||
|
|
||||||
kofu.o: kofu.c kocdecl.h
|
kofu.o: kofu.c kocdecl.h
|
||||||
$(CC) $(CFLAGS) -c $<
|
$(CC) $(CFLAGS) -c $<
|
||||||
|
270
proc32.inc
270
proc32.inc
@@ -1,270 +0,0 @@
|
|||||||
|
|
||||||
; Macroinstructions for defining and calling procedures
|
|
||||||
|
|
||||||
macro stdcall proc,[arg] ; directly call STDCALL procedure
|
|
||||||
{ common
|
|
||||||
if ~ arg eq
|
|
||||||
reverse
|
|
||||||
pushd arg
|
|
||||||
common
|
|
||||||
end if
|
|
||||||
call proc }
|
|
||||||
|
|
||||||
macro invoke proc,[arg] ; indirectly call STDCALL procedure
|
|
||||||
{ common
|
|
||||||
if ~ arg eq
|
|
||||||
reverse
|
|
||||||
pushd arg
|
|
||||||
common
|
|
||||||
end if
|
|
||||||
call [proc] }
|
|
||||||
|
|
||||||
macro ccall proc,[arg] ; directly call CDECL procedure
|
|
||||||
{ common
|
|
||||||
size@ccall = 0
|
|
||||||
if ~ arg eq
|
|
||||||
reverse
|
|
||||||
pushd arg
|
|
||||||
size@ccall = size@ccall+4
|
|
||||||
common
|
|
||||||
end if
|
|
||||||
call proc
|
|
||||||
if size@ccall
|
|
||||||
add esp,size@ccall
|
|
||||||
end if }
|
|
||||||
|
|
||||||
macro cinvoke proc,[arg] ; indirectly call CDECL procedure
|
|
||||||
{ common
|
|
||||||
size@ccall = 0
|
|
||||||
if ~ arg eq
|
|
||||||
reverse
|
|
||||||
pushd arg
|
|
||||||
size@ccall = size@ccall+4
|
|
||||||
common
|
|
||||||
end if
|
|
||||||
call [proc]
|
|
||||||
if size@ccall
|
|
||||||
add esp,size@ccall
|
|
||||||
end if }
|
|
||||||
|
|
||||||
macro proc [args] ; define procedure
|
|
||||||
{ common
|
|
||||||
match name params, args>
|
|
||||||
\{ define@proc name,<params \} }
|
|
||||||
|
|
||||||
prologue@proc equ prologuedef
|
|
||||||
|
|
||||||
macro prologuedef procname,flag,parmbytes,localbytes,reglist
|
|
||||||
{ if parmbytes | localbytes
|
|
||||||
push ebp
|
|
||||||
mov ebp,esp
|
|
||||||
if localbytes
|
|
||||||
sub esp,localbytes
|
|
||||||
end if
|
|
||||||
end if
|
|
||||||
irps reg, reglist \{ push reg \} }
|
|
||||||
|
|
||||||
epilogue@proc equ epiloguedef
|
|
||||||
|
|
||||||
macro epiloguedef procname,flag,parmbytes,localbytes,reglist
|
|
||||||
{ irps reg, reglist \{ reverse pop reg \}
|
|
||||||
if parmbytes | localbytes
|
|
||||||
leave
|
|
||||||
end if
|
|
||||||
if flag and 10000b
|
|
||||||
retn
|
|
||||||
else
|
|
||||||
retn parmbytes
|
|
||||||
end if }
|
|
||||||
|
|
||||||
macro define@proc name,statement
|
|
||||||
{ local params,flag,regs,parmbytes,localbytes,current
|
|
||||||
if used name
|
|
||||||
name:
|
|
||||||
match =stdcall args, statement \{ params equ args
|
|
||||||
flag = 11b \}
|
|
||||||
match =stdcall, statement \{ params equ
|
|
||||||
flag = 11b \}
|
|
||||||
match =c args, statement \{ params equ args
|
|
||||||
flag = 10001b \}
|
|
||||||
match =c, statement \{ params equ
|
|
||||||
flag = 10001b \}
|
|
||||||
match =params, params \{ params equ statement
|
|
||||||
flag = 0 \}
|
|
||||||
virtual at ebp+8
|
|
||||||
match =uses reglist=,args, params \{ regs equ reglist
|
|
||||||
params equ args \}
|
|
||||||
match =regs =uses reglist, regs params \{ regs equ reglist
|
|
||||||
params equ \}
|
|
||||||
match =regs, regs \{ regs equ \}
|
|
||||||
match =,args, params \{ defargs@proc args \}
|
|
||||||
match =args@proc args, args@proc params \{ defargs@proc args \}
|
|
||||||
parmbytes = $ - (ebp+8)
|
|
||||||
end virtual
|
|
||||||
name # % = parmbytes/4
|
|
||||||
all@vars equ
|
|
||||||
current = 0
|
|
||||||
match prologue:reglist, prologue@proc:<regs> \{ prologue name,flag,parmbytes,localbytes,reglist \}
|
|
||||||
macro locals
|
|
||||||
\{ virtual at ebp-localbytes+current
|
|
||||||
macro label def \\{ match . type,def> \\\{ deflocal@proc .,label,<type \\\} \\}
|
|
||||||
struc db [val] \\{ \common deflocal@proc .,db,val \\}
|
|
||||||
struc du [val] \\{ \common deflocal@proc .,du,val \\}
|
|
||||||
struc dw [val] \\{ \common deflocal@proc .,dw,val \\}
|
|
||||||
struc dp [val] \\{ \common deflocal@proc .,dp,val \\}
|
|
||||||
struc dd [val] \\{ \common deflocal@proc .,dd,val \\}
|
|
||||||
struc dt [val] \\{ \common deflocal@proc .,dt,val \\}
|
|
||||||
struc dq [val] \\{ \common deflocal@proc .,dq,val \\}
|
|
||||||
struc rb cnt \\{ deflocal@proc .,rb cnt, \\}
|
|
||||||
struc rw cnt \\{ deflocal@proc .,rw cnt, \\}
|
|
||||||
struc rp cnt \\{ deflocal@proc .,rp cnt, \\}
|
|
||||||
struc rd cnt \\{ deflocal@proc .,rd cnt, \\}
|
|
||||||
struc rt cnt \\{ deflocal@proc .,rt cnt, \\}
|
|
||||||
struc rq cnt \\{ deflocal@proc .,rq cnt, \\} \}
|
|
||||||
macro endl
|
|
||||||
\{ purge label
|
|
||||||
restruc db,du,dw,dp,dd,dt,dq
|
|
||||||
restruc rb,rw,rp,rd,rt,rq
|
|
||||||
current = $-(ebp-localbytes)
|
|
||||||
end virtual \}
|
|
||||||
macro ret operand
|
|
||||||
\{ match any, operand \\{ retn operand \\}
|
|
||||||
match , operand \\{ match epilogue:reglist, epilogue@proc:<regs>
|
|
||||||
\\\{ epilogue name,flag,parmbytes,localbytes,reglist \\\} \\} \}
|
|
||||||
macro finish@proc \{ localbytes = (((current-1) shr 2)+1) shl 2
|
|
||||||
end if \} }
|
|
||||||
|
|
||||||
macro defargs@proc [arg]
|
|
||||||
{ common
|
|
||||||
if ~ arg eq
|
|
||||||
forward
|
|
||||||
local ..arg,current@arg
|
|
||||||
match argname:type, arg
|
|
||||||
\{ current@arg equ argname
|
|
||||||
label ..arg type
|
|
||||||
argname equ ..arg
|
|
||||||
if dqword eq type
|
|
||||||
dd ?,?,?,?
|
|
||||||
else if tbyte eq type
|
|
||||||
dd ?,?,?
|
|
||||||
else if qword eq type | pword eq type
|
|
||||||
dd ?,?
|
|
||||||
else
|
|
||||||
dd ?
|
|
||||||
end if \}
|
|
||||||
match =current@arg,current@arg
|
|
||||||
\{ current@arg equ arg
|
|
||||||
arg equ ..arg
|
|
||||||
..arg dd ? \}
|
|
||||||
common
|
|
||||||
args@proc equ current@arg
|
|
||||||
forward
|
|
||||||
restore current@arg
|
|
||||||
common
|
|
||||||
end if }
|
|
||||||
|
|
||||||
macro deflocal@proc name,def,[val]
|
|
||||||
{ common
|
|
||||||
match vars, all@vars \{ all@vars equ all@vars, \}
|
|
||||||
all@vars equ all@vars name
|
|
||||||
forward
|
|
||||||
local ..var,..tmp
|
|
||||||
match =label,def \{ ..tmp equ \}
|
|
||||||
match tmp,..tmp \{ ..var def val \}
|
|
||||||
match ,..tmp \{ label ..var val \}
|
|
||||||
match =?, val \{ ..tmp equ \}
|
|
||||||
match any =dup (=?), val \{ ..tmp equ \}
|
|
||||||
match tmp : value, ..tmp : val
|
|
||||||
\{ tmp: end virtual
|
|
||||||
initlocal@proc ..var,def value
|
|
||||||
virtual at tmp\}
|
|
||||||
common
|
|
||||||
match first rest, ..var, \{ name equ first \} }
|
|
||||||
|
|
||||||
macro initlocal@proc name,def
|
|
||||||
{ virtual at name
|
|
||||||
def
|
|
||||||
size@initlocal = $ - name
|
|
||||||
end virtual
|
|
||||||
position@initlocal = 0
|
|
||||||
while size@initlocal > position@initlocal
|
|
||||||
virtual at name
|
|
||||||
def
|
|
||||||
if size@initlocal - position@initlocal < 2
|
|
||||||
current@initlocal = 1
|
|
||||||
load byte@initlocal byte from name+position@initlocal
|
|
||||||
else if size@initlocal - position@initlocal < 4
|
|
||||||
current@initlocal = 2
|
|
||||||
load word@initlocal word from name+position@initlocal
|
|
||||||
else
|
|
||||||
current@initlocal = 4
|
|
||||||
load dword@initlocal dword from name+position@initlocal
|
|
||||||
end if
|
|
||||||
end virtual
|
|
||||||
if current@initlocal = 1
|
|
||||||
mov byte [name+position@initlocal],byte@initlocal
|
|
||||||
else if current@initlocal = 2
|
|
||||||
mov word [name+position@initlocal],word@initlocal
|
|
||||||
else
|
|
||||||
mov dword [name+position@initlocal],dword@initlocal
|
|
||||||
end if
|
|
||||||
position@initlocal = position@initlocal + current@initlocal
|
|
||||||
end while }
|
|
||||||
|
|
||||||
macro endp
|
|
||||||
{ purge ret,locals,endl
|
|
||||||
finish@proc
|
|
||||||
purge finish@proc
|
|
||||||
restore regs@proc
|
|
||||||
match all,args@proc \{ restore all \}
|
|
||||||
restore args@proc
|
|
||||||
match all,all@vars \{ restore all \} }
|
|
||||||
|
|
||||||
macro local [var]
|
|
||||||
{ common
|
|
||||||
locals
|
|
||||||
forward done@local equ
|
|
||||||
match varname[count]:vartype, var
|
|
||||||
\{ match =BYTE, vartype \\{ varname rb count
|
|
||||||
restore done@local \\}
|
|
||||||
match =WORD, vartype \\{ varname rw count
|
|
||||||
restore done@local \\}
|
|
||||||
match =DWORD, vartype \\{ varname rd count
|
|
||||||
restore done@local \\}
|
|
||||||
match =PWORD, vartype \\{ varname rp count
|
|
||||||
restore done@local \\}
|
|
||||||
match =QWORD, vartype \\{ varname rq count
|
|
||||||
restore done@local \\}
|
|
||||||
match =TBYTE, vartype \\{ varname rt count
|
|
||||||
restore done@local \\}
|
|
||||||
match =DQWORD, vartype \\{ label varname dqword
|
|
||||||
rq count+count
|
|
||||||
restore done@local \\}
|
|
||||||
match , done@local \\{ virtual
|
|
||||||
varname vartype
|
|
||||||
end virtual
|
|
||||||
rb count*sizeof.\#vartype
|
|
||||||
restore done@local \\} \}
|
|
||||||
match :varname:vartype, done@local:var
|
|
||||||
\{ match =BYTE, vartype \\{ varname db ?
|
|
||||||
restore done@local \\}
|
|
||||||
match =WORD, vartype \\{ varname dw ?
|
|
||||||
restore done@local \\}
|
|
||||||
match =DWORD, vartype \\{ varname dd ?
|
|
||||||
restore done@local \\}
|
|
||||||
match =PWORD, vartype \\{ varname dp ?
|
|
||||||
restore done@local \\}
|
|
||||||
match =QWORD, vartype \\{ varname dq ?
|
|
||||||
restore done@local \\}
|
|
||||||
match =TBYTE, vartype \\{ varname dt ?
|
|
||||||
restore done@local \\}
|
|
||||||
match =DQWORD, vartype \\{ label varname dqword
|
|
||||||
dq ?,?
|
|
||||||
restore done@local \\}
|
|
||||||
match , done@local \\{ varname vartype
|
|
||||||
restore done@local \\} \}
|
|
||||||
match ,done@local
|
|
||||||
\{ var
|
|
||||||
restore done@local \}
|
|
||||||
common
|
|
||||||
endl }
|
|
180
struct.inc
180
struct.inc
@@ -1,180 +0,0 @@
|
|||||||
|
|
||||||
; Macroinstructions for defining data structures
|
|
||||||
|
|
||||||
macro struct name
|
|
||||||
{ fields@struct equ name
|
|
||||||
match child parent, name \{ fields@struct equ child,fields@\#parent \}
|
|
||||||
sub@struct equ
|
|
||||||
struc db [val] \{ \common fields@struct equ fields@struct,.,db,<val> \}
|
|
||||||
struc dw [val] \{ \common fields@struct equ fields@struct,.,dw,<val> \}
|
|
||||||
struc du [val] \{ \common fields@struct equ fields@struct,.,du,<val> \}
|
|
||||||
struc dd [val] \{ \common fields@struct equ fields@struct,.,dd,<val> \}
|
|
||||||
struc dp [val] \{ \common fields@struct equ fields@struct,.,dp,<val> \}
|
|
||||||
struc dq [val] \{ \common fields@struct equ fields@struct,.,dq,<val> \}
|
|
||||||
struc dt [val] \{ \common fields@struct equ fields@struct,.,dt,<val> \}
|
|
||||||
struc rb count \{ fields@struct equ fields@struct,.,db,count dup (?) \}
|
|
||||||
struc rw count \{ fields@struct equ fields@struct,.,dw,count dup (?) \}
|
|
||||||
struc rd count \{ fields@struct equ fields@struct,.,dd,count dup (?) \}
|
|
||||||
struc rp count \{ fields@struct equ fields@struct,.,dp,count dup (?) \}
|
|
||||||
struc rq count \{ fields@struct equ fields@struct,.,dq,count dup (?) \}
|
|
||||||
struc rt count \{ fields@struct equ fields@struct,.,dt,count dup (?) \}
|
|
||||||
macro db [val] \{ \common \local anonymous
|
|
||||||
fields@struct equ fields@struct,anonymous,db,<val> \}
|
|
||||||
macro dw [val] \{ \common \local anonymous
|
|
||||||
fields@struct equ fields@struct,anonymous,dw,<val> \}
|
|
||||||
macro du [val] \{ \common \local anonymous
|
|
||||||
fields@struct equ fields@struct,anonymous,du,<val> \}
|
|
||||||
macro dd [val] \{ \common \local anonymous
|
|
||||||
fields@struct equ fields@struct,anonymous,dd,<val> \}
|
|
||||||
macro dp [val] \{ \common \local anonymous
|
|
||||||
fields@struct equ fields@struct,anonymous,dp,<val> \}
|
|
||||||
macro dq [val] \{ \common \local anonymous
|
|
||||||
fields@struct equ fields@struct,anonymous,dq,<val> \}
|
|
||||||
macro dt [val] \{ \common \local anonymous
|
|
||||||
fields@struct equ fields@struct,anonymous,dt,<val> \}
|
|
||||||
macro rb count \{ \local anonymous
|
|
||||||
fields@struct equ fields@struct,anonymous,db,count dup (?) \}
|
|
||||||
macro rw count \{ \local anonymous
|
|
||||||
fields@struct equ fields@struct,anonymous,dw,count dup (?) \}
|
|
||||||
macro rd count \{ \local anonymous
|
|
||||||
fields@struct equ fields@struct,anonymous,dd,count dup (?) \}
|
|
||||||
macro rp count \{ \local anonymous
|
|
||||||
fields@struct equ fields@struct,anonymous,dp,count dup (?) \}
|
|
||||||
macro rq count \{ \local anonymous
|
|
||||||
fields@struct equ fields@struct,anonymous,dq,count dup (?) \}
|
|
||||||
macro rt count \{ \local anonymous
|
|
||||||
fields@struct equ fields@struct,anonymous,dt,count dup (?) \}
|
|
||||||
macro union \{ fields@struct equ fields@struct,,union,<
|
|
||||||
sub@struct equ union \}
|
|
||||||
macro struct \{ fields@struct equ fields@struct,,substruct,<
|
|
||||||
sub@struct equ substruct \}
|
|
||||||
virtual at 0 }
|
|
||||||
|
|
||||||
macro ends
|
|
||||||
{ match , sub@struct \{ restruc db,dw,du,dd,dp,dq,dt
|
|
||||||
restruc rb,rw,rd,rp,rq,rt
|
|
||||||
purge db,dw,du,dd,dp,dq,dt
|
|
||||||
purge rb,rw,rd,rp,rq,rt
|
|
||||||
purge union,struct
|
|
||||||
match name=,fields,fields@struct \\{ fields@struct equ
|
|
||||||
make@struct name,fields
|
|
||||||
fields@\\#name equ fields \\}
|
|
||||||
end virtual \}
|
|
||||||
match any, sub@struct \{ fields@struct equ fields@struct> \}
|
|
||||||
restore sub@struct }
|
|
||||||
|
|
||||||
macro make@struct name,[field,type,def]
|
|
||||||
{ common
|
|
||||||
if $
|
|
||||||
display 'Error: definition of ',`name,' contains illegal instructions.',0Dh,0Ah
|
|
||||||
err
|
|
||||||
end if
|
|
||||||
local define
|
|
||||||
define equ name
|
|
||||||
forward
|
|
||||||
local sub
|
|
||||||
match , field \{ make@substruct type,name,sub def
|
|
||||||
define equ define,.,sub, \}
|
|
||||||
match any, field \{ define equ define,.#field,type,<def> \}
|
|
||||||
common
|
|
||||||
match fields, define \{ define@struct fields \} }
|
|
||||||
|
|
||||||
macro define@struct name,[field,type,def]
|
|
||||||
{ common
|
|
||||||
local list
|
|
||||||
list equ
|
|
||||||
forward
|
|
||||||
if ~ field eq .
|
|
||||||
name#field type def
|
|
||||||
sizeof.#name#field = $ - name#field
|
|
||||||
else
|
|
||||||
rb sizeof.#type
|
|
||||||
end if
|
|
||||||
local value
|
|
||||||
match any, list \{ list equ list, \}
|
|
||||||
list equ list <value>
|
|
||||||
common
|
|
||||||
sizeof.#name = $
|
|
||||||
restruc name
|
|
||||||
match values, list \{
|
|
||||||
struc name value \\{
|
|
||||||
match any, fields@struct \\\{ fields@struct equ fields@struct,.,name,<values> \\\}
|
|
||||||
match , fields@struct \\\{ label .
|
|
||||||
forward
|
|
||||||
match , value \\\\{ field type def \\\\}
|
|
||||||
match any, value \\\\{ field type value
|
|
||||||
if ~ field eq .
|
|
||||||
rb sizeof.#name#field - ($-field)
|
|
||||||
end if \\\\}
|
|
||||||
common \\\} \\} \} }
|
|
||||||
|
|
||||||
macro enable@substruct
|
|
||||||
{ macro make@substruct substruct,parent,name,[field,type,def]
|
|
||||||
\{ \common
|
|
||||||
\local define
|
|
||||||
define equ parent,name
|
|
||||||
\forward
|
|
||||||
\local sub
|
|
||||||
match , field \\{ match any, type \\\{ enable@substruct
|
|
||||||
make@substruct type,name,sub def
|
|
||||||
purge make@substruct
|
|
||||||
define equ define,.,sub, \\\} \\}
|
|
||||||
match any, field \\{ define equ define,.\#field,type,<def> \\}
|
|
||||||
\common
|
|
||||||
match fields, define \\{ define@\#substruct fields \\} \} }
|
|
||||||
|
|
||||||
enable@substruct
|
|
||||||
|
|
||||||
macro define@union parent,name,[field,type,def]
|
|
||||||
{ common
|
|
||||||
virtual at 0
|
|
||||||
forward
|
|
||||||
if ~ field eq .
|
|
||||||
virtual at 0
|
|
||||||
parent#field type def
|
|
||||||
sizeof.#parent#field = $ - parent#field
|
|
||||||
end virtual
|
|
||||||
if sizeof.#parent#field > $
|
|
||||||
rb sizeof.#parent#field - $
|
|
||||||
end if
|
|
||||||
else if sizeof.#type > $
|
|
||||||
rb sizeof.#type - $
|
|
||||||
end if
|
|
||||||
common
|
|
||||||
sizeof.#name = $
|
|
||||||
end virtual
|
|
||||||
struc name [value] \{ \common
|
|
||||||
label .\#name
|
|
||||||
last@union equ
|
|
||||||
forward
|
|
||||||
match any, last@union \\{ virtual at .\#name
|
|
||||||
field type def
|
|
||||||
end virtual \\}
|
|
||||||
match , last@union \\{ match , value \\\{ field type def \\\}
|
|
||||||
match any, value \\\{ field type value \\\} \\}
|
|
||||||
last@union equ field
|
|
||||||
common rb sizeof.#name - ($ - .\#name) \} }
|
|
||||||
|
|
||||||
macro define@substruct parent,name,[field,type,def]
|
|
||||||
{ common
|
|
||||||
virtual at 0
|
|
||||||
forward
|
|
||||||
if ~ field eq .
|
|
||||||
parent#field type def
|
|
||||||
sizeof.#parent#field = $ - parent#field
|
|
||||||
else
|
|
||||||
rb sizeof.#type
|
|
||||||
end if
|
|
||||||
local value
|
|
||||||
common
|
|
||||||
sizeof.#name = $
|
|
||||||
end virtual
|
|
||||||
struc name value \{
|
|
||||||
label .\#name
|
|
||||||
forward
|
|
||||||
match , value \\{ field type def \\}
|
|
||||||
match any, value \\{ field type value
|
|
||||||
if ~ field eq .
|
|
||||||
rb sizeof.#parent#field - ($-field)
|
|
||||||
end if \\}
|
|
||||||
common \} }
|
|
Reference in New Issue
Block a user