Previous 15994 Revisions Next

r15486 Wednesday 20th June, 2012 at 12:18:40 UTC by Robbbert
Homelab: WIP
[src/mess/drivers]homelab.c

src/mess/drivers/homelab.c
r15485r15486
1313    sync pulse.
1414
1515    ToDO:
16    - homelab2 - No cursor; Can't press same key twice in a row
17    - homelab3 etc - sound, cassout. Need a dump of the TM188 prom.
16    - homelab2 - sound, cassette
17                 Note that rom code 0x40-48 is meaningless garbage,
18                 had to patch to stop it crashing. Need a new dump.
19    - homelab3 etc - sound, cassout. Need a dump of the TM188.
1820    - Brailab4 - had to patch, to stop stack getting wiped out.
1921                 currently reads keys and outputs noise. Needs
2022                 unknown speech device and maybe other devices.
r15485r15486
2426                 The bios never talks to it. Not fitted to homelab2.
2527                 Official port numbers are 3C-3F.
2628
29TM188 is (it seems) equivalent to 27S19, TBP18S030N, 6331-1, 74S288, 82S123,
30MB7051 - fuse programmed prom.
31
2732****************************************************************************/
2833
2934#include "emu.h"
r15485r15486
4853   m_p_videoram(*this, "videoram"){ }
4954
5055   DECLARE_READ8_MEMBER(key_r);
56   DECLARE_WRITE8_MEMBER(cass_w);
57   DECLARE_READ8_MEMBER(cass2_r);
5158   DECLARE_READ8_MEMBER(exxx_r);
5259   DECLARE_READ8_MEMBER(io_r);
5360   DECLARE_WRITE8_MEMBER(io_w);
54   DECLARE_CUSTOM_INPUT_MEMBER(cass_r);
61   DECLARE_CUSTOM_INPUT_MEMBER(cass3_r);
5562   const UINT8 *m_p_chargen;
5663   //virtual void machine_reset();
5764   //virtual void machine_start();
5865   virtual void video_start();
5966   required_device<cpu_device> m_maincpu;
60   optional_device<device_t> m_speaker;
61   optional_device<cassette_image_device> m_cass;
67   required_device<device_t> m_speaker;
68   required_device<cassette_image_device> m_cass;
6269   optional_shared_ptr<const UINT8> m_p_videoram;
6370private:
6471};
6572
6673
74static INTERRUPT_GEN( homelab_frame )
75{
76   homelab_state *state = device->machine().driver_data<homelab_state>();
77   device_set_input_line(state->m_maincpu, INPUT_LINE_NMI, ASSERT_LINE);
78}
79
6780READ8_MEMBER( homelab_state::key_r ) // offset 27F-2FE
6881{
82   if (offset == 0x38) // 0x3838
83   {
84      device_set_input_line(m_maincpu, INPUT_LINE_NMI, CLEAR_LINE);
85      return 0;
86   }
87
6988   UINT8 i,data = 0xff;
7089   char kbdrow[8];
7190
r15485r15486
94113   m_cass->output(state ? -1.0 : +1.0);
95114}
96115
97CUSTOM_INPUT_MEMBER( homelab_state::cass_r )
116READ8_MEMBER( homelab_state::cass2_r )
98117{
99118   return (m_cass->input() > 0.03);
100119}
101120
121WRITE8_MEMBER( homelab_state::cass_w )
122{
123   if (offset == 0x73f) // 0x3f3f
124      speaker_level_w(m_speaker, 1);
125   else
126   if (offset == 0x139) // 0x3939
127      speaker_level_w(m_speaker, 0);
128   else
129   if (offset == 0x400) // 0x3c00
130      m_cass->output(BIT(data, 0) ? -1.0 : +1.0); // FIXME
131}
102132
133CUSTOM_INPUT_MEMBER( homelab_state::cass3_r )
134{
135   return (m_cass->input() > 0.03);
136}
137
138
103139READ8_MEMBER( homelab_state::exxx_r )
104140{
105141// keys E800-E813 but E810-E813 are not connected
r15485r15486
126162   AM_RANGE( 0x2000, 0x27ff ) AM_ROM  // ROM 5
127163   AM_RANGE( 0x2800, 0x2fff ) AM_ROM  // ROM 6
128164   AM_RANGE( 0x3000, 0x37ff ) AM_ROM  // Empty
129   AM_RANGE( 0x3800, 0x3fff ) AM_READ(key_r) AM_WRITENOP
165   AM_RANGE( 0x3800, 0x3fff ) AM_READWRITE(key_r,cass_w)
130166   AM_RANGE( 0x4000, 0x7fff ) AM_RAM
131   AM_RANGE( 0xc000, 0xc3ff ) AM_RAM AM_SHARE("videoram") AM_MIRROR(0x3c00) // Video RAM 1K
167   AM_RANGE( 0xc000, 0xc3ff ) AM_RAM AM_SHARE("videoram") // Video RAM 1K
168   AM_RANGE( 0xe000, 0xe0ff ) AM_READ(cass2_r)
132169ADDRESS_MAP_END
133170
134171static ADDRESS_MAP_START(homelab3_mem, AS_PROGRAM, 8, homelab_state)
r15485r15486
253290   PORT_BIT(0xf0, IP_ACTIVE_LOW, IPT_UNUSED)
254291
255292   PORT_START("X3")
256   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, homelab_state, cass_r, " ")
293   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, homelab_state, cass3_r, " ")
257294   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F2") PORT_CODE(KEYCODE_F2)
258295   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F1") PORT_CODE(KEYCODE_F1)
259296   PORT_BIT(0xf8, IP_ACTIVE_LOW, IPT_UNUSED)
r15485r15486
440477/* Machine driver */
441478static MACHINE_CONFIG_START( homelab, homelab_state )
442479   /* basic machine hardware */
443   MCFG_CPU_ADD("maincpu", Z80, 3000000)
480   MCFG_CPU_ADD("maincpu", Z80, XTAL_8MHz / 2)
444481   MCFG_CPU_PROGRAM_MAP(homelab2_mem)
482   MCFG_CPU_VBLANK_INT("screen", homelab_frame)
445483
446484   /* video hardware */
447485   MCFG_SCREEN_ADD("screen", RASTER)
r15485r15486
453491   MCFG_GFXDECODE(homelab)
454492   MCFG_PALETTE_LENGTH(2)
455493   MCFG_PALETTE_INIT(monochrome_green)
494
495   /* sound hardware */
496   MCFG_SPEAKER_STANDARD_MONO("mono")
497   MCFG_SOUND_ADD(SPEAKER_TAG, SPEAKER_SOUND, 0)
498   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
499   MCFG_SOUND_WAVE_ADD(WAVE_TAG, CASSETTE_TAG)
500   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
501
502   MCFG_CASSETTE_ADD( CASSETTE_TAG, default_cassette_interface )
456503MACHINE_CONFIG_END
457504
458static MACHINE_CONFIG_DERIVED( homelab3, homelab )
505static MACHINE_CONFIG_START( homelab3, homelab_state )
459506   /* basic machine hardware */
460   MCFG_CPU_MODIFY("maincpu")
507   MCFG_CPU_ADD("maincpu", Z80, XTAL_12MHz / 4)
461508   MCFG_CPU_PROGRAM_MAP(homelab3_mem)
462509   MCFG_CPU_IO_MAP(homelab3_io)
463510
464   MCFG_SCREEN_MODIFY("screen")
511   /* video hardware */
512   MCFG_SCREEN_ADD("screen", RASTER)
513   MCFG_SCREEN_REFRESH_RATE(50)
514   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
465515   MCFG_SCREEN_SIZE(64*8, 32*8)
466516   MCFG_SCREEN_VISIBLE_AREA(0, 64*8-1, 0, 32*8-1)
467517   MCFG_SCREEN_UPDATE_STATIC( homelab3 )
518   MCFG_GFXDECODE(homelab)
519   MCFG_PALETTE_LENGTH(2)
520   MCFG_PALETTE_INIT(monochrome_green)
468521
469522   /* sound hardware */
470523   MCFG_SPEAKER_STANDARD_MONO("mono")
r15485r15486
491544   ROM_LOAD( "hl2_2.rom", 0x0800, 0x0800, CRC(696AF3C1) SHA1(b53bc6ae2b75975618fc90e7181fa5d21409fce1))
492545   ROM_LOAD( "hl2_3.rom", 0x1000, 0x0800, CRC(69E57E8C) SHA1(e98510abb715dbf513e1b29fb6b09ab54e9483b7))
493546   ROM_LOAD( "hl2_4.rom", 0x1800, 0x0800, CRC(97CBBE74) SHA1(34f0bad41302b059322018abc3d1c2336ecfbea8))
494   ROM_LOAD( "hl2_m.rom", 0x2000, 0x0800, CRC(10040235) SHA1(e121dfb97cc8ea99193a9396a9f7af08585e0ff0) )
547   ROM_LOAD( "hl2_m.rom", 0x2000, 0x0800, BAD_DUMP CRC(10040235) SHA1(e121dfb97cc8ea99193a9396a9f7af08585e0ff0) )
548   ROM_FILL(0x46, 1, 0x18) // fix bad code
549   ROM_FILL(0x47, 1, 0x0E)
495550
496551   ROM_REGION(0x0800, "chargen",0)
497552   ROM_LOAD ("hl2.chr", 0x0000, 0x0800, CRC(2E669D40) SHA1(639dd82ed29985dc69830aca3b904b6acc8fe54a))

Previous 15994 Revisions Next


© 1998-2018 The MESS Team