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; }
IOReadPort[] install_port_read_handler_common(int cpu, int start, int end, mem_read_handler handler, int install_at_beginning) { int i, oldsize; oldsize = readport_size[cpu]; readport_size[cpu]++; if (readport[cpu] == null) { readport[cpu] = new IOReadPort[readport_size[cpu]]; } else { Array.Resize<IOReadPort>(ref readport[cpu], readport_size[cpu]); } if (readport[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(readport[cpu], i - 1, readport[cpu], i, 1); //memcpy(&readport[cpu][i], &readport[cpu][i - 1], sizeof(struct IOReadPort)); } i = 0; } else { i = oldsize; } readport[cpu][i] = new IOReadPort(); readport[cpu][i].start = start; readport[cpu][i].end = end; readport[cpu][i].handler = handler; return readport[cpu]; }
public static void cpu_setbankhandler_r(int bank, mem_read_handler handler) { int offset = 0; MHELE hardware; if (handler == MRA_RAM_handler || handler == MRA_ROM_handler) { handler = mrh_ram; } else if (handler== MRA_NOP_handler){handler = mrh_nop;} else if (handler == MRA_BANK1_handler){hardware=1;handler=bank_read_handler[hardware];offset=bankreadoffset[hardware];} else if (handler ==MRA_BANK2_handler){hardware=2;handler=bank_read_handler[hardware];offset=bankreadoffset[hardware];} else if (handler ==MRA_BANK3_handler){hardware=3;handler=bank_read_handler[hardware];offset=bankreadoffset[hardware];} else if (handler ==MRA_BANK4_handler){hardware=4;handler=bank_read_handler[hardware];offset=bankreadoffset[hardware];} else if (handler ==MRA_BANK5_handler){hardware=5;handler=bank_read_handler[hardware];offset=bankreadoffset[hardware];} else if (handler ==MRA_BANK6_handler){hardware=6;handler=bank_read_handler[hardware];offset=bankreadoffset[hardware];} else if (handler ==MRA_BANK7_handler){hardware=7;handler=bank_read_handler[hardware];offset=bankreadoffset[hardware];} else if (handler ==MRA_BANK8_handler){hardware=8;handler=bank_read_handler[hardware];offset=bankreadoffset[hardware];} else if (handler ==MRA_BANK9_handler){hardware=9;handler=bank_read_handler[hardware];offset=bankreadoffset[hardware];} else if (handler ==MRA_BANK10_handler){hardware=10;handler=bank_read_handler[hardware];offset=bankreadoffset[hardware];} else if (handler == MRA_BANK11_handler) { hardware = 11; handler = bank_read_handler[hardware]; offset = bankreadoffset[hardware]; } else if (handler == MRA_BANK12_handler) { hardware = 12; handler = bank_read_handler[hardware]; offset = bankreadoffset[hardware]; } else if (handler == MRA_BANK13_handler) { hardware = 13; handler = bank_read_handler[hardware]; offset = bankreadoffset[hardware]; } else if (handler == MRA_BANK14_handler) { hardware = 14; handler = bank_read_handler[hardware]; offset = bankreadoffset[hardware]; } else if (handler == MRA_BANK15_handler) { hardware = 15; handler = bank_read_handler[hardware]; offset = bankreadoffset[hardware]; } else if (handler == MRA_BANK16_handler) { hardware = 16; handler = bank_read_handler[hardware]; offset = bankreadoffset[hardware]; } else offset = bankreadoffset[bank]; memoryreadoffset[bank] = offset; memoryreadhandler[bank] = handler; }
public static _BytePtr install_mem_read_handler(int cpu, int start, int end, mem_read_handler handler) { MHELE hardware = 0; int abitsmin; int i, hw_set; 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 (( memoryreadhandler[i] == handler ) && ( memoryreadoffset[i] == start)) { printf("handler match - use old one\n"); hardware = (byte)i; hw_set = 1; } } if (handler == MRA_RAM_handler || handler == MRA_ROM_handler){hardware = HT_RAM; /* sprcial case ram read */hw_set = 1;} else if (handler == MRA_BANK1_handler){hardware = 1;hw_set = 1; } else if (handler == MRA_BANK2_handler){hardware = 2;hw_set = 1; } else if (handler == MRA_BANK3_handler ){hardware = 3;hw_set = 1; } else if (handler == MRA_BANK4_handler ){hardware = 4;hw_set = 1; } else if (handler == MRA_BANK5_handler){hardware = 5;hw_set = 1; } else if (handler == MRA_BANK6_handler ){hardware = 6;hw_set = 1; } else if (handler == MRA_BANK7_handler ){hardware = 7;hw_set = 1; } else if (handler == MRA_BANK8_handler ){hardware = 8;hw_set = 1; } else if (handler == MRA_BANK9_handler ){hardware = 9;hw_set = 1; } else if (handler == MRA_BANK10_handler ){hardware = 10;hw_set = 1; } else if (handler == MRA_BANK11_handler ){hardware = 11;hw_set = 1; } else if (handler == MRA_BANK12_handler ){hardware = 12;hw_set = 1; } else if (handler == MRA_BANK13_handler ){hardware = 13;hw_set = 1; } else if (handler == MRA_BANK14_handler ){hardware = 14;hw_set = 1; } else if (handler == MRA_BANK15_handler ){hardware = 15;hw_set = 1; } else if (handler == MRA_BANK16_handler){hardware = 16;hw_set = 1; } else if (handler == MRA_NOP_handler) { hardware = HT_NOP; hw_set = 1; } if (hw_set==0) /* no match */ { /* create newer hardware handler */ if( rdhard_max == MH_HARDMAX ) { printf( "read 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)rdhard_max++; memoryreadhandler[hardware] = handler; memoryreadoffset[hardware] = start; } } /* set hardware element table entry */ set_element( cpu , new _BytePtr(cur_mr_element[cpu]), (int)(((uint) start) >> abitsmin) , (int)(((uint)end) >> abitsmin), hardware , new _BytePtr(readhardware) , ref rdelement_max ); //if (errorlog) fprintf(errorlog, "Done installing new memory handler.\n"); //if (errorlog){fprintf(errorlog,"used read elements %d/%d , functions %d/%d\n",rdelement_max,MH_ELEMAX , rdhard_max,MH_HARDMAX );} return memory_find_base(cpu, start); }
public IOReadPort(int start, int end, mem_read_handler handler) { this.start = start; this.end = end; this.handler = handler; }
public MemoryReadAddress(int start, int end, mem_read_handler handler) { this.start = start; this.end = end; this.handler = handler; }