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
        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];
        }
Example #3
0
        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;
        }
Example #4
0
        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);
        }
Example #5
0
 public IOWritePort(int start, int end, mem_write_handler handler) { this.start = start; this.end = end; this.handler = handler; }
Example #6
0
 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; }
Example #7
0
 public MemoryWriteAddress(int start, int end, mem_write_handler handler) { this.start = start; this.end = end; this.handler = handler; }