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

    {$G+}
    const
      screen=ptr($A000,0);
      font=ptr($F0A0,$F06E);

    Function ReadKey:Char;Assembler;
    Asm
      mov ah,00h;       int 16h
    End;

    Procedure DispStr(x,y:Word;color:Byte;page,font:Pointer;s:String);Assembler;
    Asm
      les di,s;         mov al,es:[di];    push ax;           push es;
      push di;          @begin:;           les di,s;          mov al,es:[di];
      cmp al,0;         je @exit;          dec al;            mov es:[di],al;
      inc al;           xor ah,ah;         mov dx,ax;         add di,ax;
      mov al,es:[di];   shl ax,3;          les di,font;       add di,ax;
      mov bx,di;        mov cx,es;         les di,page;       mov ax,y;
      mov dh,al;        shl ax,6;          add ah,dh;         xor dh,dh;
      shl dx,3;         add ax,dx;         add ax,x;          add di,ax;
      mov ah,color;     xchg di,bx;        mov si,es;         mov es,cx;
      mov cx,si;        mov dx,0880h;      @loop1:;           mov al,es:[di];
      xchg di,bx;       mov si,es;         mov es,cx;         mov cx,si;
      @loop2:;          cmp al,dl;         jb @loop3;         sub al,dl;
      mov es:[di],ah;   @loop3:;           inc di;            cmp dl,0;
      shr dl,1;         jne @loop2;        mov dl,80h;        add di,312;
      xchg di,bx;       mov si,es;         mov es,cx;         mov cx,si;
      inc di;           dec dh;            cmp dh,0;          jne @loop1;
      jmp @begin;       @exit:;            pop di;            pop es;
      pop ax;           mov es:[di],al;
    End;

    begin
      asm; mov ax,13h; int 10h; end;
      dispstr(10,10,15,screen,font,'does it work?');
      readkey;
      asm; mov ax,03h; int 10h; end;
    end.

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