src/mess/video/super80.c
| r7363 | r7364 | |
| 1 | | /* Super80.c written by Robbbert, 2005-2009. See the MESS wiki for documentation. */ |
| 1 | /* Super80.c written by Robbbert, 2005-2010. See the MESS wiki for documentation. */ |
| 2 | 2 | |
| 3 | 3 | /* Notes on using MAME MC6845 Device (MMD). |
| 4 | 4 | 1. Speed of MMD is about 20% slower than pre-MMD coding |
| r7363 | r7364 | |
| 16 | 16 | static UINT8 current_charset; /* for super80m */ |
| 17 | 17 | |
| 18 | 18 | static const UINT8 *FNT; |
| 19 | | static UINT8 chr,col,gfx,fg,bg; |
| 20 | | static UINT16 mem,x; |
| 21 | 19 | static UINT8 options; |
| 22 | 20 | extern UINT8 *super80_colorram; |
| 23 | 21 | |
| r7363 | r7364 | |
| 122 | 120 | gfx = FNT[(chr<<4) | ((ra & 8) >> 3) | ((ra & 7) << 1)]; |
| 123 | 121 | |
| 124 | 122 | /* Display a scanline of a character (8 pixels) */ |
| 125 | | *p = ( gfx & 0x80 ) ? 1 : 0; p++; |
| 126 | | *p = ( gfx & 0x40 ) ? 1 : 0; p++; |
| 127 | | *p = ( gfx & 0x20 ) ? 1 : 0; p++; |
| 128 | | *p = ( gfx & 0x10 ) ? 1 : 0; p++; |
| 129 | | *p = ( gfx & 0x08 ) ? 1 : 0; p++; |
| 130 | | *p = ( gfx & 0x04 ) ? 1 : 0; p++; |
| 131 | | *p = ( gfx & 0x02 ) ? 1 : 0; p++; |
| 132 | | *p = ( gfx & 0x01 ) ? 1 : 0; p++; |
| 123 | *p++ = ( gfx & 0x80 ) ? 1 : 0; |
| 124 | *p++ = ( gfx & 0x40 ) ? 1 : 0; |
| 125 | *p++ = ( gfx & 0x20 ) ? 1 : 0; |
| 126 | *p++ = ( gfx & 0x10 ) ? 1 : 0; |
| 127 | *p++ = ( gfx & 0x08 ) ? 1 : 0; |
| 128 | *p++ = ( gfx & 0x04 ) ? 1 : 0; |
| 129 | *p++ = ( gfx & 0x02 ) ? 1 : 0; |
| 130 | *p++ = ( gfx & 0x01 ) ? 1 : 0; |
| 133 | 131 | } |
| 134 | 132 | } |
| 135 | 133 | ma+=32; |
| r7363 | r7364 | |
| 163 | 161 | gfx = FNT[((chr & 0x7f)<<4) | ((ra & 8) >> 3) | ((ra & 7) << 1)] ^ ((chr & 0x80) ? 0xff : 0); |
| 164 | 162 | |
| 165 | 163 | /* Display a scanline of a character (8 pixels) */ |
| 166 | | *p = ( gfx & 0x80 ) ? 1 : 0; p++; |
| 167 | | *p = ( gfx & 0x40 ) ? 1 : 0; p++; |
| 168 | | *p = ( gfx & 0x20 ) ? 1 : 0; p++; |
| 169 | | *p = ( gfx & 0x10 ) ? 1 : 0; p++; |
| 170 | | *p = ( gfx & 0x08 ) ? 1 : 0; p++; |
| 171 | | *p = ( gfx & 0x04 ) ? 1 : 0; p++; |
| 172 | | *p = ( gfx & 0x02 ) ? 1 : 0; p++; |
| 173 | | *p = ( gfx & 0x01 ) ? 1 : 0; p++; |
| 164 | *p++ = ( gfx & 0x80 ) ? 1 : 0; |
| 165 | *p++ = ( gfx & 0x40 ) ? 1 : 0; |
| 166 | *p++ = ( gfx & 0x20 ) ? 1 : 0; |
| 167 | *p++ = ( gfx & 0x10 ) ? 1 : 0; |
| 168 | *p++ = ( gfx & 0x08 ) ? 1 : 0; |
| 169 | *p++ = ( gfx & 0x04 ) ? 1 : 0; |
| 170 | *p++ = ( gfx & 0x02 ) ? 1 : 0; |
| 171 | *p++ = ( gfx & 0x01 ) ? 1 : 0; |
| 174 | 172 | } |
| 175 | 173 | } |
| 176 | 174 | ma+=32; |
| r7363 | r7364 | |
| 204 | 202 | gfx = FNT[(chr<<4) | ((ra & 8) >> 3) | ((ra & 7) << 1)]; |
| 205 | 203 | |
| 206 | 204 | /* Display a scanline of a character (8 pixels) */ |
| 207 | | *p = ( gfx & 0x80 ) ? 1 : 0; p++; |
| 208 | | *p = ( gfx & 0x40 ) ? 1 : 0; p++; |
| 209 | | *p = ( gfx & 0x20 ) ? 1 : 0; p++; |
| 210 | | *p = ( gfx & 0x10 ) ? 1 : 0; p++; |
| 211 | | *p = ( gfx & 0x08 ) ? 1 : 0; p++; |
| 212 | | *p = ( gfx & 0x04 ) ? 1 : 0; p++; |
| 213 | | *p = ( gfx & 0x02 ) ? 1 : 0; p++; |
| 214 | | *p = ( gfx & 0x01 ) ? 1 : 0; p++; |
| 205 | *p++ = ( gfx & 0x80 ) ? 1 : 0; |
| 206 | *p++ = ( gfx & 0x40 ) ? 1 : 0; |
| 207 | *p++ = ( gfx & 0x20 ) ? 1 : 0; |
| 208 | *p++ = ( gfx & 0x10 ) ? 1 : 0; |
| 209 | *p++ = ( gfx & 0x08 ) ? 1 : 0; |
| 210 | *p++ = ( gfx & 0x04 ) ? 1 : 0; |
| 211 | *p++ = ( gfx & 0x02 ) ? 1 : 0; |
| 212 | *p++ = ( gfx & 0x01 ) ? 1 : 0; |
| 215 | 213 | } |
| 216 | 214 | } |
| 217 | 215 | ma+=32; |
| r7363 | r7364 | |
| 267 | 265 | gfx = FNT[0x1000 | ((chr & 0x7f)<<4) | ((ra & 8) >> 3) | ((ra & 7) << 1)] ^ ((chr & 0x80) ? 0xff : 0); |
| 268 | 266 | |
| 269 | 267 | /* Display a scanline of a character (8 pixels) */ |
| 270 | | *p = ( gfx & 0x80 ) ? fg : bg; p++; |
| 271 | | *p = ( gfx & 0x40 ) ? fg : bg; p++; |
| 272 | | *p = ( gfx & 0x20 ) ? fg : bg; p++; |
| 273 | | *p = ( gfx & 0x10 ) ? fg : bg; p++; |
| 274 | | *p = ( gfx & 0x08 ) ? fg : bg; p++; |
| 275 | | *p = ( gfx & 0x04 ) ? fg : bg; p++; |
| 276 | | *p = ( gfx & 0x02 ) ? fg : bg; p++; |
| 277 | | *p = ( gfx & 0x01 ) ? fg : bg; p++; |
| 268 | *p++ = ( gfx & 0x80 ) ? fg : bg; |
| 269 | *p++ = ( gfx & 0x40 ) ? fg : bg; |
| 270 | *p++ = ( gfx & 0x20 ) ? fg : bg; |
| 271 | *p++ = ( gfx & 0x10 ) ? fg : bg; |
| 272 | *p++ = ( gfx & 0x08 ) ? fg : bg; |
| 273 | *p++ = ( gfx & 0x04 ) ? fg : bg; |
| 274 | *p++ = ( gfx & 0x02 ) ? fg : bg; |
| 275 | *p++ = ( gfx & 0x01 ) ? fg : bg; |
| 278 | 276 | } |
| 279 | 277 | } |
| 280 | 278 | ma+=32; |
| r7363 | r7364 | |
| 404 | 402 | VIDEO_UPDATE( super80v ) |
| 405 | 403 | { |
| 406 | 404 | framecnt++; |
| 407 | | speed = mc6845_reg[10]&0x20, flash = mc6845_reg[10]&0x40, bg=0; // cursor modes |
| 405 | speed = mc6845_reg[10]&0x20, flash = mc6845_reg[10]&0x40; // cursor modes |
| 408 | 406 | cursor = (mc6845_reg[14]<<8) | mc6845_reg[15]; // get cursor position |
| 409 | 407 | options=input_port_read(screen->machine, "CONFIG"); |
| 410 | 408 | output_set_value("cass_led",(super80_shared & 0x20) ? 1 : 0); |
| r7363 | r7364 | |
| 414 | 412 | |
| 415 | 413 | MC6845_UPDATE_ROW( super80v_update_row ) |
| 416 | 414 | { |
| 415 | UINT8 chr,col,gfx,fg,bg=0; |
| 416 | UINT16 mem,x; |
| 417 | 417 | UINT16 *p = BITMAP_ADDR16(bitmap, y, 0); |
| 418 | 418 | |
| 419 | 419 | for (x = 0; x < x_count; x++) // for each character |
| r7363 | r7364 | |
| 452 | 452 | gfx = super80_pcgram[(chr<<4) | ra] ^ inv; |
| 453 | 453 | |
| 454 | 454 | /* Display a scanline of a character (7 pixels) */ |
| 455 | | *p = ( gfx & 0x80 ) ? fg : bg; p++; |
| 456 | | *p = ( gfx & 0x40 ) ? fg : bg; p++; |
| 457 | | *p = ( gfx & 0x20 ) ? fg : bg; p++; |
| 458 | | *p = ( gfx & 0x10 ) ? fg : bg; p++; |
| 459 | | *p = ( gfx & 0x08 ) ? fg : bg; p++; |
| 460 | | *p = ( gfx & 0x04 ) ? fg : bg; p++; |
| 461 | | *p = ( gfx & 0x02 ) ? fg : bg; p++; |
| 455 | *p++ = ( gfx & 0x80 ) ? fg : bg; |
| 456 | *p++ = ( gfx & 0x40 ) ? fg : bg; |
| 457 | *p++ = ( gfx & 0x20 ) ? fg : bg; |
| 458 | *p++ = ( gfx & 0x10 ) ? fg : bg; |
| 459 | *p++ = ( gfx & 0x08 ) ? fg : bg; |
| 460 | *p++ = ( gfx & 0x04 ) ? fg : bg; |
| 461 | *p++ = ( gfx & 0x02 ) ? fg : bg; |
| 462 | 462 | } |
| 463 | 463 | } |
| 464 | 464 | |