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

📄 math.s

📁 这是由文曲星的开发者LEE写的汇编游戏末日传说.rar代码
💻 S
字号:
	include	h/mori.h

	public	mul_ax
	public	mul2
	public	mul4
	public	mul41
	public	divid42
	public	divid2
	public	random_it

save_a1_a8:
	ldx	#15
save_a1_a81:
	lda	a1,x
	sta	random_buf,x
	dex
	bpl	save_a1_a81
	rts

load_a1_a8:
	ldx	#15
load_a1_a81:
	lda	random_buf,x
	sta	a1,x
	dex
	bpl	load_a1_a81
	rts

;------------------------------------------
; a1 = Areg * Xreg
; d: a1 a2
;------------------------------------------
mul_ax:
	sta	a2
	stx	a2h
	lm2	a1,#0
	ldx	#8
mul_loop:
	asl2	a1
	asl	a2h
	bcc	mul_con
	lda	a2
	adda2	a1
mul_con:
	dbne	x,mul_loop
	rts

;------------------------------------------
; a1 a2 = a1 * a2
; input: a1 a2
; output: a1 a2(result)
; d: a1 a2 a3 a4
;------------------------------------------
mul2:
	lm2	a3,a1
	lm2	a4,a2
	lm2	a1,#0
	lm2	a2,#0
	ldx	#16
mul2_loop:
	asl2	a1
	rol2	a2
	asl2	a4
	bcc	mul2_con
	add	a1,a3
	bcc	mul2_con
	inc2	a2
mul2_con:
	dbne	x,mul2_loop
	rts

;------------------------------------------
; 四字节乘法
; input: a1 a2 (被乘数)	a3,a4 (乘数)
; output: a1 a2 a3 a4
; d: a1 a2 a3 a4 a5 a6 a7 a8
;------------------------------------------
mul41:
	lda	#0
	sta	a3h
	sta	a4
	sta	a4h
mul4:
	lm2	a5,a1
	lm2	a6,a2
	lm2	a7,a3
	lm2	a8,a4
	lm2	a1,#0
	lm2	a2,#0
	lm2	a3,#0
	lm2	a4,#0

	ldx	#32
mul4_loop:
	asl2	a1
	rol2	a2

	rol2	a3
	rol2	a4

	asl2	a7
	rol2	a8
	bcc	mul4_con

	add	a1,a5
	lda	a2
	adc	a6
	sta	a2
	lda	a2h
	adc	a6h
	sta	a2h
	bcc	mul4_con
	inc	a3
	bcc	mul4_con
	inc	a3h
	bcc	mul4_con
	inc	a4
	bcc	mul4_con
	inc	a4h
	bcc	mul4_con

mul4_con:
	dbne	x,mul4_loop
	rts

;------------------------------------------
; a1 = a1 / a2
; a2 = remaider
; input: a1(分母) a2(分子)
; output: a1(result) a2(remaider)
; d: a1 a2 a3 a4
;------------------------------------------
divid2:
	lm2	a3,a1
	lm2	a4,a2
	lm2	a1,#0
	lm2	a2,#0
	ldx	#16
divid2_loop:
	asl2	a3
	rol2	a2
	cmp2	a2,a4
	bcc	divid2_con
	sub	a2,a4
divid2_con:
	rol2	a1
	dbne	x,divid2_loop
	rts

;------------------------------------------
; a1 a2 = a1 a2 / a3
; a3 = remaider
; input: a1 a2(分母) a3(分子)
; output: a1 a2 (result) a3(remaider)
; d: a1 a2 a3 a4 a5 a6
;------------------------------------------
divid42:
	lm2	a4,a1
	lm2	a5,a2
	lm2	a6,a3
	lm2	a1,#0
	lm2	a2,#0
	lm2	a3,#0
	ldx	#32
divid42_loop:
	asl2	a4
	rol2	a5
	rol2	a3
	bcs	to_sub42
	cmp2	a3,a6
	bcc	divid42_con
to_sub42:
	sub	a3,a6
	sec
divid42_con:
	rol2	a1
	rol2	a2
	dbne	x,divid42_loop
	rts

;************************************************;
; 	random set in Areg
; input: Areg(range)
; output: Areg
;************************************************;
random_it:
	sta	range
	cmp	#1
	bne	random_it0
	lda	#0
	rts
random_it0:
	jsr	save_a1_a8
	lm2	a1,my_seed
	lm2	a2,my_seed+2
	lm2	a3,#4e35h
	lm2	a4,#15ah
	jsr	mul4
	inc	a1
	bne	random_it1
	inc	a1h
	bne	random_it1
	inc	a2
	bne	random_it1
	inc	a3
random_it1:
	lm2	my_seed,a1
	lm2	my_seed+2,a2
	lda	range
	bne	random_it2
	jsr	load_a1_a8
	lda	my_seed+2
	rts
random_it2:
	sta	a2
	lm	a2h,#0
	lm2	a1,my_seed+2
	jsr	divid2
	lda	a2
	pha
	jsr	load_a1_a8
	pla
	rts

	end

⌨️ 快捷键说明

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