📄 pagsub.asm
字号:
JMP ForDisp
IsRAMStr: MOV DPTR, #uACTRAM
MOV B, A ; SAVE THE ACTIVE DATA POINTER
DoActRAM: CLR A
MOVC A, @A+DPTR
JZ ChkNextF ; OVER RAM-STRING CHECK!
CJNE A, dFLD_R2, NtActChk
MOV A, #1
MOVC A, @A+DPTR
CJNE A, dFLD_R1, NtActChk
PUSH DPL ; SAVE THE ACT RAM TABLE POINTER
PUSH DPH
MOV A, #2
MOVC A, @A+DPTR
MOV R1, A
MOV A, #3
MOVC A, @A+DPTR
MOV DPL, A
MOV DPH, R1
CLR A
NtTrig: PUSH ACC
MOVC A, @A+DPTR
JZ ForActChk ; NO TRIGER FIND
XRL A, B
JZ RAMUpdate ; IS TRIGER ON
POP ACC
INC A
JMP NtTrig
ForActChk: POP ACC
POP DPH
POP DPL
JMP NtActChk
RAMUpdate: POP ACC
POP DPH
POP DPL
MOV A, #4 ; GET THE FIELD DATA PROCESS SUBROUTE
MOVC A, @A+DPTR
MOV R1, A
MOV A, #5
MOVC A, @A+DPTR
CALL GoToSub
JMP ForDisp
NtActChk: INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
JMP DoActRAM
GoToSub: PUSH ACC
XCH A, R1
PUSH ACC
RET
TimeAddr: MOV A, dFLD_R1 ; FOR TIME FIELD!
CJNE A, #cTIM_START_ADDR, IsInTime
IsInTime: JC ChkNtFT
SUBB A, #cTIM_START_ADDR+cTIM_TICK_NUM+cTIM_SECOND_NUM+cTIM_MINUTE_NUM
JNC ChkNtFT
JMP ForDisp
;#############################################################
; FILE NAME PAGSUB.ASM
; SUBROUTE: FLDTWINKLE - CLEAR THE TWINKLE FIELD
; CALL FUNCTION: LCD_STR
; USING PARMENTERS: A - ADDRESS OF DATA FOR UPDATE DISPLAY
; COMMON DATA USED: GROUP 3 REGISTERS
; CHANGE REGISTER: A, B, (R6, R7)
; RETURN: NONE
;------------------------------------------------------------
FLDTWINKLE: PUSH dPAG_RCD_PNT
PUSH dTAB_RCD_BYTES
CLR A
MOV dPAG_RCD_PNT, A
MOV dTAB_RCD_BYTES, A
TwkNextF: CALL GETRCDPNT
;@@@@@@@@@@@@@@@@@
MOVC A, @A+DPTR
JNZ LookFld
POP dTAB_RCD_BYTES
POP dPAG_RCD_PNT
CALL GETRCDPNT ; -- RESTORE COUSOR
;@@@@@@@@@@@@@@@@@@@
CALL GET_RECORD
DEC dPAG_RCD_PNT
MOV A, dFLD_R7 ; GET ACTIVE FIELD FLAG
RRC A
JC EndTwink ; GET DISPLAY ONLY
RLC A
ORL C, bFLD_ACTIVE ; PASSWORD ON FIELD
JNC EndTwink
;* MOV A, dFLD_R5
;* JNB BA_REVERSE, CursorSet
;* CLR BA_REVERSE
;* MOV dFLD_R5, A
;* CALL DIS_FIELD
;* RET
CursorSet:MOV A, dFLD_INP_PNT
MOV R5, A
CALL LCD_SET_CURSOR ; RESTORE THE CURSOR
EndTwink: RET
LookFld: ;@@@@@@@@@@@@@@@@
CALL GET_RECORD
MOV A, dFLD_R5 ; GET DISPLAY STATUS DEFINE BYTE
RRC A ; GET TWINKLE DISPLAY FLAG
JC TwkClr ; TO TWINKLE CLEAR FIELD
JMP TwkNextF
TwkClr: MOV A, dFLD_R7
ANL A, #03FH
MOV R1, #xDISPBUF
MOV dEXTPART, #cSCDRAM
MOV pPORT2, #cSCDRAM ; INIT EXT. RAM SEGMENT
MOV R7, A
MOV R6, A ; FOR CLEAR OUTPUT
MOV A, #cSPACE
ClrNext: MOVX @R1, A
INC R1
DJNZ R6, ClrNext
MOV R1, #xDISPBUF
LCALL LCD_WTR_STR
MOV dEXTPART, #0 ; FOR RESTORE AFTER PORT2 CHANGED
MOV pPORT2, #0 ; RESTORE EXT. RAM SEGMENT
JMP TwkNextF
END
;#############################################################
; FILE NAME PAGSUB.ASM
; SUBROUTE: FLD_LEFT - MOVE THE FIELD POINTER TO UP ONE
; CALL FUNCTION: FLD_LEFT
; USING PARMENTERS: dSYSPAGE - THE NUMBER OF CURRENT PAGE
; dPAG_RCD_PNT - THE NUMBER OF OFFSET BYTES FOR CURRENT RECORD
; COMMON DATA USED:
; CHANGE REGISTER: R2, C, dPAG_RCD_PNT AS THE FIELD OFFSET
; RETURN: dPAG_RCD_PNT - THE POINT TO NEXT FIELD
;------------------------------------------------------------
PROC FLD_LEFT, FLD_RIGHT
FLD_LEFT: PUSH dPAG_RCD_PNT
CALL GETRCDPNT
CALL GET_RECORD
DEC dPAG_RCD_PNT
MOV A, dFLD_R5
JNB BA_REVERSE, DecNextF
CALL DIS_FIELD
DecNextF: MOV A, dPAG_RCD_PNT
JZ ToButton
DEC dPAG_RCD_PNT
CALL GETRCDPNT
;@@@@@@@@@@@@
MOV R0, A ; --- CHECK TABLE IN OR OUT
MOVC A, @A+DPTR
XRL A, #080H ; IS TABLE START FLAG
JNZ ForTabEnd
MOV dTAB_RCD_BYTES, A
JMP DecNextF
ForTabEnd: XRL A, #0C0H ; IS TABLE END FLAG
JNZ IsThisFld
MOV A, R0
INC A
MOVC A, @A+DPTR
MOV dTAB_RCD_BYTES, A
JMP DecNextF
IsThisFld: POP ACC ; get current record pointer
CJNE A, dPAG_RCD_PNT, ForDecNt
RET
ForDecNt: PUSH ACC ; RE-SAVE CURRENT RECORD POINTER
CALL GETRCDPNT
;@@@@@@@@@@@@
MOVC A, @A+DPTR
RLC A
JC DecNextF
RLC A ; IT'S PASSWORD R/W FIELD?
ORL C, bFLD_ACTIVE ; IT'S R/W FIELD?
JNC DecNextF
Is_This: POP ACC
MOV dFLD_INP_PNT, #0
;@@@@@@@@@@@@@@
CALL FLDCURSOR
RET
ToButton: INC A
PUSH ACC
MOV B, #8
MUL AB
XCH A, B
ADD A, DPH
MOV DPH, A
MOV A, B
;@@@@@@@@@@@@@
MOVC A, @A+DPTR
JZ ChkUpOne
MOV DPH, dPAG_DPH ; RESET THE DPTR
MOV DPL, dPAG_DPL ; FOR NEXT FIELD
POP ACC
JMP ToButton
ChkUpOne: POP ACC
MOV dPAG_RCD_PNT, A
JMP DecNextF
;#############################################################
; FILE NAME PAGSUB.ASM
; SUBROUTE: FLD_RIGHT - THE DATA IN CURRENT FIELD INC ONE
; CALL FUNCTION: GET_RECORD, LCDCURP
; USING PARMENTERS: NONE
;
; COMMON DATA USED:
; CHANGE REGISTER:
; RETURN: NONE
;------------------------------------------------------------
FLD_RIGHT: PUSH dPAG_RCD_PNT
CALL GETRCDPNT
CALL GET_RECORD
DEC dPAG_RCD_PNT
MOV A, dFLD_R5
JNB BA_REVERSE, IncNextF
CALL DIS_FIELD
IncNextF: INC dPAG_RCD_PNT
CALL GETRCDPNT
;@@@@@@@@@@@@
MOV R0, A ; --- CHECK TABLE IN OR OUT
MOVC A, @A+DPTR
XRL A, #080H ; IS TABLE START FLAG
JNZ RtTabEnd
MOV A, R0
INC A
MOVC A, @A+DPTR
MOV dTAB_RCD_BYTES, A
JMP IncNextF
RtTabEnd: XRL A, #0C0H ; IS TABLE END FLAG
JNZ IsThatFld
MOV dTAB_RCD_BYTES, A
JMP IncNextF
IsThatFld: POP ACC
CJNE A, dPAG_RCD_PNT, ForIncNt
RET
ForIncNt: PUSH ACC
CALL GETRCDPNT
;@@@@@@@@@@@@@@@@
MOVC A, @A+DPTR
JNZ ChkThisF
MOV dPAG_RCD_PNT, #0FFH
JMP IncNextF
ChkThisF: RLC A
JC IncNextF
RLC A ; IT'S PASSWORD R/W FIELD?
ORL C, bFLD_ACTIVE ; IT'S R/W FIELD?
JNC IncNextF
Is_That: POP ACC
MOV dFLD_INP_PNT, #0 ; RESET THE OFFSET IN FIELD
;@@@@@@@@@@@@@@
CALL FLDCURSOR
RET
END
;#############################################################
; FILE NAME PAGSUB.ASM
; SUBROUTE: FLD_INC - THE DATA IN CURRENT FIELD INC ONE
; CALL FUNCTION: DELAY
; USING PARMENTERS: NONE
;
; COMMON DATA USED:
; CHANGE REGISTER:
; RETURN: NONE
;------------------------------------------------------------
PROC FLD_INC, FLD_INCH
FLD_INC: CALL GETRCDPNT
CALL GET_RECORD
DEC dPAG_RCD_PNT
MOV A, dFLD_R7
RLC A
JC IncErrT
RLC A
ORL C, bFLD_ACTIVE
JNC IncErrT
MOV A, dFLD_R6
RLC A
RLC A
JC IntegerInc
RLC A
JC FloatI01
RLC A
JC IncErrT ; ASCII IN RAM
RLC A
JC IncErrT ; ASCII IN ROM
MOV A, dFLD_R6
ANL A, #07H
MOV R6, A ; USE R6 FOR BIT INDEX
MOV R1, dFLD_R1
MOV A, dFLD_R2
INC A
JNZ IncExtB
MOV A, @R1 ; IN INNER RAM
LCALL TOC_R6BIT
CPL C
LCALL CTO_R6BIT
MOV @R1, A
JMP IncEnd
IncExtB: DEC A
MOV dEXTPART, A
MOV pPORT2, A
MOVX A, @R1
LCALL TOC_R6BIT
CPL C
CALL CTO_R6BIT
MOVX @R1, A
JMP IncEnd
IncErrT: RET
FloatI01: RLC A
JC IncErrT
MOV A, dFLD_R2
MOV dEXTPART, A
MOV pPORT2, A
MOV A, dFLD_R1 ; R0 - THE POINTER TO THE 3BYTE FLOAT
MOV DPTR, #uF3SETUP
CALL FLD_F3LMT
JNC EndNo_I
MOV R0, dFLD_R1
MOV R7, #7DH ; + (0.1)
MOV R4, #0CCH
MOV R5, #0CCH
CALL F3_ADD
CALL MOVRS_PR0
JMP IncEnd
EndNo_I: RET
IntegerInc:RLC A
RLC A
MOV bUSE1, C
RLC A
MOV bUSE2, C
MOV R1, dFLD_R1
MOV A, dFLD_R2
INC A
JNZ ExtRAMInc
INC @R1
JNB bUSE1, DoubleI
MOV A, @R1 ; FOR BCD CODE PROCESS
ANL A, #0FH
CJNE A, #0AH, IncEnd
MOV A, @R1
ADD A, #6
MOV @R1, A
ANL A, #0F0H
CJNE A, #0A0H, IncEnd
CLR A
MOV @R1, A
JMP IncEnd
DoubleI: JNB bUSE2, IncEnd
MOV A, @R1
JNZ IncEnd
INC R1
INC @R1
JMP IncEnd
ExtRAMInc: DEC A
MOV dEXTPART, A
MOV pPORT2, A ; INIT. EXT. RAM SEGMENT ADDR
MOV A, R1 ; R0 - THE POINTER TO THE INTEGER
MOV DPTR, #uINTSETUP
CALL FLD_INTLMT
JNC EndNo_I
MOVX A, @R1 ; PARMETER R0 - THE INTEGER WILL BE CONVERTED
INC A
MOVX @R1, A
JNB bUSE1, DbIntIe
ANL A, #0FH
CJNE A, #0AH, IncEnd
MOVX A, @R1
ADD A, #6
MOVX @R1, A
ANL A, #0F0H
CJNE A, #0A0H, IncEnd
CLR A
MOVX @R1, A
JMP IncEnd
DbIntIe: JNB bUSE2, IncEnd
JNZ IncEnd
INC R1
MOVX A, @R1
INC A
MOVX @R1, A
IncEnd: MOV A, dFLD_R5
CLR BA_REVERSE
MOV dFLD_R5, A
CALL DIS_FIELD
CLR C
RET
;#############################################################
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -