⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 invaders.asm

📁 PIC+LCD12864做的坦克打飞机游戏代码
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	Movlw 1
	Btfsc STATUS,0
	Clrw
	Movwf SP#P9
	Movff BASE_ENABLED#4,PP0
	Movlw 1
	F@Call t@eb
	Andwf SP#P9,W
	Btfsc STATUS,2
	Go@to bc@LL25
F1_000226 equ $ ; in [INVADERS.BAS] Inc BASE_HITS#4        ' Increment the amount of hits the base element has sustained
	Incf BASE_HITS#4,F
F1_000227 equ $ ; in [INVADERS.BAS] BASE_HIT = TRUE        ' Indicate a missile has hit a target
	Bsf MISSILE_STATUS,2
	F@Jump bc@LL26
bc@LL25
F1_000228 equ $ ; in [INVADERS.BAS] Else
F1_000229 equ $ ; in [INVADERS.BAS] BASE_ENABLED#4 = FALSE      ' Disable the base element
	Clrf BASE_ENABLED#4
F1_000230 equ $ ; in [INVADERS.BAS] Endif
bc@LL26
	F@Jump bc@LL1
bc@LL23
F1_000231 equ $ ; in [INVADERS.BAS] Case 66 to 71          ' Has the missile XPOS hit BASE 2, ELEMENT 5
	Movlw 65
	Cpfsgt BASE_XPOS_TEST
	F@Jump bc@LL28
	Movlw 72
	Cpfslt BASE_XPOS_TEST
	F@Jump bc@LL28
F1_000232 equ $ ; in [INVADERS.BAS] If BASE_HITS#5 < 5 AND BASE_ENABLED#5 = TRUE Then ' Is the base element enabled, and has had less than 5 hits ?
	Movlw 5
	Subwf BASE_HITS#5,W
	Movlw 1
	Btfsc STATUS,0
	Clrw
	Movwf SP#P9
	Movff BASE_ENABLED#5,PP0
	Movlw 1
	F@Call t@eb
	Andwf SP#P9,W
	Btfsc STATUS,2
	Go@to bc@LL30
F1_000233 equ $ ; in [INVADERS.BAS] Inc BASE_HITS#5        ' Increment the amount of hits the base element has sustained
	Incf BASE_HITS#5,F
F1_000234 equ $ ; in [INVADERS.BAS] BASE_HIT = TRUE        ' Indicate a missile has hit a target
	Bsf MISSILE_STATUS,2
	F@Jump bc@LL31
bc@LL30
F1_000235 equ $ ; in [INVADERS.BAS] Else
F1_000236 equ $ ; in [INVADERS.BAS] BASE_ENABLED#5 = FALSE      ' Disable the base element
	Clrf BASE_ENABLED#5
F1_000237 equ $ ; in [INVADERS.BAS] Endif
bc@LL31
	F@Jump bc@LL1
bc@LL28
F1_000238 equ $ ; in [INVADERS.BAS] Case 90 to 95          ' Has the missile XPOS hit BASE 3, ELEMENT 6
	Movlw 89
	Cpfsgt BASE_XPOS_TEST
	F@Jump bc@LL33
	Movlw 96
	Cpfslt BASE_XPOS_TEST
	F@Jump bc@LL33
F1_000239 equ $ ; in [INVADERS.BAS] If BASE_HITS#6 < 5 AND BASE_ENABLED#6 = TRUE Then ' Is the base element enabled, and has had less than 5 hits ?
	Movlw 5
	Subwf BASE_HITS#6,W
	Movlw 1
	Btfsc STATUS,0
	Clrw
	Movwf SP#P9
	Movff BASE_ENABLED#6,PP0
	Movlw 1
	F@Call t@eb
	Andwf SP#P9,W
	Btfsc STATUS,2
	Go@to bc@LL35
F1_000240 equ $ ; in [INVADERS.BAS] Inc BASE_HITS#6        ' Increment the amount of hits the base element has sustained
	Incf BASE_HITS#6,F
F1_000241 equ $ ; in [INVADERS.BAS] BASE_HIT = TRUE        ' Indicate a missile has hit a target
	Bsf MISSILE_STATUS,2
	F@Jump bc@LL36
bc@LL35
F1_000242 equ $ ; in [INVADERS.BAS] Else
F1_000243 equ $ ; in [INVADERS.BAS] BASE_ENABLED#6 = FALSE      ' Disable the base element
	Clrf BASE_ENABLED#6
F1_000244 equ $ ; in [INVADERS.BAS] Endif
bc@LL36
	F@Jump bc@LL1
bc@LL33
F1_000245 equ $ ; in [INVADERS.BAS] Case 96 to 101          ' Has the missile XPOS hit BASE 3, ELEMENT 7
	Movlw 95
	Cpfsgt BASE_XPOS_TEST
	F@Jump bc@LL38
	Movlw 102
	Cpfslt BASE_XPOS_TEST
	F@Jump bc@LL38
F1_000246 equ $ ; in [INVADERS.BAS] If BASE_HITS#7 < 5 AND BASE_ENABLED#7 = TRUE Then ' Is the base element enabled, and has had less than 5 hits ?
	Movlw 5
	Subwf BASE_HITS#7,W
	Movlw 1
	Btfsc STATUS,0
	Clrw
	Movwf SP#P9
	Movff BASE_ENABLED#7,PP0
	Movlw 1
	F@Call t@eb
	Andwf SP#P9,W
	Btfsc STATUS,2
	Go@to bc@LL40
F1_000247 equ $ ; in [INVADERS.BAS] Inc BASE_HITS#7        ' Increment the amount of hits the base element has sustained
	Incf BASE_HITS#7,F
F1_000248 equ $ ; in [INVADERS.BAS] BASE_HIT = TRUE        ' Indicate a missile has hit a target
	Bsf MISSILE_STATUS,2
	F@Jump bc@LL41
bc@LL40
F1_000249 equ $ ; in [INVADERS.BAS] Else
F1_000250 equ $ ; in [INVADERS.BAS] BASE_ENABLED#7 = FALSE      ' Disable the base element
	Clrf BASE_ENABLED#7
F1_000251 equ $ ; in [INVADERS.BAS] Endif
bc@LL41
	F@Jump bc@LL1
bc@LL38
F1_000252 equ $ ; in [INVADERS.BAS] Case 102 to 107          ' Has the missile XPOS hit BASE 3, ELEMENT 8
	Movlw 101
	Cpfsgt BASE_XPOS_TEST
	F@Jump bc@LL43
	Movlw 108
	Cpfslt BASE_XPOS_TEST
	F@Jump bc@LL43
F1_000253 equ $ ; in [INVADERS.BAS] If BASE_HITS#8 < 5 AND BASE_ENABLED#8 = TRUE Then ' Is the base element enabled, and has had less than 5 hits ?
	Movlw 5
	Subwf BASE_HITS#8,W
	Movlw 1
	Btfsc STATUS,0
	Clrw
	Movwf SP#P9
	Movff BASE_ENABLED#8,PP0
	Movlw 1
	F@Call t@eb
	Andwf SP#P9,W
	Btfsc STATUS,2
	Go@to bc@LL45
F1_000254 equ $ ; in [INVADERS.BAS] Inc BASE_HITS#8        ' Increment the amount of hits the base element has sustained
	Incf BASE_HITS#8,F
F1_000255 equ $ ; in [INVADERS.BAS] BASE_HIT = TRUE        ' Indicate a missile has hit a target
	Bsf MISSILE_STATUS,2
	F@Jump bc@LL46
bc@LL45
F1_000256 equ $ ; in [INVADERS.BAS] Else
F1_000257 equ $ ; in [INVADERS.BAS] BASE_ENABLED#8 = FALSE      ' Disable the base element
	Clrf BASE_ENABLED#8
F1_000258 equ $ ; in [INVADERS.BAS] Endif
bc@LL46
F1_000259 equ $ ; in [INVADERS.BAS] End Select
bc@LL43
bc@LL1
F1_000260 equ $ ; in [INVADERS.BAS] If BASE_HIT = TRUE Then Gosub UPDATE_BASES   ' Update the base shapes if a hit was detected
	Btfss MISSILE_STATUS,2
	Go@to bc@LL48
	F@Call UPDATE_BASES
bc@LL48
F1_000261 equ $ ; in [INVADERS.BAS] Return
	Return
MOVE_INVADER_MISSILE
F1_000268 equ $ ; in [INVADERS.BAS] If INVADER_MISSILE_FIRED = TRUE Then          ' Don't enter the routine if the invader's missile is already flying
	Btfss MISSILE_STATUS,5
	Go@to bc@LL50
F1_000269 equ $ ; in [INVADERS.BAS] If TIME_TO_MOVE_INV_MISSILE = TRUE Then       ' Is it time to move the invader's missile ?
	Btfss MISSILE_STATUS,4
	Go@to bc@LL52
F1_000270 equ $ ; in [INVADERS.BAS] Gosub DRAW_INVADER_MISSILE
	F@Call DRAW_INVADER_MISSILE
F1_000271 equ $ ; in [INVADERS.BAS] Inc INVADER_MISSILE_YPOS
	Incf INVADER_MISSILE_YPOS,F
F1_000272 equ $ ; in [INVADERS.BAS] Endif
bc@LL52
F1_000273 equ $ ; in [INVADERS.BAS] If INVADER_MISSILE_YPOS >= 63 OR INVADER_MISSILE_HIT = TRUE Then ' Has the invader's missile reached the bottom of the display or hit something ?
	Movlw 63
	Subwf INVADER_MISSILE_YPOS,W
	Clrw
	Btfsc STATUS,0
	Movlw 1
	Movwf SP#P9
	Clrw
	Btfsc MISSILE_STATUS,6
	Movlw 1
	Iorwf SP#P9,W
	Btfsc STATUS,2
	Go@to bc@LL54
F1_000274 equ $ ; in [INVADERS.BAS] INVADER_MISSILE_FIRED = FALSE        ' Yes. So signal the invader's missile is finished
	Bcf MISSILE_STATUS,5
F1_000275 equ $ ; in [INVADERS.BAS] Gosub CLEAR_INVADER_MISSILE         ' Clear the invader's missile
	F@Call CLEAR_INVADER_MISSILE
F1_000276 equ $ ; in [INVADERS.BAS] INVADER_MISSILE_HIT = FALSE
	Bcf MISSILE_STATUS,6
F1_000277 equ $ ; in [INVADERS.BAS] Endif
bc@LL54
F1_000278 equ $ ; in [INVADERS.BAS] Endif
bc@LL50
F1_000279 equ $ ; in [INVADERS.BAS] Return
	Return
MOVE_INVADER_MISSILE2
F1_000286 equ $ ; in [INVADERS.BAS] If INVADER_MISSILE2_FIRED = TRUE Then          ' Don't enter the routine if the invader's missile is already flying
	Btfss _B#VR1,7
	Go@to bc@LL56
F1_000287 equ $ ; in [INVADERS.BAS] If TIME_TO_MOVE_INV_MISSILE2 = TRUE Then       ' Is it time to move the invader's missile ?
	Btfss _B#VR1,6
	Go@to bc@LL58
F1_000288 equ $ ; in [INVADERS.BAS] Gosub DRAW_INVADER_MISSILE2
	F@Call DRAW_INVADER_MISSILE2
F1_000289 equ $ ; in [INVADERS.BAS] Inc INVADER_MISSILE2_YPOS
	Incf INVADER_MISSILE2_YPOS,F
F1_000290 equ $ ; in [INVADERS.BAS] Endif
bc@LL58
F1_000291 equ $ ; in [INVADERS.BAS] If INVADER_MISSILE2_YPOS >= 63 OR INVADER_MISSILE2_HIT = TRUE Then ' Has the invader's missile reached the bottom of the display or hit something ?
	Movlw 63
	Subwf INVADER_MISSILE2_YPOS,W
	Clrw
	Btfsc STATUS,0
	Movlw 1
	Movwf SP#P9
	Clrw
	Btfsc _B#VR2,0
	Movlw 1
	Iorwf SP#P9,W
	Btfsc STATUS,2
	Go@to bc@LL60
F1_000292 equ $ ; in [INVADERS.BAS] INVADER_MISSILE2_FIRED = FALSE        ' Yes. So signal the invader's missile is finished
	Bcf _B#VR1,7
F1_000293 equ $ ; in [INVADERS.BAS] Gosub CLEAR_INVADER_MISSILE2         ' Clear the invader's missile
	F@Call CLEAR_INVADER_MISSILE2
F1_000294 equ $ ; in [INVADERS.BAS] INVADER_MISSILE2_HIT = FALSE
	Bcf _B#VR2,0
F1_000295 equ $ ; in [INVADERS.BAS] Endif
bc@LL60
F1_000296 equ $ ; in [INVADERS.BAS] Endif
bc@LL56
F1_000297 equ $ ; in [INVADERS.BAS] Return
	Return
FIRE_INVADER_MISSILE
F1_000306 equ $ ; in [INVADERS.BAS] If INVADER_MISSILE_FIRED = FALSE Then          ' Is it OK to fire an invader missile ?
	Btfsc MISSILE_STATUS,5
	Go@to bc@LL62
F1_000307 equ $ ; in [INVADERS.BAS] INVADER_LOOP = 0
	Clrf INVADER_LOOP
F1_000308 equ $ ; in [INVADERS.BAS] Repeat                       ' Create a loop for all the invaders
bc@LL63
F1_000309 equ $ ; in [INVADERS.BAS] If INVADER_ENABLED[INVADER_LOOP] = TRUE Then       ' Is this invader enabled ?
	Lfsr 0,INVADER_ENABLED
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf PBP#VAR0
	Decfsz PBP#VAR0,W
	F@Jump bc@LL66
F1_000310 equ $ ; in [INVADERS.BAS] Select INVADER_XPOS[INVADER_LOOP] + 5
	Lfsr 0,INVADER_XPOS
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf PBP#VAR1
	Movlw 5
	Addwf PBP#VAR1,W
	Clrf PBP#VAR0H
	Movwf PBP#VAR0
	Rlcf PBP#VAR0H,F
F1_000311 equ $ ; in [INVADERS.BAS] Case SHIP_XPOS to SHIP_XPOS + 8        ' Is the invader over the ship ?
	Movf PBP#VAR0H,W
	Bnz cp@lb2
	Movf SHIP_XPOS,W
	Subwf PBP#VAR0,W
	Btfss STATUS,0
	Go@to bc@LL68
cp@lb2
	Movlw 8
	Addwf SHIP_XPOS,W
	Clrf PBP#VAR1H
	Movwf PBP#VAR1
	Rlcf PBP#VAR1H,F
	Movf PBP#VAR0,W
	Subwf PBP#VAR1,W
	Movf PBP#VAR0H,W
	Subwfb PBP#VAR1H,W
	Btfss STATUS,0
	Go@to bc@LL68
F1_000312 equ $ ; in [INVADERS.BAS] INVADER_MISSILE_FIRED = TRUE       ' Signal that an invader's  missile is in the air
	Bsf MISSILE_STATUS,5
F1_000313 equ $ ; in [INVADERS.BAS] INVADER_MISSILE_XPOS = INVADER_XPOS[INVADER_LOOP] + 5 ' Move missile XPOS to the middle of the invader
	Lfsr 0,INVADER_XPOS
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf PBP#VAR1
	Movlw 5
	Addwf PBP#VAR1,W
	Movwf INVADER_MISSILE_XPOS
F1_000314 equ $ ; in [INVADERS.BAS] INVADER_MISSILE_YPOS = (INVADER_YPOS[INVADER_LOOP] * 8) + 8 ' Move missile YPOS to below the invader
	Lfsr 0,INVADER_YPOS
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf PBP#VAR1
	Movf PBP#VAR1,W
	Mullw 8
	Movff PRODL,PP7
	Movff PRODH,PP7H
	Movlw 8
	Addwf PP7,W
	Movwf INVADER_MISSILE_YPOS
F1_000315 equ $ ; in [INVADERS.BAS] End Select
bc@LL68
bc@LL67
F1_000316 equ $ ; in [INVADERS.BAS] Endif
bc@LL66
F1_000317 equ $ ; in [INVADERS.BAS] Inc INVADER_LOOP
	Incf INVADER_LOOP,F
F1_000318 equ $ ; in [INVADERS.BAS] Until INVADER_LOOP > 17             ' Close the loop when all invaders have been scanned
	Movlw 17
	Cpfsgt INVADER_LOOP
	F@Jump bc@LL63
bc@LL64
F1_000319 equ $ ; in [INVADERS.BAS] Endif
bc@LL62
F1_000320 equ $ ; in [INVADERS.BAS] Return
	Return
FIRE_INVADER_MISSILE2
F1_000330 equ $ ; in [INVADERS.BAS] If INVADER_MISSILE2_FIRED = FALSE Then ' Is it OK to fire an invader second missile ?
	Btfsc _B#VR1,7
	Go@to bc@LL71
F1_000332 equ $ ; in [INVADERS.BAS] Select SHIP_XPOS
	Movf INVADER_MISSILE_XPOS,W
	Addwf RANDOM_VALUE,W
	Movwf PBP#VAR0
	Clrf PBP#VAR0H
	Rlcf PBP#VAR0H,F
F1_000333 equ $ ; in [INVADERS.BAS] Case > INVADER_MISSILE_XPOS + RANDOM_VALUE , < INVADER_MISSILE_XPOS - RANDOM_VALUE
	Movf PBP#VAR0H,W
	Bnz cp@lb4
	Movf SHIP_XPOS,W
	Subwf PBP#VAR0,W
	Btfss STATUS,0
	Go@to bc@LL74
cp@lb4
	Movf RANDOM_VALUE,W
	Subwf INVADER_MISSILE_XPOS,W
	Movwf PBP#VAR0
	Clrf PBP#VAR0H
	Skpc
	Decf PBP#VAR0H,F
	Movf PBP#VAR0H,W
	Bnz cp@lb5
	Movf PBP#VAR0,W
	Cpfslt SHIP_XPOS
	F@Jump bc@LL73
cp@lb5
bc@LL74
F1_000334 equ $ ; in [INVADERS.BAS] INVADER_LOOP = 0
	Clrf INVADER_LOOP
F1_000335 equ $ ; in [INVADERS.BAS] Repeat                       ' Create a loop for all the invaders
bc@LL75
F1_000336 equ $ ; in [INVADERS.BAS] If INVADER_ENABLED[INVADER_LOOP] = TRUE Then       ' Is this invader enabled ?
	Lfsr 0,INVADER_ENABLED
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf PBP#VAR0
	Decfsz PBP#VAR0,W
	F@Jump bc@LL78
F1_000337 equ $ ; in [INVADERS.BAS] Select INVADER_XPOS[INVADER_LOOP] + 5
	Lfsr 0,INVADER_XPOS
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf PBP#VAR1
	Movlw 5
	Addwf PBP#VAR1,W
	Clrf PBP#VAR0H
	Movwf PBP#VAR0
	Rlcf PBP#VAR0H,F
F1_000338 equ $ ; in [INVADERS.BAS] Case SHIP_XPOS to SHIP_XPOS + 8        ' Is the invader over the ship ?
	Movf PBP#VAR0H,W
	Bnz cp@lb6
	Movf SHIP_XPOS,W
	Subwf PBP#VAR0,W
	Btfss STATUS,0
	Go@to bc@LL80
cp@lb6
	Movlw 8
	Addwf SHIP_XPOS,W
	Clrf PBP#VAR1H
	Movwf PBP#VAR1
	Rlcf PBP#VAR1H,F
	Movf PBP#VAR0,W
	Subwf PBP#VAR1,W
	Movf PBP#VAR0H,W
	Subwfb PBP#VAR1H,W
	Btfss STATUS,0
	Go@to bc@LL80
F1_000339 equ $ ; in [INVADERS.BAS] INVADER_MISSILE2_FIRED = TRUE       ' Signal that an invader's  missile is in the air
	Bsf _B#VR1,7
F1_000340 equ $ ; in [INVADERS.BAS] INVADER_MISSILE2_XPOS = INVADER_XPOS[INVADER_LOOP] + 5 ' Move missile XPOS to the middle of the invader
	Lfsr 0,INVADER_XPOS
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf PBP#VAR1
	Movlw 5
	Addwf PBP#VAR1,W
	Movwf INVADER_MISSILE2_XPOS
F1_000341 equ $ ; in [INVADERS.BAS] INVADER_MISSILE2_YPOS = (INVADER_YPOS[INVADER_LOOP] * 8) + 8 ' Move missile YPOS to below the invader
	Lfsr 0,INVADER_YPOS
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf PBP#VAR1
	Movf PBP#VAR1,W
	Mullw 8
	Movff PRODL,PP7
	Movff PRODH,PP7H
	Movlw 8
	Addwf PP7,W
	Movwf INVADER_MISSILE2_YPOS
F1_000342 equ $ ; in [INVADERS.BAS] End Select
bc@LL80
bc@LL79
F1_000343 equ $ ; in [INVADERS.BAS] Endif
bc@LL78
F1_000344 equ $ ; in [INVADERS.BAS] Inc INVADER_LOOP
	Incf INVADER_LOOP,F
F1_000345 equ $ ; in [INVADERS.BAS] Until INVADER_LOOP > 17             ' Close the loop when all invaders have been scanned

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -