src/mess/drivers/tk80bs.c
| r8682 | r8683 | |
| 1 | 1 | /*************************************************************************** |
| 2 | | |
| 3 | | NEC TK-80BS |
| 4 | 2 | |
| 5 | | 21/07/2010 Skeleton driver. |
| 3 | TK-80BS (c) 1980 NEC |
| 6 | 4 | |
| 5 | preliminary driver by Angelo Salese |
| 6 | |
| 7 | TODO: |
| 8 | - (try to) dump proper roms, the whole driver is based off fake roms; |
| 9 | - Remove the PPI hack; |
| 10 | - BASIC doesn't seem to work properly; |
| 11 | |
| 7 | 12 | ****************************************************************************/ |
| 8 | 13 | |
| 9 | 14 | #include "emu.h" |
| 10 | | #include "cpu/z80/z80.h" |
| 15 | #include "cpu/i8085/i8085.h" |
| 16 | #include "machine/i8255a.h" |
| 11 | 17 | |
| 18 | static UINT8 *vram; |
| 19 | static UINT8 keyb_press,keyb_press_flag,shift_press_flag; |
| 20 | |
| 21 | static VIDEO_START( tk80bs ) |
| 22 | { |
| 23 | } |
| 24 | |
| 25 | static VIDEO_UPDATE( tk80bs ) |
| 26 | { |
| 27 | int x,y; |
| 28 | int count; |
| 29 | |
| 30 | count = 0; |
| 31 | |
| 32 | for(y=0;y<16;y++) |
| 33 | { |
| 34 | for(x=0;x<32;x++) |
| 35 | { |
| 36 | int tile = vram[count]; |
| 37 | |
| 38 | drawgfx_opaque(bitmap, cliprect, screen->machine->gfx[0], tile, 0, 0, 0, x*8, y*8); |
| 39 | |
| 40 | count++; |
| 41 | } |
| 42 | } |
| 43 | |
| 44 | return 0; |
| 45 | } |
| 46 | |
| 47 | /* FIXME: current i8255 core doesn't seem to like this system at all, so we use custom code here for now */ |
| 48 | static READ8_HANDLER( ppi_custom_r ) |
| 49 | { |
| 50 | // printf("%02x\n",offset); |
| 51 | |
| 52 | switch(offset+0x7dfc) |
| 53 | { |
| 54 | case 0x7dfc: keyb_press_flag = 0; return keyb_press; |
| 55 | case 0x7dfd: return 0xff; |
| 56 | case 0x7dfe: return keyb_press_flag << 5; //keyboard flag |
| 57 | } |
| 58 | |
| 59 | return 0xff; |
| 60 | } |
| 61 | |
| 62 | static WRITE8_HANDLER( ppi_custom_w ) |
| 63 | { |
| 64 | //printf("%02x %02x\n",offset,data); |
| 65 | |
| 66 | switch(offset+0x7dfc) |
| 67 | { |
| 68 | case 0x7dff: break; //display mode + ppi8255 mode (0xb2 -> 0x00 -> 0x03) |
| 69 | } |
| 70 | } |
| 71 | |
| 12 | 72 | static ADDRESS_MAP_START(tk80bs_mem, ADDRESS_SPACE_PROGRAM, 8) |
| 13 | 73 | ADDRESS_MAP_UNMAP_HIGH |
| 14 | | AM_RANGE(0x0000, 0x7bff) AM_ROM |
| 15 | | // AM_RANGE(0x7c00, 0x7dff) memory mapped i/o |
| 16 | | AM_RANGE(0x7e00, 0x7fff) AM_RAM // video ram |
| 74 | AM_RANGE(0x0000, 0x07ff) AM_ROM |
| 75 | // AM_RANGE(0x0c00, 0x7bff) AM_ROM // ext |
| 76 | AM_RANGE(0x7df8, 0x7df9) AM_NOP // i8251 sio |
| 77 | // AM_RANGE(0x7dfc, 0x7dff) AM_DEVREADWRITE("ppi8255_0", i8255a_r, i8255a_w) |
| 78 | AM_RANGE(0x7dfc, 0x7dff) AM_READWRITE(ppi_custom_r,ppi_custom_w) |
| 79 | AM_RANGE(0x7e00, 0x7fff) AM_RAM AM_BASE(&vram) // video ram |
| 17 | 80 | AM_RANGE(0x8000, 0xcfff) AM_RAM // RAM |
| 18 | 81 | AM_RANGE(0xd000, 0xefff) AM_ROM // BASIC |
| 19 | 82 | AM_RANGE(0xf000, 0xffff) AM_ROM // BSMON |
| r8682 | r8683 | |
| 22 | 85 | |
| 23 | 86 | /* Input ports */ |
| 24 | 87 | static INPUT_PORTS_START( tk80bs ) |
| 88 | PORT_START("key1") //0x00-0x1f |
| 89 | PORT_BIT(0x00000001,IP_ACTIVE_HIGH,IPT_UNUSED) //0x00 null |
| 90 | PORT_BIT(0x00000002,IP_ACTIVE_HIGH,IPT_UNUSED) //0x01 soh |
| 91 | PORT_BIT(0x00000004,IP_ACTIVE_HIGH,IPT_UNUSED) //0x02 stx |
| 92 | PORT_BIT(0x00000008,IP_ACTIVE_HIGH,IPT_UNUSED) //0x03 etx |
| 93 | PORT_BIT(0x00000010,IP_ACTIVE_HIGH,IPT_UNUSED) //0x04 etx |
| 94 | PORT_BIT(0x00000020,IP_ACTIVE_HIGH,IPT_UNUSED) //0x05 eot |
| 95 | PORT_BIT(0x00000040,IP_ACTIVE_HIGH,IPT_UNUSED) //0x06 enq |
| 96 | PORT_BIT(0x00000080,IP_ACTIVE_HIGH,IPT_UNUSED) //0x07 ack |
| 97 | PORT_BIT(0x00000100,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Backspace") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) |
| 98 | PORT_BIT(0x00000200,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Tab") PORT_CODE(KEYCODE_TAB) PORT_CHAR(9) |
| 99 | PORT_BIT(0x00000400,IP_ACTIVE_HIGH,IPT_UNUSED) //0x0a |
| 100 | PORT_BIT(0x00000800,IP_ACTIVE_HIGH,IPT_UNUSED) //0x0b lf |
| 101 | PORT_BIT(0x00001000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x0c vt |
| 102 | PORT_BIT(0x00002000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("RETURN") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(27) |
| 103 | PORT_BIT(0x00004000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x0e cr |
| 104 | PORT_BIT(0x00008000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x0f so |
| 105 | |
| 106 | PORT_BIT(0x00010000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x10 si |
| 107 | PORT_BIT(0x00020000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x11 dle |
| 108 | PORT_BIT(0x00040000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x12 dc1 |
| 109 | PORT_BIT(0x00080000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x13 dc2 |
| 110 | PORT_BIT(0x00100000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("HOME") PORT_CODE(KEYCODE_HOME) |
| 111 | PORT_BIT(0x00200000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x15 dc4 |
| 112 | PORT_BIT(0x00400000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT) |
| 113 | PORT_BIT(0x00800000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x17 syn |
| 114 | PORT_BIT(0x01000000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x18 etb |
| 115 | PORT_BIT(0x02000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT) |
| 116 | PORT_BIT(0x04000000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x1a em |
| 117 | PORT_BIT(0x08000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("ESC") PORT_CHAR(27) |
| 118 | PORT_BIT(0x10000000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x1c ??? |
| 119 | PORT_BIT(0x20000000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x1d fs |
| 120 | PORT_BIT(0x40000000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x1e gs |
| 121 | PORT_BIT(0x80000000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x1f us |
| 122 | |
| 123 | PORT_START("key2") //0x20-0x3f |
| 124 | PORT_BIT(0x00000001,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') |
| 125 | PORT_BIT(0x00000002,IP_ACTIVE_HIGH,IPT_UNUSED) //0x21 ! |
| 126 | PORT_BIT(0x00000004,IP_ACTIVE_HIGH,IPT_UNUSED) //0x22 " |
| 127 | PORT_BIT(0x00000008,IP_ACTIVE_HIGH,IPT_UNUSED) //0x23 # |
| 128 | PORT_BIT(0x00000010,IP_ACTIVE_HIGH,IPT_UNUSED) //0x24 $ |
| 129 | PORT_BIT(0x00000020,IP_ACTIVE_HIGH,IPT_UNUSED) //0x25 % |
| 130 | PORT_BIT(0x00000040,IP_ACTIVE_HIGH,IPT_UNUSED) //0x26 & |
| 131 | PORT_BIT(0x00000080,IP_ACTIVE_HIGH,IPT_UNUSED) //0x27 ' |
| 132 | PORT_BIT(0x00000100,IP_ACTIVE_HIGH,IPT_UNUSED) //0x28 ( |
| 133 | PORT_BIT(0x00000200,IP_ACTIVE_HIGH,IPT_UNUSED) //0x29 ) |
| 134 | PORT_BIT(0x00000400,IP_ACTIVE_HIGH,IPT_UNUSED) //0x2a * |
| 135 | PORT_BIT(0x00000800,IP_ACTIVE_HIGH,IPT_UNUSED) |
| 136 | PORT_BIT(0x00001000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x2c , |
| 137 | PORT_BIT(0x00002000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') |
| 138 | PORT_BIT(0x00004000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x2e . |
| 139 | PORT_BIT(0x00008000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x2f / |
| 140 | |
| 141 | PORT_BIT(0x00010000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CHAR('0') |
| 142 | PORT_BIT(0x00020000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_CHAR('1') |
| 143 | PORT_BIT(0x00040000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_CHAR('2') |
| 144 | PORT_BIT(0x00080000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3) PORT_CHAR('3') |
| 145 | PORT_BIT(0x00100000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4) PORT_CHAR('4') |
| 146 | PORT_BIT(0x00200000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5) PORT_CHAR('5') |
| 147 | PORT_BIT(0x00400000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6) PORT_CHAR('6') |
| 148 | PORT_BIT(0x00800000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7) PORT_CHAR('7') |
| 149 | PORT_BIT(0x01000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8) PORT_CHAR('8') |
| 150 | PORT_BIT(0x02000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9) PORT_CHAR('9') |
| 151 | PORT_BIT(0x04000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME(":") PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(':') |
| 152 | PORT_BIT(0x08000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME(";") PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') |
| 153 | PORT_BIT(0x10000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("<") PORT_CODE(KEYCODE_BACKSLASH2) PORT_CHAR('<') |
| 154 | PORT_BIT(0x20000000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x3d = |
| 155 | PORT_BIT(0x40000000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x3e > |
| 156 | PORT_BIT(0x80000000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x3f ? |
| 157 | |
| 158 | PORT_START("key3") //0x40-0x5f |
| 159 | PORT_BIT(0x00000001,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("@") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('@') |
| 160 | PORT_BIT(0x00000002,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('A') |
| 161 | PORT_BIT(0x00000004,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('B') |
| 162 | PORT_BIT(0x00000008,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CHAR('C') |
| 163 | PORT_BIT(0x00000010,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D) PORT_CHAR('D') |
| 164 | PORT_BIT(0x00000020,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E) PORT_CHAR('E') |
| 165 | PORT_BIT(0x00000040,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('F') |
| 166 | PORT_BIT(0x00000080,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G) PORT_CHAR('G') |
| 167 | PORT_BIT(0x00000100,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("H") PORT_CODE(KEYCODE_H) PORT_CHAR('H') |
| 168 | PORT_BIT(0x00000200,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_I) PORT_CHAR('I') |
| 169 | PORT_BIT(0x00000400,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J) PORT_CHAR('J') |
| 170 | PORT_BIT(0x00000800,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("K") PORT_CODE(KEYCODE_K) PORT_CHAR('K') |
| 171 | PORT_BIT(0x00001000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("L") PORT_CODE(KEYCODE_L) PORT_CHAR('L') |
| 172 | PORT_BIT(0x00002000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("M") PORT_CODE(KEYCODE_M) PORT_CHAR('M') |
| 173 | PORT_BIT(0x00004000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_CHAR('N') |
| 174 | PORT_BIT(0x00008000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("O") PORT_CODE(KEYCODE_O) PORT_CHAR('O') |
| 175 | PORT_BIT(0x00010000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("P") PORT_CODE(KEYCODE_P) PORT_CHAR('P') |
| 176 | PORT_BIT(0x00020000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') |
| 177 | PORT_BIT(0x00040000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("R") PORT_CODE(KEYCODE_R) PORT_CHAR('R') |
| 178 | PORT_BIT(0x00080000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("S") PORT_CODE(KEYCODE_S) PORT_CHAR('S') |
| 179 | PORT_BIT(0x00100000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("T") PORT_CODE(KEYCODE_T) PORT_CHAR('T') |
| 180 | PORT_BIT(0x00200000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("U") PORT_CODE(KEYCODE_U) PORT_CHAR('U') |
| 181 | PORT_BIT(0x00400000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V) PORT_CHAR('V') |
| 182 | PORT_BIT(0x00800000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("W") PORT_CODE(KEYCODE_W) PORT_CHAR('W') |
| 183 | PORT_BIT(0x01000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X) PORT_CHAR('X') |
| 184 | PORT_BIT(0x02000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) PORT_CHAR('Y') |
| 185 | PORT_BIT(0x04000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('Z') |
| 186 | PORT_BIT(0x08000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("[") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR('[') |
| 187 | PORT_BIT(0x10000000,IP_ACTIVE_HIGH,IPT_UNUSED) |
| 188 | PORT_BIT(0x20000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("]") PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR(']') |
| 189 | PORT_BIT(0x40000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("^") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('^') |
| 190 | PORT_BIT(0x80000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("_") |
| 191 | |
| 192 | PORT_START("key_modifiers") |
| 193 | PORT_BIT(0x00000001,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL) |
| 194 | PORT_BIT(0x00000002,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_LSHIFT) |
| 195 | PORT_BIT(0x00000004,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("KANA") PORT_CODE(KEYCODE_RCONTROL) |
| 196 | PORT_BIT(0x00000008,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("CAPS") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE |
| 197 | PORT_BIT(0x00000010,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("GRPH") PORT_CODE(KEYCODE_LALT) |
| 25 | 198 | INPUT_PORTS_END |
| 26 | 199 | |
| 200 | static TIMER_CALLBACK( keyboard_callback ) |
| 201 | { |
| 202 | const char* portnames[3] = { "key1","key2","key3" }; |
| 203 | int i,port_i,scancode; |
| 204 | UINT8 keymod = input_port_read(machine,"key_modifiers") & 0x1f; |
| 205 | scancode = 0; |
| 27 | 206 | |
| 28 | | static MACHINE_RESET(tk80bs) |
| 29 | | { |
| 207 | shift_press_flag = ((keymod & 0x02) >> 1); |
| 208 | |
| 209 | for(port_i=0;port_i<3;port_i++) |
| 210 | { |
| 211 | for(i=0;i<32;i++) |
| 212 | { |
| 213 | if((input_port_read(machine,portnames[port_i])>>i) & 1) |
| 214 | { |
| 215 | if(keymod & 0x04) // kana key pressed |
| 216 | { |
| 217 | scancode |= 0x80; |
| 218 | } |
| 219 | if(!shift_press_flag) // shift not pressed |
| 220 | { |
| 221 | //if(scancode >= 0x41 && scancode < 0x5b) |
| 222 | // scancode += 0x20; // lowercase doesn't exist here |
| 223 | } |
| 224 | else |
| 225 | { |
| 226 | if(scancode >= 0x31 && scancode < 0x3a) |
| 227 | scancode -= 0x10; |
| 228 | if(scancode == 0x30) |
| 229 | scancode = 0x3d; |
| 230 | |
| 231 | if(scancode == 0x3b) |
| 232 | scancode = 0x2c; |
| 233 | |
| 234 | if(scancode == 0x3a) |
| 235 | scancode = 0x2e; |
| 236 | if(scancode == 0x5b) |
| 237 | scancode = 0x2b; |
| 238 | if(scancode == 0x3c) |
| 239 | scancode = 0x3e; |
| 240 | } |
| 241 | keyb_press = scancode; |
| 242 | keyb_press_flag = 1; |
| 243 | return; |
| 244 | } |
| 245 | scancode++; |
| 246 | } |
| 247 | } |
| 30 | 248 | } |
| 31 | 249 | |
| 32 | | static VIDEO_START( tk80bs ) |
| 250 | static MACHINE_START(tk80bs) |
| 33 | 251 | { |
| 252 | timer_pulse(machine, ATTOTIME_IN_HZ(240/32), NULL, 0, keyboard_callback); |
| 34 | 253 | } |
| 35 | 254 | |
| 36 | | static VIDEO_UPDATE( tk80bs ) |
| 255 | static MACHINE_RESET(tk80bs) |
| 37 | 256 | { |
| 38 | | return 0; |
| 39 | 257 | } |
| 40 | 258 | |
| 41 | 259 | /* F4 Character Displayer */ |
| 42 | 260 | static const gfx_layout tk80bs_charlayout = |
| 43 | 261 | { |
| 44 | | 8, 8, /* 8 x 8 characters */ |
| 45 | | 512, /* 512 characters */ |
| 46 | | 1, /* 1 bits per pixel */ |
| 47 | | { 0 }, /* no bitplanes */ |
| 48 | | /* x offsets */ |
| 262 | 8, 8, |
| 263 | 512, |
| 264 | 1, |
| 265 | { 0 }, |
| 49 | 266 | { 0, 1, 2, 3, 4, 5, 6, 7 }, |
| 50 | | /* y offsets */ |
| 51 | 267 | { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, |
| 52 | | 8*8 /* every char takes 8 bytes */ |
| 268 | 8*8 |
| 53 | 269 | }; |
| 54 | 270 | |
| 55 | 271 | static GFXDECODE_START( tk80bs ) |
| 56 | 272 | GFXDECODE_ENTRY( "gfx", 0x0000, tk80bs_charlayout, 0, 1 ) |
| 57 | 273 | GFXDECODE_END |
| 58 | 274 | |
| 275 | #if 0 |
| 276 | static READ8_DEVICE_HANDLER( key_matrix_r ) |
| 277 | { |
| 278 | printf("A R\n"); |
| 59 | 279 | |
| 280 | return 0; |
| 281 | } |
| 282 | |
| 283 | static READ8_DEVICE_HANDLER( serial_in_r ) |
| 284 | { |
| 285 | printf("B R\n"); |
| 286 | |
| 287 | return 0; |
| 288 | } |
| 289 | |
| 290 | static WRITE8_DEVICE_HANDLER( serial_out_w ) |
| 291 | { |
| 292 | } |
| 293 | |
| 294 | static I8255A_INTERFACE( ppi8255_intf_0 ) |
| 295 | { |
| 296 | DEVCB_HANDLER(key_matrix_r), /* Port A read */ |
| 297 | DEVCB_HANDLER(serial_in_r), /* Port B read */ |
| 298 | DEVCB_NULL, /* Port C read */ |
| 299 | DEVCB_NULL, /* Port A write */ |
| 300 | DEVCB_NULL, /* Port B write */ |
| 301 | DEVCB_HANDLER(serial_out_w) /* Port C write */ |
| 302 | }; |
| 303 | #endif |
| 304 | |
| 60 | 305 | static MACHINE_DRIVER_START( tk80bs ) |
| 61 | 306 | /* basic machine hardware */ |
| 62 | | MDRV_CPU_ADD("maincpu",Z80, XTAL_4MHz) |
| 307 | MDRV_CPU_ADD("maincpu",I8080, XTAL_1MHz) //unknown clock |
| 63 | 308 | MDRV_CPU_PROGRAM_MAP(tk80bs_mem) |
| 64 | 309 | |
| 310 | // MDRV_I8255A_ADD( "ppi8255_0", ppi8255_intf_0 ) |
| 311 | |
| 312 | MDRV_MACHINE_START(tk80bs) |
| 65 | 313 | MDRV_MACHINE_RESET(tk80bs) |
| 66 | | |
| 314 | |
| 67 | 315 | /* video hardware */ |
| 68 | 316 | MDRV_SCREEN_ADD("screen", RASTER) |
| 69 | 317 | MDRV_SCREEN_REFRESH_RATE(50) |
| 70 | 318 | MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ |
| 71 | 319 | MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) |
| 72 | | MDRV_SCREEN_SIZE(640, 480) |
| 73 | | MDRV_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) |
| 320 | MDRV_SCREEN_SIZE(256, 128) |
| 321 | MDRV_SCREEN_VISIBLE_AREA(0, 256-1, 0, 128-1) |
| 74 | 322 | MDRV_PALETTE_LENGTH(2) |
| 75 | 323 | MDRV_PALETTE_INIT(black_and_white) |
| 76 | 324 | MDRV_GFXDECODE(tk80bs) |
| r8682 | r8683 | |
| 81 | 329 | |
| 82 | 330 | /* ROM definition */ |
| 83 | 331 | ROM_START( tk80bs ) |
| 84 | | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 332 | ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) |
| 333 | /* all of these aren't taken from an original machine*/ |
| 85 | 334 | ROM_SYSTEM_BIOS(0, "psedo", "Pseudo LEVEL 1") |
| 86 | | ROMX_LOAD( "tk80.dummy", 0x0000, 0x0800, CRC(553b25ca) SHA1(939350d7fa56ce567ddf393c9f4b9db6ebc18a2c), ROM_BIOS(1)) |
| 87 | | ROMX_LOAD( "ext.l1", 0x0c00, 0x6e46, CRC(d05ed3ff) SHA1(8544aa2cb58df9edf221f5be2cdafa248dd33828), ROM_BIOS(1)) |
| 88 | | ROMX_LOAD( "lv1basic.l1",0xe000, 0x09a2, CRC(3ff67a71) SHA1(528c9331740637e853c099e1739ecdea6dd200bc), ROM_BIOS(1)) |
| 89 | | ROMX_LOAD( "bsmon.l1", 0xf000, 0x0db0, CRC(5daa599b) SHA1(7e6ec5bfb3eea114f7ee9ef589a89246b8533b2f), ROM_BIOS(1)) |
| 90 | | |
| 91 | | ROM_SYSTEM_BIOS(1, "psedo10", "Pseudo LEVEL 2 1.0") |
| 92 | | ROMX_LOAD( "tk80.dummy", 0x0000, 0x0800, CRC(553b25ca) SHA1(939350d7fa56ce567ddf393c9f4b9db6ebc18a2c), ROM_BIOS(2)) |
| 93 | | ROMX_LOAD( "ext.10", 0x0c00, 0x3dc2, CRC(3c64d488) SHA1(919180d5b34b981ab3dd8b2885d3c0933203f355), ROM_BIOS(2)) |
| 94 | | ROMX_LOAD( "lv2basic.10",0xd000, 0x2000, CRC(594fe70e) SHA1(5854c1be5fa78c1bfee365379495f14bc23e15e7), ROM_BIOS(2)) |
| 95 | | ROMX_LOAD( "bsmon.10", 0xf000, 0x0daf, CRC(d0047983) SHA1(79e2b5dc47b574b55375cbafffff144744093ec1), ROM_BIOS(2)) |
| 96 | | |
| 97 | | ROM_SYSTEM_BIOS(2, "psedo11", "Pseudo LEVEL 2 1.1") |
| 98 | | ROMX_LOAD( "tk80.dummy", 0x0000, 0x0800, CRC(553b25ca) SHA1(939350d7fa56ce567ddf393c9f4b9db6ebc18a2c), ROM_BIOS(3)) |
| 99 | | ROMX_LOAD( "ext.11", 0x0c00, 0x3dd4, CRC(bd5c5169) SHA1(2ad70828348372328b76bac0fa93d3f6f17ade34), ROM_BIOS(3)) |
| 100 | | ROMX_LOAD( "lv2basic.11",0xd000, 0x2000, CRC(3df9a3bd) SHA1(9539409c876bce27d630fe47d07a4316d2ce09cb), ROM_BIOS(3)) |
| 101 | | ROMX_LOAD( "bsmon.11", 0xf000, 0x0ff6, CRC(fca7a609) SHA1(7c7eb5e5e4cf1e0021383bdfc192b88262aba6f5), ROM_BIOS(3)) |
| 102 | | |
| 335 | ROMX_LOAD( "tk80.dummy", 0x0000, 0x0800, BAD_DUMP CRC(553b25ca) SHA1(939350d7fa56ce567ddf393c9f4b9db6ebc18a2c), ROM_BIOS(1)) |
| 336 | ROMX_LOAD( "ext.l1", 0x0c00, 0x6e46, BAD_DUMP CRC(d05ed3ff) SHA1(8544aa2cb58df9edf221f5be2cdafa248dd33828), ROM_BIOS(1)) |
| 337 | ROMX_LOAD( "lv1basic.l1",0xe000, 0x09a2, BAD_DUMP CRC(3ff67a71) SHA1(528c9331740637e853c099e1739ecdea6dd200bc), ROM_BIOS(1)) |
| 338 | ROMX_LOAD( "bsmon.l1", 0xf000, 0x0db0, BAD_DUMP CRC(5daa599b) SHA1(7e6ec5bfb3eea114f7ee9ef589a89246b8533b2f), ROM_BIOS(1)) |
| 339 | |
| 340 | ROM_SYSTEM_BIOS(1, "psedo10", "Pseudo LEVEL 2 1.0") |
| 341 | ROMX_LOAD( "tk80.dummy", 0x0000, 0x0800, BAD_DUMP CRC(553b25ca) SHA1(939350d7fa56ce567ddf393c9f4b9db6ebc18a2c), ROM_BIOS(2)) |
| 342 | ROMX_LOAD( "ext.10", 0x0c00, 0x3dc2, BAD_DUMP CRC(3c64d488) SHA1(919180d5b34b981ab3dd8b2885d3c0933203f355), ROM_BIOS(2)) |
| 343 | ROMX_LOAD( "lv2basic.10",0xd000, 0x2000, BAD_DUMP CRC(594fe70e) SHA1(5854c1be5fa78c1bfee365379495f14bc23e15e7), ROM_BIOS(2)) |
| 344 | ROMX_LOAD( "bsmon.10", 0xf000, 0x0daf, BAD_DUMP CRC(d0047983) SHA1(79e2b5dc47b574b55375cbafffff144744093ec1), ROM_BIOS(2)) |
| 345 | |
| 346 | ROM_SYSTEM_BIOS(2, "psedo11", "Pseudo LEVEL 2 1.1") |
| 347 | ROMX_LOAD( "tk80.dummy", 0x0000, 0x0800, BAD_DUMP CRC(553b25ca) SHA1(939350d7fa56ce567ddf393c9f4b9db6ebc18a2c), ROM_BIOS(3)) |
| 348 | ROMX_LOAD( "ext.11", 0x0c00, 0x3dd4, BAD_DUMP CRC(bd5c5169) SHA1(2ad70828348372328b76bac0fa93d3f6f17ade34), ROM_BIOS(3)) |
| 349 | ROMX_LOAD( "lv2basic.11",0xd000, 0x2000, BAD_DUMP CRC(3df9a3bd) SHA1(9539409c876bce27d630fe47d07a4316d2ce09cb), ROM_BIOS(3)) |
| 350 | ROMX_LOAD( "bsmon.11", 0xf000, 0x0ff6, BAD_DUMP CRC(fca7a609) SHA1(7c7eb5e5e4cf1e0021383bdfc192b88262aba6f5), ROM_BIOS(3)) |
| 351 | |
| 103 | 352 | ROM_REGION( 0x1000, "gfx", ROMREGION_ERASEFF ) |
| 104 | | ROM_LOAD( "font.rom", 0x0000, 0x1000, CRC(94d95199) SHA1(9fe741eab866b0c520d4108bccc6277172fa190c)) |
| 353 | ROM_LOAD( "font.rom", 0x0000, 0x1000, BAD_DUMP CRC(94d95199) SHA1(9fe741eab866b0c520d4108bccc6277172fa190c)) |
| 105 | 354 | ROM_END |
| 106 | 355 | |
| 107 | 356 | /* Driver */ |