VM::VM(EMU* parent_emu) : emu(parent_emu) { // create devices first_device = last_device = NULL; dummy = new DEVICE(this, emu); // must be 1st device event = new EVENT(this, emu); // must be 2nd device drec = new DATAREC(this, emu); sio = new I8251(this, emu); pio_k = new I8255(this, emu); pio_f = new I8255(this, emu); io = new IO(this, emu); psg = new SN76489AN(this, emu); vdp = new TMS9918A(this, emu); fdc = new UPD765A(this, emu); cpu = new Z80(this, emu); key = new KEYBOARD(this, emu); memory = new MEMORY(this, emu); // set contexts event->set_context_cpu(cpu); event->set_context_sound(psg); drec->set_context_out(pio_k, SIG_I8255_PORT_B, 0x80); pio_k->set_context_port_c(key, SIG_KEYBOARD_COLUMN, 0x07, 0); pio_k->set_context_port_c(drec, SIG_DATAREC_REMOTE, 0x08, 0); pio_k->set_context_port_c(drec, SIG_DATAREC_OUT, 0x10, 0); pio_f->set_context_port_c(fdc, SIG_UPD765A_MOTOR_NEG, 2, 0); pio_f->set_context_port_c(fdc, SIG_UPD765A_TC, 4, 0); pio_f->set_context_port_c(fdc, SIG_UPD765A_RESET, 8, 0); pio_f->set_context_port_c(memory, SIG_MEMORY_SEL, 0x40, 0); vdp->set_context_irq(cpu, SIG_CPU_IRQ, 1); fdc->set_context_irq(pio_f, SIG_I8255_PORT_A, 1); fdc->set_context_index(pio_f, SIG_I8255_PORT_A, 4); #ifdef _FDC_DEBUG_LOG fdc->set_context_cpu(cpu); #endif key->set_context_cpu(cpu); key->set_context_pio(pio_k); // cpu bus cpu->set_context_mem(memory); cpu->set_context_io(io); cpu->set_context_intr(dummy); // i/o bus io->set_iomap_range_rw(0x40, 0x7f, psg); io->set_iomap_range_rw(0x80, 0xbf, vdp); io->set_iomap_range_rw(0xc0, 0xdf, pio_k); io->set_iomap_range_rw(0xe0, 0xe3, fdc); io->set_iomap_range_rw(0xe4, 0xe7, pio_f); io->set_iomap_range_rw(0xe8, 0xeb, sio); // initialize all devices for(DEVICE* device = first_device; device; device = device->next_device) { device->initialize(); } }
VM::VM(EMU* parent_emu) : emu(parent_emu) { // create devices first_device = last_device = NULL; dummy = new DEVICE(this, emu); // must be 1st device event = new EVENT(this, emu); // must be 2nd device sio = new I8251(this, emu); drec = new CMT(this, emu); io = new IO(this, emu); vdp = new MC6847(this, emu); not = new NOT(this, emu); psg = new YM2203(this, emu); cpu = new Z80(this, emu); joystick = new JOYSTICK(this, emu); keyboard = new KEYBOARD(this, emu); memory = new MEMORY(this, emu); system = new SYSTEM(this, emu); // set contexts event->set_context_cpu(cpu); event->set_context_sound(psg); vdp->set_vram_ptr(memory->get_vram(), 0x1800); vdp->set_font_ptr(memory->get_cgrom(), memory->get_pcgram()); vdp->set_context_vsync(not, SIG_NOT_INPUT, 1); not->set_context_out(cpu, SIG_CPU_IRQ, 1); joystick->set_context_psg(psg); system->set_context_drec(drec); system->set_context_vdp(vdp); drec->set_context_sio(sio); // cpu bus cpu->set_context_mem(memory); cpu->set_context_io(io); cpu->set_context_intr(dummy); sio->set_context_out(drec, SIG_CMT_OUT); // i/o bus io->set_iomap_range_r(0x00, 0x0f, keyboard); io->set_iomap_range_w(0x10, 0x1f, system); io->set_iomap_range_w(0x30, 0x3f, system); for(int i = 0x20; i < 0x30; i += 4) { io->set_iomap_alias_w(i+1, psg, 1); io->set_iomap_alias_r(i+2, psg, 1); io->set_iomap_alias_w(i+3, psg, 0); } io->set_iomap_range_w(0x60, 0x7f, memory); io->set_iomap_alias_rw(0xb0, sio, 0); io->set_iomap_alias_rw(0xb8, sio, 1); // initialize all devices for(DEVICE* device = first_device; device; device = device->next_device) { device->initialize(); } }
VM::VM(EMU* parent_emu) : emu(parent_emu) { // create devices first_device = last_device = NULL; dummy = new DEVICE(this, emu); // must be 1st device event = new EVENT(this, emu); // must be 2nd device drec = new DATAREC(this, emu); io = new IO(this, emu); vdp = new MC6847(this, emu); not = new NOT(this, emu); psg = new YM2203(this, emu); cpu = new Z80(this, emu); joystick = new JOYSTICK(this, emu); keyboard = new KEYBOARD(this, emu); memory = new MEMORY(this, emu); system = new SYSTEM(this, emu); // set contexts event->set_context_cpu(cpu); event->set_context_sound(psg); vdp->set_vram_ptr(memory->get_vram(), 0x1800); vdp->set_context_vsync(not, SIG_NOT_INPUT, 1); not->set_context_out(cpu, SIG_CPU_IRQ, 1); vdp->set_context_vsync(system, SIG_SYSTEM_PORT, 0x10); drec->set_context_out(system, SIG_SYSTEM_PORT, 0x20); // bit6: printer busy vdp->set_context_hsync(system, SIG_SYSTEM_PORT, 0x80); joystick->set_context_psg(psg); #ifdef _MAP1010 memory->set_context_keyboard(keyboard); #endif system->set_context_drec(drec); system->set_context_vdp(vdp); // cpu bus cpu->set_context_mem(memory); cpu->set_context_io(io); cpu->set_context_intr(dummy); // i/o bus io->set_iomap_single_rw(0x40, system); #ifndef _MAP1010 io->set_iomap_range_r(0x80, 0x88, keyboard); #endif io->set_iomap_alias_w(0xc0, psg, 1); // PSG data io->set_iomap_alias_w(0xc1, psg, 0); // PSG ch // io->set_iomap_alias_r(0xc0, psg, 1); io->set_iomap_alias_r(0xc1, psg, 1); // PSG data // initialize all devices for(DEVICE* device = first_device; device; device = device->next_device) { device->initialize(); } }
VM::VM(EMU* parent_emu) : emu(parent_emu) { // create devices first_device = last_device = NULL; dummy = new DEVICE(this, emu); // must be 1st device event = new EVENT(this, emu); // must be 2nd device // cmt = new DATAREC(this, emu); cpu = new I8080(this, emu); pio = new I8155(this, emu); io = new IO(this, emu); buzzer = new PCM1BIT(this, emu); rtc = new UPD1990A(this, emu); keyboard = new KEYBOARD(this, emu); lcd = new LCD(this, emu); memory = new MEMORY(this, emu); // set contexts event->set_context_cpu(cpu); event->set_context_sound(buzzer); // cmt->set_context_out(cpu, SIG_I8085_SID, 1); // cpu->set_context_sod(cmt, SIG_DATAREC_OUT, 1); pio->set_context_port_a(rtc, SIG_UPD1990A_C0, 1, 0); pio->set_context_port_a(rtc, SIG_UPD1990A_C1, 2, 0); pio->set_context_port_a(rtc, SIG_UPD1990A_C2, 4, 0); pio->set_context_port_a(rtc, SIG_UPD1990A_CLK, 8, 0); pio->set_context_port_a(rtc, SIG_UPD1990A_DIN, 0x10, 0); pio->set_context_port_a(keyboard, SIG_KEYBOARD_COLUMN_L, 0xff, 0); pio->set_context_port_a(lcd, SIG_LCD_CHIPSEL_L, 0xff, 0); pio->set_context_port_b(keyboard, SIG_KEYBOARD_COLUMN_H, 1, 0); pio->set_context_port_b(lcd, SIG_LCD_CHIPSEL_H, 3, 0); pio->set_context_port_b(buzzer, SIG_PCM1BIT_MUTE, 0x20, 0); pio->set_context_timer(buzzer, SIG_PCM1BIT_SIGNAL, 1); pio->set_constant_clock(CPU_CLOCKS); rtc->set_context_dout(pio, SIG_I8155_PORT_C, 1); rtc->set_context_tp(cpu, SIG_I8085_RST7, 1); // memory->set_context_cmt(cmt); memory->set_context_rtc(rtc); // cpu bus cpu->set_context_mem(memory); cpu->set_context_io(io); // i/o bus io->set_iomap_range_w(0x90, 0x9f, memory); io->set_iomap_range_rw(0xa0, 0xaf, memory); io->set_iomap_range_rw(0xb0, 0xbf, pio); io->set_iomap_range_r(0xe0, 0xef, keyboard); io->set_iomap_range_rw(0xf0, 0xff, lcd); // initialize all devices for(DEVICE* device = first_device; device; device = device->next_device) { device->initialize(); } }
VM::VM(EMU* parent_emu) : emu(parent_emu) { // create devices first_device = last_device = NULL; dummy = new DEVICE(this, emu); // must be 1st device event = new EVENT(this, emu); // must be 2nd device drec = new DATAREC(this, emu); cpu = new I8080(this, emu); // i8085 memory = new MEMORY(this, emu); rtc = new RP5C01(this, emu); io = new IO(this, emu); // set contexts event->set_context_cpu(cpu); event->set_context_sound(drec); drec->set_context_ear(io, SIG_IO_CMT, 1); cpu->set_context_sod(io, SIG_IO_SOD, 1); io->set_context_cpu(cpu); io->set_context_drec(drec); io->set_context_rtc(rtc); // cpu bus cpu->set_context_mem(memory); cpu->set_context_io(io); cpu->set_context_intr(io); #ifdef USE_DEBUGGER cpu->set_context_debugger(new DEBUGGER(this, emu)); #endif // memory bus memset(rom, 0xff, sizeof(rom)); memset(ram, 0, sizeof(ram)); memory->read_bios(_T("BIOS.ROM"), rom, sizeof(rom)); FILEIO* fio = new FILEIO(); if(fio->Fopen(create_local_path(_T("RAM.BIN")), FILEIO_READ_BINARY)) { fio->Fread(ram, sizeof(ram), 1); fio->Fclose(); } delete fio; memory->set_memory_r(0x0000, 0x7fff, rom); memory->set_memory_rw(0x8000, 0xffff, ram); memory->set_wait_rw(0x0000, 0xffff, 1); // initialize all devices for(DEVICE* device = first_device; device; device = device->next_device) { device->initialize(); } }
VM::VM(EMU* parent_emu) : emu(parent_emu) { // create devices first_device = last_device = NULL; dummy = new DEVICE(this, emu); // must be 1st device event = new EVENT(this, emu); // must be 2nd device io = new IO(this, emu); memory = new MEMORY(this, emu); cpu = new Z80(this, emu); joystick = new JOYSTICK(this, emu); psg = new PSG(this, emu); vdp = new VDP(this, emu); // set contexts event->set_context_cpu(cpu); event->set_context_sound(psg); vdp->set_context_cpu(cpu); vdp->set_memory_ptr(mem); // cpu bus cpu->set_context_mem(memory); cpu->set_context_io(io); cpu->set_context_intr(dummy); #ifdef USE_DEBUGGER cpu->set_context_debugger(new DEBUGGER(this, emu)); #endif // memory bus memset(mem, 0xff, 0x8000); memset(mem + 0x8000, 0, 0x8000); memory->set_memory_r(0x0000, 0x7fff, mem); memory->set_memory_rw(0xb800, 0xbfff, mem + 0xb800); // i/o bus io->set_iomap_range_w(0xf8, 0xfa, psg); io->set_iomap_range_rw(0xfc, 0xfd, joystick); io->set_iomap_range_w(0xfe, 0xff, vdp); // initialize all devices for(DEVICE* device = first_device; device; device = device->next_device) { device->initialize(); } inserted = false; }
VM::VM(EMU* parent_emu) : emu(parent_emu) { // create devices first_device = last_device = NULL; dummy = new DEVICE(this, emu); // must be 1st device event = new EVENT(this, emu); // must be 2nd device beep = new BEEP(this, emu); drec = new DATAREC(this, emu); tf20 = new TF20(this, emu); cpu = new Z80(this, emu); io = new IO(this, emu); memory = new MEMORY(this, emu); // set contexts event->set_context_cpu(cpu); event->set_context_sound(beep); drec->set_context_out(io, SIG_IO_DREC, 1); tf20->set_context_sio(io, SIG_IO_ART); io->set_context_cpu(cpu); io->set_context_mem(memory, memory->get_ram()); io->set_context_tf20(tf20); io->set_context_beep(beep); io->set_context_drec(drec); // cpu bus cpu->set_context_mem(memory); cpu->set_context_io(io); cpu->set_context_intr(io); // initialize all devices for(DEVICE* device = first_device; device; device = device->next_device) { device->initialize(); } }
VM::VM(EMU* parent_emu) : emu(parent_emu) { #if defined(_MZ800) boot_mode = config.boot_mode; #endif // create devices first_device = last_device = NULL; dummy = new DEVICE(this, emu); // must be 1st device event = new EVENT(this, emu); // must be 2nd device and_int = new AND(this, emu); drec = new DATAREC(this, emu); pit = new I8253(this, emu); pio = new I8255(this, emu); io = new IO(this, emu); pcm = new PCM1BIT(this, emu); cpu = new Z80(this, emu); // cmos = new CMOS(this, emu); emm = new EMM(this, emu); keyboard = new KEYBOARD(this, emu); memory = new MEMORY(this, emu); ramfile = new RAMFILE(this, emu); #if defined(_MZ800) || defined(_MZ1500) and_snd = new AND(this, emu); fdc = new MB8877(this, emu); // mb8876 #if defined(_MZ800) not_pit = new NOT(this, emu); psg = new SN76489AN(this, emu); #elif defined(_MZ1500) psg_l = new SN76489AN(this, emu); psg_r = new SN76489AN(this, emu); #endif pio_int = new Z80PIO(this, emu); sio_rs = new Z80SIO(this, emu); sio_qd = new Z80SIO(this, emu); floppy = new FLOPPY(this, emu); #if defined(_MZ1500) psg = new PSG(this, emu); #endif qd = new QUICKDISK(this, emu); #endif // set contexts event->set_context_cpu(cpu); event->set_context_sound(pcm); #if defined(_MZ800) event->set_context_sound(psg); #elif defined(_MZ1500) event->set_context_sound(psg_l); event->set_context_sound(psg_r); #endif // VRAM/PCG wait memory->set_context_cpu(cpu); // memory mapped I/O memory->set_context_pio(pio); memory->set_context_pit(pit); #if defined(_MZ1500) // psg mixer psg->set_context_psg_l(psg_l); psg->set_context_psg_r(psg_r); #endif #if defined(_MZ800) // 8253:CLK#0 <- 1.10MHz pit->set_constant_clock(0, 1100000); #else // 8253:CLK#0 <- 895KHz pit->set_constant_clock(0, CPU_CLOCKS / 4); #endif #if defined(_MZ800) || defined(_MZ1500) // 8253:OUT#0 AND 8255:PC0 -> SPEAKER pit->set_context_ch0(and_snd, SIG_AND_BIT_0, 1); pio->set_context_port_c(and_snd, SIG_AND_BIT_1, 1, 0); and_snd->set_context_out(pcm, SIG_PCM1BIT_SIGNAL, 1); and_snd->set_mask(SIG_AND_BIT_0 | SIG_AND_BIT_1); #else // 8253:OUT#0 -> SPEAKER pit->set_context_ch0(pcm, SIG_PCM1BIT_SIGNAL, 1); #endif #if defined(_MZ800) // 8253:OUT#0 -> NOT -> Z80PIO:PA4 pit->set_context_ch0(not_pit, SIG_NOT_INPUT, 1); not_pit->set_context_out(pio_int, SIG_Z80PIO_PORT_A, 0x10); #elif defined(_MZ1500) // 8253:OUT#0 -> Z80PIO:PA4 pit->set_context_ch0(pio_int, SIG_Z80PIO_PORT_A, 0x10); #endif // 8253:CLK#1 <- 15.7KHz pit->set_constant_clock(1, CPU_CLOCKS / 228); // 8253:OUT#1 -> 8253:CLK#2 pit->set_context_ch1(pit, SIG_I8253_CLOCK_2, 1); // 8253:OUT#2 (N)AND 8255:PC2 -> Z80:INT pit->set_context_ch2(and_int, SIG_AND_BIT_0, 1); pio->set_context_port_c(and_int, SIG_AND_BIT_1, 4, 0); and_int->set_context_out(cpu, SIG_CPU_IRQ, 1); and_int->set_mask(SIG_AND_BIT_0 | SIG_AND_BIT_1); #if defined(_MZ1500) // 8253:OUT#2 -> Z80PIO:PA5 pit->set_context_ch2(pio_int, SIG_Z80PIO_PORT_A, 0x20); #endif // 8255:PA0-3 -> KEYBOARD:STROBE pio->set_context_port_a(keyboard, SIG_KEYBOARD_COLUMN, 0x0f, 0); #if defined(_MZ800) // 8255:PA4 -> JOYSTICK #1 // 8255:PA5 -> JOYSTICK #2 #endif // 8255:PA7 -> 556 RESET // 8255:PB0-7 <- KEYBOARD:DATA keyboard->set_context_pio(pio); // 8255:PC0 -> AND -> SPEAKER // 8255:PC1 -> DATA RECORDER:WRITE DATA pio->set_context_port_c(drec, SIG_DATAREC_OUT, 0x02, 0); // 8255:PC2 -> (N)AND -> Z80:INT // 8255:PC3 -> DATA RECORDER:MOTOR ON/OFF pio->set_context_port_c(drec, SIG_DATAREC_TRIG, 0x08, 0); // 8255:PC4 <- DATA RECORDER:MOTOR REMOTE drec->set_context_remote(pio, SIG_I8255_PORT_C, 0x10); // 8255:PC5 <- DATA RECORDER:READ DATA drec->set_context_out(pio, SIG_I8255_PORT_C, 0x20); // 8255:PC6 <- MEMORY:556 OUT (1.5KHz) // 8255:PC7 <- MEMORY:VBLANK #if defined(_MZ800) || defined(_MZ1500) // Z80PIO:PA0 <- PRINTER:RDA // Z80PIO:PA1 <- PRINTER:STA // Z80PIO:PA2 <- GND // Z80PIO:PA3 <- GND #if defined(_MZ800) // Z80PIO:PA4 <- NOT <- 8253:OUT#0 // Z80PIO:PA5 <- HBLANK memory->set_context_pio_int(pio_int); #elif defined(_MZ1500) // Z80PIO:PA4 <- 8253:OUT#0 // Z80PIO:PA5 <- 8253:OUT#2 #endif // Z80PIO:PA6 -> PRINTER:IRT // Z80PIO:PA7 -> PRINTER:RDP #endif #if defined(_MZ800) || defined(_MZ1500) // Z80SIO:RTSA -> QD:WRGA sio_qd->set_context_rts0(qd, QUICKDISK_SIO_RTSA, 1); // Z80SIO:DTRB -> QD:MTON sio_qd->set_context_dtr1(qd, QUICKDISK_SIO_DTRB, 1); // Z80SIO:SENDA -> QD:RECV sio_qd->set_context_sync0(qd, QUICKDISK_SIO_SYNC, 1); sio_qd->set_context_rxdone0(qd, QUICKDISK_SIO_RXDONE, 1); sio_qd->set_context_send0(qd, QUICKDISK_SIO_DATA); sio_qd->set_context_break0(qd, QUICKDISK_SIO_BREAK, 1); // Z80SIO:CTSA <- QD:PROTECT // Z80SIO:DCDA <- QD:INSERT // Z80SIO:DCDB <- QD:HOE qd->set_context_sio(sio_qd); // floppy drives floppy->set_context_fdc(fdc); #endif // cpu bus cpu->set_context_mem(memory); cpu->set_context_io(io); #if defined(_MZ800) || defined(_MZ1500) cpu->set_context_intr(pio_int); // z80 family daisy chain // 0=8253:OUT2 pio_int->set_context_intr(cpu, 1); pio_int->set_context_child(sio_rs); sio_rs->set_context_intr(cpu, 2); sio_rs->set_context_child(sio_qd); sio_qd->set_context_intr(cpu, 3); #else cpu->set_context_intr(dummy); #endif // emm io->set_iomap_range_rw(0x00, 0x03, emm); // ramfile io->set_iomap_range_rw(0xea, 0xeb, ramfile); // cmos // io->set_iomap_range_rw(0xf8, 0xfa, cmos); #if defined(_MZ800) // 8255/8253 io->set_iomap_range_rw(0xd0, 0xd3, pio); io->set_iomap_range_rw(0xd4, 0xd7, pit); #endif #if defined(_MZ800) || defined(_MZ1500) // floppy drives io->set_iomap_range_rw(0xd8, 0xdb, fdc); io->set_iomap_range_w(0xdc, 0xdd, floppy); #endif // memory mapper #if defined(_MZ800) || defined(_MZ1500) #if defined(_MZ800) io->set_iomap_range_r(0xe0, 0xe1, memory); #endif io->set_iomap_range_w(0xe0, 0xe6, memory); #else io->set_iomap_range_w(0xe0, 0xe4, memory); #endif #if defined(_MZ800) // crtc io->set_iomap_range_w(0xcc, 0xcf, memory); io->set_iomap_single_r(0xce, memory); // palette io->set_iomap_single_w(0xf0, memory); #elif defined(_MZ1500) // palette io->set_iomap_range_w(0xf0, 0xf1, memory); #endif #if defined(_MZ800) // joystick // io->set_iomap_range_r(0xf0, 0xf1, joystick); #endif // psg #if defined(_MZ800) io->set_iomap_single_w(0xf2, psg); #elif defined(_MZ1500) io->set_iomap_single_w(0xe9, psg); io->set_iomap_single_w(0xf2, psg_l); io->set_iomap_single_w(0xf3, psg_r); #endif #if defined(_MZ800) || defined(_MZ1500) // z80pio/sio // z80pio and z80sio*2 static int z80_sio_addr[4] = {0, 2, 1, 3}; static int z80_pio_addr[4] = {1, 3, 0, 2}; for(int i = 0; i < 4; i++) { io->set_iomap_alias_rw(0xb0 + i, sio_rs, z80_sio_addr[i]); io->set_iomap_alias_rw(0xf4 + i, sio_qd, z80_sio_addr[i]); io->set_iomap_alias_rw(0xfc + i, pio_int, z80_pio_addr[i]); } #else // printer io->set_iovalue_single_r(0xfe, 0xc0); #endif // initialize all devices for(DEVICE* device = first_device; device; device = device->next_device) { device->initialize(); } }
VM::VM(EMU* parent_emu) : emu(parent_emu) { // check configs #if defined(_PC98DO) || defined(_PC98DOPLUS) boot_mode = config.boot_mode; #endif int cpu_clocks = CPU_CLOCKS; #if defined(PIT_CLOCK_8MHZ) pit_clock_8mhz = true; #else pit_clock_8mhz = false; #endif #if defined(_PC9801E) if(config.cpu_type != 0) { // 8MHz -> 5MHz cpu_clocks = 4992030; pit_clock_8mhz = false; } #elif defined(_PC9801VM) || defined(_PC98DO) if(config.cpu_type != 0) { // 10MHz -> 8MHz cpu_clocks = 7987248; pit_clock_8mhz = true; } #endif int pit_clocks = pit_clock_8mhz ? 1996812 : 2457600; sound_device_type = config.sound_device_type; // create devices first_device = last_device = NULL; dummy = new DEVICE(this, emu); // must be 1st device event = new EVENT(this, emu); // must be 2nd device #if defined(SUPPORT_OLD_BUZZER) beep = new BEEP(this, emu); #else beep = new PCM1BIT(this, emu); #endif dma = new I8237(this, emu); #if defined(SUPPORT_CMT_IF) sio_cmt = new I8251(this, emu); // for cmt #endif sio_rs = new I8251(this, emu); // for rs232c sio_kbd = new I8251(this, emu); // for keyboard pit = new I8253(this, emu); #if defined(SUPPORT_320KB_FDD_IF) pio_fdd = new I8255(this, emu); // for 320kb fdd i/f #endif pio_mouse = new I8255(this, emu); // for mouse pio_sys = new I8255(this, emu); // for system port pio_prn = new I8255(this, emu); // for printer pic = new I8259(this, emu); cpu = new I286(this, emu); io = new IO(this, emu); dmareg1 = new LS244(this, emu); dmareg2 = new LS244(this, emu); dmareg3 = new LS244(this, emu); dmareg0 = new LS244(this, emu); rtcreg = new LS244(this, emu); memory = new MEMORY(this, emu); not_busy = new NOT(this, emu); #if defined(HAS_I86) || defined(HAS_V30) not_prn = new NOT(this, emu); #endif rtc = new UPD1990A(this, emu); #if defined(SUPPORT_2HD_FDD_IF) fdc_2hd = new UPD765A(this, emu); #endif #if defined(SUPPORT_2DD_FDD_IF) fdc_2dd = new UPD765A(this, emu); #endif #if defined(SUPPORT_2HD_2DD_FDD_IF) fdc = new UPD765A(this, emu); #endif gdc_chr = new UPD7220(this, emu); gdc_gfx = new UPD7220(this, emu); if(sound_device_type == 0 || sound_device_type == 1) { opn = new YM2203(this, emu); #ifdef SUPPORT_PC98_OPNA opn->is_ym2608 = true; #endif fmsound = new FMSOUND(this, emu); joystick = new JOYSTICK(this, emu); } else if(sound_device_type == 2 || sound_device_type == 3) { tms3631 = new TMS3631(this, emu); pit_14 = new I8253(this, emu); pio_14 = new I8255(this, emu); maskreg_14 = new LS244(this, emu); } if(config.printer_device_type == 0) { printer = new PRNFILE(this, emu); // } else if(config.printer_device_type == 1) { // printer = new PCPR201(this, emu); } else { printer = dummy; } #if defined(SUPPORT_CMT_IF) cmt = new CMT(this, emu); #endif display = new DISPLAY(this, emu); floppy = new FLOPPY(this, emu); keyboard = new KEYBOARD(this, emu); mouse = new MOUSE(this, emu); #if defined(SUPPORT_320KB_FDD_IF) // 320kb fdd drives pio_sub = new I8255(this, emu); pc80s31k = new PC80S31K(this, emu); fdc_sub = new UPD765A(this, emu); cpu_sub = new Z80(this, emu); #endif /* IRQ 0 PIT 1 KEYBOARD 2 CRTV 3 (INT0) 4 RS-232C 5 (INT1) 6 (INT2) 7 SLAVE PIC 8 PRINTER 9 (INT3) 10 (INT41) FDC (640KB I/F) 11 (INT42) FDC (1MB I/F) 12 (INT5) PC-9801-26(K) or PC-9801-14 13 (INT6) MOUSE 14 15 (RESERVED) */ // set contexts event->set_context_cpu(cpu, cpu_clocks); #if defined(SUPPORT_320KB_FDD_IF) event->set_context_cpu(cpu_sub, 4000000); #endif event->set_context_sound(beep); if(sound_device_type == 0 || sound_device_type == 1) { event->set_context_sound(opn); } else if(sound_device_type == 2 || sound_device_type == 3) { event->set_context_sound(tms3631); } dma->set_context_memory(memory); // dma ch.0: sasi // dma ch.1: memory refresh #if defined(SUPPORT_2HD_FDD_IF) dma->set_context_ch2(fdc_2hd); #endif #if defined(SUPPORT_2DD_FDD_IF) dma->set_context_ch3(fdc_2dd); #endif #if defined(SUPPORT_2HD_2DD_FDD_IF) dma->set_context_ch2(fdc); dma->set_context_ch3(fdc); #endif // sio_rs->set_context_rxrdy(pic, SIG_I8259_CHIP0 | SIG_I8259_IR4, 1); sio_kbd->set_context_rxrdy(pic, SIG_I8259_CHIP0 | SIG_I8259_IR1, 1); pit->set_context_ch0(pic, SIG_I8259_CHIP0 | SIG_I8259_IR0, 1); #if defined(SUPPORT_OLD_BUZZER) // pit ch.1: memory refresh #else // pit ch.1: buzzer pit->set_context_ch1(beep, SIG_PCM1BIT_SIGNAL, 1); #endif // pit ch.2: rs-232c pit->set_constant_clock(0, pit_clocks); pit->set_constant_clock(1, pit_clocks); pit->set_constant_clock(2, pit_clocks); pio_mouse->set_context_port_c(mouse, SIG_MOUSE_PORT_C, 0xf0, 0); // sysport port.c bit6: printer strobe #if defined(SUPPORT_OLD_BUZZER) pio_sys->set_context_port_c(beep, SIG_BEEP_MUTE, 8, 0); #else pio_sys->set_context_port_c(beep, SIG_PCM1BIT_MUTE, 8, 0); #endif // sysport port.c bit2: enable txrdy interrupt // sysport port.c bit1: enable txempty interrupt // sysport port.c bit0: enable rxrdy interrupt pio_prn->set_context_port_a(printer, SIG_PRINTER_DATA, 0xff, 0); pio_prn->set_context_port_c(printer, SIG_PRINTER_STROBE, 0x80, 0); if(config.printer_device_type == 0) { PRNFILE *prnfile = (PRNFILE *)printer; prnfile->set_context_busy(not_busy, SIG_NOT_INPUT, 1); // } else if(config.printer_device_type == 1) { // PRNFILE *pcpr201 = (PCPR201 *)printer; // pcpr201->set_context_busy(not_busy, SIG_NOT_INPUT, 1); } not_busy->set_context_out(pio_prn, SIG_I8255_PORT_B, 4); #if defined(HAS_I86) || defined(HAS_V30) pio_prn->set_context_port_c(not_prn, SIG_NOT_INPUT, 8, 0); not_prn->set_context_out(pic, SIG_I8259_CHIP1 | SIG_I8259_IR0, 1); #endif dmareg1->set_context_output(dma, SIG_I8237_BANK1, 0x0f, 0); dmareg2->set_context_output(dma, SIG_I8237_BANK2, 0x0f, 0); dmareg3->set_context_output(dma, SIG_I8237_BANK3, 0x0f, 0); dmareg0->set_context_output(dma, SIG_I8237_BANK0, 0x0f, 0); rtcreg->set_context_output(rtc, SIG_UPD1990A_CMD, 0x07, 0); rtcreg->set_context_output(rtc, SIG_UPD1990A_DIN, 0x20, 0); rtcreg->set_context_output(rtc, SIG_UPD1990A_STB, 0x08, 0); rtcreg->set_context_output(rtc, SIG_UPD1990A_CLK, 0x10, 0); pic->set_context_cpu(cpu); rtc->set_context_dout(pio_sys, SIG_I8255_PORT_B, 1); if(sound_device_type == 0 || sound_device_type == 1) { opn->set_context_irq(pic, SIG_I8259_CHIP1 | SIG_I8259_IR4, 1); opn->set_context_port_b(joystick, SIG_JOYSTICK_SELECT, 0xc0, 0); fmsound->set_context_opn(opn); joystick->set_context_opn(opn); } else if(sound_device_type == 2 || sound_device_type == 3) { pio_14->set_context_port_a(tms3631, SIG_TMS3631_ENVELOP1, 0xff, 0); pio_14->set_context_port_b(tms3631, SIG_TMS3631_ENVELOP2, 0xff, 0); pio_14->set_context_port_c(tms3631, SIG_TMS3631_DATAREG, 0xff, 0); maskreg_14->set_context_output(tms3631, SIG_TMS3631_MASKREG, 0xff, 0); pit_14->set_constant_clock(2, 1996800 / 8); pit_14->set_context_ch2(pic, SIG_I8259_CHIP1 | SIG_I8259_IR4, 1); } display->set_context_pic(pic); display->set_context_gdc_chr(gdc_chr, gdc_chr->get_ra()); display->set_context_gdc_gfx(gdc_gfx, gdc_gfx->get_ra(), gdc_gfx->get_cs()); keyboard->set_context_sio(sio_kbd); mouse->set_context_pic(pic); mouse->set_context_pio(pio_mouse); #if defined(SUPPORT_2HD_FDD_IF) fdc_2hd->set_context_irq(floppy, SIG_FLOPPY_2HD_IRQ, 1); fdc_2hd->set_context_drq(floppy, SIG_FLOPPY_2HD_DRQ, 1); fdc_2hd->raise_irq_when_media_changed = true; floppy->set_context_fdc_2hd(fdc_2hd); #endif #if defined(SUPPORT_2DD_FDD_IF) fdc_2dd->set_context_irq(floppy, SIG_FLOPPY_2DD_IRQ, 1); fdc_2dd->set_context_drq(floppy, SIG_FLOPPY_2DD_DRQ, 1); fdc_2dd->raise_irq_when_media_changed = true; floppy->set_context_fdc_2dd(fdc_2dd); #endif #if defined(SUPPORT_2HD_2DD_FDD_IF) fdc->set_context_irq(floppy, SIG_FLOPPY_IRQ, 1); fdc->set_context_drq(floppy, SIG_FLOPPY_DRQ, 1); fdc->raise_irq_when_media_changed = true; floppy->set_context_fdc(fdc); #endif floppy->set_context_dma(dma); floppy->set_context_pic(pic); #if defined(SUPPORT_CMT_IF) sio_cmt->set_context_out(cmt, SIG_CMT_OUT); // sio_cmt->set_context_txrdy(cmt, SIG_CMT_TXRDY, 1); // sio_cmt->set_context_rxrdy(cmt, SIG_CMT_RXRDY, 1); // sio_cmt->set_context_txe(cmt, SIG_CMT_TXEMP, 1); cmt->set_context_sio(sio_cmt); #endif // cpu bus cpu->set_context_mem(memory); cpu->set_context_io(io); cpu->set_context_intr(pic); #ifdef SINGLE_MODE_DMA cpu->set_context_dma(dma); #endif #ifdef USE_DEBUGGER cpu->set_context_debugger(new DEBUGGER(this, emu)); #endif #if defined(SUPPORT_320KB_FDD_IF) // 320kb fdd drives pc80s31k->set_context_cpu(cpu_sub); pc80s31k->set_context_fdc(fdc_sub); pc80s31k->set_context_pio(pio_sub); pio_fdd->set_context_port_a(pio_sub, SIG_I8255_PORT_A, 0xff, 0); pio_fdd->set_context_port_b(pio_sub, SIG_I8255_PORT_A, 0xff, 0); pio_fdd->set_context_port_c(pio_sub, SIG_I8255_PORT_C, 0x0f, 4); pio_fdd->set_context_port_c(pio_sub, SIG_I8255_PORT_C, 0xf0, -4); pio_fdd->clear_ports_by_cmdreg = true; pio_sub->set_context_port_a(pio_fdd, SIG_I8255_PORT_B, 0xff, 0); pio_sub->set_context_port_b(pio_fdd, SIG_I8255_PORT_A, 0xff, 0); pio_sub->set_context_port_c(pio_fdd, SIG_I8255_PORT_C, 0x0f, 4); pio_sub->set_context_port_c(pio_fdd, SIG_I8255_PORT_C, 0xf0, -4); pio_sub->clear_ports_by_cmdreg = true; fdc_sub->set_context_irq(cpu_sub, SIG_CPU_IRQ, 1); cpu_sub->set_context_mem(pc80s31k); cpu_sub->set_context_io(pc80s31k); cpu_sub->set_context_intr(pc80s31k); #ifdef USE_DEBUGGER cpu_sub->set_context_debugger(new DEBUGGER(this, emu)); #endif #endif // memory bus memset(ram, 0, sizeof(ram)); memset(ipl, 0xff, sizeof(ipl)); memset(sound_bios, 0xff, sizeof(sound_bios)); #if defined(_PC9801) || defined(_PC9801E) memset(fd_bios_2hd, 0xff, sizeof(fd_bios_2hd)); memset(fd_bios_2dd, 0xff, sizeof(fd_bios_2dd)); #endif memory->read_bios(_T("IPL.ROM"), ipl, sizeof(ipl)); if(sound_device_type == 0) { display->sound_bios_ok = (memory->read_bios(_T("SOUND.ROM"), sound_bios, sizeof(sound_bios)) != 0); } else if(sound_device_type == 2) { display->sound_bios_ok = (memory->read_bios(_T("MUSIC.ROM"), sound_bios, sizeof(sound_bios)) != 0); } else { display->sound_bios_ok = false; } #if defined(_PC9801) || defined(_PC9801E) memory->read_bios(_T("2HDIF.ROM"), fd_bios_2hd, sizeof(fd_bios_2hd)); memory->read_bios(_T("2DDIF.ROM"), fd_bios_2dd, sizeof(fd_bios_2dd)); #endif memory->set_memory_rw(0x00000, 0x9ffff, ram); // A0000h - A1FFFh: TEXT VRAM // A2000h - A3FFFh: ATTRIBUTE memory->set_memory_mapped_io_rw(0xa0000, 0xa3fff, display); // A8000h - BFFFFh: VRAM memory->set_memory_mapped_io_rw(0xa8000, 0xbffff, display); if(sound_device_type == 0 || sound_device_type == 2) { memory->set_memory_r(0xcc000, 0xcffff, sound_bios); } #if defined(_PC9801) || defined(_PC9801E) memory->set_memory_r(0xd6000, 0xd6fff, fd_bios_2dd); memory->set_memory_r(0xd7000, 0xd7fff, fd_bios_2hd); #endif #if defined(SUPPORT_16_COLORS) // E0000h - E7FFFh: VRAM memory->set_memory_mapped_io_rw(0xe0000, 0xe7fff, display); #endif memory->set_memory_r(0xe8000, 0xfffff, ipl); // i/o bus io->set_iomap_alias_rw(0x00, pic, 0); io->set_iomap_alias_rw(0x02, pic, 1); io->set_iomap_alias_rw(0x08, pic, 2); io->set_iomap_alias_rw(0x0a, pic, 3); io->set_iomap_alias_rw(0x01, dma, 0x00); io->set_iomap_alias_rw(0x03, dma, 0x01); io->set_iomap_alias_rw(0x05, dma, 0x02); io->set_iomap_alias_rw(0x07, dma, 0x03); io->set_iomap_alias_rw(0x09, dma, 0x04); io->set_iomap_alias_rw(0x0b, dma, 0x05); io->set_iomap_alias_rw(0x0d, dma, 0x06); io->set_iomap_alias_rw(0x0f, dma, 0x07); io->set_iomap_alias_rw(0x11, dma, 0x08); io->set_iomap_alias_w(0x13, dma, 0x09); io->set_iomap_alias_w(0x15, dma, 0x0a); io->set_iomap_alias_w(0x17, dma, 0x0b); io->set_iomap_alias_w(0x19, dma, 0x0c); io->set_iomap_alias_rw(0x1b, dma, 0x0d); io->set_iomap_alias_w(0x1d, dma, 0x0e); io->set_iomap_alias_w(0x1f, dma, 0x0f); io->set_iomap_single_w(0x21, dmareg1); io->set_iomap_single_w(0x23, dmareg2); io->set_iomap_single_w(0x25, dmareg3); io->set_iomap_single_w(0x27, dmareg0); io->set_iomap_single_w(0x20, rtcreg); io->set_iomap_alias_rw(0x30, sio_rs, 0); io->set_iomap_alias_rw(0x32, sio_rs, 1); io->set_iomap_alias_rw(0x31, pio_sys, 0); io->set_iomap_alias_rw(0x33, pio_sys, 1); io->set_iomap_alias_rw(0x35, pio_sys, 2); io->set_iomap_alias_w(0x37, pio_sys, 3); io->set_iomap_alias_rw(0x40, pio_prn, 0); io->set_iomap_alias_rw(0x42, pio_prn, 1); io->set_iomap_alias_rw(0x44, pio_prn, 2); io->set_iomap_alias_w(0x46, pio_prn, 3); io->set_iomap_alias_rw(0x41, sio_kbd, 0); io->set_iomap_alias_rw(0x43, sio_kbd, 1); // 50h, 52h: NMI Flip Flop #if defined(SUPPORT_320KB_FDD_IF) io->set_iomap_alias_rw(0x51, pio_fdd, 0); io->set_iomap_alias_rw(0x53, pio_fdd, 1); io->set_iomap_alias_rw(0x55, pio_fdd, 2); io->set_iomap_alias_w(0x57, pio_fdd, 3); #endif io->set_iomap_alias_rw(0x60, gdc_chr, 0); io->set_iomap_alias_rw(0x62, gdc_chr, 1); io->set_iomap_single_w(0x64, display); io->set_iomap_single_w(0x68, display); #if defined(SUPPORT_16_COLORS) io->set_iomap_single_w(0x6a, display); #endif io->set_iomap_single_w(0x6c, display); io->set_iomap_single_w(0x6e, display); io->set_iomap_single_w(0x70, display); io->set_iomap_single_w(0x72, display); io->set_iomap_single_w(0x74, display); io->set_iomap_single_w(0x76, display); io->set_iomap_single_w(0x78, display); io->set_iomap_single_w(0x7a, display); #if defined(SUPPORT_16_COLORS) io->set_iomap_single_w(0x7c, display); io->set_iomap_single_w(0x7e, display); #endif io->set_iomap_alias_rw(0x71, pit, 0); io->set_iomap_alias_rw(0x73, pit, 1); io->set_iomap_alias_rw(0x75, pit, 2); io->set_iomap_alias_w(0x77, pit, 3); // 80h, 82h: SASI io->set_iomap_single_rw(0x90, floppy); io->set_iomap_single_rw(0x92, floppy); io->set_iomap_single_rw(0x94, floppy); #if defined(SUPPORT_CMT_IF) io->set_iomap_alias_rw(0x91, sio_cmt, 0); io->set_iomap_alias_rw(0x93, sio_cmt, 1); io->set_iomap_single_w(0x95, cmt); io->set_iomap_single_w(0x97, cmt); #endif io->set_iomap_alias_rw(0xa0, gdc_gfx, 0); io->set_iomap_alias_rw(0xa2, gdc_gfx, 1); #if defined(SUPPORT_2ND_VRAM) io->set_iomap_single_w(0xa4, display); io->set_iomap_single_w(0xa6, display); #endif io->set_iomap_single_rw(0xa8, display); io->set_iomap_single_rw(0xaa, display); io->set_iomap_single_rw(0xac, display); io->set_iomap_single_rw(0xae, display); io->set_iomap_single_w(0xa1, display); io->set_iomap_single_w(0xa3, display); io->set_iomap_single_w(0xa5, display); io->set_iomap_single_rw(0xa9, display); #if defined(SUPPORT_2HD_2DD_FDD_IF) io->set_iomap_single_rw(0xbe, floppy); #endif io->set_iomap_single_rw(0xc8, floppy); io->set_iomap_single_rw(0xca, floppy); io->set_iomap_single_rw(0xcc, floppy); if(sound_device_type == 0 || sound_device_type == 1) { io->set_iomap_single_rw(0x188, fmsound); io->set_iomap_single_rw(0x18a, fmsound); #ifdef SUPPORT_PC98_OPNA io->set_iomap_single_rw(0x18c, fmsound); io->set_iomap_single_rw(0x18e, fmsound); io->set_iomap_single_rw(0xa460, fmsound); #endif } else if(sound_device_type == 2 || sound_device_type == 3) { io->set_iomap_alias_rw(0x88, pio_14, 0); io->set_iomap_alias_rw(0x8a, pio_14, 1); io->set_iomap_alias_rw(0x8c, pio_14, 2); io->set_iomap_alias_w(0x8e, pio_14, 3); io->set_iovalue_single_r(0x8e, 0x08); io->set_iomap_single_w(0x188, maskreg_14); io->set_iomap_single_w(0x18a, maskreg_14); io->set_iomap_alias_rw(0x18c, pit_14, 2); io->set_iomap_alias_w(0x18e, pit_14, 3); // io->set_iovalue_single_r(0x18e, 0x00); // INT0 // io->set_iovalue_single_r(0x18e, 0x40); // INT41 io->set_iovalue_single_r(0x18e, 0x80); // INT5 // io->set_iovalue_single_r(0x18e, 0xc0); // INT6 } #if !defined(SUPPORT_OLD_BUZZER) io->set_iomap_alias_rw(0x3fd9, pit, 0); io->set_iomap_alias_rw(0x3fdb, pit, 1); io->set_iomap_alias_rw(0x3fdd, pit, 2); io->set_iomap_alias_w(0x3fdf, pit, 3); #endif io->set_iomap_alias_rw(0x7fd9, pio_mouse, 0); io->set_iomap_alias_rw(0x7fdb, pio_mouse, 1); io->set_iomap_alias_rw(0x7fdd, pio_mouse, 2); io->set_iomap_alias_w(0x7fdf, pio_mouse, 3); #if !(defined(_PC9801) || defined(_PC9801E)) io->set_iomap_single_w(0xbfdb, mouse); #endif #if defined(_PC98DO) || defined(_PC98DOPLUS) pc88event = new EVENT(this, emu); pc88event->set_frames_per_sec(60); pc88event->set_lines_per_frame(260); pc88 = new PC88(this, emu); pc88->set_context_event_manager(pc88event); pc88sio = new I8251(this, emu); pc88sio->set_context_event_manager(pc88event); pc88pio = new I8255(this, emu); pc88pio->set_context_event_manager(pc88event); pc88pcm = new PCM1BIT(this, emu); pc88pcm->set_context_event_manager(pc88event); pc88rtc = new UPD1990A(this, emu); pc88rtc->set_context_event_manager(pc88event); pc88opn = new YM2203(this, emu); pc88opn->set_context_event_manager(pc88event); #ifdef SUPPORT_PC88_OPNA pc88opn->is_ym2608 = true; #endif pc88cpu = new Z80(this, emu); pc88cpu->set_context_event_manager(pc88event); if(config.printer_device_type == 0) { pc88prn = new PRNFILE(this, emu); pc88prn->set_context_event_manager(pc88event); // } else if(config.printer_device_type == 1) { // pc88prn = new PCPR201(this, emu); // pc88prn->set_context_event_manager(pc88event); } else { pc88prn = dummy; } pc88sub = new PC80S31K(this, emu); pc88sub->set_context_event_manager(pc88event); pc88pio_sub = new I8255(this, emu); pc88pio_sub->set_context_event_manager(pc88event); pc88fdc_sub = new UPD765A(this, emu); pc88fdc_sub->set_context_event_manager(pc88event); pc88cpu_sub = new Z80(this, emu); pc88cpu_sub->set_context_event_manager(pc88event); pc88event->set_context_cpu(pc88cpu, (config.cpu_type != 0) ? 3993624 : 7987248); pc88event->set_context_cpu(pc88cpu_sub, 3993624); pc88event->set_context_sound(pc88opn); pc88event->set_context_sound(pc88pcm); pc88->set_context_cpu(pc88cpu); pc88->set_context_opn(pc88opn); pc88->set_context_pcm(pc88pcm); pc88->set_context_pio(pc88pio); pc88->set_context_prn(pc88prn); pc88->set_context_rtc(pc88rtc); pc88->set_context_sio(pc88sio); pc88cpu->set_context_mem(pc88); pc88cpu->set_context_io(pc88); pc88cpu->set_context_intr(pc88); #ifdef USE_DEBUGGER pc88cpu->set_context_debugger(new DEBUGGER(this, emu)); #endif pc88opn->set_context_irq(pc88, SIG_PC88_SOUND_IRQ, 1); pc88sio->set_context_rxrdy(pc88, SIG_PC88_USART_IRQ, 1); pc88sio->set_context_out(pc88, SIG_PC88_USART_OUT); pc88sub->set_context_cpu(pc88cpu_sub); pc88sub->set_context_fdc(pc88fdc_sub); pc88sub->set_context_pio(pc88pio_sub); pc88pio->set_context_port_a(pc88pio_sub, SIG_I8255_PORT_B, 0xff, 0); pc88pio->set_context_port_b(pc88pio_sub, SIG_I8255_PORT_A, 0xff, 0); pc88pio->set_context_port_c(pc88pio_sub, SIG_I8255_PORT_C, 0x0f, 4); pc88pio->set_context_port_c(pc88pio_sub, SIG_I8255_PORT_C, 0xf0, -4); pc88pio->clear_ports_by_cmdreg = true; pc88pio_sub->set_context_port_a(pc88pio, SIG_I8255_PORT_B, 0xff, 0); pc88pio_sub->set_context_port_b(pc88pio, SIG_I8255_PORT_A, 0xff, 0); pc88pio_sub->set_context_port_c(pc88pio, SIG_I8255_PORT_C, 0x0f, 4); pc88pio_sub->set_context_port_c(pc88pio, SIG_I8255_PORT_C, 0xf0, -4); pc88pio_sub->clear_ports_by_cmdreg = true; pc88fdc_sub->set_context_irq(pc88cpu_sub, SIG_CPU_IRQ, 1); pc88cpu_sub->set_context_mem(pc88sub); pc88cpu_sub->set_context_io(pc88sub); pc88cpu_sub->set_context_intr(pc88sub); #ifdef USE_DEBUGGER pc88cpu_sub->set_context_debugger(new DEBUGGER(this, emu)); #endif #endif // initialize all devices for(DEVICE* device = first_device; device; device = device->next_device) { device->initialize(); } #if defined(_PC9801) || defined(_PC9801E) fdc_2hd->get_disk_handler(0)->drive_num = 0; fdc_2hd->get_disk_handler(1)->drive_num = 1; fdc_2dd->get_disk_handler(0)->drive_num = 2; fdc_2dd->get_disk_handler(1)->drive_num = 3; fdc_sub->get_disk_handler(0)->drive_num = 4; fdc_sub->get_disk_handler(1)->drive_num = 5; #elif defined(_PC9801VF) || defined(_PC9801U) fdc_2dd->get_disk_handler(0)->drive_num = 0; fdc_2dd->get_disk_handler(1)->drive_num = 1; #elif defined(_PC98DO) || defined(_PC98DOPLUS) fdc->get_disk_handler(0)->drive_num = 0; fdc->get_disk_handler(1)->drive_num = 1; pc88fdc_sub->get_disk_handler(0)->drive_num = 2; pc88fdc_sub->get_disk_handler(1)->drive_num = 3; #else fdc->get_disk_handler(0)->drive_num = 0; fdc->get_disk_handler(1)->drive_num = 1; #endif }