src/mess/drivers/pc88va.c
| r9476 | r9477 | |
| 16 | 16 | #include "cpu/nec/nec.h" |
| 17 | 17 | //#include "cpu/z80/z80.h" |
| 18 | 18 | #include "machine/i8255a.h" |
| 19 | #include "machine/pic8259.h" |
| 19 | 20 | |
| 20 | 21 | static UINT16 *palram; |
| 21 | 22 | static UINT16 bank_reg; |
| r9476 | r9477 | |
| 648 | 649 | // AM_RANGE(0x0158, 0x0159) Interruption Mode Modification |
| 649 | 650 | // AM_RANGE(0x015c, 0x015f) NMI mask port (strobe port) |
| 650 | 651 | // AM_RANGE(0x0160, 0x016f) DMA Controller |
| 651 | | // AM_RANGE(0x0184, 0x018b) IRQ Controller |
| 652 | AM_RANGE(0x0184, 0x0187) AM_DEVREADWRITE8("pic8259_slave", pic8259_r, pic8259_w, 0x00ff) |
| 653 | AM_RANGE(0x0188, 0x018b) AM_DEVREADWRITE8("pic8259_master", pic8259_r, pic8259_w, 0x00ff) // ICU, also controls 8214 emulation |
| 652 | 654 | // AM_RANGE(0x0190, 0x0191) System Port 5 |
| 653 | 655 | // AM_RANGE(0x0196, 0x0197) Keyboard sub CPU command port |
| 654 | 656 | AM_RANGE(0x0198, 0x0199) AM_WRITE(backupram_wp_1_w) //Backup RAM write inhibit |
| r9476 | r9477 | |
| 870 | 872 | // PORT_DIPSETTING( 0x03, "???" ) |
| 871 | 873 | INPUT_PORTS_END |
| 872 | 874 | |
| 873 | | static MACHINE_RESET( pc88va ) |
| 874 | | { |
| 875 | | UINT8 *ROM00 = memory_region(machine, "rom00"); |
| 876 | | UINT8 *ROM10 = memory_region(machine, "rom10"); |
| 877 | | |
| 878 | | memory_set_bankptr(machine, "rom10_bank", &ROM10[0x00000]); |
| 879 | | memory_set_bankptr(machine, "rom00_bank", &ROM00[0x00000]); |
| 880 | | |
| 881 | | bank_reg = 0x4100; |
| 882 | | backupram_wp = 1; |
| 883 | | |
| 884 | | /* default palette */ |
| 885 | | { |
| 886 | | UINT8 i; |
| 887 | | for(i=0;i<32;i++) |
| 888 | | palette_set_color_rgb(machine,i,pal1bit((i & 2) >> 1),pal1bit((i & 4) >> 2),pal1bit(i & 1)); |
| 889 | | } |
| 890 | | } |
| 891 | | |
| 892 | 875 | static const gfx_layout pc88va_chars_8x8 = |
| 893 | 876 | { |
| 894 | 877 | 8,8, |
| r9476 | r9477 | |
| 1014 | 997 | DEVCB_HANDLER(r232_ctrl_portc_w) /* Port C write */ |
| 1015 | 998 | }; |
| 1016 | 999 | |
| 1000 | static IRQ_CALLBACK(pc88va_irq_callback) |
| 1001 | { |
| 1002 | int r = 0; |
| 1003 | r = pic8259_acknowledge( device->machine->device( "pic8259_slave" )); |
| 1004 | if (r==0) |
| 1005 | { |
| 1006 | r = pic8259_acknowledge( device->machine->device( "pic8259_master" ) ); |
| 1007 | } |
| 1008 | return r; |
| 1009 | } |
| 1010 | |
| 1011 | static WRITE_LINE_DEVICE_HANDLER( pc88va_pic_irq ) |
| 1012 | { |
| 1013 | cputag_set_input_line(device->machine, "maincpu", 0, state ? HOLD_LINE : CLEAR_LINE); |
| 1014 | // logerror("PIC#1: set IRQ line to %i\n",interrupt); |
| 1015 | } |
| 1016 | |
| 1017 | static const struct pic8259_interface pc88va_pic8259_master_config = |
| 1018 | { |
| 1019 | DEVCB_LINE(pc88va_pic_irq) |
| 1020 | }; |
| 1021 | |
| 1022 | static const struct pic8259_interface pc88va_pic8259_slave_config = |
| 1023 | { |
| 1024 | DEVCB_DEVICE_LINE("pic8259_master", pic8259_ir7_w) |
| 1025 | }; |
| 1026 | |
| 1027 | static MACHINE_START( pc88va ) |
| 1028 | { |
| 1029 | cpu_set_irq_callback(machine->device("maincpu"), pc88va_irq_callback); |
| 1030 | } |
| 1031 | |
| 1032 | static MACHINE_RESET( pc88va ) |
| 1033 | { |
| 1034 | UINT8 *ROM00 = memory_region(machine, "rom00"); |
| 1035 | UINT8 *ROM10 = memory_region(machine, "rom10"); |
| 1036 | |
| 1037 | memory_set_bankptr(machine, "rom10_bank", &ROM10[0x00000]); |
| 1038 | memory_set_bankptr(machine, "rom00_bank", &ROM00[0x00000]); |
| 1039 | |
| 1040 | bank_reg = 0x4100; |
| 1041 | backupram_wp = 1; |
| 1042 | |
| 1043 | /* default palette */ |
| 1044 | { |
| 1045 | UINT8 i; |
| 1046 | for(i=0;i<32;i++) |
| 1047 | palette_set_color_rgb(machine,i,pal1bit((i & 2) >> 1),pal1bit((i & 4) >> 2),pal1bit(i & 1)); |
| 1048 | } |
| 1049 | } |
| 1050 | |
| 1051 | static INTERRUPT_GEN( pc88va_vrtc_irq ) |
| 1052 | { |
| 1053 | pic8259_ir2_w(device->machine->device("pic8259_master"), 1); |
| 1054 | } |
| 1055 | |
| 1017 | 1056 | static MACHINE_CONFIG_START( pc88va, driver_device ) |
| 1018 | 1057 | |
| 1019 | 1058 | MDRV_CPU_ADD("maincpu", V30, 8000000) /* 8 MHz */ |
| 1020 | 1059 | MDRV_CPU_PROGRAM_MAP(pc88va_map) |
| 1021 | 1060 | MDRV_CPU_IO_MAP(pc88va_io_map) |
| 1061 | MDRV_CPU_VBLANK_INT("screen",pc88va_vrtc_irq) |
| 1022 | 1062 | |
| 1023 | 1063 | #if 0 |
| 1024 | 1064 | MDRV_CPU_ADD("subcpu", Z80, 8000000) /* 8 MHz */ |
| r9476 | r9477 | |
| 1038 | 1078 | MDRV_VIDEO_START( pc88va ) |
| 1039 | 1079 | MDRV_VIDEO_UPDATE( pc88va ) |
| 1040 | 1080 | |
| 1081 | MDRV_MACHINE_START( pc88va ) |
| 1041 | 1082 | MDRV_MACHINE_RESET( pc88va ) |
| 1042 | 1083 | |
| 1043 | 1084 | MDRV_I8255A_ADD( "d8255_2", fdd_intf ) |
| 1044 | 1085 | MDRV_I8255A_ADD( "d8255_3", r232c_ctrl_intf ) |
| 1045 | 1086 | |
| 1087 | MDRV_PIC8259_ADD( "pic8259_master", pc88va_pic8259_master_config ) |
| 1088 | MDRV_PIC8259_ADD( "pic8259_slave", pc88va_pic8259_slave_config ) |
| 1046 | 1089 | |
| 1047 | 1090 | MACHINE_CONFIG_END |
| 1048 | 1091 | |