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

📄 key.mac

📁 calculator code ,use toshibaor nec LSI
💻 MAC
📖 第 1 页 / 共 2 页
字号:
;V3.00		or	a,c		;reg.a = key code
		ld	w,6		;V3.00
		mul	w,a		;V3.00
		clr	cf		;V3.00
		add	a,c		;V3.00
		ld	c,a
		ld	hl,key_conver_tbl
		ld	a,(hl+c)
		cmp	(KEY_CT),64	;\
		j	ge,key_scan32	;/key buffer over flow?
		ld	c,(KEY_WPTR)
		and	c,0x3f
		ld	hl,KEY_BUF	;key buffer first address-->hl
		ld	(hl+c),a	;store key code to KEY_BUF
		inc	c
		and	c,0x3f
		ld	(KEY_WPTR),c
		inc	(KEY_CT)
		j	key_scan90
		
;Key off check..................................
key_scan30:
;---------------------------------------------------
		and	b,0y00111111		;reg.b = current key return
		and	b,(RET_BK)		;previous key on continue?
		j	z,key_scan_h9		; key released ->
		;-------------------------------------
;V3.00		@BBC	(RTC_ON,key_scan_set0)	;V1.23
;V3.00		cmp	b,RET_SET
;V3.00		j	eq,key_scan_h1
;V3.00key_scan_set0:					;V1.23
;V3.00		@BBS	(RTC_ON,key_scan90)	;V1.44
;V3.00		@BBC	(SW_V15,key_scan_set1)	;V1.23
;V3.00		cmp	b,RET_IC		;V1.23
;V3.00		j	eq,key_scan_h2		;V1.23
;V3.00key_scan_set1:					;V1.23
;V3.00		;--------------------------
;V3.00		@BBS	(ICON_E,key_scan90)	;V1.08

;V1.04		@BBS	(F_RATE,key_scan90)	;is RATE key holded?
;V3.00		@BBS	(RATE_PROG,key_scan90)	;already enter into rate setting mode?
;V3.00		@BBS	(IC_PROG,key_scan90)	;V1.44
;V3.00key_scan_set1y:						;V1.28
;V3.00		cmp	b,RET_RATE		;is rate key?
;V3.00key_scan_set1z:
;V3.00		j	ne,key_scan90		;yes-->
;V3.00		cmp	(SCAN_CT),SCAN_RATE
;V3.00key_scan_set1f:
;V3.00		j	ne,key_scan90
;V3.00		dec	(DW_CT)
;V3.00		j	ne,key_scan90
;V3.00		@SEB	(RATE_PROG)		;enter into rate setting mode
;V3.00		j	key_scan90
		;--------------------------------
;V3.00key_scan_h0:
;V3.00		cmp	(SCAN_CT),SCAN_FEED
;V3.00		j	ne,key_scan90
;V3.00		@SEB	(F_HLD_FED)
;V3.00		j	key_scan90
		;--------------------------------
;V3.00key_scan_h1:
;V3.00		@BBC	(RTC_ON,key_scan90)	;V1.18
;V3.00		cmp	(SCAN_CT),SCAN_SET	;V1.18
;V3.00		j	ne,key_scan90		;V1.18
;V3.00		@SEB	(F_HLD_SET)		;V1.18
;V3.00		dec	(DW_CT)			;V1.18
;V3.00		j	key_scan90		;V1.18
		;--------------------------------
;V3.00key_scan_h2:					;V1.23
;V3.00		@BBS	(F_ICDSP,key_scan_h2x)	;V1.23
;V3.00		jp	key_scan90		;V1.23
;V3.00key_scan_h2x:					;V1.23
;V3.00		cmp	(SCAN_CT),SCAN_IC	;V1.23
;V3.00		j	ne,key_scan90		;V1.23
;V3.00		@SEB	(F_HLD_SET)		;V1.23
;V3.00		dec	(DW_CT)			;V1.23
;V3.00		j	ne,key_scan90		;V1.23
;V3.00		@SEB	(IC_PROG)		;V1.23
		j	key_scan90		;V1.23
		;--------------------------------
key_scan_h9:
;V1.04		@CLB	(RATE_PROG)		;for rate set
;V3.00		@CLB	(F_HLD_FED)		;for feed key
;V3.00		@CLB	(F_HLD_SET)		;for time set
		dec	(KI_CT)
		j	nz,key_scan90		
;Key check end.................................
key_scan32:
		@CLB	(F_KOFF)
		@CLB	(F_KON)
		ld	(DW_CT),0	;V1.23
;Output next scan signal.......................
key_scan90:
		ld	c,(SCAN_CT)
		inc	c
		cmp	c,8
		j	lt,key_scan92
		call	blink_vfd	;V2.05
key_scan91:					;V1.04
		ld	c,0
key_scan92:
		ld	(SCAN_CT),c
		ld	hl,tbl_scan
		ld	a,(hl+c)
		ld	(P9DR),a
key_scan99:
		@POP_REG
		reti

tbl_rtndt:
;		db	0y00000001
;		db	0y00000010
;		db	0y00000100
;		db	0y00001000
;		db	0y00010000
;		db	0y00100000
;		db	0y01000000
;		db	0y10000000

		;	  PPPPPPPP
		;	  99999999
tbl_scan:	;	  76543210        SCAN_CT
		db	0y00000001		;0
		db	0y00000010		;1
		db	0y00000100		;2
		db	0y00001000		;3
		db	0y00010000		;4
		db	0y00100000		;5
		db	0y01000000		;6
		db	0y10000000		;7



;=====================================================
;detect the mode retan and update the MDSW
;-----------------------------------------------------
;V3.00feed_check:					;V2.13
;V3.00		cmp	(SCAN_CT),2
;V3.00		j	ne,feed_check_end
;V3.00		@BBC	(SLID_RT2,feed_check_end)	
;V3.00		nop
;V3.00		nop
;V3.00		nop
;V3.00		@BBC	(SLID_RT2,feed_check_end)
;V3.00		@SEB	(PAPER_FEED)
;V3.00		ret
;V3.00feed_check_end:
;V3.00		@CLB	(PAPER_FEED)
;V3.00		ret
;------------------------------------------------V2.13

;scan out:	_______HH___________
;return in:	_______HH___________
;
mdsw_scan:
		ld	a,(SCAN_CT)
		ld	cf,(P5DR).0		;check mode return0 (P50)
		ld	(MDSW).a,cf		;set mode switch status
		
		ld	cf,(P5DR).1		;check mode return1 (P51)
		ld	(MDSW+1).a,cf		;set mode switch status
		
		ld	cf,(P5DR).2		;check mode return2 (P52)	
		ld	(MDSW+2).a,cf		;set mode switch status		

		ld	cf,(P5DR).3		;check mode return3 (P53)	
		ld	(MDSW+3).a,cf		;set mode switch status			
		ret

;-------------------------------------------------------------
initial_mdsw_update:
	ld	(SCAN_CT),0
initial_mdsw_update_1:
	ld	c,(SCAN_CT)	;V1.30
	ld	hl,tbl_scan	;v1.30
	ld	a,(hl+c)	;V1.30
	ld	(P9DR),a	;V1.30
	call	mdsw_scan
	inc	(SCAN_CT)
	cmp	(SCAN_CT),8
	j	lt,initial_mdsw_update_1
	ld	(SCAN_CT),0		;V2.13
	ld	a,(MDSW)
	ld	(MDBK),a
	ld	(MDFLG),a
	ld	(MDFLG_RT),a

	ld	a,(MDSW+1)
	ld	(MDBK+1),a
	ld	(MDFLG+1),a
	ld	(MDFLG_RT+1),a

	ld	a,(MDSW+2)
	ld	(MDBK+2),a
	ld	(MDFLG+2),a
	ld	(MDFLG_RT+2),a

	ld	a,(MDSW+3)
	ld	(MDBK+3),a
	ld	(MDFLG+3),a
	ld	(MDFLG_RT+3),a
	call	update_md
	call	calc_dp_pos	;V1.30
	ret
;------------------------------------------------------
;Mode swith update for remove chattaring.................
update_mdsw:
		ld	a,(SCAN_CT)		;mode sw is updated when SCAN_CT=0 only
		j	nz,up_mdsw9
mdsw_update:
		ld	c,4-1			;\
up_mdsw0:					;|
		ld	hl,MDSW			;|mode switch start address->hl	
		ld	a,(hl+c)		;|
		ld	hl,MDBK			;|
		cmp	a,(hl+c)		;|MDBK=MDSW?
		j	ne,up_mdsw2		;|not match compare with MDSW and MDBK-->
		dec	c			;|
		j	f,up_mdsw0		;/
						
		ld	a,(MDCHK)		;\
		j	z,up_mdsw9		;|register MDCHK=0?
		dec	(MDCHK)			;|
		j	nz,up_mdsw9		;/
		ld	c,4-1			;
up_mdsw1:					;\
		ld	hl,MDBK			;|MDFLG_RT update
		ld	a,(hl+c)		;|MDBK-->MDFLG_RT
		ld	hl,MDFLG_RT		;|
		ld	(hl+c),a		;|
		dec	c			;|
		j	f,up_mdsw1		;/
		;---------------calculate the decimal position-----------------
calc_dp_pos:					;V1.30
		ld	c,0		;\
		ld	a,(MDFLG_RT)	;|MDFLG_RT        bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
up_mdsw12:				;|relation dp: F   AM   6    5    4    3     2    1   0
		push	wa		;V1.27
		@SEB	(DP_UPDATE)	;V1.27
		pop	wa		;V1.27
		shrc	a		;|
		j	cs,up_mdsw15	;|
		inc	c		;|
		cmp	c,8		;|
		j	lt,up_mdsw12	;|
up_mdsw15:				;|
		ld	hl,tbl_dppos	;|
		ld	a,(hl+c)	;|
		ld	(DP_POS_RT),a	;|	;DP_POS_RT update
		j	up_mdsw9	;/
		;--------------------------------------------------------------
up_mdsw2:
		ld	c,4-1		;\
up_mdsw3:				;|
		ld	hl,MDSW		;|MDBK update
		ld	a,(hl+c)	;|MDSW-->MSBK
		ld	hl,MDBK		;|
		ld	(hl+c),a	;|	
		dec	c		;|
		j	f,up_mdsw3	;/
		ld	(MDCHK),MD_TIM	
up_mdsw9:
		ret

tbl_dppos:
		db	0		;DP0
		db	1		;DP1
		db	2		;DP2
		db	3		;DP3
		db	4		;DP4
		db	5		;DP5
		db	6		;DP6
		db	2		;ADM
		db	0		;FDP(in case of no any DP flags on)

key_conver_tbl:
	db	K_MPL		;0x20
	db	K_MMI		;0x21
	db	K_MST		;0x22
	db	K_MTL		;0x23
	db	K_PER		;0x17
	db	K_DIV		;0x19
	db	K_RATE		;0x28
	db	K_IC		;0x1f
	db	K_TXP		;0x29
	db	K_TXM		;0x2a
	db	K_MUL		;0x18
	db	K_EQU		;0x16
	db	K_PLS		;0x10
	db	K_MIN		;0x11
	db	K_ST		;0x12
	db	K_TL		;0x13
	db	K_ROOT		;0x27
	db	K_MU		;0x1a
	db	0x03		;0x03
	db	0x06		;0x06
	db	0x09		;0x09
	db	K_DP		;0x0c
	db	K_TX2P		;0x14
	db	K_TX2M		;0x15
	db	0x02		;0x02
	db	0x05		;0x05
	db	0x08		;0x08
	db	K_ZERO3		;0x0b
	db	K_BS		;0x1d
	db	K_M2TL		;0x2f
	db	0x01		;0x01
	db	0x04		;0x04
	db	0x07		;0x07
	db	K_ZERO2		;0x0a
	db	K_MGR		;0x26
	db	K_M2ST		;0x2e
	db	K_PERPLS	;0x2b
	db	K_DLT		;0x1b
	db	K_SGN		;0x1c
	db	K_ZERO		;0x00
	db	K_SEL		;0x25
	db	K_M2MI		;0x2d
	db	K_GT		;0x0f
	db	K_CE		;0x0d
	db	K_SHD		;0x1e
	db	K_CEC		;0x0e
	db	K_CST		;0x24
	db	K_M2PL		;0x2c

	end

⌨️ 快捷键说明

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