trunk/src/mess/drivers/apc.c
| r19056 | r19057 | |
| 5 | 5 | preliminary driver by Angelo Salese |
| 6 | 6 | |
| 7 | 7 | TODO: |
| 8 | | - video emulation |
| 9 | | - Floppy device |
| 10 | | - keyboard |
| 8 | - video emulation (bitmap part) |
| 11 | 9 | - Understand interrupt sources |
| 12 | 10 | - NMI seems valid, dumps a x86 stack to vram? |
| 13 | | - Unknown RTC device type; |
| 11 | - Unknown RTC device type (upd1990a?); |
| 14 | 12 | - What are exactly APU and MPU devices? They sounds scary ... |
| 15 | 13 | - DMA hook-ups |
| 16 | 14 | - serial ports |
| r19056 | r19057 | |
| 191 | 189 | for(x=0;x<pitch;x++) |
| 192 | 190 | { |
| 193 | 191 | UINT8 tile_data; |
| 194 | | // UINT8 secret,reverse,u_line,v_line; |
| 192 | UINT8 u_line, o_line, v_line, reverse, blink; |
| 195 | 193 | UINT8 color; |
| 196 | 194 | UINT8 tile,attr,pen; |
| 197 | 195 | UINT32 tile_addr; |
| r19056 | r19057 | |
| 202 | 200 | tile = state->m_video_ram_1[(tile_addr*2+1) & 0x1fff] & 0x00ff; |
| 203 | 201 | attr = (state->m_video_ram_1[(tile_addr*2 & 0x1fff) | 0x2000] & 0x00ff); |
| 204 | 202 | |
| 205 | | // secret = (attr & 1) ^ 1; |
| 206 | | //blink = attr & 2; |
| 207 | | // reverse = attr & 4; |
| 208 | | // u_line = attr & 8; |
| 209 | | // v_line = attr & 0x10; |
| 203 | u_line = attr & 0x01; |
| 204 | o_line = attr & 0x02; |
| 205 | v_line = attr & 0x04; |
| 206 | blink = attr & 0x08; |
| 207 | reverse = attr & 0x10; |
| 208 | // secret= (attr & 1) ^ 1; |
| 210 | 209 | color = (attr & 0xe0) >> 5; |
| 211 | 210 | |
| 212 | 211 | for(yi=0;yi<lr;yi++) |
| r19056 | r19057 | |
| 225 | 224 | // tile_data = secret ? 0 : (state->m_char_rom[tile*char_size+interlace_on*0x800+yi]); |
| 226 | 225 | tile_data = (state->m_char_rom[(tile & 0x7f)+((tile & 0x80)<<4)+((yi & 0xf)*0x80)+((yi & 0x10)<<8)]); |
| 227 | 226 | |
| 228 | | // if(reverse) { tile_data^=0xff; } |
| 229 | | // if(u_line && yi == 7) { tile_data = 0xff; } |
| 230 | | // if(v_line) { tile_data|=8; } |
| 227 | if(reverse) { tile_data^=0xff; } |
| 228 | if(u_line && yi == lr-1) { tile_data = 0xff; } |
| 229 | if(o_line && yi == 0) { tile_data = 0xff; } |
| 230 | if(v_line) { tile_data|=8; } |
| 231 | if(blink && device->machine().primary_screen->frame_number() & 0x10) { tile_data = 0; } // TODO: rate & correct behaviour |
| 231 | 232 | |
| 232 | 233 | if(cursor_on && cursor_addr == tile_addr && device->machine().primary_screen->frame_number() & 0x10) |
| 233 | 234 | tile_data^=0xff; |
| r19056 | r19057 | |
| 297 | 298 | } |
| 298 | 299 | else |
| 299 | 300 | { |
| 300 | | printf("Read melody port %02x\n",offset+0x60); |
| 301 | //printf("Read melody port %02x\n",offset+0x60); |
| 301 | 302 | res = 0x80; |
| 302 | 303 | } |
| 303 | 304 | |
| r19056 | r19057 | |
| 404 | 405 | |
| 405 | 406 | static ADDRESS_MAP_START( apc_map, AS_PROGRAM, 16, apc_state ) |
| 406 | 407 | AM_RANGE(0x00000, 0x9ffff) AM_RAM |
| 407 | | // AM_RANGE(0xa0000, 0xaffff) space for an external ROM |
| 408 | // AM_RANGE(0xa0000, 0xa0fff) CMOS |
| 409 | // AM_RANGE(0xc0000, 0xcffff) standard character ROM |
| 410 | // AM_RANGE(0xde000, 0xdffff) AUX character RAM |
| 411 | // AM_RANGE(0xe0000, 0xeffff) Special Character RAM |
| 408 | 412 | AM_RANGE(0xfe000, 0xfffff) AM_ROM AM_REGION("ipl", 0) |
| 409 | 413 | ADDRESS_MAP_END |
| 410 | 414 | |
| r19056 | r19057 | |
| 743 | 747 | irq assignment: |
| 744 | 748 | |
| 745 | 749 | 8259 master: |
| 746 | | ir0 (enabled at POST, unknown purpose) |
| 747 | | ir1 |
| 748 | | ir2 |
| 749 | | ir3 (enabled after CP/M loading, serial?) |
| 750 | ir0 all stop (enabled at POST, unknown purpose) |
| 751 | ir1 Communication |
| 752 | ir2 Option |
| 753 | ir3 Timer (enabled after CP/M loading, serial?) |
| 750 | 754 | ir4 keyboard (almost trusted, check code at fe64a) |
| 751 | | ir5 |
| 752 | | ir6 |
| 753 | | ir7 |
| 755 | ir5 Option |
| 756 | ir6 Option |
| 757 | ir7 (ODA Printer?) |
| 754 | 758 | |
| 755 | 759 | 8259 slave: |
| 756 | | ir0 |
| 757 | | ir1 |
| 758 | | ir2 |
| 759 | | ir3 fdd irq? |
| 760 | | ir4 |
| 761 | | ir5 |
| 762 | | ir6 |
| 763 | | ir7 |
| 760 | ir0 Option |
| 761 | ir1 Option |
| 762 | ir2 CRT |
| 763 | ir3 FDD |
| 764 | ir4 Option |
| 765 | ir5 Option |
| 766 | ir6 APU |
| 767 | ir7 Option |
| 764 | 768 | */ |
| 765 | 769 | |
| 766 | 770 | WRITE_LINE_MEMBER(apc_state::apc_master_set_int_line) |
trunk/src/mess/video/upd7220.c
| r19056 | r19057 | |
| 1248 | 1248 | case COMMAND_START: /* start display & end idle mode */ |
| 1249 | 1249 | m_de = 1; |
| 1250 | 1250 | |
| 1251 | | if (LOG) logerror("uPD7220 '%s' DE: 1\n", tag()); |
| 1251 | //if (LOG) logerror("uPD7220 '%s' DE: 1\n", tag()); |
| 1252 | 1252 | break; |
| 1253 | 1253 | |
| 1254 | 1254 | case COMMAND_BCTRL: /* display blanking control */ |
| 1255 | 1255 | m_de = m_cr & 0x01; |
| 1256 | 1256 | |
| 1257 | | if (LOG) logerror("uPD7220 '%s' DE: %u\n", tag(), m_de); |
| 1257 | //if (LOG) logerror("uPD7220 '%s' DE: %u\n", tag(), m_de); |
| 1258 | 1258 | break; |
| 1259 | 1259 | |
| 1260 | 1260 | case COMMAND_ZOOM: /* zoom factors specify */ |
| r19056 | r19057 | |
| 1275 | 1275 | |
| 1276 | 1276 | m_ead = (upper_addr << 16) | (m_pr[2] << 8) | m_pr[1]; |
| 1277 | 1277 | |
| 1278 | | if (LOG) logerror("uPD7220 '%s' EAD: %06x\n", tag(), m_ead); |
| 1278 | //if (LOG) logerror("uPD7220 '%s' EAD: %06x\n", tag(), m_ead); |
| 1279 | 1279 | |
| 1280 | 1280 | if(m_param_ptr == 4) |
| 1281 | 1281 | { |
| 1282 | 1282 | m_dad = m_pr[3] >> 4; |
| 1283 | | if (LOG) logerror("uPD7220 '%s' DAD: %01x\n", tag(), m_dad); |
| 1283 | //if (LOG) logerror("uPD7220 '%s' DAD: %01x\n", tag(), m_dad); |
| 1284 | 1284 | } |
| 1285 | 1285 | } |
| 1286 | 1286 | break; |