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

📄 invaders.asm

📁 PIC+LCD12864做的坦克打飞机游戏代码
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	Movlw 17
	Cpfsgt INVADER_LOOP
	F@Jump bc@LL75
bc@LL76
F1_000346 equ $ ; in [INVADERS.BAS] EndSelect
bc@LL73
bc@LL72
F1_000348 equ $ ; in [INVADERS.BAS] Endif
bc@LL71
F1_000349 equ $ ; in [INVADERS.BAS] Return
	Return
CHECK_FOR_INVADER_MISSILE_HIT
F1_000354 equ $ ; in [INVADERS.BAS] INVADER_MISSILE_HIT = FALSE            ' Default to not hit
	Bcf MISSILE_STATUS,6
F1_000355 equ $ ; in [INVADERS.BAS] If INVADER_MISSILE_FIRED = TRUE Then            ' First make sure that a missile is actually launched
	Btfss MISSILE_STATUS,5
	Go@to bc@LL83
F1_000357 equ $ ; in [INVADERS.BAS] If INVADER_MISSILE_YPOS >= 45 Then
	Movlw 44
	Cpfsgt INVADER_MISSILE_YPOS
	F@Jump bc@LL85
F1_000358 equ $ ; in [INVADERS.BAS] BASE_XPOS_TEST = INVADER_MISSILE_XPOS       ' Transfer the invader's missile XPOS for testing
	Movff INVADER_MISSILE_XPOS,BASE_XPOS_TEST
F1_000359 equ $ ; in [INVADERS.BAS] Gosub CHECK_BASE_HIT           ' Check if a base was hit
	F@Call CHECK_BASE_HIT
F1_000360 equ $ ; in [INVADERS.BAS] If BASE_HIT = TRUE Then
	Btfss MISSILE_STATUS,2
	Go@to bc@LL87
F1_000361 equ $ ; in [INVADERS.BAS] INVADER_MISSILE_HIT = TRUE         ' Transfer the hit detector into the invader's missile detector
	Bsf MISSILE_STATUS,6
F1_000362 equ $ ; in [INVADERS.BAS] Return              ' Return from the subroutine prematurely
	Return
F1_000363 equ $ ; in [INVADERS.BAS] Endif
bc@LL87
F1_000364 equ $ ; in [INVADERS.BAS] Endif
bc@LL85
F1_000367 equ $ ; in [INVADERS.BAS] If INVADER_MISSILE_YPOS >= 56 Then
	Movlw 55
	Cpfsgt INVADER_MISSILE_YPOS
	F@Jump bc@LL89
F1_000368 equ $ ; in [INVADERS.BAS] Select INVADER_MISSILE_XPOS
	Movlw low (-1)
	Addwf SHIP_XPOS,W
	Movwf PBP#VAR0
	Movlw low ((-1) >> 8)
	Skpnc
	Addlw 1
	Movwf PBP#VAR0H
F1_000369 equ $ ; in [INVADERS.BAS] Case SHIP_XPOS - 1 To SHIP_XPOS + SHIP_WIDTH
	Movf PBP#VAR0H,W
	Btfss STATUS,2
	Go@to bc@LL91
	Movf PBP#VAR0,W
	Subwf INVADER_MISSILE_XPOS,W
	Btfss STATUS,0
	Go@to bc@LL91
	Movlw 9
	Addwf SHIP_XPOS,W
	Clrf PBP#VAR0H
	Movwf PBP#VAR0
	Rlcf PBP#VAR0H,F
	Movf PBP#VAR0H,W
	Bnz cp@lb9
	Movf INVADER_MISSILE_XPOS,W
	Subwf PBP#VAR0,W
	Btfss STATUS,0
	Go@to bc@LL91
cp@lb9
F1_000370 equ $ ; in [INVADERS.BAS] Gosub DRAW_SHIP
	F@Call DRAW_SHIP
F1_000371 equ $ ; in [INVADERS.BAS] INVADER_MISSILE_HIT = TRUE        ' Indicate the invader's missile has hit something
	Bsf MISSILE_STATUS,6
F1_000372 equ $ ; in [INVADERS.BAS] SHIP_HIT = TRUE           ' Indicate that it is the ship that has been hit
	Bsf _B#VR1,2
F1_000373 equ $ ; in [INVADERS.BAS] End Select
bc@LL91
bc@LL90
F1_000374 equ $ ; in [INVADERS.BAS] Endif
bc@LL89
F1_000375 equ $ ; in [INVADERS.BAS] Endif
bc@LL83
F1_000376 equ $ ; in [INVADERS.BAS] Return
	Return
CHECK_FOR_INVADER_MISSILE2_HIT
F1_000381 equ $ ; in [INVADERS.BAS] INVADER_MISSILE2_HIT = FALSE           ' Default to not hit
	Bcf _B#VR2,0
F1_000382 equ $ ; in [INVADERS.BAS] If INVADER_MISSILE2_FIRED = TRUE Then           ' First make sure that a second missile is actually launched
	Btfss _B#VR1,7
	Go@to bc@LL94
F1_000384 equ $ ; in [INVADERS.BAS] If INVADER_MISSILE2_YPOS >= 45 Then
	Movlw 44
	Cpfsgt INVADER_MISSILE2_YPOS
	F@Jump bc@LL96
F1_000385 equ $ ; in [INVADERS.BAS] BASE_XPOS_TEST = INVADER_MISSILE2_XPOS       ' Transfer the invader's second missile XPOS for testing
	Movff INVADER_MISSILE2_XPOS,BASE_XPOS_TEST
F1_000386 equ $ ; in [INVADERS.BAS] Gosub CHECK_BASE_HIT           ' Check if a base was hit
	F@Call CHECK_BASE_HIT
F1_000387 equ $ ; in [INVADERS.BAS] If BASE_HIT = TRUE Then
	Btfss MISSILE_STATUS,2
	Go@to bc@LL98
F1_000388 equ $ ; in [INVADERS.BAS] INVADER_MISSILE2_HIT = TRUE         ' Transfer the hit detector into the invader's second missile detector
	Bsf _B#VR2,0
F1_000389 equ $ ; in [INVADERS.BAS] Return              ' Return from the subroutine prematurely
	Return
F1_000390 equ $ ; in [INVADERS.BAS] Endif
bc@LL98
F1_000391 equ $ ; in [INVADERS.BAS] Endif
bc@LL96
F1_000394 equ $ ; in [INVADERS.BAS] If INVADER_MISSILE2_YPOS >= 56 Then
	Movlw 55
	Cpfsgt INVADER_MISSILE2_YPOS
	F@Jump bc@LL100
F1_000395 equ $ ; in [INVADERS.BAS] Select INVADER_MISSILE2_XPOS
	Movlw low (-1)
	Addwf SHIP_XPOS,W
	Movwf PBP#VAR0
	Movlw low ((-1) >> 8)
	Skpnc
	Addlw 1
	Movwf PBP#VAR0H
F1_000396 equ $ ; in [INVADERS.BAS] Case SHIP_XPOS - 1 To SHIP_XPOS + SHIP_WIDTH
	Movf PBP#VAR0H,W
	Btfss STATUS,2
	Go@to bc@LL102
	Movf PBP#VAR0,W
	Subwf INVADER_MISSILE2_XPOS,W
	Btfss STATUS,0
	Go@to bc@LL102
	Movlw 9
	Addwf SHIP_XPOS,W
	Clrf PBP#VAR0H
	Movwf PBP#VAR0
	Rlcf PBP#VAR0H,F
	Movf PBP#VAR0H,W
	Bnz cp@lb11
	Movf INVADER_MISSILE2_XPOS,W
	Subwf PBP#VAR0,W
	Btfss STATUS,0
	Go@to bc@LL102
cp@lb11
F1_000397 equ $ ; in [INVADERS.BAS] Gosub DRAW_SHIP
	F@Call DRAW_SHIP
F1_000398 equ $ ; in [INVADERS.BAS] INVADER_MISSILE2_HIT = TRUE        ' Indicate the invader's second missile has hit something
	Bsf _B#VR2,0
F1_000399 equ $ ; in [INVADERS.BAS] SHIP_HIT = TRUE           ' Indicate that it is the ship that has been hit
	Bsf _B#VR1,2
F1_000400 equ $ ; in [INVADERS.BAS] End Select
bc@LL102
bc@LL101
F1_000401 equ $ ; in [INVADERS.BAS] Endif
bc@LL100
F1_000402 equ $ ; in [INVADERS.BAS] Endif
bc@LL94
F1_000403 equ $ ; in [INVADERS.BAS] Return
	Return
CLEAR_MISSILE
F1_000407 equ $ ; in [INVADERS.BAS] UnPlot MISSILE_YPOS, MISSILE_XPOS
	Movff MISSILE_YPOS,GEN
	Movf MISSILE_XPOS,W
	F@Call LCD@UnPlot
F1_000408 equ $ ; in [INVADERS.BAS] UnPlot MISSILE_YPOS, MISSILE_XPOS + 1
	Movff MISSILE_YPOS,GEN
	Incf MISSILE_XPOS,W
	F@Call LCD@UnPlot
F1_000409 equ $ ; in [INVADERS.BAS] UnPlot MISSILE_YPOS + 1, MISSILE_XPOS
	Incf MISSILE_YPOS,W
	Movwf GEN
	Movf MISSILE_XPOS,W
	F@Call LCD@UnPlot
F1_000410 equ $ ; in [INVADERS.BAS] UnPlot MISSILE_YPOS + 1, MISSILE_XPOS + 1
	Incf MISSILE_YPOS,W
	Movwf GEN
	Incf MISSILE_XPOS,W
	F@Call LCD@UnPlot
F1_000411 equ $ ; in [INVADERS.BAS] UnPlot MISSILE_YPOS + 2, MISSILE_XPOS
	Movlw 2
	Addwf MISSILE_YPOS,W
	Movwf GEN
	Movf MISSILE_XPOS,W
	F@Call LCD@UnPlot
F1_000412 equ $ ; in [INVADERS.BAS] UnPlot MISSILE_YPOS + 2, MISSILE_XPOS + 1
	Movlw 2
	Addwf MISSILE_YPOS,W
	Movwf GEN
	Incf MISSILE_XPOS,W
	F@Call LCD@UnPlot
F1_000413 equ $ ; in [INVADERS.BAS] Return
	Return
DRAW_MISSILE
F1_000415 equ $ ; in [INVADERS.BAS] Plot MISSILE_YPOS, MISSILE_XPOS
	Movff MISSILE_YPOS,GEN
	Movf MISSILE_XPOS,W
	F@Call LCD@Plot
F1_000416 equ $ ; in [INVADERS.BAS] Plot MISSILE_YPOS, MISSILE_XPOS + 1
	Movff MISSILE_YPOS,GEN
	Incf MISSILE_XPOS,W
	F@Call LCD@Plot
F1_000417 equ $ ; in [INVADERS.BAS] Plot MISSILE_YPOS + 1, MISSILE_XPOS
	Incf MISSILE_YPOS,W
	Movwf GEN
	Movf MISSILE_XPOS,W
	F@Call LCD@Plot
F1_000418 equ $ ; in [INVADERS.BAS] Plot MISSILE_YPOS + 1, MISSILE_XPOS + 1
	Incf MISSILE_YPOS,W
	Movwf GEN
	Incf MISSILE_XPOS,W
	F@Call LCD@Plot
F1_000419 equ $ ; in [INVADERS.BAS] UnPlot MISSILE_YPOS + 2, MISSILE_XPOS
	Movlw 2
	Addwf MISSILE_YPOS,W
	Movwf GEN
	Movf MISSILE_XPOS,W
	F@Call LCD@UnPlot
F1_000420 equ $ ; in [INVADERS.BAS] UnPlot MISSILE_YPOS + 2, MISSILE_XPOS + 1
	Movlw 2
	Addwf MISSILE_YPOS,W
	Movwf GEN
	Incf MISSILE_XPOS,W
	F@Call LCD@UnPlot
F1_000421 equ $ ; in [INVADERS.BAS] Return
	Return
DRAW_SHIP
F1_000425 equ $ ; in [INVADERS.BAS] LCDWRITE 7,SHIP_XPOS,[$00,$E0,$F0,$F0,$F8,$FC,$F8,$F0,$F0,$E0,$00]
	Movlw 7
	Movwf GEN
	Movff SHIP_XPOS,GENH
	Clrw
	F@Call Glcd@p
	Movlw 224
	F@Call Glcd@p
	Movlw 240
	F@Call Glcd@p
	Movlw 240
	F@Call Glcd@p
	Movlw 248
	F@Call Glcd@p
	Movlw 252
	F@Call Glcd@p
	Movlw 248
	F@Call Glcd@p
	Movlw 240
	F@Call Glcd@p
	Movlw 240
	F@Call Glcd@p
	Movlw 224
	F@Call Glcd@p
	Clrw
	F@Call Glcd@p
F1_000426 equ $ ; in [INVADERS.BAS] Return
	Return
CHECK_FOR_MISSILE_HIT
F1_000431 equ $ ; in [INVADERS.BAS] MISSILE_HIT = FALSE            ' Default to not hit
	Bcf MISSILE_STATUS,1
F1_000432 equ $ ; in [INVADERS.BAS] SAUCER_HIT = FALSE            ' Default to saucer not hit
	Bcf _B#VR2,1
F1_000433 equ $ ; in [INVADERS.BAS] If MISSILE_FIRED = TRUE Then         ' First make sure a missile is actually launched
	Btfss MISSILE_STATUS,0
	Go@to bc@LL105
F1_000435 equ $ ; in [INVADERS.BAS] If MISSILE_YPOS  = 53 Then
	Movlw 53
	Cpfseq MISSILE_YPOS
	F@Jump bc@LL107
F1_000436 equ $ ; in [INVADERS.BAS] BASE_XPOS_TEST = MISSILE_XPOS       ' Transfer the ship's missile XPOS for testing
	Movff MISSILE_XPOS,BASE_XPOS_TEST
F1_000437 equ $ ; in [INVADERS.BAS] Gosub CHECK_BASE_HIT         ' Check if a base was hit
	F@Call CHECK_BASE_HIT
F1_000438 equ $ ; in [INVADERS.BAS] If BASE_HIT = TRUE Then
	Btfss MISSILE_STATUS,2
	Go@to bc@LL109
F1_000439 equ $ ; in [INVADERS.BAS] MISSILE_SOUND_ENABLE = 0       ' Disable the missile's sound
	Bcf NOTE_STATUS,1
F1_000440 equ $ ; in [INVADERS.BAS] MISSILE_HIT = TRUE         ' Transfer the hit detector into the missile detector
	Bsf MISSILE_STATUS,1
F1_000441 equ $ ; in [INVADERS.BAS] Return            ' And return from the subroutine prematurely
	Return
F1_000442 equ $ ; in [INVADERS.BAS] Endif
bc@LL109
F1_000443 equ $ ; in [INVADERS.BAS] Endif
bc@LL107
F1_000446 equ $ ; in [INVADERS.BAS] If MISSILE_XPOS = INVADER_MISSILE_XPOS Then If MISSILE_YPOS = INVADER_MISSILE_YPOS Then
	Movf MISSILE_XPOS,W
	Cpfseq INVADER_MISSILE_XPOS
	F@Jump bc@LL111
	Movf MISSILE_YPOS,W
	Cpfseq INVADER_MISSILE_YPOS
	F@Jump bc@LL113
F1_000447 equ $ ; in [INVADERS.BAS] MISSILE_SOUND_ENABLE = 0       ' Disable the missile's sound
	Bcf NOTE_STATUS,1
F1_000448 equ $ ; in [INVADERS.BAS] MISSILE_HIT = TRUE          ' Indicate the ship's missile has hit a target
	Bsf MISSILE_STATUS,1
F1_000449 equ $ ; in [INVADERS.BAS] INVADER_MISSILE_HIT = TRUE        ' Indicate the invader's missile has also been hit
	Bsf MISSILE_STATUS,6
F1_000450 equ $ ; in [INVADERS.BAS] Inc SCORE            ' Increment the score by one
	Incf SCORE,F
	Movlw 0
	Addwfc SCOREH,F
	Addwfc SCOREHH,F
	Addwfc SCOREHHH,F
F1_000451 equ $ ; in [INVADERS.BAS] Return             ' And return from the subroutine prematurely
	Return
F1_000452 equ $ ; in [INVADERS.BAS] Endif
bc@LL113
bc@LL111
F1_000455 equ $ ; in [INVADERS.BAS] If SAUCER_ENABLED = TRUE Then
	Btfss _B#VR2,3
	Go@to bc@LL115
F1_000456 equ $ ; in [INVADERS.BAS] If MISSILE_YPOS < 7 Then
	Movlw 7
	Cpfslt MISSILE_YPOS
	F@Jump bc@LL117
F1_000457 equ $ ; in [INVADERS.BAS] Select MISSILE_XPOS
F1_000458 equ $ ; in [INVADERS.BAS] Case SAUCER_XPOS To SAUCER_XPOS  + SAUCER_WIDTH
	Movf SAUCER_XPOS,W
	Subwf MISSILE_XPOS,W
	Btfss STATUS,0
	Go@to bc@LL119
	Movlw 14
	Addwf SAUCER_XPOS,W
	Clrf PBP#VAR0H
	Movwf PBP#VAR0
	Rlcf PBP#VAR0H,F
	Movf PBP#VAR0H,W
	Bnz cp@lb12
	Movf MISSILE_XPOS,W
	Subwf PBP#VAR0,W
	Btfss STATUS,0
	Go@to bc@LL119
cp@lb12
F1_000459 equ $ ; in [INVADERS.BAS] MISSILE_HIT = TRUE       ' Indicate the ship's missile has hit a target
	Bsf MISSILE_STATUS,1
F1_000460 equ $ ; in [INVADERS.BAS] SAUCER_HIT = TRUE
	Bsf _B#VR2,1
F1_000461 equ $ ; in [INVADERS.BAS] SAUCER_SOUND_ENABLE = TRUE
	Bsf NOTE_STATUS,2
F1_000462 equ $ ; in [INVADERS.BAS] SAUCER_FREQ = 30
	Movlw 30
	Movwf SAUCER_FREQ
F1_000463 equ $ ; in [INVADERS.BAS] LCDWRITE 0,SAUCER_XPOS,[$8C,$C5,$6B,$36,$0C,$20,$68,$CC,$96,$33,$69,$CC,$86,$02]
	Clrf GEN
	Movff SAUCER_XPOS,GENH
	Movlw 140
	F@Call Glcd@p
	Movlw 197
	F@Call Glcd@p
	Movlw 107
	F@Call Glcd@p
	Movlw 54
	F@Call Glcd@p
	Movlw 12
	F@Call Glcd@p
	Movlw 32
	F@Call Glcd@p
	Movlw 104
	F@Call Glcd@p
	Movlw 204
	F@Call Glcd@p
	Movlw 150
	F@Call Glcd@p
	Movlw 51
	F@Call Glcd@p
	Movlw 105
	F@Call Glcd@p
	Movlw 204
	F@Call Glcd@p
	Movlw 134
	F@Call Glcd@p
	Movlw 2
	F@Call Glcd@p
F1_000464 equ $ ; in [INVADERS.BAS] Delayms 10
	Movlw 10
	F@Call dl@ms
F1_000465 equ $ ; in [INVADERS.BAS] LCDWRITE 0,SAUCER_XPOS,[$7F,$08,$08,$08,$7F,$00,$00,$41,$7F,$41,$00,$00,$01,$01,$7F,$01,$01] ' Display text HIT
	Clrf GEN
	Movff SAUCER_XPOS,GENH
	Movlw 127
	F@Call Glcd@p
	Movlw 8
	F@Call Glcd@p
	Movlw 8
	F@Call Glcd@p
	Movlw 8
	F@Call Glcd@p
	Movlw 127
	F@Call Glcd@p
	Clrw
	F@Call Glcd@p
	Clrw
	F@Call Glcd@p
	Movlw 65
	F@Call Glcd@p
	Movlw 127
	F@Call Glcd@p
	Movlw 65
	F@Call Glcd@p
	Clrw
	F@Call Glcd@p
	Clrw
	F@Call Glcd@p
	Movlw 1
	F@Call Glcd@p
	Movlw 1
	F@Call Glcd@p
	Movlw 127
	F@Call Glcd@p
	Movlw 1
	F@Call Glcd@p
	Movlw 1
	F@Call Glcd@p
F1_000466 equ $ ; in [INVADERS.BAS] SAUCER_FREQ = 20
	Movlw 20
	Movwf SAUCER_FREQ
F1_000467 equ $ ; in [INVADERS.BAS] Delayms 5
	Movlw 5
	F@Call dl@ms
F1_000468 equ $ ; in [INVADERS.BAS] SAUCER_FREQ = 10
	Movlw 10
	Movwf SAUCER_FREQ
F1_000469 equ $ ; in [INVADERS.BAS] Delayms 10
	Movlw 10
	F@Call dl@ms
F1_000470 equ $ ; in [INVADERS.BAS] SCORE = SCORE + (100 + SAUCER_XPOS)    ' Add 100 + xpos to the score for hitting the saucer
	Clrf PP7HH
	Clrf PP7HHH
	Movlw 100
	Addwf SAUCER_XPOS,W
	Movwf PP7
	Movlw 0
	Clrf PP7H
	Addwfc PP7H,F
	Movf PP7,W
	Addwf SCORE,F
	Movf PP7H,W
	Addwfc SCOREH,F
	Movf PP7HH,W
	Addwfc SCOREHH,F
	Movf PP7HHH,W
	Addwfc SCOREHHH,F
F1_000471 equ $ ; in [INVADERS.BAS] SAUCER_SOUND_ENABLE = FALSE
	Bcf NOTE_STATUS,2
F1_000472 equ $ ; in [INVADERS.BAS] Return
	Return
F1_000473 equ $ ; in [INVADERS.BAS] EndSelect
bc@LL119
bc@LL118
F1_000474 equ $ ; in [INVADERS.BAS] Endif
bc@LL117

⌨️ 快捷键说明

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