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

📄 dsl.asm

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