summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/spc1500.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/spc1500.cpp')
-rw-r--r--src/mame/drivers/spc1500.cpp247
1 files changed, 123 insertions, 124 deletions
diff --git a/src/mame/drivers/spc1500.cpp b/src/mame/drivers/spc1500.cpp
index 2017c27f3e7..11b9c4a48e4 100644
--- a/src/mame/drivers/spc1500.cpp
+++ b/src/mame/drivers/spc1500.cpp
@@ -7,19 +7,19 @@ Samsung SPC-1500 driver by Miso Kim
2015-12-16 preliminary driver initialized
2015-12-18 cassette tape supported
2015-12-26 80/40 column mode supported
- 2015-12-28 double access mode supported for I/O
+ 2015-12-28 double access mode supported for I/O
2016-01-02 Korean character input method and display enabled
- 2016-01-03 user defined char (PCG, Programmable Character Generator) support
- 2016-01-05 detection of color palette initialization
+ 2016-01-03 user defined char (PCG, Programmable Character Generator) support
+ 2016-01-05 detection of color palette initialization
2016-01-06 80x16 mode graphic mode support
2016-01-10 double character support
2016-01-12 PCG adressing improved
2016-01-13 Cassette tape motor improved
-
+
TODO:
- Verify PCG ram read for Korean character (english character is fine)
- Support floppy disk drive with SD-1500A controller card
-
+
****************************************************************************/
/*
@@ -32,7 +32,7 @@ TODO:
* Market price 365,000 won ($430) on 04-01-1987
Hardware Specification
-
+
1) SPC-1500
RAM 122KB
- Main Memory: 64KB
@@ -59,19 +59,19 @@ TODO:
Two external power connector for FDD connection
- DIP switch settings for the screen
- Volume control
+
2) SPC-1500A
July 1987 Release
RF modulator only remove the product from an existing model
+
3) SPC-1500V
This product can not confirm the release date because of PCB level modification.
It equiped SPC-1500V VLSI chip embedded products and removed a lot of TTLs and the memory expansion card.
- IOCS ROM Version: 1.6
- Two internal 50-pin expension slots
+
Firmware
+
IOCS ROM
The various versions with 32KB of capacity existed to date has confirmed the final version number 1.8
- Version 1.3:
@@ -79,34 +79,34 @@ TODO:
- Version 1.5:
- Version 1.6:
- Version 1.8: supports a variety of peripherals such as external hard disk, FM-Sound, RS-232C from Static soft (C)
-    various memu appears on the initial screen.
+ various memu appears on the initial screen.
+
BASIC ROM
Capacity and the final version number of the currently identified 32KB 1.3
+
English ROM
The final version of the verification of the capacity 8KB SS150-1222
The character set of a 8x8 size, and are stored with the size 8x16 8x16 is a part of the size of the font data are written differently and 8x8.
+
Hangul ROM
8KB each is divided by a consonant and consonant and neutral.
- Inital (Choseong) SS151-1223: 8 types of intial character (actual 6 types)
- Middle (Jungseong) SS152-1224: 2 types of middle character
- Final (Jongseong) SS153-1225: 2 types of final character
-  
+
Periperials - Monitor
- , high-resolution monitor SM, color monitor model was to distinguish it from CD.
+
1) MD-1255H (Low resolution monitors MD)
- 12 inches Composite 15.734KHz / 60Hz
- N displayed after the model name in the model is non - CRT scanning products
- Stand adopted: if you put the rest on the bottom that can be placed slightly tilted back.
+
2) MD-9052H (Low resolution monitors MD)
- 9 inches Composite 15.734KHz / 60Hz
- - N from model name means 'anti-glare'
+ - N from model name means 'anti-glare'
- All parts except for the appearance and size is the same as the CRT 1255H.
+
3) MD-2563 (color monitor SM)
4) SM-1439A (high-resolution monitor SM)
5) SM-1422 (high-resolution monitor SM)
@@ -115,38 +115,38 @@ TODO:
- High-resolution monochrome monitor
7) SM-1231A (high-resolution monitor SM)
- The other part is other than the appearance of the stand is attached to the same as the model SM-1231
- 8) CD-1451D (color monitor SM)
+
+ 8) CD-1451D (color monitor SM)
- Composite color monitors
9) CD-1462X (color monitor SM)
10)CD-1464W (color monitor SM)
- 11)CW-4644
+ 11)CW-4644
+
FDD (floppy disk drive)
+
1) SD-1500A
- 5.25 "floppy drive for 2D composed of external disk drives diskettes
-  2) SD-1500B
+ 2) SD-1500B
- Dual external disk drives
- The two models are idential except the number of FDD. They need the expension controller card named by SFC-1500.
- IBM PC XT compatible FDD can be quipped. SFD-5x0 model is a genuine FDD from Samsung Electronics.
HDD (Hard Disk Drive)
+
1) STH-20
- External hard disk drive set having a capacity of 20MB SCSI controller and the way
- The controller had not solved alone but the controller can be used to mount another hard disk products.
- Release price: 450,000 won ($530).
+
Joysticks
- - Joystick was limited to 1 as possible (The PCB was designed by supporting two joysticks.
+ - Joystick was limited to 1 as possible (The PCB was designed by supporting two joysticks.
+
1) SJ-1500
- Release price: 8,000 won ($9.4)
- SPC-1000A, MSX-compatible
+
Printer
+
1) SP-510S
- Bitmap image output method Hangul support
- Recommanded 80 columns dot-matrix printer
@@ -157,68 +157,68 @@ TODO:
5) SP-570B
Expansion Cards
+
1) SFC-1500
- External FDD capacity of the floppy disk controller 5.25 inches / 320KB can connect up to two.
+
2) Multi-controller
- Floppy disk controllers and hard disk controllers on the same PCB.
+
3) ST-PAC
- FM sound card can play with up to 9 simultaneous sound or 5 simultaneous sound and 5 drum tones at the same time (FM-PAC compatible MSX)
- Line output and speaker output volume, tone adjustment built-in volume
- - it can be used as a synthesizer by connecting the ST-KEY2 product
+ - it can be used as a synthesizer by connecting the ST-KEY2 product
- Release price: 60,000won ($71)
+
SPC-1500 VDP card
- - MSX game support
+ - MSX game support
- Release price: 35,000won ($41) with composite output only
- Release price: 60,000won ($71) with composite and RGB outputs simultaneously
+
VDP UNIT I
- Composite video output with built-in card expansion card using the same video chip and MSX (static soft)
- Release price: 40,000won ($47).
+
VDP UNIT II
- Expansion using the same video chip and video card with built-in card MSX with an RGB output (static soft)
- Release price: 55,000won ($59).
+
LAN card (SAMNET-K)
- It uses serial communication instead of an Ethernet network card has a way with two serial ports.
- There are two kinds of host card without a DIP switch and the DIP switch is in the client card.
- It was mainly supplied to the teacher / student in an educational institution.
+
Super Pack Card
- Expansion cards that enable the external expansion slot, etc.
+
RS-232C card
- - At least 300bps, an external modem connected to the serial communication card that supports up to 19,200bps
- additionally available communications services using the PSTN network (general switched telephone network)
- and may also be connected to a 9-pin serial mouse.
- - Support for common serial communications functions,
+ - At least 300bps, an external modem connected to the serial communication card that supports up to 19,200bps
+ additionally available communications services using the PSTN network (general switched telephone network)
+ and may also be connected to a 9-pin serial mouse.
+ - Support for common serial communications functions,
and if IOCS ROM version 1.8 or higher to connect an external modem to the PC communication card is available.
- - When used in this communication program is super soft static net programs (XMODEM protocol, FS 220-6 compatible
+ - When used in this communication program is super soft static net programs (XMODEM protocol, FS 220-6 compatible
and supporting Samsung/Sambo combination korean character code, and an 8-bit code completion support Hangul) is used.
- Release price: 60,000won ($71).
+
SS-1 ROM pack unit
- The VDP unit containing 1 cartridge slot card and ROM pack
- ROM pack was not compatible with original MSX ROM pack
- Release price: 49,900won ($58)
+
Super Pack
- External ROM cartrige from Static Soft (C)
- 1 cartridge slot and 3 expansion slots (up to five expansion slots available)
- It is available to use the MSX ROM packs without any modification with the static soft VDP card
- Release price: 60,000won ($71)
+
ST-KEY2
- For synthesizer external keyboard
+
* Compatiblity with X1 series of Sharp Electronics
- Almost the key components is the same as X1 models of Sharp Electronics and except for the keyboard input.
- To port the X1 software to SPC-1500, Text attribute, keyboard input and DMA related code should be modified
-
+
*/
#include "emu.h"
@@ -247,14 +247,14 @@ public:
, m_pcgram(*this, "pcgram")
, m_io_kb(*this, "LINE")
, m_io_joy(*this, "JOY")
- , m_dipsw(*this, "DIP_SWITCH")
+ , m_dipsw(*this, "DIP_SWITCH")
, m_centronics(*this, "centronics")
, m_pio(*this, "ppi8255")
, m_sound(*this, "ay8910")
, m_palette(*this, "palette")
, m_timer(nullptr)
{}
- DECLARE_READ8_MEMBER(psga_r);
+ DECLARE_READ8_MEMBER(psga_r);
DECLARE_READ8_MEMBER(porta_r);
DECLARE_WRITE_LINE_MEMBER( centronics_busy_w ) { m_centronics_busy = state; }
DECLARE_READ8_MEMBER(mc6845_videoram_r);
@@ -281,7 +281,7 @@ public:
DECLARE_READ8_MEMBER(io_r);
DECLARE_PALETTE_INIT(spc);
DECLARE_VIDEO_START(spc);
- MC6845_UPDATE_ROW(crtc_update_row);
+ MC6845_UPDATE_ROW(crtc_update_row);
MC6845_RECONFIGURE(crtc_reconfig);
TIMER_DEVICE_CALLBACK_MEMBER(timer);
private:
@@ -315,8 +315,8 @@ private:
required_device<centronics_device> m_centronics;
required_device<i8255_device> m_pio;
required_device<ay8910_device> m_sound;
- required_device<palette_device> m_palette;
- UINT8 *m_font;
+ required_device<palette_device> m_palette;
+ UINT8 *m_font;
UINT8 m_priority;
emu_timer *m_timer;
void get_pcg_addr();
@@ -338,7 +338,7 @@ WRITE8_MEMBER( spc1500_state::romsel)
if (m_ipl)
membank("bank1")->set_entry(0);
else
- membank("bank1")->set_entry(1);
+ membank("bank1")->set_entry(1);
}
WRITE8_MEMBER( spc1500_state::ramsel)
@@ -349,7 +349,7 @@ WRITE8_MEMBER( spc1500_state::ramsel)
WRITE8_MEMBER( spc1500_state::portb_w)
{
-// m_ipl = data & (1 << 1);
+// m_ipl = data & (1 << 1);
}
WRITE8_MEMBER( spc1500_state::psgb_w)
@@ -381,12 +381,12 @@ WRITE8_MEMBER( spc1500_state::portc_w)
READ8_MEMBER( spc1500_state::portb_r)
{
UINT8 data = 0;
- data |= ((m_cass->get_state() & CASSETTE_MASK_UISTATE) == CASSETTE_STOPPED || ((m_cass->get_state() & CASSETTE_MASK_MOTOR) == CASSETTE_MOTOR_DISABLED));
- data |= (m_dipsw->read() & 1) << 4;
- data |= (m_cass->input() > 0.0038)<<1;
- data |= m_vdg->vsync_r()<<7;
- data &= ~((m_centronics_busy==0)<<3);
- return data;
+ data |= ((m_cass->get_state() & CASSETTE_MASK_UISTATE) == CASSETTE_STOPPED || ((m_cass->get_state() & CASSETTE_MASK_MOTOR) == CASSETTE_MOTOR_DISABLED));
+ data |= (m_dipsw->read() & 1) << 4;
+ data |= (m_cass->input() > 0.0038)<<1;
+ data |= m_vdg->vsync_r()<<7;
+ data &= ~((m_centronics_busy==0)<<3);
+ return data;
}
WRITE8_MEMBER( spc1500_state::crtc_w)
@@ -444,7 +444,7 @@ void spc1500_state::get_pcg_addr()
m_pcg_offset[0] = 0;
m_pcg_offset[1] = 0;
m_pcg_offset[2] = 0;
- }
+ }
}
WRITE8_MEMBER( spc1500_state::pcg_w)
@@ -506,13 +506,12 @@ PALETTE_INIT_MEMBER(spc1500_state,spc)
VIDEO_START_MEMBER(spc1500_state, spc)
{
-
}
MC6845_RECONFIGURE(spc1500_state::crtc_reconfig)
{
-// printf("reconfig. w:%d, h:%d, %f (%d,%d,%d,%d)\n", width, height, (float)frame_period, visarea.left(), visarea.top(), visarea.right(), visarea.bottom());
-// printf("register. m_vert_disp:%d, m_horiz_disp:%d, m_max_ras_addr:%d, m_vert_char_total:%d\n", m_crtc_vreg[6], m_crtc_vreg[1], m_crtc_vreg[9], m_crtc_vreg[0x4]);
+// printf("reconfig. w:%d, h:%d, %f (%d,%d,%d,%d)\n", width, height, (float)frame_period, visarea.left(), visarea.top(), visarea.right(), visarea.bottom());
+// printf("register. m_vert_disp:%d, m_horiz_disp:%d, m_max_ras_addr:%d, m_vert_char_total:%d\n", m_crtc_vreg[6], m_crtc_vreg[1], m_crtc_vreg[9], m_crtc_vreg[0x4]);
}
MC6845_UPDATE_ROW(spc1500_state::crtc_update_row)
@@ -524,7 +523,7 @@ MC6845_UPDATE_ROW(spc1500_state::crtc_update_row)
int j;
int h1, h2, h3;
UINT32 *p = &bitmap.pix32(y);
-
+
unsigned char cho[] ={1,1,1,1,1,1,1,1,0,0,1,1,1,3,5,5,0,0,5,3,3,5,5,5,0,0,3,3,5,1};
unsigned char jong[]={0,0,0,1,1,1,1,1,0,0,1,1,1,2,2,2,0,0,2,2,2,2,2,2,0,0,2,2,1,1};
bool inv = false;
@@ -564,7 +563,7 @@ MC6845_UPDATE_ROW(spc1500_state::crtc_update_row)
hfnt = hfnt & ((*pf << 8) | (*(pf+16)));
pf = &m_font[0x6000+(h3 * 32) + (jong[h2]-1) * 16 * 2 * 32 + n];
hfnt = hfnt & ((*pf << 8) | (*(pf+16)));
- }
+ }
else
{
ascii = *(pv+0x1001);
@@ -639,15 +638,15 @@ WRITE8_MEMBER( spc1500_state::double_w)
if (offset < 0x1e00) { romsel(space, offset, data);} else
if (offset < 0x1f00) { ramsel(space, offset, data);} else
if (offset < 0x2000) {} else
- if (offset < 0x10000)
- {
- if (offset < 0x4000)
+ if (offset < 0x10000)
+ {
+ if (offset < 0x4000)
{
offset &= 0xf7ff;
m_p_videoram[offset-0x1800] = m_p_videoram[offset-0x2000] = data;
}
else
- m_p_videoram[offset-0x2000] = data;
+ m_p_videoram[offset-0x2000] = data;
};
}
}
@@ -655,7 +654,7 @@ WRITE8_MEMBER( spc1500_state::double_w)
READ8_MEMBER( spc1500_state::io_r)
{
m_double_mode = false;
- if (offset < 0x1000) {} else
+ if (offset < 0x1000) {} else
if (offset < 0x1400) {} else
if (offset < 0x1800) { return pcg_r(space, offset); } else
if (offset < 0x1900) { return crtc_r(space, offset); } else
@@ -663,7 +662,7 @@ READ8_MEMBER( spc1500_state::io_r)
if (offset < 0x1b00) { return m_pio->read(space, offset); } else
if (offset < 0x1c00) { return m_sound->data_r(space, offset); } else
if (offset < 0x2000) {} else
- if (offset < 0x10000){
+ if (offset < 0x10000){
if (offset < 0x4000)
offset &= 0xf7ff;
return m_p_videoram[offset - 0x2000]; }
@@ -680,13 +679,13 @@ ADDRESS_MAP_END
#if 0
static ADDRESS_MAP_START( spc1500_io , AS_IO, 8, spc1500_state )
ADDRESS_MAP_UNMAP_HIGH
-// AM_RANGE(0x0000, 0x03ff) AM_DEVREADWRITE("userio", user_device, userio_r, userio_w)
-// AM_RANGE(0x0400, 0x05ff) AM_DEVREADWRITE("lanio", lan_device, lanio_r, lanio_w)
-// AM_RANGE(0x0600, 0x07ff) AM_DEVREADWRITE("rs232c", rs232c_device, rs232c_r, rs232c_w)
-// AM_RANGE(0x0800, 0x09ff) AM_DEVREADWRITE("fdcx", fdcx_device, fdcx_r, fdcx_w)
-// AM_RANGE(0x0a00, 0x0bff) AM_DEVREADWRITE("userio", user_device, userio_r, userio_w)
-// AM_RANGE(0x0c00, 0x0dff) AM_DEVREADWRITE("fdc", fdc_device, fdc_r, fdc_w)
-// AM_RANGE(0x0e00, 0x0fff) AM_DEVREADWRITE("extram", extram_device, extram_r, extram_w)
+// AM_RANGE(0x0000, 0x03ff) AM_DEVREADWRITE("userio", user_device, userio_r, userio_w)
+// AM_RANGE(0x0400, 0x05ff) AM_DEVREADWRITE("lanio", lan_device, lanio_r, lanio_w)
+// AM_RANGE(0x0600, 0x07ff) AM_DEVREADWRITE("rs232c", rs232c_device, rs232c_r, rs232c_w)
+// AM_RANGE(0x0800, 0x09ff) AM_DEVREADWRITE("fdcx", fdcx_device, fdcx_r, fdcx_w)
+// AM_RANGE(0x0a00, 0x0bff) AM_DEVREADWRITE("userio", user_device, userio_r, userio_w)
+// AM_RANGE(0x0c00, 0x0dff) AM_DEVREADWRITE("fdc", fdc_device, fdc_r, fdc_w)
+// AM_RANGE(0x0e00, 0x0fff) AM_DEVREADWRITE("extram", extram_device, extram_r, extram_w)
AM_RANGE(0x1000, 0x10ff) AM_WRITE(paletb_w)
AM_RANGE(0x1100, 0x11ff) AM_WRITE(paletr_w)
AM_RANGE(0x1200, 0x12ff) AM_WRITE(paletg_w)
@@ -696,48 +695,48 @@ static ADDRESS_MAP_START( spc1500_io , AS_IO, 8, spc1500_state )
AM_RANGE(0x1600, 0x16ff) AM_READWRITE(pcgr_r, pcgr_w)
AM_RANGE(0x1700, 0x17ff) AM_WRITE(pcgg_w)
AM_RANGE(0x1800, 0x18ff) AM_READWRITE(crtc_r, crtc_w)
-// AM_RANGE(0x1800, 0x1800) AM_DEVWRITE("mc6845", mc6845_device, address_w)
-// AM_RANGE(0x1801, 0x1801) AM_DEVREADWRITE("mc6845", mc6845_device, register_r, register_w)
-// AM_RANGE(0x1800, 0x1801) AM_READWRITE(crtc_r, crtc_w)
+// AM_RANGE(0x1800, 0x1800) AM_DEVWRITE("mc6845", mc6845_device, address_w)
+// AM_RANGE(0x1801, 0x1801) AM_DEVREADWRITE("mc6845", mc6845_device, register_r, register_w)
+// AM_RANGE(0x1800, 0x1801) AM_READWRITE(crtc_r, crtc_w)
AM_RANGE(0x1900, 0x1909) AM_READ(keyboard_r)
- AM_RANGE(0x1a00, 0x1a03) AM_DEVREADWRITE("ppi8255", i8255_device, read, write)
+ AM_RANGE(0x1a00, 0x1a03) AM_DEVREADWRITE("ppi8255", i8255_device, read, write)
AM_RANGE(0x1b00, 0x1bff) AM_DEVREADWRITE("ay8910", ay8910_device, data_r, data_w)
AM_RANGE(0x1c00, 0x1cff) AM_DEVWRITE("ay8910", ay8910_device, address_w)
AM_RANGE(0x1d00, 0x1d00) AM_WRITE(romsel)
AM_RANGE(0x1e00, 0x1e00) AM_WRITE(ramsel)
AM_RANGE(0x2000, 0xffff) AM_RAM AM_SHARE("videoram")
ADDRESS_MAP_END
-#endif
+#endif
/* Input ports */
static INPUT_PORTS_START( spc1500 )
- PORT_START("DIP_SWITCH")
- PORT_DIPNAME( 0x01, 0x00, "40/80" )
- PORT_DIPSETTING( 0x00, "40COL" )
- PORT_DIPSETTING( 0x01, "80COL" )
- PORT_DIPNAME( 0x02, 0x02, "Language" )
- PORT_DIPSETTING( 0x02, "Korean" )
- PORT_DIPSETTING( 0x00, "English" )
+ PORT_START("DIP_SWITCH")
+ PORT_DIPNAME( 0x01, 0x00, "40/80" )
+ PORT_DIPSETTING( 0x00, "40COL" )
+ PORT_DIPSETTING( 0x01, "80COL" )
+ PORT_DIPNAME( 0x02, 0x02, "Language" )
+ PORT_DIPSETTING( 0x02, "Korean" )
+ PORT_DIPSETTING( 0x00, "English" )
PORT_DIPNAME( 0x04, 0x00, "V-Res" )
- PORT_DIPSETTING( 0x04, "400" )
+ PORT_DIPSETTING( 0x04, "400" )
PORT_DIPSETTING( 0x00, "200" )
PORT_DIPNAME( 0x08, 0x08, "X1" )
- PORT_DIPSETTING( 0x08, "Compatible Mode" )
+ PORT_DIPSETTING( 0x08, "Compatible Mode" )
PORT_DIPSETTING( 0x00, "Non Compatible" )
-
+
PORT_START("LINE.0")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_RSHIFT) PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_RCONTROL) PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_SHIFT_2)
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Break") PORT_CODE(KEYCODE_PAUSE)
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("\\ |") PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|') PORT_CHAR(0x1c)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Graph") PORT_CODE(KEYCODE_LALT)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("LINE.1")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("= +") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+')
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("= +") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+')
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Return") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
@@ -768,7 +767,7 @@ static INPUT_PORTS_START( spc1500 )
PORT_START("LINE.4")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Del Ins") PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD)) PORT_CHAR(8)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Tab") PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t')
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Home") PORT_CODE(KEYCODE_HOME)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') PORT_CHAR(0x0e)
@@ -777,9 +776,9 @@ static INPUT_PORTS_START( spc1500 )
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("4 $") PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
PORT_START("LINE.5")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F1") PORT_CODE(KEYCODE_F1)
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("M") PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') PORT_CHAR(0x0d)
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') PORT_CHAR(0x07)
@@ -787,7 +786,7 @@ static INPUT_PORTS_START( spc1500 )
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("5 %") PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
PORT_START("LINE.6")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F2") PORT_CODE(KEYCODE_F2)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("[ {") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{') PORT_CHAR(0x1b)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') PORT_CHAR(0x18)
@@ -797,9 +796,9 @@ static INPUT_PORTS_START( spc1500 )
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("6 ^") PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^')
PORT_START("LINE.7")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F3") PORT_CODE(KEYCODE_F3)
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P") PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') PORT_CHAR(0x10)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(". >") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') PORT_CHAR(0x0a)
@@ -807,9 +806,9 @@ static INPUT_PORTS_START( spc1500 )
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("7 &") PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&')
PORT_START("LINE.8")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F4") PORT_CODE(KEYCODE_F4)
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("\' \"") PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('\"')
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("/ ?") PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("K") PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') PORT_CHAR(0x0b)
@@ -817,7 +816,7 @@ static INPUT_PORTS_START( spc1500 )
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("8 *") PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*')
PORT_START("LINE.9")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Hangul") PORT_CODE(KEYCODE_RALT)
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Hangul") PORT_CODE(KEYCODE_RALT)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F5") PORT_CODE(KEYCODE_F5)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("- _") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_')
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("0 )") PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')')
@@ -834,12 +833,12 @@ static INPUT_PORTS_START( spc1500 )
PORT_BIT(0x10, IP_ACTIVE_HIGH,IPT_UNUSED) // DIP SW2 for Korean/English
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
- PORT_BIT(0x80, IP_ACTIVE_HIGH,IPT_UNUSED) // DIP SW3 for 200/400 line
+ PORT_BIT(0x80, IP_ACTIVE_HIGH,IPT_UNUSED) // DIP SW3 for 200/400 line
INPUT_PORTS_END
static ADDRESS_MAP_START(spc1500_mem, AS_PROGRAM, 8, spc1500_state )
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x0000, 0x7fff) AM_READ_BANK("bank1") AM_WRITE_BANK("bank2")
+ AM_RANGE(0x0000, 0x7fff) AM_READ_BANK("bank1") AM_WRITE_BANK("bank2")
AM_RANGE(0x8000, 0xffff) AM_READWRITE_BANK("bank4")
ADDRESS_MAP_END
@@ -848,7 +847,7 @@ void spc1500_state::machine_start()
UINT8 *mem_basic = memregion("basic")->base();
UINT8 *mem_ipl = memregion("ipl")->base();
m_p_ram = m_ram->pointer();
- m_font = memregion("font1")->base();
+ m_font = memregion("font1")->base();
// configure and intialize banks 1 (read banks)
membank("bank1")->configure_entry(0, mem_ipl);
membank("bank1")->configure_entry(1, mem_basic);
@@ -859,7 +858,7 @@ void spc1500_state::machine_start()
set_address_space(AS_IO, m_maincpu->space(AS_IO));
// intialize banks 2, 3, 4 (write banks)
membank("bank2")->set_base(m_p_ram);
- membank("bank4")->set_base(m_p_ram + 0x8000);
+ membank("bank4")->set_base(m_p_ram + 0x8000);
m_timer = timer_alloc(0);
m_timer->adjust(attotime::zero);
}
@@ -867,7 +866,7 @@ void spc1500_state::machine_start()
void spc1500_state::machine_reset()
{
m_motor = false;
- m_time = machine().scheduler().time();
+ m_time = machine().scheduler().time();
m_double_mode = false;
memset(&m_paltbl[0], 1, 8);
m_char_count = 0;
@@ -904,30 +903,30 @@ static MACHINE_CONFIG_START( spc1500, spc1500_state )
MCFG_CPU_PERIODIC_INT_DRIVER(spc1500_state, irq0_line_hold, 60)
/* video hardware */
-
+
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_SIZE(640, 400)
MCFG_SCREEN_VISIBLE_AREA(0,640-1,0,400-1)
MCFG_SCREEN_UPDATE_DEVICE("mc6845", mc6845_device, screen_update )
- MCFG_PALETTE_ADD("palette", 8)
+ MCFG_PALETTE_ADD("palette", 8)
MCFG_PALETTE_INIT_OWNER(spc1500_state, spc)
MCFG_MC6845_ADD("mc6845", MC6845, "screen", (VDP_CLOCK/48)) //unknown divider
MCFG_MC6845_SHOW_BORDER_AREA(false)
MCFG_MC6845_CHAR_WIDTH(8)
MCFG_MC6845_UPDATE_ROW_CB(spc1500_state, crtc_update_row)
MCFG_MC6845_RECONFIGURE_CB(spc1500_state, crtc_reconfig)
- MCFG_VIDEO_START_OVERRIDE(spc1500_state, spc)
-
+ MCFG_VIDEO_START_OVERRIDE(spc1500_state, spc)
+
MCFG_DEVICE_ADD("ppi8255", I8255, 0)
MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("cent_data_out", output_latch_device, write))
MCFG_I8255_IN_PORTB_CB(READ8(spc1500_state, portb_r))
MCFG_I8255_OUT_PORTB_CB(WRITE8(spc1500_state, portb_w))
MCFG_I8255_OUT_PORTC_CB(WRITE8(spc1500_state, portc_w))
-
+
MCFG_TIMER_DRIVER_ADD_PERIODIC("1hz", spc1500_state, timer, attotime::from_hz(1))
-
+
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ay8910", AY8910, XTAL_4MHz / 2)
@@ -959,12 +958,12 @@ ROM_START( spc1500 )
ROM_LOAD("ipl.rom", 0x0000, 0x8000, CRC(80d0704a) SHA1(01e4cbe8baad72effbbe01addd477c5b0ec85c16))
ROM_REGION(0x8000, "basic", ROMREGION_ERASEFF)
ROM_LOAD("basic.rom", 0x0000, 0x8000, CRC(f48328e1) SHA1(fb874ea7d20078726682f2d0e03ea0d1f8bdbb07))
- ROM_REGION(0x8000, "font1", 0)
+ ROM_REGION(0x8000, "font1", 0)
ROM_LOAD( "ss150fnt.bin", 0x0000, 0x2000, CRC(affdc5c0) SHA1(2a93582fcccf9e40b99ae238ce585d189afe9a5a) )
ROM_LOAD( "ss151fnt.bin", 0x2000, 0x2000, CRC(83c2eb8d) SHA1(2adf7816206dc74b9f0d32cb3b56cbab31fa6044) )
ROM_LOAD( "ss152fnt.bin", 0x4000, 0x2000, CRC(f4a5a590) SHA1(c9a02756107083bf602ae7c90cfe29b8b964e0df) )
ROM_LOAD( "ss153fnt.bin", 0x6000, 0x2000, CRC(8677d5fa) SHA1(34bfacc855c3846744cd586c150c72e5cbe948b0) )
-
+
ROM_END