summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/machine/aim65.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mess/machine/aim65.c')
-rw-r--r--src/mess/machine/aim65.c424
1 files changed, 0 insertions, 424 deletions
diff --git a/src/mess/machine/aim65.c b/src/mess/machine/aim65.c
deleted file mode 100644
index 3e7d4f2a309..00000000000
--- a/src/mess/machine/aim65.c
+++ /dev/null
@@ -1,424 +0,0 @@
-// license:GPL-2.0+
-// copyright-holders:Peter Trauner, Dan Boris, Dirk Best, Robbbert
-/******************************************************************************
-
- AIM65
-
-******************************************************************************/
-
-
-#include "includes/aim65.h"
-
-
-/******************************************************************************
- Interrupt handling
-******************************************************************************/
-
-/* STEP/RUN
- *
- * Switch S2 (STEP/RUN) causes AIM 65 to operate either in the RUN mode or the
- * single STEP mode. In the STEP mode, the NMI interrupt line is driven low
- * when SYNC and O2 go high during instruction execution if the address lines
- * are outside the A000-FFFF range. The NMI interrupt occurs on the high to
- * low transition of the NMI line. The Monitor software will trace instructions
- * and register, outside the Monitor instruction address range if the trace
- * modes are selected and the NMI Interrupt Routine is not bypassed.
- */
-
-
-
-/******************************************************************************
- 6821 PIA
-******************************************************************************/
-
-/* PA0: A0 (Address)
- * PA1: A1 (Address)
- * PA2: CE1 (Chip enable)
- * PA3: CE2 (Chip enable)
- * PA4: CE3 (Chip enable)
- * PA5: CE4 (Chip enable)
- * PA6: CE5 (Chip enable)
- * PA7: W (Write enable)
- * PB0-6: D0-D6 (Data)
- * PB7: CU (Cursor)
- */
-
-void aim65_state::dl1416_update(dl1416_device *device, int index)
-{
- device->ce_w(m_pia_a & (0x04 << index));
- device->wr_w(BIT(m_pia_a, 7));
- device->cu_w(BIT(m_pia_b, 7));
- device->data_w(generic_space(), m_pia_a & 0x03, m_pia_b & 0x7f);
-}
-
-void aim65_state::aim65_pia()
-{
- dl1416_update(m_ds1, 0);
- dl1416_update(m_ds2, 1);
- dl1416_update(m_ds3, 2);
- dl1416_update(m_ds4, 3);
- dl1416_update(m_ds5, 4);
-}
-
-
-WRITE8_MEMBER( aim65_state::aim65_pia_a_w )
-{
- m_pia_a = data;
- aim65_pia();
-}
-
-
-WRITE8_MEMBER( aim65_state::aim65_pia_b_w )
-{
- m_pia_b = data;
- aim65_pia();
-}
-
-
-WRITE16_MEMBER( aim65_state::aim65_update_ds1)
-{
- output_set_digit_value(0 + (offset ^ 3), data);
-}
-
-WRITE16_MEMBER( aim65_state::aim65_update_ds2)
-{
- output_set_digit_value(4 + (offset ^ 3), data);
-}
-
-WRITE16_MEMBER( aim65_state::aim65_update_ds3)
-{
- output_set_digit_value(8 + (offset ^ 3), data);
-}
-
-WRITE16_MEMBER( aim65_state::aim65_update_ds4)
-{
- output_set_digit_value(12 + (offset ^ 3), data);
-}
-
-WRITE16_MEMBER( aim65_state::aim65_update_ds5)
-{
- output_set_digit_value(16 + (offset ^ 3), data);
-}
-
-
-
-/******************************************************************************
- 6532 RIOT
-******************************************************************************/
-
-
-READ8_MEMBER( aim65_state::aim65_riot_b_r )
-{
- static const char *const keynames[] =
- {
- "keyboard_0", "keyboard_1", "keyboard_2", "keyboard_3",
- "keyboard_4", "keyboard_5", "keyboard_6", "keyboard_7"
- };
-
- UINT8 row, data = 0xff;
-
- /* scan keyboard rows */
- for (row = 0; row < 8; row++)
- {
- if (!BIT(m_riot_port_a, row))
- data &= ioport(keynames[row])->read();
- }
-
- return data;
-}
-
-
-WRITE8_MEMBER( aim65_state::aim65_riot_a_w )
-{
- m_riot_port_a = data;
-}
-
-
-
-/***************************************************************************
- DRIVER INIT
-***************************************************************************/
-
-void aim65_state::machine_start()
-{
- ram_device *ram = m_ram;
- address_space &space = m_maincpu->space(AS_PROGRAM);
-
- // Init ROM sockets
- if (m_z24->exists())
- space.install_read_handler(0xd000, 0xdfff, read8_delegate(FUNC(generic_slot_device::read_rom),(generic_slot_device*)m_z24));
- if (m_z25->exists())
- space.install_read_handler(0xc000, 0xcfff, read8_delegate(FUNC(generic_slot_device::read_rom),(generic_slot_device*)m_z25));
- if (m_z26->exists())
- space.install_read_handler(0xb000, 0xbfff, read8_delegate(FUNC(generic_slot_device::read_rom),(generic_slot_device*)m_z26));
-
- // Init RAM
- space.install_ram(0x0000, ram->size() - 1, ram->pointer());
-
- m_pb_save = 0;
-}
-
-
-/* RESET
- *
- * Pushbutton switch S1 initiates RESET of the AIM65 hardware and software.
- * Timer Z4 holds the RES low for at least 15 ms from the time the pushbutton
- * is released. RES is routed to the R6502 CPU, the Monitor R6522 (Z32), the
- * Monitor R6532 RIOT (Z33), the user R6522 VIA (Z1), and the display R6520 PIA
- * (U1). To initiate the device RESET function is also routed to the expansion
- * connector for off-board RESET functions. The Monitor performs a software
- * reset when the RES line goes high.
- */
-
-
-/******************************************************************************
- Cassette
-******************************************************************************/
-
-WRITE8_MEMBER( aim65_state::aim65_pb_w )
-{
-/*
- d7 = cass out (both decks)
- d5 = cass2 motor
- d4 = cass1 motor
- d2 = tty out (not emulated)
- d0/1 = printer data (not emulated)
-*/
-
- UINT8 bits = data ^ m_pb_save;
- m_pb_save = data;
-
- if (BIT(bits, 7))
- {
- m_cassette1->output(BIT(data, 7) ? -1.0 : +1.0);
- m_cassette2->output(BIT(data, 7) ? -1.0 : +1.0);
- }
-
- if (BIT(bits, 5))
- {
- if (BIT(data, 5))
- m_cassette2->change_state(CASSETTE_MOTOR_DISABLED,CASSETTE_MASK_MOTOR);
- else
- m_cassette2->change_state(CASSETTE_MOTOR_ENABLED,CASSETTE_MASK_MOTOR);
- }
-
- if (BIT(bits, 4))
- {
- if (BIT(data, 4))
- m_cassette1->change_state(CASSETTE_MOTOR_DISABLED,CASSETTE_MASK_MOTOR);
- else
- m_cassette1->change_state(CASSETTE_MOTOR_ENABLED,CASSETTE_MASK_MOTOR);
- }
-}
-
-
-READ8_MEMBER( aim65_state::aim65_pb_r )
-{
-/*
- d7 = cassette in (deck 1)
- d6 = tty in (not emulated)
- d3 = kb/tty switch
-*/
-
- UINT8 data = ioport("switches")->read();
- data |= (m_cassette1->input() > +0.03) ? 0x80 : 0;
- data |= 0x40; // TTY must be H if not used.
- data |= m_pb_save & 0x37;
- return data;
-}
-
-
-/******************************************************************************
- Printer
-******************************************************************************/
-
-#ifdef UNUSED_FUNCTION
-/*
-
-2012-01-24 Printer code removed [Robbbert]
-
-From here to the end is not compiled. It is the remnants of the old printer
-code. Have a look at version 0.114 or 0.115 for the original working code.
-
-I've left it here for the idly curious.
-
-The system sends out the pattern of dots to the 'dot-matrix' print-head.
-
-This is why we can't simply replace it with a Centronics-like 'Printer'
-device - the output will be gibberish.
-*/
-
-
-
-/*
- aim65 thermal printer (20 characters)
- 10 heat elements (place on 1 line, space between 2 characters(about 14dots))
- (pa0..pa7,pb0,pb1 1 heat element on)
-
- cb2 0 motor, heat elements on
- cb1 output start!?
- ca1 input
-
- normally printer 5x7 characters
- (horizontal movement limits not known, normally 2 dots between characters)
-
- 3 dots space between lines?
-*/
-
-
-/* Part of aim65_pb_w
-
- data &= 0x03;
-
- if (m_flag_b == 0)
- {
- printerRAM[(m_printer_y * 20) + m_printer_x ] |= (data << 8);
- m_flag_b = 1;
- }
-*/
-
-
-/* Items for driver state
-
- emu_timer *m_print_timer;
- int m_printer_x;
- int m_printer_y;
- bool m_printer_dir;
- bool m_flag_a;
- bool m_flag_b;
- bool m_printer_level;
- UINT16 *m_printerRAM;
-*/
-
-
-/* Other items from H file
-
-VIDEO_UPDATE( aim65 );
-*/
-
-
-/* From 6522 config
-DRIVER_MEMBER(aim65_state, aim65_pa_w), // out port A
-DRIVER_MEMBER(aim65_state, aim65_printer_on), // out CB2
-*/
-
-
-/* From Machine Config
- MCFG_VIDEO_START_OVERRIDE(aim65_state,aim65)
- MCFG_VIDEO_UPDATE(aim65)
-*/
-
-
-TIMER_CALLBACK_MEMBER(aim65_state::aim65_printer_timer)
-{
- via6522_device *via_0 = machine().device<via6522_device>("via6522_0");
-
- via_0->write_cb1(m_printer_level);
- via_0->write_cb1(!m_printer_level);
- m_printer_level ^= 1;
-
- if (m_printer_dir)
- {
- if (m_printer_x > 0)
- m_printer_x--;
- else
- {
- m_printer_dir = 0;
- m_printer_x++;
- m_printer_y++;
- }
- }
- else
- {
- if (m_printer_x < 9)
- m_printer_x++;
- else
- {
- m_printer_dir = 1;
- m_printer_x--;
- m_printer_y++;
- }
- }
-
- if (m_printer_y > 500) m_printer_y = 0;
-
- m_flag_a=0;
- m_flag_b=0;
-}
-
-
-WRITE8_MEMBER( aim65_state::aim65_printer_on )
-{
- via6522_device *via_0 = machine().device<via6522_device>("via6522_0");
- if (!data)
- {
- m_printer_x=0;
- m_printer_y++;
- if (m_printer_y > 500) m_printer_y = 0;
- m_flag_a = m_flag_b=0;
- via_0->write_cb1(0);
- m_print_timer->adjust(attotime::zero, 0, attotime::from_usec(10));
- m_printer_level = 1;
- }
- else
- m_print_timer->reset();
-}
-
-
-WRITE8_MEMBER( aim65_state::aim65_pa_w )
-{
-// All bits are for printer data (not emulated)
- if (m_flag_a == 0)
- {
- m_printerRAM[(m_printer_y * 20) + m_printer_x] |= data;
- m_flag_a = 1;
- }
-}
-
-VIDEO_START_MEMBER(aim65_state,aim65)
-{
- m_print_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(aim65_state::aim65_printer_timer),this));
- m_printerRAM = auto_alloc_array(machine(), UINT16, (600 * 10 * 2) / 2);
- memset(m_printerRAM, 0, videoram_size);
- VIDEO_START_CALL_MEMBER(generic);
- m_printer_x = 0;
- m_printer_y = 0;
- m_printer_dir = 0;
- m_flag_a = 0;
- m_flag_b = 0;
- m_printer_level = 0;
-}
-
-SCREEN_UPDATE( aim65 )
-{
- aim65_state *state = screen.machine().driver_data<aim65_state>();
- /* Display printer output */
- bool dir = 1;
- UINT8 b,x,pen;
- UINT16 y;
-
- for (y = 0; y<500; y++)
- {
- for(x = 0; x< 10; x++)
- {
- if (dir == 1)
- data = state->m_printerRAM[y * 10 + x];
- else
- data = state->m_printerRAM[(y * 10) + (9 - x)];
-
-
- for (b = 0; b<10; b++)
- {
- pen = screen.m_palette->pen(BIT(data, 0) ? 2 : 0);
- plot_pixel(bitmap,700 - ((b * 10) + x), y, pen);
- data >>= 1;
- }
- }
-
- dir ^= 1;
- }
- return 0;
-}
-
-
-#endif