home *** CD-ROM | disk | FTP | other *** search
/ CBM Funet Archive / cbm-funet-archive-2003.iso / cbm / firmware / computers / c64 / pla.c < prev    next >
C/C++ Source or Header  |  2003-06-08  |  7KB  |  200 lines

  1. /** pROGRAM TO CONVERT LOGIC EQUATIONS
  2.  * OF 16 INPUTS AND 8 OUTPUTS
  3.  * TO A 64-KILOBYTE TRUTH TABLE.
  4.  * @AUTHOR mARKO m{$e4}KEL{$e4} (MSMAKELA@NIC.FUNET.FI)
  5.  * @DATE 2ND jULY 2002, UPDATED 8TH jULY 2003
  6.  *
  7.  * cOMPILATION:
  8.  *CC -O PLA PLA.C
  9.  * eXAMPLE USAGE:
  10.  *./PLA {$7c} DIFF - PLA-DUMP.BIN
  11.  * OR
  12.  *./PLA {$7c} OD -aX -T X1
  13.  * OR
  14.  *./PLA {$7c} CKSUM
  15.  * OR
  16.  *./PLA > PLA-DUMP.BIN
  17.  *
  18.  * tHE FOLLOWING pERL 5 CODE EXTRACTS OUTPUT f7 FROM A TRUTH TABLE DUMP:
  19.  * PERL -E 'UNDEF $/;$_=<>;S/(.)/CHR(ORD($1)&128)/GE;PRINT' < PLA-DUMP.BIN
  20.  *
  21.  * tO GENERATE ONLY SELECTED OUTPUTS WITH THIS PROGRAM,
  22.  * YOU MAY AS WELL COMMENT OUT SOME LINES IN THE MAIN FUNCTION.
  23.  */
  24.  
  25. #INCLUDE <STDIO.H>
  26.  
  27. /** eXTRACT AN INPUT BIT
  28.  * @PARAM BTHE BIT TO BE EXTRACTED
  29.  * @RETURNNONZERO IF THE INPUT BIT B IS SET
  30.  */
  31. #DEFINE i(B) (!!((I) & (1 << B)))
  32.  
  33. /** @NAME tHE INPUT SIGNALS OF THE cOMMODORE 64 pla (906114-1).
  34.  * tHIS MAPPING CORRESPONDS TO THE 82s100 TO 27512 ADAPTER MADE BY
  35.  * jENS sCH{$f6}NFELD (JENS@AMI.GA).  nOTE ALSO THE PERMUTATION OF OUTPUTS
  36.  * IN THE MAIN LOOP.
  37.  * (iN THE FIRST VERSION OF THIS PROGRAM, THE SIGNALS WERE NUMBERED
  38.  * FROM 0 TO 15, OR 0 TO 7, RESPECTIVELY.)
  39.  */
  40. /*@{$7b}*/
  41. #DEFINE cas_i(1)
  42. #DEFINE loram_i(2)
  43. #DEFINE hiram_i(3)
  44. #DEFINE charen_i(4)
  45. #DEFINE va14_i(5)
  46. #DEFINE a15i(6)
  47. #DEFINE a14i(7)
  48. #DEFINE a13i(12)
  49. #DEFINE a12i(14)
  50. #DEFINE bai(13)
  51. #DEFINE aec_i(8)
  52. #DEFINE r_w_i(9)
  53. #DEFINE exrom_i(11)
  54. #DEFINE game_i(15)
  55. #DEFINE va13i(10)
  56. #DEFINE va12i(0)
  57. /*@{$7d}*/
  58.  
  59. /** @NAME tHE OUTPUT SIGNALS OF THE cOMMODORE 64 pla.
  60.  * cONVERTED FROM
  61.  * HTTP://WWW.FUNET.FI/PUB/CBM/FIRMWARE/COMPUTERS/C64/PLA.TXT
  62.  * BY mARKO m{$e4}KEL{$e4} ON 2ND jULY 2002
  63.  * AND VERIFIED AGAINST A DUMP PROVIDED BY wILLIAM lEVAK.
  64.  * tHE EQUATIONS ARE IN CONJUNCTIVE NORMAL FORM (cnf).
  65.  * oPERATORS:!XNEGATION OF X: NOT X
  66.  * X {$7c}{$7c} YDISJUNCTION: X OR B
  67.  * X && YCONJUNCTION: X AND B
  68.  */
  69. /*@{$7b}*/
  70. /* casram_ */
  71. #DEFINE f0((loram_ && hiram_ && a15 && !a14 && a13 &&   \
  72.   !aec_ && r_w_ && game_) {$7c}{$7c}  \
  73.  (hiram_ && a15 && a14 && a13 &&  \
  74.   !aec_ && r_w_ && game_) {$7c}{$7c}  \
  75.  (hiram_ && a15 && a14 && a13 &&  \
  76.   !aec_ && r_w_ && !exrom_ && !game_) {$7c}{$7c}  \
  77.  (hiram_ && !charen_ && a15 && a14 && !a13 &&   \
  78.   a12 && !aec_ && r_w_ && game_) {$7c}{$7c}  \
  79.  (loram_ && !charen_ && a15 && a14 && !a13 &&   \
  80.   a12 && !aec_ && r_w_ && game_) {$7c}{$7c}  \
  81.  (hiram_ && !charen_ && a15 && a14 && !a13 &&   \
  82.   a12 && !aec_ && r_w_ && !exrom_ && !game_) {$7c}{$7c}  \
  83.  (va14_ && aec_ && game_ && !va13 && va12) {$7c}{$7c}  \
  84.  (va14_ && aec_ && !exrom_ && !game_ && !va13 && va12) {$7c}{$7c} \
  85.  (hiram_ && charen_ && a15 && a14 && !a13 &&   \
  86.   a12 && ba && !aec_ && r_w_ && game_) {$7c}{$7c}  \
  87.  (hiram_ && charen_ && a15 && a14 && !a13 &&   \
  88.   a12 && !aec_ && !r_w_ && game_) {$7c}{$7c}  \
  89.  (loram_ && charen_ && a15 && a14 && !a13 &&   \
  90.   a12 && ba && !aec_ && r_w_ && game_) {$7c}{$7c}  \
  91.  (loram_ && charen_ && a15 && a14 && !a13 &&   \
  92.   a12 && !aec_ && !r_w_ && game_) {$7c}{$7c}  \
  93.  (hiram_ && charen_ && a15 && a14 && !a13 &&   \
  94.   a12 && ba && !aec_ && r_w_ && !exrom_ && !game_) {$7c}{$7c}  \
  95.  (hiram_ && charen_ && a15 && a14 && !a13 &&   \
  96.   a12 && !aec_ && !r_w_ && !exrom_ && !game_) {$7c}{$7c}  \
  97.  (loram_ && charen_ && a15 && a14 && !a13 &&   \
  98.   a12 && ba && !aec_ && r_w_ && !exrom_ && !game_) {$7c}{$7c}  \
  99.  (loram_ && charen_ && a15 && a14 && !a13 &&   \
  100.   a12 && !aec_ && !r_w_ && !exrom_ && !game_) {$7c}{$7c}  \
  101.  (a15 && a14 && !a13 && a12 && ba &&   \
  102.   !aec_ && r_w_ && exrom_ && !game_) {$7c}{$7c}  \
  103.  (a15 && a14 && !a13 && a12 &&  \
  104.   !aec_ && !r_w_ && exrom_ && !game_) {$7c}{$7c}  \
  105.  (loram_ && hiram_ && a15 && !a14 && !a13 &&   \
  106.   !aec_ && r_w_ && !exrom_) {$7c}{$7c}  \
  107.  (a15 && !a14 && !a13 && !aec_ && exrom_ && !game_) {$7c}{$7c}  \
  108.  (hiram_ && a15 && !a14 && a13 && !aec_ &&   \
  109.   r_w_ && !exrom_ && !game_) {$7c}{$7c}  \
  110.  (a15 && a14 && a13 && !aec_ && exrom_ && !game_) {$7c}{$7c}  \
  111.  (aec_ && exrom_ && !game_ && va13 && va12) {$7c}{$7c}  \
  112.  (!a15 && !a14 && a12 && exrom_ && !game_) {$7c}{$7c}  \
  113.  (!a15 && !a14 && a13 && exrom_ && !game_) {$7c}{$7c}  \
  114.  (!a15 && a14 && exrom_ && !game_) {$7c}{$7c}  \
  115.  (a15 && !a14 && a13 && exrom_ && !game_) {$7c}{$7c}  \
  116.  (a15 && a14 && !a13 && !a12 && exrom_ && !game_) {$7c}{$7c}  \
  117.  cas_)
  118. /* basic_ */
  119. #DEFINE f1(!loram_ {$7c}{$7c} !hiram_ {$7c}{$7c} !a15 {$7c}{$7c} a14 {$7c}{$7c} !a13 {$7c}{$7c}\
  120.  aec_ {$7c}{$7c} !r_w_ {$7c}{$7c} !game_ )
  121. /* kernal_ */
  122. #DEFINE f2((!hiram_ {$7c}{$7c} !a15 {$7c}{$7c} !a14 {$7c}{$7c} !a13 {$7c}{$7c} aec_ {$7c}{$7c} \
  123.   !r_w_ {$7c}{$7c} !game_) &&\
  124.  (!hiram_ {$7c}{$7c} !a15 {$7c}{$7c} !a14 {$7c}{$7c} !a13 {$7c}{$7c} aec_ {$7c}{$7c} \
  125.   !r_w_ {$7c}{$7c} exrom_ {$7c}{$7c} game_ ))
  126. /* charom_ */
  127. #DEFINE f3((!hiram_ {$7c}{$7c} charen_ {$7c}{$7c} !a15 {$7c}{$7c} !a14 {$7c}{$7c} a13 {$7c}{$7c} \
  128.   !a12 {$7c}{$7c} aec_ {$7c}{$7c} !r_w_ {$7c}{$7c} !game_) &&\
  129.  (!loram_ {$7c}{$7c} charen_ {$7c}{$7c} !a15 {$7c}{$7c} !a14 {$7c}{$7c} a13 {$7c}{$7c} \
  130.   !a12 {$7c}{$7c} aec_ {$7c}{$7c} !r_w_ {$7c}{$7c} !game_) &&\
  131.  (!hiram_ {$7c}{$7c} charen_ {$7c}{$7c} !a15 {$7c}{$7c} !a14 {$7c}{$7c} a13 {$7c}{$7c} \
  132.   !a12 {$7c}{$7c} aec_ {$7c}{$7c} !r_w_ {$7c}{$7c} exrom_ {$7c}{$7c} game_) &&\
  133.  (!va14_ {$7c}{$7c} !aec_ {$7c}{$7c} !game_ {$7c}{$7c} va13 {$7c}{$7c} !va12) &&\
  134.  (!va14_ {$7c}{$7c} !aec_ {$7c}{$7c} exrom_ {$7c}{$7c} game_ {$7c}{$7c} va13 {$7c}{$7c} !va12))
  135. /* gr_w_ */
  136. #DEFINE f4(cas_ {$7c}{$7c} !a15 {$7c}{$7c} !a14 {$7c}{$7c} a13 {$7c}{$7c} !a12 {$7c}{$7c} aec_ {$7c}{$7c} r_w_)
  137. /* i_o_ */
  138. #DEFINE f5((!hiram_ {$7c}{$7c} !charen_ {$7c}{$7c} !a15 {$7c}{$7c} !a14 {$7c}{$7c} a13 {$7c}{$7c} \
  139.   !a12 {$7c}{$7c} !ba {$7c}{$7c} aec_ {$7c}{$7c} !r_w_ {$7c}{$7c} !game_) &&\
  140.  (!hiram_ {$7c}{$7c} !charen_ {$7c}{$7c} !a15 {$7c}{$7c} !a14 {$7c}{$7c} a13 {$7c}{$7c} \
  141.   !a12 {$7c}{$7c} aec_ {$7c}{$7c} r_w_ {$7c}{$7c} !game_) &&\
  142.  (!loram_ {$7c}{$7c} !charen_ {$7c}{$7c} !a15 {$7c}{$7c} !a14 {$7c}{$7c} a13 {$7c}{$7c} \
  143.   !a12 {$7c}{$7c} !ba {$7c}{$7c} aec_ {$7c}{$7c} !r_w_ {$7c}{$7c} !game_) &&\
  144.  (!loram_ {$7c}{$7c} !charen_ {$7c}{$7c} !a15 {$7c}{$7c} !a14 {$7c}{$7c} a13 {$7c}{$7c} \
  145.   !a12 {$7c}{$7c} aec_ {$7c}{$7c} r_w_ {$7c}{$7c} !game_) &&\
  146.  (!hiram_ {$7c}{$7c} !charen_ {$7c}{$7c} !a15 {$7c}{$7c} !a14 {$7c}{$7c} a13 {$7c}{$7c} \
  147.   !a12 {$7c}{$7c} !ba {$7c}{$7c} aec_ {$7c}{$7c} !r_w_ {$7c}{$7c} exrom_ {$7c}{$7c} \
  148.   game_) &&\
  149.  (!hiram_ {$7c}{$7c} !charen_ {$7c}{$7c} !a15 {$7c}{$7c} !a14 {$7c}{$7c} a13 {$7c}{$7c} \
  150.   !a12 {$7c}{$7c} aec_ {$7c}{$7c} r_w_ {$7c}{$7c} exrom_ {$7c}{$7c} game_) &&\
  151.  (!loram_ {$7c}{$7c} !charen_ {$7c}{$7c} !a15 {$7c}{$7c} !a14 {$7c}{$7c} a13 {$7c}{$7c} \
  152.   !a12 {$7c}{$7c} !ba {$7c}{$7c} aec_ {$7c}{$7c} !r_w_ {$7c}{$7c} exrom_ {$7c}{$7c} \
  153.   game_) &&\
  154.  (!loram_ {$7c}{$7c} !charen_ {$7c}{$7c} !a15 {$7c}{$7c} !a14 {$7c}{$7c} a13 {$7c}{$7c} \
  155.   !a12 {$7c}{$7c} aec_ {$7c}{$7c} r_w_ {$7c}{$7c} exrom_ {$7c}{$7c} game_) &&\
  156.  (!a15 {$7c}{$7c} !a14 {$7c}{$7c} a13 {$7c}{$7c} !a12 {$7c}{$7c} !ba {$7c}{$7c} \
  157.   aec_ {$7c}{$7c} !r_w_ {$7c}{$7c} !exrom_ {$7c}{$7c} game_) &&\
  158.  (!a15 {$7c}{$7c} !a14 {$7c}{$7c} a13 {$7c}{$7c} !a12 {$7c}{$7c} aec_ {$7c}{$7c} \
  159.   r_w_ {$7c}{$7c} !exrom_ {$7c}{$7c} game_ ))
  160. /* roml_ */
  161. #DEFINE f6((!loram_ {$7c}{$7c} !hiram_ {$7c}{$7c} !a15 {$7c}{$7c} a14 {$7c}{$7c} a13 {$7c}{$7c}\
  162.   aec_ {$7c}{$7c} !r_w_ {$7c}{$7c} exrom_) &&\
  163.  (!a15 {$7c}{$7c} a14 {$7c}{$7c} a13 {$7c}{$7c} aec_ {$7c}{$7c} !exrom_ {$7c}{$7c} game_))
  164. /* romh_ */
  165. #DEFINE f7((!hiram_ {$7c}{$7c} !a15 {$7c}{$7c} a14 {$7c}{$7c} !a13 {$7c}{$7c}\
  166.   aec_ {$7c}{$7c} !r_w_ {$7c}{$7c} exrom_ {$7c}{$7c} game_ ) &&\
  167.  (!a15 {$7c}{$7c} !a14 {$7c}{$7c} !a13 {$7c}{$7c} aec_ {$7c}{$7c} !exrom_ {$7c}{$7c} game_) &&\
  168.  (!aec_ {$7c}{$7c} !exrom_ {$7c}{$7c} game_ {$7c}{$7c} !va13 {$7c}{$7c} !va12))
  169. /*@{$7d}*/
  170.  
  171. /** tHE MAIN PROGRAM
  172.  * @PARAM ARGCCOMMAND LINE ARGUMENT COUNT
  173.  * @PARAM ARGVCOMMAND LINE ARGUMENT VECTOR
  174.  * @RETURNZERO ON SUCCESSFUL TERMINATION
  175.  */
  176. INT
  177. MAIN (INT ARGC, CHAR** ARGV)
  178. {$7b}
  179.   /** tHE INPUT COMBINATION, AT LEAST 16 BITS */
  180.   REGISTER UNSIGNED INT I = 0;
  181.   DO {$7b}
  182.     /** tHE OUTPUT COMBINATION, 8 BITS */
  183.     REGISTER UNSIGNED CHAR O = 0;
  184.     /* tHE OUTPUTS ARE PERMUTED SO THAT THEY CORRESPOND TO THE ADAPTER
  185.      * MADE BY jENS sCH{$f6}NFELD.
  186.      */
  187.     IF (f0) O {$7c}= 1 << 6;
  188.     IF (f1) O {$7c}= 1 << 5;
  189.     IF (f2) O {$7c}= 1 << 4;
  190.     IF (f3) O {$7c}= 1 << 3;
  191.     IF (f4) O {$7c}= 1 << 2;
  192.     IF (f5) O {$7c}= 1 << 1;
  193.     IF (f6) O {$7c}= 1 << 0;
  194.     IF (f7) O {$7c}= 1 << 7;
  195.     PUTCHAR (O);
  196.   {$7d}
  197.   WHILE (++I & 0XFFFF);
  198.   RETURN 0;
  199. {$7d}
  200.