Previous 199869 Revisions Next

r19791 Tuesday 25th December, 2012 at 01:45:45 UTC by David Haywood
make the DECO222 handling in decocass transparent to the driver (nw)
[src/mame]mame.mak
[src/mame/drivers]dec8.c decocass.c
[src/mame/includes]decocass.h
[src/mame/machine]deco222.c* deco222.h*

trunk/src/mame/drivers/decocass.c
r19790r19791
3737#include "includes/decocass.h"
3838#include "machine/decocass_tape.h"
3939#include "sound/ay8910.h"
40#include "machine/deco222.h"
4041
4142#define MASTER_CLOCK   XTAL_12MHz
4243#define HCLK         (MASTER_CLOCK/2)
r19790r19791
5152 *
5253 ***************************************************************************/
5354
54INLINE int swap_bits_5_6(int data)
55{
56   return (data & 0x9f) | ((data & 0x20) << 1) | ((data & 0x40) >> 1);
57}
5855
59WRITE8_MEMBER(decocass_state::ram_w)
60{
61   m_decrypted[0x0000 + offset] = swap_bits_5_6(data);
62   m_rambase[0x0000 + offset] = data;
63}
64
6556WRITE8_MEMBER(decocass_state::charram_w)
6657{
67   m_decrypted[0x6000 + offset] = swap_bits_5_6(data);
6858   decocass_charram_w(space, offset, data);
6959}
7060
7161WRITE8_MEMBER(decocass_state::fgvideoram_w)
7262{
73   m_decrypted[0xc000 + offset] = swap_bits_5_6(data);
7463   decocass_fgvideoram_w(space, offset, data);
7564}
7665
7766WRITE8_MEMBER(decocass_state::fgcolorram_w)
7867{
79   m_decrypted[0xc400 + offset] = swap_bits_5_6(data);
8068   decocass_colorram_w(space, offset, data);
8169}
8270
8371WRITE8_MEMBER(decocass_state::tileram_w)
8472{
85   m_decrypted[0xd000 + offset] = swap_bits_5_6(data);
8673   decocass_tileram_w(space, offset, data);
8774}
8875
8976WRITE8_MEMBER(decocass_state::objectram_w)
9077{
91   m_decrypted[0xd800 + offset] = swap_bits_5_6(data);
9278   decocass_objectram_w(space, offset, data);
9379}
9480
r19790r19791
10995
11096
11197static ADDRESS_MAP_START( decocass_map, AS_PROGRAM, 8, decocass_state )
112   AM_RANGE(0x0000, 0x5fff) AM_RAM_WRITE(ram_w) AM_SHARE("rambase")
98   AM_RANGE(0x0000, 0x5fff) AM_RAM AM_SHARE("rambase")
11399   AM_RANGE(0x6000, 0xbfff) AM_RAM_WRITE(charram_w) AM_SHARE("charram") /* still RMS3 RAM */
114100   AM_RANGE(0xc000, 0xc3ff) AM_RAM_WRITE(fgvideoram_w) AM_SHARE("fgvideoram")  /* DSP3 RAM */
115101   AM_RANGE(0xc400, 0xc7ff) AM_RAM_WRITE(fgcolorram_w) AM_SHARE("colorram")
r19790r19791
755741static MACHINE_CONFIG_START( decocass, decocass_state )
756742
757743   /* basic machine hardware */
758   MCFG_CPU_ADD("maincpu", M6502, HCLK4)
744   MCFG_CPU_ADD("maincpu", DECO_222, HCLK4) /* the earlier revision board doesn't have the 222 but must have the same thing implemented in logic for the M6502 */
759745   MCFG_CPU_PROGRAM_MAP(decocass_map)
760746
761747   MCFG_CPU_ADD("audiocpu", M6502, HCLK1/3/2)
r19790r19791
778764   MCFG_GFXDECODE(decocass)
779765   MCFG_PALETTE_LENGTH(32+2*8+2*4)
780766
781
782767   /* sound hardware */
783768   MCFG_SPEAKER_STANDARD_MONO("mono")
784769
r19790r19791
16201605
16211606DRIVER_INIT_MEMBER(decocass_state,decocass)
16221607{
1623   address_space &space = machine().device("maincpu")->memory().space(AS_PROGRAM);
1624   UINT8 *rom = memregion("maincpu")->base();
1625   int A;
1626
1627   /* allocate memory and mark all RAM regions with their decrypted pointers */
1628   m_decrypted = auto_alloc_array(machine(), UINT8, 0x10000);
1629   space.set_decrypted_region(0x0000, 0xc7ff, &m_decrypted[0x0000]);
1630   space.set_decrypted_region(0xd000, 0xdbff, &m_decrypted[0xd000]);
1631   space.set_decrypted_region(0xf000, 0xffff, &m_decrypted[0xf000]);
1632
1633   /* Swap bits 5 & 6 for opcodes */
1634   for (A = 0xf000; A < 0x10000; A++)
1635      m_decrypted[A] = swap_bits_5_6(rom[A]);
1636
1637   save_pointer(NAME(m_decrypted), 0x10000);
1638
16391608   /* Call the state save setup code in machine/decocass.c */
16401609   decocass_machine_state_save_init();
16411610   /* and in video/decocass.c, too */
r19790r19791
16441613
16451614DRIVER_INIT_MEMBER(decocass_state,decocrom)
16461615{
1647   int romlength = memregion("user3")->bytes();
1648   UINT8 *rom = memregion("user3")->base();
1649   int i;
1650
1651   m_decrypted2 = auto_alloc_array(machine(), UINT8, romlength);
1652
16531616   /* standard init */
16541617   DRIVER_INIT_CALL(decocass);
16551618
1656   /* decrypt the ROMs */
1657   for (i = 0; i < romlength; i++)
1658      m_decrypted2[i] = swap_bits_5_6(rom[i]);
1659
16601619   /* convert charram to a banked ROM */
16611620   machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x6000, 0xafff, "bank1");
16621621   machine().device("maincpu")->memory().space(AS_PROGRAM).install_write_handler(0x6000, 0xafff, write8_delegate(FUNC(decocass_state::decocass_de0091_w),this));
16631622   membank("bank1")->configure_entry(0, m_charram);
16641623   membank("bank1")->configure_entry(1, memregion("user3")->base());
1665   membank("bank1")->configure_decrypted_entry(0, &m_decrypted[0x6000]);
1666   membank("bank1")->configure_decrypted_entry(1, m_decrypted2);
16671624   membank("bank1")->set_entry(0);
16681625
16691626   /* install the bank selector */
16701627   machine().device("maincpu")->memory().space(AS_PROGRAM).install_write_handler(0xe900, 0xe900, write8_delegate(FUNC(decocass_state::decocass_e900_w),this));
1671
1672   save_pointer(NAME(m_decrypted2), romlength);
16731628}
16741629
16751630READ8_MEMBER(decocass_state::cdsteljn_input_r )
trunk/src/mame/drivers/dec8.c
r19790r19791
5252#include "video/decbac06.h"
5353#include "video/decmxc06.h"
5454#include "video/deckarn.h"
55#include "machine/deco222.h"
5556
57
5658/******************************************************************************/
5759
58class deco_222_device : public m6502_device {
59public:
60   deco_222_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
6160
62protected:
63   class mi_decrypt : public mi_default_normal {
64   public:
65      bool had_written;
66
67      virtual ~mi_decrypt() {}
68      virtual UINT8 read_decrypted(UINT16 adr);
69   };
70
71   virtual void device_start();
72   virtual void device_reset();
73
74};
75
76static const device_type DECO_222 = &device_creator<deco_222_device>;
77
78deco_222_device::deco_222_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
79   m6502_device(mconfig, DECO_222, "DECO 222", tag, owner, clock)
80{
81}
82
83void deco_222_device::device_start()
84{
85   mintf = new mi_decrypt;
86   init();
87}
88
89void deco_222_device::device_reset()
90{
91   m6502_device::device_reset();
92   static_cast<mi_decrypt *>(mintf)->had_written = false;
93}
94
95UINT8 deco_222_device::mi_decrypt::read_decrypted(UINT16 adr)
96{
97   return BITSWAP8(direct->read_raw_byte(adr) ,7,5,6,4,3,2,1,0);;
98}
99
100
10161WRITE8_MEMBER(dec8_state::dec8_mxc06_karn_buffer_spriteram_w)
10262{
10363   UINT8* spriteram = m_spriteram->live();
trunk/src/mame/machine/deco222.c
r0r19791
1
2#include "deco222.h"
3
4
5deco_222_device::deco_222_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
6   m6502_device(mconfig, DECO_222, "DECO 222", tag, owner, clock)
7{
8}
9
10void deco_222_device::device_start()
11{
12   mintf = new mi_decrypt;
13   init();
14}
15
16void deco_222_device::device_reset()
17{
18   m6502_device::device_reset();
19   static_cast<mi_decrypt *>(mintf)->had_written = false;
20}
21
22UINT8 deco_222_device::mi_decrypt::read_decrypted(UINT16 adr)
23{
24   return BITSWAP8(direct->read_raw_byte(adr) ,7,5,6,4,3,2,1,0);
25}
26
27
trunk/src/mame/machine/deco222.h
r0r19791
1
2#include "emu.h"
3#include "cpu/hd6309/hd6309.h"
4#include "cpu/m6809/m6809.h"
5#include "cpu/m6502/m6502.h"
6
7class deco_222_device : public m6502_device {
8public:
9   deco_222_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
10
11protected:
12   class mi_decrypt : public mi_default_normal {
13   public:
14      bool had_written;
15
16      virtual ~mi_decrypt() {}
17      virtual UINT8 read_decrypted(UINT16 adr);
18   };
19
20   virtual void device_start();
21   virtual void device_reset();
22
23};
24
25static const device_type DECO_222 = &device_creator<deco_222_device>;
No newline at end of file
trunk/src/mame/includes/decocass.h
r19790r19791
7474   UINT8     m_audio_nmi_state;
7575
7676   /* misc */
77   UINT8     *m_decrypted;
78   UINT8     *m_decrypted2;
7977   INT32     m_firsttime;
8078   UINT8     m_latch1;
8179   UINT8     m_decocass_reset;
r19790r19791
220218
221219   void decocass_video_state_save_init();
222220
223   DECLARE_WRITE8_MEMBER(ram_w);
224221   DECLARE_WRITE8_MEMBER(charram_w);
225222   DECLARE_WRITE8_MEMBER(fgvideoram_w);
226223   DECLARE_WRITE8_MEMBER(fgcolorram_w);
trunk/src/mame/mame.mak
r19790r19791
628628   $(DRIVERS)/dblewing.o \
629629   $(DRIVERS)/dec0.o $(MACHINE)/dec0.o $(VIDEO)/dec0.o \
630630   $(DRIVERS)/dec8.o $(VIDEO)/dec8.o \
631   $(MACHINE)/deco222.o \
631632   $(DRIVERS)/deco_ld.o \
632633   $(DRIVERS)/deco_mlc.o $(VIDEO)/deco_mlc.o \
633634   $(DRIVERS)/deco156.o $(MACHINE)/deco156.o \

Previous 199869 Revisions Next


© 1997-2024 The MAME Team