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

📄 invaders.asm

📁 PIC+LCD12864做的坦克打飞机游戏代码
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	Movf TEMP_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf PBP#VAR0
	Decfsz PBP#VAR0,W
	F@Jump bc@LL159
F1_000576 equ $ ; in [INVADERS.BAS] LCDWRITE INVADER_YPOS[TEMP_LOOP],INVADER_XPOS[TEMP_LOOP],[$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00]
	Lfsr 0,INVADER_YPOS
	Movf TEMP_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf GEN
	Lfsr 0,INVADER_XPOS
	Movf TEMP_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf GENH
	Clrw
	F@Call Glcd@p
	Clrw
	F@Call Glcd@p
	Clrw
	F@Call Glcd@p
	Clrw
	F@Call Glcd@p
	Clrw
	F@Call Glcd@p
	Clrw
	F@Call Glcd@p
	Clrw
	F@Call Glcd@p
	Clrw
	F@Call Glcd@p
	Clrw
	F@Call Glcd@p
	Clrw
	F@Call Glcd@p
	Clrw
	F@Call Glcd@p
	Clrw
	F@Call Glcd@p
F1_000577 equ $ ; in [INVADERS.BAS] INVADER_YPOS[TEMP_LOOP] = INVADER_YPOS[TEMP_LOOP] + 1
	Lfsr 0,INVADER_YPOS
	Movf TEMP_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf PBP#VAR1
	Incf PBP#VAR1,W
	Movwf PBP#VAR0
	Lfsr 0,INVADER_YPOS
	Movf TEMP_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movff PBP#VAR0,INDF0
F1_000578 equ $ ; in [INVADERS.BAS] If INVADER_YPOS[TEMP_LOOP] = 6 Then      ' Have the invaders hit the bases ?
	Lfsr 0,INVADER_YPOS
	Movf TEMP_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf PBP#VAR0
	Movlw 6
	Cpfseq PBP#VAR0
	F@Jump bc@LL161
F1_000579 equ $ ; in [INVADERS.BAS] Str BASE_ENABLED = 0,0,0,0,0,0,0,0,0     ' Yes.. So disable them all
	Clrf BASE_ENABLED#0
	Clrf BASE_ENABLED#1
	Clrf BASE_ENABLED#2
	Clrf BASE_ENABLED#3
	Clrf BASE_ENABLED#4
	Clrf BASE_ENABLED#5
	Clrf BASE_ENABLED#6
	Clrf BASE_ENABLED#7
	Clrf BASE_ENABLED#8
F1_000580 equ $ ; in [INVADERS.BAS] Str BASE_HITS = 5,5,5,5,5,5,5,5,5     ' And move their hit counters to past their thresholds
	Movlw 5
	Movwf BASE_HITS#0
	Movlw 5
	Movwf BASE_HITS#1
	Movlw 5
	Movwf BASE_HITS#2
	Movlw 5
	Movwf BASE_HITS#3
	Movlw 5
	Movwf BASE_HITS#4
	Movlw 5
	Movwf BASE_HITS#5
	Movlw 5
	Movwf BASE_HITS#6
	Movlw 5
	Movwf BASE_HITS#7
	Movlw 5
	Movwf BASE_HITS#8
F1_000581 equ $ ; in [INVADERS.BAS] Endif
bc@LL161
F1_000582 equ $ ; in [INVADERS.BAS] If INVADER_YPOS[TEMP_LOOP] >= 7 Then INVADERS_REACHED_BOTTOM = TRUE ' Set a flag if the invaders have reached the bottom
	Lfsr 0,INVADER_YPOS
	Movf TEMP_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf PBP#VAR0
	Movlw 6
	Cpfsgt PBP#VAR0
	F@Jump bc@LL163
	Bsf _B#VR1,4
bc@LL163
F1_000583 equ $ ; in [INVADERS.BAS] LCDWRITE INVADER_YPOS[TEMP_LOOP],INVADER_XPOS[TEMP_LOOP],[$00,$06,$0C,$9C,$EA,$36,$36,$EA,$9C,$0C,$06,$00]
	Lfsr 0,INVADER_YPOS
	Movf TEMP_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf GEN
	Lfsr 0,INVADER_XPOS
	Movf TEMP_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf GENH
	Clrw
	F@Call Glcd@p
	Movlw 6
	F@Call Glcd@p
	Movlw 12
	F@Call Glcd@p
	Movlw 156
	F@Call Glcd@p
	Movlw 234
	F@Call Glcd@p
	Movlw 54
	F@Call Glcd@p
	Movlw 54
	F@Call Glcd@p
	Movlw 234
	F@Call Glcd@p
	Movlw 156
	F@Call Glcd@p
	Movlw 12
	F@Call Glcd@p
	Movlw 6
	F@Call Glcd@p
	Clrw
	F@Call Glcd@p
F1_000584 equ $ ; in [INVADERS.BAS] Endif
bc@LL159
F1_000585 equ $ ; in [INVADERS.BAS] Until TEMP_LOOP = 0
	Tstfsz TEMP_LOOP
	F@Jump bc@LL156
bc@LL157
F1_000586 equ $ ; in [INVADERS.BAS] Inc INVADER_MISSILE_SPEED          ' Slow down the invader's missile speed as they approach the bottom of the screen
	Incf INVADER_MISSILE_SPEED,F
F1_000587 equ $ ; in [INVADERS.BAS] If INVADER_SPEED >= 3 Then Dec INVADER_SPEED     ' Increase the speed of the invaders
	Movlw 2
	Cpfsgt INVADER_SPEED
	F@Jump bc@LL165
	Decf INVADER_SPEED,F
bc@LL165
F1_000588 equ $ ; in [INVADERS.BAS] Return
	Return
RESET_INVADERS
F1_000595 equ $ ; in [INVADERS.BAS] INVADER_LOOP = 0
	Clrf INVADER_LOOP
F1_000596 equ $ ; in [INVADERS.BAS] Repeat
bc@LL166
F1_000597 equ $ ; in [INVADERS.BAS] INVADER_ENABLED[INVADER_LOOP] = TRUE      ' Set all invaders to active and image 1
	Lfsr 0,INVADER_ENABLED
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movlw 1
	Movwf INDF0
F1_000598 equ $ ; in [INVADERS.BAS] Select INVADER_LOOP
F1_000599 equ $ ; in [INVADERS.BAS] Case 0 to 5
	Movlw 6
	Cpfslt INVADER_LOOP
	F@Jump bc@LL169
F1_000600 equ $ ; in [INVADERS.BAS] INVADER_XPOS[INVADER_LOOP] = (INVADER_LOOP + 1) * 16
	Movlw 1
	Addwf INVADER_LOOP,W
	Clrf PP7H
	Movwf PP7
	Rlcf PP7H,F
	Movf PP7,W
	Mullw 16
	Movff PRODL,PBP#VAR0
	Lfsr 0,INVADER_XPOS
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movff PBP#VAR0,INDF0
F1_000601 equ $ ; in [INVADERS.BAS] INVADER_YPOS[INVADER_LOOP] = 1
	Lfsr 0,INVADER_YPOS
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movlw 1
	Movwf INDF0
	F@Jump bc@LL168
bc@LL169
F1_000602 equ $ ; in [INVADERS.BAS] Case 6 to 11
	Movlw 5
	Cpfsgt INVADER_LOOP
	F@Jump bc@LL172
	Movlw 12
	Cpfslt INVADER_LOOP
	F@Jump bc@LL172
F1_000603 equ $ ; in [INVADERS.BAS] INVADER_XPOS[INVADER_LOOP] = (INVADER_LOOP - 5) * 16
	Movlw low (-5)
	Addwf INVADER_LOOP,W
	Movwf PP7
	Movlw low ((-5) >> 8)
	Skpnc
	Addlw 1
	Movwf PP7H
	Movf PP7,W
	Mullw 16
	Movff PRODL,PBP#VAR0
	Lfsr 0,INVADER_XPOS
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movff PBP#VAR0,INDF0
F1_000604 equ $ ; in [INVADERS.BAS] INVADER_YPOS[INVADER_LOOP] = 2
	Lfsr 0,INVADER_YPOS
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movlw 2
	Movwf INDF0
	F@Jump bc@LL168
bc@LL172
F1_000605 equ $ ; in [INVADERS.BAS] Case 12 to 17
	Movlw 11
	Cpfsgt INVADER_LOOP
	F@Jump bc@LL174
	Movlw 18
	Cpfslt INVADER_LOOP
	F@Jump bc@LL174
F1_000606 equ $ ; in [INVADERS.BAS] INVADER_XPOS[INVADER_LOOP] = (INVADER_LOOP - 11) * 16
	Movlw low (-11)
	Addwf INVADER_LOOP,W
	Movwf PP7
	Movlw low ((-11) >> 8)
	Skpnc
	Addlw 1
	Movwf PP7H
	Movf PP7,W
	Mullw 16
	Movff PRODL,PBP#VAR0
	Lfsr 0,INVADER_XPOS
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movff PBP#VAR0,INDF0
F1_000607 equ $ ; in [INVADERS.BAS] INVADER_YPOS[INVADER_LOOP] = 3
	Lfsr 0,INVADER_YPOS
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movlw 3
	Movwf INDF0
F1_000608 equ $ ; in [INVADERS.BAS] End Select
bc@LL174
bc@LL168
F1_000609 equ $ ; in [INVADERS.BAS] Inc INVADER_LOOP
	Incf INVADER_LOOP,F
F1_000610 equ $ ; in [INVADERS.BAS] Until INVADER_LOOP > 17
	Movlw 17
	Cpfsgt INVADER_LOOP
	F@Jump bc@LL166
bc@LL167
F1_000611 equ $ ; in [INVADERS.BAS] Return
	Return
MOVE_INVADERS
F1_000617 equ $ ; in [INVADERS.BAS] TIME_TO_MOVE_INVADERS_DOWN = FALSE
	Bcf _B#VR1,3
F1_000618 equ $ ; in [INVADERS.BAS] If INVADERS_DIRECTION = FORWARD Then       ' Are the invaders to move forward (right) ?
	Btfss _B#VR1,1
	Go@to bc@LL176
F1_000619 equ $ ; in [INVADERS.BAS] INVADER_LOOP = 0          ' Yes.. So reset the invader loop
	Clrf INVADER_LOOP
F1_000620 equ $ ; in [INVADERS.BAS] Repeat             ' Create a loop for all the invaders
bc@LL177
F1_000621 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@LL180
F1_000622 equ $ ; in [INVADERS.BAS] INVADER_XPOS[INVADER_LOOP] = INVADER_XPOS[INVADER_LOOP] + 1 ' Yes.. So increment its XPOS
	Lfsr 0,INVADER_XPOS
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf PBP#VAR1
	Incf PBP#VAR1,W
	Movwf PBP#VAR0
	Lfsr 0,INVADER_XPOS
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movff PBP#VAR0,INDF0
F1_000623 equ $ ; in [INVADERS.BAS] If INVADER_XPOS[INVADER_LOOP] >= INVADER_RIGHT_LIMIT Then  ' Have we hit the right side of the screen ?
	Lfsr 0,INVADER_XPOS
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf PBP#VAR0
	Movlw 116
	Cpfsgt PBP#VAR0
	F@Jump bc@LL182
F1_000624 equ $ ; in [INVADERS.BAS] INVADERS_DIRECTION = BACKWARD    ' Yes.. So indicate that we need to go backwards
	Bcf _B#VR1,1
F1_000625 equ $ ; in [INVADERS.BAS] SAUCER_ENABLED = TRUE
	Bsf _B#VR2,3
F1_000626 equ $ ; in [INVADERS.BAS] TIME_TO_MOVE_INVADERS_DOWN = TRUE   ' and signal that we need to move the invaders down
	Bsf _B#VR1,3
F1_000627 equ $ ; in [INVADERS.BAS] Endif
bc@LL182
F1_000628 equ $ ; in [INVADERS.BAS] Endif
bc@LL180
F1_000629 equ $ ; in [INVADERS.BAS] Inc INVADER_LOOP
	Incf INVADER_LOOP,F
F1_000630 equ $ ; in [INVADERS.BAS] Until INVADER_LOOP > 17         ' Close the loop after all the invader elements have been scanned
	Movlw 17
	Cpfsgt INVADER_LOOP
	F@Jump bc@LL177
bc@LL178
	F@Jump bc@LL183
bc@LL176
F1_000631 equ $ ; in [INVADERS.BAS] Else              ' Otherwise we go backwards (left)
F1_000632 equ $ ; in [INVADERS.BAS] INVADER_LOOP = 0          ' Reset the invader loop
	Clrf INVADER_LOOP
F1_000633 equ $ ; in [INVADERS.BAS] Repeat             ' Create a loop for all the invaders
bc@LL184
F1_000634 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@LL187
F1_000635 equ $ ; in [INVADERS.BAS] INVADER_XPOS[INVADER_LOOP] = INVADER_XPOS[INVADER_LOOP] - 1 ' Yes.. So decrement its XPOS
	Lfsr 0,INVADER_XPOS
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf PBP#VAR1
	Decf PBP#VAR1,W
	Movwf PBP#VAR0
	Lfsr 0,INVADER_XPOS
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movff PBP#VAR0,INDF0
F1_000636 equ $ ; in [INVADERS.BAS] If INVADER_XPOS[INVADER_LOOP] <= 1 Then      ' Have we hit the left side of the screen ?
	Lfsr 0,INVADER_XPOS
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf PBP#VAR0
	Movlw 2
	Cpfslt PBP#VAR0
	F@Jump bc@LL189
F1_000637 equ $ ; in [INVADERS.BAS] INVADERS_DIRECTION = FORWARD    ' Yes.. So indicate that we need to go forwards
	Bsf _B#VR1,1
F1_000638 equ $ ; in [INVADERS.BAS] TIME_TO_MOVE_INVADERS_DOWN = TRUE   ' and signal that we need to move the invaders down
	Bsf _B#VR1,3
F1_000639 equ $ ; in [INVADERS.BAS] Endif
bc@LL189
F1_000640 equ $ ; in [INVADERS.BAS] Endif
bc@LL187
F1_000641 equ $ ; in [INVADERS.BAS] Inc INVADER_LOOP
	Incf INVADER_LOOP,F
F1_000642 equ $ ; in [INVADERS.BAS] Until INVADER_LOOP > 17         ' Close the loop after all the invader elements have been scanned
	Movlw 17
	Cpfsgt INVADER_LOOP
	F@Jump bc@LL184
bc@LL185
F1_000643 equ $ ; in [INVADERS.BAS] Endif
bc@LL183
F1_000644 equ $ ; in [INVADERS.BAS] If TIME_TO_MOVE_INVADERS_DOWN = TRUE Then Gosub MOVE_INVADERS_DOWN ' Do we need to move the invaders down ?
	Btfss _B#VR1,3
	Go@to bc@LL191
	F@Call MOVE_INVADERS_DOWN
bc@LL191
DRAW_INVADERS
F1_000660 equ $ ; in [INVADERS.BAS] INVADER_LOOP = 0
	Clrf INVADER_LOOP
F1_000661 equ $ ; in [INVADERS.BAS] Repeat
bc@LL192
F1_000662 equ $ ; in [INVADERS.BAS] If INVADER_ENABLED[INVADER_LOOP] = TRUE Then
	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@LL195
F1_000663 equ $ ; in [INVADERS.BAS] If INVADER_CHARACTER = 0 Then
	Btfsc _B#VR1,5
	Go@to bc@LL197

⌨️ 快捷键说明

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