; File name : DisplayPage.asm ; Project name : Assembly Library ; Created date : 26.6.2010 ; Last update : 3.7.2010 ; Author : Tomi Tilli ; Description : Functions for managing display page. ; Section containing code SECTION .text ;-------------------------------------------------------------------- ; DisplayPage_SetFromAL ; Parameters: ; AL: New display page ; DS: BDA segment (zero) ; Returns: ; Nothing ; Corrupts registers: ; AX, DX ;-------------------------------------------------------------------- ALIGN JUMP_ALIGN DisplayPage_SetFromAL: xor ah, ah mul WORD [VIDEO_BDA.wBytesPerPage] ; AX = Offset to page mov [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.fpCursorPosition], ax ret ;-------------------------------------------------------------------- ; DisplayPage_GetColumnsToALandRowsToAH ; Parameters: ; DS: BDA segment (zero) ; Returns: ; AL: Number of columns in selected text mode ; AH: Number of rows in selected text mode ; Corrupts registers: ; Nothing ;-------------------------------------------------------------------- ALIGN JUMP_ALIGN DisplayPage_GetColumnsToALandRowsToAH: mov al, [VIDEO_BDA.wColumns] ; 40 or 80 mov ah, 25 ; Always 25 rows on standard text modes ret ;-------------------------------------------------------------------- ; DisplayPage_SynchronizeToHardware ; Parameters: ; DS: BDA segment (zero) ; Returns: ; Nothing ; Corrupts registers: ; AX, DX ;-------------------------------------------------------------------- ALIGN JUMP_ALIGN DisplayPage_SynchronizeToHardware: xor dx, dx mov ax, [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.fpCursorPosition] div WORD [VIDEO_BDA.wBytesPerPage] ; AX = Page cmp al, [VIDEO_BDA.bActivePage] je SHORT .Return ; Same page, no need to synchronize mov ah, SELECT_ACTIVE_DISPLAY_PAGE int BIOS_VIDEO_INTERRUPT_10h ALIGN JUMP_ALIGN, ret .Return: ret