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

📄 nand.asm

📁 完整的方案
💻 ASM
📖 第 1 页 / 共 2 页
字号:
           RBYTE
           R1=R1 LSL 4
           R1=R1 LSL 4
           R5|=R1
           DATAOUT
           R3-=1
           R4-=0,Carry
           DATAOUT
           R1=R5
           RETF

AddrChg:
//           R1=[_BookMark]
//           TEST R1, BitF
//           JE AddrChg_
//           RETF
AddrChg_:
           R3+=0x8000
           TEST R3, BitE
           JE AddrChg1
           R4|=Bit8
AddrChg1:
           TEST R3, BitF
           JE AddrChg2
           R4|=Bit9
AddrChg2:
           R3&=0x3fff
           TEST R4, Bit0
           JE AddrChg3
           R3|=BitE
AddrChg3:
           TEST R4, Bit1
           JE AddrChg4
           R3|=BitF
AddrChg4:
           R4=R4 LSR 2
           RETF

NandAddrInc:
           R3+=1
           R4+=0, Carry
           RETF
           
NandAddrAdd:
           R3+=R1 
           R4+=0, Carry
           RETF

AddBookAddr:
           R3+=[_CurrentBookAddr]
           R4+=[_CurrentBookBank], Carry
           RETF

NandAddrSub:
           R3-=R1
           R4-=0, Carry
           RETF


ReadNand1Byte:
           R1=[_NandAddrL]
           R1+=1
           [_NandAddrL]=R1
           R2=R1&0x1ff
           JNE ReadNand1Byte_
           JCC ReadNand1ByteSetAddr
           R1=[_NandAddrH]
           R1+=1
           [_NandAddrH]=R1
ReadNand1ByteSetAddr:
           CALL SetSearchingAddr
ReadNand1Byte_:
           RBYTE
           R1&=0xff
           RETF

SetR3R4Addr:
           DATAOUT
           TEST R3,Bit8
           JE SetR3R4Addr2
SetR3R4Addr1:
           SCMD 0x01
           JMP  SetR3R4Addr_
SetR3R4Addr2:
           SCMD 0x00
SetR3R4Addr_:
           R1=R3&0xff
           SADR0
           R1=R3 LSR 4
           R1=R1 LSR 4
           R1=R1 LSR 1
           TEST R4, Bit0
           JE SetR3R4Addr__
           R1|=Bit7
SetR3R4Addr__:
           SADR
           R1=R4 LSR 1
           R1&=0xff
           .ifdef M64
           SADR
           R1=R4 LSR 1
           R1=R1 LSR 4
           R1=R1 LSR 4
           .endif
           SADRE
           DATAIN
           CALL DelayN
           RETF

SetSearchingAddr:
           DATAOUT
           R1=[_NandAddrL]
           TEST R1,Bit8
           JE SetSearchingAddr2
SetSearchingAddr1:
           SCMD 0x01
           JMP  SetSearchingAddr3
SetSearchingAddr2:
           SCMD 0x00
SetSearchingAddr3:
           R1=[_NandAddrL]
           R1&=0xff
           SADR0

           R1=[_NandAddrH]
           TEST R1, Bit0
           JE SetSearchingAddr5
SetSearchingAddr4:
           R1=[_NandAddrL]
           R1=R1 LSR 4
           R1=R1 LSR 4
           R1=R1 LSR 1
           R1|=Bit7
           JMP SetSearchingAddr6
SetSearchingAddr5:
           R1=[_NandAddrL]
           R1=R1 LSR 4
           R1=R1 LSR 4
           R1=R1 LSR 1
SetSearchingAddr6:
           SADR
           R1=[_NandAddrH]
           R1=R1 LSR 1
           R1&=0xff
           .ifdef M64
           SADR
           R1=[_NandAddrH]
           R1=R1 LSR 1
           R1=R1 LSR 4
           R1=R1 LSR 4
           .endif
           SADRE
           DATAIN
           CALL DelayN
           RETF

ChgSearchingAddr:
           DATAOUT
           R1=[_NandAddrL]
           R1+=0x200
           JCC ChgSearchingAddr1
           R2=[_NandAddrH]
           R2+=1
           [_NandAddrH]=R2
ChgSearchingAddr1:
           R1&=0xfe00
           R2=R5&0x1ff
           R1|=R2
           [_NandAddrL]=R1
           R5-=0x200
           SCMD 0x00
           R1=[_NandAddrL]
           R1&=0xff
           SADR0
           R1=[_NandAddrH]
           TEST R1, Bit0
           JE ChgSearchingAddr5
ChgSearchingAddr4:
           R1=[_NandAddrL]
           R1=R1 LSR 4
           R1=R1 LSR 4
           R1=R1 LSR 1
           R1|=Bit7
           JMP ChgSearchingAddr6
ChgSearchingAddr5:
           R1=[_NandAddrL]
           R1=R1 LSR 4
           R1=R1 LSR 4
           R1=R1 LSR 1
ChgSearchingAddr6:
           SADR
           R1=[_NandAddrH]
           R1=R1 LSR 1
           R1&=0xff
           .ifdef M64
           SADR
           R1=[_NandAddrH]
           R1=R1 LSR 1
           R1=R1 LSR 4
           R1=R1 LSR 4
           .endif
           SADRE
           DATAIN
           CALL DelayN
           RETF

WriteNandWordBuf:
           DATAOUT 
           [_NandBufBak]=R4
           R4=R2
           TEST R3,Bit8
           JE WriteNandWordBuf2
WriteNandWordBuf1:
           SCMD 0x01
           JMP  WriteNandWordBuf3
WriteNandWordBuf2:
           SCMD 0x00
WriteNandWordBuf3:
           SCMD 0x80
           R1=R3&0xff
           SADR0
           R1=[_NandBufBak]
           TEST R1, Bit0
           JE WriteNandWordBuf5
WriteNandWordBuf4:
           R1=R3 LSR 4
           R1=R1 LSR 4
           R1=R1 LSR 1
           R1|=Bit7
           JMP WriteNandWordBuf6
WriteNandWordBuf5:
           R1=R3 LSR 4
           R1=R1 LSR 4
           R1=R1 LSR 1
WriteNandWordBuf6:
           SADR
           R1=[_NandBufBak]
           R1=R1 LSR 1
           R1&=0xff
           .ifdef M64
           SADR
           R1=[_NandBufBak]
           R1=R1 LSR 1
           R1=R1 LSR 4
           R1=R1 LSR 4
           .endif
           SADRE
           CALL DelayN
WriteNandWordBuf0:
           R1=[R4]
           R1&=0xff
           WBYTE
           R1=[R4++]
           R1=R1 LSR 4
           R1=R1 LSR 4
           WBYTE
           R5-=1
           JNE WriteNandWordBufS 
           PC=WriteNandWordBufE
WriteNandWordBufS:           
           R3+=2
           JCS WriteNandWordChgB1
           R1=R3&0x1ff
           JNE WriteNandWordBuf0
           JMP WriteNandWordChgB2
WriteNandWordChgB1:
           R1=[_NandBufBak]
           R1+=1
           [_NandBufBak]=R1
WriteNandWordChgB2:
           SCMD 0x10
           SCMD 0x70
           R1=PgmTestCir
WriteNandReadyTest:
           TESTRB
           JNE WriteNandReadyTest_
           R1-=1
           JNE WriteNandReadyTest
WriteNandReadyTest_:
           DATAIN
           CALL DelayN
WriteNandReadyTestOk:
           DATAOUT
           DATAOUT
           PC=WriteNandWordBuf2

WriteNandWordBufE:
           SCMD 0x10
           SCMD 0x70
           R1=PgmTestCir
WriteNandReadyTest2:
           TESTRB
           JNE WriteNandReadyTest2_
           R1-=1
           JNE WriteNandReadyTest2         
WriteNandReadyTest2_:
           DATAIN
           CALL DelayN
WriteNandReadyTest2Ok:
           DATAOUT
           RETF

//EraseRecord:
//          R4=Rec1OrgBlock
//EraseRecord0:
//          CALL ClearWatchDog
//          R1=R4
//          CALL EraseBlock
//          CMP R1, 0
//          JNE EraseRecordErr
//          R4+=1
//          CMP R4, Rec1EndBlock
//          JNE EraseRecord0
//          R1=0
//EraseRecordErr:
//          RETF

DelayN:
          PUSH R1,R2 TO [SP]
          R1=0x400
DelayN0:
          TESTRB
          JNE DelayNE
          R1-=1
          JNE DelayN0
DelayNE:
          POP R1,R2 FROM [SP]
          RETF

SkipWordFF:
          CALL SetR3R4Addr
          R5=0
          JMP SkipWordFF1
SkipWordFF0:
          R1=R3&0x1ff
          JNE SkipWordFF1
          CALL SetR3R4Addr
SkipWordFF1:
          RBYTE_
          CMP R1, 0xff
          JE SkipWordFFEnd
          R3+=1
          JCC SkipWordFF2
          R4+=1
SkipWordFF2:
          R1=R3&0x1ff
          JNE SkipWordFF3
          CALL SetR3R4Addr
SkipWordFF3:
          RBYTE
          R3+=1
          JCC SkipWordFF4
          R4+=1
SkipWordFF4:
          JMP SkipWordFF0
SkipWordFFEnd:
          DATAOUT
          RETF


SearchByteFF:
          R5=0
          CALL SetR3R4Addr
          JMP SearchByteFF1
SearchByteFF0:
          R5+=1
          R3+=1
          R4+=0, Carry
          R1=R3&0x1ff
          JNE SearchByteFF1
          CALL SetR3R4Addr
SearchByteFF1:
          RBYTE
          R1&=0xff
          CMP R1, 0xff
          JNE SearchByteFF0
          RETF


CmpCoord:
          R2=[_XValue]
          R2+=XChgTab
          R1=[R2] 
          R1=R1 LSL 4
          R1=R1 LSL 4
          [_Tmp1]=R1
          R2=[_YValue]
          R2+=YChgTab
          R1=[R2]         
          R1|=[_Tmp1]
          R3=[_QuestionAddr]
          R4=[_QuestionBank]

CmpWord:
          R5=0
          [_Tmp1]=R1
          CALL SetR3R4Addr
          JMP CmpWord1
CmpWord0:
          R5+=1
          R3+=1
          R4+=0, Carry
          R1=R3&0x1ff
          JNE CmpWord1
          CALL SetR3R4Addr
CmpWord1:
          RBYTE
          R1&=0xff
          [_Tmp2]=R1
          R3+=1
          R4+=0, Carry
          R1=R3&0x1ff
          JNE CmpWord2
          CALL SetR3R4Addr
CmpWord2:
          RBYTE
          R1=R1 LSL 4
          R1=R1 LSL 4
          R1|=[_Tmp2]
          CMP R1, [_Tmp1]
          JE CmpWordOk
          CMP R1, 0xffff
          JNE CmpWord0
CmpWordNo:
          DATAOUT
          R1=0
          RETF
CmpWordOk:
          DATAOUT
          R1=1
          RETF

ReadNandAddr:
           DATAOUT
           R5=4
           TEST R3,Bit8
           JE ReadNandAddr2
ReadNandAddr1:
           SCMD 0x01
           JMP  ReadNandAddr_
ReadNandAddr2:
           SCMD 0x00
ReadNandAddr_:
           R1=R3&0xff
           SADR0
           R1=R3 LSR 4
           R1=R1 LSR 4
           R1=R1 LSR 1
           TEST R4, Bit0
           JE ReadNandAddr__
           R1|=Bit7
ReadNandAddr__:
           SADR
           R1=R4 LSR 1
           R1&=0xff
           .ifdef M64
           SADR
           R1=R4 LSR 1
           R1=R1 LSR 4
           R1=R1 LSR 4
           .endif
           SADRE
           DATAIN
           CALL DelayN
ReadNandAddr0:
           RBYTE_
           R3+=1
           R4+=0, Carry
           R5-=1
           JE ReadNandAddrE
           PUSH R1 TO [SP]
           R3&=0x1ff
           JNE ReadNandAddr0
           PC=ReadNandAddr2
ReadNandAddrE:
           R4=R1 LSL 4
           R4=R4 LSL 4
           POP R1 FROM [SP]
           R4|=R1
           POP R1 FROM [SP]
           R3=R1 LSL 4
           R3=R3 LSL 4
           POP R1 FROM [SP]
           R3|=R1
           DATAOUT
           RETF

PrintNand:
           DATAOUT
           CALL SetR3R4Addr
PrintNand0:
           R1=R5&0x0f
           JNE PrintNand_
           CALL TxChg
PrintNand_:
           RBYTE
           R1&=0xff
           CALL TxHex
           R5-=1
           JNE PrintNand0
           CALL DiUart
           DATAOUT
           RETF

⌨️ 快捷键说明

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