diff options
Diffstat (limited to 'src/mess/drivers/apple2e.c')
-rw-r--r-- | src/mess/drivers/apple2e.c | 557 |
1 files changed, 278 insertions, 279 deletions
diff --git a/src/mess/drivers/apple2e.c b/src/mess/drivers/apple2e.c index be7e8693462..3439d62f659 100644 --- a/src/mess/drivers/apple2e.c +++ b/src/mess/drivers/apple2e.c @@ -4,88 +4,88 @@ apple2e.c - Apple IIe/IIc/IIc Plus and clones - Next generation driver written in September/October 2014 by R. Belmont. - Thanks to the original Apple II series driver's authors: Mike Balfour, Nathan Woods, and R. Belmont - Special thanks to the Apple II Documentation Project/Antoine Vignau and Peter Ferrie. - - - IIe: base of this driver. 64K RAM, slot 0 language card emulation without the double-read requirement, + Next generation driver written in September/October 2014 by R. Belmont. + Thanks to the original Apple II series driver's authors: Mike Balfour, Nathan Woods, and R. Belmont + Special thanks to the Apple II Documentation Project/Antoine Vignau and Peter Ferrie. + + + IIe: base of this driver. 64K RAM, slot 0 language card emulation without the double-read requirement, lowercase and SHIFT key on button 2, Open and Solid Apple buttons on joy buttons 0 and 1, auxiliary slot, built-in 80 column support if extra RAM added. - - Physical slot 0 was eliminated thanks to the built-in language card. - - Most of the write-only softswitches gained readback locations, necessary to make interrupt-driven - software possible. - - Base 80-column card: 1K RAM, allows 80 columns and double-lo-res, - no double-hi-res. - - Extended 80-column card: 64K RAM (including a second language card), - allows 80 columns, double-lo-res, and double-hi-res. - - Revision A motherboards (very rare) don't support double-hi-res; it's unclear - if double-lo-res works or not. We emulate the much more common Rev B or later - board. - - IIe enhanced: 65C02 CPU with more instructions, MouseText in the character generator. - - IIe platinum: Like enhanced but with added numeric keypad and extended 80-column card - included in the box. Keypad CLEAR generates ESC by default, one hardware mod - made it generate CTRL-X instead. (new keyboard encoder ROM?) - - NOTE: On real IIe and IIe enhanced h/w, pressing SHIFT and paddle button 2 will - short out the power supply and cause a safety shutdown. (We don't emulate - this "feature", and it was relatively rare in real life as Apple joysticks only - had buttons 0 and 1 normally). - - IIc: IIe enhanced shrunken into a pizzabox with a Disk II compatible - half-height drive included in the case. - - No slots, but included functionality equivalent to the following slots - on the motherboard: + + Physical slot 0 was eliminated thanks to the built-in language card. + + Most of the write-only softswitches gained readback locations, necessary to make interrupt-driven + software possible. + + Base 80-column card: 1K RAM, allows 80 columns and double-lo-res, + no double-hi-res. + + Extended 80-column card: 64K RAM (including a second language card), + allows 80 columns, double-lo-res, and double-hi-res. + + Revision A motherboards (very rare) don't support double-hi-res; it's unclear + if double-lo-res works or not. We emulate the much more common Rev B or later + board. + + IIe enhanced: 65C02 CPU with more instructions, MouseText in the character generator. + + IIe platinum: Like enhanced but with added numeric keypad and extended 80-column card + included in the box. Keypad CLEAR generates ESC by default, one hardware mod + made it generate CTRL-X instead. (new keyboard encoder ROM?) + + NOTE: On real IIe and IIe enhanced h/w, pressing SHIFT and paddle button 2 will + short out the power supply and cause a safety shutdown. (We don't emulate + this "feature", and it was relatively rare in real life as Apple joysticks only + had buttons 0 and 1 normally). + + IIc: IIe enhanced shrunken into a pizzabox with a Disk II compatible + half-height drive included in the case. + + No slots, but included functionality equivalent to the following slots + on the motherboard: - 2 Super Serial Cards (modem and printer ports) - extended 80 column card / 128K RAM - Disk II IWM controller - Apple II Mouse card (firmware entry points are compatible, but the hardware implementation omits the 68705 and is quite different!) - + Has a 40/80 column switch and a QWERTY/DVORAK switch. - - IIc (UniDisk 3.5): IIc with ROM doubled to 32K and the ROMSWITCH register - added to page between the original 16K ROM and the new added 16K. The - extra firmware space was dedicated to implementing the Protocol Converter, - later renamed "SmartPort", which communicates with "smart" packet devices - over the IWM bus. - - Partial AppleTalk code also exists in this ROM but it doesn't work and - was not completed. - - IIc (Original Memory Expansion): - Removes AppleTalk and adds support for a memory expansion card with up - to 1 MB; this is identical both in hardware and firmware to the "Slinky" - memory expansion card for the Apple IIe (a2bus/a2memexp.c). - - IIc (Revised Memory Expansion, Rev. 3): - Fixes several nasty bugs in the Original Memory Expansion version. Not - currently dumped. - - IIc (Rev 4): - Fixes memory size detection for memory cards with less than 1MB. Fixes - several screen hole errors introduced in Rev 3, and fixes Terminal Mode - wherein the firmware can be put into a built-in terminal mode for simple - tests with a modem. - - IIc Plus: - Like IIc with memory expansion, but with licensed built-in Zip Chip which - runs the 65C02 at 4 MHz turbo speed with a small cache RAM. - - The machine has an internal "Apple 3.5" drive plus a custom gate array - which emulates the functionality of the UniDisk 3.5's on-board 65C02. - This gets around the fact that 1 MHz isn't sufficient to handle direct - Woz-style control of a double-density 3.5" drive. - - External drive port allows IIgs-style daisy-chaining. + + IIc (UniDisk 3.5): IIc with ROM doubled to 32K and the ROMSWITCH register + added to page between the original 16K ROM and the new added 16K. The + extra firmware space was dedicated to implementing the Protocol Converter, + later renamed "SmartPort", which communicates with "smart" packet devices + over the IWM bus. + + Partial AppleTalk code also exists in this ROM but it doesn't work and + was not completed. + + IIc (Original Memory Expansion): + Removes AppleTalk and adds support for a memory expansion card with up + to 1 MB; this is identical both in hardware and firmware to the "Slinky" + memory expansion card for the Apple IIe (a2bus/a2memexp.c). + + IIc (Revised Memory Expansion, Rev. 3): + Fixes several nasty bugs in the Original Memory Expansion version. Not + currently dumped. + + IIc (Rev 4): + Fixes memory size detection for memory cards with less than 1MB. Fixes + several screen hole errors introduced in Rev 3, and fixes Terminal Mode + wherein the firmware can be put into a built-in terminal mode for simple + tests with a modem. + + IIc Plus: + Like IIc with memory expansion, but with licensed built-in Zip Chip which + runs the 65C02 at 4 MHz turbo speed with a small cache RAM. + + The machine has an internal "Apple 3.5" drive plus a custom gate array + which emulates the functionality of the UniDisk 3.5's on-board 65C02. + This gets around the fact that 1 MHz isn't sufficient to handle direct + Woz-style control of a double-density 3.5" drive. + + External drive port allows IIgs-style daisy-chaining. ---------------------------------- @@ -163,27 +163,27 @@ Address bus A0-A11 is Y0-Y11 #define A2_AUXSLOT_TAG "auxbus" #define A2_VIDEO_TAG "a2video" -#define A2_0000_TAG "r00bank" -#define A2_0200_TAG "r02bank" -#define A2_0400_TAG "r04bank" -#define A2_0800_TAG "r08bank" -#define A2_2000_TAG "r20bank" -#define A2_4000_TAG "r40bank" -#define A2_C100_TAG "c1bank" -#define A2_C300_TAG "c3bank" -#define A2_C400_TAG "c4bank" -#define A2_C800_TAG "c8bank" +#define A2_0000_TAG "r00bank" +#define A2_0200_TAG "r02bank" +#define A2_0400_TAG "r04bank" +#define A2_0800_TAG "r08bank" +#define A2_2000_TAG "r20bank" +#define A2_4000_TAG "r40bank" +#define A2_C100_TAG "c1bank" +#define A2_C300_TAG "c3bank" +#define A2_C400_TAG "c4bank" +#define A2_C800_TAG "c8bank" #define A2_LCBANK_TAG "lcbank" #define MOUSE_BUTTON_TAG "mse_button" #define MOUSE_XAXIS_TAG "mse_x" #define MOUSE_YAXIS_TAG "mse_y" -#define CNXX_UNCLAIMED -1 -#define CNXX_INTROM -2 +#define CNXX_UNCLAIMED -1 +#define CNXX_INTROM -2 #define IRQ_SLOT 0 -#define IRQ_VBL 1 +#define IRQ_VBL 1 #define IRQ_MOUSEXY 2 class apple2e_state : public driver_device @@ -430,7 +430,7 @@ WRITE_LINE_MEMBER(apple2e_state::a2bus_inh_w) { // assume no cards are pulling /INH m_inh_slot = -1; - + // scan the slots to figure out which card(s) are INHibiting stuff for (int i = 0; i <= 7; i++) { @@ -444,7 +444,7 @@ WRITE_LINE_MEMBER(apple2e_state::a2bus_inh_w) { if (m_inh_bank != 1) { - m_upperbank->set_bank(1); + m_upperbank->set_bank(1); m_inh_bank = 1; } } @@ -452,7 +452,7 @@ WRITE_LINE_MEMBER(apple2e_state::a2bus_inh_w) { if (m_inh_bank != 0) { - m_upperbank->set_bank(0); + m_upperbank->set_bank(0); m_inh_bank = 0; } } @@ -466,7 +466,7 @@ WRITE_LINE_MEMBER(apple2e_state::a2bus_inh_w) // if no slots are inhibiting, make sure ROM is fully switched in if ((m_inh_slot == -1) && (m_inh_bank != 0)) { - m_upperbank->set_bank(0); + m_upperbank->set_bank(0); m_inh_bank = 0; } } @@ -485,7 +485,7 @@ READ8_MEMBER(apple2e_state::memexp_r) { if (m_exp_liveptr <= m_exp_addrmask) { - retval = m_exp_ram[m_exp_liveptr]; + retval = m_exp_ram[m_exp_liveptr]; } else { @@ -569,7 +569,7 @@ void apple2e_state::machine_start() m_cassette_out = 0; if (m_cassette) { - m_cassette->output(-1.0f); + m_cassette->output(-1.0f); } m_upperbank->set_bank(0); m_lcbank->set_bank(0); @@ -587,7 +587,7 @@ void apple2e_state::machine_start() m_exp_addrmask = m_ram_size - (128*1024) - 1; m_exp_ram = m_ram_ptr + (128*1024); } - else // no expansion + else // no expansion { m_exp_addrmask = 0; m_exp_ram = NULL; @@ -612,13 +612,13 @@ void apple2e_state::machine_start() m_aux_ptr = m_auxslotdevice->get_vram_ptr(); m_aux_bank_ptr = m_auxslotdevice->get_auxbank_ptr(); } - else // IIc has 128K right on the motherboard + else // IIc has 128K right on the motherboard { m_auxslotdevice = NULL; if (m_ram_size >= (128*1024)) { - m_aux_ptr = &m_ram_ptr[0x10000]; + m_aux_ptr = &m_ram_ptr[0x10000]; m_aux_bank_ptr = m_aux_ptr; } } @@ -749,7 +749,7 @@ void apple2e_state::raise_irq(int irq) if (m_irqmask) { - m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); + m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); } } @@ -760,11 +760,11 @@ void apple2e_state::lower_irq(int irq) if (!m_irqmask) { - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); } } -/*************************************************************************** +/*************************************************************************** VIDEO ***************************************************************************/ @@ -779,7 +779,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(apple2e_state::apple2_interrupt) if (m_isiic) { - update_iic_mouse(); + update_iic_mouse(); } if (scanline == 192) @@ -828,11 +828,11 @@ UINT32 apple2e_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, { if (m_video->m_dhires) { - m_video->dhgr_update(screen, bitmap, cliprect, 0, 159); + m_video->dhgr_update(screen, bitmap, cliprect, 0, 159); } else { - m_video->hgr_update(screen, bitmap, cliprect, 0, 159); + m_video->hgr_update(screen, bitmap, cliprect, 0, 159); } m_video->text_update(screen, bitmap, cliprect, 160, 191); } @@ -848,8 +848,8 @@ UINT32 apple2e_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, } } } - else // lo-res - { + else // lo-res + { if (m_video->m_mix) { if (m_video->m_dhires) @@ -867,11 +867,11 @@ UINT32 apple2e_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, { if (m_video->m_dhires) { - m_video->dlores_update(screen, bitmap, cliprect, 0, 191); + m_video->dlores_update(screen, bitmap, cliprect, 0, 191); } else { - m_video->lores_update(screen, bitmap, cliprect, 0, 191); + m_video->lores_update(screen, bitmap, cliprect, 0, 191); } } } @@ -886,7 +886,7 @@ UINT32 apple2e_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, return 0; } -/*************************************************************************** +/*************************************************************************** I/O ***************************************************************************/ void apple2e_state::auxbank_update() @@ -954,16 +954,16 @@ void apple2e_state::update_slotrom_banks() m_c100bank->set_bank(cxswitch); m_c400bank->set_bank(cxswitch); -// printf("intcxrom %d cnxx_slot %d isiic %d romswitch %d\n", m_intcxrom, m_cnxx_slot, m_isiic, m_romswitch); +// printf("intcxrom %d cnxx_slot %d isiic %d romswitch %d\n", m_intcxrom, m_cnxx_slot, m_isiic, m_romswitch); if ((m_intcxrom) || (m_cnxx_slot < 0) || (m_isiic)) { if (m_romswitch) { - m_c800bank->set_bank(2); + m_c800bank->set_bank(2); } else { - m_c800bank->set_bank(1); + m_c800bank->set_bank(1); } } else @@ -975,16 +975,16 @@ void apple2e_state::update_slotrom_banks() { if (m_romswitch) { - m_c300bank->set_bank(2); + m_c300bank->set_bank(2); } else { - m_c300bank->set_bank(1); + m_c300bank->set_bank(1); } } else { - m_c300bank->set_bank(0); + m_c300bank->set_bank(0); } } @@ -1018,27 +1018,27 @@ void apple2e_state::lc_update(int offset) { if (m_lcram) { - m_lcbank->set_bank(1); + m_lcbank->set_bank(1); } else { if (m_romswitch) { - m_lcbank->set_bank(2); + m_lcbank->set_bank(2); } else { - m_lcbank->set_bank(0); + m_lcbank->set_bank(0); } } } #if 0 - printf("LC: new state %c%c dxxx=%04x altzp=%d\n", - m_lcram ? 'R' : 'x', - m_lcwriteenable ? 'W' : 'x', - m_lcram2 ? 0x1000 : 0x0000, - m_altzp); + printf("LC: new state %c%c dxxx=%04x altzp=%d\n", + m_lcram ? 'R' : 'x', + m_lcwriteenable ? 'W' : 'x', + m_lcram2 ? 0x1000 : 0x0000, + m_altzp); #endif } @@ -1055,35 +1055,35 @@ void apple2e_state::do_io(address_space &space, int offset, bool is_iic) { switch (offset) { - case 0x58: // DisXY + case 0x58: // DisXY m_xy = false; break; - case 0x59: // EnbXY + case 0x59: // EnbXY m_xy = true; break; - case 0x5a: // DisVBL + case 0x5a: // DisVBL m_vblmask = false; break; - case 0x5b: // EnVBL + case 0x5b: // EnVBL m_vblmask = true; break; - case 0x5c: // RisX0Edge + case 0x5c: // RisX0Edge m_x0edge = false; break; - case 0x5d: // FalX0Edge + case 0x5d: // FalX0Edge m_x0edge = true; break; - case 0x5e: // RisY0Edge + case 0x5e: // RisY0Edge if (!m_ioudis) { - m_y0edge = false; + m_y0edge = false; } break; - case 0x5f: // FalY0Edge + case 0x5f: // FalY0Edge if (!m_ioudis) { - m_y0edge = true; + m_y0edge = true; } break; } @@ -1091,14 +1091,14 @@ void apple2e_state::do_io(address_space &space, int offset, bool is_iic) if (m_ioudis) { - switch (offset) + switch (offset) { - case 0x5e: // SETDHIRES - m_video->m_dhires = true; + case 0x5e: // SETDHIRES + m_video->m_dhires = true; break; - case 0x5f: // CLRDHIRES - m_video->m_dhires = false; + case 0x5f: // CLRDHIRES + m_video->m_dhires = false; break; } } @@ -1111,7 +1111,7 @@ void apple2e_state::do_io(address_space &space, int offset, bool is_iic) case 0x20: if (m_cassette) { - m_cassette_state ^= 1; + m_cassette_state ^= 1; m_cassette->output(m_cassette_state ? 1.0f : -1.0f); } break; @@ -1127,11 +1127,11 @@ void apple2e_state::do_io(address_space &space, int offset, bool is_iic) { if (m_romswitch) { - m_lcbank->set_bank(2); + m_lcbank->set_bank(2); } else { - m_lcbank->set_bank(0); + m_lcbank->set_bank(0); } } } @@ -1142,7 +1142,7 @@ void apple2e_state::do_io(address_space &space, int offset, bool is_iic) m_speaker->level_w(m_speaker_state); break; - case 0x48: // (IIc only) clear mouse X/Y interrupt flags + case 0x48: // (IIc only) clear mouse X/Y interrupt flags m_xirq = m_yirq = false; lower_irq(IRQ_MOUSEXY); break; @@ -1160,24 +1160,24 @@ void apple2e_state::do_io(address_space &space, int offset, bool is_iic) m_video->m_mix = true; break; case 0x54: // set page 1 - m_page2 = false; + m_page2 = false; m_video->m_page2 = false; auxbank_update(); break; case 0x55: // set page 2 - m_page2 = true; + m_page2 = true; m_video->m_page2 = true; auxbank_update(); break; case 0x56: // select lo-res - m_video->m_hires = false; + m_video->m_hires = false; auxbank_update(); break; case 0x57: // select hi-res - m_video->m_hires = true; + m_video->m_hires = true; auxbank_update(); break; @@ -1205,10 +1205,10 @@ void apple2e_state::do_io(address_space &space, int offset, bool is_iic) case 0x5f: // AN3 on m_an3 = true; break; - case 0x68: // IIgs STATE register, which ProDOS touches + case 0x68: // IIgs STATE register, which ProDOS touches break; - // trigger joypad read + // trigger joypad read case 0x70: case 0x71: case 0x72: case 0x73: case 0x74: case 0x75: case 0x76: case 0x77: case 0x78: case 0x79: case 0x7a: case 0x7b: case 0x7c: case 0x7d: case 0x7e: case 0x7f: if (is_iic) @@ -1238,22 +1238,22 @@ READ8_MEMBER(apple2e_state::c000_r) case 0x00: // keyboard latch return m_transchar | m_strobe; - case 0x02: // RAMRDOFF + case 0x02: // RAMRDOFF m_ramrd = false; auxbank_update(); break; - case 0x03: // RAMRDON + case 0x03: // RAMRDON m_ramrd = true; auxbank_update(); break; - case 0x04: // RAMWRTOFF + case 0x04: // RAMWRTOFF m_ramwrt = false; auxbank_update(); break; - case 0x05: // RAMWRTON + case 0x05: // RAMWRTON m_ramwrt = true; auxbank_update(); break; @@ -1265,76 +1265,76 @@ READ8_MEMBER(apple2e_state::c000_r) return rv; } - case 0x11: // read LCRAM2 (LC Dxxx bank) + case 0x11: // read LCRAM2 (LC Dxxx bank) return m_lcram2 ? 0x80 : 0x00; - case 0x12: // read LCRAM (is LC readable?) + case 0x12: // read LCRAM (is LC readable?) return m_lcram ? 0x80 : 0x00; - case 0x13: // read RAMRD + case 0x13: // read RAMRD return m_ramrd ? 0x80 : 0x00; - case 0x14: // read RAMWRT + case 0x14: // read RAMWRT return m_ramwrt ? 0x80 : 0x00; - case 0x15: // read INTCXROM + case 0x15: // read INTCXROM return m_intcxrom ? 0x80 : 0x00; - case 0x16: // read ALTZP + case 0x16: // read ALTZP return m_altzp ? 0x80 : 0x00; - case 0x17: // read SLOTC3ROM + case 0x17: // read SLOTC3ROM return m_slotc3rom ? 0x80 : 0x00; - case 0x18: // read 80STORE + case 0x18: // read 80STORE return m_80store ? 0x80 : 0x00; - case 0x19: // read VBLBAR + case 0x19: // read VBLBAR return space.machine().first_screen()->vblank() ? 0x00 : 0x80; - case 0x1a: // read TEXT + case 0x1a: // read TEXT return m_video->m_graphics ? 0x00 : 0x80; - case 0x1b: // read MIXED + case 0x1b: // read MIXED return m_video->m_mix ? 0x80 : 0x00; - case 0x1c: // read PAGE2 + case 0x1c: // read PAGE2 return m_page2 ? 0x80 : 0x00; - case 0x1d: // read HIRES + case 0x1d: // read HIRES return m_video->m_hires ? 0x80 : 0x00; - case 0x1e: // read ALTCHARSET + case 0x1e: // read ALTCHARSET return m_video->m_altcharset ? 0x80 : 0x00; - case 0x1f: // read 80COL + case 0x1f: // read 80COL return m_video->m_80col ? 0x80 : 0x00; case 0x60: // cassette in case 0x68: if (m_cassette) { - return m_cassette->input() > 0.0 ? 0x80 : 0; + return m_cassette->input() > 0.0 ? 0x80 : 0; } return 0; - case 0x61: // button 0 or Open Apple + case 0x61: // button 0 or Open Apple case 0x69: return ((m_joybuttons->read() & 0x10) || (m_kbspecial->read() & 0x10)) ? 0x80 : 0; - case 0x62: // button 1 or Solid Apple + case 0x62: // button 1 or Solid Apple case 0x6a: return ((m_joybuttons->read() & 0x20) || (m_kbspecial->read() & 0x20)) ? 0x80 : 0; - case 0x63: // button 2 or SHIFT key + case 0x63: // button 2 or SHIFT key case 0x6b: return ((m_joybuttons->read() & 0x40) || (m_kbspecial->read() & 0x06)) ? 0x80 : 0; - case 0x64: // joy 1 X axis + case 0x64: // joy 1 X axis case 0x6c: return (space.machine().time().as_double() < m_joystick_x1_time) ? 0x80 : 0; - case 0x65: // joy 1 Y axis + case 0x65: // joy 1 Y axis case 0x6d: return (space.machine().time().as_double() < m_joystick_y1_time) ? 0x80 : 0; @@ -1346,10 +1346,10 @@ READ8_MEMBER(apple2e_state::c000_r) case 0x6f: return (space.machine().time().as_double() < m_joystick_y2_time) ? 0x80 : 0; - case 0x7e: // read IOUDIS + case 0x7e: // read IOUDIS return m_ioudis ? 0x80 : 0x00; - case 0x7f: // read DHIRES + case 0x7f: // read DHIRES return m_video->m_dhires ? 0x00 : 0x80; default: @@ -1366,79 +1366,79 @@ WRITE8_MEMBER(apple2e_state::c000_w) switch (offset) { - case 0x00: // 80STOREOFF + case 0x00: // 80STOREOFF m_80store = false; auxbank_update(); break; - case 0x01: // 80STOREON + case 0x01: // 80STOREON m_80store = true; auxbank_update(); break; - case 0x02: // RAMRDOFF + case 0x02: // RAMRDOFF m_ramrd = false; auxbank_update(); break; - case 0x03: // RAMRDON + case 0x03: // RAMRDON m_ramrd = true; auxbank_update(); break; - case 0x04: // RAMWRTOFF + case 0x04: // RAMWRTOFF m_ramwrt = false; auxbank_update(); break; - case 0x05: // RAMWRTON + case 0x05: // RAMWRTON m_ramwrt = true; auxbank_update(); break; - case 0x06: // INTCXROMOFF + case 0x06: // INTCXROMOFF m_intcxrom = false; update_slotrom_banks(); break; - case 0x07: // INTCXROMON + case 0x07: // INTCXROMON m_intcxrom = true; update_slotrom_banks(); break; - case 0x08: // ALTZPOFF + case 0x08: // ALTZPOFF m_altzp = false; auxbank_update(); break; - case 0x09: // ALTZPON + case 0x09: // ALTZPON m_altzp = true; auxbank_update(); break; - case 0x0a: // SETINTC3ROM + case 0x0a: // SETINTC3ROM m_slotc3rom = false; update_slotrom_banks(); break; - case 0x0b: // SETSLOTC3ROM + case 0x0b: // SETSLOTC3ROM m_slotc3rom = true; update_slotrom_banks(); break; - case 0x0c: // 80COLOFF + case 0x0c: // 80COLOFF m_video->m_80col = false; break; - case 0x0d: // 80COLON + case 0x0d: // 80COLON m_video->m_80col = true; break; - case 0x0e: // ALTCHARSETOFF + case 0x0e: // ALTCHARSETOFF m_video->m_altcharset = false; break; - case 0x0f: // ALTCHARSETON + case 0x0f: // ALTCHARSETON m_video->m_altcharset = true; break; @@ -1446,10 +1446,10 @@ WRITE8_MEMBER(apple2e_state::c000_w) m_strobe = 0; break; - case 0x20: // cassette output + case 0x20: // cassette output if (m_cassette) { - m_cassette_out ^= 1; + m_cassette_out ^= 1; m_cassette->output(m_cassette_out ? 1.0f : -1.0f); } break; @@ -1463,13 +1463,13 @@ WRITE8_MEMBER(apple2e_state::c000_w) // card may have banked auxram; get a new bank pointer m_aux_bank_ptr = m_auxslotdevice->get_auxbank_ptr(); } - do_io(space, offset, false); // make sure it also side-effect resets the paddles as documented + do_io(space, offset, false); // make sure it also side-effect resets the paddles as documented break; - case 0x7e: // SETIOUDIS + case 0x7e: // SETIOUDIS m_ioudis = true; break; - case 0x7f: // CLRIOUDIS + case 0x7f: // CLRIOUDIS m_ioudis = false; break; default: @@ -1487,114 +1487,114 @@ READ8_MEMBER(apple2e_state::c000_iic_r) case 0x00: // keyboard latch return m_transchar | m_strobe; - case 0x02: // RAMRDOFF + case 0x02: // RAMRDOFF m_ramrd = false; auxbank_update(); break; - case 0x03: // RAMRDON + case 0x03: // RAMRDON m_ramrd = true; auxbank_update(); break; - case 0x04: // RAMWRTOFF + case 0x04: // RAMWRTOFF m_ramwrt = false; auxbank_update(); break; - case 0x05: // RAMWRTON + case 0x05: // RAMWRTON m_ramwrt = true; auxbank_update(); break; - case 0x10: // read any key down, reset keyboard strobe + case 0x10: // read any key down, reset keyboard strobe { UINT8 rv = m_transchar | m_anykeydown; m_strobe = 0; return rv; } - case 0x11: // read LCRAM2 (LC Dxxx bank) + case 0x11: // read LCRAM2 (LC Dxxx bank) return m_lcram2 ? 0x80 : 0x00; - break; + break; - case 0x12: // read LCRAM (is LC readable?) + case 0x12: // read LCRAM (is LC readable?) return m_lcram ? 0x80 : 0x00; break; - case 0x13: // read RAMRD + case 0x13: // read RAMRD return m_ramrd ? 0x80 : 0x00; - case 0x14: // read RAMWRT + case 0x14: // read RAMWRT return m_ramwrt ? 0x80 : 0x00; - case 0x15: // read & reset mouse X0 interrupt flag + case 0x15: // read & reset mouse X0 interrupt flag lower_irq(IRQ_MOUSEXY); return m_xirq ? 0x80 : 0x00; - case 0x16: // read ALTZP + case 0x16: // read ALTZP return m_altzp ? 0x80 : 0x00; - case 0x17: // read & reset mouse Y0 interrupt flag + case 0x17: // read & reset mouse Y0 interrupt flag lower_irq(IRQ_MOUSEXY); return m_yirq ? 0x80 : 0x00; - case 0x18: // read 80STORE + case 0x18: // read 80STORE return m_80store ? 0x80 : 0x00; - case 0x19: // read VBL + case 0x19: // read VBL return m_vbl ? 0x80 : 0x00; - case 0x1a: // read TEXT + case 0x1a: // read TEXT return m_video->m_graphics ? 0x00 : 0x80; - case 0x1b: // read MIXED + case 0x1b: // read MIXED return m_video->m_mix ? 0x80 : 0x00; - case 0x1c: // read PAGE2 + case 0x1c: // read PAGE2 return m_page2 ? 0x80 : 0x00; - case 0x1d: // read HIRES + case 0x1d: // read HIRES return m_video->m_hires ? 0x80 : 0x00; - case 0x1e: // read ALTCHARSET + case 0x1e: // read ALTCHARSET return m_video->m_altcharset ? 0x80 : 0x00; - case 0x1f: // read 80COL + case 0x1f: // read 80COL return m_video->m_80col ? 0x80 : 0x00; - case 0x40: // read XYMask (IIc only) + case 0x40: // read XYMask (IIc only) return m_xy ? 0x80 : 0x00; - case 0x41: // read VBL mask (IIc only) + case 0x41: // read VBL mask (IIc only) return m_vblmask ? 0x80 : 0x00; - case 0x42: // read X0Edge (IIc only) + case 0x42: // read X0Edge (IIc only) return m_x0edge ? 0x80 : 0x00; - case 0x43: // read Y0Edge (IIc only) + case 0x43: // read Y0Edge (IIc only) return m_y0edge ? 0x80 : 0x00; case 0x60: // 40/80 column switch (IIc only) return (m_sysconfig->read() & 0x04) ? 0x80 : 0; - case 0x61: // button 0 or Open Apple or mouse button 1 + case 0x61: // button 0 or Open Apple or mouse button 1 case 0x69: return ((m_joybuttons->read() & 0x10) || (m_kbspecial->read() & 0x10)) ? 0x80 : 0; - case 0x62: // button 1 or Solid Apple + case 0x62: // button 1 or Solid Apple case 0x6a: return ((m_joybuttons->read() & 0x20) || (m_kbspecial->read() & 0x20)) ? 0x80 : 0; - case 0x63: // mouse button 2 (no other function on IIc) + case 0x63: // mouse button 2 (no other function on IIc) case 0x6b: return m_mouseb->read() ? 0 : 0x80; - case 0x64: // joy 1 X axis + case 0x64: // joy 1 X axis case 0x6c: return (space.machine().time().as_double() < m_joystick_x1_time) ? 0x80 : 0; - case 0x65: // joy 1 Y axis + case 0x65: // joy 1 Y axis case 0x6d: return (space.machine().time().as_double() < m_joystick_y1_time) ? 0x80 : 0; @@ -1606,12 +1606,12 @@ READ8_MEMBER(apple2e_state::c000_iic_r) case 0x6f: return m_y1 ? 0x80 : 0; - case 0x7e: // read IOUDIS + case 0x7e: // read IOUDIS m_vbl = false; lower_irq(IRQ_VBL); return m_ioudis ? 0x80 : 0x00; - case 0x7f: // read DHIRES + case 0x7f: // read DHIRES return m_video->m_dhires ? 0x00 : 0x80; default: @@ -1628,79 +1628,79 @@ WRITE8_MEMBER(apple2e_state::c000_iic_w) switch (offset) { - case 0x00: // 80STOREOFF + case 0x00: // 80STOREOFF m_80store = false; auxbank_update(); break; - case 0x01: // 80STOREON + case 0x01: // 80STOREON m_80store = true; auxbank_update(); break; - case 0x02: // RAMRDOFF + case 0x02: // RAMRDOFF m_ramrd = false; auxbank_update(); break; - case 0x03: // RAMRDON + case 0x03: // RAMRDON m_ramrd = true; auxbank_update(); break; - case 0x04: // RAMWRTOFF + case 0x04: // RAMWRTOFF m_ramwrt = false; auxbank_update(); break; - case 0x05: // RAMWRTON + case 0x05: // RAMWRTON m_ramwrt = true; auxbank_update(); break; - case 0x06: // INTCXROMOFF + case 0x06: // INTCXROMOFF m_intcxrom = false; update_slotrom_banks(); break; - case 0x07: // INTCXROMON + case 0x07: // INTCXROMON m_intcxrom = true; update_slotrom_banks(); break; - case 0x08: // ALTZPOFF + case 0x08: // ALTZPOFF m_altzp = false; auxbank_update(); break; - case 0x09: // ALTZPON + case 0x09: // ALTZPON m_altzp = true; auxbank_update(); break; - case 0x0a: // SETINTC3ROM + case 0x0a: // SETINTC3ROM m_slotc3rom = false; update_slotrom_banks(); break; - case 0x0b: // SETSLOTC3ROM + case 0x0b: // SETSLOTC3ROM m_slotc3rom = true; update_slotrom_banks(); break; - case 0x0c: // 80COLOFF + case 0x0c: // 80COLOFF m_video->m_80col = false; break; - case 0x0d: // 80COLON + case 0x0d: // 80COLON m_video->m_80col = true; break; - case 0x0e: // ALTCHARSETOFF + case 0x0e: // ALTCHARSETOFF m_video->m_altcharset = false; break; - case 0x0f: // ALTCHARSETON + case 0x0f: // ALTCHARSETON m_video->m_altcharset = true; break; @@ -1714,12 +1714,12 @@ WRITE8_MEMBER(apple2e_state::c000_iic_w) lower_irq(IRQ_VBL); break; - case 0x7e: // SETIOUDIS - m_ioudis = true; + case 0x7e: // SETIOUDIS + m_ioudis = true; break; - case 0x7f: // CLRIOUDIS - m_ioudis = false; + case 0x7f: // CLRIOUDIS + m_ioudis = false; break; default: @@ -1835,7 +1835,7 @@ READ8_MEMBER(apple2e_state::c080_r) } else { - if (m_slotdevice[slot] != NULL) + if (m_slotdevice[slot] != NULL) { return m_slotdevice[slot]->read_c0nx(space, offset % 0x10); } @@ -1867,7 +1867,7 @@ WRITE8_MEMBER(apple2e_state::c080_w) UINT8 apple2e_state::read_slot_rom(address_space &space, int slotbias, int offset) { - int slotnum = ((offset>>8) & 0xf) + slotbias; + int slotnum = ((offset>>8) & 0xf) + slotbias; if (m_slotdevice[slotnum] != NULL) { @@ -1970,10 +1970,10 @@ READ8_MEMBER(apple2e_state::inh_r) { if (m_inh_slot != -1) { - return m_slotdevice[m_inh_slot]->read_inh_rom(space, offset + 0xd000); + return m_slotdevice[m_inh_slot]->read_inh_rom(space, offset + 0xd000); } - assert(0); // hitting inh_r with invalid m_inh_slot should not be possible + assert(0); // hitting inh_r with invalid m_inh_slot should not be possible return read_floatingbus(); } @@ -1989,9 +1989,9 @@ READ8_MEMBER(apple2e_state::lc_r) { if (m_altzp) { - if (m_aux_bank_ptr) - { - if (offset < 0x1000) + if (m_aux_bank_ptr) + { + if (offset < 0x1000) { if (m_lcram2) { @@ -2004,15 +2004,15 @@ READ8_MEMBER(apple2e_state::lc_r) } return m_aux_bank_ptr[(offset & 0x1fff) + 0xe000]; - } - else - { - return read_floatingbus(); + } + else + { + return read_floatingbus(); } } else { - if (offset < 0x1000) + if (offset < 0x1000) { if (m_lcram2) { @@ -2038,8 +2038,8 @@ WRITE8_MEMBER(apple2e_state::lc_w) if (m_altzp) { if (m_aux_bank_ptr) - { - if (offset < 0x1000) + { + if (offset < 0x1000) { if (m_lcram2) { @@ -2057,7 +2057,7 @@ WRITE8_MEMBER(apple2e_state::lc_w) } else { - if (offset < 0x1000) + if (offset < 0x1000) { if (m_lcram2) { @@ -2295,8 +2295,8 @@ static ADDRESS_MAP_START( laser128_map, AS_PROGRAM, 8, apple2e_state ) AM_RANGE(0x2000, 0x3fff) AM_DEVICE(A2_2000_TAG, address_map_bank_device, amap8) AM_RANGE(0x4000, 0xbfff) AM_DEVICE(A2_4000_TAG, address_map_bank_device, amap8) AM_RANGE(0xc000, 0xc07f) AM_READWRITE(c000_r, c000_w) -// AM_RANGE(0xc098, 0xc09b) AM_DEVREADWRITE(IIC_ACIA1_TAG, mos6551_device, read, write) -// AM_RANGE(0xc0a8, 0xc0ab) AM_DEVREADWRITE(IIC_ACIA2_TAG, mos6551_device, read, write) +// AM_RANGE(0xc098, 0xc09b) AM_DEVREADWRITE(IIC_ACIA1_TAG, mos6551_device, read, write) +// AM_RANGE(0xc0a8, 0xc0ab) AM_DEVREADWRITE(IIC_ACIA2_TAG, mos6551_device, read, write) AM_RANGE(0xc0d0, 0xc0d3) AM_READWRITE(memexp_r, memexp_w) AM_RANGE(0xc0e0, 0xc0ef) AM_DEVREADWRITE(LASER128_UDC_TAG, applefdc_base_device, read, write) AM_RANGE(0xc080, 0xc0ff) AM_READWRITE(c080_r, c080_w) @@ -2309,20 +2309,20 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( r0000bank_map, AS_PROGRAM, 8, apple2e_state ) AM_RANGE(0x0000, 0x01ff) AM_READWRITE(ram0000_r, ram0000_w) - AM_RANGE(0x0200, 0x03ff) AM_READWRITE(auxram0000_r, auxram0000_w) + AM_RANGE(0x0200, 0x03ff) AM_READWRITE(auxram0000_r, auxram0000_w) ADDRESS_MAP_END static ADDRESS_MAP_START( r0200bank_map, AS_PROGRAM, 8, apple2e_state ) - AM_RANGE(0x0000, 0x01ff) AM_READWRITE(ram0200_r, ram0200_w) // wr 0 rd 0 + AM_RANGE(0x0000, 0x01ff) AM_READWRITE(ram0200_r, ram0200_w) // wr 0 rd 0 AM_RANGE(0x0200, 0x03ff) AM_READWRITE(auxram0200_r, ram0200_w) // wr 0 rd 1 AM_RANGE(0x0400, 0x05ff) AM_READWRITE(ram0200_r, auxram0200_w) // wr 1 rd 0 AM_RANGE(0x0600, 0x07ff) AM_READWRITE(auxram0200_r, auxram0200_w) // wr 1 rd 1 ADDRESS_MAP_END static ADDRESS_MAP_START( r0400bank_map, AS_PROGRAM, 8, apple2e_state ) - AM_RANGE(0x0000, 0x03ff) AM_READWRITE(ram0400_r, ram0400_w) // wr 0 rd 0 - AM_RANGE(0x0400, 0x07ff) AM_READWRITE(auxram0400_r, ram0400_w) // wr 0 rd 1 - AM_RANGE(0x0800, 0x0bff) AM_READWRITE(ram0400_r, auxram0400_w) // wr 1 rd 0 + AM_RANGE(0x0000, 0x03ff) AM_READWRITE(ram0400_r, ram0400_w) // wr 0 rd 0 + AM_RANGE(0x0400, 0x07ff) AM_READWRITE(auxram0400_r, ram0400_w) // wr 0 rd 1 + AM_RANGE(0x0800, 0x0bff) AM_READWRITE(ram0400_r, auxram0400_w) // wr 1 rd 0 AM_RANGE(0x0c00, 0x0fff) AM_READWRITE(auxram0400_r, auxram0400_w) // wr 1 rd 1 ADDRESS_MAP_END @@ -2330,21 +2330,21 @@ static ADDRESS_MAP_START( r0800bank_map, AS_PROGRAM, 8, apple2e_state ) AM_RANGE(0x0000, 0x17ff) AM_READWRITE(ram0800_r, ram0800_w) AM_RANGE(0x2000, 0x37ff) AM_READWRITE(auxram0800_r, ram0800_w) AM_RANGE(0x4000, 0x57ff) AM_READWRITE(ram0800_r, auxram0800_w) - AM_RANGE(0x6000, 0x77ff) AM_READWRITE(auxram0800_r, auxram0800_w) + AM_RANGE(0x6000, 0x77ff) AM_READWRITE(auxram0800_r, auxram0800_w) ADDRESS_MAP_END static ADDRESS_MAP_START( r2000bank_map, AS_PROGRAM, 8, apple2e_state ) AM_RANGE(0x0000, 0x1fff) AM_READWRITE(ram2000_r, ram2000_w) AM_RANGE(0x2000, 0x3fff) AM_READWRITE(auxram2000_r, ram2000_w) AM_RANGE(0x4000, 0x5fff) AM_READWRITE(ram2000_r, auxram2000_w) - AM_RANGE(0x6000, 0x7fff) AM_READWRITE(auxram2000_r, auxram2000_w) + AM_RANGE(0x6000, 0x7fff) AM_READWRITE(auxram2000_r, auxram2000_w) ADDRESS_MAP_END static ADDRESS_MAP_START( r4000bank_map, AS_PROGRAM, 8, apple2e_state ) AM_RANGE(0x00000, 0x07fff) AM_READWRITE(ram4000_r, ram4000_w) AM_RANGE(0x08000, 0x0ffff) AM_READWRITE(auxram4000_r, ram4000_w) AM_RANGE(0x10000, 0x17fff) AM_READWRITE(ram4000_r, auxram4000_w) - AM_RANGE(0x18000, 0x1ffff) AM_READWRITE(auxram4000_r, auxram4000_w) + AM_RANGE(0x18000, 0x1ffff) AM_READWRITE(auxram4000_r, auxram4000_w) ADDRESS_MAP_END static ADDRESS_MAP_START( c100bank_map, AS_PROGRAM, 8, apple2e_state ) @@ -2372,7 +2372,7 @@ static ADDRESS_MAP_START( c800bank_map, AS_PROGRAM, 8, apple2e_state ) ADDRESS_MAP_END static ADDRESS_MAP_START( inhbank_map, AS_PROGRAM, 8, apple2e_state ) - AM_RANGE(0x0000, 0x2fff) AM_DEVICE(A2_LCBANK_TAG, address_map_bank_device, amap8) + AM_RANGE(0x0000, 0x2fff) AM_DEVICE(A2_LCBANK_TAG, address_map_bank_device, amap8) AM_RANGE(0x3000, 0x5fff) AM_READWRITE(inh_r, inh_w) ADDRESS_MAP_END @@ -2424,10 +2424,10 @@ WRITE_LINE_MEMBER(apple2e_state::ay3600_data_ready_w) trans |= (m_kbspecial->read() & 0x01) ? 0x0000 : 0x0200; // caps lock is bit 9 (active low) if (m_isiic) - { + { if (m_sysconfig->read() & 0x08) { - trans += 0x400; // go to DVORAK half of the ROM + trans += 0x400; // go to DVORAK half of the ROM } } @@ -2459,7 +2459,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(apple2e_state::ay3600_repeat) } else { - m_strobe = 0x80; + m_strobe = 0x80; } } } @@ -3169,7 +3169,7 @@ static MACHINE_CONFIG_START( apple2e, apple2e_state ) MCFG_AY3600_SHIFT_CB(READLINE(apple2e_state, ay3600_shift_r)) MCFG_AY3600_CONTROL_CB(READLINE(apple2e_state, ay3600_control_r)) MCFG_AY3600_DATA_READY_CB(WRITELINE(apple2e_state, ay3600_data_ready_w)) - MCFG_AY3600_AKO_CB(WRITELINE(apple2e_state, ay3600_ako_w)) + MCFG_AY3600_AKO_CB(WRITELINE(apple2e_state, ay3600_ako_w)) /* repeat timer. 15 Hz from page 7-15 of "Understanding the Apple IIe" */ MCFG_TIMER_DRIVER_ADD_PERIODIC("repttmr", apple2e_state, ay3600_repeat, attotime::from_hz(15)) @@ -3215,8 +3215,8 @@ static MACHINE_CONFIG_DERIVED( tk3000, apple2e ) MCFG_CPU_REPLACE("maincpu", M65C02, 1021800) /* close to actual CPU frequency of 1.020484 MHz */ MCFG_CPU_PROGRAM_MAP(apple2e_map) -// MCFG_CPU_ADD("subcpu", Z80, 1021800) // schematics are illegible on where the clock comes from, but it *seems* to be the same as the 65C02 clock -// MCFG_CPU_PROGRAM_MAP(tk3000_kbd_map) +// MCFG_CPU_ADD("subcpu", Z80, 1021800) // schematics are illegible on where the clock comes from, but it *seems* to be the same as the 65C02 clock +// MCFG_CPU_PROGRAM_MAP(tk3000_kbd_map) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( apple2ep, apple2e ) @@ -3597,4 +3597,3 @@ COMP( 1985, apple2c0, apple2c, 0, apple2c_iwm, apple2c, driver_device, COMP( 1986, apple2c3, apple2c, 0, apple2c_mem, apple2c, driver_device, 0, "Apple Computer", "Apple //c (Original Memory Expansion)", GAME_SUPPORTS_SAVE ) COMP( 1986, apple2c4, apple2c, 0, apple2c_mem, apple2c, driver_device, 0, "Apple Computer", "Apple //c (rev 4)", GAME_SUPPORTS_SAVE ) COMP( 1988, apple2cp, apple2c, 0, apple2cp, apple2c, driver_device, 0, "Apple Computer", "Apple //c Plus", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) - |