static void mira(void) { if((tkcom[0]&0x20&&is209)||is211) { int x; if(tkcom[0]&0x40) // Name tables are ROM-only { for(x=0;x<4;x++) setntamem(CHRptr[0]+(((names[x])&CHRmask1[0])<<10),0,x); } else // Name tables can be RAM or ROM. { for(x=0;x<4;x++) { if((tkcom[1]&0x80)==(names[x]&0x80)) // RAM selected. setntamem(NTARAM+((names[x]&0x1)<<10),1,x); else setntamem(CHRptr[0]+(((names[x])&CHRmask1[0])<<10),0,x); } } } else { switch(tkcom[1]&3) { case 0: setmirror(MI_V); break; case 1: setmirror(MI_H); break; case 2: setmirror(MI_0); break; case 3: setmirror(MI_1); break; } } }
static void FASTAPASS(2) DoNTARAMROM(int w, uint8 V) { NTAPage[w]=V; if(V>=0xE0) setntamem(NTARAM+((V&1)<<10), 1, w); else { V&=CHRmask1[0]; setntamem(CHRptr[0]+(V<<10), 0, w); } }
static void FASTAPASS(2) DoNTARAMROM(int w, uint8 V) { NTAPage[w]=V; //if(V>=0xE0) // setntamem(NTARAM+((V&1)<<10), 1, w); //printf("%d, %02x\n",w,V); //printf("%02x, %02x\n",((gorko>>(6+(w>>1)))&1),V); if(V>=0xE0) setntamem(NTARAM+((V&1)<<10), 1, w); else { V&=CHRmask1[0]; setntamem(CHRptr[0]+(V<<10), 0, w); } }
static void Sync(void) { // bit 7 controls green LED // bit 6 controls red LED int nt = (reg & 0x20) ? 8192 : 0; // bit 5 controls 8k nametable page int chr = (reg & 0x10) ? 1 : 0; // bit 4 selects 8k CHR page int prg = (reg & 0x0F); // bits 0-3 select 32k PRG page nt += (16 * 1024); for (int n=0; n<4; ++n) { setntamem(CHRRAM + nt + (1024 * n),1,n); } setchr8r(0x10, chr); uint32 prg_chip = flash ? 0x10 : 0; setprg32r(prg_chip,0x8000,prg); }