Skip to the content
2 layers189.7 × 95.9 mmISACard, the printed circuit board in 3D

A ISA card for PC/XT/AT that has SD storage and SPI/I2C interfaces using a ATMEGA328P

Size
189.7 × 95.9 mm
Copper layers
2
Thickness
1.6 mm
Parts
101
Nets
167
Pads
506
Tracks, vias
1,859, 124
Pours
1
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
23 Jun 2022
Updated
23 Dec 2025

Overview

ISACard is an open-source printed circuit board by profdc9, from the profdc9/ISACard repository on GitHub. It is a 2-layer board of 189.7 × 95.9 mm with 101 parts on 167 nets, routed with 1,859 tracks and 124 vias.

It is built around the ATMEGA328P-PU, 74LS32SC and 74LS86. Its parts include 34 resistors, 13 capacitors, 13 ICs, 9 diodes and 5 connectors. It belongs with the interfaces and adapters boards and the AVR (ATmega, ATtiny) boards of this library.

Main components

3

README

README.md

PC Storage Interface and Arduino Inteface

This is a simple card that provides two SD cards as mass storage devices on PC compatibles in an ISA slot. This design is an adaptation of the Apple II version of the card (https://www.github.com/profdc9/Apple2Card). For building in the future, it is designed to use only the most common chips: 74HCT32, 74HCT86, 28C64B/27C128/28C256, 82C55A, and ATMEGA328P. It does not use Compactflash format as that is a rather uncommon memory card format at the time of this writing (Oct 2025). The SD card interface is not as fast as a Compactflash card, however, being read through SPI. Hopefully, the components to build this board will be available for many years to come to retro enthusiasts.

There is also a 10 pin SPI port to connect an external Wiznet 5500 Ethernet port. A simple packet driver is written to interface this to the MSDOS TCP/IP stacks as described below.

The Arduino firmware (in the ISA2Arduino directory) communicates through the 8255 bidirectional parallel port to the ISA bus. It can expose a SD card either as a single raw block device, or it can use an image file on a FAT16/32 filesystem on the SD card as the block device. Block device image files are named BLKDEVXX.IMG where XX is a hexadecimal number between 01h and 0FFh denoting the file number. The default (and fallback) is to use BLKDEV01.IMG on the SD card in SLOT 1 if it is formatted for a FAT FS. There is a MSDOS COM file called "SETBLKDV" that sets the block device number to both SD slots, with the format being:

shell
SETBLKDV <I/O address in hex> <block device number slot 1 in hex> <block device number slot 2 in hex>.

For example, to set the block device to 02h on slot 1 and 0Ch on slot 2, with the card being at I/O address 0330h:

shell
SETBLKDV 330 02 0C

Block device number 00h is reserved for exposing the entire SD card as a raw block device (partition table and everything) to the host. If you do not intend for the entire card to be usable and modifiable by the host, then do not choose this option. Most modern SD cards have a very large capacity as compared to what MSDOS is designed to handle. SD cards with up to 8.4 GB capacity can be accommodated by C/H/S addressing using 255 heads and 63 sectors, but larger cards can be accommodated only by LBA. Therefore larger cards are likely only to be usable by FreeDOS or another operating system designed to handle that case.

The BIOS on the card is a modified version of the XT IDE Universal BIOS with a driver added for the SD card device. It must be configured using the xtidecfg.com program as is required by other versions of the XT IDE Universal BIOS. As a bonus, you get the other features of the XT IDE Universal BIOS as well, and it should support the other IDE devices already in the BIOS. The card supports up to a 32 KB ROM, with the jumpers enabling 8K, 16K, or 32K ROM sizes. Read only and writing may also be enabled for the EEPROM so that the flash utility may work.

As with other ISA cards that use a BIOS expansion ROM (https://minuszerodegrees.net/rom/misc/ROM%20-%20BIOS%20expansion%20ROM.jpg), a model IBM 5150 (original IBM PC) must have a 10/27/82 dated revision of the motherboard BIOS (https://minuszerodegrees.net/5150/bios/5150_bios_revisions.htm), or a Compaq Portable must have at least revision C of the motherboard BIOS.

The jumpers to set the BIOS location are labeled M13 to M17 on the board so that the ROM may be located to any 8k address in the upper 0C0000h to 0FFFFFh address space. A shorted jumpered location indicates a zero bit, and an open jumper location is a one bit. For example, address 0D0000h (the most common XT IDE Universal BIOS address) is M17, M15, M14, M13 shorted, and M16 open. Two jumpers enable the M13 and M14 address lines to be ignored so that a larger ROM may be used. Similarly, the IO address is marked IO2 to IO9, which may be located at any multiple of four between 000h and 3FCh. For the default address 330h, the jumpers are set to: IO7, IO6, IO3, IO2 shorted, IO9, IO8, IO5, IO4 open. JP17 sets the ROM size to be 32K or 8K/16K, and JP19 sets the ROM size to be 8K or 16K. JP18 sets the ROM to be read only or ready to be flashed.

There is an ICSP connect that may be used to flash the ATMEGA328P in situ. Make sure any SD cards are removed from the slots before flashing! JP10 must be jumpered to power the board with the programmer.

JP9 shorts out a diode that drops the voltage on the ATMEGA328P. Usually JP9 should be present but may be removed if there are problems with some SD cards. J4 is a debugging connector, and J3 is a connector intended to go to a Wiznet 5500 ethernet module through a 10 position IDC cable.

Using the ethernet capability.

A common Wiznet W5500 adapter board can be connected to the PC card using a 10 pin IDC ribbon cable. A photograph of this board is shown below. This adapter board has a 10 pin header on it with a pinout that corresponds to a 10 pin header marked "EXTSPI/W5500" on the card. A 10 pin IDC ribbon cable may be used to connect the two boards. A DOS Ethernet packet driver has been written to allow a TCP/IP stack such as MTCP (https://www.brutman.com/mTCP/) to be used in MSDOS which this driver has been tested with. This packet driver has the following invocation:

shell
ISA5500 <Software IRQ> <Hardware IRQ> <I/O Address>.

For example, with a software IRQ of 0x60, hardware IRQ of 3, and an I/O address of 0x330, the invocation command is:

shell
ISA5500 0x60 3 0x330

Because the ethernet and SD card share the same microcontroller, they can not be used simultaneously, and the drivers take turns between mass storage calls and ethernet calls. In order to assemble the packet driver into a COM executable, you will need an assembler like Microsoft or Turbo assembler, and the assemble source files from the packet driver distribution (PKTD11A.ZIP PKTD11B.ZIP PKTD11C.ZIP) (http://crynwr.com/drivers/). You also need to add this to the Makefile:

makefile
isa5500.com: head.obj isa5500.obj tail.obj
	$(LINK) head isa5500 tail,isa5500/m;
	exe2com isa5500
	del isa5500.exe

ISACard

ISACardPicture

Licensing

The software derived from the GNU General Public License 2.0 (XT IDE Universal BIOS) is likewise licensed under the GNU General Public License 2.0 as required by the license with the modified source code being publically made available here on the GitHub. Often software written by me is licensed under the zlib license.

The schematic designs (but not the circuit design itself) and the PCB layouts are copyrighted according to the Creative Commons 4.0 Attribution Share-Alike license.

None of these licenses should prevent anyone who wishes to reproduce this hardware and software and sell it from doing so, even for a profit. However, source code modifications to the GPL licensed code must be made available with the product and likewise licensed under the GPLv2.

Parts

101
QtyValueFootprintReferences
1910kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR1, R2, R3, R4, R5, R6, R11, R12, R13, R14, R15, R18, R26, R28, R31, R33 +3
10100 nFCapacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mmC1, C2, C6, C7, C11, C12, C13, C14, C15, C16
71kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR16, R22, R23, R25, R30, R32, R37
61N4148Diode_THT:D_DO-35_SOD27_P7.62mm_HorizontalD1, D2, D4, D6, D8, D9
474LS32Package_DIP:DIP-14_W7.62mm_SocketU3, U4, U8, U9
474LS86Package_DIP:DIP-14_W7.62mm_SocketU1, U2, U6, U7
4JPConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJP16, JP21, JP22, JP23
3Jumper_3_OpenConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJP17, JP18, JP19
3LEDLED_THT:LED_D3.0mmD3, D5, D7
220 pFCapacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mmC3, C4
2470RResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR21, R24
24k7Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR27, R29
2A2Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJP3, JP11
2A3Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJP4, JP12
2A4Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJP5, JP13
2A5Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJP6, JP14
2A6Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJP7, JP15
2MicroSD_SPI_CDISACard:GCT-MEM2055-00-190-01-AU12, U13
2MountingHoleMountingHole:MountingHole_3.7mmH1, H2
2PWRConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJP9, JP10
110 uFCapacitor_THT:CP_Radial_D5.0mm_P2.00mmC17
1100kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR10
1100kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR17
116 MHzCrystal:Crystal_HC49-U_VerticalY1
122kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR35
128C256Package_DIP:DIP-28_W15.24mm_SocketU10
12N3904Package_TO_SOT_THT:TO-92_Inline_WideQ1
182C55APackage_DIP:DIP-40_W15.24mm_SocketU5
1A0Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJP1
1A1Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJP2
1A7Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJP8
1ATmega328P-PPackage_DIP:DIP-28_W7.62mm_SocketU11
1Bus_ISA_8bitISACard:BUS_ISA8J1
1Conn_01x04Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ4
1Conn_01x16Connector_PinHeader_2.54mm:PinHeader_1x16_P2.54mm_VerticalJ5
1EXTSPIConnector_PinHeader_2.54mm:PinHeader_2x05_P2.54mm_VerticalJ3
1ICSPConnector_PinHeader_2.54mm:PinHeader_2x03_P2.54mm_VerticalJ2
1NCResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR36
1SW_PushButton_Switch_THT:SW_PUSH_6mmSW1

More from profdc9/ISACard

1
  • 2 layers62.2 × 57.2 mmExtCard, the printed circuit board in 3D

    ExtCard

    profdc9/ISACard

    A ISA card for PC/XT/AT that has SD storage and SPI/I2C interfaces using a ATMEGA328P

    36 parts46

Similar boards

  • 4 layers218.4 × 114 mmVideo v2.0, the printed circuit board in 3D

    Video v2.0

    ksr/YACC1-D

    YACC1 (Yet Another Custom CPU) - definitive tree: hardware, firmware, software, tools and docs for the hand-built TTL computer. Supersedes ksr/YACC1-2020.

    121 parts
  • 2 layers370.8 × 298.5 mm8 Bit Computer, the printed circuit board in 3D

    8 Bit Computer

    The-Invent0r/8-bit-Computer-PCB

    These are the KiCAD files for my 8-Bit Computer.

    323 parts142
  • 4 layers337.6 × 105.7 mmISA CGA, the printed circuit board in 3D

    ISA CGA

    hkzlab/CGA_Redux

    The Color Graphics Adapter Redux board is a more or less faithful clone of the original IBM CGA, based on the original schematics

    170 parts56
  • 2 layers100 × 77.5 mmLanguageCard, the printed circuit board in 3D

    LanguageCard

    btb/LanguageCard

    An Apple II Language Card. Based on a design by iz8dwf

    42 parts45Apache-2.0
  • 2 layersSap be, the printed circuit board in 3D

    Sap be

    kyllikki/eda-designs

    EDA designs

    148 parts32MIT
  • 4 layers194.5 × 188.6 mmMyCpu, the printed circuit board in 3D

    MyCpu

    fortinsylvain/MyCpu

    Home brew CPU Hardware with 1-bit ALU implementation using 74LSxx, a micro-code and assembler coded in C#.

    162 parts18MIT
  • 2 layers236.8 × 169.8 mmTK2000, the printed circuit board in 3D

    TK2000

    clemarfolly/Microdigital-TK2000

    Reprodução da PCB do TK-2000 da Microdigital, clone do Micro-Professor MPF-II

    212 parts17
  • 2 layers158.8 × 76.4 mmA2card template, the printed circuit board in 3D

    A2card template

    barbeque/apple-ii-softcard

    Z80 SoftCard clone for Apple II

    19 parts11

Questions

How big is the ISACard PCB?

It measures 189.7 × 95.9 mm and has 2 copper layers, 1.6 mm thick.

What parts does the ISACard use?

101 parts, built around the ATMEGA328P-PU, 74LS32SC and 74LS86. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the ISACard KiCad files?

From the profdc9/ISACard repository on GitHub, at the commit this page was made from: the board is ISACard/ISACard.kicad_pcb and its schematic ExtCard/ExtCard.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the ISACard design in my own project?

Its repository states no licence, so its author keeps all rights: ask profdc9 before reusing the design.