1953 views
--- breaks: false --- # 8-Bit Course References - [Folder with Technical Documents](https://kingsx.cs.uni-saarland.de/index.php/s/x7sSNw5RoHQs2oa) ## Getting Up to Speed 1. Watch the videos [Ben Eater's](https://eater.net/8bit) build, especially: 1) [Intro](https://www.youtube.com/watch?v=AwUirxi9eBg&list=PLowKtXNTBypGqImE405J2565dvjafglHU&index=35) 2) [SR Latch](https://www.youtube.com/watch?v=KM0DdEaY5sY&list=PLowKtXNTBypGqImE405J2565dvjafglHU&index=6) ff. 3) [Bus architecture](https://www.youtube.com/watch?v=QzWW-CBugZo&list=PLowKtXNTBypGqImE405J2565dvjafglHU&index=9) and [tristate](https://www.youtube.com/watch?v=faAjse109Q8&list=PLowKtXNTBypGqImE405J2565dvjafglHU&index=10) 4) [ALU design](https://www.youtube.com/watch?v=mOVOS9AjgFs&list=PLowKtXNTBypGqImE405J2565dvjafglHU&index=15) ff. 5) [Control logic](https://www.youtube.com/watch?v=AwUirxi9eBg&list=PLowKtXNTBypGqImE405J2565dvjafglHU&index=35) ff. 6) [555 timer](https://www.youtube.com/watch?v=kRlSFm519Bo&list=PLowKtXNTBypGqImE405J2565dvjafglHU&index=2) ff. 2. Look into the book by [Wakerly](https://www.pearson.com/uk/educators/higher-education-educators/program/Wakerly-Digital-Design-Principles-and-Practices-4th-Edition/PGM761351.html) (older versions exist on the internet, a paper version is available in the lab.) You don't have to read everything but it is a great reference. 1. Chapter 5 discusses the basic of combinational logic design and introduces several 7400 chips. 2. Chapter 7 discusses sequential logic design (every this with states, i.e. latches). 2. Chapter 3 gives foundations on electrical aspects of TTL and CMOS. 3. Appendix B for DC circuit basics, especially RC circuits. 3. Study existing builds. 4. Study existing ISAs. # References ## 7400 series ICs and others * [Wikipedia List](https://en.wikipedia.org/wiki/List_of_7400-series_integrated_circuits) of most 74xx chips. If the datasheet link does not go to a PDF directly, the chances that the part is no longer available is quite high. Some may still be available on eBay. * [Logic Levels](https://hackaday.com/wp-content/uploads/2018/07/logic-family-voltage-table.jpg) of the different families. * Excellent [4-part Series](https://www.nutsvolts.com/magazine/article/understanding_digital_logic_ics_part_1) on 7400 chips. Chapter 3 is particularly relevant. * Excellent [article](https://www.righto.com/2017/03/inside-vintage-74181-alu-chip-how-it.html) on the 74181 ALU chip. * [Am2901](http://www.bitsavers.org/pdf/amd/ED2900A_vol1_Jan85.pdf) ALU Chip ## Textbooks * John Wakerly. [Digital Design Principles and Practice](https://www.pearson.com/uk/educators/higher-education-educators/program/Wakerly-Digital-Design-Principles-and-Practices-4th-Edition/PGM761351.html), 4th edition, 2006. Chapter 3 is an excellent and relevant introduction to digital circuits. There is an [appendix](http://wakerly.org/DDPP/DDPP3_pdf/elecCkts.pdf) with a review on electrical circuits basics. * Horowitz and Hill. [The Art of Electronics](https://en.wikipedia.org/wiki/The_Art_of_Electronics), 3rd Edition. Comprehensive text book and reference on electronics in general. Also has a chapter on digital logic and TTL chips (Chapter 10). * Albert Malvino. Digital Computer Electronics, 3rd edition. The text book that Ben Eater used for his build. * The [All About Circuits](https://www.allaboutcircuits.com/textbook/) text book on electronics. ## Documentation of existing CPUs * Sharp SM83 (Gameboy) - [Overview](https://gbdev.io/pandocs/CPU_Registers_and_Flags.html) - [Instruction List](https://rgbds.gbdev.io/docs/v0.9.1/gbz80.7) - [Opcode Table](https://gbdev.io/gb-opcodes/optables/) - [sdcc](https://sdcc.sourceforge.net/) has a backend for it. Use `sdcc -msm83 -o x.s -S x.c` to get a text assembly file. * Intel 8080/8085 - [Assembly Language Programming Manual](https://datasheetspdf.com/pdf-file/1328906/Intel/Intel8080/1) contains ISA description. - [User Manual](http://www.bitsavers.org/components/intel/MCS80/MCS80_85_Users_Manual_Jan83.pdf) contains description of the interrupt mechanism. - [ISA Overview](https://www.righto.com/2013/02/8085-instruction-set-octal-table.html) in octal. - [StackOverflow post](https://stackoverflow.com/questions/2165914/how-do-interrupts-work-on-the-intel-8080) on how interrupts work on the 8080. Note that the 8085 has a more siphisticated interrupt facility. - Ken Shirriff's posts on the 8085 - [ALU](https://www.righto.com/2013/07/reverse-engineering-8085s-alu-and-its.html) - [Register file](https://www.righto.com/2013/03/register-file-8085.html) * Zilog Z80 - [User Manual](https://www.zilog.com/docs/z80/um0080.pdf) including ISA documentation. - Ken Shirriff's series of [blog posts](https://www.righto.com/search/label/Z-80)'s on the Z80 µArch. * WDC 6502 - [Official Documentation](https://www.westerndesigncenter.com/wdc/documentation/w65c02s.pdf) including ISA description. - [Peripheral Interface Adapter (6521)](https://www.westerndesigncenter.com/wdc/documentation/w65c21.pdf) documentation. Contains information about interrupt handling. - [Video](https://www.youtube.com/watch?v=DlEa8kd7n3Q&list=PLowKtXNTBypFbtuVMUVXNR0z1mu7dp7eH&index=11) on interrupt handling - In-depth [post](http://6502.org/tutorials/interrupts.html) on interrupts. - [6510](https://atarihq.com/danb/files/64doc.txt) * Motorola 6800 - [ISA](http://www.8bit-era.cz/6800.html) * Motorola 6809 - [ISA](https://ia802906.us.archive.org/18/items/bitsavers_motorola68_13419254/M6809PM.rev0_May83.pdf) - [Instruction Format](https://techheap.packetizer.com/processors/6809/6809.html) * STM8 - [ISA](https://www.st.com/resource/en/programming_manual/pm0044-stm8-cpu-programming-manual-stmicroelectronics.pdf) * Philipp Krause's f8 - [Video](https://peertube.f-si.org/videos/watch/6d3c880d-6f8f-47e0-b38b-180fe56eb9e4), [Slides](https://wiki.f-si.org/images/1/1c/F8.pdf) - [Branch of sdcc](https://sourceforge.net/p/sdcc/code/HEAD/tree/branches/f8/) has a Verilog simulator. ## Video / Graphics * [Ben Eater's Videos on a VGA card](https://eater.net/vga) * [VGA Timings](http://tinyvga.com/vga-timing) * [CGA](https://www.seasip.info/VintagePC/cga.html), the IBM PC original color graphics card * [TMS9918](https://en.wikipedia.org/wiki/TMS9918) - [Programmer's Guide](https://www.msxblog.es/wp-content/uploads/2009/09/vdpprogrammersguide.pdf) - [Technical Reference](http://www.bitsavers.org/components/ti/TMS9900/TMS9918A_TMS9928A_TMS9929A_Video_Display_Processors_Data_Manual_Nov82.pdf) - [Overview Video](https://www.youtube.com/watch?v=smgGB_CsXns) * [VIC-II](https://en.wikipedia.org/wiki/MOS_Technology_VIC-II) - [Reference](http://www.zimmers.net/cbmpics/cbm/c64/vic-ii.txt) - [Tutorial](https://www.retro-programming.de/programming/nachschlagewerk/vic-ii/) * [Motorola 6847](https://people.ece.cornell.edu/land/courses/ece4760/ideas/mc6847.pdf) * [HD44780 LCD Controller](https://en.wikipedia.org/wiki/Hitachi_HD44780_LCD_controller), [datasheet](https://cdn.sparkfun.com/assets/9/5/f/7/b/HD44780.pdf) ## Other Peripherals / Hardware - [IBM XT Technical Reference](https://archive.org/details/IBMPCXTTechnicalReference1502237/page/n3/mode/2up) - Interrupts - [Intel 8259](https://pdos.csail.mit.edu/6.828/2010/readings/hardware/8259A.pdf) programmable interrupt controller (standard PIC for 8080 systems and the original IBM PC) - [Daisy Chaining](http://www.edwardbosworth.com/My5155_Slides/Chapter12/InterruptHandling.htm) - [PS/2 Interface](https://www.burtonsys.com/ps2_chapweske.htm) - 8250 Serial Controller - [Datasheet](https://sys.cs.fau.de/extern/lehre/ws22/bs/uebung/aufgabe3/uart-8250a.pdf) with sample circuits - [Example project](https://github.com/bazsimarkus/Simple-8250-UART-System-with-Arduino) for hooking up a 8250 with an Arduino ## Electronics * Various guides on debouncing: [1](http://www.ganssle.com/debouncing-pt2.htm), [2](https://www.we-online.com/web/en/index.php/download/media/07_electronic_components/download_center_1/application_notes_berichte/sn015__contact_circuit_debounce_for_switches/SN015a_EN.pdf), [3](https://www.eejournal.com/article/ultimate-guide-to-switch-debounce-part-3/) and an [EEVBlog video](https://www.youtube.com/watch?v=Nj-Q8FQxHhU). * lordmonoxide's [lessons learned](https://www.reddit.com/r/beneater/comments/dskbug/what_i_have_learned_a_master_list_of_what_to_do/) from building an 8-bit CPU on breadboards. * [Good advice to draw schematics](https://electronics.stackexchange.com/questions/28251/rules-and-guidelines-for-drawing-good-schematics). * [PCB Design Tutorial](https://www.mikrocontroller.net/attachment/26687/PCBDesignTutorialRevA.pdf). * [EEVblog](https://www.youtube.com/c/EevblogDave) has excellent tutorials on electronics, especially fundamentals videos on [DC](https://www.youtube.com/watch?v=xSRe_4TQbuo&list=PLvOlSehNtuHtVLq2MDPIz82BWMIZcuwhK) and [AC](https://www.youtube.com/watch?v=rrPtvYYJ2-g). One particular [video](https://www.youtube.com/watch?v=Ht48vv0rQYk&t=277s) covers rise and fall times of TTL signals. * Indispensable [KiCAD Shortcuts](https://shortcutworld.com/KiCAD/mac/KiCAD_Shortcuts). ## Tools * Maybe [Logisim Evolution](https://github.com/logisim-evolution/logisim-evolution) is helpful to simulate parts of your machine. * [customasm](https://github.com/hlorenzi/customasm) is a customizable assembler. Maybe useful for your own ISA. * [minipro](https://gitlab.com/DavidGriffith/minipro) can flash EEPROMs/Flash memory. We have SST39SF010 flash in the lab. You can write this with ``` $ minipro -s -p SST39SF010 -w <filename> ``` For EEPROMS (AT28C256) use ``` $ minipro -u -s -p AT28C256 -w <filename> ``` * You can use [Knoepfchen](https://github.com/shack/knoepfchen) for get some buttons/switches/clock to your breadboard easily. * [Convert](https://github.com/shack/kicad_to_verilog) your KiCad schematics to Verilog ## Other Builds * [Ben Eater](https://eater.net/8bit)'s build and [video playlist](https://www.youtube.com/watch?v=HyznrdDSSGM&list=PLowKtXNTBypGqImE405J2565dvjafglHU) (based on the textbook by Malvino * [derulf1](https://github.com/DerULF1/8bit-computer)'s build. - 64kB RAM, interrupt controller, real-time clock, LCD display, SD card reader. - The [video series](https://www.youtube.com/watch?v=yACH8p4KfyQ&list=PL5-Ar_CvItgaP27eT_C7MnCiubkyaEqF0) is very detailed and goes in-depth on many aspects. Particularly helpful and interesting is the [video](https://www.youtube.com/watch?v=tdtGz5nVM9A&list=PL5-Ar_CvItgaP27eT_C7MnCiubkyaEqF0&index=2) on power distribution and the clock. * [rolf-electronics](https://github.com/rolf-electronics/The-8-bit-SAP-3). Has extensive documentation that covers electronics problems. * [scamp-cpu](https://github.com/jes/scamp-cpu). Comes with a browser-based simulator. * [YACC1](https://cottageworker.com/) has a cool way of modularizing the components onto PCBs and connecting them with a bus. * [nqsap](https://tomnisbet.github.io/nqsap/) by Tom Nisbet features extensive documentation, many valuable tips, and helpful links to other resources. * The fabulous [Gigatron](https://gigatron.io/) focuses on few chips and has a primitive ISA. It is programmed by a higher-level assembler whose programs run on interpreter. Has a cool [ALU design](http://6502.org/users/dieter/a1/a1_4.htm). Features a small VGA graphics card. * [Homecomputer Webring](https://www.homebrewcpuring.org/) with many more builds. * [Michael Kamprath](https://www.youtube.com/watch?v=-E6FhDYj1dU&list=PLC4jDTViU38EQzCYaRsoOLeGLLW5cMN4A) # Chip Inventory ## 74xx | Num | Description | Qty | | --- | -------------------------------------- | --- | | [00](https://www.ti.com/lit/ds/symlink/sn74hc00.pdf) | quad 2-input NAND | 16 | [02](https://www.ti.com/lit/ds/symlink/sn74hc02.pdf) | quad 2-input NOR | 8 | [04](https://www.ti.com/lit/ds/symlink/sn74hc04.pdf) | hex inverter | 12 | [08](https://www.ti.com/lit/ds/symlink/sn74hc08.pdf) | quad 2-input AND | 32 | [10](https://www.ti.com/lit/ds/symlink/sn74hc10.pdf) | triple 3-input NAND | 8 | [14](https://www.ti.com/lit/ds/symlink/sn74hc14.pdf) | hex inverter Schmitt trigger | 16 | [20](https://www.ti.com/lit/ds/symlink/sn74hc20.pdf) | dual 4-input NAND | 8 | [30](https://www.ti.com/lit/ds/symlink/cd74hc30.pdf) | single 8-input NAND | 20 | [32](https://www.ti.com/lit/ds/symlink/sn74hc32.pdf) | quad 2-input OR | 16 | [74](https://www.ti.com/lit/ds/symlink/sn74hc74.pdf) | dual D positive edge-triggered flip-flop, async preset and clear | 16 | [86](https://www.ti.com/lit/ds/symlink/sn74hc86.pdf) | quad 2-input XOR | 16 | [138](https://www.ti.com/lit/ds/symlink/sn74hc138.pdf) | 3-to-8 line decoder inverting outputs | 8 | [139](https://www.ti.com/lit/ds/symlink/sn74hc139.pdf) | dual 2-to-4 decoder inverting outputs | 8 | [148](https://www.ti.com/lit/ds/symlink/sn74hc148.pdf) | 8-line to 3-line priority encoder | 8 | [151](https://www.ti.com/lit/ds/symlink/sn74hc151.pdf) | 8-line to 1-line MUX non-inverting outputs | 12 | [153](https://www.ti.com/lit/ds/symlink/sn74hc153.pdf) | dual 4-line to 1-line MUX non-inverting outputs | 16 | [157](https://www.ti.com/lit/ds/symlink/sn74hc157.pdf) | quad 2-line to 1-line MUX non-inverting outputs | 16 | [158](https://www.ti.com/lit/ds/symlink/sn74hc158.pdf) | quad 2-line to 1-line MUX inverting outputs | 8 | [161](https://www.ti.com/lit/ds/symlink/sn74hc161.pdf) | sync presettable 4-bit binary counter, async clear | 24 | [166](https://www.ti.com/lit/ds/symlink/sn74hc166.pdf) | parallel-load 8-bit shift register | 8 | [173](https://www.ti.com/lit/ds/symlink/cd74hc173.pdf) | quad D flip-flop, async clear, three-state | 24 | [181](https://www.ti.com/lit/gpn/sn54ls181) | [ALU](https://en.m.wikipedia.org/wiki/74181) | 3 | [182](https://web.archive.org/web/20160418004301/http://www.ti.com/lit/ds/symlink/sn74s182.pdf) | lookahead carry generator | 4 | [191](https://www.ti.com/lit/ds/symlink/sn74hc191.pdf) | sync presettable up/down 4-bit counter | 16 | [240](https://www.ti.com/lit/ds/symlink/sn74hc240.pdf) | octal buffer, inverting outputs | 24 | [245](https://www.ti.com/lit/ds/symlink/sn74hc245.pdf) | octal bus transceiver, non-inverting outputs | 32 | [273](https://www.ti.com/lit/ds/symlink/sn74hc273.pdf) | Octal D-Type Flip-Flops With async Clear | 8 | [373](https://www.ti.com/lit/ds/symlink/cd74hc373.pdf) | octal transparent latch | 20 | | [377](https://www.ti.com/lit/ds/symlink/sn74hc377.pdf) | 8-bit register, clock enable | 16 | [534](https://www.ti.com/lit/ds/symlink/cd74hc534.pdf) | octal D-type edge-triggered flip-flop, inverting outputs | 16 | [574](https://www.ti.com/lit/ds/symlink/sn74hc574.pdf) | octal D-type edge-triggered flip-flop | 16 | [595](https://www.ti.com/lit/ds/symlink/sn74hc595.pdf) | 8-bit shift registers, serial-in, parallel-out, output latches, output enable | 24 | [670](https://www.ti.com/lit/ds/symlink/cd74hc670.pdf) | 4x 4-bit register file, three-state | 16 | [688](https://www.ti.com/lit/ds/symlink/sn74hc688.pdf) | 8bit comparator | 16 | [4002](https://www.ti.com/lit/ds/symlink/cd74hc4002.pdf) | dual 4-input NOR gate | 16 | [4078](https://datasheet4u.com/pdf-down/7/4/H/74HC4078_STMicroelectronics.pdf) | single 8-input OR/NOR gate | 2 ## Other | Num | Description | Qty | | --- | -------------------------------------- | --- | | [TLC555](https://www.ti.com/lit/ds/symlink/tlc555.pdf) | [555](https://en.m.wikipedia.org/wiki/555_timer_IC) timer IC | 4 | [SST39SF010](https://ww1.microchip.com/downloads/aemDocuments/documents/MPD/ProductDocuments/DataSheets/SST39SF010A-SST39SF020A-SST39SF040-Data-Sheet-DS20005022.pdf) | 1 MBit Multi-Purpose Flash | 7 | [AS6C1008](https://eu.mouser.com/datasheet/2/12/AS6C1008_Mar_2023V1_2-3386077.pdf) | 128k x 8 bit low power CMOS SRAM (55ns) | 4 | [AS6C62256](https://eu.mouser.com/datasheet/2/12/AS6C62256_23_March_2016_rev1_2-1288423.pdf) | 32k x 8 bit low power CMOS SRAM (55ns) | 8 | [AS7C256C](https://www.alliancememory.com/wp-content/uploads/pdf/sram/fa/AllianceMemory_AS7C256C-15PCN_Datasheet_Rev1.0_June2024.pdf) | 32k * x bit low power CMOS SRAM (15ns) | 8 |