Close
0%
0%

Stuart Conner's Simple TMS9995 board build

Stuart Conner's Simple TMS9995 board build

Similar projects worth following
Stuart Conner's Simple TMS9995 board, slightly modified.

Modifications:

  • Low-height crystal is less vulnerable to knocks
  • Uses FTDI TTL-to-USB cable instead of MAX232 chip and capacitors
  • PC104 expansion connector

TMS9995_EVMBUG_FORTH_BASIC.txt

A file you can assemble online to get the 64K switch-selectable FORTH/BASIC firmware.

plain - 237.63 kB - 10/12/2022 at 19:27

Download

TMS9995-ROM.txt.bin

64K ROM image with Forth then BASIC, so one can select by switching during reset.

octet-stream - 64.00 kB - 10/11/2022 at 23:37

Download

  • Cortex User Group News Letters

    Keith11/27/2022 at 20:38 0 comments

    These might be useful as a source of example programs. Most of them rely on graphics, or Cortex hardware, so few are good for my text-only board. Oh well, at least this index will be of interest to Cortex users.

    Issues 1, 5 and 8 have not appeared on the internet yet. 

    1. Not available yet

    2. ETI Cortex Users Group News Letter 2

      • Editorial
      • Terminal emulator program extension
      • Gaming keys routine
      • BASIC sprite designing progran
      • Bell modification
      • Better use of graphics mode
      • Bullet-proofing RAM in software
      • Quad-speed saving and loading
      • Centronics printer spooler
      • Useful routine addresses
      • Lower case generation program
      • Automatic movement of sprites
      • 3D graphing
      • Multicolour mode
      • Monitor tip
      • Character definition program
      • Calendars
      • Cortex article from PCN December 1984
    3. ETI Cortex Users Group News Letter 3

      • Cortex Tips
      • Programs
        • Keyboard reading and Scrolling
        • Flashing cursor
        • Adding new commands
        • Shares
        • Multicolour mode
        • Machine code loader
        • Shape
      • Bug Bytes - Your problems and solutions
      • Corrections to newsletter 2
      • Cortex software scene
      • Order Form
      • Markrosoft advert
      • External video board for the Cortex
      • Floppy Disk Controller parts list
    4. ETI Cortex Users Group News Letter 4

      • Programs sent in by users
      • Competition and User Info
      • Your problems and solutions - Bug Bytes
      • Programming Tips
      • Software Scene
      • Cortex Hardware
      • Order Form
      • Subscription form and questionnaire
    5. Not available yet

    6. ETI Cortex Users Group News Letter 6

      • EDITORIAL News, future products, and new software/hardware
      • BUG BYTES Problems in Cortex hardware and programming
      • PROGRAMS
        • CDOS modification
        • 2D plane plotter Automatic
        • List Directory
      • USER INFO Your requests and information exchange
      • FEATURE Adding extra BASIC statements
      • SHORT TIFS Programming and hardware tips
      • MACHINE CODE Part two : Addressing modes
      • USERS ADVERT
      • EXTRA FEATURE Generating magic squares
    7. ETI Cortex Users Group News Letter 7

      • EDITORIAL Software and Hardware News
      • BUG BYTES Problems in Cortex hardware/programming
      • PROGRAMS
        • Rotating 3D pyramid
        • CDOS modifications
        • Fractals
        • List Directory
      • USER INFO Your requests and information exchange
      • FEATURE Cassette Interface Modifications
      • SHORT TIPS Programming and hardware suggestions
      • MACHINE CODE Part three: Arithmetic and Logical operations
      • USERS ADVERT
    8. Not available yet

    9. ETI Cortex Users Group News Letter 9

      • Editorial (The future of the user group)
      • Programs
      • Hardware
      • Short tips
      • Feature (DIR statement)
      • Points to note
      • User adverts
    10. ETI Cortex Users Group News Letter 10

      • Editorial note
      • Letters
      • Variable listing program
      • More on Disk Inspect
      • Basic programs in EPROM
      • Extra system ROM
      • Better data separator
      • Short Tips
    11. ETI Cortex Users Group News Letter 11

      • Letters
      • Editorial
      • Programme (solving linear equations)
      • More on Disk files
      • Getting onto E.Bus part 2
      • STAR EPROM
      • Hardware modifications
      • Composite video buffer
    12. ETI Cortex Users Group News Letter 12

      • Errata / News
      • Programme (PDIR Directory print utility)
      • Centronics printer port mod
      • Keys programme update
      • MDEX utilities information
      • 256K memory mod
      • Small characters in graph programme
      • Parallel plus serial I/O port
      • Keyboard mods
      • R.M. Lee 2-pass assembler update
    13. ETI Cortex Users Group News Letter 13

      • Letters
      • Sound generator
      • Programme (Sort directory)
      • Programme (Double density disk inspect)
      • Programme (PCB Plotting)
      • Getting onto E.Bus part 3
    14. ETI Cortex Users Group News Letter 14

      • Editorial
      • Programming the V.D.P.
      • Programme (3D bar graph)
    15. ETI Cortex Users Group News Letter 15

      • Programme (Missile Command)
      • Programme (Canyon)
      • Programme (Ramdisc format utility)
      • Programme (Diskname utility)
      • Programme (Disk verify utility)
      • Feature MDEX disk operating system
      • Feature using QBASIC part one
      • 9938 VDP interface
      • Extending E. Bus memory
      • Mouse - Keyboard interface
    16. ETI Cortex Users Group News Letter 16

      • Letters
      • Editorial
      • Programme (Paint and Dump changes)
      • Double stepping disk drives
      • Control keys programme
      • MDEX information
      • QBASIC part 2
      • Adverts etc.
    17. ETI Cortex...

    Read more »

  • Expansion connector

    Keith11/27/2022 at 19:06 0 comments

    Pinout

    nc140A15/CRUOUT
    nc239A14
    CLKOUT338A13
    D7437A12
    D6536A11
    D5635A10
    D4734A9
    D3833A8
    D2932A7
    VCC1031VSS
    D11130A6
    D01229A5
    CRUIN1328A4
    !INT4/EC1427A3
    !INT11526A2
    IAQ/HOLDA1625A1
    !DBIN1724A0
    !HOLD1823READY
    !WE/!CRUCLK1922!RESET
    !MEMEN2021!NMI

    Pinout matches the TMS9995 CPU apart from pins 1 and 2 which are connected to the crystal on the CPU. If you wanted to drive the CPU from an external clock source, then you could wire pin 2 from the connector to the CPU.

    Signals

    A0...15 are like A15...0 of the Z80
    !MEMEN is like !MREQ of the Z80
    !WE    is like !WR of the Z80
    !DBIN  is like !RD of the Z80
    !HOLD  is like !BUSRQ of the Z80
    HOLDA  is like !BUSAK of the Z80 (but inverted)
    READY  is like !WAIT of the Z80

    The signal names look strange at first but have conventional equivalents.

  • The Communication Register Unit Interface

    Keith10/16/2022 at 22:20 0 comments

    The TMS9995 is an extremely quirky processor. 

    The Communication Register Unit interface is arguably the weirdest feature. It is a serial I/O interface to peripheral chips.

    Memory space is byte-addressable, but CRU space is bit-addressable. A desired device is accessed by placing its software base address in Register 12 and exercising the CRU commands.

    The CRU bit-space is 32K bits, because the least-significant address bit is used to send a data bit to the peripheral. 
    The bit address is incremented when transferring multiple bits to/from a device.

    I can see this has some advantages; for an 8-bit output port you would only need 3 address signals and 1 data signal, four in total instead of 8 data bits. It also simplifies bit operations, as there is no need to AND/OR bytes to manipulate single bits. The reduction of signal pins explains how they can get a full UART into a DIP18 package. 

    On the other hand, the disadvantages are that the scheme is unique to the TMS 9000 family. No other CPU uses it, so there is little demand for it. 

    I would like to add some more conventional devices as memory-mapped I/O. This will require modifying the address decoder to have "holes" in memory space.

  • ROM socket modifications

    Keith10/16/2022 at 17:51 0 comments

    Pin 1 isolated from 5V, then wired to A14 (pin 1 of RAM)

    Pin 27 isolated from A14 (pin 1 of RAM), then wired to /WE (pin 27 of RAM).

    Cut track on top side of board, from ROM pin 1 to pin 28 (VCC):

    Next make the mods shown below:

    The RAM is on the left, the ROM on the right. Note:
    ROM pin 27 track cuts each side.
    The track joining pins 1 joins the A14 track.
    The ROM pin 27 is tied to RAM pin 28 (VCC), not 27 (/WE). The latter connection will cause the CPU to corrupt the ROM even if the code never tries to write to EEPROM addresses.

  • Firmware

    Keith10/03/2022 at 23:46 0 comments

    The DIP28 socket is wired for a 32K EPROM.

    I prefer EEPROM because few people want to be bothered with UV erasers. I could mod the socket but would be limited to 32K. An alternative is to modify the socket so that pin 1 is switchable high or low, so that I can select either BASIC and FORTH using a 64K EPROM. Pin 1 is A15 on the chip, and VCC by default on the PCB, so I will put the standard BASIC in the second half of a 64K EPROM.

    I have many 64K EPROM chips (type 27512). I don't plan to modify the firmware much, if at all, so I will not be bothered by UV erasure.

    Links to ROM images:

    EVMBUG system monitor and BASIC (32K)
    EVMBUG system monitor and FORTH (11.5 K)

    The latter not being 32K, I cannot simple catenate them into one 64K file, so I shall simply join them at the ROM-programming stage.

    2022-10-15

    Programmed a 32K EEPROM AT28C256 with the monitor and BASIC.

    Modified EPROM socket for 32K EEPROM

    2022-11-21

    TMS9902 fitted, but no serial I/O seen.

    2022-11-24

    EEPROM socket pin 27 changed from /WR to VCC. May have been corrupted, so I reprogrammed it. Got partly garbage characters with the common 9600-8-N-1 setting. Followed web page and set it to 9600-7-E-2 setting. Success, the sign-on message appeared!

    Firmware is now working.

  • Power budget

    Keith10/02/2022 at 11:42 0 comments

    • 150 mA for TMS9995 CPU
    • 100 mA for TMS9902 UART
    • 23 mA for 32K RAM HM62256LP-10
    • 10 mA for 32K ROM
    • 7 mA for 74LS04
    • 10 mA for 74LS32
    • 10 mA for 74LS138
    • 310 mA total

    The L suffix of the HM62256L indicating "low power" refers the the standby current. In normal operation, it consumes as much power as the normal-power part. The power is 40 milliwatts at 1 MHz,  which is 8 mA at 5 volts. However, the current-frequency graph indicates a linear relationship. The 85 ns part consumes 100% of 70 mA at full speed (10 MHz)  and about 25% (17 mA) at 2 MHz. A TMS9995 with 12 MHz crystal has a 3 MHz cycle rate which sets an upper bound of around 23 mA.

    The currents above exceed the 100 mA of the minimum power USB peripheral, so I have not joined the VCC rail to the VCC of the USB cable connector.

  • Construction

    Keith10/02/2022 at 11:38 0 comments

    2020-04-25

    Soldered on the simple 9995 board:

    • U1 TMS9995 socket
    • U2 ROM socket
    • U3 32K RAM
    • U4 74LS04
    • U5 74LS32
    • U6 MAX232 socket - omit because using FTDI cable
    • U8 74LS138
    • C10-14 omit because using FTDI cable
    • U2 ROM socket
    • U3 32K RAM
    • U4 74LS04
    • U5 74LS32
    • U6 MAX232 socket - omit because using FTDI cable
    • U8 74LS138
    • C10-14 omit because using FTDI cable

    2022

    • U7 TMS9902 socket, other bits.
    • C1,2 15p for crystal X1 12MHz (or maybe 11.0592 or 12.288 MHz)
    • C3-C9 100n decouplers, I have plenty.
    • C15 big decoupler, any big one will do.
    • R6 10k for reset pull-up or use a reset chip.

    2022-09-30

    2022-10-15

    • Program ROM with monitor and BASIC code.

    2022-10-15

    • Modify EPROM socket for 32K EEPROM

    2022-11-21

    TMS9902 fitted, but no serial I/O seen.

    2022-11-24

    EEPROM socket pin 27 changed from /WR to VCC. May have been corrupted, so I reprogrammed it. Got partly garbage characters with the common 9600-8-N-1 setting. Followed web page and set it to 9600-7-E-2 setting. Success, the sign-on message appeared.

    2022-11-26

    115200 is the highest baud rate. It copes with a low character rate, and accepted my typing

     10  PRINT "HELLO WORLD! "
     20  GOTO 10

    but when I copied and pasted the same text, I got 

    0 RT"EOWRD" 0GT 0

    which shows it cannot process incoming text at that rate.

    At 9600 baud, I got

    10  PRT "HELO WORLD " 

    which is a little better. At 4800 baud:

    10  PRINT "HELLO WORLD! "
    0  GOTO 0

    At 1200 baud:

     10  PRINT "HELLO ORLD! "
    2  GOTO 10

    Even at 300 baud, characters are missed. It clearly needs flow control, but RTS and CTS are joined at the UART.

    Stuart Conner said that most terminal programs let you set inter-character and inter-line transmit delays. However, the 300 baud rate slows the character rate to around 30 characters per second which is 33 ms each. That should be plenty of time.

    Characters are missing in the middle of lines, when the CPU has nothing to do but put them in a buffer. It is not due to the CPU taking a long time to parse a line of BASIC.

    The software solution would be to modify the firmware to have interrupt-driven serial input, so that characters would be buffered as fast as they came in, but it will take me a long time to modify code for a CPU I have no experience of. I'd have to add CTS/RTS handshaking but FTDI USB cables don't stop sending bytes until up to 3 bytes after being told to stop.

    My favoured solution would be to get the CPU talking to an FTDI USB FIFO module. No baud rate hassles, not RS232 voltages and buffers, and dead easy to interface.

View all 7 project logs

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates