Example Codes
VGA Graphics
uses VGA, PCX;
var
FrameBuffer: PFrameBuffer;
TestImage: TImage;
Palette: TPalette;
begin
{ Load image with palette }
LoadPCXWithPalette('DATA\TEST.PCX', TestImage, Palette);
InitVGA;
SetPalette(Palette);
{ Render to framebuffer }
FrameBuffer := CreateFrameBuffer;
PutImage(TestImage, 0, 0, False, FrameBuffer);
RenderFrameBuffer(FrameBuffer);
ReadLn;
DoneVGA;
FreeFrameBuffer(FrameBuffer);
FreeImage(TestImage);
end.
Playing Music
uses PlayHSC, Keyboard;
var
Music: HSC_Obj;
begin
Music.Init(0); { Auto-detect Adlib at port 388h }
if Music.LoadFile('DATA\FANTASY.HSC') then
begin
Music.Start;
while not IsKeyDown(Key_Escape) do
begin
{ ... your game loop ... }
Music.Poll; { Music needs polling }
end;
Music.Done; { CRITICAL: Unhook interrupt! }
end;
end.
Sound Effects with XMS
uses SBDSP, SndBank, XMS;
var
Bank: TSoundBank;
ExplosionID: Integer;
begin
{ Initialize Sound Blaster }
ResetDSP($22, 5, 1, 0); { Port $220, IRQ 5, DMA 1 }
{ Initialize sound bank }
Bank.Init;
{ Load sounds into XMS at startup }
ExplosionID := Bank.LoadSound('DATA\EXPLODE.VOC');
{ Play on demand - no disk I/O! }
Bank.PlaySound(ExplosionID);
{ Cleanup }
Bank.Done;
UninstallHandler;
end.
Game Loop with Delta Timing
uses VGA, Keyboard, RTCTimer;
var
Running: Boolean;
LastTime, CurrentTime, DeltaTime: Real;
PlayerX, PlayerY: Real;
begin
InitVGA;
InitKeyboard;
InitRTC(1024); { 1024 Hz timer }
CurrentTime := RTC_Ticks / 1024.0;
Running := True;
while Running do
begin
{ Calculate delta time }
LastTime := CurrentTime;
CurrentTime := RTC_Ticks / 1024.0;
DeltaTime := CurrentTime - LastTime;
{ Frame-rate independent movement }
if IsKeyDown(Key_Right) then
PlayerX := PlayerX + 100.0 * DeltaTime; { 100 pixels/sec }
if IsKeyPressed(Key_Escape) then
Running := False;
{ Render frame... }
ClearKeyPressed; { MUST call at end of loop }
end;
{ CRITICAL: Clean up all interrupts }
DoneRTC;
DoneKeyboard;
DoneVGA;
end.