The following code shows two trucks bouncing against each other on a digital desert during the night. It's an example of how to draw by using the "Fast Clear" technique. Download it to see it in motion right away (april 2005).

YSS



;>>>>>>>>>>>>>>>>>>>>
;THE CODE BEGINS RIGHT BELOW THIS LINE:


;.MODEL TINY
;-----------
;(APR 2005)
;
;THIS CODE USED SCOLL00B.ASM AS AN EXAMPLE
;TO USE THE "FAST CLEAR" TECHNIQUE TO DRAW
;ON VGA MODE 13 SCREEN.
;
CSEG SEGMENT
ORG 100H
      ASSUME CS:CSEG,DS:CSEG
START PROC
;=============================================================
;SET SCREEN + ES
;=============================================================
	MOV AL,13H
	INT 10H
	MOV BH,0A0H
	MOV ES,BX
	CLD
	CALL LINE      ;FLOOR
	CALL SET
;=============================================================
;FIX TIME A BIT
;=============================================================
	CALL GETTIM
	MOV VB,AL

;=============================================================
;SYSTEM CYCLE
;=============================================================
S000:

	CALL MOBSOUT  ;SET MOTION,
	MOV AH,1      ;CHECK FOR XIT REQUEST,
	INT 16H       ;
	JE S000       ;AND REPEAT WHILE NO KEY
;=============================================================

	XOR AH,AH
	INT 16H
	DB 0C3H

;
;
;
;=============================================================
;=============================================================
;=============================================================
;SYSTEM ROUTINES:
;=============================================================


SET PROC
		;SET BACKGROUND IMG IN PLACE
;--------------------------------------
;LOAD RGB TBL

	MOV SI,OFFSET RGB80
	MOV DX,03C8H
	MOV AH,32*3
	MOV AL,128
	OUT DX,AL
	INC DX
	L00:
	MOV AL,[SI]
	OUT DX,AL
	INC SI
	DEC AH
	JNE L00


;--------------------------------------
;SCREEN IN PLACE

	MOV BH,0A0H
	MOV ES,BX

	MOV SI,OFFSET CPXTST
	XOR DI,DI
	XOR BP,BP

	S01:
	MOV AX,[SI]
	ADD SI,2
	S00:
	MOV ES:[DI],AL
	INC DI
	DEC AH
	JNE S00
	ADD BP,2
	CMP BP,CPXLM
	JB S01
	CALL NOC4
	CALL NORM
	PUSH DS
	PUSH ES
	POP DS
	MOV CX,16000
	CLD
	XOR SI,SI
	MOV DI,16000
	CX00:
	REP MOVSB
	POP DS
	CALL NORM
SET ENDP
NOC4 PROC
;------------------------
;------------------------ NO CHAIN 4:  03C4 #04 BT3=0
;------------------------
	MOV DX,03C4H
	MOV AL,4
	OUT DX,AL
	INC DX
	IN AL,DX     ;AL=[#04]
	XOR AL,8
	OUT DX,AL    ;#04=[#04] AND F7
	RET
NOC4 ENDP

NORM PROC	    ;FLIP BITMASK REGISTER
	MOV DX,03CEH
	MOV AL,8
	OUT DX,AL
	INC DX
	IN AL,DX
	XOR AL,255
	OUT DX,AL
     RET
NORM ENDP
NO100D:
       CALL NOC4
       CALL NORM
       PUSH DS
       PUSH ES
       POP DS
       MOV DI,950*8   ;"FAST CLEAR"
       MOV SI,1475*16 ;NOW USED TO DRAW
       MOV CX,48*5*3  ;NOT TO CLEAR
       CLD
       NXX0:
       REP MOVSB
       POP DS
       CALL NORM
       JMP NOC4

GETTIM PROC
			  ;GET TIME
	PUSH ES
	XOR AX,AX
	MOV ES,AX
	MOV AL,ES:[46CH]
	POP ES
	RET
GETTIM	ENDP

LINE PROC
			  ;SET A FLOOR
     MOV DI,320*104
     MOV AX,0202H
     MOV CX,320/2
     REP STOSW
     RET
LINE ENDP


MDX DB 2      ;MOBS VECTORS
	      ;BT0 -> MOB 1 DX: 0 -> MOVING RIGHT
	      ;  1 ->  '' 2  '  '     '      '
	      ;BTS2-7 N/U

VB DB 0 	  ;TIMER CMP
M1XPOS DW 0	  ;MOB 1 XPOS
M2XPOS DW 319-22  ; '' 2  ''
M1BDL DB 0	  ;
M2BDL DB 0	  ;
BOUNDS PROC
			  ;CHECK FOR MOB OUT OF BOUNDS.
			  ;AX=XPOS (0..319)
			  ;BL(BT0)=MOVING DIRECTION (0=TO THE RIGHT)
			  ;RETURNS:
			  ;CF -> OUT OF BOUNDS
			  ;AND AX INC'D OR DEC'D

       SHR BL,1
       JNC B00
       CMP AX,0+1	  ;LEFT BOUND
       JNB B001
       CLC
       RET
B001:
       DEC AX
       STC
       RET
B00:
       CMP AX,319-22	  ;RIGHT BOUND
       JBE B01
       STC
       RET
B01:
       CLC
       INC AX
       RET
BOUNDS ENDP

MOBSOUT PROC
			  ;DRAW MOBS ON SCREEN..

	CALL GETTIM  ;
	CMP AL,VB    ;..WHEN IT'S THE RIGHT TIME FOR IT
	JE MXOXITBOOR
	JMP MXOXIT

MXOXITBOOR:
	PUSH ES 	    ;GO INTO
	XOR AX,AX	    ;SLO MOTION
	MOV ES,AX	    ;IF SHIFT
	MOV AL,ES:[417H]    ;KEY IS
	POP ES		    ;PRESSED.
	TEST AL,1	    ;
	JE S002 	    ;
	INC VB
	INC VB
	INC VB
S002:
	TEST AL,2	    ;EVEN SLOWER
	JE S001 	    ;IF BOTH
	INC VB		    ;PRESSED
	INC VB
	INC VB
S001:
	INC VB	     ;.
DNBL:

;=============================================================
;IMG CLRS
;=============================================================
	CALL NO100D  ;"FAST CLEAR"
       ;CALL NO1
;=============================================================
;ACTUAL COLLISION DETECTION
;=============================================================
	MOV AX,M1XPOS	;MATHEMATICAL COLLISION DET.
	SUB AX,M2XPOS	;NOT PIXEL ACCURATE, BUT WHAT IS?
	ADD AX,22	;I MEAN, WHAT IS, REALLY? :)
	JLE  NOCOLL	;NO COLLISION
	XOR MDX,3	;YET, INDICATE IF SO
	MOV M1BDL,14	;
	MOV M2BDL,14	;
NOCOLL:
;=============================================================
;BOUND CHECKS AND INCS
;=============================================================
	MOV AX,M1XPOS	;XPOS
	MOV BL,MDX	;MOVING DIRECTION (BT0)
	CALL BOUNDS	;CHECK FOR SCREEN BOUNDS
	MOV M1XPOS,AX	;AND UPDATE
	RCL BL,1	;CF = BOUNDS
	AND MDX,254
	AND BL,1
	OR MDX,BL	;CHANGE DIRECTION IF NEEDED

	MOV AX,M2XPOS	;SAME FOR MOB2
	MOV BL,MDX
	SHR BL,1
	CALL BOUNDS
	MOV M2XPOS,AX
	RCL BL,1
	SHL BL,1
	AND MDX,253
	AND BL,2
	OR MDX,BL
;=============================================================
	CALL MOBOUT1	;VIEW MOBS
MXOXIT:
	RET
MOBSOUT ENDP
MOBOUT1 PROC
			  ;VIEW CHR1
	MOV AL,1  ;VIEW
	MOV SI,OFFSET MOB
	CMP M1BDL,0
	JE M1NOB       ;NO BUMP
	DEC M1BDL
	JNE M10R

M1NOB:
	TEST MDX,1
	JE M10R        ;MOVING RIGHT
	ADD SI,198     ;MOVING LEFT

M10R:
	MOV DI,0+320*(100-5)
	ADD DI,M1XPOS
	CALL MOBOUT
MOBOUT1 ENDP
MOBOUT2 PROC
			  ;VIEW CHR2
	MOV AL,1
	MOV SI,OFFSET MOB+198
	CMP M2BDL,0
	JE M2NOB       ;NO BUMP
	DEC M2BDL
	JNE M20R
M2NOB:
	TEST MDX,2
	JNE M20R
	SUB SI,198
M20R:
	MOV DI,0+320*(100-5) ;+319-22
	ADD DI,M2XPOS
	CALL MOBOUT
	RET
MOBOUT2 ENDP


;NO1 PROC
;			   ;WIPE CHR1
;	 XOR AL,AL
;	 MOV SI,OFFSET MOB
;	 MOV DI,0+320*(100-5)
;	 ADD DI,M1XPOS
;	 CALL MOBOUT
;NO1 ENDP
;
;NO2 PROC
;			   ;WIPE CHR2
;	 XOR AL,AL
;	 MOV SI,OFFSET MOB+198
;	 MOV DI,0+320*(100-5)
;	 ADD DI,M2XPOS
;NO2 ENDP
MOBOUT PROC
			  ;VIEW/CLR MOB IN SI
			  ;AL BT0=1 -> VIEW
       MOV BP,9
       TEST AL,1
       JE M01
M00:
       MOV CX,22; /2
       M001:
       MOV AL,[SI]
       TEST AL,AL
       JE M0010
       MOV ES:[DI],AL
       M0010:
       INC SI
       INC DI
       LOOP M001
       ADD DI,320-22
       DEC BP
       JNE M00
       RET

M01:
       XOR AX,AX
       MOV CX,22/2
       REP STOSW
       ADD DI,320-22
       DEC BP
       JNE M01
       RET
MOBOUT ENDP
START ENDP

MOB LABEL WORD
;=============================================================
;MOB DATA.  MOB = MOVABLE OBJECT BLOCK
;22*9 IMAGES:  22 PIXELS WIDE, 9 PIXELS DOWN
;IF A=OFFSET ->
;A+0 -> CHR FACING RIGHT
;A+198 -> CHR FACING LEFT
;[pixelrat@hotmail.com]
;[http://www.oocities.org/yssmlp/]
;=============================================================
	  DW 2313, 2313, 2313, 2313, 2313, 2313, 2313, 9
	  DW 0, 0, 0, 2313, 1026, 1026, 1026, 516, 1028
	  DW 2306, 9, 3084, 12, 0, 2313, 1033, 1033, 1033
	  DW 2313, 2308, 2313, 9, 3084, 3084, 0, 2313, 514
	  DW 516, 514, 516, 1026, 2306, 265, 12, 0, 0
	  DW 2313, 2313, 2308, 1033, 2308, 1028, 2313, 265, 3084
	  DW 3084, 1036, 2313, 514, 2313, 2313, 521, 514, 2306
	  DW 265, 3084, 3084, 1036, 2313, 2313, 6409, 6425, 2313
	  DW 2313, 2313, 265, 6412, 6425, 1036, 0, 0, 6400
	  DW 6408, 0, 0, 0, 0, 6400, 6408, 0, 0
	  DW 0, 6400, 6425, 0, 0, 0, 0, 6400, 6425
	  DW 0, 0, 0, 0, 2304, 2313, 2313, 2313, 2313
	  DW 2313, 2313, 2313, 0, 3072, 3084, 2304, 521, 1026
	  DW 1028, 1026, 1026, 514, 2313, 0, 3084, 3084, 2304
	  DW 2313, 1033, 1033, 1033, 2308, 2313, 2313, 0, 0
	  DW 3072, 2305, 521, 1026, 1026, 1026, 516, 514, 2313
	  DW 3076, 3084, 3084, 2305, 2313, 1033, 1028, 1033, 1033
	  DW 2313, 2313, 3076, 3084, 3084, 2305, 521, 514, 2306
	  DW 2313, 2313, 514, 2313, 3076, 6425, 3097, 2305, 2313
	  DW 2313, 2313, 6425, 2329, 2313, 2313, 0, 2073, 25
	  DW 0, 0, 0, 0, 2073, 25, 0, 0, 0
	  DW 6425, 25, 0, 0, 0, 0, 6425, 25, 0
	  DW 0
DB 0,0 ;,0,0,0,0,0,0


RGB80 LABEL BYTE      ;
	  DW 5410, 0, 10752, 5410, 10786, 10261, 5414, 9216, 18
	  DW 3612, 7189, 4366, 3612, 7182, 3601, 5404, 7182, 3608
	  DW 7196, 6158, 3612, 7189, 4366, 3612, 6, 2060, 3584
	  DW 10, 3088, 4608, 14, 4116, 5632, 18, 5144, 6656
	  DW 22, 6172, 7680, 26, 7200, 8704, 30, 8228, 9728
	  DW 34, 9256, 10752


CPXTST LABEL WORD
;--------------------------------------
;TAKEN FROM E:\RC171\SD4242K5\TST\SD424CPX.ZTX
;--------------------------------------
CPXIN EQU CPXND - $ +1

	  DW 65280, 65280, 65280, 65280, 65280, 65280, 65280, 65280, 65280
	  DW 65280, 65280, 65280, 65280, 65280, 65280, 65280, 65280, 65280
	  DW 65280, 65280, 65280, 65280, 65280, 65280, 65280, 65280, 65280
	  DW 65280, 65280, 65280, 65280, 65280, 65280, 65280, 65280, 65280
	  DW 65280, 65280, 65280, 65280, 10240, 65424, 65424, 65424, 50064
	  DW 65425, 65425, 65425, 65425, 65425, 65425, 18065, 65426, 65426
	  DW 4498, 1055, 335, 65426, 15506, 335, 1567, 335, 36242
	  DW 334, 43922, 335, 1823, 335, 65426, 14738, 335, 543
	  DW 332, 1055, 335, 26258, 53907, 335, 1823, 65427, 14995
	  DW 799, 332, 799, 41363, 325, 38803, 335, 1567, 65427
	  DW 14995, 335, 799, 332, 543, 65427, 14995, 335, 1567
	  DW 26259, 12436, 320, 41620, 1055, 332, 287, 335, 65428
	  DW 14740, 335, 287, 332, 1055, 65428, 14740, 335, 1567
	  DW 335, 65428, 14484, 335, 543, 332, 543, 335, 65428
	  DW 14740, 332, 1055, 335, 27540, 65429, 65429, 65429, 9109
	  DW 10806, 65429, 8853, 13622, 65429, 8597, 6198, 26773, 65430
	  DW 65430, 65430, 65430, 65430, 65430, 18070, 65431, 65431, 65431
	  DW 65431, 65431, 65431, 18071, 65432, 65432, 65432, 65432, 65432
	  DW 65432, 18072, 65433, 65433, 65433, 65433, 65433, 65433, 18073
	  DW 65434, 65434, 65434, 65434, 65434, 65434, 18074, 65435, 65435
	  DW 8347, 389, 1798, 65435, 14235, 389, 518, 388, 1664
	  DW 1542, 65435, 12187, 389, 518, 388, 3712, 518, 65435
	  DW 11419, 518, 388, 4736, 262, 20891, 55196, 389, 262
	  DW 388, 5504, 262, 65436, 9884, 389, 518, 388, 6016
	  DW 518, 65436, 8860, 774, 388, 7040, 262, 65436, 8092
	  DW 389, 262, 388, 8064, 518, 65436, 7068, 389, 518
	  DW 9088, 518, 18844, 52893, 389, 262, 388, 9856, 518
	  DW 65437, 5277, 389, 518, 388, 10624, 518, 65437, 4253
	  DW 389, 518, 388, 11648, 262, 65437, 3741, 518, 388
	  DW 12416, 262, 65437, 3229, 262, 388, 13184, 262, 17053
	  DW 51073, 387, 13698, 387, 65409, 2177, 643, 14210, 387
	  DW 65409, 1153, 899, 14722, 387, 65409, 641, 643, 15746
	  DW 387, 16513, 65282, 16642, 65280, 16640, 65282, 16642, 65280
	  DW 16640, 65282, 16642, 65280, 65280, 33280, 65282, 16642, 65280
	  DW 65280, 65280, 49920, 65282, 16642, 65280, 65280, 65280, 49920
	  DW 65282, 16642, 65280, 65280, 65280, 65280, 65280, 1280, 65282
	  DW 16642, 65280, 65280, 65280, 65280, 65280, 65280, 17920, 65282
	  DW 16642, 65280, 65280, 65280, 65280, 65280, 65280, 65280, 34560
	  DW 65282, 16642, 65280, 65280, 45056, 265, 256, 265, 23808
	  DW 265, 256, 265, 23808, 265, 256, 265, 32000, 265
	  DW 256, 265, 23808, 265, 256, 265, 23808, 265, 256
	  DW 265, 32000, 265, 256, 265, 23808, 265, 256, 265
	  DW 23808, 265, 256, 265, 32000, 265, 256, 265, 23808
	  DW 265, 256, 265, 23808, 265, 256, 265, 32000, 265
	  DW 256, 265, 23808, 265, 256, 265, 23808, 265, 256
	  DW 265, 20224, 11778, 265, 258, 265, 23810, 265, 258
	  DW 265, 23810, 265, 258, 265, 20226, 11776, 265, 256
	  DW 265, 23808, 265, 256, 265, 23808, 265, 256, 265
	  DW 32000, 265, 256, 265, 23808, 265, 256, 265, 23808
	  DW 265, 256, 265, 32000, 265, 256, 265, 23808, 265
	  DW 256, 265, 23808, 265, 256, 265, 32000, 265, 256
	  DW 265, 23808, 265, 256, 265, 23808, 265, 256, 265
	  DW 32000, 265, 256, 265, 23808, 265, 256, 265, 23808
	  DW 265, 256, 265, 32000, 265, 256, 265, 23808, 265
	  DW 256, 265, 23808, 265, 256, 265, 32000, 265, 256
	  DW 265, 23808, 265, 256, 265, 23808, 265, 256, 265
	  DW 32000, 265, 256, 265, 23808, 265, 256, 265, 23808
	  DW 265, 256, 265, 20224, 65282, 16642, 65280, 65280, 65280
	  DW 65280, 65280, 65280, 65280, 65280, 65280, 65280, 65280, 19200
	  DW 65282, 16642, 65280, 65280, 65280, 65280, 65280, 65280, 65280
	  DW 65280, 65280, 65280, 65280, 65280, 35840, 65282, 16642, 65280
	  DW 65280, 65280, 65280, 65280, 65280, 65280, 65280, 65280, 65280
	  DW 65280, 65280, 65280, 52480, 65282, 16642, 65280, 65280, 65280
	  DW 65280, 65280, 65280, 65280, 65280, 65280, 65280, 65280, 65280
	  DW 65280, 65280, 65280

CPXND EQU $
CPXLM DW CPXIN

CSEG ENDS
     END START