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

📄 boot_v2.a66

📁 TQ公司的STK16x开发系统的源码
💻 A66
📖 第 1 页 / 共 2 页
字号:
                                        ; Set FCONCS2 register
_FCS2  SET  (_BTYP2<<4) OR (_RDYMOD2<<2) OR (_RDYEN2<<1) OR (_ENCS2)
                MOV     R0,#_FCS2
                MOV     FCONCS2,R0

$ENDIF

$IF (CONFIG_CS3)  
                                        ; Set TCONCS3 register
_TCS3           SET     (_PHD3<<5) OR (_PHC3<<3) OR (_PHB3<<2) OR (_PHA3)
_TCS3           SET     _TCS3 OR (_WRPHF3<<13) OR (_RDPHF3<<11) OR (_PHE3<<6)
                MOV     R0,#_TCS3
                MOV     TCONCS3,R0
                                        ; Set ADDRSEL3 register
CALC_ADDRSEL    _ADDRSEL3, _ADDR3, _SIZE3
                MOV     R0,#_ADDRSEL3
                MOV     ADDRSEL3,R0
                                        ; Set FCONCS3 register
_FCS3  SET  (_BTYP3<<4) OR (_RDYMOD3<<2) OR (_RDYEN3<<1) OR (_ENCS3)
                MOV     R0,#_FCS3
                MOV     FCONCS3,R0

$ENDIF

$IF (CONFIG_CS4)  
                                        ; Set TCONCS4 register
_TCS4           SET     (_PHD4<<5) OR (_PHC4<<3) OR (_PHB4<<2) OR (_PHA4)
_TCS4           SET     _TCS4 OR (_WRPHF4<<13) OR (_RDPHF4<<11) OR (_PHE4<<6)
                MOV     R0,#_TCS4
                MOV     TCONCS4,R0
                                        ; Set ADDRSEL4 register
CALC_ADDRSEL    _ADDRSEL4, _ADDR4, _SIZE4
                MOV     R0,#_ADDRSEL4
                MOV     ADDRSEL4,R0
                                        ; Set FCONCS4 register
_FCS4  SET  (_BTYP4<<4) OR (_RDYMOD4<<2) OR (_RDYEN4<<1) OR (_ENCS4)
                MOV     R0,#_FCS4
                MOV     FCONCS4,R0

$ENDIF

$IF (CONFIG_CS5)  
                                        ; Set TCONCS5 register
_TCS5           SET     (_PHD5<<5) OR (_PHC5<<3) OR (_PHB5<<2) OR (_PHA5)
_TCS5           SET     _TCS5 OR (_WRPHF5<<13) OR (_RDPHF5<<11) OR (_PHE5<<6)
                MOV     R0,#_TCS5
                MOV     TCONCS5,R0
                                        ; Set ADDRSEL5 register
CALC_ADDRSEL    _ADDRSEL5, _ADDR5, _SIZE5
                MOV     R0,#_ADDRSEL5
                MOV     ADDRSEL5,R0
                                        ; Set FCONCS5 register
_FCS5  SET  (_BTYP5<<4) OR (_RDYMOD5<<2) OR (_RDYEN5<<1) OR (_ENCS5)
                MOV     R0,#_FCS5 
                MOV     FCONCS5,R0

$ENDIF

$IF (CONFIG_CS6)  
                                        ; Set TCONCS6 register
_TCS6           SET     (_PHD6<<5) OR (_PHC6<<3) OR (_PHB6<<2) OR (_PHA6)
_TCS6           SET     _TCS6 OR (_WRPHF6<<13) OR (_RDPHF6<<11) OR (_PHE6<<6)
                MOV     R0,#_TCS6
                MOV     TCONCS6,R0
                                        ; Set ADDRSEL6 register
CALC_ADDRSEL    _ADDRSEL6, _ADDR6, _SIZE6
                MOV     R0,#_ADDRSEL6
                MOV     ADDRSEL6,R0
                                        ; Set FCONCS6 register
_FCS6  SET  (_BTYP6<<4) OR (_RDYMOD6<<2) OR (_RDYEN6<<1) OR (_ENCS6)
                MOV     R0,#_FCS6 
                MOV     FCONCS6,R0

$ENDIF

$IF (CONFIG_CS7)  
                                        ; Set TCONCS7 register
_TCS7           SET     (_PHD7<<5) OR (_PHC7<<3) OR (_PHB7<<2) OR (_PHA7)
_TCS7           SET     _TCS7 OR (_WRPHF7<<13) OR (_RDPHF7<<11) OR (_PHE7<<6)
                MOV     R0,#_TCS7
                MOV     TCONCS7,R0
                                        ; Set ADDRSEL7 register
CALC_ADDRSEL    _ADDRSEL7, _ADDR7, _SIZE7
                MOV     R0,#_ADDRSEL7
                MOV     ADDRSEL7,R0
                                        ; Set FCONCS7 register
_FCS7  SET  (_BTYP7<<4) OR (_RDYMOD7<<2) OR (_RDYEN7<<1) OR (_ENCS7)
                MOV     R0,#_FCS7 
                MOV     FCONCS7,R0

$ENDIF

$IF (INIT_RSTCON = 1)                   ; Set RSTCON register
_RSTCON         SET     (_ROCOFF<<5) OR (_RORMV<<4) OR (_RSTLEN)
_RSTCON         SET     _RSTCON OR (_RODIS<<7) OR (_ROCON<<6)
                MOV     R0,#_RSTCON
                MOV     RSTCON,R0
$ENDIF

$IF (INIT_PLLCON = 1)                   ; Set PLLCON register
_PLLCON         SET     (_PLLVB<<6) OR (_PLLIDIV<<4) OR (_PLLODIV)
_PLLCON         SET     _PLLCON OR (_PLLWRI<<15) OR (_PLLCTRL<<13) OR (_PLLMUL<<8)
                EXTR    #01H            ; Extended SFR access
                MOV     PLLCON,#_PLLCON
$ENDIF

$IF (INIT_FOCON = 1)                    ; Set FOCON register
_FOCON          SET (_CLKEN<<7) OR (_FORV<<8) OR (_FOSS<<14) OR (_FOEN<<15)
                MOV     FOCON,#_FOCON
$ENDIF
;
                                        ; Set VECSEG register
		MOV	VECSEG,#INT_ADR_SEG

		EINIT   

CMD_LOOP:	CALL	GETCHAR			; GETCHAR
		CMPB	RL4,#WR_MEM		; MEMORY WRITE
		JMPR	CC_EQ,WRITE_MEM
		CMPB	RL4,#GO_COMMAND		; START MONITOR
		JMPR	CC_EQ,START_MON
		CMPB	RL4,#GET_MON_SUM	; MONITOR LOADED?
		JMPR	CC_EQ,MON_CHECKSUM

		MOV	R4,#00ABH		; SEND A SYNC 0xAB to mark C166V2!
		CALL	PUTCHAR			; PUTCHAR
		JMPR	CC_UC,CMD_LOOP


START_MON:	MOV	R14,#GO_COMMAND	; START MONITOR
		CALL	GETCHAR
		MOVBZ	R5,RL4
		CALL	GETCHAR
		MOV	RH6,RL4
		CALL	GETCHAR
		MOV	RL6,RL4
		CALL	GETCHAR
		CALL	GETCHAR
		CALL	GETCHAR
		CALL	GETCHAR		; READ FOR CHECKSUM
		MOV	R15,#E_CHECKSUM
		AND	R14,#00FFH
		JMP	CC_NZ,STATUS_MSG
		MOV	R4,#ACK	; SEND STATUS OK
		CALL	PUTCHAR
		PUSH	R5	; INDIRECT JUMP SEGMENTED
		PUSH	R6
;		RETS
		DB	0DBH, 000H	; CODE FOR RETS TO AVOID WARNING



MON_CHECKSUM:	MOV	R14,#GET_MON_SUM	; check if monitor already
		CALL	GETCHAR			; present
		MOVBZ	R5,RL4
		CALL	GETCHAR
		MOV	RH1,RL4
		CALL	GETCHAR
		MOV	RL1,RL4
		CALL	GETCHAR
		MOV	RH7,RL4
		CALL	GETCHAR
		MOV	RL7,RL4
		CALL	GETCHAR
		MOV	R15,#E_CHECKSUM
		AND	R14,#00FFH
		JMP	CC_NZ,STATUS_MSG

		MOV	R3,#0

MC_1:		EXTS	R5,#1
		ADD	R3,[R1+]	; no overflow possible
		SUB	R7,#2
		JMP	CC_UGT,MC_1

		MOV	R14,ZEROS
		MOV	R4,#STX
		CALL	PUTCHAR
		MOV	RL4,#02		; length of error message
		CALL	PUTCHAR
		MOV	RL4,RH3
		CALL	PUTCHAR
		MOV	RL4,RL3
		CALL	PUTCHAR
		MOV	R4,ZEROS
		SUB	R4,R14		; CALCULATE CHECKSUM
		CALL	PUTCHAR
		JMP	CC_UC,CMD_LOOP



WRITE_MEM:	MOV	R14,#WR_MEM	; DELETE CHECKSUM
		CALL	GETCHAR
		MOVBZ	R5,RL4
		CALL	GETCHAR
		MOV	RH6,RL4
		CALL	GETCHAR
		MOV	RL6,RL4
		CALL	GETCHAR
		MOV	RL7,RL4
		MOV	R15,#E_NORAM	; ERROR: NO MEMORY AT ADDRESS

WM_1:		CALL	GETCHAR
		EXTS	R5,#2
		MOVB	[R6],RL4
		MOVB	RL3,[R6]
		CMP	RL3,RL4
		JMP	CC_NE,STATUS_MSG
		ADD	R6,#1
		ADDC	RL5,#0
		SUB	RL7,#1
		JMP	CC_NZ,WM_1

		CALL	GETCHAR		; READ FOR CHECKSUM
		AND	R14,#00FFH
		JMP	CC_Z,STATUS_OK
		MOV	R15,#E_CHECKSUM
;		JMP	CC_UC,STATUS_MSG

STATUS_MSG:	MOV	R14,ZEROS
		MOV	R4,#NACK
		CALL	PUTCHAR
		MOV	RL4,#01		; length of error message
		CALL	PUTCHAR
		MOV	R4,R15
		CALL	PUTCHAR
		MOV	R4,ZEROS
		SUB	R4,R14		; CALCULATE CHECKSUM
		CALL	PUTCHAR
		JMP	CC_UC,CMD_LOOP

STATUS_OK:	MOV	R4,#ACK
		CALL	PUTCHAR
		JMP	CC_UC,CMD_LOOP
START2		ENDP


; RETURN VALUE IN RL4
GETCHAR		PROC	NEAR
         	JNB     S0RIC.7,$ 
		BCLR    S0RIC.7
		MOVB    RL4,S0RBUF 
		ADD     R14,R4		; R14 = CHECKSUM
		RET
GETCHAR		ENDP

; VALUE IN RL4
PUTCHAR		PROC	NEAR
		JNB     S0TIR,$
		BCLR    S0TIR
		MOVBZ   R4,RL4
		MOV     S0TBUF,R4
		ADD     R14,R4		; R14 = CHECKSUM
		RET
ENDBOOT:
PUTCHAR         ENDP


BOOTSTRAP	ENDS


		END

⌨️ 快捷键说明

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