trunk/src/mess/drivers/mbee.c
| r243471 | r243472 | |
| 55 | 55 | F000-F7FF Video RAM |
| 56 | 56 | F800-FFFF PCG RAM (graphics), Colour RAM (banked) |
| 57 | 57 | |
| 58 | Early machines have 'standard' video (128 hires characters). |
| 59 | Later machines had the option of 'premium' video which |
| 60 | provides thousands of hires characters, enough to simulate |
| 61 | bit-mapped graphics. |
| 62 | |
| 58 | 63 | Commands to call up built-in roms (depends on the model): |
| 59 | 64 | NET - Jump to E000, usually the Telcom communications program. |
| 60 | 65 | This rom can be replaced with the Dreamdisk Chip-8 rom. |
| 61 | 66 | Note that Telcom 3.21 is 8k, it uses a rombank switch |
| 62 | 67 | (by reading port 0A) to swap between the two halves. |
| 68 | Most parts of NET can be called up from Basic, e.g. |
| 69 | NET CLOCK will turn on the clock, NET CLOCKD will remove |
| 70 | the resultant status bar, NET TIME hhmm to set the time, etc. |
| 71 | Further, after doing a NET command, the 80x24 mode becomes |
| 72 | available to Basic. OUT#7 to turn it on, OUT#0 for 64x16. |
| 63 | 73 | |
| 64 | 74 | EDASM - Jump to C000, usually the editor/Assembler package. |
| 65 | 75 | |
| r243471 | r243472 | |
| 100 | 110 | crashes due to a bug in z80pio emulation. |
| 101 | 111 | |
| 102 | 112 | - 256tc: Keyboard ROM U60 needs to be dumped. |
| 103 | | - 128k: PROM PAL needs to be dumped for the bankswitching. |
| 113 | - 128k: GOLD PAL needs to be dumped for the bankswitching. |
| 114 | - 64k: RED PAL needs to be dumped for the bankswitching. |
| 104 | 115 | |
| 105 | | - Teleterm: keyboard is problematic, and cursor doesn't show. |
| 116 | - Teleterm: keyboard is problematic, and cursor doesn't show. Also, the |
| 117 | schematic shows it using the old-style keyboard, however this |
| 118 | must be wrong since the computer has function keys, which are |
| 119 | only available on the new keyboard. |
| 106 | 120 | |
| 121 | - Mouse: a few programs support the use of a serial mouse which interfaced |
| 122 | directly to the Z80PIO. However there's little info to be found. |
| 107 | 123 | |
| 108 | 124 | *************************************************************************** |
| 109 | 125 | |
| r243471 | r243472 | |
| 190 | 206 | AM_RANGE(0xf800, 0xffff) AM_READWRITE(mbeeic_high_r, mbeeic_high_w) |
| 191 | 207 | ADDRESS_MAP_END |
| 192 | 208 | |
| 193 | | static ADDRESS_MAP_START(mbee64_mem, AS_PROGRAM, 8, mbee_state) |
| 194 | | AM_RANGE(0x0000, 0x0fff) AM_RAMBANK("boot") |
| 195 | | AM_RANGE(0x1000, 0x7fff) AM_RAMBANK("bankl") |
| 196 | | AM_RANGE(0x8000, 0xefff) AM_RAMBANK("bankh") |
| 197 | | AM_RANGE(0xf000, 0xf7ff) AM_READWRITE(mbee_low_r, mbee_low_w) |
| 198 | | AM_RANGE(0xf800, 0xffff) AM_READWRITE(mbeeic_high_r, mbeeic_high_w) |
| 199 | | ADDRESS_MAP_END |
| 200 | | |
| 201 | 209 | static ADDRESS_MAP_START(mbee256_mem, AS_PROGRAM, 8, mbee_state) |
| 202 | 210 | AM_RANGE(0x0000, 0x0fff) AM_READ_BANK("bankr0") AM_WRITE_BANK("bankw0") |
| 203 | 211 | AM_RANGE(0x1000, 0x1fff) AM_READ_BANK("bankr1") AM_WRITE_BANK("bankw1") |
| r243471 | r243472 | |
| 295 | 303 | AM_RANGE(0x48, 0x4f) AM_READWRITE(mbee_fdc_status_r, mbee_fdc_motor_w) |
| 296 | 304 | ADDRESS_MAP_END |
| 297 | 305 | |
| 298 | | static ADDRESS_MAP_START(mbee64_io, AS_IO, 8, mbee_state) |
| 299 | | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 300 | | ADDRESS_MAP_UNMAP_HIGH |
| 301 | | AM_RANGE(0x00, 0x03) AM_MIRROR(0x10) AM_DEVREADWRITE("z80pio", z80pio_device, read_alt, write_alt) |
| 302 | | AM_RANGE(0x08, 0x08) AM_MIRROR(0x10) AM_READWRITE(mbeeic_08_r, mbeeic_08_w) |
| 303 | | AM_RANGE(0x0b, 0x0b) AM_MIRROR(0x10) AM_READWRITE(mbee_0b_r, mbee_0b_w) |
| 304 | | AM_RANGE(0x0c, 0x0c) AM_MIRROR(0x10) AM_READWRITE(m6545_status_r, m6545_index_w) |
| 305 | | AM_RANGE(0x0d, 0x0d) AM_MIRROR(0x10) AM_READWRITE(m6545_data_r, m6545_data_w) |
| 306 | | AM_RANGE(0x44, 0x47) AM_DEVREADWRITE("fdc", wd2793_t, read, write) |
| 307 | | AM_RANGE(0x48, 0x4f) AM_READWRITE(mbee_fdc_status_r, mbee_fdc_motor_w) |
| 308 | | AM_RANGE(0x50, 0x57) AM_WRITE(mbee64_50_w) |
| 309 | | ADDRESS_MAP_END |
| 310 | | |
| 311 | 306 | static ADDRESS_MAP_START(mbee128_io, AS_IO, 8, mbee_state) |
| 312 | 307 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 313 | 308 | ADDRESS_MAP_UNMAP_HIGH |
| r243471 | r243472 | |
| 780 | 775 | MCFG_FLOPPY_DRIVE_ADD("fdc:1", mbee_floppies, "drive5b", floppy_image_device::default_floppy_formats) |
| 781 | 776 | MACHINE_CONFIG_END |
| 782 | 777 | |
| 783 | | static MACHINE_CONFIG_DERIVED( mbee64, mbee56 ) |
| 778 | static MACHINE_CONFIG_DERIVED( mbee128p, mbeeppc ) |
| 784 | 779 | MCFG_CPU_MODIFY( "maincpu" ) |
| 785 | | MCFG_CPU_PROGRAM_MAP(mbee64_mem) |
| 786 | | MCFG_CPU_IO_MAP(mbee64_io) |
| 787 | | MCFG_MACHINE_RESET_OVERRIDE(mbee_state, mbee64) |
| 788 | | MACHINE_CONFIG_END |
| 789 | | |
| 790 | | static MACHINE_CONFIG_DERIVED( mbee128, mbeeppc ) |
| 791 | | MCFG_CPU_MODIFY( "maincpu" ) |
| 792 | 780 | MCFG_CPU_PROGRAM_MAP(mbee256_mem) |
| 793 | 781 | MCFG_CPU_IO_MAP(mbee128_io) |
| 794 | 782 | MCFG_MACHINE_RESET_OVERRIDE(mbee_state, mbee128) |
| r243471 | r243472 | |
| 799 | 787 | MCFG_FLOPPY_DRIVE_ADD("fdc:1", mbee_floppies, "drive5b", floppy_image_device::default_floppy_formats) |
| 800 | 788 | MACHINE_CONFIG_END |
| 801 | 789 | |
| 802 | | static MACHINE_CONFIG_DERIVED( mbee256, mbee128 ) |
| 790 | static MACHINE_CONFIG_DERIVED( mbee128, mbee128p ) |
| 791 | MCFG_VIDEO_START_OVERRIDE(mbee_state,mbeeic) |
| 792 | MACHINE_CONFIG_END |
| 793 | |
| 794 | static MACHINE_CONFIG_DERIVED( mbee256, mbee128p ) |
| 803 | 795 | MCFG_CPU_MODIFY( "maincpu" ) |
| 804 | 796 | MCFG_CPU_PROGRAM_MAP(mbee256_mem) |
| 805 | 797 | MCFG_CPU_IO_MAP(mbee256_io) |
| r243471 | r243472 | |
| 1084 | 1076 | ROM_REGION( 0x0800, "colorram", ROMREGION_ERASE00 ) |
| 1085 | 1077 | ROM_END |
| 1086 | 1078 | |
| 1087 | | ROM_START( mbee64 ) // CIAB (Computer-In-A-Book) |
| 1088 | | ROM_REGION(0x10000,"maincpu", ROMREGION_ERASEFF) |
| 1079 | ROM_START( mbee128 ) // Standard 128k (CIAB is the same thing with half the ram) |
| 1080 | ROM_REGION(0x10000, "rams", ROMREGION_ERASEFF) |
| 1089 | 1081 | |
| 1090 | | ROM_REGION(0x7000,"bootrom", ROMREGION_ERASEFF) |
| 1082 | ROM_REGION(0x7000, "roms", ROMREGION_ERASEFF) |
| 1091 | 1083 | ROM_LOAD("bn54.bin", 0x0000, 0x2000, CRC(995c53db) SHA1(46e1a5cfd5795b8cf528bacf9dc79398ff7d64af) ) |
| 1092 | 1084 | |
| 1093 | 1085 | ROM_REGION(0x2000, "gfx", 0) |
| 1094 | 1086 | ROM_LOAD("charrom.bin", 0x1000, 0x1000, CRC(1f9fcee4) SHA1(e57ac94e03638075dde68a0a8c834a4f84ba47b0) ) |
| 1095 | 1087 | ROM_RELOAD( 0x0000, 0x1000 ) |
| 1096 | 1088 | |
| 1089 | ROM_REGION(0x4000, "pals", 0) // undumped; using prom from 256tc for now |
| 1090 | ROM_LOAD( "silver.u39", 0x0000, 0x4000, BAD_DUMP CRC(c34aab64) SHA1(781fe648488dec90185760f8e081e488b73b68bf) ) |
| 1091 | |
| 1097 | 1092 | ROM_REGION( 0x0040, "proms", 0 ) |
| 1098 | 1093 | ROM_LOAD( "82s123.ic7", 0x0000, 0x0020, CRC(61b9c16c) SHA1(0ee72377831c21339360c376f7248861d476dc20) ) |
| 1099 | 1094 | ROM_LOAD_OPTIONAL( "82s123.ic16", 0x0020, 0x0020, CRC(4e779985) SHA1(cd2579cf65032c30b3fe7d6d07b89d4633687481) ) /* video switching prom, not needed for emulation purposes */ |
| r243471 | r243472 | |
| 1102 | 1097 | ROM_REGION( 0x0800, "colorram", ROMREGION_ERASE00 ) |
| 1103 | 1098 | ROM_END |
| 1104 | 1099 | |
| 1105 | | ROM_START( mbee128 ) // 128K |
| 1100 | ROM_START( mbee128p ) // Premium 128K |
| 1106 | 1101 | ROM_REGION(0x20000, "rams", ROMREGION_ERASEFF) |
| 1107 | 1102 | |
| 1108 | 1103 | ROM_REGION(0x8000, "roms", 0) // rom plus optional undumped roms plus dummy area |
| 1109 | | ROM_SYSTEM_BIOS( 0, "bn60", "Version 2.03" ) |
| 1110 | | ROMX_LOAD("bn60.rom", 0x0000, 0x2000, CRC(ed15d4ee) SHA1(3ea42b63d42b9a4c5402676dee8912ad1f906bda), ROM_BIOS(1) ) |
| 1104 | ROM_SYSTEM_BIOS( 0, "bn56", "bn56" ) |
| 1105 | ROMX_LOAD("bn56.rom", 0x0000, 0x2000, CRC(3f76769d) SHA1(cfae2069d739c26fe39f734d9f705a3c965d1e6f), ROM_BIOS(1) ) |
| 1111 | 1106 | ROM_SYSTEM_BIOS( 1, "bn59", "Version 2.02" ) |
| 1112 | 1107 | ROMX_LOAD("bn59.rom", 0x0000, 0x2000, CRC(97384116) SHA1(87f2c4ab1a1f2964ba4f2bb60e62dc9c163831ba), ROM_BIOS(2) ) |
| 1113 | | ROM_SYSTEM_BIOS( 2, "bn56", "bn56" ) |
| 1114 | | ROMX_LOAD("bn56.rom", 0x0000, 0x2000, CRC(3f76769d) SHA1(cfae2069d739c26fe39f734d9f705a3c965d1e6f), ROM_BIOS(3) ) |
| 1108 | ROM_SYSTEM_BIOS( 2, "bn60", "Version 2.03" ) |
| 1109 | ROMX_LOAD("bn60.rom", 0x0000, 0x2000, CRC(ed15d4ee) SHA1(3ea42b63d42b9a4c5402676dee8912ad1f906bda), ROM_BIOS(3) ) |
| 1115 | 1110 | ROM_SYSTEM_BIOS( 3, "bn55", "bn55" ) |
| 1116 | 1111 | ROMX_LOAD("bn55.rom", 0x0000, 0x2000, CRC(ca2c1073) SHA1(355d90d181de899cc7af892df96305fead9c81b4), ROM_BIOS(4) ) |
| 1117 | 1112 | ROM_SYSTEM_BIOS( 4, "bn54", "bn54" ) |
| r243471 | r243472 | |
| 1119 | 1114 | ROM_SYSTEM_BIOS( 5, "hd18", "Hard Disk System" ) |
| 1120 | 1115 | ROMX_LOAD("hd18.rom", 0x0000, 0x2000, CRC(ed53ace7) SHA1(534e2e00cc527197c76b3c106b3c9ff7f1328487), ROM_BIOS(6) ) |
| 1121 | 1116 | |
| 1122 | | ROM_REGION(0x4000, "proms", 0) // undumped; using prom from 256tc for now |
| 1117 | ROM_REGION(0x4000, "pals", 0) // undumped; using prom from 256tc for now |
| 1123 | 1118 | ROM_LOAD( "silver.u39", 0x0000, 0x4000, BAD_DUMP CRC(c34aab64) SHA1(781fe648488dec90185760f8e081e488b73b68bf) ) |
| 1124 | 1119 | |
| 1125 | 1120 | ROM_REGION(0x9800, "gfx", 0) |
| r243471 | r243472 | |
| 1140 | 1135 | ROM_SYSTEM_BIOS( 1, "1.15", "Version 1.15" ) |
| 1141 | 1136 | ROMX_LOAD("256tc_boot_1.15.u38", 0x0000, 0x4000, CRC(1902062d) SHA1(e4a1c0b3f4996e313da0bac0edb6d34e3270723e), ROM_BIOS(2) ) |
| 1142 | 1137 | |
| 1143 | | ROM_REGION(0x4000, "proms", 0) |
| 1138 | ROM_REGION(0x4000, "pals", 0) |
| 1144 | 1139 | ROM_LOAD( "silver.u39", 0x0000, 0x4000, CRC(c34aab64) SHA1(781fe648488dec90185760f8e081e488b73b68bf) ) |
| 1145 | 1140 | |
| 1146 | 1141 | ROM_REGION(0x9800, "gfx", 0) |
| r243471 | r243472 | |
| 1169 | 1164 | COMP( 1986, mbeeppc, mbee, 0, mbeeppc, mbee, mbee_state, mbeeppc, "Applied Technology", "Microbee Premium PC85" , 0 ) |
| 1170 | 1165 | COMP( 1986, mbeett, mbee, 0, mbeett, mbee256, mbee_state, mbeett, "Applied Technology", "Microbee Teleterm" , GAME_NOT_WORKING ) |
| 1171 | 1166 | COMP( 1986, mbee56, mbee, 0, mbee56, mbee, mbee_state, mbee56, "Applied Technology", "Microbee 56k" , GAME_NOT_WORKING ) |
| 1172 | | COMP( 1986, mbee64, mbee, 0, mbee64, mbee, mbee_state, mbee64, "Applied Technology", "Microbee 64k" , GAME_NOT_WORKING ) |
| 1173 | | COMP( 1986, mbee128, mbee, 0, mbee128, mbee, mbee_state, mbee128, "Applied Technology", "Microbee 128k" , GAME_NOT_WORKING ) |
| 1167 | COMP( 1986, mbee128, mbee, 0, mbee128, mbee, mbee_state, mbee128, "Applied Technology", "Microbee 128k Standard" , GAME_NOT_WORKING ) |
| 1168 | COMP( 1986, mbee128p, mbee, 0, mbee128p, mbee, mbee_state, mbee128, "Applied Technology", "Microbee 128k Premium" , GAME_NOT_WORKING ) |
| 1174 | 1169 | COMP( 1987, mbee256, mbee, 0, mbee256, mbee256, mbee_state, mbee256, "Applied Technology", "Microbee 256TC" , GAME_NOT_WORKING ) |
trunk/src/mess/includes/mbee.h
| r243471 | r243472 | |
| 52 | 52 | , m_pak(*this, "pak") |
| 53 | 53 | , m_telcom(*this, "telcom") |
| 54 | 54 | , m_basic(*this, "basic") |
| 55 | | , m_bankl(*this, "bankl") |
| 56 | | , m_bankh(*this, "bankh") |
| 57 | | , m_bank1(*this, "bank1") |
| 58 | | , m_bank8l(*this, "bank8l") |
| 59 | | , m_bank8h(*this, "bank8h") |
| 60 | | , m_bank9(*this, "bank9") |
| 61 | | , m_bankfl(*this, "bankfl") |
| 62 | | , m_bankfh(*this, "bankfh") |
| 63 | 55 | , m_io_x0(*this, "X0") |
| 64 | 56 | , m_io_x1(*this, "X1") |
| 65 | 57 | , m_io_x2(*this, "X2") |
| r243471 | r243472 | |
| 129 | 121 | DECLARE_DRIVER_INIT(mbeepc); |
| 130 | 122 | DECLARE_DRIVER_INIT(mbeeic); |
| 131 | 123 | DECLARE_DRIVER_INIT(mbee128); |
| 132 | | DECLARE_DRIVER_INIT(mbee64); |
| 133 | 124 | DECLARE_MACHINE_RESET(mbee); |
| 134 | 125 | DECLARE_VIDEO_START(mbee); |
| 135 | 126 | DECLARE_VIDEO_START(mbeeic); |
| r243471 | r243472 | |
| 138 | 129 | DECLARE_VIDEO_START(mbeeppc); |
| 139 | 130 | DECLARE_PALETTE_INIT(mbeeppc); |
| 140 | 131 | DECLARE_MACHINE_RESET(mbee56); |
| 141 | | DECLARE_MACHINE_RESET(mbee64); |
| 142 | 132 | DECLARE_MACHINE_RESET(mbee128); |
| 143 | 133 | DECLARE_MACHINE_RESET(mbee256); |
| 144 | 134 | DECLARE_MACHINE_RESET(mbeett); |
| r243471 | r243472 | |
| 147 | 137 | TIMER_CALLBACK_MEMBER(mbee256_kbd); |
| 148 | 138 | TIMER_CALLBACK_MEMBER(mbee_rtc_irq); |
| 149 | 139 | TIMER_CALLBACK_MEMBER(mbee_reset); |
| 150 | | DECLARE_QUICKLOAD_LOAD_MEMBER( mbee ); |
| 151 | | DECLARE_QUICKLOAD_LOAD_MEMBER( mbee_z80bin ); |
| 140 | DECLARE_QUICKLOAD_LOAD_MEMBER(mbee); |
| 141 | DECLARE_QUICKLOAD_LOAD_MEMBER(mbee_z80bin); |
| 152 | 142 | WRITE_LINE_MEMBER(fdc_intrq_w); |
| 153 | 143 | WRITE_LINE_MEMBER(fdc_drq_w); |
| 154 | 144 | UINT8 *m_p_videoram; |
| r243471 | r243472 | |
| 169 | 159 | |
| 170 | 160 | required_device<palette_device> m_palette; |
| 171 | 161 | private: |
| 162 | bool m_is_premium; |
| 172 | 163 | size_t m_size; |
| 173 | 164 | UINT8 m_clock_pulse; |
| 174 | 165 | UINT8 m_mbee256_key_available; |
| r243471 | r243472 | |
| 177 | 168 | UINT8 m_mbee256_q_pos; |
| 178 | 169 | UINT8 m_0a; |
| 179 | 170 | UINT8 m_0b; |
| 180 | | UINT8 m_is_premium; |
| 181 | 171 | UINT8 m_sy6545_status; |
| 182 | 172 | UINT8 m_sy6545_reg[32]; |
| 183 | 173 | UINT8 m_sy6545_ind; |
| 184 | 174 | UINT8 m_fdc_rq; |
| 185 | 175 | UINT8 m_bank_array[33]; |
| 186 | | void mbee256_setup_banks(UINT8 data, bool first_time); |
| 176 | void setup_banks(UINT8 data, bool first_time, UINT8 b_mask); |
| 187 | 177 | void sy6545_cursor_configure(); |
| 188 | 178 | void keyboard_matrix_r(int offs); |
| 189 | 179 | void machine_reset_common_disk(); |
| r243471 | r243472 | |
| 204 | 194 | optional_memory_bank m_pak; |
| 205 | 195 | optional_memory_bank m_telcom; |
| 206 | 196 | optional_memory_bank m_basic; |
| 207 | | optional_memory_bank m_bankl; |
| 208 | | optional_memory_bank m_bankh; |
| 209 | | optional_memory_bank m_bank1; |
| 210 | | optional_memory_bank m_bank8l; |
| 211 | | optional_memory_bank m_bank8h; |
| 212 | | optional_memory_bank m_bank9; |
| 213 | | optional_memory_bank m_bankfl; |
| 214 | | optional_memory_bank m_bankfh; |
| 215 | 197 | required_ioport m_io_x0; |
| 216 | 198 | required_ioport m_io_x1; |
| 217 | 199 | required_ioport m_io_x2; |
trunk/src/mess/machine/mbee.c
| r243471 | r243472 | |
| 272 | 272 | and (output = 22,21,20,19,18,17,16,15). The prom is also used to control |
| 273 | 273 | the refresh required by the dynamic rams, however we ignore this function. |
| 274 | 274 | |
| 275 | b_mask = total dynamic ram (1=64k; 3=128k; 7=256k) |
| 276 | |
| 275 | 277 | ************************************************************/ |
| 276 | 278 | |
| 277 | | void mbee_state::mbee256_setup_banks(UINT8 data, bool first_time) |
| 279 | void mbee_state::setup_banks(UINT8 data, bool first_time, UINT8 b_mask) |
| 278 | 280 | { |
| 279 | | // (bits 0-5 are referred to as S0-S5) |
| 281 | data &= 0x3f; // (bits 0-5 are referred to as S0-S5) |
| 280 | 282 | address_space &mem = m_maincpu->space(AS_PROGRAM); |
| 281 | | UINT8 *prom = memregion("proms")->base(); |
| 283 | UINT8 *prom = memregion("pals")->base(); |
| 282 | 284 | UINT8 b_data = BITSWAP8(data, 7,5,3,2,4,6,1,0) & 0x3b; // arrange data bits to S0,S1,-,S4,S2,S3 |
| 283 | 285 | UINT8 b_bank, b_byte, b_byte_t, b_addr, p_bank = 1; |
| 284 | 286 | UINT16 b_vid; |
| r243471 | r243472 | |
| 309 | 311 | if (!BIT(b_byte, 4)) |
| 310 | 312 | { |
| 311 | 313 | // select video |
| 312 | | mem.install_read_handler (b_vid, b_vid + 0x7ff, read8_delegate(FUNC(mbee_state::mbeeppc_low_r), this)); |
| 313 | | mem.install_read_handler (b_vid + 0x800, b_vid + 0xfff, read8_delegate(FUNC(mbee_state::mbeeppc_high_r), this)); |
| 314 | if (m_is_premium) |
| 315 | { |
| 316 | mem.install_read_handler (b_vid, b_vid + 0x7ff, read8_delegate(FUNC(mbee_state::mbeeppc_low_r), this)); |
| 317 | mem.install_read_handler (b_vid + 0x800, b_vid + 0xfff, read8_delegate(FUNC(mbee_state::mbeeppc_high_r), this)); |
| 318 | } |
| 319 | else |
| 320 | { |
| 321 | mem.install_read_handler (b_vid, b_vid + 0x7ff, read8_delegate(FUNC(mbee_state::mbee_low_r), this)); |
| 322 | mem.install_read_handler (b_vid + 0x800, b_vid + 0xfff, read8_delegate(FUNC(mbee_state::mbeeic_high_r), this)); |
| 323 | } |
| 314 | 324 | } |
| 315 | 325 | else |
| 316 | 326 | { |
| r243471 | r243472 | |
| 320 | 330 | if (!BIT(b_byte, 3)) |
| 321 | 331 | membank(banktag)->set_entry(64 + (b_bank & 3)); // read from rom |
| 322 | 332 | else |
| 323 | | membank(banktag)->set_entry((b_bank & 7) | ((b_byte & 7) << 3)); // ram |
| 333 | membank(banktag)->set_entry((b_bank & 7) | ((b_byte & b_mask) << 3)); // ram |
| 324 | 334 | } |
| 325 | 335 | } |
| 326 | 336 | p_bank++; |
| r243471 | r243472 | |
| 341 | 351 | if (!BIT(b_byte, 4)) |
| 342 | 352 | { |
| 343 | 353 | // select video |
| 344 | | mem.install_write_handler (b_vid, b_vid + 0x7ff, write8_delegate(FUNC(mbee_state::mbeeppc_low_w), this)); |
| 345 | | mem.install_write_handler (b_vid + 0x800, b_vid + 0xfff, write8_delegate(FUNC(mbee_state::mbeeppc_high_w), this)); |
| 354 | if (m_is_premium) |
| 355 | { |
| 356 | mem.install_write_handler (b_vid, b_vid + 0x7ff, write8_delegate(FUNC(mbee_state::mbeeppc_low_w), this)); |
| 357 | mem.install_write_handler (b_vid + 0x800, b_vid + 0xfff, write8_delegate(FUNC(mbee_state::mbeeppc_high_w), this)); |
| 358 | } |
| 359 | else |
| 360 | { |
| 361 | mem.install_write_handler (b_vid, b_vid + 0x7ff, write8_delegate(FUNC(mbee_state::mbee_low_w), this)); |
| 362 | mem.install_write_handler (b_vid + 0x800, b_vid + 0xfff, write8_delegate(FUNC(mbee_state::mbeeic_high_w), this)); |
| 363 | } |
| 346 | 364 | } |
| 347 | 365 | else |
| 348 | 366 | { |
| r243471 | r243472 | |
| 352 | 370 | if (!BIT(b_byte, 3)) |
| 353 | 371 | membank(banktag)->set_entry(64); // write to rom dummy area |
| 354 | 372 | else |
| 355 | | membank(banktag)->set_entry((b_bank & 7) | ((b_byte & 7) << 3)); // ram |
| 373 | membank(banktag)->set_entry((b_bank & 7) | ((b_byte & b_mask) << 3)); // ram |
| 356 | 374 | } |
| 357 | 375 | } |
| 358 | 376 | p_bank++; |
| r243471 | r243472 | |
| 362 | 380 | |
| 363 | 381 | WRITE8_MEMBER( mbee_state::mbee256_50_w ) |
| 364 | 382 | { |
| 365 | | mbee256_setup_banks(data & 0x3f, 0); |
| 383 | setup_banks(data, 0, 7); |
| 366 | 384 | } |
| 367 | 385 | |
| 368 | 386 | /*********************************************************** |
| r243471 | r243472 | |
| 380 | 398 | |
| 381 | 399 | WRITE8_MEMBER( mbee_state::mbee128_50_w ) |
| 382 | 400 | { |
| 383 | | mbee256_setup_banks(data & 0x1f, 0); // S5 not used |
| 401 | setup_banks(data, 0, 3); |
| 384 | 402 | } |
| 385 | 403 | |
| 386 | | |
| 387 | 404 | /*********************************************************** |
| 388 | 405 | |
| 389 | | 64k Memory Banking |
| 390 | | |
| 391 | | Bit 2 disables ROM, replacing it with RAM. |
| 392 | | |
| 393 | | Due to lack of documentation, it is not possible to know |
| 394 | | if other bits are used. |
| 395 | | |
| 396 | | ************************************************************/ |
| 397 | | |
| 398 | | WRITE8_MEMBER( mbee_state::mbee64_50_w ) |
| 399 | | { |
| 400 | | if BIT(data, 2) |
| 401 | | { |
| 402 | | m_boot->set_entry(0); |
| 403 | | m_bankl->set_entry(0); |
| 404 | | m_bankh->set_entry(0); |
| 405 | | } |
| 406 | | else |
| 407 | | { |
| 408 | | m_bankl->set_entry(1); |
| 409 | | m_bankh->set_entry(1); |
| 410 | | } |
| 411 | | } |
| 412 | | |
| 413 | | |
| 414 | | /*********************************************************** |
| 415 | | |
| 416 | 406 | ROM Banking on older models |
| 417 | 407 | |
| 418 | 408 | Set A to 0 or 1 then read the port to switch between the |
| r243471 | r243472 | |
| 489 | 479 | timer_set(attotime::from_usec(4), TIMER_MBEE_RESET); |
| 490 | 480 | } |
| 491 | 481 | |
| 492 | | MACHINE_RESET_MEMBER( mbee_state, mbee64 ) |
| 493 | | { |
| 494 | | machine_reset_common_disk(); |
| 495 | | m_boot->set_entry(1); |
| 496 | | m_bankl->set_entry(1); |
| 497 | | m_bankh->set_entry(1); |
| 498 | | } |
| 499 | | |
| 500 | 482 | MACHINE_RESET_MEMBER( mbee_state, mbee128 ) |
| 501 | 483 | { |
| 502 | 484 | machine_reset_common_disk(); |
| 503 | | mbee256_setup_banks(0, 1); // set banks to default |
| 485 | setup_banks(0, 1, 3); // set banks to default |
| 504 | 486 | m_maincpu->set_pc(0x8000); |
| 505 | 487 | } |
| 506 | 488 | |
| r243471 | r243472 | |
| 510 | 492 | for (i = 0; i < 15; i++) m_mbee256_was_pressed[i] = 0; |
| 511 | 493 | m_mbee256_q_pos = 0; |
| 512 | 494 | machine_reset_common_disk(); |
| 513 | | mbee256_setup_banks(0, 1); // set banks to default |
| 495 | setup_banks(0, 1, 7); // set banks to default |
| 514 | 496 | m_maincpu->set_pc(0x8000); |
| 515 | 497 | } |
| 516 | 498 | |
| r243471 | r243472 | |
| 625 | 607 | m_size = 0xe000; |
| 626 | 608 | } |
| 627 | 609 | |
| 628 | | DRIVER_INIT_MEMBER( mbee_state, mbee64 ) |
| 629 | | { |
| 630 | | UINT8 *RAM = memregion("maincpu")->base(); |
| 631 | | m_boot->configure_entry(0, &RAM[0x0000]); |
| 632 | | m_bankl->configure_entry(0, &RAM[0x1000]); |
| 633 | | m_bankl->configure_entry(1, &RAM[0x9000]); |
| 634 | | m_bankh->configure_entry(0, &RAM[0x8000]); |
| 635 | | |
| 636 | | RAM = memregion("bootrom")->base(); |
| 637 | | m_bankh->configure_entry(1, &RAM[0x0000]); |
| 638 | | m_boot->configure_entry(1, &RAM[0x0000]); |
| 639 | | |
| 640 | | m_size = 0xf000; |
| 641 | | } |
| 642 | | |
| 643 | 610 | DRIVER_INIT_MEMBER( mbee_state, mbee128 ) |
| 644 | 611 | { |
| 645 | 612 | UINT8 *RAM = memregion("rams")->base(); |
| r243471 | r243472 | |
| 656 | 623 | membank(banktag)->configure_entries(0, 32, &RAM[0x0000], 0x1000); // RAM banks |
| 657 | 624 | membank(banktag)->configure_entries(64, 1, &ROM[0x4000], 0x1000); // dummy rom |
| 658 | 625 | } |
| 659 | | |
| 660 | | m_size = 0x8000; |
| 626 | m_size = 0xf000; |
| 661 | 627 | } |
| 662 | 628 | |
| 663 | 629 | DRIVER_INIT_MEMBER( mbee_state, mbee256 ) |