[FC][分页菜单重置]


;[FC][分页菜单重置]
;FlameCyclone
;20200326
.ORG $B600
ROM_CHAR_MAP = 1 ;字符映射
ROM_RESET = $FA8E
ROM_NMI = $FB2B
;==================================================
User_Addr = $80
;==================================================
Button_Keep = User_Addr + $01
Button_Once = Button_Keep + $01
Button_Temp = Button_Once + $01
Button_Buf = Button_Temp + $01
Button_Status = Button_Buf + $01
Button_Delay = Button_Status + $01
;==================================================
BUTTON_DELAY_MAX = 30
BUTTON_DELAY_SPEED = 5
;==================================================
Page_Cur_L = Button_Delay + $01
Page_Cur_H = Page_Cur_L + $01
Page_Old_L = Page_Cur_H + $01
Page_Old_H = Page_Old_L + $01
Sel_Cur_L = Page_Old_H + $01
Sel_Cur_H = Sel_Cur_L + $01
Sel_Old_L = Sel_Cur_H + $01
Sel_Old_H = Sel_Old_L + $01
Sel_Data_L = Sel_Old_H + $01
Sel_Data_H = Sel_Data_L + $01
;==================================================
ITEM_BUF_MAX = 4
;==================================================
Item_Update = Sel_Data_H + $01
Item_Update_Index = Item_Update + $01
Item_Show_Cnt = Item_Update_Index + $01
Item_Show_L = Item_Show_Cnt + $01
Item_Show_H = Item_Show_L + $01
Item_Clean_L = Item_Show_H + $01
Item_Clean_H = Item_Clean_L + $01
;============================================================
FC_MENU_MASK = $FF
FC_Menu_Flag = $FE
FC_Data_L = $40 ;数据地址低位
FC_Data_H = FC_Data_L+$01 ;数据地址高位
FC_Data_Cnt = FC_Data_H+$01 ;数据计数
FC_Data_Tmp = FC_Data_Cnt+$01 ;数据缓存
;============================================================
FC_PPU_Buffer = $0200 ;PPU缓冲地址
FC_PPU_Status = FC_PPU_Buffer+$C0 ;PPU显示状态
FC_PPU_Cursor = FC_PPU_Status + $01 ;当前PPU缓冲位置
FC_PPU_Addr_L = FC_PPU_Cursor + $01 ;PPU地址低位
FC_PPU_Addr_H = FC_PPU_Addr_L + $01 ;PPU地址高位
;==================================================
ITEM_MAX = 72 - 1
PAGE_SIZE = 24
PAGE_MAX = ITEM_MAX/PAGE_SIZE * PAGE_SIZE
;==================================================
Char_Arrow = $D8
ARROW_X_OFFSET = $36 ;箭头横坐标
ARROW_Y_OFFSET = $1F ;箭头纵坐标
SPRITES_ADDR = $0400
SPRITES_PAGE = SPRITES_ADDR / 256
;==================================================
;==================================================
Sound_Init = $FFA0
Sound_Play = $FFB0
SOUND_OPEN = 1
;==================================================
SOUNG_BGM = 48
SOUNG_ITEM = 12
SOUNG_PAGE = 14
;==================================================
;Reset中断
ResetProgram:
CLD
SEI
LDX #$FF
TXS
LDA #$00
STA $2000
STA $2001
STA $E000
LDA #$80
STA $A001
LDX #$02
ResetDelayA:
BIT $2002
BPL ResetDelayA
ResetDelayB:
BIT $2002
BMI ResetDelayB
DEX
BNE ResetDelayA
JSR PaletteClear
JSR VramClear
LDA #$0F
STA $4015
LDA #$C0
STA $4017
LDA #$00
STA $8000
LDA #$40
STA $8001
LDA #$01
STA $8000
LDA #$06
STA $8001
RamClear:
LDA #$00
STA $00
STA $01
LDX #$08
LDY #$00
RamClearWrite:
STA ($00),Y
INY
BNE RamClearWrite
INC $01
DEX
BNE RamClearWrite
LDA #FC_MENU_MASK
STA FC_Menu_Flag
JSR PaletteSet
JSR SpriteClear
JSR UpdatePageEnable
.IF SOUND_OPEN
LDA #SOUNG_BGM - 1
JSR Sound_Init
.ENDIF
LDA #$1E
STA FC_PPU_Status
LDA #$80
STA $2000
MainLoop:
JMP MainLoop
;==================================================
;清空PPU内存
VramClear:
LDA #$20
STA $2006
LDA #$00
STA $2006
LDY #$10
LDA #$00
TAX
NameTableClearBeg:
STA $2007
INX
BNE NameTableClearBeg
DEY
BNE NameTableClearBeg
RTS
SelectItemSound:
.IF SOUND_OPEN
LDA #SOUNG_ITEM - 1
JSR Sound_Init
.ENDIF
RTS
SelectPageSound:
.IF SOUND_OPEN
LDA #SOUNG_PAGE - 1
JSR Sound_Init
.ENDIF
RTS
;==================================================
;清空调色板
PaletteClear:
JSR PaletteAddrSet
LDA #$0F
LDX #$00
PaletteClearWrite:
STA $2007
INX
CPX #$20
BCC PaletteClearWrite
RTS
;==================================================
;设置调色板
PaletteSet:
JSR PaletteAddrSet
LDX #$00
PaletteSetWrite:
LDA PaletteData,X
STA $2007
INX
CPX #$20
BCC PaletteSetWrite
RTS
;==================================================
;调色板地址设置
PaletteAddrSet:
LDA #$3F
STA $2006
LDA #$00
STA $2006
RTS
;==================================================
;保存旧选择索引
SaveOldSelect:
LDA Page_Cur_L
STA Page_Old_L
LDA Page_Cur_H
STA Page_Old_H
LDA Sel_Cur_L
STA Sel_Old_L
LDA Sel_Cur_H
STA Sel_Old_H
RTS
;==============================
;是否递减索引时页面索引改变
IsPageChangeByDecItem:
LDA Sel_Cur_L
CMP Page_Cur_L
BNE IsPageChangeByDecItemEnd
SEC
RTS
IsPageChangeByDecItemEnd:
CLC
RTS
;==============================
;是否递增索引时页面索引改变
IsPageChangeByIncItem:
LDA Page_Cur_L
CLC
ADC #PAGE_SIZE
SEC
SBC #$01
CMP Sel_Cur_L
BNE IsPageChangeByIncItemEnd
SEC
RTS
IsPageChangeByIncItemEnd:
CLC
RTS
;==============================
;是否最小索引
IsMinItem:
LDA Sel_Cur_L
ORA Sel_Cur_H
BEQ IsMinItemEnd
CLC
RTS
IsMinItemEnd:
SEC
RTS
;==============================
;是否最小索引页
IsMinPage:
LDA Page_Cur_L
ORA Page_Cur_H
BEQ IsMinPageEnd
CLC
RTS
IsMinPageEnd:
SEC
RTS
;==============================
;是否最大索引
IsMaxItem:
LDA Sel_Cur_H
CMP #>ITEM_MAX
BNE IsMaxItemEnd
LDA Sel_Cur_L
CMP #<ITEM_MAX
BNE IsMaxItemEnd
SEC
RTS
IsMaxItemEnd:
CLC
RTS
;==============================
;是否最大索引页
IsMaxPage:
LDA Page_Cur_H
CMP #>PAGE_MAX
BNE IsMaxItemEnd
LDA Page_Cur_L
CMP #<PAGE_MAX
BNE IsMaxPageEnd
SEC
RTS
IsMaxPageEnd:
CLC
RTS
;==============================
;递减选择索引
DecSelItem:
LDA Sel_Cur_L
SEC
SBC #$01
STA Sel_Cur_L
BCS DecSelItemEnd
DEC Sel_Cur_H
DecSelItemEnd:
RTS
;==============================
;递减选择索引页
DecSelPage:
LDA Page_Cur_L
SEC
SBC #PAGE_SIZE
STA Page_Cur_L
BCS DecSelPageEnd
DEC Page_Cur_H
DecSelPageEnd:
RTS
;==============================
;递增选择索引
IncSelItem:
LDA Sel_Cur_L
CLC
ADC #$01
STA Sel_Cur_L
BCC IncSelItemEnd
INC Sel_Cur_H
IncSelItemEnd:
RTS
;==============================
;递增选择索引页
IncSelPage:
LDA Page_Cur_L
CLC
ADC #PAGE_SIZE
STA Page_Cur_L
BCC IncSelPageEnd
INC Page_Cur_H
IncSelPageEnd:
RTS
;==============================
;递增页索引
DecPageIndex
LDA Page_Cur_L
SEC
SBC #PAGE_SIZE
STA Page_Cur_L
BCS DecPageIndexEnd
DEC Page_Cur_H
DecPageIndexEnd:
JSR UpdatePageEnable
RTS
;==============================
;递增页索引
IncPageIndex:
LDA Page_Cur_L
CLC
ADC #PAGE_SIZE
STA Page_Cur_L
BCC IncPageIndexEnd
INC Page_Cur_H
IncPageIndexEnd:
JSR UpdatePageEnable
RTS
;==============================
;设置最小页
SetMinPage:
LDA #$00
STA Page_Cur_L
STA Page_Cur_H
JSR UpdatePageEnable
RTS
;==============================
;设置最大页
SetMaxPage:
LDA #<PAGE_MAX
STA Page_Cur_L
LDA #>PAGE_MAX
STA Page_Cur_H
JSR UpdatePageEnable
RTS
;==============================
;设置最小索引
SetMinItem:
LDA #$00
STA Sel_Cur_L
STA Sel_Cur_H
RTS
;==============================
;设置最大索引
SetMaxItem:
LDA #<ITEM_MAX
STA Sel_Cur_L
LDA #>ITEM_MAX
STA Sel_Cur_H
RTS
;==============================
;换页时递减选择索引
DecSelItemByPage:
JSR GetItemOffset
JSR DecSelPage
JSR SetItemOffset
DecSelItemByPageEnd:
JSR UpdatePageEnable
RTS
;==============================
;换页时递增选择索引
IncSelItemByPage:
JSR GetItemOffset
JSR IncSelPage
JSR SetItemOffset
IncSelItemByPageEnd:
JSR UpdatePageEnable
RTS
;=============================
;索引偏移获取
GetItemOffset
LDA Sel_Cur_L
SEC
SBC Page_Cur_L
STA Sel_Data_L
LDA Sel_Cur_H
SBC Page_Cur_H
STA Sel_Data_H
RTS
;=============================
;索引偏移设置
SetItemOffset:
LDA Sel_Data_L
CLC
ADC Page_Cur_L
STA Sel_Cur_L
LDA Sel_Data_H
ADC Page_Cur_H
STA Sel_Cur_H
SetItemOffsetCheck:
LDA Sel_Cur_H
CMP #>ITEM_MAX
BCC SetItemOffsetEnd
BNE SetItemOffsetMax
LDA Sel_Cur_L
CMP #<ITEM_MAX
BCC SetItemOffsetEnd
BEQ SetItemOffsetEnd
SetItemOffsetMax:
JSR SetMaxItem
SetItemOffsetEnd:
RTS
;==============================
;选择上一个索引
SelectPreItem:
JSR SaveOldSelect
JSR IsMinItem
BCS SelectPreItemSetMaxPage
JSR IsPageChangeByDecItem
BCC SelectPreItemNoSavePage
JSR DecPageIndex
SelectPreItemNoSavePage:
JSR DecSelItem
RTS
SelectPreItemSetMaxPage:
JSR SetMaxPage
JSR SetMaxItem
RTS
;==============================
;选择下一个索引
SelectNextItem:
JSR SaveOldSelect
JSR IsMaxItem
BCS SelectNextItemSetMinPage
JSR IsPageChangeByIncItem
BCC SelectNextItemNoSavePage
JSR IncPageIndex
SelectNextItemNoSavePage
JSR IncSelItem
RTS
SelectNextItemSetMinPage
JSR SetMinPage
JSR SetMinItem
RTS
;==============================
;选择上一个页索引
SelectPrePage:
JSR SaveOldSelect
JSR IsMinPage
BCS SelectPrePageSetMaxPage
JSR DecSelItemByPage
RTS
SelectPrePageSetMaxPage:
JSR GetItemOffset
JSR SetMaxPage
JSR SetItemOffset
RTS
;==============================
;选择下一个页索引
SelectNextPage:
JSR SaveOldSelect
JSR IsMaxPage
BCS SelectNextPageSetMinPage
JSR IncSelItemByPage
RTS
SelectNextPageSetMinPage:
JSR GetItemOffset
JSR SetMinPage
JSR SetItemOffset
RTS
;==================================================
;选择索引
SelectItemIndex:
LDA Item_Update
BEQ SelectPreItemIndex
JSR UpdatePage
RTS
SelectPreItemIndex:
LDA Button_Once
CMP #$08
BNE SelectNextItemIndex
JSR SelectItemSound
JSR SelectPreItem
SelectNextItemIndex:
LDA Button_Once
CMP #$04
BNE SelectPrePageIndex
JSR SelectItemSound
JSR SelectNextItem
SelectPrePageIndex:
LDA Button_Once
CMP #$02
BNE SelectNextPageIndex
JSR SelectPageSound
JSR SelectPrePage
SelectNextPageIndex:
LDA Button_Once
CMP #$01
BNE SelectItemIndexCheck
JSR SelectPageSound
JSR SelectNextPage
SelectItemIndexCheck:
LDA Button_Once
CMP #$10
BNE SelectItemIndexEnd
LDA Sel_Cur_L
STA $01C0
JMP ROM_RESET
SelectItemIndexEnd:
RTS
IsPageChange:
LDA Page_Cur_H
CMP Page_Old_H
BNE IsPageChangeEnd
LDA Page_Cur_L
CMP Page_Old_L
BNE IsPageChangeEnd
CLC
RTS
IsPageChangeEnd:
SEC
RTS
;==================================================
;按键处理
ButtonProcess:
JSR ButtonScan
LDA Button_Keep
STA Button_Temp
JSR ButtonScan
LDA Button_Keep
CMP Button_Temp
BEQ ButtonGetOnce
LDA Button_Buf
STA Button_Keep
ButtonGetOnce:
TAY
EOR Button_Buf
AND Button_Keep
STA Button_Once
STY Button_Buf
JSR ButtonDelay
RTS
;==================================================
;按键扫描
ButtonScan:
LDX #$01
STX $4016
DEX
STX $4016
LDY #$08
ButtonValue:
LDA $4016
STA Button_Status
LSR
ORA Button_Status
LSR
ROL Button_Keep
DEY
BNE ButtonValue
RTS
ButtonDelay:
LDA Button_Keep
BNE ButtonDelayBeg
STA Button_Delay
RTS
ButtonDelayBeg:
INC Button_Delay
LDA Button_Delay
CMP # BUTTON_DELAY_MAX + BUTTON_DELAY_SPEED
BCC ButtonDelayEnd
LDA # BUTTON_DELAY_MAX
STA Button_Delay
LDA Button_Keep
STA Button_Once
ButtonDelayEnd:
RTS
;========================================
MODE_CNTL = $FB ;行写入模式
MODE_CNTC = $FC ;行清除模式
MODE_OVER = $FF ;结束标志
;----------------------------------------
FC_PPU_Process: ;PPU处理
LDA FC_PPU_Buffer
BEQ FC_PPU_Process_End
JSR FC_PPU_Process_Beg
FC_PPU_Process_End:
LDA #$00
STA FC_PPU_Buffer
STA $2006
STA $2006
STA $2005
STA $2005
LDA FC_PPU_Status
STA $2001
RTS
;----------------------------------------
FC_PPU_Process_Beg: ;处理开始
LDX FC_PPU_Cursor
LDA #$00
STA $2001
STA FC_PPU_Buffer,X
STA FC_PPU_Cursor
LDX #$FF
;----------------------------------------
FC_PPU_Mode_Select: ;模式选择
INX
LDA FC_PPU_Buffer,X
CMP #MODE_CNTL
BEQ FC_PPU_Mode_CountLine
CMP #MODE_CNTC
BEQ FC_PPU_Mode_CountClear
RTS
;----------------------------------------
FC_PPU_Mode_CountLine: ;行写入模式
JSR FC_PPU_Set_Addr
LDY FC_PPU_Buffer,X
FC_PPU_CountLine_Write:
INX
LDA FC_PPU_Buffer,X
STA $2007
DEY
BNE FC_PPU_CountLine_Write
JMP FC_PPU_Mode_Select
;----------------------------------------
FC_PPU_Mode_CountClear: ;行清除模式
JSR FC_PPU_Write_Addr
LDY FC_PPU_Buffer,X
LDA #$00
FC_PPU_CountClear_Write:
STA $2007
DEY
BNE FC_PPU_CountClear_Write
JMP FC_PPU_Mode_Select
;----------------------------------------
FC_PPU_Set_Addr: ;写入地址
INX
LDA FC_PPU_Buffer,X
STA FC_PPU_Addr_H
STA $2006
INX
LDA FC_PPU_Buffer,X
STA FC_PPU_Addr_L
STA $2006
INX
RTS
;----------------------------------------
FC_PPU_Write_Addr: ;写入地址
INX
LDA FC_PPU_Buffer,X
STA $2006
INX
LDA FC_PPU_Buffer,X
STA $2006
INX
RTS
;========================================
UpdatePageEnable:
LDA #$01
STA Item_Update
LDA Page_Cur_L
STA Item_Show_L
LDA Page_Cur_H
STA Item_Show_H
LDA Page_Old_L
STA Item_Clean_L
LDA Page_Old_H
STA Item_Clean_H
LDA #$00
STA Item_Update_Index
RTS
;========================================
UpdatePageDisable:
LDA #$00
STA Item_Update
RTS
;==============================
;是否最大索引页
IsOverMaxShowItem:
LDA Item_Show_H
CMP #>ITEM_MAX
BCC IsOverMaxUpdateItemEnd
BNE IsOverMaxShowItemSet
LDA Item_Show_L
CMP #<ITEM_MAX
BCC IsOverMaxUpdateItemEnd
BEQ IsOverMaxUpdateItemEnd
IsOverMaxShowItemSet:
SEC
RTS
IsOverMaxUpdateItemEnd:
CLC
RTS
;==============================
;是否最大索引页
IsOverMaxCleanItem:
LDA Item_Clean_H
CMP #>ITEM_MAX
BCC IsOverMaxCleanItemEnd
BNE IsOverMaxCleanItemSet
LDA Item_Clean_L
CMP #<ITEM_MAX
BCC IsOverMaxCleanItemEnd
BEQ IsOverMaxCleanItemEnd
IsOverMaxCleanItemSet:
SEC
RTS
IsOverMaxCleanItemEnd:
CLC
RTS
;========================================
UpdatePage:
LDA Item_Update_Index
CMP #PAGE_SIZE
BCC UpdatePageInitBeg
JSR UpdatePageDisable
RTS
UpdatePageInitBeg:
LDA #$00
STA Item_Show_Cnt
UpdatePageBeg:
JSR CleanOnceItem
JSR WriteOnceItem
UpdatePageCheckClean:
INC Item_Clean_L
BNE UpdatePageCheckShow
INC Item_Clean_H
UpdatePageCheckShow:
INC Item_Show_L
BNE UpdatePageItem
INC Item_Show_H
UpdatePageItem:
INC Item_Update_Index
LDA Item_Update_Index
CMP #PAGE_SIZE
BCS UpdatePageEnd
INC Item_Show_Cnt
LDA Item_Show_Cnt
CMP #ITEM_BUF_MAX
BCC UpdatePageBeg
UpdatePageEnd:
RTS
;==================================================
WriteOnceItem:
JSR IsOverMaxShowItem
BCC WriteOnceItemBeg
RTS
WriteOnceItemBeg:
LDA Item_Show_L
CLC
ADC #<ItemAddr_L
STA FC_Data_L
LDA Item_Show_H
ADC #>ItemAddr_L
STA FC_Data_H
LDY #$00
LDA (FC_Data_L),Y
PHA
LDA Item_Show_L
CLC
ADC #<ItemAddr_H
STA FC_Data_L
LDA Item_Show_H
ADC #>ItemAddr_H
STA FC_Data_H
LDY #$00
LDA (FC_Data_L),Y
STA FC_Data_H
PLA
STA FC_Data_L
LDX FC_PPU_Cursor
LDA #MODE_CNTL
STA FC_PPU_Buffer,X
INX
LDY Item_Update_Index
LDA ItemShowPos_H,Y
STA FC_PPU_Buffer,X
INX
LDA ItemShowPos_L,Y
STA FC_PPU_Buffer,X
INX
LDY #$00
LDA(FC_Data_L),Y
STA FC_Data_Cnt
STA FC_PPU_Buffer,X
INX
INY
WriteText:
.IF ROM_CHAR_MAP
STY FC_Data_Tmp
LDA(FC_Data_L),Y
TAY
LDA Char_Rom,Y
LDY FC_Data_Tmp
.ELSE
LDA(FC_Data_L),Y
.ENDIF
STA FC_PPU_Buffer,X
INX
INY
DEC FC_Data_Cnt
BNE WriteText
STX FC_PPU_Cursor
RTS
;==================================================
CleanOnceItem:
JSR IsOverMaxCleanItem
BCC CleanOnceItemBeg
RTS
CleanOnceItemBeg:
LDA Item_Clean_L
CLC
ADC #<ItemAddr_L
STA FC_Data_L
LDA Item_Clean_H
ADC #>ItemAddr_L
STA FC_Data_H
LDY #$00
LDA (FC_Data_L),Y
PHA
LDA Item_Clean_L
CLC
ADC #<ItemAddr_H
STA FC_Data_L
LDA Item_Clean_H
ADC #>ItemAddr_H
STA FC_Data_H
LDY #$00
LDA (FC_Data_L),Y
STA FC_Data_H
PLA
STA FC_Data_L
LDX FC_PPU_Cursor
LDA #MODE_CNTC
STA FC_PPU_Buffer,X
INX
LDY Item_Update_Index
LDA ItemShowPos_H,Y
STA FC_PPU_Buffer,X
INX
LDA ItemShowPos_L,Y
STA FC_PPU_Buffer,X
INX
LDY #$00
LDA(FC_Data_L),Y
STA FC_PPU_Buffer,X
INX
STX FC_PPU_Cursor
CleanOnceItemEnd:
RTS
;==================================================
;精灵清除
SpriteClear:
LDX #$00
LDA #$F8
SpriteClearWrite:
STA SPRITES_ADDR,X
INX
BNE SpriteClearWrite
RTS
;==================================================
;精灵设置
SpriteSet:
LDA Sel_Cur_L
SEC
SBC Page_Cur_L
ASL
ASL
;ASL
ASL
CLC
ADC #ARROW_Y_OFFSET
STA SPRITES_ADDR
LDA #Char_Arrow
STA SPRITES_ADDR + 1
LDA #$00
STA SPRITES_ADDR + 2
LDA #ARROW_X_OFFSET
STA SPRITES_ADDR + 3
RTS
;==================================================
;调色板数据
PaletteData:
.DB $0F,$24,$2A,$2A,$0F,$20,$25,$25,$0F,$22,$21,$21,$0F,$27,$20,$20
.DB $0F,$20,$16,$17,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F
;==================================================
ItemShowPos_L:
.db $88,$A8,$C8,$E8,$08,$28,$48,$68,$88,$A8,$C8,$E8,$08,$28,$48,$68,$88,$A8,$C8,$E8,$08,$28,$48,$68,$88
ItemShowPos_H:
.db $20,$20,$20,$20,$21,$21,$21,$21,$21,$21,$21,$21,$22,$22,$22,$22,$22,$22,$22,$22,$23,$23,$23,$23,$23
;==================================================
ItemAddr:
ItemAddr_L:
.db <Item_001,<Item_002,<Item_003,<Item_004,<Item_005,<Item_006,<Item_007,<Item_008,<Item_009,<Item_010
.db <Item_011,<Item_012,<Item_013,<Item_014,<Item_015,<Item_016,<Item_017,<Item_018,<Item_019,<Item_020
.db <Item_021,<Item_022,<Item_023,<Item_024,<Item_025,<Item_026,<Item_027,<Item_028,<Item_029,<Item_030
.db <Item_031,<Item_032,<Item_033,<Item_034,<Item_035,<Item_036,<Item_037,<Item_038,<Item_039,<Item_040
.db <Item_041,<Item_042,<Item_043,<Item_044,<Item_045,<Item_046,<Item_047,<Item_048,<Item_049,<Item_050
.db <Item_051,<Item_052,<Item_053,<Item_054,<Item_055,<Item_056,<Item_057,<Item_058,<Item_059,<Item_060
.db <Item_061,<Item_062,<Item_063,<Item_064,<Item_065,<Item_066,<Item_067,<Item_068,<Item_069,<Item_070
.db <Item_071,<Item_072
ItemAddr_H:
.db >Item_001,>Item_002,>Item_003,>Item_004,>Item_005,>Item_006,>Item_007,>Item_008,>Item_009,>Item_010
.db >Item_011,>Item_012,>Item_013,>Item_014,>Item_015,>Item_016,>Item_017,>Item_018,>Item_019,>Item_020
.db >Item_021,>Item_022,>Item_023,>Item_024,>Item_025,>Item_026,>Item_027,>Item_028,>Item_029,>Item_030
.db >Item_031,>Item_032,>Item_033,>Item_034,>Item_035,>Item_036,>Item_037,>Item_038,>Item_039,>Item_040
.db >Item_041,>Item_042,>Item_043,>Item_044,>Item_045,>Item_046,>Item_047,>Item_048,>Item_049,>Item_050
.db >Item_051,>Item_052,>Item_053,>Item_054,>Item_055,>Item_056,>Item_057,>Item_058,>Item_059,>Item_060
.db >Item_061,>Item_062,>Item_063,>Item_064,>Item_065,>Item_066,>Item_067,>Item_068,>Item_069,>Item_070
.db >Item_071,>Item_072
;==================================================
ItemText:
Item_001 .STR "01.REST 01"
Item_002 .STR "02.REST 02"
Item_003 .STR "03.REST 03"
Item_004 .STR "04.REST 04"
Item_005 .STR "05.REST 05"
Item_006 .STR "06.REST 06"
Item_007 .STR "07.REST 07"
Item_008 .STR "08.REST 08"
Item_009 .STR "09.REST 09"
Item_010 .STR "10.REST 10"
Item_011 .STR "11.REST 11"
Item_012 .STR "12.REST 12"
Item_013 .STR "13.REST 13"
Item_014 .STR "14.REST 14"
Item_015 .STR "15.REST 15"
Item_016 .STR "16.REST 16"
Item_017 .STR "17.REST 17"
Item_018 .STR "18.REST 18"
Item_019 .STR "19.REST 19"
Item_020 .STR "20.REST 20"
Item_021 .STR "21.REST 21"
Item_022 .STR "22.REST 22"
Item_023 .STR "23.REST 23"
Item_024 .STR "24.REST 24"
Item_025 .STR "25.REST 25"
Item_026 .STR "26.REST 26"
Item_027 .STR "27.REST 27"
Item_028 .STR "28.REST 28"
Item_029 .STR "29.REST 29"
Item_030 .STR "30.REST 30"
Item_031 .STR "31.REST 31"
Item_032 .STR "32.REST 32"
Item_033 .STR "33.REST 33"
Item_034 .STR "34.REST 34"
Item_035 .STR "35.REST 35"
Item_036 .STR "36.REST 36"
Item_037 .STR "37.REST 37"
Item_038 .STR "38.REST 38"
Item_039 .STR "39.REST 39"
Item_040 .STR "40.REST 40"
Item_041 .STR "41.REST 41"
Item_042 .STR "42.REST 42"
Item_043 .STR "43.REST 43"
Item_044 .STR "44.REST 44"
Item_045 .STR "45.REST 45"
Item_046 .STR "46.REST 46"
Item_047 .STR "47.REST 47"
Item_048 .STR "48.REST 48"
Item_049 .STR "49.REST 49"
Item_050 .STR "50.REST 50"
Item_051 .STR "51.REST 51"
Item_052 .STR "52.REST 52"
Item_053 .STR "53.REST 53"
Item_054 .STR "54.REST 54"
Item_055 .STR "55.REST 55"
Item_056 .STR "56.REST 56"
Item_057 .STR "57.REST 57"
Item_058 .STR "58.REST 58"
Item_059 .STR "59.REST 59"
Item_060 .STR "60.REST 60"
Item_061 .STR "61.REST 61"
Item_062 .STR "62.REST 62"
Item_063 .STR "63.REST 63"
Item_064 .STR "64.REST 64"
Item_065 .STR "65.REST 65"
Item_066 .STR "66.REST 66"
Item_067 .STR "67.REST 67"
Item_068 .STR "68.REST 68"
Item_069 .STR "69.REST 69"
Item_070 .STR "70.REST 70"
Item_071 .STR "71.REST 71"
Item_072 .STR "72.REST 72"
;==================================================
.IF ROM_CHAR_MAP
;==================================================
Char_Rom:
.DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$26,$00
.DB $01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F,$10
.DB $40,$0B,$0C,$0D,$0E,$0F,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19
.DB $1A,$1B,$1C,$1D,$1E,$1F,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29
.ENDIF
.ORG $FF16
;Nmi中断
NmiProgram:
PHA
TXA
PHA
TYA
PHA
LDA FC_Menu_Flag
CMP #FC_MENU_MASK
BEQ NmiProgramSet
JMP ROM_NMI + 5
NmiProgramSet:
LDA $2002
JSR FC_PPU_Process
LDA #SPRITES_PAGE
STA $4014
LDA #$80
STA $2000
JSR ButtonProcess
JSR SelectItemIndex
JSR SpriteSet
.IF SOUND_OPEN
JSR Sound_Play
.ENDIF
PLA
TAY
PLA
TAX
PLA
;==================================================
;Irq中断
IrqProgram:
RTI
.ORG $FFFA
.WORD NmiProgram
.WORD ResetProgram
.WORD IrqProgram