// кхе кхеМне никогда не приходила мысль выставлять то что написано ниже на общее обозрение. На эту мысль меня натолкнули беседы с неким человеком по имени Wanderer. До сих пор эти исходники валялись на моём винте без дела (играя роль мусора).
// "В начале было Слово, и Слово было у Бога, и Слово было Бог"
Началось всё в институте... . Когда у нас преподавали проивную и скольскую теорию по информатике. Одним из приколов этого курса была машина Тьюринга (кстати вешь очень хорошая, тот кто не умеет программировать на машине тьюринга программистом себя считать не имеет право). В программе курса у нас была некая лабороторная номер 5, целью которой было написать программу на машине тьюринга. Первое явление которое произошло после начала лабороторных это две машины тьюринга, которые слепили два человека - один на Си а другой я на Turbo BASIC .. Результат вы можете посмотреть тут TU.EXE (F2 - врубает звук). Исходник можете скачать тут TU.TUR.. А для того чтобы посмотреть как она работает вы можете скачать программу для самой машины Тьюринга - тут NOD1.TU. Данная программа находит наибольший общий делитель для двух двоичных чисел. Если кто-то из вас понимает как работает машины тьюринга и не может понять как она это работает. В двух словах работает она по алгоритму эвклида. А столь маленький размер имеет потому что я был очень ленивый и решил наложить оба числа друг на друга с тем чтобы арифметические операции над ними можно было выполнять одновременно - одним движением каретки (программирование на ассемблере на мозгах сказывается). Между делом эта программа написана как никак на бейсике, а вещи при этом пытается делать не совсем обычные. Поэтому если вы хотите чтобы она работала без тормозов, то лучше запускайте её в режиме чистого ДОС-а.
Поскольку тот интерпретатор был больше похож на красивую игрушку и создавал очень много тормозных эффектов, толку от него было очень мало. Кроме того модель машины в тот день сделал не я один. Моё внимание вскоре переключилось на другую игрушку, написаную полностью на ассемблере и с более серьёзным подходом. Результате на свет появился интерпретор с неким простеньким языком программирования, который покрывал саму машину тьюринга и был полностью ей эквивалентен. Целью этого языка было создание лабороторных на машине тьюринга буквально в две строчки До практического применения к сожалению не дошло, т.к. программа в конце концов была брошена на пол пути - недоделаной. Поглядеть на то что у меня получилось вы можете тут TU.RAR. Сразу говорю сделано всё очень коряво. Всё что вы сможете - это загрузить файл в программу и запустить его в реальном режиме. Управление частично мышка и кнопки : пробел - редактирование ленты, Enter - редактирование текста, ESC возврат из редактирования. Вот на этом кажется и всё. Старайтесь не наживать лишних снопок и трогать посторонние пункты в меню (за исключением SETUP - там всё работает на сколько помню). Если вы дочитали до этого места то советую сразу скачать программу и посмотреть что она из себя представляет, чтобы иметь возможность убедиться в её ничтожности и корявости и не портить впечатление от ниже прочитанных преимуществ.
Я могу с уверенстью заявить что в программе работают следующие вещи :
Было это давно и о всех приколах я напрочь позабыл. Но могу перечислить основные идеи, которые угнетали меня тогда.
Первое явление которое стало провляться на свет, это полностью переписанная программа, целиком положенная на объектно ориентированный ассемблер. Была такая фишка в TASM. Объектно ориентированной конечно назвалбы её не каждый, но по крайней мере написано было чётко и аккуратно. Первое принципиальное отличие было в архитектуре программы, которая была сплошь напичкана разного рода предохранителями от сбоев - этакий особо усточивый режим работы (хотя и предудушие модели от сбоев на мой взгяд не страдали). Среди новых фишек был полностью переработаный распределитель памяти.
Распределитель выполнял теже функции что раньше, то есть отвечал за выделение новых модулей в памяти, изменение модулей и доступ к ним .., а также центральные функции по работе с текстами. Главное принципиальное новшество было в том, что в новом виде модули чем то напоминали пластины подвешеные на резинках. Если программа желала уменьшить какой-либо модуль в памяти, то при отсутствии нехватки оной модуль никогда не уменьшался, уменьшался логичекий размер модуля - менеджер помечал что в случае острой нехватки памяти этот модуль можно уменьшить на определённое число байт. При удалении из памяти, сам модуль не уничтожался, а помечался как свободное пространство. Это пространство могло использоваться для роста рядом стоящих модулей или создания новых. Кроме того при частом увеличении какого-либо одного модуля система отслеживала его поведение и могла выделять память прозапас, то есть заранее увеличивать его размер с тем чтобы не заниматься этим каждый раз. Проще выражаясь система следила за поведением каждого куска памяти и стралась предсказать как он поведёт себя в дальнейшем, и соотвественно делать некоторые вещи заранее. Получался этакий мыслящий океан памяти.
Теперь о мыслях которые остались только в теории (руки не дошли даже до черновых набросков). Редактирование текстов размером больше 64 кб. Идея заключалась в том чтобы разбить текст на набор всязанных в цепь модулей. То есть если в какой-нибудь момент размер модуля с текстом превышает размер 64 кб, то он просто разбивается на два модуля связзаных между собой. Так же если резмер модуля стал слишком маленьким, то по возможности он должен был объедениться с рядом стоящим по списку модулем. Всю эту бурду можно было повесить на сами функции распределителя памяти и жить припеваютчи. Есдиственное усложнение это усложнение работы с копированием и переносом блоком в тексте, но не сильное. Второй прикол это свопинг памяти на диск. Допустим наш большой и жирный текст состоит из 10 модулей. Даже если поставить наш текст на экране так чтобы мы видели то что находится в конце 3 модуля и начале 4, то для того чтобы нарисовать наш текст на экране нам нужны только два модуля (3 и 4) остальные восемь занимают нашу память напрасно и их можно сохранить на диске. При достаточно продумманой системе свопинга можно перемещаться и редактировать мегабайтные тексты не чуствуя потери скорости. По небольшим тогдашним прикидкам , имея 286 компьютер и обычный DOS в реальном режиме, можно без усилий редактировать скажем десяток текстов размером по 20 мегабайт.
Напоследок - один из набросков программы на объектно ориентированнном ассемблере. NEW.RAR Всё что вам доступно - это первый пункт файлового меню.
p.s. все программы написанные на ассемблере достаточно копмактны. В то время как размер выложенных здесь программ достаточно велик. Дело в том что они скопилированны в отладочном варианте и в них заложенна полная отладочная информация необходимая отладчику.