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

📄 bp.asm

📁 完整的方案
💻 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 + -