mirror of
https://github.com/holub/mame
synced 2025-07-07 02:50:50 +03:00
ef9340_1: add pinout reference
This commit is contained in:
parent
968c7cfe05
commit
d7f524ac8f
@ -6,7 +6,7 @@ Thomson EF9340 + EF9341 teletext graphics, this device is a combination of chips
|
||||
|
||||
Minimal components:
|
||||
- Thomson EF9340 "VIN"
|
||||
- Thomson EF9341 "GEN"
|
||||
- Thomson EF9341 "GEN" (CPU connects to this one)
|
||||
- 2*1KB RAM, A for attributes, B for character codes
|
||||
|
||||
There's also an optional extended character memory, it can be RAM or ROM.
|
||||
@ -18,6 +18,7 @@ TODO:
|
||||
- internal display timing (on g7400, most of it is done externally)
|
||||
- window boxing
|
||||
- Y zoom
|
||||
- RES(restart) pin
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
@ -61,7 +62,7 @@ void ef9340_1_device::device_start()
|
||||
m_write_exram.resolve_safe();
|
||||
m_read_exram.resolve_safe(0xff);
|
||||
|
||||
// Let the screen create our temporary bitmap with the screen's dimensions
|
||||
// let the screen create our temporary bitmap with the screen's dimensions
|
||||
screen().register_screen_bitmap(m_tmp_bitmap);
|
||||
|
||||
m_line_timer = timer_alloc(TIMER_LINE);
|
||||
@ -169,30 +170,30 @@ void ef9340_1_device::ef9341_write(u8 command, u8 b, u8 data)
|
||||
m_ef9341.busy = true;
|
||||
switch (m_ef9341.TB & 0xe0)
|
||||
{
|
||||
case 0x00: /* Begin row */
|
||||
m_ef9340.X = 0;
|
||||
m_ef9340.Y = m_ef9341.TA & 0x1f;
|
||||
break;
|
||||
case 0x20: /* Load Y */
|
||||
m_ef9340.Y = m_ef9341.TA & 0x1f;
|
||||
break;
|
||||
case 0x40: /* Load X */
|
||||
m_ef9340.X = m_ef9341.TA & 0x3f;
|
||||
break;
|
||||
case 0x60: /* INC C */
|
||||
ef9340_inc_c();
|
||||
break;
|
||||
case 0x80: /* Load M */
|
||||
m_ef9340.M = m_ef9341.TA;
|
||||
break;
|
||||
case 0xa0: /* Load R */
|
||||
m_ef9340.R = m_ef9341.TA;
|
||||
break;
|
||||
case 0xc0: /* Load Y0 */
|
||||
m_ef9340.Y0 = m_ef9341.TA & 0x3f;
|
||||
break;
|
||||
case 0xe0: /* Not interpreted */
|
||||
break;
|
||||
case 0x00: // begin row
|
||||
m_ef9340.X = 0;
|
||||
m_ef9340.Y = m_ef9341.TA & 0x1f;
|
||||
break;
|
||||
case 0x20: // load Y
|
||||
m_ef9340.Y = m_ef9341.TA & 0x1f;
|
||||
break;
|
||||
case 0x40: // load X
|
||||
m_ef9340.X = m_ef9341.TA & 0x3f;
|
||||
break;
|
||||
case 0x60: // increment C
|
||||
ef9340_inc_c();
|
||||
break;
|
||||
case 0x80: // load M
|
||||
m_ef9340.M = m_ef9341.TA;
|
||||
break;
|
||||
case 0xa0: // load R
|
||||
m_ef9340.R = m_ef9341.TA;
|
||||
break;
|
||||
case 0xc0: // load Y0
|
||||
m_ef9340.Y0 = m_ef9341.TA & 0x3f;
|
||||
break;
|
||||
case 0xe0: // not interpreted
|
||||
break;
|
||||
}
|
||||
m_ef9341.busy = false;
|
||||
}
|
||||
@ -211,32 +212,32 @@ void ef9340_1_device::ef9341_write(u8 command, u8 b, u8 data)
|
||||
m_ef9341.busy = true;
|
||||
switch (m_ef9340.M & 0xe0)
|
||||
{
|
||||
case 0x00: /* Write */
|
||||
case 0x00: // write
|
||||
m_ram_a[addr] = m_ef9341.TA;
|
||||
m_ram_b[addr] = m_ef9341.TB;
|
||||
ef9340_inc_c();
|
||||
break;
|
||||
|
||||
case 0x40: /* Write without increment */
|
||||
case 0x40: // write without increment
|
||||
m_ram_a[addr] = m_ef9341.TA;
|
||||
m_ram_b[addr] = m_ef9341.TB;
|
||||
break;
|
||||
|
||||
case 0x80: /* Write slice */
|
||||
{
|
||||
u8 a = m_ram_a[addr];
|
||||
u8 b = m_ram_b[addr];
|
||||
u8 slice = m_ef9340.M & 0x0f;
|
||||
case 0x80: // write slice
|
||||
{
|
||||
u8 a = m_ram_a[addr];
|
||||
u8 b = m_ram_b[addr];
|
||||
u8 slice = m_ef9340.M & 0x0f;
|
||||
|
||||
if (b >= 0xa0)
|
||||
m_write_exram(a << 12 | b << 4 | slice, m_ef9341.TA);
|
||||
if (b >= 0xa0)
|
||||
m_write_exram(a << 12 | b << 4 | slice, m_ef9341.TA);
|
||||
|
||||
// Increment slice number
|
||||
m_ef9340.M = (m_ef9340.M & 0xf0) | ((slice + 1) % 10);
|
||||
}
|
||||
// increment slice number
|
||||
m_ef9340.M = (m_ef9340.M & 0xf0) | ((slice + 1) % 10);
|
||||
break;
|
||||
}
|
||||
|
||||
default: /* Illegal or Read command */
|
||||
default: // illegal or read command
|
||||
break;
|
||||
}
|
||||
m_ef9341.busy = false;
|
||||
@ -276,37 +277,37 @@ u8 ef9340_1_device::ef9341_read(u8 command, u8 b)
|
||||
m_ef9341.busy = true;
|
||||
switch (m_ef9340.M & 0xe0)
|
||||
{
|
||||
case 0x20: /* Read */
|
||||
case 0x20: // read
|
||||
m_ef9341.TA = m_ram_a[addr];
|
||||
m_ef9341.TB = m_ram_b[addr];
|
||||
ef9340_inc_c();
|
||||
break;
|
||||
|
||||
case 0x60: /* Read without increment */
|
||||
case 0x60: // read without increment
|
||||
m_ef9341.TA = m_ram_a[addr];
|
||||
m_ef9341.TB = m_ram_b[addr];
|
||||
break;
|
||||
|
||||
case 0xa0: /* Read slice */
|
||||
{
|
||||
u8 a = m_ram_a[addr];
|
||||
u8 b = m_ram_b[addr];
|
||||
u8 slice = m_ef9340.M & 0x0f;
|
||||
case 0xa0: // read slice
|
||||
{
|
||||
u8 a = m_ram_a[addr];
|
||||
u8 b = m_ram_b[addr];
|
||||
u8 slice = m_ef9340.M & 0x0f;
|
||||
|
||||
m_ef9341.TA = 0xff;
|
||||
m_ef9341.TB = 0xff;
|
||||
m_ef9341.TA = 0xff;
|
||||
m_ef9341.TB = 0xff;
|
||||
|
||||
if (b >= 0xa0)
|
||||
m_ef9341.TA = m_read_exram(a << 12 | b << 4 | slice);
|
||||
else if (b < 0x80 && slice < 10)
|
||||
m_ef9341.TA = m_charset[(((a & 0x80) | (b & 0x7f)) * 10) + slice];
|
||||
if (b >= 0xa0)
|
||||
m_ef9341.TA = m_read_exram(a << 12 | b << 4 | slice);
|
||||
else if (b < 0x80 && slice < 10)
|
||||
m_ef9341.TA = m_charset[(((a & 0x80) | (b & 0x7f)) * 10) + slice];
|
||||
|
||||
// Increment slice number
|
||||
m_ef9340.M = (m_ef9340.M & 0xf0) | ((slice + 1) % 10);
|
||||
}
|
||||
// increment slice number
|
||||
m_ef9340.M = (m_ef9340.M & 0xf0) | ((slice + 1) % 10);
|
||||
break;
|
||||
}
|
||||
|
||||
default: /* Illegal or Write command */
|
||||
default: // illegal or write command
|
||||
break;
|
||||
}
|
||||
m_ef9341.busy = false;
|
||||
@ -346,15 +347,15 @@ void ef9340_1_device::ef9340_scanline(int vpos)
|
||||
|
||||
if (vpos < 10)
|
||||
{
|
||||
// Service row
|
||||
// service row
|
||||
if (m_ef9340.R & 0x08)
|
||||
{
|
||||
// Service row is enabled
|
||||
// service row is enabled
|
||||
y_row = 31;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Service row is disabled
|
||||
// service row is disabled
|
||||
for (int i = 0; i < 40 * 8; i++)
|
||||
m_tmp_bitmap.pix(m_offset_y + vpos, m_offset_x + i) = 8;
|
||||
return;
|
||||
@ -362,7 +363,7 @@ void ef9340_1_device::ef9340_scanline(int vpos)
|
||||
}
|
||||
else
|
||||
{
|
||||
// Displaying regular row
|
||||
// displaying regular row
|
||||
y_row = ((m_ef9340.Y0 & 0x1f) + (vpos - 10) / 10) % 24;
|
||||
}
|
||||
|
||||
|
@ -12,6 +12,34 @@
|
||||
#pragma once
|
||||
|
||||
|
||||
// pinout reference
|
||||
|
||||
/*
|
||||
______ ______ ______ ______
|
||||
Vss 1 |* \_/ | 40 A4 10*address Vss 1 |* \_/ | 40 A7
|
||||
A5 2 | | 39 A3 ------------> ADR0 2 | | 39 A6
|
||||
A6 3 | | 38 A2 | ADR1 3 | | 38 A5
|
||||
Vss 4 | | 37 A1 | ADR2 4 | | 37 A4
|
||||
CLK 5 | | 36 A0 v ADR3 5 | | 36 A3
|
||||
_VE 6 | | 35 ADR0 ___________ R/_WI 6 | | 35 A2
|
||||
C/_T 7 | | 34 ADR1 | | _SG 7 | | 34 A1
|
||||
B 8 | | 33 ADR2 | | _SM 8 | | 33 A0
|
||||
G 9 | | 32 ADR3 | | B7 9 | | 32 D0
|
||||
R 10 | EF9340 | 31 ADR4 | 2*1KB RAM | B6 10 | EF9341 | 31 D1
|
||||
I 11 | (VIN) | 30 ADR5 | | B5 11 | (GEN) | 30 D2
|
||||
_SM 12 | | 29 ADR6 | | B4 12 | | 29 D3
|
||||
_SG 13 | | 28 ADR7 | | B3 13 | | 28 D4
|
||||
_ST 14 | | 27 ADR8 |___________| B2 14 | | 27 D5
|
||||
R/_WI 15 | | 26 ADR9 B1 15 | | 26 D6
|
||||
TT 16 | | 25 TL ^ B0 16 | | 25 D7
|
||||
SYT 17 | | 24 TEST | _ST 17 | | 24 C/_T
|
||||
B7 18 | | 23 _RES v _VE 18 | | 23 R/_W
|
||||
B6 19 | | 22 A7 <-----------> _CS 19 | | 22 B/_A
|
||||
B5 20 |_______________| 21 Vcc 16*data E 20 |_______________| 21 Vcc
|
||||
|
||||
*/
|
||||
|
||||
|
||||
class ef9340_1_device : public device_t,
|
||||
public device_video_interface
|
||||
{
|
||||
@ -48,7 +76,7 @@ protected:
|
||||
|
||||
void ef9340_scanline(int vpos);
|
||||
|
||||
/* timers */
|
||||
// timers
|
||||
static constexpr device_timer_id TIMER_LINE = 0;
|
||||
static constexpr device_timer_id TIMER_BLINK = 1;
|
||||
|
||||
|
@ -36,8 +36,6 @@
|
||||
*/
|
||||
|
||||
|
||||
// ======================> i8244_device
|
||||
|
||||
class i8244_device : public device_t
|
||||
, public device_sound_interface
|
||||
, public device_video_interface
|
||||
|
Loading…
Reference in New Issue
Block a user