PAGE 80,132 ;=================================================================== ; PROGRAM LISTING 13.6 ; ; PROGRAM TO MOVE A FACE AROUND THE SCREEN ;=================================================================== ;PROCEDURES TO EXTRN CLEAR:FAR ;CLEAR VIDEO SCREEN EXTRN DELAY:FAR ;DELAY n SECONDS EXTRN PUTSHAPE:FAR ;DISPLAY A TEXTUAL SHAPE ;=================================================================== .MODEL SMALL,BASIC ;=================================================================== ; S T A C K S E G M E N T D E F I N I T I O N ; .STACK 256 ;=================================================================== ; D A T A S E G M E N T D E F I N I T I O N .DATA FACE DB 07,11 ;7 x 11 SHAPE DB 20H,07H,20H,07H,2AH,07H,2AH,07H,2AH,07H,2AH,07H DB 2AH,07H,2AH,07H,2AH,07H,20H,07H,20H,07H DB 20H,07H,2AH,07H,20H,07H,20H,07H,20H,07H,20H,07H DB 20H,07H,20H,07H,20H,07H,2AH,07H,20H,07H DB 2AH,07H,20H,07H,20H,07H,2BH,07H,20H,07H,20H,07H DB 20H,07H,2BH,07H,20H,07H,20H,07H,2AH,07H DB 2AH,07H,20H,07H,20H,07H,20H,07H,20H,07H,5EH,07H DB 20H,07H,20H,07H,20H,07H,20H,07H,2AH,07H DB 2AH,07H,20H,07H,20H,07H,5CH,07H,5FH,07H,5FH,07H DB 5FH,07H,2FH,07H,20H,07H,20H,07H,2AH,07H DB 20H,07H,2AH,07H,20H,07H,20H,07H,20H,07H,20H,07H DB 20H,07H,20H,07H,20H,07H,2AH,07H,20H,07H DB 20H,07H,20H,07H,2AH,07H,2AH,07H,2AH,07H,2AH,07H DB 2AH,07H,2AH,07H,2AH,07H,20H,07H,20H,07H SAD_MOUTH DB 02,11 ;2 x 11 SHAPE DB 2AH,07H,20H,07H,20H,07H,20H,07H,5FH,07H,5FH,07H DB 5FH,07H,20H,07H,20H,07H,20H,07H,2AH,07H DB 20H,07H,2AH,07H,20H,07H,2FH,07H,20H,07H,20H,07H DB 20H,07H,5CH,07H,20H,07H,2AH,07H,20H,07H WINK DB 1,1,2BH,87H ;1 X 1 SHAPE ;=================================================================== ; C O D E S E G M E N T D E F I N I T I O N ; .CODE EX_13_6 .STARTUP ;GENERATE STARTUP CODE ; MOV AH,15 ;GET PG INT 10H LEA SI,FACE ;SPTR = ADDRESS OF FACE MOV DH,3 ;I = 3 MOV DL,18 ;J = 18 MOV AL,1 MOV CX,12 ;LOOP_CNT = 12 .REPEAT ;REPEAT CALL CLEAR ; CLEAR SCREEN INC DH ; I = I + 1 INC DL ; J = J + 1 CALL PUTSHAPE ; CALL PUTSHAPE(SPTR,PG,I,J) CALL DELAY ; DELAY 1 SECOND .UNTILCXZ ; LOOP_CNT = LOOP_CNT - 1 ;UNTIL LOOP_CNT = 0 ADD DH,4 ;I = I + 4 LEA SI,SAD_MOUTH ;SPTR = ADDRESS OF SAD_MOUTH CALL PUTSHAPE ;CALL PUTSHAPE(SPTR,PG,I,J) MOV AL,5 ;DELAY 5 SECONDS CALL DELAY LEA SI,WINK ;SPTR = ADDRESS OF WINK SUB DH,2 ;I = I - 2 ADD DL,7 ;J = J + 7 CALL PUTSHAPE ;CALL PUTSHAPE(SPTR,PG,I,J) CALL DELAY ;DELAY 5 SECONDS .EXIT ;RETURN TO DOS ; ;=================================================================== END