trunk/src/emu/video/upd7220.c
| r32419 | r32420 | |
| 852 | 852 | int dad = x & 0x7; |
| 853 | 853 | UINT8 data = readbyte(addr); |
| 854 | 854 | UINT8 new_pixel = (tile_data) & (0x80 >> (dad)); |
| 855 | | |
| 855 | |
| 856 | 856 | switch(m_bitmap_mod) |
| 857 | 857 | { |
| 858 | 858 | case 0: //replace |
| r32419 | r32420 | |
| 985 | 985 | |
| 986 | 986 | /* snippet for character checking */ |
| 987 | 987 | #if 0 |
| 988 | if((m_figs.m_dir & 7) == 3) |
| 988 | 989 | for(yi=0;yi<8;yi++) |
| 989 | 990 | { |
| 990 | 991 | for(xi=0;xi<8;xi++) |
| r32419 | r32420 | |
| 1000 | 1001 | ysize = ((m_figs.m_d & 0x400) + m_figs.m_dc) + 1; |
| 1001 | 1002 | |
| 1002 | 1003 | /* TODO: internal direction, zooming, size stuff bigger than 8, rewrite using draw_pixel function */ |
| 1003 | | for(yi=0;yi<ysize;yi++) |
| 1004 | if((m_figs.m_dir & 7) == 0) |
| 1005 | { |
| 1006 | for(yi=0;yi<8;yi++) |
| 1007 | { |
| 1008 | for(xi=0;xi<8;xi++) |
| 1009 | { |
| 1010 | UINT8 dot = (m_ra[((7-xi) & 7) | 8]); |
| 1011 | dot >>= yi; |
| 1012 | dot &= 1; |
| 1013 | dot*=0xff; |
| 1014 | draw_pixel(x+xi,y+yi,dot); |
| 1015 | } |
| 1016 | } |
| 1017 | } |
| 1018 | else |
| 1004 | 1019 | { |
| 1005 | | switch(m_figs.m_dir & 7) |
| 1020 | for(yi=0;yi<ysize;yi++) |
| 1006 | 1021 | { |
| 1007 | | case 0: tile_data = BITSWAP8(m_ra[((yi) & 7) | 8],0,1,2,3,4,5,6,7); break; // TODO |
| 1008 | | case 2: tile_data = BITSWAP8(m_ra[((yi) & 7) | 8],0,1,2,3,4,5,6,7); break; |
| 1009 | | case 6: tile_data = BITSWAP8(m_ra[((ysize-1-yi) & 7) | 8],7,6,5,4,3,2,1,0); break; |
| 1010 | | default: tile_data = BITSWAP8(m_ra[((yi) & 7) | 8],7,6,5,4,3,2,1,0); |
| 1011 | | logerror("%d %d %d\n",m_figs.m_dir,xsize,ysize); |
| 1022 | switch(m_figs.m_dir & 7) |
| 1023 | { |
| 1024 | case 2: tile_data = BITSWAP8(m_ra[((yi) & 7) | 8],0,1,2,3,4,5,6,7); break; |
| 1025 | case 6: tile_data = BITSWAP8(m_ra[((ysize-1-yi) & 7) | 8],7,6,5,4,3,2,1,0); break; |
| 1026 | default: tile_data = BITSWAP8(m_ra[((yi) & 7) | 8],7,6,5,4,3,2,1,0); |
| 1027 | logerror("upd7220 draw char: %d %d %d\n",m_figs.m_dir,xsize,ysize); |
| 1012 | 1028 | break; |
| 1013 | | } |
| 1029 | } |
| 1014 | 1030 | |
| 1015 | | for(xi=0;xi<xsize;xi++) |
| 1016 | | { |
| 1017 | | UINT32 addr = ((y+yi) * m_pitch * 2) + ((x+xi) >> 3); |
| 1031 | for(xi=0;xi<xsize;xi++) |
| 1032 | { |
| 1033 | UINT32 addr = ((y+yi) * m_pitch * 2) + ((x+xi) >> 3); |
| 1018 | 1034 | |
| 1019 | | writebyte(addr & 0x3ffff, readbyte(addr & 0x3ffff) & ~(1 << (xi & 7))); |
| 1020 | | writebyte(addr & 0x3ffff, readbyte(addr & 0x3ffff) | ((tile_data) & (1 << (xi & 7)))); |
| 1035 | writebyte(addr & 0x3ffff, readbyte(addr & 0x3ffff) & ~(1 << (xi & 7))); |
| 1036 | writebyte(addr & 0x3ffff, readbyte(addr & 0x3ffff) | ((tile_data) & (1 << (xi & 7)))); |
| 1037 | } |
| 1021 | 1038 | } |
| 1022 | 1039 | } |
| 1023 | | |
| 1024 | 1040 | m_ead = ((x+8*x_dir_dot[m_figs.m_dir]) >> 4) + ((y+8*y_dir_dot[m_figs.m_dir]) * m_pitch); |
| 1025 | 1041 | m_dad = ((x+8*x_dir_dot[m_figs.m_dir]) & 0xf); |
| 1026 | 1042 | } |
| r32419 | r32420 | |
| 1343 | 1359 | break; |
| 1344 | 1360 | |
| 1345 | 1361 | case COMMAND_FIGD: /* figure draw start */ |
| 1346 | | if(m_figs.m_figure_type == 0) |
| 1362 | if(m_figs.m_figure_type == 0 || m_figs.m_figure_type == 4) |
| 1347 | 1363 | { |
| 1348 | 1364 | UINT16 line_pattern = check_pattern((m_ra[8]) | (m_ra[9]<<8)); |
| 1349 | 1365 | UINT8 dot = ((line_pattern >> (0 & 0xf)) & 1) << 7; |
trunk/src/mess/drivers/pc9801.c
| r32419 | r32420 | |
| 552 | 552 | UINT8 m_joy_sel; |
| 553 | 553 | UINT8 m_ext2_ff; |
| 554 | 554 | UINT8 m_sys_type; |
| 555 | | UINT8 m_is_nec_bank; |
| 556 | 555 | |
| 557 | 556 | DECLARE_WRITE_LINE_MEMBER( keyboard_irq ); |
| 558 | 557 | DECLARE_WRITE_LINE_MEMBER( write_uart_clock ); |
| r32419 | r32420 | |
| 1905 | 1904 | WRITE8_MEMBER(pc9801_state::pc9801rs_bank_w) |
| 1906 | 1905 | { |
| 1907 | 1906 | if(offset == 1) |
| 1908 | | { |
| 1909 | | #if 0 |
| 1910 | | if(m_is_nec_bank) |
| 1911 | | { |
| 1912 | | m_rom_bank = 1; |
| 1913 | | return; |
| 1914 | | } |
| 1915 | | #endif |
| 1916 | | |
| 1907 | { |
| 1917 | 1908 | if((data & 0xf0) == 0x00 || (data & 0xf0) == 0x10) |
| 1918 | 1909 | { |
| 1919 | 1910 | if((data & 0xed) == 0x00) |
| r32419 | r32420 | |
| 3389 | 3380 | m_ide_ram = auto_alloc_array(machine(), UINT8, 0x2000); |
| 3390 | 3381 | m_ext_gvram = auto_alloc_array(machine(), UINT8, 0xa0000); |
| 3391 | 3382 | |
| 3392 | | m_is_nec_bank = 0; |
| 3393 | 3383 | save_pointer(NAME(m_sdip), 24); |
| 3394 | 3384 | save_pointer(NAME(m_ide_ram), 0x2000); |
| 3395 | 3385 | save_pointer(NAME(m_ext_gvram), 0xa0000); |
| r32419 | r32420 | |
| 3399 | 3389 | { |
| 3400 | 3390 | MACHINE_START_CALL_MEMBER(pc9821); |
| 3401 | 3391 | |
| 3402 | | m_is_nec_bank = 1; |
| 3392 | // ... |
| 3403 | 3393 | } |
| 3404 | 3394 | |
| 3405 | 3395 | MACHINE_RESET_MEMBER(pc9801_state,pc9801_common) |
| r32419 | r32420 | |
| 3901 | 3891 | MCFG_CPU_IO_MAP(pc9821_io) |
| 3902 | 3892 | MCFG_CPU_VBLANK_INT_DRIVER("screen", pc9801_state, pc9801_vrtc_irq) |
| 3903 | 3893 | MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259_master", pic8259_device, inta_cb) |
| 3904 | | |
| 3894 | |
| 3905 | 3895 | MCFG_MACHINE_START_OVERRIDE(pc9801_state,pc9821ap2) |
| 3906 | 3896 | MACHINE_CONFIG_END |
| 3907 | 3897 | |