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

📄 bootphy4.a66

📁 keilc pic的版本 才搞到的 希望对大家有帮助
💻 A66
字号:
$MOD167					; Define 80C167 mode
$INCLUDE (REG167.INC)
;
;-----------------------------------------------------------------------------
;  This file is part of the C166 Compiler package
;  Copyright KEIL ELEKTRONIK GmbH 1993
;-----------------------------------------------------------------------------
;  BOOT167.A66:  This code is executed after processor reset when the
;                bootstrap mode is enabled and provides the initialization
;                of the 80C167 processor and downloading of MONITOR167.
;
;-----------------------------------------------------------------------------
;
; Definitions for SYSCON and BUSCON0 Register:
; --------------------------------------------
$INCLUDE (CONFPHY4.INC)


WR_MEM		EQU	1	; write memory
GO_COMMAND	EQU	6	; go command
GET_MON_SUM	EQU	16	; get monitor checksum

E_NOERROR	EQU	0	; no error                     ACK
E_UNKNOWN	EQU	1	; unknown command              len = 1
E_CHECKSUM	EQU	2	; checksum error               len = 1
E_NORAM		EQU	3	; no RAM at address            len = 4

STX		EQU	02H	; Start of TeXt
ENQ		EQU	05H	; ENQuiry
ACK		EQU	06H	; ACKnowledge
DC1		EQU	11H	; Ctrl+Q
NACK		EQU	15H	; Negative ACKnowledge


BOOTSTRAP  SECTION CODE AT 0FA40H

BOOT		PROC	NEAR
$IF NOT (BOOT960)
START:		MOV	R0,#0FA60H		; Start of bootstrap code
LAB1:		JNB	S0RIC.7,LAB1		; when CPU expects 32 Bytes
		MOVB	[R0],S0RBUF
		BCLR	S0RIC.7
		CMPI1	R0,#ENDBOOT-1
		JMPR	CC_NZ,LAB1
$ENDIF
		DISWDT  			; Start of bootstrap code
		MOV	STKOV,#0FA00H		; when CPU expects 960 Bytes
		MOV	STKUN,#0FC00H

		MOV     SP,#0FC00H		; at address 0FA60H
		MOV	CP,#0FC00H
		MOV	TFR,ZEROS
		MOV	PSW,ZEROS
$IF (BTYP_ENABLE == 0)
		BFLDL	BUSCON0,#03FH,#BCON0L
		BFLDH	BUSCON0,#012H,#BCON0H
$ELSE
		BFLDL	BUSCON0,#0FFH,#BCON0L
		BFLDH	BUSCON0,#016H,#BCON0H
$ENDIF
		BFLDH	SYSCON,#0FFH,#SYS_H
		BFLDL	SYSCON,#080H,#SYS_L

; Initialization for BUSCON1-4 or ADDRSEL1-4 when additional RAM is 
; connected to CS1-4
; Example:
;   2 *  1 MBit * 8 RAM's are connected to CS#1 (00000H - FFFFFH)
;   ---> BUSCON1 and ADDRSEL1 must be initialized
;		MOV	ADDRSEL1,#0008H	; 1MB RAM BANK1 (00:0000H - 0F:FFFFH)
;      MOV   BUSCON1,BUSCON0

      JMPS  SEG NEXT, NEXT

NEXT: LABEL FAR

		MOV	DPP0,#0000H
		MOV	DPP1,#0001H
		MOV	DPP2,#0002H
		MOV	DPP3,#0003H

		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,#00AAH		; SEND A SYNC 'AA'
		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_NZ,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


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

; VALUE IN RL4
PUTCHAR:	JNB     S0TIC.7,$
		BCLR    S0TIC.7
		MOVBZ   R4,RL4
		MOV     S0TBUF,R4
		ADD     R14,R4		; R14 = CHECKSUM
		RET
ENDBOOT:

BOOT		ENDP

BOOTSTRAP	ENDS


		END

⌨️ 快捷键说明

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