[Back to EGAVGA SWAG index] [Back to Main SWAG index] [Original]

    USES Graph;

    TYPE

       TByteArray = Array [0..16384] Of Byte;
       PByteArray = ^TByteArray;

    VAR I, J: Integer; BiosFont: PByteArray; F: Text;

    PROCEDURE GetBiosFont; ASSEMBLER;
    ASM
       PUSH BP;
       PUSH DS;
       MOV AX, 1130H;
       MOV BX, 0100H;
       INT 10H;
       MOV BX, BP;
       POP DS;
       POP BP;
       MOV WORD PTR [BiosFont], BX;
       MOV WORD PTR [BiosFont+2], ES;
    END;

    FUNCTION Hex (Num: Word; Nib: Byte): String; ASSEMBLER;
    ASM
       LES DI, @Result;                                   { ES:DI -> return }
       XOR CH, CH;
       MOV CL, Nib;                                       { String length }
       MOV ES:[DI], CL;
       JCXZ @@3;                                          { Check for zero }
       ADD DI, CX;
       MOV BX, Num;
       STD;                                               { Strings backwards }
    @@1:
       MOV AL, BL;                                        { Current nibble }
       AND AL, $0F;
       OR AL, $30 ;                                       { Convert to ascii }
       CMP AL, $3A;
       JB @@2;                                            { Contains A-F patch }
       ADD  AL, $07;
    @@2:
       STOSB;                                             { Store the byte }
       SHR BX, 1;
       SHR BX, 1;
       SHR BX, 1;                                         { Roll of nible done }
       SHR BX, 1;
       LOOP @@1;
    @@3:
       CLD;                                               { Reset direction }
    END;

        BEGIN
           InitGraph(I, J, '');
           GetBiosFont;
           Assign(F, 'BiosFont.Bin');
           Rewrite(F);
           WriteLn(F, 'BiosFont: Array [0..4096] Of Byte = (');
           For J := 0 To 255 Do Begin
             For I := 0 To 15 Do Begin
                Write(F, '$', Hex(BiosFont^[J*16+I], 2), ',');
             End;
             WriteLn(F);
           End;
           WriteLn(F, '0);');
           Close(F);
           CloseGraph;
        END.

[Back to EGAVGA SWAG index] [Back to Main SWAG index] [Original]