home *** CD-ROM | disk | FTP | other *** search
- {$P-} { turn pointer checking off.. }
- PROGRAM ballplr3;
- CONST
-
- (*$I gemconst.pas *) (* Include all the GEM constants *)
-
- TYPE
- Screendef = ^Screendata;
- Screendata = PACKED ARRAY[0..32511] OF byte;
- scrn_memory = packed array [ 0..31999 ] of BYTE;
- degas_pic = record
- rez : integer;
- pal : array [0..15] of integer;
- scr : scrn_memory;
- end;
- degas_file = file of degas_pic;
- ptr_screen = ^scrn_memory; { pointer to the screen array }
- c_pallet = array[0..15] of integer;
- pallet = record
- pal0 : c_pallet;
- end;
- p_file = file of pallet;
-
- mfdb_fields = (addr1,addr2,wid_pix,ht_pix,wid_wds,flag,num_planes,r1,r2,r3);
- mfdb = array[mfdb_fields] of integer;
- grid = array[0..31] of array[0..31] of integer;
- p_name = packed array[0..63] of char;
-
- (*$I gemtype.pas *)
-
- VAR c: char;
- s_ptr : ptr_screen; { a pointer to a packed array of bytes... }
- sc1 : ptr_screen; { a pointer to a packed array of bytes... }
- sc2 : ptr_screen; { a pointer to a packed array of bytes... }
- dummy,x,y : integer;
- scr1 : scrn_memory;
- scr2 : scrn_memory;
- scr3 : scrn_memory;
- rez1 : integer;
- pal1 : c_pallet;
- pal2 : c_pallet;
- pal6 : c_pallet;
- current_pallet : c_pallet;
- pic : degas_pic;
- screen,backup,unscreen,sprite,csprite,bsprite : MFDB;
- direction,
- current_x,current_y,
- last_x,last_y : integer;
- frame_loc : array[0..59] of array[1..2] of integer;
- frame,last_frame : integer;
- ssp,vbladr,nvbls,vblque_adr,address,vblsem: long_integer;
- vbl_flag,ok_flag : boolean;
-
- Curlogbase: Screendef;
- Curphybase: Screendef;
-
- Visible_Screen:Screendef;
- Build_Screen: Screendef;
-
- Screen1: Screendef;
- Screen2: Screendef;
-
- {$I \PASCAL\SOURCE\PEEKPOKE.PAS }
-
- (*$I gemsubs.pas *) (* Include all GEM subroutines *)
-
- FUNCTION Getphybase : Screendef;
- Xbios(2);
-
- FUNCTION Getlogbase : Screendef;
- Xbios(3);
-
- FUNCTION logbase : ptr_screen;
- Xbios(3);
-
- PROCEDURE Setscreen(Logloc,Phyloc : Screendef;
- Rez : INTEGER);
- Xbios(5);
-
- FUNCTION Getrez : integer;
- Xbios(4);
-
- Procedure wvbl;
- Xbios( 37 );
-
- Procedure swap;
-
- var tempscreen : screendef;
-
- begin
- Tempscreen := Visible_Screen;
- Visible_Screen := Build_Screen;
- Build_Screen := Tempscreen;
- Setscreen(Build_Screen,Visible_Screen,-1);
- end;
-
- FUNCTION Alloc_Screen : Screendef;
-
- CONST
- Scraddrresolution = 256;
-
- VAR
- Scrjunk: RECORD
- CASE Byte OF
- 0 : (Sali: Long_Integer);
- 1 : (Sa: Screendef);
- END;
-
- BEGIN
-
- WITH Scrjunk DO BEGIN
- NEW(Sa);
- IF Sali MOD Scraddrresolution <> 0
- THEN Sali := Sali + (Scraddrresolution - (Sali MOD Scraddrresolution));
- END;
-
- Alloc_Screen := Scrjunk.Sa;
-
- END;
-
- Procedure init_form(var form :mfdb; var addr : scrn_memory );
- EXTERNAL;
-
- Procedure copy_rect( var s,d : mfdb;
- from_x,from_y,
- to_x,to_y,
- wid,ht,mode : integer);
- EXTERNAL;
-
-
- FUNCTION physbase : ptr_screen;
- XBIOS( 2 );
-
- function set_colr( reg,col : integer ) : integer;
- xbios(7);
-
- PROCEDURE SRestore( name : STRING );
-
- VAR
-
- f : degas_file; { a file containing a screenful of bytes.. }
- x : integer;
-
- BEGIN
-
- reset( f, name );
- pic := f^;
- with pic do
- begin
- rez1 := pic.rez;
- pal1 := pic.pal;
- scr1 := pic.scr;
- end;
- for x := 0 to 15 do
- dummy := set_colr(x,pal1[x]);
- current_pallet := pal1;
-
- { reset automatically fills file buffer with data from first record }
-
-
- { file is automatically closed when we leave this procedure. }
- END;
-
- PROCEDURE Load_sprite( name : STRING );
-
- VAR
-
- f : degas_file; { a file containing a screenful of bytes.. }
- x : integer;
-
- BEGIN
- reset( f, name );
- pic := f^;
- with pic do
- begin
- scr3 := pic.scr;
- end;
- END;
-
- Procedure build_scrn;
-
- VAR Y,X : INTEGER;
-
- begin
- s_ptr^ := scr1; { and assign file buffer to screen }
- end;
-
- FUNCTION Proc_addr( PROCEDURE p ) : Long_Integer;
- EXTERNAL;
-
- FUNCTION super( sp: long_integer ): long_integer;
- GEMDOS( $20 );
-
- Procedure rt_rtn;
- begin
- frame := frame + 1;
- if frame > 9 then frame := 0;
- current_x := current_x +3;
- if current_x >= 287 then
- begin
- current_x := 287;
- direction := 1;
- frame := 10;
- end;
- end;
-
- Procedure lft_rtn;
- begin
- frame := frame + 1;
- if frame >19 then frame := 10;
- current_x := current_x -3;
- if current_x < 0 then
- begin
- current_x := 0;
- direction := 0;
- frame := 0;
- end;
- end;
-
- Procedure set_sprite_table;
-
- var x,y,tx,ty,bx,by,num : integer;
-
- begin
- tx := 0;
- ty := 0;
- for y := 0 to 5 do
- begin
- for x := 0 to 9 do
- begin
- num := x+(y*10);
- frame_loc[num,1] := tx;
- frame_loc[num,2] := ty;
- tx := tx + 32;
- end;
- ty := ty + 32;
- tx := 0;
- end;
- end;
-
- Procedure go_loop;
- var mode : integer;
- begin
- mode := 0;
- REPEAT
- case direction of
- 0 : rt_rtn;
- 1 : lft_rtn;
- end;
- sc1 := logbase;
- sc1^ := scr1; { and assign file buffer to screen }
- copy_rect(sprite,screen,
- frame_loc[frame,1],frame_loc[frame,2],
- current_x,current_y,32,32,3);
- swap;
- wvbl;
- wvbl;
- wvbl;
- UNTIL KEYPRESS = TRUE;
- end;
-
- BEGIN
- if Init_gem >= 0 then
- begin
- if getrez = 0 then
- begin
- init_mouse;
- hide_mouse;
- for x := 0 to 15 do
- pal2[x] := set_colr(x,-1);
- pal6 := pal2;
- SRestore( 'BALLPLR3.PI1' ); { read screen data from file... }
- Curlogbase := Getlogbase;
- Curphybase := Getphybase;
- Screen1 := Alloc_Screen;
- Screen2 := Alloc_Screen;
- Setscreen(Screen1,Curphybase,-1);
- sc1 := logbase;
- sc1^ := scr1; { and assign file buffer to screen }
- Setscreen(Screen2,Curphybase,-1);
- sc2 := logbase;
- sc2^ := scr1; { and assign file buffer to screen }
- Visible_Screen := Screen2;
- Build_Screen := Screen1;
- Setscreen(Build_Screen,Visible_Screen,-1);
- screen[addr1] := 0;
- screen[addr2] := 0;
- init_form(backup,scr1);
- init_form(unscreen,scr2);
- init_form(sprite,scr3);
- set_sprite_table;
- load_sprite( 'BALLPLR2.SPT' ); { read SPRITE data from file... }
- frame := 0;
- current_x := 0;
- current_y := 0;
- vbl_flag := true;
- direction := 0;
- go_loop;
- for x := 0 to 15 do
- dummy := set_colr(x,pal2[x]);
- Setscreen(Curlogbase,Curphybase,-1);
- show_mouse;
- end
- else dummy := do_alert('[3][LOW REZ ONLY][ OK ]',1);
- exit_gem;
- end;
- END.
-
- { End of file: JOYTEST.PAS }
-