public ppi8255_interface(int num, mem_read_handler portA_r, mem_read_handler portB_r, mem_read_handler portC_r, mem_write_handler portA_w, mem_write_handler portB_w, mem_write_handler portC_w) { this.num = num; this.portA_r = portA_r; this.portA_w = portA_w; this.portB_r = portB_r; this.portB_w = portB_w; this.portC_r = portB_r; this.portC_w = portC_w; }
IOWritePort[] install_port_write_handler_common(int cpu, int start, int end, mem_write_handler handler, int install_at_beginning) { int i, oldsize; oldsize = writeport_size[cpu]; writeport_size[cpu]++; if (writeport[cpu] == null) { writeport[cpu] = new IOWritePort[writeport_size[cpu]]; } else { Array.Resize<IOWritePort>(ref writeport[cpu], writeport_size[cpu]); } if (writeport[cpu] == null) return null; if (install_at_beginning != 0) { /* can't do a single memcpy because it doesn't handle overlapping regions correctly??? */ for (i = oldsize; i >= 1; i--) { Array.Copy(writeport[cpu], i - 1, writeport[cpu], i, 1); //memcpy(&writeport[cpu][i], &writeport[cpu][i - 1], sizeof(struct IOWritePort)); } i = 0; } else { i = oldsize; } writeport[cpu][i] = new IOWritePort(); writeport[cpu][i].start = start; writeport[cpu][i].end = end; writeport[cpu][i].handler = handler; return writeport[cpu]; }
public static void cpu_setbankhandler_w(int bank, mem_write_handler handler) { int offset = 0; MHELE hardware; if (handler == MWA_RAM_handler) { handler = mwh_ram; } else if (handler == MWA_RAMROM_handler) { handler = mwh_ramrom; } else if (handler == MWA_ROM_handler) { handler = mwh_rom; } else if (handler == MWA_NOP_handler) { handler = mwh_nop; } else if (handler == MWA_BANK1_handler) { hardware = 1; handler = bank_write_handler[hardware]; offset = bankwriteoffset[hardware]; } else if (handler == MWA_BANK2_handler) { hardware = 2; handler = bank_write_handler[hardware]; offset = bankwriteoffset[hardware]; } else if (handler == MWA_BANK3_handler) { hardware = 3; handler = bank_write_handler[hardware]; offset = bankwriteoffset[hardware]; } else if (handler == MWA_BANK4_handler) { hardware = 4; handler = bank_write_handler[hardware]; offset = bankwriteoffset[hardware]; } else if (handler == MWA_BANK5_handler) { hardware = 5; handler = bank_write_handler[hardware]; offset = bankwriteoffset[hardware]; } else if (handler == MWA_BANK6_handler) { hardware = 6; handler = bank_write_handler[hardware]; offset = bankwriteoffset[hardware]; } else if (handler == MWA_BANK7_handler) { hardware = 7; handler = bank_write_handler[hardware]; offset = bankwriteoffset[hardware]; } else if (handler == MWA_BANK8_handler) { hardware = 8; handler = bank_write_handler[hardware]; offset = bankwriteoffset[hardware]; } else if (handler == MWA_BANK9_handler) { hardware = 9; handler = bank_write_handler[hardware]; offset = bankwriteoffset[hardware]; } else if (handler == MWA_BANK10_handler) { hardware = 10; handler = bank_write_handler[hardware]; offset = bankwriteoffset[hardware]; } else if (handler == MWA_BANK11_handler) { hardware = 11; handler = bank_write_handler[hardware]; offset = bankwriteoffset[hardware]; } else if (handler == MWA_BANK12_handler) { hardware = 12; handler = bank_write_handler[hardware]; offset = bankwriteoffset[hardware]; } else if (handler == MWA_BANK13_handler) { hardware = 13; handler = bank_write_handler[hardware]; offset = bankwriteoffset[hardware]; } else if (handler == MWA_BANK14_handler) { hardware = 14; handler = bank_write_handler[hardware]; offset = bankwriteoffset[hardware]; } else if (handler == MWA_BANK15_handler) { hardware = 15; handler = bank_write_handler[hardware]; offset = bankwriteoffset[hardware]; } else if (handler == MWA_BANK16_handler) { hardware = 16; handler = bank_write_handler[hardware]; offset = bankwriteoffset[hardware]; } else offset = bankwriteoffset[bank]; memorywriteoffset[bank] = offset; memorywritehandler[bank] = handler; }
public static _BytePtr install_mem_write_handler(int cpu, int start, int end, mem_write_handler handler) { MHELE hardware = 0; int abitsmin; int i, hw_set; // if (errorlog) fprintf(errorlog, "Install new memory write handler:\n"); // if (errorlog) fprintf(errorlog, " cpu: %d\n", cpu); // if (errorlog) fprintf(errorlog, " start: 0x%08x\n", start); // if (errorlog) fprintf(errorlog, " end: 0x%08x\n", end); //#ifdef __LP64__ // if (errorlog) fprintf(errorlog, " handler address: 0x%016lx\n", (unsigned long) handler); //#else // if (errorlog) fprintf(errorlog, " handler address: 0x%08x\n", (unsigned int) handler); //#endif abitsmin = (int)ABITSMIN(cpu); /* see if this function is already registered */ hw_set = 0; for (i = 0; i < MH_HARDMAX; i++) { /* record it if it matches */ if ((memorywritehandler[i] == handler) && (memorywriteoffset[i] == start)) { printf("handler match - use old one\n"); hardware = (byte)i; hw_set = 1; } } if (handler == MWA_RAM_handler) { hardware = HT_RAM; /* sprcial case ram write */ hw_set = 1; } else if (handler == MWA_BANK1_handler) { hardware = 1; hw_set = 1; } else if (handler == MWA_BANK2_handler) { hardware = 2; hw_set = 1; } else if (handler == MWA_BANK3_handler) { hardware = 3; hw_set = 1; } else if (handler == MWA_BANK4_handler) { hardware = 4; hw_set = 1; } else if (handler == MWA_BANK5_handler) { hardware = 5; hw_set = 1; } else if (handler == MWA_BANK6_handler) { hardware = 6; hw_set = 1; } else if (handler == MWA_BANK7_handler) { hardware = 7; hw_set = 1; } else if (handler == MWA_BANK8_handler) { hardware = 8; hw_set = 1; } else if (handler == MWA_BANK9_handler) { hardware = 9; hw_set = 1; } else if (handler == MWA_BANK10_handler) { hardware = 10; hw_set = 1; } else if (handler == MWA_BANK11_handler) { hardware = 11; hw_set = 1; } else if (handler == MWA_BANK12_handler) { hardware = 12; hw_set = 1; } else if (handler == MWA_BANK13_handler) { hardware = 13; hw_set = 1; } else if (handler == MWA_BANK14_handler) { hardware = 14; hw_set = 1; } else if (handler == MWA_BANK15_handler) { hardware = 15; hw_set = 1; } else if (handler == MWA_BANK16_handler) { hardware = 16; hw_set = 1; } else if (handler == MWA_NOP_handler) { hardware = HT_NOP; hw_set = 1; } else if (handler == MWA_RAMROM_handler) { hardware = HT_RAMROM; hw_set = 1; } else if (handler == MWA_ROM_handler) { hardware = HT_ROM; hw_set = 1; } if (hw_set == 0) /* no match */ { /* create newer hardware handler */ if (wrhard_max == MH_HARDMAX) { printf("write memory hardware pattern over !\n"); printf("Failed to install new memory handler.\n"); return memory_find_base(cpu, start); } else { /* register hardware function */ hardware = (byte)wrhard_max++; memorywritehandler[hardware] = handler; memorywriteoffset[hardware] = start; } } /* set hardware element table entry */ set_element(cpu, new _BytePtr(cur_mw_element[cpu]), (int)(((uint)start) >> abitsmin), (int)(((uint)end) >> abitsmin), hardware, new _BytePtr(writehardware), ref wrelement_max); printf("Done installing new memory handler.\n"); printf("used write elements %d/%d , functions %d/%d\n", wrelement_max, MH_ELEMAX, wrhard_max, MH_HARDMAX); return memory_find_base(cpu, start); }
public IOWritePort(int start, int end, mem_write_handler handler) { this.start = start; this.end = end; this.handler = handler; }
public MemoryWriteAddress(int start, int end, mem_write_handler handler, _BytePtr _base, int[] size) { this.start = start; this.end = end; this.handler = handler; this._base = _base; this.size = size; }
public MemoryWriteAddress(int start, int end, mem_write_handler handler) { this.start = start; this.end = end; this.handler = handler; }