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

    {
    >Try converting it to use pointers instead of accessing the array with
    >indexes, and use a pointer to video memory for direct plots
    >instead of using the putPixel routine. Also it's quicker to
    >check against 0 for the background than to check against 255.

    I found a copy of "The Visible Computer: 8088" in my bookshelves and
    tried rewriting my assembly routines.  Here's what I finally got:
    }

    procedure MaskPut(x,y: word; p: pointer); assembler;
    var
     XX,YY: byte;
    asm
            LES SI,p
            MOV [XX],0
            MOV [YY],0
            MOV CX,256
            XOR DX,DX
            CLD
    @Loopit:SEGES LODSB
            MOV DL,AL
            PUSH ES
            PUSH SI
            CMP DL,255
            JZ @Done
            MOV AX,0A000h
            MOV ES,AX
            MOV AX,320
            MOV BX,[Y]
            ADD BL,[YY]
            PUSH DX
            MUL BX
            POP DX
            MOV BX,[X]
            ADD BL,[XX]
            ADD AX,BX
            MOV SI,AX
            MOV ES:[SI],DL
    @Done:  INC [XX]
            CMP [XX],16
            JNZ @Okay
            MOV [XX],0
            INC [YY]
    @Okay:  POP SI
            POP ES
            LOOP @Loopit
    end;

    {
    It works fine.  I didn't notice much of a difference in speed though.  I
    tested it and I can plot about 1103 sprites/second in ASM and 828
    sprites/sec. with my original TP code.  Please keep in mind I'm not much
    of an assembly programmer. Can anyone help me optimize this code (into
    286 would be good too). Thanx for your help!
    }

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