File:  [RetroPC.NET] / xmil / nds / vram / makeatr.cpp
Revision 1.1: download - view: text, annotated - select for diffs
Tue Mar 24 22:52:53 2009 JST (16 years, 7 months ago) by yui
Branches: MAIN
CVS tags: HEAD
add nds-win32 simulation project

#include	"compiler.h"
#include	"vram.h"
#include	"makescrn.h"
#include	"makesub.h"


static LONG_CALL void atrb0(UINT8 *dst, UINT8 *term) {

	do {
		*(UINT32 *)(dst + (MAKETEXT_ROW * 0)) = 0;
		*(UINT32 *)(dst + (MAKETEXT_ROW * 1)) = 0;
		*(UINT32 *)(dst + (MAKETEXT_ROW * 2)) = 0;
		dst += 4;
	} while(dst < term);
}

static LONG_CALL void atrb1(UINT8 *dst, UINT8 *term) {

	do {
		*(UINT32 *)(dst + (MAKETEXT_ROW * 1)) = 0;
		*(UINT32 *)(dst + (MAKETEXT_ROW * 2)) = 0;
		dst += 4;
	} while(dst < term);
}

static LONG_CALL void atrb2(UINT8 *dst, UINT8 *term) {

	UINT32	dat;

	do {
		dat = *(UINT32 *)(dst + (MAKETEXT_ROW * 0));
		*(UINT32 *)(dst + (MAKETEXT_ROW * 0)) = 0;
		*(UINT32 *)(dst + (MAKETEXT_ROW * 1)) = dat;
		*(UINT32 *)(dst + (MAKETEXT_ROW * 2)) = 0;
		dst += 4;
	} while(dst < term);
}

static LONG_CALL void atrb3(UINT8 *dst, UINT8 *term) {

	UINT32	dat;

	do {
		dat = *(UINT32 *)(dst + (MAKETEXT_ROW * 0));
		*(UINT32 *)(dst + (MAKETEXT_ROW * 1)) = dat;
		*(UINT32 *)(dst + (MAKETEXT_ROW * 2)) = 0;
		dst += 4;
	} while(dst < term);
}

static LONG_CALL void atrb4(UINT8 *dst, UINT8 *term) {

	UINT32	dat;

	do {
		dat = *(UINT32 *)(dst + (MAKETEXT_ROW * 0));
		*(UINT32 *)(dst + (MAKETEXT_ROW * 0)) = 0;
		*(UINT32 *)(dst + (MAKETEXT_ROW * 1)) = 0;
		*(UINT32 *)(dst + (MAKETEXT_ROW * 2)) = dat;
		dst += 4;
	} while(dst < term);
}

static LONG_CALL void atrb5(UINT8 *dst, UINT8 *term) {

	UINT32	dat;

	do {
		dat = *(UINT32 *)(dst + (MAKETEXT_ROW * 0));
		*(UINT32 *)(dst + (MAKETEXT_ROW * 1)) = 0;
		*(UINT32 *)(dst + (MAKETEXT_ROW * 2)) = dat;
		dst += 4;
	} while(dst < term);
}

static LONG_CALL void atrb6(UINT8 *dst, UINT8 *term) {

	UINT32	dat;

	do {
		dat = *(UINT32 *)(dst + (MAKETEXT_ROW * 0));
		*(UINT32 *)(dst + (MAKETEXT_ROW * 0)) = 0;
		*(UINT32 *)(dst + (MAKETEXT_ROW * 1)) = dat;
		*(UINT32 *)(dst + (MAKETEXT_ROW * 2)) = dat;
		dst += 4;
	} while(dst < term);
}

static LONG_CALL void atrb7(UINT8 *dst, UINT8 *term) {

	UINT32	dat;

	do {
		dat = *(UINT32 *)(dst + (MAKETEXT_ROW * 0));
		*(UINT32 *)(dst + (MAKETEXT_ROW * 1)) = dat;
		*(UINT32 *)(dst + (MAKETEXT_ROW * 2)) = dat;
		dst += 4;
	} while(dst < term);
}

static LONG_CALL void atrb0r(UINT8 *dst, UINT8 *term) {

	do {
		*(UINT32 *)(dst + (MAKETEXT_ROW * 0)) = (UINT32)-1;
		*(UINT32 *)(dst + (MAKETEXT_ROW * 1)) = (UINT32)-1;
		*(UINT32 *)(dst + (MAKETEXT_ROW * 2)) = (UINT32)-1;
		dst += 4;
	} while(dst < term);
}

static LONG_CALL void atrb1r(UINT8 *dst, UINT8 *term) {

	UINT32	dat;

	do {
		dat = *(UINT32 *)(dst + (MAKETEXT_ROW * 0));
		*(UINT32 *)(dst + (MAKETEXT_ROW * 0)) = ~dat;
		*(UINT32 *)(dst + (MAKETEXT_ROW * 1)) = (UINT32)-1;
		*(UINT32 *)(dst + (MAKETEXT_ROW * 2)) = (UINT32)-1;
		dst += 4;
	} while(dst < term);
}

static LONG_CALL void atrb2r(UINT8 *dst, UINT8 *term) {

	UINT32	dat;

	do {
		dat = *(UINT32 *)(dst + (MAKETEXT_ROW * 0));
		*(UINT32 *)(dst + (MAKETEXT_ROW * 0)) = (UINT32)-1;
		*(UINT32 *)(dst + (MAKETEXT_ROW * 1)) = ~dat;
		*(UINT32 *)(dst + (MAKETEXT_ROW * 2)) = (UINT32)-1;
		dst += 4;
	} while(dst < term);
}

static LONG_CALL void atrb3r(UINT8 *dst, UINT8 *term) {

	UINT32	dat;

	do {
		dat = *(UINT32 *)(dst + (MAKETEXT_ROW * 0));
		*(UINT32 *)(dst + (MAKETEXT_ROW * 0)) = (UINT32)-1;
		*(UINT32 *)(dst + (MAKETEXT_ROW * 1)) = dat;
		*(UINT32 *)(dst + (MAKETEXT_ROW * 2)) = (UINT32)-1;
		dst += 4;
	} while(dst < term);
}

static LONG_CALL void atrb4r(UINT8 *dst, UINT8 *term) {

	UINT32	dat;

	do {
		dat = *(UINT32 *)(dst + (MAKETEXT_ROW * 0));
		*(UINT32 *)(dst + (MAKETEXT_ROW * 0)) = (UINT32)-1;
		*(UINT32 *)(dst + (MAKETEXT_ROW * 1)) = (UINT32)-1;
		*(UINT32 *)(dst + (MAKETEXT_ROW * 2)) = ~dat;
		dst += 4;
	} while(dst < term);
}

static LONG_CALL void atrb5r(UINT8 *dst, UINT8 *term) {

	UINT32	dat;

	do {
		dat = *(UINT32 *)(dst + (MAKETEXT_ROW * 0));
		*(UINT32 *)(dst + (MAKETEXT_ROW * 0)) = ~dat;
		*(UINT32 *)(dst + (MAKETEXT_ROW * 1)) = (UINT32)-1;
		*(UINT32 *)(dst + (MAKETEXT_ROW * 2)) = ~dat;
		dst += 4;
	} while(dst < term);
}

static LONG_CALL void atrb6r(UINT8 *dst, UINT8 *term) {

	UINT32	dat;

	do {
		dat = *(UINT32 *)(dst + (MAKETEXT_ROW * 0));
		*(UINT32 *)(dst + (MAKETEXT_ROW * 0)) = (UINT32)-1;
		*(UINT32 *)(dst + (MAKETEXT_ROW * 1)) = ~dat;
		*(UINT32 *)(dst + (MAKETEXT_ROW * 2)) = ~dat;
		dst += 4;
	} while(dst < term);
}

static LONG_CALL void atrb7r(UINT8 *dst, UINT8 *term) {

	UINT32	dat;

	do {
		dat = *(UINT32 *)(dst + (MAKETEXT_ROW * 0));
		*(UINT32 *)(dst + (MAKETEXT_ROW * 0)) = ~dat;
		*(UINT32 *)(dst + (MAKETEXT_ROW * 1)) = ~dat;
		*(UINT32 *)(dst + (MAKETEXT_ROW * 2)) = ~dat;
		dst += 4;
	} while(dst < term);
}

const MAKEATRFN makeatr8[16] = {
			atrb0,	atrb1,	atrb2,	atrb3,	atrb4,	atrb5,	atrb6,	atrb7,
			atrb0r,	atrb1r,	atrb2r,	atrb3r,	atrb4r,	atrb5r,	atrb6r,	atrb7r};


// ----

void makeatr_pcg16(UINT8 *dst, UINT cnt,
								const UINT8 *src, REG8 atr, MAKETXTFN fn) {

	if (atr & 1) {
		(*fn)(dst, dst + cnt, src);
	}
	dst += MAKETEXT_ROW;
	if (atr & 2) {
		(*fn)(dst, dst + cnt, src + 0x800);
	}
	dst += MAKETEXT_ROW;
	if (atr & 4) {
		(*fn)(dst, dst + cnt, src + 0x1000);
	}
	if (atr & TRAMATR_REVERSE) {
		dst -= MAKETEXT_ROW * 2;
		cnt = (cnt + 3) >> 2;
		do {
			*(UINT32 *)(dst + (MAKETEXT_ROW*0)) ^= (UINT32)-1;
			*(UINT32 *)(dst + (MAKETEXT_ROW*1)) ^= (UINT32)-1;
			*(UINT32 *)(dst + (MAKETEXT_ROW*2)) ^= (UINT32)-1;
			*(UINT32 *)(dst + (MAKETEXT_STEP + MAKETEXT_ROW*0)) ^= (UINT32)-1;
			*(UINT32 *)(dst + (MAKETEXT_STEP + MAKETEXT_ROW*1)) ^= (UINT32)-1;
			*(UINT32 *)(dst + (MAKETEXT_STEP + MAKETEXT_ROW*2)) ^= (UINT32)-1;
			dst += 4;
		} while(--cnt);
	}
}


RetroPC.NET-CVS <cvs@retropc.net>