mirror of
https://github.com/holub/mame
synced 2025-04-25 01:40:16 +03:00
pg685 updates [R Belmont]
- Prelminiary working oua11 video - Fixed ROM and ROM shadow mapping for oua12 so it actually boots - Preliminary not-quite-working oua12 video (chargen decode is unknown)
This commit is contained in:
parent
5387680831
commit
feca994e2f
@ -5,6 +5,7 @@
|
||||
Siemens Simatic PG-685
|
||||
|
||||
driver skeleton by rfka01
|
||||
more skeleton by R. Belmont
|
||||
|
||||
****************************************************************************
|
||||
|
||||
@ -95,7 +96,9 @@ HD: SRM2064C-15, WD2010B-AL, 10,000000 MHz crystal
|
||||
#include "cpu/nec/nec.h"
|
||||
//#include "cpu/i86/i86.h"
|
||||
#include "cpu/i86/i286.h"
|
||||
//#include "video/mc6845.h"
|
||||
#include "video/mc6845.h"
|
||||
|
||||
#define CRTC_TAG "crtc"
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
@ -105,14 +108,23 @@ class pg685_state : public driver_device
|
||||
{
|
||||
public:
|
||||
pg685_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_maincpu(*this, "maincpu") { }
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_vram(*this, "framebuffer"),
|
||||
m_vram16(*this, "framebuffer16"),
|
||||
m_fontram(*this, "charcopy")
|
||||
{ }
|
||||
|
||||
uint32_t screen_update_pg685(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
MC6845_UPDATE_ROW(crtc_update_row);
|
||||
MC6845_UPDATE_ROW(crtc_update_row_oua12);
|
||||
|
||||
private:
|
||||
virtual void machine_reset() override;
|
||||
virtual void video_start() override;
|
||||
required_device<cpu_device> m_maincpu;
|
||||
optional_shared_ptr<uint8_t> m_vram;
|
||||
optional_shared_ptr<uint16_t> m_vram16;
|
||||
optional_shared_ptr<uint8_t> m_fontram;
|
||||
};
|
||||
|
||||
//**************************************************************************
|
||||
@ -123,6 +135,8 @@ static ADDRESS_MAP_START(pg685_mem, AS_PROGRAM, 8, pg685_state)
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x00000,0xbffff) AM_RAM
|
||||
AM_RANGE(0xf0000,0xf1fff) AM_RAM
|
||||
AM_RANGE(0xf9f02,0xf9f02) AM_DEVREADWRITE(CRTC_TAG, mc6845_device, status_r, address_w)
|
||||
AM_RANGE(0xf9f03,0xf9f03) AM_DEVREADWRITE(CRTC_TAG, mc6845_device, register_r, register_w)
|
||||
AM_RANGE(0xfa000,0xfa7ff) AM_RAM AM_SHARE ("charcopy")
|
||||
AM_RANGE(0xfb000,0xfb7ff) AM_RAM AM_SHARE ("framebuffer")
|
||||
AM_RANGE(0xfc000,0xfffff) AM_ROM AM_REGION("bios", 0)
|
||||
@ -131,10 +145,12 @@ ADDRESS_MAP_END
|
||||
static ADDRESS_MAP_START(pg685oua12_mem, AS_PROGRAM, 16, pg685_state)
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x00000,0xdffff) AM_RAM
|
||||
AM_RANGE(0xe0000,0xeffff) AM_RAM AM_SHARE ("framebuffer")
|
||||
AM_RANGE(0xe0000,0xeffff) AM_RAM AM_SHARE ("framebuffer16")
|
||||
AM_RANGE(0xf0000,0xf1fff) AM_RAM
|
||||
AM_RANGE(0xfa000,0xfa7ff) AM_RAM AM_SHARE ("charcopy")
|
||||
AM_RANGE(0xfc000,0xfffff) AM_ROM AM_REGION("bios", 0)
|
||||
AM_RANGE(0xf9f80,0xf9f81) AM_DEVREADWRITE8(CRTC_TAG, mc6845_device, status_r, address_w, 0x00ff)
|
||||
AM_RANGE(0xf9f80,0xf9f81) AM_DEVREADWRITE8(CRTC_TAG, mc6845_device, register_r, register_w, 0xff00)
|
||||
AM_RANGE(0xfc000,0xfffff) AM_RAM // BIOS RAM shadow
|
||||
AM_RANGE(0xffc000,0xffffff) AM_ROM AM_REGION("bios", 0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -165,11 +181,60 @@ void pg685_state::video_start()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
uint32_t pg685_state::screen_update_pg685(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
MC6845_UPDATE_ROW( pg685_state::crtc_update_row )
|
||||
{
|
||||
return 0;
|
||||
static const uint32_t palette[2] = { 0x00d000, 0 };
|
||||
uint32_t *p = &bitmap.pix32(y);
|
||||
uint16_t chr_base = ra;
|
||||
int i;
|
||||
uint8_t *vram = (uint8_t *)m_vram.target();
|
||||
uint8_t *fontram = (uint8_t *)m_fontram.target();
|
||||
|
||||
for ( i = 0; i < x_count; i++ )
|
||||
{
|
||||
uint16_t offset = ( ma + i ) & 0x7ff;
|
||||
uint8_t chr = vram[ offset ];
|
||||
uint8_t data = fontram[ chr_base + chr * 16 ];
|
||||
uint8_t fg = 1;
|
||||
uint8_t bg = 0;
|
||||
|
||||
*p = palette[( data & 0x80 ) ? fg : bg]; p++;
|
||||
*p = palette[( data & 0x40 ) ? fg : bg]; p++;
|
||||
*p = palette[( data & 0x20 ) ? fg : bg]; p++;
|
||||
*p = palette[( data & 0x10 ) ? fg : bg]; p++;
|
||||
*p = palette[( data & 0x08 ) ? fg : bg]; p++;
|
||||
*p = palette[( data & 0x04 ) ? fg : bg]; p++;
|
||||
*p = palette[( data & 0x02 ) ? fg : bg]; p++;
|
||||
*p = palette[( data & 0x01 ) ? fg : bg]; p++;
|
||||
}
|
||||
}
|
||||
|
||||
MC6845_UPDATE_ROW( pg685_state::crtc_update_row_oua12 )
|
||||
{
|
||||
static const uint32_t palette[2] = { 0x00d000, 0 };
|
||||
uint32_t *p = &bitmap.pix32(y);
|
||||
uint16_t chr_base = ra;
|
||||
int i;
|
||||
uint16_t *vram = (uint16_t *)m_vram16.target();
|
||||
uint8_t *fontram = (uint8_t *)memregion("chargen")->base();
|
||||
|
||||
for ( i = 0; i < x_count; i++ )
|
||||
{
|
||||
uint16_t offset = ( ma + i ) & 0x7ff;
|
||||
uint16_t chr = vram[ offset ] & 0xff;
|
||||
uint8_t data = fontram[ chr_base + chr * 16 ];
|
||||
uint8_t fg = 1;
|
||||
uint8_t bg = 0;
|
||||
|
||||
*p = palette[( data & 0x80 ) ? fg : bg]; p++;
|
||||
*p = palette[( data & 0x40 ) ? fg : bg]; p++;
|
||||
*p = palette[( data & 0x20 ) ? fg : bg]; p++;
|
||||
*p = palette[( data & 0x10 ) ? fg : bg]; p++;
|
||||
*p = palette[( data & 0x08 ) ? fg : bg]; p++;
|
||||
*p = palette[( data & 0x04 ) ? fg : bg]; p++;
|
||||
*p = palette[( data & 0x02 ) ? fg : bg]; p++;
|
||||
*p = palette[( data & 0x01 ) ? fg : bg]; p++;
|
||||
}
|
||||
}
|
||||
|
||||
//**************************************************************************
|
||||
@ -186,6 +251,14 @@ static MACHINE_CONFIG_START( pg685, pg685_state )
|
||||
// ram
|
||||
|
||||
// video hardware
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_RAW_PARAMS(12288000, 882, 0, 720, 370, 0, 350 ) // not real values
|
||||
MCFG_SCREEN_UPDATE_DEVICE( CRTC_TAG, mc6845_device, screen_update )
|
||||
|
||||
MCFG_MC6845_ADD(CRTC_TAG, MC6845, "screen", 12288000)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(pg685_state, crtc_update_row)
|
||||
|
||||
// sound hardware
|
||||
|
||||
@ -212,6 +285,14 @@ static MACHINE_CONFIG_START( pg685oua12, pg685_state )
|
||||
// ram
|
||||
|
||||
// video hardware
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_RAW_PARAMS(12288000, 882, 0, 720, 370, 0, 350 ) // not real values
|
||||
MCFG_SCREEN_UPDATE_DEVICE( CRTC_TAG, mc6845_device, screen_update )
|
||||
|
||||
MCFG_MC6845_ADD(CRTC_TAG, MC6845, "screen", 12288000)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(pg685_state, crtc_update_row_oua12)
|
||||
|
||||
// sound hardware
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user