📄 bp.asm
字号:
GetCardMess:
R3=0
R4=0
R5=0x100
CALL PrintNand
R2=0x100
R5=0x10
R3=0
R4=0
CALL ReadNandByteBuf
R2=0x100
R3=CardCheckTab
GetCardMess0:
R1=[R2++]
CMP R1, [R3++]
JNE GetCardMessErr
TEST R2, Bit3
JE GetCardMess0
GetCardMessOk:
R1=[0x10a]
[_HowManyBook]=R1
JE GetCardMessErr
R1-=1
R1=R1 LSL 4
R1=R1 LSL 1
R3=R1+0x98
R4=0
CALL ReadNandAddr
[_CurrentBookAddr]=R3
[_CurrentBookBank]=R4
R1=[_HowManyBook]
R1-=1
R1=R1 LSL 4
R1=R1 LSL 1
R3=R1+0x9c
R4=0
CALL ReadNandAddr
CALL AddBookAddr
R3&=0xc000
R1=0x4000
CALL NandAddrAdd
[_EndAddr]=R3
[_EndBank]=R4
R1=1
RETF
GetCardMessErr:
R3=0x4000
R4=0
[_EndAddr]=R3
[_EndBank]=R4
R1=0
[_HowManyBook]=R1
RETF
CardCheckTab:
.DW 'F'
.DW 'o'
.DW 'r'
.DW 'm'
.DW 'a'
.DW 't'
.DW 'e'
.DW 'd'
InitBook:
R1=1
[_Page]=R1
R1=[_Book]
R1-=1
R1=R1 LSL 4
R1=R1 LSL 1
R3=R1+0x98
R4=0
CALL ReadNandAddr
[_CurrentBookAddr]=R3
[_CurrentBookBank]=R4
R5=0x40
CALL PrintNand
R3=[_CurrentBookAddr]
R4=[_CurrentBookBank]
R2=0x100
R5=0x80
CALL ReadNandByteBuf
InitBookCheck:
R2=DSLStrTab
R3=0x100
R4=0x08
InitBookCheck0:
R1=[R2++]
CMP R1, [R3++]
JNE InitBookCheck1
R4-=1
JNE InitBookCheck0
InitBookCheckOk:
R1=[R3]
R2=0
CMP R1, 0xff
JE InitBookCheck0_
R2=PrintCoordBit
InitBookCheck0_:
[_PrintFlag]=R2
PC=InitDSLBook
InitBookCheck1:
R2=BOBStrTab
R3=0x100
R4=0x08
InitBookCheck10:
R1=[R2++]
CMP R1, [R3++]
JNE InitBookCheck2
R4-=1
JNE InitBookCheck10
JMP InitBookCheckOk
InitBookCheck2:
R2=XYDStrTab
R3=0x100
R4=12
InitBookCheck20:
R1=[R2++]
CMP R1, [R3++]
JNE InitBookCheckErr
R4-=1
JNE InitBookCheck20
PC=InitXYDBook
InitBookCheckErr:
R1=0
RETF
InitXYDBook:
R1=0x100
[_SoundIndex]=R1
R1=XYDBookBit
[_BookMark]=R1
R1=[0x100+FXMinGate]
[_XMinGate]=R1
R1=[0x100+FXMaxGate]
[_XMaxGate]=R1
R1=[0x100+FYMinGate]
[_YMinGate]=R1
R1=[0x100+FYMaxGate]
[_YMaxGate]=R1
R1=[0x100+FXMinValid]
[_XMinValid]=R1
R1=[0x100+FXMaxValid]
[_XMaxValid]=R1
R1=[0x100+FYMinValid]
[_YMinValid]=R1
R1=[0x100+FYMaxValid]
[_YMaxValid]=R1
R5=0x100+FSoundIndexAddr
CALL GetAddr3
CALL AddrChg
CALL AddBookAddr
[_SIAddr]=R3
[_SIAddrB]=R4
R5=0x100+FSpcSoundGroupAddr
CALL GetAddr3
CALL AddrChg
CALL AddBookAddr
[_SSGAddr]=R3
[_SSGAddrB]=R4
R5=0x100+FRandomSoundGroupAddr
CALL GetAddr3
CALL AddrChg
CALL AddBookAddr
[_RSGAddr]=R3
[_RSGAddrB]=R4
R5=0x100+FRandomSoundAddr
CALL GetAddr3
CALL AddrChg
CALL AddBookAddr
[_RSAddr]=R3
[_RSAddrB]=R4
R5=0x100+FUnitOnSound
CALL GetWord
[_Index]=R1
R1=[0x100+FCardMode]
[_CardMode]=R1
RETF
InitDSLBook:
R5=0x100+0x50
CALL GetAddr3
CALL AddBookAddr
[_SIAddr]=R3
[_SIAddrB]=R4
R5=0x100+0x44
CALL GetWord
[_HowManyNormalSound]=R1
R5=0x100+0x46
CALL GetWord
[_HowManySound]=R1
R5=0x100+0x48
CALL GetWord
R1=R1 LSL 1
R1-=1
[_HowManyPage]=R1
R1=PageD2Bit|PageA2Bit
[_Attrib]=R1
R1=0
[_BookMark]=R1
R1=1
[_Page]=R1
[_CardMode]=R1
RETF
DSLStrTab:
.DW 'D'
.DW 'S'
.DW 'L'
.DW 'E'
.DW 'B'
.DW 'O'
.DW 'O'
.DW 'K'
BOBStrTab:
.DW 'B'
.DW 'O'
.DW 'B'
.DW 'E'
.DW 'B'
.DW 'O'
.DW 'O'
.DW 'K'
XYDStrTab:
.DW 'y'
.DW 'z'
.DW 'w'
.DW 's'
.DW 'z'
.DW '@'
.DW '2'
.DW '1'
.DW 'c'
.DW 'n'
.DW '.'
.DW 'c'
.DW 'o'
.DW 'm'
InitCardEdit:
R1=0
[_EditFlag]=R1
R3=[_EndAddr]
R4=[_EndBank]
R4+=2
CMP R4, [_NandMaxBank]
JCC InitCardEdit_
JNE InitCardEditFull
CMP R3, 0x8000
JCC InitCardEdit_
InitCardEditFull:
R1|=NoEditSpaceBit
[_EditFlag]=R1
RETF
InitCardEdit_:
R2=_ContentBuf
R5=0x08
CALL ReadNandWordBuf
InitCardEditCheck:
R2=_ContentBuf
R3=EditCheckTable
InitCardEditCheck0:
R1=[R2++]
CMP R1, [R3++]
JNE InitCardEditInit
TEST R2, Bit3
JE InitCardEditCheck0
RETF
InitCardEditInit:
R3=[_EndAddr]
R4=[_EndBank]
R4+=1
CALL EraseCurrentAddrBlock
R3=[_EndAddr]
R4=[_EndBank]
R4+=1
R2=EditCheckTable
R5=8
CALL WriteNandWordBuf
RETF
EditCheckTable:
.DW 0x55aa
.DW 0xaa55
.DW 0x6445
.DW 0x7469
.DW 0x7a79
.DW 0x2077
.DW 0xaa55
.DW 0x55aa
InitBookPageMode:
R1=3
[_MaxRepeatTime]=R1
R1=[_BookMark]
TEST R1, XYDBookBit
JE InitPageDSL
PC=InitPageXYD
InitPageDSL:
R3=[_Page]
R2=R3 LSL 1
R3+=R2
R3+=0x100
R4=0
CALL AddBookAddr
CALL ReadNandAddr
R4&=0xff
CALL AddBookAddr
[_CurrentPMAddr]=R3
[_CurrentPMBank]=R4
R5=22
R2=_CommBuf
CALL ReadNandByteBuf
R1=[_CommBuf+1]
R1=R1 LSL 4
R3=R1 LSL 4
R3|=[_CommBuf+0]
R4=[_CommBuf+2]
CALL AddBookAddr
[_No1Addr]=R3
[_No1Bank]=R4
R1=[_CommBuf+4]
R1=R1 LSL 4
R3=R1 LSL 4
R3|=[_CommBuf+3]
R4=[_CommBuf+5]
CALL AddBookAddr
[_CoordAddr]=R3
[_CoordBank]=R4
R1=[_CommBuf+7]
R1=R1 LSL 4
R3=R1 LSL 4
R3|=[_CommBuf+6]
R4=[_CommBuf+8]
CALL AddBookAddr
[_No3Addr]=R3
[_No3Bank]=R4
R1=[_CommBuf+10]
R1=R1 LSL 4
R3=R1 LSL 4
R3|=[_CommBuf+9]
R4=[_CommBuf+11]
CALL AddBookAddr
R1=[_CommBuf+13]
R1=R1 LSL 4
R3=R1 LSL 4
R3|=[_CommBuf+12]
R4=[_CommBuf+14]
CALL AddBookAddr
CALL ReadNandWord
CALL NandAddrAdd
[_SoundGroupAddr]=R3
[_SoundGroupBank]=R4
R1=[_CommBuf+16]
R1=R1 LSL 4
R3=R1 LSL 4
R3|=[_CommBuf+15]
R4=[_CommBuf+17]
CALL AddBookAddr
[_No6Addr]=R3
[_No6Bank]=R4
R1=[_CommBuf+20]
R1=R1 LSL 4
R3=R1 LSL 4
R3|=[_CommBuf+19]
R4=[_CommBuf+21]
CALL AddBookAddr
[_No7Addr]=R3
[_No7Bank]=R4
CALL CanselDSLEdit
CALL CanselDSLQuestion
R1=0
[_RecordFlag]=R1
R3=[_No1Addr]
R4=[_No1Bank]
[_PlayAddr]=R3
[_PlayBank]=R4
CALL GetDSLIndex
R1=1
[_PageMaxMode]=R1
PC=GetPageEditMess
InitPageXYD:
R4=0
R3=0x43
CALL AddBookAddr
CALL ReadNandAddr
R4&=0xff
CALL AddrChg
CALL AddBookAddr
[_No1Addr]=R3
[_No1Bank]=R4
R5=8
R2=_NandBuf
CALL ReadNandByteBuf
R1=[_NandBuf+0]
[_HowManyPage]=R1
R1=[_NandBuf+6]
R1&=0x0f
R1=R1 LSL 4
R1=R1 LSL 4
R1|=[_HowManyPage]
[_HowManyPage]=R1
R5=_NandBuf+1
CALL GetWord
[_UnitOffSound]=R1
R1=[_NandBuf+6]
R1&=0xf0
R1= R1 LSR 4
[_Attrib]=R1
R1=[_NandBuf+7]
R1= R2&0xf0
R1|=[_Attrib]
[_Attrib]=R1
R3=[_No1Addr]
R4=[_No1Bank]
R1=8
CALL NandAddrAdd
[_No1Addr]=R3
[_No1Bank]=R4
GetCurrentPMAddr:
R1=[_HowManyPage]
CALL GetRealPage
R1+=3
R1+=[_Page]
R1+=[_Page]
R1+=[_Page]
R1+=[_Page]
R1+=[_Page]
R3=[_No1Addr]
R4=[_No1Bank]
CALL NandAddrAdd
CALL ReadNandAddr
R4&=0xff
CALL AddrChg
CALL AddBookAddr
[_CurrentPMAddr]=R3
[_CurrentPMBank]=R4
R5=8
R2=_NandBuf
CALL ReadNandByteBuf
R1=[_NandBuf+0]
[_BlankFlag]=R1
R1=[_NandBuf+2]
R1=R1 LSL 4
R1=R1 LSL 4
R1|=[_NandBuf+1]
[_BlankSoundIndex]=R1
R1=[_NandBuf+7]
R1=R1 LSL 4
R1=R1 LSL 4
R1|=[_NandBuf+6]
R1&=0x3fff
R3=[_CurrentPMAddr]
R3&=0xc000
R3|=R1
R4=[_CurrentPMBank]
CALL ReadNandByte
[_PageMaxMode]=R1
R3=[_CurrentPMAddr]
R4=[_CurrentPMBank]
R1=8
CALL NandAddrAdd
[_CurrentPMAddr]=R3
[_CurrentPMBank]=R4
GetZeroPMAddr:
R1=[_HowManyPage]
CALL GetRealPage
R1+=3
R3=[_No1Addr]
R4=[_No1Bank]
R3+=R1
CALL ReadNandAddr
R4&=0xff
CALL AddrChg
CALL AddBookAddr
R1=8
CALL NandAddrAdd
[_ZeroPMAddr]=R3
[_ZeroPMBank]=R4
GetPageEditMess:
R1=[_EditFlag]
R1&=HaveEditBlockBit_&HaveEditBit_&PageEditFullBit_
[_EditFlag]=R1
R3=[_No7Addr]
R4=[_No7Bank]
R1=0xffff
CALL CmpWord
CMP R5, 0
JNE GetPageEditMess_
[_HowManyEditBlock]=R5
RETF
GetPageEditMess_:
R1=[_EditFlag]
R1|=HaveEditBlockBit
[_EditFlag]=R1
R5+=1
[_HowManyEditBlock]=R5
R1=[_Book]
R1=R1 LSL 4
R1=R1 LSL 4
R1=R1 LSL 4
R1|=[_Page]
R3=[_EndAddr]
R4=[_EndBank]
R3+=0x10
R4+=1
CALL CmpWord
CMP R1, 0
JNE GetPageEditMessOk
R3=[_EndAddr]
R4=[_EndBank]
R3+=0x10
R4+=1
R1=0xfffe
CALL CmpWord
JMP GetPageEditMessNo
GetPageEditMessOk:
R1=[_EditFlag]
R1|=HaveEditBit
[_EditFlag]=R1
GetPageEditMessNo:
[_EditBlockSerious]=R5
R3=[_EndAddr]
R4=[_EndBank]
R4+=1
R1=R5 LSR 2
R4+=R1
R5&=0x03
JE GetPageEditMessNo_
R1=0
GetPageEditMessNo0:
R1+=0x4000
R5-=1
JNE GetPageEditMessNo0
CALL NandAddrAdd
GetPageEditMessNo_:
R1=0x4000
CALL NandAddrAdd
[_EditOrgAddr]=R3
[_EditOrgBank]=R4
CMP R4, [_NandMaxBank]
JCC GetPageEditMessEnd
R1=[_EditFlag]
R1|=PageEditFullBit
[_EditFlag]=R1
GetPageEditMessEnd:
CALL PrintEditAddr
RETF
CanselSpcFunction:
R1=0
[_RecordFlag]=R1
[_RecordOrgFileNum]=R1
[_RecordFileNum]=R1
[_PlayTotalTime]=R1
CanselSpcFunction_:
R1=0
[_SpecialCause]=R1
[_DealCause]=R1
[_Condition1Serious]=R1
[_Condition2Serious]=R1
[_Condition3Serious]=R1
[_Condition1Bak]=R1
[_Condition2Bak]=R1
[_Condition3Bak]=R1
[_BlockFlag]=R1
[_BlockFlag2]=R1
[_SeriousFlag]=R1
RETF
GetBookAdditionAddr:
R4=[_CurrentBookBank]
R3=[_CurrentBookAddr]
R1=5
CALL NandAddrSub
CALL ReadNandAddr
R4&=0xff
CALL AddrChg
RETF
GetPageAdditionAddr:
R3=[_CurrentPMAddr]
R4=[_CurrentPMBank]
R1=2
CALL NandAddrSub
CALL ReadNandWord
R1&=0x3fff
R3&=0xc000
R3|=R1
RETF
GetRealPage:
R2=[_Attrib]
TEST R2, PageD2Bit
JE GetRealPageEnd
R1+=1
TEST R2, PageA2Bit
JE GetRealPage_
R1+=1
GetRealPage_:
R1=R1 LSR 1
GetRealPageEnd:
RETF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -