r8646 Tuesday 27th July, 2010 at 23:21:57 UTC by Angelo Salese
[BASIC MASTER LV3]: Added keyboard inputs, fixed a bunch of video display quirks
[src/mess/drivers]bml3.c

src/mess/drivers/bml3.c
r8645r8646
3232      {
3333         int tile = vram[count+0x0000];
3434         int color = vram[count+0x4000] & 7;
35         int reverse = vram[count+0x4000] & 8;
3536         //attr & 0x10 is used ... bitmap mode? (apparently bits 4 and 7 are used for that)
3637
3738         for(yi=0;yi<8;yi++)
r8645r8646
4041            {
4142               int pen;
4243
43               pen = (gfx_rom[tile*8+yi] >> (7-xi) & 1) ? color : 0;
44               if(reverse)
45                  pen = (gfx_rom[tile*8+yi] >> (7-xi) & 1) ? 0 : color;
46               else
47                  pen = (gfx_rom[tile*8+yi] >> (7-xi) & 1) ? color : 0;
4448
4549               *BITMAP_ADDR16(bitmap, y*8+yi, x*8+xi) = screen->machine->pens[pen];
4650            }
r8645r8646
100104   }
101105}
102106
103/*
104Keyboard scancode table (notice that we're using Sharp X1 char, so some bits might be different):
1050x00: right or space
1060x01: up
1070x02: ?
1080x03: left
1090x04: down
1100x05: right or space
1110x06
1120x07: (changes the items at the bottom, caps lock?)
1130x08
1140x09
1150x0a
1160x0b
1170x0c
1180x0d: 8
1190x0e: 9
1200x0f: *
1210x10: 7
1220x11: 4
1230x12: 6
1240x13: 8
1250x14: 0
1260x15: ^
1270x16: -
1280x17: 3
1290x18: backspace
1300x19: 5
1310x1a: 1
1320x1b: 2
1330x1c: 9
1340x1d: 7
1350x1e: backspace
1360x1f: Yen symbol?
1370x20: U
1380x21: R
1390x22: Y
1400x23: I
1410x24: P
1420x25: [
1430x26: @
1440x27: 0
1450x28: Q
1460x29: T
1470x2a: W
1480x2b: E
1490x2c: O
1500x2d: .
1510x2e: HOME
1520x2f: ENTER
1530x30: J
1540x31: F
1550x32: H
1560x33: K
1570x34: ;
1580x35: ]
1590x36: :
1600x37: 4
1610x38: A
1620x39: G
1630x3a: S
1640x3b: D
1650x3c: L
1660x3d: 5
1670x3e: 6
1680x3f: -
1690x40: M
1700x41: V
1710x42: N
1720x43: ,
1730x44: /
1740x45: /
1750x46: _
1760x47: 1
1770x48: Z
1780x49: B
1790x4a: X
1800x4b: C
1810x4c: .
1820x4d: 2
1830x4e: 3
1840x4f: +
1850x50: PF1
1860x51: PF2
1870x52: PF3
1880x53: PF4
1890x54: PF5
1900x55-0x7f: unused
191*/
192
193107static READ8_HANDLER( bml3_keyboard_r )
194108{
195   static int scancode;
109   const char* portnames[3] = { "key1","key2","key3" };
110   int i,port_i,scancode;
111   scancode = 0;
196112
197   if(input_code_pressed_once(space->machine, KEYCODE_Z))
198      scancode++;
113   for(port_i=0;port_i<3;port_i++)
114   {
115      for(i=0;i<32;i++)
116      {
117         if((input_port_read(space->machine,portnames[port_i])>>i) & 1)
118            return scancode | 0x80;
199119
200   if(input_code_pressed_once(space->machine, KEYCODE_X))
201      scancode--;
120         scancode++;
121      }
122   }
202123
203   popmessage("%02x",scancode);
204
205   return scancode | 0x80;
124   return 0;
206125}
207126
208127/* Note: this custom code is there just for simplicity, it'll be nuked in the end */
r8645r8646
210129{
211130   static UINT8 *rom = memory_region(space->machine, "maincpu");
212131
213   if(offset == 0xc8) //???
214      return 0;
215
216   if(offset == 0xc9)
217      return 0x11; //put 320 x 200 mode
218
132//   if(offset == 0xc4) return bml3_cmt_r(space,0); //maybe 0xc4 is the status and 0xc5 the data? d7 and ea seems to be related too
133   if(offset == 0xc8) return 0; //??? checks bit 7, scrolls vertically if active high
134   if(offset == 0xc9) return 0x11; //0x01 put 320 x 200 mode, 0x07 = 640 x 375
135   if(offset == 0xd8) return attr_latch;
219136   if(offset == 0xe0) return bml3_keyboard_r(space,0);
220137
221//   if(offset == 0xcb || offset == 0xc4)
138//   if(offset == 0xcb)
222139
223140//   if(offset == 0x40 || offset == 0x42 || offset == 0x44 || offset == 0x46)
224141
r8645r8646
247164{
248165   static UINT8 *vram = memory_region(space->machine, "vram");
249166
250   /* TODO: this presumably also triggers an attr latch read */
167   /* TODO: this presumably also triggers an attr latch read, unsure yet */
168   attr_latch = vram[offset+0x4000];
251169
252170   return vram[offset];
253171}
r8645r8646
271189
272190
273191/* Input ports */
192
274193static INPUT_PORTS_START( bml3 )
194   PORT_START("key1") //0x00-0x1f
195   PORT_BIT(0x00000001,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
196   PORT_BIT(0x00000002,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Up") PORT_CODE(KEYCODE_UP)
197   PORT_BIT(0x00000004,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("?")
198   PORT_BIT(0x00000008,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT)
199   PORT_BIT(0x00000010,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN)
200   PORT_BIT(0x00000020,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT)
201   PORT_BIT(0x00000040,IP_ACTIVE_HIGH,IPT_UNKNOWN)
202   PORT_BIT(0x00000080,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Caps Lock?")// (changes the items at the bottom, caps lock?)
203   PORT_BIT(0x00000100,IP_ACTIVE_HIGH,IPT_UNKNOWN)
204   PORT_BIT(0x00000200,IP_ACTIVE_HIGH,IPT_UNKNOWN)
205   PORT_BIT(0x00000400,IP_ACTIVE_HIGH,IPT_UNKNOWN)
206   PORT_BIT(0x00000800,IP_ACTIVE_HIGH,IPT_UNKNOWN)
207   PORT_BIT(0x00001000,IP_ACTIVE_HIGH,IPT_UNKNOWN)
208   PORT_BIT(0x00002000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8) PORT_CHAR('8')
209   PORT_BIT(0x00004000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9) PORT_CHAR('9')
210   PORT_BIT(0x00008000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("*")
211   PORT_BIT(0x00010000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7) PORT_CHAR('7')
212   PORT_BIT(0x00020000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4) PORT_CHAR('4')
213   PORT_BIT(0x00040000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6) PORT_CHAR('6')
214   PORT_BIT(0x00080000,IP_ACTIVE_HIGH,IPT_UNKNOWN) //8
215   PORT_BIT(0x00100000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CHAR('0')
216   PORT_BIT(0x00200000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("^")
217   PORT_BIT(0x00400000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-')
218   PORT_BIT(0x00800000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3) PORT_CHAR('3')
219   PORT_BIT(0x01000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Backspace") PORT_CODE(KEYCODE_BACKSPACE)
220   PORT_BIT(0x02000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5) PORT_CHAR('5')
221   PORT_BIT(0x04000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_CHAR('1')
222   PORT_BIT(0x08000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_CHAR('2')
223   PORT_BIT(0x10000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9) PORT_CHAR('9')
224   PORT_BIT(0x20000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7) PORT_CHAR('7')
225   PORT_BIT(0x40000000,IP_ACTIVE_HIGH,IPT_UNKNOWN) //backspace
226   PORT_BIT(0x80000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("\xC2\xA5") //PORT_NAME("¥")
227
228   PORT_START("key2") //0x20-0x3f
229   PORT_BIT(0x00000001,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("U") PORT_CODE(KEYCODE_U)
230   PORT_BIT(0x00000002,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("R") PORT_CODE(KEYCODE_R)
231   PORT_BIT(0x00000004,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Y") PORT_CODE(KEYCODE_Y)
232   PORT_BIT(0x00000008,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_I)
233   PORT_BIT(0x00000010,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("P") PORT_CODE(KEYCODE_P)
234   PORT_BIT(0x00000020,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("[")
235   PORT_BIT(0x00000040,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("@")
236   PORT_BIT(0x00000080,IP_ACTIVE_HIGH,IPT_UNKNOWN) //0
237   PORT_BIT(0x00000100,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Q") PORT_CODE(KEYCODE_Q)
238   PORT_BIT(0x00000200,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("T") PORT_CODE(KEYCODE_T)
239   PORT_BIT(0x00000400,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("W") PORT_CODE(KEYCODE_W)
240   PORT_BIT(0x00000800,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E)
241   PORT_BIT(0x00001000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("O") PORT_CODE(KEYCODE_O)
242   PORT_BIT(0x00002000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME(".")
243   PORT_BIT(0x00004000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("HOME") PORT_CODE(KEYCODE_HOME) //or cls?
244   PORT_BIT(0x00008000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("ENTER") PORT_CODE(KEYCODE_ENTER)
245   PORT_BIT(0x00010000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J)
246   PORT_BIT(0x00020000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F)
247   PORT_BIT(0x00040000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("H") PORT_CODE(KEYCODE_H)
248   PORT_BIT(0x00080000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("K") PORT_CODE(KEYCODE_K)
249   PORT_BIT(0x00100000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME(";")
250   PORT_BIT(0x00200000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("]")
251   PORT_BIT(0x00400000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME(":")
252   PORT_BIT(0x00800000,IP_ACTIVE_HIGH,IPT_UNKNOWN) //4
253   PORT_BIT(0x01000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A)
254   PORT_BIT(0x02000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G)
255   PORT_BIT(0x04000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("S") PORT_CODE(KEYCODE_S)
256   PORT_BIT(0x08000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D)
257   PORT_BIT(0x10000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("L") PORT_CODE(KEYCODE_L)
258   PORT_BIT(0x20000000,IP_ACTIVE_HIGH,IPT_UNKNOWN) //5
259   PORT_BIT(0x40000000,IP_ACTIVE_HIGH,IPT_UNKNOWN) //6
260   PORT_BIT(0x80000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS)
261
262   PORT_START("key3") //0x40-0x5f
263   PORT_BIT(0x00000001,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("M") PORT_CODE(KEYCODE_M)
264   PORT_BIT(0x00000002,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V)
265   PORT_BIT(0x00000004,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N)
266   PORT_BIT(0x00000008,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME(",") PORT_CODE(KEYCODE_COMMA)
267   PORT_BIT(0x00000010,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("/") PORT_CODE(KEYCODE_BACKSLASH)
268   PORT_BIT(0x00000020,IP_ACTIVE_HIGH,IPT_UNKNOWN) // /
269   PORT_BIT(0x00000040,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("_")
270   PORT_BIT(0x00000080,IP_ACTIVE_HIGH,IPT_UNKNOWN) //1
271   PORT_BIT(0x00000100,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z)
272   PORT_BIT(0x00000200,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B)
273   PORT_BIT(0x00000400,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X)
274   PORT_BIT(0x00000800,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C)
275   PORT_BIT(0x00001000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME(".") PORT_CODE(KEYCODE_STOP)
276   PORT_BIT(0x00002000,IP_ACTIVE_HIGH,IPT_UNKNOWN)
277   PORT_BIT(0x00004000,IP_ACTIVE_HIGH,IPT_UNKNOWN)
278   PORT_BIT(0x00008000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("+") PORT_CODE(KEYCODE_PLUS_PAD)
279   PORT_BIT(0x00010000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("PF1") PORT_CODE(KEYCODE_F1)
280   PORT_BIT(0x00020000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("PF2") PORT_CODE(KEYCODE_F2)
281   PORT_BIT(0x00040000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("PF3") PORT_CODE(KEYCODE_F3)
282   PORT_BIT(0x00080000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("PF4") PORT_CODE(KEYCODE_F4)
283   PORT_BIT(0x00100000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("PF5") PORT_CODE(KEYCODE_F5)
284   PORT_BIT(0xffe00000,IP_ACTIVE_HIGH,IPT_UNKNOWN)
275285INPUT_PORTS_END
276286
277287

Previous 509070 RevisionsNext 50


© 1998-2010 The MESS Team