[Back to GRAPHICS SWAG index]  [Back to Main SWAG index]  [Original]

{

WS>Hello! I've thought about writing my own 3D games or just any high graphics
WS>program and am in the process of writing a unit that handles virtual screens
WS>have 6 virtual screens (0..5, where 0 will be MOVEd to $A000:0000) that are
WS>type pointer with 64000 bytes each. They are designed for Mode 13h, of cours
WS>I have a procedure called CopyScreen. Basically,

Just FYI:  You might want to consider using Mode-X.  Matt Pritchard has
written a great freeware library for such (MODEX10?.ZIP) with a Pascal
example.  With Mode-X, you can use the VGA's memory instead of precious
conventional (if in real mode) memory, and the page switching is a lot
faster than copying 64k from memory.
}

procedure copyscreen(source,dest : pointer; mask : byte); assembler;

asm
  push  ds
  lds   si,source
  les   di,dest
  mov   cx,64000
  cld
@loop:
  lodsb
  cmp   mask,al
  je    @nodraw
  mov   es:[di],al
@nodraw:
  inc   di
  loop  @loop
  pop   ds
end;

You need to call it like this (note the '@'):

  copyscreen(@virtualscreen[first],@virtualscreen[second],mask);

[Back to GRAPHICS SWAG index]  [Back to Main SWAG index]  [Original]