Example #1
0
 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;
 }
Example #2
0
        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];
        }
Example #3
0
        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;
        }
Example #4
0
        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);
}
Example #5
0
 public IOReadPort(int start, int end, mem_read_handler handler)
 {
     this.start = start; this.end = end; this.handler = handler;
 }
Example #6
0
 public MemoryReadAddress(int start, int end, mem_read_handler handler) { this.start = start; this.end = end; this.handler = handler; }