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

{
 JW> What is mode-x or ($13) or whatever in graphics.  I like to write
     Mode-x is just your 320x200x256 VGA graphics mode.

It's pretty similar to using pascal's graph unit, except you don't!  You have
to get all the procedures and functions set-up yourself.
}

PROCEDURE InitVGA; ASSEMBLER;  {Puts you in 320x200x256 VGA}
asm 
   mov  ax, 13h 
   int  10h 
end; 
 
PROCEDURE InitTEXT; ASSEMBLER; {Puts you back in 80x25 text mode} 
asm 
   mov  ax, 03h 
   int  10h 
end; 

PROCEDURE SetColor (ColorNo, Red, Green, Blue : byte); 
begin     {Changes the pallete data for a particular colour} 
     PORT[$3C8] := ColorNo; 
     PORT[$3C9] := Red; 
     PORT[$3C9] := Green; 
     PORT[$3C9] := Blue; 
end; 
 
PROCEDURE MovCursor (X,Y : byte);  {Moves the cursor to (X,Y)} 
begin 
  asm 
  MOV   ah, 02h 
  XOR   bx, bx 
  MOV   dh, Y 
  MOV   dl, X 
  INT   10h 
  end; 
end; 
 
FUNCTION ReadCursorX: byte; assembler;  {Get X position of cursor}
asm 
  MOV   ah, 03h 
  XOR   bx, bx 
  INT   10h 
  MOV   al, dl 
end; 
 
FUNCTION ReadCursorY: byte; assembler;  {Get Y position of cursor} 
asm 
  MOV   ah, 03h 
  XOR   bx, bx 
  INT   10h 
  MOV   al, dh 
end; 
 
PROCEDURE PutText (TextData : string; Color : byte);  {Write a string} 
var      {It's not the fastest way to do it, but it does the job} 
 z, ASCdata, CursorX, CursorY : byte; 
begin 
 CursorX := ReadCursorX;
 CursorY := ReadCursorY; 
 for z := 1 to Length(TextData) do 
 begin 
  ASCdata := Ord(TextData[z]); 
  asm 
  MOV   ah, 0Ah 
  MOV   al, ASCdata 
  XOR   bx, bx 
  MOV   bl, Color 
  MOV   cx, 1 
  INT   10h 
  end; 
  inc(CursorX); 
  if CursorX=40 then begin CursorX:=0; inc(CursorY); end; 
  MovCursor(CursorX,CursorY); 
 end; 
end; 
 
PROCEDURE PlotPixel(X, Y: Word; Color: Byte); ASSEMBLER; {Plots a pixel} 
asm
   push es 
   push di 
   mov  ax, Y 
   mov  bx, ax 
   shl  ax, 8 
   shl  bx, 6 
   add  ax, bx 
   add  ax, X 
   mov  di, ax 
   mov  ax, $A000 
   mov  es, ax 
   mov  al, Color 
   mov  es:[di], al 
   pop  di
   pop  es
end;

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