[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]