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


Program ViewASCi;

{ Simple SCi Viewer - By Simeon Spry

This code will display a SCi (320*200*256) file. I would reccomend that you
add code to find out if the SCi File name is valid. I had some, but I got
it out of a book so it *might* be copyrighted :-(. You also might want to
save the old pallete and restore it afterwards I didn't do it because I
lost my reference.

This may be freely distributed, if you incorporate any portions of this
code into a part of anything you MUST give me some credit.
}


Procedure ViewSci( SciF : STRING);
 CONST    Header : Array[1..4] OF CHAR = ('R','I','X','3');

 VAR     SciFile : File;
         HeaderBuf : Array[1..10] OF CHAR;
         NewPal    : Array[1..768] OF BYTE; { 3 Bytes Per colour, 3*256 = 768}
         OldPal    : Array[1..768] OF BYTE; { "  "  "}
         Screen    : Array[1..64000] OF BYTE ABSOLUTE $A000:0000; { Direct to
the screen }
         i         : integer;
 Procedure SetPal(Pallete : Array OF BYTE);
 VAR
   PalPtr : POINTER;
 BEGIN
  PalPtr := @Pallete;
  asm
   mov ax,1012h
   xor bx,bx
   mov cx,0100h
   les dx,PalPtr
   int 10h
  end;
 END;

 Procedure WaitForKey;assembler;
  ASM
   xor ax,ax
   int 16h
  END;
Procedure SetMode(Mode : BYTE); assembler;
  ASM
    mov ah, 00
    mov al, mode
    int 10h
  END;

 BEGIN
  { Open The File }
  assign(SciFile, SciF);
  Reset(SciFile,1);

  { Check The Header }
  BlockRead(SciFile,HeaderBuf,SizeOF(HeaderBuf));
  For i := 1 to 4 DO
   Begin
    If HeaderBuf[i] <> Header[i] Then
     BEGIN
      WriteLn;
      WriteLn(' Invalid SCI File. ');
      WriteLn;
      Halt(1);
     END;
   End;

 { Set Mode $13 }
 SetMode($13);

 { Read Pallete into a 768 Byte Buffer & DisPlay. }
  BlockRead(SciFile,NewPal,768);
  SetPal(NewPal);

 { Read 64000 bytes then write DIRECTLY to Video Memory }
  BlockRead(SCIFile,Screen,64000);
  cLOSE(SCIFILE);
 { Wait Until Key Pressed }
 WaitForKey;

 { Set Text Mode }
  SetMode($3);
END;

Var SciFile : String[12];

BEGIN
   { Ask For File To View }
  WriteLn('SCi Viewer - By Simeon Spry');
  Write('View File: ');
  ReadLn(SciFile);

   { View SCi File }
  ViewSCI( SciFile );

   { Display Made-By Message }
  WriteLn('Simple SCi Viewer by Simeon Spry');
  WriteLn;
END.

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