trunk/src/emu/video/i8275x.h
| r29244 | r29245 | |
| 45 | 45 | // INTERFACE CONFIGURATION MACROS |
| 46 | 46 | //************************************************************************** |
| 47 | 47 | |
| 48 | #define I8275_DRAW_CHARACTER_MEMBER(_name) void _name(bitmap_rgb32 &bitmap, int x, int y, UINT8 linecount, UINT8 charcode, UINT8 lineattr, UINT8 lten, UINT8 rvv, UINT8 vsp, UINT8 gpa, UINT8 hlgt) |
| 49 | |
| 50 | |
| 48 | 51 | #define MCFG_I8275_CHARACTER_WIDTH(_value) \ |
| 49 | 52 | i8275x_device::static_set_character_width(*device, _value); |
| 50 | 53 | |
| 51 | | #define MCFG_I8275_DISPLAY_CALLBACK(_func) \ |
| 52 | | i8275x_device::static_set_display_callback(*device, _func); |
| 54 | #define MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(_class, _method) \ |
| 55 | i8275x_device::static_set_display_callback(*device, i8275_draw_character_delegate(&_class::_method, #_class "::" #_method, downcast<_class *>(owner))); |
| 53 | 56 | |
| 54 | 57 | #define MCFG_I8275_DRQ_CALLBACK(_write) \ |
| 55 | 58 | devcb = &i8275x_device::set_drq_wr_callback(*device, DEVCB2_##_write); |
| r29244 | r29245 | |
| 70 | 73 | // TYPE DEFINITIONS |
| 71 | 74 | //************************************************************************** |
| 72 | 75 | |
| 73 | | class i8275x_device; |
| 76 | typedef device_delegate<void (bitmap_rgb32 &bitmap, int x, int y, UINT8 linecount, UINT8 charcode, UINT8 lineattr, UINT8 lten, UINT8 rvv, UINT8 vsp, UINT8 gpa, UINT8 hlgt)> i8275_draw_character_delegate; |
| 74 | 77 | |
| 75 | 78 | |
| 76 | | // ======================> i8275_display_pixels_func |
| 77 | | |
| 78 | | typedef void (*i8275_display_pixels_func)(i8275x_device *device, bitmap_rgb32 &bitmap, int x, int y, UINT8 linecount, UINT8 charcode, UINT8 lineattr, UINT8 lten, UINT8 rvv, UINT8 vsp, UINT8 gpa, UINT8 hlgt); |
| 79 | | #define I8275_DISPLAY_PIXELS(name) void name(i8275x_device *device, bitmap_rgb32 &bitmap, int x, int y, UINT8 linecount, UINT8 charcode, UINT8 lineattr, UINT8 lten, UINT8 rvv, UINT8 vsp, UINT8 gpa, UINT8 hlgt) |
| 80 | | |
| 81 | | |
| 82 | 79 | // ======================> i8275x_device |
| 83 | 80 | |
| 84 | 81 | class i8275x_device : public device_t, |
| r29244 | r29245 | |
| 89 | 86 | i8275x_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 90 | 87 | |
| 91 | 88 | static void static_set_character_width(device_t &device, int value) { downcast<i8275x_device &>(device).m_hpixels_per_column = value; } |
| 92 | | static void static_set_display_callback(device_t &device, i8275_display_pixels_func func) { downcast<i8275x_device &>(device).m_display_cb = func; } |
| 89 | static void static_set_display_callback(device_t &device, i8275_draw_character_delegate callback) { downcast<i8275x_device &>(device).m_display_cb = callback; } |
| 93 | 90 | |
| 94 | 91 | template<class _Object> static devcb2_base &set_drq_wr_callback(device_t &device, _Object object) { return downcast<i8275x_device &>(device).m_write_drq.set_callback(object); } |
| 95 | 92 | template<class _Object> static devcb2_base &set_irq_wr_callback(device_t &device, _Object object) { return downcast<i8275x_device &>(device).m_write_irq.set_callback(object); } |
| r29244 | r29245 | |
| 178 | 175 | devcb2_write_line m_write_hrtc; |
| 179 | 176 | devcb2_write_line m_write_vrtc; |
| 180 | 177 | |
| 181 | | i8275_display_pixels_func m_display_cb; |
| 178 | i8275_draw_character_delegate m_display_cb; |
| 182 | 179 | int m_hpixels_per_column; |
| 183 | 180 | |
| 184 | 181 | bitmap_rgb32 m_bitmap; |
trunk/src/mess/video/mikromik.c
| r29244 | r29245 | |
| 8 | 8 | // i8275_interface crtc_intf |
| 9 | 9 | //------------------------------------------------- |
| 10 | 10 | |
| 11 | | static I8275_DISPLAY_PIXELS( crtc_display_pixels ) |
| 11 | I8275_DRAW_CHARACTER_MEMBER( mm1_state::crtc_display_pixels ) |
| 12 | 12 | { |
| 13 | | mm1_state *state = device->machine().driver_data<mm1_state>(); |
| 13 | UINT8 romdata = m_char_rom->base()[(charcode << 4) | linecount]; |
| 14 | 14 | |
| 15 | | UINT8 romdata = state->m_char_rom->base()[(charcode << 4) | linecount]; |
| 16 | | |
| 17 | 15 | int d0 = BIT(romdata, 0); |
| 18 | 16 | int d7 = BIT(romdata, 7); |
| 19 | 17 | int gpa0 = BIT(gpa, 0); |
| 20 | | int llen = state->m_llen; |
| 18 | int llen = m_llen; |
| 21 | 19 | int i; |
| 22 | 20 | |
| 23 | 21 | UINT8 data = (romdata << 1) | (d7 & d0); |
| r29244 | r29245 | |
| 31 | 29 | |
| 32 | 30 | int color = hlt_in ? 2 : (video_in ^ compl_in); |
| 33 | 31 | |
| 34 | | bitmap.pix32(y, x + i) = state->m_palette->pen(color); |
| 32 | bitmap.pix32(y, x + i) = m_palette->pen(color); |
| 35 | 33 | } |
| 36 | 34 | } |
| 37 | 35 | |
| r29244 | r29245 | |
| 116 | 114 | |
| 117 | 115 | MCFG_DEVICE_ADD(I8275_TAG, I8275x, XTAL_18_720MHz/8) |
| 118 | 116 | MCFG_I8275_CHARACTER_WIDTH(8) |
| 119 | | MCFG_I8275_DISPLAY_CALLBACK(crtc_display_pixels) |
| 117 | MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(mm1_state, crtc_display_pixels) |
| 120 | 118 | MCFG_I8275_DRQ_CALLBACK(DEVWRITELINE(I8237_TAG, am9517a_device, dreq0_w)) |
| 121 | 119 | MCFG_I8275_VRTC_CALLBACK(DEVWRITELINE(UPD7220_TAG, upd7220_device, ext_sync_w)) |
| 122 | 120 | MCFG_VIDEO_SET_SCREEN(SCREEN_TAG) |
trunk/src/mess/drivers/wicat.c
| r29244 | r29245 | |
| 87 | 87 | DECLARE_READ16_MEMBER(via_r); |
| 88 | 88 | DECLARE_WRITE16_MEMBER(via_w); |
| 89 | 89 | DECLARE_WRITE_LINE_MEMBER(kb_data_ready); |
| 90 | I8275_DRAW_CHARACTER_MEMBER(wicat_display_pixels); |
| 90 | 91 | |
| 91 | 92 | required_shared_ptr<UINT8> m_vram; |
| 92 | 93 | required_device<m68000_device> m_maincpu; |
| r29244 | r29245 | |
| 730 | 731 | m_videocpu->set_input_line(INPUT_LINE_IRQ0,m_crtc_irq); |
| 731 | 732 | } |
| 732 | 733 | |
| 733 | | I8275_DISPLAY_PIXELS(wicat_display_pixels) |
| 734 | I8275_DRAW_CHARACTER_MEMBER(wicat_state::wicat_display_pixels) |
| 734 | 735 | { |
| 735 | | wicat_state *state = device->machine().driver_data<wicat_state>(); |
| 736 | UINT8 romdata = m_chargen->base()[((charcode << 4) | linecount) + 1]; |
| 737 | const pen_t *pen = m_palette->pens(); |
| 736 | 738 | |
| 737 | | UINT8 romdata = state->m_chargen->base()[((charcode << 4) | linecount) + 1]; |
| 738 | | const pen_t *pen = state->m_palette->pens(); |
| 739 | | |
| 740 | 739 | for (int i = 0; i < 8; i++) |
| 741 | 740 | { |
| 742 | 741 | int color = (romdata >> (7-i)) & 0x01; |
| r29244 | r29245 | |
| 889 | 888 | |
| 890 | 889 | MCFG_DEVICE_ADD("video", I8275x, XTAL_19_6608MHz/8) |
| 891 | 890 | MCFG_I8275_CHARACTER_WIDTH(9) |
| 892 | | MCFG_I8275_DISPLAY_CALLBACK(wicat_display_pixels) |
| 891 | MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(wicat_state, wicat_display_pixels) |
| 893 | 892 | MCFG_I8275_DRQ_CALLBACK(DEVWRITELINE("videodma",am9517a_device, dreq0_w)) |
| 894 | 893 | MCFG_I8275_IRQ_CALLBACK(WRITELINE(wicat_state,crtc_cb)) |
| 895 | 894 | MCFG_VIDEO_SET_SCREEN("screen") |
trunk/src/mess/drivers/zorba.c
| r29244 | r29245 | |
| 82 | 82 | DECLARE_WRITE8_MEMBER(pia0_porta_w); |
| 83 | 83 | DECLARE_WRITE8_MEMBER(kbd_put); |
| 84 | 84 | DECLARE_READ8_MEMBER(keyboard_r); |
| 85 | I8275_DRAW_CHARACTER_MEMBER( zorba_update_chr ); |
| 86 | |
| 85 | 87 | private: |
| 86 | 88 | UINT8 m_term_data; |
| 87 | 89 | required_device<cpu_device> m_maincpu; |
| r29244 | r29245 | |
| 258 | 260 | palette.set_pen_color(2, 0, 128, 0 ); /* Dimmed */ |
| 259 | 261 | } |
| 260 | 262 | |
| 261 | | static I8275_DISPLAY_PIXELS( zorba_update_chr ) |
| 263 | I8275_DRAW_CHARACTER_MEMBER( zorba_state::zorba_update_chr ) |
| 262 | 264 | { |
| 263 | 265 | int i; |
| 264 | | zorba_state *state = device->machine().driver_data<zorba_state>(); |
| 265 | | const rgb_t *palette = state->m_palette->palette()->entry_list_raw(); |
| 266 | | UINT8 gfx = state->m_p_chargen[(linecount & 15) + (charcode << 4)]; |
| 266 | const rgb_t *palette = m_palette->palette()->entry_list_raw(); |
| 267 | UINT8 gfx = m_p_chargen[(linecount & 15) + (charcode << 4)]; |
| 267 | 268 | |
| 268 | 269 | if (vsp) |
| 269 | 270 | gfx = 0; |
| r29244 | r29245 | |
| 396 | 397 | |
| 397 | 398 | MCFG_DEVICE_ADD("crtc", I8275x, XTAL_14_31818MHz/7) |
| 398 | 399 | MCFG_I8275_CHARACTER_WIDTH(8) |
| 399 | | MCFG_I8275_DISPLAY_CALLBACK(zorba_update_chr) |
| 400 | MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(zorba_state, zorba_update_chr) |
| 400 | 401 | MCFG_I8275_DRQ_CALLBACK(DEVWRITELINE("dma", z80dma_device, rdy_w)) |
| 401 | 402 | MCFG_I8275_IRQ_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) |
| 402 | 403 | MCFG_FD1793x_ADD("fdc", XTAL_24MHz / 24) |