Vous êtes sur la page 1sur 7

;|||||||||||||||||||||||||||||||||||

D_COL EQU R1 ;||


D_COL_V EQU R2 ;||
D_ROW EQU R3 ;||
D_ROW_V EQU R4 ;||
;||
BLOC_X EQU R6 ;||
BLOC_Y EQU R7 ;||
;||
DIR_X EQU 00H ;||
DIR_Y EQU 01H ;||
DIR_Y2 EQU 02H ;||
GAME EQU 03H ;||
PLAY EQU 04H ;||
;||
DOT_ROW EQU P0 ;||
DOT_COL EQU P2 ;||
;||
SPKR EQU P1.2 ;||
P1LED EQU P1.0 ;||
P2LED EQU P1.1 ;||
;||
BAT1 EQU 21H ;||
BATCNTC1 EQU 22H ;||
BAT2 EQU 25H ;||
BATCNTC2 EQU 24H ;||
SWL1 EQU P3.4 ;||
SWR1 EQU P3.5 ;||
SWL2 EQU P3.6 ;||
SWR2 EQU P3.7 ;||
;|||||||||||||||||||||||||||||||||||

ORG 0000H
LJMP MAIN
ORG 000BH ;T0 vector SEC
LJMP pongball
;ORG 001BH ;T1 vector FAST
;LJMP DISPLAY

MAIN:

MOV TMOD,#021H ;T0 16 BIT TIMER


MOV TH0,#76 ;High byte of 19,457 (76 * 256 = 19,456)
MOV TL0,#01 ;Low byte of 19,457 (19,456 + 1 = 19,457)

SETB EA
SETB ET0 ;ENABLE T0 TIMER0 INTTERUPT
SETB TR0 ;START TIMER0

SETB SWL1 ;SET AS I/P PORT


SETB SWR1
SETB SWL2 ;SET AS I/P PORT
SETB SWR2

SETB DIR_Y2
CLR GAME
MOV SP,#40

TABEL:
MOV D_COL,#5D
MOV D_COL_V,#00010000B
MOV D_ROW,#7D
MOV D_ROW_V,#10111111B

MOV 21H, #11100111B ;DISPLAY MEMORY


MOV 22H, #11111111B
MOV 23H, #11110111B
MOV 24H, #11111111B
MOV 25H, #11100111B

MOV BLOC_X,#03H
MOV BLOC_Y,#11110111B

;###########################################################
DISPLAY:
MOV A,D_COL FROM TABEL
ADD A,#20H
MOV B,D_COL
MOV D_COL,A
MOV A,@D_COL
MOV D_COL,B

ORL A,D_ROW_V
MOV DOT_ROW,A ;rows
MOV DOT_COL,D_COL_V ;columns

MOV A,D_ROW_V
RR A
MOV D_ROW_V,A

DJNZ D_ROW,DISPLAY_RET
MOV D_ROW,#7D
MOV D_ROW_V,#10111111B
MOV A,D_COL_V
RR A
MOV D_COL_V,A

DJNZ D_COL,DISPLAY_RET
MOV D_COL,#5D
MOV D_COL_V,#00010000B

DISPLAY_RET:

JMP DISPLAY
;###########################################################
PAINT:
MOV A,BLOC_X ;WRITE TO TABEL
ADD A,#20H
MOV R0,A
MOV A,@R0
ANL A,BLOC_Y
MOV @R0,A
RET

;###########################################################
CLRSCR:
;MOV 21H, #0FFH
MOV 22H, #0FFH
MOV 23H, #0FFH
MOV 24H, #0FFH
;MOV 25H, #0FFH
RET
;###########################################################

PONGBALL:

MOV TH0,#76 ;High byte of 19,457 (76 * 256 = 19,456)


MOV TL0,#01 ;Low byte of 19,457 (19,456 + 1 = 19,457)
CLR SPKR
JNB GAME,R50
INC R5
CJNE R5,#30D,R5RET
CLR GAME
CALL CLRSCR
CALL PAINT
MOV R5,#0H
RETI

R50: INC R5
CJNE R5,#2D,R51
JMP BATSW1
R51: CJNE R5,#5D,R52
JMP BATSW1
R52: CJNE R5,#7D,R5RET
MOV R5,#0H
JMP BATSW1
R5RET: RETI
;**************************bat control******************************
BATSW1: JB SWL1,CSWR1
MOV A,BAT1
RR A
MOV BAT1,A
CJNE A,#01111110B,BATSW2
MOV BAT1,#11111100B
JMP PAINTBAT
CSWR1: JB SWR1,BATSW2
MOV A,BAT1
RL A
MOV BAT1,A
CJNE A,#00111111B,BATSW2
MOV BAT1,#10011111B
BATSW2:
BATSW: JB SWL2,CSWR2
MOV A,BAT2
RR A
MOV BAT2,A
CJNE A,#01111110B,PAINTBAT
MOV BAT2,#11111100B
JMP PAINTBAT
CSWR2: JB SWR2,PAINTBAT
MOV A,BAT2
RL A
MOV BAT2,A
CJNE A,#00111111B,PAINTBAT
MOV BAT2,#10011111B
PAINTBAT:
CJNE R5,#0D,BALLFORGET
JMP BALL
BALLFORGET:
CALL CLRSCR
CALL PAINT
RETI

;**************************ball control******************************
BALL:
JNB DIR_X,DECLOCX
INC BLOC_X
JMP SETXH
DECLOCX:DEC BLOC_X

SETXH: CJNE BLOC_X,#1H,SETXL


MOV BLOC_X,#3H
SETB DIR_X
SETB SPKR
MOV B,BAT1
CPL PLAY
MOV R0,BATCNTC1
JMP SETBAT

SETXL: CJNE BLOC_X,#5H,LOCY


MOV BLOC_X,#3H
CLR DIR_X
SETB SPKR
CPL PLAY
MOV B,BAT2
MOV R0,BATCNTC2

;**************************ball logic******************************

SETBAT:
MOV A,R0 ;ROTATE BAT AND BALL EQUALLY
RR A
MOV R0,A
MOV A,B
RR A
MOV B,A
CJNE A,#11001111B,SETBAT ;JMP UNTILL BAT SET

CJNE R0, #11011111B,BDR1


JMP PALYR1
BDR1: CJNE R0, #11101111B,BDR2
JMP PALYR1
BDR2: LJMP GAMEOVER

PALYR1: JB PLAY,PALYR2
JB SWL1,PLDR1
SETB DIR_Y
CLR DIR_Y2
JMP LOCY
PLDR1: JB SWR1,PLDR2
CLR DIR_Y
CLR DIR_Y2
JMP BDR1
PLDR2: SETB DIR_Y2
JMP LOCY

PALYR2: JB SWL2,PLDR3
SETB DIR_Y
CLR DIR_Y2
JMP LOCY
PLDR3: JB SWR2,PLDR4
CLR DIR_Y
CLR DIR_Y2
JMP LOCY
PLDR4: SETB DIR_Y2
JMP LOCY

LOCY:
JB DIR_Y2,PAINTIT
JNB DIR_Y,DECLOCY

CJNE BLOC_Y,#11111110B,SETYL
MOV BLOC_Y,#11111101B

CLR DIR_Y
SETB SPKR

JMP PAINTIT
SETYL: MOV A,BLOC_Y
RR A
MOV BLOC_Y,A
JMP PAINTIT

DECLOCY:

CJNE BLOC_Y,#10111111B,SETYH
MOV BLOC_Y,#11011111B

SETB DIR_Y
SETB SPKR

JMP PAINTIT
SETYH: MOV A,BLOC_Y
RL A
MOV BLOC_Y,A
JMP PAINTIT
;************************ball control cont..****************************

PAINTIT:
CALL CLRSCR
CALL PAINT
BALL_RET:
RETI
;##################################################################

GAMEOVER:
JB PLAY,PLAYER2

SETB P1LED
CLR P2LED

SETB DIR_X
JMP GAMESET
PLAYER2:
CLR P1LED
SETB P2LED
CLR DIR_X
GAMESET:
MOV BLOC_X,#03H
MOV BLOC_Y,#11110111B
SETB DIR_Y2
SETB GAME
;DISPLAY MEMORY
MOV 21H, #11100111B
MOV 22H, #0H
MOV 23H, #0H
MOV 24H, #0H
MOV 25H, #11100111B
RETI
;##################################################################
;Adarsh Basawapuram
;adarsh.emc2@gmail.com
;##################################################################

Vous aimerez peut-être aussi