1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
/***************************************************************************
SAPI-1 driver by Miodrag Milanovic
09/09/2008 Preliminary driver.
****************************************************************************/
#include "includes/sapi1.h"
static const UINT8 MHB2501[] = {
0x0c,0x11,0x13,0x15,0x17,0x10,0x0e,0x00, // @
0x04,0x0a,0x11,0x11,0x1f,0x11,0x11,0x00, // A
0x1e,0x11,0x11,0x1e,0x11,0x11,0x1e,0x00, // B
0x0e,0x11,0x10,0x10,0x10,0x11,0x0e,0x00, // C
0x1e,0x09,0x09,0x09,0x09,0x09,0x1e,0x00, // D
0x1f,0x10,0x10,0x1e,0x10,0x10,0x1f,0x00, // E
0x1f,0x10,0x10,0x1e,0x10,0x10,0x10,0x00, // F
0x0e,0x11,0x10,0x10,0x13,0x11,0x0f,0x00, // G
0x11,0x11,0x11,0x1f,0x11,0x11,0x11,0x00, // H
0x0e,0x04,0x04,0x04,0x04,0x04,0x0e,0x00, // I
0x01,0x01,0x01,0x01,0x11,0x11,0x0e,0x00, // J
0x11,0x12,0x14,0x18,0x14,0x12,0x11,0x00, // K
0x10,0x10,0x10,0x10,0x10,0x10,0x1f,0x00, // L
0x11,0x1b,0x15,0x15,0x11,0x11,0x11,0x00, // M
0x11,0x11,0x19,0x15,0x13,0x11,0x11,0x00, // N
0x0e,0x11,0x11,0x11,0x11,0x11,0x0e,0x00, // O
0x1e,0x11,0x11,0x1e,0x10,0x10,0x10,0x00, // P
0x0e,0x11,0x11,0x11,0x15,0x12,0x0d,0x00, // Q
0x1e,0x11,0x11,0x1e,0x14,0x12,0x11,0x00, // R
0x0e,0x11,0x10,0x0e,0x01,0x11,0x0e,0x00, // S
0x1f,0x04,0x04,0x04,0x04,0x04,0x04,0x00, // T
0x11,0x11,0x11,0x11,0x11,0x11,0x0e,0x00, // U
0x11,0x11,0x11,0x0a,0x0a,0x04,0x04,0x00, // V
0x11,0x11,0x11,0x15,0x15,0x15,0x0a,0x00, // W
0x11,0x11,0x0a,0x04,0x0a,0x11,0x11,0x00, // X
0x11,0x11,0x0a,0x04,0x04,0x04,0x04,0x00, // Y
0x1f,0x01,0x02,0x04,0x08,0x10,0x1f,0x00, // Z
0x1c,0x10,0x10,0x10,0x10,0x10,0x1c,0x00, // [
0x00,0x10,0x08,0x04,0x02,0x01,0x00,0x00, // backslash
0x07,0x01,0x01,0x01,0x01,0x01,0x07,0x00, // ]
0x0e,0x11,0x00,0x00,0x00,0x00,0x00,0x00, // ^
0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x00, // _
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //
0x04,0x04,0x04,0x04,0x04,0x00,0x04,0x00, // !
0x0a,0x0a,0x0a,0x00,0x00,0x00,0x00,0x00, // "
0x0a,0x0a,0x1f,0x0a,0x1f,0x0a,0x0a,0x00, // #
0x00,0x11,0x0e,0x0a,0x0e,0x11,0x00,0x00, //
0x18,0x19,0x02,0x04,0x08,0x13,0x03,0x00, // %
0x04,0x0a,0x0a,0x0c,0x15,0x12,0x0d,0x00, // &
0x04,0x04,0x08,0x00,0x00,0x00,0x00,0x00, // '
0x02,0x04,0x08,0x08,0x08,0x04,0x02,0x00, // (
0x08,0x04,0x02,0x02,0x02,0x04,0x08,0x00, // )
0x00,0x04,0x15,0x0e,0x15,0x04,0x00,0x00, // *
0x00,0x04,0x04,0x1f,0x04,0x04,0x00,0x00, // +
0x00,0x00,0x00,0x00,0x08,0x08,0x10,0x00, // ,
0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x00, // -
0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00, // .
0x00,0x01,0x02,0x04,0x08,0x10,0x00,0x00, // /
0x0e,0x11,0x13,0x15,0x19,0x11,0x0e,0x00, // 0
0x04,0x0c,0x04,0x04,0x04,0x04,0x0e,0x00, // 1
0x0e,0x11,0x01,0x06,0x08,0x10,0x1f,0x00, // 2
0x1f,0x01,0x02,0x06,0x01,0x11,0x0e,0x00, // 3
0x02,0x06,0x0a,0x12,0x1f,0x02,0x02,0x00, // 4
0x1f,0x10,0x1e,0x01,0x01,0x11,0x0e,0x00, // 5
0x07,0x08,0x10,0x1e,0x11,0x11,0x0e,0x00, // 6
0x1f,0x01,0x02,0x04,0x08,0x08,0x08,0x00, // 7
0x0e,0x11,0x11,0x0e,0x11,0x11,0x0e,0x00, // 8
0x0e,0x11,0x11,0x0f,0x01,0x02,0x1c,0x00, // 9
0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00, // :
0x00,0x00,0x04,0x00,0x04,0x04,0x08,0x00, // ;
0x02,0x04,0x08,0x10,0x08,0x04,0x02,0x00, // <
0x00,0x00,0x1f,0x00,0x1f,0x00,0x00,0x00, // =
0x08,0x04,0x02,0x01,0x02,0x04,0x08,0x00, // >
0x0e,0x11,0x01,0x02,0x04,0x00,0x04,0x00 // ?
};
VIDEO_START_MEMBER(sapi1_state,sapi1)
{
m_refresh_counter = 0;
}
UINT32 sapi1_state::screen_update_sapi1(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
int x,y,j,b;
UINT16 addr;
int xpos;
for(y = 0; y < 24; y++ )
{
addr = y*64;
xpos = 0;
for(x = 0; x < 40; x++ )
{
UINT8 code = m_sapi_video_ram[addr + x];
UINT8 attr = (code >> 6) & 3;
code &= 0x3f;
for(j = 0; j < 9; j++ )
{
for(b = 0; b < 6; b++ )
{
UINT8 val;
if (j==8) {
if (attr==2) {
val = (m_refresh_counter & 0x20) ? 1 : 0;
} else {
val = 0;
}
} else {
val = (MHB2501[code*8 + j] >> (5-b)) & 1;
if (attr==1) {
val = (m_refresh_counter & 0x20) ? val : 0;
}
}
if(attr==3) {
bitmap.pix16(y*9+j, xpos+2*b ) = val;
bitmap.pix16(y*9+j, xpos+2*b+1 ) = val;
} else {
bitmap.pix16(y*9+j, xpos+b ) = val;
}
}
}
xpos+= (attr==3) ? 12 : 6;
if (xpos>=6*40) break;
}
}
m_refresh_counter++;
return 0;
}
VIDEO_START_MEMBER(sapi1_state,sapizps3)
{
}
UINT32 sapi1_state::screen_update_sapizps3(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
return 0;
}
|