2001-03-11 23:42:11 +01:00
|
|
|
/*
|
2010-12-14 02:42:48 +01:00
|
|
|
* Copyright (c) 2001-2010 Stephen Williams (steve@icarus.com)
|
2001-03-11 23:42:11 +01:00
|
|
|
*
|
|
|
|
|
* This source code is free software; you can redistribute it
|
|
|
|
|
* and/or modify it in source code form under the terms of the GNU
|
|
|
|
|
* General Public License as published by the Free Software
|
|
|
|
|
* Foundation; either version 2 of the License, or (at your option)
|
|
|
|
|
* any later version.
|
|
|
|
|
*
|
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
|
* along with this program; if not, write to the Free Software
|
|
|
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
# include <stdio.h>
|
|
|
|
|
|
|
|
|
|
static void draw_AND(void)
|
|
|
|
|
{
|
|
|
|
|
unsigned i0, i1, i2, i3;
|
|
|
|
|
|
|
|
|
|
printf("const unsigned char ft_AND[64] = {");
|
|
|
|
|
|
|
|
|
|
for (i3 = 0 ; i3 < 4 ; i3 += 1)
|
|
|
|
|
for (i2 = 0 ; i2 < 4 ; i2 += 1) {
|
|
|
|
|
printf("\n ");
|
|
|
|
|
for (i1 = 0 ; i1 < 4 ; i1 += 1) {
|
|
|
|
|
unsigned idx = (i3 << 4) | (i2 << 2) | i1;
|
|
|
|
|
unsigned char byte = 0;
|
|
|
|
|
|
|
|
|
|
for (i0 = 0 ; i0 < 4 ; i0 += 1) {
|
|
|
|
|
unsigned val;
|
2004-10-04 03:10:51 +02:00
|
|
|
if ((i0 == 0) || (i1 == 0) ||
|
2001-03-11 23:42:11 +01:00
|
|
|
(i2 == 0) || (i3 == 0))
|
|
|
|
|
val = 0;
|
2004-10-04 03:10:51 +02:00
|
|
|
else if ((i0 == 1) && (i1 == 1) &&
|
2001-03-11 23:42:11 +01:00
|
|
|
(i2 == 1) && (i3 == 1))
|
|
|
|
|
val = 1;
|
|
|
|
|
else
|
|
|
|
|
val = 2;
|
|
|
|
|
|
|
|
|
|
byte |= val << (i0*2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("0x%02x, ", byte);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("};\n");
|
|
|
|
|
}
|
|
|
|
|
|
2001-04-21 04:04:01 +02:00
|
|
|
static void draw_NAND(void)
|
|
|
|
|
{
|
|
|
|
|
unsigned i0, i1, i2, i3;
|
|
|
|
|
|
|
|
|
|
printf("const unsigned char ft_NAND[64] = {");
|
|
|
|
|
|
|
|
|
|
for (i3 = 0 ; i3 < 4 ; i3 += 1)
|
|
|
|
|
for (i2 = 0 ; i2 < 4 ; i2 += 1) {
|
|
|
|
|
printf("\n ");
|
|
|
|
|
for (i1 = 0 ; i1 < 4 ; i1 += 1) {
|
|
|
|
|
unsigned idx = (i3 << 4) | (i2 << 2) | i1;
|
|
|
|
|
unsigned char byte = 0;
|
|
|
|
|
|
|
|
|
|
for (i0 = 0 ; i0 < 4 ; i0 += 1) {
|
|
|
|
|
unsigned val;
|
2004-10-04 03:10:51 +02:00
|
|
|
if ((i0 == 0) || (i1 == 0) ||
|
2001-04-21 04:04:01 +02:00
|
|
|
(i2 == 0) || (i3 == 0))
|
|
|
|
|
val = 1;
|
2004-10-04 03:10:51 +02:00
|
|
|
else if ((i0 == 1) && (i1 == 1) &&
|
2001-04-21 04:04:01 +02:00
|
|
|
(i2 == 1) && (i3 == 1))
|
|
|
|
|
val = 0;
|
|
|
|
|
else
|
|
|
|
|
val = 2;
|
|
|
|
|
|
|
|
|
|
byte |= val << (i0*2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("0x%02x, ", byte);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("};\n");
|
|
|
|
|
}
|
|
|
|
|
|
2001-04-01 23:31:46 +02:00
|
|
|
static void draw_BUF(void)
|
|
|
|
|
{
|
|
|
|
|
unsigned i0, i1, i2, i3;
|
|
|
|
|
|
|
|
|
|
printf("const unsigned char ft_BUF[64] = {");
|
|
|
|
|
|
|
|
|
|
for (i3 = 0 ; i3 < 4 ; i3 += 1)
|
|
|
|
|
for (i2 = 0 ; i2 < 4 ; i2 += 1) {
|
|
|
|
|
printf("\n ");
|
|
|
|
|
for (i1 = 0 ; i1 < 4 ; i1 += 1) {
|
|
|
|
|
unsigned idx = (i3 << 4) | (i2 << 2) | i1;
|
|
|
|
|
unsigned char byte = 0;
|
|
|
|
|
|
|
|
|
|
for (i0 = 0 ; i0 < 4 ; i0 += 1) {
|
|
|
|
|
unsigned val;
|
|
|
|
|
if (i0 == 1)
|
|
|
|
|
val = 1;
|
|
|
|
|
else if (i0 == 0)
|
|
|
|
|
val = 0;
|
|
|
|
|
else
|
|
|
|
|
val = 2;
|
|
|
|
|
|
|
|
|
|
byte |= val << (i0*2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("0x%02x, ", byte);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("};\n");
|
|
|
|
|
}
|
|
|
|
|
|
2002-01-12 05:02:16 +01:00
|
|
|
static void draw_BUFZ(void)
|
|
|
|
|
{
|
|
|
|
|
unsigned i0, i1, i2, i3;
|
|
|
|
|
|
|
|
|
|
printf("const unsigned char ft_BUFZ[64] = {");
|
|
|
|
|
|
|
|
|
|
for (i3 = 0 ; i3 < 4 ; i3 += 1)
|
|
|
|
|
for (i2 = 0 ; i2 < 4 ; i2 += 1) {
|
|
|
|
|
printf("\n ");
|
|
|
|
|
for (i1 = 0 ; i1 < 4 ; i1 += 1) {
|
|
|
|
|
unsigned idx = (i3 << 4) | (i2 << 2) | i1;
|
|
|
|
|
unsigned char byte = 0;
|
|
|
|
|
|
|
|
|
|
for (i0 = 0 ; i0 < 4 ; i0 += 1) {
|
|
|
|
|
unsigned val = i0;
|
|
|
|
|
|
|
|
|
|
byte |= val << (i0*2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("0x%02x, ", byte);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("};\n");
|
|
|
|
|
}
|
|
|
|
|
|
2001-04-30 01:13:33 +02:00
|
|
|
static void draw_BUFIF0(void)
|
|
|
|
|
{
|
|
|
|
|
unsigned i0, i1, i2, i3;
|
|
|
|
|
|
|
|
|
|
printf("const unsigned char ft_BUFIF0[64] = {");
|
|
|
|
|
|
|
|
|
|
for (i3 = 0 ; i3 < 4 ; i3 += 1)
|
|
|
|
|
for (i2 = 0 ; i2 < 4 ; i2 += 1) {
|
|
|
|
|
printf("\n ");
|
|
|
|
|
for (i1 = 0 ; i1 < 4 ; i1 += 1) {
|
|
|
|
|
unsigned idx = (i3 << 4) | (i2 << 2) | i1;
|
|
|
|
|
unsigned char byte = 0;
|
|
|
|
|
|
|
|
|
|
for (i0 = 0 ; i0 < 4 ; i0 += 1) {
|
|
|
|
|
unsigned val;
|
|
|
|
|
if (i2 == 0)
|
|
|
|
|
val = 3;
|
|
|
|
|
else if (i0 == 1)
|
|
|
|
|
val = 1;
|
|
|
|
|
else if (i0 == 0)
|
|
|
|
|
val = 0;
|
|
|
|
|
else
|
|
|
|
|
val = 2;
|
|
|
|
|
|
|
|
|
|
byte |= val << (i0*2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("0x%02x, ", byte);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("};\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void draw_BUFIF1(void)
|
|
|
|
|
{
|
|
|
|
|
unsigned i0, i1, i2, i3;
|
|
|
|
|
|
|
|
|
|
printf("const unsigned char ft_BUFIF1[64] = {");
|
|
|
|
|
|
|
|
|
|
for (i3 = 0 ; i3 < 4 ; i3 += 1)
|
|
|
|
|
for (i2 = 0 ; i2 < 4 ; i2 += 1) {
|
|
|
|
|
printf("\n ");
|
|
|
|
|
for (i1 = 0 ; i1 < 4 ; i1 += 1) {
|
|
|
|
|
unsigned idx = (i3 << 4) | (i2 << 2) | i1;
|
|
|
|
|
unsigned char byte = 0;
|
|
|
|
|
|
|
|
|
|
for (i0 = 0 ; i0 < 4 ; i0 += 1) {
|
|
|
|
|
unsigned val;
|
|
|
|
|
if (i2 == 1)
|
|
|
|
|
val = 3;
|
|
|
|
|
else if (i0 == 1)
|
|
|
|
|
val = 1;
|
|
|
|
|
else if (i0 == 0)
|
|
|
|
|
val = 0;
|
|
|
|
|
else
|
|
|
|
|
val = 2;
|
|
|
|
|
|
|
|
|
|
byte |= val << (i0*2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("0x%02x, ", byte);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("};\n");
|
|
|
|
|
}
|
|
|
|
|
|
2001-10-09 04:28:16 +02:00
|
|
|
static void draw_PMOS(void)
|
|
|
|
|
{
|
|
|
|
|
unsigned i0, i1, i2, i3;
|
|
|
|
|
|
|
|
|
|
printf("const unsigned char ft_PMOS[64] = {");
|
|
|
|
|
|
|
|
|
|
for (i3 = 0 ; i3 < 4 ; i3 += 1)
|
|
|
|
|
for (i2 = 0 ; i2 < 4 ; i2 += 1) {
|
|
|
|
|
printf("\n ");
|
|
|
|
|
for (i1 = 0 ; i1 < 4 ; i1 += 1) {
|
|
|
|
|
unsigned idx = (i3 << 4) | (i2 << 2) | i1;
|
|
|
|
|
unsigned char byte = 0;
|
|
|
|
|
|
|
|
|
|
for (i0 = 0 ; i0 < 4 ; i0 += 1) {
|
|
|
|
|
unsigned val;
|
|
|
|
|
if (i2 == 0 || i0 == 3)
|
|
|
|
|
val = 3;
|
|
|
|
|
else if (i0 == 1)
|
|
|
|
|
val = 1;
|
|
|
|
|
else if (i0 == 0)
|
|
|
|
|
val = 0;
|
|
|
|
|
else
|
|
|
|
|
val = 2;
|
|
|
|
|
|
|
|
|
|
byte |= val << (i0*2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("0x%02x, ", byte);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("};\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void draw_NMOS(void)
|
|
|
|
|
{
|
|
|
|
|
unsigned i0, i1, i2, i3;
|
|
|
|
|
|
|
|
|
|
printf("const unsigned char ft_NMOS[64] = {");
|
|
|
|
|
|
|
|
|
|
for (i3 = 0 ; i3 < 4 ; i3 += 1)
|
|
|
|
|
for (i2 = 0 ; i2 < 4 ; i2 += 1) {
|
|
|
|
|
printf("\n ");
|
|
|
|
|
for (i1 = 0 ; i1 < 4 ; i1 += 1) {
|
|
|
|
|
unsigned idx = (i3 << 4) | (i2 << 2) | i1;
|
|
|
|
|
unsigned char byte = 0;
|
|
|
|
|
|
|
|
|
|
for (i0 = 0 ; i0 < 4 ; i0 += 1) {
|
|
|
|
|
unsigned val;
|
|
|
|
|
if (i2 == 1 || i0 == 3)
|
|
|
|
|
val = 3;
|
|
|
|
|
else if (i0 == 1)
|
|
|
|
|
val = 1;
|
|
|
|
|
else if (i0 == 0)
|
|
|
|
|
val = 0;
|
|
|
|
|
else
|
|
|
|
|
val = 2;
|
|
|
|
|
|
|
|
|
|
byte |= val << (i0*2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("0x%02x, ", byte);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("};\n");
|
|
|
|
|
}
|
|
|
|
|
|
2002-08-29 05:04:01 +02:00
|
|
|
static void draw_MUXX(void)
|
|
|
|
|
{
|
|
|
|
|
unsigned i0, i1, i2, i3;
|
|
|
|
|
|
|
|
|
|
printf("const unsigned char ft_MUXX[64] = {");
|
|
|
|
|
|
|
|
|
|
for (i3 = 0 ; i3 < 4 ; i3 += 1)
|
|
|
|
|
for (i2 = 0 ; i2 < 4 ; i2 += 1) {
|
|
|
|
|
printf("\n ");
|
|
|
|
|
for (i1 = 0 ; i1 < 4 ; i1 += 1) {
|
|
|
|
|
unsigned idx = (i3 << 4) | (i2 << 2) | i1;
|
|
|
|
|
unsigned char byte = 0;
|
|
|
|
|
|
|
|
|
|
for (i0 = 0 ; i0 < 4 ; i0 += 1) {
|
|
|
|
|
unsigned val;
|
|
|
|
|
if (i3 == 0)
|
|
|
|
|
val = 3;
|
|
|
|
|
else if (i3 == 2)
|
|
|
|
|
val = 2;
|
|
|
|
|
else if (i3 == 3)
|
|
|
|
|
val = 2;
|
|
|
|
|
else if (i2 >= 2) {
|
|
|
|
|
val = 2;
|
|
|
|
|
} else if (i2 == 0)
|
|
|
|
|
val = i0;
|
|
|
|
|
else
|
|
|
|
|
val = i1;
|
|
|
|
|
|
|
|
|
|
byte |= val << (i0*2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("0x%02x, ", byte);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("};\n");
|
|
|
|
|
}
|
|
|
|
|
|
2001-04-26 07:12:02 +02:00
|
|
|
static void draw_MUXZ(void)
|
|
|
|
|
{
|
|
|
|
|
unsigned i0, i1, i2, i3;
|
|
|
|
|
|
|
|
|
|
printf("const unsigned char ft_MUXZ[64] = {");
|
|
|
|
|
|
|
|
|
|
for (i3 = 0 ; i3 < 4 ; i3 += 1)
|
|
|
|
|
for (i2 = 0 ; i2 < 4 ; i2 += 1) {
|
|
|
|
|
printf("\n ");
|
|
|
|
|
for (i1 = 0 ; i1 < 4 ; i1 += 1) {
|
|
|
|
|
unsigned idx = (i3 << 4) | (i2 << 2) | i1;
|
|
|
|
|
unsigned char byte = 0;
|
|
|
|
|
|
|
|
|
|
for (i0 = 0 ; i0 < 4 ; i0 += 1) {
|
|
|
|
|
unsigned val;
|
|
|
|
|
if (i3 == 0)
|
|
|
|
|
val = 3;
|
|
|
|
|
else if (i3 == 2)
|
|
|
|
|
val = 2;
|
|
|
|
|
else if (i3 == 3)
|
|
|
|
|
val = 2;
|
|
|
|
|
else if (i2 >= 2) {
|
|
|
|
|
if (i0 == i1)
|
|
|
|
|
val = i0;
|
|
|
|
|
else
|
|
|
|
|
val = 2;
|
|
|
|
|
} else if (i2 == 0)
|
|
|
|
|
val = i0;
|
|
|
|
|
else
|
|
|
|
|
val = i1;
|
|
|
|
|
|
|
|
|
|
byte |= val << (i0*2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("0x%02x, ", byte);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("};\n");
|
|
|
|
|
}
|
|
|
|
|
|
2001-06-19 05:01:10 +02:00
|
|
|
static void draw_EEQ(void)
|
|
|
|
|
{
|
|
|
|
|
unsigned i0, i1, i2, i3;
|
|
|
|
|
|
|
|
|
|
printf("const unsigned char ft_EEQ[64] = {");
|
|
|
|
|
|
|
|
|
|
for (i3 = 0 ; i3 < 4 ; i3 += 1)
|
|
|
|
|
for (i2 = 0 ; i2 < 4 ; i2 += 1) {
|
|
|
|
|
printf("\n ");
|
|
|
|
|
for (i1 = 0 ; i1 < 4 ; i1 += 1) {
|
|
|
|
|
unsigned idx = (i3 << 4) | (i2 << 2) | i1;
|
|
|
|
|
unsigned char byte = 0;
|
|
|
|
|
|
|
|
|
|
for (i0 = 0 ; i0 < 4 ; i0 += 1) {
|
|
|
|
|
unsigned val;
|
|
|
|
|
if (i3 != i2)
|
|
|
|
|
val = 0;
|
|
|
|
|
else if (i1 != i0)
|
|
|
|
|
val = 0;
|
|
|
|
|
else
|
|
|
|
|
val = 1;
|
|
|
|
|
|
|
|
|
|
byte |= val << (i0*2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("0x%02x, ", byte);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("};\n");
|
|
|
|
|
}
|
|
|
|
|
|
2001-03-25 21:37:26 +02:00
|
|
|
static void draw_NOR(void)
|
|
|
|
|
{
|
|
|
|
|
unsigned i0, i1, i2, i3;
|
|
|
|
|
|
|
|
|
|
printf("const unsigned char ft_NOR[64] = {");
|
|
|
|
|
|
|
|
|
|
for (i3 = 0 ; i3 < 4 ; i3 += 1)
|
|
|
|
|
for (i2 = 0 ; i2 < 4 ; i2 += 1) {
|
|
|
|
|
printf("\n ");
|
|
|
|
|
for (i1 = 0 ; i1 < 4 ; i1 += 1) {
|
|
|
|
|
unsigned idx = (i3 << 4) | (i2 << 2) | i1;
|
|
|
|
|
unsigned char byte = 0;
|
|
|
|
|
|
|
|
|
|
for (i0 = 0 ; i0 < 4 ; i0 += 1) {
|
|
|
|
|
unsigned val;
|
2004-10-04 03:10:51 +02:00
|
|
|
if ((i0 == 1) || (i1 == 1) ||
|
2001-03-25 21:37:26 +02:00
|
|
|
(i2 == 1) || (i3 == 1))
|
|
|
|
|
val = 0;
|
2004-10-04 03:10:51 +02:00
|
|
|
else if ((i0 == 0) && (i1 == 0) &&
|
2001-03-25 21:37:26 +02:00
|
|
|
(i2 == 0) && (i3 == 0))
|
|
|
|
|
val = 1;
|
|
|
|
|
else
|
|
|
|
|
val = 2;
|
|
|
|
|
|
|
|
|
|
byte |= val << (i0*2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("0x%02x, ", byte);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("};\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void draw_NOT(void)
|
|
|
|
|
{
|
|
|
|
|
unsigned i0, i1, i2, i3;
|
|
|
|
|
|
|
|
|
|
printf("const unsigned char ft_NOT[64] = {");
|
|
|
|
|
|
|
|
|
|
for (i3 = 0 ; i3 < 4 ; i3 += 1)
|
|
|
|
|
for (i2 = 0 ; i2 < 4 ; i2 += 1) {
|
|
|
|
|
printf("\n ");
|
|
|
|
|
for (i1 = 0 ; i1 < 4 ; i1 += 1) {
|
|
|
|
|
unsigned idx = (i3 << 4) | (i2 << 2) | i1;
|
|
|
|
|
unsigned char byte = 0;
|
|
|
|
|
|
|
|
|
|
for (i0 = 0 ; i0 < 4 ; i0 += 1) {
|
|
|
|
|
unsigned val;
|
|
|
|
|
if (i0 == 1)
|
|
|
|
|
val = 0;
|
|
|
|
|
else if (i0 == 0)
|
|
|
|
|
val = 1;
|
|
|
|
|
else
|
|
|
|
|
val = 2;
|
|
|
|
|
|
|
|
|
|
byte |= val << (i0*2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("0x%02x, ", byte);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("};\n");
|
|
|
|
|
}
|
|
|
|
|
|
2001-03-11 23:42:11 +01:00
|
|
|
static void draw_OR(void)
|
|
|
|
|
{
|
|
|
|
|
unsigned i0, i1, i2, i3;
|
|
|
|
|
|
|
|
|
|
printf("const unsigned char ft_OR[64] = {");
|
|
|
|
|
|
|
|
|
|
for (i3 = 0 ; i3 < 4 ; i3 += 1)
|
|
|
|
|
for (i2 = 0 ; i2 < 4 ; i2 += 1) {
|
|
|
|
|
printf("\n ");
|
|
|
|
|
for (i1 = 0 ; i1 < 4 ; i1 += 1) {
|
|
|
|
|
unsigned idx = (i3 << 4) | (i2 << 2) | i1;
|
|
|
|
|
unsigned char byte = 0;
|
|
|
|
|
|
|
|
|
|
for (i0 = 0 ; i0 < 4 ; i0 += 1) {
|
|
|
|
|
unsigned val;
|
2004-10-04 03:10:51 +02:00
|
|
|
if ((i0 == 1) || (i1 == 1) ||
|
2001-03-11 23:42:11 +01:00
|
|
|
(i2 == 1) || (i3 == 1))
|
|
|
|
|
val = 1;
|
2004-10-04 03:10:51 +02:00
|
|
|
else if ((i0 == 0) && (i1 == 0) &&
|
2001-03-11 23:42:11 +01:00
|
|
|
(i2 == 0) && (i3 == 0))
|
|
|
|
|
val = 0;
|
|
|
|
|
else
|
|
|
|
|
val = 2;
|
|
|
|
|
|
|
|
|
|
byte |= val << (i0*2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("0x%02x, ", byte);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("};\n");
|
|
|
|
|
}
|
|
|
|
|
|
2001-04-15 18:37:48 +02:00
|
|
|
static void draw_XNOR(void)
|
|
|
|
|
{
|
|
|
|
|
unsigned i0, i1, i2, i3;
|
|
|
|
|
|
|
|
|
|
printf("const unsigned char ft_XNOR[64] = {");
|
|
|
|
|
|
|
|
|
|
for (i3 = 0 ; i3 < 4 ; i3 += 1)
|
|
|
|
|
for (i2 = 0 ; i2 < 4 ; i2 += 1) {
|
|
|
|
|
printf("\n ");
|
|
|
|
|
for (i1 = 0 ; i1 < 4 ; i1 += 1) {
|
|
|
|
|
unsigned idx = (i3 << 4) | (i2 << 2) | i1;
|
|
|
|
|
unsigned char byte = 0;
|
|
|
|
|
|
|
|
|
|
for (i0 = 0 ; i0 < 4 ; i0 += 1) {
|
|
|
|
|
unsigned val;
|
|
|
|
|
|
|
|
|
|
if ((i0 > 1) || (i1 > 1)
|
|
|
|
|
|| (i2 > 1) || (i3 > 1))
|
|
|
|
|
val = 2;
|
|
|
|
|
else
|
|
|
|
|
val = (i0 + i1 + i2 + i3) % 2 ^ 1;
|
|
|
|
|
|
|
|
|
|
byte |= val << (i0*2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("0x%02x, ", byte);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("};\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void draw_XOR(void)
|
|
|
|
|
{
|
|
|
|
|
unsigned i0, i1, i2, i3;
|
|
|
|
|
|
|
|
|
|
printf("const unsigned char ft_XOR[64] = {");
|
|
|
|
|
|
|
|
|
|
for (i3 = 0 ; i3 < 4 ; i3 += 1)
|
|
|
|
|
for (i2 = 0 ; i2 < 4 ; i2 += 1) {
|
|
|
|
|
printf("\n ");
|
|
|
|
|
for (i1 = 0 ; i1 < 4 ; i1 += 1) {
|
|
|
|
|
unsigned idx = (i3 << 4) | (i2 << 2) | i1;
|
|
|
|
|
unsigned char byte = 0;
|
|
|
|
|
|
|
|
|
|
for (i0 = 0 ; i0 < 4 ; i0 += 1) {
|
|
|
|
|
unsigned val;
|
|
|
|
|
|
|
|
|
|
if ((i0 > 1) || (i1 > 1)
|
|
|
|
|
|| (i2 > 1) || (i3 > 1))
|
|
|
|
|
val = 2;
|
|
|
|
|
else
|
|
|
|
|
val = (i0 + i1 + i2 + i3) % 2;
|
|
|
|
|
|
|
|
|
|
byte |= val << (i0*2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("0x%02x, ", byte);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("};\n");
|
|
|
|
|
}
|
|
|
|
|
|
2003-07-30 03:13:28 +02:00
|
|
|
static void draw_TRIAND(void)
|
|
|
|
|
{
|
|
|
|
|
unsigned i0, i1, i2, i3;
|
|
|
|
|
|
|
|
|
|
printf("const unsigned char ft_TRIAND[64] = {");
|
|
|
|
|
|
|
|
|
|
for (i3 = 0 ; i3 < 4 ; i3 += 1)
|
|
|
|
|
for (i2 = 0 ; i2 < 4 ; i2 += 1) {
|
|
|
|
|
printf("\n ");
|
|
|
|
|
for (i1 = 0 ; i1 < 4 ; i1 += 1) {
|
|
|
|
|
unsigned idx = (i3 << 4) | (i2 << 2) | i1;
|
|
|
|
|
unsigned char byte = 0;
|
|
|
|
|
|
|
|
|
|
for (i0 = 0 ; i0 < 4 ; i0 += 1) {
|
|
|
|
|
unsigned val;
|
2004-10-04 03:10:51 +02:00
|
|
|
if ((i0 == 0) || (i1 == 0) ||
|
2003-07-30 03:13:28 +02:00
|
|
|
(i2 == 0) || (i3 == 0))
|
|
|
|
|
val = 0;
|
2004-10-04 03:10:51 +02:00
|
|
|
else if ((i0 == 2) || (i1 == 2) ||
|
2003-07-30 03:13:28 +02:00
|
|
|
(i2 == 2) || (i3 == 2))
|
|
|
|
|
val = 2;
|
2004-10-04 03:10:51 +02:00
|
|
|
else if ((i0 == 3) && (i1 == 3) &&
|
2003-07-30 03:13:28 +02:00
|
|
|
(i2 == 3) && (i3 == 3))
|
|
|
|
|
val = 3;
|
|
|
|
|
else
|
|
|
|
|
val = 1;
|
|
|
|
|
|
|
|
|
|
byte |= val << (i0*2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("0x%02x, ", byte);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("};\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void draw_TRIOR(void)
|
|
|
|
|
{
|
|
|
|
|
unsigned i0, i1, i2, i3;
|
|
|
|
|
|
|
|
|
|
printf("const unsigned char ft_TRIOR[64] = {");
|
|
|
|
|
|
|
|
|
|
for (i3 = 0 ; i3 < 4 ; i3 += 1)
|
|
|
|
|
for (i2 = 0 ; i2 < 4 ; i2 += 1) {
|
|
|
|
|
printf("\n ");
|
|
|
|
|
for (i1 = 0 ; i1 < 4 ; i1 += 1) {
|
|
|
|
|
unsigned idx = (i3 << 4) | (i2 << 2) | i1;
|
|
|
|
|
unsigned char byte = 0;
|
|
|
|
|
|
|
|
|
|
for (i0 = 0 ; i0 < 4 ; i0 += 1) {
|
|
|
|
|
unsigned val;
|
2004-10-04 03:10:51 +02:00
|
|
|
if ((i0 == 1) || (i1 == 1) ||
|
2003-07-30 03:13:28 +02:00
|
|
|
(i2 == 1) || (i3 == 1))
|
|
|
|
|
val = 1;
|
2004-10-04 03:10:51 +02:00
|
|
|
else if ((i0 == 2) || (i1 == 2) ||
|
2003-07-30 03:13:28 +02:00
|
|
|
(i2 == 2) || (i3 == 2))
|
|
|
|
|
val = 2;
|
2004-10-04 03:10:51 +02:00
|
|
|
else if ((i0 == 3) && (i1 == 3) &&
|
2003-07-30 03:13:28 +02:00
|
|
|
(i2 == 3) && (i3 == 3))
|
|
|
|
|
val = 3;
|
|
|
|
|
else
|
|
|
|
|
val = 0;
|
|
|
|
|
|
|
|
|
|
byte |= val << (i0*2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("0x%02x, ", byte);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("};\n");
|
|
|
|
|
}
|
|
|
|
|
|
2001-03-25 22:45:09 +02:00
|
|
|
/*
|
|
|
|
|
* The hex_digits table is not a functor truth table per say, but a
|
|
|
|
|
* map of a 4-vbit value to a hex digit. The table handles the display
|
|
|
|
|
* of x, X, z, Z, etc.
|
|
|
|
|
*/
|
2001-03-25 21:37:26 +02:00
|
|
|
static void draw_hex_table()
|
|
|
|
|
{
|
|
|
|
|
unsigned idx;
|
|
|
|
|
|
|
|
|
|
printf("extern const char hex_digits[256] = {\n");
|
|
|
|
|
for (idx = 0 ; idx < 256 ; idx += 1) {
|
|
|
|
|
unsigned cnt_z = 0, cnt_x = 0;
|
|
|
|
|
unsigned bv = 0, bdx;
|
|
|
|
|
|
|
|
|
|
for (bdx = 0 ; bdx < 4 ; bdx += 1) {
|
|
|
|
|
switch ((idx >> (bdx * 2)) & 3) {
|
|
|
|
|
case 0:
|
|
|
|
|
break;
|
|
|
|
|
case 1:
|
|
|
|
|
bv |= 1<<bdx;
|
|
|
|
|
break;
|
|
|
|
|
case 2:
|
|
|
|
|
cnt_x += 1;
|
|
|
|
|
break;
|
|
|
|
|
case 3:
|
|
|
|
|
cnt_z += 1;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (cnt_z == 4)
|
|
|
|
|
printf(" 'z',");
|
|
|
|
|
|
|
|
|
|
else if (cnt_x == 4)
|
|
|
|
|
printf(" 'x',");
|
|
|
|
|
|
|
|
|
|
else if ((cnt_z > 0) && (cnt_x == 0))
|
|
|
|
|
printf(" 'Z',");
|
|
|
|
|
|
|
|
|
|
else if (cnt_x > 0)
|
|
|
|
|
printf(" 'X',");
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
printf(" '%c',", "0123456789abcdef"[bv]);
|
|
|
|
|
|
|
|
|
|
if (((idx+1) % 8) == 0)
|
|
|
|
|
printf("\n");
|
|
|
|
|
}
|
|
|
|
|
printf("};\n");
|
|
|
|
|
}
|
|
|
|
|
|
2001-03-25 22:45:09 +02:00
|
|
|
static void draw_oct_table()
|
|
|
|
|
{
|
|
|
|
|
unsigned idx;
|
|
|
|
|
|
|
|
|
|
printf("extern const char oct_digits[64] = {\n");
|
|
|
|
|
for (idx = 0 ; idx < 64 ; idx += 1) {
|
|
|
|
|
unsigned cnt_z = 0, cnt_x = 0;
|
|
|
|
|
unsigned bv = 0, bdx;
|
|
|
|
|
|
|
|
|
|
for (bdx = 0 ; bdx < 3 ; bdx += 1) {
|
|
|
|
|
switch ((idx >> (bdx * 2)) & 3) {
|
|
|
|
|
case 0:
|
|
|
|
|
break;
|
|
|
|
|
case 1:
|
|
|
|
|
bv |= 1<<bdx;
|
|
|
|
|
break;
|
|
|
|
|
case 2:
|
|
|
|
|
cnt_x += 1;
|
|
|
|
|
break;
|
|
|
|
|
case 3:
|
|
|
|
|
cnt_z += 1;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (cnt_z == 3)
|
|
|
|
|
printf(" 'z',");
|
|
|
|
|
|
|
|
|
|
else if (cnt_x == 3)
|
|
|
|
|
printf(" 'x',");
|
|
|
|
|
|
|
|
|
|
else if ((cnt_z > 0) && (cnt_x == 0))
|
|
|
|
|
printf(" 'Z',");
|
|
|
|
|
|
|
|
|
|
else if (cnt_x > 0)
|
|
|
|
|
printf(" 'X',");
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
printf(" '%c',", "01234567"[bv]);
|
|
|
|
|
|
|
|
|
|
if (((idx+1) % 8) == 0)
|
|
|
|
|
printf("\n");
|
|
|
|
|
}
|
|
|
|
|
printf("};\n");
|
|
|
|
|
}
|
|
|
|
|
|
2015-08-19 20:14:23 +02:00
|
|
|
int main()
|
2001-03-11 23:42:11 +01:00
|
|
|
{
|
2001-11-06 04:07:21 +01:00
|
|
|
printf("# include \"logic.h\"\n");
|
2001-03-11 23:42:11 +01:00
|
|
|
draw_AND();
|
2001-04-01 23:31:46 +02:00
|
|
|
draw_BUF();
|
2001-04-30 01:13:33 +02:00
|
|
|
draw_BUFIF0();
|
|
|
|
|
draw_BUFIF1();
|
2002-01-12 05:02:16 +01:00
|
|
|
draw_BUFZ();
|
2001-10-09 04:28:16 +02:00
|
|
|
draw_PMOS();
|
|
|
|
|
draw_NMOS();
|
2002-08-29 05:04:01 +02:00
|
|
|
draw_MUXX();
|
2001-04-26 07:12:02 +02:00
|
|
|
draw_MUXZ();
|
2001-06-19 05:01:10 +02:00
|
|
|
draw_EEQ();
|
2001-04-21 04:04:01 +02:00
|
|
|
draw_NAND();
|
2001-03-25 21:37:26 +02:00
|
|
|
draw_NOR();
|
|
|
|
|
draw_NOT();
|
2001-03-11 23:42:11 +01:00
|
|
|
draw_OR();
|
2003-07-30 03:13:28 +02:00
|
|
|
draw_TRIAND();
|
|
|
|
|
draw_TRIOR();
|
2001-04-15 18:37:48 +02:00
|
|
|
draw_XNOR();
|
|
|
|
|
draw_XOR();
|
2001-03-25 21:37:26 +02:00
|
|
|
draw_hex_table();
|
2001-03-25 22:45:09 +02:00
|
|
|
draw_oct_table();
|
2001-03-11 23:42:11 +01:00
|
|
|
return 0;
|
|
|
|
|
}
|