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

📄 utils.a51

📁 mstar 776 开发的车载dvd
💻 A51
字号:
#define PUTCHAR _putchar

ENTRY MACRO symbol
    PUBLIC symbol
    symbol:
      ENDM

NAME	UTILS

?PR?utils?UTILS SEGMENT CODE PAGE

    EXTRN   CODE ( ?C?ISTPTR )
    EXTRN   CODE ( ?C?PSTPTR )
    EXTRN   CODE ( ?C?LSTPTR )
    EXTRN   CODE ( ?C?CLDPTR )
    EXTRN   CODE ( ?C?ILDPTR )
    EXTRN   CODE ( ?C?PLDPTR )
    EXTRN   CODE ( ?C?LLDPTR )
    EXTRN   CODE ( PUTCHAR )

	USING	0

    RSEG ?PR?utils?UTILS

;
; U32 MDrv_ByteSwapU32( U32 u32Val );
;
ENTRY _MDrv_ByteSwapU32
    XCH     A, R4
    XCH     A, R7
    XCH     A, R4
    XCH     A, R5
    XCH     A, R6
    XCH     A, R5
    RET
;
; void MDrv_WriteU16LE( U16 *pLoc, U16 u16Val );
;
ENTRY _MDrv_WriteU16LE
    MOV     B, R4
    MOV     A, R5
    LJMP    ?C?ISTPTR
;
; void MDrv_WriteU24LE( U32 *pLoc, U32 u32Val );
;
ENTRY _MDrv_WriteU24LE
    MOV     A, R7
    PUSH    ACC
    MOV     A, R6
    PUSH    ACC
    MOV     A, R5
    PUSH    ACC
    LCALL   ?C?PSTPTR
    RET
;
; void MDrv_WriteU32LE( U32 *pLoc, U32 u32Val );
;
ENTRY _MDrv_WriteU32LE
    ACALL   _MDrv_ByteSwapU32
    LJMP    ?C?LSTPTR

;
; U16 MDrv_ReadU16LE( U16 *pLoc );
;
ENTRY _MDrv_ReadU16LE
    LCALL   ?C?ILDPTR
    MOV     R6, B
    MOV     R7, A
    RET

;
; U32 MDrv_ReadU24LE( U16 *pLoc );
;
ENTRY _MDrv_ReadU24LE
    LCALL   ?C?PLDPTR
    CLR     A
    MOV     R4, A
    MOV     A, R1
    MOV     R5, A
    MOV     A, R2
    MOV     R6, A
    MOV     A, R3
    MOV     R7, A
    RET

;
; U32 MDrv_ReadU32LE( U16 *pLoc );
;
ENTRY _MDrv_ReadU32LE
    LCALL   ?C?LLDPTR
    SJMP    _MDrv_ByteSwapU32

;
; void MDrv_Write2Byte( U16 u16Reg, U16 u16Val );
;
ENTRY _MDrv_Write2Byte
    MOV     DPH, R6
    MOV     DPL, R7
    MOV	    A, R5
    MOVX    @DPTR, A
    INC     DPTR
    MOV     A, R4
    MOVX    @DPTR, A
    RET

;
; U16 MDrv_Read2Byte( U16 u16Reg );
;
ENTRY _MDrv_Read2Byte
    MOV     DPH, R6
    MOV     DPL, R7
    MOVX    A, @DPTR
    MOV	    R7, A
    INC     DPTR
    MOVX    A, @DPTR
    MOV     R6, A
    RET

;
; void MDrv_WriteRegBit( U16 u16Reg, U8 bBit, U8 u8BitMask );
;
ENTRY _MDrv_WriteRegBit
    MOV     DPH, R6
    MOV     DPL, R7
    MOVX    A, @DPTR
    ORL     A, R3
    CJNE    R5, #00H, L?Enable
    XRL     A, R3
L?Enable:
    MOVX    @DPTR, A
    RET

;
; void MDrv_WriteRegTbl( MS_REG_INIT * pRegTable );
;
ENTRY _MDrv_WriteRegTbl
    MOV     R4, #HIGH( 1024 )   ; max allowed entries
    MOV     R5, #LOW( 1024 )
REGVAL_LOOP:
    LCALL   ?C?ILDPTR
    MOV     DPL, A
    CJNE    A, #0FFH, REGVAL_NOT_STOP
    MOV     A, B
    CPL     A
    JZ      REGVAL_EXIT
REGVAL_NOT_STOP:
    ;
    ; pRegTable++
    ;
    MOV     A, R1
    ADD     A, #02H
    MOV     R1, A
    JNC     REGVAL_TBL_NOT_CARRY
    INC     R2
REGVAL_TBL_NOT_CARRY:

    MOV     A, B
    MOV     DPH, A
    ANL     DPH, #3FH
    ;
    ; put value length to R0
    ;
    SWAP    A
    RR      A
    RR      A
    ANL     A, #03H
    INC     A
    MOV     R0, A

REGVAL_SET_BYTE:
    PUSH    DPH
    PUSH    DPL
    LCALL   ?C?CLDPTR
    POP     DPL
    POP     DPH
    MOVX    @DPTR, A
    INC     DPTR

    INC     R1
    CJNE    R1, #00, REGVAL_PTR_NOT_CARRY_0
    INC     R2
REGVAL_PTR_NOT_CARRY_0:

    DJNZ    R0, REGVAL_SET_BYTE
    DJNZ    R5, REGVAL_LOOP
    DJNZ    R4, REGVAL_LOOP

REGVAL_EXIT:
    RET

ENTRY _puthex
    MOV     A, R7
    MOV     R0, A

PUTHEX_R6_R0:
    MOV     A, R6
    ACALL   L0
    MOV	    A, R6
    ACALL   L1
    MOV     A, R0
    ACALL   L0
    MOV     A, R0
    ACALL   L1

    RET

L0: SWAP    A				; high nibble
L1: ANL     A, #0FH			; low nibble
    ADD     A, #low(-10)
    JNC	    L2
    ADD     A, #('A' - '0' - 10)
L2: ADD	    A, #('0' + 10)
    MOV     R7, A
    LJMP    PUTCHAR
L3: XCH     A, R7			; C:ABCD
    XCH     A, R0
    LCALL   PUTCHAR
    MOV	    R7, #':'
    LCALL   PUTCHAR

    ACALL   PUTHEX_R6_R0

    MOV     R7, #0AH
    LJMP    PUTCHAR

ENTRY _msWarning
    MOV     A, #'W'
    SJMP    L3

ENTRY _msFatal
    MOV     A, #'F'
    ACALL   L3
    SJMP    $

    END

⌨️ 快捷键说明

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