PDA

Просмотр полной версии : Ассемблер Радио-86РК



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

gdv2002
24.02.2014, 18:31
Пришло время начать учиться и программировать на РК-86.
Думаю тема поможет и еще кому сделать первые шаги на Ассемблере.
Решил начать с курса из журнала Радио.
Цикл публикаций тут: Ассемблер, краткий курс для начинающих. (http://yadi.sk/d/59tO9solJVYzh)
Справочные таблицы из журнала тут: Справочные таблицы (http://yadi.sk/d/ux7hXx-_JXuDF)
Таблица с адресами мест на экране дисплея: Таблица экрана (http://yadi.sk/d/IrNFPLRkJyWJ7)

Во вложении необходимые программы.

goodboy
24.02.2014, 19:51
кажется программа (TP *STF*) есть на сайте http://rk86.ru
файл DEBUG.PKI

Rokl
24.02.2014, 19:53
Пришло время начать учиться и программировать на РК-86.
Думаю тема поможет и еще кому сделать первые шаги на Ассемблере.
Решил начать с курса из журнала Радио.
И тут первая засада.
Курс обучения основан на применении обучающей программы TP *STF*, коды которой приведены в первой статье цикла. И конечно КС первого-же блока не сошлась :(...
Если изучаешь ассемблер, то зачем набивать машинные коды?

gdv2002
24.02.2014, 20:11
кажется программа (TP *STF*) есть на сайте http://rk86.ru
файл DEBUG.PKI
Это отладчик DP*STF*.
Набил половину, отвлекают постоянно, так-бы уже закончил.


Если изучаешь ассемблер, то зачем набивать машинные коды?
Уверен на 100% что прежде чем спросить, вложение вы не смотрели!
Цикл уроков из журнала Радио построен на использовании несложной программки.

Rokl
24.02.2014, 20:17
Это отладчик DP*STF*.
Набил половину, отвлекают постоянно, так-бы уже закончил.


Уверен на 100% что прежде чем спросить, вложение вы не смотрели!
Цикл уроков из журнала Радио построен на использовании несложной программки.
Прочел, как ты мучался с КС, поглядел прогу в маш кодах, что ты набивал и задал вопрос. Если не сложно, напомните, какие номера журнала с уроками? Было вроде два цикла статей обучения ассемблеру.
Кстати, зачем набивать, когда уже есть готовые дампы этого отладчика?

Vladimir_S
24.02.2014, 20:20
Цикл уроков из журнала Радио построен на использовании несложной программки.
Да, одновременно в памяти должны находиться три программы - ED/ASSM, DEBUG и TP *STF*. Давно конечно пробовал, ничего, забавно. Правда вроде бы набивалась без ошибок. Она коротенькая, на пять минуток работы.

Rokl
24.02.2014, 20:22
Да, одновременно в памяти должны находиться три программы - ED/ASSM, DTBUG и TP *STF*. Давно конечно пробовал, ничего, забавно. Правда вроде бы набивалась без ошибок. Она коротенькая, на пять минуток работы.
Получается четыре.))) Редактор и ассемблер 2 разные программы.

gdv2002
25.02.2014, 05:14
Если не сложно, напомните, какие номера журнала с уроками? Было вроде два цикла статей обучения ассемблеру.
Кстати, зачем набивать, когда уже есть готовые дампы этого отладчика?
Номера: 11-12/88;1-3/89.
Выше я уже написал, что это не отладчик, а спец. небольшая программка для обучения, отладчик это немного другая программа, и она есть у меня.

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

Немного добавлю. Начинать с чего-то нужно. Я подошел к изучению РК что называется "с нуля". Собрал РК, теперь несложный программатор, чтобы иметь больше возможностей для работы. Следующий ход знакомство с Ассемблером.
К сожалению в среде РК_ашников разброд и шатание, каждый реализовывает свою идею, в 99% случаев не совместимую с оригиналом. Понимаю что это творческий порыв и желание, и это просто здорово!
Но вот сам РК остается забытым, хоть и упоминается очень часто.
Писали что нет нового софта, так оно, но и старый уже никому не охота набить или адаптировать.
К примеру я набил "новый" Ассемблер M&S, в архивах программ его не встречал, вот теперь учебная программка на очереди.
У Микроши есть графический редактор, есть статьи по адаптации программ Микроши на РК, но ведь на самом РК этого граф. редактора так и нет!
В статьях по РК из Радио было и описание создания и подключения расширенного знакогенератора с программным переключением, это не та статья "Расширенный знакогенератор", но реализаций тоже как-то нет, или они просто забыты.
Как видно, потенциал РК с одной стороны забыт, а с другой и не раскрыт полностью.

gdv2002
25.02.2014, 07:33
Получается четыре.))) Редактор и ассемблер 2 разные программы.
Для всего курса да, но на начальном этапе эта небольшая программка и сочетает в себе ред. ассм. отладчик и дизасс.

Ратмир
25.02.2014, 07:51
Пришло время начать учиться и программировать на РК-86.
Думаю тема поможет и еще кому сделать первые шаги на Ассемблере.
Решил начать с курса из журнала Радио.

Я то же все не могу решиться, то времени не хватает, то вдохновения.

начинать надо с архитектуры 8080, т.е регистры и регистровые пары, изучить каждые для чего. Потом простые команды сложения и вычитания, сравнения чисел в этих регистрах и т.д.
Первая программа должна быть вывод своего Имени на экран. создать алгоритм, а там пойдет.
Я так думаю:v2_dizzy_botan:

Vladimir_S
25.02.2014, 08:35
Для всего курса да, но на начальном этапе эта небольшая программка и сочетает в себе ред. ассм. отладчик и дизасс.
Нет, она работает с ассемблером и отладчиком.

gdv2002
25.02.2014, 08:35
Я то же все не могу решиться, то времени не хватает, то вдохновения.
Присоединяйтесь, будем вместе учиться, оно и веселее будет!
Я посмотрел некоторое кол-во материалов, но курс из журнала Радио наверное самый простой будет (для восприятия). Все основывается на использовании примеров, т.е. автор сначала объясняет материал, после дает пример пары простеньких программ по теме, предлагает "пощупать" их в учебной программке и потом прикинуть пару своих программок, оладить и оттранслировать их.

Vladimir_S
25.02.2014, 09:53
Я ассемблер начал пробовать до этих публикаций и мне очень помог цикл статей начиная с Радио 1982.10.
Мне понравилось доступность изложения.

Kakos_nonos
25.02.2014, 11:54
Я учился на кросс-ассемблере TASM+Эмулятор.
Конечно, это может многим не понравиться, но по мне это удобно. Написал код, запустил батник - он сам всё откомпилировал и запустил эмуль, с загруженной программой, которая ещё и сама запускается. Минимум телодвижений.



.ORG 0
LXI H,STRING
MOV A,M
NEXTBYTE:
MOV C,A
CALL $F809
INX H
MOV A,M
CPI 0
JNZ NEXTBYTE
WAIT:
JMP WAIT


STRING:
.TEXT "MY NAME IS KAKOS"
.BYTE 0
.END

VovanRK86
25.02.2014, 12:47
но по мне это удобно
И по мне удобно, я за вчера и сегодня как раз из вашего архива применил и ТАСМ и батник, для переноса плеера на рк86 и ют88, так как программер я ни какой, то сделал за два дня, а на реале месяц потратил бы, а теперь кое что стало понятно и можно на реал заливать.

Vladimir_S
25.02.2014, 13:05
И по мне удобно
Это кто к чему привык. По мне так не очень удобно.

VovanRK86
25.02.2014, 13:07
старый уже никому не охота набить
Набивать действительно не охота, я когда пришлось 6кб дамп набивать т.к. не нашёл нигде воспользовался ФайнРидером, а так почти все проги есть в сети, ну а которых нет благодаря Вам и появятся;) ошибки ведь в простом программаторе нашли


или адаптировать
Я пытаюсь, но знаний маловато, пробовал червяка адаптировать на ЮТ88, там дел то на пять копеек с различием экранной области разобраться, но так и не вышло пока. Поэтому будем изучать основы!


К сожалению в среде РК_ашников разброд и шатание, каждый реализовывает свою идею, в 99% случаев не совместимую с оригиналом.
А разве все клоны РК не совместимы, по моему все как раз стараются максимально сохранить совместимость с оригиналом, и добавляют только какие то дополнения, а то иначе это будет железка без прог.
Вот и Vladimir_S от Z80 отказался, и у меня как то всё заглохло с данным ЦПУ, и всё ради совместимости

Ратмир
25.02.2014, 13:08
Присоединяйтесь, будем вместе учиться, оно и веселее будет!

Конечно!
Я иногда думаю что уже поздняк, возраст. А потом прикидываю возраст когда мой отец перешел из электронщиков в программисты в начале восьмидесятых, ему как раз 36 лет и было. И сейчас ему 69, работает ведущим инженером-программистом. так что самый самолет для мозга:v2_dizzy_punk:

VovanRK86
25.02.2014, 13:09
Это кто к чему привык.
так я как раз от всего давно отвык, я в редакторе Микрон не помню даже, что нажимать.

Vladimir_S
25.02.2014, 13:12
я в редакторе Микрон не помню даже, что нажимать.
Я когда начал учить ассемблер вряд ли можно было найти эмулятор. Год всего прошел как РКшку опубликовали.

VovanRK86
25.02.2014, 13:43
Я когда начал учить ассемблер вряд ли можно было найти эмулятор.
Так мы про сейчас говорим, надо же как то пользоваться благами цивилизации;)

Vladimir_S
25.02.2014, 13:54
надо же как то пользоваться благами цивилизации
Я же говорю - на вкус и цвет...
Где то в 93-94гг завязал с самоделками, но на душе кошки скребли. И вот в ноябре 2011 мне РКшку задарили. Решил для нее ОС сделать, сел за ассемблер и как будто этих лет не было. Сразу написал код исходник которого у тебя есть. И ничего в микроне не забыл.

Rokl
25.02.2014, 20:07
...так что самый самолет для мозга:...
Тем более у тебя отличный инструмент есть, Микроком. Там и редактор текстов, и ассемблер, и отладчик под рукой. Да ещё RAMдиск для сохранения результатов творчества.

gdv2002
25.02.2014, 20:33
Продолжим.
В первом сообщении выложил ссылку на справочные таблицы в большом разрешении и программы необходимые для обучающего курса.
Разделил в отдельные файлы Редактор (вторая версия, из публикации с Дизассемблером), сам Дизассемблер, Ассемблер (первая редакция), Отладчик (DP*STF), сама обучающая программка (TP*STF) и редактор памяти DumpCOR.
В Редактор и Дизассемблер внес исправления по рекомендациям журнала.

Ратмир
26.02.2014, 11:25
Тем более у тебя отличный инструмент есть, Микроком.

Я то знал что собирать:v2_dizzy_vodka2:

Vladimir_S
26.02.2014, 17:30
Ученики за парты сели?

gdv2002
26.02.2014, 18:03
Я пока на "больничном", расхондрились всей семьей, будь оно не ладно.

Rokl
26.02.2014, 18:54
Ученики за парты сели?
Сели! Мне тоже интересно, а то драйвер JETkey для РСшной клавы год ваял, а тут на работе собраный контроллер FDD на D8272 лежит, и немым укором смотрит..."Ну что же ты, собрал меня, а запустить не в состоянии"....))) А я ему...сначала FDD на ВГ93, а уж потом, как нибудь и до тебя очередь дойдет.)))))))

Vladimir_S
26.02.2014, 20:16
Сели! Мне тоже интересно, а то драйвер JETkey для РСшной клавы год ваял, а тут на работе собраный контроллер FDD на D8272 лежит, и немым укором смотрит..."Ну что же ты, собрал меня, а запустить не в состоянии"....))) А я ему...сначала FDD на ВГ93, а уж потом, как нибудь и до тебя очередь дойдет.)))))))
Ну, у меня планы не такие масштабные. Сегодня сел за редактор МИКРОН. Учу его работать с ДОС2.9. Наподобие как работал с ОРДОС. Так же директивы O,I,C.

Ратмир
26.02.2014, 20:18
контроллер FDD на D8272 лежит, и немым укором смотрит..."Ну что же ты, собрал меня, а запустить не в состоянии"
Знакомая микросхема, где-то у себя видел на старых материнках, но может и ошибаюсь.

---------- Post added at 19:18 ---------- Previous post was at 19:16 ----------


Ученики за парты сели?

Да можно начинать:v2_dizzy_coder:
1) по моему первая строчка начинается всегда с ORG

Rokl
26.02.2014, 20:32
Знакомая микросхема, где-то у себя видел на старых материнках, но может и ошибаюсь.Не выбрасывай, пригодится.

Да можно начинать:v2_dizzy_coder:
1) по моему первая строчка начинается всегда с ORG
Это команда для ассемблера, которая говорит ему с какого адреса компилировать программу (в каких адресах будет работать новая программа). Сама откомпилированная программа всегда находится в буфере по адресу 1100Н.
Есть ещё операторы(команды для ассемблера) EQU, DB,DW,END

Vladimir_S
26.02.2014, 20:34
Есть ещё операторы(команды для ассемблера) EQU, DB,DW,END
Еще DS.

Ратмир
26.02.2014, 20:42
Есть ещё операторы(команды для ассемблера) EQU

Хорошо ORG и END понятно.
вот эту нужно поподробнее изучить
2) EQU переводится как понимаю эквивалент.
во всех программах в самом начале их много, откуда вытаскиваем? присваиваем любые имена?

Vladimir_S
26.02.2014, 20:45
присваиваем любые имена?
В пределах допустимых символов. И не обязательно в начале программы.

Ратмир
26.02.2014, 20:50
после имени пишем адрес, указывающий на кусочек программы из Монитора?

Vladimir_S
26.02.2014, 20:52
после имени пишем адрес, указывающий на кусочек программы из Монитора?
Не понял, это про что?

Ратмир
26.02.2014, 21:10
Да попутал, только константы?

Rokl
26.02.2014, 21:17
после имени пишем адрес, указывающий на кусочек программы из Монитора?
Оператор EQU присваевает адрес константе в любом месте адресного пространства процессора от 0000h до FFFFh.


Еще DS.
Оператор DS это присвоить адрес начала текста или таблицы?

Vladimir_S
26.02.2014, 21:23
Да попутал, только константы?
Понял, это про EQU? Такой простой пример - Rokl говорит, что пришлось исхитряться что бы не портилась нулевая ячейка в рамдиске. Я у себя в таком случае за начало диска взял ячейку #0010, и накакать на адрес 0. А в программе указал - LDISK: EQU 10H. Потом во всех процедурах работы с диском загружаю (не знаю как у Rokl сделано) например LXI H,LDISK. И сколько бы раз не встречались такие команды, в них всегда загрузится число указанное после EQU.

Ратмир
26.02.2014, 21:23
Вот вроде нашел.
без Микрокома тяжело, вернусь в город займусь!

Rokl
26.02.2014, 21:36
Понял, это про EQU? Такой простой пример - Rokl говорит, что пришлось исхитряться что бы не портилась нулевая ячейка в рамдиске. Я у себя в таком случае за начало диска взял ячейку #0010, и накакать на адрес 0. А в программе указал - LDISK: EQU 10H. Потом во всех процедурах работы с диском загружаю (не знаю как у Rokl сделано) например LXI H,LDISK. И сколько бы раз не встречались такие команды, в них всегда загрузится число указанное после EQU.
Пришлось адаптировать ORDOS для Микрокома, а она в Орионе 128использует квазиRAMдиск "В" на дополнительной линейке динпамяти 565РУ5. А править в кодах DOS, это выше моих сил, потому пошел путем наименьшего сопротивления и правил схему RAMдиска.

---------- Post added at 21:36 ---------- Previous post was at 21:33 ----------


Понял, это про EQU? Такой простой пример - Rokl говорит, что пришлось исхитряться что бы не портилась нулевая ячейка в рамдиске. Я у себя в таком случае за начало диска взял ячейку #0010, и накакать на адрес 0. А в программе указал - LDISK: EQU 10H. Потом во всех процедурах работы с диском загружаю (не знаю как у Rokl сделано) например LXI H,LDISK. И сколько бы раз не встречались такие команды, в них всегда загрузится число указанное после EQU.
И ещё такой момент. В Мониторе у Микрокома есть директивы J и N. Которые из ОЗУ компика читают и пишут из/в RAMдиск, как директива T в РКшке(NAAAA,BBBB,CCCC - записать в RAMдиск дамп с АААА по ВВВВ, в адрес RAMдиска с адреса СССС). Пришлось бы править и монитор, а это вообще....перебор.
Кстати есть ещё директивы А и В, которые пишут/читают из "кассеты" TIMEKEEPERа. Используется для переноса программы в/из РСшки.

Ратмир
27.02.2014, 10:14
Оператор EQU присваевает адрес константе в любом месте адресного пространства процессора от 0000h до FFFFh.

Экранная область у Микрокома такая же как и 32 кб версии РК-86?
допустим мне нужно в центре экрана вывести символ, могу я использовать готовую подпрограмму Монитора?

Vladimir_S
27.02.2014, 10:26
допустим мне нужно в центре экрана вывести символ, могу я использовать готовую подпрограмму Монитора?
Разумеется. подпрограмма монитора - #F818. Есть управляющие коды дисплея. Позиционировать по экрану - 1BH,59H,20H+номер строки, "20Н + номер позиции.
Выглядит это так:
LXI H,STR
CALL 0F818H
.............................................
STR: DB 1BH,59H,2AH,33H,'ВЫВОДИМАЯ СТРОКА СИМВОЛОВ',0

Ратмир
27.02.2014, 12:48
чет у меня ассемблер глючит. то пишет Мало ОЗУ.
Где ошибка не могу понять?

HardWareMan
27.02.2014, 12:56
Перед вводом текста очищали ОЗУ средствами редактора?

Ратмир
27.02.2014, 13:00
Нет, думал об этом, но как это сделать?

HardWareMan
27.02.2014, 13:20
Не помню уже, NEW (АР2+N), нет? В журнале было написано, кстати.

---------- Post added at 15:20 ---------- Previous post was at 15:12 ----------


Оператор EQU присваевает адрес константе в любом месте адресного пространства процессора от 0000h до FFFFh.
Как человек, который в 90х на Специалисте пересобирал Микрон авторитетно заявляю, что присвоить метке перехода (команды JMP/CALL) нельзя число, которое подставляет ассемблер в случае отсутствия определения метки. Не помню, какое оно в оригинальном Микроне, но для специалиста я делал адрес 0FFFFH. Константу можно присвоить любую, в том числе и это число. На самом деле число присваивается, но вторым проходом опознается как ошибочное и вываливает "Метка не найдена" (или что-то подобное, не помню уже).

Vladimir_S
27.02.2014, 13:29
Нет, думал об этом, но как это сделать?
При запуске редактор спрашивает NEW?, нужно ответить Y, тогда он переходит в режим ввода. Если текст уже есть то нужно нажать любую клавишу.

---------- Post added at 12:29 ---------- Previous post was at 12:20 ----------


Не помню, какое оно в оригинальном Микроне
Не найдя метки оригинальный микрон подставляет #FFFE.

HardWareMan
27.02.2014, 13:32
Не найдя метки оригинальный микрон подставляет #FFFE.
Так как я разбирал и собирал Микрон самим Микроном, то мне приходилось перед каждой сборкой править это число. И какое-то время я использовал это число как метку версии. :3 В финальной, конечно, я поставил 0FFFFH, так красивей. ;) Самое интересное было периодически видеть "Мало ОЗУ" (я использовал на Специалисте ED^7000 и тексту место было от 1200 по 7EFF практически). Ну и время сборки - минут 5. Чаю было выпито цистерна наверное. :3

Vladimir_S
27.02.2014, 13:34
А при попытке записать #FFFF или 0-1 иногда показывает ошибку, но записывает то что нужно.

Vladimir_S
27.02.2014, 13:46
Кстати хочу поделиться. В 89 дизассемблировал ЗАГИБОН и мне понравилось как там реализован вывод текста на экран. Сделано нестандартно и в ассемблерном тексте более читабельно.

Ратмир
27.02.2014, 13:52
При запуске редактор спрашивает NEW?, нужно ответить Y, тогда он переходит в режим ввода. Если текст уже есть то нужно нажать любую клавишу.[COLOR="Silver"]
[S

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

До этого все работало как часы.

HardWareMan
27.02.2014, 14:30
Кстати хочу поделиться. В 89 дизассемблировал ЗАГИБОН и мне понравилось как там реализован вывод текста на экран. Сделано нестандартно и в ассемблерном тексте более читабельно.
Для этого требуется модифицированная п/п вывода текста. В редакторе "Практик" (он же ED^7000) для Специалиста встроенная функция вывода символа больших и маленьких букв так и делала. Только твой пример портит [HL], я бы сделал так:

***
CALL PRINT
DB 1FH,21H,00H
JMP 0F86CH

***
PRINT: XTHL
CALL 0F818H
XTHL
RET

Vladimir_S
27.02.2014, 14:34
Только твой пример портит [HL]
Подпрограмма #F818 итак портит HL.

HardWareMan
27.02.2014, 14:39
Подпрограмма #F818 итак портит HL.
А, точно. Это я такой перфекционист.
PS А у ED^7000 не портила...

Vladimir_S
27.02.2014, 14:42
А у ED^7000 не портила...
Видимо стек использовала.

VovanRK86
27.02.2014, 14:54
Кстати хочу поделиться. В 89 дизассемблировал ЗАГИБОН и мне понравилось как там реализован вывод текста на экран. Сделано нестандартно и в ассемблерном тексте более читабельно.

Vladimir_S, Мне тоже понравилось, остался только вопрос - а зачем так извращаться? Что даёт?

п.с. и я сегодня твой ДОС посмотрел, и Микрон вспомнил (чуть-чуть, я раньше другим пакетом пользовался), скажу только одно - КРУТО!!!

Vladimir_S
27.02.2014, 15:01
а зачем так извращаться? Что даёт?
В стандартном варианте в листинге видишь только метки, и что бы посмотреть текст нужно найти его по метке. Здесь же ты прямо видишь то, что выводится на экран, а это в разы читабельней.

Vladimir_S
28.02.2014, 07:45
HardWareMan, Посмотрел твой пример
http://zx.pk.ru/showpost.php?p=680275&postcount=53
Действительно на время выполнения F818 [HL] спасается в стеке. Оценил.

Ратмир
05.03.2014, 13:18
Немного сдвинулось с места.:v2_dizzy_step:
DB как расшифровывается, data base?

Vladimir_S
05.03.2014, 13:37
Ратмир, По твоей программе запуск должен быть G110B, а после CALL 0F818H нужно как то закончить программу. Процессор же не знает что программа закончилась и результат непредсказуем. Если хочешь зациклить программу, то лучше всего написать CALL 0F803H. И пока не нажмешь любую клавишу, программа будет висеть. А после желательно выход в монитор без стирания - JMP 0F86CH.

perestoronin
05.03.2014, 13:41
DB как расшифровывается, data base?
Data Bytes

Ратмир
05.03.2014, 13:54
Ратмир, По твоей программе запуск должен быть G110B, а после CALL 0F818H нужно как то закончить программу. Процессор же не знает что программа закончилась и результат непредсказуем. Если хочешь зациклить программу, то лучше всего написать CALL 0F803H. И пока не нажмешь любую клавишу, программа будет висеть. А после желательно выход в монитор без стирания - JMP 0F86CH.

Да я уже заметил, нужно обязательно заканчивать программу. А то ОРД2.4 начинает запускаться и вообще квардак начинается:v2_dizzy_turn:

Пока буду тренироваться выводом символов.
а как вывести просто символ зная ее код? допустим в правом нижнем углу.

Vladimir_S
05.03.2014, 14:00
а как вывести просто символ зная ее код? допустим в правом нижнем углу.
Ну например MVI A,'код символа' и прямая адресация - STA, нужный тебе адрес. Таблица есть по моему в Радио за 1988 год, а вот номер если не ошибаюсь - 4.

Ратмир
05.03.2014, 14:22
Понял! вот нашел табличку Радио 86/6, но здесь нет псевдографических символов

Vladimir_S
05.03.2014, 14:29
Я имел в виду таблицу адресов экранной области, а такую же с псевдосимволами ищи в Радио 1987 №5.

gdv2002
05.03.2014, 14:39
Понял! вот нашел табличку Радио 86/6, но здесь нет псевдографических символов

Все таблички в цвете в первом сообщении по ссылке есть.

Ратмир
05.03.2014, 14:42
Все таблички в цвете в первом сообщении по ссылке есть.

нет не нашел таблицы символов, и в Радио 87/5, там про замену ВГ75

Vladimir_S
05.03.2014, 14:44
нет не нашел таблицы символов, и в Радио 87/5, там про замену ВГ75
Во вкладке.

gdv2002
05.03.2014, 14:54
В первое сообщение довыложил табличку с телевизором :)

Vladimir_S
05.03.2014, 15:00
Ратмир, Можешь с цветом поиграться. В первой команде специально для примера двоичные и шестнадцатеричные (для ассемблера по барабану).

Ратмир
05.03.2014, 15:45
Во вкладке.

тому кто сканировал тот номер надо руки ...:v2_conf2:
все пополам и середины нет.

со цветом не понял, что заносим в регистр HL?

Vladimir_S
05.03.2014, 15:48
со цветом не понял, что заносим в регистр HL?
Адрес ячейки экранной области. Т.е. адрес знакоместа.

Ратмир
05.03.2014, 15:55
Так.
А в DE текст и цвет?

Vladimir_S
05.03.2014, 15:59
А в DE текст и цвет?
Да, вначале стоит атрибут цвета (84Н это желтый), потом текст, затем атрибут отменяющий цвет.Ну и 0, признак конца строки с текстом.

Kakos_nonos
05.03.2014, 16:22
Адрес ячейки вычисляется так: адрес_видеопамяти + 78*y + x

Ратмир
05.03.2014, 17:20
84Н это желтый
А остальных цветов коды где можно посмотреть? я так понимаю их 4 должно быть.

Vladimir_S
05.03.2014, 17:24
А остальных цветов коды где можно посмотреть? я так понимаю их 4 должно быть.
Вместо 84Н подставляй от 81Н до 9FН.

Ратмир
05.03.2014, 18:51
Да немного поигрался, вот только есть синий и красный фон, а надписи этими цветами не нашел.
остальные цвета голубой, желтый, зеленый, фиолетовый
и фон и надпись есть

Kakos_nonos
05.03.2014, 21:07
а надписи этими цветами не нашел.
Те же самые числа, только вместо 8 вначале, писать 9.
Т.е. $91, $94, $95...

Vladimir_S
30.09.2014, 16:43
Как то так вышло, что никогда не пользовался десятичной коррекцией (DAA).
Попробовал корректировать и выводить подпрограммой 0F815, и получается вот так - 1...16,11...26,21...36. В чем закавыка? Я конечно проблему решил по обыкновенному - вычитая по десятку. И все же интересно почему после шестерки идет еденица, а после следующей шестерки как и положено семерка, а потом опять единица.

HardWareMan
30.09.2014, 17:25
Все зависит от того, что ты конкретно делаешь. Листинг покажи. Потому как когда я игрался с DAA на спеце и ВМ80 тоже сделал INR A/CALL 0C815H, и оно так же считало до 15 а потом 20 и т.д. Короче, суть в том, что DAA на ВМ80 работает корректно только на ADD/ADC. И это главное отличие от Z80, где етсь флаг N и DAA может работать и для SUB/SBC.

Vladimir_S
30.09.2014, 19:43
суть в том, что DAA на ВМ80 работает корректно только на ADD/ADC.
Я решил свою задачу именно с помощью INR A. Мне ведь нужно выводить не какое то абстрактное число, а результат подсчета. И если при подсчете число не только увеличивать, но и каждый раз при увеличение делать десятичную коррекцию, то все выводится корректно.

b2m
30.09.2014, 20:56
Попробовал корректировать и выводить подпрограммой 0F815, и получается вот так - 1...16,11...26,21...36. В чем закавыка?
Если делать DAA сразу после INR A, то будет работать правильно. Но если между ними есть какие-то команды, которые портят флаг дополнительного переноса AC, то будет как у тебя. В команде DAA используется не только значение регистра А, но и флаги С и АС.

artyr_n
05.03.2015, 22:36
Может будет кому то интересно
Драйвер "оконного" интерфейса для "Радио-86РК"
из журнала Радио за 1990 номер 3 (http://radioway.ru/1990/03/draiver__okonnogo__interfeisa_dlja__radio-86rk_.html), подправленный для запуска в онлайн эмуляторе PK (http://rk86.ru/)

Ратмир
05.07.2017, 19:21
Владимир добрый вечер.
После длительного перерыва добрался до Ассемблера.
Ввел листинг программы но уже в Апогее.
Ошибок нет, но запускаться с адреса 1100 не хочет. Разница есть у РК и у Апогея в адресном?
http://img.radiokot.ru/files/30570/thumbnail/1bftng2v0r.jpg (http://img.radiokot.ru/files/30570/medium/1bftng2v0r.jpg)

tnt23
05.07.2017, 19:43
А что за коды 80H и 84H? можно попробовать в экранную область руками их внести, командой M.

Ратмир
05.07.2017, 20:16
Скорее всего. tnt23, 84Н это жёлтый цвет

Vladimir_S
05.07.2017, 21:01
Разница есть у РК и у Апогея в адресном?
Ну конечно, если в РК по адресам начиная с 77С2+78+78+5 пишется в экранную область и результат виден, то у Апогея запись идет просто в память и результат можно посмотреть директивой D.

Ратмир
05.07.2017, 21:20
Но в мониторе D это же просмотр ячеек памяти. Или я что то забыл уже?

Vladimir_S
06.07.2017, 04:15
Ратмир, Что бы увидеть результат работы этой программки на Апогее, замени 77С2Н на Е2С2Н.

Ратмир
06.07.2017, 09:37
Получается что игры от стандартной РК-шки не подходят для Апогея?

Vladimir_S
06.07.2017, 10:07
Получается что игры от стандартной РК-шки не подходят для Апогея?
Которые стучатся в экран нужно адаптировать. А которые через стандартные точки входа монитора должны работать. И кстати - получилось с программкой?

zebest
06.07.2017, 10:12
там все напрямую не подходит, адреса DMA и ВГ75 то жи разные, как и звук и порты. Было бы желание

Ратмир
06.07.2017, 14:56
Спасибо за разьяснения! Только подьехал с работы, сейчас проверю.

Ратмир
06.07.2017, 18:14
Не хотит. Ассемблер пишет в этой строчке ошибка код: 02. А с 77С2Н ошибок нет.

Vladimir_S
06.07.2017, 19:35
Ратмир, Перед буквой в ассемблере нужно ставить ноль. 0Е2С2Н. Ты же сам написал возврат в монитор - JMP
0F86CH. И кстати, посмотри в книжечке по ассемблеру прилагаемой к Апогею - а у Апогея возврат в монитор тоже 0F86CH?

Ратмир
06.07.2017, 19:51
Yes! Все цвета как на Микрокоме. Единственно не хватает в программе очистки экрана.

Vladimir_S
06.07.2017, 19:56
Единственно не хватает в программе очистки экрана.
Ну напиши в самом начале программы - MVI C,1FH CALL 0F809H.

Ратмир
06.07.2017, 21:15
Отличия.
Адрес начала текстового буфера - 2000Н
Стек располагается в ОЗУ с адреса Е0FFH
Выход в монитор по адресу F875H
Звуковой сигнал подаётся четыре раза вместо 25

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

Все насегодня http://img.radiokot.ru/files/30570/thumbnail/1bh1ljk6rp.jpg (http://img.radiokot.ru/files/30570/medium/1bh1ljk6rp.jpg)
Не удобство вызывает работа с магнитофоном. Остальное ОК! Завтра попробую отцифровать интересную картинку

Ратмир
07.07.2017, 13:37
правый рисунок. Посмотрел у Апогея у 580ви53 есть отдельное адресное пространство, хотелось бы еще и его как-нибудь нагрузить.
домашнее задание для меня так сказать.

Ратмир
08.07.2017, 08:20
Владимир, там в первой строчке мелькает цифра 78, это размер экрана в символах? Картинка Битлз шириной 64 столбца вместе с рамкой. Если да! тогда проще, не нужно применять псевдо графику. Целиковыми прямоугольниками картинку попробовать составить. Хотя музыканты могут стать вытянутыми..

Vladimir_S
08.07.2017, 13:46
там в первой строчке мелькает цифра 78
78 это не количество символов видимой строки, а длина полной строки +1. Т.е. увеличивают адрес на 78 когда нужно расположить один символ под другим.

Ратмир
11.07.2017, 10:19
Программа увесистая получится если каждый символ или строку символов вводить вставляя кусок этой програмки. Ещё и экран делить придётся пополам, т.к ассемблер в строке не разрешает больше 40 символов вводить.

Vladimir_S
11.07.2017, 10:24
Ратмир, 40 это в смысле шестнадцатеричные?

Ратмир
11.07.2017, 10:41
Хотел оформить рамку. Там где text: db я вставил 'пробелы ' голубого фона, так редактор не разрешает 78 пробелов вбить, только половину.

Vladimir_S
11.07.2017, 11:33
только половину.
Так не обязательно в одной строке. Можешь хоть весь экран забить из db.Главное чтобы последняя строка db заканчивалась нулем.

barsik
11.07.2017, 12:01
редактор не разрешает 78 пробелов вбить, только половину
А зачем писать программы пользуясь рэтро-редактором на самой рэтро-машине?

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

Vladimir_S
11.07.2017, 12:08
barsik, В этом и весь кайф. Когда мне приходится писать большие файлы, которые не возможно написать на той же РКшке, чувствую себя как предатель.

Ратмир
11.07.2017, 14:35
Я тоже придерживаюсь мнения, что РК-86 лучше освоить работая на живой машине а не на эмуляторе. Так db можно не разрывать, а всю картинку забить? В кавычки?

Error404
13.07.2017, 12:11
barsik, В этом и весь кайф. Когда мне приходится писать большие файлы, которые не возможно написать на той же РКшке, чувствую себя как предатель.

Давно предлагаю запустить CP/M в расширенной странице ОЗУ с честными 64к (по аналогии как сделали с микродос работает на Векторе - в эл.диске запустили) - и спокойно править файлы там (размером сколько влезает на дискету и в нормальных текстовых редакторах, нормальных компилерах). Всех затрат составит примерно 2 микросхемы (одна статическая ОЗУ на 64к, и одна на логику - там не много надо то: два чипселекта обслужить, разряд порта включения режима взять с ВВ55 D14). Чем себя по-предательски чувствовать. :)
Сам я эмуляторщик, но тут вопрос самоощущения, я например себя нормально чувствую.

Error404
13.07.2017, 17:58
Область 0000...00FFh сделать "склеенной": при записи в эту область запись осуществляется сразу в обе плоскости ОЗУ - и в основное 32/16к, и в расширенные 64к. Это даст возможность использовать расширенную страницу и для CP/M (причем с максимально возможным размером TPA) и для электронного диска если без CP/M.

В случае CP/M в области 0000...00FFh размещается как и положено служебная область CP/M, но в области 00010...03Fh - подпрограммы межстраничных пересылок и call-ов + опционально стек п.п. пересылки и межстранич. вызова, 0100...0FEFFh - TPA, а 0FF00h...0FFFFh - враппер CP/M ("эмулятор" BDOS/BIOS с вызовом в основную страницу где собственно весь код).

В случае эл. диска в области 0000...00FFh подпрограммы межстраничных пересылок, выше 0100h - полезная емкость электронного диска (65280 байт) в дополнительной странице ОЗУ.

В режиме CP/M выше 0100h в основном ОЗУ кладем код CP/M + драйверов. Стартует всё в основном ОЗУ, область межстраничной пересылки инициализируется простой записью нужного блока в 0000...00FFh, дальше можно спокойно обращаться к подпрограммам в области 0000...00FFh и работать с расширенным ОЗУ что-то туда пересылая, делая туда вызовы, и возвращаясь обратно в основную страницу.

uart
13.07.2017, 18:58
IMHO более правильнее эл.диск с ЮТ-88 заюзать.

Error404
14.07.2017, 00:45
IMHO более правильнее эл.диск с ЮТ-88 заюзать.

а он позволяет выполнять программы в том дополнительном ОЗУ (а не только хранить)? Без этого диск малоинтересен. А для этого как ни крути, надо во-первых чтобы плата эл.диска это поддерживала (т.е. садилась на полную ША и имела требуемое управление от основной платы), а во-вторых внедрение в основную схему РК (добавить гейт, определяющий к которому из ОЗУ/extОЗУ/ВУ коммутируется обращение процессора). В предлагаемом мной варианте это навскидку решится парой порезов с выводом порезанного на разъем (+шины), да внешней платкой в этот разъем на двух МСХ (W24512 + W27С512)

barsik
14.07.2017, 01:36
Давно предлагаю запустить CP/M в расширенной странице памяти, где полные 64К ОЗУ
Это предложение надо делать авторам плат новоделов.

Без плат, можно предлагать только крошечные доработки, что быстро и легко можно сделать на базовой плате РК86. Например, программное "открытие ОЗУ 8000...BFFF (за счёт переноса ППА клавиатуры в область выше F000). Да и кто это отмакетирует? Некоторые умеют разводить платы, а макетировать МГТФ-ом давно разучились. Я, например, уже забыл с какого конца держать паяльник, и энтузиазма на монтажные работы не хватает. Поэтому остаётся только метод, когда схему рассчитывают теоретически, на бумаге и сразу делают платы, первая партия которых, естественно будет с ошибками. Таким образом по всем критериям всё-равно лучше делать простые доработки. Например, так ли уж обязательна общая область связи между банками? Имея некоммутируемое ПЗУ F800 и в нём п/п-ммы чтения/записи банок и п/п-мму вызова CALL в другую банку, без этого можно обойтись, с'экономив груду деталей и трудозатрат.


в области 00010...03Fh - подпрограммы межстраничных пересылок и CALL-ов + опционально стек
Вот как раз этот участок из ZERO-page CP/M и не надо тратить на ерунду. Во всех моих ДОС используются все RST (кроме RST 0). Это очень удобно, сокращает объём кода и унифицирует программы для разных ДОС. А для ДОС, где RST-входы не грузятся автоматически по WARM BOOT, я сам при старте программы кидаю в ОЗУ входы RST и получается то же самое.

Ратмир
14.07.2017, 09:22
Тема создавалась немного о другом. Для начинающих я думаю сложновато все это.

tnt23
15.07.2017, 20:37
Вот вы тут сидите, а svofski добавил в свой онлайновый "Прекрасный ассемблер 8080" генерацию WAV файлов в формате РК, и научил его даже дудеть скомпилированное.

Прекрасный ассемблер: http://sensi.org/~svo/i8080/
Нимнощька по теме: http://zx-pk.ru/threads/23087-prekrasnyj-assembler-kr580vm80a-russkie-bukvy.html

Vladimir_S
15.07.2017, 21:15
tnt23, Высоко сидим, далеко глядим.

svofski
16.07.2017, 12:15
Чуть чуть протестированный ассемблер теперь хостится тут: https://svofski.github.io/pretty-8080-assembler/

На sensi.org можно нарваться на эксперименты без обезболивающего.

Vladimir_S
09.10.2017, 16:02
svofski, Все не было времени испытать как в Прекрасном ассемблере 8080 формируется WAV на практике. Великолепный результат!. Экономит кучу времени при отладке. У меня на РКшке на процессоре тактовая частота 2 Мгц и с константой (I,41) читается без ошибок.

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

И я как истинный лентяй сейчас придумал - что бы не набирать каждый раз I,41 завтра с утра создам директиву J. Она будет записывать свою константу в адрес 762F, а потом будет переходить на директиву I.

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

svofski, А случайно в самом ассемблере скорость WAV не меняется?

svofski
10.10.2017, 18:10
Vladimir_S, я очень рад, что пригодилось! Сейчас скорость не меняется и наверное была она выбрана на глаз. Ничто, кроме лени, мне не мешает сделать ее настраиваемой. Учту это пожелание.

Vladimir_S
10.10.2017, 19:38
svofski, Это не желание, наоборот, хорошо что скорость выше. Быстрее закачивается. Но если будет еще выше, боюсь скажется на надежности. Хотя, когда я прочел статью "О вводе данных с магнитной ленты" в Радио 1987 №4, я сразу же доработал "монитор" и константа чтения у меня выбиралась автоматически. Для эксперимента я выбирал бешеные скорости. А когда я добавил пиковый детектор, то вообще скачивание стало неубиваемым.

svofski
10.10.2017, 22:30
По кабелю напрямую от звуковой карты скорости могут быть весьма бешеными. Это магнитофон заставлял выбирать скорости поменьше.

HardWareMan
11.10.2017, 06:36
А когда я добавил пиковый детектор, то вообще скачивание стало неубиваемым.
А вот с этого места по подробнее!

Vladimir_S
11.10.2017, 07:17
А вот с этого места по подробнее!
К выходу компаратора подключается формирователь прямоугольников на операционном усилителе. Схему уже не помню, мне ее один крутой спец предложил. Помню в обратной связи диоды стояли. Осциллограф показывал четкие прямоугольники на любых частотах.

HardWareMan
11.10.2017, 09:35
К выходу компаратора подключается формирователь прямоугольников на операционном усилителе. Схему уже не помню, мне ее один крутой спец предложил. Помню в обратной связи диоды стояли. Осциллограф показывал четкие прямоугольники на любых частотах.
А, это банально и не интересно. Я думал там что-то убер фундервафельное... ОУ с нелинейной обратной связью любят метол гитаристы, это так, к сведению.

Denn
11.10.2017, 11:37
К выходу компаратора подключается формирователь прямоугольников на операционном усилителе. Схему уже не помню, мне ее один крутой спец предложил. Помню в обратной связи диоды стояли.

Обычный гитарный овердрайв или дисторшн :)

Типа такого (первый каскад на ОУ):

http://img.electronic-club.ru/images_electronic/club/00000/HH3fyZWHzAY.jpg

HardWareMan
11.10.2017, 14:59
Denn, именно. А нелинейность обратной связи (через встречно включенные диоды) заставляет ОУ перекидываться даже от малых перепадов, что не дает "забивать" низким частотам выход, что имеет место быть у обычных компараторов по уровню.

Denn
11.10.2017, 15:30
HardWareMan, только НЧ нужно жосско отфильтровывать перед этим каскадом, иначе он от них просто запрётся и не будет замечать полезный сигнал.
В схеме по картинке это делается на уровне самого каскада, но там "гитарная" коррекция, а для нашего случая нужен пересчёт.

П.С. сорри за оффтоп в теме /-)

norduk
16.11.2017, 17:19
В процессе доработок РК продолжаю баловаться с ассемблером. Написал некую поделку, которая адресует напрямую видеопамять и псевдографикой рисует прямоугольное изображение (размером - меньше экрана).
Так вот, наблюдаю странную особенность, если начинаю рисовать с одних адресов (видеопамяти) - результат получается корректный, если рисую с других (соседних) - получаю сдвиги части строк своего изображения. Т.е., выходит, что с части адресов (видеопамяти) код отрабатывает "как надо", а с других в момент отрисовки в непредсказуемом месте бьётся содержимое ячеек с текущим указателем на видеопамять и часть рядов спозают. Остаток дорисовывается корректно, но уже в новом месте.

HardWareMan
17.11.2017, 11:27
Зачем тебе смотреть на 1 рубль и слушать про 7 рублей?

norduk
17.11.2017, 11:55
лучше 1р. увидеть, чем 7р. услышать
https://www.screencast.com/t/oUuRVC7Vp
Могу и исходники.. если не лень в моём быдлокоде ковыряться)

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

Вот показательно где сначала на B5 всё ок, а на B9 - на середине мой указатель сбивается...

norduk
17.11.2017, 13:40
с видео конечно нагляднее, но лучше бы или код, или скомпиленный пример.
а по поводу кода - ну так у меня ровно такой же, так что разбираться в подобном гораздо легче.
Да легко.


Пробовал обнулять видеобуфер перед тем как??

Средствами монитора? Его подпрограммы, вообще, решил не использовать, ибо бьют регистры.
Причом даже если их в стек запихиваю предварительно. Ну или руки у меня кривые.


возможно на управляющий символ попадает. Как вариант
Возможно, но тогда как этого избежать?

Да и вообще, вопрос к знатокам, так как я со стеком себя веду - так можно?
Или лучше делать указатели и в них всё хранить?

Vladimir_S
17.11.2017, 13:53
norduk, Сразу замечание - межстрочный сдвиг 4ЕН.

norduk
17.11.2017, 15:36
norduk, Сразу замечание - межстрочный сдвиг 4ЕН.

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

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




; рисуем DE
push H
lhld scr_addr ; вытаскиваем указатель на адрес видеопамяти из scr_addr
call draw_byte_pair
inx H ; двигаем указатель на байт вправо
shld scr_addr
pop H

у мня в мнемониках 8080 плохо в голове думается:) Возможно когда двигаешь - не учитываешь флаг переноса. При малых значениях адреса не происходит переполнения, а при бОльших - происходит, и указатель прыгает на (адрес-256) назад.
Ну и да, дважды твой код запустить нельзя, он модифицирует начальные установки. Неаккуратненько

Ну про то, что его причёсывать надо ещё - это понятно. А насчёт малых значений и больших, в том и суть, что нет порога. На одной и той же строке 077B8h - ок, 077B9h - слетает, 077BAh - слетает, 077BBh - слетает, 077BCh - снова работает)) На js-эмуляторе. На emu80 вообще дико себя ведёт) Завтра планируется сделать кабель для загрузки ПО в живой комп, попробую и там поглядеть как себя вести будет. Предполагаю, что как на emu80.

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

Всё указывает на то, что нужно писать сразу на живой машине)

Vladimir_S
17.11.2017, 16:53
Верно. Это кривой коммент, так как по сути это не межстрочный сдвиг, а разница между концом верхней строки и началом следующей.
По твоему между концом одной строки и началом следующей 62 знакоместа?

norduk
17.11.2017, 17:09
ну да, какой то странный диапазон чуйствительности. Надо писать в нормальных ассемблерах ) и проверять в других, хороших, эмууляторах.
на emu от b2m попробуй проверь скомпиленный код. Получается указатель в какой то момент прыгает по памяти на 6 строчек назад. приблизительно и продолжает оттеда рисовать дальше.
Может конечно и со стеком что случается, у тебя там поп\пушей довольно много)
Вобщем надо нормальным компилером пробовать и в другом эмуле. Для сравненийя

Ага, на b2m шоу аналогичное emu80) В общем, перепишу-ка я это всё дело заново)

К вопросу о нормальных ассемблерах, на живой машине напрягает то, что при зависонах сброс может память почикать (хоть у меня и статика), поэтому лучшим вариантом вижу писать на эмуляторе.
Например, это будет b2m (или emu80, непринципиально). Принципиально другое - на каком ассме писать? Vladimir_S советовал мне в соседней ветке Микрон. Ну вот я его запустил и привет, что дальше делать - непонятно. Ни инструкции для него не нашёл, ничего нет. Да и забой нихрена не работал там)

Кто какой софт использует? В те странные моменты, когда пишет что-то для РК и РК-подобных машин)

OrionExt
17.11.2017, 17:32
Да что там у вас прыгает. Ищите ошибку в коде. И эмуль лучше свой юзать или проверенный.

Это ж не какой хитрый код. С подменой кода по ходу и прыжком через стек:) на очередной код.

Vladimir_S
17.11.2017, 17:45
Принципиально другое - на каком ассме писать?
До 2 килобайт кода я предпочитаю Микрон и на реальном компе. Микрон описан в Радио 1987/7. Промежуточный результат сохраняй на флешке. Оттранслируешь, потом нажимаешь на курсор вниз, опять запускаешь с адреса 0, на NEW нажимаешь ВК, потом СТР и снова курсор вниз. Директивой М1087 смотришь адрес конца текста, следующий адрес 1089 начало текста. Все можешь сохранить.

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

norduk, Делай скорее цвет и закачивай ДОС для флеш. Мне пришла в голову мысль научить Микрон сохранять ассемблерный текст на флеше, ка я научил его работать с FDD.

norduk
17.11.2017, 19:23
По твоему между концом одной строки и началом следующей 62 знакоместа?

Да нет же, между концом строки моего изображения и началом следующей строки, а оно длиной всего 16 знакомест. Так-то понятно, что меньше.

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


До 2 килобайт кода я предпочитаю Микрон и на реальном компе. Микрон описан в Радио 1987/7. Промежуточный результат сохраняй на флешке. Оттранслируешь, потом нажимаешь на курсор вниз, опять запускаешь с адреса 0, на NEW нажимаешь ВК, потом СТР и снова курсор вниз. Директивой М1087 смотришь адрес конца текста, следующий адрес 1089 начало текста. Все можешь сохранить.

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

norduk, Делай скорее цвет и закачивай ДОС для флеш. Мне пришла в голову мысль научить Микрон сохранять ассемблерный текст на флеше, ка я научил его работать с FDD.

Цвет завтра буду делать. Если всё пойдёт хорошо, то, глядишь, завтра и закончу.



и закачивай ДОС для флеш
Здесь не понял.

Vladimir_S
17.11.2017, 21:36
Здесь не понял.
Я имею в виду цветную версию.

norduk
20.11.2017, 14:16
В э-муле то жи неплохо получается, даже с этим примером.
Дело привычки, видимо.
Winasm похож на правду, но есть пару вещей, которые пока не получаются, задал вопросы в соответствующей ветки, поглядим, что получится сделать.


До 2 килобайт кода я предпочитаю Микрон и на реальном компе.
На железе - свои проблемы, во-первых, это можно делать только при наличии железа (я же не буду таскать с собой РКшку, а ноут всегда с собой)...
ну и вопросы удобства - на железе всё не так наглядно, как на условной винде.. окна, все дела.
Даже вот открыл эмулятор с Микроном и... закрыл)

Vladimir_S
20.11.2017, 14:25
открыл эмулятор с Микроном и... закрыл)
Я же не заставляю. При том, что когда начал пробовать микрон(в 1987г.) про винду даже не слыхал.

norduk
20.11.2017, 17:54
Я же не заставляю. При том, что когда начал пробовать микрон(в 1987г.) про винду даже не слыхал.

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

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

Пытаюсь на винасме (точнее fasmg) скомпилировать код отсюда - http://zx-pk.ru/threads/27478-sekrety-i-tryuki-programmirovaniya-(v-tom-chisle-i-igr)-dlya-rk-86.html?p=904186&viewfull=1#post904186

Ругается на незакрытые скобки (Error: missing closing parenthesis.) на строчках:

mvi m, dma_param_1
mvi m, dma_param_2
mvi m, dma_param_3
mvi m, dma_param_4

Это в процедуре InitDma.

wtf?

b2m
20.11.2017, 18:33
wtf?
fasmg не понимает & и >>
Надо писать and и shr

norduk
20.11.2017, 19:43
fasmg не понимает & и >>
Надо писать and и shr

Ага, вот оно как... Спасибо!

norduk
21.11.2017, 07:57
Как запустить emu80 в режиме отладки?

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

4 версия

norduk
23.11.2017, 14:56
Кто-нибудь может выложить код, как включить нестандартный видеорежим РКшки (без межстрочных дырок)? Изучил соседнюю ветку "Секреты и трюки", но конкретного примера там не нашёл.
Устроит мнемоника Z80, в i8080 сам переведу. И, желательно, цветной(-ые) варианты в т.ч.

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


у мня в мнемониках 8080 плохо в голове думается Возможно когда двигаешь - не учитываешь флаг переноса. При малых значениях адреса не происходит переполнения, а при бОльших - происходит, и указатель прыгает на (адрес-256) назад.
А дело-таки в этом и было)) Сплошные inr L, вместо inx H)

SegaBoy
23.11.2017, 16:46
Кто-нибудь может выложить код, как включить нестандартный видеорежим РКшки (без межстрочных дырок)? Изучил соседнюю ветку "Секреты и трюки", но конкретного примера там не нашёл.
...
http://zx-pk.ru/threads/27478-sekrety-i-tryuki-programmirovaniya-(v-tom-chisle-i-igr)-dlya-rk-86.html?p=904186&viewfull=1#post904186

Чтобы убрать две межстрочные линии, нужно выставить количество линий в строке равное 8. Для сохранения режима 50Hz количество видимых строк увеличить до 30, а верхний и нижний отступы довести до 4-х.

zebest
23.11.2017, 16:49
но это дольше)
в спомнил!
http://zx-pk.ru/threads/25076-mir!-trud!!-maj!!!.html?p=801055&viewfull=1#post801055

HardWareMan
23.11.2017, 18:06
В что?

norduk
23.11.2017, 20:51
Выкладываю. Особо там не чистил) Но вроде работает.

norduk
23.11.2017, 23:13
Из всех скинутых примеров реально работает (именно так как надо, без дырок на 50Hz) только от DDp (http://zx-pk.ru/threads/25076-mir!-t...l=1#post801055). Пытаюсь скомпилить на winasm'е с fasm'ом, естественно, fasm не понимает
HIGH FUNCTION X,((X shr 8) and 0ffh)
LOW FUNCTION X,(X&0ffh)
Это можно заменить на какие-нибудь константы?


http://zx-pk.ru/threads/27478-sekrety-i-tryuki-programmirovaniya-(v-tom-chisle-i-igr)-dlya-rk-86.html?p=904186&viewfull=1#post904186

Чтобы убрать две межстрочные линии, нужно выставить количество линий в строке равное 8. Для сохранения режима 50Hz количество видимых строк увеличить до 30, а верхний и нижний отступы довести до 4-х.

С данным кодом поведение в эмуляторах такое, что просто разъезжается экран (т.е., он как будто бы становится больше), а на реальной машине вот такое поведение - http://my-files.ru/sf3iwi
Синхронизация слетает.. При настройках в 8 линий в строке (line_per_row), количество видимых строк 30 (v_act), отступы (v_back, v_frone) по 4 сверху и снизу.

Что я делаю не так?

zebest
24.11.2017, 00:03
исходники от DDp под ассемблер X8085 и компиляцца, и работают после. Довольно хороший асм, но я все равно под ужасм переделывал, привычнее, чо. В моем примере в принципе то же самое, но в формате Z80.


Но вроде работает.
Ага. Заменил 7 инструкций, и у мну заработало правильно.

SegaBoy
24.11.2017, 09:06
...
С данным кодом поведение в эмуляторах такое, что просто разъезжается экран (т.е., он как будто бы становится больше), а на реальной машине вот такое поведение - http://my-files.ru/sf3iwi
Синхронизация слетает.. При настройках в 8 линий в строке (line_per_row), количество видимых строк 30 (v_act), отступы (v_back, v_frone) по 4 сверху и снизу.

Что я делаю не так?
Всё правильно делаете, это мой код немного неудачно написан - если строк больше какого-то количества, то вместо символов в экран лезут уже атрибуты. Не стал исправлять, так как этот момент наглядно показывает уплывание экрана на рк86 при случайном попадании атрибута в экранную область. Надо выставить 1 в параметре no_trans_attr, тогда ничего уплывать не будет.
Плюс к этому параметр under_line должен быть 8 или меньше, иначе не отображаются верхняя и нижняя строки в знакоряде. И параметр offset_line выставлен в 1, иначе символы псевдографики будут покорёжены.

norduk
24.11.2017, 10:55
исходники от DDp под ассемблер X8085 и компиляцца, и работают после. Довольно хороший асм, но я все равно под ужасм переделывал, привычнее, чо. В моем примере в принципе то же самое, но в формате Z80.
Ага. Заменил 7 инструкций, и у мну заработало правильно.

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

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


Всё правильно делаете, это мой код немного неудачно написан - если строк больше какого-то количества, то вместо символов в экран лезут уже атрибуты. Не стал исправлять, так как этот момент наглядно показывает уплывание экрана на рк86 при случайном попадании атрибута в экранную область. Надо выставить 1 в параметре no_trans_attr, тогда ничего уплывать не будет.
Плюс к этому параметр under_line должен быть 8 или меньше, иначе не отображаются верхняя и нижняя строки в знакоряде. И параметр offset_line выставлен в 1, иначе символы псевдографики будут покорёжены.

По результатам: в emu80v4 - черный экран, в emub2m - черный экран. Код транслировал winasm+fasm. Вечером попробую на реале.

Но,

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

Раз уж на то пошло, то, естественно, после того, как я получу режим без дырок между строчками, мне потребуется цвет)

SegaBoy
24.11.2017, 11:40
...
По результатам: в emu80v4 - черный экран, в emub2m - черный экран. Код транслировал winasm+fasm. Вечером попробую на реале.
...

Я использовал Прекрасный ассемблер (http://sensi.org/~svo/i8080/). Проверял в emu v1.01 (так он о себе сообщает) и в emu80 v4.0.266, в обоих случаях выбрав конфиг Радио-86РК. А так же на реальном Апогее (поправив адреса портов и подпрограмм).
Во вложении скриншоты с эмуляторов и сгенерированый .rk файл.

П.С. В прошлом сообщении перепутал - параметр offset_line должен быть сброшен в 0.

norduk
24.11.2017, 13:06
Я использовал Прекрасный ассемблер (http://sensi.org/~svo/i8080/). Проверял в emu v1.01 (так он о себе сообщает) и в emu80 v4.0.266, в обоих случаях выбрав конфиг Радио-86РК. А так же на реальном Апогее (поправив адреса портов и подпрограмм).
Во вложении скриншоты с эмуляторов и сгенерированый .rk файл.
63032

П.С. В прошлом сообщении перепутал - параметр offset_line должен быть сброшен в 0.

Сбросил, странлировал в "прекрасном" и вот что получил:
http://s011.radikal.ru/i318/1711/b6/7c46fde2f2b5.png

Забегая вперёд, скажу, что изменения offset_line в моём случае ни на что не повлияли.

А вот так выглядит болдер на этих же эмуляторах:
http://s010.radikal.ru/i313/1711/eb/407279be9d62.png

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

И, да, кстати, на живой РК86 это болдер работает (с блекджеком и так далее).

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

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



prompt equ 0F86Ch
clr_scr equ 0FACEh
wait_any_key equ 0xF803 ; ожидание нажатия клавиши

screenlc equ 077D0h ; фиксируем левый верхний угол видеопамяти
screenh equ 25 ; высота видимой области
screenw equ 64 ; ширина видимой области

; параметры горизонтальной строки (в символах)
h_back equ 8 ; отступ слева
h_act equ 64 ; видимых символов в строке
h_front equ 6 ; отступ справа
h_sync equ 8 ; строчный синхроимпульс (2..32)
h_total equ h_back + h_act + h_front ; общее количество символов в строке без учёта синхроимпульса (1..80)


scr_addr: dw 0000h

org 0100h

InitDisplay:
xra a
sta 0xC001
mvi a,04DH
sta 0xC000
mvi a,022H ;в коде от SB - 25h
sta 0xC000
mvi a,077H ;в коде 97h
sta 0xC000
mvi a,053H
sta 0xC000

mvi a,027H
sta 0xC001

mvi a,080H
sta 0xC001
sta 0xC000
sta 0xC000
lda 0xC001
lda 0xC001


ani 020H

InidDma:
mvi a,080H
sta 0xE008

mvi a,000H
sta 0xE004
mvi a,060H
sta 0xE004
mvi a,0A9H
sta 0xE005
mvi a,04AH
sta 0xE005

mvi a,0A4H
sta 0xE008

mvi a,036H
sta 0xA003
mvi a,076H
sta 0xA003
mvi a,0B6H
sta 0xA003

mvi a, 0A4h
sta 0xE008

mvi A, 0Fh
lxi HL, 078B2h
repeat:
mvi M, 11h
inx H
dcr A
jnz repeat
;call repeat

jmp prompt

SegaBoy
24.11.2017, 13:29
Монитор РК86 выставляет такие параметры инициализации ВГ75:
0x4D - символов в строке = 78
0x1D - строк в кадровом импульсе = 1, строк в кадре = 30
0x99 - подчёркивание на линии 10, количество линий в строке = 10
0x93 - первая линия символа -1, невидимые атрибуты, курсор мигающее подчёркивание, строчный синхроимпульс = 8 символов

Болдер инициализирует ВГ75 так:
0x4D - символов в строке = 78
0x22 - строк в кадровом импульсе = 1, строк в кадре = 35
0x77 - подчёркивание на линии 8, количество линий в строке = 8
0x53 - первая линия символа 0, невидимые атрибуты, курсор мигающее подчёркивание, строчный синхроимпульс = 8 символов

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


...
Что-то мы делаем не так)
...
Ну да, похоже на то = ))

Добавил процедуру инициализации экрана в пример draw_pic - экран становится уже, переходит в режим 60Hz, но всё работает. Проверил на двух эмуляторах.

63038

norduk
24.11.2017, 15:01
Добавил процедуру инициализации экрана в пример draw_pic - экран становится уже, переходит в режим 60Hz, но всё работает. Проверил на двух эмуляторах.
6303763038
Клёво, это то, что надо. А исходник можно увидеть?

HardWareMan
24.11.2017, 15:47
Сделайте генерацию QR кода!

SegaBoy
24.11.2017, 16:10
Клёво, это то, что надо. А исходник можно увидеть?
Выделил вставленный мной фрагмент.

norduk
24.11.2017, 16:49
63040
Выделил вставленный мной фрагмент.

Благодарю. Не дождался, полез дизассемблировать))) Но всё равно спасибо, так нагляднее.
Кажется, стало получатся.

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

Чуть позже доберусь до реального РК и поэкспериментирую на нём.

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

Верно ли я понимаю, не вдаваясь в детали, что для программирования цвета мне нужно на ВГ75 отправить команду остановки вывода символов, далее какой-то спецкод цвета, далее снова включить вывод символов и далее все символы будут печататься тем цветом, код которого я отправил в ВГшку?

norduk
24.11.2017, 16:57
неверно. ничего отсанавливать не надо. Для цвета используются некоторые атрибутные символы. поэтому картинка и на ч\б будет. и на цветном, если этот режим загрузить. это елси не вдаваЦЦа в детали
Ага, понял. Будем пробовать.

norduk
24.11.2017, 23:07
63040
Выделил вставленный мной фрагмент.

Результаты на реальном компе пока такие.
На 60 герцах - http://radikal.ru/video/HpMbb3nnEhI
На 50 герцах (исходник прилагаю) - http://radikal.ru/video/2iZhyg7rFFZ

Цветные игры (в т.ч. болдер) на этом тв-тюнере тоже слетают, а вот демка от DDp функционирует корректно.
Какие у неё параметры?

;Compile with "Macro Assembler AS" http://john.ccac.rwth-aachen.de:8000/as/
HIGH FUNCTION X,((X>>8)&0ffh)
LOW FUNCTION X,(X&0ffh)
;
include "config.asm"
SCREEN: equ 746ch ;0x8000-78*38
IF RADIO86RK
CTRL_CRT: equ 0c000h
CTRL_DMA: equ 0e000h
ELSEIF MIKROSHA
CTRL_CRT: equ 0d000h
CTRL_DMA: equ 0f800h
ELSEIF APOGEE
CTRL_CRT: equ 0ef00h
CTRL_DMA: equ 0f000h
ENDIF

org 0000h
lxi sp,SCREEN-1
lxi h,SCREEN
xra a
mov c,a
clrscr1:mov m,c
inx h
ora h
jp clrscr1

lxi h,CTRL_CRT+1
mvi m,80h
dcx h
mov m,c
mov m,c
inx h
mov m,c
dcx h
mvi m,4dh
mvi m,25h
mvi m,07h
mvi m,73h

inx h
mvi m,27h

mov a,m
wait0: mov a,m
ani 20h
jz wait0
lxi h,CTRL_DMA+8
mvi m,80h
mvi l,04h
mvi m,LOW(SCREEN)
mvi m,HIGH(SCREEN)
inr l
mvi m,93h
mvi m,4bh
mvi l,08h
mvi m,0a4h

Из того, что я понял,

0x4D - символов в строке = 78
0x25 - строк в кадровом импульсе - ?, строк в кадре = 38 (?) или нет?

собственно, больше я ничего и не понял.
1) Как расшифровать 07h и 73h(3 и 4 параметры ВГшки)?
2) Неясны значения функций, а точнее, непонятно как соотносятся
screen_addr & 0x00FF из примера с LOW FUNCTION X,(X&0ffh) из исходника DDp (но здесь хотя бы логика аналогична), а вот тут
screen_addr >> 8 из примера с HIGH FUNCTION X,((X>>8)&0ffh) из исходника.
3) Как расшифровать 93h и 4bh (3 и 4 параметры ВТшки)?

Чувствую, я уже близко)

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

Такое ощущение, что с частотой и настройками ВГшки всё ок, а вот адресация видеопамяти идёт не пойми куда...

SegaBoy
25.11.2017, 11:33
...
Такое ощущение, что с частотой и настройками ВГшки всё ок, а вот адресация видеопамяти идёт не пойми куда...
В этом исходнике (что в файле) экран вылазит за 0x7FFF - а что там у РК86, вроде ОЗУ уже нет?
//0x76D0 + (78*38=2964) = 0x8264
Может в этом проблема?

В моём тестовом примере адрес экранной области можно указывать произвольный, тем самым не загоняя себя в рамки стандартного экрана. А зачем вообще его помещать с адреса 0x76DO? Пускай там живёт экран Монитора.
Ну или если очень надо, то применять спецсимволы 0xF0, 0xF1, 0xF2 и 0xF3. Тогда нужно пересчитать размер экранной области пересылаемой контроллером ПДП.

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



...
1) Как расшифровать 07h и 73h(3 и 4 параметры ВГшки)?
...

0x07 = UUUU_LLLL = 0000_0111
0000 - линия подчёркивания = 1
0111 - линий в строке = 8

0x73 = M_F_CC_ZZZZ = 0_1_11_0011
0 - символ выводится нормально, без сдвига
1 - атрибуты отображаются в виде пустого знакоместа
11 - курсор немигающее подчёркивание
0011 - 8 символов в строчном синхроимпульсе

Вот тут всё расписано http://emuverse.ru/wiki/Intel_8275/Документация. См. параметры команды Сброс.

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


...
3) Как расшифровать 93h и 4bh (3 и 4 параметры ВТшки)?
...
= 0x4B93, где 0x4 это вид обмена ПДП (чтение), а 0xB93 = 2963 (78*38=2964 байта для пересылки контроллером ПДП в экранную область).
Вроде так. Подробнее тут http://emuverse.ru/wiki/Intel_8257/Документация

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


...
2) Неясны значения функций, а точнее, непонятно как соотносятся
screen_addr & 0x00FF из примера с LOW FUNCTION X,(X&0ffh) из исходника DDp (но здесь хотя бы логика аналогична), а вот тут
screen_addr >> 8 из примера с HIGH FUNCTION X,((X>>8)&0ffh) из исходника.
...
Это просто способ получить для ассемблера старший и младший байт начала экранной области.

norduk
25.11.2017, 13:39
В этом исходнике (что в файле) экран вылазит за 0x7FFF - а что там у РК86, вроде ОЗУ уже нет?
//0x76D0 + (78*38=2964) = 0x8264
Может в этом проблема?

Очень похоже. Мистика, в общем. Как оно и бывает)
Взял дизассемблировал демку DDp, построчно вбил инициализацию ВГ и ВТ, отрисовал несколько кубиков - заработало.
Перенёс код из примера со всеми константами - всё ещё работало.
Перенёс свой код с рисунком - оно продолжает работать))

В эмуляторе пашет, попозже попробую на реале.

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

И на реале пашет! УРА!

Pyk
28.11.2017, 20:15
Как запустить emu80 в режиме отладки?

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

4 версия

Alt-D, если еще актуально.

norduk
28.11.2017, 22:51
Alt-D, если еще актуально.

Да, актуально, спасибо. Но это я знаю) Речь о запуске самого эмуля сразу в режиме отладки.
Это к вопросу об использовании оболочки winasm+fasm. Так вот в winasm можно указать путь к эмулятору как для запуска в нём транслированного кода, так и для отладки.

В общем, не такая уж это необходимость запуск в режиме отладчика прямо из коммандной строки, но определённый смысл в этом есть)

norduk
29.11.2017, 14:48
Продолжу свои нубские распросы.
Итак, мы получили экран 50Hz без двух линий растра в каждой строке, таким образом склеили псевдографику, которой теперь можно полноценно рисовать.
Естественно, что теперь охота получить цвет.
Взял исходник, убрал всю алгоритмическую чушь, оставил только настройки видео и попытался вывести пару разукрашенных символов псевдографики - не вышло ничего.
Ожидаемо при no_trans_attr=1 экран уплывает (уплывает, а атрибуты всё равно не применяются), при ноль - атрибуты также не применяются...

Что делать?
Исходник прилагаю.

SegaBoy
29.11.2017, 17:06
Уплывание экрана никак не связано с цветом. Цвет можно проверить и без программы. С помощью директивы Монитора 'M' поместить в экранную область какое-нибудь значение соответствующее цветному атрибуту.

63109

Если цвета нет, то скорее всего что-то не так со схемой его получения.

Pyk
29.11.2017, 22:06
norduk, принимается, постараюсь сделать ключик командной строки для этой цели: что-то вроде "-d" или "--debug"...

norduk
30.11.2017, 10:16
Уплывание экрана никак не связано с цветом. Цвет можно проверить и без программы. С помощью директивы Монитора 'M' поместить в экранную область какое-нибудь значение соответствующее цветному атрибуту.

63109

Если цвета нет, то скорее всего что-то не так со схемой его получения.

Забавно. При этом:
http://s015.radikal.ru/i331/1711/cc/693fd2820427.png

Т.е., emu1.1-b2m (при выбранном Radio86RK-color) - у меня уплывает, emu80v3 - ок, а emu80v4 - тоже уплывает.
Вбиваю, как можно догадаться: M77C2 и заношу туда 85, всё.

Какой комп там был выбран в эмуляторе?

b2m
30.11.2017, 10:25
Какой комп там был выбран в эмуляторе?
Судя по заголовку Radio86RK-color, а позиция курсора указывает, что когда был сделан скрин, всё тоже "уплывало".

norduk
30.11.2017, 11:48
Вроде что-то стало получатся.
http://s010.radikal.ru/i312/1711/a4/d6b3178b3608.png

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

Получается вот так.
http://s015.radikal.ru/i332/1711/55/015dcca1debd.png

Два вопроса:
1) Ко всем - как вывести цветные символы без пробелов между ними? Т.е., если я правильно понимаю, то при включении нужного режима атрибутные параметры ВГ75 просто не отображает (но память при этом они, разумеется, занимают). Именно поэтому возникает ситуация, когда размер видеопамяти может меняться при изменениях атрибутов на значения символов и наборот...
2) К SegaBoy, внезависимости от no_trans_attr картинка в emu80v3 у меня одинаковая. Сейчас попробую в других эмуляторах. В других эмулях ничего не рисует)



.org 33h

;--------------------------------------------------------------------------
;************************************************* *************************

screen_addr equ 0x746C ; адрес экранной области (можно переназначить в другое место)

; параметры горизонтальной строки (в символах)
h_back equ 8 ; отступ слева
h_act equ 64 ; видимых символов в строке
h_front equ 6 ; отступ справа
h_sync equ 8 ; строчный синхроимпульс (2..32)
h_total equ h_back + h_act + h_front ; общее количество символов в строке без учёта синхроимпульса (1..80)

; параметры кадра (в строках)
v_back equ 4 ; отступ сверху
v_act equ 30 ; видимых строк в кадре
v_front equ 4 ; отступ снизу
v_sync equ 1 ; кадровый синхроимпульс (1..4)
v_total equ v_back + v_act + v_front ; общее количество строк в кадре без учёта синхроимпульса (1..64)

line_per_row equ 8 ; линий в строке (1..16)
under_line equ 8 ; позиция линии подчёркивания в строке (1..16) если этот параметр больше 8, то верхняя и нижняя линии в строке гасятся
spaced_row equ 0 ; пропущенные строки (0..1) если 1, то каждая вторая строка гасится (соответственно и строк в кадре надо указывать в два раза меньше, и память под экран занимает в два раза меньше)
offset_line equ 0 ; смещение для первой линии в строке символов (0..1) если 1, то первая линия строки будет отображаться второй (для псевдографики нужно ставить 0)
no_trans_attr equ 0 ; отображаемые атрибуты (0..1) если 1, то атрибут отображается как пустой символ и занимает место в видеопамяти (на Радио-86РК стоит по умолчанию 0, поэтому если кинуть атрибутом в экран он начинает уплывать)
cursor_type equ 1 ; тип курсора (1..4)

; команды и параметры для инициализации контроллера дисплея
disp_ctrl_addr equ 0xC000 ; адрес контроллера дисплея
disp_reset_com equ 0 ; команда Сброс
disp_param_1 equ spaced_row*128 + h_total - 1
disp_param_2 equ (v_sync - 1)*64 + v_total - 1
disp_param_3 equ (under_line - 1)*16 + line_per_row - 1
disp_param_4 equ offset_line*128 + no_trans_attr*64 + cursor_type*16 + h_sync/2 - 1
disp_cursor_com equ 0x80 ; команда Установка курсора
disp_start_com equ 0x27 ; команда Начать отображение
disp_ir_flag equ 0x20 ; константа для проверки флага Запрос прерывания

; команды и параметры для инициализации контроллера ПДП
dma_ctrl_addr equ 0xE000 ; адрес контроллера ПДП
dma_reset_com equ 0x80 ; команда Сброс
dma_param_1 equ screen_addr & 0x00FF
dma_param_2 equ screen_addr >> 8
dma_param_3 equ (0x4000 + h_total*v_total - 1) & 0x00FF
dma_param_4 equ (0x4000 + h_total*v_total - 1) >> 8
dma_start_com equ 0xA4 ; команда Запуск ПДП

;----------------------------------
;чистим область ОЗУ для экрана
;----------------------------------
mov m,e
cmp e
lxi sp,0746BH
lxi h,0746CH
xra a
mov c,a

clrscr:
mov m,c
inx h
ora h
jp clrscr


InitDisplay:
lxi h, disp_ctrl_addr + 1
mvi m, disp_reset_com
dcr l
mvi m, disp_param_1
mvi m, disp_param_2
mvi m, disp_param_3
mvi m, disp_param_4
inr l
mvi m, disp_cursor_com
dcr l
mvi m, 0xFF
mvi m, 0xFF
inr l
mvi m, disp_start_com
mov a, m

WaitFlag:
mov a, m
ani disp_ir_flag
jz WaitFlag

InitDma:
lxi h, dma_ctrl_addr + 8
mvi m, dma_reset_com
mvi l, 4
mvi m, dma_param_1
mvi m, dma_param_2
inr l
mvi m, dma_param_3
mvi m, dma_param_4
mvi l, 8
mvi m, dma_start_com

************************************************** ************************
;--------------------------------------------------------------------------

pic_start_addr equ screen_addr + 140h


lxi HL, pic_start_addr ; задаём верхний угол экрана
mvi A, 0Fh ; задаём счётчик
mvi C, 080h ; задаём начальный цвет

once_again:
mov M, C ; пишем цвет
inr C
inx H

mvi M, 12h ; пишем символ

inx H
dcr A
jnz once_again

inf_cyc:
jmp inf_cyc


;-----------------------------------------------------------------

SegaBoy
30.11.2017, 12:57
...
2) К SegaBoy, внезависимости от no_trans_attr картинка в emu80v3 у меня одинаковая. Сейчас попробую в других эмуляторах. В других эмулях ничего не рисует)
...
А вопрос какой?
--------------------
Атрибуты бывают всего в двух состояниях - отображаемые как пустое знакоместо или неотображаемые вовсе. Четвёртый параметр команды Сброс (ВГ75) состоит из M_F_CC_ZZZZ, где F это Field Attribute Mode. 0 = Transparent, 1 = Non-Transparent.
Если атрибуты отображаются как пустое знакоместо, то размер пересылаемых данных контроллером ПДП в стандартном случае равен X*Y знакомест (так как раз сделано в моём примере, ведь тогда речь шла только о количестве линий в строке и количестве строк в экране). Если атрибуты не отображаются, то есть несколько способов.
Например, увеличить размер ПДП на количество атрибутов в экране. Но тут экран опять уплывёт если добавить/убрать атрибут в экранную область в дальнейшем.
Можно поместить в конец экранной области спецсимвол 0xF3 (Конец экрана, стоп ПДП). Тогда ничего никуда уплывать не будет, сколько атрибутов не добавляй/убирай. Но могут наблюдаться сдвиги строк.
Или ставить в конце строк спецсимвол 0xF1 (Конец строки, стоп ПДП).

В любом случае это требует некоторого опыта, навыков и трюков. На примере Болдера очень хорошо видно, что атрибут включён в начале строки и выключен в конце. Именно поэтому мы и наблюдаем полосатое цветное поле (как в некоторых играх на атари 2600) и персонажа меняющего цвет при перемещении вверх-вниз. Там ведь не сделаны разным цветом камни, алмазы, стены, и сам персонаж. В таком виде это аналог цветных накладок на экраны в древних чёрно-белых игровых автоматах. Иначе это потребует виртуозного программирования и пересчётов экрана во время самого игрового процесса (у vinxru были такие примеры).

norduk
30.11.2017, 14:12
Спасибо, что разжевали. Попробую переварить и поиграться со спецсимволами.
А такой момент: если ограничение на количество изменений атрибутов в строке - 16, то почему нельзя эти 16 байт заложить на каждую строку (разумеется, при условии, что их потребуется заполнять, хотя бы даже и повторяющимися атрибутами) и таким образом получить прозрачную математику адресации?

SegaBoy
30.11.2017, 14:31
Почему нельзя? Можно = ))

zebest
30.11.2017, 14:38
Нужно. Делаешь режим с прозрачными атрибутами, и к своемуу спрайту спереди и сзади добавляешь по атрибуту, включить цвет\выключить. И двигаешь как и раньше, но на +2 шЫрше. ну или кажное знакоместо разукрашиваешь, тогда добавляешь поболее

norduk
30.11.2017, 15:41
Ну вот и решение) С этим уже "можно работать". Осталось только запрограммировать.

В таком случае выставляю:
1) h_act equ 80 ; видимых символов в строке
2) no_trans_attr=0
3) пересчитываю объём и адрес видеопамяти, сдвигаю на 480 байт назад (16*30) (на 0x728Ch, вместо 0x746Bh)..
И в результате....ожидаемо слетает синхронизация...) Это в emu80v4. В emu80v3 - без изменений: либо цветное, но с дырками, либо без дырок, но и без цвета)
В emuv1.1-b2m - совсем не запустилось..

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

Попробую поглядеть какие там выставлены параметры ВГ и ВТ.

SegaBoy
30.11.2017, 16:14
При использовании двух атрибутов на каждую строку в одном спрайте надо прибавить их количество к размеру ПДП. Например экран 78*30 = 2340. Спрайт 8*8 знакомест, итого 8*2 = 16 атрибутов (это если у нас один атрибут в начале каждой строки спрайта и один в конце). Значит настраиваем контроллер ПДП на размер пересылаемых данных 2340+16-1 = 2355 (0x0933). Параметры 3 и 4 для контроллера ПДП будут 0x33 и 0x49.
Нельзя настраивать контроллер ЭЛТ на 80 символов в строке, если синхроимпульс останется 8. Полная строка должна быть 86*6*0,125 = 64.5мкс (можно и 85*6*0,125 = 63,75мкс) иначе могут быть срывы на тв.
---------------------
Мы отдельно программируем контроллер ЭЛТ на размер экрана в стандарте тв 50 или 60 Гц и отдельно контроллер ПДП на реальное количество пересылаемых байт. Если используете мой пример, то он не был расчитан на работу с неотображаемыми атрибутами. Его надо либо изменить или написать свои процедуры.

norduk
30.11.2017, 16:44
Нужно. Делаешь режим с прозрачными атрибутами, и к своемуу спрайту спереди и сзади добавляешь по атрибуту, включить цвет\выключить. И двигаешь как и раньше, но на +2 шЫрше. ну или кажное знакоместо разукрашиваешь, тогда добавляешь поболее

Т.е., например, вместо
11h
я пишу
85h 11h 80h (или какой там был белый...)

Так?

b2m
30.11.2017, 16:54
Так?
И если прозрачные атрибуты, всё, что справа от 11h, двигается влево на 2 знакоместа :)

norduk
30.11.2017, 17:00
Спрайт 8*8 знакомест, итого 8*2 = 16
Так... теперь я совсем поплыл) И со спрайтами получается слишком мудрёно, а так как разукрашивать полосами неинтересно, то нужна математика для расчёта экрана для отображения 16 атрибутов в строку.
Моя мысль гораздо проще: получить статичную картинку разукрашенную максимально возможным количеством цветов на РКшке, а далее уже попробовать помудрить с адресацией видеопамяти.
Если я правильно понимаю, мы можем смещать указатель на видеопамять, а следовательно, можем организовать, например, две страницы с текущим изображением и тем, которое будет появляться в следующем "кадре". И попробовать их попереключать.

И посмотреть как всё это будет тормозить))

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


И если прозрачные атрибуты, всё, что справа от 11h, двигается влево на 2 знакоместа :)

Ааааа... :v2_dizzy_facepalm: :v2_dizzy_tired2: Двигается же только на экране, верно?
Т.е., у меня записано
0x0 85h
0x1 11h
0x2 80h
и при попытке отобразить эту бадягу на 0x0 у меня всё сползёт в координату 0 x -2 :-D

b2m
30.11.2017, 17:08
и при попытке отобразить эту бадягу на 0x0 у меня всё сползёт в координату 0 x -2
Нет, бодяга-то останется на месте, а вот фон сдвинется.

norduk
01.12.2017, 17:31
В общем, подумал я и решил, что для моих экспериментов пока хватит мне варианта с пробелами)
В итоге получилась вот такая цветастая клюква.
http://s018.radikal.ru/i509/1712/f6/9a809ecf5a32.png
https://www.screencast.com/t/pt9arPQAbKxN

Заменить на ёлку, добавить приветы и джинглбелз на ВИ53, и получится цветное новогоднее интро)

Pyk
03.12.2017, 17:22
В emu80v3 - без изменений: либо цветное, но с дырками, либо без дырок, но и без цвета
В Emu80v3 весьма ограниченная поддержка ВГ75+ВТ57, не стоит даже пробовать...

norduk
06.12.2017, 14:31
В A 99h, в С 02h, делаю так:

sub C
jp repeat

Значение A меняется на 97h.

Вопрос: почему меняется флаг знака с 0 на 1?

SegaBoy
06.12.2017, 17:31
Всё правильно. Флаг знака (S) это старший бит результата. В результате операции 0x99 - 0x02 = 0x97 (1001_1001b - 0000_0010b = 1001_0111b) старший бит равен 1 и ему же становится равен флаг S.
Если в примере выше происходит математическая операция с целыми числами, то флаг знака можно интерпретировать так - результат больше или равен 128 (0x80).
А если со знаковыми, то само значение 0x99 равно десятичному -103 и если вычесть 2 то получится -105 (0x97) и здесь флаг знака можно интерпретировать так - число в результате отрицательное.

norduk
06.12.2017, 20:22
Всё правильно. Флаг знака (S) это старший бит результата.
А, понял... С точки зрения малых чисел значит можно использовать в качестве отрицательного, только 7 бит, т.е., до 128.

norduk
06.12.2017, 23:45
Ещё вопрос: взял boulder.rkr, дизассемблировал и все места где идёт обращение на A000-A003 заменил на EC00-EC03, соответственно. Также заменил C001 на EF01, E000 на F000 и иже с ними. С картинкой - всё отлично. Апогеечные цвета один в один как на моём РК) Но это к делу не относится.
По делу - звук на Апогей с игрой переезжает, но как-то странно. Как будто два из трёх каналов. А третий фонит писком. На Апогее случаем, помимо адреса, местами каналы/управляющий вход не поменяны?

Для примера - вот прикладываю, да простят авторы за издевательство)

P.S. Кстати, проделал те же процедуры с Диззи - аналогичный эффект.

SegaBoy
07.12.2017, 00:23
Попробовал и в эмуляторе, и на реале - да, похоже какие-то глюки со звуком. И файл, кстати, грузится с ошибкой контрольной суммы.
Посмотрел болдердашы апогеевские, четыре штуки - три чёрно-белых и один почему-то чёрно-красный. Везде есть и музыка, и эффекты - глюков не наблюдается. Может лучше с ними сравнить и посмотреть в чём там дело?

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


...
На Апогее случаем, помимо адреса, местами каналы/управляющий вход не поменяны?
...
0xEC00 - канал 0
0xEC01 - канал 1
0xEC02 - канал 2
0xEC03 - управление

norduk
07.12.2017, 11:37
Попробовал и в эмуляторе, и на реале - да, похоже какие-то глюки со звуком. И файл, кстати, грузится с ошибкой контрольной суммы.
Посмотрел болдердашы апогеевские, четыре штуки - три чёрно-белых и один почему-то чёрно-красный. Везде есть и музыка, и эффекты - глюков не наблюдается. Может лучше с ними сравнить и посмотреть в чём там дело?

Да, отличная идея. Вечером гляну.

norduk
07.12.2017, 22:52
Опытным путём я выявил следующее: картинка - где надо, ВИ53 - где надо, а спецэффекты - всё там же. Есть ощущение, что они звучат через пищалку. Пищалка, вообще, где висит? К ней как обращаться? В РК и в Апогее, соответственно.

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

Именно так как я написал: заменил 8002 на ED02 и спецэффекты пошли куда надо. Остался какой-то паразитный звук, но это уже мелочи. Скорее всего кто-то не туда куда надо шлёт что-то. В общем, это детали. Вроде всё более-менее понятно. Осталось выяснить, где же сидит пищалка на моём РК)

SegaBoy
08.12.2017, 01:57
Если пищалка это пьезодинамик, то она висит в Апогее на первом канале ВИ53. Второй и третий канал на неё не заведены. При выводе трёхканального звука через тв она конечно совсем неуместна (я в итоге развинтил свой Апогей и выбросил её подальше). Но, еслиб дело было только в ней, то это не портило бы звук в эмуляторе и у меня на реальном Апогее (уже без пищалки).

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

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

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

Посмотрел как устроены РКашный и Апогеевские Болдеры. В обоих случаях музыка на заставке играет через первый канал ВИ53. Во время игрового процесса на нём же булькают спецэффекты - всякие пиликанья и переливы. А вот самые интересные эффекты - звуки топота, падение камней и сочные взрывы - выводятся через tape_out (у кого он никуда не подключён, могут даже и не догадываться о существовании этих эффектов).
Отличие во втором и третьем каналах ВИ53. На Апогее там тишина, а на РК выводится что-то совсем не похожее на музыку или звуки (это или просто мусор, или сигналы управления первым каналом по журнальной схеме).

norduk
09.12.2017, 00:02
Посмотрел как устроены РКашный и Апогеевские Болдеры. В обоих случаях музыка на заставке играет через первый канал ВИ53. Во время игрового процесса на нём же булькают спецэффекты - всякие пиликанья и переливы. А вот самые интересные эффекты - звуки топота, падение камней и сочные взрывы - выводятся через tape_out (у кого он никуда не подключён, могут даже и не догадываться о существовании этих эффектов).
Отличие во втором и третьем каналах ВИ53. На Апогее там тишина, а на РК выводится что-то совсем не похожее на музыку или звуки (это или просто мусор, или сигналы управления первым каналом по журнальной схеме).

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

Собственно, это что за такая недокументированная возможность - через tape_out?) Или она документированная, но неиспользуемая?
А, главное, как её применить с пользой дела?

В Апогее, значит, реальном, спецэффекты тоже должны молчать, если не подключить магнитофон или не вывести его сигнал на динамики?

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

И, кстати, апогеечный Болдер (тот, который самый увесистый на 23Кб) отлично стартует на РК с 32Кб памяти (а у него уровней больше :v2_dizzy_botan: ), поменял только порты ВГ-ВТ-ВИ и всё взлетело) А, ну и спецсимвол закраски поля заменил, так как в РК нет нужного...

norduk
09.12.2017, 11:46
Бросил провод с tape-out под резистор третьего неработающего канала ВИ53 и спецэффекты пошли в ящик! Ура! Остаётся открытым следующий вопрос: можно ли эту особенность использовать при программировании музыки на ВИ. Вроде что-то подобное делалось на Векторе 06Ц.

Pyk
09.12.2017, 12:07
Небольшие комментарии: если на Апогее для воспроизведения звука используются все 3 канала таймера, то на РК - толькол первый. А второй и третий могут использоваться для программирования длительности звука.
На реальном Апогее магнитофонный сигнал к выходу звука не подмешивается, но вывод звуковых эффектов на магнитофонный выход довольно широко использовался. Так что в случае боулдера часть звуков шла на один выход, часть - на другой. Можно было даже подключить стерео-колонки ;)

SegaBoy
09.12.2017, 15:17
Бросил провод с tape-out под резистор третьего неработающего канала ВИ53 и спецэффекты пошли в ящик! Ура! Остаётся открытым следующий вопрос: можно ли эту особенность использовать при программировании музыки на ВИ. Вроде что-то подобное делалось на Векторе 06Ц.
Вообще, лучше это делать изначально - свести все звуковые каналы в один. Например так сделано у фирменных Спектрумов (с AY) - три канала AY, плюс бипер, плюс tape_out и tape_in - все сведены в один. Таким образом через тв слышно основную музыку, биперные эффекты (а не писки через пищалку), так же процесс записи и наконец процесс загрузки (магнитофоны, плееры, телефоны и тд. отрубают внешний динамик при подключении наушников в разъём jack - и как тогда контролировать процесс загрузки на РК, в тишине?).

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

Таким образом можно получить в играх на РК пять голосов - три канала ВИ53 и два биперных - INTE и tape_out. Ну а по журнальной схеме только один канал ВИ и два биперных.

norduk
09.12.2017, 22:54
Небольшие комментарии: если на Апогее для воспроизведения звука используются все 3 канала таймера, то на РК - толькол первый. А второй и третий могут использоваться для программирования длительности звука.
На реальном Апогее магнитофонный сигнал к выходу звука не подмешивается, но вывод звуковых эффектов на магнитофонный выход довольно широко использовался. Так что в случае боулдера часть звуков шла на один выход, часть - на другой. Можно было даже подключить стерео-колонки ;)

Здесь непонятно: что значит - только первый? В том смысле, что "так применяли" или "так работает"?) Вот тут, например, добрые люди странслировали музыку супермарио под мои нестандартные порты и я слышу именно трехголосую мелодию, а не одно. Или же речь идёт об оригинальной схеме ВИ53 из журнала "Радио"?

При этом утверждение выше объясняет паразитные звуки в болдере на других каналах) Видимо, как и говорит SegaBoy, они как раз и применялись для управления длительностью, при подключении ВИ53 по оригинальной схеме.

А что именно это значит касаемо Апогея? В том плане, что мы получили три канала, но теперь не можем управлять некой длительностью?) Так как по факту из немногочисленных демок для Апогея можно услышать вполне себе приличный звук, похожий на AY.

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


Таким образом можно получить в играх на РК пять голосов - три канала ВИ53 и два биперных - INTE и tape_out. Ну а по журнальной схеме только один канал ВИ и два биперных.

Так в итоге, tape_out - это у нас что, ещё один однобитный канал?

barsik
09.12.2017, 23:57
Так в итоге, tape_out - это у нас что, ещё один однобитный канал?
Точно так.

Так можно получить программных 2 голоса и ещё один аппаратный из ВИ53 по схеме И.Крыловой из ж.РАДИО (11.1987). Для отмера временных интервалов (длительности нот - 1/2, четверть, 1/8-мая...) удобно использовать ВИ53, "читая на лету" из низкочастотного канала состояние счётчика, что даёт привязку к реальному времени без всяких прерываний.

Это если только в РК86 получается "чтение на лету". В ОРИОНЕ в 1992 у меня это не получилось, когда я хотел всего лишь написать аппаратные часы. Или ума не хватило или в ОРИОНЕ для ВИ53 такт слишком быстрый (ВИ53 рассчитан на 2 МГЦ). Если это не работает и на РК86, то если не пожалеть кусок проволоки, можно читать таймер через бит светового пера ВГ75.

Но если клавиатура родная (не MS7007), то есть и третий программный канал (свободный бит ППА уже запрограммированный на вывод), если не пожалеть один дополнительный резистор.

Два или даже три программных канала "не сделают погоду", а вот возможность иметь "вибрато" или формировать 2 уровня громкости, более ценно. Достаточно увеличить токоограничивающий резистор в цепи базы выходного эмиттерного повторителя и разориться на резистор идущий от бита TAPE OUT (если МНИП PC0) в базу этого транзистора.

Но сегодня у любителей ВИ53 праздник, т.к я наконец догадался как ввести нормальные возможности генерации звука из ВИ53. Так как это сделано в ПК11/16 (Союз-Неон), который на ВИ53 играет как оркестр. Думать пришлось целых 25 лет, но в итоге есть решение.

Pyk
10.12.2017, 00:32
norduk, конечно, речь идет об оригинальной схеме подключения ВИ53 из журнала.
2 и 3 каналы таймера на РК могли использоваться как программируемый одновибратор, определяющий длительность звука, запрограммированного первым каналом. То есть после задания частоты и длительности о таймере можно забыть - звук сам прекратится по истечении нужного времени (подробности см. в схеме подключения в журнале). В Апогее же забота о длительности ложится на процессор, который в нужный момент должен перепрограммировать таймер.

SegaBoy
10.12.2017, 03:15
Тут такой момент. Зачем задавать вместе частоту и длительность? Это будет какой-то одиночный тон? Если это набор звуков или музыка, то частоту (а с нею и длительность) придётся выставлять регулярно (до полного прекращения звучания сэмпла). Тогда какой смысл в том что одиночный тон прекратится сам? Ведь нам нужно будет далее воспроизвести следующий тон, а значит по-любому придётся обратиться к таймеру. А если обратились, то можем и сами отключить предыдущую частоту.
ВГ75 выставляет флаг IR 50 раз в секунду - этого вполне хватает чтобы вовремя включать/выключать частоту сразу у трёх каналов ВИ53.

barsik
10.12.2017, 03:54
Зачем задавать вместе частоту...
ВГ75 выставляет флаг IR 50 раз в секунду
Зачем задавать частоту - это вопрос к Pyk, а меня заинтересовала фраза про чтение флага IR из ВГ75. Если это работает, то это бесплатно даёт в РК86 аппаратный таймер. Если это работает, то легче делать музыку для базового РК86, чем для базового СПЕЦИАЛИСТА без прерываний.

Что это уже использовалось в музыкальных программах РК86 ?

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

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

Программную трёхголосную мелодию даёт MUSICBOX и муз.редактор СПЕЦИАЛИСТА. Кстати MUSICBOX на РК86 из-за ПДП даёт паршивый хриплый звук, а на СПЕЦИАЛИСТЕ и ОРИОНЕ, где ПДП отстутствует как класс, MUSICBOX звучит лучше.

tnt23
10.12.2017, 20:05
Но сегодня у любителей ВИ53 праздник, т.к я наконец догадался как ввести нормальные возможности генерации звука из ВИ53.

Малость запоздалый праздник. Любители ВИ53 посообразительней уже в 1987 году приспособили все три канала ВИ53 для полифонии, как минимум на лабораторных стендах кафедры ВТ ЛЭТИ.

barsik
10.12.2017, 21:17
на лабораторных стендах кафедры ВТ ЛЭТИ ещё в 1987 году приспособили все три канала ВИ53 для полифонии
Вопрос не в том, чтобы как-то приспособить ВИ53 для генерации звуков. Об этом догадались авторы ИРИШИ ещё в 1984 году.

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

Из всех отечественных ЭВМ только единственный ПК11/16 (Союз-Неон), которых, к сожалению, завод в 1992 выпустил всего несколько сотен экзампляров, может похвастаться, что в нём ВИ53 применён профессионально грамотно. Во всех остальных промышленных и любительских ЭВМ микросхема ВИ53, стоИт просто как генератор меандра. Потому ПК11/16 играет как AY-8912, а от всех остальных вянут уши.

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

В ВИ53 есть режим одновибратора по фронту. Принцип регулировки громкости и тембра заключается в широтно импульсной модуляции, т.е в изменении скважности меандра, точнее импульсов. Правильный меандр со скважностью 2 даёт максимальную громкость тона. А если выдавать с той же частотой лишь короткие импульсы, то после сглаживания небольшой ёмкостью возникает совсем тихий звук. Т.е меняя ширину импульсов мы меняем тембр и громкость.

На вход 2-х каналов идёт максимально допустимый такт (2 МГЦ). Первый канал даёт меандр, а второй канал запускает одновибрацию по переднему фронту. И программно управляемо отмеряет длительность проходящего на динамик импульса, укорачивая время в течение которого с выхода первого канала проходит единица.

Так формируется атака, затухание и вибрато. Отчего воспроизводимый звук становится похож на звук рояля или гитары. И таким образом, скоро наконец, я смогу слушать Баха, Бетховена, Моцарта и Вивальди. К сожалению, для 3-х голосия надо две ВИ53. В ПК11/16 не поскупились, поставили эти две ВИ53 и получили отличный результат.

Но даже, если есть всего одна ВИ53, то получается два голоса. Канал 0 даёт тон, канал 1 его одновибрирует, а канал 2 просто гудит, даёт меандром со скважностью 2 второй голос (разумно сделать его потише, как второстепенный).

uart
10.12.2017, 22:03
Я, ради интереса, переделал Boulder Dash для Апогея, что бы он не на tape out выводил, а на свободный канал ВИ53. Ещё и частоту видео поправил, а то мой телевизор изначальный режим не тянул. Если интересно, то могу поискать, хотя не уверен, что сохранил.

norduk
10.12.2017, 23:09
Я, ради интереса, переделал Boulder Dash для Апогея, что бы он не на tape out выводил, а на свободный канал ВИ53. Ещё и частоту видео поправил, а то мой телевизор изначальный режим не тянул. Если интересно, то могу поискать, хотя не уверен, что сохранил.

Разумеется, интересно.

norduk
20.02.2018, 10:45
Пытаюсь запрограммировать ВВ55. Висит на портах 0A00xH. Разобрался, что работает в трёх режимах 0,1,2.
Разобрался, что мне нужен 0. Также, кажется, разобрался с инициализацией управляющего слова и каналов.
Решаю простейшую задачу: получить на выходах канала А лог. 1
Делаю так:


lxi HL, 0A003h ;в регистр управляющего слова
mvi M, 080h ;записываю 1000 0000 (режим 0, все каналы на вывод)

lxi HL, 0A000h ;в канал A
mvi M, 0FFh ;пытаюсь писать FFh


На выходы A ничего не приходит. Что я делаю не так?

Vladimir_S
20.02.2018, 11:06
Что я делаю не так?
А на порту у тебя ничего не висит?

norduk
20.02.2018, 11:31
А на порту у тебя ничего не висит?
Нет. Ромдиск вытащен, флешдиск отключен.
На порту висит шлейф на конце которого втыкнут один диод (плюсом на один из выводов А канала и минусом на землю).
Вот, хочу его зажечь.
Для начала.

zebest
20.02.2018, 11:33
эх. давноо это было. каких-то 25-30 лет назад. Делал бегущие огни на ВВ55, сперва просто 8 шт, потом матриЦЦу 8х8.
(потом уже делал и 8х16, но уже на Profi :)
Программы и исходники даже если и остались, то точно не интересны, в эмуле не запустить, оченно уж аппаратно, поэтому особо не искал и не восстанавливал, ни те , ни другие))
ВВ55 лучше как порты программить, типа

MVI A,80H
OUT RUS
MVI A,0FFH
OUT A0
и т.д. Ничего сложного и удивительного. Сейчас бы конечно взял бы на кЕтайской матриЦЦе сделал на max-ax, елси бы не лень) ? их через ВВ55 программить

Vladimir_S
20.02.2018, 11:34
Обязательно поставь резистор примерно на 360 ом, а то спалишь вывод ВВ55.

norduk
20.02.2018, 12:06
Обязательно поставь резистор примерно на 360 ом, а то спалишь вывод ВВ55.
И ведь в каком-то мануале видел в схеме резисторы... Вечером прикручу и попробую ещё раз. Через OUT.

А такой вопрос: если ВВ висит на 0A000h-0A003h, а в OUT, насколько я понимаю, указывается сокращённое значение 00h-0FFh, то, указывая OUT A0h <---- в какой из трёх реальных портов ВВ55 пойдёт сигнал?? В тот, который(-ые) настроен(-ы) на вывод?

Типа, если, например, у меня

MVI A, 098H ; по 98h = 10011000. А у меня на вход, B у меня на выход
OUT RUS
MVI A, 0FFh
OUT A0 ; получу 11111111 на B, на А останется ничего
IN A0; получу в аккумулятор, что сейчас на канале A

Верно? Или как?

zebest
20.02.2018, 12:24
блин, не одно. так другое) ну тогда держи в мнемониках Z80 и без портов, то жи ОБЯЗАНО! работать


PPA2: equ 0A000h


ld a, 80h
ld (PPA2+3), a
ld a, 0FFh
ld (PPA2+0), a

DonkeyHot
20.02.2018, 12:37
коллеги, ассемблер без практики, а лучше портирования ценоости мало имеет. Может к практике? Ида штука полезная, но было бы интереснее ZX портировать. Основная логика не меняется, обращения к графике. Помнится был такой ксакеп в 90-х romalex. Интересно Рома или брат его тут появляются? Знаю что в Новосибе кто-то из них осел.

Vladimir_S
20.02.2018, 14:02
не только лишь все
Это куда?

DonkeyHot
20.02.2018, 14:19
Это куда?

это значит что мало кто способен понять элементарный ret хотя бы по флагам и стеку

Vladimir_S
20.02.2018, 14:26
понять элементарный ret хотя бы по флагам и стеку
У меня аж в голове верчение сделалось.

DonkeyHot
20.02.2018, 14:38
ну, бывает, у меня в 80-х на специалисте вообще бессонница случилась, когда я понял как ассемблер работает

barsik
20.02.2018, 18:01
ассемблер без практики, а лучше портирования ценности мало имеет. Может к практике? IDA штука полезная, но было бы интереснее ZX портировать. Основная логика не меняется, обращения к графике.

Не могли бы Вы пояснить эти фразы. Увы, я не понял о чём речь.

Предположительно, Вы хотели сказать, что изучение чужих программ дизассемблированных с помощью IDA малополезно и Вы советуете больше заниматься практикой программирования. А про портирование ZX вообще малопонятно. Т.к это тема про РК86, то логично предположить, что речь идёт о портировании программ ZX на РК86. Предположительно, Вы имеете ввиду такой РК86, что может отображать графику и имеет процессор Z80. Может быть у Вас уже есть опыт в портировании программ?


если, например, у меня



.
MVI A, 098H ; PА и PCH - на ввод, PB и PCL - на вывод
OUT RUS
MVI A, 0FFH
OUT A0 ; получу 11111111 на B, на А останется ничего
IN A0 ; получу в аккумулятор, что сейчас на канале A

Верно? Или как?

Почему Вы пишете "получу 11111111 на B", если FF выводите в порт A, а не в порт B. Это неверный комментарий. Комментарий должен относиться к команде на чей строке он написан. И "на PB Вы не получите 11111111", т.к ничего не записывали в порт B. А по установке режима порта на вывод, во всех разрядах порта оказывается 0. Т.е если Вы будете читать из порта B, то считаете нули.

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

Я вообще не понял цели этой программы. Т.е задача была что-считать с порта A, но непонятно тогда зачем что-то выводить в порт B. Или задача была проверить, что из порта B читается то, что в него было записано. Или же Вы соединили порт A и порт B и проверяете прохождение сигнала из порта B в порт A.

DonkeyHot
20.02.2018, 18:13
я не в эту тему писал, промахнулся

norduk
20.02.2018, 20:28
ОБЯЗАНО! работать
Да, всё получилось, спасибо)

Vital72
21.02.2018, 03:55
На порту висит шлейф на конце которого втыкнут один диод (плюсом на один из выводов А канала и минусом на землю).

Йобанный стыд! Извините за мой французкий. Изучи прежде элементарную электронику, чтоб не видеть здесь этой ахинеи.


Обязательно поставь резистор примерно на 360 ом, а то спалишь вывод ВВ55.

Ещё один гений электроники. Тут хоть кто-нибудь читал справочники? Значение словосочетания "нагрузочная способность" кроме меня тут кто-нибудь понимает?

Vladimir_S
21.02.2018, 04:47
кроме меня тут кто-нибудь понимает?
Нет конечно. А нагрузочная способность это умение много выпить и нормально добраться до дома. Кроме меня тут кто-нибудь понимает?

norduk
21.02.2018, 08:38
Цэнные комментарии)

zebest
21.02.2018, 08:54
кроме меня тут кто-нибудь понимает?
Ато!! Еще бабушка Пугачева на заре електрификации пела песТню "Нагружать всё больше нас стали почемуу-то..."

А вот и мой девайс из глубины веков. МатриЦЦа 8х8.
Справа как раз резисторы, но скорее всего уравнивающие, а не нагружательные)
Внизу 8шт. легендарных КТ315, а справа только дырдочки от отсутствующих чуть менее чем легендарных КТ361
у кетайцеф таких навернои щас не купить :(
а, ну и в самом низЕ - совремённайя матрица от них же, 32х8
http://s1.micp.ru/8YA85.jpg

Voxel
14.08.2019, 13:56
Сто лет не писал на ассемблере, а на ассемблере ВМ80 никогда. Прошу помощи с пониманием!

Написал маленькую программулину (пишу в эмуляторе на сайте http://rk86.ru/, к реалу доступа нет сейчас). Она делает следующее: в паре BC у нас координаты X и Y, подпрограмма coord рассчитывает адрес в экранной области и печатает туда символ 0. Далее через процедуру из ПЗУ мы опрашиваем клавиатуру и ждем нажатия "пробела", если нажат печатаем еще один символ, и так пока не достигнем конца экрана.

Засада в том, что при нажатии пробела печатается некое количество символов, как будто клавиша залипает. Ни как не могу это победить!




keyb_ask: EQU 0F812H ;опрос состояния клавиатуры
keyb_enter: EQU 0F803H ;ввод символа с клавиатуры код в A
keyb_ask_key: EQU 0F81BH ;опрос кода нажатой клавиши код в A
prn_symb: EQU 0F809H ;печать символа в C код символа
prn_line: EQU 0F818H ;печать строки в HL адрес строки
prn_hex EQU 0F815H ;печать в HEX в A байт
prompt EQU 0F86Ch

org 0
mvi b, 0
mvi c, 10
start: call coord
mvi m, '0'
start1: call keyb_ask_key
cpi 20H
jnz start1
mov a,b
cpi 64
jz prompt
inr b
jmp start



coord: push d ;B это x C это y
push b
lxi h,77c2h
lxi d,004eh
coord1: dad d
dcr c
jnz coord1
mov e,b
dad d
pop b
pop d
ret

Vladimir_S
14.08.2019, 17:20
Voxel, Завтра проверю на железе.

HardWareMan
14.08.2019, 17:38
Voxel, всё правильно. 0F812H опрашивает клавиатуру без ожидания. Используй 0F803H или сделай ещё один цикл проверки на отпускание кнопки.

Voxel
14.08.2019, 17:57
В общем задержка решила проблему.

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




keyb_ask EQU 0F812H ;опрос состояния клавиатуры
keyb_enter EQU 0F803H ;ввод символа с клавиатуры код в A
keyb_ask_key EQU 0F81BH ;опрос кода нажатой клавиши код в A
prn_symb EQU 0F809H ;печать символа в C код символа
prn_line EQU 0F818H ;печать строки в HL адрес строки
prn_hex EQU 0F815H ;печать в HEX в A байт
prompt EQU 0F86Ch
up EQU 19h
down EQU 1ah
left EQU 08h
right EQU 18h
enter EQU 0dh

org 0
mvi c,1fh
call prn_symb
mvi b, 0
mvi c, 1
start: call coord
mvi m, '0'
call delay
mvi m, ' '
start1: call keyb_ask_key
cpi up
jz go_up
cpi down
jz go_down
cpi left
jz go_left
cpi right
jz go_right
cpi enter
jz prompt
jmp start


go_up: mov a,c
cpi 1
jz start1
dcr c
jmp start
go_down: mov a,c
cpi 26
jz start1
inr c
jmp start
go_left: mov a,b
cpi 0
jz start1
dcr b
jmp start
go_right: mov a,b
cpi 64
jz start1
inr b
jmp start



coord: push d ;B это x C это y
push b
lxi h,77c2h
lxi d,004eh
coord1: dad d
dcr c
jnz coord1
mov e,b
dad d
pop b
pop d
ret

delay: push b
mvi b,020h
delay2: mvi c,0ffh
delay1: nop
dcr c
jnz delay1
dcr b
jnz delay2
pop b
ret

ivagor
14.08.2019, 19:00
Например так


org 0
mvi c,1fh
call prn_symb
mvi b, 0
mvi c, 1
lxi h,77c2h
shld XY
start:
lhld XY
xchg
call coord
call cmpHLDE
jz start1
mvi m, '0'
shld XY
xchg
mvi m, ' '
start1:
call keyb_ask_key
cpi 0FFh
jz start1

mov e,a
cpi up
jnz ChkDown
dcr c
jnz ChkDown
inr c
ChkDown:
cpi down
jnz ChkLeft
mvi a,26
cmp c
jz ChkLeft
inr c
ChkLeft:
mov a,e
cpi left
jnz ChkRight
dcr b
jp ChkRight
inr b
ChkRight:
cpi right
jnz ChkEnter
mvi a,64
cmp b
jz ChkEnter
inr b
ChkEnter:
mov a,e
cpi enter
jz prompt
call delay
jmp start

coord: push d ;B это x C это y
push b
lxi h,77c2h
lxi d,78
coord1: dad d
dcr c
jnz coord1
mov e,b
dad d
pop b
pop d
ret

delay: push b
lxi b,0400h
delay1: dcr c
jnz delay1
dcr b
jnz delay1
pop b
ret

cmpHLDE:
mov a,l
sub e
rnz
mov a,h
sbb d
ret

XY: dw 0

Kuprin
01.09.2019, 19:09
Добрый вечер. Собрал себе компьютер Радио-86рк, но он отказывается работать. Методика отладки компьютера предполагает использование чипа ПЗУ с особой тестирующей прошивкой. В седьмом выпуске журнала Радио за 1988 год приведен код этой программы на ассемблере. Я в этом языке не силен и не знаю, как преобразовать его в бинарный файл, который можно будет зашить в ПЗУ. Прошу вашей помощи.

Вот сайт, на котором есть ассемблер для Радио-86рк http://rk86.ru/

Вот вырезка из исходной статьи
http://img.radiokot.ru/files/134122/thumbnail/1zkprdlsuh.PNG (http://img.radiokot.ru/files/134122/1zkprdlsuh.PNG)

Вот тот же самый код, но в печатном виде
;Программа для наладки РАДИО-86РК
C000 = VG75 EQU 0C000H
E000 = VT57 EQU 0E000H
8000 = VV55 EQU 8000H
F800 ORG 0F800H
F800 C303F8 JMP BEGIN
;Инициализация KP580BB55
F803 ЗЕ8А MVI A,9AH
F805 320380 STA W55+3
;Инициализация КР580ВГ75
F808 2101C0 BEGIN: LXI H,VG75+1
F80B 3600 MVI M,B
F00D 2В DCX H
F80E 364D MVI M,4DH
F010 361D MVI M,1DH
F812 3699 MVI M,99H
F814 3693 MVI M,93H
; Инициализация КР580BT57
F816 3E80 MVI A,80H
P818 3208Е0 STA VT57+8
F818 2104E0 LXI H,VT57+4
F81E 36D0 MVI M,BD0H
F82a 3636 MVI M,36H
F822 23 INX H
F923 3623 MVI M,23H
f825 3649 MVI M,49H
; Старт ПДП
F827 3EA4 MVI A,0A4H
F829 3208E0 STA VT57+8
; Заполнение экранной области ОЗУ
F82С 210036 LXI Н,3600Н
F82F 7D LABEL1: MOV A,L
F850 E67F ANI 7FH
F832 77 MOV M,A
F833 23 INX H
F834 7C MOV A,H
F835 FE40 CPI 40Н
FB37 C22AF8 JNZ LABEL1
; Старт отображений
F83A 3E27 MVI A,27H
F83C 3201C0 STA VG75+1
; Проверка работы клавиатуры
F83F 210080 LXI H,W55
F842 367F MVI M,7FH
F844 7E LABEL2: MOV A,M
F845 07 RLC
F846 77 MOV M,A
F847 3A0180 LABEL3: LDA VV55+1
F84A 3C INR A
F84B C247F8 JNZ LABEL3
F84E C344F8 JMP LABEL2
F851 END

IgorR76
01.09.2019, 22:14
Kuprin, этот тест нехороший. На экране Вы ничего путного не увидите. Не заморачивайтесь с ним, запускайте обычный монитор.
А если хочется посмотреть тест, то в левом столбце адрес, правее код команды. Вот этот код забивайте по соотв. адресу, и получите прошивку. Правые столбцы листинга не нужны.

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

Спасибо за ответ.

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

Правда, товарищи с другого форума говорят, что в коде возможно есть ошибки.

IgorR76
01.09.2019, 23:39
Именно неработоспособность теста я и имел ввиду. Он не выводит на экран нормальную картинку.
Есть другой, большой тест, который сначала проверяет озу и периферию, потом уж пытается рисовать на телевизоре.
Поищите, он есть в архивах. Вспомнил, он с "шагателем", кнопка такая, по которой выполняется одна команда. Можно тестером следить за состоянием шин.

Вообще запуск только что самостоятельно спаянного компьютера дело непростое. Спаять - легко. Запустить и отладить - сложно.
Если это у Вас первый раз, то форумы вряд ли помогут. Нужен специалист с опытом и приборами, желательно локально у компа. Но возможно и удалённо, по видеосвязи.

Kuprin
02.09.2019, 08:52
Именно неработоспособность теста я и имел ввиду. Он не выводит на экран нормальную картинку.
Есть другой, большой тест, который сначала проверяет озу и периферию, потом уж пытается рисовать на телевизоре.
Поищите, он есть в архивах. Вспомнил, он с "шагателем", кнопка такая, по которой выполняется одна команда. Можно тестером следить за состоянием шин.

Мне кажется, вы именно об этом тесте и говорите. Вот статья целиком http://www.emuverse.ru/wiki/%D0%A0%D0%B0%D0%B4%D0%B8%D0%BE-86%D0%A0%D0%9A/%D0%A0%D0%B0%D0%B4%D0%B8%D0%BE_07-88/%D0%95%D1%89%D0%B5_%D1%80%D0%B0%D0%B7_%D0%BE_%D0%B D%D0%B0%D0%BB%D0%B0%D0%B4%D0%BA%D0%B5

Как раз предлагается подключить пошагиватель и проверять сигналы. А ближе к концу советуют подключить экран.

IgorR76
02.09.2019, 11:42
В номере журнала, где опубликована схема шагателя (№7 1986), есть дамп расширенного теста. Я его имел ввиду.

Kuprin
02.09.2019, 15:40
В номере журнала, где опубликована схема шагателя (№7 1986), есть дамп расширенного теста. Я его имел ввиду.

В начале статьи 1988 года пишут:
"Однако если этого не произошло, то «оживление» компьютера становится весьма трудоемкой задачей, поскольку методика, предложенная в июльском номере журнала за 1986 г., по отзывам читателей, оказалась малоэффективной. В настоящее время разработана новая методика, хорошо зарекомендовавшая себя при отлаживании большого числа компьютеров."

IgorR76
02.09.2019, 16:25
Ну как хотите. Тест из 86г проверяет память и периферию, этот новый из 88го - нет. На экране только намусорит.

Voxel
02.09.2019, 16:52
Kuprin,

Я использовал, если не путаю, данное тест ПЗУ 69927, и потом менял ОЗУ, пока РК не стал запускаться.

Kuprin
02.09.2019, 17:40
На другом форуме мне рассказали, как все сделать. Компилятор выдал бинарный файл для прошивки в ПЗУ и листинг программы на ассемблере, чтобы проверить себя. Все готово для прошивки, но есть пара вопросов.

Равносильна ли строчка F800 ORG 0F800H строчке F800 STARTUP ORG 0F800H?

Равносильны ли строчки F837 C22FF8 JNZ LABEL1 и F837 C22AF8 JNZ LABEL1?

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


Kuprin,

Я использовал, если не путаю, данное тест ПЗУ 69927, и потом менял ОЗУ, пока РК не стал запускаться.

Не факт, что у меня проблема с ОЗУ. Нужна более комплексная проверка.

Voxel
02.09.2019, 20:48
Равносильна ли строчка F800 ORG 0F800H строчке F800 STARTUP ORG 0F800H?
Команда ORG говорит компилятору с какого адреса компилировать программу. Верная строка ORG 0F800H.



Равносильны ли строчки F837 C22FF8 JNZ LABEL1 и F837 C22AF8 JNZ LABEL1?
Команда JNZ это условный переход при том что флаг не равен 0. Это правильная JNZ LABEL1.

Reobne
03.09.2019, 10:08
Верная строка ORG 0F800H.
Оба варианта равносильны. Во втором введена метка STARTUP.

Это правильная JNZ LABEL1.
Опять же, оба варианта равносильны, просто положение метки LABEL1 изменено на 5 байт.
Надо смотреть возле LABEL1, где она определена, почему сдвиг произошёл.

Kuprin
03.09.2019, 17:30
Почитал саму статью и исправление, приведенное на странице 36 4го выпуска журнала "Радио" за 1989. Вот финальный код программы.

1: - C000 VG75 EQU 0C000H
2: - E000 VT57 EQU 0E000H
3: - 8000 VV55 EQU 8000H
4: - F800 ORG 0F800H
5: 0+10 F800 C303F8 JMP BEGIN
6: 10+7 F803 3E8A BEGIN: MVI A,8AH
7: 17+13 F805 320380 STA VV55+3
8: 30+10 F808 2101C0 LXI H,VG75+1
9: 40+10 F80B 3600 MVI M,0
10: 50+5 F80D 2B DCX H
11: 55+10 F80E 364D MVI M,4DH
12: 65+10 F810 361D MVI M,1DH
13: 75+10 F812 3699 MVI M,99H
14: 85+10 F814 3693 MVI M,93H
15: 95+7 F816 3E80 MVI A,80H
16: 102+13 F818 3208E0 STA VT57+8
17: 115+10 F81B 2104E0 LXI H,VT57+4
18: 125+10 F81E 36D0 MVI M,0D0H
19: 135+10 F820 3636 MVI M,36H
20: 145+5 F822 23 INX H
21: 150+10 F823 3623 MVI M,23H
22: 160+10 F825 3649 MVI M,49H
23: 170+7 F827 3EA4 MVI A,0A4H
24: 177+13 F829 3208E0 STA VT57+8
25: 190+10 F82C 210036 LXI H,3600H
26: 200+5 F82F 7D LABEL1: MOV A,L
27: 205+7 F830 E67F ANI 7FH
28: 212+7 F832 77 MOV M,A
29: 219+5 F833 23 INX H
30: 224+5 F834 7C MOV A,H
31: 229+7 F835 FE40 CPI 40H
32: 236+10 F837 C22FF8 JNZ LABEL1
33: 246+7 F83A 3E27 MVI A,27H
34: 253+13 F83C 3201C0 STA VG75+1
35: 266+10 F83F 210080 LXI H,VV55
36: 276+10 F842 367F MVI M,7FH
37: 286+7 F844 7E LABEL2: MOV A,M
38: 293+4 F845 07 RLC
39: 297+7 F846 77 MOV M,A
40: 304+13 F847 3A0180 LABEL3: LDA VV55+1
41: 317+5 F84A 3C INR A
42: 322+10 F84B C247F8 JNZ LABEL3
43: 332+10 F84E C344F8 JMP LABEL2
44: - F851 END


И вот на всякий случай ссылки на скомпилированные файлы для прошивки в ПЗУ:
с расширением .cim https://drive.google.com/open?id=17DpKfTk7fi4P1RWa6-yG_8kIMpQDlpTK
с расширением .hex https://drive.google.com/open?id=1QdZStHawaNKrzZivU3cNGGIkubywWLSC

Всем большое спасибо!

zebest
03.09.2019, 19:56
мой вариант (под РК компиленый ест-но), практически такой же бесполезный. Зачем то для отладки Микроши делал. можно в бин-ку позаглядывать, на предмет текстовых строк)а так то да, пошагово каким нить логическим анализатором наверное можно что то увидеть, на предмет что куда пишется, но долго и муторно. Шагали.

Kuprin
03.09.2019, 20:31
мой вариант (под РК компиленый ест-но), практически такой же бесполезный. Зачем то для отладки Микроши делал. можно в бин-ку позаглядывать, на предмет текстовых строк)а так то да, пошагово каким нить логическим анализатором наверное можно что то увидеть, на предмет что куда пишется, но долго и муторно. Шагали.

Вариант, который я выбрал, снабжен обширной статьей с описанием всего процесса отладки http://www.emuverse.ru/wiki/Радио-86РК/Радио_07-88/Еще_раз_о_наладке

Pyhesty
10.05.2020, 01:42
Коллеги, какой набор утилит удобно использовать для написания на ассемблере i8080 под Виндой с уклоном в РК-86 в частности Апогей,
с последующей эмуляцией на Emu80? ну и компилятор совместимый соответственно ) спасибо)
=)) перерыл форум, явного ответа на увидел, программировать прямо на родном ассемблере в Emu не готов =))
посоветуйте плиз ) куда смотреть, что искать?

хобби =) хочется че-нибудь простенькое накатать)))

zebest
10.05.2020, 09:05
Много чего есть. Классика - Х8085.
Еще http://rk86.ru/i8080asm.html Комуу-то нравицца.
Еще FASM + WinASM есть. В поиске по форуму думаю найдется.
Мой же выбор - SJAsm, но мнемоники - на любителя Z80 :), хотя возможно уже есть и поправленные?

Pyhesty
10.05.2020, 13:33
Много чего есть. Классика - Х8085.
Еще http://rk86.ru/i8080asm.html Комуу-то нравицца.
Еще FASM + WinASM есть. В поиске по форуму думаю найдется.
Мой же выбор - SJAsm, но мнемоники - на любителя Z80 :), хотя возможно уже есть и поправленные?

Спасибо за ответ =)))
у меня какое-то извращение получается, извиняюсь за маты =)
пишу код на сайте rk86.ru, тк он хотя бы ошибки показывает,
но там не поддерживается апогей =)
потом перекидываю в www.asm80.com, там компилирую в intel hex
потом перегоняю hex2bin
и далее под dos-box перегоняю с помощью bin2rk.com в RKA =)))
проверяю в Emul80 =)
бинго =)
но для того, что бы скомпилировать, нужно сделать кучу действий, чувствую, что
что-то делаю не так =)
хотелось бы более менее единую среду разработки, что бы подсвечивался синтаксис,
компилятор подсвечивал битую строчку, на выходе хотя бы какой-то один формат hex или bin.
Кстати, а что делает bin2rk.com?
---
может я многого хочу... а нужно запустить в dos-box tasm =)
ps: извиняюсь просто асма не видел лет 20ть... и то до этого был RISC PIC...
потом кучу лет 8ножечные процессоры с 2кБ ROM и 128байтам RAM, а тут полноценный процессор,
хоть покодить чуть-чуть