📄 dsl.asm
字号:
dEditFinish: .EQU 1
dEditPlayGiven: .EQU 2
dEditHint2: .EQU 3
dEditRecord: .EQU 4
dEditHint: .EQU 5
PlayDSLSoundGroup:
R1=[_PlayBlock]
JE PlayDSLSoundGroupEnd
R4=[_SoundGroupBank]
R3=[_SoundGroupAddr]
R1-=1
R1=R1 LSL 1
CALL NandAddrAdd
CALL ReadNandWord
R4=[_SoundGroupBank]
R3=[_SoundGroupAddr]
CALL NandAddrAdd
[_PlayAddr]=R3
[_PlayBank]=R4
CALL SearchByteFF
R3=[_PlayAddr]
R4=[_PlayBank]
TEST R5, Bit0
JNE PlayDSLSoundGroup2
PlayDSLSoundGroup1:
PC=GetDSLBlock_
PlayDSLSoundGroup2:
PC=GetDSLBlock
PlayDSLSoundGroupEnd:
RETF
PlayDSLSys:
R2=R1 LSL 1
R1+=R2
R1+=0x53
R3=R1
R4=0
CALL AddBookAddr
CALL ReadNandAddr
R4&=0xff
CALL AddBookAddr
GetDSLBlock:
[_PlayAddr]=R3
[_PlayBank]=R4
R2=_CommBuf
R5=0x40
CALL ReadNandByteBuf
CALL PrintDSLCommBlock
R3=[_PlayAddr]
R4=[_PlayBank]
CALL ReadNandByte
CMP R1, 0
JE GetDSLBlockEnd
R2=[_SeriousCount]
CALL GetMod
R1=R1 LSL 1
R1+=1
CALL NandAddrAdd
CALL ReadNandWord
R3=[_PlayAddr]
R4=[_PlayBank]
CALL NandAddrAdd
GetDSLBlock_:
[_PlayAddr]=R3
[_PlayBank]=R4
R1=1
[_InPlayBlock]=R1
GetDSLBlockEnd:
RETF
GetDSLIndex:
R1=0
[_FileOk]=R1
R3=[_PlayAddr]
R4=[_PlayBank]
[_NandAddrL]=R3
[_NandAddrH]=R4
CALL SetSearchingAddr
R5=R3|0xfe00
JMP GetDSLIndex1
GetDSLIndex0:
R5+=1
JCC GetDSLIndex1
CALL ChgSearchingAddr
GetDSLIndex1:
RBYTE_
[_Tmp1]=R1
R5+=1
JCC GetDSLIndex2
CALL ChgSearchingAddr
GetDSLIndex2:
RBYTE_
[_Tmp3]=R1
R1 = R1 LSL 4
R1 = R1 LSL 4
R1|=[_Tmp1]
[_Tmp2]=R1
R1=[_Tmp1]
CMP R1, 0xc8
JNB GetDSLIndexSpc
PC=GetDSLIndexNor
GetDSLIndexSpc:
CMP R1, 0xff
JNE GetDSLIndexSpc_1
PC=GetDSLIndexFinish
GetDSLIndexSpc_1:
CMP R1, 0xc8
JNE GetDSLIndexSpc_2
GetDSLIndexSpcC8:
R1=[_Tmp3]
R1=R1 LSR 1
[_BackDelayTime]=R1
PC=GetDSLIndex0
GetDSLIndexSpc_2:
CMP R1, 0xce
JNE GetDSLIndexSpc_3
GetDSLIndexSpcCE:
PC=GetDSLIndexFinish
GetDSLIndexSpc_3:
CMP R1, 0xca
JNE GetDSLIndexSpc_4
GetDSLIndexSpcCA:
R1=[_Tmp3]
TEST R1, Bit1
JNE GetDSLIndexSpcCA2
GetDSLIndexSpcCA1:
R1=[_Attrib]
R1&=DSLGroupBit_
[_Attrib]=R1
JMP GetDSLIndexSpc_4
GetDSLIndexSpcCA2:
R1=[_Attrib]
R1|=DSLGroupBit
[_Attrib]=R1
GetDSLIndexSpc_4:
PC=GetDSLIndex0
GetDSLIndexNor:
R1=[_FileOk]
CMP R1,0
JNE GetDSLIndexOk
R1=[_Tmp2]
[_Index]=R1
R1=1
[_FileOk]=R1
PC=GetDSLIndex0
GetDSLIndexOk:
R3=[_NandAddrL]
R4=[_NandAddrH]
R3&=0xfe00
R5&=0x1ff
R3|=R5
R1=1
CALL NandAddrSub
[_PlayAddr]=R3
[_PlayBank]=R4
JMP GetDSLIndexEnd
GetDSLIndexFinish:
R1=0
[_InPlayBlock]=R1
R1=[_SeriousFlag]
R1&=ExplainBit_
[_SeriousFlag]=R1
GetDSLIndexEnd:
DATAOUT
R1=[_Index]
RETF
GetDSLQuestion:
R1=[_QuestionFlag]
TEST R1, HaveSelectionQuestionBit
JE GetDSLQuestion1
R1&=QuestionDiCoordBit_
[_QuestionFlag]=R1
RETF
GetDSLQuestion1:
R1=[_QuestionIndex]
CMP R1, [_QuestionNumber]
JNE GetDSLQuestion2
GetDSLQuestionFinish:
R1=[_SeriousFlag]
R1&=SeriousSelectionBit_
[_SeriousFlag]=R1
R3=[_No6Addr]
R4=[_No6Bank]
PC=GetDSLBlock_
GetDSLQuestion2:
R1+=1
[_QuestionIndex]=R1
R1=[_SelectionSerious]
R1+=1
CMP R1, [_QuestionNumber]
JNE GetDSLQuestion3
R1=0
GetDSLQuestion3:
[_SelectionSerious]=R1
R1=3
[_ErrTime]=R1
GetDSLQuestion4:
R1=[_QuestionFlag]
R1|=HaveSelectionQuestionBit|QuestionDiCoordBit
[_QuestionFlag]=R1
R3=[_No3Addr]
R4=[_No3Bank]
R1=8
CALL NandAddrAdd
CALL ReadNandWord
R3=[_No3Addr]
R4=[_No3Bank]
CALL NandAddrAdd
CALL SkipWordFF
CALL NandAddrInc
[_PlayAddr]=R3
[_PlayBank]=R4
//; R1=0
//; [_SelectionSerious]=R1
//; CALL TxChg
//; R1=[_SelectionSerious]
//; CALL TxHex
R1=[_SelectionSerious]
R1=R1 LSL 1
R1+=1
CALL NandAddrAdd
//; R1=R4
//; CALL TxWord
//; R1=R3
//; CALL TxWord
CALL ReadNandWord
R3=[_PlayAddr]
R4=[_PlayBank]
CALL NandAddrAdd
//; R1=R4
//; CALL TxWord
//; R1=R3
//; CALL TxWord
R1=9
CALL NandAddrAdd
[_QuestionAddr]=R3
[_QuestionBank]=R4
R1=9
CALL NandAddrSub
// R1=R4
//; CALL TxWord
//; R1=R3
//; CALL TxWord
CALL ReadNandWord
CALL NandAddrAdd
//;R1=R4
//;CALL TxWord
//;R1=R3
//;CALL TxWord
CALL GetDSLBlock_
//;R1=R4
//;CALL TxWord
//;R1=R3
//;CALL TxWord
//;R1=[_QuestionBank]
//;CALL TxWord
//;R1=[_QuestionAddr]
//;CALL TxWord
RETF
GetRecPlayBlock:
DSLRec:
R1=[_RecordFlag]
TEST R1, InRecModeBit
JNE DSLRec1
DSLRecNo:
DSLRecEnd:
R1=0
RETF
DSLRec1:
TEST R1, ToRecordBit
JNE DSLRecToRecord
TEST R1, ToPlayRecordBit
JNE DSLRecPlayRecord
TEST R1, ToPlaySoundBit
JNE DSLRecPlaySound
TEST R1, InPlayRecBit
JNE DSLRecPlaySound
TEST R1, InPlaySoundBit
JE DSLRecEnd
R2=[_BookMark]
TEST R2, XYDBookBit
JNE DSLRecPlaySoundXYD
DSLRecPlayRecord:
TEST R1, HadRecBit
JE DSLRecPlaySound
R1&=RecAllBit_
R1|=InPlayBit|InPlayRecBit
[_RecordFlag]=R1
CALL DTPlayRecStatu
R1 = [_EndAddr]
[_PlayStartAddr] = R1
R1 = [_EndBank]
[_PlayStartBank] = R1
CALL _RecPlay
R1=dPlayRecord
RETF
DSLRecToRecord:
R1&=RecAllBit_
R1|=HadRecBit
[_RecordFlag]=R1
CALL NormalRecord
R1=dRecord
RETF
DSLRecPlaySound:
R2=[_RepeatTime]
JE DSLRecPlaySound_
R2-=1
[_RepeatTime]=R2
JNE DSLRecPlaySound_
R1&=InRecModeBit_
[_RecordFlag]=R1
JMP DSLRecEnd
DSLRecPlaySound_:
TEST R1, HadSoundBit
JE DSLRecPlayRecord
R1&=RecAllBit_
R1|=InPlayBit|InPlaySoundBit
[_RecordFlag]=R1
CALL DTSourceStatu
R1=[_BookMark]
TEST R1, XYDBookBit
JE DSLRecPlaySoundDSL
DSLRecPlaySoundXYDOrg:
R1=[_RecordOrgFileNum]
[_PlayFileNum]=R1
DSLRecPlaySoundXYD:
R2=[_PlayFileNum]
CMP R2, [_RecordFileNum]
JNE DSLRecPlaySoundXYD_
R1=[_RecordFlag]
PC=DSLRecPlayRecord
DSLRecPlaySoundXYD_:
R1=R2+1
CMP R1, RegistRecNumMax
JNE DSLRecPlaySoundXYD__
R1=0
DSLRecPlaySoundXYD__:
[_PlayFileNum]=R1
R2+=_RecSoundIndexBuf
R1=[R2]
[_Index]=R1
R1=[_SysFlagA]
R1|=PlayIndexBit
[_SysFlagA]=R1
R1=dPlaySound
RETF
DSLRecPlaySoundDSL:
R3=[_RecRegAddr]
R4=[_RecRegBank]
CALL GetDSLBlock_
R1=dPlaySound
RETF
DSLEdit:
TEST R1, ToHintBit
JNE DSLEditHint
PC=DSLManuEdit2
DSLEditHint:
R1|=ToEditBit
R1&=ToHintBit_
[_EditFlag]=R1
DSLEditHint_:
R3=[_CurrentEditAddr]
R4=[_CurrentEditBank]
[_RecOrgAddr]=R3
[_RecOrgBank]=R4
R3+=[_PlayLengthL]
R4+=[_PlayLengthH], Carry
R3+=[_PlayLengthL]
R4+=[_PlayLengthH], Carry
[_RecEndAddr]=R3
[_RecEndBank]=R4
CMP R4, [_NandMaxBank]
JCC DSLEditErase
PC=DSLEditFinish
DSLEditErase:
R3=[_CurrentEditAddr]
R4=[_CurrentEditBank]
R3&=0xc000
DSLEditErase0:
R3+=0x4000
R4+=0,Carry
CMP R4, [_RecEndBank]
JA DSLEditHintDo
JB DSLEditErase_
CMP R3, [_RecEndAddr]
JNB DSLEditHintDo
DSLEditErase_:
CALL EraseCurrentAddrBlock
R1|=[_EditBlockNumber]
R1+=1
[_EditBlockNumber]=R1
CALL ClearWatchDog
JMP DSLEditErase0
DSLEditHintDo:
R3=[_RecEndAddr]
R4=[_RecEndBank]
R1=0x200
CALL NandAddrSub
[_RecEndAddr]=R3
[_RecEndBank]=R4
DSLEditHintEnd:
R1=16
CALL PlayDSLSys
R1=dEditHint
RETF
DSLManuEdit2:
TEST R1, ToEditBit
JE DSLManuEdit3
DSLEditRecord:
R1&=ToEditBit_
R1|=ToRegBit
[_EditFlag]=R1
DSLEditRecord_:
CALL PrintEdit
CALL _RecStart
R1=dEditRecord
RETF
DSLManuEdit3:
TEST R1, ToPlayGiveEditBit
JE DSLManuEdit4
R1&=ToPlayGiveEditBit_
R1|=ToHintBit
[_EditFlag]=R1
PC=DSLEditPlay
DSLManuEdit4:
TEST R1, ToRegBit
JNE DSLEditReg
DSLManuEditEnd:
R1=0
RETF
DSLEditReg:
R1&=ToRegBit_
R1|=HaveEditBit
[_EditFlag]=R1
DSLEditReg_:
R3=[_EditOrgAddr]
R4=[_EditOrgBank]
R1=[_FileIndex]
R1=R1 LSL 1
CALL NandAddrAdd
R5=1
R2=_PlayBlock
CALL WriteNandWordBuf
R3=[_EditOrgAddr]
R4=[_EditOrgBank]
R1=[_HowManyEditBlock]
R1=R1 LSL 1
CALL NandAddrAdd
R1=[_FileIndex]
R1=R1 LSL 2
CALL NandAddrAdd
R2=_CurrentEditAddr
R5=2
CALL WriteNandWordBuf
R3=[_RecEndAddr]
R4=[_RecEndBank]
R1=0x200
CALL NandAddrAdd
[_CurrentEditAddr]=R3
[_CurrentEditBank]=R4
R1=[_FileIndex]
R1+=1
[_FileIndex]=R1
R1=[_EditFlag]
TEST R1,AutoEditBit
JE DSLEditRegEnd
DSLEditPlay:
R1=0
[_PlayLengthL]=R1
[_PlayLengthH]=R1
R3=[_No7Addr]
R4=[_No7Bank]
R1=[_FileIndex]
R1=R1 LSL 1
CALL NandAddrAdd
CALL ReadNandWord
CMP R1, 0xffff
JNE DSLEditPlay_
DSLEditFinish:
R1=[_EditFlag]
R1&=InEditBit_
[_EditFlag]=R1
CALL RDKeyPlayEdit3
R1=dEditFinish
RETF
DSLEditPlay_:
[_PlayBlock]=R1
R1=0
[_SeriousCount]=R1
CALL PlayDSLSoundGroup
R1=[_EditFlag]
R1|=ToHintBit
[_EditFlag]=R1
R1=dEditPlayGiven
RETF
DSLEditRegEnd:
R1=16
CALL PlayDSLSys
R1=dEditHint2
RETF
EndEdit:
R1=[_EditFlag]
TEST R1, InEditBit
JNE EndEdit_
RETF
EndEdit_:
R3=[_EndAddr]
R4=[_EndBank]
R4+=1
R2=_ContentBuf
R5=0x400
CALL ReadNandWordBuf
R3=[_EndAddr]
R4=[_EndBank]
R4+=1
CALL EraseCurrentAddrBlock
R3=_ContentBuf+8
R3+=[_EditBlockSerious]
R2=[_EditBlockNumber]
R1=0xfffe
R5=[_FileIndex]
JE EndEdit2
R1=[_Book]
R1=R1 LSL 4
R1=R1 LSL 4
R1=R1 LSL 4
R1|=[_Page]
EndEdit2:
[R3++]=R1
EndEdit20:
R2-=1
JE EndEdit5
R1=0xfffd
[R3++]=R1
JMP EndEdit20
EndEdit5: // marked with 0xfffe
R1=[R3]
CMP R1, 0xffff
JE EndEdit6
CMP R1, 0xfffd
JCC EndEdit6
EndEdit5_: // marked with 0xfffe
R1=0xfffe
[R3++]=R1
JMP EndEdit5
EndEdit6:
R3=[_EndAddr]
R4=[_EndBank]
R4+=1
R2=_ContentBuf
R5=0x400
CALL WriteNandWordBuf
CALL PrintEditReg
RETF
CanselDSLEdit:
CALL EndEdit
R1=[_EditFlag]
R1&=InEditBit_&EditModeBit_
[_EditFlag]=R1
RETF
CanselDSLQuestion:
R1=[_SeriousFlag]
R1&=SeriousSelectionBit_
[_SeriousFlag]=R1
RETF
CanselDSLExplain:
R1=[_SeriousFlag]
R1&=ExplainBit_
[_SeriousFlag]=R1
RETF
CanselDSLInt:
R1=0
[_IntFileIndex]=R1
RETF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -