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

📄 sysdef.inc

📁 基于HS108设计的红外水位检测仪
💻 INC
📖 第 1 页 / 共 5 页
字号:
	r0			EQU 	0x00		;Indirect Addressing Register
	DirR		EQU 	0x00		;Indirect Addressing Register
	r2			EQU		0x02		;Program Counter Register
	r3			EQU 	0x03		;Status Register
	sr			EQU 	0x03		;Status Register
	r4		 	EQU 	0x04		;RAM Select Register
	SelRamR 	EQU 	0x04		;RAM Select Register
	cflag		EQU 	0			;bit number of the carry flag
	zflag   	EQU 	2			;bit number of the zero flag
	eax			EQU 	0x10
	ax 			EQU 	0x10
	al 			EQU 	0x10
	ecx			EQU 	0x14
	cx 			EQU 	0x14
	cl 			EQU 	0x14
	pr0 		EQU 	0x18
	pr1 		EQU 	0x1b

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Macro spec
; LDA _symbol , 0, 0
;          |    |  |
;          |    |  ------access method(0-ram; 1-rom; 2-io; 3-ind)
;          |    --------byte index
;          -----------------address
;
; LDA _symbol , 0, 0
;          |    |  |
;          |    |  ------access method(0-ram; 1-rom; 2-io; 3-ind)
;          |    --------byte index
;          -----------------address
;
; example:
; LDA _g_romttest1,0,1: load the first byte from _g_romttest1 to A with rom access method.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.MACRO	LDA symbol, byteidx, access
	; RAM
	.IF access = 0
		mov a, symbol + byteidx
	.ENDIF

	; ROM
	.IF access = 1
		mov a, @.B0.(symbol + byteidx)
		mov pr0, a
		mov a, @.B1.(symbol + byteidx)
		mov pr0+1, a
		call ReadROM
	.ENDIF
	
	; IO
	.IF access = 2
		ior symbol + byteidx
	.ENDIF
	
	; IND
	.IF access = 3
		mov a, @.B0.(symbol + byteidx)
		mov pr0, a
		mov a, @.B1.(symbol)
		mov pr0+1, a
		mov a, @.B2.(symbol)
		mov pr0+2, a
		call ReadIND
	.ENDIF
.ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.MACRO	STA symbol, byteidx, access
	; RAM
	.IF access = 0
		mov symbol + byteidx, a
	.ENDIF

	; ROM
	.IF access = 1
		ERROR "Can't write to ROM data"
	.ENDIF
	
	; IO
	.IF access = 2
		iow symbol + byteidx
	.ENDIF
	
	; IND
	.IF access = 3
		mov	pr1, a
		mov a, @.B0.(symbol + byteidx)
		mov pr0, a
		mov a, @.B1.(symbol)
		mov	pr0+1, a
		mov a, @.B2.(symbol)
		mov	pr0+2, a
		mov	a, pr1
		call WriteIND
	.ENDIF
.ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.MACRO	LDAP symbol, byteidx, access
	; RAM
	.IF access = 0
		mov a, symbol
		.IF byteidx <> 0
			add a, @byteidx
		.ENDIF
		mov	r4,	a
		mov a, r0
	.ENDIF

	; ROM
	.IF access = 1
		mov a, symbol
		.IF byteidx <> 0
			add a, @byteidx
		.endif
		mov pr0, a
		mov a, symbol + 1
		mov pr0+1, a
		call ReadROM
	.ENDIF
	
	; IO
	.IF access = 2
		ERROR "Can't access to IO data"
	.ENDIF
	
	; IND
	.IF access = 3
		mov	a, symbol
		mov pr0, a
		mov	a, symbol + 1
		mov pr0, a
		mov	a, symbol + 2
		mov pr0, a
		.IF byteidx <> 0
			mov a, @byteidx
			add pr0, a
			jbc sr,cflag
			inc pr0 + 1
		.ENDIF
		call ReadIND
	.ENDIF
.ENDM
	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.MACRO	INCMB addr, access
	; RAM
	.IF access = 0
		inc addr
	.ENDIF

	; ROM
	.IF access = 1
		ERROR "Can't write to ROM data"
	.ENDIF
	
	; IO
	.IF access = 2
		ior addr
		add	a, @1
		iow addr
	.ENDIF
	
	; IND
	.IF access = 3
		mov a, @.B0.(addr)
		mov pr0, a
		mov a, @.B1.(addr)
		mov pr0+1, a
		mov a, @.B2.(addr)
		mov pr0+2, a
		call ReadIND
		add a,@1
		call WriteIND
	.ENDIF
.ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.MACRO	DECMB addr, access
	; RAM
	.IF access = 0
		dec		addr
	.ENDIF

	; ROM
	.IF access = 1
		ERROR "Can't write to ROM data"
	.ENDIF
	
	; IO
	.IF access = 2
		ior		addr
		add		a, @0xff
		iow		addr
	.ENDIF
	
	; IND
	.IF access = 3
		mov		a, @.B0.(addr)
		mov		pr0, a
		mov		a, @.B1.(addr)
		mov		pr0+1, a
		mov		a, @.B2.(addr)
		mov		pr0+2, a
		call	ReadIND
		add		a, @0xff
		call	WriteIND
	.ENDIF
.ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.MACRO	INCMW addr, access
.LOCAL	incmw_end
	; RAM
	.IF access = 0
		inc addr
		jbc	r3, zflag
		inc	addr+1	
	.ENDIF

	; ROM
	.IF access = 1
		ERROR "Can't write to ROM data"
	.ENDIF
	
	; IO
	.IF access = 2
		ior addr
		add	a, @1
		iow addr
		jbs r3, cflag
		jmp	incmw_end
		ior addr+1
		add	a, @1
		iow addr+1
	.ENDIF
	
	; IND
	.IF access = 3
		mov a, @.B0.(addr)
		mov pr0, a
		mov a, @.B1.(addr)
		mov pr0+1, a
		mov a, @.B2.(addr)
		mov pr0+2, a
		call ReadIND
		add a,@1
		call WriteIND
		jbs r3, cflag
		jmp	incmw_end
		mov a, @.B0.(addr)
		add	a, @1
		jbc r3, cflag
		inc	pr0+1
		jbc	r3, zflag
		inc	pr0+2
		mov pr0, a
		call ReadIND
		add a,@1
		call WriteIND
	.ENDIF
incmw_end:	
.ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.MACRO	DECMW addr, access
.LOCAL	decmw_end
.LOCAL	decmw_read
	; RAM
	.IF access = 0
		mov	a, @1
		sub addr,a
		jbs	r3, cflag
		dec	addr+1	
	.ENDIF

	; ROM
	.IF access = 1
		ERROR "Can't write to ROM data"
	.ENDIF
	
	; IO
	.IF access = 2
		ior addr
		add	a, @0xff
		iow addr
		jbc r3, cflag
		jmp	decmw_end
		ior addr+1
		add	a, @0xff
		iow addr+1
	.ENDIF
	
	; IND
	.IF access = 3
		mov a, @.B0.(addr)
		mov pr0, a
		mov a, @.B1.(addr)
		mov pr0+1, a
		mov a, @.B2.(addr)
		mov pr0+2, a
		call ReadIND
		add a,@0xff
		call WriteIND
		jbc r3, cflag
		jmp	decmw_end
		inc	pr0
		jbs	r3, zflag
		jmp	decmw_read
		inc	pr0+1
		jbc	r3, zflag
		inc	pr0+2
decmw_read:		
		call ReadIND
		add a,@0xff
		call WriteIND
	.ENDIF
decmw_end:	
.ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.MACRO	INCMD addr, access
.local	incmd_end
.LOCAL	incmd_read1
.LOCAL	incmd_read2
.LOCAL	incmd_read3
	; RAM
	.IF access = 0
		inc addr
		jbc	r3, zflag
		inc	addr+1
		jbc	r3, zflag	
		inc	addr+2
		jbc	r3, zflag	
		inc	addr+3
	.ENDIF

	; ROM
	.IF access = 1
		ERROR "Can't write to ROM data"
	.ENDIF
	
	; IO
	.IF access = 2
		ior addr
		add	a, @1
		iow addr
		jbs r3, cflag
		jmp	incmd_end
		ior addr+1
		add	a, @1
		iow addr+1
		jbs r3, cflag
		jmp	incmd_end
		ior addr+2
		add	a, @1
		iow addr+2
		jbs r3, cflag
		jmp	incmd_end
		ior addr+3
		add	a, @1
		iow addr+3
	.ENDIF
	
	; IND
	.IF access = 3
		mov a, @.B0.(addr)
		mov pr0, a
		mov a, @.B1.(addr)
		mov pr0+1, a
		mov a, @.B2.(addr)
		mov pr0+2, a
		call ReadIND
		add a,@1
		call WriteIND
		jbs r3, cflag
		jmp	incmd_end
		inc	pr0
		jbs	r3, zflag
		jmp	incmd_read1
		inc	pr0+1
		jbc	r3, zflag
		inc	pr0+2
incmd_read1:
		call ReadIND
		add a,@1
		call WriteIND
		jbs r3, cflag
		jmp	incmd_end
		inc	pr0
		jbs	r3, zflag
		jmp	incmd_read2
		inc	pr0+1
		jbc	r3, zflag
		inc	pr0+2
incmd_read2:		
		call ReadIND
		add a,@1
		call WriteIND
		jbs r3, cflag
		jmp	incmd_end
		inc	pr0
		jbs	r3, zflag
		jmp incmd_read3
		inc	pr0+1
		jbc	r3, zflag
		inc	pr0+2
incmd_read3:
		call ReadIND
		add a,@1
		call WriteIND
	.ENDIF
incmd_end:	
.ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.MACRO	DECMD addr, access
.LOCAL	decmd_end
.LOCAL	decmd_read1
.LOCAL	decmd_read2
.LOCAL	decmd_read3
	; RAM
	.IF access = 0
		mov	a, @1
		sub addr,a
		jbs	r3, cflag
		sub	addr+1, a
		jbs	r3, cflag
		sub	addr+2, a
		jbs	r3, cflag
		sub	addr+3, a
	.ENDIF

	; ROM
	.IF access = 1
		ERROR "Can't write to ROM data"
	.ENDIF
	
	; IO
	.IF access = 2
		ior addr
		add	a, @0xff
		iow addr
		jbc r3, cflag
		jmp	decmd_end
		ior addr+1
		add	a, @0xff
		iow addr+1
		jbc r3, cflag
		jmp	decmd_end
		ior addr+2
		add	a, @0xff
		iow addr+2
		jbc r3, cflag
		jmp	decmd_end
		ior addr+3
		add	a, @0xff
		iow addr+3
	.ENDIF
	
	; IND
	.IF access = 3
		mov a, @.B0.(addr)
		mov pr0, a
		mov a, @.B1.(addr)
		mov pr0+1, a
		mov a, @.B2.(addr)
		mov pr0+2, a
		call ReadIND
		add a,@0xff
		call WriteIND

		jbc r3, cflag
		jmp	decmd_end
		inc	pr0
		jbs	r3, zflag
		jmp	decmd_read1
		inc	pr0+1
		jbc	r3, zflag
		inc	pr0+2
decmd_read1:
		call ReadIND
		add a,@0xff
		call WriteIND

		jbc r3, cflag
		jmp	decmd_end
		inc	pr0
		jbs	r3, zflag
		jmp	decmd_read2
		inc	pr0+1
		jbc	r3, zflag
		inc	pr0+2
decmd_read2:		
		call ReadIND
		add a,@0xff
		call WriteIND

		jbc r3, cflag
		jmp	decmd_end
		inc	pr0
		jbs	r3, zflag
		jmp	decmd_read3
		inc	pr0+1
		jbc	r3, zflag
		inc	pr0+2
decmd_read3:
		call ReadIND
		add a,@0xff
		call WriteIND
	.ENDIF
decmd_end:	
.ENDM


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.MACRO	ADDMRB addr,reg,access
	; RAM
	.IF access = 0
		MOV	a, reg
		ADD addr, a
	.ENDIF
	
	;ROM
	.IF access = 1
		ERROR "Can't write to ROM data"
	.ENDIF
	
	; IO
	.IF access = 2
		ior addr
		add	a, reg
		iow addr
	.ENDIF

	;IND
	.IF access = 3
		mov a, @.B0.(addr)
		mov pr0, a
		mov a, @.B1.(addr)
		mov pr0+1, a
		mov a, @.B2.(addr)
		mov pr0+2, a
		call ReadIND
		add a, reg
		call WriteIND
	.ENDIF

.ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.MACRO	ADDMRW addr,reg,access
.LOCAL	addmrw_read1
	; RAM
	.IF access = 0
		mov	a, reg
		add addr, a
		jbc r3, cflag
		inc	addr+1
		mov a, reg+1
		add addr+1, a
	.ENDIF
	
	;ROM
	.IF access = 1
		ERROR "Can't write to ROM data"
	.ENDIF
	
	; IO
	.IF access = 2
		ior addr
		add	a, reg
		iow addr
		ior addr+1
		jbc r3, cflag
		add a, 1
		add a, reg+1
		iow addr+1
	.ENDIF

	;IND
	.IF access = 3
		mov		a, @.B0.(addr)
		mov		pr0, a
		mov		a, @.B1.(addr)
		mov		pr0+1, a
		mov		a, @.B2.(addr)
		mov		pr0+2, a
		call	ReadIND
		add		a, reg
		call	WriteIND
		inc		pr0
		jbs		r3, zflag
		jmp		addmrw_read1
		inc		pr0+1
		jbc		r3, zflag
		inc		pr0+2
addmrw_read1:		
		call	ReadIND
		jbc 	r3, cflag
		add		a, @1
		add		a, reg+1
		call	WriteIND
	.ENDIF
.ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.MACRO	ADDMRD addr,reg,access
.LOCAL	ADDMRD_BYTE2
.LOCAL	ADDMRD_BYTE3
.LOCAL	addmrd_read1
.LOCAL	addmrd_read2
.LOCAL	addmrd_read3
	;RAM
	.IF access = 0
		mov	a, reg
		add	addr, a

		rlc	pr1
		mov	a, reg+1
		add addr+1, a			

		jbs pr1,0
		jmp ADDMRD_BYTE2
		
		inc addr+1
		jbc r3,zflag
		bs  r3,cflag

ADDMRD_BYTE2:	
		rlc	pr1
		mov	a, reg+2
		add	addr+2, a
	
		jbs pr1,0
		jmp ADDMRD_BYTE3
		
		inc addr+2
		jbc r3,zflag
		bs  r3,cflag

ADDMRD_BYTE3:	
		jbc	r3, cflag
		inc	addr+3
		mov	a, reg+3
		add	addr+3, a
	.ENDIF

	;ROM
	.IF access = 1
		ERROR "Can't write to ROM data"
	.ENDIF
	
	; IO
	.IF access = 2
		ior addr
		add	a, reg
		iow addr
		rlc	pr1
		ior addr+1
		add a, reg+1
		rlc pr1
		jbc pr1, 1
		add a, 1
		iow addr+1
		
		jbc r3, cflag
		bs  pr1, 0

		ior addr+2
		add a, reg+2
		rlc pr1
		jbc pr1, 1
		add a, 1
		iow addr+2

		jbc r3, cflag
		bs  pr1, 0

		ior addr+3
		add a, reg+3
		rlc pr1
		jbc pr1, 1
		add a, 1
		iow addr+3
	.ENDIF

	;IND
	.IF access = 3
		mov		a, @.B0.(addr)
		mov		pr0, a
		mov		a, @.B1.(addr)
		mov		pr0+1, a
		mov		a, @.B2.(addr)
		mov		pr0+2, a
		call	ReadIND
		add		a, reg
		call	WriteIND

		rlc		pr1
		inc		pr0
		jbs		r3, zflag
		jmp		addmrd_read1
		inc		pr0+1
		jbc		r3, zflag
addmrd_read1:		
		call	ReadIND
		add 	a, reg+1
		rlc 	pr1
		jbc 	pr1, 1
		add 	a, 1
		call	WriteIND
		
		jbc 	r3, zflag
		bs  	pr1, 0

		inc		pr0
		jbs		r3, zflag
		jmp		addmrd_read2
		inc		pr0+1
		jbc		r3, zflag
addmrd_read2:		
		call	ReadIND
		add 	a, reg+2
		rlc 	pr1
		jbc 	pr1, 1
		add 	a, 1
		call	WriteIND

		jbc r3, zflag
		bs  pr1, 0

		inc		pr0
		jbs		r3, zflag
		jmp		addmrd_read3
		inc		pr0+1
		jbc		r3, zflag
addmrd_read3:		
		inc		pr0+1
		call	ReadIND
		add 	a, reg+3
		rlc 	pr1
		jbc 	pr1, 1
		add 	a, 1
		call	WriteIND
	.ENDIF
	
.ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.MACRO	SUBMRB addr,reg,access
	; RAM
	.IF access = 0
		mov		a, reg
		sub		addr, a
	.ENDIF
	
	;ROM
	.IF access = 1
		ERROR "Can't write to ROM data"
	.ENDIF
	
	; IO
	.IF access = 2
		ior addr
		sub	a, reg
		sub	a, @0		
		iow addr
	.ENDIF

	;IND
	.IF access = 3
		mov		a, @.B0.(addr)
		mov		pr0, a
		mov		a, @.B1.(addr)
		mov		pr0+1, a
		mov		a, @.B2.(addr)
		mov		pr0+2, a
		call	ReadIND
		sub		a, reg
		sub		a, @0
		call	WriteIND
	.ENDIF
.ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.MACRO	SUBMRW addr,reg,access
.LOCAL	submrw_read1
	; RAM
	.IF access = 0
		mov		a, reg
		sub		addr, a
		jbs		r3, cflag
		dec		addr+1
		mov		a, reg+1
		sub		addr+1, a
	.ENDIF
	
	;ROM
	.IF access = 1
		ERROR "Can't write to ROM data"
	.ENDIF
	
	; IO
	.IF access = 2
		ior		addr
		sub		a, reg
		rlc		pr1
		sub		a, @0
		iow		addr
		
		ior		addr+1
		sub		a, reg+1
		jbs		pr1, 0
		add		a, @1
		sub		a, @0
		iow		addr+1
	.ENDIF

	;IND
	.IF access = 3
		mov		a, @.B0.(addr)
		mov		pr0, a
		mov		a, @.B1.(addr)
		mov		pr0+1, a
		mov		a, @.B2.(addr)
		mov		pr0+2, a

⌨️ 快捷键说明

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