home *** CD-ROM | disk | FTP | other *** search
/ CBM Funet Archive / cbm-funet-archive-2003.iso / cbm / firmware / computers / b / pla-lp-906114-4.c < prev    next >
Encoding:
C/C++ Source or Header  |  2003-06-09  |  3.4 KB  |  115 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 9TH jULY 2003, BASED ON A VERSION FROM 2ND jULY 2002
  6.  * tHE EQUATIONS IN THIS PROGRAM HAVE BEEN TRANSLATED FROM THE
  7.  * machxl DESIGN DESCRIPTION SUPPLIED BY jENS sCH{$f6}NFELD (JENS@AMI.GA),
  8.  * AND VERIFIED AGAINST THE 64-KILOBYTE DUMPS SUPPLIED BY jENS sCH{$f6}NFELD.
  9.  *
  10.  * cOMPILATION:
  11.  *CC -O PLA 906114-4.C
  12.  * eXAMPLE USAGE:
  13.  *./PLA {$7c} DIFF - PLA-DUMP.BIN
  14.  * OR
  15.  *./PLA > PLA-DUMP.BIN
  16.  */
  17.  
  18. #INCLUDE <STDIO.H>
  19.  
  20. /** eXTRACT AN INPUT BIT
  21.  * @PARAM BTHE BIT TO BE EXTRACTED
  22.  * @RETURNNONZERO IF THE INPUT BIT B IS SET
  23.  */
  24. #DEFINE i(B) (!!((I) & (1 << B)))
  25.  
  26. /** @NAME tHE INPUT SIGNALS.
  27.  * tHIS MAPPING CORRESPONDS TO THE 82s100 TO 27512 ADAPTER MADE BY
  28.  * jENS sCH{$f6}NFELD (JENS@AMI.GA).  nOTE ALSO THE PERMUTATION OF OUTPUTS
  29.  * IN THE MAIN LOOP.
  30.  */
  31. /*@{$7b}*/
  32. #DEFINE i0i(1)
  33. #DEFINE i1i(2)
  34. #DEFINE i2i(3)
  35. #DEFINE i3i(4)
  36. #DEFINE i4i(5)
  37. #DEFINE i5i(6)
  38. #DEFINE rasi(7)
  39. #DEFINE casi(12)
  40. #DEFINE refeni(14)
  41. #DEFINE ecasi(13)
  42. #DEFINE erasi(8)
  43. #DEFINE busy2i(9)
  44. #DEFINE bp3i(11)
  45. #DEFINE bp2i(15)
  46. #DEFINE bp1i(10)
  47. #DEFINE bp0i(0)
  48. /*@{$7d}*/
  49.  
  50. /** @NAME tHE OUTPUT SIGNALS. */
  51. /*@{$7b}*/
  52. /* ras1 */
  53. #DEFINE f1 !((!bp3 && !bp2 && !bp1 &&  bp0 &&  !ras && busy2){$7c}{$7c}\
  54.      (!ras && busy2 &&  refen){$7c}{$7c}\
  55.      (!bp3 && !bp2 && !bp1 &&  bp0 && !eras &&  !busy2){$7c}{$7c}\
  56.      (!eras &&  !busy2 &&  refen))
  57. /*ras2*/
  58. #DEFINE f2 !((!bp3 && !bp2 &&  bp1 && !bp0 &&  !ras && busy2){$7c}{$7c}\
  59.      (!ras && busy2 &&  refen){$7c}{$7c}\
  60.      (!bp3 && !bp2 &&  bp1 && !bp0 && !eras &&  !busy2){$7c}{$7c}\
  61.      (!eras &&  !busy2 &&  refen))
  62. /*ras3*/
  63. #DEFINE f7 !((!bp3 && !bp2 &&  bp1 &&  bp0 &&  !ras && busy2){$7c}{$7c}\
  64.      (!ras && busy2 &&  refen){$7c}{$7c}\
  65.      (!bp3 && !bp2 &&  bp1 &&  bp0 && !eras &&  !busy2){$7c}{$7c}\
  66.      (!eras &&  !busy2 &&  refen))
  67. /*ras4*/
  68. #DEFINE f4 !((!bp3 &&  bp2 && !bp1 && !bp0 &&  !ras && busy2){$7c}{$7c}\
  69.      (!ras && busy2 &&  refen){$7c}{$7c}\
  70.      (!bp3 &&  bp2 && !bp1 && !bp0 && !eras &&  !busy2){$7c}{$7c}\
  71.      (!eras &&  !busy2 &&  refen))
  72. /*cas1*/
  73. #DEFINE f0 !((!bp3 && !bp2 && !bp1 &&  bp0 &&  !cas && busy2 && !refen){$7c}{$7c}  \
  74.      (!bp3 && !bp2 && !bp1 &&  bp0 && !ecas &&  !busy2 && !refen))
  75. /*cas2*/
  76. #DEFINE f3 !((!bp3 && !bp2 &&  bp1 && !bp0 &&  !cas && busy2 && !refen){$7c}{$7c}  \
  77.      (!bp3 && !bp2 &&  bp1 && !bp0 && !ecas &&  !busy2 && !refen))
  78. /*cas3*/
  79. #DEFINE f6 !((!bp3 && !bp2 &&  bp1 &&  bp0 &&  !cas && busy2 && !refen){$7c}{$7c}  \
  80.      (!bp3 && !bp2 &&  bp1 &&  bp0 && !ecas &&  !busy2 && !refen))
  81. /*cas4*/
  82. #DEFINE f5 !((!bp3 &&  bp2 && !bp1 && !bp0 &&  !cas && busy2 && !refen){$7c}{$7c}  \
  83.      (!bp3 &&  bp2 && !bp1 && !bp0 && !ecas &&  !busy2 && !refen))
  84. /*@{$7d}*/
  85.  
  86. /** tHE MAIN PROGRAM
  87.  * @PARAM ARGCCOMMAND LINE ARGUMENT COUNT
  88.  * @PARAM ARGVCOMMAND LINE ARGUMENT VECTOR
  89.  * @RETURNZERO ON SUCCESSFUL TERMINATION
  90.  */
  91. INT
  92. MAIN (INT ARGC, CHAR** ARGV)
  93. {$7b}
  94.   /** tHE INPUT COMBINATION, AT LEAST 16 BITS */
  95.   REGISTER UNSIGNED INT I = 0;
  96.   DO {$7b}
  97.     /** tHE OUTPUT COMBINATION, 8 BITS */
  98.     REGISTER UNSIGNED CHAR O = 0;
  99.     /* tHE OUTPUTS ARE PERMUTED SO THAT THEY CORRESPOND TO THE ADAPTER
  100.      * MADE BY jENS sCH{$f6}NFELD.
  101.      */
  102.     IF (f0) O {$7c}= 1 << 6;
  103.     IF (f1) O {$7c}= 1 << 5;
  104.     IF (f2) O {$7c}= 1 << 4;
  105.     IF (f3) O {$7c}= 1 << 3;
  106.     IF (f4) O {$7c}= 1 << 2;
  107.     IF (f5) O {$7c}= 1 << 1;
  108.     IF (f6) O {$7c}= 1 << 0;
  109.     IF (f7) O {$7c}= 1 << 7;
  110.     PUTCHAR (O);
  111.   {$7d}
  112.   WHILE (++I & 0XFFFF);
  113.   RETURN 0;
  114. {$7d}
  115.