;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; RDOS operating system ; Copyright (C) 1988-2000, Leif Ekblad ; ; This program is free software; you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by ; the Free Software Foundation; either version 2 of the License, or ; (at your option) any later version. The only exception to this rule ; is for commercial usage in embedded systems. For information on ; usage in commercial embedded systems, contact embedded@rdos.net ; ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License ; along with this program; if not, write to the Free Software ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ; ; The author of this program may be contacted at leif@rdos.net ; ; VIDEO.ASM ; Standard video interface. Hardware independent ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; INCLUDE ..\os\protseg.def INCLUDE ..\driver.def INCLUDE ..\user.def INCLUDE ..\os.def INCLUDE ..\os.inc INCLUDE ..\os\system.def INCLUDE ..\os\system.inc INCLUDE ..\user.inc INCLUDE ..\handle.inc INCLUDE bitmap.inc INCLUDE video.inc INCLUDE ..\apicheck.inc video_mode_entry STRUC mode_link DW ? mode_nr DW ? mode_create DD ?,? mode_x_resol DW ? mode_y_resol DW ? mode_bpp DB ? mode_resv DB ? video_mode_entry ENDS CallVideo MACRO call_proc push ds push ax mov ax,video_local_sel mov ds,ax pop ax mov ds,ds:v_handle call fword ptr ds:&call_proc pop ds ENDM video_process_seg STRUC vp_sel DW ? video_process_seg ENDS data SEGMENT byte public 'DATA' focus_console DW ? data ENDS .386p code SEGMENT byte public 'CODE' assume cs:code extrn init_bitmap:near extrn init_sprite:near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: Font8x19 ; ; DESCRIPTION: 8x19 font ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; font8x19: f00 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h f01 db 000h, 000h, 000h, 07Eh, 081h, 081h, 0A5h, 081h, 081h, 081h, 0BDh, 099h, 081h, 081h, 07Eh, 000h, 000h, 000h, 000h f02 db 000h, 000h, 000h, 07Eh, 0FFh, 0FFh, 0DBh, 0FFh, 0FFh, 0FFh, 0C3h, 0E7h, 0FFh, 0FFh, 07Eh, 000h, 000h, 000h, 000h f03 db 000h, 000h, 000h, 000h, 000h, 000h, 06Ch, 0FEh, 0FEh, 0FEh, 0FEh, 0FEh, 07Ch, 038h, 010h, 000h, 000h, 000h, 000h f04 db 000h, 000h, 000h, 000h, 000h, 000h, 010h, 038h, 07Ch, 0FEh, 0FEh, 07Ch, 038h, 010h, 000h, 000h, 000h, 000h, 000h f05 db 000h, 000h, 000h, 000h, 018h, 03Ch, 03Ch, 03Ch, 0E7h, 0E7h, 0E7h, 0E7h, 018h, 018h, 03Ch, 000h, 000h, 000h, 000h f06 db 000h, 000h, 000h, 000h, 018h, 018h, 03Ch, 07Eh, 0FFh, 0FFh, 0FFh, 07Eh, 018h, 018h, 03Ch, 000h, 000h, 000h, 000h f07 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 03Ch, 03Ch, 03Ch, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h f08 db 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0E7h, 0C3h, 0C3h, 0C3h, 0E7h, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh f09 db 000h, 000h, 000h, 000h, 000h, 000h, 03Ch, 066h, 042h, 042h, 042h, 066h, 03Ch, 000h, 000h, 000h, 000h, 000h, 000h f0A db 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0C3h, 099h, 0BDh, 0BDh, 0BDh, 099h, 0C3h, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh f0B db 000h, 000h, 000h, 01Eh, 006h, 00Eh, 01Ah, 030h, 078h, 0CCh, 0CCh, 0CCh, 0CCh, 0CCh, 078h, 000h, 000h, 000h, 000h f0C db 000h, 000h, 000h, 03Ch, 066h, 066h, 066h, 066h, 066h, 066h, 03Ch, 018h, 07Eh, 018h, 018h, 000h, 000h, 000h, 000h f0D db 000h, 000h, 000h, 03Fh, 033h, 033h, 03Fh, 030h, 030h, 030h, 030h, 030h, 070h, 0F0h, 0E0h, 000h, 000h, 000h, 000h f0E db 000h, 000h, 000h, 07Fh, 063h, 063h, 07Fh, 063h, 063h, 063h, 063h, 063h, 067h, 0E7h, 0E6h, 0C0h, 000h, 000h, 000h f0F db 000h, 000h, 000h, 000h, 000h, 018h, 018h, 0DBh, 03Ch, 0E7h, 0E7h, 03Ch, 0DBh, 018h, 018h, 000h, 000h, 000h, 000h f10 db 000h, 000h, 000h, 080h, 0C0h, 0E0h, 0F0h, 0F8h, 0FEh, 0FEh, 0F8h, 0F0h, 0E0h, 0C0h, 080h, 000h, 000h, 000h, 000h f11 db 000h, 000h, 000h, 002h, 006h, 00Eh, 01Eh, 03Eh, 0FEh, 0FEh, 03Eh, 01Eh, 00Eh, 006h, 002h, 000h, 000h, 000h, 000h f12 db 000h, 000h, 000h, 018h, 03Ch, 07Eh, 018h, 018h, 018h, 018h, 018h, 018h, 07Eh, 03Ch, 018h, 000h, 000h, 000h, 000h f13 db 000h, 000h, 000h, 066h, 066h, 066h, 066h, 066h, 066h, 066h, 066h, 066h, 000h, 066h, 066h, 000h, 000h, 000h, 000h f14 db 000h, 000h, 000h, 07Fh, 0DBh, 0DBh, 0DBh, 0DBh, 07Bh, 01Bh, 01Bh, 01Bh, 01Bh, 01Bh, 01Bh, 000h, 000h, 000h, 000h f15 db 000h, 000h, 000h, 07Ch, 0C6h, 060h, 038h, 06Ch, 0C6h, 0C6h, 06Ch, 038h, 00Ch, 0C6h, 07Ch, 000h, 000h, 000h, 000h f16 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0FEh, 0FEh, 0FEh, 000h, 000h, 000h, 000h f17 db 000h, 000h, 000h, 018h, 03Ch, 07Eh, 018h, 018h, 018h, 018h, 018h, 018h, 07Eh, 03Ch, 018h, 07Eh, 000h, 000h, 000h f18 db 000h, 000h, 000h, 018h, 03Ch, 07Eh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h f19 db 000h, 000h, 000h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 07Eh, 03Ch, 018h, 000h, 000h, 000h, 000h f1A db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 00Ch, 0FEh, 00Ch, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h f1B db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 030h, 060h, 0FEh, 060h, 030h, 000h, 000h, 000h, 000h, 000h, 000h, 000h f1C db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0C0h, 0C0h, 0C0h, 0C0h, 0C0h, 0FEh, 000h, 000h, 000h, 000h, 000h, 000h f1D db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 024h, 066h, 0FFh, 066h, 024h, 000h, 000h, 000h, 000h, 000h, 000h, 000h f1E db 000h, 000h, 000h, 000h, 000h, 010h, 010h, 038h, 038h, 07Ch, 07Ch, 0FEh, 0FEh, 000h, 000h, 000h, 000h, 000h, 000h f1F db 000h, 000h, 000h, 000h, 000h, 0FEh, 0FEh, 07Ch, 07Ch, 038h, 038h, 010h, 010h, 000h, 000h, 000h, 000h, 000h, 000h f20 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h f21 db 000h, 000h, 000h, 018h, 03Ch, 03Ch, 03Ch, 03Ch, 018h, 018h, 018h, 018h, 000h, 018h, 018h, 000h, 000h, 000h, 000h f22 db 000h, 000h, 066h, 066h, 066h, 024h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h f23 db 000h, 000h, 000h, 06Ch, 06Ch, 06Ch, 0FEh, 06Ch, 06Ch, 06Ch, 06Ch, 0FEh, 06Ch, 06Ch, 06Ch, 000h, 000h, 000h, 000h f24 db 000h, 018h, 018h, 07Ch, 0C6h, 0C2h, 0C0h, 0C0h, 07Ch, 006h, 006h, 006h, 086h, 0C6h, 07Ch, 018h, 018h, 000h, 000h f25 db 000h, 000h, 000h, 0C6h, 0C6h, 0CCh, 00Ch, 018h, 018h, 030h, 030h, 060h, 066h, 0C6h, 0C6h, 000h, 000h, 000h, 000h f26 db 000h, 000h, 000h, 038h, 06Ch, 06Ch, 06Ch, 038h, 076h, 0DCh, 0DCh, 0CCh, 0CCh, 0CCh, 076h, 000h, 000h, 000h, 000h f27 db 000h, 000h, 018h, 018h, 018h, 030h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h f28 db 000h, 000h, 000h, 00Ch, 018h, 030h, 030h, 030h, 030h, 030h, 030h, 030h, 030h, 018h, 00Ch, 000h, 000h, 000h, 000h f29 db 000h, 000h, 000h, 030h, 018h, 00Ch, 00Ch, 00Ch, 00Ch, 00Ch, 00Ch, 00Ch, 00Ch, 018h, 030h, 000h, 000h, 000h, 000h f2A db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 066h, 03Ch, 0FFh, 03Ch, 066h, 000h, 000h, 000h, 000h, 000h, 000h, 000h f2B db 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 018h, 0FFh, 018h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h f2C db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 018h, 030h, 000h, 000h, 000h f2D db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0FEh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h f2E db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h f2F db 000h, 000h, 000h, 006h, 006h, 00Ch, 00Ch, 018h, 018h, 030h, 030h, 060h, 060h, 0C0h, 0C0h, 000h, 000h, 000h, 000h f30 db 000h, 000h, 000h, 07Ch, 0C6h, 0C6h, 0C6h, 0D6h, 0D6h, 0D6h, 0D6h, 0C6h, 0C6h, 0C6h, 07Ch, 000h, 000h, 000h, 000h f31 db 000h, 000h, 000h, 018h, 038h, 078h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 07Eh, 000h, 000h, 000h, 000h f32 db 000h, 000h, 000h, 07Ch, 0C6h, 006h, 006h, 00Ch, 018h, 030h, 060h, 0C0h, 0C0h, 0C6h, 0FEh, 000h, 000h, 000h, 000h f33 db 000h, 000h, 000h, 07Ch, 0C6h, 006h, 006h, 006h, 03Ch, 006h, 006h, 006h, 006h, 0C6h, 07Ch, 000h, 000h, 000h, 000h f34 db 000h, 000h, 000h, 01Ch, 01Ch, 03Ch, 03Ch, 06Ch, 06Ch, 0CCh, 0FEh, 00Ch, 00Ch, 00Ch, 01Eh, 000h, 000h, 000h, 000h f35 db 000h, 000h, 000h, 0FEh, 0C0h, 0C0h, 0C0h, 0C0h, 0FCh, 006h, 006h, 006h, 006h, 0C6h, 07Ch, 000h, 000h, 000h, 000h f36 db 000h, 000h, 000h, 038h, 060h, 0C0h, 0C0h, 0C0h, 0FCh, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 07Ch, 000h, 000h, 000h, 000h f37 db 000h, 000h, 000h, 0FEh, 0C6h, 006h, 006h, 006h, 00Ch, 018h, 018h, 030h, 030h, 030h, 030h, 000h, 000h, 000h, 000h f38 db 000h, 000h, 000h, 07Ch, 0C6h, 0C6h, 0C6h, 0C6h, 07Ch, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 07Ch, 000h, 000h, 000h, 000h f39 db 000h, 000h, 000h, 07Ch, 0C6h, 0C6h, 0C6h, 0C6h, 07Eh, 006h, 006h, 006h, 006h, 00Ch, 078h, 000h, 000h, 000h, 000h f3A db 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 000h f3B db 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 030h, 000h, 000h, 000h, 000h f3C db 000h, 000h, 000h, 000h, 006h, 00Ch, 018h, 030h, 060h, 060h, 030h, 018h, 00Ch, 006h, 000h, 000h, 000h, 000h, 000h f3D db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0FEh, 000h, 000h, 0FEh, 000h, 000h, 000h, 000h, 000h, 000h, 000h f3E db 000h, 000h, 000h, 000h, 060h, 030h, 018h, 00Ch, 006h, 006h, 00Ch, 018h, 030h, 060h, 000h, 000h, 000h, 000h, 000h f3F db 000h, 000h, 000h, 07Ch, 0C6h, 0C6h, 006h, 006h, 00Ch, 018h, 018h, 018h, 000h, 018h, 018h, 000h, 000h, 000h, 000h f40 db 000h, 000h, 000h, 000h, 07Ch, 0C6h, 0C6h, 0C6h, 0DEh, 0DEh, 0DEh, 0DCh, 0C0h, 0C0h, 07Ch, 000h, 000h, 000h, 000h f41 db 000h, 000h, 000h, 010h, 038h, 06Ch, 0C6h, 0C6h, 0C6h, 0FEh, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 000h, 000h, 000h, 000h f42 db 000h, 000h, 000h, 0FCh, 066h, 066h, 066h, 066h, 07Ch, 066h, 066h, 066h, 066h, 066h, 0FCh, 000h, 000h, 000h, 000h f43 db 000h, 000h, 000h, 03Ch, 066h, 0C2h, 0C0h, 0C0h, 0C0h, 0C0h, 0C0h, 0C0h, 0C2h, 066h, 03Ch, 000h, 000h, 000h, 000h f44 db 000h, 000h, 000h, 0F8h, 06Ch, 066h, 066h, 066h, 066h, 066h, 066h, 066h, 066h, 06Ch, 0F8h, 000h, 000h, 000h, 000h f45 db 000h, 000h, 000h, 0FEh, 066h, 062h, 060h, 068h, 078h, 068h, 060h, 060h, 062h, 066h, 0FEh, 000h, 000h, 000h, 000h f46 db 000h, 000h, 000h, 0FEh, 066h, 062h, 060h, 068h, 078h, 068h, 060h, 060h, 060h, 060h, 0F0h, 000h, 000h, 000h, 000h f47 db 000h, 000h, 000h, 03Ch, 066h, 0C2h, 0C0h, 0C0h, 0C0h, 0DEh, 0C6h, 0C6h, 0C6h, 066h, 03Ah, 000h, 000h, 000h, 000h f48 db 000h, 000h, 000h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0FEh, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 000h, 000h, 000h, 000h f49 db 000h, 000h, 000h, 03Ch, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 03Ch, 000h, 000h, 000h, 000h f4A db 000h, 000h, 000h, 00Fh, 006h, 006h, 006h, 006h, 006h, 006h, 006h, 006h, 0C6h, 0C6h, 07Ch, 000h, 000h, 000h, 000h f4B db 000h, 000h, 000h, 0E6h, 066h, 066h, 06Ch, 06Ch, 078h, 07Ch, 06Ch, 06Ch, 066h, 066h, 0E6h, 000h, 000h, 000h, 000h f4C db 000h, 000h, 000h, 0F0h, 060h, 060h, 060h, 060h, 060h, 060h, 060h, 060h, 062h, 066h, 0FEh, 000h, 000h, 000h, 000h f4D db 000h, 000h, 000h, 0C6h, 0EEh, 0FEh, 0FEh, 0D6h, 0D6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 000h, 000h, 000h, 000h f4E db 000h, 000h, 000h, 0C6h, 0C6h, 0E6h, 0E6h, 0F6h, 0F6h, 0DEh, 0DEh, 0CEh, 0CEh, 0C6h, 0C6h, 000h, 000h, 000h, 000h f4F db 000h, 000h, 000h, 038h, 06Ch, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 06Ch, 038h, 000h, 000h, 000h, 000h f50 db 000h, 000h, 000h, 0FCh, 066h, 066h, 066h, 066h, 07Ch, 060h, 060h, 060h, 060h, 060h, 0F0h, 000h, 000h, 000h, 000h f51 db 000h, 000h, 000h, 07Ch, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0D6h, 0DEh, 07Ch, 00Ch, 00Eh, 000h, 000h f52 db 000h, 000h, 000h, 0FCh, 066h, 066h, 066h, 066h, 07Ch, 06Ch, 06Ch, 066h, 066h, 066h, 0E6h, 000h, 000h, 000h, 000h f53 db 000h, 000h, 000h, 07Ch, 0C6h, 0C6h, 0C0h, 060h, 038h, 00Ch, 006h, 006h, 0C6h, 0C6h, 07Ch, 000h, 000h, 000h, 000h f54 db 000h, 000h, 000h, 07Eh, 07Eh, 05Ah, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 03Ch, 000h, 000h, 000h, 000h f55 db 000h, 000h, 000h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 07Ch, 000h, 000h, 000h, 000h f56 db 000h, 000h, 000h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 06Ch, 038h, 010h, 000h, 000h, 000h, 000h f57 db 000h, 000h, 000h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0D6h, 0D6h, 0D6h, 0FEh, 06Ch, 06Ch, 000h, 000h, 000h, 000h f58 db 000h, 000h, 000h, 0C6h, 0C6h, 0C6h, 06Ch, 06Ch, 038h, 038h, 06Ch, 06Ch, 0C6h, 0C6h, 0C6h, 000h, 000h, 000h, 000h f59 db 000h, 000h, 000h, 066h, 066h, 066h, 066h, 066h, 03Ch, 018h, 018h, 018h, 018h, 018h, 03Ch, 000h, 000h, 000h, 000h f5A db 000h, 000h, 000h, 0FEh, 0C6h, 086h, 006h, 00Ch, 018h, 030h, 060h, 0C0h, 0C2h, 0C6h, 0FEh, 000h, 000h, 000h, 000h f5B db 000h, 000h, 000h, 03Ch, 030h, 030h, 030h, 030h, 030h, 030h, 030h, 030h, 030h, 030h, 03Ch, 000h, 000h, 000h, 000h f5C db 000h, 000h, 000h, 0C0h, 0C0h, 060h, 060h, 030h, 030h, 018h, 018h, 00Ch, 00Ch, 006h, 006h, 000h, 000h, 000h, 000h f5D db 000h, 000h, 000h, 03Ch, 00Ch, 00Ch, 00Ch, 00Ch, 00Ch, 00Ch, 00Ch, 00Ch, 00Ch, 00Ch, 03Ch, 000h, 000h, 000h, 000h f5E db 000h, 010h, 038h, 06Ch, 0C6h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h f5F db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0FFh, 000h, 000h f60 db 000h, 000h, 030h, 018h, 00Ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h f61 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 078h, 00Ch, 00Ch, 07Ch, 0CCh, 0CCh, 0CCh, 076h, 000h, 000h, 000h, 000h f62 db 000h, 000h, 000h, 0E0h, 060h, 060h, 060h, 078h, 06Ch, 066h, 066h, 066h, 066h, 066h, 0DCh, 000h, 000h, 000h, 000h f63 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07Ch, 0C6h, 0C0h, 0C0h, 0C0h, 0C0h, 0C6h, 07Ch, 000h, 000h, 000h, 000h f64 db 000h, 000h, 000h, 01Ch, 00Ch, 00Ch, 00Ch, 03Ch, 06Ch, 0CCh, 0CCh, 0CCh, 0CCh, 0CCh, 076h, 000h, 000h, 000h, 000h f65 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07Ch, 0C6h, 0C6h, 0FEh, 0C0h, 0C0h, 0C6h, 07Ch, 000h, 000h, 000h, 000h f66 db 000h, 000h, 000h, 038h, 06Ch, 064h, 060h, 060h, 0F0h, 060h, 060h, 060h, 060h, 060h, 0F0h, 000h, 000h, 000h, 000h f67 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 076h, 0CCh, 0CCh, 0CCh, 0CCh, 0CCh, 07Ch, 00Ch, 00Ch, 0CCh, 078h, 000h f68 db 000h, 000h, 000h, 0E0h, 060h, 060h, 060h, 06Ch, 076h, 066h, 066h, 066h, 066h, 066h, 0E6h, 000h, 000h, 000h, 000h f69 db 000h, 000h, 000h, 018h, 018h, 000h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 018h, 03Ch, 000h, 000h, 000h, 000h f6A db 000h, 000h, 000h, 006h, 006h, 000h, 000h, 00Eh, 006h, 006h, 006h, 006h, 006h, 006h, 006h, 066h, 066h, 03Ch, 000h f6B db 000h, 000h, 000h, 0E0h, 060h, 060h, 060h, 066h, 066h, 06Ch, 078h, 078h, 06Ch, 066h, 0E6h, 000h, 000h, 000h, 000h f6C db 000h, 000h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 03Ch, 000h, 000h, 000h, 000h f6D db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ECh, 0FEh, 0D6h, 0D6h, 0D6h, 0D6h, 0C6h, 0C6h, 000h, 000h, 000h, 000h f6E db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0DCh, 066h, 066h, 066h, 066h, 066h, 066h, 066h, 000h, 000h, 000h, 000h f6F db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07Ch, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 07Ch, 000h, 000h, 000h, 000h f70 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0DCh, 066h, 066h, 066h, 066h, 066h, 07Ch, 060h, 060h, 060h, 0F0h, 000h f71 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 076h, 0CCh, 0CCh, 0CCh, 0CCh, 0CCh, 07Ch, 00Ch, 00Ch, 00Ch, 01Eh, 000h f72 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0DCh, 076h, 066h, 060h, 060h, 060h, 060h, 0F0h, 000h, 000h, 000h, 000h f73 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07Ch, 0C6h, 060h, 038h, 00Ch, 006h, 0C6h, 07Ch, 000h, 000h, 000h, 000h f74 db 000h, 000h, 000h, 010h, 030h, 030h, 030h, 0FCh, 030h, 030h, 030h, 030h, 030h, 036h, 01Ch, 000h, 000h, 000h, 000h f75 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0CCh, 0CCh, 0CCh, 0CCh, 0CCh, 0CCh, 0CCh, 076h, 000h, 000h, 000h, 000h f76 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 066h, 066h, 066h, 066h, 066h, 066h, 03Ch, 018h, 000h, 000h, 000h, 000h f77 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0C6h, 0C6h, 0C6h, 0D6h, 0D6h, 0D6h, 0FEh, 06Ch, 000h, 000h, 000h, 000h f78 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0C6h, 0C6h, 06Ch, 038h, 038h, 06Ch, 0C6h, 0C6h, 000h, 000h, 000h, 000h f79 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 07Eh, 006h, 006h, 00Ch, 078h, 000h f7A db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0FEh, 0C6h, 00Ch, 018h, 030h, 060h, 0C6h, 0FEh, 000h, 000h, 000h, 000h f7B db 000h, 000h, 000h, 00Eh, 018h, 018h, 018h, 018h, 070h, 070h, 018h, 018h, 018h, 018h, 00Eh, 000h, 000h, 000h, 000h f7C db 000h, 000h, 000h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h f7D db 000h, 000h, 000h, 070h, 018h, 018h, 018h, 018h, 00Eh, 00Eh, 018h, 018h, 018h, 018h, 070h, 000h, 000h, 000h, 000h f7E db 000h, 000h, 000h, 076h, 0DCh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h f7F db 000h, 000h, 000h, 000h, 000h, 000h, 010h, 038h, 06Ch, 0C6h, 0C6h, 0C6h, 0C6h, 0FEh, 000h, 000h, 000h, 000h, 000h f80 db 000h, 000h, 000h, 03Ch, 066h, 0C2h, 0C0h, 0C0h, 0C0h, 0C0h, 0C0h, 0C0h, 0C2h, 066h, 03Ch, 018h, 00Ch, 038h, 000h f81 db 000h, 000h, 000h, 000h, 0CCh, 0CCh, 000h, 0CCh, 0CCh, 0CCh, 0CCh, 0CCh, 0CCh, 0CCh, 076h, 000h, 000h, 000h, 000h f82 db 000h, 000h, 000h, 00Ch, 018h, 030h, 000h, 07Ch, 0C6h, 0C6h, 0FEh, 0C0h, 0C0h, 0C6h, 07Ch, 000h, 000h, 000h, 000h f83 db 000h, 000h, 000h, 010h, 038h, 06Ch, 000h, 078h, 00Ch, 00Ch, 07Ch, 0CCh, 0CCh, 0CCh, 076h, 000h, 000h, 000h, 000h f84 db 000h, 000h, 000h, 000h, 0CCh, 0CCh, 000h, 078h, 00Ch, 00Ch, 07Ch, 0CCh, 0CCh, 0CCh, 076h, 000h, 000h, 000h, 000h f85 db 000h, 000h, 000h, 060h, 030h, 018h, 000h, 078h, 00Ch, 00Ch, 07Ch, 0CCh, 0CCh, 0CCh, 076h, 000h, 000h, 000h, 000h f86 db 000h, 000h, 000h, 038h, 06Ch, 038h, 000h, 078h, 00Ch, 00Ch, 07Ch, 0CCh, 0CCh, 0CCh, 076h, 000h, 000h, 000h, 000h f87 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07Ch, 0C6h, 0C0h, 0C0h, 0C0h, 0C0h, 0C6h, 07Ch, 018h, 00Ch, 038h, 000h f88 db 000h, 000h, 000h, 010h, 038h, 06Ch, 000h, 07Ch, 0C6h, 0C6h, 0FEh, 0C0h, 0C0h, 0C6h, 07Ch, 000h, 000h, 000h, 000h f89 db 000h, 000h, 000h, 000h, 0CCh, 0CCh, 000h, 07Ch, 0C6h, 0C6h, 0FEh, 0C0h, 0C0h, 0C6h, 07Ch, 000h, 000h, 000h, 000h f8A db 000h, 000h, 000h, 060h, 030h, 018h, 000h, 07Ch, 0C6h, 0C6h, 0FEh, 0C0h, 0C0h, 0C6h, 07Ch, 000h, 000h, 000h, 000h f8B db 000h, 000h, 000h, 000h, 066h, 066h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 018h, 03Ch, 000h, 000h, 000h, 000h f8C db 000h, 000h, 000h, 018h, 03Ch, 066h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 018h, 03Ch, 000h, 000h, 000h, 000h f8D db 000h, 000h, 000h, 060h, 030h, 018h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 018h, 03Ch, 000h, 000h, 000h, 000h f8E db 0C6h, 0C6h, 000h, 010h, 038h, 06Ch, 0C6h, 0C6h, 0C6h, 0FEh, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 000h, 000h, 000h, 000h f8F db 038h, 06Ch, 038h, 000h, 038h, 06Ch, 0C6h, 0C6h, 0C6h, 0FEh, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 000h, 000h, 000h, 000h f90 db 00Ch, 018h, 000h, 0FEh, 066h, 062h, 060h, 068h, 078h, 068h, 060h, 060h, 062h, 066h, 0FEh, 000h, 000h, 000h, 000h f91 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ECh, 036h, 036h, 07Eh, 0D8h, 0D8h, 0D8h, 06Eh, 000h, 000h, 000h, 000h f92 db 000h, 000h, 000h, 03Eh, 06Ch, 0CCh, 0CCh, 0CCh, 0FEh, 0CCh, 0CCh, 0CCh, 0CCh, 0CCh, 0CEh, 000h, 000h, 000h, 000h f93 db 000h, 000h, 000h, 010h, 038h, 06Ch, 000h, 07Ch, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 07Ch, 000h, 000h, 000h, 000h f94 db 000h, 000h, 000h, 000h, 0C6h, 0C6h, 000h, 07Ch, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 07Ch, 000h, 000h, 000h, 000h f95 db 000h, 000h, 000h, 060h, 030h, 018h, 000h, 07Ch, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 07Ch, 000h, 000h, 000h, 000h f96 db 000h, 000h, 000h, 030h, 078h, 0CCh, 000h, 0CCh, 0CCh, 0CCh, 0CCh, 0CCh, 0CCh, 0CCh, 076h, 000h, 000h, 000h, 000h f97 db 000h, 000h, 000h, 060h, 030h, 018h, 000h, 0CCh, 0CCh, 0CCh, 0CCh, 0CCh, 0CCh, 0CCh, 076h, 000h, 000h, 000h, 000h f98 db 000h, 000h, 000h, 000h, 0C6h, 0C6h, 000h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 07Eh, 006h, 006h, 00Ch, 078h, 000h f99 db 0C6h, 0C6h, 000h, 038h, 06Ch, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 06Ch, 038h, 000h, 000h, 000h, 000h f9A db 0C6h, 0C6h, 000h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 07Ch, 000h, 000h, 000h, 000h f9B db 000h, 000h, 000h, 018h, 018h, 03Ch, 066h, 060h, 060h, 060h, 060h, 066h, 03Ch, 018h, 018h, 000h, 000h, 000h, 000h f9C db 000h, 000h, 038h, 06Ch, 064h, 060h, 060h, 0F0h, 060h, 060h, 060h, 060h, 060h, 0E6h, 0FCh, 000h, 000h, 000h, 000h f9D db 000h, 000h, 000h, 066h, 066h, 066h, 03Ch, 018h, 07Eh, 018h, 018h, 07Eh, 018h, 018h, 018h, 000h, 000h, 000h, 000h f9E db 000h, 000h, 0F8h, 0CCh, 0CCh, 0CCh, 0F8h, 0C4h, 0CCh, 0DEh, 0CCh, 0CCh, 0CCh, 0CCh, 0C6h, 000h, 000h, 000h, 000h f9F db 000h, 000h, 00Eh, 01Bh, 018h, 018h, 018h, 018h, 07Eh, 018h, 018h, 018h, 018h, 018h, 018h, 0D8h, 070h, 000h, 000h fA0 db 000h, 000h, 000h, 00Ch, 018h, 030h, 000h, 078h, 00Ch, 00Ch, 07Ch, 0CCh, 0CCh, 0CCh, 076h, 000h, 000h, 000h, 000h fA1 db 000h, 000h, 000h, 00Ch, 018h, 030h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 018h, 03Ch, 000h, 000h, 000h, 000h fA2 db 000h, 000h, 000h, 00Ch, 018h, 030h, 000h, 07Ch, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 07Ch, 000h, 000h, 000h, 000h fA3 db 000h, 000h, 000h, 00Ch, 018h, 030h, 000h, 0CCh, 0CCh, 0CCh, 0CCh, 0CCh, 0CCh, 0CCh, 076h, 000h, 000h, 000h, 000h fA4 db 000h, 000h, 000h, 000h, 076h, 0DCh, 000h, 0DCh, 066h, 066h, 066h, 066h, 066h, 066h, 066h, 000h, 000h, 000h, 000h fA5 db 076h, 0DCh, 000h, 0C6h, 0C6h, 0E6h, 0E6h, 0F6h, 0F6h, 0DEh, 0DEh, 0CEh, 0CEh, 0C6h, 0C6h, 000h, 000h, 000h, 000h fA6 db 000h, 000h, 03Ch, 06Ch, 06Ch, 06Ch, 03Eh, 000h, 07Eh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h fA7 db 000h, 000h, 038h, 06Ch, 06Ch, 06Ch, 038h, 000h, 07Ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h fA8 db 000h, 000h, 000h, 030h, 030h, 000h, 030h, 030h, 030h, 060h, 0C0h, 0C0h, 0C6h, 0C6h, 07Ch, 000h, 000h, 000h, 000h fA9 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0FEh, 0C0h, 0C0h, 0C0h, 0C0h, 000h, 000h, 000h, 000h, 000h, 000h fAA db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0FEh, 006h, 006h, 006h, 006h, 000h, 000h, 000h, 000h, 000h, 000h fAB db 000h, 000h, 0C0h, 0C0h, 0C0h, 0C2h, 0C6h, 0CCh, 018h, 030h, 060h, 0DCh, 0A6h, 00Ch, 018h, 030h, 03Eh, 000h, 000h fAC db 000h, 000h, 0C0h, 0C0h, 0C0h, 0C2h, 0C6h, 0CCh, 018h, 030h, 060h, 0CCh, 09Ch, 03Ch, 07Eh, 00Ch, 00Ch, 000h, 000h fAD db 000h, 000h, 000h, 018h, 018h, 000h, 000h, 018h, 018h, 018h, 018h, 03Ch, 03Ch, 03Ch, 018h, 000h, 000h, 000h, 000h fAE db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 033h, 066h, 0CCh, 0CCh, 066h, 033h, 000h, 000h, 000h, 000h, 000h, 000h fAF db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0CCh, 066h, 033h, 033h, 066h, 0CCh, 000h, 000h, 000h, 000h, 000h, 000h fB0 db 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h fB1 db 055h, 0AAh, 055h, 0AAh, 055h, 0AAh, 055h, 0AAh, 055h, 0AAh, 055h, 0AAh, 055h, 0AAh, 055h, 0AAh, 055h, 0AAh, 055h fB2 db 0DDh, 077h, 0DDh, 077h, 0DDh, 077h, 0DDh, 077h, 0DDh, 077h, 0DDh, 077h, 0DDh, 077h, 0DDh, 077h, 0DDh, 077h, 0DDh fB3 db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h fB4 db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0F8h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h fB5 db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0F8h, 018h, 0F8h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h fB6 db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0F6h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h fB7 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0FEh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h fB8 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0F8h, 018h, 0F8h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h fB9 db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0F6h, 006h, 0F6h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h fBA db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h fBB db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0FEh, 006h, 0F6h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h fBC db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0F6h, 006h, 0FEh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h fBD db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0FEh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h fBE db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0F8h, 018h, 0F8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h fBF db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0F8h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h fC0 db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 01Fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h fC1 db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0FFh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h fC2 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0FFh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h fC3 db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 01Fh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h fC4 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0FFh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h fC5 db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0FFh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h fC6 db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 01Fh, 018h, 01Fh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h fC7 db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 037h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h fC8 db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 037h, 030h, 03Fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h fC9 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 03Fh, 030h, 037h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h fCA db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0F7h, 000h, 0FFh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h fCB db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0FFh, 000h, 0F7h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h fCC db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 037h, 030h, 037h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h fCD db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0FFh, 000h, 0FFh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h fCE db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0F7h, 000h, 0F7h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h fCF db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0FFh, 000h, 0FFh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h fD0 db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0FFh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h fD1 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0FFh, 000h, 0FFh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h fD2 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0FFh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h fD3 db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 03Fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h fD4 db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 01Fh, 018h, 01Fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h fD5 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 01Fh, 018h, 01Fh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h fD6 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 03Fh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h fD7 db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0FFh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h fD8 db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0FFh, 018h, 0FFh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h fD9 db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0F8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h fDA db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 01Fh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h fDB db 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh fDC db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh fDD db 0F0h, 0F0h, 0F0h, 0F0h, 0F0h, 0F0h, 0F0h, 0F0h, 0F0h, 0F0h, 0F0h, 0F0h, 0F0h, 0F0h, 0F0h, 0F0h, 0F0h, 0F0h, 0F0h fDE db 00Fh, 00Fh, 00Fh, 00Fh, 00Fh, 00Fh, 00Fh, 00Fh, 00Fh, 00Fh, 00Fh, 00Fh, 00Fh, 00Fh, 00Fh, 00Fh, 00Fh, 00Fh, 00Fh fDF db 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 0FFh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h fE0 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 076h, 0DCh, 0D8h, 0D8h, 0D8h, 0D8h, 0DCh, 076h, 000h, 000h, 000h, 000h fE1 db 000h, 000h, 000h, 078h, 0CCh, 0CCh, 0CCh, 0CCh, 0D8h, 0CCh, 0C6h, 0C6h, 0C6h, 0C6h, 0DCh, 000h, 000h, 000h, 000h fE2 db 000h, 000h, 000h, 0FEh, 0C6h, 0C6h, 0C0h, 0C0h, 0C0h, 0C0h, 0C0h, 0C0h, 0C0h, 0C0h, 0C0h, 000h, 000h, 000h, 000h fE3 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0FEh, 06Ch, 06Ch, 06Ch, 06Ch, 06Ch, 06Ch, 06Ch, 000h, 000h, 000h, 000h fE4 db 000h, 000h, 000h, 0FEh, 0C6h, 0C0h, 060h, 030h, 018h, 018h, 030h, 060h, 0C0h, 0C6h, 0FEh, 000h, 000h, 000h, 000h fE5 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07Eh, 0D8h, 0D8h, 0D8h, 0D8h, 0D8h, 0D8h, 070h, 000h, 000h, 000h, 000h fE6 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 066h, 066h, 066h, 066h, 066h, 066h, 066h, 07Ch, 060h, 060h, 0C0h, 000h fE7 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 076h, 0DCh, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h fE8 db 000h, 000h, 000h, 03Ch, 018h, 03Ch, 066h, 066h, 066h, 066h, 066h, 066h, 03Ch, 018h, 03Ch, 000h, 000h, 000h, 000h fE9 db 000h, 000h, 000h, 038h, 06Ch, 0C6h, 0C6h, 0C6h, 0FEh, 0C6h, 0C6h, 0C6h, 0C6h, 06Ch, 038h, 000h, 000h, 000h, 000h fEA db 000h, 000h, 000h, 038h, 06Ch, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 06Ch, 06Ch, 06Ch, 0EEh, 000h, 000h, 000h, 000h fEB db 000h, 000h, 000h, 01Eh, 030h, 018h, 00Ch, 03Eh, 066h, 066h, 066h, 066h, 066h, 066h, 03Ch, 000h, 000h, 000h, 000h fEC db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07Eh, 0DBh, 0DBh, 0DBh, 0DBh, 07Eh, 000h, 000h, 000h, 000h, 000h, 000h fED db 000h, 000h, 000h, 000h, 000h, 003h, 006h, 07Eh, 0CFh, 0DBh, 0DBh, 0F3h, 07Eh, 060h, 0C0h, 000h, 000h, 000h, 000h fEE db 000h, 000h, 000h, 01Ch, 030h, 060h, 060h, 060h, 07Ch, 060h, 060h, 060h, 060h, 030h, 01Ch, 000h, 000h, 000h, 000h fEF db 000h, 000h, 000h, 07Ch, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 0C6h, 000h, 000h, 000h, 000h fF0 db 000h, 000h, 000h, 000h, 000h, 0FEh, 000h, 000h, 000h, 0FEh, 000h, 000h, 000h, 0FEh, 000h, 000h, 000h, 000h, 000h fF1 db 000h, 000h, 000h, 000h, 000h, 018h, 018h, 018h, 07Eh, 018h, 018h, 018h, 000h, 000h, 07Eh, 000h, 000h, 000h, 000h fF2 db 000h, 000h, 000h, 000h, 060h, 030h, 018h, 00Ch, 006h, 00Ch, 018h, 030h, 060h, 000h, 07Eh, 000h, 000h, 000h, 000h fF3 db 000h, 000h, 000h, 000h, 006h, 00Ch, 018h, 030h, 060h, 030h, 018h, 00Ch, 006h, 000h, 07Eh, 000h, 000h, 000h, 000h fF4 db 000h, 000h, 000h, 00Eh, 01Bh, 01Bh, 01Bh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h fF5 db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0D8h, 0D8h, 0D8h, 070h, 000h, 000h, 000h, 000h fF6 db 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 07Eh, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 000h fF7 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 076h, 0DCh, 000h, 000h, 076h, 0DCh, 000h, 000h, 000h, 000h, 000h, 000h fF8 db 000h, 000h, 038h, 06Ch, 06Ch, 06Ch, 038h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h fF9 db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h fFA db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h fFB db 000h, 000h, 00Fh, 00Ch, 00Ch, 00Ch, 00Ch, 00Ch, 00Ch, 00Ch, 0ECh, 06Ch, 06Ch, 03Ch, 01Ch, 000h, 000h, 000h, 000h fFC db 000h, 000h, 0D8h, 06Ch, 06Ch, 06Ch, 06Ch, 06Ch, 06Ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h fFD db 000h, 000h, 038h, 06Ch, 00Ch, 018h, 030h, 064h, 07Ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h fFE db 000h, 000h, 000h, 000h, 000h, 07Ch, 07Ch, 07Ch, 07Ch, 07Ch, 07Ch, 07Ch, 07Ch, 07Ch, 000h, 000h, 000h, 000h, 000h fFF db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h AttribBgrTab: abt00 DD 00000000h abt01 DD 00990000h abt02 DD 00009900h abt03 DD 00CC6600h abt04 DD 00000099h abt05 DD 00990099h abt06 DD 00009999h abt07 DD 00CCCCCCh abt08 DD 00666666h abt09 DD 00FF6666h abt0A DD 0066FF66h abt0B DD 00FFFF66h abt0C DD 006666FFh abt0D DD 00FF66FFh abt0E DD 0066FFFFh abt0F DD 00FFFFFFh ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: UpdateDisplayBgr32 ; ; DESCRIPTION: Update display ; ; PARAMETERS: DS Console ; ES:EDI LFB ; ECX Row size ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; disp_fore_color EQU -4 disp_back_color EQU -8 disp_row_size EQU -12 UpdateDisplayBgr32 PROC near push ebp mov ebp,esp sub esp,12 ; mov [ebp].disp_row_size,ecx ; movzx ecx,ds:c_rows mov esi,OFFSET c_text_data udb32RowLoop: push ecx push edi ; movzx ecx,ds:c_cols udb32ColLoop: xor al,al xchg al,ds:[esi].ct_dirty or al,al jz udb32NextChar ; push ecx push edi ; mov bl,ds:[esi].ct_fore_col and ebx,0Fh shl ebx,2 mov eax,dword ptr cs:[ebx].AttribBgrTab mov [ebp].disp_fore_color,eax ; mov bl,ds:[esi].ct_back_col and ebx,0Fh shl ebx,2 mov eax,dword ptr cs:[ebx].AttribBgrTab mov [ebp].disp_back_color,eax ; mov al,ds:[esi].ct_char mov ah,19 mul ah movzx ebx,ax add ebx,OFFSET font8x19 ; mov ecx,19 udb32LineLoop: push ecx push edi mov ecx,8 mov al,cs:[ebx] udb32BitLoop: test al,80h jz udb32Back udb32Fore: mov eax,[ebp].disp_fore_color mov es:[edi],eax jmp udb32Next udb32Back: mov eax,[ebp].disp_back_color mov es:[edi],eax udb32Next: add edi,4 shl al,1 ; loop udb32BitLoop ; pop edi pop ecx add edi,[ebp].disp_row_size inc ebx ; loop udb32LineLoop ; pop edi pop ecx udb32NextChar: add esi,4 add edi,8 * 4 loop udb32ColLoop ; pop edi pop ecx ; mov eax,[ebp].disp_row_size mov edx,19 mul edx add edi,eax sub ecx,1 jnz udb32RowLoop ; add esp,12 pop ebp ret UpdateDisplayBgr32 ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: UpdateThread ; ; DESCRIPTION: Update thread ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; update_thread_name DB 'Video Sync', 0 update_thread: utLoop: int 3 mov ax,system_data_sel mov ds,ax mov ax,flat_sel mov es,ax mov edi,ds:efi_lfb mov ecx,ds:efi_scan_size mov ax,SEG data mov ds,ax mov ax,ds:focus_console or ax,ax jz utNext ; mov ds,ax call UpdateDisplayBgr32 utNext: mov ax,20 WaitMilliSec jmp utLoop ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: CreateFixedEfiConsole ; ; DESCRIPTION: Create a new EFI console with fixed font ; ; RETURNS: ES Console sel ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CreateFixedEfiConsole PROC near push ds pushad ; mov ax,system_data_sel mov ds,ax movzx eax,ds:efi_width shr eax,3 mov esi,eax ; movzx eax,ds:efi_height mov ecx,19 xor edx,edx div ecx mov edi,eax ; mul esi mov ebp,eax shl eax,2 add eax,OFFSET c_text_data AllocateBigLinear AllocateGdt mov ecx,eax CreateDataSelector32 mov es,bx mov es:c_text_entries,bp mov es:c_rows,di mov es:c_cols,si mov es:c_font,0 mov es:c_font_width,8 mov es:c_font_height,19 ; mov eax,ds:efi_lfb mov es:c_lfb,eax mov ax,ds:efi_width mov es:c_width,ax mov ax,ds:efi_height mov es:c_height,ax mov eax,ds:efi_scan_size mov es:c_scan_size,eax mov es:c_usage,1 ; mov eax,00070120h mov edi,OFFSET c_text_data movzx ecx,es:c_text_entries rep stosd ; popad pop ds ret CreateFixedEfiConsole Endp ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: CreateConsole ; ; DESCRIPTION: Create a new console ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public CreateConsole CreateConsole PROC near push ds push es push ax ; GetThread mov ds,ax mov ds,ds:p_app_sel call CreateFixedEfiConsole mov ds:app_console,es ; pop ax pop es pop ds ret CreateConsole Endp ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: DeleteConsole ; ; DESCRIPTION: Delete console ; ; PARAMETERS: ES Console sel ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DeleteConsole PROC near FreeMem ret DeleteConsole Endp ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: DisableConsoleFocus ; ; DESCRIPTION: Disable console focus ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public DisableConsoleFocus DisableConsoleFocus Proc near push ds push es push ax ; mov ax,SEG data mov ds,ax xor ax,ax xchg ax,ds:focus_console or ax,ax jz dcfDone ; mov ds,ax lock and ds:c_flags,NOT CONSOLE_FLAG_ACTIVE dcfDone: pop ax pop es pop ds ret DisableConsoleFocus Endp ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: EnableConsoleFocus ; ; DESCRIPTION: Enable console focus ; ; PARAMETERS: BX Focus thread ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public EnableConsoleFocus EnableConsoleFocus Proc near push ds push es push ax push bx ; mov es,bx mov es,es:p_app_sel mov bx,es:app_console or bx,bx jz ecfDone ; mov ax,SEG data mov ds,ax mov es,bx lock or es:c_flags,CONSOLE_FLAG_ACTIVE mov ds:focus_console,bx ecfDone: pop bx pop ax pop es pop ds ret EnableConsoleFocus Endp ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: QueryVideoMode ; ; DESCRIPTION: Query video mode ; ; PARAMETERS: AX mode # or 0 ; ; RETURNS: AX bits / pixel ; CX x-resolution ; DX y-resolution ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; query_video_mode_name DB 'Query Video Mode',0 query_video_mode PROC far ret query_video_mode Endp ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: GetVideoMode ; ; DESCRIPTION: Get video mode ; ; PARAMETERS: AX bits / pixel ; CX x-resolution ; DX y-resolution ; ; RETURNS: AX mode # or 0 ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; get_video_mode_name DB 'Get Video Mode',0 get_video_mode PROC far ret get_video_mode Endp ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: SetVideoMode ; ; DESCRIPTION: Set video mode ; ; PARAMETERS: AX Mode ; ; RETURNS: AX bits / pixel ; BX bitmap handle ; CX x-resolution ; DX y-resolution ; SI line size ; ES:EDI user buffer ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; set_video_mode_name DB 'Set Video Mode',0 set_video_mode PROC far ret set_video_mode ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: InvertMouse ; ; DESCRIPTION: Invert colors for mouse-pointer ; ; PARAMETERS: CX COL (x) ; DX ROW (y) ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; invert_mouse_name DB 'InvertMouse',0 invert_mouse PROC far ret invert_mouse ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: WriteConsoleChar ; ; DESCRIPTION: Write char to buffer ; ; PARAMETERS: FS Console ; AL Char ; CX Col ; DX Row ; BL Fore color ; BH Back color ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; WriteConsoleChar PROC near push edi ; push ax push dx mov ax,fs:c_cols mul dx add ax,cx movzx edi,ax shl edi,2 add edi,OFFSET c_text_data mov ax,bx shl eax,16 pop dx pop ax ; mov ah,1 mov fs:[edi],eax ; test fs:c_flags,CONSOLE_FLAG_ACTIVE jz wccDone ; push ds push bx pop bx pop ds wccDone: pop edi ret WriteConsoleChar Endp ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: WriteConsole ; ; DESCRIPTION: Write char to buffer ; ; PARAMETERS: DS Thread sel ; FS Console ; AL Char ; BL Fore color ; BH Back color ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; WriteConsole PROC near push cx push dx ; mov cx,ds:p_col mov dx,ds:p_row call WriteConsoleChar inc ds:p_col ; pop dx pop cx ret WriteConsole Endp ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: UpdatePos ; ; DESCRIPTION: Update cursor position ; ; PARAMETERS: DS Thread sel ; FS Console sel ; AL Char ; BL Fore color ; BH Back color ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; UpdatePos Proc near push ax ; mov ax,fs:c_cols cmp ds:p_col,-1 jne update_not_row_wrap ; mov ds:p_col,ax update_not_row_wrap: cmp ds:p_col,ax jbe update_video_same_row ; mov ds:p_col,0 inc ds:p_row update_video_same_row: mov ax,fs:c_rows cmp ds:p_row,ax jc update_video_end ; dec ds:p_row ; ; scroll up! ; update_video_end: ret UpdatePos ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: WriteSkip ; ; DESCRIPTION: Write NUL char ; ; PARAMETERS: DS Thread sel ; FS Console sel ; AL Char ; BL Fore color ; BH Back color ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; WriteSkip PROC near push ax mov al,' ' call WriteConsole pop ax ret WriteSkip ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: WriteTab ; ; DESCRIPTION: Write TAB char ; ; PARAMETERS: DS Thread sel ; FS Console ; AL Char ; BL Fore color ; BH Back color ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; WriteTab PROC near push ax mov al,' ' write_tab_more: call WriteConsole test ds:p_col,3 jnz write_tab_more ; pop ax ret WriteTab ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: WriteDel ; ; DESCRIPTION: Write DEL char ; ; PARAMETERS: DS Thread sel ; AL Char ; BL Fore color ; BH Back color ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; WriteDel PROC near dec ds:p_col ret WriteDel ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: WriteLf ; ; DESCRIPTION: Write LF char ; ; PARAMETERS: DS Thread sel ; AL Char ; BL Fore color ; BH Back color ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; WriteLf PROC near inc ds:p_row ret WriteLf ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: WriteCr ; ; DESCRIPTION: Write CR char ; ; PARAMETERS: DS Thread sel ; AL Char ; BL Fore color ; BH Back color ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; WriteCr PROC near mov ds:p_col,0 ret WriteCr ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: WriteOne ; ; DESCRIPTION: Write one character to screen ; ; PARAMETERS: DS Thread sel ; FS Console ; AL Char ; BL Fore color ; BH Back color ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; write_tab: wct00 DD OFFSET WriteSkip wct01 DD OFFSET WriteConsole wct02 DD OFFSET WriteConsole wct03 DD OFFSET WriteConsole wct04 DD OFFSET WriteConsole wct05 DD OFFSET WriteConsole wct06 DD OFFSET WriteConsole wct07 DD OFFSET WriteConsole wct08 DD OFFSET WriteDel wct09 DD OFFSET WriteTab wct0A DD OFFSET WriteLf wct0B DD OFFSET WriteConsole wct0C DD OFFSET WriteConsole wct0D DD OFFSET WriteConsole wct0E DD OFFSET WriteConsole wct0F DD OFFSET WriteConsole WriteOne PROC near push esi movzx esi,al cmp esi,0Fh jc write_char_doit ; mov esi,0Fh write_char_doit: shl esi,2 call dword ptr cs:[esi].write_tab call UpdatePos write_ansi_done: pop esi ret WriteOne ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: SetCursorPosition ; ; DESCRIPTION: Set cursor position ; ; PARAMETERS: CX COL (x) ; DX ROW (y) ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; set_cursor_pos_name DB 'Set Cursor Position',0 set_cursor_position PROC far int 3 ret set_cursor_position ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: GetCursorPosition ; ; DESCRIPTION: Get cursor position ; ; RETURNS: CX COL (x) ; DX Row (y) ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; get_cursor_pos_name DB 'Get Cursor Position',0 get_cursor_position PROC far push ds push ax ; GetThread mov ds,ax mov dx,ds:p_row mov cx,ds:p_col ; pop ax pop ds ret get_cursor_position ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: SetForeColor ; ; DESCRIPTION: Set text mode fore color ; ; PARAMETERS: AL Color ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; set_forecolor_name DB 'Set Fore Color',0 set_forecolor PROC far int 3 ret set_forecolor ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: SetBackColor ; ; DESCRIPTION: Set text mode back color ; ; PARAMETERS: AL Color ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; set_backcolor_name DB 'Set Back Color',0 set_backcolor PROC far int 3 ret set_backcolor ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: GetCharAttrib ; ; DESCRIPTION: Get char & attribute ; ; PARAMETERS: AL Character ; BL Back color ; BH Fore color ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; get_char_attrib_name DB 'Get Character & Attribute',0 get_char_attrib PROC far int 3 ret get_char_attrib ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: WriteChar ; ; DESCRIPTION: Write one character to screen ; ; PARAMETERS: AL Char ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; write_char_name DB 'Write Char',0 write_char PROC far int 3 ret write_char ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: WriteAsciiz ; ; DESCRIPTION: Write NULL terminated string ; ; PARAMETERS: ES:(E)DI Null terminated string ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; write_asciiz_name DB 'Write Asciiz String',0 write_asciiz16 PROC far push ds push fs push ax push bx push di ; GetThread int 3 mov ds,ax mov fs,ds:p_app_sel mov ax,fs:app_console or ax,ax jz write_asciiz_done16 ; mov fs,ax mov bl,ds:p_forecolor mov bh,ds:p_backcolor HideMouse write_asciiz_loop16: mov al,es:[di] inc edi or al,al jz write_asciiz_done16 ; call WriteOne jmp write_asciiz_loop16 write_asciiz_done16: ShowMouse ; pop di pop bx pop ax pop fs pop ds ret write_asciiz16 ENDP write_asciiz32 PROC far push ds push fs push ax push bx push edi ; GetThread int 3 mov ds,ax mov fs,ds:p_app_sel mov ax,fs:app_console or ax,ax jz write_asciiz_done32 ; mov fs,ax mov bl,ds:p_forecolor mov bh,ds:p_backcolor HideMouse write_asciiz_loop32: mov al,es:[edi] inc edi or al,al jz write_asciiz_done32 ; call WriteOne jmp write_asciiz_loop32 write_asciiz_done32: ShowMouse ; pop edi pop bx pop ax pop fs pop ds ret write_asciiz32 ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: WriteDosString ; ; DESCRIPTION: Write '$'-terminated string ; ; PARAMETERS: ES:EDI Adress to string ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; write_dos_string_name DB 'Write Dos String',0 write_dos_string PROC far int 3 ret write_dos_string ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: WriteSizeString ; ; DESCRIPTION: Write a number of characters ; ; PARAMETERS: ES:(E)DI String ; (E)CX Number of characters ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; write_size_string_name DB 'Write Size String',0 write_size_string16 PROC far push ds push gs push ax push bx push cx push di ; HideMouse or cx,cx jz write_size_string_done16 ; GetThread int 3 mov ds,ax mov fs,ds:p_app_sel mov ax,fs:app_console or ax,ax jz write_size_string_done16 ; mov fs,ax mov bl,ds:p_forecolor mov bh,ds:p_backcolor write_size_string_loop16: mov al,es:[di] inc di call WriteOne sub cx,1 jnz write_size_string_loop16 write_size_string_done16: ShowMouse ; pop di pop cx pop bx pop ax pop fs pop ds ret write_size_string16 ENDP write_size_string32 PROC far push ds push fs push ax push bx push ecx push edi ; HideMouse or ecx,ecx jz write_size_string_done32 ; GetThread int 3 mov ds,ax mov fs,ds:p_app_sel mov ax,fs:app_console or ax,ax jz write_size_string_done32 ; mov fs,ax mov bl,ds:p_forecolor mov bh,ds:p_backcolor write_size_string_loop32: mov al,es:[edi] inc edi call WriteOne sub ecx,1 jnz write_size_string_loop32 write_size_string_done32: ShowMouse ; pop edi pop ecx pop bx pop ax pop ds ret write_size_string32 ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: WriteAttributeString ; ; DESCRIPTION: Write a number of characters & attributes ; ; PARAMETERS: AX Col ; DX Row ; ES:(E)DI String ; (E)CX Number of characters ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; write_attr_string_name DB 'Write Attribute String',0 write_attr_string16 PROC far int 3 ret write_attr_string16 ENDP write_attr_string32 PROC far int 3 ret write_attr_string32 ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: SetClipRect ; ; DESCRIPTION: Set clipping rectangle ; ; PARAMETERS: BX Bitmap handle ; CX X min ; DX Y min ; SI X max ; DI Y max ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; set_clip_rect_name DB 'Set Clip Rect',0 set_clip_rect PROC far push ds push es push ebx push cx push dx push si push di ; push ax mov ax,BITMAP_HANDLE DerefHandle pop ax jc set_clip_rect_done ; mov es,[ebx].bm_sel ; test ch,80h jz set_clip_xmin_pos ; xor cx,cx set_clip_xmin_pos: test dh,80h jz set_clip_ymin_pos ; xor dx,dx set_clip_ymin_pos: test si,8000h jz set_clip_xmax_pos ; xor si,si set_clip_xmax_pos: test di,8000h jz set_clip_ymax_pos ; xor di,di set_clip_ymax_pos: cmp cx,si jc set_clip_x_ok ; xchg cx,si set_clip_x_ok: cmp dx,di jc set_clip_y_ok ; xchg dx,di set_clip_y_ok: cmp cx,es:v_width jc set_clip_xmin_noov ; mov cx,es:v_width dec cx set_clip_xmin_noov: cmp dx,es:v_height jc set_clip_ymin_noov ; mov dx,es:v_height dec dx set_clip_ymin_noov: cmp si,es:v_width jc set_clip_xmax_noov ; mov si,es:v_width dec si set_clip_xmax_noov: cmp di,es:v_height jc set_clip_ymax_noov ; mov di,es:v_height dec di set_clip_ymax_noov: mov [ebx].bm_x_min,cx mov [ebx].bm_y_min,dx mov [ebx].bm_x_max,si mov [ebx].bm_y_max,di set_clip_rect_done: pop di pop si pop dx pop cx pop ebx pop es pop ds ret set_clip_rect ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: ClearClipRect ; ; DESCRIPTION: Clear clipping rectangle ; ; PARAMETERS: BX Bitmap handle ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; clear_clip_rect_name DB 'Clear Clip Rect',0 clear_clip_rect PROC far push ds push es push ax push ebx ; mov ax,BITMAP_HANDLE DerefHandle jc clear_clip_rect_done ; mov es,[ebx].bm_sel mov [ebx].bm_x_min,0 mov [ebx].bm_y_min,0 mov ax,es:v_width dec ax mov [ebx].bm_x_max,ax mov ax,es:v_height dec ax mov [ebx].bm_y_max,ax clc clear_clip_rect_done: pop ebx pop ax pop es pop ds ret clear_clip_rect ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: SetDrawColor ; ; DESCRIPTION: Set draw color ; ; PARAMETERS: EAX RGB color ; BX Bitmap handle ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; set_draw_color_name DB 'Set Draw Color',0 set_draw_color PROC far push ds push eax push ebx ; push ax mov ax,BITMAP_HANDLE DerefHandle pop ax jc set_draw_color_done ; push ds mov ds,[ebx].bm_sel call fword ptr ds:v_translate_color_proc pop ds mov [ebx].bm_color,eax set_draw_color_done: pop ebx pop eax pop ds ret set_draw_color ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: SetLgop ; ; DESCRIPTION: Set LGOP ; ; PARAMETERS: AX LGOP ; BX Bitmap handle ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; set_lgop_name DB 'Set LGOP',0 set_lgop PROC far cmp ax,13 jbe set_lgop_ok mov ax,1 set_lgop_ok: push ds push ebx ; push ax mov ax,BITMAP_HANDLE DerefHandle pop ax jc set_lgop_done ; mov [ebx].bm_lgop,ax set_lgop_done: pop ebx pop ds ret set_lgop ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: SetHollowStyle ; ; DESCRIPTION: Set hollow style ; ; PARAMETERS: BX Bitmap handle ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; set_hollow_style_name DB 'Set Hollow Style',0 set_hollow_style PROC far push ds push ebx ; push ax mov ax,BITMAP_HANDLE DerefHandle pop ax jc set_hollow_done ; mov [ebx].bm_style,STYLE_HOLLOW set_hollow_done: pop ebx pop ds ret set_hollow_style ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: SetFilledStyle ; ; DESCRIPTION: Set filled style ; ; PARAMETERS: BX Bitmap handle ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; set_filled_style_name DB 'Set Filled Style',0 set_filled_style PROC far push ds push ebx ; push ax mov ax,BITMAP_HANDLE DerefHandle pop ax jc set_filled_done ; mov [ebx].bm_style,STYLE_FILLED set_filled_done: pop ebx pop ds ret set_filled_style ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: SetFont ; ; DESCRIPTION: Set font ; ; PARAMETERS: BX Bitmap handle ; AX Font ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; set_font_name DB 'Set Font',0 set_font PROC far push ds push ebx ; push ax mov ax,BITMAP_HANDLE DerefHandle pop ax jc set_font_done ; mov [ebx].bm_font,ax set_font_done: pop ebx pop ds ret set_font ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: GetPixel ; ; DESCRIPTION: Get pixel ; ; PARAMETERS: BX Bitmap handle ; CX x ; DX y ; ; RETURNS: EAX RGB color ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; get_pixel_name DB 'Get Pixel',0 get_pixel PROC far push ds push ax push ebx ; mov ax,BITMAP_HANDLE DerefHandle jc get_pixel_fail ; mov ds,[ebx].bm_sel pop bx pop ax EnterSection ds:v_section call fword ptr ds:v_get_pixel_proc LeaveSection ds:v_section pop ds ret get_pixel_fail: pop ebx pop ax pop ds ret get_pixel ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: SetPixel ; ; DESCRIPTION: Set pixel ; ; PARAMETERS: BX Bitmap handle ; CX x ; DX y ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; set_pixel_name DB 'Set Pixel',0 set_pixel PROC far push ds push eax push ebx ; mov ax,BITMAP_HANDLE DerefHandle jc set_pixel_fail ; mov eax,[bx].bm_color push [ebx].bm_lgop push [ebx].bm_x_min push [ebx].bm_y_min push [ebx].bm_x_max push [ebx].bm_y_max mov ds,[ebx].bm_sel EnterSection ds:v_section pop ds:v_y_max pop ds:v_x_max pop ds:v_y_min pop ds:v_x_min pop ds:v_lgop mov ds:v_color,eax pop ebx pop eax call fword ptr ds:v_set_pixel_proc LeaveSection ds:v_section pop ds ret set_pixel_fail: pop ebx pop eax pop ds ret set_pixel ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: Blit ; ; DESCRIPTION: Blit ; ; PARAMETERS: AX Source bitmap handle ; BX Dest bitmap handle ; CX Width ; DX Height ; ESI Source x + y << 16 ; EDI Dest x + y << 16 ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; blit_name DB 'Blit',0 blit_src_y EQU -4 blit_src_x EQU -6 blit_dest_y EQU -8 blit_dest_x EQU -10 blit_width EQU -12 blit_height EQU -14 blit_src_sel EQU -16 blit_dest_sel EQU -18 blit_pr PROC far push ebp mov ebp,esp sub esp,20 push ds push es pushad ; mov [ebp].blit_src_x,esi mov [ebp].blit_dest_x,edi ; or cx,cx jz blit_done ; or dx,dx jz blit_done ; mov [ebp].blit_width,cx mov [ebp].blit_height,dx ; mov cx,bx push ax mov bx,ax mov ax,BITMAP_HANDLE DerefHandle pop ax jc blit_failed ; mov dx,[ebx].bm_sel mov [ebp].blit_src_sel,dx ; push ax mov bx,cx mov ax,BITMAP_HANDLE DerefHandle pop ax jc blit_failed ; mov dx,[ebx].bm_sel mov [ebp].blit_dest_sel,dx ; push [ebx].bm_lgop push [ebx].bm_color push [ebx].bm_x_min push [ebx].bm_y_min push [ebx].bm_x_max push [ebx].bm_y_max ; mov ax,[ebp].blit_src_sel cmp ax,[ebp].blit_dest_sel je blit_same_bitmap ; jae blit_take_dest_first blit_take_src_first: mov ds,[ebp].blit_src_sel EnterSection ds:v_section ; mov ds,[ebp].blit_dest_sel EnterSection ds:v_section pop ds:v_y_max pop ds:v_x_max pop ds:v_y_min pop ds:v_x_min pop ds:v_color pop ds:v_lgop jmp blit_entered blit_take_dest_first: mov ds,[ebp].blit_dest_sel EnterSection ds:v_section pop ds:v_y_max pop ds:v_x_max pop ds:v_y_min pop ds:v_x_min pop ds:v_color pop ds:v_lgop ; mov ds,[ebp].blit_src_sel EnterSection ds:v_section blit_entered: mov ds,[ebp].blit_src_sel mov al,ds:v_alpha cmp al,1 je blit_alpha ; mov al,ds:v_bpp cmp al,1 je blit_check1 ; mov ds,[ebp].blit_dest_sel cmp al,ds:v_bpp je blit_same_bpp jmp blit_diff_bpp blit_check1: mov ds,[ebp].blit_dest_sel cmp al,ds:v_bpp jne blit1 blit_diff_bpp: movzx eax,word ptr [ebp].blit_width shl eax,2 AllocateGlobalMem blit_diff_loop: mov ds,[ebp].blit_src_sel mov ax,[ebp].blit_width mov cx,[ebp].blit_src_x mov dx,[ebp].blit_src_y cmp dx,0 jl blit_diff_next ; cmp dx,ds:v_height jge blit_diff_next ; mov di,cx add di,ax cmp di,ds:v_width jle blit_diff_get ; mov ax,ds:v_width sub ax,cx blit_diff_get: xor edi,edi call fword ptr ds:v_get_rgb_row_proc ; mov ds,[ebp].blit_dest_sel mov ax,[ebp].blit_width mov cx,[ebp].blit_dest_x mov dx,[ebp].blit_dest_y xor edi,edi call fword ptr ds:v_set_rgb_row_proc blit_diff_next: inc word ptr [ebp].blit_src_y inc word ptr [ebp].blit_dest_y sub word ptr [ebp].blit_height,1 jnz blit_diff_loop ; FreeMem mov ds,[ebp].blit_dest_sel LeaveSection ds:v_section mov ds,[ebp].blit_src_sel LeaveSection ds:v_section clc jmp blit_done blit_same_bpp: mov ds,[ebp].blit_src_sel mov cx,[ebp].blit_src_x mov dx,[ebp].blit_src_y call fword ptr ds:v_get_line_proc ; mov ds,[ebp].blit_dest_sel mov ax,[ebp].blit_width mov cx,[ebp].blit_dest_x mov dx,[ebp].blit_dest_y call fword ptr ds:v_set_native_row_proc ; inc word ptr [ebp].blit_src_y inc word ptr [ebp].blit_dest_y sub word ptr [ebp].blit_height,1 jnz blit_same_bpp ; mov ds,[ebp].blit_dest_sel LeaveSection ds:v_section mov ds,[ebp].blit_src_sel LeaveSection ds:v_section clc jmp blit_done blit_same_bitmap: mov ds,[ebp].blit_src_sel EnterSection ds:v_section pop ds:v_y_max pop ds:v_x_max pop ds:v_y_min pop ds:v_x_min pop ds:v_color pop ds:v_lgop ; mov dx,[ebp].blit_src_y cmp dx,[ebp].blit_dest_y je blit_same_line ja blit_forward blit_reverse: mov ax,[ebp].blit_height dec ax add [ebp].blit_src_y,ax add [ebp].blit_dest_y,ax blit_reverse_loop: mov cx,[ebp].blit_src_x mov dx,[ebp].blit_src_y call fword ptr ds:v_get_line_proc ; mov ax,[ebp].blit_width mov cx,[ebp].blit_dest_x mov dx,[ebp].blit_dest_y call fword ptr ds:v_set_native_row_proc ; dec word ptr [ebp].blit_src_y dec word ptr [ebp].blit_dest_y sub word ptr [ebp].blit_height,1 jnz blit_reverse_loop ; mov ds,[ebp].blit_src_sel LeaveSection ds:v_section clc jmp blit_done blit_forward: mov cx,[ebp].blit_src_x mov dx,[ebp].blit_src_y call fword ptr ds:v_get_line_proc ; mov ax,[ebp].blit_width mov cx,[ebp].blit_dest_x mov dx,[ebp].blit_dest_y call fword ptr ds:v_set_native_row_proc ; inc word ptr [ebp].blit_src_y inc word ptr [ebp].blit_dest_y sub word ptr [ebp].blit_height,1 jnz blit_forward ; mov ds,[ebp].blit_src_sel LeaveSection ds:v_section clc jmp blit_done blit_same_line: movzx eax,word ptr [ebp].blit_width shl eax,2 AllocateGlobalMem blit_same_line_loop: mov ax,[ebp].blit_width mov cx,[ebp].blit_src_x mov dx,[ebp].blit_src_y xor edi,edi call fword ptr ds:v_get_native_row_proc ; mov ax,[ebp].blit_width mov cx,[ebp].blit_dest_x mov dx,[ebp].blit_dest_y xor edi,edi call fword ptr ds:v_set_native_row_proc ; inc word ptr [ebp].blit_src_y inc word ptr [ebp].blit_dest_y sub word ptr [ebp].blit_height,1 jnz blit_same_line_loop ; FreeMem mov ds,[ebp].blit_src_sel LeaveSection ds:v_section clc jmp blit_done blit_alpha: movzx eax,word ptr [ebp].blit_width shl eax,2 AllocateGlobalMem blit_alpha_loop: mov ds,[ebp].blit_src_sel mov ax,[ebp].blit_width mov cx,[ebp].blit_src_x mov dx,[ebp].blit_src_y cmp dx,0 jl blit_alpha_next ; cmp dx,ds:v_height jge blit_alpha_next ; mov di,cx add di,ax cmp di,ds:v_width jle blit_alpha_get ; mov ax,ds:v_width sub ax,cx blit_alpha_get: xor edi,edi call fword ptr ds:v_get_rgba_row_proc ; mov ds,[ebp].blit_dest_sel mov ax,[ebp].blit_width mov cx,[ebp].blit_dest_x mov dx,[ebp].blit_dest_y xor edi,edi call fword ptr ds:v_set_rgba_row_proc blit_alpha_next: inc word ptr [ebp].blit_src_y inc word ptr [ebp].blit_dest_y sub word ptr [ebp].blit_height,1 jnz blit_alpha_loop ; FreeMem mov ds,[ebp].blit_dest_sel LeaveSection ds:v_section mov ds,[ebp].blit_src_sel LeaveSection ds:v_section clc jmp blit_done blit1: mov ds,[ebp].blit_src_sel mov ax,flat_sel mov es,ax mov edi,ds:v_app_base mov ax,ds:v_row_size mov ecx,[ebp].blit_src_x mov edx,[ebp].blit_dest_x mov si,[ebp].blit_width mov ds,[ebp].blit_dest_sel mov ebx,ds:v_color blit1_line_loop: call fword ptr ds:v_draw_mask_line_proc add ecx,10000h add edx,10000h sub word ptr [ebp].blit_height,1 jnz blit1_line_loop ; mov ds,[ebp].blit_dest_sel LeaveSection ds:v_section mov ds,[ebp].blit_src_sel LeaveSection ds:v_section clc jmp blit_done blit_failed: stc blit_done: popad pop es pop ds add esp,20 pop ebp ret blit_pr ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: DrawMask ; ; DESCRIPTION: Draw a mask line ; ; PARAMETERS: AX row size ; BX Bitmap handle ; ECX source x + y << 16 ; EDX dest x + y << 16 ; ESI width + height << 16 ; ES:EDI 1-bit mask ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; draw_mask_name DB 'Draw Mask',0 draw_mask PROC far push ecx push edx push esi push edi ; push ds push eax push ebx ; mov ax,BITMAP_HANDLE DerefHandle jc draw_mask_fail ; mov eax,[ebx].bm_color push [ebx].bm_lgop push [ebx].bm_x_min push [ebx].bm_y_min push [ebx].bm_x_max push [ebx].bm_y_max mov ds,[ebx].bm_sel EnterSection ds:v_section pop ds:v_y_max pop ds:v_x_max pop ds:v_y_min pop ds:v_x_min pop ds:v_lgop mov ds:v_color,eax pop ebx pop eax movzx eax,ax draw_mask_loop: ror esi,16 or si,si jz draw_mask_leave ; ror esi,16 call fword ptr ds:v_draw_mask_line_proc add ecx,10000h add edx,10000h sub esi,10000h jmp draw_mask_loop draw_mask_leave: LeaveSection ds:v_section pop ds jmp draw_mask_done draw_mask_fail: pop ebx pop eax pop ds draw_mask_done: pop edi pop esi pop edx pop ecx ret draw_mask ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: DrawString ; ; DESCRIPTION: Draw a string ; ; PARAMETERS: BX Bitmap handle ; CX x ; DX y ; ES:EDI string ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; draw_string_name DB 'Draw String',0 draw_string16 PROC far push edi movzx edi,di ; push ds push eax push ebx ; mov ax,BITMAP_HANDLE DerefHandle jc draw_string16_fail ; mov eax,[ebx].bm_color push [ebx].bm_lgop push [ebx].bm_font push [ebx].bm_x_min push [ebx].bm_y_min push [ebx].bm_x_max push [ebx].bm_y_max mov ds,[ebx].bm_sel EnterSection ds:v_section pop ds:v_y_max pop ds:v_x_max pop ds:v_y_min pop ds:v_x_min pop ds:v_font pop ds:v_lgop mov ds:v_color,eax pop ebx pop eax call fword ptr ds:v_draw_string_proc LeaveSection ds:v_section pop ds jmp draw_string16_done draw_string16_fail: pop ebx pop eax pop ds draw_string16_done: pop edi ret draw_string16 ENDP draw_string32 PROC far ApiSaveEcx ApiSaveEdx ApiSaveEsi ApiSaveEdi push ds push eax push ebx ; mov ax,BITMAP_HANDLE DerefHandle jc draw_string32_fail ; mov eax,[bx].bm_color push [ebx].bm_lgop push [ebx].bm_font push [ebx].bm_x_min push [ebx].bm_y_min push [ebx].bm_x_max push [ebx].bm_y_max mov ds,[ebx].bm_sel EnterSection ds:v_section pop ds:v_y_max pop ds:v_x_max pop ds:v_y_min pop ds:v_x_min pop ds:v_font pop ds:v_lgop mov ds:v_color,eax pop ebx pop eax call fword ptr ds:v_draw_string_proc LeaveSection ds:v_section pop ds ApiCheckEdi ApiCheckEsi ApiCheckEdx ApiCheckEcx ret draw_string32_fail: pop ebx pop eax pop ds ApiCheckEdi ApiCheckEsi ApiCheckEdx ApiCheckEcx ret draw_string32 ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: DrawLine ; ; DESCRIPTION: Draw a line ; ; PARAMETERS: BX Bitmap handle ; CX x1 ; DX y1 ; SI x2 ; DI y2 ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; draw_line_name DB 'Draw Line',0 draw_line PROC far ApiSaveEcx ApiSaveEdx ApiSaveEsi ApiSaveEdi push ds push eax push ebx ; mov ax,BITMAP_HANDLE DerefHandle jc draw_line_fail ; mov eax,[bx].bm_color push [ebx].bm_lgop push [ebx].bm_x_min push [ebx].bm_y_min push [ebx].bm_x_max push [ebx].bm_y_max mov ds,[ebx].bm_sel EnterSection ds:v_section pop ds:v_y_max pop ds:v_x_max pop ds:v_y_min pop ds:v_x_min pop ds:v_lgop mov ds:v_color,eax pop ebx pop eax call fword ptr ds:v_draw_line_proc LeaveSection ds:v_section pop ds ApiCheckEdi ApiCheckEsi ApiCheckEdx ApiCheckEcx ret draw_line_fail: pop ebx pop eax pop ds ApiCheckEdi ApiCheckEsi ApiCheckEdx ApiCheckEcx ret draw_line ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: DrawRect ; ; DESCRIPTION: Draw a rectangle ; ; PARAMETERS: BX Bitmap handle ; CX x ; DX y ; SI w ; DI b ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; draw_rect_name DB 'Draw Rect',0 draw_rect PROC far push ds push ax push ebx ; mov ax,BITMAP_HANDLE DerefHandle jc draw_rect_fail ; push [ebx].bm_color push [ebx].bm_lgop push [ebx].bm_x_min push [ebx].bm_y_min push [ebx].bm_x_max push [ebx].bm_y_max mov al,[ebx].bm_style mov ds,[ebx].bm_sel EnterSection ds:v_section mov ds:v_style,al pop ds:v_y_max pop ds:v_x_max pop ds:v_y_min pop ds:v_x_min pop ds:v_lgop pop ds:v_color pop ebx pop ax call fword ptr ds:v_draw_rect_proc LeaveSection ds:v_section pop ds ret draw_rect_fail: pop ebx pop ax pop ds ret draw_rect ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: DrawEllipse ; ; DESCRIPTION: Draw a ellipse ; ; PARAMETERS: BX Bitmap handle ; CX x ; DX y ; SI w ; DI b ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; draw_ellipse_name DB 'Draw Ellipse',0 draw_ellipse PROC far push ds push ax push ebx ; mov ax,BITMAP_HANDLE DerefHandle jc draw_ellipse_fail ; push [ebx].bm_color push [ebx].bm_lgop push [ebx].bm_x_min push [ebx].bm_y_min push [ebx].bm_x_max push [ebx].bm_y_max mov al,[ebx].bm_style mov ds,[ebx].bm_sel EnterSection ds:v_section mov ds:v_style,al pop ds:v_y_max pop ds:v_x_max pop ds:v_y_min pop ds:v_x_min pop ds:v_lgop pop ds:v_color pop ebx pop ax call fword ptr ds:v_draw_ellipse_proc LeaveSection ds:v_section pop ds ret draw_ellipse_fail: pop ebx pop ax pop ds ret draw_ellipse ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: ExtractValidBitmapMask ; ; DESCRIPTION: Extract valid mask from bitmap ; ; PARAMETERS: BX Bitmap handle ; ; RETURNS: AX Mask bitmap handle ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; extract_valid_bitmap_mask_name DB 'Extract Valid Bitmap Mask',0 emask_width EQU -4 emask_height EQU -6 emask_src_sel EQU -8 emask_dest_sel EQU -10 emask_bitmap EQU -12 extract_valid_bitmap_mask PROC far push ebp mov ebp,esp sub esp,12 push ds push es push ebx push ecx push edx ; mov ax,BITMAP_HANDLE DerefHandle jc extract_vmask_fail ; mov ds,[ebx].bm_sel call fword ptr ds:v_has_alpha_proc jc extract_vmask_fail ; mov [ebp].emask_src_sel,ds ; mov al,1 mov cx,ds:v_width mov dx,ds:v_height CreateBitmap jc extract_vmask_fail ; mov [ebp].emask_bitmap,bx mov [ebp].emask_width,cx mov [ebp].emask_height,dx ; mov ax,BITMAP_HANDLE DerefHandle jc extract_vmask_fail ; mov ax,[ebx].bm_sel mov [ebp].emask_dest_sel,ax ; xor dx,dx extract_vy_loop: xor cx,cx extract_vx_loop: mov ds,[ebp].emask_src_sel call fword ptr ds:v_get_alpha_proc mov ds,[ebp].emask_dest_sel cmp al,80h ja extract_vset ; mov ds:v_color,0 jmp extract_vdo extract_vset: mov ds:v_color,1 extract_vdo: call fword ptr ds:v_set_pixel_proc ; inc cx cmp cx,[ebp].emask_width jb extract_vx_loop ; inc dx cmp dx,[ebp].emask_height jb extract_vy_loop ; mov ax,[ebp].emask_bitmap clc extract_vmask_fail: pop edx pop ecx pop ebx pop es pop ds add esp,12 pop ebp ret extract_valid_bitmap_mask ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: ExtractInvalidBitmapMask ; ; DESCRIPTION: Extract invalid mask from bitmap ; ; PARAMETERS: BX Bitmap handle ; ; RETURNS: AX Mask bitmap handle ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; extract_invalid_bitmap_mask_name DB 'Extract Invalid Bitmap Mask',0 extract_invalid_bitmap_mask PROC far push ebp mov ebp,esp sub esp,12 push ds push es push ebx push ecx push edx ; mov ax,BITMAP_HANDLE DerefHandle jc extract_ivmask_fail ; mov ds,[ebx].bm_sel call fword ptr ds:v_has_alpha_proc jc extract_ivmask_fail ; mov [ebp].emask_src_sel,ds ; mov al,1 mov cx,ds:v_width mov dx,ds:v_height CreateBitmap jc extract_ivmask_fail ; mov [ebp].emask_bitmap,bx mov [ebp].emask_width,cx mov [ebp].emask_height,dx ; mov ax,BITMAP_HANDLE DerefHandle jc extract_ivmask_fail ; mov ax,[ebx].bm_sel mov [ebp].emask_dest_sel,ax ; xor dx,dx extract_ivy_loop: xor cx,cx extract_ivx_loop: mov ds,[ebp].emask_src_sel call fword ptr ds:v_get_alpha_proc mov ds,[ebp].emask_dest_sel cmp al,80h ja extract_ivreset ; mov ds:v_color,1 jmp extract_ivdo extract_ivreset: mov ds:v_color,0 extract_ivdo: call fword ptr ds:v_set_pixel_proc ; inc cx cmp cx,[ebp].emask_width jb extract_ivx_loop ; inc dx cmp dx,[ebp].emask_height jb extract_ivy_loop ; mov ax,[ebp].emask_bitmap clc extract_ivmask_fail: pop edx pop ecx pop ebx pop es pop ds add esp,12 pop ebp ret extract_invalid_bitmap_mask ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: ExtractAlphaBitmap ; ; DESCRIPTION: Extract alpha channel from bitmap ; ; PARAMETERS: BX Bitmap handle ; ; RETURNS: AX Alpha bitmap handle ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; extract_alpha_bitmap_name DB 'Extract Alpha Bitmap',0 extract_alpha_bitmap PROC far push ds push ebx ; mov ax,BITMAP_HANDLE DerefHandle jc extract_alpha_fail ; mov al,[ebx].bm_style mov ds,[ebx].bm_sel mov ds:v_style,al call fword ptr ds:v_has_alpha_proc jc extract_alpha_fail ; stc extract_alpha_fail: pop ebx pop ds ret extract_alpha_bitmap ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: INIT_THREAD ; ; DESCRIPTION: init thread ; ; PARAMETERS: ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; init_thread PROC far push ds push ax ; GetThread mov ds,ax mov ds:p_forecolor,7 mov ds:p_backcolor,0 mov ds:p_row,0 mov ds:p_col,0 ; pop ax pop ds ret init_thread ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: init_process ; ; DESCRIPTION: init process ; ; PARAMETERS: ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; init_process PROC far push ds push ax ; GetThread mov ds,ax mov ds,ds:p_app_sel mov ds:app_console,0 ; pop ax pop ds ret init_process ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: free_process ; ; DESCRIPTION: free process ; ; PARAMETERS: ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; free_process PROC far push es push ax ; GetThread mov es,ax mov es,es:p_app_sel mov ax,es:app_console or ax,ax jz fp_done ; mov es,ax sub es:c_usage,1 jnz fp_done ; call DeleteConsole fp_done: pop ax pop es ret free_process ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: init_tasking ; ; DESCRIPTION: init tasking ; ; PARAMETERS: ; ; RETURNS: ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; init_tasking Proc far push ds push es pusha ; mov ax,cs mov ds,ax mov es,ax mov di,OFFSET update_thread_name mov si,OFFSET update_thread mov ax,2 mov cx,stack0_size CreateThread ; popa pop es pop ds retf32 init_tasking Endp ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; NAME: INIT ; ; DESCRIPTION: Init driver ; ; PARAMETERS: ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; public init_video init_video PROC near mov ax,SEG data mov ds,ax mov ds:focus_console,0 ; mov ax,cs mov ds,ax mov es,ax ; mov edi,OFFSET init_thread HookCreateThread ; mov edi,OFFSET init_process HookCreateProcess ; mov edi,OFFSET free_process HookTerminateProcess ; mov edi,OFFSET init_tasking HookInitTasking ; mov esi,OFFSET invert_mouse mov edi,OFFSET invert_mouse_name xor cl,cl mov ax,invert_mouse_nr RegisterOsGate ; mov esi,OFFSET query_video_mode mov edi,OFFSET query_video_mode_name xor dx,dx mov ax,query_video_mode_nr RegisterBimodalUserGate ; mov esi,OFFSET get_video_mode mov edi,OFFSET get_video_mode_name xor dx,dx mov ax,get_video_mode_nr RegisterBimodalUserGate ; mov esi,OFFSET set_video_mode mov edi,OFFSET set_video_mode_name xor dx,dx mov ax,set_video_mode_nr RegisterBimodalUserGate ; mov esi,OFFSET set_cursor_position mov edi,OFFSET set_cursor_pos_name xor dx,dx mov ax,set_cursor_position_nr RegisterBimodalUserGate ; mov esi,OFFSET get_cursor_position mov edi,OFFSET get_cursor_pos_name xor dx,dx mov ax,get_cursor_position_nr RegisterBimodalUserGate ; mov esi,OFFSET set_forecolor mov edi,OFFSET set_forecolor_name xor dx,dx mov ax,set_forecolor_nr RegisterBimodalUserGate ; mov esi,OFFSET set_backcolor mov edi,OFFSET set_backcolor_name xor dx,dx mov ax,set_backcolor_nr RegisterBimodalUserGate ; mov esi,OFFSET get_char_attrib mov edi,OFFSET get_char_attrib_name xor dx,dx mov ax,get_char_attrib_nr RegisterBimodalUserGate ; mov esi,OFFSET write_char mov edi,OFFSET write_char_name xor dx,dx mov ax,write_char_nr RegisterBimodalUserGate ; mov ebx,OFFSET write_asciiz16 mov esi,OFFSET write_asciiz32 mov edi,OFFSET write_asciiz_name mov dx,virt_es_in mov ax,write_asciiz_nr RegisterUserGate ; mov ebx,OFFSET write_size_string16 mov esi,OFFSET write_size_string32 mov edi,OFFSET write_size_string_name mov dx,virt_es_in mov ax,write_size_string_nr RegisterUserGate ; mov ebx,OFFSET write_attr_string16 mov esi,OFFSET write_attr_string32 mov edi,OFFSET write_attr_string_name mov dx,virt_es_in mov ax,write_attrib_string_nr RegisterUserGate ; mov esi,OFFSET set_clip_rect mov edi,OFFSET set_clip_rect_name xor dx,dx mov ax,set_clip_rect_nr RegisterBimodalUserGate ; mov esi,OFFSET clear_clip_rect mov edi,OFFSET clear_clip_rect_name xor dx,dx mov ax,clear_clip_rect_nr RegisterBimodalUserGate ; mov esi,OFFSET set_draw_color mov edi,OFFSET set_draw_color_name xor dx,dx mov ax,set_drawcolor_nr RegisterBimodalUserGate ; mov esi,OFFSET set_lgop mov edi,OFFSET set_lgop_name xor dx,dx mov ax,set_lgop_nr RegisterBimodalUserGate ; mov esi,OFFSET set_hollow_style mov edi,OFFSET set_hollow_style_name xor dx,dx mov ax,set_hollow_style_nr RegisterBimodalUserGate ; mov esi,OFFSET set_filled_style mov edi,OFFSET set_filled_style_name xor dx,dx mov ax,set_filled_style_nr RegisterBimodalUserGate ; mov esi,OFFSET set_font mov edi,OFFSET set_font_name xor dx,dx mov ax,set_font_nr RegisterBimodalUserGate ; mov esi,OFFSET get_pixel mov edi,OFFSET get_pixel_name xor dx,dx mov ax,get_pixel_nr RegisterBimodalUserGate ; mov esi,OFFSET set_pixel mov edi,OFFSET set_pixel_name xor dx,dx mov ax,set_pixel_nr RegisterBimodalUserGate ; mov esi,OFFSET blit_pr mov edi,OFFSET blit_name xor dx,dx mov ax,blit_nr RegisterBimodalUserGate ; mov esi,OFFSET draw_mask mov edi,OFFSET draw_mask_name xor dx,dx mov ax,draw_mask_nr RegisterBimodalUserGate ; mov ebx,OFFSET draw_string16 mov esi,OFFSET draw_string32 mov edi,OFFSET draw_string_name mov dx,virt_es_in mov ax,draw_string_nr RegisterUserGate ; mov esi,OFFSET draw_line mov edi,OFFSET draw_line_name xor dx,dx mov ax,draw_line_nr RegisterBimodalUserGate ; mov esi,OFFSET draw_rect mov edi,OFFSET draw_rect_name xor dx,dx mov ax,draw_rect_nr RegisterBimodalUserGate ; mov esi,OFFSET draw_ellipse mov edi,OFFSET draw_ellipse_name xor dx,dx mov ax,draw_ellipse_nr RegisterBimodalUserGate ; mov esi,OFFSET extract_valid_bitmap_mask mov edi,OFFSET extract_valid_bitmap_mask_name xor dx,dx mov ax,extract_valid_bitmap_mask_nr RegisterBimodalUserGate ; mov esi,OFFSET extract_invalid_bitmap_mask mov edi,OFFSET extract_invalid_bitmap_mask_name xor dx,dx mov ax,extract_invalid_bitmap_mask_nr RegisterBimodalUserGate ; mov esi,OFFSET extract_alpha_bitmap mov edi,OFFSET extract_alpha_bitmap_name xor dx,dx mov ax,extract_alpha_bitmap_nr RegisterBimodalUserGate ; mov esi,OFFSET write_dos_string mov edi,OFFSET write_dos_string_name xor cl,cl mov ax,write_dos_string_nr RegisterOsGate ; call init_bitmap call init_sprite ret init_video ENDP code ENDS END