📄 invaders.asm
字号:
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 + -