123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- {
- Copyright (c) 2020 Karoly Balogh
- Shows an Atari DEGAS picture on full screen
- Example program for Free Pascal's Atari TOS bindings
- This example program is in the Public Domain under the terms of
- Unlicense: http://unlicense.org/
- **********************************************************************}
- {$APPTYPE CONSOLE}
- program showpic;
- uses
- xbios, gemdos;
- {$i showpic.inc}
- type
- Tdegas_picture = record
- mode: smallint;
- palette: array[0..15] of smallint;
- data: array[0..31999] of byte;
- end;
- Pdegas_picture = ^Tdegas_picture;
- var
- old_palette: array[0..16] of smallint;
- old_rez: smallint;
- screen: pword;
- pic: Pdegas_picture;
- procedure save_palette(palette: pword);
- var
- i: smallint;
- begin
- for i:=0 to 15 do
- palette[i]:=xbios_setcolor(i,-1);
- end;
- procedure init(mode: smallint);
- begin
- { obtain the old resolution and palette }
- old_rez:=xbios_getrez;
- save_palette(@old_palette[0]);
- { set the screen mode and get the framebuffer address }
- xbios_setscreen(pointer(-1),pointer(-1),mode);
- screen:=xbios_logbase;
- end;
- procedure done;
- begin
- { restore original screen resolution and palette }
- xbios_setscreen(pointer(-1),pointer(-1),old_rez);
- xbios_setpalette(@old_palette);
- end;
- begin
- { this uses a compiled-in picture, but it's easy to load
- something from disk at this point instead }
- pic:=Pdegas_picture(@cheetah_pic);
- init(pic^.mode);
- { set the palette and move picture data to the framebuffer }
- xbios_setpalette(@pic^.palette);
- system.move(pic^.data,screen^,sizeof(pic^.data));
- { wait for keypress }
- gemdos_cnecin;
- done;
- end.
|