mirror of
https://github.com/holub/mame
synced 2025-04-22 08:22:15 +03:00
(MESS) compis: Emulated the keyboard. [Curt Coder, Marcus Comstedt]
This commit is contained in:
parent
e2ee2a5bcd
commit
90e53abd38
@ -43,49 +43,9 @@
|
||||
#include "includes/compis.h"
|
||||
#include "formats/mfi_dsk.h"
|
||||
|
||||
#if 0
|
||||
/* TODO: this is likely to come from a RAMdac ... */
|
||||
static const unsigned char COMPIS_palette[16*3] =
|
||||
UINT32 compis_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
0, 0, 0,
|
||||
0, 0, 0,
|
||||
33, 200, 66,
|
||||
94, 220, 120,
|
||||
84, 85, 237,
|
||||
125, 118, 252,
|
||||
212, 82, 77,
|
||||
66, 235, 245,
|
||||
252, 85, 84,
|
||||
255, 121, 120,
|
||||
212, 193, 84,
|
||||
230, 206, 128,
|
||||
33, 176, 59,
|
||||
201, 91, 186,
|
||||
204, 204, 204,
|
||||
255, 255, 255
|
||||
};
|
||||
|
||||
PALETTE_INIT_MEMBER(compis_state,compis_gdc)
|
||||
{
|
||||
int i;
|
||||
|
||||
for ( i = 0; i < 16; i++ ) {
|
||||
palette_set_color_rgb(machine(), i, COMPIS_palette[i*3], COMPIS_palette[i*3+1], COMPIS_palette[i*3+2]);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void compis_state::palette_init()
|
||||
{
|
||||
palette_set_color(machine(), 0, RGB_BLACK); // black
|
||||
palette_set_color(machine(), 1, MAKE_RGB(0x00, 0xc0, 0x00)); // green
|
||||
palette_set_color(machine(), 2, MAKE_RGB(0x00, 0xff, 0x00)); // highlight
|
||||
}
|
||||
|
||||
UINT32 compis_state::screen_update_compis2(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
bitmap.fill(get_black_pen(machine()), cliprect);
|
||||
bitmap.fill(RGB_BLACK, cliprect);
|
||||
|
||||
m_crtc->screen_update(screen, bitmap, cliprect);
|
||||
|
||||
@ -95,11 +55,10 @@ UINT32 compis_state::screen_update_compis2(screen_device &screen, bitmap_rgb32 &
|
||||
static UPD7220_DISPLAY_PIXELS( hgdc_display_pixels )
|
||||
{
|
||||
compis_state *state = device->machine().driver_data<compis_state>();
|
||||
const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
|
||||
UINT8 i,gfx = state->m_video_ram[address];
|
||||
|
||||
for(i=0; i<8; i++)
|
||||
bitmap.pix32(y, x + i) = palette[BIT((gfx >> i), 0)];
|
||||
bitmap.pix32(y, x + i) = RGB_MONOCHROME_GREEN_HIGHLIGHT[BIT((gfx >> i), 0)];
|
||||
}
|
||||
|
||||
static UPD7220_INTERFACE( hgdc_intf )
|
||||
@ -118,171 +77,44 @@ WRITE8_MEMBER( compis_state::vram_w )
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( compis_mem , AS_PROGRAM, 16, compis_state )
|
||||
AM_RANGE( 0x00000, 0x3ffff) AM_RAM
|
||||
AM_RANGE( 0x40000, 0x4ffff) AM_RAM
|
||||
AM_RANGE( 0x50000, 0x5ffff) AM_RAM
|
||||
AM_RANGE( 0x60000, 0x6ffff) AM_RAM
|
||||
AM_RANGE( 0x70000, 0x7ffff) AM_RAM
|
||||
AM_RANGE( 0xe8000, 0xeffff) AM_ROM AM_REGION("maincpu",0)
|
||||
AM_RANGE( 0xf0000, 0xfffff) AM_ROM AM_REGION("maincpu",0) AM_WRITE8(vram_w, 0xffff)
|
||||
AM_RANGE(0x00000, 0x3ffff) AM_RAM
|
||||
AM_RANGE(0x40000, 0x4ffff) AM_RAM
|
||||
AM_RANGE(0x50000, 0x5ffff) AM_RAM
|
||||
AM_RANGE(0x60000, 0x6ffff) AM_RAM
|
||||
AM_RANGE(0x70000, 0x7ffff) AM_RAM
|
||||
AM_RANGE(0xe8000, 0xeffff) AM_ROM AM_REGION("maincpu",0)
|
||||
AM_RANGE(0xf0000, 0xfffff) AM_ROM AM_REGION("maincpu",0) AM_WRITE8(vram_w, 0xffff)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( compis_io, AS_IO, 16, compis_state )
|
||||
AM_RANGE( 0x0000, 0x0007) AM_DEVREADWRITE8("ppi8255", i8255_device, read, write, 0xff00)
|
||||
AM_RANGE( 0x0080, 0x0087) AM_DEVREADWRITE8("pit8253", pit8253_device, read, write, 0xffff)
|
||||
AM_RANGE( 0x0100, 0x011b) AM_DEVREADWRITE8("mm58274c", mm58274c_device, read, write, 0xffff)
|
||||
AM_RANGE( 0x0280, 0x0283) AM_DEVREADWRITE8("pic8259_master", pic8259_device, read, write, 0x00ff) /* 80150/80130 */
|
||||
//AM_RANGE( 0x0288, 0x028f) AM_READWRITE( compis_osp_pit_r, compis_osp_pit_w ) /* PIT 8254 (80150/80130) */
|
||||
AM_RANGE( 0x0310, 0x031f) AM_READWRITE8( compis_usart_r, compis_usart_w, 0xff00) /* USART 8251 Keyboard */
|
||||
AM_RANGE( 0x0330, 0x0333) AM_DEVREADWRITE8("upd7220", upd7220_device, read, write, 0x00ff) /* GDC 82720 PCS6:6 */
|
||||
AM_RANGE( 0x0340, 0x0343) AM_DEVICE8("i8272a", i8272a_device, map, 0x00ff) /* iSBX0 (J8) FDC 8272 */
|
||||
AM_RANGE( 0x0350, 0x0351) AM_DEVREADWRITE8("i8272a", i8272a_device, mdma_r, mdma_w, 0x00ff) /* iSBX0 (J8) DMA ACK */
|
||||
AM_RANGE( 0x034e, 0x034f) AM_READWRITE8(fdc_mon_r, fdc_mon_w, 0x00ff)
|
||||
//{ 0x0100, 0x017e, compis_null_r }, /* RTC */
|
||||
//{ 0x0180, 0x01ff, compis_null_r }, /* PCS3? */
|
||||
//{ 0x0200, 0x027f, compis_null_r }, /* Reserved */
|
||||
//{ 0x0280, 0x02ff, compis_null_r }, /* 80150 not used? */
|
||||
//{ 0x0300, 0x0300, compis_null_r }, /* Cassette motor */
|
||||
//{ 0x0301, 0x030f, compis_null_r}, /* DMA ACK Graphics */
|
||||
//{ 0x0310, 0x031e, compis_null_r }, /* SCC 8274 Int Ack */
|
||||
//{ 0x0320, 0x0320, compis_null_r }, /* SCC 8274 Serial port */
|
||||
//{ 0x0321, 0x032f, compis_null_r }, /* DMA Terminate */
|
||||
//{ 0x0331, 0x033f, compis_null_r }, /* DMA Terminate */
|
||||
//{ 0x0341, 0x034f, compis_null_r }, /* J8 CS1 (16-bit) */
|
||||
//{ 0x0350, 0x035e, compis_null_r }, /* J8 CS1 (8-bit) */
|
||||
//{ 0x0360, 0x036e, compis_null_r }, /* J9 CS0 (8/16-bit) */
|
||||
//{ 0x0361, 0x036f, compis_null_r }, /* J9 CS1 (16-bit) */
|
||||
//{ 0x0370, 0x037e, compis_null_r }, /* J9 CS1 (8-bit) */
|
||||
//{ 0x0371, 0x037f, compis_null_r }, /* J9 CS1 (8-bit) */
|
||||
//{ 0xff20, 0xffff, compis_null_r }, /* CPU 80186 */
|
||||
AM_RANGE(0x0000, 0x0007) /* PCS0 */ AM_MIRROR(0x78) AM_DEVREADWRITE8("ppi8255", i8255_device, read, write, 0xff00)
|
||||
AM_RANGE(0x0080, 0x0087) /* PCS1 */ AM_MIRROR(0x78) AM_DEVREADWRITE8("pit8253", pit8253_device, read, write, 0x00ff)
|
||||
AM_RANGE(0x0100, 0x011f) /* PCS2 */ AM_MIRROR(0x60) AM_DEVREADWRITE8("mm58274c", mm58274c_device, read, write, 0x00ff)
|
||||
//AM_RANGE(0x0180, 0x0181) /* PCS3 */ AM_MIRROR(0x7e)
|
||||
//AM_RANGE(0x0200, 0x0201) /* PCS4 */ AM_MIRROR(0x7e)
|
||||
AM_RANGE(0x0280, 0x0283) /* PCS5 */ AM_MIRROR(0x70) AM_DEVREADWRITE8("pic8259_master", pic8259_device, read, write, 0x00ff) /* 80150/80130 */
|
||||
AM_RANGE(0x0288, 0x028f) /* PCS5 */ AM_MIRROR(0x70) AM_DEVREADWRITE8("pit8254", pit8254_device, read, write, 0x00ff) /* 80150/80130 */
|
||||
//AM_RANGE(0x0300, 0x0301) /* PCS6:0 0x00ff */ AM_MIRROR(0xe) // cassette motor
|
||||
//AM_RANGE(0x0300, 0x0301) /* PCS6:1 0xff00 */ AM_MIRROR(0xe) // DMA-ACK graphics
|
||||
//AM_RANGE(0x0310, 0x0311) /* PCS6:2 0x00ff */ AM_MIRROR(0xe) // 8274 INTERRUPT ACKNOWLEDGE
|
||||
AM_RANGE(0x0310, 0x0311) /* PCS6:3 */ AM_MIRROR(0xc) AM_DEVREADWRITE8("uart", i8251_device, data_r, data_w, 0xff00)
|
||||
AM_RANGE(0x0312, 0x0313) /* PCS6:3 */ AM_MIRROR(0xc) AM_DEVREADWRITE8("uart", i8251_device, status_r, control_w, 0xff00)
|
||||
//AM_RANGE(0x0320, 0x0321) /* PCS6:4 0x00ff */ AM_MIRROR(0xe) // 8274
|
||||
//AM_RANGE(0x0320, 0x0321) /* PCS6:5 0xff00 */ AM_MIRROR(0xe) // DMA-TERMINATE J8 (iSBX0)
|
||||
AM_RANGE(0x0330, 0x0333) /* PCS6:6 */ AM_DEVREADWRITE8("upd7220", upd7220_device, read, write, 0x00ff)
|
||||
//AM_RANGE(0x0330, 0x0331) /* PCS6:7 0xff00 */ AM_MIRROR(0xe) // DMA-TERMINATE J9 (iSBX1)
|
||||
AM_RANGE(0x0340, 0x0343) /* PCS6:8 */ AM_DEVICE8("i8272a", i8272a_device, map, 0x00ff) // 8272 CS0 (8/16-bit) J8 (iSBX0)
|
||||
AM_RANGE(0x034e, 0x034f) /* PCS6:8 */ AM_READWRITE8(fdc_mon_r, fdc_mon_w, 0x00ff) // 8272 CS0 (8/16-bit) J8 (iSBX0)
|
||||
//AM_RANGE(0x0340, 0x0341) /* PCS6:9 0xff00 */ AM_MIRROR(0xe) // CS1 (16-bit) J8 (iSBX0)
|
||||
//AM_RANGE(0x0350, 0x0351) /* PCS6:10 0x00ff */ AM_MIRROR(0xe) // CS1 (8-bit) J8 (iSBX0)
|
||||
AM_RANGE(0x0350, 0x0351) /* PCS6:11 */ AM_MIRROR(0xe) AM_DEVREADWRITE8("i8272a", i8272a_device, mdma_r, mdma_w, 0xff00) // DMA-ACK J8 (iSBX0)
|
||||
//AM_RANGE(0x0360, 0x0361) /* PCS6:13 0x00ff */ AM_MIRROR(0xe) // CS0 (8/16-bit) J9 (iSBX1)
|
||||
//AM_RANGE(0x0360, 0x0361) /* PCS6:13 0xff00 */ AM_MIRROR(0xe) // CS1 (16-bit) J9 (iSBX1)
|
||||
//AM_RANGE(0x0370, 0x0371) /* PCS6:14 0x00ff */ AM_MIRROR(0xe) // CS1 (8-bit) J9 (iSBX1)
|
||||
//AM_RANGE(0x0370, 0x0371) /* PCS6:15 0xff00 */ AM_MIRROR(0xe) // DMA-ACK J9 (iSBX1)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
/* COMPIS Keyboard */
|
||||
|
||||
/* 2008-05 FP:
|
||||
Small note about natural keyboard: currently,
|
||||
- Both "SShift" keys (left and right) are not mapped
|
||||
- Keypad '00' and '000' are not mapped
|
||||
- "Compis !" is mapped to 'F3'
|
||||
- "Compis ?" is mapped to 'F4'
|
||||
- "Compis |" is mapped to 'F5'
|
||||
- "Compis S" is mapped to 'F6'
|
||||
- "Avbryt" is mapped to 'F7'
|
||||
- "Inpassa" is mapped to 'Insert'
|
||||
- "S?k" is mapped to "Print Screen"
|
||||
- "Utpl?na"is mapped to 'Delete'
|
||||
- "Start / Stop" is mapped to 'Pause'
|
||||
- "TabL" is mapped to 'Page Up'
|
||||
- "TabR" is mapped to 'Page Down'
|
||||
*/
|
||||
|
||||
static INPUT_PORTS_START (compis)
|
||||
PORT_START("ROW0")
|
||||
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))
|
||||
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"')
|
||||
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
|
||||
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
|
||||
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('/')
|
||||
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
|
||||
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
|
||||
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR('=')
|
||||
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('+') PORT_CHAR('?')
|
||||
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("\xC2\xB4 `") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('`')
|
||||
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
|
||||
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t')
|
||||
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
|
||||
|
||||
PORT_START("ROW1")
|
||||
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
|
||||
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
|
||||
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
|
||||
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
|
||||
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
|
||||
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
|
||||
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(a_RING " " A_RING) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR(0x00E5) PORT_CHAR(0x00C5)
|
||||
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(u_UMLAUT " " U_UMLAUT) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(0x00FC) PORT_CHAR(0x00DC)
|
||||
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
|
||||
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Caps") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
|
||||
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
|
||||
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
|
||||
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
|
||||
|
||||
PORT_START("ROW2")
|
||||
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
|
||||
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
|
||||
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
|
||||
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(o_UMLAUT " " O_UMLAUT) PORT_CODE(KEYCODE_COLON) PORT_CHAR(0x00F6) PORT_CHAR(0x00D6)
|
||||
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(a_UMLAUT " " A_UMLAUT) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(0x00E4) PORT_CHAR(0x00C4)
|
||||
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("'' *") PORT_CODE(KEYCODE_TILDE) PORT_CHAR('*')
|
||||
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Shift (Left)") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
|
||||
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('<') PORT_CHAR('>')
|
||||
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
|
||||
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
|
||||
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
|
||||
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
|
||||
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
|
||||
|
||||
PORT_START("ROW3")
|
||||
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
|
||||
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR(';')
|
||||
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR(':')
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('-') PORT_CHAR('_')
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Shift (Right)") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
|
||||
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("SShift (Left)") PORT_CODE(KEYCODE_LALT)
|
||||
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL))
|
||||
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
|
||||
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_MAMEKEY(RCONTROL))
|
||||
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("SShift (Right)") PORT_CODE(KEYCODE_RALT)
|
||||
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("INPASSA") PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
|
||||
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("S" O_UMLAUT "K") PORT_CODE(KEYCODE_PRTSCR) PORT_CHAR(UCHAR_MAMEKEY(PRTSCR))
|
||||
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("UTPL" A_RING "NA") PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL))
|
||||
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("START-STOP") PORT_CODE(KEYCODE_PAUSE) PORT_CHAR(UCHAR_MAMEKEY(PAUSE))
|
||||
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
|
||||
|
||||
PORT_START("ROW4")
|
||||
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("AVBRYT") PORT_CODE(KEYCODE_SCRLOCK) PORT_CHAR(UCHAR_MAMEKEY(F7))
|
||||
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(UTF8_LEFT) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("HOME") PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME))
|
||||
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(UTF8_RIGHT) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("TABL") PORT_CODE(KEYCODE_PGUP) PORT_CHAR(UCHAR_MAMEKEY(PGUP))
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(UTF8_DOWN) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
|
||||
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("TABR") PORT_CODE(KEYCODE_PGDN) PORT_CHAR(UCHAR_MAMEKEY(PGDN))
|
||||
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("COMPIS !") PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3))
|
||||
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("COMPIS ?") PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4))
|
||||
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("COMPIS |") PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5))
|
||||
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))
|
||||
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))
|
||||
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("COMPIS S") PORT_CODE(KEYCODE_NUMLOCK) PORT_CHAR(UCHAR_MAMEKEY(F6))
|
||||
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD))
|
||||
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD))
|
||||
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD))
|
||||
|
||||
PORT_START("ROW5")
|
||||
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD))
|
||||
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD))
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD))
|
||||
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD))
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD))
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD))
|
||||
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD))
|
||||
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad 00") PORT_CODE(KEYCODE_SLASH_PAD)
|
||||
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad 000") PORT_CODE(KEYCODE_ASTERISK)
|
||||
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad Enter") PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD))
|
||||
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad ,") PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD))
|
||||
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad -") PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD))
|
||||
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Keypad +") PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD))
|
||||
PORT_BIT( 0xE000, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
|
||||
PORT_START("DSW0")
|
||||
PORT_DIPNAME( 0x18, 0x00, "S8 Test mode")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Normal ) )
|
||||
@ -331,9 +163,6 @@ static MACHINE_CONFIG_START( compis, compis_state )
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", compis_state, compis_vblank_int)
|
||||
MCFG_80186_IRQ_SLAVE_ACK(DEVREAD8(DEVICE_SELF, compis_state, compis_irq_callback))
|
||||
|
||||
//MCFG_QUANTUM_TIME(attotime::from_hz(60))
|
||||
|
||||
|
||||
/* video hardware */
|
||||
MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
@ -342,11 +171,6 @@ static MACHINE_CONFIG_START( compis, compis_state )
|
||||
MCFG_SCREEN_SIZE(640, 480)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
|
||||
MCFG_SCREEN_UPDATE_DEVICE("upd7220", upd7220_device, screen_update)
|
||||
#if 0
|
||||
MCFG_PALETTE_LENGTH(16)
|
||||
MCFG_PALETTE_INIT_OVERRIDE(compis_state,compis_gdc)
|
||||
#endif
|
||||
MCFG_PALETTE_LENGTH(3)
|
||||
|
||||
/* Devices */
|
||||
MCFG_PIT8253_ADD( "pit8253", compis_pit8253_config )
|
||||
@ -374,9 +198,6 @@ static MACHINE_CONFIG_START( compis2, compis_state )
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", compis_state, compis_vblank_int)
|
||||
MCFG_80186_IRQ_SLAVE_ACK(DEVREAD8(DEVICE_SELF, compis_state, compis_irq_callback))
|
||||
|
||||
//MCFG_QUANTUM_TIME(attotime::from_hz(60))
|
||||
|
||||
|
||||
/* video hardware */
|
||||
MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
@ -384,8 +205,7 @@ static MACHINE_CONFIG_START( compis2, compis_state )
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
|
||||
MCFG_SCREEN_SIZE(640, 400)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 400-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(compis_state, screen_update_compis2)
|
||||
MCFG_PALETTE_LENGTH(3)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(compis_state, screen_update)
|
||||
|
||||
/* Devices */
|
||||
MCFG_PIT8253_ADD( "pit8253", compis_pit8253_config )
|
||||
@ -435,5 +255,5 @@ ROM_START( compis2 )
|
||||
ROM_END
|
||||
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
|
||||
COMP(1985, compis, 0, 0, compis, compis, compis_state, compis, "Telenova", "Compis" , GAME_NOT_WORKING | GAME_NO_SOUND)
|
||||
COMP(1986, compis2, compis, 0, compis2, compis, compis_state, compis, "Telenova", "Compis II" , GAME_NOT_WORKING | GAME_NO_SOUND)
|
||||
COMP(1985, compis, 0, 0, compis, compis, driver_device, 0, "Telenova", "Compis" , GAME_NOT_WORKING )
|
||||
COMP(1986, compis2, compis, 0, compis2, compis, driver_device, 0, "Telenova", "Compis II" , GAME_NOT_WORKING )
|
||||
|
@ -26,50 +26,6 @@
|
||||
#include "machine/compiskb.h"
|
||||
#include "formats/cpis_dsk.h"
|
||||
|
||||
|
||||
/* Keyboard */
|
||||
struct TYP_COMPIS_KEYBOARD
|
||||
{
|
||||
UINT8 nationality; /* Character set, keyboard layout (Swedish) */
|
||||
UINT8 release_time; /* Autorepeat release time (0.8) */
|
||||
UINT8 speed; /* Transmission speed (14) */
|
||||
UINT8 roll_over; /* Key roll-over (MKEY) */
|
||||
UINT8 click; /* Key click (NO) */
|
||||
UINT8 break_nmi; /* Keyboard break (NMI) */
|
||||
UINT8 beep_freq; /* Beep frequency (low) */
|
||||
UINT8 beep_dura; /* Beep duration (short) */
|
||||
UINT8 password[8]; /* Password */
|
||||
UINT8 owner[16]; /* Owner */
|
||||
UINT8 network_id; /* Network workstation number (1) */
|
||||
UINT8 boot_order[4]; /* Boot device order (FD HD NW PD) */
|
||||
UINT8 key_code;
|
||||
UINT8 key_status;
|
||||
};
|
||||
|
||||
/* USART 8251 */
|
||||
struct TYP_COMPIS_USART
|
||||
{
|
||||
UINT8 status;
|
||||
UINT8 bytes_sent;
|
||||
};
|
||||
|
||||
/* Printer */
|
||||
struct TYP_COMPIS_PRINTER
|
||||
{
|
||||
UINT8 data;
|
||||
UINT8 strobe;
|
||||
};
|
||||
|
||||
|
||||
/* Main emulation */
|
||||
struct TYP_COMPIS
|
||||
{
|
||||
TYP_COMPIS_PRINTER printer; /* Printer */
|
||||
TYP_COMPIS_USART usart; /* USART 8251 */
|
||||
TYP_COMPIS_KEYBOARD keyboard; /* Keyboard */
|
||||
};
|
||||
|
||||
|
||||
class compis_state : public driver_device
|
||||
{
|
||||
public:
|
||||
@ -97,33 +53,25 @@ public:
|
||||
required_device<mm58274c_device> m_rtc;
|
||||
required_device<i8272a_device> m_fdc;
|
||||
required_device<upd7220_device> m_crtc;
|
||||
DECLARE_READ8_MEMBER(compis_usart_r);
|
||||
DECLARE_WRITE8_MEMBER(compis_usart_w);
|
||||
DECLARE_WRITE8_MEMBER(vram_w);
|
||||
DECLARE_READ8_MEMBER(compis_ppi_port_b_r);
|
||||
DECLARE_WRITE8_MEMBER(compis_ppi_port_c_w);
|
||||
DECLARE_READ16_MEMBER(compis_osp_pit_r);
|
||||
DECLARE_WRITE16_MEMBER(compis_osp_pit_w);
|
||||
TYP_COMPIS m_compis;
|
||||
UINT8 *m_p_videoram;
|
||||
void compis_fdc_tc(int state);
|
||||
DECLARE_READ8_MEMBER(fdc_mon_r);
|
||||
DECLARE_WRITE8_MEMBER(fdc_mon_w);
|
||||
bool m_mon;
|
||||
DECLARE_WRITE_LINE_MEMBER(tmr2_w);
|
||||
|
||||
void fdc_irq(bool state);
|
||||
void fdc_drq(bool state);
|
||||
|
||||
required_shared_ptr<UINT8> m_video_ram;
|
||||
DECLARE_DRIVER_INIT(compis);
|
||||
virtual void machine_start();
|
||||
virtual void machine_reset();
|
||||
virtual void palette_init();
|
||||
UINT32 screen_update_compis2(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
INTERRUPT_GEN_MEMBER(compis_vblank_int);
|
||||
DECLARE_READ8_MEMBER(compis_irq_callback);
|
||||
void compis_keyb_update();
|
||||
void compis_keyb_init();
|
||||
void compis_fdc_reset();
|
||||
};
|
||||
|
||||
|
@ -18,24 +18,6 @@
|
||||
/* Defines, constants, and global variables */
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* Keyboard */
|
||||
static const UINT8 compis_keyb_codes[6][16] = {
|
||||
{0x39, 0x32, 0x29, 0x20, 0x17, 0x0e, 0x05, 0x56, 0x4d, 0x44, 0x08, 0x57, 0x59, 0x4e, 0x43, 0x3a},
|
||||
{0x31, 0x28, 0x1f, 0x16, 0x0d, 0x04, 0x55, 0x4c, 0x4f, 0x58, 0x00, 0x07, 0xff, 0x42, 0x3b, 0x30},
|
||||
{0x27, 0x1e, 0x15, 0x0c, 0x03, 0x54, 0x06, 0x50, 0x01, 0xfe, 0x38, 0x2f, 0x26, 0x1d, 0x14, 0x0b},
|
||||
{0x02, 0x53, 0x4a, 0x48, 0x51, 0xfe, 0xfd, 0xfc, 0x40, 0xfc, 0xfd, 0x0f, 0x18, 0x21, 0x22, 0x34},
|
||||
{0x10, 0x11, 0x1a, 0x23, 0x1b, 0x2d, 0x04, 0x0a, 0x13, 0x1c, 0x2a, 0x3c, 0x33, 0x19, 0x46, 0x2b},
|
||||
{0x2c, 0x3e, 0x35, 0x12, 0x3f, 0x24, 0x25, 0x37, 0x2e, 0x45, 0x3d, 0x47, 0x36, 0x00, 0x00, 0x00}
|
||||
};
|
||||
|
||||
enum COMPIS_KEYB_SHIFT
|
||||
{
|
||||
KEY_CAPS_LOCK = 0xff,
|
||||
KEY_SHIFT = 0xfe,
|
||||
KEY_SUPER_SHIFT = 0xfd,
|
||||
KEY_CTRL = 0xfc
|
||||
};
|
||||
|
||||
enum COMPIS_USART_STATES
|
||||
{
|
||||
COMPIS_USART_STATUS_TX_READY = 0x01,
|
||||
@ -65,71 +47,6 @@ enum COMPIS_INTERRUPT_REQUESTS
|
||||
|
||||
/* Main emulation */
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
/* Keyboard */
|
||||
/*-------------------------------------------------------------------------*/
|
||||
// TODO: make the low level keyboard emulation work
|
||||
void compis_state::compis_keyb_update()
|
||||
{
|
||||
UINT8 key_code;
|
||||
UINT8 key_status;
|
||||
UINT8 irow;
|
||||
UINT8 icol;
|
||||
UINT16 data;
|
||||
UINT16 ibit;
|
||||
static const char *const rownames[] = { "ROW0", "ROW1", "ROW2", "ROW3", "ROW4", "ROW5" };
|
||||
|
||||
key_code = 0;
|
||||
key_status = 0x80;
|
||||
|
||||
for (irow = 0; irow < 6; irow++)
|
||||
{
|
||||
data = machine().root_device().ioport(rownames[irow])->read();
|
||||
if (data != 0xffff)
|
||||
{
|
||||
ibit = 1;
|
||||
for (icol = 0; icol < 16; icol++)
|
||||
{
|
||||
if (!(data & ibit))
|
||||
{
|
||||
switch(compis_keyb_codes[irow][icol])
|
||||
{
|
||||
case KEY_SHIFT:
|
||||
key_status |= 0x01;
|
||||
break;
|
||||
case KEY_CAPS_LOCK:
|
||||
key_status |= 0x02;
|
||||
break;
|
||||
case KEY_CTRL:
|
||||
key_status |= 0x04;
|
||||
break;
|
||||
case KEY_SUPER_SHIFT:
|
||||
key_status |= 0x08;
|
||||
break;
|
||||
default:
|
||||
key_code = compis_keyb_codes[irow][icol];
|
||||
}
|
||||
}
|
||||
ibit <<= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (key_code != 0)
|
||||
{
|
||||
m_compis.keyboard.key_code = key_code;
|
||||
m_compis.keyboard.key_status = key_status;
|
||||
m_compis.usart.bytes_sent = 1;
|
||||
m_uart->receive_character(key_code);
|
||||
}
|
||||
}
|
||||
|
||||
void compis_state::compis_keyb_init()
|
||||
{
|
||||
m_compis.keyboard.key_code = 0;
|
||||
m_compis.keyboard.key_status = 0x80;
|
||||
m_compis.usart.bytes_sent = 0;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
/* FDC iSBX-218A */
|
||||
/*-------------------------------------------------------------------------*/
|
||||
@ -235,97 +152,49 @@ const struct pit8253_interface compis_pit8253_config =
|
||||
{
|
||||
{
|
||||
/* Timer0 */
|
||||
{4770000/4, DEVCB_NULL, DEVCB_NULL },
|
||||
{XTAL_16MHz/8, DEVCB_LINE_VCC, DEVCB_NULL }, // TMR3
|
||||
/* Timer1 */
|
||||
{4770000/4, DEVCB_NULL, DEVCB_NULL },
|
||||
{XTAL_16MHz/8, DEVCB_LINE_VCC, DEVCB_NULL }, // TMR4
|
||||
/* Timer2 */
|
||||
{4770000/4, DEVCB_NULL, DEVCB_NULL }
|
||||
{XTAL_16MHz/8, DEVCB_LINE_VCC, DEVCB_NULL } // TMR5
|
||||
}
|
||||
};
|
||||
|
||||
WRITE_LINE_MEMBER( compis_state::tmr2_w )
|
||||
{
|
||||
m_uart->rxc_w(state);
|
||||
m_uart->txc_w(state);
|
||||
}
|
||||
|
||||
const struct pit8253_interface compis_pit8254_config =
|
||||
{
|
||||
{
|
||||
/* Timer0 */
|
||||
{4770000/4, DEVCB_NULL, DEVCB_NULL },
|
||||
{XTAL_16MHz/2, DEVCB_LINE_VCC, DEVCB_NULL /*DEVCB_DEVICE_LINE_MEMBER("pic8259_master", pic8259_device, ir3_w)*/ }, // SYSTICK
|
||||
/* Timer1 */
|
||||
{4770000/4, DEVCB_NULL, DEVCB_NULL },
|
||||
{XTAL_16MHz/2, DEVCB_LINE_VCC, DEVCB_DEVICE_LINE_MEMBER("pic8259_master", pic8259_device, ir7_w) }, // DELAY
|
||||
/* Timer2 */
|
||||
{4770000/4, DEVCB_NULL, DEVCB_NULL }
|
||||
{7932659, DEVCB_LINE_VCC, DEVCB_DRIVER_LINE_MEMBER(compis_state, tmr2_w) } // BAUD
|
||||
}
|
||||
};
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
/* OSP PIT 8254 */
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
READ16_MEMBER( compis_state::compis_osp_pit_r )
|
||||
{
|
||||
return m_8254->read(space, offset);
|
||||
}
|
||||
|
||||
WRITE16_MEMBER( compis_state::compis_osp_pit_w )
|
||||
{
|
||||
m_8254->write(space, offset, data);
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
/* USART 8251 */
|
||||
/*-------------------------------------------------------------------------*/
|
||||
const i8251_interface compis_usart_interface=
|
||||
{
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_DEVICE_LINE_MEMBER(COMPIS_KEYBOARD_TAG, compis_keyboard_device, so_r),
|
||||
DEVCB_DEVICE_LINE_MEMBER(COMPIS_KEYBOARD_TAG, compis_keyboard_device, si_w),
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_DEVICE_LINE_MEMBER("pic8259_master", pic8259_device, ir2_w),
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL, //DEVCB_DEVICE_LINE_MEMBER("maincpu", i80186_cpu_device, int1_w),
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL
|
||||
};
|
||||
|
||||
READ8_MEMBER( compis_state::compis_usart_r )
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0x00:
|
||||
{
|
||||
UINT8 data = m_uart->data_r(space, 0);
|
||||
if(m_compis.usart.bytes_sent == 1)
|
||||
{
|
||||
m_compis.usart.bytes_sent = 2;
|
||||
m_uart->receive_character(m_compis.keyboard.key_status);
|
||||
}
|
||||
return data;
|
||||
}
|
||||
case 0x01:
|
||||
return m_uart->status_r(space, 0);
|
||||
break;
|
||||
default:
|
||||
logerror("USART Unknown Port Read %04X\n", offset);
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( compis_state::compis_usart_w )
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0x00:
|
||||
m_uart->data_w(space, 0, data);
|
||||
break;
|
||||
case 0x01:
|
||||
m_uart->control_w(space, 0, data);
|
||||
break;
|
||||
default:
|
||||
logerror("USART Unknown Port Write %04X = %04X\n", offset, data);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
/* Name: compis */
|
||||
/* Desc: Driver - Init */
|
||||
@ -342,12 +211,6 @@ READ8_MEMBER(compis_state::compis_irq_callback)
|
||||
return m_8259m->inta_r();
|
||||
}
|
||||
|
||||
|
||||
DRIVER_INIT_MEMBER(compis_state,compis)
|
||||
{
|
||||
memset (&m_compis, 0, sizeof (m_compis) );
|
||||
}
|
||||
|
||||
void compis_state::machine_start()
|
||||
{
|
||||
m_fdc->setup_intrq_cb(i8272a_device::line_cb(FUNC(compis_state::fdc_irq), this));
|
||||
@ -361,9 +224,6 @@ void compis_state::machine_reset()
|
||||
{
|
||||
/* FDC */
|
||||
compis_fdc_reset();
|
||||
|
||||
/* Keyboard */
|
||||
compis_keyb_init();
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
@ -373,5 +233,4 @@ void compis_state::machine_reset()
|
||||
INTERRUPT_GEN_MEMBER(compis_state::compis_vblank_int)
|
||||
{
|
||||
// compis_gdc_vblank_int();
|
||||
compis_keyb_update();
|
||||
}
|
||||
|
@ -9,14 +9,6 @@
|
||||
|
||||
*********************************************************************/
|
||||
|
||||
/*
|
||||
|
||||
TODO:
|
||||
|
||||
- serial clocks are out of sync
|
||||
|
||||
*/
|
||||
|
||||
#include "compiskb.h"
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user