Rev 417 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 417 | Rev 419 | ||
---|---|---|---|
Line 225... | Line 225... | ||
225 | mov dword [sys_pgdir], 0 |
225 | mov dword [sys_pgdir], 0 |
226 | mov dword [sys_pgdir+4], 0 |
226 | mov dword [sys_pgdir+4], 0 |
227 | mov dword [sys_pgdir+8], 0 |
227 | mov dword [sys_pgdir+8], 0 |
Line 228... | Line 228... | ||
228 | 228 | ||
229 | mov eax, cr3 |
229 | mov eax, cr3 |
Line 230... | Line 230... | ||
230 | mov cr3, eax |
230 | mov cr3, eax ; flush TLB |
231 | 231 | ||
232 | ; SAVE REAL MODE VARIABLES |
232 | ; SAVE REAL MODE VARIABLES |
233 | mov ax, [BOOT_VAR + 0x9031] |
233 | mov ax, [BOOT_VAR + 0x9031] |
- | 234 | mov [IDEContrRegsBaseAddr], ax |
|
- | 235 | ; --------------- APM --------------------- |
|
234 | mov [IDEContrRegsBaseAddr], ax |
236 | |
- | 237 | ; init selectors |
|
- | 238 | mov ebx, [BOOT_VAR+0x9040] ; offset of APM entry point |
|
- | 239 | movzx eax, word [BOOT_VAR+0x9050] ; real-mode segment base address of |
|
- | 240 | ; protected-mode 32-bit code segment |
|
- | 241 | movzx ecx, word [BOOT_VAR+0x9052] ; real-mode segment base address of |
|
- | 242 | ; protected-mode 16-bit code segment |
|
- | 243 | movzx edx, word [BOOT_VAR+0x9054] ; real-mode segment base address of |
|
- | 244 | ; protected-mode 16-bit data segment |
|
- | 245 | ||
- | 246 | shl eax, 4 |
|
- | 247 | mov [dword apm_code_32 + 2], ax |
|
- | 248 | shr eax, 16 |
|
- | 249 | mov [dword apm_code_32 + 4], al |
|
- | 250 | ||
- | 251 | shl ecx, 4 |
|
- | 252 | mov [dword apm_code_16 + 2], cx |
|
- | 253 | shr ecx, 16 |
|
- | 254 | mov [dword apm_code_16 + 4], cl |
|
- | 255 | ||
- | 256 | shl edx, 4 |
|
- | 257 | mov [dword apm_data_16 + 2], dx |
|
- | 258 | shr edx, 16 |
|
235 | ; --------------- APM --------------------- |
259 | mov [dword apm_data_16 + 4], dl |
236 | ; mov eax, [BOOT_VAR + 0x9040] ; entry point |
260 | |
Line 237... | Line 261... | ||
237 | ; mov dword[apm_entry], eax |
261 | mov dword[apm_entry], ebx |
238 | ; mov word [apm_entry + 4], apm_code_32 - gdts |
262 | mov word [apm_entry + 4], apm_code_32 - gdts |
239 | 263 | ||
240 | mov eax, [BOOT_VAR + 0x9044] ; version & flags |
264 | mov eax, [BOOT_VAR + 0x9044] ; version & flags |
Line 1709... | Line 1733... | ||
1709 | ret |
1733 | ret |
1710 | msset: |
1734 | msset: |
1711 | ret |
1735 | ret |
Line 1712... | Line 1736... | ||
1712 | 1736 | ||
1713 | app_load_cursor: |
1737 | app_load_cursor: |
1714 | add ebx, new_app_base |
1738 | ; add ebx, new_app_base |
1715 | cmp ebx, new_app_base |
1739 | cmp ebx, OS_BASE |
1716 | jb msset |
1740 | jae msset |
1717 | stdcall load_cursor, ebx, ecx |
1741 | stdcall load_cursor, ebx, ecx |
1718 | mov [esp+36], eax |
1742 | mov [esp+36], eax |
Line 1719... | Line 1743... | ||
1719 | ret |
1743 | ret |
Line 3940... | Line 3964... | ||
3940 | 3964 | ||
Line 3941... | Line 3965... | ||
3941 | syscall_putimage: ; PutImage |
3965 | syscall_putimage: ; PutImage |
3942 | 3966 | ||
3943 | mov edx,ecx |
3967 | mov edx,ecx |
Line 3944... | Line 3968... | ||
3944 | mov ecx,ebx |
3968 | mov ecx,ebx |
3945 | lea ebx, [eax+std_application_base_address] |
3969 | mov ebx, eax |
3946 | 3970 | ||
3947 | sys_putimage: |
3971 | sys_putimage: |
Line 3982... | Line 4006... | ||
3982 | dec [mouse_pause] |
4006 | dec [mouse_pause] |
3983 | pop ebp esi ebp |
4007 | pop ebp esi ebp |
3984 | jmp [draw_pointer] |
4008 | jmp [draw_pointer] |
Line 3985... | Line 4009... | ||
3985 | 4009 | ||
3986 | syscall_putimage_palette: |
4010 | syscall_putimage_palette: |
3987 | lea edi, [esi+std_application_base_address] |
4011 | mov edi, esi |
3988 | mov esi, edx |
4012 | mov esi, edx |
3989 | mov edx, ecx |
4013 | mov edx, ecx |
3990 | mov ecx, ebx |
4014 | mov ecx, ebx |
3991 | lea ebx, [eax+std_application_base_address] |
4015 | mov ebx, eax |
3992 | sys_putimage_palette: |
4016 | sys_putimage_palette: |
3993 | ; ebx = pointer to image |
4017 | ; ebx = pointer to image |
3994 | ; ecx = [xsize]*65536 + [ysize] |
4018 | ; ecx = [xsize]*65536 + [ysize] |
3995 | ; edx = [xstart]*65536 + [ystart] |
4019 | ; edx = [xstart]*65536 + [ystart] |
Line 4838... | Line 4862... | ||
4838 | jne @f |
4862 | jne @f |
4839 | or [esp + 56], byte 1 ; error |
4863 | or [esp + 56], byte 1 ; error |
4840 | mov [esp + 36], dword 8 ; 32-bit protected-mode interface not supported |
4864 | mov [esp + 36], dword 8 ; 32-bit protected-mode interface not supported |
4841 | ret |
4865 | ret |
Line -... | Line 4866... | ||
- | 4866 | ||
4842 | 4867 | @@: |
|
4843 | @@: xchg eax, ecx |
4868 | xchg eax, ecx |
Line 4844... | Line 4869... | ||
4844 | xchg ebx, ecx |
4869 | xchg ebx, ecx |
4845 | 4870 | ||
4846 | cmp al, 3 |
4871 | cmp al, 3 |
Line 4850... | Line 4875... | ||
4850 | mov [esp + 36], eax |
4875 | mov [esp + 36], eax |
4851 | shr eax, 16 |
4876 | shr eax, 16 |
4852 | mov [esp + 32], eax |
4877 | mov [esp + 32], eax |
4853 | ret |
4878 | ret |
Line -... | Line 4879... | ||
- | 4879 | ||
- | 4880 | @@: |
|
- | 4881 | ||
- | 4882 | mov esi, [master_tab+(OS_BASE shr 20)] |
|
- | 4883 | xchg [master_tab], esi |
|
- | 4884 | push esi |
|
- | 4885 | mov edi, cr3 |
|
- | 4886 | mov cr3, edi ;flush TLB |
|
4854 | 4887 | ||
- | 4888 | call pword [apm_entry] ; call APM BIOS |
|
- | 4889 | ||
- | 4890 | xchg eax, [esp] |
|
- | 4891 | mov [master_tab], eax |
|
- | 4892 | mov eax, cr3 |
|
- | 4893 | mov cr3, eax |
|
- | 4894 | pop eax |
|
4855 | @@: call pword [apm_entry] ; call APM BIOS |
4895 | |
4856 | mov [esp + 8 ], edi |
4896 | mov [esp + 8 ], edi |
4857 | mov [esp + 12], esi |
4897 | mov [esp + 12], esi |
4858 | mov [esp + 24], ebx |
4898 | mov [esp + 24], ebx |
4859 | mov [esp + 28], edx |
4899 | mov [esp + 28], edx |
4860 | mov [esp + 32], ecx |
4900 | mov [esp + 32], ecx |
4861 | mov [esp + 36], eax |
4901 | mov [esp + 36], eax |
4862 | setc al |
4902 | setc al |
4863 | and [esp + 56], byte 0xfe |
4903 | and [esp + 56], byte 0xfe |
- | 4904 | or [esp + 56], al |
|
- | 4905 | ||
4864 | or [esp + 56], al |
4906 | |
4865 | ret |
4907 | ret |
Line 4866... | Line 4908... | ||
4866 | ; ----------------------------------------- |
4908 | ; ----------------------------------------- |
Line 4878... | Line 4920... | ||
4878 | cmp byte [BOOT_VAR+0x9030], 1 |
4920 | cmp byte [BOOT_VAR+0x9030], 1 |
4879 | jne @F |
4921 | jne @F |
4880 | ret |
4922 | ret |
4881 | @@: |
4923 | @@: |
4882 | call stop_all_services |
4924 | call stop_all_services |
4883 | - | ||
4884 | push eax |
- | |
4885 | push edx |
- | |
4886 | mov edx, 0x400 ;bocsh |
- | |
4887 | mov al,0xff ;bocsh |
- | |
4888 | out dx, al ;bocsh |
- | |
4889 | pop edx |
- | |
4890 | pop eax |
- | |
4891 | - | ||
4892 | push 3 ; stop playing cd |
4925 | push 3 ; stop playing cd |
4893 | pop eax |
4926 | pop eax |
4894 | call sys_cd_audio |
4927 | call sys_cd_audio |
Line 4895... | Line 4928... | ||
4895 | 4928 |