PDA

Просмотр полной версии : Программирование на ассемблере



Страницы : [1] 2

shuran33
11.05.2018, 11:05
Друзья, хочу учиться программировать под Вектор06Ц. В этой теме буду задавать возможно глупые вопросы, но уж заранее прошу извинить. Буду рад любой помощи.
Программировать буду в Прекрасном ассемблере (http://sensi.org/~svo/i8080/).

Прочитал документацию о строении экрана. Но при пересылке байтов в экранную область ничего на экране не отображается. Нужны какие то предварительные действия?

Сравниваю программирование со спектрумом. Поэтому есть еще вопрос, есть ли в Векторе ПЗУ с подпрограммами? Есть ли описание?

Improver
11.05.2018, 11:40
Но при пересылке байтов в экранную область ничего на экране не отображается. Нужны какие то предварительные действия?Да, нужно настроить палитру цветов...


Поэтому есть еще вопрос, есть ли в Векторе ПЗУ с подпрограммами?Нет.


Есть ли описание?Что и как программировать на Векторе описано в различных журналах (http://www.sensi.org/scalar/categories/e-zine/) и статьях (http://www.sensi.org/scalar/categories/document/), посвящённых Вектору... Рекомендую ознакомиться.

ivagor
11.05.2018, 11:49
Есть сравнительно простой вариант быстрого старта.
Можно выбрать в прекрасном асме (http://sensi.org/~svo/i8080/) рыбу "Вектор-06ц: быстрая линия", оставить там только начало до Restart: и конец от Cls: до .end
Между Restart: и Cls: можно вставить что-нибудь свое, палитра к моменту рестарт запрограммирована. Можно цвета палитры поменять, они в colors:

s_kosorev
11.05.2018, 11:56
Автор прекрасного ассемблера, по всей видимости чем то болел, когда выбирал шрифт

ivagor
11.05.2018, 11:59
Из классики могу посоветовать "Секреты Вектора" Лебедева (http://www.sensi.org/scalar/ware/563/).
secrets.txt - это рыба с довольно подробными комментариями.

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

s_kosorev, зачем сразу на личности, может приведете конкретные претензии? Хоть я и не svofski, но на мой взгляд нормальный моноширинный шрифт.

shuran33
11.05.2018, 12:00
Понял, спасибо. Буду читать и пробовать

s_kosorev
11.05.2018, 12:04
s_kosorev, зачем сразу на личности, может приведете конкретные претензии? Хоть я и не svofski, но на мой взгляд нормальный моноширинный шрифт.
У меня кровь из глаз, от шрифта, где кегль цифр и заглавных букв отличается, люди семь тысяч лет вырабатывали правила хорошо читаемых начертаний букв

svofski
11.05.2018, 13:31
s_kosorev, я много чего сделал когда чем-то болел, потому что это отличный способ отвлечься от собственно боления. Однако никакого шрифта сам ассемблер не загружает, а за скоро уже как 10 лет существования Прекрасного ассемблера никто ни разу не жаловался на попрание семи тысяч лет истории. Рискну предположить, что ваш браузер, или системные шрифты, настроены как-то нетрадиционно. В любом случае, добро пожаловать настроить ассемблер для себя так, как вашей душе угодно, выражать конструктивную критику здесь, или в Issues, или не пользоваться вообще.

Сорцы доступны здесь: https://github.com/svofski/pretty-8080-assembler

В обычной практике рекомендую пользоваться такой ссылкой: https://svofski.github.io/pretty-8080-assembler/

s_kosorev
11.05.2018, 16:00
Edge IE Chrome, идентичная картина.
Из нестандартного, маштабирование экрана на внешнем мониторе 125%

Проблема только с шрифтом Lucida Console

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

Более адекватный список и порядок моноширных шрифтов
Consolas, 'Courier New', monospace

s_kosorev
11.05.2018, 20:11
Дома, на другом компьютере, то же самое http://prntscr.com/jgo259

svofski
11.05.2018, 22:31
Это просто начертание шрифта, никаких отклонений тут нет. При стандартном размере, без лупы и без красной пелены перед глазами, такое не всякий заметит. По мнению его разработчиков он предназначен для того, чтобы обеспечить хорошую читабельность на дисплеях с невысоким разрешением. Кроме того, это дефолтный моноширинный фонт в винде со времен Windows 2000.

s_kosorev
12.05.2018, 00:48
Кроме того, это дефолтный моноширинный фонт в винде со времен Windows 2000
Дефолтный Courier, начиная с Vista рекомендуется более вменяемый Consolas, отсюда и порядок шрифтов, который я указал, тем у кого современный windows, достанется Consolas

shuran33
12.05.2018, 08:04
Друзья, а давайте не будем в этой теме обсуждать Прекрасный Ассемблер. Не хотелось бы чтобы тема ушла в сторону.

dbk
02.07.2018, 21:03
Напишу сюда. Ибо мой вопрос перекликается с темой топика.
Допустим у меня есть только рабочий экземпляр Вектора, телевизор, магнитофон с кассетой "базовое ПО", комплектные мануалы и брошюрка С.Н.Текотева "От Бейсика к Ассемблеру" (откуда им взяться у нас в Минске в 90-ые, но все же) + зудящее желание вернуться в детство и начать программировать на Ассемблере (ибо Васиковские залития, кружки, двиганье спрайтами и попытка реализовать Книгу-игру Браславского "Подземелье Черного замка" уже достало) и ничего более! Вопрос, как начать?! Ну загрузил я Монитор, а Редактор-Ассемблер просто не работает и все. Лазанье по комплектным мануалам ничего не дало. так и не нашел как запустить сам компилятор (Ассемблер редактор). Что делать дальше?! ))))

shuran33
02.07.2018, 22:48
dbk, приветствую. Ты только на реале хочешь учиться программировать? Можно было бы объединиться, для совместного программирования, но у меня только эмулятор.

dbk
02.07.2018, 23:29
dbk, приветствую. Ты только на реале хочешь учиться программировать? Можно было бы объединиться, для совместного программирования, но у меня только эмулятор.
Да какая это учеба, так побаловаться, просто "навеяло" моим перебором аппаратиков. И мне кажется, что разницы нет, эмулятор или живой Вектор - подход к использованию инструментария отличается и все. Просто вот опять возник на повестке дня вопрос о Курсе молодого программиста под Вектор-06Ц. Под ZX такое я встречал (тот же мануал от Инфокома Программирование в машинных кодах и на языке Ассемблера: пошагово, с азов, вот машинка, вот инструмент, вот так им пользоваться - дерзайте парни. Под Вектор такого нет или я не нашел. Общий мануал по ассемблеру для i8080 есть в природе, как минимум вышеупомянутая брошюра С.Н.Текотева "От бейсика к ассемблеру" (взята с умирающего сайта посвященному ПК Львов, мануал там кстати уже не доступен). Вот и спрашиваю у местных специалистов, как?! Как начать на Векторе?!

Стандартные руководства Ассемблер-редактор и Монитор-отладчик так и не описали как ими изначально пользоваться! Нет, ну я понимаю, запустил с базовой кассеты к примеру Монитор и дальше что?! Судя по информации из Картотеки, через команду G100 уже запускать Ассемблер-редактор (у меня кстати как в эмуляторе, так и в реале - не заработало, либо я что-то делаю не так), но что-то я в мануале такой процедуры так и не нашел ) Вполне конечно плохо искал, но все же. Как начать "обычному школьнику из 90-х" имея на руках только книжки и ПО из комплекта?! Мужики, подскажите.

ps простая загрузка с кассеты чистого Ассемблер-редактора тоже ни к чему не привела, даже не запустилось )

svofski
03.07.2018, 00:19
Присоединяюсь к вопросам. Запустить EDASM не получилось. Правда честно скажу, что все 55 страниц описания я не читал.

Improver
03.07.2018, 09:58
Нет, ну я понимаю, запустил с базовой кассеты к примеру Монитор и дальше что?! Судя по информации из Картотеки, через команду G100 уже запускать Ассемблер-редактор (у меня кстати как в эмуляторе, так и в реале - не заработало, либо я что-то делаю не так)Полагаю, на реале после запуска монитора-отладчика надо сначала загрузить редактор-ассемблер, а потом уже его запускать через G100. :)

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


но что-то я в мануале такой процедуры так и не нашел ) Вполне конечно плохо искал, но все же. Как начать "обычному школьнику из 90-х" имея на руках только книжки и ПО из комплекта?!В документации на ассемблер-редактор (http://www.sensi.org/scalar/ware/795/) всё есть, начиная с сотой страницы (или 52-й по нумерации листов в файле). Там же далее есть горячие клавиши, без знания которых ничего не получится сделать...

dbk
03.07.2018, 10:13
Что удалось раскопать по своему вопросу: Инвектор №7, в котором BYK (Быков Владимир (https://kaleostra.biz/uploads/2015/11/21/03/36/200_250f25a2e05be64.jpg)) рассказывает как войти в Ассемблер на Вектор-06Ц, потом был найден документ А.З.Лебедева Программирование режимов "ПЭВМ Вектор-06Ц на языке Ассемблера" (https://raw.githubusercontent.com/wiki/svofski/vector06cc/VectorSecrets_by_Lebedev.md) (он есть у меня в печатном виде), где сказано, что для того чтобы перейти в Ассемблер-редактор, нужно:


...Теперь о формате данного описания: оно представляет собой листинг программ на языке Ассемблера с подробными комментариями в каждой строке. Чтобы ввести его в компьютер, Вам необходимо загрузить МОНИТОР-ОТЛАДЧИК и после его запуска выбрать режим "2". Затем через директиву "R" монитора-отладчика, ввести программу "Редактор-Ассемблер" и, пользуясь им, ввести текст программы без комментариев - т.е. только команды ассемблера. А точки с запятой и весь текст за ним не печатать - т.к. весь текст просто не поместится в память при режиме монитора "2", да и комментарии у Вас уже распечатаны. Для тех, кто пока еще не работал с редактором-ассемблером, в Приложении 1 дана распечатка машинных кодов этой программы, работающая только с монитором (или вообще автономно). Начинается и запускается эта программа с адреса 0100h. Для изменения параметров дана распечатка таблицы меток...

Попробовал сделать как описано. При вводе в Мониторе-отладчике команды: RW (судя по документации, команда используется для закгрузки в память программы без четкого указания имени), нажал ВК, поставил на проигрывание Ассемблер-редактор (EDASM), но после окончания проигрывания в Мониторе реакции ноль! Как будто ничего и не произошло. По комбинации БЛК+СБР опять попал в меню приглашения Монитора-отладчика и все. Короче что-то не так делаю.

В эмуляторе пройдя ровно по инструкции описанной в картотеке (http://sensi.org/scalar/ware/673/) "...Загрузка файла ассемблер-редактора осуществляется через менеджер памяти (File -> Memory Manager) с адреса 0100h, запуск командой G100..." загрузить его получилось. Вопрос как это повторить на реальной машинке?

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


Полагаю, на реале после запуска монитора-отладчика надо сначала загрузить редактор-ассемблер, а потом уже его запускать через G100. :)

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

В документации на ассемблер-редактор (http://www.sensi.org/scalar/ware/795/) всё есть, начиная с сотой страницы (или 52-й по нумерации листов в файле). Там же далее есть горячие клавиши, без знания которых ничего не получится сделать...
Так как его загружать?! ) Вот, что делаю я (на реале):
0. загружаю Монитор-отладчик (тот, что идет в базовом комплекте 2.5)
1. выбираю к примеру 2 (могу выбрать 1)
2. ввожу команду g100 - Монитор-подвисает (курсор пропадает)
3. включаю на загрузку (типа с кассеты) wav-файл с Асссемблер-редактором. Оно заканчивает проигрывать и всё. Курсор не появляется, реакции ноль. Просто на нажатия клавиш Вектор мне "пибикает" и все. По БЛК+СБР, как писал ниже, появляется курсор и все. никаких изменений. Ничего.

В эмуляторе с помощью инструкции приведенной на карточке загрузить получилось (через Memory Manager).

Вместо команды G100 использовал команду R (в различных её вариациях) - кроме сообщения Монитора: Имя: ?????????? ничего не получил. Т.е. даже загрузить Ассемблер-редактор не получилось (ну чтобы его запустить по G100). Что-то я делаю не так (

Improver
03.07.2018, 10:18
Попробовал сделать как описано. При вводе в Мониторе-отладчике команды: RW (судя по документации, команда используется для закгрузки в память программы без четкого указания имени), нажал ВК, поставил на проигрывание Ассемблер-редактор (EDASM), но после окончания проигрывания в Мониторе реакции ноль! Как будто ничего и не произошло.Не считалось, следовательно. Насколько я помню, при начале загрузки по команде RW должно писаться имя загружаемого файла, а в конце -- "ок" или "ошибка"... А воспроизведение запускаешь с майфуна, или более современными методами?

KTSerg
03.07.2018, 10:18
А это принципиально, программировать именно на Векторе?
Можно и на РС в блокноте писать на Ассемблере, потом компилировать и запускать на Векторе.
Или можно в Онлайн-Ассемблере программировать (честно признаюсь - не пробовал).
На самом Векторе будет удобно программировать на Ассемблере при наличии хотя-бы Квазидиска.

dbk
03.07.2018, 10:39
А это принципиально, программировать именно на Векторе?
Именно принципиально! В поставленной мной самому себе задаче звучит именно так: у меня есть машинка только из коробки, цветной телевизор (зря что ли вскрывал заводскую пломбу и дорабатывал Вектор), магнитофон (сейчас его функцию выполняет мобильник с записанными wav-файлами программ из базового комплекта ПО) и ворох руководств из коробки. Вопрос, как начать в Ассемблер. По самому Ассемблеру у меня есть книжка того же Абеля или Нортона, да и Текотев тоже пойдет.


Можно и на РС в блокноте писать на Ассемблере, потом компилировать и запускать на Векторе.
Или можно в Онлайн-Ассемблере программировать (честно признаюсь - не пробовал).
Можете расписать технологию написания по на Ассемблере для Вектора с помощью PC? Может кому-то будет интересно. Хотя мне тоже интересно ) вдруг пригодится.


На самом Векторе будет удобно программировать на Ассемблере при наличии хотя-бы Квазидиска.
Квазидиск будет чуть позже. Когда я его куплю или сам спаяю ) т.е. пока такой расчудесной штуки у меня нет.

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


Не считалось, следовательно. Насколько я помню, при начале загрузки по команде RW должно писаться имя загружаемого файла, а в конце -- "ок" или "ошибка"... А воспроизведение запускаешь с майфуна, или более современными методами?
Современными методами. Мобильник + wav с необходимым ПО. Все остальное ПО грузится на ура.

Improver
03.07.2018, 10:40
(сейчас его функцию выполняет мобильник с записанными wav-файлами программ из базового комплекта ПО)
Монитор-отладчик имел свой формат чтения/записи данных на магнитофон. Вопрос: в каком формате создана wav-ка с ассемблером?

dbk
03.07.2018, 10:47
Монитор-отладчик имел свой формат чтения/записи данных на магнитофон. Вопрос: в каком формате создана wav-ка с ассемблером?
Ну наверное в формате Монитора! Ибо если Ассемблер-редактор грузить сразу, то по ВВОД+БЛК он не запускается!

Improver
03.07.2018, 11:04
Ну наверное в формате Монитора! Ибо если Ассемблер-редактор грузить сразу, то по ВВОД+БЛК он не запускается!

3. включаю на загрузку (типа с кассеты) wav-файл с Асссемблер-редактором. Оно заканчивает проигрывать и всё. Курсор не появляется, реакции ноль.
Возможны два варианта: либо там запись не в формате монитора, либо запись не качественная и Вектор её не распознаёт... Что можно сделать:

Вариант 1: Скачать из архива редактор-ассемблер (http://www.sensi.org/scalar/ware/673/), загрузить его в эмулятор в соответствии с приведённой там инструкцией и загрузить в Вектор прямо с эмулятора командой монитора отладчика W.

Вариант 2: Преобразовать тот же файл из архива в WAV через формат ROM и загрузить в Вектор по УС-БЛК-ВВОД. По идее, с адреса 100h (со второго блока), это будет сделать не сложно.

dbk
03.07.2018, 11:34
Возможны два варианта: либо там запись не в формате монитора, либо запись не качественная и Вектор её не распознаёт... Что можно сделать:
Вариант 1: Скачать из архива редактор-ассемблер (http://www.sensi.org/scalar/ware/673/), загрузить его в эмулятор в соответствии с приведённой там инструкцией
это у меня получилось. хотел повторить на "железном" Векторе


и загрузить в Вектор прямо с эмулятора командой монитора отладчика W.
Под "Вектор" вы понимаете "железный" Вектор? Если да, то это как? В "железный" Вектор да с эмулятора что-то загрузить?


Вариант 2: Преобразовать тот же файл из архива в WAV через формат ROM и загрузить в Вектор по УС-БЛК-ВВОД. По идее, с адреса 100h (со второго блока), это будет сделать не сложно.
Собственно с помощью утилиты Rom2Wav.exe от Игоря Титаря и происходит конвертация (замечу, что архив содержит два файла с расширением .m01 и перед конвертацией я даю ему расширение .rom чтобы утилита конвертации его увидела через диалоговое меню, хотя можно и через All Types это делать, не суть). Загрузка в Вектор происходит именно со второго блока.

Ладно. Буду пробовать. Спасибо за информацию.

Improver
03.07.2018, 12:00
Под "Вектор" вы понимаете "железный" Вектор? Если да, то это как? В "железный" Вектор да с эмулятора что-то загрузить?Да, именно "железный". В если эмуляторе выход на звуковую карту ПК работает нормально, то можно проводом соединить ПК и Вектор и попробовать грузануть...


Собственно с помощью утилиты Rom2Wav.exe от Игоря Титаря и происходит конвертация (замечу, что архив содержит два файла с расширением .m01 и перед конвертацией я даю ему расширение .rom чтобы утилита конвертации его увидела через диалоговое меню, хотя можно и через All Types это делать, не суть). Загрузка в Вектор происходит именно со второго блока.Да, именно это я и имел в виду. :) Только небольшой ньюанс -- я не знаю формат записи файлов эмулятора "*.m01", но если там вдруг есть какая-либо служебная информация, необходимая эмулятору, как то адреса загрузки, контрольные суммы и т.п., то её надо будет предварительно удалить.

Удачи на этом нелёгком пути! ;)

dbk
03.07.2018, 13:09
Блин, где найти магнитофон!? )))) (мысли в слух) Короче думаю, что проблема в самой конвертации ибо я все делаю так как надо. Наверное процедура EDASM.M01 -> EDASM.WAV с помощью утилиты Rom2Wav.exe проходит как-то не так. Буду искать заведомо рабочий WAV файл, ну или магнитофон чтобы прочитать Ассемблер-редактор на прямую с базовой кассеты.

b2m
03.07.2018, 13:12
Так как его загружать?! ) Вот, что делаю я (на реале):
0. загружаю Монитор-отладчик (тот, что идет в базовом комплекте 2.5)
1. выбираю к примеру 2 (могу выбрать 1)
2. ввожу команду g100 - Монитор-подвисает (курсор пропадает)
3. включаю на загрузку (типа с кассеты) wav-файл с Асссемблер-редактором. Оно заканчивает проигрывать и всё. Курсор не появляется, реакции ноль. Просто на нажатия клавиш Вектор мне "пибикает" и все. По БЛК+СБР, как писал ниже, появляется курсор и все. никаких изменений. Ничего.
Шаги 0 и 1 - вроде правильно.
Шаг 2 - зачем запускать что-то, которое ещё не загружено? Тут нужно ввести команду R - то есть будем считывать.
Шаг 3 (при условии, что в шаге 2 ввели команду R) - включаем на загрузку wav-файл с Асссемблер-редактором.
И вот когда он загрузится, можно уже запускать командой g100

dbk
03.07.2018, 13:25
Шаги 0 и 1 - вроде правильно.
Шаг 2 - зачем запускать что-то, которое ещё не загружено? Тут нужно ввести команду R - то есть будем считывать.
Шаг 3 (при условии, что в шаге 2 ввели команду R) - включаем на загрузку wav-файл с Асссемблер-редактором.
И вот когда он загрузится, можно уже запускать командой g100
Спасибо, уже сообразил. Но все равно что-то после R не идет загрузка, как написал выше, видно с wav файлом (криво конвертируется) что-то не то. Сейчас в поиске этого самого рабочего wav файла

ivagor
03.07.2018, 13:50
Если очень хочется попрограммировать в EDASMе на голом реале, то есть очень простой вариант - можно взять сборку монитор+edasm (http://sensi.org/scalar/ware/727/), которую сделал SES. Там экран 8 Кб, не 16, т.е. больше свободного места, буквы в 2 раза шире.

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

Насчет загрузки EDASMа в монитор (если не устроит вариант SESa). Если преобразовывать .m01 в wav с использованием rom2wav, то надо грузить монитором с поддержкой загрузки .rom, например Супер-Монстр 3.5 (http://sensi.org/scalar/ware/690/), загрузка .rom - директива B.

Improver
03.07.2018, 13:55
Спасибо, уже сообразил. Но все равно что-то после R не идет загрузка, как написал выше, видно с wav файлом (криво конвертируется) что-то не то. Сейчас в поиске этого самого рабочего wav файлаЕсли грузить по "варианту 2 (http://zx-pk.ru/threads/29144-programmirovanie-na-assemblere.html?p=969751&viewfull=1#post969751)", т.е. через конвертацию редактора-ассемблера в ROM, то порядок такой:

1. Грузим монитор-отладчик, запускаем (БЛК-СБРОС), выбираем "2", как рекомендовалось...
2. Нажимаем УС-БЛК-ВВОД, появляется таблица загрузки поверх текста монитора-отладчика.
3. Грузим сконвертированный в формат ROM ассемблер-редактор, нажимаем БЛК-СБРОС.
4. Запускаем G100... Можно командой L100 предварительно убедиться, что всё загружено верно и с адреса 100h идут не нули.

Ну или сделать так, как посоветовал ivagor. :)

dbk
03.07.2018, 16:21
Если грузить по "варианту 2 (http://zx-pk.ru/threads/29144-programmirovanie-na-assemblere.html?p=969751&viewfull=1#post969751)", т.е. через конвертацию редактора-ассемблера в ROM, то порядок такой:

1. Грузим монитор-отладчик, запускаем (БЛК-СБРОС), выбираем "2", как рекомендовалось...
2. Нажимаем УС-БЛК-ВВОД, появляется таблица загрузки поверх текста монитора-отладчика.
3. Грузим сконвертированный в формат ROM ассемблер-редактор, нажимаем БЛК-СБРОС.
4. Запускаем G100... Можно командой L100 предварительно убедиться, что всё загружено верно и с адреса 100h идут не нули.

Ну или сделать так, как посоветовал ivagor. :)

Все получилось как по вашему рецепту, так и по рецепту ivagor-а, но есть одно но: Я ВСЕ ПЕРЕЧИТАЛ (руководства по Монитору-отладчику и Ассемблер-редактору)! Но не нашел информации, где вы взяли информацию про второй пункт?! А именно про возможность одновременного нажатия УС+БЛК+ВВОД ? Или слепой, как вариант не умею читать, либо у вас какие-то другие мануалы шли в комплекте!

svofski
03.07.2018, 16:28
dbk, даешь по свежим впечатлениям туториал "Как написать на железном Векторе Hello, World! без эмуляторов". Хорошо бы отдельной темой, потому что это не совсем то, что большинство понимает под программированием на ассемблере сейчас.

Improver
03.07.2018, 16:47
Все получилось как по вашему рецепту, так и по рецепту ivagor-а, но есть одно но: Я ВСЕ ПЕРЕЧИТАЛ (руководства по Монитору-отладчику и Ассемблер-редактору)! Но не нашел информации, где вы взяли информацию про второй пункт?! А именно про возможность одновременного нажатия УС+БЛК+ВВОД ? Или слепой, как вариант не умею читать, либо у вас какие-то другие мануалы шли в комплекте!Это считается "недокументированной возможностью" прошивки начального загрузчика, в описании ассемблера и монитора этого не будет, но можно найти где-то в руководстве пользователя и, безусловно, в печатных изданиях.

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

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


dbk, даешь по свежим впечатлениям туториал "Как написать на железном Векторе Hello, World! без эмуляторов". Хорошо бы отдельной темой, потому что это не совсем то, что большинство понимает под программированием на ассемблере сейчас.
+, это было бы полезно всем. :)

ivagor
03.07.2018, 16:58
Вероятно первое задокументированное упоминание фичи с УС в начальном загрузчике (512 байт) было в сборнике Байт (http://sensi.org/scalar/ware/553/) №2 (11я страница pdf)

dbk
03.07.2018, 17:04
dbk, даешь по свежим впечатлениям туториал "Как написать на железном Векторе Hello, World! без эмуляторов". Хорошо бы отдельной темой, потому что это не совсем то, что большинство понимает под программированием на ассемблере сейчас.
Да какой там туториал?! Задача еще не закрыта. В постановке (себе) задачи изначально было использовать для программирование на ассемблере под Вектор только базовое ПО (Монитор-отладчик, Ассемблер-редактор), магнитофон (его современная замена для нашего времени), т.е. то, что авторы-разработчики Вектора предлагали изначально для пользователя, который захотел написать что-то своё на Ассемблере (про Бейсик сейчас не говорю). Подразумевалось, что вся нужная информация идет в комплекте с машинкой! Ведь так?

В треде подсказали, два способа решения данной задачи, а именно как правильно "готовить" инструментарий. Первый способ (взять сборку монитор+edasm, которую сделал SES) не подойдет по причине того, что ПО не базовое и кто такой SES в начале 90-х, я пацаном вообще не знал, да и возможности записать себе эту сборку у меня точно не было! Вообще все связанное с ЭВМ для меня было чистой магией, которую очень хотелось освоить, ибо Бэйсик уже как-то надоел. Второй способ подошел (использовалось базовое ПО), но про "финт" с нажатием УС-ВВОД-БЛК я узнал только вот сегодня ) Ну нет в моем комплектном мануале такого, либо я не умел и не умею читать внимательно по сию пору. Откуда мне тогда еще школьнику было знать, что нужно нажимать УС-ВВОД-БЛК, для того чтобы появилась сетка по верх загруженного монитора и я смог загрузить ассемблер-редактор. Когда найду информацию о том, что и как нужно делать, так можно будет и про мануал подумать )

А так как по мне так, ассемблер и а Африке ассемблер. Специалисты бы, которые прошли все это и в данный момент могущие описать последовательность действий программиста-неофита, который хочет написать что-то для Вектора на том же ассемблере с помощью современного ПО, накропали бы пару строк ка они это делают (делали бы) сейчас. Про сам Ассемблер отдельная история, никто не просит "научите ассемблеру"! Ибо уже сейчас понимаю идиотизм вопроса, который когда-то задавал человеку у которого покупал ПО для Вектора. По-моему кооператив Вектор-Сервис, а именно Грекович Виталий Викторович. Кстати, последнее он мне уже так записывал, бесплатно. Типа давно никто по Вектору не обращался )))

KTSerg
03.07.2018, 17:30
Загрузка Ассемблера с использованием УС-ВВОД-БЛК это обходной способ загрузить Ассемблер, если не получилось загрузить его штатными средствами Монитора. И в мануалах об этом не напишут.
Я кстати некоторое время вообще программировал в кодах процессора, используя только монитор-отладчик. Когда мой знакомый об этом узнал, долго угорал, и сказал, что люди используют для программирования другие, более удобные способы... Но у меня к тому времени был только Вектор с магнитофоном (возможно ещё Квазидиск), а у него - полный фарш, с дисководом, принтером...

dbk
03.07.2018, 19:05
del

ivagor
03.07.2018, 19:35
EDASM в формате монитора, загружается (в любую версию монитора-отладчика) командой R

svofski
03.07.2018, 19:56
ivagor, я твой вав присовокупил к архиву в картотеке.
Я стараюсь по ходу дела крупицы информации осаждать в виде пояснений и перекрестных ссылок в картотеке:
http://sensi.org/scalar/ware/673/
Если я в чем-то ошибаюсь, поправляйте меня.

ivagor
03.07.2018, 20:01
hello, world для edasm (в формате edasm, естественно).
После загрузки монитора-отладчика и редактора-ассемблера (любым из описанных способов)
1. Стартуем редактор
G100
2. Загружаем файл
Клавиши АР2 + I
3. Переходим в ассемблер
Клавиша СТР
4. Транслируем
Клавиша 1
Должно показать 0 ошибок
5. Выходим в монитор
Клавиши УС + E
6. Запускаем программу
C1800

KTSerg
03.07.2018, 20:02
Честно скажу, очень давно не пользовался монитором-отладчиком, и не помню, умеет ли он вообще "штатно" загружать файлы в ROM-формате...
Соответственно, ассемблер записанный в wav-файл в ROM-формате не может быть штатно загружен в монитор-отладчик (возможно). Как минимум, ассемблер должен быть записан в wav-файл в формате монитора-отладчика.
Далее. в описание команды R смотрели ?
Из инструкции синтаксис "R" - загружает файл с именем, заданным командой "I".
Для загрузки "чего попало" (с любым именем) другой синтаксис.
ну и т.д.

Посмотрел "руководство", из монитора-отладчика можно выгрузить файл в формате "загрузчика" командой "О", а вот загрузки в этом формате не нашел.

svofski
03.07.2018, 20:07
dbk, кстати, для файлов с каноническими расширениями и без извратов в Картотеке можно нажимать прямо на треугольничек "PLAY" справа от имени файла. Это должно работать в зазипованных архивах тоже (сначала раскрыть [...]), но не для сложных случаев типа .m01.

dbk
03.07.2018, 20:30
EDASM в формате монитора, загружается (в любую версию монитора-отладчика) командой R
Спасибо. Все заработало как надо.
https://i.imgur.com/ErNQ4XA.jpg

А теперь риторический вопрос: в картотеке лежит файл в другом (не подходящем для реала, а точнее конвертора) формате?! хотя, замечу, что загружается

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


Честно скажу, очень давно не пользовался монитором-отладчиком, и не помню, умеет ли он вообще "штатно" загружать файлы в ROM-формате...
Соответственно, ассемблер записанный в wav-файл в ROM-формате не может быть штатно загружен в монитор-отладчик (возможно). Как минимум, ассемблер должен быть записан в wav-файл в формате монитора-отладчика.
Далее. в описание команды R смотрели ?
Из инструкции синтаксис "R" - загружает файл с именем, заданным командой "I".
Для загрузки "чего попало" (с любым именем) другой синтаксис.

Конечно смотрел, синтаксис RW
Спасибо, за помощь!

ivagor
03.07.2018, 20:37
А теперь риторический вопрос: в картотеке лежит файл в другом (не подходящем для реала, а точнее конвертора) формате?
Файл с расширением .m01 это просто фрагмент памяти с адреса (цифры 01) 100h, который на ленте должен хранится в формате (буква m) монитора.
Из распространенных векторовских форматов (ROM, MON, BAS, ASM, DOS) сейчас есть удобный конвертер только для ROM (rom2wav Ramirosa).
И теперь svofski добавил в картотеку и wav с этим файлом.

svofski
03.07.2018, 20:51
И теперь svofski добавил в картотеку и wav с этим файлом.
Малодушно, потому что приделывать генератор вавов в формате монитора мне лень.

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


Из распространенных векторовских форматов (ROM, MON, BAS, ASM, DOS) сейчас есть удобный конвертер только для ROM (rom2wav Ramirosa).
Вообще говоря, есть еще bin2wav (https://github.com/svofski/bin2wav), но его .exe-шник (https://github.com/svofski/bin2wav/releases) вызывает проблемы у людей с мегалофобией.

dbk
03.07.2018, 20:52
Файл с расширением .m01 это просто фрагмент памяти с адреса (цифры 01) 100h, который на ленте должен хранится в формате (буква m) монитора.
Из распространенных векторовских форматов (ROM, MON, BAS, ASM, DOS) сейчас есть удобный конвертер только для ROM (rom2wav Ramirosa).
И теперь svofski добавил в картотеку и wav с этим файлом.
Hello world у меня отработал отлично! ))))))))))))

Ну, что я могу сказать?! Квест с историей более 20-летней давности с вашей помощью пройден! УРААА!!!!!!!
Теперь можно брать в руки любой мануал по ассемблеру для 8080 (тех же Текотева с Лебедевым) и вперед грызть гранит науки в свободное время!

Мне бы с вами познакомиться в начале 90-х ))))) Глядишь бы сейчас был каким программистом-хардварщиком, а не пойми кто и не пойми чем занимался ))))

svofski, приложите туда же в карточку этот архивчик helloEDASM.zip с примером как его использовать. Пригодится на будущее.

ivagor
03.07.2018, 20:56
Вообще говоря, есть еще bin2wav, но его .exe-шник вызывает проблемы у людей с мегалофобией.
Пардон, исправляюсь - есть как минимум 2 конвертера ROM->WAV: rom2wav Ramirosa и bin2wav svofski в различных исполнениях, в т.ч. стэндэлонном.

svofski
03.07.2018, 21:08
Добавил к http://sensi.org/scalar/ware/673/ файлы и туториал ivagor-а, но сам пока не пробовал. Если кто-то еще повторит, желательно смотря именно на страничку в картотеке, отпишитесь, пожалуйста. Если получилось, то вот, а если нет, то исправлю ошибки.

ivagor
04.07.2018, 06:29
Оффтоп про конвертеры rom2wav. Вспомнил, что еще есть мультиконвертер DDp (http://zx-pk.ru/threads/9532-vektor-06ts-sredstva-razrabotki.html?p=943474&viewfull=1#post943474), который представляет собой переписанный на C конвертер svofski. Т.е. конвертеров rom->wav как минимум 3 и все с исходниками.

svofski
04.07.2018, 12:10
Картотека просто пухнет от хороших (http://sensi.org/scalar/ware/556/) и разных (http://sensi.org/scalar/ware/900/) конвертеров (http://sensi.org/scalar/ware/901/)!

ivagor
04.07.2018, 12:18
Может к rom2wav Ramirosa как-то добавить варианты с устраненной избыточностью (http://zx-pk.ru/threads/10002-rom-format-avtozapusk-zashchita-sekrety.html?p=854298&viewfull=1#post854298)?

svofski
04.07.2018, 13:02
ivagor, вот бы твои суперзагружаторы как-то увековечить, типа того, чем ты делал сверхбыстрый wav для Рива Рейда.

Что до Rom2WavFast — с удовольствием. Может быть ты приложишь к архиву сорец тоже?

ivagor
04.07.2018, 13:18
Суперзагружаторам, на мой взгляд, не хватает загрузчика с автостартом, для того, чтобы ими было удобно пользоваться. Эта мысль у меня давно, но я почему-то так ничего и не сделал в этом направлении.
Исходники Rom2WavFast надо будет посмотреть (скорее всего завтра или, если не успею, на следующей неделе).

dbk
04.07.2018, 13:22
Друзья, хочу учиться программировать под Вектор06Ц. В этой теме буду задавать возможно глупые вопросы, но уж заранее прошу извинить. Буду рад любой помощи. Программировать буду в Прекрасном ассемблере (http://sensi.org/~svo/i8080/).


Может будет полезно! Пакет для i8080: WinAsm Studio + fasm g (http://zx-pk.ru/threads/26805-paket-dlya-i8080-winasm-studio-fasm-g.html)

svofski
04.07.2018, 13:32
Автостарт загрузчика это была бы ценная опция. Но и без нее миллионы вектористов-реалистов оценили бы твой быстрый загрузчик. Я вот подготовленный тобой Рива Рейд очень ценю.

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

dbk, кстати о Прекрасном (https://svofski.github.io/pretty-8080-assembler/). Из него код можно запустить тут же в эмуляторе, но для Труъ там есть кнопка "Play", которая прямо тут же начинает проигрывать ром для загрузки. А клик на рыбу сверху открывает выбор примера. Для Вектора там Hello world, Мандрил и Быстрая линия.

(Это если разработка непосредственно на железном Векторе начинает утомлять).

ivagor
04.07.2018, 13:54
svofski, спасибо за поддержку, надеюсь когда-нибудь вернуться к быстрой загрузке. Последние версии здесь (http://zx-pk.ru/threads/10002-rom-format-avtozapusk-zashchita-sekrety.html?p=863641&viewfull=1#post863641). На всякий случай стоит сказать, что для реала 11700 проверенный максимум, 13500 для экзотики, типа de1.

Выскажусь насчет разработки на реале с использованием штатного монитора-отладчика с edasmом. Я пользовался такой комбинацией некоторое время и даже сбацал малюсенькую (меньше 1 Кб) игрушку в кодах. Мое мнение - это очень неудобно, а для больших или даже средних проектов просто не подходит.

dbk
04.07.2018, 14:23
Выскажусь насчет разработки на реале с использованием штатного монитора-отладчика с edasmом. Я пользовался такой комбинацией некоторое время и даже сбацал малюсенькую (меньше 1 Кб) игрушку в кодах. Мое мнение - это очень неудобно, а для больших или даже средних проектов просто не подходит.
А каким инструментарием вы пользуетесь?! Если не затруднит, то в двух словах распишите технологию.

BYTEMAN
04.07.2018, 14:37
А с BAS-файлами пока что единственный вариант это b2m-эмулятор и загруженный в него интерпретатор?

ivagor
04.07.2018, 14:49
Ассемблер tasm 3.2 (https://www.ticalc.org/archives/files/fileinfo/250/25051.html)
Редактор Programmers's Notepad (http://www.pnotepad.org/)
Эмулятор с отладчиком Emu (http://bashkiria-2m.narod.ru/index/files/0-11) b2ma. Иногда использую Virtual Vector (http://sensi.org/scalar/ware/552/) Ramirosa, но его отладчик для меня не такой удобный. У каждого эмулятора есть свои плюсы и минусы.

По поводу ассемблера могут возникнуть вопросы, почему именно tasm? Да, он далеко не самый продвинутый. CP/Mовский M80 круче, но мне им неудобно пользоваться ни в эмуляторе, ни с использованием всяких костылей для винды, которые в современных виндах уже и не работают.
Прекрасный асм. На момент "векторовского возрождения" 1999-2000 его не было. И я начал пользоваться tasmом. И накопил довольно много tasmовых исходников. И в прекрасный асм без напильника далеко не все они влезут, т.к. есть уникальные фичи. Плюс я люблю всякие маргинальные процессоры, для которых составил таблички tasmа, в прекрасном они совсем не поддерживаются. Если бы у меня не было багажа исходников и не нужны были бы экзотичские процы, то прекрасный асм думаю подошел бы.
А еще было бы здорово, если бы кто-нибудь сделал современный кросс-вариант M80 для win(/linux/MacOS).

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


А с BAS-файлами пока что единственный вариант это b2m-эмулятор и загруженный в него интерпретатор?
Или эмулятор, дос и savebas.
Tim0xA и я делали утилитки bas2cas, т.е. добавление служебной информации, но почему-то не довели до bas2wav.

svofski
04.07.2018, 14:59
С Бейсиком вообще поле непаханое. По идее где-то есть тыщи полезных и интересных бейсковских программ для Вектора, но в Картотеке их нет. Я даже не знаю, откуда начинать.

Improver
04.07.2018, 14:59
Tim0xA и я делали утилитки bas2cas, т.е. добавление служебной информации, но почему-то не довели до bas2wav.А можно по-подробнее, что это за служебная информация добавлялась? Про формат записи bas я встречал только упоминания о том, что "информация в розыске"...

ivagor
04.07.2018, 15:25
Информация о формате магнитофонных файлов бейсика и вторая версия утилиты Tim0xи здесь (http://zx-pk.ru/threads/8634-vektor-06ts-emulyatsiya.html?p=233853&viewfull=1#post233853). Свою утилитку я выкладывал, но потом удалил.

b2m
04.07.2018, 16:24
По поводу ассемблера могут возникнуть вопросы, почему именно tasm? Да, он далеко не самый продвинутый.
К тому-же под ДОС. Можно, конечно, пользоваться DosBox-ом, но я считаю - это не удобно. Вот если бы кто-нибудь нарыл исходники этого ассемблера (они вроде распространялись автором за оплату), и портировал под винду, было бы круто.


CP/Mовский M80 круче, но мне им неудобно пользоваться ни в эмуляторе, ни с использованием всяких костылей для винды, которые в современных виндах уже и не работают.
...
А еще было бы здорово, если бы кто-нибудь сделал современный кросс-вариант M80 для win(/linux/MacOS).
У меня где-то валяется консольный вариант моего процессора ВМ80 с реализованными функциями CP/M, в нём достаточно удобно запускать CP/Mовские утилиты (M80,L80,C80). После окончания работы утилиты, эмуль тоже завершает работу, так что можно в винде обычный командный файл использовать.

ivagor
04.07.2018, 16:56
К тому-же под ДОС.
Ты путаешь версии, 3.01 был под дос, а 3.2, на который я привел ссылку - под win32. Версия 3.2 спокойно работает в win7 и win10, а 3.01 да, нужно запускать или в xp или в DosBox. У 3.2 еще есть плюсы, например намного большая допустимая длина строки.


У меня где-то валяется консольный вариант моего процессора ВМ80 с реализованными функциями CP/M, в нём достаточно удобно запускать CP/Mовские утилиты (M80,L80,C80). После окончания работы утилиты, эмуль тоже завершает работу, так что можно в винде обычный командный файл использовать.
Поделись, если не жалко. По наводке PPC я пробовал нечто подобное, но мне не особо понравилось.

b2m
04.07.2018, 17:32
Ты путаешь версии
По ссылке ничего про вынь не сказано, скачивать я не стал.


я привел ссылку - под win32
Ну раз так - то отлично.


Поделись, если не жалко.
До дома доберусь - поделюсь.

ivagor
04.07.2018, 17:50
Товарищи по ссылке процитировали руководство (TASMMAN.HTM), которое автор, получается, не поправил. А в RELNOTES.TXT для версии 09/01/01 version 3.2 есть такая строка: Built as a 32 bit version using MS C++ 6.0. И в tasm.exe есть знакомая всем надпись "This program cannot be run in DOS mode".

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

Также интересно насчет LINUX по ссылке и в руководсте. В RELNOTES.TXT для версии 11/30/97 Version 3.1 есть строка: LINUX support. Но в архиве бинарника для linux я не вижу, может он был только в 3.1

svofski
04.07.2018, 18:17
Также интересно насчет LINUX по ссылке и в руководсте. В RELNOTES.TXT для версии 11/30/97 Version 3.1 есть строка: LINUX support. Но в архиве бинарника для linux я не вижу, может он был только в 3.1
Я думаю, автор имеет ввиду, что исходники, которые ты получишь, если зарегаешься, можно будет собрать под линуксом.

KTSerg
04.07.2018, 18:29
Глянул в содержимое архива tasm3.2
Я не силён в "заморском" языке... в readme.txt чой-то сказано про 30 дней и $40.00 ...

...
If you find TASM useful, why not register? Unregistered use of TASM beyond a 30 day evaluation period is a violation of the license.
For the $40.00 registration fee you get:
...

ivagor
04.07.2018, 18:33
Автор надеялся на сознательность пользователей. Т.е. честные люди должны использовать tasm только 30 дней, а потом должны сказать себе "хватит!". И честные люди, заплатившие автору, получили исходники.

b2m
04.07.2018, 21:29
Поделись
Вот: emuc.zip (http://bashkiria-2m.narod.ru/files/emuc.zip)

Пару слов о содержимом.

Запускать из винды:
emuc.exe - собственно эмулятор, параметры - это то, что вводим обычно в CP/M
asm.cmd - командный файл для сборки микродосовским ассемблером, использовать: asm testfile (без расширения, оно всегда .asm)
asm80.cmd - командный файл для сборки мелкософтовым ассемблером, использовать: asm80 testfile (без расширения, оно всегда .mac)
c.cmd - командный файл для сишной компиляции, использовать: c testfile (без расширения, оно всегда .c)

Запускать эмулятором:
mas.com, link.com - микродосовский ассемблер
m80.com, l80.com - мелкософтовый ассемблер
c80.com,*.h,*.rel - компилятор С
lib.com - библиотекарь (для компилятора С)
pw.com,xd.com,stat.com - всегда нужные утилиты :)

Если замучила ностальгия по командной строке CP/M, можно воспользоваться:
ccp.com - командный процессор CP/M, перехватывает выход из программ, так что выход только через exit.com
exit.asm,exit.com - чтобы завершить эмулятор

В принципе, при запущеном ccp.com должен работать и submit.com, но я не пробовал, проще пользоваться виндовозными командными файлами.

ivagor
05.07.2018, 18:38
Попробовал компильнуть свою модификацию эксисайзера - результат совпал с nice22 (на который навел меня PPC), компильнулось мгновенно. Жаль ты раньше (лет на 18) не выложил эту штуку.

x-code
13.07.2018, 12:26
в tasm.exe есть знакомая всем надпись "This program cannot be run in DOS mode".

Это практически в любом win32 исполняемом файле есть, это заглушка для MS-DOS загрузчика, если кто попытается этот исполняемый файл запустить из-под DOS.
Сейчас уже, конечно, архаизм, но во времена Windows 95/98 было весьма актуально.

ivagor
14.07.2018, 06:00
Забыл упомянуть важный аргумент в пользу tasmа. Формируемый идой ассемблерный файл соответствует тасму.

x-code
17.07.2018, 22:18
про "финт" с нажатием УС-ВВОД-БЛК я узнал только вот сегодня ) Ну нет в моем комплектном мануале такого, либо я не умел и не умею читать внимательно по сию пору. Откуда мне тогда еще школьнику было знать, что нужно нажимать УС-ВВОД-БЛК, для того чтобы появилась сетка по верх загруженного монитора и я смог загрузить ассемблер-редактор.

Этого 100% не было в штатных мануалах, как и массы других важных вещей. Мне, например, про УС-ВВОД-БЛК рассказал дядька, который торговал играми для Вектора (благодаря ему я хотя бы начал пытаться дизассемблировать игры и понять, как что устроено)

x-code
17.07.2018, 22:26
Выскажусь насчет разработки на реале с использованием штатного монитора-отладчика с edasmом. Я пользовался такой комбинацией некоторое время и даже сбацал малюсенькую (меньше 1 Кб) игрушку в кодах. Мое мнение - это очень неудобно, а для больших или даже средних проектов просто не подходит.

Поддержу, полностью аналогичный опыт. В кассетной версии "Вектора" более оптимальным вариантом будет TEXTAS, но, опять же - память не резиновая. С помощью каких инструментов делали игры размером в 32 и тем более 40 кБ - для меня до сих пор загадка...

KTSerg
18.07.2018, 06:24
... В кассетной версии "Вектора" более оптимальным вариантом будет TEXTAS, но, опять же - память не резиновая. С помощью каких инструментов делали игры размером в 32 и тем более 40 кБ - для меня до сих пор загадка...
Подозреваю, что у тех, кто делал игры и программы размером 32КБ и более, были Квазидиск и/или Дисковод, а может и ещё какие примочки о которых мы даже не догадываемся.
Поскольку ассемблерный текст раз в 10-15 больше (по размеру файла) полученного из него кода (а с хорошими комментами разница ещё больше), то можно прикинуть, программу какого размера можно написать используя только память самого Вектора и магнитофон (без Квазика и Флопика).
А ещё более вероятно, что даже в начале 90-ых, хороший софт для Вектора ваялся и компилировался на РС... :v2_dizzy_coder:

x-code
18.07.2018, 12:00
Поскольку ассемблерный текст раз в 10-15 больше (по размеру файла) полученного из него кода (а с хорошими комментами разница ещё больше), то можно прикинуть, программу какого размера можно написать используя только память самого Вектора и магнитофон (без Квазика и Флопика)

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

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


А ещё более вероятно, что даже в начале 90-ых, хороший софт для Вектора ваялся и компилировался на РС...

А вот это крайне интересная гипотеза! Допустим, кросс-ассемблеры существовали, более того - в MS-DOS закладывалась совместимость с CP/M, так что скомпилировать ассемблерный код под 8080 не должно было быть проблемой. Но как потом перенести результат на Вектор? На PC можно было читать/записывать дискеты в формате МикроДОС? Умельцы ваяли какие-то специальные платы сопряжения, информация о которых не дошла до наших дней? Имитировали на PC вывод на магнитофон (но вроде бы у PC тех времён не было аналогового аудиовыхода как такового, разве что в параллель к биперу цепляться)?

На всякий случай, уточню, что речь про самое-самое начало 90х.

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


Специалисты бы, которые прошли все это и в данный момент могущие описать последовательность действий программиста-неофита, который хочет написать что-то для Вектора на том же ассемблере с помощью современного ПО, накропали бы пару строк ка они это делают (делали бы) сейчас.

Фокус с "Вектором" вот в чём. Чтобы получить результат более интересный, чем ввод/вывод в текстовом режиме в мониторе-отладчике (для этого уровня штатных мануалов вполне хватает, проверено лично ещё школьником), нужно уметь напрямую работать с аппаратной частью машины. Именно этой информации в штатных мануалах нет от слова "совсем", и, наверное, не предполагалось, что программист-неофит будет реверсить чужой ассемблерный код и/или электрическую схему ЭВМ, чтобы понять, как что устроено с точки зрения программного доступа.

Лично я на первых порах довольствовался дизассемблированием и тупым копированием кусков кода, т.к. никаких других источников информации не было. А целостная картина сложилась уже после прочтения серии статей в выпусках бюллетеня Вектор-User, где объяснялись назначение портов ввода / вывода, работа с прерыванием обратного хода луча, организация видеопамяти и т.п.

Чисто по условиям задачи, "Секреты Вектора" вполне себе распространялись кооперативами в начале 90х, в картотеке они есть (да и сканы Вектор-User тоже, помню, где-то находил). Так что следующим шагом посоветовал бы изучать именно эти материалы, т.к. без них даже с полным знанием самого ассемблера никуда особо не продвинешься.

KTSerg
18.07.2018, 15:13
А вот это крайне интересная гипотеза! Допустим, кросс-ассемблеры существовали, более того - в MS-DOS закладывалась совместимость с CP/M, так что скомпилировать ассемблерный код под 8080 не должно было быть проблемой. Но как потом перенести результат на Вектор?...
Магнитофонный вход никто не отменял, да и поддержка ЛВС появилась в штатном загрузчике вместе с Квазидиском, Дисководом и внешним ПЗУ.

ivagor
18.07.2018, 16:01
Есть программа ms.com 92 года для обмена с ms dos. В ней написано, что исходная корветовская версия была 91 года.

x-code
19.07.2018, 16:40
Магнитофонный вход никто не отменял

Верно, но как туда вывести звук с PC образца начала 90х? Звуковые карты тогда были экзотикой, а в штатной комплектации у PC не было аудиовыхода от слова совсем :)


да и поддержка ЛВС появилась в штатном загрузчике вместе с Квазидиском, Дисководом и внешним ПЗУ.

А вот тут интереснее. Это был какой-то на тот момент распространённый стандарт ЛВС? Тут память может меня подводить, но вспоминается, что даже для PC локальные сети в самом начале 90х были не таким частым явлением, более-менее распространёнными они стали году к 95му-96му.

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


Есть программа ms.com 92 года для обмена с ms dos. В ней написано, что исходная корветовская версия была 91 года.

Вот это ИМХО ближе к правде. Погуглил - и под MS-DOS существовали программы, способные читать/писать дискеты в формате CP/M.
А ещё вычитал вот что на другом форуме (http://www.nedopc.org/forum/viewtopic.php?p=92883&sid=dce9660add43fb233b9f4556b53d1e11#p92883):


Вобще-то "Орион" соединили по СОМ-порту с IBM PC ещё сами авторы "Ориона", как я помню...
Причем RS-232 реализовали безо всяких 580ВВ51, а на рабоче-крестьянском 580ВВ55 :wink:
Я ещё с удовольствием для "Специалиста" передрал их программную реализацию RS-232.

Ну а если смогли для "Специалиста", то, теоретически, ничего не мешало и для "Вектора"...

siemensC35
19.07.2018, 16:53
Верно, но как туда вывести звук с PC образца начала 90х? Звуковые карты тогда были экзотикой, а в штатной комплектации у PC не было аудиовыхода от слова совсем
спикер же был

svofski
19.07.2018, 17:03
Верно, но как туда вывести звук с PC образца начала 90х? Звуковые карты тогда были экзотикой, а в штатной комплектации у PC не было аудиовыхода от слова совсем
Повесить проводок с резистором на LPT порт многие были в состоянии даже в начале 90-х. (Многие заходили так далеко, что вешали 16 резисторов и получали "Ковокс" для игры в СкримТрекер и Стар Контрол 2). Кроме того, для такого дела достаточно было бы прицепиться и напрямую к писи-спикеру. Делали ли что-то из этого на практике я не знаю, но технических проблем тут нет.

ivagor
19.07.2018, 17:36
овесить проводок с резистором на LPT порт многие были в состоянии даже в начале 90-х.
Можно вспомнить "0-модем" Tim0xи. Он его сделал позже, но не было никаких технических препятствий сделать это хоть в конце 80х.

x-code
19.07.2018, 18:47
Повесить проводок с резистором на LPT порт многие были в состоянии даже в начале 90-х. (Многие заходили так далеко, что вешали 16 резисторов и получали "Ковокс" для игры в СкримТрекер и Стар Контрол 2).

Я такое чудо из 16 резисторов как раз к "Вектору" подключал к порту ПУ :) Только практической пользы особой не ощутил т.к. не было где сэмплы брать :)

Если позволите небольшой оффтоп - а в те годы народ не боялся цеплять что-то самопальное к PC? У меня как-то в памяти отложилось чуть ли не благоговейное отношение к IBM PC-совместимой технике в те годы, т.к. она была очень дорогой, и запчасти на каждом углу не продавали. Может, в каких-то НИИ, связанных с электроникой и вычислительной техникой, и по-другому было...

Так или иначе, по тем временам даже перенос через обычную дискету ИМХО уже ощущался огромным прогрессом по сравнению с программированием под "Вектор" на самом "Векторе".

KTSerg
19.07.2018, 18:53
Вопрос первенства яйца или курицы, вполне переносим на Вектор.
Как можно написать программу на Векторе, если на нём ещё нет софта?
Если первоначальный софт для Вектора писался на другом компе, то почему на том компе не могли быть написаны игры и другой софт...

Improver
20.07.2018, 10:49
Как можно написать программу на Векторе, если на нём ещё нет софта?Кстати, интересный вопрос, созвучный с тем, какие компы были в распоряжении Темиразова и Соколова при проектировании Вектора? На чём всё это делалось, на ЕС, СМ, или на IBM PC? :)

KTSerg
20.07.2018, 11:01
Счетмаш в то время выпускал ЕС1840, 1841, позднее 7978. Думаю у разрабов был доступ и к ЕС-кам и к IBM-кам...
Я в средине 90-ых (для дипломной работы) вроде даже печатную плату разводил на ЕС-7978 (на работе был такой).

x-code
20.07.2018, 18:06
Если первоначальный софт для Вектора писался на другом компе, то почему на том компе не могли быть написаны игры и другой софт...

Вопрос очень логичный! Но вот ответ, думаю, будет неоднозначным. Например, создатели Вектора, Темиразов и Соколов, работали на "Счетмаше" и у них, скорее всего, был доступ к профессиональной вычислительной технике. Поэтому если говорить о ПО в базовой поставке, то, вероятно, да - оно писалось с помощью кросс-компиляции.

Но я не уверен, что любители (тот же Лебедев) - а ведь очень много программ под "Вектор" было написано именно ими - в массе своей имели доступ к профессиональным ЭВМ. Помню, пользователь этого форума maxkit, который портировал на "Вектор" Exolon, писал, что обходился "Вектором" с квазидиском.

KTSerg
20.07.2018, 20:00
x-code, я и не говорил, что ничего хорошего не делалось на самом Векторе. Я лишь считаю, что при наличии возможности, "кросс-компиляция" - удобный инструмент, игнорировать который не имеет смысла. Можно конечно "пофанатеть" и сделать что-то на АСМ-е на самом Векторе, но лично мне удобнее писать на РС, а в Вектор загонять результат компиляции, для тестирования.
Да, было время, когда кроме Вектора с магнитофоном ничего в наличии не было, и было круто сидеть сутками кропать код, сохранять на кассете результат (иногда два - три раза) и дрожать, что кассету зажуёт, и всё начинать заново...
Сейчас я скорее выберу возможности РС что-бы написать программу для Вектора. Хотя-бы по причине привычки к раскладке клавы РС. Да, от клавы Вектора я отвык, и долго ищу нужную букву...
В начале "нулевых" для сохранения софта Вектора на РС, соединял их шнурком. И писал проги для Вектора и РС, для перекачки содержимого дискет. На РС писал на Си, на Векторе на АСМ-е, одновременно. Помню "мозги кипели" от необходимости одновременно работать на клавиатурах с разными раскладками.

x-code
20.07.2018, 20:24
Сейчас я скорее выберу возможности РС что-бы написать программу для Вектора

Про сейчас и речи нет! Разумеется, я и сам свои эксперименты с вертикальным скроллом пятилетней давности писал на PC и загонял для компиляции в эмуляторе Вектора на образ дискеты через плагин в FAR. А знал бы тогда про tasm - и так бы не мучился :)

Меня съедало любопытство, как программировали тогда, в конце 80х-начале 90х, но, наверное, достоверно мы этого уже не узнаем, а все правдоподобные гипотезы в этой теме уже обсудили :)

KTSerg
20.07.2018, 20:38
Вот и пришли к мнению, что выбор скорее всего в пользу более привычного инструмента.
А как оно было на самом деле на границе 80-90-ых мы действительно скорее всего не узнаем.
Разрабы могли использовать имеющуюся в наличии платформу в лице ЕС или IBM. Либо использовать Вектор с новопортированным софтом и создаваемым для него железом, одновременно тестируя всё это "в боевых условиях".

lafromm31
28.08.2018, 00:15
Подскажите, пожалуйста, правильно я понимаю, что функции которые доступны в Мониторе-отладчике, через CALL 5 - не работают - если сохранить программу в формате загрузчика, через команду "O"?
Второй вопрос - У кого-нить получалось пристыковывать программы в мониторе к пакету "Драйверы устройств"? программа (инициализация), которая дана в руководстве (в приложении) - она просто не оттранслируется в стандартном EDASM, там синтаксис другой. Может есть какие-нибудь тонкости, не описанные в документации.

KTSerg
28.08.2018, 08:19
lafromm31, Если программа в дальнейшем будет работать в среде МикроДоса, то функции должны работать. Если программа будет загружаться в "чистую" память, конечно не будут, сами функции в памяти ведь отсутствуют.

x-code
30.08.2018, 13:53
программа (инициализация), которая дана в руководстве (в приложении) - она просто не оттранслируется в стандартном EDASM, там синтаксис другой

Эмм... а что там не так с синтаксисом? Мнемоника EQU в стандартном ассемблере была, а кроме пачки EQU и одной команды LXI для загрузки указателя стека там ничего и нет, если я правильно понял, о какой программе речь.

svofski
30.08.2018, 14:17
Вопрос интересный даже сейчас с позиции написания тестов для реала итд: как сделать программу для Вектора, чтобы грузилась с кассеты, но при этом располагала средствами BIOS для работы с консолью. Не обязательно как в МикроДОС, можно 32 символа в строке, но чтобы удобно напечатать строку и может быть даже ввести. Большинство недавно написанных тестов как правило рисуют непонятные галочки и черточки, самые роскошные от ivagor-а печатают цифирки. Было бы удобно, если б не мучаясь можно было напечатать пояснительный текст.

Сейчас я предпочту просто добавить в Прекрасм рыбу с релевантными кусками BIOS-а. Видимо решения у этой проблемы нет, кроме как самому взять да написать?

ivagor
30.08.2018, 14:31
У меня не только циферки, бывают и буковки (http://zx-pk.ru/threads/29377-kvazidisk-dorabotka-barkarya.html?p=973583&viewfull=1#post973583)
Но там совсем минимальный вариант, печать только в пределах строки и без поддержки управляющих кодов, хотя бы CR/LF. Вроде должен быть чуть более полный вариант, позже посмотрю. Скорее всего я его уже выкладывал, но где - не помню.

KTSerg
30.08.2018, 14:44
Совсем недавно натыкался на описание (или в программе реклама была встроена), что они типа предлагают альтернативный вариант библиотеки "Драйвера устройств" для Вектора. С описанием преимуществ. Но подробности не запомнил.
Значит существовала альтернатива.

ivagor
30.08.2018, 14:56
Наверняка речь про разработки PPC: такие (http://www.sensi.org/scalar/ware/829/) или такие (http://www.sensi.org/scalar/ware/892/).

x-code
30.08.2018, 17:16
Видимо решения у этой проблемы нет, кроме как самому взять да написать?

1. реверснуть Retex / Textas и выдрать нужный кусок
2. прости Господи, Драйвера Устройств (что собственно и было сделано в заводском "тесте устройств" - не том, что на четыре блока, а том, который на второй стороне кассеты был перед Йети)

KTSerg
30.08.2018, 18:46
Наверняка речь про разработки PPC: такие (http://www.sensi.org/scalar/ware/829/) или такие (http://www.sensi.org/scalar/ware/892/).
Скорее всего, да. По первой ссылке, очень похоже, хотя текст был другой.
Суя по описанию, есть готовая текстовая библиотека.
Хотя для "не больших" тестов цеплять целую библиотеку... Всегда хочется - по минимуму, даже знакогенератор не весь, а только используемые символы... :)

x-code
30.08.2018, 19:50
для "не больших" тестов цеплять целую библиотеку... Всегда хочется - по минимуму, даже знакогенератор не весь, а только используемые символы
Ну там той библиотеки...
Правда, если пытаться реализовать полноценный readline, уже чуть сложнее будет. Но вряд ли это нужно в тестах. А аналог INKEY$ сильно много места не займёт

lafromm31
30.08.2018, 21:26
Эмм... а что там не так с синтаксисом? Мнемоника EQU в стандартном ассемблере была, а кроме пачки EQU и одной команды LXI для загрузки указателя стека там ничего и нет, если я правильно понял, о какой программе речь.

Формат EQU в EDASM - "NAME: EQU выражение", в тексте приложения - нет двоеточий после NAME. Я полагаю, транслироваться программа для Драйверов, должна была не в EDASMе.

x-code
31.08.2018, 13:00
Формат EQU в EDASM - "NAME: EQU выражение", в тексте приложения - нет двоеточий после NAME. Я полагаю, транслироваться программа для Драйверов, должна была не в EDASMе.

А вот это отлично подмечено! Кроме того, в листинге из руководства к драйверам можно увидеть ещё две интересные директивы:


TITLE 'GAME V(1.1)

$-MACRO

Псевдокоманда TITLE имеется в ассемблере M80 (по крайней мере, в мануале к "Корветовской" версии она упоминается). А вот вторую директиву ($-MACRO) мне удалось найти в описании только CP/M MAC MACRO ASSEMBLER от Digital Research.

PPC
08.09.2018, 00:00
Скорее всего, да. По первой ссылке, очень похоже, хотя текст был другой.
Суя по описанию, есть готовая текстовая библиотека.
Хотя для "не больших" тестов цеплять целую библиотеку
Мне чуть стыдно себя цитировать, но (прямо со странички в картотеке):
"Другим преимуществом данной библиотеки является разделяемость программных модулей при компоновке из единого библиотечного файла PPCLIB.REL, в котором поставляется библиотека. "

Это вещь старинная, в 92м-93м году писалось, сейчас уже существует как-бы развитие этой библиотеки для 2000-ных. В любом случае, там расчёт на работу под CP/M хотя-б с квазидиском (лучше, конечно с флопаками).

А вообще, к разработке под Вектор видится 2 подхода:
1. Чисто хардкорный "на Векторе". Под CP/M или Микродос. Тут возможны 2 варианта: MACRO/Link от Digital Research или M80/L80/LIB80 от мелкомягких. Понятие "на Векторе" не обязательно означает железного коня. Можно и под эмулятором на 100MHz :).
В начале 90х эмулей не было, но практически у всех, кто серьёзно что-то пытался делать, были и квазидиски и по 2 флопика. Как у пользователя Вектора только появлялись квазики/флопари, про кассеты, Монитор-отладчик и проч. забывали начисто. Отож, раздельная компиляция, модульная линковка, релокируемый самомодифицирующийся код, макросы и проч. и проч.

2. Host-target. Скажем на винде. Выбирается какой-нибудь любимый редактор. У меня это Crimson Editor (он не лучший, просто дело привычки). Этот редактор превращается в IDE посредством назначения макросов на кнопки. Например, <F9> становится compile, <F10> превращается в link (вызывает .bat файл с командами линковки), <F11> - в старт эмулятора с настройкой на каталог, куда идёт выхлоп.

Я сейчас в качест cross-тула пользую вот такое:

CPM.EXE -- CP/M-80 program EXEcutor for Win32 V0.4
Copyright (C) 2004-2012 by K.Murakami

Под этой фигнёй запускаются и DR и Микрософт ассемблеры и линкеры. Правда, натыкался на баги, когда этот CP/M-80 program EXEcutor создаёт неверный объектный файл при очень определённых условиях. В таких случаях всегда есть 22nice.

ПМСМ (очень скромному), не стоит сильно убиваться, пытаясь работать на "голой" машине с ленточкой, когда совсем рядом доступна раздельная компиляция в перемещаемые объектные модули.

ivagor
28.11.2018, 18:57
Рисование линии (в демо-ветке) довели до очень хорошего уровня, теперь можно и кругами заняться. Реализовал алгоритм Мич(е)нера.
circle - "точный" вариант, может рисовать окружности максимального радиуса
circle3 - оптимизированный вариант, радиус<=76

svofski
28.11.2018, 19:15
ivagor, по-моему для таких эпических разработок стоит заводить отдельные темы. Проще же искать будет потом. Из твоего круга (или окружности?) мы конечно все равно потом рыбу сделаем, но все же.

ivagor
28.11.2018, 19:26
Уточню - окружности, не круги.
Насчет эпичности - тут как пойдет, может несколько постов и все. Можно подумать о ветке "Рисование геометрических фигур" или что-то в этом духе. Там привести ссылки на линию и окружность. А если еще что будет, то сразу там начинать.

svofski
28.11.2018, 20:08
https://www.youtube.com/watch?v=Mp_jZxhmV9c

ivagor
28.11.2018, 21:01
Нет, нам такие фигуры не нужны, нам нужны другие фигуры.
Ускорил и сократил оба варианта, особенно circle3. В circle3 важное изменение - координаты центра в DE, не в HL и значение DE не меняется процедурой, что удобно при рисовании нескольких окружностей со сдвигом относительно предыдущего положения.

ivagor
29.11.2018, 17:11
Идей по улучшению не появилось, поэтому закругляю circle. Все как было, только добавил коррекцию соотношения сторон, чтобы на реале были окружности, а не эллипсы. Приложил конфиг для emu, тот же самый, который выкладывал вместе с 3D крутилкой.

svofski
29.11.2018, 17:33
ivagor, обычно когда ты говоришь, что все пропало, это сигнал ждать, что через три дня появится версия в 2 раза быстрее, а если пожертвовать тремя байтами, то в 2.7. Делаем рыбу?

ivagor
29.11.2018, 17:57
Так бывало, но не каждый раз, думаю тут достаточно плотно получилось, по крайней мере сами вычисления, особенно в circle3. Отрисовка не самая быстрая, можно весь вывод точек заинлайнить, но в данном случае соревнования нет и пусть будет без спорта. Окружность созрела для рыбы, только может лучше вариант без коррекции AR, а то из-за сравнительно скоростной коррекции сокращается область рисования. Можно корректировать и иначе, но будет медленнее.

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

Кстати, у этого быстрого способа коррекции есть еще одно достоинство - им легко корректировать координаты концов отрезков, что я и делал в 3D крутилке. Т.е. линии и окружности (и точки, конечно) можно рисовать в одной системе координат.

ivagor
01.12.2018, 18:07
Сравнил с бейсиком 2.5, там используется тот же алгоритм. Заглушил рисование точек, оставил только базовый алгоритм - в бейсике в два с копейками раза медленнее чем в circle V2. Но львиную долю времени занимает рисование, в бейсике к нему еще вычисления пристегнуты (овал - 100%, дуга - скорее всего, дугу не проверял).

ivagor
01.12.2018, 21:46
Альтернативный вариант коррекции соотношения сторон, позволяет рисовать по всему экрану без ограничений и он еще и быстрее (чем V2AR, просто V2 конечно все равно быстрее). Кроме того таблица коррекции теперь генерируется самой программой (можно, например, сгенерировать несколько таблиц для рисования разных эллипсов).

svofski
01.12.2018, 22:12
ivagor, а клиппинга по границам экрана нет?

ivagor
02.12.2018, 09:54
В предыдущих вариантах я стремился к максимальной скорости и клиппинг там отсутствовал.
Если главное - возможности, а не скорость, то можно использовать предлагаемую V3. Здесь есть:
1) Клиппинг по границам экрана.
2) Возможность рисовать эллипсы. 16 коэффициентов сжатия (от 1/16 до 16/16) по каждой оси. Числитель коэффициента по X задается в D, по Y - в E. Перед первым вызовом circle надо вызвать IniCircle.
3) Возможность рисовать дуги с дискретностью 2pi/8. Маска дуг в регистре С, по часовой стрелке. Дополнительно можно посмотреть пример.
Обращаю внимание, что в V3 радиус в регистре B.
Пример клиппинга и рисования эллипсов - circleClipAndEllip
Пример рисования дуг - circleArc
Примеры разделил для наглядности, конечно же можно комбинировать возможности и, например, рисовать дуги эллипсов с клиппингом.
Сами процедуры рисования в обоих примерах одинаковые.

ivagor
06.12.2018, 20:57
В детстве завидовал быстрому корветовскому paintу. Корветовский бейсик медленно рисует круги, зато очень быстро закрашивает. Проблема paint в векторовском бейсике связана с тем, что процедура там чисто пиксельная и никак не использует байтовую структуру экрана для ускорения. Зато процедура очень компактная и простая. Взял ее за основу и перевел в двухцветный вариант. А потом оптимизировал за счет комбинированного использования байтов/пикселов. Процедура ускорилась на (десятичный) порядок (сравниваю двухцветные варианты, цветной еще намного медленнее)! Жалко не сохранил первый вариант, было бы видно, как стало заливать в 10 раз быстрее. Теперь корветовская процедура всего в два с копейками раза быстрее :) Возможно стоило ее взять за основу.
Нужно конечно отметить, что корветовский paint работает с 8 цветным экраном, а мой вариант с 2х цветным, но корветовский "ускоритель" волшебным образом в вектор не пересадишь. Прикидываю, что при переходе к цветному варианту замедление было бы в худшем случае раза в 4, что все равно намного быстрее бейсиковской процедуры. Но такой вариант был бы довольно большим. А вот с z80 замедление было бы не таким существенным, думаю раза в 2.
Пока выкладываю "тизер" без исходника, может еще пооптимизирую.

ivagor
08.12.2018, 12:17
Реализовал еще один мечт детства, касающийся paint - заливку с маской/шаблоном. С ходу не вспомнил, где можно подсмотреть и изобрел свой велосипед. Тоже пока без исходника, надо еще пооптимизировать и потестировать.
Мельком глянул корветовский paint и понял, что вряд ли буду его подробно разбирать, очень уж там все оптимизировано. А некоторые решения и вовсе неприменимы для вектора, например заливка строки стеком.

KTSerg
08.12.2018, 17:14
Реализовал еще один мечт детства, касающийся paint - заливку с маской/шаблоном. ...
Интересно, как будет выглядеть результат заливки, если маска будет "наезжать" на контур...
Или это приведет к не предсказуемому результату?
Наверное можно попробовать необходимость "наезда на контур" сделать одним из параметров. И применять, когда это даёт более "эстетичный" результат заливки. Хотя проверка на необходимость "наезда" замедлит алгоритм...

ivagor
08.12.2018, 18:28
как будет выглядеть результат заливки, если маска будет "наезжать" на контур
Т.е. если заливка будет перекрашивать не только "внутренности", но и границу? Самый простой вариант - запомнить координаты точек границы при заливке и потом их все перекрасить (причем можно для границы задать отдельную маску), но это имхо довольно странный вариант. Выкладываю исходник, можно переделать его на свой вкус :)

KTSerg
08.12.2018, 21:17
... Самый простой вариант - запомнить координаты точек границы при заливке и потом их все перекрасить ...
Не, запоминать координаты всех точек контура, это перебор... количество точек может быть слишком большим.
А если сразу менять, то проблема может возникнуть, если заливка (с маской) подходит к одной точке контура и справа и слева.

ivagor
09.12.2018, 09:02
количество точек может быть слишком большим
Можно грубо прикинуть. Пусть большая фигура, 256 строк, в каждой пусть 4 границы - 256*4*2=2 килобайта.
Есть альтернативный вариант, при котором границы могут быть сколь угодно сложными, но зато -8 килобайт памяти - нарисовать границы в невидимой плоскости сплошными, а в видимой - как угодно, и при заливке ориентироваться на невидимые сплошные границы. Кстати, такой вариант можно сделать более быстрым, чем V5mask.

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


такой вариант можно сделать более быстрым, чем V5mask
Вот тут я поторопился, регистры то все кончились, поэтому будет даже медленнее.

svofski
09.12.2018, 11:03
Если задача именно что-то нарисовать, то нужны залитые треугольники и выпуклые четырехугольники. Но не простые, а чтобы смежные стороны двух фигур не оставляли между собой дыр.

PPC
10.12.2018, 21:01
Если задача именно что-то нарисовать, то нужны залитые треугольники и выпуклые четырехугольники. Но не простые, а чтобы смежные стороны двух фигур не оставляли между собой дыр.

Мне сдаётся, что треугольников должно быть достаточно на все возможные случаи, если задача именно нарисовать.
Четырёхугольники, скорее нужны для всяких там интерфейсов оконных.

svofski
10.12.2018, 22:56
PPC, конечно треугольников достаточно. Мне просто квады почему-то нравятся.

hitomi2500
14.12.2018, 09:57
Квады всем нравятся. Sega в своё время сделала на Сатурне аппаратные квады (а с ней на пару и NVidia в видеокарте), в результате разработчики сетовали на то, что приходится переделывать треугольные модели, потому как с квадами тогда никто не работал. Сегодня железо стало исключительно треугольным , хотя моделеры как раз предпочитают работать с квадами.

ivagor
19.12.2018, 20:08
Прикидываю, что при переходе к цветному варианту замедление было бы в худшем случае раза в 4
Оказалось, что не в 4, а в 3, причем еще можно немного оптимизировать.

ivagor
23.12.2018, 15:33
Решил добить цветную заливку области (с маской). Сначала просто добавил цвет в ранее выложенную процедуру. А потом посмотрел, как дела в графических редакторах. В рембрандте просто чудовищная (ОЧЕНЬ-ОЧЕНЬ МЕДЛЕННАЯ) заливка, не scanline, так даже студентам надо запрещать делать. В карандаше/draw пиксельный scanline из basica/драйверов устройств, но добавили маску. Тут я обратил внимание, что в карандаше/draw есть маски с несколькими пустыми строками подряд, а у меня в той процедуре каждая пустая строка должна быть окружена непустыми (т.е. не более одной пустой подряд). И модернизировал.
Предлагаемый вариант (V16) цветной, допускает практически любую (кроме полностью нулевой, нужна хотя бы одна единичная точка) маску. Но нужен дополнительный кольцевой буфер, который используется только для масок с нулевыми строками. Если сравнивать с корветом, то со сплошной маской уступает примерно в 6 раз. Если думаете, что это медленно, то для сравнения BASIC2.5 заливает область почти в 50 раз медленнее корвета.
Если в маске есть пустые строки, то будет медленнее из-за поиска в буфере. Для простоты сделал буфер 256 байт.
67422
Можно и быстрее, если использовать не кольцевые, а линейные (и организованные иначе) буферы. Проблема в том, что для очень сложных фигур они могут съесть очень много памяти.
Зато в такой спортивной процедуре:
1) Высокая скорость заливки, уступает корвету в 4.5 раза.
2) Скорость заливки практически не зависит от маски (хоть сколько пустых строк).
3) Маска заливки может быть полностью нулевой.

Исходник V16 пока не выкладываю, нужен рефакторинг. Кстати, невозможность использования полностью нулевой маски в V16 является скорее номинальным, а не практическим ограничением, т.к. тот же результат можно получить заливая сплошной маской, но с цветом 0.

ivagor
05.01.2019, 10:15
Надо как-то закруглить тему заливки. Сделал вариант с теневым буфером, который быстрее даже V13 ("спортивного"). Отъедает 8Кб, но зато это фиксированный размер для границ любой сложности, а буферы в V13 для очень сложных фигур могут занять половину памяти (тут я не учитываю стек, но его использование примерно одинаковое в разных версиях). По тактам (как я до сих пор сравнивал) в 4.2 раза медленнее корвета (V13 была в 4.5 раза медленнее). Но если считать правильно, по времени (тактовые и тормоза вектора и корвета различаются), то в 3.5 раза. Думаю это очень хороший результат при отсутствии "акселератора", тем более V24 заливает с маской и в 16 цветах, а не в 8. У теневого буфера есть еще потенциальное преимущество - маска может быть полноцветной и большой, произвольную картинку можно вписать в замкнутый контур. Еще одна особенность теневого буфера - двухстадийная работа, сначала латентная стадия заполнения, потом вывод на экран (в оценке быстродействия учитываю всю процедуру, обе стадии). Т.к. вторая стадия очень быстрая, то заливка производит (по крайней мере на меня) сильное впечатление. Минус - рефакторинг исходника (и выкладывание) отложен на неопределенное будущее. С другой стороны он особо никому не нужен, но надеюсь приятно будет знать, что на векторе есть быстрая заливка.
Насчет области применения. В графическом редакторе я бы использовал V24, а в качестве процедуры графической библиотеки языка - V16.

b2m
05.01.2019, 14:04
У меня на Башкирии-2м в суперкалке тоже есть заливка (30 летней давности), при построении графиков, например круговая диаграмма. Там одна стадия, поэтому кажется не так быстро, хотя и сравнимо. Но там только 4 цвета (как при поиске маски, так и у шаблона).

ivagor
05.01.2019, 15:36
Посмотрел C.COM (электронная таблица v1.5). Процедура заливки быстрая, но меня смутило отсутствие работы со стеком, она расчитана на заливку фигур с "загогулинами"? Электронная таблица для советских 8-биток выглядит хорошо, вроде для вектора (да и для многих других) с подобным интерфейсом нет.

b2m
05.01.2019, 19:14
расчитана на заливку фигур с "загогулинами"?
Чтобы не быть голословным, залез в исходники. Похоже там действительно упрощённая версия, в электронной таблице только выпуклые фигуры, к тому же закрашивается только чёрная область. Закраска была бы быстрее, если бы не надо было постоянно переключать карту памяти для доступа к разным битовым планам.

А вот в бейсике нормальная версия, но заливка одним цветом. Кстати, код заливки, который писал я, перенесли потом в ПЗУ биоса, потому что бейсик не влазил во внешнее ПЗУ на ученических машинах.

ivagor
05.01.2019, 20:05
Посмотрел бейсиковский вариант, там совсем другое кино, в т.ч. и по скорости. Пока быструю заливку в бейсиках на 8080 видел только в корветовском, возможно это был фетиш авторов, не зря же они наворачивали хард под это дело. А в других бейсиках скорее всего экономили место, пиксельные заливки компактные, с байтовыми ускорениями разбухает.

Закраска была бы быстрее, если бы не надо было постоянно переключать карту памяти для доступа к разным битовым планам.
Смотря с чем сравнивать. mvi+out - 7+10=17 тактов, если без тормозов. Или 8+12=20 было бы на векторе. У вектора аналогичный по занятию регистров вариант перехода между плоскотями mvi+add+mov - 8+4+8=20 тактов. "Быстрый" dad не всегда получается использовать, т.к. выигрыш от него съест сохранение/восстановление регистров. Причем на башкирии есть еще опции типа inr/dcr+out. Для цветной заливки удобнее или нечто ega/корвето-подобное или все биты в одном байте, а вектор или башкирия не очень удобны.

ivagor
06.01.2019, 07:03
Для цветной заливки удобнее или нечто ega/корвето-подобное или все биты в одном байте
Подтверждение первого варианта - корвет, а второго - львов, там тоже очень быстрая заливка

ivagor
06.01.2019, 16:27
Оффтоп, но раз уж начал здесь писать, то немножко дополню.
В орионовском BASIC 1.2 интересный подход - заливка пиксельная, но развернули "строки" на 90 градусов и заполняют столбцами. Очень разумный вариант для компов со столбцовой организацией экрана, в векторовском бейсике тоже стоило так сделать (да и в Б2М думаю тоже). Правда такую процедуру не разгонишь добавлением байтовых операций, надо переделывать на строки.
Довольно хороший вариант оказался в искровском бейсике, он между чемпионами и чисто пиксельными процедурами.

svofski
06.01.2019, 17:15
Я в этих делах полный ноль и вообще не очень понимаю, зачем нужен flood fill, так что извините если что. А можно делать заливку широкими мазками по границам байтов, а попиксельную оставить только для тех участков, где она нужна? То есть примерно так. Берем чанк 8х8. Если он пустой и внутри, закрашиваем быстро. Если он пересекается с границей области, откладываем точку затравки на потом. И так далее. Получается, что мы как бы сделали картинку в 1/64 разрешения, закрасили все в ней, потом перешли к полному размеру и подкрасили ступенчатость. Или это только лишнее усложнение?

ivagor
06.01.2019, 18:09
А можно делать заливку широкими мазками по границам байтов, а попиксельную оставить только для тех участков, где она нужна?
Быстрые процедуры так и делают, но только все же чанки не 8x8, а 8x1. По моей умозрительной прикидке для компов со столбцовой организацией наверно можно было бы реализовать комбинацию быстрой заливки столбца 8xВысоту и остатки заливать пиксельно, но это будет заметное усложнение процедуры. А заливка линии комбинацией байтов и пикселей по скорости имхо почти не уступает и гораздо проще.

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


зачем нужен flood fill
Пропустил этот момент. Flood fill нормальные заливки не используют, только scanline, только хардкор. Хотя в рембрандте какой-то чудовищный невыносимо медленный алгоритм, может и flood fill.

svofski
06.01.2019, 21:12
Мне казалось, что то, что ты делаешь, это по сути бейсиковский пейнт. То есть flood fill. А scanline подразумевает развертку полигонов с закраской. Или есть какое-то другое понимание всего этого? Наверное я путаю терминологию.

ivagor
07.01.2019, 09:11
Мне казалось, что то, что ты делаешь, это по сути бейсиковский пейнт. То есть flood fill.
Изначально я отталкивался от бейсиковской процедуры, хотя потом ушел довольно далеко. В бейсике (да и практически везде, кроме рембрандта) примерно вот такой scanline fill (https://en.wikipedia.org/wiki/Flood_fill#Scanline_fill).

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

Ты, как я понимаю скорее о вот таком scanline (https://www.cs.uic.edu/~jbell/CourseNotes/ComputerGraphics/PolygonFilling.html). Такой вариант несколько из другой оперы, хотя я изобрел велосипед и использовал элементы такого подхода в V13.

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

Наверно самый правильный вариант - называть то, что используется в бейсиках и графических редакторах Scanline Floodfill with stack (https://lodev.org/cgtutor/floodfill.html).

ivagor
07.01.2019, 14:45
Закраска была бы быстрее, если бы не надо было постоянно переключать карту памяти для доступа к разным битовым планам.
В следующем посте я написал

Смотря с чем сравнивать. mvi+out - 7+10=17 тактов, если без тормозов. Или 8+12=20 было бы на векторе. У вектора аналогичный по занятию регистров вариант перехода между плоскотями mvi+add+mov - 8+4+8=20 тактов. "Быстрый" dad не всегда получается использовать, т.к. выигрыш от него съест сохранение/восстановление регистров.
Но я оставил за бортом частный случай, когда 2 плоскости (не 3 и не 4) доступны без переключения страниц, типа искры. Тут самым быстрым похоже будет вариант с выделением двух регистровых пар под адреса. Хотя выигрыш будет не на полную величину переключений, они уйдут, но вместо них добавится inr/dcr для второй регистровой пары. Для такого обращения с 3мя или 4мя плоскостми у ВМ80 регистров не хватит. Для 3х хватит у 580ВМ1, для 4х - у z80.

ivagor
12.01.2019, 16:10
Еще капелька велосипедизма. При цветной заливке с произвольной маской можно обойтись без теневого буфера (V24) и без разных видов буферов координат обработанных строк (V13, V16).
2 этапа:
1. Заливаем цветом, отличающимся от цвета границы и от цветов заливки.
2. По выбранному цвету заливаем произвольной маской.
Это точно медленнее V24 и V13, зато не нужны дополнительные большие буферы. В V16 буфер маленький, им можно практически пренебречь при сравнении. По скорости - если в маске нет или мало нулевых строк, то V16 будет быстрее, в лучшем случае раза в два. Наоборот, если почти все строки маски пустые, то вариант с промежуточной заливкой скорее всего будет более быстрым.

ivagor
06.07.2019, 15:45
Довольно хороший вариант оказался в искровском бейсике, он между чемпионами и чисто пиксельными процедурами.
Расковырял искровский paint. Интересная особенность - его авторы решили отталкиваться не от цвета границы, а от цвета фона. Поэтому заполнение области с разноцветными включениями приводит к разным результатам в гранично-ориентированном и фоно-ориентированном вариантах.

electroscat
24.09.2019, 15:22
Дорогие друзья, Рад что есть такой форум.. НЕдавно присоединился, вспомнил комп, который был у меня 25 лет назад, посидел в эмуляторе, и сейчас уже нашел железный вектор, который через пару недель приедет ко мне из Минска...

В целом, основной целью моего возвращения к Вектору является Ассемблер 8080.. И сейчас, пока что на эмуляторе я с ним разбираюсь...

И у меня появились некоторые вопросы, если кто то может помочь мне в этом, или по крайней мере намекнуть что нибудь, буду очень благодарен !

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

Есть еще вопрос, не маловажный, сейчас в основном я пользуюсь Pretty 8080 Assembler, огромное спасибо его создателю !!! Но есть желание освоить что то более консервативное, железное, и работающее под вин10, при всем, способное компилить код для вектора. Есть ли что то такое? В этой ветке я обнаружил ссылку на "Пакет для i8080: WinAsm Studio + fasm g" но так и не понял до конца, как всем этим пользоваться. С ассемблером я никогда не имел дела, работал в borland kylix, lazarus, GNU С Builder, ну и разными интерпретаторами типа бейсика, php+javascript, phyton, C# и прочим... Очень хочу разобраться в Ассемблере. Заранее благодарен за ответ !!!

Improver
24.09.2019, 15:35
Один из первых вопросов - как на асемблере 8080 в частности на Векторе обратиться к текстовому файлу, находящемуся на дискете или жестком диске, с определенным именем, прочитать определенное количество строк из него ? всего этого нет в руководстве по ассемблеру вроде, векторовскому.. Помогите пожалуйста разобраться, или по крайней мере скажите, где можно информацию поискать ?Уже ответил тут (https://zx-pk.ru/threads/21907-demo-effekty-dlya-vektora.html?p=1027807&viewfull=1#post1027807), немного дополню: ещё можно посмотреть исходники чужих программ (http://www.sensi.org/scalar/categories/37/), и, естественно, различные периодические издания тех лет (http://www.sensi.org/scalar/categories/5/).

svofski
24.09.2019, 15:59
Что до файлов итд, сам я для справки пользовался бы современным справочником с вызовами BDOS CP/M. Их много. Вот, например, нашелся такой:
http://members.iinet.net.au/~daveb/cpm/bdos.html
Там проще искать, чем в сканах старинных манускриптов. А совпадение с МикроДОС почти полное.

electroscat
24.09.2019, 16:15
Уже ответил тут (https://zx-pk.ru/threads/21907-demo-effekty-dlya-vektora.html?p=1027807&viewfull=1#post1027807), немного дополню: ещё можно посмотреть исходники чужих программ (http://www.sensi.org/scalar/categories/37/), и, естественно, различные периодические издания тех лет (http://www.sensi.org/scalar/categories/5/).

Благодарю! про программы тоже думал, спасибо !

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


Что до файлов итд, сам я для справки пользовался бы современным справочником с вызовами BDOS CP/M. Их много. Вот, например, нашелся такой:
http://members.iinet.net.au/~daveb/cpm/bdos.html
Там проще искать, чем в сканах старинных манускриптов. А совпадение с МикроДОС почти полное.

Очень благодарен! спасибо за ссылки, буду изучать !

AlexBel
27.09.2019, 11:04
Про сейчас и речи нет! Разумеется, я и сам свои эксперименты с вертикальным скроллом пятилетней давности писал на PC и загонял для компиляции в эмуляторе Вектора на образ дискеты через плагин в FAR. А знал бы тогда про tasm - и так бы не мучился :)

Меня съедало любопытство, как программировали тогда, в конце 80х-начале 90х, но, наверное, достоверно мы этого уже не узнаем, а все правдоподобные гипотезы в этой теме уже обсудили :)

В "те самые" годы я был очень дружен с Сергеем Новиковым (http://www.sensi.org/scalar/author/98/) и неоднократно бывал у него дома. "Вектором" я тогда не интересовался, но помню, что РС у него в то время не было. Квазидиск - да, был, дисковод - вроде бы, тоже. Но РС не было.

electroscat
22.12.2019, 15:59
Дорогие друзья, хочу представить програмку, которую я написал на базе дизасемблированной CMU2 с базиса. Программа работает и в досе, и без него. Скажу сразу, программа для реального вектора, потому что у эмулятора бит входа с магнитофона всегда в 1, и соответственно на экране все что можно при отсутствии сигнала, ну а при наличии (например при вводе какого нибудь WAV) - в целом примерно похоже на реал, вопрос только в том, что тот формат WAV который понимает эмулятор - это уже искажения сплошные в плане качества звука. А на реальном компе я просто подключаю на вход магитофона линейный выход компьютера, или плеера, разветвляю его переходником, чтобы еще и в колонки вывести, и качество звука норм, и эффекты выводятся..

В общем, програмка - это ЦМУ, которая в отличии от стандартных, имеющих место среди программ для вектора ЦМУ - выводит разные смайлы 8Х8 разных цветов. Управление - СС - смена смайла, УС - автоматическая смена смайлов. УС пока не с первого раза работает, и нужно подержать немного, но думаю со временем исправлю... Решил поделиться в связи с восстановлением форума, поздравляю друзья !!!

https://yadi.sk/d/p8ZXTM_ZPeidCQ

https://sun9-68.userapi.com/c856024/v856024024/1ac5bb/M3O0IH4FX9g.jpg
https://sun9-59.userapi.com/c856024/v856024024/1ac5b3/ltY70oBoUqw.jpg

В архиве по ссылке есть скриншоты вывода программы.

В архиве два файла, с разными палитрами. Одна по ярче, другая по бледнее.

С программой работал не на векторе, хочу поблагодарить создателей и поддерживающих "Прекрасного Ассемблера" Это очень хороший проект. Очень выручал. Но основную массу времени я пользовался The Telemark Assembler (TASM) Version 3.2.

svofski
23.12.2019, 11:45
/me сдувает пыль с реала...

electroscat
24.12.2019, 01:14
/me сдувает пыль с реала...

На эмуляторе работает, в целом идею понять можно... Но как уже писал, на эмуле постоянно единица в отсутствии сигнала на входе, и по этому 16 цвет палитры, тобиш все белое, и все светится сразу.. Если запустить какой нибудь WAV то все работает в целом .. Добавил еще одну прогу в папку, с третим вариантом палитры. Если будет время, может засуну в программу сразу несколько палитр и повешу их на рус\лат ..
Светодиод рус\лат пляшет под музыку кстати на реале. А на эмуляторе - не понятно в целом этого ..

svofski
24.12.2019, 09:04
В эмуляторах ведь можно включить загрузку wav-а? Должно работать. У меня пока не было времени проверить.

electroscat
24.12.2019, 11:12
В эмуляторах ведь можно включить загрузку wav-а? Должно работать. У меня пока не было времени проверить.

Да, она включена по умолчанию даже. Проверить программу можно в принципи любым WAV файлом. Но есть проблема, VV искажает звук WAV, добавляет что то свое, какие то посторонние звуки. А EMU вообще звук загружаемого WAV не выводит, в связи с чем, не понятно, по каким законам меняется картинка на экране... Залил в архив небольшой WAV для проверки в VV.

Ramiros
24.12.2019, 13:17
Да, она включена по умолчанию даже. Проверить программу можно в принципи любым WAV файлом. Но есть проблема, VV искажает звук WAV, добавляет что то свое, какие то посторонние звуки. А EMU вообще звук загружаемого WAV не выводит, в связи с чем, не понятно, по каким законам меняется картинка на экране... Залил в архив небольшой WAV для проверки в VV.

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

ivagor
24.12.2019, 13:26
emu80 (https://zx-pk.ru/threads/27488-emu80-v-4.html) тоже воспроизводит звук wav при загрузке

electroscat
24.12.2019, 13:52
Ничего VV от себя не добавляет, просто на звук выводится дискретный сигнал с эмулируемого компаратора, поэтому все шумы усилены до уровня полезного сигнала.

Спасибо!
А можно как то это отключить, для теста ЦМУ исключительно, чтобы можно было вводить аудиофайлы, и при этом слушать их без усиления всех шумов ? Может где то в файле настройки есть что запретить или разрешить ? И еще, сделать чтобы первый бит из порта 01 "вход магнитофона" был в отсутствии сигнала нулем, как у реального вектора, а не "1" ?

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


emu80 (https://zx-pk.ru/threads/27488-emu80-v-4.html) тоже воспроизводит звук wav при загрузке

У меня EMU ver 1.01 - не выводится звук. Зато работает жесткий диск, мне это удобно для синхронизации реального диска с эмулятором. Залил образ CF через картридер, подсунул его эмулятору - и все работает. Можно что угодно напихать в образ, потом так же его записать на CF - и в реальный вектор. В EMU80 харддиск не поддерживается вроде.

ivagor
24.12.2019, 14:03
У меня EMU ver 1.01
Это разные эмуляторы. Автор emu - b2m, автор emu80 - Pyk.

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


В EMU80 харддиск не поддерживается вроде.
это да

Ramiros
24.12.2019, 14:54
Спасибо!
А можно как то это отключить, для теста ЦМУ исключительно, чтобы можно было вводить аудиофайлы, и при этом слушать их без усиления всех шумов ? Может где то в файле настройки есть что запретить или разрешить ? И еще, сделать чтобы первый бит из порта 01 "вход магнитофона" был в отсутствии сигнала нулем, как у реального вектора, а не "1" ?


Wav на прямую с помощью файлов настройки сделать нельзя. Если залезть в исходники, то можно в принципе сделать но нужно еще согласовывать амплитуду сигнала с внутренним миксером эмулятора.

А кто сказал что у реала читается 0? как раз по моему 1 и читается. Хотя возможно зависит от состояния компаратора и его элементов на входе.

ivagor
24.12.2019, 15:10
А кто сказал что у реала читается 0? как раз по моему 1 и читается.
Можно предположить, что 0 читается при соединении шнурком звуковухи со входом вектора при отсутствии сигнала. А при отключенном входе вроде читается 1, этот вопрос разбирали много лет назад, я уже не точно помню.

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

Еще мое личное имхо насчет программной составляющей. Реагировать на абсолютные значения, поступающие с магнитофонного входа - не лучший вариант. Универсальнее сделать реакцию на изменения, но тут, конечно, автору виднее.

electroscat
24.12.2019, 15:42
Еще мое личное имхо насчет программной составляющей. Реагировать на абсолютные значения, поступающие с магнитофонного входа - не лучший вариант. Универсальнее сделать реакцию на изменения, но тут, конечно, автору виднее.

Да, хорошая идея, спасибо ! Я подумаю как реализовать.

svofski
26.12.2019, 10:50
Записал SMILE в v06x:

https://youtu.be/QNF5GR59imI
Берегите уши. В моем эмуляторе наверное та же проблема, что и у остальных -- звук выводится "как его слышит Вектор", а Вектор больше одного бита не слышит. Зато рок-н-ролл :v2_dizzy_punk: electroscat, пиши еще ;)

electroscat
26.12.2019, 16:30
Да, у меня в планах есть еще пару программ,... да и сам вектор, точнее все контроллеры, блоки питания и провода к ним хочу упаковать и привести к приемлимому виду, всунуть в корпус.. )))
Программа еще требует доработки, да... там кстати есть еще автоматический режим смены выводимых смайлов, "ус" но почему то срабатывает не всегда :smile:

svofski
26.12.2019, 16:50
там кстати есть еще автоматический режим смены выводимых смайлов, "ус" но почему то срабатывает не всегда
Я вообще не сразу догадался, что они меняются. Стал жать кнопки для остановки видеозахвата и поехали смайлики - а это всё меняет. Пришлось переснять второй раз ;) Но на реале все-таки тоже надо будет попробовать.

electroscat
26.12.2019, 17:02
На реале под разную музыку разные интересные штуки на экране визуализируются, иногда очень интересные рисунки проскакивают.. У меня сейчас эта программка как индикатор, все время работает если музыка воспроизводится )) Я делал еще, что нулевой бит палитры меняется по определенному закону, а с ним бордюр и все что черное на экране, тоже прикольно, но там нужно не перебором это менять, а "нарезать" сочетаемых с общей палитрой цветов и их перебирать, будет интересно выглядеть.. А пока все это перебором от 0 до 255 вместе с скролингом - выглядит не очень, не стал в эту версию добавлять. Ну и с палитрами можно поиграться, тоже их сменными сделать, пока есть только 3 подобрнных палитры, сочетаемых, но реально подобрать 5 - 8.. и вывести кнопкой смену.. Но на все нужно время...

electroscat
07.01.2020, 12:15
Доработал программулинку, меняет палитру (рус\лат), меняет блок пикселов (СС), меняет тип смены блоков, авто или в ручную (УС), выходит в microDOS (УС+СС). Проверял на трех системах, t34,t35,t72,mdos32h.
Походу крайняя доработка по функционалу. Далее может чуть оптимизирую код, но не факт.. Все что хотел отработал, по графике.

Видос тут:

https://youtu.be/GnkJOBtv500

Программа тут (https://yadi.sk/d/p8ZXTM_ZPeidCQ)

Спасибо !

P.S.... Добавил пикселных блоков, теперь их 16, и палитры чутка упорядочил, сделал RGB палитры контрастные. Отработал перегрузку программы по "БЛК"+"СБР" код оптимизировал, самую малость... Сейчас видео не соответствует программе. :) Обновил на яндекс диске.

Еще добавил вариант - CM-MAHA.COM и CM-MAHA.WAV (для загрузки с телефона в реал. вектор) - это стилизация под "Матрицу". Пикселные блоки программы предтавляют собой санскритские символы маха- мантры, с небольшим дополнением, и по цветовой гамме это похоже на код "матрицы" из всем известного фильма...

Заменил CM-MAHA.COM и CM-MAHA.WAV на CM-MM.COM и CM-MM.WAV - окончательные версии, проработал с настоящим санскритологом, чтобы написание "деванагари" шрифта соответствовала на 100% действительности, упорядочил символы, сделал смену символа не "поплоскостно" а "построчно" - теперь это аутентичная махамантра, которую в плане правильности написания символов даже санскритолог ободрил.. Управление такое же, УС - останов автоматической смены символа, он же запуск, чтобы все символы можно было просмотреть, СС - переключение символа, когда не автоматический просмотр, и рус\лат - смена палитры. Совместное нажатие "УС"+"СС" - выход в microDOS.

Так же поигрался еще с СМ-SMILE - палитру сменил кое где, символы поменял некоторые, главное - отработал глюк - который меня доставал с самого начала рабоиы программы, иногда последний байт символа заносило в адресс 0000h. И тогда перегрузка программы по БЛК+ВВОД вешала комп, на некоторых символах. Разобрался, и наверняка - это конечная версия.

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

electroscat
18.03.2020, 00:20
А кому подавать заявку, чтобы разместить в базисе мои програмулины? Хочется внести свой вклад в софт для вектора официально, хоть и с опозданием в 25 лет, развивать дальше скорее всего не буду... :)

Добавил еще версию - копию изначальной, но со сменой палитры и выходом в MDOS. Рус\лат - смена палитры. Совместное нажатие "УС"+"СС" - выход в microDOS. Называется CMU-DOS.COM. Все по ссылке https://yadi.sk/d/p8ZXTM_ZPeidCQ доступно.

svofski
18.03.2020, 00:27
Заявку не надо :) просто говори, что добавить.

electroscat
18.03.2020, 00:51
Все что по ссылке https://yadi.sk/d/p8ZXTM_ZPeidCQ лежит, в color-music наверное. Если надо описание, https://zx-pk.ru/threads/29144-programmirovanie-na-assemblere.html?p=1041018&viewfull=1#post1041018 в этом сообщении все, коротко, СМ-SMILE.COM переименовал в CM.COM... если надо подробно, могу и как когда в оборонном нии работал, документацию составить ))))))

electroscat
09.04.2020, 01:39
Хочу поднять снова эту тему, хотя бы немного...


Еще мое личное имхо насчет программной составляющей. Реагировать на абсолютные значения, поступающие с магнитофонного входа - не лучший вариант. Универсальнее сделать реакцию на изменения, но тут, конечно, автору виднее.

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


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


Сейчас делаю пзу для своего вектара, на базе TimSoft32, всунул туда 7 программ, чуть поправил код, все уже работает, стилизовал программы под вектор, всем сделал сине - желтую гамму, встроил на F3 - microdos31h, еще тест квазидиска, тест техпрогона, как же без него, и на сдачу, три разновидности своей проги с эффектами и тест AY - добавил ему чуть интерфейса... Так я к чему, пока заказл на али микросхемы, тестирую на эмуляторе, и некоторые моменты отладить было очень трудно, потому что по умолчанию 1 на входе магнитофона... А у реального вектора там 1 иногда мелькает, только когда пальцем держишься за контакт входа, в остальных случаях, подключен шнур, отключен, воткнут он в звуковую карту или телефон, отключен - абсолютный ноль...

Может все таки как то можно вывести в настройки эмулятора этот бит, или просто поправить. Я понимаю, что это абсолютно никому не нужно и не важно, но таки это же ближе к реальности все же... Ну или у меня какой то Вектор особенный :)...

В целом, наверное сообщение адресовано авторам эмуляторов, со всем моим уважением и почтением !

Все таки допускаю, что у меня вектор особенный, тогда есть просьба, всем у кого есть реальные векторы, запустите это: можно прям с телефона на вход, есть WAV (https://yadi.sk/d/TpzVOT1isDtwlg) - и напишите что увидите - если синий екран с желтыми символами - то на входе 0, если вертикально бегущие ряды текста белого цвета - то 1.. Заранее благодарен.

Improver
09.04.2020, 09:58
Все таки допускаю, что у меня вектор особенный, тогда есть просьба, всем у кого есть реальные векторы, запустите это: можно прям с телефона на вход, есть WAV - и напишите что увидитеОк, вижу вертикально бегущие ряды белых символов на чёрном фоне, значит 1:
72108

А это при наличии сигнала на входе:
72109

electroscat
09.04.2020, 20:03
Ок, вижу вертикально бегущие ряды белых символов на чёрном фоне, значит 1:
72108

А это при наличии сигнала на входе:
72109

Спасибо !!!

У меня уникальный Вектор !!! :v2_dizzy_turn:

dbk
12.04.2020, 11:30
Хочу поднять снова эту тему, хотя бы немного...
[skip]
Все таки допускаю, что у меня вектор особенный, тогда есть просьба, всем у кого есть реальные векторы, запустите это: можно прям с телефона на вход, есть WAV (https://yadi.sk/d/TpzVOT1isDtwlg) - и напишите что увидите - если синий екран с желтыми символами - то на входе 0, если вертикально бегущие ряды текста белого цвета - то 1.. Заранее благодарен.

https://youtu.be/LDaXWcwZco0

electroscat
12.04.2020, 13:22
Доброго времени !

Спасибо огромное ! Скорее всего компараторы имеют разную чувствительность, у моего вектора чувствительность очень небольшая, в итоге, он иногда дает 1 на выходе только когда держишься пальцем за сигнальный провод, являясь антенной для наводок ))) В некоторых случаях на вход без кабеля наводки не действуют а с кабелем действуют, в некоторых - наводки наверняка действуют даже на дорожки от компаратора к разьему входа. В моем векторе корпус металлизирован изнутри, и заземлен, это полностью исключает такую возможность.. Но на качество ввода программ с кассеты это вроде не влияет..

В любом случае разобрался с этим, все таки программа теперь реагирует на изменения а не на абсолютное значение, теперь не важно, 0 на входе или 1... Если это повторяется - реакции нет. Отказался от идеи набирать буфер и вычислять среднее от разницы, поступил проще - регистр "С" является битом буфера, и с битом только полученным сравнивается пред идущий бит... Этого вполне достаточно, реакция программы в целом удовлетворительная. Залил программы в яндекс по ссылке (https://yadi.sk/d/p8ZXTM_ZPeidCQ). Там теперь 6 программ, те которые без "-BOOT" в названии это вариант для загрузчика, с синей заставкой и желтыми значками в режиме паузы (отсутствия сигнала) - они написаны для загрузки из загрузчика вектора. Те которые без "-BOOT" - там соответственно в режиме отсутствия сигнала просто черный экран.

Ну и между делом, рас уж все получилось - загрузчик для вектора "вектор-06ц-2020" (https://yadi.sk/d/Da_D6vfaeuGB3w) на базе Timsoft 32к...

https://sun9-71.userapi.com/c855616/v855616853/21b345/uJImVrTuqTw.jpg

наваял... , "все включено". Постарался стилизовать все программы под загрузчик "Вектора" в сине - желтый (жовто-блокитний) цвет. Если кому не нравится дос в таком стиле - команда "0 FF P" все исправит.
Клавиши управления, если держать эту клавишу или комбинацию при старте вектора, или при нажатии "ВВОД+БЛК":

F3 - загрузка FH51-LBA MicroDOS 3.1 H mod V2.0 ...надеюсь скоро заменить этот дос на дос T-72H, над которым сейчас работает Improvert (https://zx-pk.ru/members/8649-improver.html), над "пропатчить mdos31h" работы ведутся. На данном этапе в ПЗУ загрузчика встроен FH51-LBA без завороа с 41й дискеты (!)...

F4 - загрузка "тест технологического прогона"

F5 - загрузка "тест квазидиска"

F3+F4 - загрузка СM - программа ЦМУ - реагирует на изменения сигнала на аудиовходе вектора, вариант со сменными пиксельными блоками.

F3+F5 - загрузка СM_MM - программа ЦМУ - реагирует на изменения сигнала на аудиовходе вектора, вариант с санскритским текстом махамантры.

F4+F5 - загрузка СMU_DOS - программа ЦМУ - реагирует на изменения сигнала на аудиовходе вектора, вариант просто с кубиками, самый быстрый ...

F3+F4+F5 - загрузка теста AY-3-8910 и YM-2149F

Приоритет загрузки изменился, теперь такая последовательность:

1. Квазидиск
2. HDD
3. FDD
4. Сетевое подключение
5. блок внешнего ПЗУ
6. Кассета

То есть если на квазидиске загрузчик видит системные файлы - грузит от туда, если там нет - ищет их на HDD (вместо дисковода как раньше), грузит от туда, если там нету, то с FDD, если нету на FDD - то проверяет наличие сетевого подключения, если такового нет - ищет блок внешнего ПЗУ, и если нет ПЗУ - то ждет загрузки с кассеты. Этот сценарий работает если не нажаты клавиши при старте, с указанием конкретного места загрузки, если указанного клавишами места загрузки не существует - то работает этот сценарий в порядке убывания с 1 пункта.

Для программ ЦМУ - клавиши управления

УС - включение автоматической смены пикселных блоков (в CM-MM по умолчанию, в CMU-DOS отсутствует)

СС - изменение пиксельного блока, не работает если включена автосмена, в CMU-DOS отсутствует)

РУС. - изменение палитры пиксельных блоков.

для программ без "-BOOT" - комбинация клавиш "УС+СС" выход в mDOS.

Все это работает в эмуляторе, для "Башкирии" есть файл конфигурации по ссылке (https://yadi.sk/d/Da_D6vfaeuGB3w), в этом файле конфигурации так же прописан жесткий диск от сюда (https://yadi.sk/d/wrH30lL4UGK_3Q). Если положить файл жесткого диска и файл загрузчика в папку "Vector06c" в папке эмулятора "emu", и скопировать файл конфигурации в папку "config" там же в "emu" - все заработает.
При отсутствии жесткого диска (например в VVector) операционная система естественно не загружается, только синий экран. Все остальное работает.

На реальном векторе еще не проверял, заказал микросхем несколько разновидностей и емкостей на али, жду когда прийдут.

Если есть возможность потестить, то пожалуйста, попробуйте..

Вот небольшой ролик с демонстрацией возможностей загрузчика и некоторым заделом на будущее.


https://youtu.be/BNj4r294vlU

Спасибо!

Improver
13.04.2020, 08:31
Скорее всего компараторы имеют разную чувствительностьХочу обратить внимание, что существовало минимум два варианта входной схемы на Векторах: на компараторе СА3 и на операционном усилителе, поэтому и чувствительность может немного отличаться, и быть отличия в сигнале 0 или 1 на входе ВВ55. Естественно, эти все отличия никак не влияли на чтение цифрового сигнала с магнитофона, но на цветомузыку вполне могут влиять.

dbk
15.06.2020, 16:19
Глупость спрошу:
При разработке программ на ассемблере кто какие костыли использует/использовал для конвертации txt (ibm dos) -> wav (формат монитора или ассемблер-редактора), неужели ручками все листинги набивали?

svofski
16.06.2020, 12:10
bin2wav (https://github.com/svofski/bin2wav/releases/latest) поддерживает форматы монитора и EDASM, это не то?

dbk
16.06.2020, 18:16
bin2wav (https://github.com/svofski/bin2wav/releases/latest) поддерживает форматы монитора и EDASM, это не то?
Вячеслав, смотрите, что я имел ввиду: в данный момент в свободное время обложился старыми книжкам по i8080 и потихонечку ковыряю программирование под Вектор. Где-то год назад уже решал задачу, которую так и не решил в детстве по программированию на Ассемблере с использованием только системного ПО предоставленным на комплектной кассете, с помощью участников формуа разумеется всё решилось, всё нормально, всё получается )
Но комплектный Ассемблер-редактор откровенно кривой до ужаса ))) Выяснил, что есть разница в нажатии одноменно АР2+O и последовательно АР2 и O )))) Опыт общения с более современным ПО как-то налагает какой-то отпечаток ))) не поясню какой, но всё же ))) Поэтому пришла шальная идея, мол кто-то уже решал задачу набора программы для векторовского ассемблера на обычном pc в plain text, ну и переводом его в wav для последующей загрузки в Ассемблер-редактор )))) такой вот костылик. Написал тестовичек *.asm скормил тулзе и получил bin или сразу wav пригодный сразу для загрузки в Ассемблер-редактор.

Я видел, что вы пишете под Вектор с помощью pretty assembler, но вот честно, я пока не совсем врубился каким образом его использовать для написания программ не под МикроДОС.

Кстати Virtual Vector жутко тормозит, по сравнению с emu80qt! и это притом, что у меня core2quad, хоть старенький, но полный.
Зато в первом, хоть через костыль audio recorder-а, но можно по АР2+0 выгружать программы (загружать через АР2+I), а вот в emu80 пока рекордер у меня не работает, хоть "Перехват магнитофона" и включен ( вроде автору уже написал, авось поправит.

svofski
16.06.2020, 18:52
Понятно. Я просто не знаю, какой именно формат нужен этому самому Ассемблер-редактору, но может быть его устроит v06c-mon или v06c-edasm из тех, что у меня поддержаны.

В Прекрасном дефолтная рыба — как раз пример программы под МикроДОС. Если нажать RUN, он сделает образ диска и запустит эмулятор с ним. Если нажать BIN, скачается test.com -- это исполняемый файл для МикроДОС. Как его засунуть в реальный МикроДОС я на самом деле не подскажу, но по-моему LOADDOS/SAVEDOS тут не спроста http://sensi.org/scalar/ware/693/

Еще есть команда МикроДОС "2", только я не знаю в каком формате она хочет файлы.


2 N [V:]ИМЯ.ТИП - копирует N файлов с именем ИМЯ.ТИП с магнитной
ленты на диск. Имя файла может быть задано в
неявном виде.
Пример,
2 3 *.*
Копирует 3 первые файла с магнитной ленты.


У меня совсем нету опыта разработки в таком режиме, поэтому без форсированного погружения в тему не могу подсказать точнее.

ivagor
16.06.2020, 19:04
Команде 2 Микродоса (там где она есть) нужны файлы в формате DOS, например выгруженное по SAVEDOS.
Ассемблеру-редактору нужны файлы в формате EDASM.
Простейшие программы для дос (только выводящие на экран и работающие с клавиатурой) можно запускать в мониторе-отладчике, там встроенный "эмулятор дос".

KTSerg
16.06.2020, 19:21
... Поэтому пришла шальная идея, мол кто-то уже решал задачу набора программы для векторовского ассемблера на обычном pc в plain text, ну и переводом его в wav для последующей загрузки в Ассемблер-редактор )))) такой вот костылик. ...
Извиняюсь за не скромный вопрос, а для чего загружать ассемблерный текст (набранный на РС) программы в Ассемблер-редактор ?
Это "фишка" какая-то, или я что-то упустил... ?


Кстати Virtual Vector жутко тормозит, по сравнению с emu80qt! и это притом, что у меня core2quad, хоть старенький, но полный.
Чаще пользуюсь эмулятором emu (от b2m), комп IP4, может настройки какие-то менял, загрузка процессора около 30% при emu. Эмулятор VV загружает на 80-90% и это с настройкой пропуска кадров "Auto Frame Skip", без неё действительно тормозит очень.

dbk
16.06.2020, 19:30
Извиняюсь за не скромный вопрос, а для чего загружать ассемблерный текст (набранный на РС) программы в Ассемблер-редактор ?
Это "фишка" какая-то, или я что-то упустил... ?
Да не фишка. Просто я пока другой методики удобного написания на ассемблере для себя не нашел. Ищу.
Стандартным, описанным в комплектном мануале и у Лебедева понятно как, как писал svofski из исходников тоже вроде понял, с виндой/досом какая методика?! 100% пишут же не так как описано в вышеуказанных книгах.

KTSerg
16.06.2020, 19:50
Да не фишка. Просто я пока другой методики удобного написания на ассемблере для себя не нашел. Ищу.
...
На РС в FAR, на файле *.asm жму F4, редактирую ассемблерный текст.
Выхожу из редактора с сохранением.
Рядом с *.asm есть файл *.bat , в котором прописан запуск "TASM Assembler" (Tasm32) - получаю *.obj файл (он-же *.rom после переименования).
Нажимаю (в FAR) на файле *.rom последовательно "F2" "v" (настроено пользовательское меню, запуск файла в эмуляторе).
И наслаждаюсь результатом, ну или не наслаждаюсь, если выплыли косяки...
Это если пишу программу не под ДОС.
Если под ДОС, по перед её запуском с помощью эмулятора VV можно создать дискету с той программой, которую пишем. И запустить программу с дискеты уже из под ДОС, в эмуляторе, который удобнее или привычнее.

Что упустил?

dbk
16.06.2020, 20:02
На РС в FAR, на файле *.asm жму F4, редактирую ассемблерный текст.
Выхожу из редактора с сохранением.
Рядом с *.asm есть файл *.bat , в котором прописан запуск "TASM Assembler" (Tasm32) - получаю *.obj файл (он-же *.rom после переименования).

По выделенному: это The Telemark Assembler ? если да, то поделитесь пожалуйста definition table для i8080 тот который удалось нарыть, его не содержит, а для i8085 и тем более z80 я так понимаю не подойдет для кросскомпиляции i8080?


Если под ДОС, по перед её запуском с помощью эмулятора VV можно создать дискету с той программой, которую пишем. И запустить программу с дискеты уже из под ДОС, в эмуляторе, который удобнее или привычнее.
Что упустил?
Ну так глубоко пока рановато ) но за подсказку спасибо

KTSerg
16.06.2020, 20:19
По выделенному: это The Telemark Assembler ? если да, то поделитесь пожалуйста definition table для i8080 тот который удалось нарыть, его не содержит, а для i8085 и тем более z80 я так понимаю не подойдет для кросскомпиляции i8080?
Упс, а я всю жизнь с опцией -85 компилирую... :)
Не замечал, чтобы Вектор не сделал то, что я хочу... Может я просто не использую инструкции 85-го...


Ну так глубоко пока рановато ) но за подсказку спасибо
А там ни чего сложного.
Запустил VV, вошел в меню эмулятора, выбрал в меню: Файл -> Диск А: -> открыть папку как FDD образ, выбрал папку.
Всё, автор эмулятора позаботился, эмулятор сам создаёт образ дискеты из выбранной папки. А потом этот файл образа можно указать для дисковода (в другом эмуляторе, если нужно)...

dbk
16.06.2020, 20:32
Упс, а я всю жизнь с опцией -85 компилирую... :)
Не замечал, чтобы Вектор не сделал то, что я хочу... Может я просто не использую инструкции 85-го...
Вот, что значит мозги заплывшие соплями юзеров ))) и точно )))



А там ни чего сложного.
Запустил VV, вошел в меню эмулятора, выбрал в меню: Файл -> Диск А: -> открыть папку как FDD образ, выбрал папку.
Всё, автор эмулятора позаботился, эмулятор сам создаёт образ дискеты из выбранной папки. А потом этот файл образа можно указать для дисковода (в другом эмуляторе, если нужно)...
)))))))

b2m
16.06.2020, 20:50
Если под ДОС, по перед её запуском с помощью эмулятора VV можно создать дискету с той программой, которую пишем.
Если пользуешься FAR-ом, то удобнее использовать мою утилитку KDI (http://bashkiria-2m.narod.ru/files/kdi.rar). Это типа архиватора для образов дисков, поддерживаются образы для Корвета,Ориона,Вектора. Единственный недостаток - не создаёт пустых образов, нужен готовый. Подключать нужно в файле ..\Far\Plugins\MultiArc\Formats\custom.ini, саму утилиту положить в каталог, куда путь для запуска есть. После этого можно заходить внутрь образа как в архив.
Настройки для custom.ini

[KDI]
Extension=kdi
List="kdi l"
Format0="nnnnnnnn.nnn zzzzzzzz"
Extract=kdi x %%A %%fWQ %%fP
ExtractWithoutPath=kdi x %%A %%fWQ %%fP
Delete=kdi d %%A %%fWQ
Add=kdi a %%A %%fWQ

[ODI]
ID=01 01 03 01 05 00 50 00
IDPos=8
IDOnly=1
Extension=odi
List="kdi l"
Format0="nnnnnnnn.nnn zzzzzzzz"
Extract=kdi x %%A %%fWQ %%fP
ExtractWithoutPath=kdi x %%A %%fWQ %%fP
Delete=kdi d %%A %%fWQ
Add=kdi a %%A %%fWQ

[FDD]
Extension=fdd
List="kdi l"
Format0="nnnnnnnn.nnn zzzzzzzz"
Extract=kdi x %%A %%fWQ %%fP
ExtractWithoutPath=kdi x %%A %%fWQ %%fP
Delete=kdi d %%A %%fWQ
Add=kdi a %%A %%fWQ

svofski
16.06.2020, 20:55
Команде 2 Микродоса (там где она есть) нужны файлы в формате DOS, например выгруженное по SAVEDOS.
Тогда bin2wav это может, -m v06c-savedos

KTSerg
17.06.2020, 06:25
Если пользуешься FAR-ом, то удобнее использовать мою утилитку KDI (http://bashkiria-2m.narod.ru/files/kdi.rar). ...
Спасибо.
Вроде с чем-то подобным пытался разбираться, но что-то шло не так.
Там на сайте есть ещё два плагина для Far (для Вектора) для работы с образами, они функциональны?

Кстати, этот плагин файлы размером 16КБ корректно добавляет в каталог (с пустой записью):

A040: 00 53 50 49 43 48 20 20 │ 20 52 4F 4D 00 00 00 80 SPICH ROM
A050: 07 00 08 00 09 00 0A 00 │ 0B 00 0C 00 0D 00 0E 00
A060: 00 53 50 49 43 48 20 20 │ 20 52 4F 4D 01 00 00 00 SPICH ROM
A070: 00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00

dbk
17.06.2020, 08:41
В дополнение:

На РС в FAR, на файле *.asm жму F4, редактирую ассемблерный текст.
Выхожу из редактора с сохранением.
Рядом с *.asm есть файл *.bat , в котором прописан запуск "TASM Assembler" (Tasm32) - получаю *.obj файл (он-же *.rom после переименования).

Поправьте если я не прав, но этот полученный после ассемблирования .obj (у меня он имеет формат intel hex (https://ru.wikipedia.org/wiki/Intel_HEX)) нужно еще с помощью hex2bin (http://gnuwin32.sourceforge.net/packages/hex2bin.htm) переводить в бинарник, а потом уже его переименовав в .rom подсовывать в эмулятор (как просто скормив .rom, так и с помощью rom2wav и Wav2Csw перегонять в формат необходимый для работы в эмуляторах тот же Virtual Vector, emu80

KTSerg
17.06.2020, 09:06
В дополнение:

Поправьте если я не прав, но этот полученный после ассемблирования .obj (у меня он имеет формат intel hex (https://ru.wikipedia.org/wiki/Intel_HEX)) ...
Не помню уже, нужно посмотреть описание опций ТАСМ.
У меня батники такого содержания:

tasm -85 -B -L keyb_1.asm
copy /y /b keyb_1.obj keyb_1.rom

"copy" стоит для универсальности т.к. иногда "rom" собирается копированием из нескольких разных файлов.

dbk
17.06.2020, 09:15
Не помню уже, нужно посмотреть описание опций ТАСМ.
У меня батники такого содержания:
"copy" стоит для универсальности т.к. иногда "rom" собирается копированием из нескольких разных файлов.
спасибо. Ключик /b в хелпе tasm-а, я так и не разглядел ) пришлось ковырять через костыль.

ktserg, если вам будет не трудно, а можете дать исходник "каноничного" hello world для голого вектора (т.е. без МикроДОСа и прочей "шелухи")?!

b2m
17.06.2020, 09:26
Там на сайте есть ещё два плагина для Far (для Вектора) для работы с образами, они функциональны?
Не для Вектора. Один для образов Башкирии-2м, там в одном образе два диска (каждая сторона - один логический диск). Другой я делал для образов БК-0010, но им можно пользоваться и для других дисков с FAT, однако запись в подкаталоги он не поддерживает. Они тоже фукциональны, но особого контроля нет, так что на некорректных файлах иногда вылетают.

KTSerg
17.06.2020, 09:43
Не для Вектора.
Ясно.

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

ivagor
17.06.2020, 09:44
исходник "каноничного" hello world для голого вектора
Лучше сразу уточнить, чем не устраивает исходник hello world в одной из рыб прекрасного ассемблера svofski

KTSerg
17.06.2020, 10:03
спасибо. Ключик /b в хелпе tasm-а, я так и не разглядел ) пришлось ковырять через костыль.

ktserg, если вам будет не трудно, а можете дать исходник "каноничного" hello world для голого вектора (т.е. без МикроДОСа и прочей "шелухи")?!
:)
Для голого Вектора, "hello world!" - можно несколькими путями:
1. Нарисовать эту надпись точками, перевести их в байты, собрать эти байты в спрайт, написать малюсенькую программу вывода спрайта на экран, прицепить к программе спрайт. Запустить и наслаждаться.
2. Написать несколько функций: прерывания ( программирование цвета и опрос клавы (клаву можно не опрашивать)), вывода символа на экран, вывода строки, прицепить к программке знакогенератор. Запустить и наслаждаться.
3. Найти в картотеке Вектора (http://sensi.org/scalar/ware/575/) так называемые "Драйверы устройств". Это готовая библиотека всевозможных функций. На основе этой библиотеки даже игрушки для вектора делали. В этих Драйверах уже есть всё необходимое. Останется написать программку, которая просто вызывает нужные функции с нужными параметрами. Программка получится большая, т.к. сами драйвера не маленькие, но самому эти функции (вывода текста, и пр.) писать не нужно (нужно только разобраться, как их вызывать).
4. Начать можно с изучения текстов умных людей:
http://www.sensi.org/scalar/ware/563/
Там есть файл secrets.txt очень полезная штука.

svofski
17.06.2020, 10:22
Лучше сразу уточнить, чем не устраивает исходник hello world в одной из рыб прекрасного ассемблера svofski

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

* Hello world (https://svofski.github.io/pretty-8080-assembler/?vector06c)
* Проявление Павиана (https://svofski.github.io/pretty-8080-assembler/?baboon-dissolve)
* Быстрая линия (https://svofski.github.io/pretty-8080-assembler/?line-ei)
* Окружность по алгоритму Мичнера (https://svofski.github.io/pretty-8080-assembler/?circle)
* Дуги окружности (https://svofski.github.io/pretty-8080-assembler/?circlearc)
* Эллипсы с клиппингом (https://svofski.github.io/pretty-8080-assembler/?circleellip)

Кроме того, все эти файлы лежат в репозитории (https://github.com/svofski/pretty-8080-assembler).

dbk
17.06.2020, 10:27
Лучше сразу уточнить, чем не устраивает исходник hello world в одной из рыб прекрасного ассемблера svofski ну как минимум тасмом не компилируется в лоб. Конечно правлю исходник потихоньку, но есть не понятные места.

Ладно, буду курить Лебедева, спасибо. Как-то я про него совсем забыл.


Я боюсь, что тут я сам виноват, потому что применение рыбы в ассемблере может быть не очевидно тем, кто не часто ее готовит.Все нормально, я в курсе как менять "рыбу" )

ivagor
17.06.2020, 10:37
Адаптация prettyasm->tasm несложная.
1. Убираем лишнее (.project и .tape)
2. Добавляем определения для замены (подсмотрены у b2m)
#define ORG .org
#define END .end
#define EQU .equ
#define DB .db
#define DW .dw
#define DS .ds

KTSerg
17.06.2020, 10:44
ну как минимум тасмом не компилируется в лоб. Конечно правлю исходник потихоньку, но есть не понятные места.
...
Так ведь сам "прекрасный" и компилирует, нажал кнопку "BIN" и скачал себе уже готовый *.rom .
А то и сразу "RUN" - запустил в эмуляторе.
Или я не прав?

dbk
17.06.2020, 10:54
Так ведь сам "прекрасный" и компилирует, нажал кнопку "BIN" и скачал себе уже готовый *.rom .
А то и сразу "RUN" - запустил в эмуляторе. Или я не прав?
Прав, но хотел скомпилировать именно с помощью tasm-а


2. Добавляем определения для замены (подсмотрены у b2m)
Спасибо.

ivagor
17.06.2020, 11:10
А я сам покритикую рыбу hello world. Для учебного примера возможно стоит вывод символов сделать попроще, без стека и необходимости запрещать прерывания.
Если отвлечься от рыбы и принять, что программа будет загружаться в магнитофонный загрузчик, то можно обойтись без прерываний и без программирования палитры. Только надо рисовать в плоскости C000-DFFF. Есть даже примеры игрушек (http://www.sensi.org/scalar/author/181/), сделанных в таком стиле.

dbk
17.06.2020, 11:19
Да уж, опечаток в тесте есть немного ) в использовании меток и не только, но скомпилировалось )
Работать правда не заработало, но это уже буду вечером смотреть, что не так.
УРАААААААААА!!! )))) Какая прелесть, оно заработало! )))) И еще пищит сволочь ))))

Для тех кто будет повторять ORG 1800h замените на ORG 100h , дело было не в этом, я просто как обычно через одно место попытался запустить, но просто напоминаю, что при запуске как обычное приложение нужно править исходник.

Компиляция tasm32 с ключём -i
Всем спасибо.

Что-то криво вставился правленный исходник Секретов Вектора под спойлер, поэтому приаттачиваю архив со всем необходимым для компиляции (win10 x64 полет нормальный).
Еще раз всем спасибо кто помогал разбираться с поставленной задачей.

svofski
17.06.2020, 19:16
А я сам покритикую рыбу hello world. Для учебного примера возможно стоит вывод символов сделать попроще, без стека и необходимости запрещать прерывания.
Если отвлечься от рыбы и принять, что программа будет загружаться в магнитофонный загрузчик, то можно обойтись без прерываний и без программирования палитры. Только надо рисовать в плоскости C000-DFFF. Есть даже примеры игрушек, сделанных в таком стиле.

Что до использования стека, тут соглашусь, но мне лень переделывать то, что работает. Хотя вообще это все-таки не учебник, а просто на Векторе нет принципиально более легкого способа написать HELLO WORLD. Выбрасывать программирование палитры в Векторовских реалиях — это какое-то тяжкое зло. Исторически неказистые игры уж точно не пример для подражания. Наоборот лучше дополнить рыбу и вместо слегка зашифрованного кода set_palette, который там сейчас, сделать пример, в котором очевидным образом задаются значения R, G, B.

b2m
17.06.2020, 19:29
Компиляция tasm32 с ключём -i
Я компилирую так: tasm.exe -85 -b -q -f0 %1.asm %1.com nul
Сразу в бинарник, никаких лишних файлов.

dbk
17.06.2020, 21:45
Я компилирую так: tasm.exe -85 -b -q -f0 %1.asm %1.com nul
Сразу в бинарник, никаких лишних файлов.
b2m, подскажите, а зачем вы используете параметр -f0 ?

b2m
17.06.2020, 23:36
Чтобы были нули в неиспользуемых местах (DS или если текущий адрес через ORG сдвигается).

dbk
18.06.2020, 07:13
Чтобы были нули в неиспользуемых местах (DS или если текущий адрес через ORG сдвигается).
Это я понимаю, что неисползуемое нулями забивается. А для чего? Для удобства последующей, к примеру, упаковки?

ivagor
18.06.2020, 07:57
-f0 не особо нужен, по умолчанию tasm заполняет "пустые" места нулями.

b2m
18.06.2020, 09:50
Командная строка осталась ещё со времён ДОСовского варианта, наверное уже не нужно. Вопрос в том, как винда выделяет память. У меня в эмуле тоже насильно не обнуляется, но почти вся память в эмулируемом компе забита нулями, кроме первых нескольких байт.

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

Данная опция полезна для ПЗУ, можно неиспользуемые места забивать байтом FF.

KTSerg
16.08.2020, 15:01
Кто знает, есть ли в Векторе скрытые регистры, которые можно использовать как ячейки памяти?
В которые можно было-бы записать произвольные значения.
Например можно-ли остановить ВИ53 и использовать регистры каналов как 6 Байт памяти?

Improver
16.08.2020, 17:20
KTSerg, часы реального времени, например, на КР512ВИ1 имеют 50байт памяти, но вот только эти сами часы на Векторе практически не встречаются.

nzeemin
02.06.2021, 23:10
Вроде бы в эту тему.

Допустим, я хочу написать жутко динамическую игру.
Для этого я собираюсь использовать под игровое поле поочерёдно то план 0 то план 1, план 2 скажем будет под индикаторы, план 3 не показывается.
Включать/выключать планы 0/1 я собираюсь конечно палитрой.
Вопрос - как это правильно организовать?

Правильно ли я понимаю, что цикл игры должен завершаться hlt и затем сразу установка палитры - переключение планов.
Или же лучше поместить включение нужной палитры прямо в прерывание, сразу после установки режимов дисплея?
Или можно и так и так?

ivagor
03.06.2021, 11:11
Или можно и так и так?
Можно и так и так. Немного капитанства - если программирование палитры в основном обработчике прерываний, но реально все время программировать палитру 50 раз в секунду не нужно, организуем флаг необходимости программирования палитры и проверяем его в обработчике (или jmp с модифицируемым адресом).

nzeemin
03.06.2021, 19:11
Можно и так и так. Немного капитанства - если программирование палитры в основном обработчике прерываний, но реально все время программировать палитру 50 раз в секунду не нужно, организуем флаг необходимости программирования палитры и проверяем его в обработчике (или jmp с модифицируемым адресом).

Спасибо.
Процессор работает на частоте 3 МГц, получается на один фрейм 60000 циклов процессора - или меньше?
Где можно посмотреть табличку циклов процессора по операциям?
По поим наблюдениям, очистка одного плана экрана через push занимает больше одного фрейма - это норм или я накосячил?

x-code
03.06.2021, 19:45
получается на один фрейм 60000 циклов процессора - или меньше?
Где можно посмотреть табличку циклов процессора по операциям?

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

ivagor
03.06.2021, 20:09
получается на один фрейм 60000 циклов процессора - или меньше?
312 строк*192 такта=59904 такта/фрейм.

Где можно посмотреть табличку циклов процессора по операциям?
Например здесь (http://www.sensi.org/scalar/ware/572/) в вектор-user 15, правда там есть пара-тройка опечаток. Где-то был исправленный вариант, кажется svofski выкладывал (не в картотеке).

По поим наблюдениям, очистка одного плана экрана через push занимает больше одного фрейма - это норм или я накосячил?
Если полностью развернуть цикл очистки (что конечно не стоит делать), получится 16 тактов*4096 команд=65536 тактов, т.е. немного больше длительности фрейма.

svofski
04.06.2021, 12:28
Например здесь в вектор-user 15, правда там есть пара-тройка опечаток. Где-то был исправленный вариант, кажется svofski выкладывал (не в картотеке).
Речь вот об этой табличке: https://github.com/svofski/vector06cc/wiki/Instruction_Timings

metamorpho
18.11.2021, 17:02
Пытаюсь сократить свою демку (для ДЕМОДУЛЯЦИЯ 2021 - нужно не больше 256 байт) и вот дошёл до программирования палитры цветов.

Вот установка палитры из программы прерываний (взято у Лебедева из "Секреты Вектора")
Что можно в ней сократить ?
В основном я имею ввиду команду OUT 0CH
поскольку у Лебедева 8 раз прописана OUT 0CH (для надёжности т.к. некоторые Векторы имели плохую запись в ОЗУ цветогенератора)
в тоже время у Черезова всего лишь 3 раза OUT 0CH
а просматривая исходники других авторов я видел даже 2 раза OUT 0CH

Эмулятор и с одного раза OUT 0CH пишет как надо. Но не знаю на ДЕМОДУЛЯЦИИ на чём будут запускать - на реальном Векторе или на эмуляторе.

Где золотая середина ? :)

;========================
MVI A,88H
OUT 00H
LXI H,COLR15 ; ЗАПИСЬ ПАЛИТРЫ.
LXI D,100FH ; d=16 e=15
INIT1: MOV A,E
OUT 02
MOV A,M
OUT 0CH
OUT 0CH
OUT 0CH
OUT 0CH
OUT 0CH
DCX H
OUT 0CH
DCR E
OUT 0CH
DCR D
OUT 0CH
JNZ INIT1
mvi a,15 ; УСТАНОВКА ЦВЕТА БОРДЮРА
OUT 02
;========================



Ещё вопрос, что будет если квазидиск подключен, а в коде вот этих начальных настроек нету, будет ли это мешать исполнению программы ?
XRA A ;ВЫКЛ. ОЗУ КВАЗИДИСКА.
OUT 10H

Improver
18.11.2021, 17:19
Что можно в ней сократить ?
В основном я имею ввиду команду OUT 0CH
поскольку у Лебедева 8 раз прописана OUT 0CH (для надёжности т.к. некоторые Векторы имели плохую запись в ОЗУ цветогенератора)
в тоже время у Черезова всего лишь 3 раза OUT 0CH
а просматривая исходники других авторов я видел даже 2 раза OUT 0CHЕсли глянуть исходники МДОС Т-72, то там палитру тоже устанавливали за два раза, но между ними была небольшая задержка:

...
L_F613: OUT 00Ch ; палитра -- установка физического цвета
PUSH PSW
POP PSW
PUSH PSW
POP PSW
DCR E
DCR D ; (счётчик -1)
OUT 00Ch ; палитра -- установка физического цвета, ещё раз
...Думаю, такой вариант можно считать оптимальным и по скорости, и по объёму.


Ещё вопрос, что будет если квазидиск подключен, а в коде вот этих начальных настроек нету, будет ли это мешать исполнению программы ?
XRA A ;ВЫКЛ. ОЗУ КВАЗИДИСКА.
OUT 10HВсе ПЗУ на Векторах, как правило, имели при запуске команду отключения КД. Кроме того, квази-диск отключает БЛК-СБР -- там это сделано аппаратно, таким образом, если демку будут запускать, например, загрузкой "с ленты", или из загрузочной записи дискеты, то можно этот момент пропустить, а если из под МДОСа -- то эти команды обязательны.

ivagor
18.11.2021, 18:13
SetPal:
lxi h,COLR15
mvi e,15
SetPalLoop:
mov a,e
out 2
mov a,m
out 0Ch
xthl
xthl
dcx h
dcr e
mov a,a
out 0Ch
jp SetPalLoop
но это вариант "общего назначения", в микродеме как правило можно еще сократить за счет трюков.

metamorpho
18.11.2021, 20:59
Improver, ivagor спасибо !!

ivagor, а какое назначение команд xthl и mov a,a ? Это чтобы просто паузу создать между двумя out 0Ch ?

ivagor
18.11.2021, 21:08
Да, нужно обойти "зоны непрограммируемости". Если временно отвлечься от темы оптимизации по размеру, то есть и оптимальный по скорости вариант (http://www.sensi.org/scalar/ware/874/), там для каждого цвета out 0Ch только один раз.

metamorpho
19.11.2021, 20:23
Для сокращения кода хочу убрать следующие команды при инициализации программы
;MVI A,0C3H ; установить переход (код команды JMP) в
;STA 0038H ; адрес вызова прерывания.
;LXI H,INIT ;УСТАНОВКА ВЕКТОРА ПРЕРЫВАНИЯ.
;SHLD 0039H

Допустимо ли такой вариант ORG 0031h ?
Пока что у меня чёрный экран выходит.

;==================================
ORG 0031h
STRINT: DI
LXI SP,7E03h ;100H
jmp Progrm
;=================================== обработка прерываний
INIT:
PUSH PSW
.......................
POP PSW
EI
RET ; выход из прерываний
;================================================= СТАРТ ПРОГРАММЫ
Progrm:
EI
lxi h, 0e000h ; куда в экран
...............
;==================================

Improver
19.11.2021, 20:58
Допустимо ли такой вариант ORG 0031h ?Да, вполне допустимо. Только какой смысл начинать программу с 0031h? Можно начать с нулевого адреса и до 0038h накидать ещё команд...

ivagor
19.11.2021, 21:11
С ORG 0031h это вопрос скорее к организаторам конкурса, какие векторовские форматы они принимают и как (откуда) будут запускать демы. Если допустима загрузка с магнитофонного входа, то стартовый адрес д.б. кратен 256 байтам. Если запуск из доса, то два варианта - или 100h (com/rom) или, если с "запускалкой", r0m (согласны ли организаторы использовать запускалку?). Грузить с (более-менее) произвольного адреса можно в монитор-отладчик или, например, эмулятор РК/Микроши. Опять же - организаторы согласны на это? И, кстати, если грузить в монитор отладчик затирая вектор прерываний, то это скорее всего закончится не вполне хорошо.

metamorpho
23.11.2021, 11:17
SetPal:
lxi h,COLR15
mvi e,15
SetPalLoop:
mov a,e
out 2
mov a,m
out 0Ch
xthl
xthl
dcx h
dcr e
mov a,a
out 0Ch
jp SetPalLoop

но это вариант "общего назначения", в микродеме как правило можно еще сократить за счет трюков.


Какие есть трюки в ассемблере ?

Например для сокращения кода я использую такой
вместо lda nnnn/inr a/sta nnnn
пишу lxi h,nnnn/inr m
экономия 3 байта

А что ещё есть из трюков ?

ivagor
23.11.2021, 12:09
вместо lda nnnn/inr a/sta nnnn
пишу lxi h,nnnn/inr m
Не назвал бы это трюком, я несколько о другом.
Например можно расположить палитру в памяти с адреса кратного 256 (100h) и тогда не нужен отдельный счетчик цветов (тут я не обязательно про дему в 256 байт). Убираем mvi e,15; dcr e; меняем dcx h на dcr l. Можно этот трюк модифицировать и для некоторых других адресов. Подобные придумки перечислить в рамках форумного поста вряд ли возможно.

Improver
23.11.2021, 12:24
А что ещё есть из трюков ?Вопрос и простой и сложный одновременно... Трюков, вроде, не так много, но определённого их сборника или каталога нет, перечислять их тут -- как написать книгу. :) Попробуйте посмотреть в каталоге Базис периодические (http://www.sensi.org/scalar/categories/document/) и электронные издания (http://www.sensi.org/scalar/categories/e-zine/): Вектор-User, Байт, Scaner, InVector и др., там встречалось много советов по программированию, и спрашивайте конкретные моменты тут, посоветуем, как лучше.

reddie
23.11.2021, 15:53
А что ещё есть из трюков ?
Ответ можно разбить на две части: собственно программные трюки под конкретный проц - раз; учет аппаратных особенностей компа - два.

8080, конечно, не совсем Z80, но кое-какие мысли изложу, а что подойдет для Вектора - кодерам под 8080 виднее.
Именно для компактности кода, а не скорости исполнения, забываем про развернутые циклы и подобные "бусты" на скорость.
Начинаем с выравнивания кода и данных по "ровным" HEX-адресам, а также циклов (с некоторыми допущениями).
Для циклов это избавит в части случаев от задания количества повторов цикла в регистре, либо сверки его с конкретным числом.
Например, заполняем некую область данными, при этом на старте HL=#XX00, нам нужно забить 100/128/200 байт. Ниже коды Z80, но общий смысл, думаю, будет понятен.
Можно организовать цикл на 100 (или сколько там) повторений, а можно просто увеличивать регистр L, пока он не обнулится. То бишь конструкцией вида INC L: JR NZ,repeat.
Аналогично, проверяя аккумулятор через ротацию и зная, какое число в нем было изначально (для Z80 можно и любой регистр), можно сделать нужный счетчик.
Например, нам нужен цикл с повторением 4 (либо с реакцией на каждый 4-й проход), при этом сам счетчик даже необязательно перезагружать.
Для этого в аккумулятор грузим #88 (%10001000 бинарно), а в программе циклически сдвигаем (RRCA или как там у 8080 пишется) и делаем переход/нужное по флагу переноса.
Флаг этот будет устанавливаться каждый четвертый проход, при этом "счетчик" будет самовосстанавливаться. Таким же путем делаются счетчики на 2 и 8, числами #AA и #80.

Учитывая аппаратные особенности конкретного компа (строение экрана, например), можно тоже сокращать код. Особенно часто это делается на Спектруме с его хитрым экраном.
Выше уже писали насчет палитр Вектора, вот как раз на эту тему.

parallelno
17.08.2022, 05:59
Если глянуть исходники МДОС Т-72, то там палитру тоже устанавливали за два раза, но между ними была небольшая задержка:

...
L_F613: OUT 00Ch ; палитра -- установка физического цвета
PUSH PSW
POP PSW
PUSH PSW
POP PSW
DCR E
DCR D ; (счётчик -1)
OUT 00Ch ; палитра -- установка физического цвета, ещё раз
...Думаю, такой вариант можно считать оптимальным и по скорости, и по объёму.

Все ПЗУ на Векторах, как правило, имели при запуске команду отключения КД. Кроме того, квази-диск отключает БЛК-СБР -- там это сделано аппаратно, таким образом, если демку будут запускать, например, загрузкой "с ленты", или из загрузочной записи дискеты, то можно этот момент пропустить, а если из под МДОСа -- то эти команды обязательны.

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


; Set palette copied from the ram-disk no blocking interruptions
; input:
; de - the addr of the first item in the palette
; use:
; hl, bc, a
PALETTE_COLORS = 16

SetPaletteFromRamDisk:
hlt
; store sp
lxi h, $0000
dad sp
shld @restoreSp+1
; copy unpacked data into the ram_disk
xchg
RAM_DISK_ON()
sphl

mvi a, PORT0_OUT_OUT
out 0
mvi e, $00
@loop:
pop b
; even color
mov a, e
out 2
mov a, c
out $0c
xthl ; delay 24
xthl ; delay 24
inr e ; counter plus delay 8
inr h ; delay 8
dcr h ; delay 8
out $0c
; odd color
mov a, e
out 2
mov a, b
out $0c
xthl ; delay 24
xthl ; delay 24
inr e ; counter plus delay 8
inr h ; delay 8
dcr h ; delay 8
out $0c
mov a, e
cpi PALETTE_COLORS
jnz @loop

@restoreSp: lxi sp, TEMP_ADDR
RAM_DISK_OFF()
ret
.closelabels

; mount the ram-disk
.macro RAM_DISK_ON(_command = RAM_DISK0_B0_STACK)
mvi a, _command
out $10
.endmacro

; dismount the ram-disk
.macro RAM_DISK_OFF()
xra a
out $10
.endmacro

KTSerg
26.09.2022, 10:35
Какие алгоритмы в реальности используются, для вывода на экран спрайта (многоцветного) с маской?
Или сначала в буфере создается микс (фона и спрайта), который потом просто копируется на экран?
Тогда интересует алгоритм создания микса.
Я таким ни когда не занимался, прикинул, цикл получился (если правильно посчитал) 112 тактов на байт :(

...
adr:
ldax b
ana m
xchg
ora m
xchg
mov m,a
inx h
inx d
inx b
adr_a:
mvi a,8
dcr a
sta adr_a+1
jnz adr
...

ivagor
26.09.2022, 11:36
Вывод в одну плоскость что-то вроде

;SP - маска, байт спрайта, маска, байт спрайта, ...
;HL - VRAM
pop b\ mov a,m\ ana c\ ora b\ mov m,a\ dcr l
;12+8+4+4+8+8=44 такта/байт


;HL - маска, байт спрайта, маска, байт спрайта, ...
;DE - VRAM
ldax d\ ana m\ inx h\ ora m\ inx h\ stax d\ dcr e
;8+8+8+8+8+8+8=56 тактов/байт
Вместо dcr l и dcr e могут быть другие dcr или inr, смотря как выводим. Если две плоскости, то просто используем оставшуюся регистровую пару (DE или BC соответственно). Для 3-4 плоскостей придется добавлять переходы.

KTSerg
26.09.2022, 12:01
Вывод в одну плоскость что-то вроде
...
Для 3-4 плоскостей придется добавлять переходы.
Ясно, спасибо.
Я посчитал, что хранить маску в спрайте слишком накладно по расходу памяти.
Для спрайта на 3-4 плоскости, при отдельном хранении маски, спрайт будет занимать меньше памяти, но получилось, что выводится такой спрайт практически в 2-3 медленнее.

ivagor
26.09.2022, 12:24
Не все так плохо.

;HL - маска
;DE - спрайт
;BC - VRAM
ldax b\ ana m\ inx h\ xchg\ ora m\ inx h\ xchg\ stax b\ dcr c
;8+8+8+4+8+8+4+8+8=64 такта/байт
После каждого битплана отматываем маску на начало.
Или


;SP - маска, байт спрайта, байт спрайта, маска, байт спрайта, байт спрайта, ...
;HL и DE - VRAM
;начало
pop b\ mov a,m\ ana c\ ora b\ mov m,a\ dcr l
ldax d\ ana c\ pop b\ ora c\ stax d\ dcr e
;установившийся режим
dcx sp\ pop b\ mov a,m\ ana c\ ora b\ mov m,a\ dcr l
ldax d\ ana c\ pop b\ ora c\ stax d\ dcr e
;(12+12+8+4+4+8+8)+(8+4+12+4+8+8)=100 тактов/2 байта=50 тактов/байт

KTSerg
26.09.2022, 12:42
Не все так плохо.
...
Во, я ещё и растактовку смотрел в таблице, в которой:

ANA M 12 4 4 4

nzeemin
26.09.2022, 12:56
Не все так плохо.

;HL - маска
;DE - спрайт
;BC - VRAM
ldax b\ ana m\ inx h\ xchg\ ora m\ inx h\ xchg\ stax b\ dcr c
;8+8+8+4+8+8+4+8+8=64 такта/байт
После каждого битплана отматываем маску на начало.

Получается, для одного битплана можно хранить парами байт пиксели+маска, и обойтись без двух xchg = 56 тактов.

ivagor
26.09.2022, 13:02
и обойтись без двух xchg = 56 тактов
Такой вариант я раньше привел (https://zx-pk.ru/threads/29144-programmirovanie-na-assemblere.html?p=1163800&viewfull=1#post1163800)

ivagor
26.09.2022, 16:04
У двухбитпланового стекового варианта (https://zx-pk.ru/threads/29144-programmirovanie-na-assemblere.html?p=1163804&viewfull=1#post1163804) есть серьезный недостаток - несовместимость с методом Медноногова, нельзя использовать при разрешенных прерываниях. Исправление этого недостатка + небольшое ускорение:

;SP - маска, байт спрайта, байт спрайта, маска, байт спрайта, байт спрайта, ...
;HL и DE - VRAM
pop b\ mov a,m\ ana c\ ora b\ mov m,a\ dcr l
ldax d\ ana c\ pop b\ ora c\ stax d\ dcr e
;12+8+4+4+8+8+8+4+12+4+8+8=88 тактов
mov a,b\ sta $+10\ ana m\ pop b\ ora c\ mov m,a\ dcr l
ldax d\ ani 0\ ora b\ stax d\ dcr e
;8+16+8+12+4+8+8+8+8+4+8+8=100 тактов
;(88+100)/4=47 тактов/байт

nzeemin
26.09.2022, 16:19
ivagor, пора книгу писать с фрагментами программ для вектора. Ну или в вики хотя бы выписывать - был бы отличный справочник, меньше затыков при разработке под Вектор.

Можно вот тут например собирать: http://www.emuverse.ru/wiki/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D 1%8F:%D0%92%D0%B5%D0%BA%D1%82%D0%BE%D1%80-06%D0%A6

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

svofski
26.09.2022, 17:53
Я люблю позаписывать иногда, но делаю это недостаточно последовательно и часто неопрятно. Вот неплохо получились рыбы из прекрасма -- текст, линия, мандрилл -- я почти каждую новую поделку начинаю с одной из них. С тех пор накопилось еще много интересного и оно сидит в разной форме где попало. Есть текст 512, который заодно служит ориентиром по использованию режима 512 вообще. Разные виды вывода спрайтов. Музыка на AY и ВИ53. В общем неплохой набор из чего можно сделать что угодно, но как ivagor верно подметил, быстро теряется и искать нелегко.

Книга, даже если это просто большая шпаргалка, подразумевает пояснительный текст и иллюстрации. Ясно излагать -- это надо уметь и любить. У меня обычно получается только запутать. Технически GitBook несложный. Можно начинать просто с того, что сделать репу, настроить GitBook, добавить файлы с фрагментами кода, а лирику и картинки добавлять потом. Все пишется в маркдауне прямо в веб-редакторе с превью. Целиком запускающиеся примеры можно держать в той же репе.

ivagor
26.09.2022, 18:05
Пользуясь случаем хочу высказать пожелание внести в grad.asm (https://github.com/svofski/v06c-progdemo/blob/master/grad.asm) на гитхабе последние правки (https://zx-pk.ru/threads/34480-programmirovanie.html?p=1163282&viewfull=1#post1163282), чтобы не потерялись.

KTSerg
26.09.2022, 19:26
У двухбитпланового стекового варианта (https://zx-pk.ru/threads/29144-programmirovanie-na-assemblere.html?p=1163804&viewfull=1#post1163804) есть серьезный недостаток - несовместимость с методом Медноногова, нельзя использовать при разрешенных прерываниях. Исправление этого недостатка + небольшое ускорение:
...
;(88+100)/4=47 тактов/байт
Ндас... при такой скорости, практически теряется смысл пытаться упаковывать алгоритм в двух-байтную (24 такта на байт) команду (в ПЛИС-процессоре).
Если только совмещать её с автоматическим сдвигом (маски и спрайта).

ivagor
26.09.2022, 20:29
Если говорить о задаче вывода спрайтов (и тайлов) на экран, то стоит оценить предельный возможный вариант. Ограничивающий фактор - скорость шины вектора, 4 такта/байт. В идеале вся пропускная способность должна идти только на пересылки, без выборки команд. Вижу 2 способа обеспечения этого (речь о замене только процессора в стандартном 06Ц):
1. Добавление развитого контроллера DMA (DMA-сопроцессора). Он должен "знать" о строении экрана вектора, и в нем должна быть куча регистров с параметрами спрайтов, чтобы их (параметры) не вдавливать туда кучей outов. Ядро 8080 в этом случае только дает команду - вывести 1й спрайт сюда, 2й сюда и т.д.
2. Частичный разгон ядра 8080. Можно реализовать вывод спрайтов программно, но нужно некоторое количество быстрого озу внутри проца (или кеш). С этим озу проц пусть работает на 48 или 96 МГц, а снаружи опять видны только пересылки байтов.
Можно немного усугубить, использовав часть внутреннего озу по крайней мере для части спрайтов (подходит и для 1 и для 2). Это еще уменьшает нагрузку на шину вектора.
Не могу призывать реализовать какой-то из этих вариантов (все упрется в малую распространенность и программную поддержку, вернее в ее отсутствие), но при оценке промежуточных вариантов стоит учитывать не только имеющиеся процедуры, но и предельные возможные варианты.

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

Для примера вывод 15-цветного спрайта 16x16. 15 потому что без отдельной маски, ее можно получить по "ИЛИ" 4х байтов спрайта разных плоскостей. Минус 1 цвет (0й цвет - прозрачный), зато минус выборка (и хранение) маски.
Чтение 2*16*4=128 байт спрайта. Чтение 3*16*4=192 байт из VRAM. Запись 3*16*4=192 байт в VRAM. Итого (128+192+192)*4=2048 тактов/такой спрайт. Если хранить спрайт во внутреннем озу, то (192+192)*4=1536 тактов/такой спрайт.

svofski
26.09.2022, 20:53
Пользуясь случаем хочу высказать пожелание внести в grad.asm (https://github.com/svofski/v06c-progdemo/blob/master/grad.asm) на гитхабе последние правки (https://zx-pk.ru/threads/34480-programmirovanie.html?p=1163282&viewfull=1#post1163282), чтобы не потерялись.

Спасибо, что напомнил. Я это сделал сразу, но забыл пушнуть.

ivagor
27.09.2022, 06:14
Если хранить спрайт во внутреннем озу, то (192+192)*4=1536 тактов/такой спрайт.
Хочу все же дожать до предела. В плисине можно хранить не только спрайты, но и копию экрана вектора. Если плисина жирная, то прям графическую копию. Если не очень жирная, то можно ориентироваться на тайловый экран. Пусть 256 шестнадцатицветных тайлов=8 кб, плюс килобайт под "тайловый экран". Так или иначе это позволяет отказаться от чтения VRAM, остается только запись и ранее приведенный пример уменьшается до (192)*4=768 тактов/спрайт. Это абсолютный максимум скорости (или минимум тактов), быстрее для 06Ц при замене проца никак не получится.

KTSerg
27.09.2022, 08:26
Хочу все же дожать до предела.
...
ранее приведенный пример уменьшается до (192)*4=768 тактов/спрайт. Это абсолютный максимум скорости (или минимум тактов), быстрее для 06Ц при замене проца никак не получится.
Грубо говоря, получается, это вывод на экран около 60 полноцветных спрайтов 16х16 с маской, за интервал между прерываниями... ?

ivagor
27.09.2022, 09:07
312*192/768=78 спрайтов за прерывание. Но это без учета логики игры, без восстановления фона, без звуков, ну и без низкоуровневого управления спрайтами (куда какой вывести). А самое главное - при 16 цветах 06Ц не может обеспечить двойную буферизацию, значит придется ограничить время вывода спрайтов невидимыми областями, чтобы без миганий. Или ограничить число цветов до 8 или 4, тогда с двойной буферизацией хоть весь экран (или полэкрана для 8 цветов) в спрайтах.

nzeemin
27.09.2022, 10:47
Книга, даже если это просто большая шпаргалка, подразумевает пояснительный текст и иллюстрации. Ясно излагать -- это надо уметь и любить. У меня обычно получается только запутать. Технически GitBook несложный. Можно начинать просто с того, что сделать репу, настроить GitBook, добавить файлы с фрагментами кода, а лирику и картинки добавлять потом. Все пишется в маркдауне прямо в веб-редакторе с превью. Целиком запускающиеся примеры можно держать в той же репе.

Если это будет на гитхабе - это форки/пулл-реквесты и кто-то должен майнтейнить. Мне больше нравится формат вики. Я пока попробую подсобирать ссылки и фрагменты кода на emuverse, например:
http://www.emuverse.ru/wiki/%D0%92%D0%B5%D0%BA%D1%82%D0%BE%D1%80-06%D0%A6/%D0%A1%D0%B6%D0%B0%D1%82%D0%B8%D0%B5_%D0%B4%D0%B0% D0%BD%D0%BD%D1%8B%D1%85