Rev 221 | Rev 237 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 221 | Rev 227 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | DRV_ENTRY equ 1 |
1 | DRV_ENTRY equ 1 |
2 | DRV_EXIT equ -1 |
2 | DRV_EXIT equ -1 |
- | 3 | DRV_COMPAT equ 1 ;minimal required drivers version |
|
- | 4 | DRV_CURRENT equ 1 ;current drivers model version |
|
- | 5 | ||
- | 6 | DRV_VERSION equ (DRV_COMPAT shl 16) or DRV_CURRENT |
|
Line 3... | Line 7... | ||
3 | 7 | ||
4 | align 4 |
8 | align 4 |
Line 5... | Line 9... | ||
5 | proc attach_int_handler stdcall, irq:dword, handler:dword |
9 | proc attach_int_handler stdcall, irq:dword, handler:dword |
Line 702... | Line 706... | ||
702 | 706 | ||
Line 703... | Line 707... | ||
703 | stdcall load_file, [file_name] |
707 | stdcall load_file, [file_name] |
Line 704... | Line 708... | ||
704 | 708 | ||
705 | test eax, eax |
709 | test eax, eax |
Line 706... | Line 710... | ||
706 | jz .fail |
710 | jz .exit |
Line 707... | Line 711... | ||
707 | 711 | ||
708 | mov [coff], eax |
712 | mov [coff], eax |
Line 773... | Line 777... | ||
773 | 777 | ||
Line 774... | Line 778... | ||
774 | stdcall fix_coff_symbols, eax, [sym], [edx+CFH.nSymbols],\ |
778 | stdcall fix_coff_symbols, eax, [sym], [edx+CFH.nSymbols],\ |
775 | [strings], ebx |
779 | [strings], ebx |
776 | test eax, eax |
780 | test eax, eax |
777 | jnz @F |
- | |
778 | - | ||
779 | mov esi, msg_module |
- | |
780 | call sys_msg_board_str |
- | |
781 | mov esi, [file_name] |
- | |
782 | call sys_msg_board_str |
- | |
783 | mov esi, msg_CR |
781 | jz .link_fail |
784 | call sys_msg_board_str |
- | |
Line 785... | Line -... | ||
785 | - | ||
786 | stdcall kernel_free,[coff] |
- | |
787 | xor eax, eax |
- | |
788 | ret |
- | |
789 | @@: |
782 | |
790 | mov ebx, [coff] |
783 | mov ebx, [coff] |
791 | add ebx, 20 |
784 | add ebx, 20 |
Line 792... | Line 785... | ||
792 | stdcall fix_coff_relocs, [coff], ebx, [sym] |
785 | stdcall fix_coff_relocs, [coff], ebx, [sym] |
- | 786 | ||
- | 787 | mov ebx, [coff] |
|
- | 788 | stdcall get_coff_sym,[sym],[ebx+CFH.nSymbols],szVersion |
|
- | 789 | test eax, eax |
|
- | 790 | jz .link_fail |
|
- | 791 | ||
- | 792 | mov eax, [eax] |
|
- | 793 | shr eax, 16 |
|
- | 794 | cmp eax, DRV_COMPAT |
|
- | 795 | jb .ver_fail |
|
- | 796 | ||
- | 797 | cmp eax, DRV_CURRENT |
|
- | 798 | ja .ver_fail |
|
793 | 799 | ||
794 | mov ebx, [coff] |
800 | mov ebx, [coff] |
Line 795... | Line 801... | ||
795 | stdcall get_coff_sym,[sym],[ebx+CFH.nSymbols],szSTART |
801 | stdcall get_coff_sym,[sym],[ebx+CFH.nSymbols],szSTART |
Line 810... | Line 816... | ||
810 | mov [eax+SRV.base], ebx |
816 | mov [eax+SRV.base], ebx |
811 | mov ecx, [start] |
817 | mov ecx, [start] |
812 | mov [eax+SRV.entry], ecx |
818 | mov [eax+SRV.entry], ecx |
813 | ret |
819 | ret |
814 | .fail: |
820 | |
- | 821 | .ver_fail: |
|
- | 822 | mov esi, msg_CR |
|
- | 823 | call sys_msg_board_str |
|
- | 824 | mov esi, [file_name] |
|
- | 825 | call sys_msg_board_str |
|
- | 826 | mov esi, msg_CR |
|
- | 827 | call sys_msg_board_str |
|
- | 828 | mov esi, msg_version |
|
- | 829 | call sys_msg_board_str |
|
- | 830 | mov esi, msg_www |
|
- | 831 | call sys_msg_board_str |
|
- | 832 | jmp .cleanup |
|
- | 833 | ||
- | 834 | .link_fail: |
|
- | 835 | mov esi, msg_module |
|
- | 836 | call sys_msg_board_str |
|
- | 837 | mov esi, [file_name] |
|
- | 838 | call sys_msg_board_str |
|
- | 839 | mov esi, msg_CR |
|
- | 840 | call sys_msg_board_str |
|
- | 841 | .cleanup: |
|
- | 842 | stdcall kernel_free,[img_base] |
|
- | 843 | .fail: |
|
815 | xor eax, eax |
844 | stdcall kernel_free, [coff] |
- | 845 | .exit: |
|
- | 846 | xor eax, eax |
|
816 | ret |
847 | ret |
817 | endp |
848 | endp |
818 | 849 | ||
Line 819... | Line 850... | ||
819 | align 4 |
850 | align 4 |
Line 922... | Line 953... | ||
922 | endp |
953 | endp |
923 | 954 | ||
Line 924... | Line 955... | ||
924 | align 4 |
955 | align 4 |
925 | proc stop_all_services |
956 | proc stop_all_services |
926 | pushf |
- | |
927 | cli |
- | |
928 | mov eax, [srv_map] |
957 | not [srv_map] |
929 | not eax |
- | |
930 | mov [srv_map], eax |
- | |
931 | .next: |
958 | .next: |
932 | bsf eax, [srv_map] |
959 | bsf eax, [srv_map] |
933 | jnz .find |
960 | jnz .find |
934 | popf |
- | |
935 | ret |
961 | ret |
936 | .find: |
962 | .find: |
937 | btr [srv_map], eax |
963 | btr [srv_map], eax |
938 | shl eax,0x02 |
964 | shl eax,0x02 |
939 | lea eax,[srv_tab+eax+eax*8] ;srv_tab+eax*36 |
965 | lea eax,[srv_tab+eax+eax*8] ;srv_tab+eax*36 |
- | 966 | cmp [eax+SRV.magic], ' SRV' |
|
- | 967 | jne .next |
|
- | 968 | cmp [eax+SRV.size], SRV_SIZE |
|
- | 969 | jne .next |
|
940 | mov ebx, [eax+SRV.entry] |
970 | mov ebx, [eax+SRV.entry] |
941 | stdcall ebx, dword -1 |
971 | stdcall ebx, dword -1 |
942 | jmp .next |
972 | jmp .next |
943 | endp |
973 | endp |
Line 944... | Line 974... | ||
944 | 974 | ||
945 | 975 | ||
946 | drv_sound db '/rd/1/drivers/unisound.obj', 0 |
- | |
947 | drv_infinity db '/rd/1/drivers/infinity.obj', 0 |
976 | drv_sound db '/rd/1/drivers/unisound.obj', 0 |
Line 948... | Line 977... | ||
948 | ;drv_ati2d db '/rd/1/drivers/vesa.obj', 0 |
977 | drv_infinity db '/rd/1/drivers/infinity.obj', 0 |
949 | ;drv_cursor db '/rd/1/drivers/vesa.obj',0 |
978 | drv_hw_mouse db '/rd/1/drivers/ati2d.obj',0 |
950 | 979 | ||
951 | szSound db 'SOUND',0 |
- | |
Line 952... | Line 980... | ||
952 | szInfinity db 'INFINITY',0 |
980 | szSound db 'SOUND',0 |
953 | ;szHMouse db 'ATI2D',0 |
981 | szInfinity db 'INFINITY',0 |
954 | ;szCURSOR db 'VESACURSOR',0 |
982 | szHwMouse db 'HWCURSOR',0 |
Line 955... | Line 983... | ||
955 | 983 | ||
956 | szSTART db 'START',0 |
984 | szSTART db 'START',0 |
- | 985 | szEXPORTS db 'EXPORTS',0 |
|
- | 986 | szIMPORTS db 'IMPORTS',0 |
|
957 | szEXPORTS db 'EXPORTS',0 |
987 | |
Line 958... | Line 988... | ||
958 | szIMPORTS db 'IMPORTS',0 |
988 | msg_unresolved db 'unresolved ',0 |
- | 989 | msg_module db 'in module ',0 |
|
959 | 990 | msg_version db 'incompatible driver version',13,10,0 |
|
960 | msg_unresolved db 'unresolved ',0 |
991 | msg_www db 'please visit www.kolibrios.org',13,10,0 |
Line 961... | Line 992... | ||
961 | msg_module db 'in module ',0 |
992 | msg_CR db 13,10,0 |
962 | msg_CR db 13,10,0 |
993 | |
963 | 994 | align 4 |
|
964 | align 4 |
995 | create_cursor dd 0 |
965 | set_hw_cursor dd 0 |
996 | set_hw_cursor dd 0 |
966 | hw_restore dd 0 |
- | |
967 | 997 | hw_restore dd 0 |