summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2021-01-15 16:40:33 +0100
committer hap <happppp@users.noreply.github.com>2021-01-15 16:40:50 +0100
commitd7f524ac8ffbc7cd77c30c3850a6b3a99e89d6e8 (patch)
treec002b1beabbade476632914247fde86d4bd52609
parent968c7cfe05882898d8c21383c053cc3629a5fa51 (diff)
ef9340_1: add pinout reference
-rw-r--r--src/devices/video/ef9340_1.cpp121
-rw-r--r--src/devices/video/ef9340_1.h30
-rw-r--r--src/devices/video/i8244.h2
3 files changed, 90 insertions, 63 deletions
diff --git a/src/devices/video/ef9340_1.cpp b/src/devices/video/ef9340_1.cpp
index f58106fb5c4..45d88f88c12 100644
--- a/src/devices/video/ef9340_1.cpp
+++ b/src/devices/video/ef9340_1.cpp
@@ -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;
}
diff --git a/src/devices/video/ef9340_1.h b/src/devices/video/ef9340_1.h
index 2d9a6671d27..6aceef46708 100644
--- a/src/devices/video/ef9340_1.h
+++ b/src/devices/video/ef9340_1.h
@@ -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;
diff --git a/src/devices/video/i8244.h b/src/devices/video/i8244.h
index 6cda461c47b..d14024b2ba0 100644
--- a/src/devices/video/i8244.h
+++ b/src/devices/video/i8244.h
@@ -36,8 +36,6 @@
*/
-// ======================> i8244_device
-
class i8244_device : public device_t
, public device_sound_interface
, public device_video_interface