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

📄 invaders.asm

📁 PIC+LCD12864做的坦克打飞机游戏代码
💻 ASM
📖 第 1 页 / 共 5 页
字号:
F1_000475 equ $ ; in [INVADERS.BAS] Endif
bc@LL115
F1_000478 equ $ ; in [INVADERS.BAS] INVADER_LOOP = 0
	Clrf INVADER_LOOP
F1_000479 equ $ ; in [INVADERS.BAS] Repeat
bc@LL121
F1_000480 equ $ ; in [INVADERS.BAS] If INVADER_ENABLED[INVADER_LOOP] = TRUE Then     ' Only check if the invader is 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@LL124
F1_000481 equ $ ; in [INVADERS.BAS] If INVADER_YPOS[INVADER_LOOP] = MISSILE_YPOS / 8 Then
	Lfsr 0,INVADER_YPOS
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf PBP#VAR0
	Clrc
	Rrcf MISSILE_YPOS,W
	Movwf PBP#VAR1
	Clrc
	Rrcf PBP#VAR1,F
	Clrc
	Rrcf PBP#VAR1,F
	Clrf PBP#VAR1H
	Movf PBP#VAR1,W
	Cpfseq PBP#VAR0
	F@Jump bc@LL126
	Tstfsz PBP#VAR1H
	F@Jump bc@LL126
F1_000482 equ $ ; in [INVADERS.BAS] Select MISSILE_XPOS
	Lfsr 0,INVADER_XPOS
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf PBP#VAR0
F1_000483 equ $ ; in [INVADERS.BAS] Case INVADER_XPOS[INVADER_LOOP] to INVADER_XPOS[INVADER_LOOP] + INVADER_WIDTH
	Movf PBP#VAR0,W
	Subwf MISSILE_XPOS,W
	Btfss STATUS,0
	Go@to bc@LL128
	Lfsr 0,INVADER_XPOS
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf PBP#VAR1
	Movlw 10
	Addwf PBP#VAR1,W
	Clrf PBP#VAR0H
	Movwf PBP#VAR0
	Rlcf PBP#VAR0H,F
	Movf PBP#VAR0H,W
	Bnz cp@lb13
	Movf MISSILE_XPOS,W
	Subwf PBP#VAR0,W
	Btfss STATUS,0
	Go@to bc@LL128
cp@lb13
F1_000484 equ $ ; in [INVADERS.BAS] INVADER_ENABLED[INVADER_LOOP] = FALSE
	Lfsr 0,INVADER_ENABLED
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Clrf INDF0
F1_000485 equ $ ; in [INVADERS.BAS] MISSILE_HIT = TRUE       ' Indicate the ship's missile has hit a target
	Bsf MISSILE_STATUS,1
F1_000486 equ $ ; in [INVADERS.BAS] MISSILE_SOUND_ENABLE = 1
	Bsf NOTE_STATUS,1
F1_000487 equ $ ; in [INVADERS.BAS] MISSILE_FREQ = 30
	Movlw 30
	Movwf MISSILE_FREQ
F1_000488 equ $ ; in [INVADERS.BAS] Select INVADER_LOOP       ' Decide on the score depending on which invader is hit
F1_000489 equ $ ; in [INVADERS.BAS] Case 0 to 5        ' Top layer of invaders score 20
	Movlw 6
	Cpfslt INVADER_LOOP
	F@Jump bc@LL131
F1_000490 equ $ ; in [INVADERS.BAS] LCDWRITE INVADER_YPOS[INVADER_LOOP],INVADER_XPOS[INVADER_LOOP],[$42,$61,$51,$49,$46,$00,$3E,$51,$49,$45,$3E,$00]
	Lfsr 0,INVADER_YPOS
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf GEN
	Lfsr 0,INVADER_XPOS
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf GENH
	Movlw 66
	F@Call Glcd@p
	Movlw 97
	F@Call Glcd@p
	Movlw 81
	F@Call Glcd@p
	Movlw 73
	F@Call Glcd@p
	Movlw 70
	F@Call Glcd@p
	Clrw
	F@Call Glcd@p
	Movlw 62
	F@Call Glcd@p
	Movlw 81
	F@Call Glcd@p
	Movlw 73
	F@Call Glcd@p
	Movlw 69
	F@Call Glcd@p
	Movlw 62
	F@Call Glcd@p
	Clrw
	F@Call Glcd@p
F1_000491 equ $ ; in [INVADERS.BAS] SCORE = SCORE + 20
	Movlw 20
	Addwf SCORE,F
	Movlw 0
	Addwfc SCOREH,F
	Addwfc SCOREHH,F
	Addwfc SCOREHHH,F
	F@Jump bc@LL130
bc@LL131
F1_000492 equ $ ; in [INVADERS.BAS] Case 6 to 11       ' Middle layer of invaders score 10
	Movlw 5
	Cpfsgt INVADER_LOOP
	F@Jump bc@LL134
	Movlw 12
	Cpfslt INVADER_LOOP
	F@Jump bc@LL134
F1_000493 equ $ ; in [INVADERS.BAS] LCDWRITE INVADER_YPOS[INVADER_LOOP],INVADER_XPOS[INVADER_LOOP],[$00,$42,$7F,$40,$00,$00,$3E,$51,$49,$45,$3E,$00]
	Lfsr 0,INVADER_YPOS
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf GEN
	Lfsr 0,INVADER_XPOS
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf GENH
	Clrw
	F@Call Glcd@p
	Movlw 66
	F@Call Glcd@p
	Movlw 127
	F@Call Glcd@p
	Movlw 64
	F@Call Glcd@p
	Clrw
	F@Call Glcd@p
	Clrw
	F@Call Glcd@p
	Movlw 62
	F@Call Glcd@p
	Movlw 81
	F@Call Glcd@p
	Movlw 73
	F@Call Glcd@p
	Movlw 69
	F@Call Glcd@p
	Movlw 62
	F@Call Glcd@p
	Clrw
	F@Call Glcd@p
F1_000494 equ $ ; in [INVADERS.BAS] SCORE = SCORE + 10
	Movlw 10
	Addwf SCORE,F
	Movlw 0
	Addwfc SCOREH,F
	Addwfc SCOREHH,F
	Addwfc SCOREHHH,F
	F@Jump bc@LL130
bc@LL134
F1_000495 equ $ ; in [INVADERS.BAS] Case 12 to 17       ' Bottom layer of invaders score 5
	Movlw 11
	Cpfsgt INVADER_LOOP
	F@Jump bc@LL136
	Movlw 18
	Cpfslt INVADER_LOOP
	F@Jump bc@LL136
F1_000496 equ $ ; in [INVADERS.BAS] LCDWRITE INVADER_YPOS[INVADER_LOOP],INVADER_XPOS[INVADER_LOOP],[$3E,$51,$49,$45,$3E,$00, $27,$45,$45,$45,$39,$00]
	Lfsr 0,INVADER_YPOS
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf GEN
	Lfsr 0,INVADER_XPOS
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf GENH
	Movlw 62
	F@Call Glcd@p
	Movlw 81
	F@Call Glcd@p
	Movlw 73
	F@Call Glcd@p
	Movlw 69
	F@Call Glcd@p
	Movlw 62
	F@Call Glcd@p
	Clrw
	F@Call Glcd@p
	Movlw 39
	F@Call Glcd@p
	Movlw 69
	F@Call Glcd@p
	Movlw 69
	F@Call Glcd@p
	Movlw 69
	F@Call Glcd@p
	Movlw 57
	F@Call Glcd@p
	Clrw
	F@Call Glcd@p
F1_000497 equ $ ; in [INVADERS.BAS] SCORE = SCORE + 5
	Movlw 5
	Addwf SCORE,F
	Movlw 0
	Addwfc SCOREH,F
	Addwfc SCOREHH,F
	Addwfc SCOREHHH,F
F1_000498 equ $ ; in [INVADERS.BAS] EndSelect
bc@LL136
bc@LL130
F1_000499 equ $ ; in [INVADERS.BAS] Delayms 10
	Movlw 10
	F@Call dl@ms
F1_000500 equ $ ; in [INVADERS.BAS] MISSILE_FREQ = 20
	Movlw 20
	Movwf MISSILE_FREQ
F1_000501 equ $ ; in [INVADERS.BAS] Delayms 10
	Movlw 10
	F@Call dl@ms
F1_000502 equ $ ; in [INVADERS.BAS] MISSILE_FREQ = 10
	Movlw 10
	Movwf MISSILE_FREQ
F1_000503 equ $ ; in [INVADERS.BAS] Delayms 20
	Movlw 20
	F@Call dl@ms
F1_000504 equ $ ; in [INVADERS.BAS] LCDWRITE INVADER_YPOS[INVADER_LOOP],INVADER_XPOS[INVADER_LOOP],[$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00] ' Erase the INVADER that was hit
	Lfsr 0,INVADER_YPOS
	Movf INVADER_LOOP,W
	Addwf FSR0L,F
	Movlw 0
	Addwfc FSR0H,F
	Movf INDF0,W
	Movwf GEN
	Lfsr 0,INVADER_XPOS
	Movf INVADER_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_000507 equ $ ; in [INVADERS.BAS] Dec INVADERS_ENABLED      ' Decrement the hits counter
	Decf INVADERS_ENABLED,F
F1_000509 equ $ ; in [INVADERS.BAS] If INVADERS_ENABLED = 1 Then    ' Increase the speed substantially if only one invader left
	Decfsz INVADERS_ENABLED,W
	F@Jump bc@LL138
F1_000510 equ $ ; in [INVADERS.BAS] INVADER_SPEED = 5
	Movlw 5
	Movwf INVADER_SPEED
	F@Jump bc@LL137
F1_000511 equ $ ; in [INVADERS.BAS] Else if INVADERS_ENABLED = 2 Then
bc@LL138
	Movlw 2
	Cpfseq INVADERS_ENABLED
	F@Jump bc@LL139
F1_000512 equ $ ; in [INVADERS.BAS] INVADER_SPEED = 10      ' Increase the speed to fast if there are only two invaders left
	Movlw 10
	Movwf INVADER_SPEED
	F@Jump bc@LL140
bc@LL139
F1_000513 equ $ ; in [INVADERS.BAS] Else
F1_000515 equ $ ; in [INVADERS.BAS] If INVADER_SPEED >= 3 Then      ' Is the inveders speed greater than 3 ?
	Movlw 2
	Cpfsgt INVADER_SPEED
	F@Jump bc@LL142
F1_000516 equ $ ; in [INVADERS.BAS] If INVADERS_ENABLED <= 4 Then   ' Are there 4 or less invaders left ?
	Movlw 5
	Cpfslt INVADERS_ENABLED
	F@Jump bc@LL144
F1_000517 equ $ ; in [INVADERS.BAS] INVADER_SPEED = INVADER_SPEED - 3 ' Yes.. So increase their speed by a factor of three
	Movlw 3
	Subwf INVADER_SPEED,F
	F@Jump bc@LL145
bc@LL144
F1_000518 equ $ ; in [INVADERS.BAS] Else
F1_000519 equ $ ; in [INVADERS.BAS] Dec INVADER_SPEED     ' Otherwise.. Increase the speed of the remaining invaders
	Decf INVADER_SPEED,F
F1_000520 equ $ ; in [INVADERS.BAS] Endif
bc@LL145
F1_000521 equ $ ; in [INVADERS.BAS] Endif
bc@LL142
F1_000522 equ $ ; in [INVADERS.BAS] Endif
bc@LL140
bc@LL137
F1_000523 equ $ ; in [INVADERS.BAS] MISSILE_SOUND_ENABLE = 0     ' Disable the missile's sound
	Bcf NOTE_STATUS,1
F1_000524 equ $ ; in [INVADERS.BAS] Return          ' And return from the subroutine prematurely
	Return
F1_000525 equ $ ; in [INVADERS.BAS] Endselect
bc@LL128
bc@LL127
F1_000526 equ $ ; in [INVADERS.BAS] Endif
bc@LL126
F1_000527 equ $ ; in [INVADERS.BAS] Endif
bc@LL124
F1_000528 equ $ ; in [INVADERS.BAS] Inc INVADER_LOOP
	Incf INVADER_LOOP,F
F1_000529 equ $ ; in [INVADERS.BAS] Until INVADER_LOOP > 17
	Movlw 17
	Cpfsgt INVADER_LOOP
	F@Jump bc@LL121
bc@LL122
F1_000530 equ $ ; in [INVADERS.BAS] Endif
bc@LL105
F1_000531 equ $ ; in [INVADERS.BAS] Return
	Return
MOVE_MISSILE
F1_000538 equ $ ; in [INVADERS.BAS] If MISSILE_FIRED = TRUE Then          ' Don't enter the routine if the ship's missile is already flying
	Btfss MISSILE_STATUS,0
	Go@to bc@LL147
F1_000539 equ $ ; in [INVADERS.BAS] If TIME_TO_MOVE_SHIP_MISSILE = TRUE Then    ' Is it time to move the ship's missile ?
	Btfss MISSILE_STATUS,3
	Go@to bc@LL149
F1_000540 equ $ ; in [INVADERS.BAS] Gosub DRAW_MISSILE
	F@Call DRAW_MISSILE
F1_000541 equ $ ; in [INVADERS.BAS] Dec MISSILE_YPOS
	Decf MISSILE_YPOS,F
F1_000542 equ $ ; in [INVADERS.BAS] MISSILE_FREQ = 63 - MISSILE_YPOS
	Movf MISSILE_YPOS,W
	Sublw 63
	Movwf MISSILE_FREQ
F1_000543 equ $ ; in [INVADERS.BAS] Endif
bc@LL149
F1_000544 equ $ ; in [INVADERS.BAS] If MISSILE_YPOS = 0 OR MISSILE_HIT = TRUE Then    ' Has the missile reached the top of the display or hit something ?
	Movff MISSILE_YPOS,PP0
	Clrw
	F@Call t@eb
	Movwf SP#P9
	Clrw
	Btfsc MISSILE_STATUS,1
	Movlw 1
	Iorwf SP#P9,W
	Btfsc STATUS,2
	Go@to bc@LL151
F1_000545 equ $ ; in [INVADERS.BAS] MISSILE_SOUND_ENABLE = 0
	Bcf NOTE_STATUS,1
F1_000546 equ $ ; in [INVADERS.BAS] MISSILE_FIRED = FALSE        ' Yes. So signal the missile is finished
	Bcf MISSILE_STATUS,0
F1_000547 equ $ ; in [INVADERS.BAS] Gosub CLEAR_MISSILE         ' Clear the missile
	F@Call CLEAR_MISSILE
F1_000548 equ $ ; in [INVADERS.BAS] MISSILE_YPOS = 63 - 9             ' Reset the missile to the bottom of the display
	Movlw 54
	Movwf MISSILE_YPOS
F1_000549 equ $ ; in [INVADERS.BAS] Endif
bc@LL151
F1_000550 equ $ ; in [INVADERS.BAS] Endif
bc@LL147
F1_000551 equ $ ; in [INVADERS.BAS] Return
	Return
SHIP_RIGHT
F1_000555 equ $ ; in [INVADERS.BAS] If SHIP_XPOS > 117 Then Return
	Movlw 117
	Cpfsgt SHIP_XPOS
	F@Jump bc@LL153
	Return
bc@LL153
F1_000556 equ $ ; in [INVADERS.BAS] Gosub DRAW_SHIP
	F@Call DRAW_SHIP
F1_000557 equ $ ; in [INVADERS.BAS] Inc SHIP_XPOS
	Incf SHIP_XPOS,F
F1_000558 equ $ ; in [INVADERS.BAS] Return
	Return
SHIP_LEFT
F1_000562 equ $ ; in [INVADERS.BAS] If SHIP_XPOS = 0 Then Return
	Tstfsz SHIP_XPOS
	F@Jump bc@LL155
	Return
bc@LL155
F1_000563 equ $ ; in [INVADERS.BAS] Gosub DRAW_SHIP
	F@Call DRAW_SHIP
F1_000564 equ $ ; in [INVADERS.BAS] Dec SHIP_XPOS
	Decf SHIP_XPOS,F
F1_000565 equ $ ; in [INVADERS.BAS] Return
	Return
MOVE_INVADERS_DOWN
F1_000571 equ $ ; in [INVADERS.BAS] INVADERS_REACHED_BOTTOM = FALSE         ' Default to the invaders not at bottom of the screen
	Bcf _B#VR1,4
F1_000572 equ $ ; in [INVADERS.BAS] TEMP_LOOP = 18
	Movlw 18
	Movwf TEMP_LOOP
F1_000573 equ $ ; in [INVADERS.BAS] Repeat
bc@LL156
F1_000574 equ $ ; in [INVADERS.BAS] Dec TEMP_LOOP
	Decf TEMP_LOOP,F
F1_000575 equ $ ; in [INVADERS.BAS] If INVADER_ENABLED[TEMP_LOOP] = TRUE Then
	Lfsr 0,INVADER_ENABLED

⌨️ 快捷键说明

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