📄 index.asm
字号:
/////////////// 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 + -