layout/bfm_sc5_gu96x8.lay: Use loops and save many lines.

Also various cleanup.
This commit is contained in:
Vas Crabb 2024-01-24 05:27:43 +11:00
parent 6f513cfb74
commit 654dbd8285
11 changed files with 258 additions and 1855 deletions

View File

@ -68,37 +68,37 @@ void atapi_cdrom_device::device_start()
memset(m_identify_buffer, 0, sizeof(m_identify_buffer));
m_identify_buffer[ 0 ] = 0x8500; // ATAPI device, cmd set 5 compliant, DRQ within 3 ms of PACKET command
m_identify_buffer[0] = 0x8500; // ATAPI device, cmd set 5 compliant, DRQ within 3 ms of PACKET command
m_identify_buffer[ 23 ] = ('1' << 8) | '.';
m_identify_buffer[ 24 ] = ('0' << 8) | ' ';
m_identify_buffer[ 25 ] = (' ' << 8) | ' ';
m_identify_buffer[ 26 ] = (' ' << 8) | ' ';
m_identify_buffer[23] = ('1' << 8) | '.';
m_identify_buffer[24] = ('0' << 8) | ' ';
m_identify_buffer[25] = (' ' << 8) | ' ';
m_identify_buffer[26] = (' ' << 8) | ' ';
m_identify_buffer[ 27 ] = ('M' << 8) | 'A';
m_identify_buffer[ 28 ] = ('M' << 8) | 'E';
m_identify_buffer[ 29 ] = (' ' << 8) | ' ';
m_identify_buffer[ 30 ] = (' ' << 8) | ' ';
m_identify_buffer[ 31 ] = ('V' << 8) | 'i';
m_identify_buffer[ 32 ] = ('r' << 8) | 't';
m_identify_buffer[ 33 ] = ('u' << 8) | 'a';
m_identify_buffer[ 34 ] = ('l' << 8) | ' ';
m_identify_buffer[ 35 ] = ('C' << 8) | 'D';
m_identify_buffer[ 36 ] = ('R' << 8) | 'O';
m_identify_buffer[ 37 ] = ('M' << 8) | ' ';
m_identify_buffer[ 38 ] = (' ' << 8) | ' ';
m_identify_buffer[ 39 ] = (' ' << 8) | ' ';
m_identify_buffer[ 40 ] = (' ' << 8) | ' ';
m_identify_buffer[ 41 ] = (' ' << 8) | ' ';
m_identify_buffer[ 42 ] = (' ' << 8) | ' ';
m_identify_buffer[ 43 ] = (' ' << 8) | ' ';
m_identify_buffer[ 44 ] = (' ' << 8) | ' ';
m_identify_buffer[ 45 ] = (' ' << 8) | ' ';
m_identify_buffer[ 46 ] = (' ' << 8) | ' ';
m_identify_buffer[27] = ('M' << 8) | 'A';
m_identify_buffer[28] = ('M' << 8) | 'E';
m_identify_buffer[29] = (' ' << 8) | ' ';
m_identify_buffer[30] = (' ' << 8) | ' ';
m_identify_buffer[31] = ('V' << 8) | 'i';
m_identify_buffer[32] = ('r' << 8) | 't';
m_identify_buffer[33] = ('u' << 8) | 'a';
m_identify_buffer[34] = ('l' << 8) | ' ';
m_identify_buffer[35] = ('C' << 8) | 'D';
m_identify_buffer[36] = ('R' << 8) | 'O';
m_identify_buffer[37] = ('M' << 8) | ' ';
m_identify_buffer[38] = (' ' << 8) | ' ';
m_identify_buffer[39] = (' ' << 8) | ' ';
m_identify_buffer[40] = (' ' << 8) | ' ';
m_identify_buffer[41] = (' ' << 8) | ' ';
m_identify_buffer[42] = (' ' << 8) | ' ';
m_identify_buffer[43] = (' ' << 8) | ' ';
m_identify_buffer[44] = (' ' << 8) | ' ';
m_identify_buffer[45] = (' ' << 8) | ' ';
m_identify_buffer[46] = (' ' << 8) | ' ';
m_identify_buffer[ 49 ] = 0x0600; // Word 49=Capabilities, IORDY may be disabled (bit_10), LBA Supported mandatory (bit_9)
m_identify_buffer[49] = 0x0600; // Word 49=Capabilities, IORDY may be disabled (bit_10), LBA Supported mandatory (bit_9)
m_identify_buffer[ 88 ] = m_ultra_dma_mode;
m_identify_buffer[88] = m_ultra_dma_mode;
atapi_hle_device::device_start();
}

View File

@ -236,8 +236,8 @@ void atapi_hle_device::process_command()
for( int w = 0; w < 256; w++ )
{
m_buffer[w * 2] = m_identify_buffer[ w ] & 0xff;
m_buffer[(w * 2) + 1] = m_identify_buffer[ w ] >> 8;
m_buffer[w * 2] = m_identify_buffer[w] & 0xff;
m_buffer[(w * 2) + 1] = m_identify_buffer[w] >> 8;
}
m_buffer_size = 512;

View File

@ -16,8 +16,8 @@ static constexpr char download_identity[] = "MATSHITA CD98Q4 DOWNLOADGS0N";
void matsushita_cr589_device::nvram_default()
{
memset( buffer, 0, sizeof(buffer));
memcpy( &buffer[ identity_offset ], "MATSHITACD-ROM CR-589 GS0N", 28 );
memset(buffer, 0, sizeof(buffer));
memcpy(&buffer[identity_offset], "MATSHITACD-ROM CR-589 GS0N", 28);
}
@ -50,27 +50,27 @@ bool matsushita_cr589_device::nvram_write(util::write_stream &file)
void matsushita_cr589_device::ExecCommand()
{
switch( command[ 0 ] )
switch( command[0] )
{
case T10SPC_CMD_INQUIRY:
logerror("T10MMC: INQUIRY\n");
m_phase = SCSI_PHASE_DATAIN;
m_status_code = SCSI_STATUS_CODE_GOOD;
m_transfer_length = SCSILengthFromUINT8( &command[ 4 ] );
m_transfer_length = SCSILengthFromUINT8( &command[4] );
break;
case 0x3b: // WRITE BUFFER
bufferOffset = get_u24be( &command[ 3 ] );
bufferOffset = get_u24be( &command[3] );
m_phase = SCSI_PHASE_DATAOUT;
m_status_code = SCSI_STATUS_CODE_GOOD;
m_transfer_length = get_u24be( &command[ 6 ] );
m_transfer_length = get_u24be( &command[6] );
break;
case 0x3c: // READ BUFFER
bufferOffset = get_u24be( &command[ 3 ] );
bufferOffset = get_u24be( &command[3] );
m_phase = SCSI_PHASE_DATAIN;
m_status_code = SCSI_STATUS_CODE_GOOD;
m_transfer_length = get_u24be( &command[ 6 ] );
m_transfer_length = get_u24be( &command[6] );
break;
case 0xcc: // FIRMWARE DOWNLOAD ENABLE
@ -87,7 +87,7 @@ void matsushita_cr589_device::ExecCommand()
void matsushita_cr589_device::ReadData( uint8_t *data, int dataLength )
{
switch( command[ 0 ] )
switch( command[0] )
{
case T10SPC_CMD_INQUIRY:
memset(data, 0, dataLength);
@ -96,16 +96,16 @@ void matsushita_cr589_device::ReadData( uint8_t *data, int dataLength )
if( download )
{
memcpy( &data[ 8 ], download_identity, 28 );
memcpy( &data[8], download_identity, 28 );
}
else
{
memcpy( &data[ 8 ], &buffer[ identity_offset ], 28 );
memcpy( &data[8], &buffer[identity_offset], 28 );
}
break;
case 0x3c: // READ BUFFER
memcpy( data, &buffer[ bufferOffset ], dataLength );
memcpy( data, &buffer[bufferOffset], dataLength );
bufferOffset += dataLength;
break;
@ -117,15 +117,15 @@ void matsushita_cr589_device::ReadData( uint8_t *data, int dataLength )
void matsushita_cr589_device::WriteData( uint8_t *data, int dataLength )
{
switch( command[ 0 ] )
switch( command[0] )
{
case 0x3b: // WRITE BUFFER
memcpy( &buffer[ bufferOffset ], data + 32, dataLength - 32 );
memcpy( &buffer[bufferOffset], data + 32, dataLength - 32 );
bufferOffset += dataLength;
break;
case 0xcc: // FIRMWARE DOWNLOAD ENABLE
if( memcmp( data, &buffer[ identity_offset ], 28 ) == 0 )
if( memcmp( data, &buffer[identity_offset], 28 ) == 0 )
{
download = 1;
}
@ -161,35 +161,35 @@ void matsushita_cr589_device::device_start()
/// TODO: split identify buffer into another method as device_start() should be called after it's filled in, but the atapi_cdrom_device has it's own.
memset(m_identify_buffer, 0, sizeof(m_identify_buffer));
m_identify_buffer[ 0 ] = 0x8500; // ATAPI device, cmd set 5 compliant, DRQ within 3 ms of PACKET command
m_identify_buffer[0] = 0x8500; // ATAPI device, cmd set 5 compliant, DRQ within 3 ms of PACKET command
m_identify_buffer[ 23 ] = ('1' << 8) | '.';
m_identify_buffer[ 24 ] = ('0' << 8) | ' ';
m_identify_buffer[ 25 ] = (' ' << 8) | ' ';
m_identify_buffer[ 26 ] = (' ' << 8) | ' ';
m_identify_buffer[23] = ('1' << 8) | '.';
m_identify_buffer[24] = ('0' << 8) | ' ';
m_identify_buffer[25] = (' ' << 8) | ' ';
m_identify_buffer[26] = (' ' << 8) | ' ';
m_identify_buffer[ 27 ] = ('M' << 8) | 'A';
m_identify_buffer[ 28 ] = ('T' << 8) | 'S';
m_identify_buffer[ 29 ] = ('H' << 8) | 'I';
m_identify_buffer[ 30 ] = ('T' << 8) | 'A';
m_identify_buffer[ 31 ] = (' ' << 8) | 'C';
m_identify_buffer[ 32 ] = ('R' << 8) | '-';
m_identify_buffer[ 33 ] = ('5' << 8) | '8';
m_identify_buffer[ 34 ] = ('9' << 8) | ' ';
m_identify_buffer[ 35 ] = (' ' << 8) | ' ';
m_identify_buffer[ 36 ] = (' ' << 8) | ' ';
m_identify_buffer[ 37 ] = (' ' << 8) | ' ';
m_identify_buffer[ 38 ] = (' ' << 8) | ' ';
m_identify_buffer[ 39 ] = (' ' << 8) | ' ';
m_identify_buffer[ 40 ] = (' ' << 8) | ' ';
m_identify_buffer[ 41 ] = (' ' << 8) | ' ';
m_identify_buffer[ 42 ] = (' ' << 8) | ' ';
m_identify_buffer[ 43 ] = (' ' << 8) | ' ';
m_identify_buffer[ 44 ] = (' ' << 8) | ' ';
m_identify_buffer[ 45 ] = (' ' << 8) | ' ';
m_identify_buffer[ 46 ] = (' ' << 8) | ' ';
m_identify_buffer[27] = ('M' << 8) | 'A';
m_identify_buffer[28] = ('T' << 8) | 'S';
m_identify_buffer[29] = ('H' << 8) | 'I';
m_identify_buffer[30] = ('T' << 8) | 'A';
m_identify_buffer[31] = (' ' << 8) | 'C';
m_identify_buffer[32] = ('R' << 8) | '-';
m_identify_buffer[33] = ('5' << 8) | '8';
m_identify_buffer[34] = ('9' << 8) | ' ';
m_identify_buffer[35] = (' ' << 8) | ' ';
m_identify_buffer[36] = (' ' << 8) | ' ';
m_identify_buffer[37] = (' ' << 8) | ' ';
m_identify_buffer[38] = (' ' << 8) | ' ';
m_identify_buffer[39] = (' ' << 8) | ' ';
m_identify_buffer[40] = (' ' << 8) | ' ';
m_identify_buffer[41] = (' ' << 8) | ' ';
m_identify_buffer[42] = (' ' << 8) | ' ';
m_identify_buffer[43] = (' ' << 8) | ' ';
m_identify_buffer[44] = (' ' << 8) | ' ';
m_identify_buffer[45] = (' ' << 8) | ' ';
m_identify_buffer[46] = (' ' << 8) | ' ';
m_identify_buffer[ 49 ] = 0x0400; // IORDY may be disabled
m_identify_buffer[49] = 0x0400; // IORDY may be disabled
}
void matsushita_cr589_device::device_reset()

View File

@ -39,7 +39,7 @@ protected:
private:
int download;
uint8_t buffer[ 65536 ];
uint8_t buffer[65536];
int bufferOffset;
};

View File

@ -191,7 +191,7 @@ void gdrom_device::ExecCommand()
case 0x10:
{
transferOffset = command[2];
u8 allocation_length = SCSILengthFromUINT8( &command[ 4 ] );
u8 allocation_length = SCSILengthFromUINT8( &command[4] );
// any game that enables [redbook]
LOGCMD("REQ_STAT 10h offset %02x length %02x\n", transferOffset, allocation_length);
@ -209,9 +209,9 @@ void gdrom_device::ExecCommand()
m_phase = SCSI_PHASE_DATAIN;
m_status_code = SCSI_STATUS_CODE_GOOD;
// if (SCSILengthFromUINT8( &command[ 4 ] ) < 32) return -1;
// if (SCSILengthFromUINT8( &command[4] ) < 32) return -1;
transferOffset = command[2];
m_transfer_length = SCSILengthFromUINT8( &command[ 4 ] );
m_transfer_length = SCSILengthFromUINT8( &command[4] );
if (transferOffset & 1)
throw emu_fatalerror("GDROM: REQ_MODE with odd offset %02x %02x", transferOffset, m_transfer_length);
break;
@ -222,7 +222,7 @@ void gdrom_device::ExecCommand()
m_phase = SCSI_PHASE_DATAOUT;
m_status_code = SCSI_STATUS_CODE_GOOD;
//transferOffset = command[2];
m_transfer_length = SCSILengthFromUINT8( &command[ 4 ] );
m_transfer_length = SCSILengthFromUINT8( &command[4] );
if (command[2])
throw emu_fatalerror("GDROM: SET_MODE with offset %02x %02x", transferOffset, m_transfer_length);
@ -246,7 +246,7 @@ void gdrom_device::ExecCommand()
// TODO: it's supposed to write a single and a double density TOC request
//if (command[1])
// throw emu_fatalerror("Double density unsupported");
u16 allocation_length = SCSILengthFromUINT16( &command[ 3 ] );
u16 allocation_length = SCSILengthFromUINT16( &command[3] );
LOGCMD("READ_TOC 14h %02x %02x %d\n",
command[1], command[2], allocation_length
);
@ -272,7 +272,7 @@ void gdrom_device::ExecCommand()
{
m_phase = SCSI_PHASE_DATAIN;
m_status_code = SCSI_STATUS_CODE_GOOD;
m_transfer_length = SCSILengthFromUINT8( &command[ 4 ] );
m_transfer_length = SCSILengthFromUINT8( &command[4] );
LOGCMD("REQ_SES 15h %02x %02x\n", command[2], m_transfer_length);
break;
}
@ -431,7 +431,7 @@ void gdrom_device::ExecCommand()
case 0x40:
{
m_transfer_length = SCSILengthFromUINT8( &command[ 4 ] );
m_transfer_length = SCSILengthFromUINT8( &command[4] );
//LOGCMD("CD_SCD 40h %02x %d\n", command[1] & 0xf, m_transfer_length);
switch(command[1] & 0xf)
@ -439,7 +439,7 @@ void gdrom_device::ExecCommand()
case 0x00:
m_phase = SCSI_PHASE_DATAIN;
m_status_code = SCSI_STATUS_CODE_GOOD;
m_transfer_length = SCSILengthFromUINT8( &command[ 4 ] );
m_transfer_length = SCSILengthFromUINT8( &command[4] );
break;
case 0x01:
m_phase = SCSI_PHASE_DATAIN;
@ -753,7 +753,7 @@ void gdrom_device::ReadData( uint8_t *data, int dataLength )
void gdrom_device::WriteData( uint8_t *data, int dataLength )
{
switch (command[ 0 ])
switch (command[0])
{
case 0x12: // SET_MODE
memcpy(&GDROM_Cmd11_Reply[transferOffset], data, (dataLength >= 32-transferOffset) ? 32-transferOffset : dataLength);

View File

@ -82,7 +82,7 @@ void s1c33209_device::device_reset()
template <offs_t RomBytes>
void s1c33209_device::memory_map(address_map &map)
{
map(0x000'0000, 0x000'1fff).mirror(0x000'2000).ram();
map(0x000'0000, 0x000'1fff).mirror(0x000'2000).ram(); // actually 32 bits wide (single cycle word access)
map(0x003'0000, 0x003'ffff).m(*this, FUNC(s1c33209_device::peripheral_map));
map(0x004'0000, 0x004'ffff).mirror(0x001'0000).m(*this, FUNC(s1c33209_device::peripheral_map));
//map(0x006'0000, 0x007'ffff) area 2 reserved for debug mode

View File

@ -2,16 +2,16 @@
// copyright-holders:David Haywood
/* Scorpion 4 + 5 driver related includes */
/* mainly used for stuff which is currently shared between sc4 / 5 sets to avoid duplication */
#ifndef MAME_BFM_BFP_SC4_H
#define MAME_BFM_BFP_SC4_H
#ifndef MAME_BFM_BFM_SC4_H
#define MAME_BFM_BFM_SC4_H
#pragma once
#include "sec.h"
#include "machine/steppers.h" // stepper motor
#include "bfm_gu96x8m_k657c2.h"
#include "bfm_bda.h"
#include "bfm_gu96x8m_k657c2.h"
#include "sound/ymz280b.h"
#include "machine/mc68681.h"
@ -3378,4 +3378,4 @@ INPUT_PORTS_EXTERN( sc4_raw );
/* not for either of these games? */ \
ROM_LOAD( "casroysnd.bin", 0x00000, 0x80000, CRC(cf1d4b59) SHA1(1b2bc74c6fcc43197a6f295bc34554da01f7b517) )
#endif // MAME_BFM_BFP_SC4_H
#endif // MAME_BFM_BFM_SC4_H

View File

@ -40,7 +40,6 @@ namespace {
class hh_ht11xx_state : public driver_device
{
public:
virtual DECLARE_INPUT_CHANGED_MEMBER(input_wakeup);
protected:

File diff suppressed because it is too large Load Diff

View File

@ -5,8 +5,8 @@
Explorer 85
12/05/2009 Skeleton driver.
29/12/2023 Reworked driver to enable extended RAM memory,
MS BASIC and disable ROM mirror after boot/interrupt.
29/12/2023 Reworked driver to enable extended RAM memory,
MS BASIC and disable ROM mirror after boot/interrupt.
Setting Up
==========
@ -18,15 +18,16 @@
Once started, press Space. The system will start up.
All input must be in upper case.
Microsoft Basic is executed entering the following 2 commands
in the monitor prompt:
.XS nnnn-F87F mmmm-C000 <CR>
Microsoft Basic is executed entering the following 2 commands
in the monitor prompt:
.XS nnnn-F87F mmmm-C000 <CR>
.G <CR>
where nnnn is the previous value of the stack pointer, and mmmm is the previous
value of the program counter.
where nnnn is the previous value of the stack pointer, and mmmm is the
previous value of the program counter.
Basic will request the amount of RAM memory available, 8192 (bytes) must be entered.
BASIC will request the amount of RAM memory available, 8192 (bytes) must
be entered.
****************************************************************************/
@ -37,7 +38,7 @@
- dump of the hexadecimal keyboard monitor ROM
- 64K RAM expansion
- Disk drive and CP/M OS support
- Disk drive and CP/M OS support
*/
@ -70,7 +71,7 @@ public:
, m_rs232(*this, "rs232")
, m_cassette(*this, "cassette")
, m_speaker(*this, "speaker")
, m_rom(*this, "u105") // the 8355 chip contains the monitor ROM
, m_rom(*this, "u105") // the 8355 chip contains the monitor ROM
, m_low_memory_view(*this, "low_memory_view")
, m_is_preparing_interrupt_call(false)
, m_ignore_timer_out(true)
@ -103,7 +104,7 @@ private:
// Member variables
required_device<i8085a_cpu_device> m_maincpu;
required_device<i8355_device> m_i8355;
required_device<i8155_device> m_i8155;
required_device<i8155_device> m_i8155;
required_device<rs232_port_device> m_rs232;
required_device<cassette_image_device> m_cassette;
required_device<speaker_sound_device> m_speaker;
@ -113,7 +114,7 @@ private:
bool m_is_preparing_interrupt_call;
bool m_ignore_timer_out;
bool m_tape_control;
emu_timer *m_timer;
emu_timer *m_timer;
};
@ -123,14 +124,14 @@ void exp85_state::exp85_mem(address_map &map)
map.unmap_value_high();
// Extended RAM or mapped monitor ROM (only during interrupt and reset)
map(0x0000, 0x1fff).view(m_low_memory_view);
// Microsoft Basic ROM
// Microsoft BASIC ROM
map(0xc000, 0xdfff).rom();
// Monitor ROM in the 8355 chip
map(0xf000, 0xf7ff).rom().region(m_rom, 0);
// 256 bytes of RAM of level A in the 8155 chip.
map(0xf800, 0xf8ff).rw(m_i8155, FUNC(i8155_device::memory_r), FUNC(i8155_device::memory_w));
// monitor ROM mirror
// monitor ROM mirror
m_low_memory_view[LOW_MEMORY_ROM_MIRROR_ENTRY](0x0000, 0x07ff).rom().region(m_rom, 0);
// extended RAM
m_low_memory_view[LOW_MEMORY_RAM_ENTRY](0x0000, 0x1fff).ram();
@ -243,9 +244,9 @@ void exp85_state::sod_w(int state)
void exp85_state::status_out(u8 status)
{
// In the real hardware this is monitored via the IO/M, S0, S1
// In the real hardware this is monitored via the IO/M, S0, S1
// and ALE output pins of the 8085.
// Since these pins are not emulated, then we must explicitly get the internal
// Since these pins are not emulated, then we must explicitly get the internal
// interrupt acknowledge state (0x23 or 0x26) and behave as the monitor expects.
auto current_pc = m_maincpu->pc();
if (status == 0x23 || status == 0x26)
@ -253,20 +254,20 @@ void exp85_state::status_out(u8 status)
// When an interrupt is triggered the low memory shall be set to the ROM mirror
m_is_preparing_interrupt_call = true;
m_low_memory_view.select(LOW_MEMORY_ROM_MIRROR_ENTRY);
}
}
else if (m_is_preparing_interrupt_call && (current_pc & 0xff00) == 0x0000)
{
// Avoids setting the lower memory back to RAM until
// it branches to the interrupt handler.
m_is_preparing_interrupt_call = false;
}
}
else if (!m_is_preparing_interrupt_call && (current_pc & 0xf000) == 0xf000)
{
// When the interrupt handler is executing and the address is >= 0xf000
// the low memory is mapped to RAM
m_low_memory_view.select(LOW_MEMORY_RAM_ENTRY);
}
}
}
//**************************************************************************
@ -303,7 +304,7 @@ void exp85_state::to_change(int to)
{
// In the 8155 implementation the TIMER-OUT line (to) is
// asserted by default on initialization; this generates a spurious exception
// avoided here via an ignore flag.
// avoided here via an ignore flag.
if (m_ignore_timer_out)
{
m_ignore_timer_out = false;
@ -313,16 +314,16 @@ void exp85_state::to_change(int to)
// The 8155 has a max TIMER-IN to TIMER-OUT delay of 400ns (datasheet page 3-256). In a real system
// this delay was measured in ~70ns. This is enough for the next instruction cycle to start
// and for the interrupt to be acknowledged one instruction later. This effect is fundamental
// for the ROM monitor stepping functionality, since it depends heavily on interrupting when the
// for the ROM monitor stepping functionality, since it depends heavily on interrupting when the
// next instruction of the user program is being executed.
// MAME allows to set a timer of 70ns but that is not enough to get the CPU scheduled for at least 1 cycle
// before the interrupt is serviced, so we program a timer to expire beyond a full clock cycle.
// before the interrupt is serviced, so we program a timer to expire beyond a full clock cycle.
m_timer->adjust(m_i8155->clocks_to_attotime(2), to);
}
TIMER_CALLBACK_MEMBER(exp85_state::trap_delay)
{
// The 8155 TIMER-OUT line is connected to the TRAP input line of the 8085;
// The 8155 TIMER-OUT line is connected to the TRAP input line of the 8085;
// that line is set from the start high, and since there is no change in that line, the
// interrup is never requested (datasheet, page 6-13).
m_maincpu->set_input_line(I8085_TRAP_LINE, param == 1 ? ASSERT_LINE : CLEAR_LINE);
@ -338,18 +339,18 @@ void exp85_state::exp85(machine_config &config)
m_maincpu->in_sid_func().set(FUNC(exp85_state::sid_r));
m_maincpu->out_sod_func().set(FUNC(exp85_state::sod_w));
m_maincpu->out_status_func().set(FUNC(exp85_state::status_out));
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
/* devices */
// The Explorer-85 uses a 6.144MHz clock, but the Intel 8085 divides by 2 this
// The Explorer-85 uses a 6.144MHz clock, but the Intel 8085 divides by 2 this
// input frequency to give the processor internal operating frequency.
// The bus is connected to the CLK (out) of the 8085, running also
// at 6.144MHz divided by 2.
I8155(config, m_i8155, 6.144_MHz_XTAL/2);
// The bus is connected to the CLK (out) of the 8085, running also
// at 6.144MHz divided by 2.
I8155(config, m_i8155, 6.144_MHz_XTAL/2);
m_i8155->out_to_callback().set(FUNC(exp85_state::to_change));
@ -368,14 +369,14 @@ void exp85_state::exp85(machine_config &config)
/* ROMs */
ROM_START( exp85 )
ROM_REGION( 0x10000, "u100", 0 ) // Microsoft Basic
ROM_REGION( 0x10000, "u100", 0 ) // Microsoft BASIC
ROM_DEFAULT_BIOS("eia")
ROM_LOAD( "c000.bin", 0xc000, 0x0800, CRC(73ce4aad) SHA1(2c69cd0b6c4bdc92f4640bce18467e4e99255bab) )
ROM_LOAD( "c800.bin", 0xc800, 0x0800, CRC(eb3fdedc) SHA1(af92d07f7cb7533841b16e1176401363176857e1) )
ROM_LOAD( "d000.bin", 0xd000, 0x0800, CRC(c10c4a22) SHA1(30588ba0b27a775d85f8c581ad54400c8521225d) )
ROM_LOAD( "d800.bin", 0xd800, 0x0800, CRC(dfa43ef4) SHA1(56a7e7a64928bdd1d5f0519023d1594cacef49b3) )
ROM_REGION( 0x800, "u105", 0 ) // Explorer 85 Monitor
ROM_REGION( 0x800, "u105", 0 ) // Explorer 85 Monitor
ROM_SYSTEM_BIOS( 0, "eia", "EIA Terminal" ) // Serial terminal ROM
ROMX_LOAD( "ex 85.u105", 0x0000, 0x0800, CRC(1a99d0d9) SHA1(57b6d48e71257bc4ef2d3dddc9b30edf6c1db766), ROM_BIOS(0) )
ROM_SYSTEM_BIOS( 1, "hex", "Hex Keyboard" ) // Keypad ROM (not available)

View File

@ -29,7 +29,7 @@ C6 10738 Bus Interface Circuit } These 2 interface the C5 eprom to the CPU
ToDo:
- Everything (the code below is mostly a carry-over from gts1 and is incomplete or guesswork).
- There's lots of manuals, with lots of info, but not what we need. For example, no proper schematics.
- There are lots of manuals, with lots of info, but not what we need. For example, no proper schematics.
- No info on the sound (all it says is 4 TTL chips controlled by 6 bits of the IO expander).
- A plug-in printer is used to view and alter settings. We have no info about it.
- Default layout.
@ -382,18 +382,18 @@ void recel_state::recel(machine_config & config)
genpin_audio(config);
}
/* The BIOS is the same for all sets, but is labeled different depending on the ROM type:
/* The BIOS is the same for all sets, but is labeled differently depending on the ROM type:
-13: For machines with personality PROM 1702.
-14: For machines with 2716 EPROM.
On both cases, the second half of each chip is not used, having their A11 ping grounded
In both cases, the second half of each chip is not used, with their A11 pins grounded
(these chips have A1 to A11, there's no A0).
*/
#define RECEL_BIOS \
ROM_REGION( 0x800, "maincpu", ROMREGION_ERASEFF ) \
ROM_LOAD("a2361.b1", 0x0000, 0x0400, CRC(d0c4695d) SHA1(4846adb3f6c292626840ba5255ffc5e788a69301) ) \
ROM_IGNORE( 0x400 ) \
ROM_IGNORE( 0x400 ) \
ROM_LOAD("a2362.b2", 0x0400, 0x0400, CRC(39a70611) SHA1(8545e168a5f256150bcff12d1e6d8efffd08c3cd) ) \
ROM_IGNORE( 0x400 )
ROM_IGNORE( 0x400 )
ROM_START( recel )
RECEL_BIOS