src/mess/drivers/vt240.c
| r12865 | r12866 | |
| 17 | 17 | #include "cpu/i8085/i8085.h" |
| 18 | 18 | #include "cpu/t11/t11.h" |
| 19 | 19 | #include "machine/ram.h" |
| 20 | #include "video/upd7220.h" |
| 20 | 21 | |
| 22 | #define VIDEO_START_MEMBER(name) void name::video_start() |
| 23 | #define SCREEN_UPDATE_MEMBER(name) bool name::screen_update(screen_device &screen, bitmap_t &bitmap, const rectangle &cliprect) |
| 21 | 24 | |
| 22 | 25 | class vt240_state : public driver_device |
| 23 | 26 | { |
| 24 | 27 | public: |
| 25 | 28 | vt240_state(const machine_config &mconfig, device_type type, const char *tag) |
| 26 | | : driver_device(mconfig, type, tag) { } |
| 29 | : driver_device(mconfig, type, tag), |
| 30 | m_hgdc(*this, "upd7220") |
| 31 | { } |
| 27 | 32 | |
| 28 | | DECLARE_READ8_MEMBER(v240_00_r); |
| 33 | required_device<upd7220_device> m_hgdc; |
| 34 | |
| 35 | virtual void video_start(); |
| 36 | virtual bool screen_update(screen_device &screen, bitmap_t &bitmap, const rectangle &cliprect); |
| 29 | 37 | }; |
| 30 | 38 | |
| 39 | /* TODO */ |
| 40 | static UPD7220_DRAW_TEXT_LINE( hgdc_draw_text ) |
| 41 | { |
| 42 | //vt240_state *state = device->machine().driver_data<a5105_state>(); |
| 43 | //int x; |
| 44 | //int xi,yi; |
| 45 | //int tile,color; |
| 46 | //UINT8 tile_data; |
| 31 | 47 | |
| 32 | | READ8_MEMBER( vt240_state::v240_00_r ) |
| 48 | #if 0 |
| 49 | for( x = 0; x < pitch; x++ ) |
| 50 | { |
| 51 | tile = (vram[(addr+x)*2] & 0xff); |
| 52 | color = (vram[(addr+x)*2+1] & 0x0f); |
| 53 | |
| 54 | for( yi = 0; yi < lr; yi++) |
| 55 | { |
| 56 | tile_data = state->m_char_rom[(tile*8+yi) & 0x7ff]; |
| 57 | |
| 58 | if(cursor_on && cursor_addr == addr+x) //TODO |
| 59 | tile_data^=0xff; |
| 60 | |
| 61 | for( xi = 0; xi < 8; xi++) |
| 62 | { |
| 63 | int res_x,res_y; |
| 64 | int pen = (tile_data >> xi) & 1 ? color : 0; |
| 65 | |
| 66 | if(yi >= 8) { pen = 0; } |
| 67 | |
| 68 | res_x = x * 8 + xi; |
| 69 | res_y = y * lr + yi; |
| 70 | |
| 71 | if(res_x > screen_max_x || res_y > screen_max_y) |
| 72 | continue; |
| 73 | |
| 74 | *BITMAP_ADDR16(bitmap, res_y, res_x) = pen; |
| 75 | } |
| 76 | } |
| 77 | } |
| 78 | #endif |
| 79 | } |
| 80 | |
| 81 | |
| 82 | VIDEO_START_MEMBER( vt240_state ) |
| 33 | 83 | { |
| 34 | | return 4 | (machine().rand() & 0x20); |
| 84 | // find memory regions |
| 85 | //m_char_rom = machine().region("pcg")->base(); |
| 86 | |
| 87 | VIDEO_START_NAME(generic_bitmapped)(machine()); |
| 35 | 88 | } |
| 36 | 89 | |
| 90 | SCREEN_UPDATE_MEMBER( vt240_state ) |
| 91 | { |
| 92 | /* graphics */ |
| 93 | m_hgdc->update_screen(&bitmap, &cliprect); |
| 94 | |
| 95 | return 0; |
| 96 | } |
| 97 | |
| 98 | |
| 99 | |
| 37 | 100 | static ADDRESS_MAP_START(vt240_mem, AS_PROGRAM, 8, vt240_state) |
| 38 | 101 | ADDRESS_MAP_UNMAP_HIGH |
| 39 | 102 | AM_RANGE(0x0000, 0x3fff) AM_ROM AM_REGION("ipl", 0) |
| r12865 | r12866 | |
| 44 | 107 | static ADDRESS_MAP_START(vt240_io, AS_IO, 8, vt240_state) |
| 45 | 108 | ADDRESS_MAP_UNMAP_HIGH |
| 46 | 109 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 47 | | AM_RANGE(0x00, 0x00) AM_READ(v240_00_r) |
| 110 | AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("upd7220", upd7220_device, read, write) |
| 48 | 111 | ADDRESS_MAP_END |
| 49 | 112 | |
| 113 | |
| 114 | static ADDRESS_MAP_START( upd7220_map, AS_0, 8, vt240_state) |
| 115 | AM_RANGE(0x00000, 0x3ffff) AM_DEVREADWRITE("upd7220", upd7220_device, vram_r, vram_w) |
| 116 | ADDRESS_MAP_END |
| 117 | |
| 50 | 118 | /* Input ports */ |
| 51 | 119 | static INPUT_PORTS_START( vt240 ) |
| 52 | 120 | INPUT_PORTS_END |
| r12865 | r12866 | |
| 56 | 124 | { |
| 57 | 125 | } |
| 58 | 126 | |
| 59 | | static VIDEO_START( vt240 ) |
| 127 | static UPD7220_INTERFACE( hgdc_intf ) |
| 60 | 128 | { |
| 61 | | } |
| 129 | "screen", |
| 130 | NULL, |
| 131 | hgdc_draw_text, |
| 132 | DEVCB_NULL, |
| 133 | DEVCB_NULL, |
| 134 | DEVCB_NULL |
| 135 | }; |
| 62 | 136 | |
| 63 | | static SCREEN_UPDATE( vt240 ) |
| 137 | static INTERRUPT_GEN( vt240_irq ) |
| 64 | 138 | { |
| 65 | | return 0; |
| 139 | device_set_input_line(device, I8085_RST65_LINE, ASSERT_LINE); |
| 140 | device_set_input_line(device, I8085_RST65_LINE, CLEAR_LINE); |
| 66 | 141 | } |
| 67 | 142 | |
| 68 | 143 | static MACHINE_CONFIG_START( vt240, vt240_state ) |
| r12865 | r12866 | |
| 70 | 145 | MCFG_CPU_ADD("maincpu", I8085A, XTAL_16MHz / 4) |
| 71 | 146 | MCFG_CPU_PROGRAM_MAP(vt240_mem) |
| 72 | 147 | MCFG_CPU_IO_MAP(vt240_io) |
| 148 | MCFG_CPU_VBLANK_INT("screen",vt240_irq) |
| 73 | 149 | |
| 74 | 150 | MCFG_MACHINE_RESET(vt240) |
| 75 | 151 | |
| r12865 | r12866 | |
| 80 | 156 | MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) |
| 81 | 157 | MCFG_SCREEN_SIZE(640, 480) |
| 82 | 158 | MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) |
| 83 | | MCFG_VIDEO_START(vt240) |
| 84 | | MCFG_SCREEN_UPDATE(vt240) |
| 85 | | MCFG_PALETTE_LENGTH(2) |
| 86 | | MCFG_PALETTE_INIT(black_and_white) |
| 159 | // MCFG_VIDEO_START(vt240) |
| 160 | // MCFG_SCREEN_UPDATE(vt240) |
| 161 | MCFG_PALETTE_LENGTH(8) |
| 162 | //MCFG_PALETTE_INIT(black_and_white) |
| 163 | |
| 164 | MCFG_UPD7220_ADD("upd7220", XTAL_4MHz, hgdc_intf, upd7220_map) //unknown clock |
| 87 | 165 | MACHINE_CONFIG_END |
| 88 | 166 | |
| 89 | 167 | /* ROM definition */ |