PDA

Просмотр полной версии : Специалист: Вопросы программирования



hdc
16.06.2009, 20:24
Взбрела на старости лет мне одна идея в голову... и после её
проверки я пришёл к выводу, что на Специалисте скорее всего
можно было сделать не слишком навороченную игру,
но с вертикальным скроллингом ландшафта.

"Много букв" и "демка" здесь: http://www.asvcorp.ru/darch/asv/demo2009/index.html

Одним словом немного подурачился.

fifan
17.06.2009, 08:48
Прекрасно! Ждем еще игр!
P.S. Если не против часть общей документации я расположу на своем сайте, посвященном Специалисту. Ссылка - в подписи.
Дико интересует меня нет ли схем контроллера дисковода и контроллера цвета от Афанасьева для Специалиста_МХ. Пиши в личку.

Error404
17.06.2009, 13:30
Прекрасно! Ждем еще игр!
P.S. Если не против часть общей документации я расположу на своем сайте, посвященном Специалисту. Ссылка - в подписи.
Дико интересует меня нет ли схем контроллера дисковода и контроллера цвета от Афанасьева для Специалиста_МХ. Пиши в личку.

Вот кстати про цвет в Спеце МХ - у вас на сайте написано, что там было 16 цветов на точку при разрешении 256х384. Это было групповое кодирование цветовых атрибутов (общий цвет для группы точек) или реально было 4 графических плоскости по 12к, откуда графический контроллер одновременно выводил данные?

fifan
17.06.2009, 13:52
Вот пояснения от Шевцова А.В.:
Контроллер цвета управляется единственным портом FFF8, в который записывается код цвета (смотри таблицу ниже), порт работает только на запись. Программно ОЗУ цвета ндоступно (цветовое ОЗУ никак не пересекается со страницами памяти). Запись в ОЗУ цвета ведется параллельно с записью в ОЗУ экрана, при этом в порт цвета (FFF8) должен быть заранее выдан необходимый код цвета. Т.е. все выводимые на экран байты будут окрашены в цвет заданный в порту FFF8. Из-за этого, при выводе байта на экран, необходимо постоянно заботиться о том, какой у этого байта должен быть цвет и соответственно выдавать заблаговременно необходимый код в порт цвета (если этого не сделать, то предыдущий цвет будет повторяться). Биты старшей тетрады (7-4) задают цвет точек изображения, а младшей тетрады (3-0) задают цвет фоновых точек.

Таблица кодов цветности
Номер цвета Y R G B Цвет
0 0 0 0 0 Черный
1 0 0 0 1 Синий
2 0 0 1 0 Зеленый
3 0 0 1 1 бирюзовый
4 0 1 0 0 Красный
5 0 1 0 1 фиолетовый
6 0 1 1 0 коричневый
7 0 1 1 1 Белый
8 1 0 0 0 Серый
9 1 0 0 1 Голубой
A 1 0 1 0 светло-зеленый
B 1 0 1 1 светло-бирюзовый
C 1 1 0 0 Розовый
D 1 1 0 1 светло-фиолетовый
E 1 1 1 0 Желтый
F 1 1 1 1 ярко-белый

Биты порта FFF8: цвет точек изображения/цвет фоновых точек
0 1 2 3 4 5 6 7
Y R G B Y R G B

hdc
17.06.2009, 20:15
Игры будут. На сайт ещё не все наши игры выложены.

По специалисту MX есть вот это:
http://www.asvcorp.ru/darch/hardware/specialist/specialist-mx/index.html
Контроллер цвета на 14й странице.

Контроллера дисковода именно Афанасьева нет. Есть наш и он скорее всего
с минимальными переделками совместим с MX. Отличия возможны в адресах портов
и в получении сигналов DRQ и IRQ. Но об этом - позже и не в этой ветке :)

fifan
18.06.2009, 04:54
Игры будут. На сайт ещё не все наши игры выложены.

По специалисту MX есть вот это:
...
Контроллер цвета на 14й странице.
...
Контроллера дисковода именно Афанасьева нет. Есть наш и он скорее всего с минимальными переделками совместим с MX. Отличия возможны в адресах портов и в получении сигналов DRQ и IRQ. Но об этом - позже и не в этой ветке :)

Прекрасно! Большое спасибо за схему контроллера цвета! Если не жалко, можно и Вашу схему контроллера дисковода...:v2_cool:
А если Ваш Специалист и отличается чем то, то и его схему - все расположу на своем сайте, в отделе клоны Специалиста.
Очень на Вас надеюсь!

Mifody
02.10.2009, 23:57
Хотел спорить,есть ли в природе программа для перегона rks файлов в wav формат,чтоб можно было на аудио диск записать и грузить проги с него?

fifan
03.10.2009, 09:30
Как понять для перегода из rks в wav? Первый формат - это дамп памяти программы в компьютере. Второй формат - аудио данные для применения в PC. Как можно в rks выцепить аудио данные? В каком формате они туда пишутся? Если и есть ноты в программе, например в "Специалисте", то они написаны на Бейсике.

Mifody
03.10.2009, 13:05
Ну, я имел ввиду следующее.. на компе есть прога WRKWIN32.EXE для записи RKS на ленту. ТО есть она выводит звук для записи непосредственно на выход звуковой карты. в принципе можно перехватить этот звук GoldWave' ом и сохранить потом как wav файл, который можно будет воспроизвести с любого плеера и загрузить в спеца.. Но такой процесс конвертирования довольно долгий.. За несколько часов сконвертил около 20 файлов.. А их больше сотни.. А я подумал,может есть какая нить прога типа WRKWIN32.EXE, только чтоб сразу в файл звук писала, а не на звуковуху.. Но, судя по реакции понятно,что я многого хочу..)) Ладно,понятно, что в ручную прийдётся переводить..

b2m
03.10.2009, 15:24
Таких программ, наверное, с десяток наберётся. Только каждый их пишет для себя (они не сложные), но в сети их сложно найти. Мне никогда не надо было, я и не знаю, где скачать.

glukmaker
20.11.2009, 13:57
Взбрела на старости лет мне одна идея в голову... и после её
проверки я пришёл к выводу, что на Специалисте скорее всего
можно было сделать не слишком навороченную игру,
но с вертикальным скроллингом ландшафта.

"Много букв" и "демка" здесь: http://www.asvcorp.ru/darch/asv/demo2009/index.html

Одним словом немного подурачился.

Эх... Я вот подумал недавно, что с Специалисте (да и в Орионе тоже), можно было бы довольно просто реализовать возможность аппаратного скроллинга, где на кольцевой сдвиг всего экрана на 1 или несколько пикселов по вертикали или на любое число кратное 8 пикселам по горизонтали понадобилось бы всего-навсего несколько тактов процессора.
Если бы такое было реализовано еще во времена создания этих компов, то глядишь, и неплохих игр к ним было бы немало создано... Но вот сейчас такую фичу делать вроде как и смысла нет уже... :v2_conf2:
Насколько я понимаю сейчас уже никто не занимается разработкой ПО к этим компам, а повторение их обусловлено с целью ностальгического использования имеющегося ПО.

fifan
21.11.2009, 05:13
Тебе сюда, найди и почитай, парни уже это делали - http://www.asvcorp.ru/darch/asv/index.html

Ewgeny7
21.11.2009, 13:47
Если бы такое было реализовано еще во времена создания этих компов, то глядишь, и неплохих игр к ним было бы немало создано... Но вот сейчас такую фичу делать вроде как и смысла нет уже...
Верно мыслишь. Оно УЖЕ не понадобится. А сделать не так уж сложно (навскидку).

fifan
04.04.2010, 08:11
ewgeny7, как ты предполагал (http://zx.pk.ru/showthread.php?t=4800&page=12) без буферизации входных и выходных переменных в программе на vhdl ПЛИС не затикала. Вернее с заводом сброса в процесс все не движется.
У меня вопрос: как буферизировать шину адреса на входе и выходе ПЛИС, не напишешь ведь для каждого бита такую конструкцию:

atemp(0)<='1' when a(0)='1' else '0';
И так далее, а шина ведь 16 разрядная...

balu_dark
04.04.2010, 11:40
а сразу использовать 16 разрядный вектор - что не позволяет?
кстати а зачем буферить адрес? он входящий или исходящий на плисе?

а кажется понял - это не подвеска всех выводов на высокий уровень , а буферирование кождого отдельного выхода в зависимости от состояния. тогда я не прав :)

Ewgeny7
05.04.2010, 22:04
У меня вопрос: как буферизировать шину адреса на входе и выходе ПЛИС, не напишешь ведь для каждого бита такую конструкцию:
Хитрый вопрос...
У меня шина адреса идет наружу через мультиплексор, на входах его соответственно сам процессор и видеогенератор. У тебя, я так понимаю, просто проц наружу вылезает?
Попробуй изменить тип выводов адресных с OUT на BUFFER. Не уверен что поможет (оптимизатор может сожрать), но вдруг...

fifan
06.04.2010, 16:27
Да вроде сейчас Квартус не ругается на шину адреса. Зашил ПЛИС новой прошивкой, еще не включал. Хоть бы затикала...

barsik
12.01.2018, 20:12
В базовом ROM-BIOS СПЕЦИАЛИСТА ошибочно называемом загрузчиком (вот в ВЕКТОРЕ действительно загрузчик в 512 байт) обнаружил идиотическую ошибку. Которая заключается в том, что хотя есть ячейки для адреса фонта (AFONT=8FE7), как и в ОРИОНЕ, но пользоваться ими в отличие от ОРИОНА, свободно нельзя. Невозможно поменять фонт разместив его в произвольном месте ОЗУ.

Оказывается фонт можно размещать только по определённым адресам. Можно размещать фонт только по такому адресу, которое удовлетворяет следующему условию. Если адрес размещения фонта разделить на 8 (что равноценно сдвигу вправо на 3 разряда), то в младшем байте получившегося числа, должно быть значение меньше 80H. В противном случае драйвер вывода выдаёт на экран мусор.

Это происходит потому, что А.Волков применил 8-ми разрядное сложение, а следовало применить 16-ти разрядное сложение. И такой драйвер вообще непригоден для вывода (без извращений) 8-ми битовых символов (КОИ-8). Это может делать драйвер ОРИОНА, а чтобы выводить КОИ-8 данным драйвером надо немножко извращаться, - при кодах символов >80H отнимать от кода символа 80H и в ходе вывода менять адрес фонта в ячейках AFONT.

Раньше я не знал об этом, т.к в 80-тые не доводилось менять фонт. Столкнулся с этим сегодня, когда хотел загрузить латинский фонт большие и маленькие буквы, т.к это требуют CP/M-программы. Чтобы не заморачиваться, можно использовать адрес фонта кратный 1000H, т.е D000, E000, F000. Но это не всегда выгодно, когда приходится биться за экономию каждого байта.

Естественно, эта ошибка повторена и во всех совместимых мониторах, в т.числе и в мониторе В.Ивинских.

Вот подпрограмма А.Волкова:


A_C056: LD HL,(AFONT)
ADD L
LD L,A ; A= код символа
ADD HL,HL
ADD HL,HL
ADD HL,HL ; HL= адрес символа в ОЗУ


А вот как правильно:


LD L, A ; A= код символа
LD H,0
ADD HL, HL
ADD HL, HL
ADD HL, HL
EX DE,HL
LD HL, (AFONT)
ADD HL, DE ; HL= адрес символа в ОЗУ


С учётом того, что в H ранее уже есть 0, то число команд CPU всего на одну больше, а число байтов на 2 больше. Но так делать правильно. А при Z80 число команд одинаково. При выводе символа процессор исполняет не менее 200 команд. Экономия одной команды ускоряет вывод на 0.5%. Если уж хотелось ускорить, это делается линейным участком копирования символа, что даёт выигрыш в более, чем в 150 маш.тактов.

HardWareMan
12.01.2018, 20:18
barsik, Волков сэкономил на подпрограмме вычисления адреса символа в фонте (а этот код вызывается каждый раз при выводе символа) выравняв расположение этого фонта ровно по блоку, что дает младший байт равным 00. Это хорошее решение при тех условиях. А еще, этот адрес заранее поделенный на 8. Тем не менее, с этим загрузчиком работал ED^7000 корректно, используя свой фонт для маленьких букв. И да, ПСПЗУ с C000-C7FF это именно загрузчик, согласно журнальному описанию. Ибо он загружал либо игру либо монитор с кассеты и передавал туда автоматически управление. А то, что он предоставлял базовый сервис это названия не меняет.

barsik
12.01.2018, 20:56
Это хорошее решение при тех условиях
Это не решение, это ошибка. Ускорение менее 0.5%. Я могу ускорить на 5%, но совместимость пропадёт. В ПЗУ Волкова много свободных байтов, было достаточно ресурса для ускорения. Обычно стоит вопрос или быстрее, но бОльший объём кода или меньший объём, но медленнее. Не умаляя заслуги А.Волкова, для 1985 это великолепно, но вообще это плохой драйвер, - даже нет ролика, нет обработки ESC-кодов (а В.Ивинских всё это уместил в эти же 2К). Даже М2, от авторов ОРИОНА лучше.

Проблема в том, что программы надо делать в расчёте на самый слабый ROM-BIOS, поэтому в CP/M пришлось встраивать свою обработку котя бы самых нужных искейп-кодов. Удалось уместить лишь инициализацию, очистку кодом 0C, вкл/выкл инверсии, позиционирование, очистку до конца строки, стековый ролик вниз, запоминание позиции и восстановление позиции. Ролик вверх (хотя и не стековый) есть в мониторе Орлова (а в В.Ивинских и стековый ролик уместил в загрузчик). Упр.код для ролика вниз ускоряет текстов редактор.

Кстати, хотя шаг по вертикали 10 линий, в знакоместе выводится только 8 линий. Такая же ошибка была в ОРИОНЕ, что исправил М3. Из-за этого используя этот драйвер надо ухищряться, работая с инверсным окном. А свой драйвер не загрузить, нет свободного ОЗУ. Также не хватило места на то, чтобы заменить убогую подпрограмму ввода строки из BDOS CP/M на приличную с тимплетом и экранным редактированием.

Но самое паршивое, это то, что нет клавиши <Control>, а в CP/M она необходима. Теперь, вот сижу и думаю, как из этого выкрутиться. Ранее ставили кнопку <Control> вместо МГ-входа, используя тумблер для отключения выхода 140УД6. Поэтому CP/M при старте теоретически должна выводить на экран надпись "Переключите тумблер на МГ-входе".


это именно загрузчик
В ВЕКТОРЕ и МИНСК-64 действительно загрузчик, ничего кроме загрузки не может, а это ROM-BIOS, куча стандартным подпрограмм, используемых программами. Загрузчик можно было бы выкинуть, а это ПЗУ уже не выкинешь, потому что это ROM-BIOS.

Если это загрузчик, то и ROM-BIOS в IBM PC тоже загрузчик, а не ROM-BIOS, он же грузит с винчестера, CD-привода или дисковода.

b2m
15.01.2018, 12:01
выравняв расположение этого фонта ровно по блоку, что дает младший байт равным 00
Не совсем так. Адрес фонта поделён на 8, чтобы не было переноса в команде ADD L, адрес фонта должен быть кратным 800h.

- - - Добавлено - - -

Учитывая, что перед этим из кода символа вычитается 20h, можно фонт подвинуть вперёд максимум на 100h байт. Вышесказанное верно, если мы хотим использовать весь диапазон символов 20-FF.

Titus
20.02.2018, 01:51
Вопрос к специалистам по Специалисту)

Зачем нужен сигнал НП?

- - - Добавлено - - -

И еще такой вопрос, если допустим, в одном столбце клавиатуры нажаты две клавиши, как поведет себя ВВ55? Произойдет нагрузка выхода на выход? Например, на выходе KB2 - '0', на выходе KB3 - '1', а при нажатии одновременно двух клавиш S3 и S4, эти выходы обьединятся. Или же у ВВ55 выходы с открытым коллектором? Или же при сканировании на KB2 - '0', а на KB3 'Z'?
у РК-86 на рядах стоят диодики, защищающие от такого включения. А у специалиста диодов нет, зато зачем-то подтягивающие резисторы и на рядах и на столбцах. Наверное, чтобы можно было сканировать и по столбцам, и по рядам, кому как удобнее.

barsik
20.02.2018, 03:55
Зачем нужен сигнал НП?
Сигнал НП это аббревиатура от слов "Начальный Пуск". Этот сигнал нужен потому, что КР580 начинает прогон по сбросу с адреса 0, где ОЗУ. А ПЗУ находится по адресу C000. Назначение этого сигнала такое же как у сигнала НП в РК86 и ОРИОНЕ. Чтобы по сбросу во всём адресном пространстве стояло ПЗУ.

Только в РК86 это сделано умнее. Там используется триггер. По сбросу он взводится, формируя НП, а по первой же записи куда-либо (сигналом /WR процессора) сбрасывается и открывается ОЗУ в области с адреса 0 и до RAMTOP. Потому первой командой в ПЗУ в этих компьютерах стоит JMP в область ПЗУ.

В СПЕЦИАЛИСТЕ ради экономии деталей, в качестве сигнала НП используется разряд PC4 порта клавиатуры. По сбросу ВВ55 все порты программируются на ввод, отчего PC4=НП=1. А при программирования портов PC4...PC7 на вывод на разряде PC4 сразу оказывается 0, что и приводит к открытию ОЗУ.

В любом случае при перепрограммировании ППА всегда надо программировать PC4...PC7 на вывод. В противном случае произойдёт улёт, т.к если запрограммировать на ввод, то НП=1 и ОЗУ исчезает. Это удобно использовать для защиты программ от взлома, причём делая JMP или CALL на команду в ПЗУ LD (PPA+3),A и желательно командой JP (HL) или ещё хитрее.

В 1990 году товарищи Медведков и Иванов при расширении цвета с 4-х цветов до 8-ми, с целью освободить разряд PC4 для целей цвета, решили, что прерывания для КР580 это непозволительная роскошь. Они избавили PC4 от функции НП, отдав этот разряд для цвета, а в качестве НП использовали выход INTE процессора КР580. Из-за этого стало невозможно использовать программы от РК86 и ОРИОНА, где звук выдаётся по EI/DI, а также прерывания и возникли сложности при установке Z80, т.к у него не оказалось выхода INTE.

Отчего при Z80 для начального пуска пришлось использовать два вентиля из 155 ЛА3 или половинку триггера 155 ТМ2. Из двух TTL-вентилей делается RS-триггер. На один вход заводится сигнал /RESET, на другой /WR процессора. Эту же переделку разумно делать и при КР580, чтобы освободить INTE для РК-шного звука, прерываний и возможности с его помощью переключать архитектуру, - например, банки ОЗУ.

Т.к команды EI/DI - быстрые 4-х тактовые, это здорово ускоряет, давая при КР580 ВМ80 возможности процессора КР580 ВМ1, у которого для этих же целей изобретён префикс, ровно на одну команду включающий вторую банку ОЗУ, что даёт 64 кб для программ и 64 кб для данных.


как поведет себя ВВ55? Произойдет нагрузка выхода на выход? Например, на выходе KB2 - '0', на выходе KB3 - '1', а при нажатии одновременно двух клавиш S3 и S4, эти выходы обьединятся и ППА выгорит в хлам.
Такое в СПЕЦИАЛИСТЕ можно сделать только во вредительских целях. Во все разряды как по вертикали, так и по горизонтали выдаётся только 0, точнее программно туда вообще ничего не выдаётся. Нули на выходах порта возникают сами по себе, когда данный порт программируется на вывод. И уж тем более единицы в порты клавиатуры никогда не выдаются, т.к это не требуется. Единственные единицы которые могут возникать на линиях матрицы возникают за счёт высокомных резисторов привязки и коротить их клавишами можно сколько угодно.

В клавиатуре СПЕЦИАЛИСТА гораздо более грамотный алгоритм, чем классический алгоритм с диодами использованный в РК86 и ОРИОНЕ. Тут не производится сканирование матрицы по одному разряду, так называемым "бегущим нулём".

Сначала по вертикали выводятся все нули и читается байт по горизонтали, затем ППА перепрограммируется, ноль возникает по горизонтали а считывается байт по вертикали. А затем табличным методом высчитывается код нажатой клавиши. Это примерно в 10 раз быстрее, чем алгоритм РК86.

Потому вместо диодов и нужны привязки разрядов ППА резисторами (я ставил 20 ком). Никаких конфликтов в ППА не возникает и в играх программно обнаруживаются двойные нажатия (но п/п-ммы ПЗУ C377 и C81B это не поддерживают).

Titus
20.02.2018, 06:56
Сигнал НП это аббревиатура от слов "Начальный Пуск". Этот сигнал нужен потому, что КР580 начинает прогон по сбросу с адреса 0, где ОЗУ. А ПЗУ находится по адресу C000. Назначение этого сигнала такое же как у сигнала НП в РК86 и ОРИОНЕ. Чтобы по сбросу во всём адресном пространстве стояло ПЗУ.
Поточнее - по каким адресам при начальном сбросе маппится ПЗУ и сколько раз?

- - - Добавлено - - -


Такое в СПЕЦИАЛИСТЕ можно сделать только во вредительских целях.
Т.е. по сути, если чья-то 'вредительская' программа это сделает или же просто заглючит обычная программа, и случайно так запрограммирует ВВ55, то этот самый ВВ55, что логично, сгорит? Такое бывало?

barsik
20.02.2018, 08:34
Поточнее - по каким адресам при начальном сбросе маппится ПЗУ и сколько раз?
Я об этом не думал, т.к это не важно и зависит от конкретной реализации области ПЗУ C000...F7FF. По сбросу ПЗУ C000 стоит на адресе 0, благодаря чему выполняется самая первая команда JMP C003. Далее командой на адресе C003 устанавливается стек и следующими двумя командами программируется ППА. Т.о после исполнения 4-той команды в ПЗУ после сброса, ОЗУ появляется в адресном пространстве процессора и не исчезает до выключения компьютера. Использовать сигнал НП, чтобы включать ПЗУ с нуля можно только, если НП формируется программно, т.е или битом PC4 или выводом INTE процессора КР580.


то этот самый ВВ55, что логично, сгорит? Такое бывало?
Вряд-ли ВВ55 сгорит. Они довольно надёжные. Я имел дело с полусотней 8-ми разрядок с ППА. Дохли КР580 и ВГ93, а Z80 и ВВ55 никогда. Они также как КМОП серии и 1533 допускают коротыш на землю или +5В. А вот подача на ВВ55 напряжений -5В или +12В, возможно, убъёт их.

HardWareMan
20.02.2018, 10:02
В клавиатуре СПЕЦИАЛИСТА гораздо более грамотный алгоритм, чем классический алгоритм с диодами использованный в РК86 и ОРИОНЕ. Тут не производится сканирование матрицы по одному разряду, так называемым "бегущим нулём".

Сначала по вертикали выводятся все нули и читается байт по горизонтали, затем ППА перепрограммируется, ноль возникает по горизонтали а считывается байт по вертикали. А затем табличным методом высчитывается код нажатой клавиши. Это примерно в 10 раз быстрее, чем алгоритм РК86.
Глупости. Такой алгоритм применяется для обнаружения факта нажатия (RAMFOS, например, настраивает PA и PCl на вывод и читает PB). И он действительно просто молниеносный:


LDA PPA_B
ORI 03H
CPI 0FFh
Флаг Z укажет, что ничего не нажато. Шифт опрашивается отдельно, поэтому тут он маскируется. А потом, PA и PCl настраиваются на ввод, а PB на вывод и начинается бегущий 0 по PB, чтение слова из PA и PCl и побитный сдвиг. Поэтому в таблице сканкодов у них 6 строк по 12 символов (округлено до 16). Штатный загрузчик делает похожим методом. Как делает опрос MON_RSYS я не знаю - не разбирал, но, возможно, более оптимально.

Titus
20.02.2018, 13:49
Глупости. Такой алгоритм применяется для обнаружения факта нажатия (RAMFOS, например, настраивает PA и PCl на вывод и читает PB). И он действительно просто молниеносный:
А что на счет замыкания выход на выход ВВ55? Каков будет результат при каких значениях, и не сгорит ли ВВ55? И какие бывают ВВ55? КМОП? ТТЛ?

barsik
20.02.2018, 17:17
Тут не производится сканирование матрицы по одному разряду, так называемым "бегущим нулём".
Глупости.
Вы опять сильно опозорились.

Вы даже не знаете, что такое сканирование бегущим нулём. Видимо не дизассемблировали ПЗУ РК86. Вы путаете сканирование бегущим нулём с обычным сдвигом аккумулятора CPU. В РК86 при опросе матрицы бегущий 0 выдаётся в порт А восемь раз (если ничего не нажато), т.е в порт А последовательно выводятся двоичные числа:

11111110
11111101
11111011
11110111
11101111
11011111
10111111
01111111

и каждый раз выполняется чтение из порта B. В программах СПЕЦИАЛИСТА нет такой процедуры и она просто невозможна т.к нет диодов и потому при выдаче 1 в порты ППА будет, как указал Titus, конфликт сигналов на выходах ППА.

И что Вы отрицаете, что опрос клавиатуры в СПЕЦИАЛИСТЕ намного быстрее, чем в РК86, даже учитывая, что у него больше клавиш (как бы две матрицы, по порту А и по порту C, что усложняет опрос)?

А других мыслей в комментируемой Вами моей цитате, в которых можно было бы усомниться, нет. Получается, что Вы полный некомпетэ и как всегда пытаетесь придраться хоть к чему-то в моих постах, даже тогда, когда не разбираетесь в теме.

HardWareMan
20.02.2018, 18:15
Это что сейчас было? А? Злость Барсика торжествует? :)

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

Что же касается в сравнении скорости выполнения п/п ввода символа на РКшке и Специалисте я ничего утверждать не буду, т.к. у меня не было РКшки. Да и РКшка сама по себе работает медленнее на 15% только по тактам, а с учетом ПДП и еще больше.


А что на счет замыкания выход на выход ВВ55? Каков будет результат при каких значениях, и не сгорит ли ВВ55? И какие бывают ВВ55? КМОП? ТТЛ?
8255 бывает нМОП (как 8080) так и КМОП (82с55). ВВ55 вроде как только нМОП, ИК55 я не знаю, но их бага не позволяет использовать в том же Орионе. Касаемо замыканий - да, теоретически может. Более того, теоретически можно нажать весь ряд, а это сумма 13 сопротивлений, соединённых параллельно. А минимальное сопротивление вычисляется по допустимому току ножки. Но я бы не стал ставить ниже 1к/ножку. Таким образом, нужно не менее 1к*13 = 13к. В Экспрессе стоят 10к. Это не отменяет КЗ на КМОП версии ППА, ну на в нМОП версию ВВ55 мы вроде не смотрели.

Titus
20.02.2018, 18:49
По порядку:
Какая бага у ИК55?
Теоретически может что? Сгореть? Но на практике не встречалось?
Чем выходные каскады КМОП отличаются от нМОП (по силе открытия ключей на ноль, и на плюс питания)?
Или перефразирую так. Какое сопротивление открытого ключа на ноль и на плюс для КМОП и для нМОП?

barsik
20.02.2018, 18:56
Барсик, уважаемый, я в прошлом писал собственный эмулятор и видел со стороны железа, как работает каждый из имеющихся у меня загрузчиков для Специалиста.
Спасибо за вежливость. Больше узнать о устройстве программ можно с помощью дизассемблера и изучения полученного листинга, а эмулятор тут не поможет.

Я тоже написал эмулятор нескольких компьютеров (не Специалиста, хотя полгода назад начал, но пока забросил, переделку эмулятора Ориона в Специалист, т.к всё позабыл, а выяснилось, что сложно разобраться даже в своей программе в 15 тысяч строк, если прошло 20 лет) и мне это никак не помогло "увидеть со стороны железа, как программы работают с клавиатурой".

Эмулятор в лучшем случае даёт чуть более удобный отладчик позволяющий трассировать прогон программы, но изучить опрос клавиатуры даже это не помогает, т.к в отладчике не получается трассировать опрос клавиатуры. Так что, я даже не понимаю, что означает "увидеть со стороны железа". Похоже, что для этого надо залезть внутрь процессора и оттуда наблюдать, что происходит на скорости 2 МГЦ.


А? Злость Барсика торжествует?
У меня нет злобы на Вас (хотя Вы мне постоянно отравляете хобби), т.к я вообще добрейший человек. Злоба очень вредна, особенно, если её накапливать.

Сделать вывод о том, что я в злобе на Вас, можно было бы только, если бы это я преследовал Вас в течение полутора лет, троллил и придирался к любой мелочи, несмотря на Ваши постоянные просьбы оставить Вас в покое. Но ведь всё наоборот.


Какие есть баги в ВВ55?
Про баги слышу первый раз, и сам не сталкивался.

Стакивался лишь с тем, что не скоростной КМОП, а обычный советский ППА, требует, чтобы между записями в порт проходило, как минимум, 500 НСЕК. Поэтому команда LD (portA),HL работает только до частоты 5 МГЦ, а выше надо или вводить 1 такт WAIT при обращениях к PPA или работать с портом только байтовыми командами.

HardWareMan
20.02.2018, 19:25
По порядку:
Какая бага у ИК55?
Теоретически может что? Сгореть? Но на практике не встречалось?
Чем выходные каскады КМОП отличаются от нМОП (по силе открытия ключей на ноль, и на плюс питания)?
Или перефразирую так. Какое сопротивление открытого ключа на ноль и на плюс для КМОП и для нМОП?
1. Мы уже обсуждали на ZX.PK, но я не помню где. Есть 3 "ревизии" порта: ИК55, ВВ55 и ВВ55А. Есть 2 вида бага: порт не устанавливает 0 на порте, только что настроенном на выход и чтение из порта, настроенного на выход возвращает регистр выхода а не состояние ножки (т.е., нельзя "перетянуть" ее). Какой баг на каком этапе исправили я, увы, не помню.
2. nMOS:
https://upload.wikimedia.org/wikipedia/commons/thumb/0/01/NMOS_NOR_WITH_RESISTIVE_LOAD.PNG/200px-NMOS_NOR_WITH_RESISTIVE_LOAD.PNG
CMOS:
https://upload.wikimedia.org/wikipedia/commons/thumb/8/81/CMOS_Inverter.svg/220px-CMOS_Inverter.svg.png
Разница, думаю, и так понятна. У nMOS вместо сопротивления по факту стоит транзистор закороченный, мы их видим в схеме ВМ80. Возможно, что как раз для ВВ55 закорачивание 0 и не страшно, но пока не сделать декап и не посмотреть внутрь - не понятно. Опять же, у портов есть режим 1, а у порта А еще и 2. В последнем точно включается полный выходной буфер для прокачивания линии связи. Но в софте наших ЛК они не используются.

- - - Добавлено - - -


У меня нет злобы на Вас (хотя Вы мне постоянно отравляете хобби), т.к я вообще добрейший человек. Злоба очень вредна, особенно, если её накапливать.
Как еще объяснить Вашу эйфорию от радости в этом сообщении (http://zx-pk.ru/threads/10378-spetsialist-voprosy-programmirovaniya.html?p=951286&viewfull=1#post951286), кроме как не торжество злости? "Срывы покровов" в полной красе и с помпой.

Titus
20.02.2018, 19:53
Есть 2 вида бага: порт не устанавливает 0 на порте, только что настроенном на выход и чтение из порта, настроенного на выход возвращает регистр выхода а не состояние ножки (т.е., нельзя "перетянуть" ее). Какой баг на каком этапе исправили я, увы, не помню.
С чтением из порта настроенным на выход понятно.
А как это не устанавливает 0? Вообще не устанавливает, или при каких-то условиях?
Получается, что все три варианта нМОП. Т.е. фактически с открытым коллектором.

barsik
20.02.2018, 20:01
Как ещё объяснить Вашу эйфорию от радости в этом сообщении (http://zx-pk.ru/threads/10378-spetsialist-voprosy-programmirovaniya.html?p=951286&viewfull=1#post951286)... "Срывы покровов" в полной красе и с помпой.
Хотя у меня и есть все причины желать Вам всего нехорошего, но в этом посте нет никакой эйфории. Вы видимо, себя "накручиваете", отчего Вам и кажется невесть что. И где там "срыв покровов и помпа"?

Вы обозвали мой пост глупостью, мне ничего не оставалось, как защититься от обвинений в глупости. И я это сделал вполне корректно, естественно, как всегда подчеркнув, что причина Ваших ошибок, это желание придраться хоть к чему-то. И заметьте, что Вы ошибаетесь в основном только, когда пытаетесь "достать меня". А как этот факт объяснить иначе, кроме как ослеплением злобой.

Titus
20.02.2018, 20:22
Мальчики, не ссоримся, и не засоряем тему.

HardWareMan
20.02.2018, 20:38
С чтением из порта настроенным на выход понятно.
А как это не устанавливает 0? Вообще не устанавливает, или при каких-то условиях?
Получается, что все три варианта нМОП. Т.е. фактически с открытым коллектором.
У нас да, ВВ55 не было в КМОПе, только у буржуев 82C55. Установка в 0 только при записи в РУС правильного кода, изменяющего режим. Те порты, которые настраиваются при этом на выход принудительно обнуляются. Этим пользуется тот же Специалист, как НП. В Орионе же больше играет роль чтение порта, настроенного на вывод. Много кода, работающего с ППА (как системного так и дополнительного) используют порт как ячейку памяти. Поэтому глючит, если чтение идет не с регистра а с ножки. Найти бы это обсуждение, оно было тут, лет 5 назад, наверное. Или больше.

Мальчики, не ссоримся, и не засоряем тему.
Никто не ссорится. Но и давать повод считать игнорирование опусов нервного шизофреника как глобальную победу этого самого шизофреника как-то не хочется. Нужно поддерживать в нем негодование, тогда он сорвется и его госпитализируют, на благо ему и, конечно же, обществу.

Titus
20.02.2018, 20:42
Установка в 0 только при записи в РУС правильного кода, изменяющего режим. Те порты, которые настраиваются при этом на выход принудительно обнуляются. Этим пользуется тот же Специалист, как НП.
Что такое РУС?
Если специалист пользуется этим, то он не будет работать с ИК55?

HardWareMan
20.02.2018, 20:48
Что такое РУС?
http://jpegshare.net/images/bc/b3/bcb3e6183f216d799b9c725c33a1ced7.png

Если специалист пользуется этим, то он не будет работать с ИК55?
Получается, что да.

OrionExt
20.02.2018, 22:19
В Орионе же больше играет роль чтение порта, настроенного на вывод. Много кода, работающего с ППА (как системного так и дополнительного) используют порт как ячейку памяти. Поэтому глючит, если чтение идет не с регистра а с ножки. Найти бы это обсуждение, оно было тут, лет 5 назад, наверное. Или больше.
Видимо глючит.
Чтение с ячейки памяти – F400.
Чтение с порта F4, а фактически с ячейки памяти F4F4. Что-то тут не то. Нет там ППА.

Не понятно - ножка, регистр и ячейка памяти. Это ведь одно и тоже, то есть для Ориона ножка ППА (регистр ППА) и ячейка памяти полностью прозрачны.


Поправка. Хотя теоретически F400 F404 F4F4 могут быть тождественны, для этого надо расковырять железный дешифратор адреса Ориона. И это касается только порта А ППА.

HardWareMan
20.02.2018, 22:42
Журнальная схема Ориона. (http://jpegshare.net/images/f5/0f/f50f27c9702b78bd63cd2bb65a2ed667.png) Портам отведены 256 байт на каждый сигнал выбора. Сам порт имеет 4 ячейки, поэтому они будут повторяться 64 раза в этих 256 байтах. Т.е., для порта с адресами F4xx ячейки F404 и F4F4 равнозначны, при условии что данный сигнал использует только 1 ППА ВВ55.

- - - Добавлено - - -

Что касается вот этого:

Не понятно - ножка, регистр и ячейка памяти. Это ведь одно и тоже, то есть для Ориона ножка ППА (регистр ППА) и ячейка памяти полностью прозрачны.
Так как схема Ориона не анализирует слово состояния процессора ВМ80, то она не различает разные типы машинных циклов. Т.е., M1 (чтение опкода), чтение или запись в стэк, чтение или запись в память а так же, чтение или запись в порт для нее однозначны, поскольку сигналы строба обращения и адреса общие. Только в системах с шинным формирователем ВК28/ВК38 эти обращения дифференцируются, ну или при подключении Z80, который имеет особые ножки для определения типа обращения. Но там для совместимости приходится игнорировать некоторые сигналы (обычно это MEMRQ и IORQ), либо частично склеивать по определенным адресам.

OrionExt
20.02.2018, 22:54
Так как схема Ориона не анализирует слово состояния процессора ВМ80, то она не различает разные типы машинных циклов.
О том и речь. Рассматривал журнальную схему. Поэтому весь этот программный выпендреж, после нескольких доработок вылез боком. Думаю и Специалиста это касается в какой-то мере.

Подправил предыдущий свой пост.

HardWareMan
20.02.2018, 23:09
OrionExt, его это конкретно касается. В начальном, базовом варианте, это было оправдано и в этом был успех. А потом, уже в доработках, вроде МХ, не понятно, почему нельзя было поставить 1 регистр на шину данных (которая все равно не буферизирована, в отличии от того же Ориона) и защелкивать слово состояние процессора по SYNC для дальнейшей дифференциации портов ввода-вывода. Ведь все равно вся периферия изменила свое положение, а замена STA/LDA в адаптируемом софте на IN/OUT проста, так как первые используют 3 байта а вторые всего 2 (надо дополнять NOPом).

Вопрос в другом: а была ли массовой установка Z80 в Специалист (или МХ), как это было в Орионе? Ну вот я ставил его в один из кружковых, кто-то еще тоже без сомнений. А массово, среди общего числа пользователей, был такой факт? Если нет - то и проблему никто не нашел.

- - - Добавлено - - -


Подправил предыдущий свой пост.
Не обязательно было править. Дешифрация идет вот так:

A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
1 1 1 1 0 1 0 0 x x x x x x R1 R0
+==== F ====+ +==== 4 ====+ +====+
Т.е., для R1:R0 адреса F400, F404, F408, F40C ... F4F8 и F4FC однозначны.

OrionExt
20.02.2018, 23:33
Ведь все равно вся периферия изменила свое положение, а замена STA/LDA в адаптируемом софте на IN/OUT проста, так как первые используют 3 байта а вторые всего 2 (надо дополнять NOPом)
Дорабывать софт не совсем тривиальная задача для рядового пользователя в те годы. Раньше программа запускалась, а теперь нет. Это уже с появления интернетов все начало вылазить с пояснениями (софтовые штучки-дрючки).


Вопрос в другом: а была ли массовой установка Z80 в Специалист (или МХ), как это было в Орионе? Ну вот я ставил его в один из кружковых, кто-то еще тоже без сомнений. А массово, среди общего числа пользователей, был такой факт? Если нет - то и проблему никто не нашел.
Да и на Орионе в те годы в глубинке не было массового перехода на Z80. Схема адаптации еще та вышла. Если не работает - подрежьте там или подмажьте здесь.

Мной была куплена Z80 кард в те годы, но так дело до установки и не дошло.

- - - Добавлено - - -

Экономить на байтах не всегда одинаково полезно. Но кого это волновало в те годы (не многие платформы в разрезе софта могут похвастаться толерантность к апгрейду железа). Как правило, все было прибито гвоздями намертво.

Titus
27.02.2018, 10:56
Попробовал добавить в свой эмулятор EmuStudio модель компьютера Специалист. Но так как у меня нет 8080, применил Z80, который уже обкатывал на эмуляторе спектрума и других.
Выяснилось, что некоторые программы не работают на Z80. В частности, тот же бейсик глючит. Когда делаешь, например, LIST вообще зависает. Так и должно быть с Z80? Какие есть нюансы?

OrionExt
27.02.2018, 11:02
В частности, тот же бейсик глючит.
Как минимум по разному работает инструкция DAA.

Titus
27.02.2018, 11:20
Как минимум по разному работает инструкция DAA.

Вот это уже интересно. Есть какая-нибудь статья, где сравнивается работа?

OrionExt
27.02.2018, 11:48
Вот это уже интересно. Есть какая-нибудь статья, где сравнивается работа?



- Z80 uses P flag for 2's complement overflow, where 8080 does not
- DAA instruction corrects both subtraction as well as addition on Z80, but addition only on 8080.
- Z80 rotate instructions clear the AC flag, but the 8080 does not.

Also, timings are different per-instruction.


Клик (http://www.msxarchive.nl/pub/msx/mirrors/hanso/datasheets/chipsz80leventhal3.pdf)

Titus
27.02.2018, 12:08
Как поступали люди, которые ставили себе Z80 в Специалист, или даже в Орион? Переписывали несовместимый софт, в частности работу с DAA?

OrionExt
27.02.2018, 13:30
Ну, бейсик точно патчили. А так львиная доля софта работала без проблем.
Хотя были исключения. Ну, это больше из-за недопонимания как работает железо (не только Z80) или хитро-попасти авторов программ.

Titus
27.02.2018, 14:18
Ну, бейсик точно патчили. А так львиная доля софта работала без проблем.
Чего именно патчили в бейсике? DAA или может еще флаг P/O?

- - - Добавлено - - -

Киньте документик, в котором есть сводная таблица, как каждая команда 8080 влияет на флаги.

barsik
27.02.2018, 14:32
Чего именно патчили в бейсике? DAA или может еще флаг P/V?
Я не разбирался (т.к CP/M бейсик-компилятор работает, а бейсики-интерпретаторы производные от Эр-Ка-шного МИКРОНА меня никогда не волновали), но в этом форуме в нескольких местах написано, что бейсики ОРИОНА не работают из-за DAA. Надо верить людям, но сам я, например, не видел такого кода и потому не понимаю зачем делать условный переход после DAA. Вроде бы, Z80 в DAA ставит Parity, а КР580 его не меняет. Но зачем анализировать Parity после DAA?

Причиной может быть и флаг Parity/oVerflow, если его анализировать как Parity после арифметических команд, что явное извращение, хотя и встречалось, например, в ПЗУ РК86 и с'экономило там один байт.

Кстати, кроме бейсика, есть и некоторые игры, которые почему-то не работают на Z80. Их немного, 4 или 5. Но кому охота с этими играми разбираться? Кстати, встречал "вредительство", когда с временной рабочей ячейкой программа работает не с помощью STA/LDA, а по IN/OUT, что чуть экономит место и ускоряет, но работает только при КР580 или с Z80 установленном хитроумным способом.

Бейсик ОРИОНА под Z80 исправил в 1993 В.Пушков (была статья в ж.Радио) и потому с процессором Z80 не работают только ранние бейсики ОРИОНА выпущенные до 1993. А бейсики Специалиста под Z80 исправил уже совсем недавно ivagor, есть соответствующая тема.

Кстати, как раз для Специалиста есть программы в которых применены недокумментированные коды КР580. Эти программы никак не могут работать на Z80.

Такие команды для защиты от копирования впервые применил КООП SP580 в 1988. Те, кто кракал МГ-защиты эти команды узнали. И сами стали использовать для защиты от копирования и от модификации своего кода. А вот пользователи ОРИОНА этого уже не узнали, т.к игры от Специалиста достались им уже в адаптированном виде, кракать МГ-защиты не пришлось.

Titus
27.02.2018, 16:10
с временной рабочей ячейкой программа работает не с помощью STA/LDA, а по IN/OUT, что чуть экономит место и ускоряет, но работает только при КР580 или с Z80
Как можно In/Out использовать как рабочую ячейку?

OrionExt
27.02.2018, 16:34
Чего именно патчили в бейсике? DAA или может еще флаг P/O?
Ну, я так не вспомню. Касательно Ориона, в более свежих версиях этот баг с DAA пофиксили.


Киньте документик, в котором есть сводная таблица, как каждая команда 8080 влияет на флаги.
Вот эта книжка мне в детстве нравилась - Тищенко В.Г. МикроЭВМ - своими руками (http://publ.lib.ru/ARCHIVES/K/''Kogda_sdelany_uroki''/Tischenko_V.G..._MikroEVM_-_cvoimi_rukami.(1989).[djv-fax].zip). Кому-то отдал почитать, и не вернули:(

ivagor
27.02.2018, 17:23
В потомках первых версий микрософтовского альтаирского бейсика проблема для z80 во флаге четности(/переполнения) в паре мест. Ну и еще иногда бывают разные уникальные дополнительные проблемы, которые создают переносчики (в одном из специалистовских есть, в одном векторовском есть).
Очень часто при проблемах совместимости 8080 и z80 вспоминают DAA. Но мне, например, пока не разу не встречалась проблема "неидучести на z80" связанная с этой командой. Кроме флага четности/переполнения встречал проблему использования недокументированных кодов команд 8080. Ну и весьма вычурный вариант - использование регистра флагов на стеке как адреса для перехода. В доэксисайзерные времена авторам эмуляторов даже пришлось дорабатывать эмуляцию 8080.

Titus
27.02.2018, 17:39
В потомках первых версий микрософтовского альтаирского бейсика проблема для z80 во флаге четности(/переполнения) в паре мест.
Да, как только поправил флаг четности, сразу бейсик заработал.
Недокументированные команды тоже сделал на всякий случай.
И флаг F, чтобы 3 и 5 биты были всегда в 0.

ivagor
27.02.2018, 18:20
Насчет флагов есть источник лучше справочников - begoon i8080-core (https://github.com/begoon/i8080-core)
Там не все идеально, но именно флаги обрабатываются 100% правильно. В справочниках практически всегда неполная информация про флаг AC (который H в Z80).

Titus
27.02.2018, 19:16
Сделал экспериментальную поддержку клавиатуры, как аналоговой схемы.
Каждый выход порта ВВ55 представляется у меня, как два резистора определенного номинала на ноль, и на плюс питания. Которые меняются в зависимости от того, в каком состоянии находится порт - вход, выход '1' или выход '0'.
Так же есть резисторы подтяжки для линий клавиатуры и сама клавиатурная матрица.
При чтении информации с порта, вычисляется итоговый потенциал на ножке, и если > 2.0 вольт, то это лог '1', иначе '0'.
Потестил немного в бейсике и прочих играх - вроде работает)

Titus
28.02.2018, 03:17
Обнаружил, что формат файла для специалиста бывает 2-х типов, при чем, оба имеют расширение .rks.
В первом формате все просто - начальный адрес, конечный, тело и контрольная сумма.
А из чего состоит второй формат? Там обычно в начале какие-то символы, затем много нулевых байт, потом тело программы.

barsik
28.02.2018, 06:31
Обнаружил, что формат файла для специалиста бывает 2-х типов, при чем, оба имеют расширение .rks.
То, что для разных МГ-форматов используется одно и то же расширение, это вредительство со стороны авторов эмуляторов. В реальности, т.е на реальных кассетах, все использовали только один формат, - формат с именем. Формат без имени, это атавизм, пережиток из 1985 года.


В РК86 ROM-BIOS и монитор это одна программа, т.к они в одном ПЗУ РФ2. А в Специалисте это две отдельные программы. Т.е, есть отдельно ПЗУ РФ2 содержащее ROM-BIOS и есть отдельная программа монитор, которая может работать как из ОЗУ, так и из ПЗУ C800. ROM-BIOS Специалиста прошит в ПЗУ C000 и содержит 19 стандартных входов в подпрограммы.

Термином монитор называется программа в которой есть директивы и, в частности, директивы для поддержки МГ-ленты. Хотя типов мониторов больше, но МГ-форматы определили два основных типа мониторов - волковский и орловский.

Исторически первым монитором был монитор А.Волкова. Он иногда прошивался во второе ПЗУ C800, но работал всё-равно из ОЗУ по адресу 8D00. Он поддерживал именно тот формат, который обслуживается по сбросу. Т.к в ROM-BIOS нет директив, то по сбросу грузится программа в таком формате, причём после загрузки эта программа запускается на исполнение. Потому ПЗУ C000 иногда называют загрузчиком. Загрузчик позволял грузить по сбросу и использовать уже готовые программы, а также загрузить волковский монитор, с помощью которого уже можно было записывать и читать программы в ОЗУ без автозапуска.

Т.к в таком формате нет имени файла, то ориентироваться в файлах на ленте неудобно. Поэтому в начале 1988 А.Орлов опубликовал другой монитор, который не только прошивался в ПЗУ C800, но оттуда же и работал. Этот монитор имел и входы в подпрограммы, аналогичные подпрограммам ПЗУ РК86 (адреса подпрограмм отличались от адресов в РК86 лишь одним разрядом). Это служило цели облегчить конверсию программ от РК86. Но тем самым это ввело второй стандарт входов в ROM-BIOS, что сделало необходимым наличие не только загрузчика на C000, но и второго РФ2. Хотя большинство игр работает с одним лишь загрузчиком, но почти все системные программы требуют наличие и орловского монитора с входами на C800.

Орловский монитор сохранил формат без имени загружаемый по сбросу (директивы R,W), но дополнительно ввёл более удобный формат с именем (директивы I,O). Это оказалось очень удобно, отчего формат без имени мгновенно вышел из употребления.

Pyk делая в конце 80-тых эмулятор Специалиста решил, что раз имя программы уже содержится в имени MSDOS-файла, то формат с именем для эмулятора вообще не нужен. Позднее и другие эмуляторы стали использовать такой формат.

Файл в формате с именем в эмуляторах можно загрузить стандартной директивой I, но имя приходится указывать тоже RKS, т.к только такие файлы выводятся в меню открытия файла. Я предлагал ввести иное имя, чтобы избежать путаницы, но увы, авторы эмуляторов это проигнорировали. Потому, чтобы не путаться, я в файлах грузящихся по R использую расширение 'rks' маленькими буквами, а в файлах грузящихся по I использую расширение 'RKS' большими буквами.

Формат с именем, для загрузки по I:

256 нулевых байтов (первый пилотон)
E6 - синхробайт
D9, D9, D9 - признак формата с именем
17 байтов - имя файла кончающееся нулём, т.е само имя может иметь длину до 16 букв
768 нулевых байтов (второй пилотон)
E6 - синхробайт
Начальный адрес (сначала младший, затем старший байт)
Конечный адрес (сначала младший, затем старший байт)
Тело файла (длиной: кон.адрес минус нач.адрес +1)
КС - контрольная сумма по C82A (сначала младший, затем старший байт)

Второй пилотон сделан длинным специально, чтобы не имея орловского монитора можно было загрузить лишь одним загрузчиком. Тогда на слух пропускаем первый блок, содержащий имя и жмём на кнопку СБРОС, как услышим начало второго пилотона. В реальности для любого пилотона достаточно 60 байтов. Потому в файле RKS для загрузки в эмулятор удобно подгонять длину заголовка (включая байт E6) под 256 байт, тогда конверсия из одного формата в другой заключается лишь в добавке или удалении 256 байтов в начале файла.

Так что специальная программа для конверсии форматов не нужна. Используя редактор UltraEdit, я за 15 минут вручную перевёл полсотни файлов без имени в формат с именем для загрузки по I.

Titus
28.02.2018, 09:57
Те программы, которые я с сайта www.spetsialist-mx.ru (http://www.spetsialist-mx.ru) имеют другой формат, похожий на тот, что описан, но без первого пилоттона.
Обычно там так:
D9, D9, D9 (а иногда вместо этого что-то типа 70, 8F, 82, 8F).
Затем имя
Затем пилоттон разной длины, от 256 байт до 512,
Затем E6, затем уже стартовый и конечный адрес.

Лично я бы для эмулятора оставил только первый формат, без пилоттонов. Т.к. там есть все необходимое - имя (имя файла .rks), адрес начала, и адрес конца. И все это прекрасно грузится начальным загрузчиком и автоматически запускается.

Titus
28.02.2018, 13:15
Всем спасибо, с форматами разобрался)

barsik
19.03.2018, 16:31
Схема клавиатуры Специалиста впервые была опубликована в ж.МК 02.1987, но эта схема, драйвер, подписи и назначения клавиш позднее были изменены в ж.МК 04.1989. Были добавлены клавиши <TAB> и <АР2> и изменены вырабатываемые коды и, соответственно, подписи клавиш функционального ряда.

Т.к найти полноценную схему клавиатуры Специалиста с правильно подписанными клавишами невозможно, а при самостоятельном изготовлении клавиатуры из кнопок, а также для программирования прямого опроса матрицы, такая схема необходима, вот эта схема. Её всегда полезно иметь под рукой каждому владельцу Специалиста, т.к размер схемы всего 4 кб, что не существенно обременит винчестер.

http://ipic.su/img/img7/fs/KlaviaturaSpecialista.1521463140.png

Titus
19.03.2018, 16:50
Спасибо! Весьма полезно и очень кстати.