trunk/src/mess/drivers/pockstat.c
| r32244 | r32245 | |
| 41 | 41 | #include "emu.h" |
| 42 | 42 | #include "cpu/arm7/arm7.h" |
| 43 | 43 | #include "cpu/arm7/arm7core.h" |
| 44 | | #include "imagedev/cartslot.h" |
| 45 | 44 | #include "sound/dac.h" |
| 46 | 45 | |
| 46 | #include "bus/generic/slot.h" |
| 47 | #include "bus/generic/carts.h" |
| 48 | |
| 47 | 49 | #define MAX_PS_TIMERS 3 |
| 48 | 50 | |
| 49 | 51 | struct ps_ftlb_regs_t |
| r32244 | r32245 | |
| 104 | 106 | : driver_device(mconfig, type, tag), |
| 105 | 107 | m_lcd_buffer(*this, "lcd_buffer"), |
| 106 | 108 | m_maincpu(*this, "maincpu"), |
| 107 | | m_dac(*this, "dac") { } |
| 109 | m_dac(*this, "dac"), |
| 110 | m_cart(*this, "cartslot") |
| 111 | { } |
| 108 | 112 | |
| 109 | 113 | required_shared_ptr<UINT32> m_lcd_buffer; |
| 114 | required_device<cpu_device> m_maincpu; |
| 115 | required_device<dac_device> m_dac; |
| 116 | required_device<generic_slot_device> m_cart; |
| 117 | memory_region *m_cart_rom; |
| 118 | |
| 110 | 119 | ps_ftlb_regs_t m_ftlb_regs; |
| 111 | 120 | ps_intc_regs_t m_intc_regs; |
| 112 | 121 | ps_timer_regs_t m_timer_regs; |
| r32244 | r32245 | |
| 128 | 137 | DECLARE_READ32_MEMBER(ps_lcd_r); |
| 129 | 138 | DECLARE_WRITE32_MEMBER(ps_lcd_w); |
| 130 | 139 | DECLARE_READ32_MEMBER(ps_rombank_r); |
| 140 | DECLARE_READ32_MEMBER(ps_flash_r); |
| 131 | 141 | DECLARE_WRITE32_MEMBER(ps_flash_w); |
| 132 | 142 | DECLARE_READ32_MEMBER(ps_audio_r); |
| 133 | 143 | DECLARE_WRITE32_MEMBER(ps_audio_w); |
| r32244 | r32245 | |
| 143 | 153 | UINT32 ps_intc_get_interrupt_line(UINT32 line); |
| 144 | 154 | void ps_intc_set_interrupt_line(UINT32 line, int state); |
| 145 | 155 | void ps_timer_start(int index); |
| 146 | | required_device<cpu_device> m_maincpu; |
| 147 | | required_device<dac_device> m_dac; |
| 148 | 156 | }; |
| 149 | 157 | |
| 150 | 158 | |
| r32244 | r32245 | |
| 773 | 781 | READ32_MEMBER(pockstat_state::ps_rombank_r) |
| 774 | 782 | { |
| 775 | 783 | INT32 bank = (offset >> 11) & 0x0f; |
| 776 | | int index = 0; |
| 777 | | for(index = 0; index < 32; index++) |
| 784 | for (int index = 0; index < 32; index++) |
| 778 | 785 | { |
| 779 | | if(m_ftlb_regs.valid & (1 << index)) |
| 786 | if (m_ftlb_regs.valid & (1 << index)) |
| 780 | 787 | { |
| 781 | | if(m_ftlb_regs.entry[index] == bank) |
| 788 | if (m_ftlb_regs.entry[index] == bank) |
| 782 | 789 | { |
| 783 | 790 | //printf( "Address %08x is assigned to %08x in entry %d\n", 0x02000000 + (offset << 2), index * 0x2000 + ((offset << 2) & 0x1fff), index ); |
| 784 | | return memregion("flash")->u32(index * (0x2000/4) + (offset & (0x1fff/4))); |
| 791 | return m_cart->read32_rom(space, index * (0x2000/4) + (offset & (0x1fff/4)), mem_mask); |
| 785 | 792 | } |
| 786 | 793 | } |
| 787 | 794 | } |
| 788 | | return memregion("flash")->u32(offset & 0x7fff); |
| 795 | return m_cart->read32_rom(space, offset & 0x7fff, mem_mask); |
| 789 | 796 | } |
| 790 | 797 | |
| 791 | 798 | |
| r32244 | r32245 | |
| 811 | 818 | if(m_ps_flash_write_count) |
| 812 | 819 | { |
| 813 | 820 | m_ps_flash_write_count--; |
| 814 | | COMBINE_DATA(&((UINT32*)(*memregion("flash")))[offset]); |
| 821 | COMBINE_DATA(&((UINT32*)(m_cart_rom->base()))[offset]); |
| 815 | 822 | } |
| 816 | 823 | } |
| 817 | 824 | |
| 825 | READ32_MEMBER(pockstat_state::ps_flash_r) |
| 826 | { |
| 827 | return m_cart->read32_rom(space, offset, mem_mask); |
| 828 | } |
| 829 | |
| 818 | 830 | READ32_MEMBER(pockstat_state::ps_audio_r) |
| 819 | 831 | { |
| 820 | 832 | verboselog(0, "ps_audio_r: Unknown Read: %08x = %08x & %08x\n", 0xd800000 + (offset << 2), 0x10, mem_mask); |
| r32244 | r32245 | |
| 836 | 848 | AM_RANGE(0x02000000, 0x02ffffff) AM_READ(ps_rombank_r) |
| 837 | 849 | AM_RANGE(0x04000000, 0x04003fff) AM_ROM AM_REGION("maincpu", 0) |
| 838 | 850 | AM_RANGE(0x06000000, 0x06000307) AM_READWRITE(ps_ftlb_r, ps_ftlb_w) |
| 839 | | AM_RANGE(0x08000000, 0x0801ffff) AM_ROM AM_WRITE(ps_flash_w) AM_REGION("flash", 0) |
| 851 | AM_RANGE(0x08000000, 0x0801ffff) AM_READWRITE(ps_flash_r, ps_flash_w) |
| 840 | 852 | AM_RANGE(0x0a000000, 0x0a000013) AM_READWRITE(ps_intc_r, ps_intc_w) |
| 841 | 853 | AM_RANGE(0x0a800000, 0x0a80002b) AM_READWRITE(ps_timer_r, ps_timer_w) |
| 842 | 854 | AM_RANGE(0x0b000000, 0x0b000007) AM_READWRITE(ps_clock_r, ps_clock_w) |
| r32244 | r32245 | |
| 861 | 873 | void pockstat_state::machine_start() |
| 862 | 874 | { |
| 863 | 875 | int index = 0; |
| 864 | | for(index = 0; index < 3; index++) |
| 876 | for (index = 0; index < 3; index++) |
| 865 | 877 | { |
| 866 | 878 | m_timer_regs.timer[index].timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pockstat_state::timer_tick),this)); |
| 867 | 879 | m_timer_regs.timer[index].timer->adjust(attotime::never, index); |
| r32244 | r32245 | |
| 873 | 885 | m_rtc_regs.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pockstat_state::rtc_tick),this)); |
| 874 | 886 | m_rtc_regs.timer->adjust(attotime::from_hz(1), index); |
| 875 | 887 | |
| 888 | astring region_tag; |
| 889 | m_cart_rom = memregion(region_tag.cpy(m_cart->tag()).cat(GENERIC_ROM_REGION_TAG)); |
| 890 | |
| 876 | 891 | save_item(NAME(m_ftlb_regs.control)); |
| 877 | 892 | save_item(NAME(m_ftlb_regs.stat)); |
| 878 | 893 | save_item(NAME(m_ftlb_regs.valid)); |
| r32244 | r32245 | |
| 919 | 934 | |
| 920 | 935 | UINT32 pockstat_state::screen_update_pockstat(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) |
| 921 | 936 | { |
| 922 | | int x = 0; |
| 923 | | int y = 0; |
| 924 | | for(y = 0; y < 32; y++) |
| 937 | for (int y = 0; y < 32; y++) |
| 925 | 938 | { |
| 926 | 939 | UINT32 *scanline = &bitmap.pix32(y); |
| 927 | | for(x = 0; x < 32; x++) |
| 940 | for (int x = 0; x < 32; x++) |
| 928 | 941 | { |
| 929 | | if(m_lcd_control != 0) // Hack |
| 942 | if (m_lcd_control != 0) // Hack |
| 930 | 943 | { |
| 931 | | if(m_lcd_buffer[y] & (1 << x)) |
| 932 | | { |
| 944 | if (m_lcd_buffer[y] & (1 << x)) |
| 933 | 945 | scanline[x] = 0x00000000; |
| 934 | | } |
| 935 | 946 | else |
| 936 | | { |
| 937 | 947 | scanline[x] = 0x00ffffff; |
| 938 | | } |
| 939 | 948 | } |
| 940 | 949 | else |
| 941 | | { |
| 942 | 950 | scanline[x] = 0x00ffffff; |
| 943 | | } |
| 944 | 951 | } |
| 945 | 952 | } |
| 946 | 953 | return 0; |
| r32244 | r32245 | |
| 948 | 955 | |
| 949 | 956 | DEVICE_IMAGE_LOAD_MEMBER( pockstat_state, pockstat_flash ) |
| 950 | 957 | { |
| 951 | | int i, length; |
| 952 | | UINT8 *cart = memregion("flash")->base(); |
| 953 | 958 | static const char *gme_id = "123-456-STD"; |
| 959 | char cart_id[0xf40]; |
| 960 | UINT32 size = image.length(); |
| 954 | 961 | |
| 955 | | length = image.fread( cart, 0x20f40); |
| 956 | | |
| 957 | | if(length != 0x20f40) |
| 958 | | { |
| 962 | if (size != 0x20f40) |
| 959 | 963 | return IMAGE_INIT_FAIL; |
| 960 | | } |
| 964 | |
| 965 | image.fread(cart_id, 0xf40); |
| 961 | 966 | |
| 962 | | for(i = 0; i < strlen(gme_id); i++) |
| 967 | for (int i = 0; i < strlen(gme_id); i++) |
| 963 | 968 | { |
| 964 | | if(cart[i] != gme_id[i]) |
| 965 | | { |
| 969 | if (cart_id[i] != gme_id[i]) |
| 966 | 970 | return IMAGE_INIT_FAIL; |
| 967 | | } |
| 968 | 971 | } |
| 969 | 972 | |
| 970 | | memcpy(cart, cart + 0xf40, 0x20000); |
| 973 | m_cart->rom_alloc(0x20000, GENERIC_ROM32_WIDTH); |
| 974 | image.fread(m_cart->get_rom_base(), 0x20000); |
| 971 | 975 | |
| 972 | 976 | return IMAGE_INIT_PASS; |
| 973 | 977 | } |
| r32244 | r32245 | |
| 977 | 981 | MCFG_CPU_ADD("maincpu", ARM7, DEFAULT_CLOCK) |
| 978 | 982 | MCFG_CPU_PROGRAM_MAP(pockstat_mem) |
| 979 | 983 | |
| 980 | | |
| 981 | 984 | /* video hardware */ |
| 982 | 985 | MCFG_SCREEN_ADD("screen", LCD) |
| 983 | 986 | MCFG_SCREEN_REFRESH_RATE(50) |
| r32244 | r32245 | |
| 993 | 996 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) |
| 994 | 997 | |
| 995 | 998 | /* cartridge */ |
| 996 | | MCFG_CARTSLOT_ADD("cart") |
| 997 | | MCFG_CARTSLOT_EXTENSION_LIST("gme") |
| 998 | | MCFG_CARTSLOT_NOT_MANDATORY |
| 999 | | MCFG_CARTSLOT_LOAD(pockstat_state, pockstat_flash) |
| 999 | MCFG_GENERIC_CARTSLOT_ADD("cartslot", GENERIC_ROM32_WIDTH, generic_plain_slot, "pockstat_cart") |
| 1000 | MCFG_GENERIC_EXTENSIONS("gme") |
| 1001 | MCFG_GENERIC_LOAD(pockstat_state, pockstat_flash) |
| 1000 | 1002 | MACHINE_CONFIG_END |
| 1001 | 1003 | |
| 1002 | 1004 | /* ROM definition */ |
| 1003 | 1005 | ROM_START( pockstat ) |
| 1004 | 1006 | ROM_REGION( 0x4000, "maincpu", 0 ) |
| 1005 | 1007 | ROM_LOAD( "kernel.bin", 0x0000, 0x4000, CRC(5fb47dd8) SHA1(6ae880493ddde880827d1e9f08e9cb2c38f9f2ec) ) |
| 1006 | | |
| 1007 | | ROM_REGION( 0x20f40, "flash", ROMREGION_ERASEFF ) |
| 1008 | 1008 | ROM_END |
| 1009 | 1009 | |
| 1010 | 1010 | /* Driver */ |
trunk/src/mess/drivers/casloopy.c
| r32244 | r32245 | |
| 150 | 150 | #include "emu.h" |
| 151 | 151 | #include "cpu/sh2/sh2.h" |
| 152 | 152 | //#include "cpu/v60/v60.h" |
| 153 | | #include "imagedev/cartslot.h" |
| 153 | #include "bus/generic/slot.h" |
| 154 | #include "bus/generic/carts.h" |
| 154 | 155 | |
| 155 | 156 | |
| 156 | 157 | class casloopy_state : public driver_device |
| r32244 | r32245 | |
| 161 | 162 | m_bios_rom(*this, "bios_rom"), |
| 162 | 163 | m_vregs(*this, "vregs"), |
| 163 | 164 | m_maincpu(*this, "maincpu"), |
| 165 | m_cart(*this, "cartslot"), |
| 164 | 166 | m_gfxdecode(*this, "gfxdecode"), |
| 165 | 167 | m_palette(*this, "palette") { } |
| 166 | 168 | |
| 167 | 169 | required_shared_ptr<UINT32> m_bios_rom; |
| 168 | 170 | required_shared_ptr<UINT32> m_vregs; |
| 171 | required_device<cpu_device> m_maincpu; |
| 172 | required_device<generic_slot_device> m_cart; |
| 173 | required_device<gfxdecode_device> m_gfxdecode; |
| 174 | required_device<palette_device> m_palette; |
| 175 | |
| 169 | 176 | UINT16 *m_paletteram; |
| 170 | 177 | UINT8 *m_vram; |
| 171 | 178 | UINT8 *m_bitmap_vram; |
| r32244 | r32245 | |
| 176 | 183 | virtual void machine_reset(); |
| 177 | 184 | virtual void video_start(); |
| 178 | 185 | UINT32 screen_update_casloopy(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 179 | | DECLARE_READ16_MEMBER(casloopy_vregs_r); |
| 180 | | DECLARE_WRITE16_MEMBER(casloopy_vregs_w); |
| 181 | | DECLARE_READ16_MEMBER(casloopy_pal_r); |
| 182 | | DECLARE_WRITE16_MEMBER(casloopy_pal_w); |
| 183 | | DECLARE_READ8_MEMBER(casloopy_vram_r); |
| 184 | | DECLARE_WRITE8_MEMBER(casloopy_vram_w); |
| 186 | DECLARE_READ16_MEMBER(vregs_r); |
| 187 | DECLARE_WRITE16_MEMBER(vregs_w); |
| 188 | DECLARE_READ16_MEMBER(pal_r); |
| 189 | DECLARE_WRITE16_MEMBER(pal_w); |
| 190 | DECLARE_READ8_MEMBER(vram_r); |
| 191 | DECLARE_WRITE8_MEMBER(vram_w); |
| 192 | DECLARE_READ32_MEMBER(cart_r); |
| 185 | 193 | DECLARE_READ16_MEMBER(sh7021_r); |
| 186 | 194 | DECLARE_WRITE16_MEMBER(sh7021_w); |
| 187 | | DECLARE_READ8_MEMBER(casloopy_bitmap_r); |
| 188 | | DECLARE_WRITE8_MEMBER(casloopy_bitmap_w); |
| 189 | | required_device<cpu_device> m_maincpu; |
| 190 | | required_device<gfxdecode_device> m_gfxdecode; |
| 191 | | required_device<palette_device> m_palette; |
| 195 | DECLARE_READ8_MEMBER(bitmap_r); |
| 196 | DECLARE_WRITE8_MEMBER(bitmap_w); |
| 197 | DECLARE_DEVICE_IMAGE_LOAD_MEMBER(loopy_cart); |
| 192 | 198 | }; |
| 193 | 199 | |
| 194 | 200 | |
| r32244 | r32245 | |
| 292 | 298 | return 0; |
| 293 | 299 | } |
| 294 | 300 | |
| 295 | | READ16_MEMBER(casloopy_state::casloopy_vregs_r) |
| 301 | READ16_MEMBER(casloopy_state::vregs_r) |
| 296 | 302 | { |
| 297 | 303 | if(offset == 4/2) |
| 298 | 304 | { |
| r32244 | r32245 | |
| 310 | 316 | return 0xffff; |
| 311 | 317 | } |
| 312 | 318 | |
| 313 | | WRITE16_MEMBER(casloopy_state::casloopy_vregs_w) |
| 319 | WRITE16_MEMBER(casloopy_state::vregs_w) |
| 314 | 320 | { |
| 315 | 321 | if(offset != 6/2) |
| 316 | 322 | printf("%08x %08x\n",offset*2,data); |
| 317 | 323 | } |
| 318 | 324 | |
| 319 | | READ16_MEMBER(casloopy_state::casloopy_pal_r) |
| 325 | READ16_MEMBER(casloopy_state::pal_r) |
| 320 | 326 | { |
| 321 | 327 | return m_paletteram[offset]; |
| 322 | 328 | } |
| 323 | 329 | |
| 324 | | WRITE16_MEMBER(casloopy_state::casloopy_pal_w) |
| 330 | WRITE16_MEMBER(casloopy_state::pal_w) |
| 325 | 331 | { |
| 326 | 332 | int r,g,b; |
| 327 | 333 | COMBINE_DATA(&m_paletteram[offset]); |
| r32244 | r32245 | |
| 333 | 339 | m_palette->set_pen_color(offset, pal5bit(r), pal5bit(g), pal5bit(b)); |
| 334 | 340 | } |
| 335 | 341 | |
| 336 | | READ8_MEMBER(casloopy_state::casloopy_vram_r) |
| 342 | READ8_MEMBER(casloopy_state::vram_r) |
| 337 | 343 | { |
| 338 | 344 | return m_vram[offset]; |
| 339 | 345 | } |
| 340 | 346 | |
| 341 | | WRITE8_MEMBER(casloopy_state::casloopy_vram_w) |
| 347 | WRITE8_MEMBER(casloopy_state::vram_w) |
| 342 | 348 | { |
| 343 | 349 | m_vram[offset] = data; |
| 344 | 350 | |
| r32244 | r32245 | |
| 387 | 393 | // printf("%08x %04x\n",sh7021_regs[offset],0x05ffff00+offset*2); |
| 388 | 394 | } |
| 389 | 395 | |
| 390 | | READ8_MEMBER(casloopy_state::casloopy_bitmap_r) |
| 396 | READ8_MEMBER(casloopy_state::bitmap_r) |
| 391 | 397 | { |
| 392 | 398 | return m_bitmap_vram[offset]; |
| 393 | 399 | } |
| 394 | 400 | |
| 395 | | WRITE8_MEMBER(casloopy_state::casloopy_bitmap_w) |
| 401 | WRITE8_MEMBER(casloopy_state::bitmap_w) |
| 396 | 402 | { |
| 397 | 403 | m_bitmap_vram[offset] = data; |
| 398 | 404 | } |
| 399 | 405 | |
| 406 | READ32_MEMBER(casloopy_state::cart_r) |
| 407 | { |
| 408 | return m_cart->read32_rom(space, offset, mem_mask); |
| 409 | } |
| 410 | |
| 411 | |
| 400 | 412 | static ADDRESS_MAP_START( casloopy_map, AS_PROGRAM, 32, casloopy_state ) |
| 401 | 413 | AM_RANGE(0x00000000, 0x00007fff) AM_RAM AM_SHARE("bios_rom") |
| 402 | 414 | AM_RANGE(0x01000000, 0x0107ffff) AM_RAM AM_SHARE("wram")// stack pointer points here |
| 403 | | AM_RANGE(0x04000000, 0x0401ffff) AM_READWRITE8(casloopy_bitmap_r,casloopy_bitmap_w,0xffffffff) |
| 404 | | AM_RANGE(0x04040000, 0x0404ffff) AM_READWRITE8(casloopy_vram_r,casloopy_vram_w,0xffffffff) // tilemap + PCG |
| 415 | AM_RANGE(0x04000000, 0x0401ffff) AM_READWRITE8(bitmap_r, bitmap_w, 0xffffffff) |
| 416 | AM_RANGE(0x04040000, 0x0404ffff) AM_READWRITE8(vram_r, vram_w, 0xffffffff) // tilemap + PCG |
| 405 | 417 | AM_RANGE(0x04050000, 0x040503ff) AM_RAM // ??? |
| 406 | | AM_RANGE(0x04051000, 0x040511ff) AM_READWRITE16(casloopy_pal_r,casloopy_pal_w,0xffffffff) |
| 407 | | AM_RANGE(0x04058000, 0x04058007) AM_READWRITE16(casloopy_vregs_r,casloopy_vregs_w,0xffffffff) |
| 418 | AM_RANGE(0x04051000, 0x040511ff) AM_READWRITE16(pal_r, pal_w, 0xffffffff) |
| 419 | AM_RANGE(0x04058000, 0x04058007) AM_READWRITE16(vregs_r, vregs_w, 0xffffffff) |
| 408 | 420 | AM_RANGE(0x0405b000, 0x0405b00f) AM_RAM AM_SHARE("vregs") // RGB555 brightness control plus scrolling |
| 409 | | AM_RANGE(0x05ffff00, 0x05ffffff) AM_READWRITE16(sh7021_r,sh7021_w,0xffffffff) |
| 421 | AM_RANGE(0x05ffff00, 0x05ffffff) AM_READWRITE16(sh7021_r, sh7021_w, 0xffffffff) |
| 410 | 422 | // AM_RANGE(0x05ffff00, 0x05ffffff) - SH7021 internal i/o |
| 411 | | AM_RANGE(0x06000000, 0x061fffff) AM_ROM AM_REGION("rom_cart",0) |
| 423 | AM_RANGE(0x06000000, 0x061fffff) AM_READ(cart_r) |
| 412 | 424 | AM_RANGE(0x07000000, 0x070003ff) AM_RAM AM_SHARE("oram")// on-chip RAM, actually at 0xf000000 (1 kb) |
| 413 | 425 | AM_RANGE(0x09000000, 0x0907ffff) AM_RAM AM_SHARE("wram") |
| 414 | | AM_RANGE(0x0e000000, 0x0e1fffff) AM_ROM AM_REGION("rom_cart",0) |
| 426 | AM_RANGE(0x0e000000, 0x0e1fffff) AM_READ(cart_r) |
| 415 | 427 | AM_RANGE(0x0f000000, 0x0f0003ff) AM_RAM AM_SHARE("oram") |
| 416 | 428 | ADDRESS_MAP_END |
| 417 | 429 | |
| r32244 | r32245 | |
| 424 | 436 | static INPUT_PORTS_START( casloopy ) |
| 425 | 437 | INPUT_PORTS_END |
| 426 | 438 | |
| 427 | | /* TODO: move this into DEVICE_IMAGE_LOAD_MEMBER */ |
| 428 | 439 | void casloopy_state::machine_start() |
| 429 | 440 | { |
| 430 | | UINT8 *SRC = memregion("cart")->base(); |
| 431 | | UINT8 *DST = memregion("rom_cart")->base(); |
| 432 | | |
| 433 | | // fix endianness |
| 434 | | for (int i=0;i<0x200000;i+=4) |
| 435 | | { |
| 436 | | UINT8 tempa = SRC[i+0]; |
| 437 | | UINT8 tempb = SRC[i+1]; |
| 438 | | DST[i+0] = SRC[i+2]; |
| 439 | | DST[i+1] = SRC[i+3]; |
| 440 | | DST[i+2] = tempa; |
| 441 | | DST[i+3] = tempb; |
| 442 | | } |
| 443 | 441 | } |
| 444 | 442 | |
| 445 | 443 | void casloopy_state::machine_reset() |
| r32244 | r32245 | |
| 474 | 472 | #endif |
| 475 | 473 | |
| 476 | 474 | |
| 475 | DEVICE_IMAGE_LOAD_MEMBER( casloopy_state, loopy_cart ) |
| 476 | { |
| 477 | UINT32 size = m_cart->common_get_size("rom"); |
| 478 | UINT8 *SRC, *DST; |
| 479 | dynamic_buffer temp; |
| 480 | temp.resize(0x200000); |
| 481 | |
| 482 | m_cart->rom_alloc(size, GENERIC_ROM32_WIDTH); |
| 477 | 483 | |
| 484 | SRC = temp; |
| 485 | DST = m_cart->get_rom_base(); |
| 486 | m_cart->common_load_rom(temp, size, "rom"); |
| 487 | |
| 488 | // fix endianness |
| 489 | for (int i = 0; i < 0x200000; i += 4) |
| 490 | { |
| 491 | UINT8 tempa = SRC[i + 0]; |
| 492 | UINT8 tempb = SRC[i + 1]; |
| 493 | DST[i + 0] = SRC[i + 2]; |
| 494 | DST[i + 1] = SRC[i + 3]; |
| 495 | DST[i + 2] = tempa; |
| 496 | DST[i + 3] = tempb; |
| 497 | } |
| 498 | |
| 499 | return IMAGE_INIT_PASS; |
| 500 | } |
| 478 | 501 | |
| 479 | 502 | static MACHINE_CONFIG_START( casloopy, casloopy_state ) |
| 480 | 503 | |
| r32244 | r32245 | |
| 500 | 523 | |
| 501 | 524 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", empty) |
| 502 | 525 | |
| 503 | | MCFG_CARTSLOT_ADD("cart") |
| 504 | | MCFG_CARTSLOT_EXTENSION_LIST("ic1,bin") |
| 505 | | MCFG_CARTSLOT_MANDATORY |
| 506 | | MCFG_CARTSLOT_INTERFACE("loopy_cart") |
| 526 | MCFG_GENERIC_CARTSLOT_ADD("cartslot", GENERIC_ROM32_WIDTH, generic_plain_slot, "loopy_cart") |
| 527 | MCFG_GENERIC_EXTENSIONS("bin,ic1") |
| 528 | MCFG_GENERIC_MANDATORY |
| 529 | MCFG_GENERIC_LOAD(casloopy_state, loopy_cart) |
| 507 | 530 | |
| 508 | 531 | /* software lists */ |
| 509 | 532 | MCFG_SOFTWARE_LIST_ADD("cart_list","casloopy") |
| r32244 | r32245 | |
| 524 | 547 | |
| 525 | 548 | ROM_REGION( 0x80000, "subcpu", 0) //NEC CDT-109 |
| 526 | 549 | ROM_LOAD( "bios2.lsi352", 0x0000, 0x80000, CRC(8f51fa17) SHA1(99f50be06b083fdb07e08f30b0b26d9037afc869) ) |
| 527 | | |
| 528 | | ROM_REGION( 0x200000, "cart", 0 ) |
| 529 | | ROM_CART_LOAD("cart", 0x00000, 0x200000, ROM_NOMIRROR) |
| 530 | | |
| 531 | | ROM_REGION( 0x200000, "rom_cart", ROMREGION_ERASE00 ) |
| 532 | 550 | ROM_END |
| 533 | 551 | |
| 534 | 552 | DRIVER_INIT_MEMBER(casloopy_state,casloopy) |