Previous 15994 Revisions Next

r3372 Thursday 2nd October, 2008 at 17:33:26 UTC by Curt Coder
[ABC800M] Added keyboard simulation.
[docs]messnew.txt
[src/mess/drivers]abc80x.c
[src/mess/includes]abc80x.h
[src/mess/video]abc806.c

src/mess/video/abc806.c
r3371r3372
88 
99   TODO:
1010 
11   - how do you select between 512x240 and 256x240 HR modes???
11   - selection between 512x240, 256x240, and 240x240 HR modes
1212   - add proper screen parameters to startup
1313   - palette configuration from PAL/PROM
1414   - vertical sync delay
1515   - horizontal positioning of the text and HR screens
16   - protection device @ 16H
1617   
1718*/
1819 
r3371r3372
5152{
5253   /*
5354 
54      bit      description
55      bit      signal   description
5556 
56      0      visible screen memory area bit 0
57      1      visible screen memory area bit 1
58      2      visible screen memory area bit 2 (unused)
59      3      visible screen memory area bit 3 (unused)
60      4      cpu accessible screen memory area bit 0
61      5      cpu accessible screen memory area bit 1
62      6      cpu accessible screen memory area bit 2 (unused)
63      7      cpu accessible screen memory area bit 3 (unused)
57      0      VM14   visible screen memory area bit 0
58      1      VM15   visible screen memory area bit 1
59      2      VM16   visible screen memory area bit 2 (unused)
60      3      VM17   visible screen memory area bit 3 (unused)
61      4      F14      cpu accessible screen memory area bit 0
62      5      F15      cpu accessible screen memory area bit 1
63      6      F16      cpu accessible screen memory area bit 2 (unused)
64      7      F17      cpu accessible screen memory area bit 3 (unused)
6465 
6566   */
6667 
r3371r3372
137138   */
138139 
139140   UINT16 hru2_addr = (state->hru2_a8 << 8) | (offset >> 8);
140   UINT8 data = memory_region(machine, "hru2")[hru2_addr] & 0x0f;
141   UINT8 data = state->hru2_prom[hru2_addr] & 0x0f;
141142 
142143   data |= e0516_dio_r(state->e0516) << 7;
143144 
r3371r3372
146147 
147148/* Special */
148149 
150READ8_HANDLER( abc806_sti_r )
151{
152   /* this is some weird device marked PROT @ 16H */
153 
154   /*
155 
156      bit      description
157 
158      0       
159      1       
160      2       
161      3       
162      4       
163      5       
164      6       
165      7      PROT DOUT
166 
167   */
168 
169   return 0;
170}
171 
149172WRITE8_HANDLER( abc806_sto_w )
150173{
151174   abc806_state *state = machine->driver_data;
r3371r3372
163186      state->_40 = level;
164187      break;
165188   case 2:
166      /* HRU II address line 8 */
189      /* HRU II address line 8, PROT A0 */
167190      state->hru2_a8 = level;
168191      break;
192   case 3:
193      /* PROT INI */
194      break;
169195   case 4:
170196      /* text display enable */
171197      state->txoff = level;
172198      break;
173199   case 5:
174200      /* RTC chip select */
175      e0516_cs_w(state->e0516, level);
201      e0516_cs_w(state->e0516, !level);
176202      break;
177203   case 6:
178204      /* RTC clock */
179205      e0516_clk_w(state->e0516, level);
180206      break;
181207   case 7:
182      /* RTC data in */
208      /* RTC data in, PROT DIN */
183209      e0516_dio_w(state->e0516, level);
184210      break;
185211   }
r3371r3372
365391 
366392   for (y = 0; y < 240; y++)
367393   {
394      /* 240x240 */
395      for (sx = 0; sx < 60; sx++)
396      {
397         UINT16 data = (state->videoram[addr++] << 8) | state->videoram[addr++];
398 
399         for (dot = 0; dot < 4; dot++)
400         {
401            int color = state->hrc[(data >> 12) & 0x0f]; // TODO get colors from HRU II prom
402            int x = (sx << 3) | (dot << 1);
403 
404            *BITMAP_ADDR16(bitmap, y, x) = color;
405            *BITMAP_ADDR16(bitmap, y, x + 1) = color;
406 
407            data <<= 4;
408         }
409      }
410 
368411      /* 256x240 */
369412      for (sx = 0; sx < 64; sx++)
370413      {
r3371r3372
389432 
390433         for (dot = 0; dot < 8; dot++)
391434         {
392            int color = state->hrc[(data >> 14) & 0x03];
435            int color = (data >> 14) & 0x03;
393436            int x = (sx << 3) | dot;
394437 
395438            *BITMAP_ADDR16(bitmap, y, x) = color;
r3371r3372
425468 
426469   state->char_rom = memory_region(machine, "chargen");
427470   state->rad_prom = memory_region(machine, "rad");
471   state->hru2_prom = memory_region(machine, "hru2");
428472 
429473   /* allocate memory */
430474 
src/mess/includes/abc80x.h
r3371r3372
114114
115115   /* memory regions */
116116   const UINT8 *rad_prom;   /* line address PROM */
117   const UINT8 *hru2_prom;   /* HR palette PROM */
117118   const UINT8 *char_rom;   /* character generator ROM */
118119};
119120
r3371r3372
142143READ8_HANDLER( abc806_cli_r );
143144WRITE8_HANDLER( abc806_sso_w );
144145
146READ8_HANDLER( abc806_sti_r );
145147WRITE8_HANDLER( abc806_sto_w );
146148
147void abc802_mux80_40_w(int level);
148
149149#endif /* __ABC80X__ */
src/mess/drivers/abc80x.c
r3371r3372
8686#include "devices/cassette.h"
8787#include "devices/printer.h"
8888
89/* Keyboard HACK */
90
91static emu_timer *abc800_keyboard_timer;
92static int keylatch;
93
94static const UINT8 abc800_keycodes[7*4][8] =
95{
96   // unshift
97   { 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38 },
98   { 0x39, 0x30, 0x2B, 0x60, 0x3C, 0x71, 0x77, 0x65 },
99   { 0x72, 0x74, 0x79, 0x75, 0x69, 0x6F, 0x70, 0x7D },
100   { 0x7E, 0x0D, 0x61, 0x73, 0x64, 0x66, 0x67, 0x68 },
101   { 0x6A, 0x6B, 0x6C, 0x7C, 0x7B, 0x27, 0x08, 0x7A },
102   { 0x78, 0x63, 0x76, 0x62, 0x6E, 0x6D, 0x2C, 0x2E },
103   { 0x2D, 0x09, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00 },
104
105   // shift
106   { 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x2f, 0x28 },
107   { 0x29, 0x3d, 0x3f, 0x40, 0x3e, 0x51, 0x57, 0x45 },
108   { 0x52, 0x54, 0x59, 0x55, 0x49, 0x4f, 0x50, 0x5d },
109   { 0x5e, 0x0d, 0x41, 0x53, 0x44, 0x46, 0x47, 0x48 },
110   { 0x4a, 0x4b, 0x4c, 0x5c, 0x5b, 0x2a, 0x08, 0x5a },
111   { 0x58, 0x43, 0x56, 0x42, 0x4e, 0x4d, 0x3b, 0x3a },
112   { 0x5f, 0x09, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00 },
113
114   // control
115   { 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38 },
116   { 0x39, 0x30, 0x2b, 0x00, 0x7f, 0x11, 0x17, 0x05 },
117   { 0x12, 0x14, 0x19, 0x15, 0x09, 0x0f, 0x10, 0x1d },
118   { 0x1e, 0x0d, 0x01, 0x13, 0x04, 0x06, 0x07, 0x08 },
119   { 0x0a, 0x0b, 0x0c, 0x1c, 0x1b, 0x27, 0x08, 0x1a },
120   { 0x18, 0x03, 0x16, 0x02, 0x0e, 0x0d, 0x2c, 0x2e },
121   { 0x2d, 0x09, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00 },
122
123   // control-shift
124   { 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x2f, 0x28 },
125   { 0x29, 0x3d, 0x3f, 0x00, 0x7f, 0x11, 0x17, 0x05 },
126   { 0x12, 0x14, 0x19, 0x15, 0x09, 0x1f, 0x00, 0x1d },
127   { 0x1e, 0x0d, 0x01, 0x13, 0x04, 0x06, 0x07, 0x08 },
128   { 0x0a, 0x1b, 0x1c, 0x1c, 0x1b, 0x2a, 0x08, 0x1a },
129   { 0x18, 0x03, 0x16, 0x02, 0x1e, 0x1d, 0x3b, 0x3a },
130   { 0x5f, 0x09, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00 }
131};
132
133static void abc800_keyboard_scan(running_machine *machine)
134{
135   UINT8 keycode = 0;
136   UINT8 data;
137   int table = 0, row, col;
138   static const char *keynames[] = { "ROW0", "ROW1", "ROW2", "ROW3", "ROW4", "ROW5", "ROW6" };
139
140   // shift, upper case
141   if (input_port_read(machine, "ROW7") & 0x07)
142   {
143      table |= 0x01;
144   }
145
146   // ctrl
147   if (input_port_read(machine, "ROW7") & 0x08)
148   {
149      table |= 0x02;
150   }
151
152   for (row = 0; row < 7; row++)
153   {
154      data = input_port_read(machine, keynames[row]);
155
156      if (data != 0)
157      {
158         UINT8 ibit = 1;
159
160         for (col = 0; col < 8; col++)
161         {
162            if (data & ibit) keycode = abc800_keycodes[row + (table * 7)][col];
163            ibit <<= 1;
164         }
165      }
166   }
167
168   if (keycode)
169   {
170      if (!keylatch)
171      {
172         abc800_state *state = machine->driver_data;
173
174         z80dart_set_dcd(state->z80dart, 1, 1);
175         z80dart_receive_data(state->z80dart, 1, keycode);
176         logerror("KEYCODE WRITE: %02x\n", keycode);
177         keylatch = keycode;
178      }
179   }
180   else
181   {
182      if (keylatch)
183      {
184         abc800_state *state = machine->driver_data;
185
186         z80dart_set_dcd(state->z80dart, 1, 0);
187         z80dart_receive_data(state->z80dart, 1, 0);
188         keylatch = 0;
189      }
190   }
191}
192
193static TIMER_CALLBACK( abc800_keyboard_tick )
194{
195   abc800_keyboard_scan(machine);
196}
197
89198/* Read/Write Handlers */
90199
91200// ABC 800
r3371r3372
448557   AM_RANGE(0x31, 0x31) AM_MIRROR(0xff06) AM_DEVREAD(MC6845, MC6845_TAG, mc6845_register_r)
449558   AM_RANGE(0x34, 0x34) AM_MIRROR(0xff00) AM_MASK(0xff00) AM_READWRITE(abc806_mai_r, abc806_mao_w)
450559   AM_RANGE(0x35, 0x35) AM_MIRROR(0xff00) AM_READWRITE(abc806_ami_r, abc806_amo_w)
451   AM_RANGE(0x36, 0x36) AM_MIRROR(0xff00) AM_WRITE(abc806_sto_w)
560   AM_RANGE(0x36, 0x36) AM_MIRROR(0xff00) AM_READWRITE(abc806_sti_r, abc806_sto_w)
452561   AM_RANGE(0x37, 0x37) AM_MIRROR(0xff00) AM_MASK(0xff00) AM_READWRITE(abc806_cli_r, abc806_sso_w)
453562   AM_RANGE(0x38, 0x38) AM_MIRROR(0xff06) AM_DEVWRITE(MC6845, MC6845_TAG, mc6845_address_w)
454563   AM_RANGE(0x39, 0x39) AM_MIRROR(0xff06) AM_DEVWRITE(MC6845, MC6845_TAG, mc6845_register_w)
r3371r3372
460569/* Input Ports */
461570
462571static INPUT_PORTS_START( abc800 )
463   PORT_INCLUDE(abc77)
572   PORT_START("ROW0")
573   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
574   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"')
575   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
576   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("4 \xC2\xA4") PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR(0x00A4)
577   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
578   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
579   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('/')
580   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
581
582   PORT_START("ROW1")
583   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
584   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR('=')
585   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('+') PORT_CHAR('?')
586   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR(0x00E9) PORT_CHAR(0x00C9)
587   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('<') PORT_CHAR('>')
588   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
589   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
590   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
591
592   PORT_START("ROW2")
593   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
594   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
595   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
596   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
597   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
598   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
599   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
600   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR(0x00E5) PORT_CHAR(0x00C5)
601
602   PORT_START("ROW3")
603   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(0x00FC) PORT_CHAR(0x00DC)
604   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("RETURN") PORT_CODE(KEYCODE_ENTER) PORT_CHAR('\r')
605   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
606   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
607   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
608   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
609   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
610   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
611
612   PORT_START("ROW4")
613   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
614   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
615   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
616   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(0x00F6) PORT_CHAR(0x00D6)
617   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(0x00E4) PORT_CHAR(0x00C4)
618   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\'') PORT_CHAR('*')
619   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\xE2\x86\x90") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
620   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
621
622   PORT_START("ROW5")
623   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
624   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
625   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
626   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
627   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
628   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
629   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR(';')
630   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR(':')
631
632   PORT_START("ROW6")
633   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('-') PORT_CHAR('_')
634   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\xE2\x86\x92") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
635   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("SPACE") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
636   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
637   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
638   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
639   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
640   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
641
642   PORT_START("ROW7")
643   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("LEFT SHIFT") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
644   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("RIGHT SHIFT") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
645   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("UPPER CASE") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) PORT_TOGGLE
646   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL))
647   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
648   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
649   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
650   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
464651INPUT_PORTS_END
465652
466653static INPUT_PORTS_START( abc802 )
r3371r3372
539726   return -1;
540727}
541728
729static void dart_interrupt(const device_config *device, int state)
730{
731   cpunum_set_input_line(device->machine, 0, 0, state);
732}
733
542734static const z80dart_interface abc800_dart_intf =
543735{
544   Z80_TAG,               /* cpu */
736   Z80_TAG,            /* cpu */
545737   ABC800_X01/2/2,         /* clock */
546   0,                  /* interrupt handler */
738   dart_interrupt,         /* interrupt handler */
547739   0,                  /* DTR changed handler */
548740   0,                  /* RTS changed handler */
549741   0,                  /* BREAK changed handler */
r3371r3372
575767{
576768   abc800_state *state = machine->driver_data;
577769
770   /* keyboard HACK */
771
772   abc800_keyboard_timer = timer_alloc(abc800_keyboard_tick, NULL);
773   timer_adjust_periodic(abc800_keyboard_timer, attotime_zero, 0, ATTOTIME_IN_USEC(2500));
774
578775   /* find devices */
579776
580777   state->z80ctc = device_list_find_by_tag(machine->config->devicelist, Z80CTC, Z80CTC_TAG);
r3371r3372
629826
630827static const z80dart_interface abc802_dart_intf =
631828{
632   Z80_TAG,               /* cpu */
829   Z80_TAG,            /* cpu */
633830   ABC800_X01/2/2,         /* clock */
634831   0,                  /* interrupt handler */
635832   abc802_dart_dtr_w,      /* DTR changed handler */
r3371r3372
704901
705902static const z80dart_interface abc806_dart_intf =
706903{
707   Z80_TAG,               /* cpu */
904   Z80_TAG,            /* cpu */
708905   ABC800_X01/2/2,         /* clock */
709906   0,                  /* interrupt handler */
710907   abc806_dart_dtr_w,      /* DTR changed handler */
r3371r3372
753950
754951static MACHINE_RESET( abc806 )
755952{
953   abc806_state *state = machine->driver_data;
954
756955   /* setup memory banking */
757956
758957   int bank;
r3371r3372
762961      memory_set_bank(bank, 0);
763962   }
764963
964   state->eme = 0;
965
765966   abc806_bankswitch(machine);
766967}
767968
r3371r3372
779980   MDRV_MACHINE_START(abc800)
780981
781982   /* ABC-77 keyboard */
782   MDRV_SPEAKER_STANDARD_MONO("mono")
983/*   MDRV_SPEAKER_STANDARD_MONO("mono")
783984   MDRV_DEVICE_ADD(ABC77_TAG, ABC77)
784   MDRV_DEVICE_CONFIG(abc800_abc77_intf)
985   MDRV_DEVICE_CONFIG(abc800_abc77_intf)*/
785986
786987   /* video hardware */
787988   MDRV_IMPORT_FROM(abc800m_video)
r3371r3372
8091010   MDRV_MACHINE_START(abc800)
8101011
8111012   /* ABC-77 keyboard */
812   MDRV_SPEAKER_STANDARD_MONO("mono")
1013/*   MDRV_SPEAKER_STANDARD_MONO("mono")
8131014   MDRV_DEVICE_ADD(ABC77_TAG, ABC77)
814   MDRV_DEVICE_CONFIG(abc800_abc77_intf)
1015   MDRV_DEVICE_CONFIG(abc800_abc77_intf)*/
8151016
8161017   /* video hardware */
8171018   MDRV_IMPORT_FROM(abc800c_video)
r3371r3372
8801081
8811082   MDRV_Z80CTC_ADD( Z80CTC_TAG, abc800_ctc_intf )
8821083   MDRV_Z80SIO_ADD( Z80SIO_TAG, abc800_sio_intf )
883   MDRV_Z80DART_ADD( Z80DART_TAG, abc800_dart_intf )
1084   MDRV_Z80DART_ADD( Z80DART_TAG, abc806_dart_intf )
8841085
8851086   /* real time clock */
8861087   MDRV_DEVICE_ADD(E0516_TAG, E0516)
r3371r3372
9151116   ROM_LOAD( "10726864",  0x1000, 0x0800, CRC(e33683ae) SHA1(0c1d9e320f82df05f4804992ef6f6f6cd20623f3), BIOS(1) ) \
9161117   ROM_LOAD( "abc99.bin", 0x1000, 0x0800, CRC(d48310fc) SHA1(17a2ffc0ec00d395c2b9caf3d57fed575ba2b137), BIOS(2) )
9171118
918ROM_START( abc800c )
1119ROM_START( abc800m )
9191120   ROM_REGION( 0x10000, Z80_TAG, 0 )
920   ROM_LOAD( "abcc.1m",    0x0000, 0x1000, NO_DUMP )
1121   ROM_LOAD( "abcm.1m",    0x0000, 0x1000, CRC(f85b274c) SHA1(7d0f5639a528d8d8130a22fe688d3218c77839dc) )
9211122   ROM_LOAD( "abc1-12.1l", 0x1000, 0x1000, CRC(1e99fbdc) SHA1(ec6210686dd9d03a5ed8c4a4e30e25834aeef71d) )
9221123   ROM_LOAD( "abc2-12.1k", 0x2000, 0x1000, CRC(ac196ba2) SHA1(64fcc0f03fbc78e4c8056e1fa22aee12b3084ef5) )
9231124   ROM_LOAD( "abc3-12.1j", 0x3000, 0x1000, CRC(3ea2b5ee) SHA1(5a51ac4a34443e14112a6bae16c92b5eb636603f) )
r3371r3372
9261127   ROM_LOAD( "abc6-13.2k", 0x6000, 0x1000, CRC(6fa71fb6) SHA1(b037dfb3de7b65d244c6357cd146376d4237dab6) )
9271128   ROM_LOAD( "abc7-21.2j", 0x7000, 0x1000, CRC(fd137866) SHA1(3ac914d90db1503f61397c0ea26914eb38725044) )
9281129
929   ROM_REGION( 0x1000, "chargen", 0 )
930   ROM_LOAD( "vuc-se.7c",  0x0000, 0x1000, NO_DUMP )
1130   ROM_REGION( 0x0800, "chargen", 0 )
1131   ROM_LOAD( "vum-se.7c",  0x0000, 0x0800, CRC(f9152163) SHA1(997313781ddcbbb7121dbf9eb5f2c6b4551fc799) )
9311132
9321133   ROM_REGION( 0x2000, "user1", 0 )
9331134   // Fast Controller
r3371r3372
9591160   ROM_LOAD( "st225.bin",    0x0000, 0x0800, CRC(c9f68f81) SHA1(7ff8b2a19f71fe0279ab3e5a0a5fffcb6030360c) ) // Seagate ST225
9601161ROM_END
9611162
962ROM_START( abc800m )
1163ROM_START( abc800c )
9631164   ROM_REGION( 0x10000, Z80_TAG, 0 )
964   ROM_LOAD( "abcm.1m",    0x0000, 0x1000, CRC(f85b274c) SHA1(7d0f5639a528d8d8130a22fe688d3218c77839dc) )
1165   ROM_LOAD( "abcc.1m",    0x0000, 0x1000, NO_DUMP )
9651166   ROM_LOAD( "abc1-12.1l", 0x1000, 0x1000, CRC(1e99fbdc) SHA1(ec6210686dd9d03a5ed8c4a4e30e25834aeef71d) )
9661167   ROM_LOAD( "abc2-12.1k", 0x2000, 0x1000, CRC(ac196ba2) SHA1(64fcc0f03fbc78e4c8056e1fa22aee12b3084ef5) )
9671168   ROM_LOAD( "abc3-12.1j", 0x3000, 0x1000, CRC(3ea2b5ee) SHA1(5a51ac4a34443e14112a6bae16c92b5eb636603f) )
r3371r3372
9701171   ROM_LOAD( "abc6-13.2k", 0x6000, 0x1000, CRC(6fa71fb6) SHA1(b037dfb3de7b65d244c6357cd146376d4237dab6) )
9711172   ROM_LOAD( "abc7-21.2j", 0x7000, 0x1000, CRC(fd137866) SHA1(3ac914d90db1503f61397c0ea26914eb38725044) )
9721173
973   ROM_REGION( 0x0800, "chargen", 0 )
974   ROM_LOAD( "vum-se.7c",  0x0000, 0x0800, CRC(f9152163) SHA1(997313781ddcbbb7121dbf9eb5f2c6b4551fc799) )
1174   ROM_REGION( 0x1000, "chargen", 0 )
1175   ROM_LOAD( "vuc-se.7c",  0x0000, 0x1000, NO_DUMP )
9751176ROM_END
9761177
9771178ROM_START( abc802 )
r3371r3372
9791180   ROM_LOAD(  "abc02-11.9f",  0x0000, 0x2000, CRC(b86537b2) SHA1(4b7731ef801f9a03de0b5acd955f1e4a1828355d) )
9801181   ROM_LOAD(  "abc12-11.11f", 0x2000, 0x2000, CRC(3561c671) SHA1(f12a7c0fe5670ffed53c794d96eb8959c4d9f828) )
9811182   ROM_LOAD(  "abc22-11.12f", 0x4000, 0x2000, CRC(8dcb1cc7) SHA1(535cfd66c84c0370fd022d6edf702d3d1ad1b113) )
982   ROM_SYSTEM_BIOS( 0, "v19",      "UDF-DOS v6.19" )
1183   ROM_SYSTEM_BIOS( 0, "v19", "UDF-DOS v6.19" )
9831184   ROMX_LOAD( "abc32-21.14f", 0x6000, 0x2000, CRC(57050b98) SHA1(b977e54d1426346a97c98febd8a193c3e8259574), ROM_BIOS(1) )
984   ROM_SYSTEM_BIOS( 1, "v20",      "UDF-DOS v6.20" )
1185   ROM_SYSTEM_BIOS( 1, "v20", "UDF-DOS v6.20" )
9851186   ROMX_LOAD( "abc32-31.14f", 0x6000, 0x2000, CRC(fc8be7a8) SHA1(a1d4cb45cf5ae21e636dddfa70c99bfd2050ad60), ROM_BIOS(2) )
986   ROM_SYSTEM_BIOS( 2, "mica",      "MICA DOS v6.20" )
1187   ROM_SYSTEM_BIOS( 2, "mica", "MICA DOS v6.20" )
9871188   ROMX_LOAD( "mica820.14f",  0x6000, 0x2000, CRC(edf998af) SHA1(daae7e1ff6ef3e0ddb83e932f324c56f4a98f79b), ROM_BIOS(3) )
9881189
9891190   ROM_REGION( 0x2000, "chargen", 0 )
r3371r3372
11621363/* System Drivers */
11631364
11641365/*    YEAR  NAME        PARENT      COMPAT  MACHINE     INPUT   INIT    CONFIG  COMPANY             FULLNAME    FLAGS */
1165COMP( 1981, abc800c,    0,          0,      abc800c,    abc800, abc800, abc800, "Luxor Datorer AB", "ABC 800 C", GAME_NOT_WORKING )
1166COMP( 1981, abc800m,    abc800c,    0,      abc800m,    abc800, abc800, abc800, "Luxor Datorer AB", "ABC 800 M", GAME_NOT_WORKING )
1366COMP( 1981, abc800m,    0,         0,      abc800m,    abc800, abc800, abc800, "Luxor Datorer AB", "ABC 800 M", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
1367COMP( 1981, abc800c,    abc800m,    0,      abc800c,    abc800, abc800, abc800, "Luxor Datorer AB", "ABC 800 C", GAME_NOT_WORKING )
11671368COMP( 1983, abc802,     0,          0,      abc802,     abc802, abc800, abc802, "Luxor Datorer AB", "ABC 802",  GAME_NOT_WORKING )
11681369COMP( 1983, abc806,     0,          0,      abc806,     abc806, abc806, abc806, "Luxor Datorer AB", "ABC 806",  GAME_NOT_WORKING )
docs/messnew.txt
r3371r3372
3636System Driver Changes:
3737----------------------
3838
39- [ABC800M] Added keyboard hack to enable system use. [Curt Coder]
40
3941- [C16] Added support for tape emulation using MESS core functions (only
4042  loading, both .wav and .tap formats) [Fabio Priuli, Roberto Zandona']
4143

Previous 15994 Revisions Next


© 1998-2018 The MESS Team