vak: (Default)
[personal profile] vak
Нет предела совершенству. В развитие XT-IDE, фирма TexElec выпускает контроллер, позволяющий использовать стандартную SD карточку в качестве диска в компьютере PC XT.



Вот вид сбоку. Интересно, что "железку" (крепёжную скобу) к платам ISA теперь можно изготавливать на 3D принтере.



Самая маленькая SD карточка в моём запаснике имеет размер 250 мегабайт. Команда fdisk разбивает это дело на восемь разделов, с C: до J:. Вот так выглядит загрузка XT-шки. Можно видеть сообщения дискового биоса.

XT-IDE

Nov. 22nd, 2025 17:06
vak: (Default)
[personal profile] vak
К 2000-м годам ретро энтузиасты осознали, что древние компьютеры PC XT почти вымерли, по одной и той же причине: все жёсткие диски типа MFM заржавели и вышли из строя.

Возник опенсорсный проект по разработке нового дискового контроллера под названием XT-IDE. Контроллер для 8-битной шины ISA позволяет подключать стандартные IDE-накопители, в том числе CompactFlash. Также сделали качественный биос к дисковому контроллеру. Исходники: github.com/glitchwrks/xt_ide

Нынче фирма The Glitch Works продаёт контроллеры XT-IDE на Ebay как в виде конструктора для самостоятельной пайки, так и в собранном виде. Один такой контроллер я и приобрёл. А также переходник для CompactFlash к нему.



Установка джамперов:



Вот такой экран загрузки биоса. Стрелками можно выбрать, откуда грузиться: диск C, флопики A или B, или загрузчик в ПЗУ.



Чтобы карточка CompactFlash надёжно опозналась, её лучше сначала "стереть" на другом компьютере. То есть записать несколько килобайт нулей, к примеру Линуксной командой "dd bs=1k count=100 if=/dev/zero of=/dev/sdX", где sdX - имя флешки на вашем компьютере.

После чего грузим MS-DOS с флопика и командой fdisk создаём разделы. Двухгигибайтную флешку XT-IDE видит как диск с 997 цилиндрами и 63 головками. Раздел максимально разрешённого досовского размера (32 мегабайта) занимает 16 цилиндров. Для начала создаём раздел C.

Снова перезагружаемся с флопика и форматируем раздел С как системный (format c: /s). Переписываем туда файлы MS-DOS с флопика, и диск готов. Добавим Нортон Командер для удобства. Настроим config.sys и autoexec.bat.

Перезагружаемся с диска. Вот так теперь выглядит писишка:



Пробовал я и хитачевский микродрайв. XT-IDE опознаёт его без проблем, но поскольку он 4-гигабайтный, показывает как диск с 127 головками. От этого MS-DOS маленько дуреет. Создать раздел даёт, но читать его не может.
vak: (Default)
[personal profile] vak
Увы, диск не заработал. Не раскручивается чисто механически, похоже. За 38 лет подшипники приказали долго жить.

Полноразмерная плата в писишку, в задней части которой закреплён жёсткий диск.



Контроллер WD1002 в идеальном состоянии. Интересный может получиться проект для самоделкиных: заменить неработающий жёсткий диск репликой на основе Raspberry Pi Zero или типа того. Интерфейс ST506 должно быть нетрудно повторить.



Жесткий диск Miniscribe 8438 внешне прекрасно сохранился, но больше не жужжит.





При включении диск подмигивает красной лампочкой, показывая некий код ошибки.



Понятно, что с этим диском ловить нечего, и надо искать замену. К счастью, современная замена существует: так называемый контроллер XT IDE. Про него в следующем посте.

и заодно на тему

Nov. 21st, 2025 10:13
juan_gandhi: (Default)
[personal profile] juan_gandhi

"Машу Дрокову", наверно, многие помнят.

Что меня глубоко поражало, лет десять назад, что у неё на линктине среди контактов было порядочное количество моих порядочных знакомых. Сейчас пять осталось. Думаю, и здесь кто-нибудь ещё есть среди её, э, "друзей". Я нахер недоумевал до крайности. Поразительно же. А им ничего так, ничего. Типа важная персона эта сучка, или что там вообще.

Ну вот; и теперь опять.

Я ничего не предлагаю, просто отмечаю ещё раз, что вкусы бывают разные. Кому-то нравится арбуз, а кому и кобыла невеста. Ps.1:1 - он же не обязателен к исполнению.

vak: (Default)
[personal profile] vak
Как на маке, имея образ флопика, достучаться до его содержимого? Лайфхак:
hdiutil attach -imagekey diskimage-class=CRawDiskImage floppy.img 
Флопик будет подключен как файловая система, как если бы его воткнули в порт USB:
/dev/disk8        /Volumes/NO NAME
vak: (Аристипп)
[personal profile] vak
Все мозги разбил на части, все извилины заплёл. Интересно, подтверждаются ли эксперименты этого чувака независимыми исследователями.

vak: (Знайка)
[personal profile] vak
Есть успехи на фронте ретрокомпьютинга. Вчера удалось загрузить MS-DOS 3.30 с флопика.



Путь к этому делу был тернистый.
  1. Машина пришла с жёстким диском, но он не работал. Физически не раскручивался. Было понятно, что надо браться за флопики.
  2. У меня имелся исправный пятидюймовый флоповод и "свежая" неоткрытая упаковка флопиков 1.2 Мбайта.
  3. Встала задача сформатировать флопик и записать загрузочный диск MS-DOS. Но как это сделать? К современному лаптопу или даже настольному компьютеру пятидюймовый флоповод не подключишь. Прошерстил свою коллекцию ретро компьютеров на тему наличия интерфейса к флоповоду - отыскались Pentium 4 и Celeron. Эксперименты показали, что пентиумный компьютер понимает только трёхдюймовые флопы. Зато у селерона оказался выбор типа флоповода в биосе.
  4. Стал выяснять какой MS-DOS выбрать для XT. Узнал много нового про историю разных досов и соответствующего писишного хардвера. Исторически последней массовой версией именно для 8086 оказался MS-DOS 3.31. Более поздние или не грузились, или кушали заметно больше резидентной памяти.
  5. Загрузочных флопиков MS-DOS в сети куча, но чтобы именно версия 3.31 и образ 1.2 мегабайта - отыскался только один: winworldpc.com/product/ms-dos/331.
  6. На селероне у меня установлен Linux Debian. Внезапно обнаружилось, что пару лет назад из ядра Линукса убрали возможность форматировать флопы. Соответствующий системный вызов в драйвере флопа просто не выполняется. Нужно пересобрать модуль floppy.ko, благо он загружаемый.
  7. Удивительным образом в Линуксе до сих пор невозможно скомпилить один отдельно взятый загружаемый модуль. Перекомпиляция всего ядра на селероне заняла бы не меньше суток. И даже перекомпиляция только модулей. А сборка только драйверов блочных устройств возможна, но не фурычит.
  8. Проблема решилась установкой того же Дебиана на виртуальном i386 на маке, и компиляцией линуксного ядра в нём. Бинарник драйвера был переслан на селерон и задействован для форматирования флопа.
  9. Загружаемый 1.2-мегабайтный флопик был записан, но... XT-шка отказалась с него грузиться. И тут пришлось чесать репу. Смутные воспоминания довелось освежать гуглением. Не знал XT-шный флоповый контроллер и биос про существование 1.2 мегабайтных флопов. Они стали поддерживаться только в PC AT и позже. Надо добывать флопы 360 килобайт.
  10. Заказ пачки флопов 360к через Ebay приехал через несколько дней.
  11. Я решил, что для надёжности надо эти флопы и форматировать на XT-шном флоповоде. Ведь биос в селероне их вроде понимает. Убил два дня на борьбу с линуксным флоповым драйвером и утилитами floppycontrol и superformat. Коту под хвост: XT-шные флоповоды отказывались форматировать. Выдавали i/o error.
  12. Опять смутные воспоминания и мысль: ведь 1.2 мегабайтные флоповоды умели писать 360 килобайтные диски. Взял изначальный флоповод, и действительно, удалось сформатировать 360-килобайтные флопы.
  13. Образы загрузочных флопиков отыскались только версии MS-DOS 3.30: winworldpc.com/product/ms-dos/3x.
  14. Результат загрузки вы видите на фотке.
Дальше будем оживлять жёсткий диск.
juan_gandhi: (Default)
[personal profile] juan_gandhi
 caveat: вот здесь пишут, что не надо обобщать

Вчера на твитере напоролся на жалобу (на отмену мультивиз), мол, а российские коррупционеры ездиют и ездиют, воруют и воруют; вот каб они не воровали, всё бы по-хорошему и было бы.

А я такой возьми да ляпни: пусть воруют, меньше вам на бомбы останется.

И мне она такая: "дурачок, бомбы же не коррупционеры оплачивают, а простой народ; деньги на бомбы у народа отнимают, а у коррупционеров не отнимают."

Для меня это в переводе означает, что войну оплачивает российский народ (что хоть и неожиданно, но, может быть, так и есть) - так и претензии же надо предъявлять народу (что, наверно, так и есть), а не коварным коррупционерам, которые лишают народ возможности купить ещё больше бомб и разнести весь мир вообще, ну или хотя бы Европу (не Китай же).

Но как-то стало ещё понятнее, что навальнизм - это не гуманизм, а русский империализм. И, наверно, их единственная претензия насчёт войны - это что слишком дорого война обходится российскому народу, надо награбить награбленное коррупционерами, и вот на эти деньги и победить всех.

vak: (Default)
[personal profile] vak
Вынесу из комментов, где [personal profile] chaource предложил реализацию на Хаскеле.

В исходной статье Робинсона алгоритм звучит не особо ясно.
The following process, applicable to any finite nonempty set A of well-formed expressions, is called the Unification Algorithm:
  • Step 1. Set σ₀ = ε and k = 0, and go to step 2.
  • Step 2. If Aσₖ is not a singleton, go to step 3. Otherwise, set σ_A = σₖ, and terminate.
  • Step 3. Let Vₖ be the earliest, and Uₖ the next earliest, in the lexical ordering of the disagreement set Bₖ of Aσₖ. If Vₖ is a variable, and does not occur in Uₖ, set σₖ₊₁ = σₖ {Uₖ / Vₖ}, add 1 to k, and return to step 2. Otherwise, terminate.
Переведём на современный язык.
Step 1. Initialization
  • Start with a substitution σ₀​ = ∅.
  • Let k = 0.
  • Continue to Step 2.
Step 2. Check Whether Unification Is Complete
  • Apply the current substitution σₖ to the entire set A, producing Aσₖ.
  • If all resulting expressions in Aσₖ are identical, the algorithm stops and returns σₖ as the most general unifier.
  • Otherwise proceed to Step 3.
Step 3. Find a Disagreement
  • Identify the first position (in a left-to-right, top-down scan) where two expressions in Aσₖ differ.
  • Let the disagreeing subexpressions be p and q.
Step 4. Process the Disagreement
    Depending on the form of p and q:
    1. If one is a variable and it does not occur inside the other term (occurs-check in modern terminology):
    • Construct a substitution that maps that variable to the other term.
    • Compose this substitution with the current one to produce Aσk+1.
    • Increment k; return to Step 2.
    2. If both are variables but different:
    • Substitute one variable with the other, compose as above, and repeat Step 2.
    3. If both are compound expressions with different functors or different arity:
    • Unification fails; the set has no unifier, and the algorithm terminates unsuccessfully.
    4. If both are compound expressions with the same functor and arity:
    • Add their corresponding arguments to the set of expressions being unified.
    • Return to Step 2.
Бегая глазами по исходникам unify.gisp и по описанию, вроде всё однозначно соответствует, разве нет? Дело же не в количестве строк, а в лёгкости понимания.
vak: (Default)
[personal profile] vak
Представьте что у нас имеется два выражения, состоящие их переменных и констант. Ну или два дерева, ведь выражения однозначно представляются деревьями. И нам хочется сравнить эти два выражения или дерева. Это одно и тоже или разные вещи? В том смысле, что при каких-то значениях переменных выражения совпадают.

Такой алгоритм сопоставления назвали унификацией. Когда-то на нём строили экспертные системы: помните язык Пролог? Алгоритм унификации пытается сделать два символических выражения равными, вычисляя объединяющую подстановку для этих выражений. Подстановка — это функция, заменяющая переменные другими выражениями. Очень важно, что она действует одинаково на все вхождения одной и той же переменной: если подстановка меняет одно вхождение переменной x на a, она должна заменить все вхождения x на a.

Объединяющая подстановка (или унификатор) для двух выражений e1 и e2 — это подстановка σ, такая что применение σ делает e1 и e2 структурно одинаковыми. Рассмотрим на примерах.

Пример 1: простая унификация. Выражения f(x) и f(y) можно унифицировать, заменив y на x (или наоборот).
Тогда унификатор σ действует так:
σ(y) = x
σ оставляет остальные переменные без изменений.

Пример 2: неудачная унификация. Выражения x + 1 и y + 2 нельзя унифицировать. Не стоит пытаться подставить 3 вместо x и 2 вместо y, чтобы оба выражения стали равны 4. Унификация требует символического равенства, а 1 не сопоставляется с 2.

Пример 3: несколько возможных унификаторов. Для выражений f(x, y) и f(1, y) возможны разные унификаторы:
σ₁ = { x ↦ 1 } даёт результат f(1, y).
σ₂ = { x ↦ 1, y ↦ 5 } даёт f(1, 5).
Оснований менять y нет, поэтому σ₁ предпочтительнее.

Алгоритмы унификации обычно стремятся получить наиболее общий унификатор (most general unifier, MGU). Это когда делаются только необходимые подстановки. Все остальные унификаторы получаются из MGU путём добавления новых замен. В примере выше σ₁ — MGU, а σ₂ — его частный случай.

Красивая реализация унификации приведена как пример в книжке The Scheme Programming Language: Section 12.10. A Unification Algorithm. Меньше сотни строчек с комментариями, но понять непросто: unify.ss.

А давайте перепишем на смешной язык Gisp. Который внутри тот же Scheme, но с синтаксисом Go. Мне кажется, гораздо яснее выходит.
исходный код )

Параграфы

Nov. 18th, 2025 17:52
izard: (Default)
[personal profile] izard
Когда мы впервые оказались в Германии 2000-х, русская речь тоже слышалась на каждом шагу. Не так массово, как сейчас, но всё же привычно. И почти каждая первая встреча с новым русскоязычным знакомым начиналась одинаково:
— Вы шпэти или конти?
Я смотрел в ответ и искренне не понимал, о чём речь. Видимо, по моему виду собеседники решали: только приехали, ничего не знают. И терпеливо объясняли:
— Ну… русские немцы или русские евреи?
— Русские русские, — отвечал я.
На это обычно кивали: мол, да, таких здесь каждый второй. А в голове у них явно стояла другая мысль: «Но только идиоты в этом признаются».
Следующий уточняющий вопрос:
— А по какому параграфу приехали? Четвёртый или двадцать третий?
— По параграфу 18c.
На самом деле, все три вопроса обозначали одно и то же. После такого ответа наступала пауза. Про параграф 18c никто не слышал. Собеседники переглядывались, пытались что-то вспомнить, но сдавались.
vak: (Знайка)
[personal profile] vak
Zed интересный редактор, из всех появившихся за последнее время. Всё бы хорошо, но... Открываю в нём текстовый файл. Встаю куда-нибудь в середину окна, скажем на строку 20, и нажимаю PageDown. Файл перелистывается на страницу вперёд, а курсор улетает... вниз окна, на 4-ю строку снизу. Что за ерунда. Жму PageUp, файл листается обратно, но не на всю страницу, а на несколько строк. Курсор оказывается вверху экрана, на 4-й строке сверху. Ëшкин кот! Я не готов прыгать глазами в поисках курсора, увольте.

Легкими пинками мне удалось привести Zed в приемлемое состояние. Переделать клавиши PageUp и PageDown как предписано богом. Чтобы при перелистывании текущая строка (курсор) сохраняла своё относительное положение на экране. Когда вы уже находитесь на последней странице, клавиша PageDown ничего не делает. Верхняя строка остаётся на месте, а курсор не перемещается. В emacs такой режим включается установкой:
(setq scroll-preserve-screen-position t)
Настройки такой в редакторе нет. Надеялся найти плагин - благо, к Zed уже понаделано много extensions. Однако увы, не могут extensions обрабатывать клавиши и влиять на позицию текста в окне. Пришлось править исходник самого Zed.

Сам бы я в исходниках долго ковырялся. Но теперь в помощниках имеем Cursor. Он за пару минут разобрался и передеалал функции move_page_up() и move_page_down(). С первого раза это дело крашанулось, но я показал Курсору дамп стека и он шустро исправил проблему. Правку можно видеть вот тут:

https://github.com/sergev/ved/commit/e1896e99aeaa76b18944e8c0277647366aabe5a2

Чтобы получить такую версию Zed, вам придётся собрать его из исходников. Это нетрудно, по сути одна простая команда "cargo build --release".

a couple of pics

Nov. 16th, 2025 17:32
juan_gandhi: (Default)
[personal profile] juan_gandhi
River Garonne in Thouars-sur-Garonne




Thouars-sur-Garonne

vak: (Default)
[personal profile] vak
Давно ли вам приходилось форматировать 5-дюймовую дискету? И грузиться с неё. А я сегодня получил удовольствие. 😀 Вот так выглядит загрузка MS-DOS 3.31, исторически последней 8-битной версии. Последующие уже на XT-шках не использовались.



Провозившись пару часов, удалось собрать из имеющихся в гараже причандалов работающий флоповод, пересобрать линуксный драйвер, чтобы умел форматировать, и записать загрузочный флопик с MS-DOS.



Флопик приятно в руках подержать.



Вот из чего состоял тогда MS-DOS.

Tenet, a movie

Nov. 15th, 2025 22:03
juan_gandhi: (Default)
[personal profile] juan_gandhi
 At 15:15 the hero asks how moving back in time is compatible with the free will.

Чиним VS Code

Nov. 15th, 2025 03:28
vak: (Default)
[personal profile] vak
Текстовым редактором в Visual Studio Code невозможно пользоваться, по одной простой причине. При листании клавишами PageUp/PageDown текущая строка (которая с курсором) прыгает по экрану то вверх, то вниз - невозможно предсказать. Нажав PageDown, а потом PageUp, возвращаешься не в исходную точку, а не знамо куда. Поэтому до сих пор я избегал VS Code.

Но сегодня решил разобраться. Как выяснилось, проблема имеет решение. Я сваял расширение, которое обрабатывает кнопки PageUp/PageDown классическим образом, как принято в старых добрых Vim, Emacs и прочих редакторах. Пользуйтесь на здоровье:

github.com/sergev/vscode-classic-paging
vak: (Аристипп)
[personal profile] vak
Народ умудрился загрузить Windows 95 на микроконтроллере ESP32-S3. Затащили туда симулятор i386. Тормознуто, но прикольно.

hackaday.io/project/204408-tiny386

CompactFlash как диск IDE

Nov. 13th, 2025 21:12
vak: (Знайка)
[personal profile] vak
Как превратить карточку CompactFlash в диск IDE для писишки? Есть решение.



А дальше эта штука воткнётся в дисковый контроллер для 8-битной шины ISA.

Profile

gemelen: (Default)
gemelen

June 2025

M T W T F S S
      1
2345678
9101112131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Nov. 23rd, 2025 11:30
Powered by Dreamwidth Studios