Difference between revisions of "SIMPLE-Z80"
Jump to navigation
Jump to search
Blwikiadmin (talk | contribs) (→Clock) |
Blwikiadmin (talk | contribs) |
||
(66 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | [[FILE: | + | [[File:tindie-mediums.png|link=https://www.tindie.com/products/34960/]] |
+ | |||
+ | [[FILE:SIMPLE-Z80_P1090251-720pxV.jpg]] | ||
+ | |||
+ | <video type="youtube">p5mwMwwM-R0</video> | ||
== Features == | == Features == | ||
Line 34: | Line 38: | ||
== Design == | == Design == | ||
− | + | === CPU === | |
[[file:SIMPLE-Z80_U2_CPU.PNG]] | [[file:SIMPLE-Z80_U2_CPU.PNG]] | ||
− | * | + | === EPROM === |
+ | |||
+ | * [[TL866ii Plus Programmer]] | ||
[[file:SIMPLE-Z80_U6_EPROM.PNG]] | [[file:SIMPLE-Z80_U6_EPROM.PNG]] | ||
− | + | === SRAM === | |
[[file:SIMPLE-Z80_U4_SRAM.PNG]] | [[file:SIMPLE-Z80_U4_SRAM.PNG]] | ||
− | * | + | === ACIA === |
+ | |||
+ | * Requires a FTDI cross-over cable | ||
+ | * Can only use RS-232 or FTDI - one at a time | ||
+ | ** Put MAX232 in a socket if you want flexibility | ||
+ | ** Remove MAX232 if you want to use FTDI | ||
[[file:SIMPLE-Z80_U3_ACIA.PNG]] | [[file:SIMPLE-Z80_U3_ACIA.PNG]] | ||
− | + | === Clock === | |
[[file:SIMPLE-Z80_U5_CLK.PNG]] | [[file:SIMPLE-Z80_U5_CLK.PNG]] | ||
Line 76: | Line 87: | ||
[[FILE:SIMPLE-Z80_J2_J5.PNG]] | [[FILE:SIMPLE-Z80_J2_J5.PNG]] | ||
+ | |||
+ | * J2 - EPROM Pin 1 jumper | ||
+ | ** 1-2 for 28C64, 28C256 (Pull WE to VCC) | ||
+ | ** 2-3 for 27256, 27SF256, 27512 (Pull A14 to GND) | ||
+ | * J5 - EPROM Pin 27 jumper | ||
+ | ** GND (2-3) | ||
==== EEPROM Pin Table ==== | ==== EEPROM Pin Table ==== | ||
Line 353: | Line 370: | ||
=== J3 - FTDI / TTL Serial === | === J3 - FTDI / TTL Serial === | ||
+ | |||
+ | * Requires a FTDI cross-over cable | ||
+ | * Can only use RS-232 or FTDI - one at a time | ||
+ | ** Put MAX232 in a socket if you want flexibility | ||
+ | ** Remove MAX232 if you want to use FTDI | ||
[[file:SIMPLE-Z80_J3_FTDI.PNG]] | [[file:SIMPLE-Z80_J3_FTDI.PNG]] | ||
− | + | * Pinout | |
# GND | # GND | ||
# N/C | # N/C | ||
Line 371: | Line 393: | ||
== First Unit Checkout == | == First Unit Checkout == | ||
+ | |||
+ | * PCB | ||
[[FILE:SIMPLE-Z80_P1090181-720px.jpg]] | [[FILE:SIMPLE-Z80_P1090181-720px.jpg]] | ||
Line 377: | Line 401: | ||
* Machined pin sockets | * Machined pin sockets | ||
− | |||
− | |||
=== Install Passives === | === Install Passives === | ||
Line 391: | Line 413: | ||
* Install Clock parts | * Install Clock parts | ||
+ | ** Install R2, R3 | ||
+ | ** Install C5, C6 | ||
** Install 7.3728 MHz crystal | ** Install 7.3728 MHz crystal | ||
− | ** Install | + | ** Install 74HC04 at U5 |
+ | * Measure clock at U5-4 | ||
+ | ** 7.32 MHz clock - looks good | ||
=== Reset === | === Reset === | ||
− | * | + | * Do not install U8 Power Monitor |
+ | ** Reset button gets stretched by Power Monitor U9 | ||
* Install pushbutton switch SW1 | * Install pushbutton switch SW1 | ||
− | + | * Measure reset at Z80 U2 pin marked RST on silkscreen | |
− | * Measure reset at | + | |
− | + | [[FILE:SIMPLE-Z80_P1090202-720PX.jpg]] | |
=== EPROM === | === EPROM === | ||
− | * SST27C256 EEPROM | + | * U6 = SST27C256 EEPROM |
** 32 KB part | ** 32 KB part | ||
** Using first 16KB of EEPROM | ** Using first 16KB of EEPROM | ||
Line 411: | Line 438: | ||
** J5 EEPROM pin 27 = A14 = GND | ** J5 EEPROM pin 27 = A14 = GND | ||
*** Jumper J5:2-3 | *** Jumper J5:2-3 | ||
− | |||
− | |||
− | |||
==== EEPROM Programming ==== | ==== EEPROM Programming ==== | ||
* Program using [[TL866ii_Plus_Programmer|TL-866ii plus programmer]] | * Program using [[TL866ii_Plus_Programmer|TL-866ii plus programmer]] | ||
− | * File = [https://github.com/land-boards/lb-boards/blob/master/RetroCPUs/SIMPLE- | + | * File = [https://github.com/land-boards/lb-boards/blob/master/RetroCPUs/SIMPLE-Z80/SOFTWARE/ROM.HEX ROM.HEX] - I/O routines plus BASIC |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
* Got Device ID error | * Got Device ID error | ||
* Turn off ID check | * Turn off ID check | ||
Line 438: | Line 450: | ||
* Device programmed/verified | * Device programmed/verified | ||
− | === | + | === Install CPU, ROM, RAM, ACIA === |
− | * | + | * U1 - Do not install MAX232 yet |
+ | ** Use FTDI connector with [[FTDI-49MM]] card | ||
− | + | === Test FTDI Serial === | |
* Wiring is '''not''' 1:1 to [[FTDI-49MM]] | * Wiring is '''not''' 1:1 to [[FTDI-49MM]] | ||
* Wire FTDI J3 to [[FTDI-49MM]] card | * Wire FTDI J3 to [[FTDI-49MM]] card | ||
− | ** | + | ** [[FTDI-49MM]] GND pin 1 to J3-1 RX on card |
− | ** | + | ** [[FTDI-49MM]] VCC pin 3 to J3-3 RX on card |
− | ** | + | ** [[FTDI-49MM]] TX pin 4 on to J3-5 RX on card |
− | ** RX on [[FTDI-49MM]] to | + | ** [[FTDI-49MM]] RX pin 5 on to J3-4 TX on card |
+ | ** [[FTDI-49MM]] CTS(in) pin 2 to J3-6 CTS on card | ||
− | [[FILE:SIMPLE- | + | [[FILE:SIMPLE-Z80_P1090251-720pxV.jpg]] |
=== Test RS-232 Serial === | === Test RS-232 Serial === | ||
* With MAX232 | * With MAX232 | ||
+ | * Install DB-9 Male | ||
+ | * Holes don't line up well, but 4-40 screws can fit | ||
* Connected to [[FTDI-49MM]] and [[DCE]] cards | * Connected to [[FTDI-49MM]] and [[DCE]] cards | ||
** [[FTDI-49MM]] and [[DCE]] cards wired together | ** [[FTDI-49MM]] and [[DCE]] cards wired together | ||
** [[DCE]] has female DB-9 | ** [[DCE]] has female DB-9 | ||
** Separate power cable J2 on [[FTDI-49MM]] to J3 on card | ** Separate power cable J2 on [[FTDI-49MM]] to J3 on card | ||
+ | |||
+ | [[FILE:FTDI_DCE_P1090192-720PXV.jpg]] | ||
+ | |||
* Works | * Works | ||
− | + | === Netlist === | |
+ | |||
+ | * First build had six open traces | ||
+ | ** Added wire U2-5 to U4-31 | ||
+ | ** Added wire U2-15 to U4-14 | ||
+ | ** Added wire U2-20 to U5-5 | ||
+ | ** Added wire U2-40 to U4-23 | ||
+ | ** Added wire U7-3 to U4-29 | ||
+ | ** Added wire U7-11 to U4-30 | ||
+ | * Checked on 2 other boards, not an issue on the boards | ||
+ | * Card worked with wires | ||
+ | |||
+ | <pre> | ||
+ | /CPUA0,U2-30,U3-11,U4-12,U6-10, | ||
+ | /CPUA1,U2-31,U4-11,U6-9, | ||
+ | /CPUA2,U2-32,U4-10,U6-8, | ||
+ | /CPUA3,U2-33,U4-9,U6-7, | ||
+ | /CPUA4,U2-34,U4-8,U6-6, | ||
+ | /CPUA5,U2-35,U4-7,U6-5, | ||
+ | /CPUA6,U2-36,U3-9,U4-6,U6-4, | ||
+ | /CPUA7,U2-37,U3-10,U4-5,U6-3, | ||
+ | /CPUA8,U2-38,U4-27,U6-25, | ||
+ | /CPUA9,U2-39,U4-26,U6-24, | ||
+ | /CPUA10,U2-40,U4-23,U6-21, | ||
+ | /CPUA11,U2-1,U4-25,U6-23, | ||
+ | /CPUA12,U2-2,U4-4,U6-2, | ||
+ | /CPUA13,U2-3,U4-28,U6-26,U7-9, | ||
+ | /CPUA14,U2-4,U4-3,U7-10, | ||
+ | /CPUA15,U2-5,U4-31,U7-13, | ||
+ | /CPUCLK,U2-6,U3-3,U3-4,U5-4, | ||
+ | /CPUD0,U2-14,U3-22,U4-13,U6-11, | ||
+ | /CPUD1,U2-15,U3-21,U4-14,U6-12, | ||
+ | /CPUD2,U2-12,U3-20,U4-15,U6-13, | ||
+ | /CPUD3,U2-8,U3-19,U4-17,U6-15, | ||
+ | /CPUD4,U2-7,U3-18,U4-18,U6-16, | ||
+ | /CPUD5,U2-9,U3-17,U4-19,U6-17, | ||
+ | /CPUD6,U2-10,U3-16,U4-20,U6-18, | ||
+ | /CPUD7,U2-13,U3-15,U4-21,U6-19, | ||
+ | /CPUIORQ*,U2-20,U5-5, | ||
+ | /CPUM1,U2-27,U3-8, | ||
+ | /CPUMREQ*,U2-19,U7-2,U7-4, | ||
+ | /CPURD*,U2-21,U7-5, | ||
+ | /CPUWR*,U2-22,U3-13,U7-1, | ||
+ | /EE_PIN1,J2-2,U6-1, | ||
+ | /EE_PIN27,J5-2,U6-27, | ||
+ | /F-RTS*,J3-6,R5-2, | ||
+ | /F_RX,J3-5,R6-2, | ||
+ | /F_TX,J3-4,R7-2, | ||
+ | /IORQ,U3-14,U5-6, | ||
+ | /IRQ*,R4-2,U2-16,U3-7, | ||
+ | /MEMRD*,U4-24,U6-22,U7-6, | ||
+ | /MEMWR*,U4-29,U7-3, | ||
+ | /ROM0RAM1,U4-30,U6-20,U7-11, | ||
+ | /RS_RTS*,J1-7,U1-14, | ||
+ | /RS_RX,J1-2,U1-8, | ||
+ | /RS_TX,J1-3,U1-7, | ||
+ | /RTS*,R5-1,U1-11,U3-5, | ||
+ | /UART_RX,R6-1,U1-9,U3-2, | ||
+ | /UART_TX,R7-1,U1-10,U3-6, | ||
+ | /~{CPURESB},R1-2,SW1-2,U2-26,U8-1, | ||
+ | GND,C10-1,C11-1,C12-1,C13-1,C14-2,C3-2,C4-1,C5-2,C6-2,C7-1,C8-1,C9-1,J1-5,J2-3,J3-1,J4-1,J4-3,J4-5,J4-7,J5-3,SW1-1,U1-15,U2-29,U3-1,U3-23,U3-24,U4-16,U4-2,U4-22,U5-7,U6-14,U7-7,U8-3, | ||
+ | Net-(C5-Pad1),C5-1,R3-1,Y1-2, | ||
+ | Net-(C6-Pad1),C6-1,R2-1,U5-1,Y1-1, | ||
+ | Net-(J1-Pad4),J1-4,J1-6, | ||
+ | Net-(R2-Pad2),R2-2,R3-2,U5-2,U5-3, | ||
+ | Net-(U1-C1+),C1-1,U1-1, | ||
+ | Net-(U1-C1-),C1-2,U1-3, | ||
+ | Net-(U1-C2+),C2-1,U1-4, | ||
+ | Net-(U1-C2-),C2-2,U1-5, | ||
+ | Net-(U1-VS+),C3-1,U1-2, | ||
+ | Net-(U1-VS-),C4-2,U1-6, | ||
+ | Net-(U7-Pad12),U7-12,U7-8, | ||
+ | VCC,C10-2,C11-2,C12-2,C13-2,C14-1,C7-2,C8-2,C9-2,J2-1,J3-3,J4-2,J4-4,J4-6,J4-8,J5-1,R1-1,R4-1,U1-16,U2-11,U2-17,U2-24,U2-25,U3-12,U4-32,U5-11,U5-13,U5-14,U5-9,U6-28,U7-14,U8-2, | ||
+ | </pre> | ||
== Software == | == Software == | ||
− | * [https://github.com/ | + | === Z80 Register Set === |
− | + | ||
+ | [[file:Z80_Registers.PNG]] | ||
+ | |||
+ | === NASCOM 2 BASIC === | ||
+ | |||
+ | * Nascom 2 Computer BASIC Microsoft BASIC 4.7 modified to remove all hardware-specific code | ||
+ | ** [https://github.com/douggilliland/Retro-Computers/tree/master/Z80/LB-Z80/NASCOM_BASIC/NASCOM_56K NASCOM BASIC Source Code] - 56KB version | ||
+ | ** [https://github.com/douggilliland/Retro-Computers/tree/master/Z80/LB-Z80/NASCOM_BASIC NASCOM BASIC Source Code] - 32KB version used on [[LB-Z80-01]] card | ||
+ | |||
+ | ==== Toolchain ==== | ||
+ | |||
+ | * TASM.EXE | ||
+ | ** '''The version of TASM in Grant's build zip file doesn't run under Win 11''' | ||
+ | ** [https://github.com/douggilliland/Retro-Computers/tree/master/Z80/LB-Z80/NASCOM_BASIC TASM version that runs on Win 11] | ||
+ | * TASM80.TAB | ||
+ | ** [Probably need] the updated one in [https://github.com/douggilliland/Retro-Computers/tree/master/Z80/LB-Z80/NASCOM_BASIC to run on Win 11] | ||
+ | * Assembler files (for Windows 11/DOS) | ||
+ | * S Record and Hex file manipulation | ||
+ | ** [https://carta.tech/man-pages/man1/srec_examples.1.html Examples of srec_cat utility] | ||
+ | ** [https://srecord.sourceforge.net/man/man1/srec_cat.1.html srec_cat man page] | ||
+ | * Combine int32k.hex and BAS32K.HEX into rom32.hex using srec-cat | ||
+ | ** Command line | ||
+ | *** srec_cat.exe int32k.hex -Intel BAS32K.HEX -Intel -fill 0xff 0x0144 0x014f -o rom32.hex -Intel | ||
+ | * _ASSEMBLE.BAT - double-click in Windows to run the assembly if needed | ||
+ | ** Adds srec_cat to combine files into one Intel Hex file | ||
+ | |||
+ | ==== NASCOM BASIC - Code Repository ==== | ||
− | === Source files === | + | * [https://github.com/douggilliland/Retro-Computers/tree/master/Z80/LB-Z80/NASCOM_BASIC NASCOM BASIC Source Code] - 32KB version |
+ | * [https://github.com/douggilliland/Retro-Computers/tree/master/Z80/LB-Z80/NASCOM_BASIC/NASCOM_56K NASCOM BASIC Source Code] - 56KB version | ||
+ | |||
+ | ==== Source files ==== | ||
* intmini.asm - the interupt driven mini startup program needed to boot into BASIC | * intmini.asm - the interupt driven mini startup program needed to boot into BASIC | ||
* basic.asm - BASIC 4.7b - a conversion of Microsoft BASIC 4.7, as used on the Nascom computers (see below for details) | * basic.asm - BASIC 4.7b - a conversion of Microsoft BASIC 4.7, as used on the Nascom computers (see below for details) | ||
− | === Output files === | + | ==== Output files ==== |
* INTMINI.HEX | * INTMINI.HEX | ||
Line 481: | Line 602: | ||
* Within the ROM, the serial handler is first (starting at address 0000H), followed by the BASIC interpreter (starting at 0100H). | * Within the ROM, the serial handler is first (starting at address 0000H), followed by the BASIC interpreter (starting at 0100H). | ||
− | === | + | ==== Acknowledgements ==== |
+ | |||
+ | * BASIC is Microsoft BASIC 4.7 for the NASCOM, heavily modified by Grant to remove references to different monitors, screen handlers and keyboard matrix reading | ||
+ | * TASM assembler is a partial distribution of the package from Speech Technology Incorporated | ||
+ | |||
+ | === References === | ||
+ | |||
+ | * [https://ia800203.us.archive.org/27/items/Z80_Assembly_Language_Programming/Z80_Assembly_Language_Programming.pdf Z80 Assembly Language Programming] - Concise description of the register set, Chapter 3 page 1-42 of Z80, assembly language programming by Leventhal, Lance A. | ||
+ | * [https://ia803204.us.archive.org/4/items/Programming_the_Z-80_2nd_Edition_1980_Rodnay_Zaks/Programming_the_Z-80_2nd_Edition_1980_Rodnay_Zaks.pdf Programming the Z80] 1980 Rodnay Zaks | ||
+ | * [https://archive.org/details/Z80_Assembly_Language_Programming_1979_Leventhal Z80, assembly language programming by Leventhal, Lance A., 1945-] | ||
+ | * [https://en.wikipedia.org/wiki/Intel_HEX Hex file format] | ||
+ | |||
+ | [[file:IntelHexRecordFormat.png]] | ||
+ | |||
+ | * ASCII Table | ||
+ | |||
+ | [[file:ASCII_TABLE.PNG]] | ||
+ | |||
+ | == Performance == | ||
+ | |||
+ | * TeraTerm settings | ||
+ | |||
+ | [[file:SIMPLE-6809_TeraTerm_Setup.PNG]] | ||
+ | |||
+ | * Test software | ||
− | + | <pre> | |
− | + | 10 FOR I =1 TO 10000 | |
− | + | 20 PRINT I | |
+ | 30 NEXT I | ||
− | + | </pre> | |
− | * | + | * Time ~ 27 secs |
− | * | + | * CPU is 4x the clock speed of the [[SIMPLE-6502]] and [[SIMPLE-6809]] cards |
== Mechanicals == | == Mechanicals == |
Latest revision as of 09:27, 20 September 2024
Contents
Features
- Build of Grant Searles's Simple Z80 CPU
- Runs BASIC
- Z80 CPU
- 7.3728 MHz clock
- 56KB SRAM (uses 128KB parts)
- 8KB EPROM/EEPROM
- 68B50 Serial Port (ACIA)
- RS-232 port
- Header for FTDI
- 115,200 baud
- Reset switch with optional DS1813 Power Supervisor
- 95x95mm card
- (4) 6-32 mounting holes
Memory Map
- 0x0000-0x1FFF 8KB ROM
- 0x2000-0xFFFF 56KB SRAM
- I/O
- 0x00-0x7F - Free
- 0x80-0x81 - Serial port (ACIA)
Chip Set
- Ebay listing
- Needs 68B50 to run Grant's code
Design
CPU
EPROM
SRAM
ACIA
- Requires a FTDI cross-over cable
- Can only use RS-232 or FTDI - one at a time
- Put MAX232 in a socket if you want flexibility
- Remove MAX232 if you want to use FTDI
Clock
Headers / Connectors
J1 - RS-232 Serial
- DB-9 Male
- Pinout
- N/C
- Receive
- Transmit
- Loop to pin 6
- GND
- Loop to pin 4
- RTS
- N/C
- N/C
J2/J5 - EPROM/EEPROM Select Jumpers
- J2 - EPROM Pin 1 jumper
- 1-2 for 28C64, 28C256 (Pull WE to VCC)
- 2-3 for 27256, 27SF256, 27512 (Pull A14 to GND)
- J5 - EPROM Pin 27 jumper
- GND (2-3)
EEPROM Pin Table
27512 | 27256 | 27SF256 | 28C256 | 27128 | 2764 | 28C64 | PIN | PIN | 2764 | 28C64 | 27128 | 28C256 | 27SF256 | 27256 | 27512 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
A15 | VPP | VPP | A14 | VPP | VPP | N/C | 1 | 28 | VCC | VCC | VCC | VCC | VCC | VCC | VCC | |
A12 | A12 | A12 | A12 | A12 | A12 | A12 | 2 | 27 | PGM | WE* | PGM | WE* | A14 | A14 | A14 | |
A7 | A7 | A7 | A7 | A7 | A7 | A7 | 3 | 26 | A13 | N/C | A13 | A13 | A13 | A13 | A13 | |
A6 | A6 | A6 | A6 | A6 | A6 | A6 | 4 | 25 | A8 | A8 | A8 | A8 | A8 | A8 | A8 | |
A5 | A5 | A5 | A5 | A5 | A5 | A5 | 5 | 24 | A9 | A9 | A9 | A9 | A9 | A9 | A9 | |
A4 | A4 | A4 | A4 | A4 | A4 | A4 | 6 | 23 | A11 | A11 | A11 | A11 | A11 | A11 | A11 | |
A3 | A3 | A3 | A3 | A3 | A3 | A3 | 7 | 22 | OE* | OE* | OE* | OE* | OE* | OE* | OE* | |
A2 | A2 | A2 | A2 | A2 | A2 | A2 | 8 | 21 | A10 | A10 | A10 | A10 | A10 | A10 | A10 | |
A1 | A1 | A1 | A1 | A1 | A1 | A1 | 9 | 20 | CE* | CE* | CE* | CE* | CE* | CE* | CE* | |
A0 | A0 | A0 | A0 | A0 | A0 | A0 | 10 | 19 | D7 | D7 | D7 | D7 | D7 | D7 | D7 | |
D0 | D0 | D0 | D0 | D0 | D0 | D0 | 11 | 18 | D6 | D6 | D6 | D6 | D6 | D6 | D6 | |
D1 | D1 | D1 | D1 | D1 | D1 | D1 | 12 | 17 | D5 | D5 | D5 | D5 | D5 | D5 | D5 | |
D2 | D2 | D2 | D2 | D2 | D2 | D2 | 13 | 16 | D4 | D4 | D4 | D4 | D4 | D4 | D4 | |
GND | GND | GND | GND | GND | GND | GND | 14 | 15 | D3 | D3 | D3 | D3 | D3 | D3 | D3 |
J3 - FTDI / TTL Serial
- Requires a FTDI cross-over cable
- Can only use RS-232 or FTDI - one at a time
- Put MAX232 in a socket if you want flexibility
- Remove MAX232 if you want to use FTDI
- Pinout
- GND
- N/C
- +5V
- Transmit (out)
- Receive (in)
- RTS* (out)
J4 - 5V Power
- 2x4 header
First Unit Checkout
- PCB
Install Sockets
- Machined pin sockets
Install Passives
Power
- Install 2x4 at J4
- Power card via J4 with 5V
- Check power pins on parts
Clock
- Install Clock parts
- Install R2, R3
- Install C5, C6
- Install 7.3728 MHz crystal
- Install 74HC04 at U5
- Measure clock at U5-4
- 7.32 MHz clock - looks good
Reset
- Do not install U8 Power Monitor
- Reset button gets stretched by Power Monitor U9
- Install pushbutton switch SW1
- Measure reset at Z80 U2 pin marked RST on silkscreen
EPROM
- U6 = SST27C256 EEPROM
- 32 KB part
- Using first 16KB of EEPROM
- J2 EEPROM pin 1 = VPP = VCC or GND
- Jumper J2:2-3
- J5 EEPROM pin 27 = A14 = GND
- Jumper J5:2-3
EEPROM Programming
- Program using TL-866ii plus programmer
- File = ROM.HEX - I/O routines plus BASIC
- Got Device ID error
- Turn off ID check
- Device programmed/verified
Install CPU, ROM, RAM, ACIA
- U1 - Do not install MAX232 yet
- Use FTDI connector with FTDI-49MM card
Test FTDI Serial
Test RS-232 Serial
- With MAX232
- Install DB-9 Male
- Holes don't line up well, but 4-40 screws can fit
- Connected to FTDI-49MM and DCE cards
- Works
Netlist
- First build had six open traces
- Added wire U2-5 to U4-31
- Added wire U2-15 to U4-14
- Added wire U2-20 to U5-5
- Added wire U2-40 to U4-23
- Added wire U7-3 to U4-29
- Added wire U7-11 to U4-30
- Checked on 2 other boards, not an issue on the boards
- Card worked with wires
/CPUA0,U2-30,U3-11,U4-12,U6-10, /CPUA1,U2-31,U4-11,U6-9, /CPUA2,U2-32,U4-10,U6-8, /CPUA3,U2-33,U4-9,U6-7, /CPUA4,U2-34,U4-8,U6-6, /CPUA5,U2-35,U4-7,U6-5, /CPUA6,U2-36,U3-9,U4-6,U6-4, /CPUA7,U2-37,U3-10,U4-5,U6-3, /CPUA8,U2-38,U4-27,U6-25, /CPUA9,U2-39,U4-26,U6-24, /CPUA10,U2-40,U4-23,U6-21, /CPUA11,U2-1,U4-25,U6-23, /CPUA12,U2-2,U4-4,U6-2, /CPUA13,U2-3,U4-28,U6-26,U7-9, /CPUA14,U2-4,U4-3,U7-10, /CPUA15,U2-5,U4-31,U7-13, /CPUCLK,U2-6,U3-3,U3-4,U5-4, /CPUD0,U2-14,U3-22,U4-13,U6-11, /CPUD1,U2-15,U3-21,U4-14,U6-12, /CPUD2,U2-12,U3-20,U4-15,U6-13, /CPUD3,U2-8,U3-19,U4-17,U6-15, /CPUD4,U2-7,U3-18,U4-18,U6-16, /CPUD5,U2-9,U3-17,U4-19,U6-17, /CPUD6,U2-10,U3-16,U4-20,U6-18, /CPUD7,U2-13,U3-15,U4-21,U6-19, /CPUIORQ*,U2-20,U5-5, /CPUM1,U2-27,U3-8, /CPUMREQ*,U2-19,U7-2,U7-4, /CPURD*,U2-21,U7-5, /CPUWR*,U2-22,U3-13,U7-1, /EE_PIN1,J2-2,U6-1, /EE_PIN27,J5-2,U6-27, /F-RTS*,J3-6,R5-2, /F_RX,J3-5,R6-2, /F_TX,J3-4,R7-2, /IORQ,U3-14,U5-6, /IRQ*,R4-2,U2-16,U3-7, /MEMRD*,U4-24,U6-22,U7-6, /MEMWR*,U4-29,U7-3, /ROM0RAM1,U4-30,U6-20,U7-11, /RS_RTS*,J1-7,U1-14, /RS_RX,J1-2,U1-8, /RS_TX,J1-3,U1-7, /RTS*,R5-1,U1-11,U3-5, /UART_RX,R6-1,U1-9,U3-2, /UART_TX,R7-1,U1-10,U3-6, /~{CPURESB},R1-2,SW1-2,U2-26,U8-1, GND,C10-1,C11-1,C12-1,C13-1,C14-2,C3-2,C4-1,C5-2,C6-2,C7-1,C8-1,C9-1,J1-5,J2-3,J3-1,J4-1,J4-3,J4-5,J4-7,J5-3,SW1-1,U1-15,U2-29,U3-1,U3-23,U3-24,U4-16,U4-2,U4-22,U5-7,U6-14,U7-7,U8-3, Net-(C5-Pad1),C5-1,R3-1,Y1-2, Net-(C6-Pad1),C6-1,R2-1,U5-1,Y1-1, Net-(J1-Pad4),J1-4,J1-6, Net-(R2-Pad2),R2-2,R3-2,U5-2,U5-3, Net-(U1-C1+),C1-1,U1-1, Net-(U1-C1-),C1-2,U1-3, Net-(U1-C2+),C2-1,U1-4, Net-(U1-C2-),C2-2,U1-5, Net-(U1-VS+),C3-1,U1-2, Net-(U1-VS-),C4-2,U1-6, Net-(U7-Pad12),U7-12,U7-8, VCC,C10-2,C11-2,C12-2,C13-2,C14-1,C7-2,C8-2,C9-2,J2-1,J3-3,J4-2,J4-4,J4-6,J4-8,J5-1,R1-1,R4-1,U1-16,U2-11,U2-17,U2-24,U2-25,U3-12,U4-32,U5-11,U5-13,U5-14,U5-9,U6-28,U7-14,U8-2,
Software
Z80 Register Set
NASCOM 2 BASIC
- Nascom 2 Computer BASIC Microsoft BASIC 4.7 modified to remove all hardware-specific code
- NASCOM BASIC Source Code - 56KB version
- NASCOM BASIC Source Code - 32KB version used on LB-Z80-01 card
Toolchain
- TASM.EXE
- The version of TASM in Grant's build zip file doesn't run under Win 11
- TASM version that runs on Win 11
- TASM80.TAB
- [Probably need] the updated one in to run on Win 11
- Assembler files (for Windows 11/DOS)
- S Record and Hex file manipulation
- Combine int32k.hex and BAS32K.HEX into rom32.hex using srec-cat
- Command line
- srec_cat.exe int32k.hex -Intel BAS32K.HEX -Intel -fill 0xff 0x0144 0x014f -o rom32.hex -Intel
- Command line
- _ASSEMBLE.BAT - double-click in Windows to run the assembly if needed
- Adds srec_cat to combine files into one Intel Hex file
NASCOM BASIC - Code Repository
- NASCOM BASIC Source Code - 32KB version
- NASCOM BASIC Source Code - 56KB version
Source files
- intmini.asm - the interupt driven mini startup program needed to boot into BASIC
- basic.asm - BASIC 4.7b - a conversion of Microsoft BASIC 4.7, as used on the Nascom computers (see below for details)
Output files
- INTMINI.HEX
- BASIC.HEX
- ROM.HEX - the complete 8K ROM ready for burning to an EPROM - the unused contents are filled with FF values.
- Within the ROM, the serial handler is first (starting at address 0000H), followed by the BASIC interpreter (starting at 0100H).
Acknowledgements
- BASIC is Microsoft BASIC 4.7 for the NASCOM, heavily modified by Grant to remove references to different monitors, screen handlers and keyboard matrix reading
- TASM assembler is a partial distribution of the package from Speech Technology Incorporated
References
- Z80 Assembly Language Programming - Concise description of the register set, Chapter 3 page 1-42 of Z80, assembly language programming by Leventhal, Lance A.
- Programming the Z80 1980 Rodnay Zaks
- Z80, assembly language programming by Leventhal, Lance A., 1945-
- Hex file format
- ASCII Table
Performance
- TeraTerm settings
- Test software
10 FOR I =1 TO 10000 20 PRINT I 30 NEXT I
- Time ~ 27 secs
- CPU is 4x the clock speed of the SIMPLE-6502 and SIMPLE-6809 cards