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

📄 dptx.asm

📁 完整的方案
💻 ASM
字号:
EvenOdd:
         R4&=0x7ffc
         R3=13
         R2=R4
EvenOdd0:
         TEST R2, BitE
         JNE EvenOdd1
         R4^=Bit0
EvenOdd1:
         R2=R2 LSL 1
         R3-=1
         JNE EvenOdd0
         TEST R4, Bit0
         JNE EvenOddE
         R4|=Bit1
EvenOddE:
         RETF


DTDown:
         R3=Bit7
         PC=DTStatu_
DTStop:
         R1=[_Statu]
         R1&=DynamicBit_
         [_Statu]=R1
         JMP DTStatu
DTNormalPlayStatu:
         R1=[_Statu]
         R1&=StatuMask
         R1|=DTNormalPlayBit
         R1|=DynamicBit
         [_Statu]=R1
         JMP DTStatu
DTRecStatu:
         R1=[_Statu]
         R1&=StatuMask
         R1|=DTRecBit
         R1|=DynamicBit
         [_Statu]=R1
         JMP DTStatu
DTSourceStatu:
         R1=[_Statu]
         R1&=StatuMask
         R1|=DTSourceBit
         R1|=DynamicBit
         [_Statu]=R1
         JMP DTStatu
DTPlayRecStatu:
         R1=[_Statu]
         R1&=StatuMask
         R1|=DTPlayRecBit
         R1|=DynamicBit
         [_Statu]=R1
DTStatu:
         R3=R1&Bit3_
         R1=[_EditFlag]
         TEST R1, HaveEditBit
         JE DTStatu0
         R3|=Bit3
DTStatu0:
         R1=[_SeriousFlag]
         TEST R1, SeriousSelectionBit
         JE  DTStatu1
         R3|=Bit4
         JMP DTStatu_
DTStatu1:
         R1=[_SeriousFlag]
         TEST R1,ExplainBit
         JE DTStatu2
         R3|=Bit5
         JMP DTStatu_
DTStatu2:
         R1=[_IntFileIndex]
         JE DTStatu3
         R3|=Bit4|Bit5
         JMP DTStatu_
DTStatu3:
//         R3&=Bit3_
//         R1=[_EditFlag]
//         TEST R1, HaveEditBit
//         JE DTStatu4
//         R3|=Bit3
DTStatu4:
         R1=[_EditFlag]
         TEST R1, InEditBit
         JE DTStatu5
         R3|=Bit6
         JMP DTStatu_
DTStatu5:
         TEST R1, EditModeBit
         JE DTStatu_
         R3|=Bit6|Bit4
DTStatu_:
         R4=R3 LSL 4
         R4|=DTStatuHead
         PC=DTBody

DTRepeatTime:
         R4=[_MaxRepeatTime]
         R4=R4 LSL 4
         R4|=DTRepeatTimeHead
         JMP DTBody

DTBook:
         R4=[_HowManyBook]
         R4=R4 LSL 4
         R4|=DTBookHead
         JMP DTBody

DTMode:
         R4=[_PlayMode]
         JE DTMode_
         R4-=1
DTMode_:
         R4=R4 LSL 4
         R4|=DTModeHead
         JMP DTBody

DTPage:
         R4=[_Page]
         R2=[_Attrib]
         TEST R2, PageD2Bit
         JE DTPage_
         CMP R4, 0
         JE DTPage_
         R4=R4 LSL 1
         R4-=1
         TEST R2, PageA2Bit
         JE DTPage_
         R4-=1
         JNE DTPage_
         R4=1
DTPage_:
         R4=R4 LSL 2
         R4|=DTPageHead
         JMP DTBody

DTVM:
         R4=[_PageMaxMode]
         R4=R4 LSL 4
         R1=[_SoundVolume]
         R1&=0x0f
         R4|=R1
         R4=R4 LSL 4
         R4|=DTVMHead
DTBody:
         CALL EvenOdd
         CALL PrintDTData

         R1=[P_IOA_Data]
         TEST R1, DClkB
         JNE DTBodyDo
         R1=dDTBodyBusy

         PC=DTBodyErr
DTBodyDo:
         R1=[P_IOA_Buffer]
         R1&=DAckB_
         [P_IOA_Buffer]=R1             //  Tx data & Ack=0
         R1=1101011101111100B          //  port A
         R1=[P_IOA_Dir]
         R1|=DDatB
         [P_IOA_Dir]=R1
         R1=[P_IOA_Buffer]
         R1|=DDatB
         [P_IOA_Buffer]=R1

         R3=16
         R1=DTxWait
DTBodyWait:
         NOP
         NOP
         NOP
         R1-=1
         JNE DTBodyWait_
         R1=dDTAckErr
         JMP DTBodyErr
DTBodyWait_:
         R2=[P_IOA_Data]
         TEST R2, DClkB
         JNE DTBodyWait
         R2=[P_IOA_Data]
         TEST R2, DClkB
         JNE DTBodyWait
         JMP DTBodyWH
DTBody0:
         R1=[P_IOA_Buffer]
         TEST R4, BitF
         JNE  DTBodyHi
DTBodyLo:
         R1&=DDatB_
         JMP DTBody_
DTBodyHi:
         R1|=DDatB
DTBody_:
         R1&=DAckB_
         [P_IOA_Buffer]=R1             //  Tx data & Ack=0
DTBodyWL:
         R1=DTDly
DTBodyWL0:
         R1-=1
         JNE DTBodyWL_
         R1=dDTxWaitLoErr
         JMP DTBodyErr
DTBodyWL_:
         R2=[P_IOA_Data]
         TEST R2, DClkB
         JNE DTBodyWL0
         R2=[P_IOA_Data]
         TEST R2, DClkB
         JNE DTBodyWL0

DTBodyWH:
         R2=[P_IOA_Buffer]
         R2|=DAckB
         [P_IOA_Buffer]=R2             //  Ack=1
         R1=DTDly
DTBodyWH0:
         R1-=1
         JNE DTBodyWH_
         R1=dDTxWaitHiErr
         JMP DTBodyErr
DTBodyWH_:
         R2=[P_IOA_Data]
         TEST R2, DClkB
         JE DTBodyWH0
         R2=[P_IOA_Data]
         TEST R2, DClkB
         JE DTBodyWH0
DTBody2:
         R4=R4 LSL 1
         R3-=1
         CMP R3, 0
         JNE DTBody0
DTBodyE:
         R1=0
         JMP DTBodyEnd
DTBodyErr:
         R4=R1
         CALL PrintDTErr
         R1=R4
DTBodyEnd:
         R4=R1
         R1=[P_IOA_Dir]
         R1&=DDatB_
         R1=0101011101111100B          // port A
         [P_IOA_Dir]=R1
         R1=[P_IOA_Buffer]
         R1|=DAckB
         [P_IOA_Buffer]=R1
         CALL Delay10ms
         R1=R4
         RETF

⌨️ 快捷键说明

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