trunk/src/mess/drivers/pasopia7.c
| r19853 | r19854 | |
| 5 | 5 | preliminary driver by Angelo Salese |
| 6 | 6 | |
| 7 | 7 | TODO: |
| 8 | | - Z80PIO keyboard irqs doesn't work at all, kludged keyboard inputs to work for now |
| 9 | 8 | - floppy support (but floppy images are unobtainable at current time) |
| 10 | 9 | - cassette device; |
| 11 | 10 | - beeper |
| 12 | 11 | - LCD version has gfx bugs, it must use a different ROM charset for instance (apparently a 8 x 4 |
| 13 | 12 | one, 40/80 x 8 tilemap); |
| 14 | 13 | |
| 14 | Reading fdc has been commented out, until the code can be modified to |
| 15 | work with new upd765 (was causing a hang at boot). |
| 16 | |
| 15 | 17 | ***************************************************************************************************/ |
| 16 | 18 | |
| 17 | 19 | #include "emu.h" |
| r19853 | r19854 | |
| 113 | 115 | UINT32 screen_update_pasopia7(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 114 | 116 | |
| 115 | 117 | void fdc_irq(bool state); |
| 118 | TIMER_CALLBACK_MEMBER(pio_timer); |
| 116 | 119 | }; |
| 117 | 120 | |
| 118 | 121 | #define VDP_CLOCK XTAL_3_579545MHz/4 |
| 119 | 122 | #define LCD_CLOCK VDP_CLOCK/10 |
| 120 | 123 | |
| 124 | // needed to scan the keyboard, as the pio emulation doesn't do it. |
| 125 | TIMER_CALLBACK_MEMBER(pasopia7_state::pio_timer) |
| 126 | { |
| 127 | m_pio->port_b_write(keyb_r(generic_space(),0,0xff)); |
| 128 | } |
| 129 | |
| 121 | 130 | VIDEO_START_MEMBER(pasopia7_state,pasopia7) |
| 122 | 131 | { |
| 123 | 132 | m_p7_pal = auto_alloc_array(machine(), UINT8, 0x10); |
| 124 | 133 | } |
| 125 | 134 | |
| 126 | | #define keyb_press(_val_,_charset_) \ |
| 127 | | if(machine.input().code_pressed(_val_)) \ |
| 128 | | { \ |
| 129 | | ram_space->write_byte(0xfda4,0x01); \ |
| 130 | | ram_space->write_byte(0xfce1,_charset_); \ |
| 131 | | } \ |
| 132 | | |
| 133 | | #define keyb_shift_press(_val_,_charset_) \ |
| 134 | | if(machine.input().code_pressed(_val_) && machine.input().code_pressed(KEYCODE_LSHIFT)) \ |
| 135 | | { \ |
| 136 | | ram_space->write_byte(0xfda4,0x01); \ |
| 137 | | ram_space->write_byte(0xfce1,_charset_); \ |
| 138 | | } \ |
| 139 | | |
| 140 | | |
| 141 | 135 | static void draw_cg4_screen(running_machine &machine, bitmap_ind16 &bitmap,const rectangle &cliprect,int width) |
| 142 | 136 | { |
| 143 | 137 | UINT8 *vram = machine.root_device().memregion("vram")->base(); |
| r19853 | r19854 | |
| 618 | 612 | // else if(io_port == 0x3b) { SN2 } |
| 619 | 613 | // else if(io_port == 0x3c) { bankswitch } |
| 620 | 614 | else |
| 621 | | if(io_port >= 0xe0 && io_port <= 0xe6) |
| 622 | | return pasopia7_fdc_r(space, offset & 7); |
| 623 | | else |
| 615 | // if(io_port >= 0xe0 && io_port <= 0xe6) |
| 616 | // return pasopia7_fdc_r(space, offset & 7); |
| 617 | // else |
| 624 | 618 | { |
| 625 | 619 | logerror("(PC=%06x) Read i/o address %02x\n",m_maincpu->pc(),io_port); |
| 626 | 620 | } |
| r19853 | r19854 | |
| 1108 | 1102 | { |
| 1109 | 1103 | |
| 1110 | 1104 | m_screen_type = 1; |
| 1105 | machine().scheduler().timer_pulse(attotime::from_hz(500), timer_expired_delegate(FUNC(pasopia7_state::pio_timer),this)); |
| 1111 | 1106 | } |
| 1112 | 1107 | |
| 1113 | 1108 | DRIVER_INIT_MEMBER(pasopia7_state,p7_lcd) |
| 1114 | 1109 | { |
| 1115 | 1110 | |
| 1116 | 1111 | m_screen_type = 0; |
| 1112 | machine().scheduler().timer_pulse(attotime::from_hz(500), timer_expired_delegate(FUNC(pasopia7_state::pio_timer),this)); |
| 1117 | 1113 | } |
| 1118 | 1114 | |
| 1119 | 1115 | |
| 1120 | 1116 | /* Driver */ |
| 1121 | 1117 | |
| 1122 | | COMP( 1983, pasopia7, 0, 0, p7_raster, pasopia7, pasopia7_state, p7_raster, "Toshiba", "Pasopia 7 (Raster)", GAME_NOT_WORKING ) |
| 1123 | | COMP( 1983, pasopia7lcd, pasopia7, 0, p7_lcd, pasopia7, pasopia7_state, p7_lcd, "Toshiba", "Pasopia 7 (LCD)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS ) |
| 1118 | COMP( 1983, pasopia7, 0, 0, p7_raster, pasopia7, pasopia7_state, p7_raster, "Toshiba", "Pasopia 7 (Raster)", GAME_NOT_WORKING ) |
| 1119 | COMP( 1983, pasopia7lcd, pasopia7, 0, p7_lcd, pasopia7, pasopia7_state, p7_lcd, "Toshiba", "Pasopia 7 (LCD)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS ) |