PDA

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



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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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


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


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

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


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

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

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

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

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

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

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

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


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


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

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

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


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

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

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

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

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

ivagor
03.07.2018, 12: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, 12: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, 15: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, 15:28
dbk, даешь по свежим впечатлениям туториал "Как написать на железном Векторе Hello, World! без эмуляторов". Хорошо бы отдельной темой, потому что это не совсем то, что большинство понимает под программированием на ассемблере сейчас.

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

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

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


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

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

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

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

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

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

dbk
03.07.2018, 18:05
del

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

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

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

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

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

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

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

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

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


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

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

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

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

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

ivagor
04.07.2018, 05: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, 11:10
Картотека просто пухнет от хороших (http://sensi.org/scalar/ware/556/) и разных (http://sensi.org/scalar/ware/900/) конвертеров (http://sensi.org/scalar/ware/901/)!

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

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

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

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

dbk
04.07.2018, 12: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, 12:32
Автостарт загрузчика это была бы ценная опция. Но и без нее миллионы вектористов-реалистов оценили бы твой быстрый загрузчик. Я вот подготовленный тобой Рива Рейд очень ценю.

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

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

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

ivagor
04.07.2018, 12: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, 13:23
Выскажусь насчет разработки на реале с использованием штатного монитора-отладчика с edasmом. Я пользовался такой комбинацией некоторое время и даже сбацал малюсенькую (меньше 1 Кб) игрушку в кодах. Мое мнение - это очень неудобно, а для больших или даже средних проектов просто не подходит.
А каким инструментарием вы пользуетесь?! Если не затруднит, то в двух словах распишите технологию.

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

ivagor
04.07.2018, 13: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, 13:59
С Бейсиком вообще поле непаханое. По идее где-то есть тыщи полезных и интересных бейсковских программ для Вектора, но в Картотеке их нет. Я даже не знаю, откуда начинать.

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

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

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


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

ivagor
04.07.2018, 15: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, 16:32
Ты путаешь версии
По ссылке ничего про вынь не сказано, скачивать я не стал.


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


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

ivagor
04.07.2018, 16: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, 17:17
Также интересно насчет LINUX по ссылке и в руководсте. В RELNOTES.TXT для версии 11/30/97 Version 3.1 есть строка: LINUX support. Но в архиве бинарника для linux я не вижу, может он был только в 3.1
Я думаю, автор имеет ввиду, что исходники, которые ты получишь, если зарегаешься, можно будет собрать под линуксом.

KTSerg
04.07.2018, 17: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, 17:33
Автор надеялся на сознательность пользователей. Т.е. честные люди должны использовать tasm только 30 дней, а потом должны сказать себе "хватит!". И честные люди, заплатившие автору, получили исходники.

b2m
04.07.2018, 20: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, 17:38
Попробовал компильнуть свою модификацию эксисайзера - результат совпал с nice22 (на который навел меня PPC), компильнулось мгновенно. Жаль ты раньше (лет на 18) не выложил эту штуку.

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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


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

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

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

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

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

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

x-code
19.07.2018, 15: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, 15:53
Верно, но как туда вывести звук с PC образца начала 90х? Звуковые карты тогда были экзотикой, а в штатной комплектации у PC не было аудиовыхода от слова совсем
спикер же был

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


TITLE 'GAME V(1.1)

$-MACRO

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

PPC
07.09.2018, 23: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 будет быстрее, в лучшем случае раза в два. Наоборот, если почти все строки маски пустые, то вариант с промежуточной заливкой скорее всего будет более быстрым.