/* FCE Ultra - NES/Famicom Emulator
*
* Copyright notice for this file:
- * Copyright (C) 2002 Ben Parnell
+ * Copyright (C) 2002 Xodnizel
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#include "mapinc.h"
+static int is48;
+
static DECLFW(Mapper33_write)
{
- A&=0xF003;
+ //printf("%04x:%02x, %d\n",A,V,scanline);
- //printf("$%04x:$%02x, %d\n",A,V,scanline);
+ A&=0xF003;
if(A>=0xA000 && A<=0xA003)
VROM_BANK1(0x1000+((A&3)<<10),V);
- else switch(A){
- case 0x8000:if(!mapbyte1[0])
- MIRROR_SET((V>>6)&1);
+ else switch(A)
+ {
+ case 0x8000:if(!is48) MIRROR_SET((V>>6)&1);
ROM_BANK8(0x8000,V);
- break;
- case 0x8001:ROM_BANK8(0xA000,V); break;
- case 0x8002:VROM_BANK2(0x0000,V);break;
- case 0x8003:VROM_BANK2(0x0800,V);break;
- case 0xc000:IRQLatch=V;break;
- case 0xc001:IRQCount=IRQLatch;break;
- case 0xc003:IRQa=0;break;
- case 0xc002:IRQa=1;break;
- case 0xe000:mapbyte1[0]=1;MIRROR_SET((V>>6)&1);break;
+ break;
+ case 0x8001:ROM_BANK8(0xA000,V); break;
+ case 0x8002:VROM_BANK2(0x0000,V);break;
+ case 0x8003:VROM_BANK2(0x0800,V);break;
+ }
+}
+
+static DECLFW(Mapper48_HiWrite)
+{
+ switch(A&0xF003)
+ {
+ case 0xc000:IRQLatch=V;break;
+ case 0xc001:IRQCount=IRQLatch;break;
+ case 0xc003:IRQa=0;X6502_IRQEnd(FCEU_IQEXT);break;
+ case 0xc002:IRQa=1;break;
+ case 0xe000:MIRROR_SET((V>>6)&1);break;
}
}
if(IRQa)
{
IRQCount++;
- if(IRQCount==0x100)
+ if(IRQCount==0x100)
{
- TriggerIRQ();
+ X6502_IRQBegin(FCEU_IQEXT);
IRQa=0;
}
}
void Mapper33_init(void)
{
- SetWriteHandler(0x8000,0xffff,Mapper33_write);
- GameHBIRQHook=heho;
+ SetWriteHandler(0x8000,0xffff,Mapper33_write);
+ is48=0;
+}
+
+void Mapper48_init(void)
+{
+ SetWriteHandler(0x8000,0xffff,Mapper33_write);
+ SetWriteHandler(0xc000,0xffff,Mapper48_HiWrite);
+ GameHBIRQHook=heho;
+ is48=1;
}