ZedRipper: лаптопът с 16 процесора Z80

Оригиналът е на Chris Fenton

Най-четени

Даниел Десподов
Даниел Десподов
Новинар. Увличам се от съвременни технологии, информационна безопасност, спорт, наука и изкуствен интелект.

Погледнете как изглежда ZedRipper – 16-ядреният звяр, работещ с тактова честота 83 MHz, базиран на процесорите Z80. Това е един портативен, непрактичен и много интересен компютър. Това е моят първи опит да си сглобя портативна машина, с който да удовлетворя няколко свои желания едновременно:

  • Най-после да успея да използвам гигантски FPGA, който отдавна се търкаля из моите чекмеджета
  • Да вникна в една алтернативна история за създаването и развитието на компютрите, като разгледам въпросите относно многозадачността от гледна точка на хардуера
  • Да си сглобя компютър, на който да пиша забавни малки програми, докато се возя в метрото на път към работата
  • Да си направя платформа, на която могат да се правят опростени експерименти относно компютърните архитектури

Няколко снимки

Ако нямате време да четете немалък текст за една непрактична архитектура…

 

И така, що за звяр е това?

ZedRipper: лаптопът с 16 процесора Z80

ZedRipper е резултат от сглобяването на най-жестокия компютър с операционната система CP/M 2.2, който има:

  • 16 процесора Z80, работещи с тактова честота 83,33 MHz
  • 64 KB отделна памет за всеки един Z80
  • ANSI съвместим терминален ускорител с 16 изхода
  • Всички процесори и други устройства са съединени чрез изцяло синхронна еднопосочна пръстеновидна мрежа с честота 83 MHz
  • SD карта с капацитет 128 MB, която се използва като 16 по 8 MB дискови устройства за CP/M
  • „Сървърно“ ядро, което се зарежда в CP/M 2.2 и стартира файловия сървър CP/NET, написан на Turbo Pascal 3 на същия този компютър, и осигуряващ общ достъп до SD картата
  • 15 „клиентски“ ядра, стартиращи CP/NOS от ROM-а. Всеки клиент има достъп до общото хранилище и всеки един от тях може да стартира всякакви CP/M 2.2 програми, без да си съперничи за ресурси с другите програми

Другият път

ZedRipper: лаптопът с 16 процесора Z80

След моите приключения с портването на игри за Kaypro, останах с много топли впечатления от тази примитивна операционна система отпреди 40 години. В главата ми зароди идея, която реших да развия: а какво би станало, ако историята бе направила завой в друга посока и персоналните компютри още от самото начало бяха тръгнали по пътя на използването на много процесори? Дори и през 1980-те години самите процесори, а и оперативната памет не бяха скъпи, но многозадачността на компютрите се базираше преди всичко в разделянето на задачите в малки времеви отрязъци, и големите ресурси на централния процесор и на паметта се споделяха между конкуриращите се програми. Хардуерът не се справяше много добре с този режим на времеделене, а и твърде трудно бе да се накарат програмите да работят нормално в подобен режим, например в средата на DOS. Но после настъпи епохата на 386 компютрите с над 4 MB оперативна памет.

Докато се занимавах с това мое исторически хоби се натъкнах на нещо много интересно: в ранните етапи на развитие на ОС CP/M е съществувала и мрежовата версия CP/NE. Идеите в нея са добре познати и днес: в офиса са поставени една или две мощни машини с големи дискове и принтери, ресурсите на които си поделят тънки клиенти – терминали със собствени слаби процесори и малко памет. В този случай всеки потребител работи така, сякаш има собствена машина, работеща под управлението на CP/M, която има достъп до дисковете с голям капацитет и до принтерите.

Както вече казах, CPU и RAM (обикновени Z80 вървеше с 64 KB RAM) не бяха особено скъпи, но останалите неща за един наистина полезен компютър, като дискове, принтери и монитори, съвсем не бяха евтини. По това време добавянето на няколко CPU/RAM в един и същ компютър изглеждаше като декадентски подход за осигуряването на един потребител с няколко CPU и RAM. Всъщност дори и CP/M тръгна по пътя на използването на времеделене за MP/M OS.

Най-близко до тази идея стигна компанията Exidy, която през 1981 година представи своята машина Multi-NET 80, в която можеха да се поставят до 16 разширителни карти, всяка от които със собствени Z80 и RAM. Само че тя бе предназначена за работата на до 16 отделни потребителя, а не за един потребител, който може едновременно да стартира 16 програми.

ZedRipper: лаптопът с 16 процесора Z80

Да се прехвърлим 40 години напред – транзисторите поевтиняха много. След като лабораторията, в която работех, затвори врати, на мен ми останаха няколко доста големи по размери FPGA (Stratix IV 530GX) и се чудех какво по-интересно мога да направя с тях. В един момент се натъкнах на много интересния проект на Грант Сърл (Grant Searle) с име Multi-Comp. Оказа се, че да се сглоби работещ компютър със CP/M и един процесор е много лесно. Веднага реших да си пробвам силите и да направя многоядрена машина под управлението на CP/M с реална многозадачност.

Софтуерът

В този проект се концентрирах предимно на хардуера и не написах нито един ред код на асемблер. Процесорът с номер 0 зарежда директно от ROM-а, който взех от Грант, а останалите модули зареждат от 4 KB CP/NOS ROM, който взех от емулатора на Atari.

И двата ROM-а очакват връзка със серийния терминал чрез стандартния интерфейс, а CP/NOS клиентите очакват още един сериен порт, свързан със сървъра. На толкова големи FPGA като моя е съвсем лесно проектирането на собствена логика. Аз разработих своя собствена логика за декодиране на адресите, благодарение на която Z-Ring за всеки CPU има собствено точно определено място в адресацията.

Вътрешността

ZedRipper: лаптопът с 16 процесора Z80

Сърцето на ZedRipper е една от тези огромни Stratix IV 530GX FPGA. Картата HSMC се използва за дисплея, за получаването на данните от контролера на клавиатурата и от SD картата памет. За зареждането на фърмуера се използва ethernet, и затова отстрани на корпуса има такъв конектор. Там са и адаптерът за SD картата и слотът за външния сериен интерфейс, който засега не се използват.

Клавиатурата и контролера за нея

 

ZedRipper: лаптопът с 16 процесора Z80

От един от моите по-стари проекти имах компактна PS/2 клавиатура и реших да я свържа с 2,5 V I/O на моя FPGA. Реших да избера по-лесния начин и използвах контролера Teensy 2.0.

ZedRipper: лаптопът с 16 процесора Z80

По този начин стана възможно преобразуването на PS/2 сигналите към ASCII символи, както и съвсем лесното отбелязване на някои клавиши като функционални (F1-F12) чрез терминални команди, което е удобно. Този контролер подава на Z80 серии байтове чрез UART със скорост 9600 бода (с обикновен делител на напрежение, чрез който от 5 V се получават 2,5 V за FPGA).

Дисплеят

Използвам 10,1-инчов дисплей с резолюция 1280х800 и VGA интерфейс. FPGA използва простичка мрежа от резистори, за да се получат 64 цвята (R2G2B2). Дисплеят изисква таймер с честота 83,33 MHz (1280×800@60Hz) и за по-лесно, цялата система работи именно с тази тактова честота.

ZedRipper: лаптопът с 16 процесора Z80

В проекта на Грант Multicomp, има VHDL код за съвсем опростен ANSI съвместим терминал. Прехвърлих неговата логика на Verilog, а след това разработих видеоконтролер с поддръжката на 16 независими терминали, съединени чрез Z-Ring. Дисплеят с резолюция 1280х800 пиксела може да се разглежда като дисплей с размер на 160х50 символа със шрифт 8х16 пиксела, а всеки един от тези терминали работи като спрайт с размерност 80х25, който може да бъде преместен в произволно място на екрана, като всеки терминал си има свой списък с приоритети, с които могат да се настройват начините за изрисуване и показване.

И тъй като всеки терминал работи независимо от другите, то той си има собствен краен автомат и разполага с 2 KB RAM за символите и 2 KB RAM за атрибутите (информацията за цвета, мигането и т.н.). Всеки символ има 4-битов цвят на фона и 4-битов цвят на символа. И тъй като при всички терминали символите трябва да имат еднакви отстъпи, а в една „клетка“ с размерност 8х16 може да има само един символ, то всички терминали могат да използват един и същ 2 KB ROM, в който е записан шрифтът. По този начин логиката на дисплея използва около 66 KB RAM.

Като цяло, получи се съвсем опростен мениджър на прозорците за моите CP/M терминали, който почти изцяло работи само на хардуерно ниво. Това е една от най-богатите за изследване области. Засега да премества терминалите на различни места може само сървърът, но имам големи планове за добавянето на позициониращо устройство като например, компютърна мишка, което единствено по хардуерен начин премества прозорците и върши и други подобни действия.

Z-Ring

Как могат да бъдат съединени и заедно да работят немалък брой процесори Z80? Там където работя, разбрах едно важно нещо: разработването на мрежи е сложно. Общите цели на разработваната от мен мрежа за тези Z80 са следните:

  • Лесна реализация
  • Опростен интерфейс
  • Произволно мащабиране
  • Адекватно бързодействие

Както вече споменах, моите Z80 очакват включване към серийните портове и създаването на подходящия интерфейс се оказа просто: той трябва да бъда маскиран като стандартен сериен интерфейс. Всъщност, Z-Ring е синхронна еднопосочна пръстеновидна мрежа, използваща токени за управление на общия поток. Всеки възел на на тази мрежа има 1-байтов буфер за всеки един от останалите възли на мрежата. В началото всеки възел има по един токен за всеки един от останалите възли. Тази схема лесно се мащабира до стотици възли чрез добавянето на съвсем малко логически елементи, а към днешен ден моят Z-Ring поддържа до 32 възела и затова за всеки възел е необходим 32-байтов буфер.

Шината на тази мрежа използва ID на източника, ID на приемника и 1-байтова полезна информация. Това би могло лесно да се реализира с помощта на TTL логика, ако нямате подръка FPGA. Всеки възел на тази мрежа има по 2 контейнера за тригерите на шината. Съобщенията (полезната информация) се подават на възела-източник и пътешестват по пръстена, докато не намерят целта си. Когато съобщението бъде получено, изпраща се съответния токен и всичко може да започне отново. Ако се изпрати мрежови пакет към несъществуващ адрес, токенът се дава автоматично, когато пакетът направи пълен кръг.

При тази мрежова схема за всяко съобщение са необходими не повече от 2*(броя на възлите) цикъла за неговата доставка. В моята реализация се използват 17 мрежови възела ( 15 процесора плюс контролера на дисплея), като цикълът на таймера е 12 наносекунди. Ето защо за изпращането на съобщение и връщането на токена са необходими около 400 ns. Получава се, че всеки процесор има пропускателна способност от 2-2,5 Mb/s (шината е достатъчно бърза за всичките 16 CPU) и това е доста бързо за терминалите.

Захранването

ZedRipper: лаптопът с 16 процесора Z80

FPGA изисква от 12 до 20 V, на дисплея са необходими 12 V, а за клавиатурата и контролера трябват 5 V. Реших да включва FPGA чипа директно към литиево полимерна акумулаторна батерия с капацитет 5000 mAh и напрежение 14,4 V. Удобно е, че FPGA има стабилизатори за 3,3, 5 и 12 V, и естествено бе да използвам този чип за разпределяне на напреженията.

При моите пътувания батерията без проблеми издържа 3 часа, но се вижда, че може спокойно да издържи 6 часа без каквито и да било оптимизации. Но този начин на включване не дава възможност компютърът едновременно да се ползва и зарежда, което за мен не е проблем.

Скорост

Предполагам, че има бенчмаркове за скоростта специално за CP/M, но не се постарах да намеря. Тъй като сглобих този компютър за писане на програми на Turbo Pascal, направих собствени тестове. Получих 15-35 000 операции с плаваща точка в секунда при използването на 48-битов Real в Turbo Pascal и 1 милион целочислени операции в секунда при използването на 16-битов Integer. Съвсем не е зле за 8-битов процесор с достатъчно удобна среда за програмиране.

В бъдеще може да разработя ускорител за операциите с плаваща запетая.

Сглобеният по този начин компютър много ми харесва. Екранът е приятен и всичко се вижда изключително детайлно. Клавиатурата е удобна, а машината се събира в раницата, с която пътувам до работата и обратно.


Но важното е друго. Мисля че съм на прав път. Възможността да отворя текстов редактор в един програмен прозорец и едновременно с това да оптимизирам кода с дебъгера на Turbo Pascal е изключително удобна. Мога дори да си записвам идеите, докато играя Zork. И наистина, този подход за създаването на евтини многозадачни компютри, работещи под управлението на CP/M би могъл да бъде изключително успешен. Историята на компютрите наистина би могла да тръгне по друг път. А вие как мислите?

АбонаментВсичко важно от света на технологиите, директно в пощата ти.

С абонирането приемате нашите Условия и Политика за поверителност. Може да се отпишете с един клик по всяко време.


Коментирайте статията в нашите Форуми. За да научите първи най-важното, харесайте страницата ни във Facebook, и ни последвайте в Google Новини, TikTok, Telegram и Viber или изтеглете приложението на Kaldata.com за Android, iPhone, Huawei, Google Chrome, Microsoft Edge и Opera!

ИЗТОЧНИКThe ZedRipper
4 Коментара
стари
нови оценка

Нови ревюта

Подобни новини