--- np2/vram/makegrph.c 2003/10/21 11:22:05 1.2 +++ np2/vram/makegrph.c 2004/08/15 19:22:29 1.6 @@ -1,5 +1,5 @@ #include "compiler.h" -#include "memory.h" +#include "cpucore.h" #include "pccore.h" #include "iocore.h" #include "vram.h" @@ -12,7 +12,7 @@ typedef struct { UINT32 *vm; UINT liney; - UINT pitch; +// UINT pitch; UINT lr; } _MKGRPH, *MKGRPH; @@ -21,7 +21,7 @@ typedef struct { UINT32 grph_table[4*256*2]; -void VRAMCALL makegrph_init(void) { +void makegrph_initialize(void) { int i, j; BYTE bit; @@ -64,7 +64,7 @@ void VRAMCALL makegrph_init(void) { UINT32 grph_table1[256*2]; -void VRAMCALL makegrph_init(void) { +void makegrph_initialize(void) { int i; BYTE bit; @@ -103,7 +103,7 @@ void VRAMCALL makegrph_init(void) { UINT32 grph_table0[16]; -void VRAMCALL makegrph_init(void) { +void makegrph_initialize(void) { int i; BYTE bit; @@ -133,39 +133,52 @@ static BOOL grphput_indirty0(MKGRPH mkgr _MKGRPH mg; UINT vad; UINT remain; + UINT pitch; UINT mul; UINT vc; UINT32 *p; UINT32 *pterm; mg = *mkgrph; - vad = (LOADINTELWORD(gdc.s.para + GDC_SCROLL + gpos + 0) & 0x3fff) << 1; - remain = (LOADINTELWORD(gdc.s.para + GDC_SCROLL + gpos + 2)) >> 4; - remain &= 0x3ff; - do { - mul = mg.lr; - do { - if ((!(mg.liney & 1)) || (!(gdc.mode1 & 0x10))) { - vc = vad; - p = mg.vm; - pterm = p + (80 * 2); - do { - if (vramupdate[vc] & 1) { - renewal_line[mg.liney] |= 1; - GRPHDATASET(p, vc); - } - vc = (vc + 1) & 0x7fff; - p += 2; - } while(p < pterm); - } - mg.liney++; - if (mg.liney >= dsync.grphymax) { - return(TRUE); - } - mg.vm += 80*2; - } while(--mul); - vad = (vad + mg.pitch) & 0x7fff; - } while(--remain); + vad = LOADINTELWORD(gdc.s.para + GDC_SCROLL + gpos + 0); + vad = LOW15(vad << 1); + remain = LOADINTELWORD(gdc.s.para + GDC_SCROLL + gpos + 2); + pitch = gdc.s.para[GDC_PITCH]; + if (!(remain & (1 << 14))) { + pitch <<= 1; + } + pitch &= 0xfe; + remain = LOW14(remain) >> 4; + mul = mg.lr; + while(1) { + if ((!(mg.liney & 1)) || (!(gdc.mode1 & 0x10))) { + vc = vad; + p = mg.vm; + pterm = p + (80 * 2); + do { + if (vramupdate[vc] & 1) { + renewal_line[mg.liney] |= 1; + GRPHDATASET(p, vc); + } + vc = LOW15(vc + 1); + p += 2; + } while(p < pterm); + } + mg.liney++; + if (mg.liney >= dsync.grphymax) { + return(TRUE); + } + mg.vm += 80*2; + remain--; + if (!remain) { + break; + } + mul--; + if (!mul) { + mul = mg.lr; + vad = LOW15(vad + pitch); + } + } mkgrph->vm = mg.vm; mkgrph->liney = mg.liney; return(FALSE); @@ -176,39 +189,52 @@ static BOOL grphput_indirty1(MKGRPH mkgr _MKGRPH mg; UINT vad; UINT remain; + UINT pitch; UINT mul; UINT vc; UINT32 *p; UINT32 *pterm; mg = *mkgrph; - vad = (LOADINTELWORD(gdc.s.para + GDC_SCROLL + gpos + 0) & 0x3fff) << 1; - remain = (LOADINTELWORD(gdc.s.para + GDC_SCROLL + gpos + 2)) >> 4; - remain &= 0x3ff; - do { - mul = mg.lr; - do { - if ((!(mg.liney & 1)) || (!(gdc.mode1 & 0x10))) { - vc = vad; - p = mg.vm; - pterm = p + (80 * 2); - do { - if (vramupdate[vc] & 2) { - renewal_line[mg.liney] |= 2; - GRPHDATASET(p, vc + VRAM_STEP); - } - vc = (vc + 1) & 0x7fff; - p += 2; - } while(p < pterm); - } - mg.liney++; - if (mg.liney >= dsync.grphymax) { - return(TRUE); - } - mg.vm += 80*2; - } while(--mul); - vad = (vad + mg.pitch) & 0x7fff; - } while(--remain); + vad = LOADINTELWORD(gdc.s.para + GDC_SCROLL + gpos + 0); + vad = LOW15(vad << 1); + remain = LOADINTELWORD(gdc.s.para + GDC_SCROLL + gpos + 2); + pitch = gdc.s.para[GDC_PITCH]; + if (!(remain & (1 << 14))) { + pitch <<= 1; + } + pitch &= 0xfe; + remain = LOW14(remain) >> 4; + mul = mg.lr; + while(1) { + if ((!(mg.liney & 1)) || (!(gdc.mode1 & 0x10))) { + vc = vad; + p = mg.vm; + pterm = p + (80 * 2); + do { + if (vramupdate[vc] & 2) { + renewal_line[mg.liney] |= 2; + GRPHDATASET(p, vc + VRAM_STEP); + } + vc = LOW15(vc + 1); + p += 2; + } while(p < pterm); + } + mg.liney++; + if (mg.liney >= dsync.grphymax) { + return(TRUE); + } + mg.vm += 80*2; + remain--; + if (!remain) { + break; + } + mul--; + if (!mul) { + mul = mg.lr; + vad = LOW15(vad + pitch); + } + } mkgrph->vm = mg.vm; mkgrph->liney = mg.liney; return(FALSE); @@ -219,37 +245,50 @@ static BOOL grphput_all0(MKGRPH mkgrph, _MKGRPH mg; UINT vad; UINT remain; + UINT pitch; UINT mul; UINT vc; UINT32 *p; UINT32 *pterm; mg = *mkgrph; - vad = (LOADINTELWORD(gdc.s.para + GDC_SCROLL + gpos + 0) & 0x3fff) << 1; - remain = (LOADINTELWORD(gdc.s.para + GDC_SCROLL + gpos + 2)) >> 4; - remain &= 0x3ff; - do { - mul = mg.lr; - do { - if ((!(mg.liney & 1)) || (!(gdc.mode1 & 0x10))) { - vc = vad; - p = mg.vm; - pterm = p + (80 * 2); - do { - GRPHDATASET(p, vc); - vc = (vc + 1) & 0x7fff; - p += 2; - } while(p < pterm); - } - renewal_line[mg.liney] |= 1; - mg.liney++; - if (mg.liney >= dsync.grphymax) { - return(TRUE); - } - mg.vm += 80*2; - } while(--mul); - vad = (vad + mg.pitch) & 0x7fff; - } while(--remain); + vad = LOADINTELWORD(gdc.s.para + GDC_SCROLL + gpos + 0); + vad = LOW15(vad << 1); + remain = LOADINTELWORD(gdc.s.para + GDC_SCROLL + gpos + 2); + pitch = gdc.s.para[GDC_PITCH]; + if (!(remain & (1 << 14))) { + pitch <<= 1; + } + pitch &= 0xfe; + remain = LOW14(remain) >> 4; + mul = mg.lr; + while(1) { + if ((!(mg.liney & 1)) || (!(gdc.mode1 & 0x10))) { + vc = vad; + p = mg.vm; + pterm = p + (80 * 2); + do { + GRPHDATASET(p, vc); + vc = LOW15(vc + 1); + p += 2; + } while(p < pterm); + } + renewal_line[mg.liney] |= 1; + mg.liney++; + if (mg.liney >= dsync.grphymax) { + return(TRUE); + } + mg.vm += 80*2; + remain--; + if (!remain) { + break; + } + mul--; + if (!mul) { + mul = mg.lr; + vad = LOW15(vad + pitch); + } + } mkgrph->vm = mg.vm; mkgrph->liney = mg.liney; return(FALSE); @@ -260,37 +299,50 @@ static BOOL grphput_all1(MKGRPH mkgrph, _MKGRPH mg; UINT vad; UINT remain; + UINT pitch; UINT mul; UINT vc; UINT32 *p; UINT32 *pterm; mg = *mkgrph; - vad = (LOADINTELWORD(gdc.s.para + GDC_SCROLL + gpos + 0) & 0x3fff) << 1; - remain = (LOADINTELWORD(gdc.s.para + GDC_SCROLL + gpos + 2)) >> 4; - remain &= 0x3ff; - do { - mul = mg.lr; - do { - if ((!(mg.liney & 1)) || (!(gdc.mode1 & 0x10))) { - vc = vad; - p = mg.vm; - pterm = p + (80 * 2); - do { - GRPHDATASET(p, vc + VRAM_STEP); - vc = (vc + 1) & 0x7fff; - p += 2; - } while(p < pterm); - } - renewal_line[mg.liney] |= 2; - mg.liney++; - if (mg.liney >= dsync.grphymax) { - return(TRUE); - } - mg.vm += 80*2; - } while(--mul); - vad = (vad + mg.pitch) & 0x7fff; - } while(--remain); + vad = LOADINTELWORD(gdc.s.para + GDC_SCROLL + gpos + 0); + vad = LOW15(vad << 1); + remain = LOADINTELWORD(gdc.s.para + GDC_SCROLL + gpos + 2); + pitch = gdc.s.para[GDC_PITCH]; + if (!(remain & (1 << 14))) { + pitch <<= 1; + } + pitch &= 0xfe; + remain = LOW14(remain) >> 4; + mul = mg.lr; + while(1) { + if ((!(mg.liney & 1)) || (!(gdc.mode1 & 0x10))) { + vc = vad; + p = mg.vm; + pterm = p + (80 * 2); + do { + GRPHDATASET(p, vc + VRAM_STEP); + vc = LOW15(vc + 1); + p += 2; + } while(p < pterm); + } + renewal_line[mg.liney] |= 2; + mg.liney++; + if (mg.liney >= dsync.grphymax) { + return(TRUE); + } + mg.vm += 80*2; + remain--; + if (!remain) { + break; + } + mul--; + if (!mul) { + mul = mg.lr; + vad = LOW15(vad + pitch); + } + } mkgrph->vm = mg.vm; mkgrph->liney = mg.liney; return(FALSE); @@ -301,11 +353,11 @@ void VRAMCALL makegrph(int page, int all _MKGRPH mg; int i; - mg.pitch = gdc.s.para[GDC_PITCH]; - if (!(gdc.clock & 0x80)) { - mg.pitch <<= 1; - } - mg.pitch &= 0xfe; +// mg.pitch = gdc.s.para[GDC_PITCH]; +// if (!(gdc.clock & 0x80)) { +// mg.pitch <<= 1; +// } +// mg.pitch &= 0xfe; mg.lr = (gdc.s.para[GDC_CSRFORM] & 0x1f) + 1; mg.liney = dsync.grph_vbp;