www.pudn.com > bak22.rar > Search.asm, change:2007-06-12,size:18047b


PaiDealMask:  .EQU   HadDealBit|FirstKnockBit|SecondKnockBit|ThirdKnockBit|ForthKnockBit 
PaiDealMask_: .EQU   HadDealBit_&FirstKnockBit_&SecondKnockBit_&ThirdKnockBit_&ForthKnockBit_ 
SoundMask:    .EQU   ReadyPlayBit|PlayIndexBit 
SoundMask_:   .EQU   ReadyPlayBit_&PlayIndexBit_ 
 
MessBank:               .EQU _Tmp1 
MessAddr:               .EQU _Tmp2 
MessSerious:            .EQU _Tmp3 
MessFileNum:            .EQU _Tmp4 
YUpCoord:               .EQU _Tmp5 
XLeftCoord:             .EQU _Tmp6 
YDownCoord:             .EQU _Tmp7 
YRightCoord:            .EQU _Tmp8 
dRecord:                .EQU 1 
dPlayRecord:            .EQU 2 
dPlaySound:             .EQU 3 
 
dStandardBlock:         .EQU 0 
dBlankWithSound:        .EQU 1 
dLowVoltageDeal:        .EQU 2 
dPaiAwayDeal:           .EQU 3 
dPai1Knock:             .EQU 4 
dPai2Knock:             .EQU 5 
dPai3Knock:             .EQU 6 
dPai4Knock:             .EQU 7 
dPaiSame1Block:         .EQU 8 
dPaiSame2Block:         .EQU 9 
dPaiGroundBlock:        .EQU 10 
dPaiInAway:             .EQU 11 
dPaiToAway:             .EQU 12 
dBlankNoSound:          .EQU 13 
dDealNoFunction:        .EQU 14 
dDisableCoord:          .EQU 15 
dHadDeal:               .EQU 16 
dPaiJustBlock:          .EQU 17  
dPaiBlank:              .EQU 18  
 
 
.INCLUDE XYD.ASM 
.INCLUDE DSL.ASM 
 
DealCoord: 
         CALL TestDiCoord 
         CMP R1, 0 
         JE DealCoordGo 
         RETF 
 
DealCoordGo: 
         R1=[_SysFlagA] 
         TEST R1,PaiStatuBit 
         JNE DealCoord1 
DealCoord0:                            // In statu of away 
         R1=[_YCoord] 
         CMP R1,0xff 
         JNE DealCoord0_1         
DealCoord0PaiAway: 
         R1=dPaiInAway 
         RETF 
 
DealCoord0_1: 
         CALL InitPaiDown 
         PC=DealNormalCoord 
DealCoord1: 
         R1=[_YCoord] 
         CMP R1,0xff 
         JE DealCoord1_0 
         PC=DealNormalCoord 
DealCoord1_0: 
DealCoord1PaiAway: 
         R1=[_SysFlagA] 
         R1&=PaiStatuBit_ 
         [_SysFlagA]=R1 
         TEST R1,HadDealBit 
         JE DealCoord1_0_ 
         R1=dPaiToAway 
         RETF 
 
DealCoord1_0_: 
         R1=[_SysFlagA] 
         TEST R1,ForthKnockBit 
         JNE  NorPaiAway4Knock 
         TEST R1,ThirdKnockBit 
         JNE  NorPaiAway3Knock 
         TEST R1,SecondKnockBit 
         JNE  NorPaiAway2Knock 
NorPaiAway1Knock: 
         R1=[_XOld1] 
         [_XValue]=R1 
         R1=[_YOld1] 
         [_YValue]=R1 
         PC=DealCoordIn 
NorPaiAway2Knock: 
NorPaiAway3Knock: 
         R1=[_XOld2] 
         [_XValue]=R1 
         R1=[_YOld2] 
         [_YValue]=R1 
         PC=DealCoordIn 
NorPaiAway4Knock: 
         R1=[_XOld1] 
         R1+=[_XOld2] 
         R1+=1 
         R1 = R1 LSR 1 
         [_XValue]=R1 
         R1=[_YOld1] 
         R1+=[_YOld2] 
         R1+=1 
         R1 = R1 LSR 1 
         [_YValue]=R1 
         PC=DealCoordIn 
 
DealNormalCoord: 
DealNormalCoord_: 
         R1=[_SysFlagA] 
         TEST R1,FirstKnockBit 
         JNE DealCoordReg2 
DealCoordReg1: 
         R1|=FirstKnockBit 
         [_SysFlagA]=R1 
         R1=[_XCoord] 
         [_XOld1]=R1 
         R1=[_YCoord] 
         [_YOld1]=R1 
         R1=dPai1Knock 
         RETF 
DealCoordReg2: 
         TEST R1,SecondKnockBit 
         JNE DealCoordReg3 
         R1|=SecondKnockBit 
         [_SysFlagA]=R1 
         R1=[_XCoord] 
         [_XOld2]=R1 
         R1=[_YCoord] 
         [_YOld2]=R1 
         R1=dPai2Knock 
         RETF 
DealCoordReg3: 
         TEST R1,ThirdKnockBit 
         JNE DealCoordReg4 
         R1|=ThirdKnockBit 
         [_SysFlagA]=R1 
         R1=[_XCoord] 
         [_XOld3]=R1 
         R1=[_YCoord] 
         [_YOld3]=R1 
         R1=dPai3Knock 
         RETF 
DealCoordReg4: 
         TEST R1,ForthKnockBit 
         JNE DCRSmoothX 
         R1|=ForthKnockBit 
         [_SysFlagA]=R1 
         R1=[_XCoord] 
         [_XOld4]=R1 
         R1=[_YCoord] 
         [_YOld4]=R1 
         R1=dPai4Knock 
         RETF 
 
DCRSmoothX: 
         R1=[_XOld2] 
         R1+=[_XOld3] 
         R1+=[_XOld4] 
         R2=0x5555 
         MR=R2*R1, us 
         TEST R3, BitF 
         JE DCRSmoothX_        
         R4+=1 
DCRSmoothX_: 
         [_XValue]=R4 
DCRSmoothY:          
         R1=[_YOld2] 
         R1+=[_YOld3] 
         R1+=[_YOld4] 
         R2=0x5555 
         MR=R2*R1, us 
         TEST R3, BitF 
         JE DCRSmoothY_        
         R4+=1 
DCRSmoothY_: 
         [_YValue]=R4 
         R1=[_XOld4] 
         R1+=0x10 
         R1-=[_XCoord] 
         CMP R1, 0x20 
         JNB DealCoordIn 
 
         R1=[_YOld4] 
         R1+=0x18 
         R1-=[_YCoord] 
         CMP R1, 0x30 
         JNB DealCoordIn 
 
         R1=[_XOld2] 
         [_XOld1]=R1 
         R1=[_YOld2] 
         [_YOld1]=R1 
 
         R1=[_XOld3] 
         [_XOld2]=R1 
         R1=[_YOld3] 
         [_YOld2]=R1 
 
         R1=[_XCoord] 
         [_XOld3]=R1 
         R1=[_YCoord] 
         [_YOld3]=R1 
 
         R1=[_XCoord] 
         [_XOld4]=R1 
         R1=[_YCoord] 
         [_YOld4]=R1 
 
DealCoordIn: 
         R1=[_SysFlagA] 
         TEST R1, HadDealBit 
         JE DealCoordIn_ 
         R1=dHadDeal 
         RETF 
DealCoordIn_: 
         R1=[_SysFlagA] 
         R1|=HadDealBit 
         [_SysFlagA]=R1 
 
         R1=[_BookMark] 
         TEST R1, XYDBookBit 
         JE DealCoordDSL 
         PC=DealCoordXYD 
DealCoordDSL: 
         R1=[_SeriousFlag] 
         TEST R1, SeriousSelectionBit 
         JE DealCoordNew2 
DealCoordQuestion: 
         CALL CmpCoord 
         CMP R1, 0 
         JE DealCoordAnswerErr 
DealCoordAnswerOK: 
         R1=[_QuestionFlag] 
         R1&=HaveSelectionQuestionBit_ 
         [_QuestionFlag]=R1 
         R1=9 
         CALL PlayDSLSys 
         RETF 
DealCoordAnswerErr: 
         R1=[_RandomBase] 
         R1&=0x0f 
         [_SeriousCount]=R1 
         R1=10 
         CALL PlayDSLSys 
         R1=[_ErrTime] 
         R1-=1 
         JE DealCoordAnswerErrFinish 
         [_ErrTime]=R1 
         RETF 
DealCoordAnswerErrFinish: 
         R1=[_QuestionFlag] 
         R1&=HaveSelectionQuestionBit_ 
         [_QuestionFlag]=R1 
         RETF 
 
DealCoordNew2:          
         R4=[_CoordBank] 
         R3=[_CoordAddr] 
         CALL GetNorBlock 
//         R2=[_XValue] 
//         R2+=XChgTab 
//         R1=[R2] 
//         R2=[_YValue] 
//         R2+=YChgTab 
//         R2=[R2] 
//         R1+=R2 
//         R5=R1 
//         CALL HexDec 
//         CALL TxWord 
//         CALL DiUart 
 
//         R1=R5 
//         R1+=2 
//         CALL NandAddrAdd 
//         CALL ReadNandByte 
         CMP R1, [_PlayBlock] 
         JE DealCoordSame 
DealCoordDiff: 
         [_PlayBlock]=R1 
         R1=0 
         [_SeriousCount]=R1 
         JMP DealCoordTestEdit 
DealCoordSame: 
         R1=[_SeriousCount] 
         R1+=1 
         [_SeriousCount]=R1 
 
DealCoordTestEdit: 
         R1=[_EditFlag] 
         TEST R1, InEditBit 
         JE DealCoordTestEdit2 
         PC=DealCoordToEdit 
DealCoordTestEdit2: 
         TEST R1, EditModeBit 
         JE DealCoordNormal 
DealCoordPlayEdit3: 
         R3=[_EditOrgAddr] 
         R4=[_EditOrgBank] 
         R1=[_PlayBlock] 
         CALL CmpWord 
         CMP R1, 0 
         JNE DealCoordPlayEdit4 
         [_SeriousCount]=R1 
         JMP DealCoordNormal_ 
DealCoordPlayEdit4: 
         R1=[_SeriousCount] 
         JNE DealCoordPlayEdit5 
         R1+=1 
DealCoordPlayEdit5: 
         [_SeriousCount]=R1 
         TEST R1, Bit0 
         JE DealCoordNormal_ 
DealCoordPlayEdit6:          
         R3=[_EditOrgAddr] 
         R4=[_EditOrgBank] 
         R1=R5 LSL 2 
         R1+=[_HowManyEditBlock] 
         R1+=[_HowManyEditBlock] 
         CALL NandAddrAdd 
         CALL ReadNandAddr 
         R1=R3 
         R1&=R4 
         CMP R1, 0xffff 
         JE DealCoordNormal 
         [_PlayStartAddr]=R3 
         [_PlayStartBank]=R4 
         CALL _RecPlay 
         RETF 
DealCoordNormal: 
         R1=[_RecordFlag] 
         R1|=HadSoundBit 
         [_RecordFlag]=R1 
         R3=[_PlayAddr] 
         R4=[_PlayBank] 
         //[_RecRegAddr]=R3 
         //[_RecRegBank]=R4 
DealCoordNormal_: 
         CALL PlayDSLSoundGroup 
         [_RecRegAddr]=R3 
         [_RecRegBank]=R4 
DealCoordEnd: 
         RETF 
 
DealCoordToEdit: 
         R1=0 
         [_PlayLengthL]=R1 
         [_PlayLengthH]=R1 
         R3=[_No7Addr] 
         R4=[_No7Bank] 
         R1=[_PlayBlock] 
         CALL CmpWord 
         CMP R1, 0 
         JE DealCoordNormal_ 
         R3=[_EditOrgAddr] 
         R4=[_EditOrgBank] 
         R1=[_PlayBlock] 
         CALL CmpWord 
         CMP R1, 0 
         JE DealCoordToEditPlay 
         PC=DealCoordPlayEdit6 
DealCoordToEditPlay: 
         R1=[_EditFlag] 
         R1|=ToHintBit 
         [_EditFlag]=R1 
         R1=0 
         [_SeriousCount]=R1 
         JMP DealCoordNormal_ 
 
 
DealCoordXYD: 
         R1=[_XValue] 
         CMP R1, [_XMinGate] 
         JB DealCoordZeroPage 
         CMP R1, [_XMaxGate] 
         JA DealCoordZeroPage 
         R1=[_YValue] 
         CMP R1, [_YMinGate] 
         JB DealCoordZeroPage 
         CMP R1, [_YMaxGate] 
         JNA DealCoordNormalPage 
DealCoordZeroPage: 
         R4=[_ZeroPMBank] 
         R3=[_ZeroPMAddr] 
         JMP DCSearchBlock 
DealCoordNormalPage: 
         R4=[_CurrentPMBank] 
         R3=[_CurrentPMAddr] 
DCSearchBlock: 
         R1=0  
         [_CurrentSearchingBlock]=R1 
         [_NandAddrL]=R3 
         [_NandAddrH]=R4 
DCSearchBlock_:          
         CALL SetSearchingAddr 
         R5=R3|0xfe00 
         JMP DCSearchBlock1 
DCSearchBlock0: 
         R5+=1 
         JCC DCSearchBlock1 
         CALL ChgSearchingAddr 
DCSearchBlock1: 
         RBYTE_ 
         CMP R1,0xff 
         JNE DCSearchBlock2 
         PC=DealCoordBlank 
DCSearchBlock2: 
         CMP R1,[_YValue] 
         JA DCSearchBlockSkip1 
         R5+=1 
         JCC DCSearchBlock3 
         CALL ChgSearchingAddr         
DCSearchBlock3: 
         RBYTE_ 
         CMP R1,[_XValue] 
         JA DCSearchBlockSkip2 
         R5+=1 
         JCC DCSearchBlock4 
         CALL ChgSearchingAddr        
DCSearchBlock4: 
         RBYTE_ 
         CMP R1,[_YValue] 
         JB DCSearchBlockSkip3 
         R5+=1 
         JCC DCSearchBlock5 
         CALL ChgSearchingAddr        
DCSearchBlock5: 
         RBYTE_ 
         CMP R1,[_XValue] 
         JB DCSearchBlockSkip4 
         PC=DCSearchBlockOk 
DCSearchBlockSkip1: 
         R5+=1 
         JCC DCSearchBlockSkip1_ 
         CALL ChgSearchingAddr     
DCSearchBlockSkip1_: 
         RBYTE2 
DCSearchBlockSkip2: 
         R5+=1 
         JCC DCSearchBlockSkip2_ 
         CALL ChgSearchingAddr   
DCSearchBlockSkip2_: 
         RBYTE2 
DCSearchBlockSkip3: 
         R5+=1 
         JCC DCSearchBlockSkip3_ 
         CALL ChgSearchingAddr         
DCSearchBlockSkip3_: 
         RBYTE2 
DCSearchBlockSkip4: 
         R5+=1 
         JCC DCSearchBlockSkip4_ 
         CALL ChgSearchingAddr       
DCSearchBlockSkip4_: 
         RBYTE_ 
         JNE DCSearchBlockSkip5 
         PC=DCSearchBlock0 
 
DCSearchBlockSkip5: 
         R2=[_CurrentSearchingBlock] 
         R2+=1 
         [_CurrentSearchingBlock]=R2 
         R2=R1 LSL 1 
         R1+=R2 
         R5+=R1 
         JCS DCSearchBlockSkip8 
//         CMP R1, 0x30 
//         JCS DCSearchBlockSkip7 
//         R3=R1 
//DCSearchBlockSkip6: 
//         RBYTE2 
//         R3-=1 
//         JNE DCSearchBlockSkip60 
//         PC=DCSearchBlock0 
DCSearchBlockSkip7: 
         R3=[_NandAddrL] 
         R3&=0xfe00 
         R1=R5&0x1ff 
         R3|=R1 
         R3+=1 
         JCC DCSearchBlockSkip7_ 
         R4=[_NandAddrH] 
         R4+=1 
         [_NandAddrH]=R4 
DCSearchBlockSkip7_:         
         [_NandAddrL]=R3 
         PC=DCSearchBlock_ 
DCSearchBlockSkip8: 
         R5+=1 
         CALL ChgSearchingAddr 
         PC=DCSearchBlock1 
DCSearchBlockOk: 
DCSearchBlockOkSkip: 
         R5+=1 
         JCC DCSearchBlockOkSkip1 
         CALL ChgSearchingAddr        
DCSearchBlockOkSkip1: 
         RBYTE_ 
         JNE DCRegisterData 
         R5+=1 
         JCC DCSearchBlockOkSkip2 
         CALL ChgSearchingAddr        
DCSearchBlockOkSkip2: 
         RBYTE2 
         R5+=1 
         JCC DCSearchBlockOkSkip3 
         CALL ChgSearchingAddr        
DCSearchBlockOkSkip3: 
         RBYTE2 
         R5+=1 
         JCC DCSearchBlockOkSkip4 
         CALL ChgSearchingAddr        
DCSearchBlockOkSkip4: 
         RBYTE2 
         R5+=1 
         JCC DCSearchBlockOkSkip5 
         CALL ChgSearchingAddr        
DCSearchBlockOkSkip5: 
         RBYTE2 
         PC=DCSearchBlockOkSkip 
DCRegisterData: 
         R2=[_SeriousCount] 
         R2+=1 
         R1=[_CurrentSearchingBlock] 
         CMP R1, [_PlayBlock] 
         JE DCRegisterData_ 
         [_PlayBlock]=R1 
         R2=0 
DCRegisterData_: 
         [_SeriousCount]=R2 
         DATAOUT 
         R3=[_NandAddrL] 
         R4=[_NandAddrH] 
         R3&=0xfe00 
         R5&=0x1ff 
         R3|=R5 
         CALL PlayXYDBlockWithRec 
         R1=dPaiJustBlock 
         RETF 
 
DealCoordBlank: 
         R1=[_BlankFlag] 
         [_SoundMode]=R1 
         R1=[_BlankSoundIndex] 
         [_Index]=R1 
         R1=[_SysFlagA] 
         R1|=ReadyPlayBit 
         [_SysFlagA]=R1 
         DATAOUT 
         R1=dPaiBlank 
         RETF 
 
InitPaiDown: 
         R1=0 
         [_TimeCtrCount]=R1 
         [_AutoOffTime]=R1 
         [_IntFileIndex]=R1 
         [_RecordFlag]=R1 
         [_PlayTotalTime]=R1 
         R1=[_SeriousFlag] 
         R1&=ExplainBit_ 
         [_SeriousFlag]=R1 
         R1=0xffff 
         [_PrevDealBlock]=R1 
         R1=[_SysFlagA] 
         R1&=PaiDealMask_ 
         R1|=PaiStatuBit 
         [_SysFlagA]=R1 
         R1=[_Statu] 
         R1&=DynamicBit 
         R1&=StatuMask 
         R1|=DTNormalPlayBit 
         [_Statu]=R1 
SoundAllStop: 
         R1=0 
         [_DealIndex]=R1 
         [_RegistIndex]=R1 
         [_MaxRegLevel]=R1 
         [_MaxDealLevel]=R1 
         [_CurrentRegLevel]=R1 
SoundStop: 
         CALL _SacmStop 
         R1=0 
         [_InPlayBlock]=R1 
         [_PrevDelayTime]=R1 
         [_InsMode]=R1 
         R1=[_SysFlagA] 
         R1&=ReadyPlayBit_&PlayIndexBit_ 
         [_SysFlagA]=R1 
         RETF 
 
TestDiCoord: 
         R1=[_SysFlagA] 
         R2=[_SeriousFlag] 
         TEST R2, SeriousSelectionBit 
         JE TestDiCoord1 
         R2=[_QuestionFlag] 
         TEST R2,QuestionDiCoordBit 
         JE TestDiCoord1 
TestDiCoord_: 
         R1&=PaiStatuBit_ 
         [_SysFlagA]=R1 
         R1=1 
         RETF 
TestDiCoord1: 
         R2=[_EditFlag] 
         TEST R2, InEditBit 
         JE TestDiCoord2 
         TEST R2, AutoEditBit 
         JNE TestDiCoord_ 
TestDiCoord2: 
         R1=0 
         RETF 
 
 
GetNorBlock:          
         [_NandAddrL]=R3 
         [_NandAddrH]=R4 
GetNorBlock_:          
         CALL SetSearchingAddr 
         R5=R3|0xfe00 
         JMP GetNorBlock1 
GetNorBlock0: 
         R5+=1 
         JCC GetNorBlock1 
         CALL ChgSearchingAddr 
GetNorBlock1: 
         RBYTE_         
         JNE GetNorBlock2 
         PC=DealCoordBlank 
GetNorBlock2: 
         CMP R1,[_XValue] 
         JA GetNorBlockSkip1 
         R5+=1 
         JCC GetNorBlock3 
         CALL ChgSearchingAddr         
GetNorBlock3: 
         RBYTE_ 
         CMP R1,[_XValue] 
         JB GetNorBlockSkip2 
         R5+=1 
         JCC GetNorBlock4 
         CALL ChgSearchingAddr        
GetNorBlock4: 
         RBYTE_ 
         CMP R1,[_YValue] 
         JA GetNorBlockSkip3 
         R5+=1 
         JCC GetNorBlock5 
         CALL ChgSearchingAddr        
GetNorBlock5: 
         RBYTE_ 
         CMP R1,[_YValue] 
         JB GetNorBlockSkip4 
         PC=GetNorBlockOk          
GetNorBlockSkip1: 
         R5+=1 
         JCC GetNorBlockSkip1_ 
         CALL ChgSearchingAddr     
GetNorBlockSkip1_: 
         RBYTE2 
GetNorBlockSkip2: 
         R5+=1 
         JCC GetNorBlockSkip2_ 
         CALL ChgSearchingAddr   
GetNorBlockSkip2_: 
         RBYTE2 
GetNorBlockSkip3: 
         R5+=1 
         JCC GetNorBlockSkip3_ 
         CALL ChgSearchingAddr         
GetNorBlockSkip3_: 
         RBYTE2 
GetNorBlockSkip4: 
         R5+=1 
         JCC GetNorBlockSkip4_ 
         CALL ChgSearchingAddr       
GetNorBlockSkip4_: 
         RBYTE2 
GetNorBlockSkip5: 
         R5+=1 
         JCC GetNorBlockSkip5_ 
         CALL ChgSearchingAddr       
GetNorBlockSkip5_: 
         RBYTE2 
         PC=GetNorBlock0       
 
          
GetNorBlockOk: 
         R5+=1 
         JCC GetNorBlockOkSkip1 
         CALL ChgSearchingAddr        
GetNorBlockOkSkip1: 
         RBYTE_ 
         [_Tmp1]=R1 
         JE GetNorBlockOkSkip1_  
         PC=GetNorBlockRegisterData1 
GetNorBlockOkSkip1_:          
         R5+=1 
         JCC GetNorBlockOkSkip2 
         CALL ChgSearchingAddr        
GetNorBlockOkSkip2: 
         RBYTE_ 
         JE GetNorBlockOkSkip2__ 
         PC=GetNorBlockRegisterData2 
GetNorBlockOkSkip2__:          
         R5+=1 
         JCC GetNorBlockOkSkip2_ 
         CALL ChgSearchingAddr    
GetNorBlockOkSkip2_:          
         RBYTE2 
         R5+=1 
         JCC GetNorBlockOkSkip3 
         CALL ChgSearchingAddr        
GetNorBlockOkSkip3: 
         RBYTE2 
         R5+=1 
         JCC GetNorBlockOkSkip4 
         CALL ChgSearchingAddr        
GetNorBlockOkSkip4: 
         RBYTE2 
         R5+=1 
         JCC GetNorBlockOkSkip5 
         CALL ChgSearchingAddr        
GetNorBlockOkSkip5: 
         RBYTE2 
         PC=GetNorBlockOk 
GetNorBlockRegisterData1: 
         R5+=1 
         JCC GetNorBlockRegisterData1_ 
         CALL ChgSearchingAddr  
GetNorBlockRegisterData1_: 
         RBYTE_ 
GetNorBlockRegisterData2:    
         R1=R1 LSL 4 
         R4=R1 LSL 4 
         R4|=[_Tmp1] 
         DATAOUT 
         R1=R4  
         R1-=1 
         RETF 
          
GetBlockBlank: 
         DATAOUT 
         R1=0 
         RETF