From 7dc01ee8887876157f817ac26c7c9de86ff01b94 Mon Sep 17 00:00:00 2001 From: CleverMouse Date: Wed, 20 Aug 2014 10:11:50 +0000 Subject: [PATCH] convert tmpdisk and ps2mouse to PE git-svn-id: svn://kolibrios.org@5044 a494cfbc-eb01-0410-851d-a64ba20cac60 --- data/eng/Makefile | 4 +- data/eng/Makefile.pestrip | 2 +- data/et/Makefile | 4 +- data/et/Makefile.pestrip | 2 +- data/it/Makefile | 4 +- data/it/Makefile.pestrip | 2 +- data/rus/Makefile | 4 +- data/rus/Makefile.pestrip | 2 +- data/sp/Makefile | 4 +- data/sp/Makefile.pestrip | 2 +- .../drivers => drivers/disk}/tmpdisk.asm | 87 ++-- .../drivers => drivers/disk}/tmpdisk_fat.inc | 0 .../drivers => drivers/disk}/tmpdisk_work.inc | 2 +- .../mouse/ps2mouse4d/trunk/ps2m_iofuncs.inc | 2 +- drivers/mouse/ps2mouse4d/trunk/ps2m_irqh.inc | 2 +- drivers/mouse/ps2mouse4d/trunk/ps2mouse.asm | 45 +- drivers/video/vidintel.asm | 4 +- kernel/trunk/data32.inc | 2 +- kernel/trunk/drivers/vidintel.asm | 465 ------------------ kernel/trunk/kernel.asm | 2 +- 20 files changed, 66 insertions(+), 575 deletions(-) rename {kernel/trunk/drivers => drivers/disk}/tmpdisk.asm (86%) rename {kernel/trunk/drivers => drivers/disk}/tmpdisk_fat.inc (100%) rename {kernel/trunk/drivers => drivers/disk}/tmpdisk_work.inc (99%) delete mode 100644 kernel/trunk/drivers/vidintel.asm diff --git a/data/eng/Makefile b/data/eng/Makefile index c6515c2f7d..83dd400173 100644 --- a/data/eng/Makefile +++ b/data/eng/Makefile @@ -127,11 +127,9 @@ FASM_PROGRAMS:=\ drivers/fm801.obj:DRIVERS/FM801.OBJ:$(KERNEL)/drivers/fm801.asm \ drivers/infinity.obj:DRIVERS/INFINITY.OBJ:$(KERNEL)/drivers/infinity.asm \ drivers/intel_hda.obj:DRIVERS/intel_hda.obj:$(REPOSITORY)/drivers/audio/intel_hda/intel_hda.asm \ - drivers/ps2mouse.obj:DRIVERS/PS2MOUSE.OBJ:$(REPOSITORY)/drivers/mouse/ps2mouse4d/trunk/ps2mouse.asm \ drivers/sb16.obj:DRIVERS/SB16.OBJ:$(KERNEL)/drivers/sb16/sb16.asm \ drivers/sound.obj:DRIVERS/SOUND.OBJ:$(KERNEL)/drivers/sound.asm \ drivers/intelac97.obj:DRIVERS/INTELAC97.OBJ:$(KERNEL)/drivers/intelac97.asm \ - drivers/tmpdisk.obj:DRIVERS/TMPDISK.OBJ:$(KERNEL)/drivers/tmpdisk.asm \ drivers/usbhid.obj:DRIVERS/USBHID.OBJ:$(KERNEL)/drivers/usbhid/usbhid.asm \ drivers/usbstor.obj:DRIVERS/USBSTOR.OBJ:$(KERNEL)/drivers/usbstor.asm \ drivers/vt823x.obj:DRIVERS/VT823X.OBJ:$(KERNEL)/drivers/vt823x.asm \ @@ -214,6 +212,8 @@ FASM_PROGRAMS_PESTRIP:=\ drivers/ohci.sys:DRIVERS/OHCI.SYS:$(REPOSITORY)/drivers/usb/ohci.asm \ drivers/ehci.sys:DRIVERS/EHCI.SYS:$(REPOSITORY)/drivers/usb/ehci.asm \ drivers/rdc.sys:DRIVERS/RDC.SYS:$(REPOSITORY)/drivers/video/rdc.asm \ + drivers/ps2mouse.sys:DRIVERS/PS2MOUSE.SYS:$(REPOSITORY)/drivers/mouse/ps2mouse4d/trunk/ps2mouse.asm \ + drivers/tmpdisk.sys:DRIVERS/TMPDISK.SYS:$(REPOSITORY)/drivers/disk/tmpdisk.asm \ # end of list # The list of all FASM programs with one main FASM file for CD image. # Format of an item is exactly the same as in the previous list. diff --git a/data/eng/Makefile.pestrip b/data/eng/Makefile.pestrip index 2cc74c7e15..76cd8f3f3b 100644 --- a/data/eng/Makefile.pestrip +++ b/data/eng/Makefile.pestrip @@ -5,7 +5,7 @@ # $(1) = name of stripped file, # $(2) = name of input file define pestrip_meta_rule -$(1): $(2) Makefile.pestrip +$(1): $(2) Makefile.pestrip ../common/pestrip.asm EXENAME="$$<" fasm ../common/pestrip.asm "$$@" kpack --nologo "$$@" endef diff --git a/data/et/Makefile b/data/et/Makefile index b2d63f8538..bcf1a3366b 100644 --- a/data/et/Makefile +++ b/data/et/Makefile @@ -127,11 +127,9 @@ FASM_PROGRAMS:=\ drivers/fm801.obj:DRIVERS/FM801.OBJ:$(KERNEL)/drivers/fm801.asm \ drivers/infinity.obj:DRIVERS/INFINITY.OBJ:$(KERNEL)/drivers/infinity.asm \ drivers/intel_hda.obj:DRIVERS/intel_hda.obj:$(REPOSITORY)/drivers/audio/intel_hda/intel_hda.asm \ - drivers/ps2mouse.obj:DRIVERS/PS2MOUSE.OBJ:$(REPOSITORY)/drivers/mouse/ps2mouse4d/trunk/ps2mouse.asm \ drivers/sb16.obj:DRIVERS/SB16.OBJ:$(KERNEL)/drivers/sb16/sb16.asm \ drivers/sound.obj:DRIVERS/SOUND.OBJ:$(KERNEL)/drivers/sound.asm \ drivers/intelac97.obj:DRIVERS/INTELAC97.OBJ:$(KERNEL)/drivers/intelac97.asm \ - drivers/tmpdisk.obj:DRIVERS/TMPDISK.OBJ:$(KERNEL)/drivers/tmpdisk.asm \ drivers/usbhid.obj:DRIVERS/USBHID.OBJ:$(KERNEL)/drivers/usbhid/usbhid.asm \ drivers/usbstor.obj:DRIVERS/USBSTOR.OBJ:$(KERNEL)/drivers/usbstor.asm \ drivers/vt823x.obj:DRIVERS/VT823X.OBJ:$(KERNEL)/drivers/vt823x.asm \ @@ -214,6 +212,8 @@ FASM_PROGRAMS_PESTRIP:=\ drivers/ohci.sys:DRIVERS/OHCI.SYS:$(REPOSITORY)/drivers/usb/ohci.asm \ drivers/ehci.sys:DRIVERS/EHCI.SYS:$(REPOSITORY)/drivers/usb/ehci.asm \ drivers/rdc.sys:DRIVERS/RDC.SYS:$(REPOSITORY)/drivers/video/rdc.asm \ + drivers/ps2mouse.sys:DRIVERS/PS2MOUSE.SYS:$(REPOSITORY)/drivers/mouse/ps2mouse4d/trunk/ps2mouse.asm \ + drivers/tmpdisk.sys:DRIVERS/TMPDISK.SYS:$(REPOSITORY)/drivers/disk/tmpdisk.asm \ # end of list # The list of all FASM programs with one main FASM file for CD image. # Format of an item is exactly the same as in the previous list. diff --git a/data/et/Makefile.pestrip b/data/et/Makefile.pestrip index 2cc74c7e15..76cd8f3f3b 100644 --- a/data/et/Makefile.pestrip +++ b/data/et/Makefile.pestrip @@ -5,7 +5,7 @@ # $(1) = name of stripped file, # $(2) = name of input file define pestrip_meta_rule -$(1): $(2) Makefile.pestrip +$(1): $(2) Makefile.pestrip ../common/pestrip.asm EXENAME="$$<" fasm ../common/pestrip.asm "$$@" kpack --nologo "$$@" endef diff --git a/data/it/Makefile b/data/it/Makefile index 7509b687a8..c98597f401 100644 --- a/data/it/Makefile +++ b/data/it/Makefile @@ -127,11 +127,9 @@ FASM_PROGRAMS:=\ drivers/fm801.obj:DRIVERS/FM801.OBJ:$(KERNEL)/drivers/fm801.asm \ drivers/infinity.obj:DRIVERS/INFINITY.OBJ:$(KERNEL)/drivers/infinity.asm \ drivers/intel_hda.obj:DRIVERS/intel_hda.obj:$(REPOSITORY)/drivers/audio/intel_hda/intel_hda.asm \ - drivers/ps2mouse.obj:DRIVERS/PS2MOUSE.OBJ:$(REPOSITORY)/drivers/mouse/ps2mouse4d/trunk/ps2mouse.asm \ drivers/sb16.obj:DRIVERS/SB16.OBJ:$(KERNEL)/drivers/sb16/sb16.asm \ drivers/sound.obj:DRIVERS/SOUND.OBJ:$(KERNEL)/drivers/sound.asm \ drivers/intelac97.obj:DRIVERS/INTELAC97.OBJ:$(KERNEL)/drivers/intelac97.asm \ - drivers/tmpdisk.obj:DRIVERS/TMPDISK.OBJ:$(KERNEL)/drivers/tmpdisk.asm \ drivers/usbhid.obj:DRIVERS/USBHID.OBJ:$(KERNEL)/drivers/usbhid/usbhid.asm \ drivers/usbstor.obj:DRIVERS/USBSTOR.OBJ:$(KERNEL)/drivers/usbstor.asm \ drivers/vt823x.obj:DRIVERS/VT823X.OBJ:$(KERNEL)/drivers/vt823x.asm \ @@ -214,6 +212,8 @@ FASM_PROGRAMS_PESTRIP:=\ drivers/ohci.sys:DRIVERS/OHCI.SYS:$(REPOSITORY)/drivers/usb/ohci.asm \ drivers/ehci.sys:DRIVERS/EHCI.SYS:$(REPOSITORY)/drivers/usb/ehci.asm \ drivers/rdc.sys:DRIVERS/RDC.SYS:$(REPOSITORY)/drivers/video/rdc.asm \ + drivers/ps2mouse.sys:DRIVERS/PS2MOUSE.SYS:$(REPOSITORY)/drivers/mouse/ps2mouse4d/trunk/ps2mouse.asm \ + drivers/tmpdisk.sys:DRIVERS/TMPDISK.SYS:$(REPOSITORY)/drivers/disk/tmpdisk.asm \ # end of list # The list of all FASM programs with one main FASM file for CD image. # Format of an item is exactly the same as in the previous list. diff --git a/data/it/Makefile.pestrip b/data/it/Makefile.pestrip index 2cc74c7e15..76cd8f3f3b 100644 --- a/data/it/Makefile.pestrip +++ b/data/it/Makefile.pestrip @@ -5,7 +5,7 @@ # $(1) = name of stripped file, # $(2) = name of input file define pestrip_meta_rule -$(1): $(2) Makefile.pestrip +$(1): $(2) Makefile.pestrip ../common/pestrip.asm EXENAME="$$<" fasm ../common/pestrip.asm "$$@" kpack --nologo "$$@" endef diff --git a/data/rus/Makefile b/data/rus/Makefile index 879eb935c9..0aed398a56 100644 --- a/data/rus/Makefile +++ b/data/rus/Makefile @@ -128,11 +128,9 @@ FASM_PROGRAMS:=\ drivers/fm801.obj:DRIVERS/FM801.OBJ:$(KERNEL)/drivers/fm801.asm \ drivers/infinity.obj:DRIVERS/INFINITY.OBJ:$(KERNEL)/drivers/infinity.asm \ drivers/intel_hda.obj:DRIVERS/intel_hda.obj:$(REPOSITORY)/drivers/audio/intel_hda/intel_hda.asm \ - drivers/ps2mouse.obj:DRIVERS/PS2MOUSE.OBJ:$(REPOSITORY)/drivers/mouse/ps2mouse4d/trunk/ps2mouse.asm \ drivers/sb16.obj:DRIVERS/SB16.OBJ:$(KERNEL)/drivers/sb16/sb16.asm \ drivers/sound.obj:DRIVERS/SOUND.OBJ:$(KERNEL)/drivers/sound.asm \ drivers/intelac97.obj:DRIVERS/INTELAC97.OBJ:$(KERNEL)/drivers/intelac97.asm \ - drivers/tmpdisk.obj:DRIVERS/TMPDISK.OBJ:$(KERNEL)/drivers/tmpdisk.asm \ drivers/usbhid.obj:DRIVERS/USBHID.OBJ:$(KERNEL)/drivers/usbhid/usbhid.asm \ drivers/usbstor.obj:DRIVERS/USBSTOR.OBJ:$(KERNEL)/drivers/usbstor.asm \ drivers/vt823x.obj:DRIVERS/VT823X.OBJ:$(KERNEL)/drivers/vt823x.asm \ @@ -214,6 +212,8 @@ FASM_PROGRAMS_PESTRIP:=\ drivers/ohci.sys:DRIVERS/OHCI.SYS:$(REPOSITORY)/drivers/usb/ohci.asm \ drivers/ehci.sys:DRIVERS/EHCI.SYS:$(REPOSITORY)/drivers/usb/ehci.asm \ drivers/rdc.sys:DRIVERS/RDC.SYS:$(REPOSITORY)/drivers/video/rdc.asm \ + drivers/ps2mouse.sys:DRIVERS/PS2MOUSE.SYS:$(REPOSITORY)/drivers/mouse/ps2mouse4d/trunk/ps2mouse.asm \ + drivers/tmpdisk.sys:DRIVERS/TMPDISK.SYS:$(REPOSITORY)/drivers/disk/tmpdisk.asm \ # end of list # The list of all FASM programs with one main FASM file for CD image. # Format of an item is exactly the same as in the previous list. diff --git a/data/rus/Makefile.pestrip b/data/rus/Makefile.pestrip index 2cc74c7e15..76cd8f3f3b 100644 --- a/data/rus/Makefile.pestrip +++ b/data/rus/Makefile.pestrip @@ -5,7 +5,7 @@ # $(1) = name of stripped file, # $(2) = name of input file define pestrip_meta_rule -$(1): $(2) Makefile.pestrip +$(1): $(2) Makefile.pestrip ../common/pestrip.asm EXENAME="$$<" fasm ../common/pestrip.asm "$$@" kpack --nologo "$$@" endef diff --git a/data/sp/Makefile b/data/sp/Makefile index 5d4f90fddc..c5d7bacaf9 100644 --- a/data/sp/Makefile +++ b/data/sp/Makefile @@ -127,11 +127,9 @@ FASM_PROGRAMS:=\ drivers/fm801.obj:DRIVERS/FM801.OBJ:$(KERNEL)/drivers/fm801.asm \ drivers/infinity.obj:DRIVERS/INFINITY.OBJ:$(KERNEL)/drivers/infinity.asm \ drivers/intel_hda.obj:DRIVERS/intel_hda.obj:$(REPOSITORY)/drivers/audio/intel_hda/intel_hda.asm \ - drivers/ps2mouse.obj:DRIVERS/PS2MOUSE.OBJ:$(REPOSITORY)/drivers/mouse/ps2mouse4d/trunk/ps2mouse.asm \ drivers/sb16.obj:DRIVERS/SB16.OBJ:$(KERNEL)/drivers/sb16/sb16.asm \ drivers/sound.obj:DRIVERS/SOUND.OBJ:$(KERNEL)/drivers/sound.asm \ drivers/intelac97.obj:DRIVERS/INTELAC97.OBJ:$(KERNEL)/drivers/intelac97.asm \ - drivers/tmpdisk.obj:DRIVERS/TMPDISK.OBJ:$(KERNEL)/drivers/tmpdisk.asm \ drivers/usbhid.obj:DRIVERS/USBHID.OBJ:$(KERNEL)/drivers/usbhid/usbhid.asm \ drivers/usbstor.obj:DRIVERS/USBSTOR.OBJ:$(KERNEL)/drivers/usbstor.asm \ drivers/vt823x.obj:DRIVERS/VT823X.OBJ:$(KERNEL)/drivers/vt823x.asm \ @@ -214,6 +212,8 @@ FASM_PROGRAMS_PESTRIP:=\ drivers/ohci.sys:DRIVERS/OHCI.SYS:$(REPOSITORY)/drivers/usb/ohci.asm \ drivers/ehci.sys:DRIVERS/EHCI.SYS:$(REPOSITORY)/drivers/usb/ehci.asm \ drivers/rdc.sys:DRIVERS/RDC.SYS:$(REPOSITORY)/drivers/video/rdc.asm \ + drivers/ps2mouse.sys:DRIVERS/PS2MOUSE.SYS:$(REPOSITORY)/drivers/mouse/ps2mouse4d/trunk/ps2mouse.asm \ + drivers/tmpdisk.sys:DRIVERS/TMPDISK.SYS:$(REPOSITORY)/drivers/disk/tmpdisk.asm \ # end of list # The list of all FASM programs with one main FASM file for CD image. # Format of an item is exactly the same as in the previous list. diff --git a/data/sp/Makefile.pestrip b/data/sp/Makefile.pestrip index 2cc74c7e15..76cd8f3f3b 100644 --- a/data/sp/Makefile.pestrip +++ b/data/sp/Makefile.pestrip @@ -5,7 +5,7 @@ # $(1) = name of stripped file, # $(2) = name of input file define pestrip_meta_rule -$(1): $(2) Makefile.pestrip +$(1): $(2) Makefile.pestrip ../common/pestrip.asm EXENAME="$$<" fasm ../common/pestrip.asm "$$@" kpack --nologo "$$@" endef diff --git a/kernel/trunk/drivers/tmpdisk.asm b/drivers/disk/tmpdisk.asm similarity index 86% rename from kernel/trunk/drivers/tmpdisk.asm rename to drivers/disk/tmpdisk.asm index 0bae727c69..414c62c2e2 100644 --- a/kernel/trunk/drivers/tmpdisk.asm +++ b/drivers/disk/tmpdisk.asm @@ -25,56 +25,34 @@ ERROR_SIZE_TOO_LARGE equ 3 ; .DiskSize is too large ERROR_SIZE_TOO_SMALL equ 4 ; .DiskSize is too small ERROR_NO_MEMORY equ 5 ; memory allocation failed +include '../struct.inc' API_VERSION equ 1 ; Input structures: -struc add_disk_struc -{ -.DiskSize dd ? ; disk size in sectors, 1 sector = 512 bytes -; Note: .DiskSize is the full size, including FAT service data. +struct add_disk_struc +DiskSize dd ? ; disk size in sectors, 1 sector = 512 bytes +; Note: DiskSize is the full size, including FAT service data. ; Size for useful data is slightly less than this number. -.DiskId db ? ; from 0 to 9 -.sizeof: -} -virtual at 0 -add_disk_struc add_disk_struc -end virtual -struc del_disk_struc -{ -.DiskId db ? ; from 0 to 9 -.sizeof: -} -virtual at 0 -del_disk_struc del_disk_struc -end virtual +DiskId db ? ; from 0 to 9 +ends +struct del_disk_struc +DiskId db ? ; from 0 to 9 +ends max_num_disks equ 10 -; standard driver stuff -format MS COFF +; standard driver stuff; version of driver model = 5 +format PE DLL native 0.05 DEBUG equ 0 -include 'proc32.inc' -include 'imports.inc' -public START -public version - -struc IOCTL -{ - .handle dd ? - .io_code dd ? - .input dd ? - .inp_size dd ? - .output dd ? - .out_size dd ? -} - -virtual at 0 -IOCTL IOCTL -end virtual - -section '.flat' code readable align 16 +section '.flat' code readable writable executable +data fixups +end data +entry START +include '../proc32.inc' +include '../peimport.inc' +include '../macros.inc' ; the start procedure (see the description above) proc START ; This procedure is called in two situations: @@ -84,10 +62,10 @@ proc START cmp dword [esp+4], 1 jne .nothing ; 2. Register the driver in the system. - stdcall RegService, my_service, service_proc + invoke RegService, my_service, service_proc ; 3. Return the value returned by RegService back to the system. .nothing: - retn 4 + retn endp ; Service procedure for the driver - handle all IOCTL requests for the driver. @@ -122,8 +100,8 @@ proc service_proc dec ecx ; check for DEV_ADD_DISK jnz .no.dev_add_disk ; 5. This is DEV_ADD_DISK request, input is add_disk_struc, output is 1 byte -; 5a. Input size must be exactly add_disk_struc.sizeof bytes. - cmp [edx+IOCTL.inp_size], add_disk_struc.sizeof +; 5a. Input size must be exactly sizeof.add_disk_struc bytes. + cmp [edx+IOCTL.inp_size], sizeof.add_disk_struc jnz .return ; 5b. Load input parameters and call the worker procedure. mov eax, [edx+IOCTL.input] @@ -136,8 +114,8 @@ proc service_proc dec ecx ; check for DEV_DEL_DISK jnz .return ; 6. This is DEV_DEL_DISK request, input is del_disk_struc -; 6a. Input size must be exactly del_disk_struc.sizeof bytes. - cmp [edx+IOCTL.inp_size], del_disk_struc.sizeof +; 6a. Input size must be exactly sizeof.del_disk_struc bytes. + cmp [edx+IOCTL.inp_size], sizeof.del_disk_struc jnz .return ; 6b. Load input parameters and call the worker procedure. mov eax, [edx+IOCTL.input] @@ -179,7 +157,7 @@ proc add_disk ; If failed, return the corresponding error code. mov eax, esi shl eax, 9 - stdcall KernelAlloc, eax + invoke KernelAlloc, eax mov edi, eax test eax, eax mov al, ERROR_NO_MEMORY @@ -193,7 +171,7 @@ proc add_disk lock cmpxchg [disk_pointers+ebx*4], edi jz @f ; Otherwise, free the allocated memory and return the corresponding error code. - stdcall KernelFree, edi + invoke KernelFree, edi mov al, ERROR_INVALID_ID jmp .return @@: @@ -209,7 +187,7 @@ proc add_disk lea ecx, [ebx+'0'] ; ecx = digit mov [eax+3], cl ; eax points to 'tmp#' + zero dword ; 6b. Call the kernel API. Use disk id as 'userdata' parameter for callbacks. - stdcall DiskAdd, disk_functions, eax, ebx, 0 + invoke DiskAdd, disk_functions, eax, ebx, 0 ; 6c. Restore the stack after 6a. pop ecx ecx ; 6c. Check the result. If DiskAdd has failed, cleanup and return @@ -218,13 +196,13 @@ proc add_disk jnz @f mov [disk_sizes+ebx*4], 0 mov [disk_pointers+ebx*4], 0 - stdcall KernelFree, edi + invoke KernelFree, edi mov al, ERROR_NO_MEMORY jmp .return @@: push eax ; 6d. Notify the kernel that media is inserted. - stdcall DiskMediaChanged, eax, 1 + invoke DiskMediaChanged, eax, 1 ; 6e. Disk is fully configured; store its handle in the global variable ; and return success. pop [disk_handles+ebx*4] @@ -252,7 +230,7 @@ proc del_disk test edx, edx jz .return ; 4. Delete the disk from the system. - stdcall DiskDel, edx + invoke DiskDel, edx ; 5. Return success. ; Note that we can't free memory yet; it will be done in tmpdisk_close. xor eax, eax @@ -287,9 +265,4 @@ times max_num_disks dd 0 label disk_sizes dword times max_num_disks dd 0 -version dd 0x00060006 my_service db 'tmpdisk',0 - -; uninitialized data -; actually, not used here -;section '.data' data readable writable align 16 ; standard driver stuff diff --git a/kernel/trunk/drivers/tmpdisk_fat.inc b/drivers/disk/tmpdisk_fat.inc similarity index 100% rename from kernel/trunk/drivers/tmpdisk_fat.inc rename to drivers/disk/tmpdisk_fat.inc diff --git a/kernel/trunk/drivers/tmpdisk_work.inc b/drivers/disk/tmpdisk_work.inc similarity index 99% rename from kernel/trunk/drivers/tmpdisk_work.inc rename to drivers/disk/tmpdisk_work.inc index 7f514373d6..c33508e0df 100644 --- a/kernel/trunk/drivers/tmpdisk_work.inc +++ b/drivers/disk/tmpdisk_work.inc @@ -21,7 +21,7 @@ proc tmpdisk_close mov [disk_sizes+edx*4], 0 xor eax, eax xchg eax, [disk_pointers+edx*4] - stdcall KernelFree, eax + invoke KernelFree, eax retn 4 endp diff --git a/drivers/mouse/ps2mouse4d/trunk/ps2m_iofuncs.inc b/drivers/mouse/ps2mouse4d/trunk/ps2m_iofuncs.inc index eefe2702e0..3a1e0741d3 100644 --- a/drivers/mouse/ps2mouse4d/trunk/ps2m_iofuncs.inc +++ b/drivers/mouse/ps2mouse4d/trunk/ps2m_iofuncs.inc @@ -94,7 +94,7 @@ mouse_read: cmp ah, 1 jne .fin mov esi, 10 - call Sleep + invoke Sleep dec [mouse_nr_tries] jnz .repeat diff --git a/drivers/mouse/ps2mouse4d/trunk/ps2m_irqh.inc b/drivers/mouse/ps2mouse4d/trunk/ps2m_irqh.inc index 4531956512..f6977604ea 100644 --- a/drivers/mouse/ps2mouse4d/trunk/ps2m_irqh.inc +++ b/drivers/mouse/ps2mouse4d/trunk/ps2m_irqh.inc @@ -105,7 +105,7 @@ proc irq_handler @@: - stdcall SetMouseData, [ButtonState], [XMoving], [YMoving] + invoke SetMouseData, [ButtonState], [XMoving], [YMoving] jmp .exit diff --git a/drivers/mouse/ps2mouse4d/trunk/ps2mouse.asm b/drivers/mouse/ps2mouse4d/trunk/ps2mouse.asm index 8d89465e52..4f55c79032 100644 --- a/drivers/mouse/ps2mouse4d/trunk/ps2mouse.asm +++ b/drivers/mouse/ps2mouse4d/trunk/ps2mouse.asm @@ -1,39 +1,25 @@ -format MS COFF +; standard driver stuff; version of driver model = 5 +format PE DLL native 0.05 DEBUG equ 1 -include '../../../proc32.inc' -include '../../../imports.inc' - -struc IOCTL -{ .handle dd ? - .io_code dd ? - .input dd ? - .inp_size dd ? - .output dd ? - .out_size dd ? -} - -virtual at 0 - IOCTL IOCTL -end virtual - -public START -public version - -DRV_ENTRY equ 1 -DRV_EXIT equ -1 - MT_3B equ 0 MT_3BScroll equ 3 MT_5BScroll equ 4 PS2_DRV_VER equ 1 -section '.flat' code readable align 16 +section '.flat' code readable writable executable +data fixups +end data +include '../../../struct.inc' +include '../../../macros.inc' +include '../../../proc32.inc' +include '../../../peimport.inc' -proc START stdcall, state:dword +entry START +proc START c, state:dword, cmdline:dword cmp [state], DRV_ENTRY jne .nothing @@ -91,13 +77,13 @@ proc START stdcall, state:dword pop eax call kbd_write - stdcall AttachIntHandler, 12, irq_handler, 0 - stdcall RegService, my_service, service_proc + invoke AttachIntHandler, 12, irq_handler, 0 + invoke RegService, my_service, service_proc ret .fin: popf - ;stdcall DetachIntHandler, 12, irq_handler + ;invoke DetachIntHandler, 12, irq_handler mov bl, 0xA7 ; disable mouse interface call kbd_cmd .nothing: @@ -258,9 +244,6 @@ try_mode_ID4: include 'ps2m_iofuncs.inc' include 'ps2m_irqh.inc' -section '.data' data readable writable align 16 - -version dd 0x00050005 my_service db 'ps2mouse',0 ;iofuncs data diff --git a/drivers/video/vidintel.asm b/drivers/video/vidintel.asm index ebb57f8a5b..6f72cce760 100644 --- a/drivers/video/vidintel.asm +++ b/drivers/video/vidintel.asm @@ -13,8 +13,8 @@ use_predefined_mode = 0;1 predefined_width = 0;1366 predefined_height = 0;768 -; standard driver stuff; target OS version = 0.80 -format PE DLL native 0.80 +; standard driver stuff; version of driver model = 5 +format PE DLL native 0.05 entry START __DEBUG__ equ 1 __DEBUG_LEVEL__ equ 1 diff --git a/kernel/trunk/data32.inc b/kernel/trunk/data32.inc index cf1ac24cba..7741d9789a 100644 --- a/kernel/trunk/data32.inc +++ b/kernel/trunk/data32.inc @@ -148,7 +148,7 @@ end if msg_CR db 13,10,0 szHwMouse db 'ATI2D',0 -szPS2MDriver db 'PS2MOUSE',0 +szPS2MDriver db '/rd/1/drivers/PS2MOUSE.SYS',0 ;szCOM_MDriver db 'COM_MOUSE',0 szVidintel db '/rd/1/drivers/vidintel.sys',0 szUSB db 'USB',0 diff --git a/kernel/trunk/drivers/vidintel.asm b/kernel/trunk/drivers/vidintel.asm deleted file mode 100644 index 7018c84371..0000000000 --- a/kernel/trunk/drivers/vidintel.asm +++ /dev/null @@ -1,465 +0,0 @@ -; Stub of videodriver for Intel videocards. -; (c) CleverMouse - -; When the start procedure gots control, -; it tries to detect preferred resolution, -; sets the detected resolution assuming 32-bpp VESA mode and exits -; (without registering a service). -; Detection can be overloaded with compile-time settings -; use_predefined_mode/predefined_width/predefined_height. - -; set predefined resolution here -use_predefined_mode = 0;1 -predefined_width = 0;1366 -predefined_height = 0;768 - -; standard driver stuff -format MS COFF - -DEBUG = 1 - -include 'proc32.inc' -include 'imports.inc' - -public START -public version - -section '.flat' code readable align 16 -; the start procedure (see the description above) -START: -; 1. Detect device. Abort if not found. - push esi - call DetectDevice - test esi, esi - jz .return0 -; 2. Detect optimal mode unless the mode is given explicitly. Abort if failed. -if use_predefined_mode = 0 - call DetectMode -end if - cmp [width], 0 - jz .return0_cleanup -; 3. Set the detected mode. - call SetMode -; 4. Cleanup and return. -.return0_cleanup: - stdcall FreeKernelSpace, esi -.return0: - pop esi - xor eax, eax - ret 4 - -; check that there is Intel videocard -; if so, map MMIO registers and set internal variables -; esi points to MMIO block; NULL means no device -DetectDevice: -; 1. Sanity check: check that we are dealing with Intel videocard. -; Integrated video device for Intel is always at PCI:0:2:0. - xor esi, esi ; initialize return value to NULL -; 1a. Get PCI VendorID and DeviceID. - push esi - push 10h - push esi - call PciRead32 -; 1b. loword(eax) = ax = VendorID, hiword(eax) = DeviceID. -; Test whether we have Intel chipset. - cmp ax, 8086h - jnz .return -; 1c. Say hi including DeviceID. - shr eax, 10h - push edi - pusha - mov edi, pciid_text - call WriteWord - mov esi, hellomsg - call SysMsgBoardStr - popa -; 1d. Test whether we know this DeviceID. -; If this is the case, remember the position of the device in line of Intel cards; -; this knowledge will be useful later. -; Tested on devices with id: 8086:0046, partially 8086:2A02. - mov ecx, pciids_num - mov edi, pciids - repnz scasw - pop edi - jnz .return_unknown_pciid - sub ecx, pciids_num - 1 - neg ecx - mov [deviceType], ecx -; 1e. Continue saying hi with positive intonation. - pusha - mov esi, knownmsg - call SysMsgBoardStr - popa -; 2. Prepare MMIO region to control the card. -; 2a. Read MMIO physical address from PCI config space. - push 10h - cmp ecx, i9xx_start - jae @f - mov byte [esp], 14h -@@: - push 10h - push esi - call PciRead32 -; 2b. Mask out PCI region type, lower 4 bits. - and al, not 0xF -; 2c. Create virtual mapping of the physical memory. - push 1Bh - push 100000h - push eax - call MapIoMem -; 3. Return. - xchg esi, eax -.return: - ret -; 1f. If we do not know DeviceID, continue saying hi with negative intonation. -.return_unknown_pciid: - pusha - mov esi, unknownmsg - call SysMsgBoardStr - popa - ret - -; Convert word in ax to hexadecimal text in edi, advance edi. -WriteWord: -; 1. Convert high byte. - push eax - mov al, ah - call WriteByte - pop eax -; 2. Convert low byte. -; Fall through to WriteByte; ret from WriteByte is ret from WriteWord too. - -; Convert byte in al to hexadecimal text in edi, advance edi. -WriteByte: -; 1. Convert high nibble. - push eax - shr al, 4 - call WriteNibble - pop eax -; 2. Convert low nibble. - and al, 0xF -; Fall through to WriteNibble; ret from WriteNibble is ret from WriteByte too. - -; Convert nibble in al to hexadecimal text in edi, advance edi. -WriteNibble: -; Obvious, isn't it? - cmp al, 10 - sbb al, 69h - das - stosb - ret - -if use_predefined_mode = 0 -; detect resolution of the flat panel -DetectMode: - push esi edi -; 1. Get the location of block of GMBUS* registers. -; Starting with Ironlake, GMBUS* registers were moved. - add esi, 5100h - cmp [deviceType], ironlake_start - jb @f - add esi, 0xC0000 -@@: -; 2. Initialize GMBUS engine. - mov edi, edid - mov ecx, 0x10000 -@@: - test byte [esi+8+1], 80h - loopnz @b - jnz .fail - mov dword [esi], 3 - test byte [esi+8+1], 4 - jz .noreset - call ResetGMBus - jnz .fail -.noreset: -; 3. Send read command. - and dword [esi+20h], 0 - mov dword [esi+4], 4E8000A1h -; 4. Wait for data, writing to the buffer as data arrive. -.getdata: - mov ecx, 0x10000 -@@: - test byte [esi+8+1], 8 - loopz @b - test byte [esi+8+1], 4 - jz .dataok - call ResetGMBus - jmp .fail -.dataok: - mov eax, [esi+0Ch] - stosd - cmp edi, edid+80h - jb .getdata -; 5. Wait for bus idle. - mov ecx, 0x10000 -@@: - test byte [esi+8+1], 2 - loopnz @b -; 6. We got EDID; dump it if DEBUG. -if DEBUG - pusha - xor ecx, ecx - mov esi, edid - mov edi, edid_text -.dumploop: - lodsb - call WriteByte - mov al, ' ' - stosb - inc cl - test cl, 15 - jnz @f - mov byte [edi-1], 13 - mov al, 10 - stosb -@@: - test cl, cl - jns .dumploop - mov esi, edidmsg - call SysMsgBoardStr - popa -end if -; 7. Test whether EDID is good. -; 7a. Signature: 00 FF FF FF FF FF FF 00. - mov esi, edid - cmp dword [esi], 0xFFFFFF00 - jnz .fail - cmp dword [esi+4], 0x00FFFFFF - jnz .fail -; 7b. Checksum must be zero. - xor edx, edx - mov ecx, 80h -@@: - lodsb - add dl, al - loop @b - jnz .fail -; 8. Get width and height from EDID. - xor eax, eax - mov ah, [esi-80h+3Ah] - shr ah, 4 - mov al, [esi-80h+38h] - mov [width], eax - mov ah, [esi-80h+3Dh] - shr ah, 4 - mov al, [esi-80h+3Bh] - mov [height], eax -; 9. Return. -.fail: - pop edi esi - ret - -; reset bus, clear all errors -ResetGMBus: -; look into the PRM - mov dword [esi+4], 80000000h - mov dword [esi+4], 0 - mov ecx, 0x10000 -@@: - test byte [esi+8+1], 2 - loopnz @b - ret -end if - -; set resolution [width]*[height] -SetMode: -; 1. Program the registers of videocard. -; look into the PRM - cli -; or byte [esi+7000Ah], 0Ch ; PIPEACONF: disable Display+Cursor Planes -; or byte [esi+7100Ah], 0Ch ; PIPEBCONF: disable Display+Cursor Planes - xor eax, eax - xor edx, edx - cmp [deviceType], i965_start - jb @f - mov dl, 9Ch - 84h -@@: -; or byte [esi+71403h], 80h ; VGACNTRL: VGA Display Disable - and byte [esi+70080h], not 27h ; CURACNTR: disable cursor A - mov dword [esi+70084h], eax ; CURABASE: force write to CURA* regs - and byte [esi+700C0h], not 27h ; CURBCNTR: disable cursor B - mov dword [esi+700C4h], eax ; CURBBASE: force write to CURB* regs - and byte [esi+70183h], not 80h ; DSPACNTR: disable Primary A Plane - mov dword [esi+edx+70184h], eax ; DSPALINOFF/DSPASURF: force write to DSPA* regs - and byte [esi+71183h], not 80h ; DSPBCNTR: disable Primary B Plane - mov dword [esi+edx+71184h], eax ; DSPBLINOFF/DSPBSURF: force write to DSPB* regs -if 1 - cmp [deviceType], ironlake_start - jae .disable_pipes - mov edx, 10000h - or byte [esi+70024h], 2 ; PIPEASTAT: clear VBLANK status - or byte [esi+71024h], 2 ; PIPEBSTAT: clear VBLANK status -.wait_vblank_preironlake1: - mov ecx, 1000h - loop $ - test byte [esi+7000Bh], 80h ; PIPEACONF: pipe A active? - jz @f - test byte [esi+70024h], 2 ; PIPEASTAT: got VBLANK? - jz .wait_vblank_preironlake2 -@@: - test byte [esi+7100Bh], 80h ; PIPEBCONF: pipe B active? - jz .disable_pipes - test byte [esi+71024h], 2 ; PIPEBSTAT: got VBLANK? - jnz .disable_pipes -.wait_vblank_preironlake2: - dec edx - jnz .wait_vblank_preironlake1 - jmp .not_disabled -.disable_pipes: -end if - and byte [esi+7000Bh], not 80h ; PIPEACONF: disable pipe - and byte [esi+7100Bh], not 80h ; PIPEBCONF: disable pipe - cmp [deviceType], gen4_start - jb .wait_watching_scanline -; g45 and later: use special flag from PIPE*CONF - mov edx, 10000h -@@: - mov ecx, 1000h - loop $ - test byte [esi+7000Bh], 40h ; PIPEACONF: wait until pipe disabled - jz @f - dec edx - jnz @b - jmp .not_disabled -@@: - test byte [esi+7100Bh], 40h ; PIPEBCONF: wait until pipe disabled - jz .disabled - mov ecx, 1000h - loop $ - dec edx - jnz @b - jmp .not_disabled -; pineview and before: wait while scanline still changes -.wait_watching_scanline: - mov edx, 1000h -.dis1: - push dword [esi+71000h] - push dword [esi+70000h] - mov ecx, 10000h - loop $ - pop eax - xor eax, [esi+70000h] - and eax, 1FFFh - pop eax - jnz .notdis1 - xor eax, [esi+71000h] - and eax, 1FFFh - jz .disabled -.notdis1: - dec edx - jnz .dis1 -.not_disabled: - sti - jmp .return -.disabled: - lea eax, [esi+61183h] - cmp [deviceType], ironlake_start - jb @f - add eax, 0xE0000 - 0x60000 -@@: - lea edx, [esi+60000h] - test byte [eax], 40h - jz @f - add edx, 1000h -@@: - mov eax, [width] - dec eax - shl eax, 16 - mov ax, word [height] - dec eax - mov dword [edx+1Ch], eax ; PIPEASRC: set source image size - ror eax, 16 - mov dword [edx+10190h], eax ; for old cards - mov ecx, [width] - add ecx, 15 - and ecx, not 15 - shl ecx, 2 - mov dword [edx+10188h], ecx ; DSPASTRIDE: set scanline length - mov dword [edx+10184h], 0 ; DSPALINOFF: force write to DSPA* registers - and byte [esi+61233h], not 80h ; PFIT_CONTROL: disable panel fitting - or byte [edx+1000Bh], 80h ; PIPEACONF: enable pipe -; and byte [edx+1000Ah], not 0Ch ; PIPEACONF: enable Display+Cursor Planes - or byte [edx+10183h], 80h ; DSPACNTR: enable Display Plane A - sti -; 2. Notify the kernel that resolution has changed. - call GetDisplay - mov edx, [width] - mov dword [eax+8], edx - mov edx, [height] - mov dword [eax+0Ch], edx - mov [eax+18h], ecx - mov eax, [width] - dec eax - dec edx - call SetScreen -.return: - ret - -align 4 -hellomsg db 'Intel videocard detected, PciId=8086:' -pciid_text db '0000' - db ', which is ', 0 -knownmsg db 'known',13,10,0 -unknownmsg db 'unknown',13,10,0 - -if DEBUG -edidmsg db 'EDID successfully read:',13,10 -edid_text rb 8*(16*3+1) - db 0 -end if - -version: - dd 0x50005 - -width dd predefined_width -height dd predefined_height - -pciids: - dw 0x3577 ; i830m - dw 0x2562 ; 845g - dw 0x3582 ; i855gm -i865_start = ($ - pciids) / 2 - dw 0x2572 ; i865g -i9xx_start = ($ - pciids) / 2 - dw 0x2582 ; i915g - dw 0x258a ; e7221g (i915g) - dw 0x2592 ; i915gm - dw 0x2772 ; i945g - dw 0x27a2 ; i945gm - dw 0x27ae ; i945gme -i965_start = ($ - pciids) / 2 - dw 0x2972 ; i946qz (i965g) - dw 0x2982 ; g35g (i965g) - dw 0x2992 ; i965q (i965g) - dw 0x29a2 ; i965g - dw 0x29b2 ; q35g - dw 0x29c2 ; g33g - dw 0x29d2 ; q33g - dw 0xa001 ; pineview - dw 0xa011 ; pineview -gen4_start = ($ - pciids) / 2 - dw 0x2a02 ; i965gm - dw 0x2a12 ; i965gm - dw 0x2a42 ; gm45 - dw 0x2e02 ; g45 - dw 0x2e12 ; g45 - dw 0x2e22 ; g45 - dw 0x2e32 ; g45 - dw 0x2e42 ; g45 - dw 0x2e92 ; g45 -ironlake_start = ($ - pciids) / 2 - dw 0x0042 ; ironlake_d - dw 0x0046 ; ironlake_m - dw 0x0102 ; sandybridge_d - dw 0x0112 ; sandybridge_d - dw 0x0122 ; sandybridge_d - dw 0x0106 ; sandybridge_m - dw 0x0116 ; sandybridge_m - dw 0x0126 ; sandybridge_m - dw 0x010A ; sandybridge_d -pciids_num = ($ - pciids) / 2 - -align 4 -deviceType dd ? -edid rb 0x80 diff --git a/kernel/trunk/kernel.asm b/kernel/trunk/kernel.asm index 4a88ed5f9d..9b600536cf 100644 --- a/kernel/trunk/kernel.asm +++ b/kernel/trunk/kernel.asm @@ -1058,7 +1058,7 @@ endg ; Load PS/2 mouse driver - stdcall load_driver, szPS2MDriver + stdcall load_pe_driver, szPS2MDriver, 0 mov esi, boot_setmouse call boot_log