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

📄 ramtest.s

📁 开源的BIOS启动软件
💻 S
字号:
#include <bios/linkage.h>ENTRY(quick_ramtest)	stmfd	sp!, {r4, lr}	ldmia	r0, {r4, lr}	mvn	r2, r1	stmia	r0, {r1, r2}	ldmia	r0, {r3, ip}	teq	r1, r3	teqeq	r2, ip	mvn	r1, r1	mvn	r2, r2	stmia	r0, {r1, r2}	ldmia	r0, {r3, ip}	stmia	r0, {r4, lr}	teqeq	r1, r3	moveq	r0, ip	movne	r0, r1	ldmfd	sp!, {r4, pc}/* * Block memory checker *  r0 = start *  r2 = size *  r5 = value to write * returns Z set   - ok *         Z clear - fail, address = r0-4, value = r4 */checkit:	mov	r3, r21:	str	r5, [r0], #4	str	r5, [r0], #4	str	r5, [r0], #4	str	r5, [r0], #4	subs	r3, r3, #4 * 4	bne	1b	sub	r0, r0, r2	/*	 * wait a while	 */	mov	ip, #0x1001:	mov	ip, ip	mov	ip, ip	mov	ip, ip	subs	ip, ip, #1	bne	1b	/*	 * check that it is still zeros	 */	mov	r3, r21:	ldr	r4, [r0], #4	teq	r4, r5	bne	fail	subs	r3, r3, #4	bne	1b	sub	r0, r0, r2fail:	mov	pc, lr/* * r0 = chunk to check * r1 = save chunk (or zero).  first 16 bytes hold the result on error * r2 = chunk size */ENTRY(check_chunk)	stmfd	sp!, {r4 - r8, lr}	add	r1, r1, #16	/*	 * First, save the memory	 */	mov	r3, r21:	ldmia	r0!, {r4 - r8}	stmia	r1!, {r4 - r8}	subs	r3, r3, #4 * 4	bne	1b	sub	r0, r0, r2	sub	r1, r1, r2nosave:	/*	 * Ok, now do the actual test	 * ====================================================	 *  stage 1 - fill memory with zeros	 */	mov	r5, #0	bl	checkit	bne	stagefail	/* ====================================================	 *  stage 2 - fill memory with ones	 */	mov	r5, #-1	bl	checkit	bne	stagefail	/* ====================================================	 *  stage 3 - fill memory with walking '1' bit pattern	 */	mov	r5, #11:	bl	checkit	bne	stagefail	movs	r5, r5, lsl #1	bne	1b	/* ====================================================	 *  stage 4 - fill memory with walking '0' bit pattern	 */	mov	r5, #-21:	bl	checkit	bne	stagefail	movs	r5, r5, lsl #1	orr	r5, r5, #1	bcs	1b	/* ====================================================	 *  stage 5 - alternate 01010101 pattern	 */	mov	r5, #0x55	orr	r5, r5, r5, lsl #8	orr	r5, r5, r5, lsl #16	bl	checkit	bne	stagefail	/* ====================================================	 *  stage 6 - alternate 10101010 pattern	 */	mov	r5, #0xaa	orr	r5, r5, r5, lsl #8	orr	r5, r5, r5, lsl #16	bl	checkit	bne	stagefail	mov	ip, #-1	b	passstagefail:	stmdb	r1, {r0, r3, r4, r5}	mov	ip, #0pass:	/*	 * Copy everything back into place	 */	mov	r3, r21:	ldmia	r1!, {r4 - r8}	stmia	r0!, {r4 - r8}	subs	r3, r3, #4 * 4	bne	1b	mov	r0, ip	ldmfd	sp!, {r4 - r8, pc}

⌨️ 快捷键说明

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