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

📄 mcal.asz

📁 ROHM 公司BU9432:application:应用范围
💻 ASZ
字号:
;------------------------------------------------------------------------------
;
;	墘嶼梡儔僀僽儔儕(?)
;	Compiler LSI C-80 Ver 3.6 梡娭悢
;
;	Version :1.00
;	MakeDate:2004/12/06
;
;------------------------------------------------------------------------------

	public	mulub10_		; 忔嶼柦椷 16bit = 8bit x 10
	public	mulub60_		; 忔嶼柦椷 16bit = 8bit x 60
	public	mulub75_		; 忔嶼柦椷 16bit = 8bit x 75
	public	mulub_			; 忔嶼柦椷 16bit = 8bit x 8bit
	public	muluw_			; 忔嶼柦椷 32bit = 16bit x 16bit
	public	bcd2bin_		; BCD => BIN 曄姺娭悢
	public	msf2lbn_bcd_		; MSF(BCD) => LBN曄姺娭悢
	public	msf2lbn_bin_		; MSF(BIN) => LBN曄姺娭悢

	public	divub_			; 彍嶼柦椷 16bit = 8bit 亐 8bit
	public	divuw_			; 彍嶼柦椷 32bit = 16bit 亐 16bit

;------------------------------------------------------------------------------
	CSEG
;------------------------------------------------------------------------------

; 忔嶼柦椷梡儗僕僗僞價僢僩掕媊
R_B		equ	11000001b	;
R_C		equ	11001001b	;
R_D		equ	11010001b	;
R_E		equ	11011001b	;
R_A		equ	11111001b	;
SS_BC		equ	11000011b	;
SS_SP		equ	11110011b	;

dr_e		equ	11011000b	;
dr_bc		equ	11000010b	;

;------------------------------------------------------------------------------
;
;	忔嶼柦椷 16bit = 8bit x 10
;	UINT16	mulub( UINT08 p1 )
;	堷悢:	UINT08	p1	忔嶼抣
;	曉抣:	UINT16		忔嶼寢壥抣
;
;------------------------------------------------------------------------------
; 堷悢 : A_Reg = p1
; 曉抣 : HL_Reg
;
mulub10_:				;
	PUSH	DE			;
	LD	E,10			;
;;	MULUB	R_E			; HL=A x E
	db	0EDh,R_E		;#
	POP	DE			;
	RET				;

;------------------------------------------------------------------------------
;
;	忔嶼柦椷 16bit = 8bit x 60
;	UINT16	mulub( UINT08 p1 )
;	堷悢:	UINT08	p1	忔嶼抣
;	曉抣:	UINT16		忔嶼寢壥抣
;
;------------------------------------------------------------------------------
; 堷悢 : A_Reg = p1
; 曉抣 : HL_Reg
;
mulub60_:				;
	PUSH	DE			;
	LD	E,60			;
;;	MULUB	R_E			; HL=A x E
	db	0EDh,R_E		;#
	POP	DE			;
	RET				;

;------------------------------------------------------------------------------
;
;	忔嶼柦椷 16bit = 8bit x 75
;	UINT16	mulub( UINT08 p1 )
;	堷悢:	UINT08	p1	忔嶼抣
;	曉抣:	UINT16		忔嶼寢壥抣
;
;------------------------------------------------------------------------------
; 堷悢 : A_Reg = p1
; 曉抣 : HL_Reg
;
mulub75_:				;
	PUSH	DE			;
	LD	E,75			;
;;	MULUB	R_E			; HL=A x E
	db	0EDh,R_E		;#
	POP	DE			;
	RET				;

;------------------------------------------------------------------------------
;
;	忔嶼柦椷 16bit = 8bit x 8bit
;	UINT16	mulub( UINT08 p1, UINT08 p2 )
;	堷悢:	UINT08	p1	忔嶼抣(1)
;		UINT08	p2	忔嶼抣(2)
;	曉抣:	UINT16		忔嶼寢壥抣
;
;------------------------------------------------------------------------------
; 堷悢 : HL_Reg = p1
;        DE_Reg = p2
; 曉抣 : HL_Reg
;
mulub_:					;
;;	MULUB	R_E			; HL=A x E
	db	0EDh,R_E		;#
	RET				;

;------------------------------------------------------------------------------
;
;	忔嶼柦椷 32bit = 16bit x 16bit
;	UINT32	muluw( UINT16 p1, UINT16 p2 )
;	堷悢:	UINT16	p1	忔嶼抣(1)
;		UINT16	p2	忔嶼抣(2)
;	曉抣:	UINT32		忔嶼寢壥抣
;
;------------------------------------------------------------------------------
; 堷悢 : HL_Reg = p1
;        DE_Reg = p2
; 曉抣 : (stack?)
;
muluw_:					;
;x	PUSH	BC			;
	LD	B,D			;
	LD	C,E			;
;;	MULUW	SS_BC			; DE:HL=HL x BC
	db	0EDh,SS_BC		;#
;x	POP	BC			;
	PUSH	DE			;
	PUSH	HL			;
	LD	HL,6			;
	ADD	HL,SP			;
	CALL	POPL##			;
	RET				;

;------------------------------------------------------------------------------
;
;	忔嶼柦椷 32bit = 16bit 亐 16bit
;	UINT32	muluw( UINT16 p1, UINT16 p2 )
;	堷悢:	UINT16	p1	忔嶼抣(1)
;		UINT16	p2	忔嶼抣(2)
;	曉抣:	UINT32		忔嶼寢壥抣
;
;------------------------------------------------------------------------------
; 堷悢 : HL_Reg = p1
;        DE_Reg = p2
; 曉抣 : (stack?)
;


divub_:					; 彍嶼柦椷 16bit = 8bit 亐 8bit
;	divub	e			; 
	db	0EDh, dr_e		; 

	ret

divuw_:					; 彍嶼柦椷 32bit = 16bit 亐 16bit
;	push	bc			; 
	ld	b, d			; 
	ld	c, e			; 
;	divuw	bc			; 
	db	0EDh, dr_bc		; 
;	pop	bc			; 

	PUSH	DE			;
	PUSH	HL			;
	LD	HL,6			;
	ADD	HL,SP			;
	CALL	POPL##			;

	ret


;------------------------------------------------------------------------------
;
;	BCD => BIN 曄姺娭悢
;	UINT08	bcd2bin( UINT08 bcd )
;
;	堷悢:	UINT08	bcd	BCD僐乕僪
;	曉抣:	UINT08		BCD偺抣傪BIN偵曄姺偟偨抣
;	仸AF儗僕僗僞埲奜偼曐忈偝傟傞
;------------------------------------------------------------------------------
; 堷悢 : A_Reg = bcd
; 曉抣 : A_Reg
;
bcd2bin_:				;
;*;	PUSH	HL			;
;*;	PUSH	DE			;
;*;	LD	D,A			; D = A
;*;	RRCA				; A = A >> 1 (cy晅偒)
;*;	RRCA				; A = A >> 1 (cy晅偒)
;*;	RRCA				; A = A >> 1 (cy晅偒)
;*;	AND	00011110b		; A = A & 11110b
;*;	LD	E,5			; E = 5 仸shift傪3夞偵偟偰傞堊 10偱側偔5傪戙擖
;*;;;	MULUB	R_E			; HL = A[忋埵4bitx2] x E[5]
;*;	db	0EDh,R_E		;#
;*;	LD	A,D			; A = D
;*;	AND	00001111b		; A = A & 1111b
;*;	ADD	A,L			; A = A + L
;*;	POP	DE			;
;*;	POP	HL			;
;*;	RET				;

	;;伀偺曽偑僶僀僩悢偑彮側偔側傞丄幚岠懍搙懍偄丄僗僞僢僋儗儀儖偑侾儗儀儖彮側偄

	PUSH	DE			;
	LD	E,A			;
	RRCA				;
	RRCA				;
	RRCA				;
	AND	00011110b		;
	LD	D,A			;
	ADD	A,A			;
	ADD	A,A			;
	ADD	A,D			;
	LD	D,A			;
	LD	A,E			;
	AND	00001111b		;
	ADD	A,D			;
	POP	DE			;
	RET				;

;------------------------------------------------------------------------------
;
;	MSF(BCD) => LBN曄姺娭悢
;	UINT32	msf2lbn_bcd( UINT08 min, UINT08 sec, UINT08 frame )
;	堷悢:	UINT08	min	暘僐乕僪(BCD)
;		UINT08	sec	昩僐乕僪(BCD)
;		UINT08	frame	僼儗乕儉僐乕僪(BCD)
;	曉抣:	UINT32		MSF(BCD)偺抣傪LBN偵曄姺偟偨抣
;	仸AF儗僕僗僞偼曐忈偝傟傞
;------------------------------------------------------------------------------
; 堷悢 : A_Reg = min
;        E_Reg = sec
;	 C_reg = frame
; 曉抣 : (stack?)
;
msf2lbn_bcd_:				;
	PUSH	AF			;
	PUSH	AF			;
	LD	A,C			;
	call	bcd2bin_		; F(BCD)->F(BIN)
	LD	C,A			;
	LD	A,E			;
	call	bcd2bin_		; S(BCD)->S(BIN)
	LD	E,A			;
	POP	AF			;
	call	bcd2bin_		; M(BCD)->M(BIN)
	jr	msf2lbn_bin_2		;

	;僐乕僪弅彫偺堊丄師偺張棟傪偦偺傑傑MSF(BIN) => LBN曄姺娭悢偵擟偣傞
	;伀偵懕偔

;------------------------------------------------------------------------------
;
;	MSF(BIN) => LBN曄姺娭悢 LBN = (((min * 60) + sec) * 75) + frame
;	UINT32	msf2lbn_bin( UINT08 min, UINT08 sec, UINT08 frame )
;	堷悢:	UINT08	min	暘僐乕僪(BIN)
;		UINT08	sec	昩僐乕僪(BIN)
;		UINT08	frame	僼儗乕儉僐乕僪(BIN)
;	曉抣:	UINT32		MSF(BIN)偺抣傪LBN偵曄姺偟偨抣
;	仸AF儗僕僗僞偼曐忈偝傟傞
;------------------------------------------------------------------------------
; 堷悢 : A_Reg = min
;        E_Reg = sec
;	 C_reg = frame
; 曉抣 : (stack?)
;
msf2lbn_bin_:				;
	PUSH	AF			;
msf2lbn_bin_2:				;
;x	PUSH	BC			;
	LD	D,60			; D = 60
;;	MULUB	R_D			; HL=A * D	( HL = A[Min] * D[60] )
	db	0EDh,R_D		;#
	LD	D,0			; D = 0
	ADD	HL,DE			; HL=HL+DE	( HL = HL + DE[Sec] )
	LD	A,C			;
	LD	B,0			; B = 0
	LD	C,75			; E = 75
;;	MULUW	SS_BC			; DE:HL=HL * BC	(DEHL = HL * BC[75] )
	db	0EDh,SS_BC		;#
	LD	B,0			; B = 0
	LD	C,A			;
	ADD	HL,BC			; HL = HL + BC	( HL = HL + BC[Frame] )
;x	POP	BC			;
	JR	NC,calc_exit		; Cy僆乕僶乕偟偰側偗傟偽DE偼偦偺傑傑
					;
	INC	DE			; Cy僆乕僶乕偟偰偄傟偽 DE = DE + 1
					;
calc_exit:				;
	POP	AF			;
	PUSH	DE			;
	PUSH	HL			;
	LD	HL,6			;
	ADD	HL,SP			;
	CALL	POPL##			;
	RET				;

;------------------------------------------------------------------------------
	END				; end of file

⌨️ 快捷键说明

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