home *** CD-ROM | disk | FTP | other *** search
- Path: sparky!uunet!caen!hellgate.utah.edu!cc.usu.edu!ivie
- From: ivie@cc.usu.edu (CP/M lives!)
- Newsgroups: comp.os.cpm
- Subject: PX-8 ROM generator 2/3: PXROM.PAS
- Message-ID: <1992Jul23.115839.57467@cc.usu.edu>
- Date: 23 Jul 92 11:58:39 MDT
- Organization: Utah State University
- Lines: 172
-
- {$U+}
- Program Argh( Input, Output, InFile, ROMFile );
- Label 1, 2, 3, 4, 5, 999;
-
- Var
- Buffer : Array [ 0..127 ] of Byte;
- InFile, ROMFile : File;
-
- Procedure Read_ROM( Block_Number : Integer; Var Buffer );
- Begin
- Seek( ROMFile, Block_Number );
- BlockRead( ROMFile, Buffer, 1 );
- End;
-
- Procedure Write_ROM( Block_Number : Integer; Var Buffer );
- Begin
- Seek( ROMFile, Block_Number );
- BlockWrite( ROMFile, Buffer, 1 );
- End;
-
- {$I PXFS.PAS}
-
- Procedure Init_ROM( Blocks : Integer );
- Begin
- FillChar( Buffer, 128, $FF );
- Seek( ROMFile, 0 );
- While( Blocks > 0 ) Do
- Begin
- BlockWrite( ROMFile, Buffer, 1 );
- Blocks := Blocks - 1;
- End;
- End;
-
- Type
- File_Name = String[ 14 ];
-
- Var
- ROM_FCB : Memory_FCB;
- Blocks : Integer;
- X : Char;
- Name : File_Name;
-
- Procedure Build_FCB( Name : File_Name; Var FCB : Memory_FCB );
- Label 1, 2, 3, 4, 5, 6, 7, 8, 999;
- Var
- NIX, FIX : Integer;
-
- Begin
-
- 1:
- NIX := 1;
- Goto 2;
-
- 2:
- FCB.DRV := 0;
- FCB.EX := 0;
- For FIX := 0 to 10 do
- FCB.NAME[ FIX ] := ' ';
- FIX := 0;
-
- 3:
- If( NIX > Ord( Name[ 0 ] ) ) Then Goto 999;
- Goto 4;
-
- 4:
- If( Name[ NIX ] = ':' ) Then goto 5;
- If( Name[ NIX ] = '.' ) Then Goto 6;
- Goto 7;
-
- 5:
- NIX := NIX + 1;
- Goto 2;
-
- 6:
- NIX := NIX + 1;
- For FIX := 8 to 10 do
- FCB.NAME[ FIX ] := ' ';
- FIX := 8;
- Goto 3;
-
- 7:
- If( FIX > 10 ) Then Goto 999;
- Goto 8;
-
- 8:
- FCB.NAME[ FIX ] := Name[ NIX ];
- FIX := FIX + 1;
- NIX := NIX + 1;
- Goto 3;
-
- 999:
- End;
-
- Procedure Copy_File( Name : File_Name );
- Label 1, 2, 3, 4, 5, 6, 999;
- Var
- Recs_Read : Integer;
-
- Begin
-
- 1:
- Assign( InFile, Name );
- Reset( InFile );
- Assign( ROMFile, 'ROM.DAT' );
- Reset( ROMFile );
- Goto 2;
-
- 2:
- Build_FCB( Name, ROM_FCB );
- If( Make_File( ROM_FCB ) ) Then Goto 3;
- Goto 6;
-
- 3:
- BlockRead( InFile, Buffer, 1, Recs_Read );
- If( Recs_Read = 0 ) Then Goto 5;
- Goto 4;
-
- 4:
- If( Write_Sequential( ROM_FCB, Buffer ) ) Then Goto 3;
- Goto 5;
-
- 5:
- Close_File( ROM_FCB );
- Goto 6;
-
- 6:
- Close( ROMFile );
- Close( InFile );
- Goto 999;
-
- 999:
- End;
-
- Begin
-
- Writeln( 'EPSON Geneva EPROM generator' );
- 1:
- Write('PXRom> ');
- Read( KBD, X );
- If( ( X = 'I' ) or ( X = 'i' ) ) Then Goto 2;
- If( X = Chr( 26 ) ) Then Goto 3;
- IF( ( X = 'C' ) or ( X = 'c' ) ) Then Goto 4;
- Goto 5;
-
- 2:
- Write('Init. Kbytes? ');
- Readln( Blocks );
- Assign( ROMFile, 'ROM.DAT' );
- Rewrite( ROMFile );
- Write( 'Initializing...' );
- Init_ROM( Blocks * 8 );
- Write( 'Zeroing...');
- Zero_Directory( Blocks * 8, 32 );
- Writeln;
- Goto 1;
-
- 3:
- Writeln( '*EXIT*' );
- Goto 999;
-
- 4:
- Write('Copy file ');
- Readln( Name );
- Copy_File( Name );
- Goto 1;
-
- 5:
- Writeln( '?' );
- Goto 1;
-
- 999:
- End.
-