#include "compiler.h"
#include "pccore.h"
#include "vram.h"
#include "makescrn.h"
#include "makesub.h"
#include "font.h"
// ---- 25lines
// pos_cy
// fedcba9876543210fedcba9876543210
// ppppppppppp00???????????yyyyyyyy
#if defined(ADV_SIMULATE)
void width40x25_200l(UINT _pos) { // 40x25 200line
UINT pos_cy;
UINT8 *dst;
UINT y;
UINT x;
REG8 udtmp;
REG8 dirty;
UINT8 work[MAKETEXT_ROW * 3];
pos_cy = _pos << 21;
pos_cy += min(makescrn.fontcy, MAKETEXT_ROW);
dst = ADVVIDEOBUFFER;
y = makescrn.surfcy;
do {
x = makescrn.surfcx;
do {
udtmp = TRAMUPDATE(pos_cy >> 21);
dirty = (udtmp & makescrn.dispflag);
if (dirty) {
TRAMUPDATE(pos_cy >> 21) = (UINT8)(udtmp ^ dirty);
if (dirty & UPDATE_TRAM) {
makechr8(work, &makescrn, pos_cy, udtmp);
makemix_mixtext40(dst, work, pos_cy & 0xff);
}
if (dirty & UPDATE_VRAM) {
makemix_mixgrph40(dst,
makescrn.disp1 + TRAM2GRAM(pos_cy >> 21),
pos_cy & 0xff);
}
}
pos_cy += (1 << 21);
dst += 8;
} while(--x);
if (udtmp & 4) { // 縦倍角描画だったら
makescrn.fontycnt += makescrn.charcy;
}
else {
makescrn.fontycnt = makescrn.charcy * 2;
}
makescrn.fontycnt &= 15;
dst += makescrn.surfstep;
pos_cy += makescrn.surfrx << 21;
} while(--y);
}
void width80x25_200l(UINT _pos) { // 80x25 200line
UINT32 pos_cy;
UINT8 *dst;
UINT y;
UINT x;
REG8 udtmp;
REG8 dirty;
UINT8 work[MAKETEXT_ROW * 3];
pos_cy = _pos << 21;
pos_cy += min(makescrn.fontcy, MAKETEXT_ROW);
dst = ADVVIDEOBUFFER;
y = makescrn.surfcy;
do {
x = makescrn.surfcx;
do {
udtmp = TRAMUPDATE(pos_cy >> 21);
dirty = (udtmp & makescrn.dispflag);
if (dirty) {
TRAMUPDATE(pos_cy >> 21) = (UINT8)(udtmp ^ dirty);
if (dirty & UPDATE_TRAM) {
makechr8(work, &makescrn, pos_cy, udtmp);
makemix_mixtext80(dst, work, pos_cy & 0xff);
}
if (dirty & UPDATE_VRAM) {
makemix_mixgrph80(dst,
makescrn.disp1 + TRAM2GRAM(pos_cy >> 21),
pos_cy & 0xff);
}
}
pos_cy += (1 << 21);
dst += 4;
} while(--x);
if (udtmp & 4) { // 縦倍角描画だったら
makescrn.fontycnt += makescrn.charcy;
}
else {
makescrn.fontycnt = makescrn.charcy * 2;
}
makescrn.fontycnt &= 15;
dst += makescrn.surfstep;
pos_cy += makescrn.surfrx << 21;
} while(--y);
}
#endif
// ---- 12lines
void width40x12_200l(UINT pos) { // 40x12 200line
UINT fontcy;
UINT8 *dst;
UINT y;
UINT x;
REG8 udtmp;
REG8 dirty;
UINT8 work[MAKETEXT_STEP * 2];
const UINT8 *src;
fontcy = min(makescrn.fontcy, MAKETEXT_ROW);
dst = ADVVIDEOBUFFER;
y = makescrn.surfcy;
do {
x = makescrn.surfcx;
do {
udtmp = TRAMUPDATE(pos);
dirty = (udtmp & makescrn.dispflag);
if (dirty) {
TRAMUPDATE(pos) = (UINT8)(udtmp ^ dirty);
if (dirty & UPDATE_TRAM) {
makechr16(work, pos, fontcy, udtmp);
makemix_mixtext40(dst, work, fontcy);
makemix_mixtext40(dst + ADVV_WIDTH,
work + MAKETEXT_STEP, fontcy);
}
if (dirty & UPDATE_VRAM) {
src = makescrn.disp1 + TRAM2GRAM(LOW10(pos));
makemix_mixgrph40(dst, src, fontcy);
makemix_mixgrph40(dst + ADVV_WIDTH,
src + GRAM_HALFSTEP, fontcy);
}
}
pos = LOW11(pos + 1);
dst += 8;
} while(--x);
if (udtmp & 4) { // 縦倍角描画だったら
makescrn.fontycnt += makescrn.charcy;
}
else {
makescrn.fontycnt = makescrn.charcy * 2;
}
makescrn.fontycnt &= 15;
dst += makescrn.surfstep;
pos = LOW11(pos + makescrn.surfrx);
} while(--y);
}
void width80x12_200l(UINT pos) { // 80x12 200line
UINT fontcy;
UINT8 *dst;
UINT y;
UINT x;
REG8 udtmp;
REG8 dirty;
UINT8 work[MAKETEXT_STEP * 2];
const UINT8 *src;
fontcy = min(makescrn.fontcy, MAKETEXT_ROW);
dst = ADVVIDEOBUFFER;
y = makescrn.surfcy;
do {
x = makescrn.surfcx;
do {
udtmp = TRAMUPDATE(pos);
dirty = (udtmp & makescrn.dispflag);
if (dirty) {
TRAMUPDATE(pos) = (UINT8)(udtmp ^ dirty);
if (dirty & UPDATE_TRAM) {
makechr16(work, pos, fontcy, udtmp);
makemix_mixtext80(dst, work, fontcy);
makemix_mixtext80(dst + ADVV_WIDTH,
work + MAKETEXT_STEP, fontcy);
}
if (dirty & UPDATE_VRAM) {
src = makescrn.disp1 + TRAM2GRAM(LOW10(pos));
makemix_mixgrph80(dst, src, fontcy);
makemix_mixgrph80(dst + ADVV_WIDTH,
src + GRAM_HALFSTEP, fontcy);
}
}
pos = LOW11(pos + 1);
dst += 4;
} while(--x);
if (udtmp & 4) { // 縦倍角描画だったら
makescrn.fontycnt += makescrn.charcy;
}
else {
makescrn.fontycnt = makescrn.charcy * 2;
}
makescrn.fontycnt &= 15;
dst += makescrn.surfstep;
pos = LOW11(pos + makescrn.surfrx);
} while(--y);
}
RetroPC.NET-CVS <cvs@retropc.net>