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