diff --git a/8087/8087_microcode_01.txt b/8087/8087_microcode_01.txt new file mode 100644 index 0000000..d1830dc --- /dev/null +++ b/8087/8087_microcode_01.txt @@ -0,0 +1,64 @@ +13111222121131220022311212211113223222212221221221230122323212213122222312111212231212211322122222221202222212113222122222222321122312321332222222222302122122122222220212112222332312222112222212112222031211 +22123222222121012210201221212311112011121122113212211211132213122221222113213112113022112332220222223322222012222100021322220212122322223322222212232212132212212122131222122221321122222221002220221221223222 +31212201222202112211212332221301121222222231222312132111231211211332122111212222211211232321122112113202122221122211222122222211311223212322112122232212122122223222222223220102022212222211221221321112132132 +02223201212122012220111221121312322112222312222111231122222232122221322132222112222211212211311222222220211212202222132221223221120222223202222202221232312222221232112132102110212202232212112232003113311211 +12222212222222022311121121122121112332121121122212212222222222222111332111222112221312132121111222132131122221121221112122222202223201122321212221201221221112122122223202122222212112322212222321232122111321 +12222111332210321221232211221122211111213323222112313321232112212232112312121121311221123222322121222321122232122333122222132223221212212222211110220322222222112201222212222112221123201122222210022212223111 +22012121221331222222121222222232121312112121321231312123211113122221122121111112112113221122222221322302122223102112212211223122212122322111221112113122222211112222212232123012112232021332222233211120322210 +11212110312222211131221212122123112122220212121332231121132112121321012321221121223301111112222122102231023222211222202122123220232322212322211012223231211222122212221232101122221212222222222222021121202232 +01312123000202131033200302100012100001200200023201320100122223132321100200203302023210200110002221131022303233220222032132000002020212312011020313222022131000213210022232232330203130201022012013120023120302 +33113002221122200000212122001020000222312100200020231002301112023310022021230123332212000003123001120030000222112330031023112233211330222212203100002300021011202002012230323312132130220002001000200031102033 +30000230200023312100201102220220013001200002210013322200020000232322100231112202311102122102013000221212333202032302212132102300101130020200000010223022120200213313200331202202000002021302022031112220003203 +20221022023202203322223030202220303330122023000002232000102000023102220200033331200220020012133001100121022122203311301021120322010111312021333002330222333312300233023110220023322320201200120221012102233330 +22320023100100302210000312133200203330023220302231020300203003222010200123022003132201002201200110101022023022030330222221230220003110021231200110222022212100013330103013122212003103220221101222330221123020 +23111220232120220012002211121313101221200230000323132002320200103222110021133232122210023231033113000231010200212030311021120202013032210202222030012220202121001333002202201322223302020011023020002230102022 +23002130322022332223230021220210002001100320130130230200032013113120002010212030022030122220320101212223222010010013323321122220200212222020120000010202211023211103003022223011123010302100210011100221121202 +20302001022323221101222000011322302200103022132012221022202202002302103203120311323222012001130120201030200000323331211221122001212023200220000322233130220020302222011221232020201030030001221022123000122230 +20122002322123212202222030222112330310023021331002101233231101202133023220223220221311232000233012202030201001323220220210222031201311100121003331133222020320112333000223212022220232030320113321322000220220 +32221200232232232222130022122012222221201220210032212322113210203022232133122022012221221002222322221320223322320003223010222223330001111012010010022112120123212233032032123332223300302231320231030223312202 +03222102322203220022022023022111302330300301000323213211321211032223223223022221021332010223122221020233310200003121022010233322332023223201223030212122222130202322221203203302022232012032211002302200302002 +22030223200110232222000221202220212222222222202332221120233003223311132312222003032223312202100320232222012022220102203001030122003002022130230030112022322202213230201103122330002022220023222221222203322023 +10222022013203230022213021023132120113221211100023312003003020222311220210322332122211200102133000120222323212203302302202212223203002101012033222221132321122110322021002110012221223220120213213022202033023 +20222033202223022203202003323223131112110302300122122211222220232303121120202203322101222022002302222122313103102101201231202330223020020320211120333013022212013333300222203222232030221001001300212200033003 +23220232122222302003222022002020212222222301322010211132312330122102131131220223223112031230222033220000220230222230332033220223222331110222201213110100212212122022022112111332232023221001030003120323302023 +02212322032111332003202322312112310100320222222200121112203222222113111001223232031012222323022232232230203222223323020123032222110221121300021322032012211202223220032112130320102030220220323232313223220222 +02322223112022022032230222202232220230222022202220222202202222222322020302222332020002122222320220323201332232222212331022012222033322222033322022222022200302230123222222200213032023222312202321222012000122 +22321232222322032333332033030010202222222232222030103221223222202202222222220222222221022221231322323233023222232223322322220122221220221220200220221203223202222321023032323021222002222222020322220212231321 +20222222212223022231222002222222022222022232000222021202222220222200020020202202123332222322200202033002232012233323201222102221222020320023222221220122022022300232200222112222201003220202122212222133332102 +23022022322000030322322022322222221032222220233322222302030030222222110220222222222120230202222320023203212222202202202222212222202012301122122222222232232202023331323022223301122222220223022122023203322320 +11021202200023312220000212212123202222222122232212212233222012232232322202202001022222222202300203333220022002203222001200121222003002321230230300222032133332312323222322320320003032223222222222121232022022 +22322210222320323332102202022032202220200212330222302222212222322212222222002222022222000222222222002230233202232322322020212221020323221203222023112202221320203223223131133032321222123322222322203130223021 +21220303322222322233200012322302222222202223221022222222200021202022222222020032022230220322210223230020112122333013322020122212220202222122003320022122230222001222202321222222332201212122013322200222223232 +22202302322212300332202020222221223000022022222002200222123303201020022221222220210022322200213302332330233300222213320220232120232133000030000222222122303120223222301222220222020022223223222222222000032330 +21122112321120322122132011322320000002021321322302203032021202200330030022220023003013102131223032031131121201021020130220101120211311120131022202222233312123112201212222232322330212022122120132220113130030 +22120032222132302213220232021203303302233220223311202301330323203320303201323011033312222222202321203221310223000023021320122313012201131013011222221222210322102112002221021311301001212223332332230123310221 +21022123001232121100022232022330102033213223103102230300213211312201211223130203022033022103100211021231033220103123031120322231231123123121221011112321223221233221232223102032221003131220121222210033212022 +11222211203010222221000022232030332222310121132322110010333222202230321030222002122230132202100232003222222132201202211200231113031002022230203310332232312322110212032302333012302001322222120212201233022130 +30112322222133331112121003312333233233220320112312332002131000220333010230320112311002320232211221030220132212311210013222323231211011232232302202003232211132332212122022222130221022220102322222320220000301 +11202001100223322220232003101221000331321133211110320323101113212023032223102222222303230322002113001012132132313313201222221221133322122322120321221212121013331121122322301232212000220102222322222220211101 +02123212222112221212130010110100300022220132121120133233322002320013313322220221220323002330212222121233322212032211313021321113222121232220123023331122211202212201322221313211202022222302120212220023311302 +02120200321223311020233302102233033223210310312110333213113220022111202201231032123033203011132232132102221230221211221002003323113303223202121212001312230031233322122312220101110002220322222112220001331332 +01220113020232221030002231031322221322213231232110323202133111321200322021232121222123231301332232222030323221222223131213022332122233323222233332331330120220012312223332332321211002323233323230330223132320 +13222021321211220231321022221123330302110033311330222332330331321323313222210221222322333130212231212320222231321131123132121013212221232223102323111132031302300212312220231233103022230230100220330222222112 +11312002121300222320022000032011333220232302121111203222130002221312332212021102210233333312320313222232223222320033201203231332333323222212311313331332230203232023321121031120003021323223133330331232033102 +32232021212220212332312002232322332223123312100212231332221123210333313120320232303232202332222232022121302112022323003333323220223013332231202213332122221321232222112020332022221123230022203233332233100213 +32222322303010320032000123122213222111310123300301322323333122222322121330121002220123120000200222022002232111020321211322232303023002323330233223332332322020210232123222222112003020322202332200020122122222 +13113122113021323321121122022223132333211222131312023223222011321230101113231113003223323113110033022012222202323223111000323230333312122131223033111330033122322222132123032110212023132233033223012221013012 +22021132223332300023320130320033333332222123032320031330323122003313303333321023032302213211222322122202201213311021212130212303013201333333021113330212320322202312322222103333222000312203212223000203102122 +22122222022320323222121321301332031330223021323100312032323303103223233310211023122213231222122223221312221200013122330100120233223312330221320200032333222023312203232022032102220222332332000330320223223230 +32213210333203222210120121322330333002222322233100332333032202200230233032302312202033131212222220122211111101302212130030212032022313220221333333333222031131221332122032031213220223031202233233202333222120 +31223121131230221122320112033323332333323231232223033332320232203213232332211022030310012212012233012212213223223021202310200313332002222223021322223023330333321223223131302322212301310132221121130113322011 +12120221322123101123310123033223210332311323111233123333203022222002222312232022003333122122223223012112202032222032222030303331222312132121302023112323001232022301220111121221102223131123212110331223322012 +01232022001322221102000213123031000112222132221222203311233222313323232322220002230133330002200311121212233122223322231122030223012003232320331232333223131112312121323023001222202021301123202013123022300122 +32320200123323232220122023223333332222233322223133331113221212302233011130202223232030332323322122322222213223212323303010303002322032320221233331002223332222231111121012331221102203030221132032221133333222 +11033232123003200012121002202013033332232220221222200003202221320330230222220033221213020223223212311220203223222322001032212330222232232221223222332223212322022212223132132231232023302211212321110233332302 +23332230302312212112111021222101303003223223222220022330231331222323323333320103333320133322021132302222121321320221223322233113321231020032133332222221231023321131121013022221232023032233130123300212231322 +02333232323232222023131230202320332322320123322120303213233112300222230322322320232323033323221021321222212312302312221221022330121233333222212220001120223323012121231323320211232031330111311121133212322121 +03322320002022023002003023322202320202222322213200222222303002303023022002222003020002222332023023303200002232202233002222000222201002232022002030222123302302330330020223202231002020322332232322222032000300 +22330203203322002010133003000121222232332302322100200222223331202222232222230302333222122220003023330000320321303321022022220222233222222030200320220210223023220023130202220032321002232002120002200230003020 +31022022202030000000003002322302232223020202021232032222222221223202222032323302033012022222020212333000222002200000002022013222322231020020222230220022202322220202300333303220201000222012022202223000002002 +20330003022300000020122022022232220002322220200122320112202030232222221020202223222222200222222002200300232322212223202020222223222003022023022220222202232203020033130002220003302202220200320222003300022020 +23020002001220000000000232303221220002232222200203222231222002232202022302203000223023223303000230303200023103200202002202222232010002021200201200222103130302322320302202223030000002320022300022210300000102 +12330203223300101102033102023002310332211202111222303222222322223223332202202322032332100222222332030010220000022232022020222222120030230212203020223202303222000203222301300000030223223023222000203000000010 +23220300320220020000200133222022222222302321320222322322202020302202222232031002022232000012030223330000032032000001032020032322221202222022001021102223230222323322003023232223032202220322000322200100020311 +20232010033222000000203121233222220220222032222103200232220000202022222220332232220222330012300200303011102002232232120320233222022020010002000222222112230231220222020322323002000022220202222222202000000300 diff --git a/8087/README.md b/8087/README.md new file mode 100644 index 0000000..f66f470 --- /dev/null +++ b/8087/README.md @@ -0,0 +1,43 @@ +# The Intel 8087 Microcode + +![8087](./images/8087_rom_small_01.jpg) + + +Extraction of the 8087 Microcode was made possible by die photography performed by [Ken Shirriff](https://righto.com). + +See [Ken's excellent article analyzing the 8087 Microcode ROM](https://www.righto.com/2018/09/two-bits-per-transistor-high-density.html). + +This ROM is unique in that it is quad-level - rather than storing 0's and 1's directly, three sizes of transistor +(along with no transistor) provide four logic levels which can be decoded into pairs of two bits. + +This presents a challenge for traditional ROM extraction tools, so a CNN was employed to extract the bit positions. + +I'm looking for help verifying the correctness of the ROM extraction due to the ambiguity of small and medium transistors. +You can view the full microcode ROM image and report issues using the [8087 microcode web viewer](https://8087.martypc.net). + +## 8087_microcode_rom_01.txt + +The extracted literal content of the 8087 microcode ROM. + + - 0: No transistor + - 1: Small transistor + - 2: Medium transistor + - 3: Large transistor + +## /images/8087_microcode_rom_01.png + +A graphical representation of the 8087 microcode ROM as an 2bpp indexed color PNG. + +![8087_microcode_decoded](./images/8087_microcode_01.png) + +Word extraction has not yet been performed. It will be tricky as the 8:1 row multiplexing logic is inverted every 8 rows +and the exact 8087 word format is unknown. + + +## /images/upper-decoder.jpg + +A die photo by Ken Shirriff of the upper microcode decoder circuitry. + +## /images/lower-decoder.jpg + +A die photo by Ken Shirriff of the lower microcode decoder circuitry. diff --git a/8087/images/8087_microcode_01.png b/8087/images/8087_microcode_01.png new file mode 100644 index 0000000..847b948 Binary files /dev/null and b/8087/images/8087_microcode_01.png differ diff --git a/8087/images/8087_rom_small_01.jpg b/8087/images/8087_rom_small_01.jpg new file mode 100644 index 0000000..002a896 Binary files /dev/null and b/8087/images/8087_rom_small_01.jpg differ diff --git a/8087/images/lower-decoder.jpg b/8087/images/lower-decoder.jpg new file mode 100644 index 0000000..308f3e2 Binary files /dev/null and b/8087/images/lower-decoder.jpg differ diff --git a/8087/images/upper-decoder.jpg b/8087/images/upper-decoder.jpg new file mode 100644 index 0000000..0d60e0a Binary files /dev/null and b/8087/images/upper-decoder.jpg differ diff --git a/v20/README.md b/v20/README.md index 25fb692..079eb68 100644 --- a/v20/README.md +++ b/v20/README.md @@ -8,6 +8,8 @@ A decoding of the NEC V20/V30 microcode was recently made possible via the imaging work of [InfoSecDJ](https://infosec.exchange/@infosecdj): The NEC V20 Die +See the full die shot mosaic on [siliconprawn](https://siliconprawn.org/archive/doku.php?id=infosecdj:sharp:lh70108). + NEC used unified microcode for both the NEC V20 and V30, which differ only in their metal layer interconnects. The only difference between the microcode for either version of CPU is in the microcode routine that handles hardware