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

📄 index.asm

📁 完整的方案
💻 ASM
📖 第 1 页 / 共 3 页
字号:
/////////////// 0xfe ////////////////////
FSLink1Addr:
         R4=[_PlayBank]
         R3=[_PlayAddr]
         R3&=0xc000
         R1=[FileSerious]
         R1&=0x3fff
         R3|=R1
FSLinkAddrDo:     
         CALL ReadNandByte
         [_FileNumber]=R1
         CALL NandAddrInc
         [_PlayAddr]=R3
         [_PlayBank]=R4
         R1=1
         [_InPlayBlock]=R1
         R1=0
         [_FileIndex]=R1
         R1=1
         [_InPlayBlock]=R1
         R1=0
         [_FileIndex]=R1
//         R1=[_CardMode]
//         CMP R1, NormalMode
//         JE FSLink1Addr_
//         R1=[_PrintFlag]
//         TEST R1, PrintBlockBit
//         JE FSLink1Addr_
FSLink1Addr_:
         PC=GetPlayIndexIn

//--------- Module for Cause and effect -----------
//-------------------------------------------------
FSCauseAndEffectTab:
         .DW   FSCauseAndEffect0
         .DW   FSCauseAndEffect1
         .DW   FSCauseAndEffect2
         .DW   FSCauseAndEffect3
         .DW   FSCauseAndEffect4
         .DW   FSCauseAndEffect5
         .DW   GetPlayIndex0
         .DW   GetPlayIndex0

FSCauseAndEffect0:
         PC=FSCAEGetCause

FSCauseAndEffect1:
         R2=[_SpecialCause]
         JE FSCAEGetCause
         CMP R1,R2
         JNE FSCAEGetEffectEndCause
         JMP FSCAEGetCause

FSCauseAndEffect2:
         R2=[_SpecialCause]
         JE FSCAEGetCause
         JMP FSCAEGetEffectEndCause

FSCauseAndEffect3:
         R2=[_SpecialCause]
         JE FSCAEGetCause
         CMP R1,R2
         JNE FSCAEGetEffectWithCause
         JMP FSCAEGetCause

FSCauseAndEffect4:
         R2=[_SpecialCause]
         JE FSCAEGetCause
         JMP FSCAEGetEffectWithCause

FSCauseAndEffect5:
         R2=[_SpecialCause]
         JNE FSCAEGetEffectEndCause
         PC=GetPlayIndex0

FSCAEGetEffectWithCause:
         R3|=CAECauseBit
         R3|=CAEEffectBit
         R2=[_SpecialCause]
         [_DealCause]=R2
         [_SpecialCause]=R1
         [_BlockFlag]=R3
         PC=GetPlayIndex0

FSCAEGetEffectEndCause:
         R3|=CAECauseBit
         R3|=CAEEffectBit
         [_BlockFlag]=R3
         R1=[_SpecialCause]
         [_DealCause]=R1
         R1=0
         [_SpecialCause]=R1
         PC=GetPlayIndex0

FSCAEGetCause:
         R3&=CAEEffectBit_
         R3|=CAECauseBit
         [_BlockFlag]=R3
         [_SpecialCause]=R1
         R1=0
         [_DealCause]=R1
         PC=GetPlayIndex0

FSCAEGetEffectNoCause:
         R3&=CAEEffectBit_
         R3&=CAECauseBit_
         [_BlockFlag]=R3
         R1=0
         [_SpecialCause]=R1
         [_DealCause]=R1
         PC=GetPlayIndex0


FSConditionTab:
         .DW   FSCondition0
         .DW   FSCondition1
         .DW   FSCondition2
         .DW   FSCondition3
         .DW   FSCondition4
         .DW   FSCondition5
         .DW   FSCondition6
         .DW   FSCondition7

FSCondition0:
         TEST R1, Bit0
         JE FSCondition0_
         PC=FSConditionError
FSCondition0_:         
         TEST R1, Bit1
         JNE FSCondition0Indirect
FSCondition0Direct:
FSCondition11Direct:
FSCondition31Direct:
FSCondition71Direct:
         [_Condition1Serious]=R2
         R2=0
         [_Condition1Bak]=R2
         [_Condition2Bak]=R2
         [_Condition3Bak]=R2
         [_Condition2Serious]=R2
         [_Condition3Serious]=R2
         PC=FSConditionEnd


FSCondition1:
         TEST R1, Bit2
         JE FSCondition12
         TEST R1, Bit0
         JNE FSConditionError
FSCondition11:
FSCondition31:
FSCondition71:
         TEST R1, Bit1
         JE FSCondition11Direct
FSCondition11Indirect:
FSCondition31Indirect:
FSCondition71Indirect:
         TEST R1, Bit6
         JE FSConditionError
FSCondition0Indirect:
         [_Condition1Bak]=R2
         R2=0
         [_Condition1Serious]=R2
         [_Condition2Serious]=R2
         [_Condition3Serious]=R2
         [_Condition2Bak]=R2
         [_Condition3Bak]=R2
         JMP FSConditionEnd

FSCondition12:
         TEST R1, Bit3
         JNE FSCondition12Indirect
FSCondition12Direct:
FSCondition32Direct:
FSCondition72Direct:
         [_Condition2Serious]=R2
         R2=0
         [_Condition1Bak]=R2
         [_Condition2Bak]=R2
         [_Condition3Bak]=R2
         [_Condition3Serious]=R2
         JMP FSConditionEnd
FSCondition12Indirect:
FSCondition32Indirect:
FSCondition72Indirect:
         [_Condition2Bak]=R2
         R2=0
         [_Condition1Bak]=R2
         [_Condition3Bak]=R2
         [_Condition2Serious]=R2
         [_Condition3Serious]=R2
         JMP FSConditionEnd

FSCondition2:
FSCondition4:
FSCondition5:
FSCondition6:
FSConditionError:
         R2=0
         [_Condition1Serious]=R2
         [_Condition2Serious]=R2
         [_Condition3Serious]=R2
         [_Condition1Bak]=R2
         [_Condition2Bak]=R2
         [_Condition3Bak]=R2
         R1=[_BlockFlag]
         R1&=ConditionBit_
         [_BlockFlag]=R1
FSConditionEnd:
         PC=GetPlayIndex0

FSCondition3:
         TEST R1, Bit4
         JE FSCondition33
         TEST R1, Bit0
         JNE FSConditionError
         PC=FSCondition31

FSCondition33:
         TEST R1, Bit5
         JNE FSCondition33Indirect
FSCondition33Direct:
FSCondition73Direct:
         [_Condition3Serious]=R2
         R2=0
         [_Condition1Bak]=R2
         [_Condition2Bak]=R2
         [_Condition3Bak]=R2
         JMP FSConditionEnd
FSCondition33Indirect:
FSCondition73Indirect:
         [_Condition3Bak]=R2
         R1=0
         [_Condition1Bak]=R1
         [_Condition2Bak]=R1
         JMP FSConditionEnd

FSCondition7:
         TEST R1, Bit0
         JNE FSConditionError
         PC=FSCondition71

//-------------- some sever program ---------------
BlockAttrib:
         R3=[_BlockFlag]
         TEST R3, AttribHadDealBit
         JE BlockAttrib_
         RETF
BlockAttrib_:
         R3|=AttribHadDealBit
         R2=[_SeriousFlag]

BlockAttribSelect:
         TEST R2,SeriousSelectionBit
         JE BlockAttribLink
         TEST R3,AnswerRelevantBit
         JNE BlockAttribSelectionRelevant
         TEST R3,AnswerIrrelevantBit
         JNE BlockAttribSelectionIrrelevant
         TEST R3,HaveSelectionQuestionBit
         JNE BlockAttribLink

BlockAttribSelectionInvalid:
         R3|=HaveSelectionQuestionBit
         R1=[_PageModeAttrib]
         TEST R1,PMSQInvalidRetBit
         JNE BlockAttribLink
         JMP BlockAttribSelectionRet

BlockAttribSelectionRelevant:
         R3|=HaveSelectionQuestionBit
         TEST R3, AnswerRetBit
         JNE BlockAttribSelectionRet
         TEST R3, AnswerCorrectBit
         JNE BlockAttribLink

BlockAttribSelectionIrrelevant:
BlockAttribSelectionError:
         R3|=HaveSelectionQuestionBit
         R1=[_ErrRetTime]
         CMP R1,[_ErrTime]
         JNE BlockAttribLink
BlockAttribSelectionRet:
         R3|=AnswerRetBit
         R2&=SeriousSelectionBit_

BlockAttribLink:
         TEST R2,SeriousInLinkBit
         JE BlockAttribCondition
         TEST R3,BlockInLinkBit
         JE BlockAttribLinkInvalid
         TEST R3,BlockEndLinkBit
         JNE BlockAttribLinkCansel
         JMP BlockAttribCondition

BlockAttribLinkInvalid:
         R1=[_PageModeAttrib]
         TEST R1,PMLinkInvalidRetBit
         JNE BlockAttribCondition
         TEST R3,BackGroundBit
         JNE BlockAttribCondition
         R3|=BlockInLinkBit
         R3|=BlockErrLinkBit
         R3|=BlockEndLinkBit
BlockAttribLinkCansel:
         R2&=SeriousInLinkBit_
BlockAttribCondition:
         TEST R3,ConditionBit
         JNE BlockAttribCAE
         R1=[_PageModeAttrib]
         TEST R1, ConditionInvalidRetBit
         JNE BlockAttribCAE
         R1=0
         [_Condition1Serious]=R1
         [_Condition2Serious]=R1
         [_Condition3Serious]=R1
         [_Condition1Bak]=R1
         [_Condition2Bak]=R1
         [_Condition3Bak]=R1
BlockAttribCAE:
         TEST R3, CAEMask
         JNE BlockAttribSerious
         TEST R3,BackGroundBit
         JNE BlockAttribSerious
         R1=0
         [_SpecialCause]=R1
         [_DealCause]=R1
BlockAttribSerious:
//         R1=[_PrevPlayBlock]
//         CMP R1,[_PlayBlock]
//         JNE BlockAttribEnd
//         R3|=SeriousPlayBit
BlockAttribEnd:
         [_SeriousFlag]=R2
         [_BlockFlag]=R3
         RETF

StoreNearLinkBlock:
         R3=[_NearLinkBlock1]
         R3&=0xff
         JNE StoreNearLinkBlock2
         R3=[_NearLinkBlock1]
         R1|=R3
         [_NearLinkBlock1]=R1
         RETF
StoreNearLinkBlock2:
         R3=[_NearLinkBlock1]
         R3&=0xff00
         JNE StoreNearLinkBlock3
         R3=[_NearLinkBlock1]
         R1=R1 LSL 4
         R1=R1 LSL 4
         R1|=R3
         [_NearLinkBlock1]=R1
         RETF
StoreNearLinkBlock3:
         R3=[_NearLinkBlock2]
         R3&=0xff
         JNE StoreNearLinkBlock4
         R3=[_NearLinkBlock2]
         R1|=R3
         [_NearLinkBlock2]=R1
         RETF
StoreNearLinkBlock4:
         R3=[_NearLinkBlock2]
         R3&=0xff00
         JNE StoreNearLinkBlock5
         R3=[_NearLinkBlock2]
         R1=R1 LSL 4
         R1=R1 LSL 4
         R1|=R3
         [_NearLinkBlock2]=R1
         RETF
StoreNearLinkBlock5:
         R3=[_NearLinkBlock3]
         R3&=0xff
         JNE StoreNearLinkBlock6
         R3=[_NearLinkBlock3]
         R1|=R3
         [_NearLinkBlock3]=R1
         RETF
StoreNearLinkBlock6:
         R3=[_NearLinkBlock3]
         R1=R1 LSL 4
         R1=R1 LSL 4
         R1|=R3
         [_NearLinkBlock3]=R1
         RETF


GetBitNum:
         R3=16
         R1=0
GetBitNum0:
         TEST R2, Bit0
         JE GetBitNum1
         R1+=1
GetBitNum1:
         R2=R2 LSR 1
         R3-=1
         JNE GetBitNum0
         RETF

RegistRecMess:
         R3=[_RecordFlag]
         TEST R3, RecordBlockBit
         JNE RegistRecMessEnd
         TEST R3, InRecModeBit
         JNE RegistRecMessEnd
RegistRecMess_:
         R3=[_RecordFileNum]
         R3+=_RecSoundIndexBuf
         [R3]=R1
         R3=[_RecordFileNum]
         R3+=_RecSoundModeBuf
         [R3]=R2
         R3=[_RecordFileNum]
         R3+=1
         CMP R3, RegistRecNumMax
         JNE RegistRecMess1
         R3=0
RegistRecMess1:
         [_RecordFileNum]=R3
         CMP R3, [_RecordOrgFileNum]
         JNE RegistRecMessEnd
         R3+=1
         CMP R3, RegistRecNumMax
         JNE RegistRecMess2
         R3=0
RegistRecMess2:
         [_RecordOrgFileNum]=R3
RegistRecMessEnd:
         RETF


BlockLinkTest:
         R1=[FileSeriousL]
         CMP R1,[_CurrentLinkBlock]
         JE BlockLinkTestOk
         R2=[_NearLinkBlock1]
         R2&=0xff
         CMP R1, R2
         JE BlockLinkTestOk
         R2=[_NearLinkBlock1]
         R2 = R2 LSR 4
         R2 = R2 LSR 4
         CMP R1, R2
         JE BlockLinkTestOk

         R2=[_NearLinkBlock2]
         R2&=0xff
         CMP R1, R2
         JE BlockLinkTestOk
         R2=[_NearLinkBlock2]
         R2 = R2 LSR 4
         R2 = R2 LSR 4
         CMP R1, R2
         JE BlockLinkTestOk

         R2=[_NearLinkBlock3]
         R2&=0xff
         CMP R1, R2
         JE BlockLinkTestOk
         R2=[_NearLinkBlock3]
         R2 = R2 LSR 4
         R2 = R2 LSR 4
         CMP R1, R2
         JE BlockLinkTestOk
BlockLinkTestErr:
         R1=0
         RETF
BlockLinkTestOk:
         R1=1
         RETF

⌨️ 快捷键说明

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