Almost lost technologies

ここは昔の CPU を用いた工作記事を書くために用意しました。

TMS9900 CPUボード、関連システム (その4)

次にメモリタイミングですが、要求タイミングとしてはメモリアクセスに 3cy で、うちほとんど 2cy 分がメモリアクセスに当てられるので、かなりゆるゆるです。

 

f:id:efialtes_htn:20190720114231p:plain

TMS9900 memory timing(@3MHz)


但し、TMS9900 のデータシートでは typ ディレイのみ規定、Max 不明なので多少色を付ける必要はありますが、450nS のアクセス時間のメモリで何の問題もなく、今回はこれよりはるかに速いので、あまり考える必要はありません。

CPUボード側の SPLD、ALTMEM側の SPLD とも CUPL で書いてあって、以下にソースを示します。

Name DEC9900;
Partno KF007010;
Date 19/01/04;
Revision 02;
Designer Alp;
Company Alp Design;
Assembly System 18-1-9900 IO decorder;
Location U06;
Device G16V8;

/* *************************************************************** */
/* System 1Q IO decorder Glue logic */
/* */
/* *************************************************************** */
/* target device GAL18V8 any speed rank is OK */
/* *************************************************************** */

/** inputs **/
Pin 1 = IA12;
Pin 2 = IA11;
Pin 3 = IA10;
Pin 4 = IA9;
Pin 5 = IA8;
Pin 6 = IA7;
Pin 7 = IA6;
Pin 8 = !WE;
Pin 9 = DBIN;
Pin 11 = !MEMEN;

/** outputs **/
Pin 14 = !PAREN;
Pin 15 = !SEREN;
Pin 16 = !WR;
Pin 17 = !RD;
Pin 12 = !IA0EN;
Pin 13 = !IA1EN;
Pin 18 = !IA2EN;
Pin 19 = !IA3EN;
/* logic equations */
PAREN = (!IA12 & !IA11 & !IA10 & !IA9 & !IA8 & !IA7 & IA6 & !MEMEN);
SEREN = (!IA12 & !IA11 & !IA10 & !IA9 & !IA8 & !IA7 & !IA6 & !MEMEN);
WR = (WE & MEMEN);
RD = (DBIN & MEMEN);
IA0EN = (!IA12 & !IA11 & !IA10 & !IA9 & !IA8 & IA7 & !IA6 & !MEMEN);
IA1EN = (!IA12 & !IA11 & !IA10 & !IA9 & !IA8 & IA7 & IA6 & !MEMEN);
IA2EN = (!IA12 & !IA11 & !IA10 & !IA9 & IA8 & !IA7 & !IA6 & !MEMEN);
IA3EN = (!IA12 & !IA11 & !IA10 & !IA9 & IA8 & !IA7 & IA6 & !MEMEN);

WR.oe = 'b'1;
RD.oe = 'b'1;
SEREN.oe = 'b'1;
PAREN.oe = 'b'1;
IA0EN.oe = 'b'1;
IA1EN.oe = 'b'1;
IA2EN.oe = 'b'1;
IA3EN.oe = 'b'1;

 

 

Name MEMALTDEC;
Partno KF019002;
Date 2019/05/19;
Revision 02;
Designer ALP;
Company ALP. Design;
Assembly MEMALTDEC;
Location U04;
Device G16V8;

/* *************************************************************** */
/* System 18 Alternate Memory decoder */
/* */
/* *************************************************************** */
/* target device PAL14L4/GAL 16V8-25 */
/* *************************************************************** */
/* *************************************************************** */

/** inputs **/
Pin 1 = A14;
Pin 2 = A15;
Pin 3 = A16;
Pin 4 = A17;
Pin 5 = A18;
Pin 6 = A19;
Pin 7 = A20;
Pin 8 = A21;
Pin 9 = A22;
Pin 11 = A23;
Pin 12 = !MEMDSBL;
Pin 13 = !ME;
Pin 18 = !RD;
Pin 19 = !WR;
/** outputs **/
Pin 14 = !RAM;
Pin 15 = !ROM;
Pin 16 = !IOE;
Pin 17 = !IWE;

/* logic equations */
ALTSEL = !MEMDSBL & ME & !A23 & !A22 & !A21 & !A20 & !A19 & !A18 & !A17;
ROM = ALTSEL & *1;
RAM = ALTSEL & *2;
IOE = ALTSEL & RD;
IWE = ALTSEL & WR;

 ALTMEM の方は今の TMS9900 だとこれでいいんですが、他 CPU都合でバイトアクセス可能なように直すかも知れません。

 

*1:!A16 & !A15 & !A14) # (A16 & !A15 & !A14

*2:!A16 & !A15 & A14) # (!A16 & A15 & !A14