Name PDP11_SB; Assembly 0001; Revision 1.8; PartNo U8 ATF1508AS; Device f1508ispplcc84; Company S100Computers.com; Designer John Monahan; Location CA,San Ramon; Date 1/23/2018; property ATMEL { xor_synthesis=on }; property ATMEL { logic_doubling=on }; property ATMEL { jtag=on }; PROPERTY ATMEL { preassign keep }; PROPERTY ATMEL { TMS_pullup=on }; PROPERTY ATMEL { TDI_pullup=on }; /* PDP-11 SUPPORT BOARD (V2.2) CPLD IS SETUP TO RUN WITH PDP11 CPU BOARD * * >> REMEMBER ALL I/O PORTS FROM THE CPU ARE IN THE RANGE E000-FFFF. THEY ARRIVE ON THIS BOARD AS 0000H - 1FFFH <<< * * V1.5 ; 10/11/2017 All 4 UART Interrupts working (V1.5 Prototype board) * V1.7a ; 11/19/2017 Moved a lot of the 74LSxx circuits into the CPLD * V1.7b ; 11/20/2017 Added Printer support * V1.8 ; 11/6/2017 Minor changes fot V1.8 Board * V1.81 ; 12/17/2017 Printer output with strobe (only) * V2.1a ; 12/28/2017 ODT & TU58 UARTs onboard. No timer * V2.2b ; 12/28/2017 Back to onboard FF's instead of CPLD code */ Pin 83 = bpSYNC; Pin 2 = Phi; /* S100 bus Phi Clock. Currently unused */ Pin 81 = NC1; /* Unused */ pin 4 = TU58_RCV_STATUS_WRITE; /* Active HIGH */ Pin 5 = TU58_RCV_STATUS_READ; Pin 6 = TU58_DRR; Pin 8 = TU58_HIGH_DRR; Pin 9 = TU58_XMT_STATUS_WRITE; /* Active HIGH */ Pin 10 = TU58_XMT_STATUS_READ; Pin 11 = TU58_TBRL; Pin 15 = HIGH_STATUS_READ; pin 16 = CON_RCV_STATUS_WRITE; /* Active HIGH */ Pin 17 = CON_RCV_STATUS_READ; Pin 18 = CON_DRR; Pin 20 = CON_HIGH_DRR; Pin 21 = CON_XMT_STATUS_WRITE; /* Active HIGH */ Pin 22 = CON_XMT_STATUS_READ; Pin 24 = CON_TBRL; Pin 25 = P26; /* Spare */ Pin 27 = LP11_STATUS_WRITE; /* Active HIGH */ Pin 28 = LP11_STATUS_READ; Pin 29 = LP11_PRINT_WRITE; Pin 30 = LP11_STATUS_HIGH_READ; Pin 31 = LP11_STROBE; Pin 33 = P29; Pin 34 = bsINP; Pin 35 = bsOUT; Pin 36 = bpDBIN; Pin 37 = DELAYED_bpWR; Pin 39 = bpWR; Pin 40 = bSIXTN; Pin 41 = bsXTRQ; Pin 44 = OE_C; /* Active Low */ Pin 46 = OE_B; /* Active Low */ Pin 48 = OE_D; /* Active Low */ Pin 49 = bsINTA; /* Active Low */ Pin 50 = S0; Pin 51 = S1; Pin 52 = S2; Pin 54 = bA15; Pin 55 = bA14; Pin 56 = bA13; Pin 57 = bA12; Pin 58 = bA11; Pin 60 = bA10; Pin 61 = bA9; Pin 63 = bA8; Pin 64 = bA7; Pin 65 = bA6; Pin 67 = bA5; Pin 68 = bA4; Pin 69 = bA3; Pin 70 = bA2; Pin 73 = bA1; Pin 74 = bA0; Pin 75 = NC2; Pin 76 = NC3; Pin 77 = NC4; Pin 79 = CPU_UART_RCV_READY; /* Active HIGH */ Pin 80 = CPU_UART_XMT_READY; /* Active LOW */ Pin 84 = TMAx; Pin 1 = bRESET; /* S100 Bus reset. Active LOW */ Pin 12 = BOARD_SELECT; /* Active LOW */ Pin 45 = DIAG_LED1; /* Active LOW */ Pinnode = CON_UART_ADDRESS; Pinnode = TU58_UART_ADDRESS; Pinnode = PRINTER_BASE_PORT; !TU58_UART_ADDRESS = !bA15 & !bA14 & !bA13 & bA12 /*(3F)F -> 01 */ & bA11 & bA10 & bA9 & bA8 /* F -> F */ & !bA7 & bA6 & !bA5 & !bA4 & !bA3 & (bsOUT # bsINP) & !TMAx & !bpSYNC; /* 40 -47 */ !CON_UART_ADDRESS = !bA15 & !bA14 & !bA13 & bA12 /* (3F)01 */ & bA11 & bA10 & bA9 & bA8 /* F -> F */ & !bA7 & bA6 & bA5 & bA4 & !bA3 & (bsOUT # bsINP) & !TMAx & !bpSYNC; /* 70 - 77 */ !PRINTER_BASE_PORT = !bA15 & !bA14 & !bA13 & bA12 /* (3F)F -> 01 */ & bA11 & bA10 & bA9 & bA8 /* F -> F */ & !bA7 & bA6 & !bA5 & !bA4 & bA3 & (bsOUT # bsINP) & !TMAx & !bpSYNC; /* 4C-4F */ !BOARD_SELECT = !TU58_UART_ADDRESS # !CON_UART_ADDRESS # !PRINTER_BASE_PORT; /* >>>>>>>>>> TU58 UART <<<<<<<<*/ TU58_RCV_STATUS_WRITE = !TU58_UART_ADDRESS & !bA2 & !bA1 & !bA0 & bsOUT & !DELAYED_bpWR; /* BYTE/WORD 1F40H */ !TU58_RCV_STATUS_READ = !TU58_UART_ADDRESS & !bA2 & !bA1 & !bA0 & bsINP & bpDBIN; /* BYTE/WORD 1F40H */ !TU58_RCV_STATUS_HIGH_READ = !TU58_UART_ADDRESS & !bA2 & !bA1 & bA0 & bsINP & bpDBIN; /* BYTE 1F41H */ !TU58_DRR = !TU58_UART_ADDRESS & !bA2 & bA1 & !bA0 & bsINP & bpDBIN; /* [DATA] BYTE/WORD 1F42H */ !TU58_HIGH_DRR = ((!TU58_UART_ADDRESS & !bA2 & bA1 & bA0 & bsXTRQ & bsINP & bpDBIN) /* BYTE 1F43H */ # (!TU58_UART_ADDRESS & !bA2 & bA1 & !bA0 & !bsXTRQ & bsINP & bpDBIN)); /* WORD 1F42H */ TU58_XMT_STATUS_WRITE = !TU58_UART_ADDRESS & bA2 & !bA1 & !bA0 & bsOUT & !bpWR; /* BYTE/WORD 1F44H */ !TU58_XMT_STATUS_READ = !TU58_UART_ADDRESS & bA2 & !bA1 & !bA0 & bsINP & bpDBIN; /* LOW BYTE or WORD READ 1F44H */ !TU58_TBRL = !TU58_UART_ADDRESS & bA2 & bA1 & !bA0 & bsOUT & !bpWR; /* [DATA] BYTE/WORD 1F46H */ /* >>>>>>>>>> ODT CONSOLE UART <<<<<<<<*/ CON_RCV_STATUS_WRITE = !CON_UART_ADDRESS & !bA2 & !bA1 & !bA0 & bsOUT & !DELAYED_bpWR; /* BYTE/WORD 1F70H */ !CON_RCV_STATUS_READ = !CON_UART_ADDRESS & !bA2 & !bA1 & !bA0 & bsINP & bpDBIN; /* BYTE/WORD 1F70H */ !CON_RCV_STATUS_HIGH_READ = !CON_UART_ADDRESS & !bA2 & !bA1 & bA0 & bsINP & bpDBIN; /* BYTE 1F71H */ !CON_DRR = !CON_UART_ADDRESS & !bA2 & bA1 & !bA0 & bsINP & bpDBIN; /* [DATA] BYTE/WORD 1F72H */ !CON_HIGH_DRR = ((!CON_UART_ADDRESS & !bA2 & bA1 & bA0 & bsXTRQ & bsINP & bpDBIN) /* BYTE 1F73H */ # (!CON_UART_ADDRESS & !bA2 & bA1 & !bA0 & !bsXTRQ & bsINP & bpDBIN)); /* WORD 1F72H */ CON_XMT_STATUS_WRITE = !CON_UART_ADDRESS & bA2 & !bA1 & !bA0 & bsOUT & !bpWR; /* BYTE/WORD 1F74H */ !CON_XMT_STATUS_READ = !CON_UART_ADDRESS & bA2 & !bA1 & !bA0 & bsINP & bpDBIN; /* LOW BYTE or WORD READ 1F74H */ !CON_TBRL = !CON_UART_ADDRESS & bA2 & bA1 & !bA0 & bsOUT & !bpWR; /* [DATA] BYTE/WORD 1F76H */ /* >>>>>>>>>> LP11 PRINTER <<<<<<<<*/ LP11_STATUS_WRITE = !PRINTER_BASE_PORT & bA2 & !bA1 & !bA0 & bsOUT & !DELAYED_bpWR; /* BYTE/WORD 1F4CH */ !LP11_STATUS_READ = !PRINTER_BASE_PORT & bA2 & !bA1 & !bA0 & bsINP & bpDBIN; /* BYTE/WORD 1F4CH */ !LP11_STATUS_HIGH_READ = !PRINTER_BASE_PORT & bA2 & !bA1 & bA0 & bsINP & bpDBIN; /* BYTE/WORD 1F4DH */ LP11_PRINT_WRITE = !PRINTER_BASE_PORT & bA2 & bA1 & !bA0 & bsOUT & !bpWR; /* BYTE/WORD 1F4EH */ LP11_STROBE = !PRINTER_BASE_PORT & bA2 & bA1 & bA0 & bsOUT & !bpWR; /* BYTE 1F4FH */ !HIGH_STATUS_READ = ((!TU58_UART_ADDRESS & bA2 & !bA1 & bA0 & bsXTRQ & bsINP & bpDBIN) /* HIGH BYTE READ 1F45 */ # (!TU58_UART_ADDRESS & bA2 & !bA1 & !bA0 & !bsXTRQ & bsINP & bpDBIN) /* HIGH WORD READ 1F44 */ # (!CON_UART_ADDRESS & bA2 & !bA1 & bA0 & bsXTRQ & bsINP & bpDBIN) /* HIGH BYTE READ 1F75 */ # (!CON_UART_ADDRESS & bA2 & !bA1 & !bA0 & !bsXTRQ & bsINP & bpDBIN)); /* HIGH WORD READ 1F74 */ Pinnode = RD8; Pinnode = RD16; Pinnode = WR8; Pinnode = WR16; !RD8 = bpDBIN & bsXTRQ & !BOARD_SELECT; /* Always a 16 bit READ on PDP11, (Used for Z80 etc.) */ !RD16 = bpDBIN & !bsXTRQ & !BOARD_SELECT; /* bsXTRQ will be LOW if 16 bit data read */ !WR8 = !bpWR & bsXTRQ & !BOARD_SELECT; /* Note, Delayed_bpWR in active HIGH */ !WR16 = !bpWR & !bsXTRQ & !BOARD_SELECT; !OE_C = !WR16 # !RD16; /* U13, C* */ !OE_B = ((!WR8 & !bA0) /* U15, B* */ # !WR16 # !RD16); !OE_D = !WR8 & bA0; /* U25, D* */ !bSIXTN = !bsXTRQ & !BOARD_SELECT & !bpSYNC; /* Acknowledge we can do 16 bit data transfers, Active low */