yandagui 发表于 2017-3-13 21:29:54

[FC][魂斗罗][按键切子弹显示子弹]

本帖最后由 yandagui 于 2017-3-18 16:17 编辑

2017.3.13
http://www.emu618.org/data/attachment/album/201703/13/212900gz83klfdlvdvkl3k.png
http://www.emu618.org/data/attachment/album/201703/13/212901w3u16m4g4dhqo38r.png
http://www.emu618.org/data/attachment/album/201703/13/212901f4z0b4mtmmb0jx24.png
**** Hidden Message ***** .ORG $936E ;CONTRA(J)
LDA $25
BEQ ADDR_93C9
ADDR_936E: LDA $0022                ;读取地址$22数据到累加器A($22==0,单人模式,$22==01双人模式)
ADDR_9370: LDY $001C                ;读取地址$1C数据到寄存器Y
ADDR_9372: BEQ ADDR_9376        ;Z==1?如果结果为零则跳过$2字节
ADDR_9374: LDA #$01                        ;读取地址$01数据到累加器A
ADDR_9376: STA $0000                ;将累加器数值送到地址$00
ADDR_9378: LDX $0004                ;读取地址$04数据到寄存器X
ADDR_937A: LDY #$08                        ;读取立即数$04到寄存器Y
ADDR_937C: LDA $001C                ;读取地址$1C数据到累加器A
ADDR_937E: BNE ADDR_9395        ;Z==0?如果结果不为零则跳过$15字节
ADDR_9380: LDY $0000                ;读取地址$00数据到寄存器Y
ADDR_9382: LDA $0038,Y                ;读取地址$38,Y数据到累加器A($38==01,P1结束,$39==01,P2结束)
ADDR_9385: LDY #$08                        ;读取立即数$04到寄存器Y
ADDR_9387: LSR                                ;逻辑右移
ADDR_9388: BCS ADDR_9395        ;C==1,有借位则跳过$B字节
ADDR_938A: LDY $0000                ;设置Y==#00
ADDR_938C: LDA $0032,Y                ;读取地址$32,Y数据到累加器A
CLC
ADC #$02
ADDR_938F: LDY #$00                        ;设置寄存器Y为$00
ADDR_9391: CMP #$08                        ;比较Y==$04?
ADDR_9393: BCC ADDR_9397        ;C==0,有借位则跳过$2字节
ADDR_9395: LDA #$08                        ;读取地址$04数据到累加器A
ADDR_9397: STA $0001                ;送入地址$01
ADDR_9399: DEC $0001                ;地址$01递减
ADDR_939B: BMI ADDR_93C3        ;N==1,结果为负则跳过$26字节
ADDR_939D: LDA #$08                        ;设置纵坐标数值
ADDR_939F: STA $0200,X                ;送入纵坐标地址
ADDR_93A2: LDA ADDR_93CA,Y        ;读取图快号数据
ADDR_93A5: STA $0201,X                ;送入图快号地址
ADDR_93A8: LDA $0000                ;读取属性值数据
ADDR_93AA: STA $0202,X                ;送入属性值地址
ADDR_93AD: LSR                                ;逻辑右移
ADDR_93AE: LDA ADDR_93D2,Y        ;读取横坐标数值
ADDR_93B1: BCC ADDR_93B5        ;C==0,有借位则跳过$2字节
PHA
TYA
PHA
LDA #$D4
STA $0200,X
PLA
TAY
PLA
ADDR_93B5: JSR WEAPON
ADDR_93B8: DEC $0007                ;地址$C7递减
ADDR_93BA: TXA                                ;X-->A
ADDR_93BB: CLC                                ;清除进位标志
ADDR_93BC: ADC $0010                ;加上地址$10的值
ADDR_93BE: TAX                                ;A-->X
ADDR_93BF: INY                                ;设置Y++
ADDR_93C0: JMP ADDR_9399        ;跳转到ADDR_9399
ADDR_93C3: DEC $0000                ;地址$00递减
ADDR_93C5: BPL ADDR_937A        ;N==0,结果为正数则跳回$100-$B3=4D字节
ADDR_93C7: STX $0004                ;送入地址$04
ADDR_93C9: RTS                                ;程序转回-----------------------------

.ORG $FB60
ADDR_93CA:
.BYTE $0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A ;生命图块号
.BYTE $02,$04,$06,$08,$FE,$FE,$FE,$FE ;GAME OVER图块号
ADDR_93D2:
.BYTE $14,$1C,$28,$34,$40,$4C,$58,$64 ;生命图块坐标
.BYTE $10,$1C,$28,$34,$40,$4C,$58,$64 ;GAME OVER图块坐标


.ORG $FB80

WEAPON:
STA $0203,X                ;送入横坐标地址
PHP
PHA
TYA
PHA
CPY #$00
BNE LB
JSR S_WRITE ;第一个精灵
LB:
CPY #$01
BNE RE
JSR D_WRITE ;第二个精灵
RE:
PLA
TAY
PLA
PLP
RTS

S_WRITE:
PHA
TYA
PHA
S_CMP:
LDA $00
TAY
LDA $AA,Y ;读取武器值
AND #$10
BNE S_WEAPON
M_WEAPON: ;普通状态
LDA #$26
STA $0201,X
BNE RETURN
S_WEAPON: ;加速状态
LDA #$1C
STA $0201,X


RETURN:
PLA
TAY
PLA
RTS


D_WRITE:
PHA
TYA
PHA
WEAA:
LDY $00
LDA $AA,Y
AND #$0F
TAY
LDA DATA,Y
STA $0201,X

PLA
TAY
PLA
RTS

DATA: ;武器种类图块
.BYTE $24,$26,$20,$1C,$22

yyhxyr 发表于 2017-3-13 21:52:56

支持一下,人性化的修改。

dabayu 发表于 2017-3-13 23:04:51

多谢楼主的分享,修改辛苦了

cococo8858 发表于 2017-3-14 10:56:22

很好的修改,感谢分享。

kexiao1223 发表于 2017-3-14 11:54:43

支持楼主

afti 发表于 2017-3-14 11:55:03

魂一代30条命的秘籍历历在目

伤心2013 发表于 2017-3-14 15:23:24

多谢楼主分享

kk12345 发表于 2017-3-14 17:58:52

真的很赞,现在坚持这方面的人越来越少了。

ckc7213 发表于 2017-3-14 20:46:22

下载完玩玩!

tariq017 发表于 2017-3-14 22:34:38

感谢楼主分享游戏

lesliexiang 发表于 2020-2-15 01:59:32

多谢楼主的分享{:4_143:}

lzwgg 发表于 2024-9-22 10:55:28

很好的修改,感谢分享00
页: [1]
查看完整版本: [FC][魂斗罗][按键切子弹显示子弹]