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

📄 disp.asm

📁 完整的方案
💻 ASM
字号:
//Page:                          .EQU 0x0000    // Max page
DTVMHead:                        .EQU 0x1000    // Volume & Max mode
//Attrib:                        .EQU 0x2000
DTStatuHead:                     .EQU 0x3000    // Statu
DTPageHead:                      .EQU 0x4000
DTModeHead:                      .EQU 0x5000
DTRepeatTimeHead:                .EQU 0x6000
DTBookHead:                      .EQU 0x7000

DTxWait:                         .EQU 0
DTDly:                           .EQU 0x8000
DRDly:                           .EQU 0x4000

dRDNoSignErr:                    .EQU 1
dRDWLErr:                        .EQU 2
dRDWHErr:                        .EQU 3
dRdCheckErr:                     .EQU 4
dRDInvalidErr:                   .EQU 5

dDTBodyBusy:                     .EQU 1
dDTAckErr:                       .EQU 2
dDTxWaitLoErr:                   .EQU 3
dDTxWaitHiErr:                   .EQU 4
//0 RDPage
//1 RDMode
//2 RDVolume
//3 RDSet
//4 RDKey
//5 RDMaxRep
//6 RDSet2
//7 RD
.INCLUDE DPTX.ASM

ComRD:
         R1=[P_IOA_Data]
         TEST R1, DClkB
         JE ComRD_
ComRDErr1:
         R1=dRDNoSignErr
         RETF
ComRD_:
         R3=0
         R5=0
         R4=16
         JMP ComRD2
ComRD0:
         R3=R3 LSL 1
         R1= DRDly
ComRD1:
         R1-=1
         JNE ComRD1_
         R1=dRDWLErr
         PC=RDErr
ComRD1_:
         R2=[P_IOA_Data]
         TEST R2, DClkB                //  Clk=0
         JNE ComRD1
ComRD2:
         R2=[P_IOA_Data]
         TEST R2, DDatB
         JNE ComRDHi
ComRDLo:
         R3&=Bit0_
         CMP  R4, 16
         JE ComRD2_
         CMP R4, 3
         JB ComRD2_
         R5^=Bit0
         JMP ComRD2_
ComRDHi:
         R3|=Bit0
         CMP  R4, 16
         JE ComRD2_
         CMP R4, 3
         JB ComRD2_
         R5^=Bit1
         JB ComRD2_
ComRD2_:
         R2=[P_IOA_Buffer]
         R2&=DAckB_                     //  Ack=0
         [P_IOA_Buffer]=R2
         R1= DRDly
ComRD3:
         R1-=1
         JNE ComRD3_
         R1=dRDWHErr
         JMP RDErr

ComRD3_:
         R2=[P_IOA_Data]
         TEST R2, DClkB                 //  Clk=1
         JE ComRD3
         R2=[P_IOA_Buffer]
         R2|=DAckB                      //  Ack=1
         [P_IOA_Buffer]=R2
         R4-=1
         JNE ComRD0 
         R5^=R3
         R5&=0x03
         JE RDDeal
         R1=dRdCheckErr

RDErr:
         R4=R1
         R2=[P_IOA_Buffer]
         R2|=DAckB                      //  Ack=1
         [P_IOA_Buffer]=R2
RDErr_:
         R1= DRDly
RDErr0:
         R2=[P_IOA_Data]
         TEST R2, DClkB                 //  Clk=1
         JE RDErr_
         R1-=1
         JNE RDErr0
         CALL PrintRDErr
         R1=R4
         RETF


RDDeal:
         [_Tmp1]=R3
         R1=0xffff
         [_PlayBlock]=R1
         CALL SoundAllStop
         CALL CanselDSLEdit
         CALL CanselDSLQuestion
         CALL PrintRDData
         CALL CanselDSLExplain
         CALL CanselDSLInt
         R1=0
         [_TimeCtrCount]=R1
         [_AutoOffTime]=R1
         [_BlockFlag]=R1
         R1=[_Statu]
         R1&=DynamicBit_
         [_Statu]=R1
         R3=[_Tmp1]
         R1=R3&0x7000
         R1=R1 LSR 4
         R1=R1 LSR 4
         R1=R1 LSR 4
         R1+=RDDealTab
         PC=[R1]
RDDealTab:
         .DW RDPage
         .DW RDMode
         .DW RDVolume
         .DW RDSet
         .DW RDKey
         .DW RDMaxRep
         .DW RDBook
         .DW RDSoundSpeed

RDBook:
         R1=R3&0x00f0
         R1=R1 LSR 4
         CMP R1, [_HowManyBook]
         JA RDBookEnd
         [_Book]=R1
         CALL InitBook
         CALL InitBookPageMode
         R1=0
         [_RecordFlag]=R1
         R4=[_HowManyPage]
         R4=R4 LSL 2
         CALL DTBody
         CALL Delay50ms
         CALL Delay16ms
         CALL DTVM
         CALL Delay50ms
         CALL Delay16ms
         R1=0
         CALL PlayDSLSys
RDBookEnd:
         RETF


RDPage:
         R1=R3&0x0ffc
         R1=R1 LSR 2
         CMP R1, [_HowManyPage]
         JCC RDPage0
         R1=[_HowManyPage]
RDPage0:
         CALL GetRealPage
         [_Page]=R1
         R1=1
         [_PlayMode]=R1
         CALL InitBookPageMode
         CALL DTVM
         CALL Delay50ms
         CALL Delay50ms
         R1=[_BookMark]
         TEST R1, XYDBookBit
         JNE RDPageXYD
RDPageDSL:
         R1=0
         [_RecordFlag]=R1
         R3=[_No1Addr]
         R4=[_No1Bank]
         CALL GetDSLBlock_
         RETF
RDPageXYD:
         R4=[_CurrentBookBank]
         R3=[_CurrentBookAddr]
         R3+=0x43
         CALL ReadNandAddr
         R4&=0xff
         CALL AddrChg
         CALL AddBookAddr
         R1=3
         CALL NandAddrAdd
         CALL ReadNandAddr
         R4&=0xff
         CALL AddrChg
         CALL AddBookAddr
         R1=16
         CALL NandAddrAdd
         CALL PlayXYDBlock
         RETF


RDVolume:
         R1=R3&0x0ffc
         R1=R1 LSR 4
         [_SoundVolume]=R1
         R1=2
         CALL PlayDSLSys
         RETF
RDSoundSpeed:
         R1=R3&0x0ff0
         R1=R1 LSR 4
         TEST R1, Bit7
         JE RDSoundSpeedAdd
RDSoundSpeedSub:
         R1&=0xff
         CMP R1, 0xf5
         JA RDSoundSpeedSub_
         R1=0xf5
RDSoundSpeedSub_:
         R1|=0xff00
         JMP RDSoundSpeed_
RDSoundSpeedAdd:
         R1=R1 LSR 1
         CMP R1, 7
         JB RDSoundSpeed_
         R1=6
RDSoundSpeed_:
         [_SoundSpeed]=R1
         RETF
RDSet:
RDMaxRep:
RDMode:
         RETF



RDKey:
         R1=R3&0x0ffc
         R1=R1 LSR 4
         R1+=KeyTable
         PC=[R1]
.ifdef HSH
KeyTable:
         .DW RDErr
         .DW RDKeyEdit
         .DW RDKeyRepeat
         .DW RDKeyGame
         .DW RDKeyPlayEdit
         .DW RDKeyRecPlay
         .DW RDKeyRec
         .DW RDKeyPlay
         .DW RDKeyI0             // page chg
         .DW RDKeyI1             // book chg
         .DW RDKeyI2             // volume chg
         .DW RDKeyI3             // speed chg
         .DW RDKeyI4
         .DW RDKeyExplain
         .DW RDKeyInt
         .DW RDKeyNor
.endif

.ifdef WM
KeyTable:
         .DW RDErr
         .DW RDKeyEdit
         .DW RDKeyRepeat
         .DW RDKeyGame
         .DW RDKeyPlayEdit
         .DW RDKeyRecPlay
         .DW RDKeyRec
         .DW RDKeyPlay
         .DW RDKeyI0             // page chg
         .DW RDKeyI1             // book chg
         .DW RDKeyI2             // volume chg
         .DW RDKeyI3             // speed chg
         .DW RDKeyI4
         .DW RDKeyExplain
         .DW RDKeyInt
         .DW RDKeyNor
.endif

.ifdef DBL
KeyTable:
         .DW RDErr
         .DW RDKeyEdit
         .DW RDKeyRepeat
         .DW RDKeyGame
         .DW RDKeyPlayEdit
         .DW RDKeyRec
         .DW RDKeyPlay
         .DW RDKeyRecPlay
         .DW RDKeyI0             // page chg
         .DW RDKeyI1             // book chg
         .DW RDKeyI2             // volume chg
         .DW RDKeyI3             // speed chg
         .DW RDKeyI4
         .DW RDKeyExplain
         .DW RDKeyInt
         .DW RDKeyNor
.endif


RDKeyEdit:
         R1=0
         [_RecordFlag]=R1
         R1=[_EditFlag]
         TEST R1, HaveEditBlockBit
         JNE RDKeyEdit2
         R1=24
         PC=PlayDSLSys
RDKeyEdit2:
         TEST R1, NoEditSpaceBit|PageEditFullBit
         JE RDKeyEdit3
         R1=23
         PC=PlayDSLSys
         
RDKeyEdit3:
         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]
RDKeyEdit30:
         R1=0xfffe
         [R3++]=R1
         R1=[R3]
         CMP R1, 0xfffd
         JE RDKeyEdit30
         R2=_ContentBuf
         R5=0x400
         R3=[_EndAddr]
         R4=[_EndBank]
         R4+=1
         CALL WriteNandWordBuf
         R3=[_EditOrgAddr]
         R4=[_EditOrgBank]       
         R2=[_HowManyEditBlock]
         R1=R2 LSL 2
         R1+=R2
         R1+=R2
         CALL NandAddrAdd
         [_CurrentEditAddr]=R3
         [_CurrentEditBank]=R4
         CALL EraseCurrentAddrBlock
         R1=0
         [_FileIndex]=R1
         R1=1
         [_EditBlockNumber]=R1
         R1=[_EditFlag]
         R1|=InEditBit
         R1&=HaveEditBit_&ToEditBit_&ToHintBit_&ToRegBit_
         R1|=AutoEditBit|ToPlayGiveEditBit
         [_EditFlag]=R1
         R1=15
         PC=PlayDSLSys

RDKeyPlayEdit:
         R1=0
         [_RecordFlag]=R1
         CALL EndEdit
         R1=0
         [_InPlayBlock]=R1
         R1=[_EditFlag]
         R1&=InEditBit_
         [_EditFlag]=R1
//         TEST R1, HaveEditBlockBit
//         JNE RDKeyPlayEdit2
//         R1=24
//         PC=PlayDSLSys
RDKeyPlayEdit2:
         TEST R1, HaveEditBit
         JNE RDKeyPlayEdit3
         R1=17
         PC=PlayDSLSys
RDKeyPlayEdit3:
         R1=[_EditFlag]
         R1|=EditModeBit
         [_EditFlag]=R1
         R3=[_No3Addr]
         R4=[_No3Bank]
         R1=8
         CALL NandAddrAdd
         CALL ReadNandWord
         R3=[_No3Addr]
         R4=[_No3Bank]
         CALL NandAddrAdd
         CALL GetDSLBlock_
         RETF

.ifdef HSH
RDKeyRecPlay:
         R1=[_RecordFlag]
         TEST R1, HadRecBit
         JE RDKeyRec
         TEST R1, InRecModeBit
         JE RDKeyRec
         TEST R1, InPlayBit
         JNE RDKeyRec
RDKeyPlay:
         R1=[_RecordFlag]
         R1&=RecAllBit_
         R1|=InRecModeBit|RecordBlockBit|ToPlaySoundBit
         [_RecordFlag]=R1
         R1=[_MaxRepeatTime]
         R1+=1
         R1=2
         [_RepeatTime]=R1
         RETF
RDKeyRec:
         R4=[_EndBank]
         CMP R4, [_NandMaxBank]
         JCS RDKeyRecEnd
         R1=[_RecordFlag]
         R1&=RecAllBit_
         R1|=RecordBlockBit|InRecModeBit|ToRecordBit
         [_RecordFlag]=R1
RDKeyRecEnd:
         RETF

RDKeyRepeat:
         R1=[_RecordFlag]
         TEST R1, HadSoundBit
         JE RDKeyRepeatEnd
         R1&=RecAllBit_
         [_RecordFlag]=R1
         CALL DTSourceStatu
         R3=[_RecRegAddr]
         R4=[_RecRegBank]
         PC=GetDSLBlock_
RDKeyRepeatEnd:
         PC=RDKeyNor

.endif

.ifdef WM
RDKeyRecPlay:
RDKeyRec:
         R1=[_RecordFlag]
         R1&=RecAllBit_
         R1|=RecordBlockBit|InRecModeBit|ToRecordBit
         [_RecordFlag]=R1
         RETF

RDKeyRepeat:
RDKeyPlay:
         R1=[_RecordFlag]
         TEST R1, HadRecBit
         JNE RDKeyPlay_
         TEST R1, HadSoundBit
         JNE RDKeyPlay_
         RETF
RDKeyPlay_:
         R1&=RecAllBit_
         R1|=InRecModeBit|RecordBlockBit|ToPlaySoundBit
         [_RecordFlag]=R1
         R1=[_MaxRepeatTime]
         R1+=1
         R1=2
         [_RepeatTime]=R1
         RETF
.endif

.ifdef DBL
RDKeyRecPlay:
RDKeyRec:
         R1=[_RecordFlag]
         R1&=RecAllBit_
         R1|=RecordBlockBit|InRecModeBit|ToRecordBit
         [_RecordFlag]=R1
         RETF
RDKeyPlay:
         R1=[_RecordFlag]
         TEST R1, HadRecBit
         JNE RDKeyPlay_
         TEST R1, HadSoundBit
         JNE RDKeyPlay_
         RETF
RDKeyPlay_:
         R1&=RecAllBit_
         R1|=InRecModeBit|RecordBlockBit|ToPlaySoundBit
         [_RecordFlag]=R1
         R1=[_MaxRepeatTime]
         R1+=1
         R1=2
         [_RepeatTime]=R1
         RETF

RDKeyRepeat:
         R1=[_RecordFlag]
         TEST R1, HadSoundBit
         JE RDKeyRepeatEnd
         R1&=RecAllBit_
         [_RecordFlag]=R1
         CALL DTSourceStatu
         R3=[_RecRegAddr]
         R4=[_RecRegBank]
         PC=GetDSLBlock_
RDKeyRepeatEnd:
         PC=RDKeyNor

.endif

RDKeyGame:
         R1=[_BookMark]
         TEST R1, XYDBookBit
         JE RDKeyGameDSL
RDKeyGameXYD:
         R3=[_CurrentPMAddr]
         R4=[_CurrentPMBank]
         R1=2
         CALL NandAddrSub
         CALL ReadNandWord
         R1&=0x3fff
         R3&=0xc000
         R3|=R1
         R1=16
         CALL NandAddrAdd
         CALL PlayXYDBlockWithRec
         RETF

RDKeyGameDSL:
         R1=0
         [_RecordFlag]=R1
         R3=[_No3Addr]
         R4=[_No3Bank]
         R1=8
         CALL NandAddrAdd
         CALL ReadNandWord
         R3=[_No3Addr]
         R4=[_No3Bank]
         CALL NandAddrAdd         
         CALL SkipWordFF
         CALL NandAddrInc
         CALL ReadNandByte
         CMP R1, 0
         JE RDKeyNoGame
         [_QuestionNumber]=R1
         CALL GetRandomData
         [_SelectionSerious]=R1
         R1=0
         [_QuestionIndex]=R1
         R1=[_SeriousFlag]
         R1|=SeriousSelectionBit
         [_SeriousFlag]=R1

         R1=[_QuestionFlag]
         R1&=HaveSelectionQuestionBit_
         R1|=QuestionDiCoordBit
         [_QuestionFlag]=R1

RDKeyNoGame:
         R3=[_No3Addr]
         R4=[_No3Bank]
         R1=4
         CALL NandAddrAdd
         CALL ReadNandWord
         CALL NandAddrAdd
         R1=4
         CALL NandAddrSub
         CALL GetDSLBlock_
         RETF


RDKeyI0:             // page chg
         R1=0
         [_RecordFlag]=R1
         R1=22
         CALL PlayDSLSys
         RETF
RDKeyI1:             // volume chg
         R1=0
         [_RecordFlag]=R1
         R1=19
         CALL PlayDSLSys
         RETF
RDKeyI2:             // speed
         R1=0
         [_RecordFlag]=R1
         R1=20
         CALL PlayDSLSys
         RETF
RDKeyI3:             // book chg
         R1=0
         [_RecordFlag]=R1
         R1=21
         CALL PlayDSLSys
         RETF

RDKeyI4:
RDKeyI5:
         RETF

RDKeyExplain:
         R1=0
         [_RecordFlag]=R1
         R3=[_No3Addr]
         R4=[_No3Bank]
         R1=2
         CALL NandAddrAdd
         CALL ReadNandWord
         R3=[_No3Addr]
         R4=[_No3Bank]
         CALL NandAddrAdd
         CALL GetDSLBlock_
         R1=[_SeriousFlag]
         R1|=ExplainBit
         [_SeriousFlag]=R1
         RETF


RDKeyInt:
         R1=0
         [_RecordFlag]=R1
         R3=[_No7Addr]
         R4=[_No7Bank]
         CALL ReadNandWord
         CMP R1, 0xffff
         JNE RDKeyInt_
         R1=0
         [_IntFileIndex]=R1
         R1=25
         CALL PlayDSLSys
         RETF
RDKeyInt_:
         R1=1
         [_IntFileIndex]=R1
         RETF

RDKeyNor:
         R1=0
         [_RecordFlag]=R1
         R3=[_No3Addr]
         R4=[_No3Bank]
         CALL ReadNandWord
         R3=[_No3Addr]
         R4=[_No3Bank]
         CALL NandAddrAdd
         CALL GetDSLBlock_
         RETF

⌨️ 快捷键说明

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