📄 pagsub.asm
字号:
CJNE A, dLCD_BYTES_ROW, ForDotOut
JMP EndDisFld
IsFloat: CALL FORARRYADJ ; **** ADJUST THE POINTER TO DATA
MOV R2, dFLD_R2
MOV dEXTPART, R2
MOV pPORT2, R2 ; INIT. EXTERN SEGMENT ADDRESS
RLC A
JC ForDotOut ; R6 = 01(?)XXXX FOR DGM DISPLAY
MOV A, dFLD_R7
ANL A, #03FH
PUSH ACC
MOV R1, dFLD_R1
CALL MOVPR1_RS ; R1 - THE POINTER TO THE 3BYTE FLOAT
MOV R1, #xDISPBUF ; PARMETER R1 - THE POINTER TO THE BUFFER FOR STRING
MOV dEXTPART, #cSCDRAM ; FOR RESTORE AFTER PORT2 CHANGED
MOV pPORT2, #cSCDRAM ; INIT. EXTERN RAM SEGMENT ADDR. FOR WORKING ON DISPBUF
POP ACC
PUSH ACC
LCALL F3_TOSTR ; A - THE NUMBER OF CHARACTER IN STRING
;---------------- string output -----------
DoDataOut: MOV R1, #xDISPBUF ; RESET THE STRING BUF POINTER
POP ACC
MOV R7, A ; SET THE MAX LINGTH THAT WILL BE OUTPUT
DoRAMOut: LCALL LCD_WTR_STR ; (dFLD_R4, dFLD_R3) - POSITION, dFLD_R5 - ATTRIBUTE
EndDisFld: MOV dEXTPART, #0 ; FOR RESTORE AFTER PORT2 CHANGED
MOV pPORT2, #0 ; RESTORE THE EXT. RAM SETMENT ADDRESS
RET
END
;#############################################################
; FILE NAME PAGSUB.ASM
; SUBROUTE: DIS_CURFLD - DISPLAY ONE DATA CHANGED FIELD ON LCD
; CALL FUNCTION: DELAY
; USING PARMENTERS: dPAG_DPTR - THE POINT TO THE PAGE BUFFER
; dFLD_R1 - R7 - THE FIELD DEFINE RECORD
; COMMON DATA USED:
; CHANGE REGISTER: C, A, B, R1, R2, R3, R4, R5, R6, R7
; RETURN: NONE
;------------------------------------------------------------
PROC DIS_CURFLD
DIS_CURFLD:MOV A, dFLD_R6 ; FOR DATA TYPE?
RLC A
ORL C, bFLD_ACTIVE ; FIELD DISPLAY ACTIVE
JC ChkFldTyp
DisEnd: RET
IsFloatT: JMP IsFloat
IsIntT: JMP IsInteger
ChkFldTyp: RLC A
JC IsIntT
RLC A
JC IsFloatT
RLC A
JC ForRAMOut
RLC A
JC ForROMOut
; FOR SWITCH FIELD PROCESS
CALL FORARRYADJ ; ADJUST THE POINTER TO DATA
MOV A, dFLD_R6
ANL A, #07H
MOV R6, A
MOV A, dFLD_R2
INC A
JNZ ExtRAMBit
MOV R1, dFLD_R1
MOV A, @R1
JMP GetBit
ExtRAMBit: DEC A
MOV dEXTPART, A
MOV pPORT2, A ; INITIALIZE EXTERN SEGMENT ADDRESS
MOV R1, dFLD_R1
MOVX A, @R1 ;PARMETER R1 - THE INTEGER WILL BE CONVERTED
GetBit: LCALL TOC_R6BIT
MOV A, dFLD_R7
ANL A, #3FH
SWAP A
JNC ForPoint ; GET [A]
CLR C
SUBB A, #8 ; GET [B]-NEXT 8 BYTE
ForPoint: MOV DPL, A
MOV A, dPAG_DPL
SUBB A, DPL
MOV DPL, A ; MOVE THE POINTER TO SWITCH DISPLAY CODE
CLR A
MOV DPH, A
MOV A, dPAG_DPH
SUBB A, DPH
MOV DPH, A
MOV A, #8 ; THE MAX NUMBER WILL BE DISPLAY
JMP DoROMOut
ForROMOut: MOV DPL, dFLD_R1 ; GET THE POINTER TO STRING
MOV DPH, dFLD_R2 ; ....
MOV A, dFLD_R7
ANL A, #03FH
DoROMOut: MOV R7, A ; SAVE THIS NUMBER FOR DISPLAY
MOV R1, #xDISPBUF
MOV dEXTPART, #cSCDRAM ; FOR RESTORE AFTER PORT2 CHANGED
MOV pPORT2, #cSCDRAM ; INIT. EXT. RAM SEGMENT FOR DISPBUF
LCALL MOV_ROMTORAM
MOV R1, #xDISPBUF
JMP DoRAMOut
ForRAMOut: RLC A
MOV bUSE2, C ; IS POINTER TO STRING?
CALL FORARRYADJ ; AJDUST THE DATA POINTER(R2,R1), IF THE RECORD IN TABLE
MOV A, dFLD_R2
INC A
JZ DisEnd
DEC A
MOV dEXTPART, A ; FOR RESTORE AFTER PORT2 CHANGED
MOV pPORT2, A ; INIT. EXT. RAM SEGMENT FOR DISPLAY STRING
MOV R1, dFLD_R1
JB bUSE2, EndDisFldT ; NO PROCESS FOR ROM POINTER
MOV A, dFLD_R7 ; R7 - THE NUMBER OF CHARACTER IN STRING
ANL A, #3FH
MOV R7, A
MOV DPH, #cSCDRAM ; READY FOR INPUT OPERATOR
MOV DPL, #xINPUTBUF
CLR A
MOVX @DPTR, A ; FOR PASSWORD FIELD
MOV A, dFLD_R6
RRC A
JC DoRAMOutT ; IS PASSWIRD FIELD?
MOV A, R7
CALL MOV_RAMTOEXT ; IT'S NORMAL FIELD GET DATA BACK
MOV R1, dFLD_R1
DoRAMOutT:JMP DoRAMOut
EndDisFldT:JMP EndDisFld
IsInteger: CALL FORARRYADJ ; ADJUST THE POINTER TO DATA
RLC A
MOV bUSE3, C ; IS HEX NEED?
RLC A
MOV bUSE2, C ; IS BCD CODE?
RLC A
MOV bUSE1, C ; IS DOUBLE BYTES INTEGER?
MOV A, dFLD_R2
INC A
JNZ ForExtRAM
MOV R1, dFLD_R1
MOV A, @R1
MOV B, A
INC R1
MOV A, @R1
JMP ForIntOut
ForExtRAM: DEC A
MOV dEXTPART, A
MOV pPORT2, A ; INITIALIZE EXTERN SEGMENT ADDRESS
MOV R1, dFLD_R1
MOVX A, @R1 ;PARMETER R1 - THE INTEGER WILL BE CONVERTED
MOV B, A
INC R1
MOVX A, @R1
ForIntOut: MOV R2, A
MOV dEXTPART, #cSCDRAM ; FOR RESTORE AFTER PORT2 CHANGED
MOV pPORT2, #cSCDRAM ; INIT. EXT. RAM SEGMENT ADDR FOR DISPBUF
MOV R1, #xDISPBUF ; R1 - THE POINTER TO THE BUFFER FOR STRING
MOV A, dFLD_R7
ANL A, #3FH
PUSH ACC
XCH A, R2 ; A, B - THE INTEGER, R2 - THE LENGTH
JB bUSE3, HexInt
JB bUSE2, BcdInt
JB bUSE1, TwoInt
MOV A, B
LCALL INT_TOSTR ; A - THE NUMBER OF CHARACTER IN STRING
JMP DoDataOut
BcdInt: MOV A, B
CALL BCD_TOSTR
CLR bUSE2 ; RESET THE BCD CODE CONVERT
JMP DoDataOut
HexInt: MOV A, B
CALL HEX_TOSTR
CLR bUSE3 ; RESET THE INTEGER CONVERT
JMP DoDataOut
TwoInt: CALL INT2_TOSTR
CLR bUSE1 ; RESET THE TWO BYTES INTEGER CONVERT
JMP DoDataOut
;---------------------------------- float data process
IsFloat: CALL FORARRYADJ ; **** ADJUST THE POINTER TO DATA
MOV R2, dFLD_R2
MOV dEXTPART, R2
MOV pPORT2, R2 ; INIT. EXTERN SEGMENT ADDRESS
RLC A
JC EndDisFld ; R6 = 01(1)XXXX, nothing to do FOR DGM DISPLAY
MOV A, dFLD_R7
ANL A, #03FH
PUSH ACC
MOV R1, dFLD_R1
CALL MOVPR1_RS ; R1 - THE POINTER TO THE 3BYTE FLOAT
MOV R1, #xDISPBUF ; PARMETER R1 - THE POINTER TO THE BUFFER FOR STRING
MOV dEXTPART, #cSCDRAM ; FOR RESTORE AFTER PORT2 CHANGED
MOV pPORT2, #cSCDRAM ; INIT. EXTERN RAM SEGMENT ADDR. FOR WORKING ON DISPBUF
POP ACC
PUSH ACC
LCALL F3_TOSTR ; A - THE NUMBER OF CHARACTER IN STRING
;---------------- string output -----------
DoDataOut: MOV R1, #xDISPBUF ; RESET THE STRING BUF POINTER
POP ACC
MOV R7, A ; SET THE MAX LINGTH THAT WILL BE OUTPUT
MOV DPH, #cSCDRAM ; READY FOR INPUT OPERATOR
MOV DPL, #xINPUTBUF
CALL MOV_RAMTOEXT ; IT'S NORMAL FIELD GET DATA BACK
MOV R1, #xDISPBUF
DoRAMOut: LCALL LCD_WTR_STR ; (dFLD_R4, dFLD_R3) - POSITION, dFLD_R5 - ATTRIBUTE
EndDisFld: MOV dEXTPART, #0 ; FOR RESTORE AFTER PORT2 CHANGED
MOV pPORT2, #0 ; RESTORE THE EXT. RAM SETMENT ADDRESS
RET
END
;#############################################################
; FILE NAME PAGSUB.ASM
; SUBROUTE: FLDCURSOR - DISPLAY THE CURSOR ON CURRENT POSITION
; CALL FUNCTION: LCDCURP
; USING PARMENTERS: pDISPBUFc, PAGE REGISTER GROUP
; COMMON DATA USED: GROUP 3 REGISTERS
; CHANGE REGISTER: R6, R7
; RETURN: NONE
;------------------------------------------------------------
PROC FLDCURSOR, FIX_FLD
FLDCURSOR: CALL GETRCDPNT ; LET DPTR POINTER TO CURRNT FIELD IN PAGE
CALL GET_RECORD
DEC dPAG_RCD_PNT
MOV A, dFLD_R6
RLC A
RLC A
JC IntProc
RLC A
JC F3_Proc
RLC A
JC RAMAsc
PutCursor:MOV A, dFLD_R5
JNB BA_REVERSE, SetCursor
CLR BA_REVERSE
MOV dFLD_R5, A
CALL DIS_CURFLD
RET
SetCursor:MOV A, dFLD_INP_PNT
MOV R5, A
CALL LCD_SET_CURSOR ; RESTORE THE CURSOR
RET
IntProc: AJMP PutCursor ; %%%%%No active NOW
F3_Proc: RLC A
JC PutCursor
CALL FORARRYADJ ; **** ADJUST THE POINTER TO DATA
MOV R2, dFLD_R2
MOV dEXTPART, R2
MOV pPORT2, R2 ; INIT. EXTERN SEGMENT ADDRESS
MOV R1, dFLD_R1
CALL MOVPR1_RS ; R1 - THE POINTER TO THE 3BYTE FLOAT
MOV R1, #xDISPBUF ; PARMETER R1 - THE POINTER TO THE BUFFER FOR STRING
MOV dEXTPART, #cSCDRAM ; FOR RESTORE AFTER PORT2 CHANGED
MOV pPORT2, #cSCDRAM ; INIT. EXTERN RAM SEGMENT ADDR. FOR WORKING ON DISPBUF
MOV A, dFLD_R7
ANL A, #03FH
LCALL F3_TOSTR ; A - THE NUMBER OF CHARACTER IN STRING
MOV R1, #xDISPBUF ; PARMETER R1 - THE POINTER TO THE BUFFER FOR STRING
JMP CopyTo
RAMAsc: RLC A
JC PutCursor
RLC A
RLC A
RLC A
MOV dEXTPART, dFLD_R2
MOV pPORT2, dEXTPART
MOV R1, dFLD_R1
JNC CopyTo
CLR A
MOVX @R1, A
CopyTo: MOV DPH, #cSCDRAM
MOV DPL, #xINPUTBUF
MOV A, #3FH
ANL A, dFLD_R7
CALL MOV_RAMTOEXT
JMP PutCursor
;#######################################################################
; FILE NAME PAGSUB.ASM
; SUBROUTE: FIX_FLD - MOVE THE FIELD POINTER TO THE FRIST D/W FIELD
; CALL FUNCTION: GET_DPTR, GET_RECORD
; USING PARMENTERS: dSYSPAGE - THE NUMBER OF DISPLAY PAGE POINTER
; COMMON DATA USED:
; CHANGE REGISTER: ALL REGISTER C , dPAG_RCD_PNT AS THE FIELD OFFSET
; RETURN: NONE
;------------------------------------------------------------
FIX_FLD: CLR A
MOV dFLD_INP_PNT, A
MOV dPAG_RCD_PNT, A ; RESET THE FIELD RECORD POINTER
MOV dTAB_RCD_BYTES, A ; RESET TO NO TABLE ON
FixNextF: CALL GETRCDPNT ; GET THE RCECORD POINT
;-- JB bSIMULATE, SIMFstByt ;@@@@@@@@@@@@@
MOVC A, @A+DPTR
ForFixTo: JZ EndFixFld
RLC A
JC ForNextF
RLC A
ORL C, bFLD_ACTIVE ; IS PASSWORD R/W FIELD?
JC FixToFld
ForNextF: INC dPAG_RCD_PNT
JMP FixNextF
SIMFstByt: ;@@@@@@@@@@@@ GET (dFLD_R4, dFLD_R3)
MOV A, dFLD_R7
JMP ForFixTo
EndFixFld: DEC dPAG_RCD_PNT
RET
FixToFld: CALL FLDCURSOR
RET
END
;#############################################################
; FILE NAME PAGSUB.ASM
; SUBROUTE: FLDUPDATE - REDISPLAY THE DATA CHANGED OR 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
;------------------------------------------------------------
PROC FLDUPDATE, FLDTWINKLE
FLDUPDATE: PUSH dPAG_RCD_PNT
PUSH dTAB_RCD_BYTES
PUSH ACC
CLR A
MOV dPAG_RCD_PNT, A
MOV dTAB_RCD_BYTES, A
ChkNextF: CALL GETRCDPNT
;@@@@@@@@@@@@@@@@@
MOVC A, @A+DPTR
JNZ FldChk
POP ACC ; ALL FIELD CHECK OVER
POP dTAB_RCD_BYTES
POP dPAG_RCD_PNT
CALL GETRCDPNT ; ---- RESTORE CUTSOR
;@@@@@@@@@@@@@@@@@@@
CALL GET_RECORD
DEC dPAG_RCD_PNT
MOV A, dFLD_R7 ; GET ACTIVE FIELD FLAG
RLC A
JC EndUpdate ; GET DISPLAY ONLY
RLC A
ORL C, bFLD_ACTIVE
JNC EndUpdate
;* MOV A, dFLD_R5
;* JNB BA_REVERSE, SetCursor
;* CLR BA_REVERSE
;* MOV dFLD_R5, A
;* CALL DIS_FIELD
;* RET
SetCursor:MOV A, dFLD_INP_PNT
MOV R5, A
CALL LCD_SET_CURSOR ; RESTORE THE CURSOR
EndUpdate: RET
FldChk: ;@@@@@@@@@@@@@@@@
CALL GET_RECORD
MOV A, dFLD_R5 ; GET DISPLAY STATUS DEFINE BYTE
RRC A ; GET TWINKLE DISPLAY FLAG
JC ForDisp
UpdateFld: MOV A, dFLD_R6
RLC A
ORL C, bFLD_ACTIVE ; IS IT PASSWORD R/W FIELD?
JNC ChkNextF
DoUpChk: RLC A
JC UpDateChk
RLC A
JC UpDateChk
RLC A
JC IsRAMData
RLC A
JC ChkNextF ; ROM STRING - NO UPDATE
UpDateChk: POP ACC ; GET THE ADDRESS OR DATA
PUSH ACC ; RE-SAVE IT
MOV R2, dFLD_R2
CJNE R2, #0FFH, ForAddChk
JZ TimeAddr ; DO TIME DATA CHECK
ForAddChk: CLR C
SUBB A, dFLD_R1
JNZ ChkNextF
ForDisp: CALL DIS_FIELD
ChkNtFT: JMP ChkNextF
IsRAMData: RLC A
POP ACC ; GET THE ADDRESS OR DATA
PUSH ACC ; RE-SAVE IT
JNC IsRAMStr
CLR C
SUBB A, dFLD_R1
JNZ ChkNextF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -