trunk/src/mess/video/k1ge.c
| r22942 | r22943 | |
| 41 | 41 | } |
| 42 | 42 | |
| 43 | 43 | |
| 44 | | READ8_MEMBER( k1ge_device::read ) |
| 44 | READ8_MEMBER( k1ge_device::reg_read ) |
| 45 | 45 | { |
| 46 | 46 | UINT8 data = m_vram[offset & 0x7ff]; |
| 47 | 47 | |
| r22942 | r22943 | |
| 58 | 58 | } |
| 59 | 59 | |
| 60 | 60 | |
| 61 | | WRITE8_MEMBER( k1ge_device::write ) |
| 61 | WRITE8_MEMBER( k1ge_device::reg_write ) |
| 62 | 62 | { |
| 63 | 63 | switch( offset ) |
| 64 | 64 | { |
| r22942 | r22943 | |
| 92 | 92 | m_vram[offset & 0x7ff] = data; |
| 93 | 93 | } |
| 94 | 94 | |
| 95 | // TODO: these i/o handlers can probably be merged with the above... |
| 96 | READ8_MEMBER( k1ge_device::vram_read ) |
| 97 | { |
| 98 | assert(offset < 0x3800); |
| 99 | return m_vram[0x800 + offset]; |
| 100 | } |
| 95 | 101 | |
| 102 | |
| 103 | WRITE8_MEMBER( k1ge_device::vram_write ) |
| 104 | { |
| 105 | assert(offset < 0x3800); |
| 106 | m_vram[0x800 + offset] = data; |
| 107 | } |
| 108 | |
| 109 | |
| 96 | 110 | void k1ge_device::draw_scroll_plane( UINT16 *p, UINT16 base, int line, int scroll_x, int scroll_y, int pal_base ) |
| 97 | 111 | { |
| 98 | 112 | int i; |
| r22942 | r22943 | |
| 797 | 811 | m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(k1ge_device::timer_callback), this)); |
| 798 | 812 | m_hblank_on_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(k1ge_device::hblank_on_timer_callback), this)); |
| 799 | 813 | m_screen = machine().device<screen_device>(m_screen_tag); |
| 800 | | m_vram = machine().root_device().memregion( m_vram_tag )->base(); |
| 814 | m_vram = auto_alloc_array_clear(machine(), UINT8, 0x4000); |
| 801 | 815 | m_bitmap = auto_bitmap_ind16_alloc( machine(), m_screen->width(), m_screen->height() ); |
| 816 | |
| 817 | save_pointer(NAME(m_vram), 0x4000); |
| 818 | save_item(NAME(m_wba_h)); |
| 819 | save_item(NAME(m_wba_v)); |
| 820 | save_item(NAME(m_wsi_h)); |
| 821 | save_item(NAME(m_wsi_v)); |
| 802 | 822 | } |
| 803 | 823 | |
| 804 | 824 | |
trunk/src/mess/video/k1ge.h
| r22942 | r22943 | |
| 5 | 5 | #include "devcb.h" |
| 6 | 6 | |
| 7 | 7 | |
| 8 | | #define MCFG_K1GE_ADD(_tag, _clock, _screen, _vram, _vblank, _hblank ) \ |
| 8 | #define MCFG_K1GE_ADD(_tag, _clock, _screen, _vblank, _hblank ) \ |
| 9 | 9 | MCFG_DEVICE_ADD( _tag, K1GE, _clock ) \ |
| 10 | 10 | k1ge_device::static_set_screen( *device, _screen ); \ |
| 11 | | k1ge_device::static_set_vram( *device, _vram ); \ |
| 12 | 11 | devcb = &k1ge_device::static_set_vblank_callback( *device, DEVCB2_##_vblank ); \ |
| 13 | 12 | devcb = &k1ge_device::static_set_hblank_callback( *device, DEVCB2_##_hblank ); |
| 14 | 13 | |
| 15 | | #define MCFG_K2GE_ADD(_tag, _clock, _screen, _vram, _vblank, _hblank ) \ |
| 14 | #define MCFG_K2GE_ADD(_tag, _clock, _screen, _vblank, _hblank ) \ |
| 16 | 15 | MCFG_DEVICE_ADD( _tag, K2GE, _clock ) \ |
| 17 | 16 | k1ge_device::static_set_screen( *device, _screen ); \ |
| 18 | | k1ge_device::static_set_vram( *device, _vram ); \ |
| 19 | 17 | devcb = &k1ge_device::static_set_vblank_callback( *device, DEVCB2_##_vblank ); \ |
| 20 | 18 | devcb = &k1ge_device::static_set_hblank_callback( *device, DEVCB2_##_hblank ); |
| 21 | 19 | |
| r22942 | r22943 | |
| 26 | 24 | k1ge_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 27 | 25 | k1ge_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock); |
| 28 | 26 | |
| 29 | | DECLARE_READ8_MEMBER( read ); |
| 30 | | DECLARE_WRITE8_MEMBER( write ); |
| 27 | DECLARE_READ8_MEMBER( reg_read ); |
| 28 | DECLARE_WRITE8_MEMBER( reg_write ); |
| 29 | DECLARE_READ8_MEMBER( vram_read ); |
| 30 | DECLARE_WRITE8_MEMBER( vram_write ); |
| 31 | 31 | |
| 32 | 32 | void update( bitmap_ind16 &bitmap, const rectangle &cliprect ); |
| 33 | 33 | |
| 34 | 34 | // Static methods |
| 35 | 35 | static void static_set_screen(device_t &device, const char *screen_name) { downcast<k1ge_device &>(device).m_screen_tag = screen_name; } |
| 36 | | static void static_set_vram(device_t &device, const char *vram_name) { downcast<k1ge_device &>(device).m_vram_tag = vram_name; } |
| 37 | 36 | template<class _Object> static devcb2_base &static_set_vblank_callback(device_t &device, _Object object) { return downcast<k1ge_device &>(device).m_vblank_pin_w.set_callback(object); } |
| 38 | 37 | template<class _Object> static devcb2_base &static_set_hblank_callback(device_t &device, _Object object) { return downcast<k1ge_device &>(device).m_hblank_pin_w.set_callback(object); } |
| 39 | 38 | |
| r22942 | r22943 | |
| 44 | 43 | virtual void device_reset(); |
| 45 | 44 | |
| 46 | 45 | const char *m_screen_tag; |
| 47 | | const char *m_vram_tag; |
| 48 | 46 | screen_device *m_screen; |
| 49 | 47 | devcb2_write_line m_vblank_pin_w; |
| 50 | 48 | devcb2_write_line m_hblank_pin_w; |
trunk/src/mess/drivers/ngp.c
| r22942 | r22943 | |
| 541 | 541 | AM_RANGE( 0x000080, 0x0000bf ) AM_READWRITE(ngp_io_r, ngp_io_w) /* ngp/c specific i/o */ |
| 542 | 542 | AM_RANGE( 0x004000, 0x006fff ) AM_RAM AM_SHARE("mainram") /* work ram */ |
| 543 | 543 | AM_RANGE( 0x007000, 0x007fff ) AM_RAM AM_SHARE("share1") /* shared with sound cpu */ |
| 544 | | AM_RANGE( 0x008000, 0x0087ff ) AM_DEVREADWRITE("k1ge", k1ge_device, read, write) /* video registers */ |
| 545 | | AM_RANGE( 0x008800, 0x00bfff ) AM_RAM AM_REGION("vram", 0x800 ) /* Video RAM area */ |
| 544 | AM_RANGE( 0x008000, 0x0087ff ) AM_DEVREADWRITE("k1ge", k1ge_device, reg_read, reg_write) /* video registers */ |
| 545 | AM_RANGE( 0x008800, 0x00bfff ) AM_DEVREADWRITE("k1ge", k1ge_device, vram_read, vram_write) /* Video RAM area */ |
| 546 | 546 | AM_RANGE( 0x200000, 0x3fffff ) AM_ROM AM_WRITE(flash0_w) AM_REGION("cart", 0) /* cart area #1 */ |
| 547 | 547 | AM_RANGE( 0x800000, 0x9fffff ) AM_ROM AM_WRITE(flash1_w) AM_REGION("cart", 0x200000) /* cart area #2 */ |
| 548 | 548 | AM_RANGE( 0xff0000, 0xffffff ) AM_ROM AM_REGION("maincpu", 0) /* system rom */ |
| r22942 | r22943 | |
| 677 | 677 | |
| 678 | 678 | m_seconds_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ngp_state::ngp_seconds_callback),this)); |
| 679 | 679 | m_seconds_timer->adjust( attotime::from_seconds(1), 0, attotime::from_seconds(1) ); |
| 680 | |
| 681 | save_item(NAME(m_io_reg)); |
| 682 | save_item(NAME(m_old_to3)); |
| 683 | // TODO: check if these are handled correctly... |
| 684 | save_item(NAME(m_flash_chip[0].present)); |
| 685 | save_item(NAME(m_flash_chip[0].manufacturer_id)); |
| 686 | save_item(NAME(m_flash_chip[0].device_id)); |
| 687 | save_item(NAME(m_flash_chip[0].org_data)); |
| 688 | save_item(NAME(m_flash_chip[0].state)); |
| 689 | save_item(NAME(m_flash_chip[0].command)); |
| 690 | save_item(NAME(m_flash_chip[1].present)); |
| 691 | save_item(NAME(m_flash_chip[1].manufacturer_id)); |
| 692 | save_item(NAME(m_flash_chip[1].device_id)); |
| 693 | save_item(NAME(m_flash_chip[1].org_data)); |
| 694 | save_item(NAME(m_flash_chip[1].state)); |
| 695 | save_item(NAME(m_flash_chip[1].command)); |
| 680 | 696 | } |
| 681 | 697 | |
| 682 | 698 | |
| r22942 | r22943 | |
| 684 | 700 | { |
| 685 | 701 | m_old_to3 = 0; |
| 686 | 702 | |
| 687 | | m_z80->suspend(SUSPEND_REASON_HALT, 1 ); |
| 688 | | m_z80->set_input_line(0, CLEAR_LINE ); |
| 703 | m_z80->suspend(SUSPEND_REASON_HALT, 1); |
| 704 | m_z80->set_input_line(0, CLEAR_LINE); |
| 689 | 705 | |
| 690 | 706 | if ( m_nvram_loaded ) |
| 691 | 707 | { |
| r22942 | r22943 | |
| 829 | 845 | MCFG_PALETTE_LENGTH( 8 ) |
| 830 | 846 | MCFG_PALETTE_INIT( k1ge ) |
| 831 | 847 | |
| 832 | | MCFG_K1GE_ADD( "k1ge", XTAL_6_144MHz, "screen", "vram", WRITELINE( ngp_state, ngp_vblank_pin_w ), WRITELINE( ngp_state, ngp_hblank_pin_w ) ) |
| 848 | MCFG_K1GE_ADD( "k1ge", XTAL_6_144MHz, "screen", WRITELINE( ngp_state, ngp_vblank_pin_w ), WRITELINE( ngp_state, ngp_hblank_pin_w ) ) |
| 833 | 849 | |
| 834 | 850 | MCFG_CARTSLOT_ADD("cart") |
| 835 | 851 | MCFG_CARTSLOT_EXTENSION_LIST("bin,ngp,npc,ngc") |
| r22942 | r22943 | |
| 849 | 865 | MCFG_PALETTE_LENGTH( 4096 ) |
| 850 | 866 | MCFG_PALETTE_INIT( k2ge ) |
| 851 | 867 | |
| 852 | | MCFG_K2GE_ADD( "k1ge", XTAL_6_144MHz, "screen", "vram", WRITELINE( ngp_state, ngp_vblank_pin_w ), WRITELINE( ngp_state, ngp_hblank_pin_w ) ) |
| 868 | MCFG_K2GE_ADD( "k1ge", XTAL_6_144MHz, "screen", WRITELINE( ngp_state, ngp_vblank_pin_w ), WRITELINE( ngp_state, ngp_hblank_pin_w ) ) |
| 853 | 869 | |
| 854 | 870 | MCFG_CARTSLOT_ADD("cart") |
| 855 | 871 | MCFG_CARTSLOT_EXTENSION_LIST("bin,ngp,npc,ngc") |
| r22942 | r22943 | |
| 868 | 884 | ROM_REGION( 0x10000, "maincpu" , 0 ) |
| 869 | 885 | ROM_LOAD( "ngp_bios.ngp", 0x0000, 0x10000, CRC(6232df8d) SHA1(2f6429b68446536d8b03f35d02f1e98beb6460a0) ) |
| 870 | 886 | |
| 871 | | ROM_REGION( 0x4000, "vram", ROMREGION_ERASE00 ) |
| 872 | | |
| 873 | 887 | ROM_REGION( 0x400000, "cart", ROMREGION_ERASEFF ) |
| 874 | 888 | ROM_END |
| 875 | 889 | |
| r22942 | r22943 | |
| 878 | 892 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 879 | 893 | ROM_LOAD( "ngpcbios.rom", 0x0000, 0x10000, CRC(6eeb6f40) SHA1(edc13192054a59be49c6d55f83b70e2510968e86) ) |
| 880 | 894 | |
| 881 | | ROM_REGION( 0x4000, "vram", ROMREGION_ERASE00 ) |
| 882 | | |
| 883 | 895 | ROM_REGION( 0x400000, "cart", ROMREGION_ERASEFF ) |
| 884 | 896 | ROM_END |
| 885 | 897 | |