Previous 199869 Revisions Next

r19774 Monday 24th December, 2012 at 16:02:56 UTC by Robbbert
(MESS) Pencil2 : sound, video, keyboard mostly working [Robbbert]
[src/mess/drivers]pencil2.c

trunk/src/mess/drivers/pencil2.c
r19773r19774
11/***************************************************************************
22
3    Skeleton driver for Hanimex Pencil II
3    Hanimex Pencil II
44    Manufactured by Soundic, Hong Kong.
55
6    2012-11-06
6    2012-11-06 [Robbbert]
77
8    TODO:
9    - Everything - this is just a skeleton
8    Computer kindly donated for MESS by Ian Farquhar.
109
11
12    Information found by looking inside the computer
13    ------------------------------------------------
10Information found by looking inside the computer
11------------------------------------------------
1412Main Board PEN-002 11-50332-10
1513
1614J1 Expansion slot
r19773r19774
6462
6563
6664ToDo:
67- Keyboard
65- Keys missing (Shift, Ctrl, F1 to F6, Esc)
6866- Printer (out 00)
6967- Cassette
7068- Joysticks
71- Colours are different to the real system
72- RAM banking
7369- Cart slot
74- Size of vram
75- When BASIC starts the intro is off the top of the screen
70- Screen size is wrong in BASIC. Should be 24 lines of text with a wide
71  border all around.
7672
7773****************************************************************************/
7874
r19773r19774
9490   { }
9591
9692   required_device<cpu_device> m_maincpu;
97   //DECLARE_READ8_MEMBER(port00_r) { return 0x80; };
98   //DECLARE_READ8_MEMBER(port0f_r) { return 0x05; };
93   DECLARE_WRITE8_MEMBER(port80_w);
94   DECLARE_READ8_MEMBER(porte0_r);
9995   virtual void machine_reset();
10096};
10197
10298static ADDRESS_MAP_START(pencil2_mem, AS_PROGRAM, 8, pencil2_state)
10399   ADDRESS_MAP_UNMAP_HIGH
104100   AM_RANGE(0x0000, 0x1fff) AM_ROM
101   AM_RANGE(0x2000, 0x5FFF) AM_WRITENOP  // stop error log filling up
105102   AM_RANGE(0x6000, 0x67ff) AM_MIRROR(0x1800) AM_RAM
106103   AM_RANGE(0x8000, 0xffff) AM_ROM
107104ADDRESS_MAP_END
108105
109106static ADDRESS_MAP_START(pencil2_io, AS_IO, 8, pencil2_state)
110   //ADDRESS_MAP_UNMAP_HIGH
107   ADDRESS_MAP_UNMAP_HIGH
111108   ADDRESS_MAP_GLOBAL_MASK(0xff)
112   //AM_RANGE(0x00, 0x00) AM_READ(port00_r)
113   //AM_RANGE(0x0f, 0x0f) AM_READ(port0f_r)
114   //AM_RANGE(0x20, 0x20) AM_WRITENOP
115   AM_RANGE(0xbe, 0xbe) AM_DEVREADWRITE("tms9928a", tms9928a_device, vram_read, vram_write)
116   AM_RANGE(0xbf, 0xbf) AM_DEVREADWRITE("tms9928a", tms9928a_device, register_read, register_write)
117   AM_RANGE(0xe0, 0xff) AM_DEVWRITE("sn76489a", sn76489a_device, write)
109   AM_RANGE(0x80, 0x9f) AM_WRITE(port80_w)
110   AM_RANGE(0xa0, 0xa0) AM_MIRROR(0x1e) AM_DEVREADWRITE("tms9928a", tms9928a_device, vram_read, vram_write)
111   AM_RANGE(0xa1, 0xa1) AM_MIRROR(0x1e) AM_DEVREADWRITE("tms9928a", tms9928a_device, register_read, register_write)
112   AM_RANGE(0xe0, 0xff) AM_READ(porte0_r) AM_DEVWRITE("sn76489a", sn76489a_device, write)
118113ADDRESS_MAP_END
119114
115READ8_MEMBER( pencil2_state::porte0_r)
116{
117   char kbdrow[6];
118   sprintf(kbdrow,"X%X",offset);
119   return ioport( kbdrow )->read();
120}
120121
122WRITE8_MEMBER( pencil2_state::port80_w )
123{
124}
125
126
121127/* Input ports */
122128static INPUT_PORTS_START( pencil2 )
129   PORT_START("X0")
130   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_UP)
131   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RIGHT)
132   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DOWN)
133   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LEFT)
134   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7_PAD)
135   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8_PAD)
136   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Stop") PORT_CODE(KEYCODE_END)
137   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
138
139   PORT_START("X1")
140   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('J')
141   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',')
142   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.')
143   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('M')
144   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
145   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('F')
146   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('N')
147   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
148
149   PORT_START("X3")
150   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
151   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
152   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(32)
153   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('C')
154   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
155   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('B')
156   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('H')
157   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
158
159   PORT_START("X4")
160   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
161   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('O')
162   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('P')
163   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('I')
164   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
165   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4')
166   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('T')
167   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
168
169   PORT_START("X6")
170   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q')
171   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('W')
172   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('X')
173   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('E')
174   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7')
175   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5')
176   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6')
177   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
178
179   PORT_START("X8")
180   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(':')
181   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('L')
182   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(';')
183   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('K')
184   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
185   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('R')
186   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('G')
187   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
188
189   PORT_START("XA")
190   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z')
191   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('A')
192   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('S')
193   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('D')
194   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('U')
195   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('V')
196   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y')
197   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
198
199   PORT_START("X10")
200   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-')
201   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9')
202   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0')
203   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8')
204   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
205   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1_PAD) // 0xF7
206   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2_PAD) // 0xF9
207   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
208
209   PORT_START("X12")
210   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1')
211   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2')
212   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3')
213   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3_PAD) // 0xF6
214   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4_PAD) // 0xFB
215   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5_PAD) // 0xF8
216   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6_PAD) // 0xFA
217   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
123218INPUT_PORTS_END
124219
125220
r19773r19774
135230static TMS9928A_INTERFACE(pencil2_tms9928a_interface)
136231{
137232   "screen",   // screen tag
138   0x4000,      // vram size (guess)
233   0x4000,      // vram size
139234   DEVCB_NULL   // write line if int changes
140235};
141236

Previous 199869 Revisions Next


© 1997-2024 The MAME Team