Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;---------------------------------------------------;
- ; Name: Video_Game.ASM ;
- ; Use: DTI's Video Game On A PIC ;
- ;---------------------------------------------------;
- ; Copyright: (C)2012 DTI ;
- ; Dysfunctional Technologies, Inc. ;
- ; All Rights Reserved ;
- ;---------------------------------------------------;
- ; Author: Timothy S. Carlson ;
- ; Dysfunctional Technologies, Inc. ;
- ; Date: December 12, 2012 ;
- ; Version: V1.00 ;
- ;---------------------------------------------------;
- ;---------------------------------------------------;
- #DEFINE _VIDEO_GAME.ASM_ ;
- #DEFINE _MAIN_MODULE_ ;
- ;---------------------------------------------------;
- ;---------------------------------------------------;
- ; Includes ;
- ;---------------------------------------------------;
- #INCLUDE Common.INC ;
- ;---------------------------------------------------;
- ;---------------------------------------------------;
- ; Macros ;
- ;---------------------------------------------------;
- DELAY MACRO DTIME ;
- MOVLW DTIME ;
- MOVWF DTemp ;
- ;
- NOP ;
- NOP ;
- DECFSZ DTemp, F ;
- GOTO $-3 ;
- ENDM ;
- ;
- SET_SIGNAL MACRO COLOR ;
- MOVFW PORTA ;
- ANDLW VIDEO_MASK ;
- IORLW COLOR ;
- MOVWF PORTA ;
- ENDM ;
- ;---------------------------------------------------;
- ;---------------------------------------------------;
- ; Defines ;
- ;---------------------------------------------------;
- #DEFINE RBUTT_1 H'01' ;
- #DEFINE RBUTT_1_BIT 0 ; GPIO 0 - PIN 7
- #DEFINE RBUTT_2 H'02' ;
- #DEFINE RBUTT_2_BIT 1 ; GPIO 1 - PIN 6
- #DEFINE LBUTT_2 H'04' ;
- #DEFINE LBUTT_2_BIT 2 ; GPIO 2 - PIN 5
- #DEFINE LBUTT_1 H'08' ;
- #DEFINE LBUTT_1_BIT 3 ; GPIO 3 - PIN 4
- ;
- #DEFINE VIDEO_1 H'10' ; 1K ohm
- #DEFINE VIDEO_1_BIT 4 ; GPIO 5 - PIN 2
- #DEFINE VIDEO_0 H'20' ; 470 ohm
- #DEFINE VIDEO_0_BIT 5 ; GPIO 4 - PIN 3
- ;
- #DEFINE VIDEO_MASK H'CF' ;
- #DEFINE WHITE_MASK B'11011111' ;
- #DEFINE COLOR_WHITE (VIDEO_0 + VIDEO_1) ;
- #DEFINE GRAY_MASK B'10111111' ;
- #DEFINE COLOR_GRAY VIDEO_0 ;
- #DEFINE BLACK_MASK B'10011111' ;
- #DEFINE COLOR_BLACK VIDEO_1 ;
- #DEFINE COLOR_SYNC 0 ;
- #DEFINE MAX_LINES 255 ;
- ;---------------------------------------------------;
- ;---------------------------------------------------;
- USER_DATA1 UDATA H'020' ;
- ;---------------------------------------------------;
- Temp1 res 1 ; 20
- DTemp res 1 ; 21
- DL_Count res 1 ; 22
- Line_Data res 4 ; 23-26
- Bit_Count res 1 ; 27
- Ball_X res 1 ; 28
- Ball_Y res 1 ; 29
- Ball_Dir_X res 1 ; 2A
- Ball_Dir_Y res 1 ; 2B
- Paddle_1_Y res 1 ; 2C
- Paddle_2_Y res 1 ; 2D
- Score_1 res 1 ; 2E
- Score_2 res 1 ; 2F
- ;---------------------------------------------------;
- USER_DATA2 UDATA_SHR H'070' ;
- ;---------------------------------------------------;
- Buffer res 16 ; 70-7F
- ;---------------------------------------------------;
- ;---------------------------------------------------;
- RESET_VECT CODE H'000' ;
- ;---------------------------------------------------;
- CALL _Initialize_System ;
- NOP ;
- NOP ;
- GOTO _MAIN ;
- ;---------------------------------------------------;
- ;---------------------------------------------------;
- USER_CODE CODE ;
- ;---------------------------------------------------;
- _MAIN: ;
- ;---------------------------------------------------;
- GOTO _Next_Frame ;
- ;---------------------------------------------------;
- ;---------------------------------------------------;
- _Next_Frame: ;
- ;---------------------------------------------------;
- CALL _Update_Ball ;
- CALL _Update_Paddles ;
- CALL _Blank_Half_Line ;
- CALL _Update_Score_1 ;
- CALL _Update_Score_2 ;
- CALL _Inverted_Half_Line ;
- CALL _Inverted_Half_Line ;
- CALL _Inverted_Half_Line ;
- NOP ;
- NOP ;
- CALL _Inverted_Sync_2us ;
- DELAY 41 ;
- BANKSEL TRISA ;
- BCF TRISA, 2 ;
- BANKSEL PORTA ;
- BCF PORTA, 2 ;
- NOP ;
- BSF PORTA, 2 ;
- BANKSEL TRISA ;
- BSF TRISA, 2 ;
- BANKSEL MEMORY ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- SET_SIGNAL COLOR_BLACK ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- CALL _Blank_Half_Line ;
- CALL _Blank_Half_Line ;
- CALL _Blank_Half_Line ;
- CALL _Blank_Half_Line ;
- CALL _Blank_Half_Line ;
- ;
- CALL _Blank_Line ;
- CALL _Blank_Line ;
- CALL _Blank_Line ;
- CALL _Blank_Line ;
- CALL _Blank_Line ;
- CALL _Blank_Line ;
- CALL _Blank_Line ;
- CALL _Blank_Line ;
- CALL _Blank_Line ;
- CALL _Blank_Line ;
- CALL _Blank_Line ;
- CALL _Blank_Line ;
- CALL _Blank_Line ;
- CALL _Blank_Line ;
- CALL _Blank_Line ;
- CALL _Blank_Line ;
- CALL _Blank_Line ;
- CALL _Blank_Line ;
- CALL _Blank_Line ;
- CALL _Blank_Line ;
- CALL _Blank_Line ;
- CALL _Data_Lines ;
- CALL _Blank_Line ;
- CALL _Blank_Line ;
- CALL _Blank_Line ;
- CALL _Blank_Line ;
- CALL _Blank_Line ;
- CALL _Blank_Line ;
- CALL _Blank_Line ;
- CALL _Blank_Line ;
- ;
- GOTO _Next_Frame ;
- ;---------------------------------------------------;
- ;
- ;---------------------------------------------------;
- _Data_Lines: ;
- ;---------------------------------------------------;
- NOP ;
- CLRF DL_Count ;
- ;
- _DL_Next_Line: ;
- CALL _Sync_4us ;
- ;
- MOVLW 32 ;
- MOVWF Bit_Count ;
- ;
- MOVFW DL_Count ;
- ANDLW H'FC' ;
- ADDLW H'10' ;
- MOVWF FSR1L ;
- MOVLW H'20' ;
- MOVWF FSR1H ;
- MOVIW 0[INDF1] ;
- MOVWF Line_Data + 0 ;
- MOVIW 1[INDF1] ;
- MOVWF Line_Data + 1 ;
- MOVIW 2[INDF1] ;
- MOVWF Line_Data + 2 ;
- MOVIW 3[INDF1] ;
- MOVWF Line_Data + 3 ;
- DELAY 7 ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- ; NOP ;
- ; NOP ;
- ;
- _DL_Next_Bit: ;
- BTFSC Line_Data + 0, MSB ;
- BSF PORTA, VIDEO_0_BIT ;
- BTFSS Line_Data + 0, MSB ;
- BCF PORTA, VIDEO_0_BIT ;
- RLF Line_Data + 3, F ;
- RLF Line_Data + 2, F ;
- RLF Line_Data + 1, F ;
- RLF Line_Data + 0, F ;
- NOP ;
- ; NOP ;
- DECFSZ Bit_Count, F ;
- GOTO _DL_Next_Bit ;
- SET_SIGNAL COLOR_BLACK ;
- DELAY 4 ;
- NOP ;
- NOP ;
- ;
- INCF DL_Count, F ;
- MOVLW H'E0' ;
- XORWF DL_Count, W ;
- BTFSS STATUS, Z ;
- GOTO _DL_Next_Line ;
- ;
- RETURN ;
- ;---------------------------------------------------;
- ;---------------------------------------------------;
- _Delay_30us: ;
- ;---------------------------------------------------;
- MOVLW 32 ;
- MOVWF DTemp ;
- ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- DECFSZ DTemp, F ;
- GOTO $-5 ;
- ;
- NOP ;
- ; NOP ;
- ; NOP ;
- ; NOP ;
- ; NOP ;
- ;
- RETURN ;
- ;---------------------------------------------------;
- ;---------------------------------------------------;
- _Delay_60us: ;
- ;---------------------------------------------------;
- MOVLW 66 ;
- MOVWF DTemp ;
- ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- DECFSZ DTemp, F ;
- GOTO $-5 ;
- ;
- NOP ;
- ; NOP ;
- RETURN ;
- ;---------------------------------------------------;
- ;
- ;---------------------------------------------------;
- _Sync_2us: ;
- ;---------------------------------------------------;
- SET_SIGNAL COLOR_SYNC ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- SET_SIGNAL COLOR_BLACK ;
- RETURN ;
- ;---------------------------------------------------;
- ;---------------------------------------------------;
- _Inverted_Sync_2us: ;
- ;---------------------------------------------------;
- SET_SIGNAL COLOR_BLACK ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- SET_SIGNAL COLOR_SYNC ;
- RETURN ;
- ;---------------------------------------------------;
- ;---------------------------------------------------;
- _Sync_4us: ;
- ;---------------------------------------------------;
- SET_SIGNAL COLOR_SYNC ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- SET_SIGNAL COLOR_BLACK ;
- RETURN ;
- ;---------------------------------------------------;
- ;---------------------------------------------------;
- _Blank_Line: ;
- ;---------------------------------------------------;
- CALL _Sync_4us ;
- CALL _Delay_60us ;
- RETURN ;
- ;---------------------------------------------------;
- ;---------------------------------------------------;
- _Inverted_Half_Line: ;
- ;---------------------------------------------------;
- CALL _Inverted_Sync_2us ;
- CALL _Delay_30us ;
- RETURN ;
- ;---------------------------------------------------;
- ;---------------------------------------------------;
- _Blank_Half_Line: ;
- ;---------------------------------------------------;
- CALL _Sync_2us ;
- CALL _Delay_30us ;
- RETURN ;
- ;---------------------------------------------------;
- ;---------------------------------------------------;
- _Update_Score_1: ;
- ;---------------------------------------------------;
- CALL _Sync_2us ;
- ;
- _US1_Clear_Score: ;
- MOVLW H'10' ;
- MOVWF FSR1L ;
- MOVLW H'20' ;
- MOVWF FSR1H ;
- ;
- CLRW ;
- MOVWI 0[INDF1] ;
- MOVWI 4[INDF1] ;
- MOVWI 8[INDF1] ;
- MOVWI 12[INDF1] ;
- MOVWI 16[INDF1] ;
- ;
- _US1_Draw_Score: ;
- SWAPF Score_1, W ;
- ANDLW H'0F' ;
- MOVWF Temp1 ;
- ADDWF Temp1, F ;
- ADDWF Temp1, F ;
- ADDWF Temp1, F ;
- ADDWF Temp1, F ;
- MOVLP HIGH CHARACTER_TABLE_L1 ;
- MOVFW Temp1 ;
- ADDLW LOW CHARACTER_TABLE_L1 ;
- BTFSC STATUS, C ;
- INCF PCLATH, F ;
- CALLW ;
- MOVWI 0[INDF1] ;
- MOVLP HIGH CHARACTER_TABLE_L1 ;
- MOVFW Temp1 ;
- ADDLW 1 ;
- ADDLW LOW CHARACTER_TABLE_L1 ;
- BTFSC STATUS, C ;
- INCF PCLATH, F ;
- CALLW ;
- MOVWI 4[INDF1] ;
- MOVLP HIGH CHARACTER_TABLE_L1 ;
- MOVFW Temp1 ;
- ADDLW 2 ;
- ADDLW LOW CHARACTER_TABLE_L1 ;
- BTFSC STATUS, C ;
- INCF PCLATH, F ;
- CALLW ;
- MOVWI 8[INDF1] ;
- MOVLP HIGH CHARACTER_TABLE_L1 ;
- MOVFW Temp1 ;
- ADDLW 3 ;
- ADDLW LOW CHARACTER_TABLE_L1 ;
- BTFSC STATUS, C ;
- INCF PCLATH, F ;
- CALLW ;
- MOVWI 12[INDF1] ;
- MOVLP HIGH CHARACTER_TABLE_L1 ;
- MOVFW Temp1 ;
- ADDLW 4 ;
- ADDLW LOW CHARACTER_TABLE_L1 ;
- BTFSC STATUS, C ;
- INCF PCLATH, F ;
- CALLW ;
- MOVWI 16[INDF1] ;
- ;
- MOVFW Score_1 ;
- ANDLW H'0F' ;
- MOVWF Temp1 ;
- ADDWF Temp1, F ;
- ADDWF Temp1, F ;
- ADDWF Temp1, F ;
- ADDWF Temp1, F ;
- MOVLP HIGH CHARACTER_TABLE_L2 ;
- MOVFW Temp1 ;
- ADDLW LOW CHARACTER_TABLE_L2 ;
- BTFSC STATUS, C ;
- INCF PCLATH, F ;
- CALLW ;
- MOVWF DTemp ;
- MOVIW 0[INDF1] ;
- IORWF DTemp, W ;
- MOVWI 0[INDF1] ;
- MOVLP HIGH CHARACTER_TABLE_L2 ;
- MOVFW Temp1 ;
- ADDLW 1 ;
- ADDLW LOW CHARACTER_TABLE_L2 ;
- BTFSC STATUS, C ;
- INCF PCLATH, F ;
- CALLW ;
- MOVWF DTemp ;
- MOVIW 4[INDF1] ;
- IORWF DTemp, W ;
- MOVWI 4[INDF1] ;
- MOVLP HIGH CHARACTER_TABLE_L2 ;
- MOVFW Temp1 ;
- ADDLW 2 ;
- ADDLW LOW CHARACTER_TABLE_L2 ;
- BTFSC STATUS, C ;
- INCF PCLATH, F ;
- CALLW ;
- MOVWF DTemp ;
- MOVIW 8[INDF1] ;
- IORWF DTemp, W ;
- MOVWI 8[INDF1] ;
- MOVLP HIGH CHARACTER_TABLE_L2 ;
- MOVFW Temp1 ;
- ADDLW 3 ;
- ADDLW LOW CHARACTER_TABLE_L2 ;
- BTFSC STATUS, C ;
- INCF PCLATH, F ;
- CALLW ;
- MOVWF DTemp ;
- MOVIW 12[INDF1] ;
- IORWF DTemp, W ;
- MOVWI 12[INDF1] ;
- MOVLP HIGH CHARACTER_TABLE_L2 ;
- MOVFW Temp1 ;
- ADDLW 4 ;
- ADDLW LOW CHARACTER_TABLE_L2 ;
- BTFSC STATUS, C ;
- INCF PCLATH, F ;
- CALLW ;
- MOVWF DTemp ;
- MOVIW 16[INDF1] ;
- IORWF DTemp, W ;
- MOVWI 16[INDF1] ;
- ;
- DELAY 16 ;
- NOP ;
- NOP ;
- ; NOP ;
- ; NOP ;
- ; NOP ;
- ; NOP ;
- RETURN ;
- ;---------------------------------------------------;
- ;---------------------------------------------------;
- _Update_Score_2: ;
- ;---------------------------------------------------;
- CALL _Sync_2us ;
- ;
- _US2_Clear_Score: ;
- MOVLW H'13' ;
- MOVWF FSR1L ;
- MOVLW H'20' ;
- MOVWF FSR1H ;
- ;
- CLRW ;
- MOVWI 0[INDF1] ;
- MOVWI 4[INDF1] ;
- MOVWI 8[INDF1] ;
- MOVWI 12[INDF1] ;
- MOVWI 16[INDF1] ;
- ;
- _US2_Draw_Score: ;
- SWAPF Score_2, W ;
- ANDLW H'0F' ;
- MOVWF Temp1 ;
- ADDWF Temp1, F ;
- ADDWF Temp1, F ;
- ADDWF Temp1, F ;
- ADDWF Temp1, F ;
- MOVLP HIGH CHARACTER_TABLE_R1 ;
- MOVFW Temp1 ;
- ADDLW LOW CHARACTER_TABLE_R1 ;
- BTFSC STATUS, C ;
- INCF PCLATH, F ;
- CALLW ;
- MOVWI 0[INDF1] ;
- MOVLP HIGH CHARACTER_TABLE_R1 ;
- MOVFW Temp1 ;
- ADDLW 1 ;
- ADDLW LOW CHARACTER_TABLE_R1 ;
- BTFSC STATUS, C ;
- INCF PCLATH, F ;
- CALLW ;
- MOVWI 4[INDF1] ;
- MOVLP HIGH CHARACTER_TABLE_R1 ;
- MOVFW Temp1 ;
- ADDLW 2 ;
- ADDLW LOW CHARACTER_TABLE_R1 ;
- BTFSC STATUS, C ;
- INCF PCLATH, F ;
- CALLW ;
- MOVWI 8[INDF1] ;
- MOVLP HIGH CHARACTER_TABLE_R1 ;
- MOVFW Temp1 ;
- ADDLW 3 ;
- ADDLW LOW CHARACTER_TABLE_R1 ;
- BTFSC STATUS, C ;
- INCF PCLATH, F ;
- CALLW ;
- MOVWI 12[INDF1] ;
- MOVLP HIGH CHARACTER_TABLE_R1 ;
- MOVFW Temp1 ;
- ADDLW 4 ;
- ADDLW LOW CHARACTER_TABLE_R1 ;
- BTFSC STATUS, C ;
- INCF PCLATH, F ;
- CALLW ;
- MOVWI 16[INDF1] ;
- ;
- MOVFW Score_2 ;
- ANDLW H'0F' ;
- MOVWF Temp1 ;
- ADDWF Temp1, F ;
- ADDWF Temp1, F ;
- ADDWF Temp1, F ;
- ADDWF Temp1, F ;
- MOVLP HIGH CHARACTER_TABLE_R2 ;
- MOVFW Temp1 ;
- ADDLW LOW CHARACTER_TABLE_R2 ;
- BTFSC STATUS, C ;
- INCF PCLATH, F ;
- CALLW ;
- MOVWF DTemp ;
- MOVIW 0[INDF1] ;
- IORWF DTemp, W ;
- MOVWI 0[INDF1] ;
- MOVLP HIGH CHARACTER_TABLE_R2 ;
- MOVFW Temp1 ;
- ADDLW 1 ;
- ADDLW LOW CHARACTER_TABLE_R2 ;
- BTFSC STATUS, C ;
- INCF PCLATH, F ;
- CALLW ;
- MOVWF DTemp ;
- MOVIW 4[INDF1] ;
- IORWF DTemp, W ;
- MOVWI 4[INDF1] ;
- MOVLP HIGH CHARACTER_TABLE_R2 ;
- MOVFW Temp1 ;
- ADDLW 2 ;
- ADDLW LOW CHARACTER_TABLE_R2 ;
- BTFSC STATUS, C ;
- INCF PCLATH, F ;
- CALLW ;
- MOVWF DTemp ;
- MOVIW 8[INDF1] ;
- IORWF DTemp, W ;
- MOVWI 8[INDF1] ;
- MOVLP HIGH CHARACTER_TABLE_R2 ;
- MOVFW Temp1 ;
- ADDLW 3 ;
- ADDLW LOW CHARACTER_TABLE_R2 ;
- BTFSC STATUS, C ;
- INCF PCLATH, F ;
- CALLW ;
- MOVWF DTemp ;
- MOVIW 12[INDF1] ;
- IORWF DTemp, W ;
- MOVWI 12[INDF1] ;
- MOVLP HIGH CHARACTER_TABLE_R2 ;
- MOVFW Temp1 ;
- ADDLW 4 ;
- ADDLW LOW CHARACTER_TABLE_R2 ;
- BTFSC STATUS, C ;
- INCF PCLATH, F ;
- CALLW ;
- MOVWF DTemp ;
- MOVIW 16[INDF1] ;
- IORWF DTemp, W ;
- MOVWI 16[INDF1] ;
- ;
- DELAY 13 ;
- ; NOP ;
- ; NOP ;
- ; NOP ;
- ; NOP ;
- ; NOP ;
- RETURN ;
- ;---------------------------------------------------;
- ;---------------------------------------------------;
- _Update_Ball: ;
- ;---------------------------------------------------;
- CALL _Sync_2us ;
- _UB_Check_Stationary: ;
- ; BTFSC Ball_X, MSB ;
- ; GOTO _UB_Clear_Ball ;
- ; BSF Ball_X, MSB ;
- ; DELAY 22 ;
- ; GOTO _UB_Draw_Ball ;
- ;
- ; CLRW ;
- ; XORWF Ball_Dir_X, W ;
- ; BTFSS STATUS, Z ;
- ; GOTO _UB_Clear_Ball ;
- ; CLRW ;
- ; XORWF Ball_Dir_Y, W ;
- ; BTFSS STATUS, Z ;
- ; GOTO _UB_Clear_Ball ;
- ; DELAY 23 ;
- ; GOTO _UB_Draw_Ball ;
- ;
- _UB_Clear_Ball: ;
- ; BCF Ball_X, MSB ;
- MOVFW Ball_Y ;
- ADDWF Ball_Y, W ;
- ADDWF Ball_Y, W ;
- ADDWF Ball_Y, W ;
- ADDLW H'2C' ;
- MOVWF FSR1L ;
- RRF Ball_X, W ;
- MOVWF Temp1 ;
- RRF Temp1, F ;
- RRF Temp1, W ;
- ANDLW H'1F' ;
- ADDWF FSR1L, F ;
- MOVLW H'20' ;
- MOVWF FSR1H ;
- CLRF INDF1 ;
- ; MOVFW Ball_X ;
- ; ANDLW H'07' ;
- ; MOVWF Temp1 ;
- ; MOVLW H'00' ;
- ; XORWF Temp1, W ;
- ; BTFSC STATUS, Z ;
- ; BCF INDF1, 7 ;
- ; MOVLW H'01' ;
- ; XORWF Temp1, W ;
- ; BTFSC STATUS, Z ;
- ; BCF INDF1, 6 ;
- ; MOVLW H'02' ;
- ; XORWF Temp1, W ;
- ; BTFSC STATUS, Z ;
- ; BCF INDF1, 5 ;
- ; MOVLW H'03' ;
- ; XORWF Temp1, W ;
- ; BTFSC STATUS, Z ;
- ; BCF INDF1, 4 ;
- ; MOVLW H'04' ;
- ; XORWF Temp1, W ;
- ; BTFSC STATUS, Z ;
- ; BCF INDF1, 3 ;
- ; MOVLW H'05' ;
- ; XORWF Temp1, W ;
- ; BTFSC STATUS, Z ;
- ; BCF INDF1, 2 ;
- ; MOVLW H'06' ;
- ; XORWF Temp1, W ;
- ; BTFSC STATUS, Z ;
- ; BCF INDF1, 1 ;
- ; MOVLW H'07' ;
- ; XORWF Temp1, W ;
- ; BTFSC STATUS, Z ;
- ; BCF INDF1, 0 ;
- ;
- _UB_Update_Ball_X: ;
- ; MOVLW 0 ;
- ; XORWF Ball_Dir_X, W ;
- ; BTFSC STATUS, Z ;
- ; GOTO _UB_Update_Ball_Y ;
- ;
- MOVFW Ball_Dir_X ; Update Ball X Position
- ADDWF Ball_X, F ;
- ;
- _UB_Update_Ball_X_Min: ;
- MOVLW 0 ;
- XORWF Ball_X, W ;
- BTFSS STATUS, Z ;
- GOTO _UB_Update_Ball_X_Max ;
- MOVLW 1 ;
- MOVWF Ball_Dir_X ;
- ;
- INCF Score_2, F ;
- MOVFW Score_2 ;
- ANDLW H'0F' ;
- XORLW H'0A' ;
- BTFSS STATUS, Z ;
- GOTO _UB_Update_Ball_X_Max ;
- MOVFW Score_2 ;
- ANDLW H'F0' ;
- ADDLW H'10' ;
- MOVWF Score_2 ;
- MOVLW H'A0' ;
- XORWF Score_2, W ;
- BTFSC STATUS, Z ;
- CLRF Score_2 ;
- ;
- _UB_Update_Ball_X_Max: ;
- MOVLW 31 ;
- XORWF Ball_X, W ;
- BTFSS STATUS, Z ;
- GOTO _UB_Update_Ball_Y ;
- MOVLW -1 ;
- MOVWF Ball_Dir_X ;
- ;
- INCF Score_1, F ;
- MOVFW Score_1 ;
- ANDLW H'0F' ;
- XORLW H'0A' ;
- BTFSS STATUS, Z ;
- GOTO _UB_Update_Ball_Y ;
- MOVFW Score_1 ;
- ANDLW H'F0' ;
- ADDLW H'10' ;
- MOVWF Score_1 ;
- MOVLW H'A0' ;
- XORWF Score_1, W ;
- BTFSC STATUS, Z ;
- CLRF Score_1 ;
- ;
- _UB_Update_Ball_Y: ;
- ; MOVLW 0 ;
- ; XORWF Ball_Dir_Y, W ;
- ; BTFSC STATUS, Z ;
- ; GOTO _UB_Paddle_Detect ;
- ;
- MOVFW Ball_Dir_Y ; Update Ball Y Position
- ADDWF Ball_Y, F ;
- ;
- _UB_Update_Ball_Y_Min: ;
- MOVLW 0 ;
- XORWF Ball_Y, W ;
- BTFSS STATUS, Z ;
- GOTO _UB_Update_Ball_Y_Max ;
- MOVLW 1 ;
- MOVWF Ball_Dir_Y ;
- ;
- _UB_Update_Ball_Y_Max: ;
- MOVLW 47 ;
- XORWF Ball_Y, W ;
- BTFSS STATUS, Z ;
- GOTO _UB_Paddle_Detect ;
- MOVLW -1 ;
- MOVWF Ball_Dir_Y ;
- ;
- _UB_Paddle_Detect: ;
- _UB_Paddle_Detect_Left: ;
- MOVLW -1 ;
- XORWF Ball_Dir_X, W ;
- BTFSS STATUS, Z ;
- GOTO _UB_Paddle_Detect_Right ;
- ;
- MOVLW 2 ;
- XORWF Ball_X, W ;
- BTFSS STATUS, Z ;
- GOTO _UB_Draw_Ball ;
- ;
- MOVFW Paddle_1_Y ;
- SUBWF Ball_Y, W ;
- BTFSS STATUS, C ;
- GOTO _UB_Draw_Ball ;
- MOVFW Paddle_1_Y ;
- ADDLW 8 ;
- SUBWF Ball_Y, W ;
- BTFSC STATUS, C ;
- GOTO _UB_Draw_Ball ;
- MOVLW 1 ;
- MOVWF Ball_Dir_X ;
- GOTO _UB_Draw_Ball ;
- ;
- _UB_Paddle_Detect_Right: ;
- MOVLW 1 ;
- XORWF Ball_Dir_X, W ;
- BTFSS STATUS, Z ;
- GOTO _UB_Draw_Ball ;
- ;
- MOVLW 29 ;
- XORWF Ball_X, W ;
- BTFSS STATUS, Z ;
- GOTO _UB_Draw_Ball ;
- ;
- MOVFW Paddle_2_Y ;
- SUBWF Ball_Y, W ;
- BTFSS STATUS, C ;
- GOTO _UB_Draw_Ball ;
- MOVFW Paddle_2_Y ;
- ADDLW 8 ;
- SUBWF Ball_Y, W ;
- BTFSC STATUS, C ;
- GOTO _UB_Draw_Ball ;
- MOVLW -1 ;
- MOVWF Ball_Dir_X ;
- ;
- _UB_Draw_Ball: ;
- MOVFW Ball_Y ;
- ADDWF Ball_Y, W ;
- ADDWF Ball_Y, W ;
- ADDWF Ball_Y, W ;
- ADDLW H'2C' ;
- MOVWF FSR1L ;
- RRF Ball_X, W ;
- MOVWF Temp1 ;
- RRF Temp1, F ;
- RRF Temp1, W ;
- ANDLW H'1F' ;
- ADDWF FSR1L, F ;
- MOVLW H'20' ;
- MOVWF FSR1H ;
- MOVFW Ball_X ;
- ANDLW H'07' ;
- MOVWF Temp1 ;
- MOVLW H'00' ;
- XORWF Temp1, W ;
- BTFSC STATUS, Z ;
- BSF INDF1, 7 ;
- MOVLW H'01' ;
- XORWF Temp1, W ;
- BTFSC STATUS, Z ;
- BSF INDF1, 6 ;
- MOVLW H'02' ;
- XORWF Temp1, W ;
- BTFSC STATUS, Z ;
- BSF INDF1, 5 ;
- MOVLW H'03' ;
- XORWF Temp1, W ;
- BTFSC STATUS, Z ;
- BSF INDF1, 4 ;
- MOVLW H'04' ;
- XORWF Temp1, W ;
- BTFSC STATUS, Z ;
- BSF INDF1, 3 ;
- MOVLW H'05' ;
- XORWF Temp1, W ;
- BTFSC STATUS, Z ;
- BSF INDF1, 2 ;
- MOVLW H'06' ;
- XORWF Temp1, W ;
- BTFSC STATUS, Z ;
- BSF INDF1, 1 ;
- MOVLW H'07' ;
- XORWF Temp1, W ;
- BTFSC STATUS, Z ;
- BSF INDF1, 0 ;
- ;
- DELAY 18 ;
- NOP ;
- NOP ;
- NOP ;
- NOP ;
- RETURN ;
- ;---------------------------------------------------;
- ;---------------------------------------------------;
- _Update_Paddles: ;
- ;---------------------------------------------------;
- CALL _Sync_2us ;
- ;
- _UP_Clear_Paddles: ;
- MOVFW Paddle_1_Y ;
- ADDWF Paddle_1_Y, W ;
- ADDWF Paddle_1_Y, W ;
- ADDWF Paddle_1_Y, W ;
- ADDLW H'2C' ;
- MOVWF FSR1L ;
- MOVLW H'20' ;
- MOVWF FSR1H ;
- CLRW ;
- MOVWI 0[INDF1] ;
- MOVWI 4[INDF1] ;
- MOVWI 8[INDF1] ;
- MOVWI 12[INDF1] ;
- MOVWI 16[INDF1] ;
- MOVWI 20[INDF1] ;
- MOVWI 24[INDF1] ;
- MOVWI 28[INDF1] ;
- ;
- MOVFW Paddle_2_Y ;
- ADDWF Paddle_2_Y, W ;
- ADDWF Paddle_2_Y, W ;
- ADDWF Paddle_2_Y, W ;
- ADDLW H'2F' ;
- MOVWF FSR1L ;
- MOVLW H'20' ;
- CLRW ;
- MOVWI 0[INDF1] ;
- MOVWI 4[INDF1] ;
- MOVWI 8[INDF1] ;
- MOVWI 12[INDF1] ;
- MOVWI 16[INDF1] ;
- MOVWI 20[INDF1] ;
- MOVWI 24[INDF1] ;
- MOVWI 28[INDF1] ;
- ;
- ;_UP_P1_Fire: ;
- ; CLRW ;
- ; XORWF Ball_Dir_X, W ;
- ; BTFSS STATUS, Z ;
- ; GOTO _UP_P1_Up ;
- ; CLRW ;
- ; XORWF Ball_Dir_Y, W ;
- ; BTFSS STATUS, Z ;
- ; GOTO _UP_P1_Up ;
- ; BTFSS PORTA, LBUTT_1_BIT ;
- ; GOTO _UP_P1_Up ;
- ; BTFSS PORTA, LBUTT_2_BIT ;
- ; GOTO _UP_P1_Up ;
- ; BANKSEL TRISA ;
- ; BCF TRISA, LBUTT_2_BIT ; Set as OUTPUT
- ; BANKSEL PORTA ;
- ; BSF PORTA, LBUTT_2_BIT ; Set HIGH
- ; BTFSS PORTA, LBUTT_1_BIT ;
- ; GOTO _UP_P1_Up ;
- ; BCF PORTA, LBUTT_2_BIT ; Set LOW
- ; BTFSC PORTA, LBUTT_1_BIT ;
- ; GOTO _UP_P1_Up ;
- ; MOVLW 1 ;
- ; MOVWF Ball_Dir_X ;
- ;; MOVWF Ball_Dir_Y ;
- ; ;
- _UP_P1_Up: ;
- ; BANKSEL PORTA ;
- ; BSF PORTA, LBUTT_1_BIT ;
- ; BSF PORTA, LBUTT_2_BIT ;
- ; BANKSEL TRISA ;
- ; BSF TRISA, LBUTT_1_BIT ;
- ; BSF TRISA, LBUTT_2_BIT ;
- ; BANKSEL MEMORY ;
- CLRW ;
- XORWF Paddle_1_Y, W ;
- BTFSC STATUS, Z ;
- GOTO _UP_P1_Down ;
- BTFSS PORTA, LBUTT_1_BIT ;
- DECF Paddle_1_Y, F ;
- _UP_P1_Down: ;
- MOVLW 40 ;
- XORWF Paddle_1_Y, W ;
- BTFSC STATUS, Z ;
- GOTO _UP_P2_Up ;
- BTFSS PORTA, LBUTT_2_BIT ;
- INCF Paddle_1_Y, F ;
- _UP_P2_Up: ;
- MOVLW 0 ;
- XORWF Paddle_2_Y, W ;
- BTFSC STATUS, Z ;
- GOTO _UP_P2_Down ;
- BTFSS PORTA, RBUTT_1_BIT ;
- DECF Paddle_2_Y, F ;
- _UP_P2_Down: ;
- MOVLW 40 ;
- XORWF Paddle_2_Y, W ;
- BTFSC STATUS, Z ;
- GOTO _UP_Draw_Paddles ;
- BTFSS PORTA, RBUTT_2_BIT ;
- INCF Paddle_2_Y, F ;
- ;
- _UP_Draw_Paddles: ;
- MOVFW Paddle_1_Y ;
- ADDWF Paddle_1_Y, W ;
- ADDWF Paddle_1_Y, W ;
- ADDWF Paddle_1_Y, W ;
- ADDLW H'2C' ;
- MOVWF FSR1L ;
- MOVLW H'20' ;
- MOVWF FSR1H ;
- MOVLW H'40' ;
- MOVWI 0[INDF1] ;
- MOVWI 4[INDF1] ;
- MOVWI 8[INDF1] ;
- MOVWI 12[INDF1] ;
- MOVWI 16[INDF1] ;
- MOVWI 20[INDF1] ;
- MOVWI 24[INDF1] ;
- MOVWI 28[INDF1] ;
- ;
- MOVFW Paddle_2_Y ;
- ADDWF Paddle_2_Y, W ;
- ADDWF Paddle_2_Y, W ;
- ADDWF Paddle_2_Y, W ;
- ADDLW H'2F' ;
- MOVWF FSR1L ;
- MOVLW H'20' ;
- MOVWF FSR1H ;
- MOVLW H'02' ;
- MOVWI 0[INDF1] ;
- MOVWI 4[INDF1] ;
- MOVWI 8[INDF1] ;
- MOVWI 12[INDF1] ;
- MOVWI 16[INDF1] ;
- MOVWI 20[INDF1] ;
- MOVWI 24[INDF1] ;
- MOVWI 28[INDF1] ;
- ;
- DELAY 27 ;
- ; NOP ;
- ; NOP ;
- ; NOP ;
- ; NOP ;
- ; NOP ;
- RETURN ;
- ;---------------------------------------------------;
- ;---------------------------------------------------;
- _Initialize_System: ;
- ;---;-----------------------------------------------;
- ; Initialize Hardware ;
- ;-----------------------------------------------;
- BANKSEL OSCCON ;
- MOVLW B'11110000' ; 32Mhz
- MOVWF OSCCON ;
- ;
- BANKSEL OSCSTAT ; Wait for
- IS1:MOVFW OSCSTAT ; high speed
- ANDLW H'79' ; oscillator
- XORLW H'59' ; to be
- BTFSS STATUS, Z ; stable and
- GOTO IS1 ; locked
- ;
- BANKSEL ANSELA ;
- CLRF ANSELA ; ALL I/O as digital
- ;
- BANKSEL LATA ;
- CLRF LATA ;
- ;
- BANKSEL TRISA ;
- CLRF TRISA ;
- BCF TRISA, VIDEO_0_BIT ; Set as OUTPUT
- BCF TRISA, VIDEO_1_BIT ; Set As OUTPUT
- BSF TRISA, LBUTT_1_BIT ; Set as INPUT
- BSF TRISA, LBUTT_2_BIT ; Set as INPUT
- BSF TRISA, RBUTT_1_BIT ; Set as INPUT
- BSF TRISA, RBUTT_2_BIT ; Set as INPUT
- ;
- BANKSEL PORTA ;
- CLRF PORTA ;
- BCF PORTA, VIDEO_0_BIT ; Set LOW
- BCF PORTA, VIDEO_1_BIT ; Set LOW
- BSF PORTA, LBUTT_1_BIT ; Set HIGH
- BSF PORTA, LBUTT_2_BIT ; Set HIGH
- BSF PORTA, RBUTT_1_BIT ; Set HIGH
- BSF PORTA, RBUTT_2_BIT ; Set HIGH
- ;
- BANKSEL INTCON ;
- CLRF INTCON ;
- ;
- BANKSEL OPTION_REG ;
- CLRF OPTION_REG ;
- ;
- ;-----------------------------------------------;
- ; Initialize Video Buffer ;
- ; Copy image from EEPROM into buffer memory ;
- ;-----------------------------------------------;
- BANKSEL MEMORY ;
- MOVLW H'10' ;
- MOVWF FSR1L ;
- MOVLW H'20' ;
- MOVWF FSR1H ;
- MOVLW H'E0' ;
- MOVWF Temp1 ; 224 bytes
- BANKSEL EEADR ;
- CLRF EEADR ;
- _IS_IVB: ;
- BANKSEL EECON1 ;
- BSF EECON1, RD ;
- MOVFW EEDAT ;
- INCF EEADR, F ;
- BANKSEL MEMORY ;
- MOVWF INDF1 ;
- INCF FSR1L, F ;
- DECFSZ Temp1, F ;
- GOTO _IS_IVB ;
- ;
- ;-----------------------------------------------;
- ; Initialize Memory ;
- ;-----------------------------------------------;
- BANKSEL MEMORY ;
- MOVLW 0 ;
- MOVWF Score_1 ;
- MOVLW 0 ;
- MOVWF Score_2 ;
- MOVLW 20 ;
- MOVWF Paddle_1_Y ;
- MOVLW 20 ;
- MOVWF Paddle_2_Y ;
- MOVLW 2 ;
- MOVWF Ball_X ;
- MOVLW 23 ;
- MOVWF Ball_Y ;
- MOVLW 1 ;
- MOVWF Ball_Dir_X ;
- MOVLW 1 ;
- MOVWF Ball_Dir_Y ;
- ;
- ;-----------------------------------------------;
- ; Initialize Other Subsystems ;
- ;-----------------------------------------------;
- ;
- RETURN ;
- ;---------------------------------------------------;
- ;---------------------------------------------------;
- ; Numeric Characters (0-9) Scan Line Data ;
- ;---------------------------------------------------;
- ;CHARACTER_TABLE_LEFT CODE H'600' ;
- ;---------------------------------------------------;
- CHARACTER_TABLE_L1: ;
- ;---------------------------------------------------;
- DT B'01000000', B'10100000', B'10100000', B'10100000', B'01000000'
- DT B'01000000', B'11000000', B'01000000', B'01000000', B'11100000'
- DT B'11000000', B'00100000', B'01000000', B'10000000', B'11100000'
- DT B'11000000', B'00100000', B'01000000', B'00100000', B'11000000'
- DT B'10100000', B'10100000', B'11100000', B'00100000', B'00100000'
- DT B'11100000', B'10000000', B'11000000', B'00100000', B'11000000'
- DT B'01100000', B'10000000', B'11000000', B'10100000', B'01000000'
- DT B'11100000', B'00100000', B'01000000', B'10000000', B'10000000'
- DT B'01000000', B'10100000', B'01000000', B'10100000', B'01000000'
- DT B'01000000', B'10100000', B'01100000', B'00100000', B'11000000'
- ;---------------------------------------------------;
- CHARACTER_TABLE_L2: ;
- ;---------------------------------------------------;
- DT B'00000100', B'00001010', B'00001010', B'00001010', B'00000100'
- DT B'00000100', B'00001100', B'00000100', B'00000100', B'00001110'
- DT B'00001100', B'00000010', B'00000100', B'00001000', B'00001110'
- DT B'00001100', B'00000010', B'00000100', B'00000010', B'00001100'
- DT B'00001010', B'00001010', B'00001110', B'00000010', B'00000010'
- DT B'00001110', B'00001000', B'00001100', B'00000010', B'00001100'
- DT B'00000110', B'00001000', B'00001100', B'00001010', B'00000100'
- DT B'00001110', B'00000010', B'00000100', B'00001000', B'00001000'
- DT B'00000100', B'00001010', B'00000100', B'00001010', B'00000100'
- DT B'00000100', B'00001010', B'00000110', B'00000010', B'00001100'
- ;---------------------------------------------------;
- ;CHARACTER_TABLE_RIGHT CODE H'700' ;
- ;---------------------------------------------------;
- CHARACTER_TABLE_R1: ;
- ;---------------------------------------------------;
- DT B'00100000', B'01010000', B'01010000', B'01010000', B'00100000'
- DT B'00100000', B'01100000', B'00100000', B'00100000', B'01110000'
- DT B'01100000', B'00010000', B'00100000', B'01000000', B'01110000'
- DT B'01100000', B'00010000', B'00100000', B'00010000', B'01100000'
- DT B'01010000', B'01010000', B'01110000', B'00010000', B'00010000'
- DT B'01110000', B'01000000', B'01100000', B'00010000', B'01100000'
- DT B'00110000', B'01000000', B'01100000', B'01010000', B'00100000'
- DT B'01110000', B'00010000', B'00100000', B'01000000', B'01000000'
- DT B'00100000', B'01010000', B'00100000', B'01010000', B'00100000'
- DT B'00100000', B'01010000', B'00110000', B'00010000', B'01100000'
- ;---------------------------------------------------;
- CHARACTER_TABLE_R2: ;
- ;---------------------------------------------------;
- DT B'00000010', B'00000101', B'00000101', B'00000101', B'00000010'
- DT B'00000010', B'00000110', B'00000010', B'00000010', B'00000111'
- DT B'00000110', B'00000001', B'00000010', B'00000100', B'00000111'
- DT B'00000110', B'00000001', B'00000010', B'00000001', B'00000110'
- DT B'00000101', B'00000101', B'00000111', B'00000001', B'00000001'
- DT B'00000111', B'00000100', B'00000110', B'00000001', B'00000110'
- DT B'00000011', B'00000100', B'00000110', B'00000101', B'00000010'
- DT B'00000111', B'00000001', B'00000010', B'00000100', B'00000100'
- DT B'00000010', B'00000101', B'00000010', B'00000101', B'00000010'
- DT B'00000010', B'00000101', B'00000011', B'00000001', B'00000110'
- ;---------------------------------------------------;
- ;---------------------------------------------------;
- EEPROM_DATA CODE H'F000' ;
- ;---------------------------------------------------;
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'11111111', B'11111111', B'11111111', B'11111111'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'00000000', B'00000000', B'00000000', B'00000000'
- DE B'11111111', B'11111111', B'11111111', B'11111111'
- ;---------------------------------------------------;
- ;---------------------------------------------------;
- END ;
- ;---------------------------------------------------;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement