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