Как стать автором
Обновить

Комментарии 22

поправьте меня, если ошибаюсь.

В ассемблерной вставке у вас смещение в регистре BX увеличивается на 1, а элементы массива могут быть выравнены в памяти.
Предлагаю писать: Var MATRIX : PACKED Array [0..5] of Byte;

Это более универсальный вариант для low-level разработки, когда нужен доступ к последовательным участкам памяти (например, при работе с видеобуффером, областями BIOS или с DMA) исключающий зависимость от настроек этого самого алигна в проекте или при явном задании выравнивания директивой {$A}, что тоже может быть полезно для увеличения производительности всей программы.

В Turbo Pascal не используются разряженные массивы. По сути - они всегда packed.

Да, таймер ВИ53 в принципе неплохо может в музыку, ПК Вектор-06Ц тому подтверждение: https://www.youtube.com/watch?v=9Lxo2NIVpiQ

По поводу кода:

1) не обязательно использовать индексную адресацию с базой (или как там она, которая DI+BX). Достаточно только индексной, то есть lea di,MATRIX; mov al,[di], inc di, mov al,[di] ; inc di; mov al,[di] и тд. То есть увеличиваем только DI. Я точно не помню, но вроде оно по размеру кода меньше получится, а значит и быстрее.

2) можно загрузить смещение в SI, DS у нас и так настроен в пасцале на Data segment и юзать вообще lodsb, типа lea si,MATRIX; lodsb; out dx,al; lodsb; out dx,al и тд.

3) Ну и раз адреса портов идут почти подряд, не обязательно каждый раз перезагружать DX новым значением. Достаточно установить mov dx, PORT_1A, а в следующий раз просто увеличивать DX (inc dx). Inc dx будет быстрее, чем перезагрузка dx из памяти.

Всё это актуально для XT-системы, где в принципе, важен каждый такт. Поэтому вроде мелочи (особенно для какого-нибудь iP166 MMX), а на общем быстродействии сказывается.

И не только в музыку. Раз уж тут мигают светодиодами, то режим ШИМ у 8253 тоже можно было бы задействовать.

Да, 8253 неплохо звучит. Задумался сам сделать подобную плату с несколькими 8253. 10-голосую, по числу пальцев пианиста.

За советы по коду спасибо, любопытно. Конкретно в этом случае быстродействие достаточное и экономия на тактах не нужна, но мысль я понял.

А если ВИ53 приправить еще полосовыми фильтрами, прикрутить генератор шума и генератор ударных, то получится почти что поливокс. Меня прямо очень радует звучание "музыкальной ячейки" от Агата: http://agatcomp.ru/agat/Hardware/SoundNCL/jzs52.shtml , вот тут в видео примеры: https://youtu.be/Pyzk-iZwCPE?t=66 , ваще прям лампово. Есть даже призрочная мысль повторить ее полностью, только на ISA шину. Пугает только полное отсутствие софта на PC.

Существует синтезатор RMIF TI-3, там восемь КР580ВИ53.

Ну вот, а хочется свою и в ISA. Охота пуще неволи.

Это точно, поэтому все-таки вроде запилил реализацию агатовской муз ячейки на ISA, немного допиленную:

Заказал платки у китайцев 5 штучек, может через месяцок приедет, попробуем бахнуть...

Агонь! Ждем рассказ!

Не, рассказывать нечего, чукча не писатель. А страничка со звуковушкой здесь: https://github.com/Tronix286/MuzCell

Чип 8255 , в нашей стране больше известный как К580ВВ55 - достаточно распространеный чип для ввода вывода. Практически на всех восьмибитных компютерах(и не только) стоял такой чип. Очень удобно на одном таком чипе организовать чтение клавиатуры на 64 и более клавиш , сделать светодиодную индикацию режимов работы клавиатуры.

В Радио86РК , как и на этой плате, стояли два чипа К580ВВ55 и один К580ВИ53. Один К580ВВ55 работал с клавиатурой, а второй был отдан на нужды пользователя.

(зануда ON)
Штатно ВИ53 в "Радио-86РК" не было. Его подключали кто во что горазд - радиолюбители как положено, с использованием всех 3 каналов для звука, а редакция журнала "Радио" странным образом, с одним каналом на звук и другим - для управления длительностью звука.
Ну а штатно ВИ53 стоял в "Микроше".
(зануда OFF)

мышечную память, ответственную за Ctrl-K B, Ctrl-K K

Еще можно мнемонически - Ctrl-K B - Begin, Ctrl-K K - Конец.

Потрясающая статья. Спасибо за неё.

Единственная просьба на будущее картинки не класть под спойлеры.
Когда я слышу «светодиодная матрица» и «48 линий», я думаю о матрице 24 х 24. Почему всего 6 х 8?
Почему всего 6 х 8?

Потому что с матрицей 24х24 я бы разорился на светодиодах!

Это шутка, конечно. Мысль интересная, но на первый взгляд кажется, что это потребует совершенно других трудозатрат при написании софта.
НЛО прилетело и опубликовало эту надпись здесь
Интересная ISA-карточка, а как она называлась, для чего первоначально предназначалась?

Да в принципе она небрендовая какая-то. Если загуглить "isa 8255 8253", то в разделе Images можно увидеть похожие, обозначенные как "8255 i/o card"

Например, вот такую монструозину (восемь 8255-х и две 8254-х):

И пять "костылей" с "полотенцами"... ничего себе :-)

Изиеда конечно автоматически разводит, но можно было бы слегка причесать потом (да, не топор...). В остальном - достойное развлечение.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории