Hallo!

Kannst auch einen EPROM nehmen. Dem beschreibst du jede Speicherstelle zu den Adressleitungen so geschickt das du nacher eine Logik hast, hab ich auch einmal gemacht. Es geht wirklich. Dann hast du die Adressleitungen als Eingänge (je nach Grösse des EPROMS) und die Datenleitungen als Ausgänge (eben nur 8 ). Denke nur das ist auch eine interessante Alternative zu einem GAL wenn man keinen GAL-Programmierer hat sondern nur einen EPROM-Brenner wie ich damals

Das ist das Programm das ich damals geschrieben hatte unter QB 4.5 und es erzeugt durch die logischen Bedingungen am Anfang eine Logik für einen EPROM. Also ein HEX-File.

Code:
  'EPROM-Typ definieren
  EPROM.Max = 8191

  'ORG-Anweisung schreiben
  OPEN "c:\Ergebnis.DAT" FOR OUTPUT AS #1
  PRINT #1, "  .ORG 0"
  CLOSE #1

  ByteCounter = 1
  First = 1
 
  CLS
 
  FOR Adresse = 0 TO EPROM.Max
   
    LOCATE 1, 1
    PRINT "Errechnete Bedingungen:"; (INT(((100 / 8191) * Adresse * 10)) / 10); "%   "
   
    'Aktuelle Adress-Bits errechnen
    n = 1
    Test = Adresse AND n: n = n * 2
    IF Test > 0 THEN A0 = 1 ELSE A0 = 0
    Test = Adresse AND n: n = n * 2
    IF Test > 0 THEN A1 = 1 ELSE A1 = 0
    Test = Adresse AND n: n = n * 2
    IF Test > 0 THEN A2 = 1 ELSE A2 = 0
    Test = Adresse AND n: n = n * 2
    IF Test > 0 THEN A3 = 1 ELSE A3 = 0
    Test = Adresse AND n: n = n * 2
    IF Test > 0 THEN A4 = 1 ELSE A4 = 0
    Test = Adresse AND n: n = n * 2
    IF Test > 0 THEN A5 = 1 ELSE A5 = 0
    Test = Adresse AND n: n = n * 2
    IF Test > 0 THEN A6 = 1 ELSE A6 = 0
    Test = Adresse AND n: n = n * 2
    IF Test > 0 THEN A7 = 1 ELSE A7 = 0
    Test = Adresse AND n: n = n * 2
    IF Test > 0 THEN A8 = 1 ELSE A8 = 0
    Test = Adresse AND n: n = n * 2
    IF Test > 0 THEN A9 = 1 ELSE A9 = 0
    Test = Adresse AND n: n = n * 2
    IF Test > 0 THEN A10 = 1 ELSE A10 = 0
    Test = Adresse AND n: n = n * 2
    IF Test > 0 THEN A11 = 1 ELSE A11 = 0
    Test = Adresse AND n: n = n * 2
    IF Test > 0 THEN A12 = 1 ELSE A12 = 0
  
    'Eing„nge definieren
    MasterRxD = A0
    Slave1RxD = A1
    Slave2RxD = A2
    Slave3RxD = A3
    Slave4RxD = A4
    MCRxD = A5
    SelectA = A6
    SelectB = A7
    TF1Send = A8
    
    'Ausg„nge vordefinieren bei FALSE
    MasterTxD = 0
    Slave1TxD = 0
    Slave2TxD = 0
    Slave3TxD = 0
    Slave4TxD = 0
    MCTxD = 0
  
    'Logische Gleichung im EPROM (GAL/PAL-Logik)
   
    'Abzweigung zum Microcontroller
    MCTxD = MasterRxD

    'Oberer 4-fach Schalter
    IF SelectA = 0 AND SelectB = 0 AND MasterRxD = 1 THEN
        Slave1TxD = 1
      ELSE
        Slave1TxD = 0
    END IF
    IF SelectA = 1 AND SelectB = 0 AND MasterRxD = 1 THEN
        Slave2TxD = 1
      ELSE
        Slave2TxD = 0
    END IF
    IF SelectA = 0 AND SelectB = 1 AND MasterRxD = 1 THEN
        Slave3TxD = 1
      ELSE
        Slave3TxD = 0
    END IF
    IF SelectA = 1 AND SelectB = 1 AND MasterRxD = 1 THEN
        Slave4TxD = 1
      ELSE
        Slave4TxD = 0
    END IF
   
    'Unterer 4-fach Schalter
    IF SelectA = 0 AND SelectB = 0 AND Slave1RxD = 1 THEN
        Port9 = 1
      ELSE
        Port9 = 0
    END IF
    IF SelectA = 1 AND SelectB = 0 AND Slave2RxD = 1 THEN
        Port9 = 1
      ELSE
        Port9 = 0
    END IF
    IF SelectA = 0 AND SelectB = 1 AND Slave3RxD = 1 THEN
        Port9 = 1
      ELSE
        Port9 = 0
    END IF
    IF SelectA = 1 AND SelectB = 1 AND Slave4RxD = 1 THEN
        Port9 = 1
      ELSE
        Port9 = 0
    END IF

    'Umschalter programmieren
    IF Port9 = 1 AND TF1Send = 1 THEN
        MasterTxD = 1
      ELSE
        MasterTxD = 0
    END IF
    IF MCRxD = 1 AND TF1Send = 0 THEN
        MasterTxD = 1
      ELSE
        MasterTxD = 0
    END IF

    'Ausg„nge definieren
    D0 = MasterTxD
    D1 = Slave1TxD
    D2 = Slave2TxD
    D3 = Slave3TxD
    D4 = Slave4TxD
    D5 = MCRDI
    D6 = 1
    D7 = 1

    'Ausg„nge errechnen
    Datenbyte = 0
    IF D0 > 0 THEN Datenbyte = Datenbyte + 1
    IF D1 > 0 THEN Datenbyte = Datenbyte + 2
    IF D2 > 0 THEN Datenbyte = Datenbyte + 4
    IF D3 > 0 THEN Datenbyte = Datenbyte + 8
    IF D4 > 0 THEN Datenbyte = Datenbyte + 16
    IF D5 > 0 THEN Datenbyte = Datenbyte + 32
    IF D6 > 0 THEN Datenbyte = Datenbyte + 64
    IF D7 > 0 THEN Datenbyte = Datenbyte + 128

    'Ausgangsbyte in Datei schreiben
   
    'Format:
    '-------
    '  .ORG Startadresse
    '  .BYTE Wert
    '  ...

    OPEN "c:\Ergebnis.DAT" FOR APPEND AS #1
    Wert$ = LTRIM$(STR$(Datenbyte))
    PRINT #1, "  .BYTE " + Wert$
    CLOSE #1

  NEXT Adresse
                           
  OPEN "c:\ERGEBNIS.DAT" FOR APPEND AS #1
  PRINT #1, "  .END "
  CLOSE #1
 
  END
Grüsse Wolfgang