はじめに
『PASTA/80 for PC-G850』用にグラフィックライブラリを書いたので、適当な画像を読み込ませてみたくなりました。
グラフィックローダージェネレーター
画像データは Pascal 形式のコードが欲しいのです。具体的にはこのようなものです。
const
BgData: array [0..53] of array [0..15] of Byte =
(
($00, $00, $00, $00, $00, $00, $00, $00, $00, $20, $00, $00, $00, $00, $00, $00),
($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
...
($9F, $80, $9F, $A0, $A0, $A0, $9F, $80, $BF, $84, $84, $84, $83, $80, $C0, $7F)
);
ソースコード
本当は慣れている Delphi で書きたかったのですが、PASTA/80 は『Free Pascal』で書かれているため、こちらも Free Pascal で書いた方がいいだろう、という事で。
program BmpToG850;
{$mode objfpc}{$H+}
uses
Classes, SysUtils, FPImage, FPReadBMP;
var
Img: TFPMemoryImage;
Reader: TFPReaderBMP;
x, y, page, bitPos, i, j: Integer;
b: Byte;
VRAM: array [0..863] of Byte;
OutFile: Text;
InName, OutName: string;
begin
if ParamCount < 1 then
begin
Writeln('Usage: BmpToG850 <input.bmp> [output.pas]');
Exit;
end;
InName := ParamStr(1);
if ParamCount >= 2 then
OutName := ParamStr(2)
else
OutName := ChangeFileExt(InName, '.pas');
Img := TFPMemoryImage.Create(0, 0);
Reader := TFPReaderBMP.Create;
try
Writeln('Loading ', InName, '...');
Img.LoadFromFile(InName, Reader);
if (Img.Width <> 144) or (Img.Height <> 48) then
begin
Writeln('Error: Image must be exactly 144x48 pixels!');
Exit;
end;
FillChar(VRAM, SizeOf(VRAM), 0);
for page := 0 to 5 do
begin
for x := 0 to 143 do
begin
b := 0;
for bitPos := 0 to 7 do
begin
y := page * 8 + bitPos;
if Img.Colors[x, y].red < $8000 then
b := b or (1 shl bitPos);
end;
VRAM[page * 144 + x] := b;
end;
end;
Assign(OutFile, OutName);
Rewrite(OutFile);
Writeln(OutFile, 'program ', ChangeFileExt(InName, ''), ';');
Writeln(OutFile, '{$u+}');
Writeln(OutFile, '{$i rtl\g850grph.pas}');
Writeln(OutFile, 'const');
Writeln(OutFile, ' Data: array [0..53] of array [0..15] of Byte = ');
Writeln(OutFile, ' (');
for i := 0 to 53 do
begin
Write(OutFile, ' (');
for j := 0 to 15 do
begin
Write(OutFile, '$', IntToHex(VRAM[i * 16 + j], 2));
if j < 15 then
Write(OutFile, ', ');
end;
Write(OutFile, ')');
if i < 53 then
Write(OutFile, ',');
Writeln(OutFile);
end;
Writeln(OutFile, ' );');
Writeln(OutFile, 'begin');
Writeln(OutFile, ' Move(Data, Ptr(GetVramAddr)^, 864);');
Writeln(OutFile, ' RepaintLCD;');
Writeln(OutFile, ' while not KeyPressed do;');
Writeln(OutFile, 'end.');
Close(OutFile);
Writeln('Success! Saved to ', OutName);
finally
Img.Free;
Reader.Free;
end;
end.
次のようにしてコンパイルするとグラフィックローダージェネレーターが生成されます。
fpc BmpToG850.pas
Windows だと BmpToG850.exe ができます。
Free Pascal は不慣れなので、コードに無駄があるかもしれません
使い方
144x48 のモノクロ BMP を用意します。画像の名前は GRADIUS2.BMP です。
次のように実行すると、GRADIUS2.PAS が得られます。
BmpToG850 GRADIUS2.BMP
実際に出力された GRADIUS2.PAS がこちらです。
program GRADIUS2;
{$u+}
{$i rtl\g850grph.pas}
const
Data: array [0..53] of array [0..15] of Byte =
(
($00, $00, $00, $00, $00, $00, $00, $00, $00, $20, $00, $00, $00, $00, $00, $00),
($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
($00, $00, $00, $00, $00, $20, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
($00, $00, $00, $00, $00, $00, $10, $00, $00, $00, $00, $00, $00, $00, $00, $00),
($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $80, $00, $00, $04, $7C, $88),
($30, $C0, $00, $06, $1A, $E4, $88, $30, $C0, $00, $00, $00, $00, $00, $00, $00),
($FE, $03, $61, $E1, $C1, $C1, $C1, $41, $41, $41, $41, $41, $41, $41, $41, $C1),
($41, $41, $41, $C1, $41, $41, $41, $C1, $41, $41, $41, $C1, $41, $C1, $41, $C1),
($41, $C1, $41, $41, $41, $41, $41, $41, $C1, $C1, $C1, $E1, $61, $01, $03, $FE),
($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
($00, $00, $00, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0),
($A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0),
($A0, $A0, $A0, $A0, $A0, $E0, $C0, $20, $C0, $40, $80, $80, $A0, $D0, $F8, $D8),
($F8, $F8, $B8, $B0, $A0, $F0, $E0, $E0, $60, $78, $4F, $78, $E0, $C0, $E0, $C1),
($BE, $A4, $63, $DC, $C0, $60, $FF, $A9, $DC, $83, $40, $00, $00, $08, $00, $00),
($FF, $00, $00, $00, $01, $03, $07, $07, $0F, $0F, $1F, $1F, $30, $37, $31, $3F),
($30, $0D, $62, $6F, $60, $6D, $60, $6F, $60, $67, $68, $EF, $C0, $1F, $30, $37),
($30, $3F, $34, $35, $11, $1F, $0F, $07, $07, $03, $01, $00, $00, $00, $00, $FF),
($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
($00, $00, $00, $14, $14, $14, $14, $14, $14, $14, $14, $14, $14, $14, $14, $14),
($14, $14, $14, $14, $14, $14, $14, $14, $14, $14, $14, $14, $14, $14, $14, $14),
($14, $14, $14, $14, $14, $1C, $0C, $13, $0C, $08, $04, $04, $14, $2C, $7F, $6C),
($7F, $7C, $77, $34, $17, $3C, $1F, $1C, $1B, $7B, $CB, $7B, $1C, $0F, $1C, $0F),
($F7, $94, $1B, $EC, $0F, $1B, $FF, $54, $EF, $04, $0B, $00, $00, $00, $00, $00),
($FF, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
($00, $0E, $0F, $0F, $0F, $0F, $0D, $0D, $0D, $0D, $0D, $0D, $0C, $0C, $00, $00),
($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $FF),
($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
($00, $D0, $E0, $E0, $C0, $C0, $40, $40, $50, $A0, $50, $00, $00, $00, $00, $00),
($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
($00, $00, $10, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
($80, $00, $00, $00, $00, $00, $00, $00, $00, $00, $07, $00, $00, $80, $F8, $46),
($31, $0C, $03, $80, $60, $9C, $47, $32, $0C, $03, $00, $00, $00, $00, $00, $00),
($FF, $00, $3E, $3E, $3E, $3E, $3E, $BE, $BE, $BE, $80, $A2, $A2, $A2, $A2, $22),
($A2, $A2, $A2, $80, $A2, $94, $94, $88, $08, $94, $94, $A2, $80, $A2, $A2, $A2),
($A2, $22, $A2, $A2, $A2, $80, $BE, $A2, $A2, $A2, $22, $22, $22, $3E, $00, $FF),
($00, $00, $00, $00, $00, $00, $00, $00, $00, $0C, $1E, $1E, $1E, $0C, $00, $00),
($00, $01, $00, $00, $00, $00, $00, $00, $01, $00, $01, $00, $00, $00, $00, $00),
($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
($00, $00, $00, $01, $01, $00, $00, $00, $80, $00, $00, $00, $00, $00, $00, $00),
($FF, $00, $00, $00, $00, $80, $80, $88, $08, $08, $88, $88, $88, $88, $08, $00),
($8F, $88, $88, $88, $88, $08, $88, $8F, $80, $8F, $88, $08, $88, $88, $88, $88),
($0F, $00, $8F, $08, $08, $08, $88, $08, $88, $8F, $80, $80, $00, $00, $00, $FF),
($00, $00, $00, $00, $10, $00, $00, $00, $00, $00, $00, $00, $00, $0C, $1E, $1E),
($1E, $0C, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
($00, $00, $00, $00, $00, $00, $00, $04, $00, $00, $00, $00, $00, $00, $00, $00),
($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
($00, $00, $00, $00, $00, $00, $10, $00, $00, $00, $00, $00, $00, $00, $00, $00),
($00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00),
($7F, $C0, $80, $80, $93, $A4, $A4, $A4, $99, $80, $BF, $84, $84, $84, $83, $80),
($BF, $A4, $A4, $A4, $A0, $80, $BF, $A4, $A4, $A4, $A0, $80, $A0, $BF, $A0, $A0),
($9F, $80, $9F, $A0, $A0, $A0, $9F, $80, $BF, $84, $84, $84, $83, $80, $C0, $7F)
);
begin
Move(Data, Ptr(GetVramAddr)^, 864);
RepaintLCD;
while not KeyPressed do;
end.
これを PASTA/80 でコンパイルして PC-G850 で実行するとこうなります。
何かキーを押すと終了します。
おわりに
妄想が捗りますね!!
追記
MSX 版『GRADIUS』が 2026/07/25 で 40 周年という事でオマケを。
program GRADIUS;
{$u+}
{$i rtl\g850grph.pas}
const
Data: array [0..107] of array [0..15] of Byte =
(
($FB, $F7, $EF, $F7, $EF, $F7, $EF, $F7, $EF, $FF, $EF, $FF, $EF, $FF, $EF, $DF),
($EF, $DF, $AF, $DF, $AF, $DF, $AF, $DF, $AF, $DF, $AF, $5F, $AF, $1F, $AF, $17),
($AB, $07, $AB, $05, $AA, $01, $0A, $00, $02, $00, $02, $00, $0A, $01, $AA, $07),
($AA, $5F, $AA, $7F, $AB, $7F, $AF, $FF, $BB, $FF, $FF, $FF, $FF, $FD, $FA, $FF),
($FF, $FF, $FF, $FF, $FF, $DF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF),
($FF, $FF, $FF, $FF, $FE, $FF, $FE, $FF, $FE, $FF, $FA, $FF, $FA, $FF, $FA, $FF),
($FA, $F5, $EA, $F7, $EA, $FF, $AA, $FF, $AA, $F7, $AA, $FD, $AA, $D5, $AA, $D5),
($AA, $DD, $AA, $FD, $AA, $FD, $AA, $F5, $AA, $F7, $AA, $F7, $AA, $F7, $AB, $F7),
($AA, $75, $AA, $7F, $AA, $7F, $AE, $5F, $AE, $5F, $AA, $DF, $AA, $FF, $AA, $7D),
($FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF),
($FF, $FF, $EF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FE, $FF, $FA, $FF),
($FA, $FD, $EA, $F4, $EA, $D0, $AA, $D0, $A8, $C0, $A8, $C0, $AA, $F0, $AA, $F8),
($AA, $FC, $EA, $FC, $EA, $FF, $FA, $FF, $FA, $FF, $FE, $FF, $BE, $FF, $FE, $FF),
($FF, $FF, $FF, $FF, $FF, $7F, $AF, $17, $AA, $57, $AF, $FF, $FF, $FF, $FF, $FF),
($FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $EF, $FF, $FF, $FF),
($FF, $FF, $BF, $5F, $BF, $7F, $BB, $5F, $2F, $57, $2F, $5F, $BF, $7F, $AE, $7F),
($FE, $FF, $FE, $FF, $FE, $FF, $FA, $FF, $FA, $FF, $FA, $FF, $EA, $FF, $EA, $FF),
($EA, $FD, $EA, $FF, $EA, $DD, $AA, $D5, $AA, $DF, $AA, $FD, $AA, $DD, $AA, $FD),
($EF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF),
($FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF),
($FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $EA, $7F, $FA, $7F, $FE, $FF, $FF, $FF),
($BF, $7F, $BF, $3F, $BF, $7F, $AF, $7F, $AF, $FF, $BF, $1F, $AF, $1F, $AF, $47),
($AF, $17, $AA, $11, $AA, $77, $2A, $70, $2A, $77, $2A, $77, $AA, $11, $AA, $17),
($AF, $47, $AF, $1F, $AF, $1F, $BF, $FF, $AF, $7F, $AF, $7F, $BF, $3F, $BF, $7F),
($FF, $FF, $FE, $FF, $FE, $7E, $FE, $7C, $FE, $FC, $FE, $FC, $FE, $FE, $FE, $FF),
($FE, $FF, $FF, $FF, $FB, $FF, $FB, $FF, $FB, $FF, $FB, $FF, $FF, $FF, $FF, $FF),
($FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FE, $FF),
($FF, $FF, $FF, $FF, $FF, $FD, $FE, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $7F),
($BF, $7F, $AF, $47, $AB, $D3, $AB, $D7, $AF, $DF, $AF, $DF, $AF, $1F, $AF, $8F),
($AF, $07, $AF, $47, $AF, $5F, $AF, $47, $AA, $47, $AA, $56, $AA, $44, $EA, $65),
($AA, $24, $AA, $06, $AA, $27, $AA, $65, $AA, $75, $AB, $15, $AA, $55, $AA, $77),
($2A, $57, $AA, $15, $AA, $22, $AA, $02, $AA, $06, $AA, $22, $AA, $15, $AA, $17),
($AA, $77, $AA, $55, $AA, $77, $AB, $75, $AA, $65, $AA, $27, $AA, $06, $AA, $24),
($AA, $65, $EA, $44, $AA, $56, $AA, $47, $AA, $47, $AF, $5F, $AF, $47, $AF, $07),
($AF, $0F, $AF, $1F, $AF, $DF, $AF, $DF, $AF, $D7, $AB, $D3, $AB, $47, $AF, $7F),
($BF, $7F, $FF, $FF, $FF, $FF, $FF, $FD, $FA, $FF, $FF, $FF, $FF, $FF, $FF, $FF),
($FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FD, $FB, $F9, $E8, $D0),
($AA, $DC, $AA, $DD, $AA, $DD, $AA, $DD, $BA, $1D, $BA, $31, $BA, $31, $BA, $75),
($BA, $75, $BA, $75, $EA, $75, $EA, $E4, $EA, $E5, $EA, $D4, $AA, $00, $AA, $20),
($AA, $44, $AA, $45, $AA, $F5, $EA, $55, $AA, $55, $AA, $17, $AA, $C7, $AA, $C1),
($AA, $C0, $AA, $20, $AA, $50, $AA, $10, $AA, $98, $AA, $D0, $AA, $B0, $AA, $C0),
($AA, $C0, $AA, $D5, $AA, $55, $AA, $55, $AA, $55, $AA, $D5, $AA, $55, $AA, $55),
($AA, $24, $AA, $01, $AA, $F4, $EA, $E5, $EA, $E4, $EA, $75, $EA, $75, $BA, $75),
($BA, $75, $BA, $31, $BA, $31, $BA, $1D, $BA, $1D, $AA, $DD, $AA, $DD, $AA, $DC),
($AA, $F0, $E8, $F9, $FB, $FD, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF),
($FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $BF, $5F),
($FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FE, $FF, $FE, $FF, $FE, $FF, $FE, $FD),
($FA, $FF, $FA, $FF, $FA, $FC, $FA, $FC, $EA, $FD, $EB, $FD, $EB, $FF, $EB, $D3),
($EA, $D3, $AB, $97, $AA, $C7, $AA, $F0, $AA, $FE, $AE, $DF, $AF, $D7, $AB, $D7),
($EA, $F5, $AA, $11, $A8, $91, $8A, $10, $AA, $D1, $A2, $C3, $AA, $D3, $BA, $D1),
($AA, $F1, $BB, $D3, $AB, $D3, $AA, $FF, $AF, $F6, $AA, $F7, $AA, $F7, $AB, $F3),
($EA, $D3, $EB, $FF, $EB, $FD, $EB, $FD, $EA, $F4, $FA, $FC, $FA, $FF, $FA, $FF),
($FA, $FD, $FE, $FF, $FE, $FF, $FE, $FF, $FE, $FF, $FE, $FF, $EF, $FF, $FF, $FF),
($FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF),
($FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FE, $FE, $FA, $F0),
($FE, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF),
($FE, $FF, $FE, $FF, $FF, $FF, $FF, $FF, $FF, $7F, $BF, $FF, $EF, $FF, $FB, $FF),
($FE, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FE, $FF, $FE, $F9),
($FB, $F9, $FB, $FD, $EA, $F5, $EA, $F5, $EA, $C1, $AA, $0D, $AA, $FD, $FB, $FD),
($AE, $FF, $AA, $FF, $FE, $FF, $FE, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF),
($FF, $FF, $AF, $DF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF),
($FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF),
($FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF),
($FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $BF, $FF, $FF, $FF, $FF, $FF),
($FF, $FF, $BB, $7F, $BF, $7F, $BF, $FF, $FF, $FF, $FF, $FF, $FE, $FF, $FB, $FF),
($FF, $FF, $BB, $B7, $AB, $E7, $EB, $F9, $FA, $FF, $FE, $FF, $FF, $FF, $FF, $FF),
($FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF),
($FF, $FF, $FF, $FF, $FF, $FF, $BF, $DF, $AF, $FF, $EE, $FF, $FE, $F9, $BB, $FF),
($BE, $FF, $EA, $F7, $EB, $F7, $AB, $D7, $AF, $D7, $AF, $F7, $EF, $DF, $AF, $DF),
($AF, $DF, $AF, $DF, $BF, $DF, $BF, $FF, $BF, $7F, $BF, $7F, $BF, $7F, $BF, $7F),
($AF, $7F, $BF, $1F, $AF, $1F, $AF, $07, $AB, $07, $AB, $91, $AB, $E1, $EB, $FD),
($FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF),
($FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FE, $FF, $FF, $FF, $FF, $FF),
($EA, $D5, $AA, $D5, $AA, $DF, $AA, $FF, $AA, $FF, $BB, $FF, $AF, $FF, $AB, $FF),
($AA, $DF, $EB, $FF, $EF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FE, $FF, $FF, $FF),
($FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $7F, $3F, $3F, $3F, $0F, $0F, $07),
($83, $01, $A1, $00, $AA, $00, $AA, $55, $AA, $57, $AA, $17, $AB, $C7, $EB, $F7),
($EA, $C7, $BF, $DF, $BF, $FF, $BE, $FF, $BF, $FF, $BA, $3F, $FA, $FF, $FE, $FF),
($FA, $F7, $BA, $7F, $BA, $FD, $FA, $FD, $FE, $FF, $FA, $FD, $FA, $FD, $EE, $FF),
($FA, $FF, $FA, $FD, $FE, $7E, $FE, $FD, $FA, $FE, $FE, $FF, $FF, $FF, $FF, $FF),
($FF, $7F, $FF, $7F, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF),
($FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF),
($FF, $FF, $BF, $FF, $FF, $7F, $BF, $FF, $BF, $FF, $BE, $FF, $FF, $FF, $FF, $FF),
($FF, $7F, $FF, $7F, $FF, $7F, $FF, $7F, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF),
($7F, $1F, $9F, $8F, $8F, $C7, $EB, $C1, $E0, $E4, $EA, $E8, $EE, $E5, $E8, $F0),
($EA, $F0, $EA, $F0, $AA, $D1, $AA, $F0, $A8, $D5, $AA, $15, $BA, $1F, $2A, $1F),
($2A, $1F, $BA, $7F, $FA, $FF, $AE, $07, $0A, $03, $03, $01, $0B, $03, $0A, $07),
($AF, $7F, $FA, $F5, $FA, $DF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF),
($FF, $FF, $BF, $FF, $FF, $FF, $FE, $FF, $FF, $FF, $FF, $7F, $BF, $FF, $BF, $FF),
($EA, $FD, $AA, $FD, $AA, $D5, $AB, $77, $AB, $FF, $FF, $FF, $FF, $FF, $EF, $FF),
($FF, $FF, $BF, $FF, $BF, $FF, $AF, $FF, $AE, $5F, $AE, $7F, $AE, $7F, $AB, $FF),
($EA, $FD, $FA, $FD, $BE, $FF, $FE, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FE, $FC),
($FC, $FC, $F8, $F0, $EA, $E0, $E8, $C0, $A8, $C0, $E0, $F0, $E8, $E0, $E0, $F0),
($FA, $F8, $FA, $FD, $FE, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF),
($BF, $FF, $FF, $FF, $FA, $F5, $FB, $FF, $FB, $FF, $EA, $00, $AA, $00, $00, $00),
($00, $00, $AA, $00, $AB, $FF, $FA, $F0, $EA, $C0, $A8, $00, $A0, $00, $80, $00),
($0A, $00, $2A, $07, $AF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FB, $FF, $EF, $FF),
($FF, $FF, $FF, $FF, $EF, $FF, $AF, $FF, $AB, $DF, $AA, $FF, $AA, $FF, $AA, $FF),
($FF, $FF, $FF, $FF, $FE, $FF, $FE, $FF, $FE, $FF, $FF, $FF, $FF, $FF, $FF, $FF),
($FB, $FF, $EA, $F7, $FB, $FF, $FB, $FD, $BA, $FD, $FA, $FD, $FA, $FD, $FA, $FD),
($FE, $FF, $FE, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF),
($FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF),
($FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF),
($FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $EA, $80, $A0, $00),
($80, $00, $AA, $00, $AA, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FE, $FC, $FA, $F0),
($EA, $C0, $A8, $00, $AA, $01, $AB, $5F, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF),
($FF, $FF, $EB, $FF, $EA, $FF, $EA, $FF, $EA, $FF, $EA, $FF, $FA, $FF, $FE, $FF),
($FF, $FF, $FF, $FF, $FF, $FF, $FF, $DF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF)
);
var
y, oy: byte;
Keys: TKeyArray;
begin
oy := 255;
y := 0;
while True do
begin
ScanKeyboard(Keys);
if (y > 0) and ((Keys[3] and $80) <> 0) then Dec(y);
if (y < 6) and ((Keys[3] and $40) <> 0) then Inc(y);
if oy <> y then
begin
Move(Data[y * 9], Ptr(GetVramAddr)^, 864);
RepaintLCD;
end;
oy := y;
Delay(100);
end;
end.
上下キーでスクロールします。



