mirror of
https://github.com/reactos/reactos.git
synced 2024-11-09 08:08:38 +00:00
1e3d5d70e9
svn path=/trunk/; revision=26033
729 lines
20 KiB
NASM
729 lines
20 KiB
NASM
;/*++
|
|
;
|
|
;Copyright (c) 1998-2001 Klaus P. Gerlicher
|
|
;
|
|
;Module Name:
|
|
;
|
|
; vga_utils.asm
|
|
;
|
|
;Abstract:
|
|
;
|
|
; assembler function for directly programming standard VGA
|
|
;
|
|
;Environment:
|
|
;
|
|
; LINUX 2.2.X
|
|
; Kernel mode only
|
|
;
|
|
;Author:
|
|
;
|
|
; Klaus P. Gerlicher
|
|
; Reactos Port by Eugene Ingerman
|
|
;
|
|
;Revision History:
|
|
;
|
|
; 30-Oct-2001: created
|
|
;
|
|
;Copyright notice:
|
|
;
|
|
; This file may be distributed under the terms of the GNU Public License.
|
|
;
|
|
;--*/
|
|
|
|
global _pice_save_current_registers
|
|
global _pice_restore_current_registers
|
|
global _pice_set_mode_3_80x50
|
|
global _pice_set_mode_3_80x25
|
|
|
|
;****************************************************************************
|
|
;* some assign's ************************************************************
|
|
;****************************************************************************
|
|
%assign VGA_CRT_REGISTERS 24
|
|
%assign VGA_ATTRIBUTE_REGISTERS 21
|
|
%assign VGA_GRAPHIC_REGISTERS 9
|
|
%assign VGA_SEQUENCER_REGISTERS 5
|
|
%assign VGA_MISC_REGISTERS 1
|
|
|
|
%assign VGA_IO_BASE 03c0h
|
|
%assign VGA_IO_SIZE 020h
|
|
|
|
%assign VGA_ATTRIBUTE_INDEX 03c0h
|
|
%assign VGA_ATTRIBUTE_DATA_WRITE 03c0h
|
|
%assign VGA_ATTRIBUTE_DATA_READ 03c1h
|
|
%assign VGA_MISC_DATA_WRITE 03c2h
|
|
%assign VGA_SEQUENCER_INDEX 03c4h
|
|
%assign VGA_SEQUENCER_DATA 03c5h
|
|
%assign VGA_PEL_MASK 03c6h
|
|
%assign VGA_PEL_INDEX_READ 03c7h
|
|
%assign VGA_PEL_INDEX_WRITE 03c8h
|
|
%assign VGA_PEL_DATA 03c9h
|
|
%assign VGA_MISC_DATA_READ 03cch
|
|
%assign VGA_GRAPHIC_INDEX 03ceh
|
|
%assign VGA_GRAPHIC_DATA 03cfh
|
|
%assign VGA_CRT_INDEX 03d4h
|
|
%assign VGA_CRT_DATA 03d5h
|
|
%assign VGA_INPUT_STATUS 03dah
|
|
|
|
section .data
|
|
pice_mode3_80x50_registers:
|
|
; offsets 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18
|
|
.crt: db 0x5f,0x4f,0x50,0x82,0x55,0x80,0xbf,0x1f,0x00,0x67,0x06,0x07,0x00,0x00,0x00,0x00,0x9c,0x8f,0x8f,0x28,0x1f,0x96,0xb9,0xa3,0xff
|
|
.attribute db 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x08,0x00,0x0f,0x00,0x00
|
|
.graphic: db 0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,0xff
|
|
.sequencer: db 0x03,0x00,0x03,0x00,0x02 ; 9 bits per char
|
|
;.sequencer: db 0x03,0x01,0x03,0x00,0x02 ; 8 bits per char
|
|
.misc: db 0x67
|
|
|
|
pice_mode3_80x25_registers:
|
|
; offsets 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18
|
|
.crt: db 0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,0x00,0x4f,0x0d,0x0e,0x00,0x00,0x30,0xe8,0x9c,0x0e,0x8f,0x28,0x1f,0x96,0xb9,0xa3
|
|
.attribute db 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x0c,0x00,0x0f,0x08,0x00
|
|
.graphic: db 0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,0xff
|
|
.sequencer: db 0x03,0x00,0x03,0x00,0x02
|
|
.misc: db 0x67
|
|
|
|
|
|
|
|
section .bss
|
|
pice_current_registers:
|
|
.crt: resb VGA_CRT_REGISTERS
|
|
.attribute: resb VGA_ATTRIBUTE_REGISTERS
|
|
.graphic: resb VGA_GRAPHIC_REGISTERS
|
|
.sequencer: resb VGA_SEQUENCER_REGISTERS
|
|
.misc: resb VGA_MISC_REGISTERS
|
|
align 4
|
|
.colormap: resd 256
|
|
|
|
;****************************************************************************
|
|
;* pice_save_current_charset ************************************************
|
|
;****************************************************************************
|
|
section .text
|
|
pice_address dd 0xc00a0000
|
|
pice_save_current_charset:
|
|
xor dword ebx, ebx
|
|
call pice_select_read_plane
|
|
mov dword ecx, 04000h
|
|
mov dword esi, [pice_address]
|
|
mov dword edi, pice_charset_saved
|
|
cld
|
|
rep movsd
|
|
mov dword ebx, 00100h
|
|
call pice_select_read_plane
|
|
mov dword ecx, 04000h
|
|
mov dword esi, [pice_address]
|
|
mov dword edi, (pice_charset_saved + 010000h)
|
|
cld
|
|
rep movsd
|
|
mov dword ebx, 00200h
|
|
call pice_select_read_plane
|
|
mov dword ecx, 04000h
|
|
mov dword esi, [pice_address]
|
|
mov dword edi, (pice_charset_saved + 020000h)
|
|
cld
|
|
rep movsd
|
|
mov dword ebx, 00300h
|
|
call pice_select_read_plane
|
|
mov dword ecx, 04000h
|
|
mov dword esi, [pice_address]
|
|
mov dword edi, (pice_charset_saved + 030000h)
|
|
cld
|
|
rep movsd
|
|
.end: ret
|
|
|
|
|
|
|
|
;****************************************************************************
|
|
;* pice_restore_current_charset ****************************************************
|
|
;****************************************************************************
|
|
section .text
|
|
pice_restore_current_charset:
|
|
mov dword ebx, 00100h
|
|
call pice_select_write_plane
|
|
mov dword ecx, 04000h
|
|
mov dword esi, pice_charset_saved
|
|
mov dword edi, [pice_address]
|
|
cld
|
|
rep movsd
|
|
mov dword ebx, 00200h
|
|
call pice_select_write_plane
|
|
mov dword ecx, 04000h
|
|
mov dword esi, (pice_charset_saved + 010000h)
|
|
mov dword edi, [pice_address]
|
|
cld
|
|
rep movsd
|
|
mov dword ebx, 00400h
|
|
call pice_select_write_plane
|
|
mov dword ecx, 04000h
|
|
mov dword esi, (pice_charset_saved + 020000h)
|
|
mov dword edi, [pice_address]
|
|
cld
|
|
rep movsd
|
|
mov dword ebx, 00800h
|
|
call pice_select_write_plane
|
|
mov dword ecx, 04000h
|
|
mov dword esi, (pice_charset_saved + 030000h)
|
|
mov dword edi, [pice_address]
|
|
cld
|
|
rep movsd
|
|
.end: ret
|
|
|
|
;****************************************************************************
|
|
;* pice_get_crt_registers **************************************************
|
|
;****************************************************************************
|
|
;* ebx=> pointer where to store crt registers
|
|
;****************************************************************************
|
|
section .text
|
|
pice_get_crt_registers:
|
|
xor dword ecx, ecx
|
|
.loop: mov dword edx, VGA_CRT_INDEX
|
|
mov byte al, cl
|
|
out word dx, al
|
|
mov dword edx, VGA_CRT_DATA
|
|
in byte al, dx
|
|
mov byte [ebx + ecx], al
|
|
inc dword ecx
|
|
cmp dword ecx, VGA_CRT_REGISTERS
|
|
jb .loop
|
|
ret
|
|
|
|
|
|
|
|
;****************************************************************************
|
|
;* pice_get_attribute_registers ********************************************
|
|
;****************************************************************************
|
|
;* ebx=> pointer where to store attribute registers
|
|
;****************************************************************************
|
|
section .text
|
|
pice_get_attribute_registers:
|
|
xor dword ecx, ecx
|
|
.loop: mov dword edx, VGA_INPUT_STATUS
|
|
in byte al, dx
|
|
mov dword edx, VGA_ATTRIBUTE_INDEX
|
|
mov byte al, cl
|
|
out word dx, al
|
|
mov dword edx, VGA_ATTRIBUTE_DATA_READ
|
|
in byte al, dx
|
|
mov byte [ebx + ecx], al
|
|
inc dword ecx
|
|
cmp dword ecx, VGA_ATTRIBUTE_REGISTERS
|
|
jb .loop
|
|
ret
|
|
|
|
|
|
|
|
;****************************************************************************
|
|
;* pice_get_graphic_registers **********************************************
|
|
;****************************************************************************
|
|
;* ebx=> pointer where to store graphics registers
|
|
;****************************************************************************
|
|
section .text
|
|
pice_get_graphic_registers:
|
|
xor dword ecx, ecx
|
|
.loop: mov dword edx, VGA_GRAPHIC_INDEX
|
|
mov byte al, cl
|
|
out word dx, al
|
|
mov dword edx, VGA_GRAPHIC_DATA
|
|
in byte al, dx
|
|
mov byte [ebx + ecx], al
|
|
inc dword ecx
|
|
cmp dword ecx, VGA_GRAPHIC_REGISTERS
|
|
jb .loop
|
|
ret
|
|
|
|
|
|
|
|
;****************************************************************************
|
|
;* pice_get_sequencer_registers ********************************************
|
|
;****************************************************************************
|
|
;* ebx=> pointer where to store sequencer registers
|
|
;****************************************************************************
|
|
section .text
|
|
pice_get_sequencer_registers:
|
|
xor dword ecx, ecx
|
|
.loop: mov dword edx, VGA_SEQUENCER_INDEX
|
|
mov byte al, cl
|
|
out word dx, al
|
|
mov dword edx, VGA_SEQUENCER_DATA
|
|
in byte al, dx
|
|
mov byte [ebx + ecx], al
|
|
inc dword ecx
|
|
cmp dword ecx, VGA_SEQUENCER_REGISTERS
|
|
jb .loop
|
|
ret
|
|
|
|
|
|
|
|
;****************************************************************************
|
|
;* pice_get_misc_registers *************************************************
|
|
;****************************************************************************
|
|
;* ebx=> pointer where to store misc register
|
|
;****************************************************************************
|
|
section .text
|
|
pice_get_misc_registers:
|
|
mov dword edx, VGA_MISC_DATA_READ
|
|
in byte al, dx
|
|
mov byte [ebx], al
|
|
ret
|
|
|
|
|
|
|
|
;****************************************************************************
|
|
;* pice_get_colormap *******************************************************
|
|
;****************************************************************************
|
|
;* ebx=> pointer where to store colormap
|
|
;****************************************************************************
|
|
section .text
|
|
pice_get_colormap:
|
|
xor dword ecx, ecx
|
|
xor dword eax, eax
|
|
mov dword edx, VGA_PEL_INDEX_READ
|
|
out word dx, al
|
|
mov dword edx, VGA_PEL_DATA
|
|
.loop: in byte al, dx
|
|
shl dword eax, 8
|
|
in byte al, dx
|
|
shl dword eax, 8
|
|
in byte al, dx
|
|
mov dword [ebx + 4 * ecx], eax
|
|
inc dword ecx
|
|
test byte cl, cl
|
|
jnz .loop
|
|
ret
|
|
|
|
|
|
|
|
;****************************************************************************
|
|
;* pice_set_crt_registers **************************************************
|
|
;****************************************************************************
|
|
;* ebx=> pointer to stored crt registers
|
|
;****************************************************************************
|
|
section .text
|
|
pice_set_crt_registers:
|
|
|
|
;deprotect CRT registers 0 - 7
|
|
|
|
mov dword edx, VGA_CRT_INDEX
|
|
mov byte al, 011h
|
|
out word dx, al
|
|
mov dword edx, VGA_CRT_DATA
|
|
in byte al, dx
|
|
and byte al, 07fh
|
|
out word dx, al
|
|
|
|
;write to the registers
|
|
|
|
xor dword ecx, ecx
|
|
.loop: mov dword edx, VGA_CRT_INDEX
|
|
mov byte al, cl
|
|
out word dx, al
|
|
mov dword edx, VGA_CRT_DATA
|
|
mov byte al, [ebx + ecx]
|
|
out word dx, al
|
|
inc dword ecx
|
|
cmp dword ecx, VGA_CRT_REGISTERS
|
|
jb .loop
|
|
ret
|
|
|
|
|
|
|
|
;****************************************************************************
|
|
;* pice_set_attribute_registers ********************************************
|
|
;****************************************************************************
|
|
;* ebx=> pointer to stored attibute registers
|
|
;****************************************************************************
|
|
section .text
|
|
pice_set_attribute_registers:
|
|
xor dword ecx, ecx
|
|
.loop: mov dword edx, VGA_INPUT_STATUS
|
|
in byte al, dx
|
|
mov dword edx, VGA_ATTRIBUTE_INDEX
|
|
mov byte al, cl
|
|
out word dx, al
|
|
mov dword edx, VGA_ATTRIBUTE_DATA_WRITE
|
|
mov byte al, [ebx + ecx]
|
|
out word dx, al
|
|
inc dword ecx
|
|
cmp dword ecx, VGA_ATTRIBUTE_REGISTERS
|
|
jb .loop
|
|
ret
|
|
|
|
|
|
|
|
;****************************************************************************
|
|
;* pice_set_graphic_registers **********************************************
|
|
;****************************************************************************
|
|
;* ebx=> pointer to stored graphic registers
|
|
;****************************************************************************
|
|
section .text
|
|
pice_set_graphic_registers:
|
|
xor dword ecx, ecx
|
|
.loop: mov dword edx, VGA_GRAPHIC_INDEX
|
|
mov byte al, cl
|
|
out word dx, al
|
|
mov dword edx, VGA_GRAPHIC_DATA
|
|
mov byte al, [ebx + ecx]
|
|
out word dx, al
|
|
inc dword ecx
|
|
cmp dword ecx, VGA_GRAPHIC_REGISTERS
|
|
jb .loop
|
|
ret
|
|
|
|
|
|
|
|
;****************************************************************************
|
|
;* pice_set_sequencer_registers ********************************************
|
|
;****************************************************************************
|
|
;* ebx=> pointer to stored sequencer registers
|
|
;****************************************************************************
|
|
section .text
|
|
pice_set_sequencer_registers:
|
|
|
|
;synchronous reset on
|
|
|
|
mov dword edx, VGA_SEQUENCER_INDEX
|
|
xor dword eax, eax
|
|
out word dx, al
|
|
mov dword edx, VGA_SEQUENCER_DATA
|
|
inc dword eax
|
|
out word dx, al
|
|
|
|
;write to the registers
|
|
|
|
mov dword edx, VGA_SEQUENCER_INDEX
|
|
out word dx, al
|
|
mov dword edx, VGA_SEQUENCER_DATA
|
|
mov byte al, [ebx + 1]
|
|
or byte al, 020h
|
|
out word dx, al
|
|
mov dword ecx, 2
|
|
.loop: mov dword edx, VGA_SEQUENCER_INDEX
|
|
mov byte al, cl
|
|
out word dx, al
|
|
mov dword edx, VGA_SEQUENCER_DATA
|
|
mov byte al, [ebx + ecx]
|
|
out word dx, al
|
|
inc dword ecx
|
|
cmp dword ecx, VGA_SEQUENCER_REGISTERS
|
|
jb .loop
|
|
|
|
;synchronous reset off
|
|
|
|
mov dword edx, VGA_SEQUENCER_INDEX
|
|
xor dword eax, eax
|
|
out word dx, al
|
|
mov dword edx, VGA_SEQUENCER_DATA
|
|
mov byte al, 3
|
|
out word dx, al
|
|
ret
|
|
|
|
|
|
|
|
;****************************************************************************
|
|
;* pice_set_misc_registers *************************************************
|
|
;****************************************************************************
|
|
;* ebx=> pointer to stored misc register
|
|
;****************************************************************************
|
|
section .text
|
|
pice_set_misc_registers:
|
|
mov dword edx, VGA_MISC_DATA_WRITE
|
|
mov byte al, [ebx]
|
|
out word dx, al
|
|
ret
|
|
|
|
|
|
|
|
;****************************************************************************
|
|
;* pice_set_colormap *******************************************************
|
|
;****************************************************************************
|
|
;* ebx=> pointer to stored colormap
|
|
;****************************************************************************
|
|
section .text
|
|
pice_set_colormap:
|
|
xor dword ecx, ecx
|
|
xor dword eax, eax
|
|
mov dword edx, VGA_PEL_INDEX_WRITE
|
|
out word dx, al
|
|
mov dword edx, VGA_PEL_DATA
|
|
.loop: mov dword eax, [ebx + 4 * ecx]
|
|
rol dword eax, 16
|
|
out word dx, al
|
|
rol dword eax, 8
|
|
out word dx, al
|
|
rol dword eax, 8
|
|
out word dx, al
|
|
inc dword ecx
|
|
test byte cl, cl
|
|
jnz .loop
|
|
ret
|
|
|
|
|
|
|
|
;****************************************************************************
|
|
;* pice_screen_on **********************************************************
|
|
;****************************************************************************
|
|
section .text
|
|
pice_screen_on:
|
|
|
|
;turn on the screen
|
|
|
|
mov dword edx, VGA_SEQUENCER_INDEX
|
|
mov byte al, 1
|
|
out word dx, al
|
|
mov dword edx, VGA_SEQUENCER_DATA
|
|
in byte al, dx
|
|
and byte al, 0dfh
|
|
out word dx, al
|
|
|
|
;enable video output
|
|
|
|
mov dword edx, VGA_INPUT_STATUS
|
|
in byte al, dx
|
|
mov dword edx, VGA_ATTRIBUTE_DATA_WRITE
|
|
mov byte al, 020h
|
|
out word dx, al
|
|
ret
|
|
|
|
;****************************************************************************
|
|
;* pice_select_write_plane *************************************************
|
|
;****************************************************************************
|
|
;* bl==> write mode
|
|
;* bh==> write plane
|
|
;****************************************************************************
|
|
section .text
|
|
pice_select_write_plane:
|
|
and dword ebx, 00f03h
|
|
|
|
;enable set/reset = 0
|
|
|
|
mov dword edx, VGA_GRAPHIC_INDEX
|
|
mov byte al, 1
|
|
out word dx, al
|
|
mov dword edx, VGA_GRAPHIC_DATA
|
|
xor dword eax, eax
|
|
out word dx, al
|
|
|
|
;logical operation = none, rotate = 0
|
|
|
|
mov dword edx, VGA_GRAPHIC_INDEX
|
|
mov byte al, 3
|
|
out word dx, al
|
|
mov dword edx, VGA_GRAPHIC_DATA
|
|
xor dword eax, eax
|
|
out word dx, al
|
|
|
|
;select write mode
|
|
|
|
mov dword edx, VGA_GRAPHIC_INDEX
|
|
mov byte al, 5
|
|
out word dx, al
|
|
mov dword edx, VGA_GRAPHIC_DATA
|
|
in byte al, dx
|
|
and byte al, 0fch
|
|
or byte al, bl
|
|
out word dx, al
|
|
|
|
;bitmask = 0ffh
|
|
|
|
mov dword edx, VGA_GRAPHIC_INDEX
|
|
mov byte al, 8
|
|
out word dx, al
|
|
mov dword edx, VGA_GRAPHIC_DATA
|
|
mov byte al, 0ffh
|
|
out word dx, al
|
|
|
|
;select write plane
|
|
|
|
mov dword edx, VGA_SEQUENCER_INDEX
|
|
mov byte al, 2
|
|
out word dx, al
|
|
mov dword edx, VGA_SEQUENCER_DATA
|
|
mov byte al, bh
|
|
out word dx, al
|
|
ret
|
|
|
|
|
|
|
|
;****************************************************************************
|
|
;* pice_select_read_plane **************************************************
|
|
;****************************************************************************
|
|
;* bl==> read mode
|
|
;* bh==> read plane
|
|
;****************************************************************************
|
|
section .text
|
|
pice_select_read_plane:
|
|
and dword ebx, 00301h
|
|
shl byte bl, 3
|
|
|
|
;select read mode
|
|
|
|
mov dword edx, VGA_GRAPHIC_INDEX
|
|
mov byte al, 5
|
|
out word dx, al
|
|
mov dword edx, VGA_GRAPHIC_DATA
|
|
in byte al, dx
|
|
and byte al, 0f7h
|
|
or byte al, bl
|
|
out word dx, al
|
|
|
|
;select read plane
|
|
|
|
mov dword edx, VGA_GRAPHIC_INDEX
|
|
mov byte al, 4
|
|
out word dx, al
|
|
mov dword edx, VGA_GRAPHIC_DATA
|
|
mov byte al, bh
|
|
out word dx, al
|
|
ret
|
|
|
|
|
|
|
|
;****************************************************************************
|
|
;* pice_save_current_registers **********************************************
|
|
;****************************************************************************
|
|
section .text
|
|
_pice_save_current_registers:
|
|
push esi
|
|
push edi
|
|
push ebx
|
|
|
|
; call pice_save_current_charset
|
|
|
|
.crt: mov dword ebx, pice_current_registers.crt
|
|
call pice_get_crt_registers
|
|
|
|
.attribute: mov dword ebx, pice_current_registers.attribute
|
|
call pice_get_attribute_registers
|
|
|
|
.graphic: mov dword ebx, pice_current_registers.graphic
|
|
call pice_get_graphic_registers
|
|
|
|
.sequencer: mov dword ebx, pice_current_registers.sequencer
|
|
call pice_get_sequencer_registers
|
|
|
|
.misc: mov dword ebx, pice_current_registers.misc
|
|
call pice_get_misc_registers
|
|
|
|
.colormap: mov dword ebx, pice_current_registers.colormap
|
|
call pice_get_colormap
|
|
|
|
pop ebx
|
|
pop edi
|
|
pop esi
|
|
.end: ret
|
|
|
|
;****************************************************************************
|
|
;* pice_restore_current_registers *******************************************
|
|
;****************************************************************************
|
|
section .text
|
|
_pice_restore_current_registers:
|
|
push esi
|
|
push edi
|
|
push ebx
|
|
|
|
; call pice_restore_current_charset
|
|
|
|
.misc: mov dword ebx, pice_current_registers.misc
|
|
call pice_set_misc_registers
|
|
|
|
.crt: mov dword ebx, pice_current_registers.crt
|
|
call pice_set_crt_registers
|
|
|
|
.attribute: mov dword ebx, pice_current_registers.attribute
|
|
call pice_set_attribute_registers
|
|
|
|
.graphic: mov dword ebx, pice_current_registers.graphic
|
|
call pice_set_graphic_registers
|
|
|
|
.sequencer: mov dword ebx, pice_current_registers.sequencer
|
|
call pice_set_sequencer_registers
|
|
|
|
.screen_on: call pice_screen_on
|
|
|
|
.colormap: mov dword ebx, pice_current_registers.colormap
|
|
call pice_set_colormap
|
|
|
|
pop ebx
|
|
pop edi
|
|
pop esi
|
|
|
|
.end: ret
|
|
|
|
|
|
;****************************************************************************
|
|
;* pice_set_mode_3_80x50*****************************************************
|
|
;****************************************************************************
|
|
section .text
|
|
_pice_set_mode_3_80x50:
|
|
push esi
|
|
push edi
|
|
push ebx
|
|
|
|
.crt: mov dword ebx, pice_mode3_80x50_registers.crt
|
|
call pice_set_crt_registers
|
|
|
|
.attribute: mov dword ebx, pice_mode3_80x50_registers.attribute
|
|
call pice_set_attribute_registers
|
|
|
|
.graphic: mov dword ebx, pice_mode3_80x50_registers.graphic
|
|
call pice_set_graphic_registers
|
|
|
|
.sequencer: mov dword ebx, pice_mode3_80x50_registers.sequencer
|
|
call pice_set_sequencer_registers
|
|
|
|
.misc: mov dword ebx, pice_mode3_80x50_registers.misc
|
|
call pice_set_misc_registers
|
|
|
|
.screen_on: call pice_screen_on
|
|
|
|
;.colormap: mov dword ebx, pice_current_registers.colormap
|
|
; call pice_set_colormap
|
|
|
|
pop ebx
|
|
pop edi
|
|
pop esi
|
|
|
|
.end: ret
|
|
|
|
;****************************************************************************
|
|
;* pice_set_mode_3_80x25*****************************************************
|
|
;****************************************************************************
|
|
section .text
|
|
_pice_set_mode_3_80x25:
|
|
push esi
|
|
push edi
|
|
push ebx
|
|
|
|
.crt: mov dword ebx, pice_mode3_80x25_registers.crt
|
|
call pice_set_crt_registers
|
|
|
|
.attribute: mov dword ebx, pice_mode3_80x25_registers.attribute
|
|
call pice_set_attribute_registers
|
|
|
|
.graphic: mov dword ebx, pice_mode3_80x25_registers.graphic
|
|
call pice_set_graphic_registers
|
|
|
|
.sequencer: mov dword ebx, pice_mode3_80x25_registers.sequencer
|
|
call pice_set_sequencer_registers
|
|
|
|
.misc: mov dword ebx, pice_mode3_80x25_registers.misc
|
|
call pice_set_misc_registers
|
|
|
|
.screen_on: call pice_screen_on
|
|
|
|
;.colormap: mov dword ebx, pice_current_registers.colormap
|
|
; call pice_set_colormap
|
|
|
|
pop ebx
|
|
pop edi
|
|
pop esi
|
|
|
|
.end: ret
|
|
|
|
;****************************************************************************
|
|
;* uninitialized data *******************************************************
|
|
;****************************************************************************
|
|
section .bss
|
|
alignb 4
|
|
pice_charset_saved: resb 040000h
|
|
|
|
|