Оригиналът на статията е на Джеймс Бауман (James Bowman)

Много много отдавна, когато компютрите бяха големи, а бизнесът скучен, се случи нещо съвсем неочаквано. Млади хакери намериха начин да сглобяват персонални компютри от евтини процесори за телетайп машини и светофари. Един от тях е Стив Возняк. Тези момчета възприеха ограниченията на своите компютри като предизвикателство. Те се постараха и накараха тези миниатюрни чипове да вършат удивителни неща. Ето какво публикува Dr Dobb’s Journal през месец август 1976 година:

Това е набор аритметични процедури за работа с реални числа. Микропроцесорът е 6502 (използва се в Apple I и II) и може да работи само с байтове – тоест с цели числа от диапазона между 0 и 255. И още, този процесор може само да ги събира и изважда. Но с помощта на тази библиотека може да се изчисли например 1,2627 – 1099,56 и дори корен квадратен от Пи. Удивителното е, че авторът на тази програма е програмистът с име Стив Возняк, успял да побере основните аритметични функции (събиране, изваждане, умножение и деление) само в 239 байта, използвайки едва 127 процесорни инструкции.

Това е един наистина впечатляващ пример по програмиране. След като го разгледах няколко пъти, мога да кажа, че той е гениален. Така например, циклите на подпрограмата за умножение и деление се повтарят 23 пъти – по един път за всеки бит от резултата. Мислите, че Воз е изразходвал два бита, за да записва константата 23 в двете места? Разбира се, че не! Той записва константата 23 в предварителна подпрограма, която се използва и в двата цикъла.

Да се спрем на друг пример. Необходимо е да се изчислят абсолютните стойности на числата М1 и М2. Бихте могли да напишете например:

M1 = abs(M1);
M2 = abs(M2);

Воз не допуска подобни излишни повторения. Той написва само една подпрограма, която получава абсолютното значение на М1, а след това разменя М1 и М2. После той извиква тази подпрограма втори път. По този начин той постига същия резултат, но с двойно по-малко код. Освен това, подмяната на М1 с М2 се използва в още много други места и този код върши много работа.

Разбира се, този интензивен факторинг затруднява четенето и разбирането на алгоритмите. Но е поразително, доколко този код е изпреварил времето си. Ако прочетем другите статии в списанията от 1976 година, ще видим маса неособено добре написан код. Това е разбираемо: по това време хората просто опитват всичко и си изясняват възможностите на микропроцесорите. И сред всичко това този брилянт, което е достоен на работата на съвременен хакер, написал графична демосцена. За сравнение, подобно ниво на тотална изобретателност започва да се среща едва след 30 години, като например в този възхитителен сорс код също за процесора 6502.

Стига толкова история. Защо през 2019 година съм се заел най-внимателно да изучавам този древен код? Причината е, че работя върху новия помощник за I²CDriver и SPIDriver, а той трябва да извършва операции с плаваща точка на 8-битовия процесор Silicon Labs EFM8 (базиран на 8051), който използвах в предишните си проекти. Сега той вече с лекота извършва тези изчисления, точно както тази библиотека за 6502. Аз нямах нужда от чак толкова кратък и оптимизиран код, но сега всичко работи бързо, много по-бързо от аналогичната библиотека Keil. Отличният код никога не умира!

14
ДОБАВИ КОМЕНТАР

avatar
4 Коментари
10 Отговори на коментарите
11 Последователи
 
Коментарът с най-много реакции
Най-горещият коментар
  Абонирай се  
нови стари оценка
Извести ме за
Скитника Еврейн
Скитника Еврейн

6502 – сещам се за Правец 8ц ! Имаше една игра „Moon Patrol“ , хакната от неизвестен български програмист , който се беше разписал с :
“ koko buka data disk , nema pari be“
което се появяваше на заден фон по време на играта .

писал съм подобен код
писал съм подобен код

Примерно – драйвер за кирилизация на клавиатурата. При натискане на клавишна комбинация трябва да се запише на някакъв адрес 1 или 0 – съответно за включена или изключена кирилица. След това като се обработва хардуерно прекъсване 9, което се генерира при всяко натискане на клавиш, трябва да се сравни с 1 стойността, записана в съответния адрес и ако е 0 – да се прескочи частта за подмяна на латинската буква с кирилица. Вместо това при натискане на клавишната комбинация аз изпълнявах XOR между първата инструкция от процедурата, прихващаща int 09h и определена константа, което превръщаше инструкцията в такава за безусловен… Виж още »

Мангалата
Мангалата

Ало Ричи, какъв INT 09h, какви 5 байта? Тук говорим за MOS 6502 не за i8088.

Да живее СОРОС!
Да живее СОРОС!

Джавистите ще чуят за това, манго! Очаквай имейл с картинка на C.

Виво
Виво

Що не потърсите Пол Ален?
нищо гениално няма в драсканиците на Возняк (а и Возняк повече е хардуерист отколкото програмист), тогава така се пишеха програми
а не като сега разни джавистчета да да ми обясняват как се програмира…
Незнам защо се прехласвате по ябълки като всичко е крадено…

оптимист
оптимист

Воз е гений. Аз не съм фен на айфона. Ако Джобс беше послушал Воз сега епъл щяха да са много по-разпространени и достъпни, но е слушал алчните акционери

Калин
Калин

Апъл в крайна сметка се отказват от BASIC версията на Возняк и ползват тази на Microsoft.

Microsoft BASIC for 6502 is not to be confused with another BASIC implementation created for that processor by Apple’s Steve Wozniak. Woz’s Integer BASIC was created for the Apple I and and included with Apple II computers. Starting with the Apple II Plus, though, Apple moved away from Integer BASIC, since it didn’t support floating point numbers, and instead licensed Microsoft BASIC, calling it Applesoft BASIC.

w ww.itworld.com/article/2872659/the-source-code-behind-microsoft-basic-for-6502-comes-to-light.html

SPACE FORCE 🇺🇸
SPACE FORCE 🇺🇸

Давай Ганя, давай акъл! Много си производителен и БВП-то ти го доказва. Давай Ганя, давай!

Anal force
Anal force

В Европа и Краварника отдавна вече нищо не се произвежда. Половината население продава на другата половина китайски, корейски и турски стоки и руски суровини, а втората половина смята данъците, таксите, лихвите, осигуровките и застраховките на първата половина. Въртят едни хартийки и наричат това „икономика“. Да вземем за пример италианската модна къща Бициани. Купуват китайски и австралийски платове и шият на ишлеме у нас, като плащат на шивачките ни по 560 лева месечно за 50-часова работна седмица с максимално натоварване. Едно вълнено палто им излиза със себестойност 50-60 лева. След това същото това палто се продава в западните бутици за €500.… Виж още »

default
default

„В Европа и Краварника отдавна вече нищо не се произвежда.“ Ще бъда ироничен… Помниш какво каза турчина, за холандската фирма с двойното счетоводство… и това турчина го казва на „теб“. Защото ако го каже на собственика или правосъдието, ще му се случи случка. Както между другото и „им“ се случва случка, само че в обратната посока и обратно на часовника… Самият пример за Петя и логистиката трябва да хвърли достатъчно светлина как оперират глобалните играчи и в какви размери. След много размисли за турчина, стигам до заключението, че това е или „знаково и символично“ или „изход и разкешване“, дефакто фалит,… Виж още »

Намали бЕлото, момче!
Намали бЕлото, момче!

Че от тия амфетки съвсем ти е изушило мзъчето. Цяла страница безсмислици си надраскал, с които и ти не знаеш какво точно се мъчиш да кажеш…

default
default

Не забравяйте, че каквото и да програмирате – всичко се занулява на Уол Стрийт и от там обратно в Пентагона…

пипи
пипи

Да едно време се пишеше качествен код, оптимизиран изстискваш всичко от хардуера, а не като сега.

Да живее СОРОС!
Да живее СОРОС!

Твоя код лично аз съм го проверявал – та ти не можеш да ревърснеш един LinkedList!? – анонимен Microsoft Tech Lead.