mirror of
https://github.com/holub/mame
synced 2025-06-06 21:03:47 +03:00
This is phase 2 of the DMD changes, creating a new '5 dot' element to make it more like the actual DM01 (which uses 5 by 7 blocks, but wires them up row wise to a buffer, giving an unusual '65 dot row') [James Wallace].
This commit is contained in:
parent
7561d4ddcd
commit
928a8a4586
@ -482,6 +482,8 @@ layout_element::layout_element(running_machine &machine, xml_data_node &elemnode
|
||||
m_maxstate = 262143;
|
||||
if (newcomp.m_type == component::CTYPE_DOTMATRIX)
|
||||
m_maxstate = 255;
|
||||
if (newcomp.m_type == component::CTYPE_DOTMATRIX5DOT)
|
||||
m_maxstate = 31;
|
||||
if (newcomp.m_type == component::CTYPE_SIMPLECOUNTER)
|
||||
{
|
||||
m_maxstate = xml_get_attribute_int_with_subst(machine, *compnode, "maxstate", 999);
|
||||
@ -644,8 +646,13 @@ layout_element::component::component(running_machine &machine, xml_data_node &co
|
||||
|
||||
// dotmatrix nodes
|
||||
else if (strcmp(compnode.name, "dotmatrix") == 0)
|
||||
{
|
||||
m_type = CTYPE_DOTMATRIX;
|
||||
|
||||
}
|
||||
else if (strcmp(compnode.name, "dotmatrix5dot") == 0)
|
||||
{
|
||||
m_type = CTYPE_DOTMATRIX5DOT;
|
||||
}
|
||||
// simplecounter nodes
|
||||
else if (strcmp(compnode.name, "simplecounter") == 0)
|
||||
{
|
||||
@ -798,7 +805,11 @@ void layout_element::component::draw(running_machine &machine, bitmap_argb32 &de
|
||||
break;
|
||||
|
||||
case CTYPE_DOTMATRIX:
|
||||
draw_dotmatrix(dest, bounds, state);
|
||||
draw_dotmatrix(8, dest, bounds, state);
|
||||
break;
|
||||
|
||||
case CTYPE_DOTMATRIX5DOT:
|
||||
draw_dotmatrix(5, dest, bounds, state);
|
||||
break;
|
||||
|
||||
case CTYPE_SIMPLECOUNTER:
|
||||
@ -1720,25 +1731,24 @@ void layout_element::component::draw_led16segsc(bitmap_argb32 &dest, const recta
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// draw_dotmatrix - draw a row of 8 dots for a
|
||||
// draw_dotmatrix - draw a row of dots for a
|
||||
// dotmatrix
|
||||
//-------------------------------------------------
|
||||
|
||||
void layout_element::component::draw_dotmatrix(bitmap_argb32 &dest, const rectangle &bounds, int pattern)
|
||||
void layout_element::component::draw_dotmatrix(int dots, bitmap_argb32 &dest, const rectangle &bounds, int pattern)
|
||||
{
|
||||
const rgb_t onpen = MAKE_ARGB(0xff, 0xff, 0xff, 0xff);
|
||||
const rgb_t offpen = MAKE_ARGB(0xff, 0x20, 0x20, 0x20);
|
||||
|
||||
// sizes for computation
|
||||
int bmwidth = 2000;
|
||||
int bmheight = 300;
|
||||
int dotwidth = 250;
|
||||
|
||||
// allocate a temporary bitmap for drawing
|
||||
bitmap_argb32 tempbitmap(bmwidth, bmheight);
|
||||
bitmap_argb32 tempbitmap(dotwidth*dots, bmheight);
|
||||
tempbitmap.fill(MAKE_ARGB(0xff, 0x00, 0x00, 0x00));
|
||||
|
||||
for (int i = 0; i < 8; i++)
|
||||
for (int i = 0; i < dots; i++)
|
||||
draw_segment_decimal(tempbitmap, ((dotwidth/2 )+ (i * dotwidth)), bmheight/2, dotwidth, (pattern & (1 << i))?onpen:offpen);
|
||||
|
||||
// resample to the target size
|
||||
@ -1814,7 +1824,7 @@ void layout_element::component::draw_segment_vertical(bitmap_argb32 &dest, int m
|
||||
|
||||
//-------------------------------------------------
|
||||
// draw_segment_diagonal_1 - draw a diagonal
|
||||
// LED segment that looks like this: /
|
||||
// LED segment that looks like a backslash
|
||||
//-------------------------------------------------
|
||||
|
||||
void layout_element::component::draw_segment_diagonal_1(bitmap_argb32 &dest, int minx, int maxx, int miny, int maxy, int width, rgb_t color)
|
||||
@ -1839,7 +1849,7 @@ void layout_element::component::draw_segment_diagonal_1(bitmap_argb32 &dest, int
|
||||
|
||||
//-------------------------------------------------
|
||||
// draw_segment_diagonal_2 - draw a diagonal
|
||||
// LED segment that looks like this:
|
||||
// LED segment that looks like a forward slash
|
||||
//-------------------------------------------------
|
||||
|
||||
void layout_element::component::draw_segment_diagonal_2(bitmap_argb32 &dest, int minx, int maxx, int miny, int maxy, int width, rgb_t color)
|
||||
|
@ -121,6 +121,7 @@ private:
|
||||
CTYPE_LED14SEGSC,
|
||||
CTYPE_LED16SEGSC,
|
||||
CTYPE_DOTMATRIX,
|
||||
CTYPE_DOTMATRIX5DOT,
|
||||
CTYPE_SIMPLECOUNTER,
|
||||
CTYPE_REEL,
|
||||
CTYPE_MAX
|
||||
@ -139,7 +140,7 @@ private:
|
||||
void draw_led14segsc(bitmap_argb32 &dest, const rectangle &bounds, int pattern);
|
||||
void draw_led16seg(bitmap_argb32 &dest, const rectangle &bounds, int pattern);
|
||||
void draw_led16segsc(bitmap_argb32 &dest, const rectangle &bounds, int pattern);
|
||||
void draw_dotmatrix(bitmap_argb32 &dest, const rectangle &bounds, int pattern);
|
||||
void draw_dotmatrix(int dots,bitmap_argb32 &dest, const rectangle &bounds, int pattern);
|
||||
void draw_segment_horizontal_caps(bitmap_argb32 &dest, int minx, int maxx, int midy, int width, int caps, rgb_t color);
|
||||
void draw_segment_horizontal(bitmap_argb32 &dest, int minx, int maxx, int midy, int width, rgb_t color);
|
||||
void draw_segment_vertical_caps(bitmap_argb32 &dest, int miny, int maxy, int midx, int width, int caps, rgb_t color);
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -59,11 +59,12 @@ typedef struct _dm01
|
||||
{
|
||||
const bfmdm01_interface *intf;
|
||||
int data_avail,
|
||||
control, /* motor phase */
|
||||
control,
|
||||
xcounter,
|
||||
busy;
|
||||
|
||||
UINT8 scanline[DM_BYTESPERROW],
|
||||
segbuffer[72],
|
||||
comdata;
|
||||
|
||||
} bfmdm01;
|
||||
@ -148,8 +149,8 @@ static WRITE8_HANDLER( mux_w )
|
||||
dm01.scanline[8] &= 0x80;//filter all other bits
|
||||
if ( (row >= 0) && (row < DM_MAXLINES) )
|
||||
{
|
||||
int p,dots;
|
||||
|
||||
int p,pos,dots;
|
||||
pos =0;
|
||||
p = 0;
|
||||
dots = 0;
|
||||
|
||||
@ -157,25 +158,36 @@ static WRITE8_HANDLER( mux_w )
|
||||
{
|
||||
|
||||
UINT8 d = dm01.scanline[p];
|
||||
if (d & 0x80) dots |= 0x01;
|
||||
else dots &=~0x01;
|
||||
if (d & 0x40) dots |= 0x02;
|
||||
else dots &=~0x02;
|
||||
if (d & 0x20) dots |= 0x04;
|
||||
else dots &=~0x04;
|
||||
if (d & 0x10) dots |= 0x08;
|
||||
else dots &=~0x08;
|
||||
if (d & 0x08) dots |= 0x10;
|
||||
else dots &=~0x10;
|
||||
if (d & 0x04) dots |= 0x20;
|
||||
else dots &=~0x20;
|
||||
if (d & 0x02) dots |= 0x40;
|
||||
else dots &=~0x40;
|
||||
if (d & 0x01) dots |= 0x80;
|
||||
else dots &=~0x80;
|
||||
output_set_indexed_value("dotmatrix", p +(9*row), dots);
|
||||
|
||||
for (int bitpos=0; bitpos <8; bitpos++)
|
||||
{
|
||||
if (d & 1<<(7-bitpos)) dm01.segbuffer[(p*8)+bitpos]=1;
|
||||
else dm01.segbuffer[(p*8)+bitpos]=0;
|
||||
}
|
||||
|
||||
p++;
|
||||
}
|
||||
|
||||
while ( pos < 13 )
|
||||
{
|
||||
int element =0;
|
||||
for (int dotpos=0; dotpos <5; dotpos++)
|
||||
{
|
||||
if (dm01.segbuffer[(pos*5)+dotpos])
|
||||
{
|
||||
element |= (1<<(dotpos));
|
||||
}
|
||||
else
|
||||
{
|
||||
element &= ~(1<<(dotpos));
|
||||
}
|
||||
|
||||
}
|
||||
output_set_indexed_value("dotmatrix", pos +(13*row), element);
|
||||
pos++;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user