/** ** u_vsvirt.c ---- virtual screen utility functions using VESA BIOS calls ** ** Copyright (c) 1995 Csaba Biegl, 820 Stirrup Dr, Nashville, TN 37221 ** [e-mail: csaba@vuse.vanderbilt.edu] ** ** This file is part of the GRX graphics library. ** ** The GRX graphics library is free software; you can redistribute it ** and/or modify it under some conditions; see the "copying.grx" file ** for details. ** ** This library 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. ** **/ #include "libgrx.h" #include "grdriver.h" #include "vesa.h" #include "arith.h" #include "mempeek.h" #include "memfill.h" #include "int86.h" int _GrViDrvVESAsetVirtualSize(GrVideoMode *md,int w,int h,GrVideoMode *result) { Int86Regs r; sttzero(&r); IREG_AX(r) = VESA_FUNC + VESA_SCAN_LNLEN; IREG_BX(r) = 0; IREG_CX(r) = w; int10(&r); if(IREG_AX(r) == VESA_SUCCESS) { result->lineoffset = IREG_BX(r); result->width = IREG_CX(r); result->height = umin(IREG_DX(r),h); return(TRUE); } return(FALSE); } /* ** VESA 2.0 has a PM function for VESA_DISP_START ** Bad news: register values are incompatible with ** real mode function. PM adaption should be done */ int _GrViDrvVESAvirtualScroll(GrVideoMode *md,int x,int y,int result[2]) { Int86Regs r; sttzero(&r); IREG_AX(r) = VESA_FUNC + VESA_DISP_START; IREG_BX(r) = 0; IREG_CX(r) = x; IREG_DX(r) = y; int10(&r); if(IREG_AX(r) == VESA_SUCCESS) { IREG_AX(r) = VESA_FUNC + VESA_DISP_START; IREG_BX(r) = 1; int10(&r); result[0] = IREG_CX(r); result[1] = IREG_DX(r); return(TRUE); } return(FALSE); }