Monday, March 25, 2013

NCB85 5. File I/O

Prvý program Hello World overil funkčnosť konzolového I/O a cross compilácie. Druhý program otestoval spracovanie vstupných parametrov z CP/M príkazového riadku. Ďalším krokom je test file systému. Pripravil som krátky program, ktorý vypíše na konzolu obsah súboru. Názov súboru sa zadáva ako parameter. Ak sa nezadá žiadny parameter, alebo viac ako jeden parameter, program vypíše usage. Ak sa nepodarí otvoriť súbor, tak vypíše chybové hlásenie.
/*
* File: main.c, march 2013
* file test on CP/M
*/
#include <stdio.h>

FILE *input;

/**
* main routine
* @return
*/
main(int argc, int argv[]) {
    char k;
    print("File test\r\n");

    if (argc == 2) {
       print("file:");
       print(argv[1]);
       print("\r\n");

       if ((input = fopen(argv[1], "r")) == NULL) {
          print("Open failure\n");
          exit(1);
       }

       while ((k = fgetc (input)) != EOF) {
          putchar(k);
       }

       fclose(input);
    } else {
       print("usage: fltst file.ext");
    }
}

print(char *str) {
    while (*str) {
       putchar(*str++);
    }
}

CRTSO sa zase trošku zmenilo. Pribudla inicializácia STDIO systému. Toto je asi aj finálna verzia. Už tam je všetko, čo je potrebné na prácu v CP/M.
    lxi h,0
    dad sp
    shld stksav ; save the stack pointer
    lhld 6 ; pick up core top
    lxi d,-10 ; decrease by 10 for safety
    dad d
    sphl ; set stack pointer
    call stdioinit ; initialize stdio
    lxi h,0x0080
    push h
    call Xarglist
    lhld Xargc
    push h
    lxi h,Xargv
    push h
    call main ; call main program
    jmp 0
stksav: .ds 2
crtsoend:
    .end

Do projektu pribudli ďalšie podporné súbory: io8080.c, bdos1.c a exit.c

Building project
scc8080 -t -a main.c
as8085 -l -o -s -p -g main.s
scc8080 -t -a bdos.c
as8085 -l -o -s -p -g bdos.s
scc8080 -t -a chio8080.c
as8085 -l -o -s -p -g chio8080.s
scc8080 -t -a arglist.c
as8085 -l -o -s -p -g arglist.s
scc8080 -t -a charclass.c
as8085 -l -o -s -p -g charclass.s
scc8080 -t -a io8080.c
as8085 -l -o -s -p -g io8080.s
scc8080 -t -a bdos1.c
as8085 -l -o -s -p -g bdos1.s
scc8080 -t -a exit.c
as8085 -l -o -s -p -g exit.s
as8085 -l -o -s -p -g cret.asm
as8085 -l -o -s -p -g crun8080lib.asm
aslink -n -i -u -o -m -b CRET=0x0100 -b LIB8080=crtsoend+0x0100 -b SMALLC_GENERATED=crun8080_end+crtsoend+0x0100 cmd cret.rel crun8080lib.rel main.rel bdos.rel chio8080.rel arglist.rel charclass.rel io8080.rel bdos1.rel exit.rel
sort -k1.8,1.9 -k1.4,1.7 cmd.ihx > cmd.hex
hex2bin -e com -c cmd.hex
hex2bin v1.0.1, Copyright (C) 1999 Jacques Pelletier
Lowest address = 00000100
Highest address = 00001DD3

Build finished


Výsledný COM sa nafúkol na cca 7.5kB. Z toho sú ale 2kB buffer pre čítanie sektorov z filesystému. To preto, lebo je dovolené mať otvorené naraz až 4 súbory. Odhadom ďalšie 0.5kB sú pomocné štruktúry ako 4x FCB atď.

NCB85 4. Command line params

Hello World bol prvý krok. Ďalší krok je otestovanie parametrov zadávaných v príkazovom riadku CP/M. CRTSO bude trošku zložitejšie.

; Run time start off for Small C.
.module CRET
.area CRET (REL,CON) ;program area CRTSO is RELOCATABLE
.list (err, loc, bin, eqt, cyc, lin, src, lst, md)
.nlist (pag)
.globl crtsoend

lxi h,0
dad sp
shld stksav ; save the stack pointer
lhld 6 ; pick up core top
lxi d,-10 ; decrease by 10 for safety
dad d
sphl ; set stack pointer
lxi h,0x0080
push h ; line buffer is at 0080H
call Xarglist
lhld Xargc
push h
lxi h,Xargv
push h
call main ; call main program
jmp 0 ; warm boot, reload CCP
stksav: .ds 2
crtsoend:
.end

Musel som upraviť dodaný CRTSO k SmallC pretože nefungoval. Pridal som riadok s LXI H,0080 a PUSH H. Následne volaná C rutina Xarglist totižto očakáva vstupný parameter char pointer na buffer s obsahom príkazového riadku. Rozparsuje buffer podľa medzier a naplní Xargc a Xargv globálne premenné. Pôvodný stack ukazoval na priestor v CCP, kde bolo miesto na 8 úrovní. Túto hodnotu síce ukladáme, ale po ukončení sa aj tak nepoužije. Jednoduchšie je zavolať warm boot, ktorý reloadne CCP.

C program

/*
* File: main.c, march 2013
* command line arguments testing on CP/M
*/

/**
* main routine
* @return
*/
main(int argc, int argv[]) {
    int i;
    print("Argument test\r\n");

    for (i=1; i < argc; i++) {
       print("arg:");
       putchar('0' + i);
       print(", value:");
       print(argv[i]);
       print("\r\n");
    }
}

print(char *str) {
    while (*str) {
       putchar(*str++);
    }
}

V main metóde sa zmenila hlavička. Už máme dva parametre. Prvý je počet parametrov argc. Ale čo ten druhý ? Malo by tam byť napr. char *argv[]. Čiže pole pointerov na char. Žial SmallC umožňuje iba jednu úroveň indirekcie. Využíva sa tu trik, že pointer je rovnako veľký ako int. Takže to pole integerov je vlastne to isté ako pole pointerov. Toto je ďalšia oblasť, kde by sa mohlo SmallC vylepšiť.

Spustenie programu na CP/M

A0>cmd a b -t
Argument test
arg:1, value:A
arg:2, value:B
arg:3, value:-T


To vyzerá dobre :-)

Build

K main.c, bdos.c a chio8080.c pribudli ďalšie dva súbory: arglist.c a charclass.c.
Building project
scc8080 -t -a main.c
as8085 -l -o -s -p -g main.s
scc8080 -t -a bdos.c
as8085 -l -o -s -p -g bdos.s
scc8080 -t -a chio8080.c
as8085 -l -o -s -p -g chio8080.s
scc8080 -t -a arglist.c
as8085 -l -o -s -p -g arglist.s
scc8080 -t -a charclass.c
as8085 -l -o -s -p -g charclass.s
as8085 -l -o -s -p -g cret.asm
as8085 -l -o -s -p -g crun8080lib.asm
aslink -n -i -u -o -m -b CRET=0x0100 -b LIB8080=crtsoend+0x0100 -b SMALLC_GENERATED=crun8080_end+crtsoend+0x0100 cmd cret.rel crun8080lib.rel main.rel bdos.rel chio8080.rel arglist.rel charclass.rel
sort -k1.8,1.9 -k1.4,1.7 cmd.ihx > cmd.hex
hex2bin -e com -c cmd.hex
hex2bin v1.0.1, Copyright (C) 1999 Jacques Pelletier
Lowest address = 00000100
Highest address = 00000827
Build finished
Výsledný COM už narástol na 727 bytov hexadecimálne.

Sunday, March 24, 2013

NCB85 3. Cross compiled Hello World

Používať moderné IDE na vývoj pre CP/M nie je žiadna prevratná myšlienka. Fakt ale je, že to skoro nikto nerobí. Snáď preto, že starí CP/M harcovníci majú odpor k Windows, alebo možno preto, že iba nepoznajú silu a výhody moderných IDE. Preto som sa do toho vrhol ja.

Každý C program začína metódou "main()". Lenže v CP/M sa programy spúšťajú od adresy 0x0100. Ako na to ? Písať k main niečo ako ORG 0x0100 by nebolo to pravé orechové. Robí sa to inač. Každý program v C má zavádzač. Nazýva sa C Run Time Start Off, skrátene CRTSO. Pre CP/M by mohol vyzerať takto nejako:
;   Run time start off for Small C.
;   cseg
    .module CRET
    .area CRET (REL,CON) ;program area CRTSO is RELOCATABLE
    .list (err, loc, bin, eqt, cyc, lin, src, lst, md)
    .nlist (pag)
    .globl crtsoend
    lxi h,0
    dad sp
    shld stksav
    lhld 6 ; pick up core top
    lxi d,-10 ; decrease by 10 for safety
    dad d
    sphl ; set stack pointer
    call main ; call main program
    lhld stksav ; restore stack pointer
    sphl
    ret ; go back to CCP
stksav: .ds 2
crtsoend:
    .end
Všimnime si volanie "call main". Áno to je ono. Tu nám zavádzač spúšťa našu main metódu. Tá bižutéria okolo, je už len presunutie zásobníka. Vlastnej tvorbe a fantázii sa medze nekladú. Musel som upraviť SmallC verziu pretože, neviem prečo ale bola zlá. Hneď na začiatku bolo SPHL. Nastavenie SP na hodnotu v HL. Ale to je asi blbosť. Veď CP/M nedáva v HL žiadnu hodnotu hovoriacu o zásobníku. Zase keby som nechal SP bez zmeny, tak by ukazoval niekam do CCP kde je priestor iba pre 8 úrovní. Preto som zvolil inú taktiku. Radšej si ho alokujem tam kde bolo CCP a miesta mám habadej.

C zdrojáky

SmallC nám všetky C zdrojáky preloží do ASM. Ďalší krok je spustiť assembler ktorý spracuje tieto vzniknuté ASM. Posledný krok je link. Linker nám musí zostaviť výsledný program, pozostávajúci z viacerých REL súborov. REL sú relokovateľné fragmenty. Je to výsledok volania assemblera. Linker ich zostaví do jedného celku, pričom na adrese 0x0100 bude ako prvý CRTSO. Ostatné fragmenty už môžu ísť v ľubovoľnom poradí za ním. Pri Hello World si vystačíme s tromi C súbormi.

/*
* File: main.c, march 2013
* hello world on CP/M
*/

/**
* main routine
* @return
*/
main() {
    print("Hello World!!");
}

/**
* prints zero terminated string
* @param str
* @return
*/
print(char *str) {
    while (*str) {
       putchar(*str++);
    }
}


Druhý súbor je z knižice SmallC. Je to chio8080.c
#define EOL 10
getchar() {
    return (bdos(1,1));
}

putchar (c) char c; {
    if (c == EOL) bdos(2,13);
    bdos(2,c);
    return c;
}


BDOS služba 1 je vstup jedného znaku z konzoly. BDOS služba 2 je výstup jedného znaku na konzolu. Posledný súbor je bdos.c ktorý už len zavolá CALL 5 volanie CP/M BDOS. Listing neuvádzam. Je to len CALL 5 a nejaké POP a PUSH.

COM file

Výstupom linkera je Intel HEX súbor. CP/M potrebuje spustiteľný COM file. Je možné nahrať na CP/M stroj HEX súbor a pomocou príkazu LOAD ho prekonvertovať na COM. Dá sa to ale aj priamo na Windows. Použijeme utilitu hex2bin, ktorá robí presne to isté. Naviac nám do build okna vypíše aj veľkosť výsledného COM.

Building project
scc8080 -t -a main.c
as8085 -l -o -s -p -g main.s
scc8080 -t -a bdos.c
as8085 -l -o -s -p -g bdos.s
scc8080 -t -a chio8080.c
as8085 -l -o -s -p -g chio8080.s
as8085 -l -o -s -p -g cret.asm
as8085 -l -o -s -p -g crun8080lib.asm
aslink -n -i -u -o -m -b CRET=0x0100 -b LIB8080=crtsoend+0x0100 -b SMALLC_GENERATED=crun8080_end+crtsoend+0x0100 hello cret.rel crun8080lib.rel main.rel bdos.rel chio8080.rel
sort -k1.8,1.9 -k1.4,1.7 hello.ihx > hello.hex
hex2bin -e com -c hello.hex
hex2bin v1.0.1, Copyright (C) 1999 Jacques Pelletier
Lowest address = 00000100
Highest address = 00000374
Build finished


Po nahratí na CP/M stroj a spustení COM súboru nám to naozaj vypíše Hello World!!
Niekomu by sa COM súbor zdal moc veľký. Je to spôsobené tým, že je tam prilinkovaná kompletná run-time knižnica crun8080lib. Táto obsahuje aj napríklad rutiny na násobenie, delenie, rotácie, switch príkazy a kopu ďalších, ktoré v Hello World nepoužívame.

Monday, March 18, 2013

NCB85 2. XMODEM

Dotaz na Rádio Jerevan: Je pravda, že každý návštěvník Rudého náměstí v Moskvě dostane auto?
Odpověď: V principu ano. Ovšem nejedná se o Rudé náměstí v Moskvě, ale o Náměstí Gorkého v Kijevě. Také se nejedná o auta, ale o kola. A nejsou rozdávána, ale kradena.

S nadpisom tohoto blogu je to tak trošku podobné. Nejedná sa o NCB85 ale o ZetaSBC. Prisahám, že to sú všetky rozdiely ;-)

Pripravil som kratučké video, ktoré ukazuje ako používať výbornú utilitku XMODEM na prenos file medzi CP/M a Windows. V tomto videu je použitá ZetaSBC a nie NCB85, nakoľko ešte nie je hotový PMD32SD a interface. Prenos je smerom z PC na Zetu. Samozrejme ide to aj opačne. Video je tu preto, lebo som zistil, že nie všetci CP/M používatelia o takejto možnosti vedia. A nie je celkom triviálne prísť ako na to. Dík Martine za asistenciu :-)



Celkom na záver si neodpustím ešte jeden krátky.

Dotaz na Rádio Jerevan: Kde vlastně sedí ten, co vymýšlí vtipy na Radio Jerevan?
Odpověď: To bohužel nevíme, ale sedí zcela určitě!

Saturday, March 2, 2013

XT mánia 4. XT-IDE BIOS a IDE karty

Počítače PC nikdy neboli predmetom lásky zberateľov a retro nálad. Dôvod bude asi v tom, že PC zatiaľ neumrelo a ani sa nechystá na odchod. Ale časy sa predsa len menia. Komunita začína brať na milosť triedu XT. Žeby to bolo, tým že je to s prižmurením obidvoch očí len 8-bit ? ;-)

XT-IDE BIOS

Ľudia okolo vintage-vomputer.com vytvorili hlavne v poslednom roku veľa úžasných vecí. Jedna z tých úžasných vecí je XT-IDE BIOS, aj keď ten zrovna už má asi tri roky. Neradno si ho zamieňať s XT-IDE kartou. Vzťah medzi nimi je taký, že XT-IDE karta potrebuje XT-IDE BIOS. Ale naopak to neplatí. Práve naopak, XT-IDE BIOS podporuje aj iné typy kariet.

XT-IDE BIOS má aj podporu bootovania cez UART. To je možné použiť ako poslednú záchranu ak na PC nefunguje už ani jedna disketová mechanika. Umožňuje emuláciu ktoréhokoľvek disku alebo diskety.

A to nie je všetko. Umožňuje nabootovať z ktoréhokoľvek disku na ktorýkoľvek disk. Vysvetlíme na príklade. Majme dve disketovky A: a B: a dva disky C: a D:. Ak mám systémovú disketu napr. 5.25" do mechaniky B: tak nie je problém nabootvať z nej. Pri zobrazení XT-IDE menu, stlačím klávesu B. Bios si prehodí disketové mechaniky a z B sa stane A a naopak. A potom natiahne systém z mojej 5.25". Paráda. A dá sa ísť ešte ďalej. Potrebujem nastaviť aktívnu partition na disku D ? Že to nejde ? Aktívne partície sa dajú nastavovať len na prvom disku. Lenže ak stlačím klávesy D a B stane sa nasledovné. Disk D sa prehodí s diskom C. Disk B sa prehodí s diskom A. Nabootojem z B a ako prvý disk mám D. A môžem mu nastaviť aktívnu partíciu. Bez otvárania počítača a prehadzovania káblov alebo jumperov.

IDE karty

IDE karty neboli vôbec bežné na PC/XT. IDE disky sú 16-bitové čo nefunguje na 8-bitovej ISA zbernici. Preto je do XT treba kartu, ktorá vytvorí 16-bitové rozhranie k disku. S IDE rozhraním pracujú aj CF karty a CF Microdrives. Lenže tieto zariadanie podporujú aj 8-bitové prenosy. A to už začína byť zaujímavé.

XT-IDEv2 karta je karta do 8-bitového ISA slotu. Obsahuje potrebné obvody na 16-bitové IDE rozhranie a má on-board BIOS. On-board EEPROM môže byť naprogramovaná cez DOS program. Podporuje disky do veľkosti 137GB (DOS 6.22 vie robiť s najväčším diskom 8.4GB). Má konektor na IDE kábel, na ktorý sa dajú pripojiť dva disky. Umožňuje použitie CF kariet cez adaptér.

XT-CF-Lite je karta do 8-bitového ISA slotu. Obsahuje potrebné obvody na 16-bitové IDE rozhranie a má on-board BIOS. On-board FLASH ROM môže byť naprogrovaná cez DOS program. Je postavená SMD technológiou, čo nie je vhodné pre úplných začiatočníkov v letovaní. Umožňuje pripojiť len CF karty alebo microdrives. Sergey práve navrhol jej klon, používajúci len klasické nožičkové obvody. Ale CF konektor sa nevyrába inak len v SMD, takže stále je tu problém povrchového letovania.


16-bit Multi-IO karta

Nakoniec sa dajú použiť staré bežne dostupné 16-bit ISA karty z AT počítačov bez on-board BIOSu. Jedná sa o rôzne typy, používali čipy Winbond, Prime, RMC atď. Zväčša obsahujú aj FDD controlér a veľmi výhodné je aj osadenie dvoch sériových a jedného paraleleného portu. Po použití takejto karty obsadíme iba jeden 8-bit ISA slot plus druhý na kartu s prídavným BIOSom. Tá menšia, prídavná časť ISA, čo je horný byte, ostane vo vzduchu. Je treba dávať pozor aby nedošlo k skratu s inými súčiatkami na motherboarde. 16-bitové IDE rozhranie má teda nezapojenú hornú polovicu a tým by sa dalo, že bude nefunkčné. Ale nie je to tak. Stále sa dá použiť ale, len v 8-bitovom móde. Takže stačí adaptér a dajú sa pripojiť CF karty a microdrives. Paráda.

ROM karta

Ako miesto pre prídavný BIOS potrebujeme ROM priestor. Dá sa použiť napríklad aj stará sieťová karta s ROM socketom, kam dáme naprogramovanú EPROM. Kto nemá programátor EPROM bude skôr hľadať niečo čo sa dá naprogramovať softwarovo. Na to vznikla FLASH ROM 8-bitová ISA karta. Pri zmene programu netreba otvárať počítač, stačí flashnúť (prakticky neobmedzene veľa krát) ROMku cez jednoduchý programík.

Friday, March 1, 2013

XT Mánia 5. FDC BIOS a disketovky

PC/XT vedelo pracovať s (malo podporu v BIOSe) mini disketami DS/DD o rozmere 5.25 palca s kapacitou 360kB (double sided - DS ,40 stôp a 9 sektorov, double density - DD). Tie boli vtedy najnovší výdobytok techniky a predstavovali obrovské vylepšenie oproti pôvodne 90kB 5.25" disketám (jednostranové, single density). Pokrokom v technológii hláv sa zvýšila hustota záznamu dvojnásobne a využitie aj druhej strany diskety zoštvornásobilo pôvodnú kapacitu. Okrem nich sa objavovali aj mikrodiskety s kapacitou 720kB. Jednalo sa o 3.5" palcové diskety s 80 stopami a 9 sektormi na stopu. Keď tie veľké sa volali mini diskety a tie malé sa volali microdiskety, čo potom boli diskety ? Tak tie asi veľa ľudí nevidelo. Boli to 8 palcové diskety s rôznymi kapacitami. Používali sa v celej možnej rozmanitej škále počítačov, ako to bolo na trhu normálne pred príchodom PC, ktorý zvalcoval všetko. Ich vek sa skončil s nástupom PC. Ja som sa s nimi stretol na počítači SM50/50. Kapacitu mali cca 80kB.

Lenže pokrok sa nedá zastaviť a veľmi skoro sa na už znormalizovanom PC trhu objavili High Density diskety. Využitím nového materiálu na magnetický záznam s vyššou koercivitou a teda aj vyššími prúdmi pri zápise sa mohla zase zvýšiť hustota záznamu. Zároveň sa zmenil dovtedy štandardný počet stôp u 5.25" mechaník zo 40 na 80. Tak vznikli dva nové formáty:
5.25" DS/HD mini diskety 1.2MB (80 stôp, 15 sektorov, double sided - DS, high density - DD)
3.5" DS/HD micro diskety 1.44MB (80 stôp, 18 sektorov, double sided - DS, high density - DD)


Diskety a mechaniky s kapacitou 1.2MB sa stali podľa môjho subjektívneho názoru najnepotrebnejším :-) vylepšením v dejinách PC. Spôsobovali problémy s čítaním na starších 360kB mechanikách, pretože sa nielen zvýšil počet stôp ale sa aj zúžila šírka hlavy na polovicu. Takže pri zápise na 360kB diskety sa neprepisovala celá stopa, ale len jej časť. Ak bola disketa naformátovaná na 360kB a potom sa zapísali údaje na 1.2MB mechanike tak to ešte šlo. Ale ak už obsahovala dáta zapísané na 360kB mechanike a potom sa niekto pokúšal zapísať dáta na 1.2MB mechanike, tak bolo zle. Došlo k tomu, že na pôvodnej širokej stope ostali aj pôvodné dáta (úzka hlava ich nemohla kompletne prepísať) a pribudli tam aj nové dáta zapísané na užšej hlave. Výsledok pri čítaní v mechanike 360kB bol ten, že sa človek musel veľa modliť ;-)

Občas sa dal vidieť aj ďalší hybridný formát, nazývaný quadruple density.
5.25" s kapacitou 720kB (80 stôp, 9 sektorov)

Jednalo sa o staré 360kB DD mini diskety, ale boli naformátované v high density HD mechanike s 80 stopami.

Diskety sa už prakticky nedajú kúpiť, v obchodoch len ak majú staré zásoby. Ale stále sa vyrábajú 3.5" floppy mechaniky. Dajú sa kúpiť dva druhy.
- externé USB mechaniky. Tieto ale v drvivej väčšine podporujú len 1.44MB formát
- interné mechaniky s integrovanou čítačkou kariet. Tieto podporujú aj DD diskety s kapacitou 720kB

A teraz späť k PC/XT. Kľúč k použitiu vysoko kapacitných disketoviek tkvie v addon BIOSe. Keď v základnom BIOSe tá podpora nie je, tak ju treba do PC/XT dodať. Robí sa to tak, že karta obsahuje okrem kontroléra aj BIOS.

Sergeyove FDC

Sergey Malinov je človek s vysokou produktivitou. Na vintage-forum sa vývoj nových kariet ťahá dlho. Robia sa testy a preprodukčné série. Nič pre netrpezlivých ľudí. Sergey si navrhne kartu a nechá vyrobiť PCB za pár dní. Jeho 8-bitová ISA FDC karta používa čip Intel 82077AA alebo National Semiconductor PC8477. Martin zistil, že varianta od National je oveľa lepšia, podporuje širšiu paletu rôznych formátov. Karta nemá veľa možností nastavovania a umožňuje pripojiť len dva mechanky.
Sergey tam navyše pridal jeden UART čo je vždy užitočné. Nastavovať sa dá I/O addresa v rozsahu: 3F8h, 2F8h, 3E8h, 2E8h. Nastaviť sa dá aj interrupt: IRQ3, IRQ4, IRQ5.

Silnou stránkou je BIOS. Sergey ho napísal tak, aby bol konfigurovateľný. Ako to dokázal na PC/XT bez CMOS RAM ? Jednoducho :-) Funguje to tak, že konfiguračné parametre sa ukladajú do EEPROM. Z toho dôvodu BIOS zaberá len rozsah 0000h-1DFFh. Od 1E00h vyššie ju časť určená pre konfiguračné dáta. Súčasťou BIOSu je aj konfigurátor s Menu a možnosťou uloženia konfigurácie do EEPROM. Vychádza z predpokladu, že sa používa EEPROM 2764. Na iných EPROM/EEPROM/FLASH čipoch nebude fungovať možnosť uloženia konfigurácie.


XT-FDC

XT-FDC je 8-bitová ISA karta, ktorá používa National Semiconductor PC8477B alebo DP8473 kontroléry. Podporuje až štyri floppy disky. Má aj konektor pre externú mechaniku, na ktorú bude možné pripojiť dve emchaniky. Bude podporovať aj 8" mechaniky. Práve (je koniec februára 2013) sa chystá výroba prvej várky PCB. http://www.vintage-computer.com/vcforum/showwiki.php?title=XT-FDC+Rev1
BIOS pre XT-FDC je .. ten istý, čiže Sergeyov FDC BIOS. EPROM môže byť 28C64 alebo 28C256.

16-bitové Multi IO karty + BIOS Rom karta

Ďalšia možnosť je používať 16-bitové široko rozšírené Multi/IO karty, ktoré sa montovali do počítačov so 16-bitovou ISA zbernicou. Čiže tie dobre známe karty z rôznych 286/386/486 tiek. Tieto karty nemajú on-board BIOS. Dôvod je, že už základný PC/AT BIOS obsahoval podporu HD mechaník. PC/AT už mali aj CMOS RAM pre konfiguráciu. Pretože floppy rozhranie je 8-bitové, aj tieto 16-bitové karty v skutočnosti používajú len 8-bitovú časť ISA zbernice. Väčšinou mali na sebe aj radiče pre dva sériové a jeden paralelený port. Tieto tiež používajú len 8-bitovú časť ISA a preto aj v PC/XT fungujú. Jediná 16-bitová časť na týchto kartách bol radič pre IDE hard disky.

Nič nebráni tomu, dať do jedného slotu takúto kartu a do druhého slotu prídavný BIOS. Ako miesto pre prídavný BIOS sa dá použiť aj napríklad stará sieťová karta s ROM socketom. Alebo sa dá použiť 8-bitová ISA ROM karta.