Merge pull request #3080 from JoakimLarsson/stepone_7

Mybrain 3000: More stepone floppies and corrected Mode 0 graphics
This commit is contained in:
Joakim Larsson Edström 2018-01-18 15:20:00 +01:00 committed by GitHub
commit 91e671d89a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 55 deletions

View File

@ -17,8 +17,8 @@
</software>
<!-- Apps -->
<software name="combi">
<description></description>
<software name="combi" supported="no">
<description>Custom integrated office suite</description>
<year>1983</year>
<publisher>OMS - Office Management Systems AB</publisher>
<part name="flop1" interface="floppy_5_25">
@ -97,4 +97,24 @@
</part>
</software>
<software name="spel">
<description>Collections of small games</description>
<year>1987</year>
<publisher>Various authors</publisher>
<part name="spel1" interface="floppy_5_25">
<dataarea name="flop" size="666392">
<rom name="SPEL1.IMD" size="666392" crc="62eae5c0" sha1="e33e9e901a649114312c75780fefbd9bb27a18c7" offset="0" />
</dataarea>
</part>
<part name="spel2" interface="floppy_5_25">
<dataarea name="flop" size="509004">
<rom name="SPEL2.IMD" size="509004" crc="07abdac4" sha1="a665d8862f80234ca85a9dc14ae89ff202c70860" offset="0" />
</dataarea>
</part>
<part name="spel3" interface="floppy_5_25">
<dataarea name="flop" size="461481">
<rom name="SPEL3.IMD" size="461481" crc="771eafc3" sha1="1bc8879355dee5877ea8bb1c16256fa28eb10547" offset="0" />
</dataarea>
</part>
</software>
</softwarelist>

View File

@ -294,7 +294,7 @@ MC6845_UPDATE_ROW( myb3k_state::crtc_update_row )
{
/* The 6845 is not programmed to get 80 character modes or 400 pixels width but this is managed by external circuitry that selects
the apropriate pixelclock based on the video mode latch at i/o address 0x04. This callback always get x_count set to 40 */
uint8_t row_length = (m_vmode & 0x02) || (m_vmode == 0 && (m_pal == &m_mpal)) ? x_count * 2 : x_count;
uint8_t row_length = (m_vmode & 0x02) || (m_vmode == 0) ? x_count * 2 : x_count;
for (int x_pos = 0; x_pos < row_length; x_pos++)
{
uint16_t page = (m_portc & PC1_SETPAGE) ? 0x8000 : 0;
@ -308,19 +308,16 @@ MC6845_UPDATE_ROW( myb3k_state::crtc_update_row )
}
else
{
//uint32_t pdat;
switch (m_vmode)
{
case 0:
// Color connector doing 320x200, 40x25 characters, 8 grey tones
if ((m_io_monitor->read() & 1) == 0)
{
uint32_t rowstart = (((x_pos + ma) * 32 + ra) & 0x7fff) + page;
uint32_t rowstart = (((x_pos + ma * 2) * 16 + ra) & 0x7fff) + page;
uint32_t pdat = ((m_vram[rowstart + 0] & 0xff) << 16); // Green 8 bits
pdat |= ((m_vram[rowstart + 8] & 0xf0) << 8); // Red upper 4 bits
pdat |= ((m_vram[rowstart + 8] & 0x0f) << 4); // Blue upper 4 bits
pdat |= ((m_vram[rowstart + 24] & 0xf0) << 4); // Red lower 4 bits
pdat |= ((m_vram[rowstart + 24] & 0x0f) << 0); // Blue lower 4 bits
pdat |= ((m_vram[rowstart + 8] & 0xf0) << 8); // Red upper 4 bits
pdat |= ((m_vram[rowstart + 8] & 0x0f) << 4); // Blue upper 4 bits
pdat |= ((m_vram[rowstart + 8] & 0xf0) << 4); // Red lower 4 bits
pdat |= ((m_vram[rowstart + 8] & 0x0f) << 0); // Blue lower 4 bits
for (int pxl = 0; pxl < 8; pxl++)
{
uint16_t pind = 0;
@ -330,27 +327,10 @@ MC6845_UPDATE_ROW( myb3k_state::crtc_update_row )
((pdat & (0x000080 >> pxl)) ? 0x01 : 0x00) );
/* Check if we are in a cursor and create cursor if so */
pind ^= ((cursor_x != -1 && x_pos == cursor_x && ra == 7) ? 7 : 0);
//pind ^= ((cursor_x != -1 && x_pos == cursor_x && ra == 7) ? 7 : 0);
/* Create the grey scale */
bitmap.pix32(y, ( x_pos * 8) + pxl) = rgb_t(m_mpal[pind & 0x07].g(),m_mpal[pind & 0x07].g(),m_mpal[pind & 0x07].g());
}
}
else // Monochrome connector doing 640x200, 80x25, b&w
{
uint32_t rowstart = (((x_pos + ma * 2) * 16 + ra) & 0x7fff) + page;
uint16_t pdat = m_vram[rowstart];
for (int pxl = 0; pxl < 8; pxl++)
{
if ((pdat & (0x80 >> pxl)) != 0)
{
//bitmap.pix32(y, ( x_pos * 8) + pxl) = (*m_pal)[0x07];
bitmap.pix32(y, ( x_pos * 8) + pxl) = m_mpal[0x07];
}
else
{
bitmap.pix32(y, ( x_pos * 8) + pxl) = rgb_t::black();
}
bitmap.pix32(y, ( x_pos * 8) + pxl) = (*m_pal)[pind & 0x07];
}
}
break;
@ -468,17 +448,9 @@ WRITE8_MEMBER( myb3k_state::myb3k_video_mode_w )
m_vmode = data;
switch (data & 7)
{
case 0:
if ((m_io_monitor->read() & 1) == 0)
{
LOGVMOD(" - Color display 320x200 on 40x25 8 grey tones\n");
rectangle rect(0, 320 - 1, 0, 200 - 1);
m_screen->configure(320, 200, rect, HZ_TO_ATTOSECONDS(50));
break;
}
else // Monochrome connector selected?
{
LOGVMOD(" - Monochrome 640x200 on 80x25 \n");
case 0: // Disambiguity between reality and the service manual. Reality is 640x200 in 8 color or tones!
{
LOGVMOD(" - 640x200 on 80x25 \n");
rectangle rect(0, 640 - 1, 0, 200 - 1);
m_screen->configure(640, 200, rect, HZ_TO_ATTOSECONDS(50));
break;
@ -689,23 +661,10 @@ INPUT_CHANGED_MEMBER(myb3k_state::monitor_changed)
if ((m_io_monitor->read() & 1) == 1)
{
m_pal = &m_mpal;
if ((m_vmode & 7) == 0)
{
LOGVMOD(" - Monochrome 640x200 on 80x25 \n");
rectangle rect(0, 640 - 1, 0, 200 - 1);
m_screen->configure(640, 200, rect, HZ_TO_ATTOSECONDS(50));
}
}
else
{
m_pal = &m_cpal;
if ((m_vmode & 7) == 0)
{
m_pal = &m_mpal;
LOGVMOD(" - Color display 320x200 on 40x25 8 grey tones\n");
rectangle rect(0, 320 - 1, 0, 200 - 1);
m_screen->configure(320, 200, rect, HZ_TO_ATTOSECONDS(50));
}
}
}
@ -781,7 +740,7 @@ void myb3k_state::machine_reset()
m_vmode = 0;
m_portc = 0;
memset(m_dma_page, 0, sizeof(m_dma_page));
m_pal = &m_mpal;
m_pal = (m_io_monitor-> read() & 1) == 1 ? &m_mpal : &m_cpal;
}
void myb3k_state::select_dma_channel(int channel, bool state)