home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CBM Funet Archive
/
cbm-funet-archive-2003.iso
/
cbm
/
firmware
/
computers
/
c64
/
pla.c
< prev
next >
Wrap
C/C++ Source or Header
|
2003-06-08
|
7KB
|
200 lines
/** pROGRAM TO CONVERT LOGIC EQUATIONS
* OF 16 INPUTS AND 8 OUTPUTS
* TO A 64-KILOBYTE TRUTH TABLE.
* @AUTHOR mARKO m{$e4}KEL{$e4} (MSMAKELA@NIC.FUNET.FI)
* @DATE 2ND jULY 2002, UPDATED 8TH jULY 2003
*
* cOMPILATION:
*CC -O PLA PLA.C
* eXAMPLE USAGE:
*./PLA {$7c} DIFF - PLA-DUMP.BIN
* OR
*./PLA {$7c} OD -aX -T X1
* OR
*./PLA {$7c} CKSUM
* OR
*./PLA > PLA-DUMP.BIN
*
* tHE FOLLOWING pERL 5 CODE EXTRACTS OUTPUT f7 FROM A TRUTH TABLE DUMP:
* PERL -E 'UNDEF $/;$_=<>;S/(.)/CHR(ORD($1)&128)/GE;PRINT' < PLA-DUMP.BIN
*
* tO GENERATE ONLY SELECTED OUTPUTS WITH THIS PROGRAM,
* YOU MAY AS WELL COMMENT OUT SOME LINES IN THE MAIN FUNCTION.
*/
#INCLUDE <STDIO.H>
/** eXTRACT AN INPUT BIT
* @PARAM BTHE BIT TO BE EXTRACTED
* @RETURNNONZERO IF THE INPUT BIT B IS SET
*/
#DEFINE i(B) (!!((I) & (1 << B)))
/** @NAME tHE INPUT SIGNALS OF THE cOMMODORE 64 pla (906114-1).
* tHIS MAPPING CORRESPONDS TO THE 82s100 TO 27512 ADAPTER MADE BY
* jENS sCH{$f6}NFELD (JENS@AMI.GA). nOTE ALSO THE PERMUTATION OF OUTPUTS
* IN THE MAIN LOOP.
* (iN THE FIRST VERSION OF THIS PROGRAM, THE SIGNALS WERE NUMBERED
* FROM 0 TO 15, OR 0 TO 7, RESPECTIVELY.)
*/
/*@{$7b}*/
#DEFINE cas_i(1)
#DEFINE loram_i(2)
#DEFINE hiram_i(3)
#DEFINE charen_i(4)
#DEFINE va14_i(5)
#DEFINE a15i(6)
#DEFINE a14i(7)
#DEFINE a13i(12)
#DEFINE a12i(14)
#DEFINE bai(13)
#DEFINE aec_i(8)
#DEFINE r_w_i(9)
#DEFINE exrom_i(11)
#DEFINE game_i(15)
#DEFINE va13i(10)
#DEFINE va12i(0)
/*@{$7d}*/
/** @NAME tHE OUTPUT SIGNALS OF THE cOMMODORE 64 pla.
* cONVERTED FROM
* HTTP://WWW.FUNET.FI/PUB/CBM/FIRMWARE/COMPUTERS/C64/PLA.TXT
* BY mARKO m{$e4}KEL{$e4} ON 2ND jULY 2002
* AND VERIFIED AGAINST A DUMP PROVIDED BY wILLIAM lEVAK.
* tHE EQUATIONS ARE IN CONJUNCTIVE NORMAL FORM (cnf).
* oPERATORS:!XNEGATION OF X: NOT X
* X {$7c}{$7c} YDISJUNCTION: X OR B
* X && YCONJUNCTION: X AND B
*/
/*@{$7b}*/
/* casram_ */
#DEFINE f0((loram_ && hiram_ && a15 && !a14 && a13 && \
!aec_ && r_w_ && game_) {$7c}{$7c} \
(hiram_ && a15 && a14 && a13 && \
!aec_ && r_w_ && game_) {$7c}{$7c} \
(hiram_ && a15 && a14 && a13 && \
!aec_ && r_w_ && !exrom_ && !game_) {$7c}{$7c} \
(hiram_ && !charen_ && a15 && a14 && !a13 && \
a12 && !aec_ && r_w_ && game_) {$7c}{$7c} \
(loram_ && !charen_ && a15 && a14 && !a13 && \
a12 && !aec_ && r_w_ && game_) {$7c}{$7c} \
(hiram_ && !charen_ && a15 && a14 && !a13 && \
a12 && !aec_ && r_w_ && !exrom_ && !game_) {$7c}{$7c} \
(va14_ && aec_ && game_ && !va13 && va12) {$7c}{$7c} \
(va14_ && aec_ && !exrom_ && !game_ && !va13 && va12) {$7c}{$7c} \
(hiram_ && charen_ && a15 && a14 && !a13 && \
a12 && ba && !aec_ && r_w_ && game_) {$7c}{$7c} \
(hiram_ && charen_ && a15 && a14 && !a13 && \
a12 && !aec_ && !r_w_ && game_) {$7c}{$7c} \
(loram_ && charen_ && a15 && a14 && !a13 && \
a12 && ba && !aec_ && r_w_ && game_) {$7c}{$7c} \
(loram_ && charen_ && a15 && a14 && !a13 && \
a12 && !aec_ && !r_w_ && game_) {$7c}{$7c} \
(hiram_ && charen_ && a15 && a14 && !a13 && \
a12 && ba && !aec_ && r_w_ && !exrom_ && !game_) {$7c}{$7c} \
(hiram_ && charen_ && a15 && a14 && !a13 && \
a12 && !aec_ && !r_w_ && !exrom_ && !game_) {$7c}{$7c} \
(loram_ && charen_ && a15 && a14 && !a13 && \
a12 && ba && !aec_ && r_w_ && !exrom_ && !game_) {$7c}{$7c} \
(loram_ && charen_ && a15 && a14 && !a13 && \
a12 && !aec_ && !r_w_ && !exrom_ && !game_) {$7c}{$7c} \
(a15 && a14 && !a13 && a12 && ba && \
!aec_ && r_w_ && exrom_ && !game_) {$7c}{$7c} \
(a15 && a14 && !a13 && a12 && \
!aec_ && !r_w_ && exrom_ && !game_) {$7c}{$7c} \
(loram_ && hiram_ && a15 && !a14 && !a13 && \
!aec_ && r_w_ && !exrom_) {$7c}{$7c} \
(a15 && !a14 && !a13 && !aec_ && exrom_ && !game_) {$7c}{$7c} \
(hiram_ && a15 && !a14 && a13 && !aec_ && \
r_w_ && !exrom_ && !game_) {$7c}{$7c} \
(a15 && a14 && a13 && !aec_ && exrom_ && !game_) {$7c}{$7c} \
(aec_ && exrom_ && !game_ && va13 && va12) {$7c}{$7c} \
(!a15 && !a14 && a12 && exrom_ && !game_) {$7c}{$7c} \
(!a15 && !a14 && a13 && exrom_ && !game_) {$7c}{$7c} \
(!a15 && a14 && exrom_ && !game_) {$7c}{$7c} \
(a15 && !a14 && a13 && exrom_ && !game_) {$7c}{$7c} \
(a15 && a14 && !a13 && !a12 && exrom_ && !game_) {$7c}{$7c} \
cas_)
/* basic_ */
#DEFINE f1(!loram_ {$7c}{$7c} !hiram_ {$7c}{$7c} !a15 {$7c}{$7c} a14 {$7c}{$7c} !a13 {$7c}{$7c}\
aec_ {$7c}{$7c} !r_w_ {$7c}{$7c} !game_ )
/* kernal_ */
#DEFINE f2((!hiram_ {$7c}{$7c} !a15 {$7c}{$7c} !a14 {$7c}{$7c} !a13 {$7c}{$7c} aec_ {$7c}{$7c} \
!r_w_ {$7c}{$7c} !game_) &&\
(!hiram_ {$7c}{$7c} !a15 {$7c}{$7c} !a14 {$7c}{$7c} !a13 {$7c}{$7c} aec_ {$7c}{$7c} \
!r_w_ {$7c}{$7c} exrom_ {$7c}{$7c} game_ ))
/* charom_ */
#DEFINE f3((!hiram_ {$7c}{$7c} charen_ {$7c}{$7c} !a15 {$7c}{$7c} !a14 {$7c}{$7c} a13 {$7c}{$7c} \
!a12 {$7c}{$7c} aec_ {$7c}{$7c} !r_w_ {$7c}{$7c} !game_) &&\
(!loram_ {$7c}{$7c} charen_ {$7c}{$7c} !a15 {$7c}{$7c} !a14 {$7c}{$7c} a13 {$7c}{$7c} \
!a12 {$7c}{$7c} aec_ {$7c}{$7c} !r_w_ {$7c}{$7c} !game_) &&\
(!hiram_ {$7c}{$7c} charen_ {$7c}{$7c} !a15 {$7c}{$7c} !a14 {$7c}{$7c} a13 {$7c}{$7c} \
!a12 {$7c}{$7c} aec_ {$7c}{$7c} !r_w_ {$7c}{$7c} exrom_ {$7c}{$7c} game_) &&\
(!va14_ {$7c}{$7c} !aec_ {$7c}{$7c} !game_ {$7c}{$7c} va13 {$7c}{$7c} !va12) &&\
(!va14_ {$7c}{$7c} !aec_ {$7c}{$7c} exrom_ {$7c}{$7c} game_ {$7c}{$7c} va13 {$7c}{$7c} !va12))
/* gr_w_ */
#DEFINE f4(cas_ {$7c}{$7c} !a15 {$7c}{$7c} !a14 {$7c}{$7c} a13 {$7c}{$7c} !a12 {$7c}{$7c} aec_ {$7c}{$7c} r_w_)
/* i_o_ */
#DEFINE f5((!hiram_ {$7c}{$7c} !charen_ {$7c}{$7c} !a15 {$7c}{$7c} !a14 {$7c}{$7c} a13 {$7c}{$7c} \
!a12 {$7c}{$7c} !ba {$7c}{$7c} aec_ {$7c}{$7c} !r_w_ {$7c}{$7c} !game_) &&\
(!hiram_ {$7c}{$7c} !charen_ {$7c}{$7c} !a15 {$7c}{$7c} !a14 {$7c}{$7c} a13 {$7c}{$7c} \
!a12 {$7c}{$7c} aec_ {$7c}{$7c} r_w_ {$7c}{$7c} !game_) &&\
(!loram_ {$7c}{$7c} !charen_ {$7c}{$7c} !a15 {$7c}{$7c} !a14 {$7c}{$7c} a13 {$7c}{$7c} \
!a12 {$7c}{$7c} !ba {$7c}{$7c} aec_ {$7c}{$7c} !r_w_ {$7c}{$7c} !game_) &&\
(!loram_ {$7c}{$7c} !charen_ {$7c}{$7c} !a15 {$7c}{$7c} !a14 {$7c}{$7c} a13 {$7c}{$7c} \
!a12 {$7c}{$7c} aec_ {$7c}{$7c} r_w_ {$7c}{$7c} !game_) &&\
(!hiram_ {$7c}{$7c} !charen_ {$7c}{$7c} !a15 {$7c}{$7c} !a14 {$7c}{$7c} a13 {$7c}{$7c} \
!a12 {$7c}{$7c} !ba {$7c}{$7c} aec_ {$7c}{$7c} !r_w_ {$7c}{$7c} exrom_ {$7c}{$7c} \
game_) &&\
(!hiram_ {$7c}{$7c} !charen_ {$7c}{$7c} !a15 {$7c}{$7c} !a14 {$7c}{$7c} a13 {$7c}{$7c} \
!a12 {$7c}{$7c} aec_ {$7c}{$7c} r_w_ {$7c}{$7c} exrom_ {$7c}{$7c} game_) &&\
(!loram_ {$7c}{$7c} !charen_ {$7c}{$7c} !a15 {$7c}{$7c} !a14 {$7c}{$7c} a13 {$7c}{$7c} \
!a12 {$7c}{$7c} !ba {$7c}{$7c} aec_ {$7c}{$7c} !r_w_ {$7c}{$7c} exrom_ {$7c}{$7c} \
game_) &&\
(!loram_ {$7c}{$7c} !charen_ {$7c}{$7c} !a15 {$7c}{$7c} !a14 {$7c}{$7c} a13 {$7c}{$7c} \
!a12 {$7c}{$7c} aec_ {$7c}{$7c} r_w_ {$7c}{$7c} exrom_ {$7c}{$7c} game_) &&\
(!a15 {$7c}{$7c} !a14 {$7c}{$7c} a13 {$7c}{$7c} !a12 {$7c}{$7c} !ba {$7c}{$7c} \
aec_ {$7c}{$7c} !r_w_ {$7c}{$7c} !exrom_ {$7c}{$7c} game_) &&\
(!a15 {$7c}{$7c} !a14 {$7c}{$7c} a13 {$7c}{$7c} !a12 {$7c}{$7c} aec_ {$7c}{$7c} \
r_w_ {$7c}{$7c} !exrom_ {$7c}{$7c} game_ ))
/* roml_ */
#DEFINE f6((!loram_ {$7c}{$7c} !hiram_ {$7c}{$7c} !a15 {$7c}{$7c} a14 {$7c}{$7c} a13 {$7c}{$7c}\
aec_ {$7c}{$7c} !r_w_ {$7c}{$7c} exrom_) &&\
(!a15 {$7c}{$7c} a14 {$7c}{$7c} a13 {$7c}{$7c} aec_ {$7c}{$7c} !exrom_ {$7c}{$7c} game_))
/* romh_ */
#DEFINE f7((!hiram_ {$7c}{$7c} !a15 {$7c}{$7c} a14 {$7c}{$7c} !a13 {$7c}{$7c}\
aec_ {$7c}{$7c} !r_w_ {$7c}{$7c} exrom_ {$7c}{$7c} game_ ) &&\
(!a15 {$7c}{$7c} !a14 {$7c}{$7c} !a13 {$7c}{$7c} aec_ {$7c}{$7c} !exrom_ {$7c}{$7c} game_) &&\
(!aec_ {$7c}{$7c} !exrom_ {$7c}{$7c} game_ {$7c}{$7c} !va13 {$7c}{$7c} !va12))
/*@{$7d}*/
/** tHE MAIN PROGRAM
* @PARAM ARGCCOMMAND LINE ARGUMENT COUNT
* @PARAM ARGVCOMMAND LINE ARGUMENT VECTOR
* @RETURNZERO ON SUCCESSFUL TERMINATION
*/
INT
MAIN (INT ARGC, CHAR** ARGV)
{$7b}
/** tHE INPUT COMBINATION, AT LEAST 16 BITS */
REGISTER UNSIGNED INT I = 0;
DO {$7b}
/** tHE OUTPUT COMBINATION, 8 BITS */
REGISTER UNSIGNED CHAR O = 0;
/* tHE OUTPUTS ARE PERMUTED SO THAT THEY CORRESPOND TO THE ADAPTER
* MADE BY jENS sCH{$f6}NFELD.
*/
IF (f0) O {$7c}= 1 << 6;
IF (f1) O {$7c}= 1 << 5;
IF (f2) O {$7c}= 1 << 4;
IF (f3) O {$7c}= 1 << 3;
IF (f4) O {$7c}= 1 << 2;
IF (f5) O {$7c}= 1 << 1;
IF (f6) O {$7c}= 1 << 0;
IF (f7) O {$7c}= 1 << 7;
PUTCHAR (O);
{$7d}
WHILE (++I & 0XFFFF);
RETURN 0;
{$7d}