PDA

Просмотр полной версии : Секреты и трюки программирования (в том числе и игр) для РК-86



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

barsik
08.03.2017, 23:05
буду благодарен за кусок кода убирающий курсор

Сначала, про убирание курсора в стандартном режиме. В графическом режиме (если не переносить линию подчёркивания с 10-й линии на 8-ю), курсор исчезает сам, т.к остаётся на 10-й неотображаемой линии. Поэтому специально выключать курсор надо только, если у Вас фонт 8*10 (фонт 2 кб) и для НОРТОНА, не меняя режима (т.е высоты знакоместа в 10), Вам необходимо лишь убрать курсор.

Для того, чтобы курсор не был виден, я обычно перепрограммировал ВГ75 так, чтобы линия подчёркивания устанавливалась ниже 10-й линии растра. А, т.к в строке в стандартном режиме выводится всего 10 линий растра, то если установить значение для линии подчёркивания на 11...16, то мигающей линии подчеркивания видно не будет. Для этого достаточно изменить два бита в байте 99H

Вот кусок из ПЗУ F800 (это в том месте где п/п-ма PUSK_VG, т.е куда идет JMP из F82D).

LD (HL),99H ; 1001.1001 9 +1 линия подчерк.

Первые 4 бита задают позицию линии подчёркивания. Если вместо 10-ти, Вы поставите 11, то курсор исчезнет. Вот две подрограммы. Одна выключает курсор, вторая включает курсор. Но не так как в ПЗУ F800, а большим мигающим прямоугольником, что намногого приятнее, чем мизерная чёрточка. Во всех моих мониторах и драйверах ОРИОНА и ПЗУ РК86 курсор всегда большой. По тому же принципу Вы получите курсор и в графическом режиме, но удобнее там его получать программно, - периодически выводя и гася символ псевдографики. Если же в стандартном режиме надо включить старый курсор (не сплошной прямоугольник, а тонкая линия подчёркивания), то делаете CALL 0F82DH.



.
CUROFF: LD A,0A9H ; 1001.1001 10 +1 линия подчерк.
LD B,93H ; 1.0.01.0011 - курсор мигающая линия подчёркивания
JP JJJ_01

CUR_ON: LD A,59H ; 0101.1001 5 +1 линия подчерк.
LD B,0C3H ; 1.1.00.0011 - курсор мигающее знакоместо
; отчего будет большой курсор

JJJ_01: PUSH HL
LD HL,VG_75+1
LD (HL),0 ; команда RESET
DEC HL ; адрес VG_75
LD (HL),04DH ; 0.1001101 77+1 знакомест
LD (HL),01DH ; 00.011101 29+1 строк

LD (HL),A ; 0101.1001 10 +1 линия подчерк.выше
LD (HL),B ; 1.1.00.0011 - МОЕ ИЗМЕНЕНИЕ:
; КУРСОР - МИГАЮЩЕЕ ЗНАКОМЕСТО
; атрибуты не отображать

INC HL ; адрес VG_75+1
LD (HL),27H ; команда START DISPLAY 001.001.11

LD A,(HL) ; читаем STATUS ???
AFAE1: LD A,(HL) ; читаем STATUS
AND 20H ; маска 'Interrupt request flag'
JP Z,AFAE1 ; ждем конца строки

LD HL,VT_57+8 ; далее заёмёмся ВТ57
LD (HL),80H
LD L,4 ; VT_57+04 !! НЕ_КОРРЕКТНО
LD (HL),low SСRN ; 0D0H
LD (HL),high SCRN ; 076H
INC L ; адрес VT_57+5
LD (HL),23H
LD (HL),49H
LD L,8 ; VT_57+8 !! НЕ_КОРРЕКТНО
LD (HL),0A4H
POP HL
RET



Что касается, того, чтобы убрать 2 линии растра разделяющие строки, что позволит использовать псевдографику (и рисовать сплошные вертикальные линии в рамочках), то для этого меняют вторую четверку битов в том же числе 99H. Если будет не 9, а 7, то это значит, что в строке, не 10, а 8 линий растра.

Недостаточно этого, т.к на 20% увеличится частота кадров и на многих телевизорах синхронизация сорвётся. Я видел, что некоторые так и делают. Это неверно. Не у всех профессиональные мониторы AUTOSYNC с хорошей синхронизацией. Поэтому надо изменить число строк с 30 до 38.

Или же надо, изменить число строк отводимое на обратный ход кадровой развертки. Считаем: убрались две линии растра в 30-ти строках. Это 60 строк растра. При 8 линиях растра на строку - это 60:8= 8 строк. Т.е число строк на обратный ход по кадрам надо увеличить с 1 до 9. Что невозможно, т.к максимум строк на обратный ход по кадрам 4. Поэтому можно сделать режим 35+4 строки, что тоже будет соответствовать TV-стандарту, но с'экономит 3*78=234 байта.

Если неохота разбираться в ВГ75, то можно взять любую игру с псевдографикой, прогнать её через IDA и самому посмотреть, как включается графический режим. Получить полноценный листинг сложно, а получить просто вид программы в мнемониках - это дело считанных минут. Найти место, где идёт программирование ВГ75 - не проблема. Тут всё, как в шахматах, - лучший способ совершенствоваться, - это изучать партии мастеров. К сожалению, сами мастера, т.е программисты из 80-тых, уже вымерли, как класс. У меня есть несколько дизассемблированных графических игр, если будут проблемы, то вытащу оттуда и выложу соответствующий кусок листинга. С ВГ75 нельзя полагаться на эмулятор, надо всё проверять в реале.

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

Этот "ход" позволяет уместить в области стандартного экрана не только 30, а даже 36 строк. Но старые игры, по крайней мере из тех, что я "ковырял", так не делают. Т.к экран увеличивается и затирает служебные ячейки ПЗУ, отчего стандартные подпрограммы перестают работать, то разбухший экран просто переносят ниже (обычно на 36D0, чтобы было проще считать позиции пользуясь стандартными таблицами для стандартного экрана 76D0).

Но мне больше симпатичен вариант, когда разбухший экран оставляем в вершине ОЗУ, затирая естественно служебные ячейки ПЗУ, а работаем не подпрограммами ПЗУ, а подпрограммами его копии перетранслированной в ОЗУ, сразу ниже экрана. Это даёт максимально большой сплошной кусок памяти.

jerri
08.03.2017, 23:42
barsik, 1. про доп коды написано здесь (http://www.emuverse.ru/wiki/Intel_8275/%D0%94%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D 0%B0%D1%86%D0%B8%D1%8F)

Специальные коды

Специальные коды применяются для уменьшения затрат на память программ или на управление процессом ПДП.
Ст.б. Мл.б.
1 1 1 1 0 0 S S


S S Функция
0 0 Конец строки
0 1 Конец строки, стоп ПДП
1 0 Конец экрана
1 1 Конец экрана, стоп ПДП

я так подозреваю из спецификации на i8275

2. если аккуратно порезать экранную область то никаких проблем с отображением экрана не возникнет.

3. про хороших программистов РК86. Покажите что нибудь достойное на дизассемблирование

NEO SPECTRUMAN
09.03.2017, 00:19
0 0 Конец строки
0 1 Конец строки, стоп ПДП
а в чем будет отличие?

barsik
09.03.2017, 01:07
Jerri, узнать игры с псевдографикой очень легко, достаточно их запустить в эмуляторе. Навскидку я скидываю коды некоторых игр, что используют псевдографику. Но проверьте в эмуляторе, там могут попасть и чисто текстовые игры. А вообще, в основном графическими стали игры только из последних сезонов, из 1990-92 годов, программисты из 1987-88, в свой массе, это ещё не умели.

ВГ75 запрашивает данные и получает их от ВТ57 пачками по 8 байт (судя по его режиму). Возможно, это даёт возможность иметь 80 видимых символов и совершенно любое число атрибутов в строке. Ранее предполагалось, что т.к и символы и атрибуты размещаются в буфере размером в 80 байт, то при ширине строки в 80 символов для атрибутов вообще не остаётся места.

Логично предположить, что при 80-ти символах в строке можно использовать атрибуты, иначе зачем их вводить? Чтобы использовать только в режиме 64 символа в строке? Тут нужны эксперименты на реале. Ранее я исходил из того, что для вставки атрибутов в строку остаётся всего 7 байтов (от позиции 71 до 78). Но скорее всего, если режим с неотображаемыми атрибутами, то ВГ75 будет читать символы и выводить в строке (пропуская неотображаемые атрибуты), пока отображаемых символов не наберётся ровно в длину строки (в РК86 это 78). Но если сумма числа атрибутов и символов (код <80) превысит 78, то начало следующей строки сдвинется и уже не будет четкого соответствия адресов начала строк по формуле (76D0 + N_строки *78).

jerri
09.03.2017, 07:16
а в чем будет отличие?


Да ктож знает :) РК86 в 86 году мне был недоступен, но если ставили #f1 значит был смысл

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

barsik, ORD что за формат?
РК86 вообще цвет не планировался.

SegaBoy
09.03.2017, 09:07
а в чем будет отличие?

В первом случае ПДП загрузит в ВГ75 пакетами всю строку символов. Дойдя при отображении строки до спецкода F0, ВГ75 включит сигнал VSP и дальнейшие символы в строке не будут отображаться.
Во втором случае ПДП так же начнёт пакетную загрузку в ВГ75, но тот прекратит её, прочухав на этапе загрузки спецкод F1. Потом при отображении строки ВГ75 будет действовать аналогично F0.

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

barsik
09.03.2017, 11:29
Насколько я понял из темы "Режимы ВГ75" этот трюк с кодом F1 обнаружил и проверил на практике vinxru, который недавно ушёл с сайта и теперь уточнить детали нЕ у кого.

Использование кода F1 позволяет немного сократить размер экранной области, причём, если ставить F1 во всех строках чётко в позицию 72 (это 8+64; 8 это бордёр слева), то, если я правильно понимаю, бордёр справа получается не программным, а аппаратным, т.е ВГ75 сама будет гасить луч, формируя правый бордёр. И при этом программирование даже не усложняется, как будет в случае, если код F1 ставить не в чёткие позиции, а сразу за последним печатаемым символом.

Вообще-то надо увеличивать число строк с 31 до 38, а не до 36, т.к 38*8=304 линии растра, что надо для сохранения частоты кадров (по стандарту надо выводить в кадре 312 линий), а при 36-ти строках получается 36*8=288 линий растра, а частота кадров растёт до (312/288)*50= 54 Герц, что срывает синхронизацию в телевизоре.

В стандартном режиме (что программируется по сбросу) начало любой строки можно посчитать по формуле (76D0 + N_строки * 78), что позволяет четко позиционировать в экране. Если F1 стоит в позиции 72, то мы экономим по 5 символов в 38-ми строках, т.е экономия в 190 байт. Тогда позиция считается так: (76D0 + 73*Y +X). А при использовании кода F1 для максимальной экономии, ставя его за последним печатаемым символом в строке, размер затрачиваемый на каждую строку непредсказуем (в зависимости от числа атрибутов и реальной длины строки).

190 выигранных байт при длине строки в 73 символа дают раздвижку экрана всего на 2 строки, а надо 7 строк. Потому толку от такого трюка при стандартной длине строки в 64 - немного, а если используются атрибуты, то ещё меньше. Только, если сократить отображаемый размер экрана с 64 позиций до 50, на 14 знакомест, что с центровкой сдвинет экран на 7 знакомест вправо, выигрыш в каждой строке составит 7+5= 12 байтов и всего 38*12=456 байтов или 456/(8+50)= ~8 строк. Т.е будем иметь требуемые 38 строк, но уже мизерного экранчика, а остаток линий растра по кадрам можно выиграть увеличив число строк на обратный ход луча по кадрам, что не только сплющит экран, но и визуально поднимет его вверх на 1 строку. Т.е использование трюка с F1 даёт увеличение вертикального размера экрана за счёт сокращения горизонтального размера экрана.

В этом случае экран для использования псевдографики, т.е с шириной строк не в 10, а 8 линий растра влезет в стандартную экранную область 76D0...FFFF.

Однако я считаю, что вместо таких извращений в программировании, проще кинуть 1 проводок от ВГ75 к ПЗУ фонта, прошить фонт извращённым фонтом и получить знакоместо 6*10 (а лучше 8*10, заменив ИЕ4 на ИЕ5), что даёт возможность рисовать сплошные вертикальные линии, т.е сплошные рамки в стандартном режиме дисплея. Однако при этом фонт придётся не до-прошить, а пере-зашить, т.к надо в псевдографике сделать элементарный пиксель высотой не 4 линии, а 5 линий растра. Для текстового вывода строки высотой в 10 линий растра лучше, чем в 8 линий. И главное, фонт красивее и псевдографика "сплошнее" без возни с перепрограммированием режимов ВГ75.

Фонт обычно прошивают извращённым образом для того, чтобы не сдвигать адреса A3...A9 на ПЗУ фонта с целью, чтобы линия LC3 от ВГ75 шла на адрес A3, отчего пригоден обычный фонт с шагом 16. Для сдвижки надо перепаивать проводники на входах ПЗУ фонта - A3 на А4, А4 на А5, А5 на А6... а на А3 сигнал LC3 от ВГ75.

Так вот, те ленивые, что не хотят этого делать, прошивают извращенный фонт 8*10, где линии растра 9 и 10 прошиваются не с отступом 9 и 10 от начала знакоместа, а во второй килобайт, т.е первые 8 линий знакоместа в первом килобайте, а две последние во втором. Шаг в фонте остаётся 8. Но такие извраты не годятся для большого ПЗУ фонта, содержащего кучу спрайтов для игр. Лучше иметь фонты в нормальном виде, с шагом 16, чем извращаться перед прошивкой ПЗУ, да и посмотреть правильный фонт удобно на экране ОРИОНА или СПЕЦИАЛИСТА, а извращённый фонт не посмотришь. Так что надо перепаивать 8 проводников на входе ПЗУ фонта.

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


Что такое формат ORD?

Формат ORD это формат в котором файлы ORDOS компьютера ОРИОН хранятся в его квазидисках. Квазидиском, в свою очередь называется банка ОЗУ целиком отданная для хранения файлов в формате ORDOS. Кроме квазидисков в ОРИОНЕ бывают и электронные диски, это диски в формате нормальных ДОС (т.е ДОС в которых есть каталог, фрагментация файлов и размер диска не ограничен в 60К). ORDOS это исторически первая ОС для ОРИОНА использующая в качестве носителя ОЗУ из излишней банки ОРИОНА. Хотя ORDOS туфта и давно вышла из употребления, но формат файлов примененный в ней оказался удобным для хранения файлов на дискетах. По моим данным первым такой формат применили в 1991 или Мистахов в своём PMBB или Мастер Бридж в своём LORD для CP/M.

Формат ORD состоит из метки файла длиной в 16 байтов (иногда это неверно называют ORDOS-заголовком) и собственно самого файла, в котором нет информации о длине и адресах загрузки.

Формат ORD позволяет хранить в метке адрес загрузки, длину файла (хотя и не точную, лишь с кратностью на параграф), а если не зацикливаться на ORDOS, то также КС и дату файла. Недостатком формата является слишком короткое имя всего 8 символов. Для исправления этого недостатка в 90-е годы использовали кодирование 3-х символов расширения одним байтом токеном, который ставится в метке файла в байте с офсетом 0DH. Прилагаю текст, описывающий формат для компьютера ИРИША, использующий формат ORD. У меня файлы для СПЕЦИАЛИСТА, ОРИОНА, РК86 и ИРИШИ хранятся в формате ORD.

Могу конвертировать файлы из формата ORD в формат GAM.

SegaBoy
09.03.2017, 11:46
...
150 выигранных байт при длине строки в 73 символа дают раздвижку экрана всего на 2 строки, а надо 8 строк.
...


Так верхние три неиспользуемые строки можно сократить до двух байт, поставив 1F в самом их начале. Итого сэкономить 3*76 байт.
А так же две нижние, поставив команду "Конец экрана, стоп ПДП". Ещё плюс 76+78 байт.
Ну и если прибавлять дополнительные неиспользуемые строки, то поступать с ними так же.
Неотображаемые строки не имеет смысла считать за полноценные и отсчёт строк можно начинать сразу с видимых.

Vinxru эту технику подробно описал (даже где-то тут на форуме сохранилось). Его экран 78*36 (при видимых 64*25 без промежутков между строками символов) занимает область в памяти меньше чем родной 78*30 (те же 64*25, но с промежутками).

SegaBoy
09.03.2017, 12:50
Да, эти все "извращённые" режимы нужны в основном для игр. Использовать после этого стандартные процедуры работы с экраном бессмысленно. А некоторые игры так и работают. После старта проводят свою инициализацию ВГ75 и ПДП и никого уже не беспокоит ни расчёт адреса, ни стандартные процедуры. От пользователя требуется лишь одно - играть. Выход из такой игры происходит по рестарту или на процедуру инициализации Монитора. И перед пользователем снова "привычный" режим экрана.
Главное чтобы в такой игре примерно соблюдался телевизионный стандарт 50Гц (~312 строк) или 60ГЦ (~262 строки) и правильные гасящие импульсы. Если конечный результат будет похож на PAL50 или PAL60 то современный телевизор покажет такую картинку без всяких срывов.

Со спецкомандами F0, F1 и тд. есть такой нюанс - они не могут идти подряд (как и прочие атрибуты). Если идёт два атрибута подряд, то ВГ75 принимает второй за символ (игнорируя старший бит). Поэтому нужно отделить их хотя бы нулями.

barsik
09.03.2017, 12:53
поставив 1F в самом их начале. Итого сэкономить 3*76 байт

Насчёт 1F, сначала не понял, но после догадался, что это опечатка и имелcя ввиду код F1.

Идею понял. На 5 невидимых строк можно потратить всего 5 байтов, ставя в начале этих строк код F1. А расчёт адресов начал строк тоже не усложнится, если считать (76D0+3 + N_строки * 73). 77 байтов экономим в 5-ти невлезающих по вертикали строках, что даёт дополнительные 385 байтов. Всего экономия составит 5*25 + 5*77= 510 байтов, что даёт 510:73= 6 строк, что и требовалось vinxru, чтобы иметь 36 строк. Но непонятно почему 36, ведь, чтобы частота кадров не менялась надо добавить 8 строк. Возможно он считал строки высотой в 10 линий, хотя в этом режиме они высотой всего в 8 линий растра. Так что 2-х строк всё-равно не хватает. Но можно эти две строки заглушить кодом F1 и тогда байтов хватает.


Ну и если прибавлять дополнительные неиспользуемые строки, то поступать с ними так же

Эту идею тоже понял. Но "глушить" имеет смысл только в самом низу экрана, т.е видимую строку 25, иначе, если заглушить строки 1...24, то позиции остальных строк, находящихся ниже заглушенной, сдвинутся и ориентироваться в позициях станет неудобно. Можно также заглушить байтом F1 первую отображаемую строку, увеличив при этом расчётный адрес первой видимой строки на 1.

Например, глушим кодом F1 видимую строку 25, отчего выигрываем ещё 77 байтов. Итого выигрыш от кода F1 составит: 5*24 + 6*77= 582 байта, что всё-равно не даёт 8 полных строк, а только 7.

Недостаток этого метода такой-же, как и при переносе экрана ниже 7500, - пропадает возможность вызывать подпрограммы ПЗУ для вывода на экран и с экраном приходится работать внаглую.

Метод vinxru может быть ценен тем, что даёт ускорение, сокращая число циклов ПДП на 5-ти невидимых строках (с 10-ти пакетов на строку до 1). Теоретически нельзя рассчитать какое это даст ускорение. Возможно ~10%, что тоже неплохо. Можно ускорить прогон еще больше, если заглушить каждую нечётную строку. Заглушить более 2 строк подряд нельзя, нарушится регенерация ОЗУ.

Эту идею можно заимствовать в ПЗУ F800, устанавливая адрес начала экрана не на 76D0, а на 77С2-3. И заглушая первые 3 строки кодом F1, а последние 2 строки кодом конец экрана. При этом адреса начал строк не изменятся и совместимость с корректными программами сохранится, но в играх, что выводят тексты вне экрана 64*25, т.е на бордёре этих текстов видно не будет. А при запуске тех игр, что пишут на 26 строке и ниже, вообще будет затёрт атрибут конец экрана... что возможно и не приведёт к трагедии, но надо посмотреть в реале.

Метод vinxru имеет смысл и даёт видимых 30 или 31 строку в текстовых программах, где есть символы.

Важная цель вывода в графическом режиме получить лучшее разрешение, что составляет со стандартным фонтом (с графической матрицей знакоместа 2*2) - 128*60 (режим 36 строк, 30 видимых), а при альтернативном фонте с графической матрицей знакоместа 3*2 и перепрограммированием ВГ75 на строки высотой в 2 линии растра - аж 192*104 (режим 60 строк, 51 видимая). Возможно запрограммировать ВГ75 на 64 строки, сделав ещё больше видимых строк, но тут надо экспериментировать и проверять всё в реале, чтобы частоты строк и кадров не изменились.

Однако, у меня есть сомнения против такого режима ВГ75. Во-первых, для регенерации ОЗУ надо чтобы перебирались все адреса. И если мы заглушим ПДП на позиции 73, то ячейки соответствующие позиции 73...78 никогда не регенерируются. В целиком заглушенных строках вообще не производится регенерация динамической памяти. Период регенерации РУ5-тых 2 МСЕК, это значит, что регенерация должна происходить каждые 3 строки. 2000 МКСЕК : 64 * 10 = 3 строки. Перебор всех 128 адресов занимает 2 строки. Так что если мы заглушаем регенерацию на 5 строк (3 сверху, 2 снизу), у нас будет перерыв регенерации на 64*8*7= ~3.9 МСЕК, что намного больше периода регенерации РУ5-тых и содержимое ОЗУ разрушится. Поэтому трюки от vinxru можно применять только при статической памяти.

jerri
09.03.2017, 17:03
barsik, по том же ссылке предлагалось верхние и нижние строки исключать из отрисовки изображения
сколько то верхних и сколько то нижних. опять же расставляя в ключевых местах #f1

а еще можно перенести на новое место сам экран раз уж начали программировать экстремально.

какой эмулятор понимает ORD?
emu отказался воспроизводить

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

barsik, а какие соответствия ячейкам и памяти вообще существуют?

и вопрос к окружающим.
может кто-нибудь испытать на живом RK86 то что будет напрограммировано в данном разделе?

barsik
09.03.2017, 17:08
Вот какие-то игры в формате GAM. Этот формат понимают все эмуляторы. Какие из игр графические - смотрите сами. Если КС при вводе по I не совпала, не обращайте внимания (тогда выгрузите этот же блок директивой O с тех же адресов в тот же файл и следующий раз КС совпадёт). Или проще, - запомните КС при вводе и затем HEX-редактором в самом конце файла после байта E6 поставьте эту КС.


предлагалось верхние и нижние строки исключать из отрисовки изображения
сколько то верхних и сколько то нижних. Опять же расставляя в ключевых местах #F1
Это SegaBoy уже предложил ранее. Но есть подозрения, что регенерация ОЗУ пропадёт и будет улёт. Скорее всего у одного пользователя со свеженькими ОЗУ всё будет работать без проблем, а кого-то с древними РУ-3-тьими будет улёт.


а какие соответствия ячейкам и памяти вообще существуют?
О чём вопрос не ясно.

Экран 76D0...7FFF. Начало каждой следующей строки сдвинуто на 78, а всего строк 30. Три верхние строки не видны и 8 первых знакомест в строке тоже не видны (это верхний программный бордюр). Оттого начальные координаты XY в ячейке 7602 равны 08 и 03. Оттого, когда делаешь программу для РК86 и ОРИОНА (где координаты XY начала экрана - 0,0 это приходится учитывать). Позиция за 8+64= 72 - это начало правого бордюра. Я когда-то думал, что это место отведено для размещения здесь атрибутов. Но нет, об атрибутах авторы РК86 и не знали, это программный бордюр. И две строки после строки 3+25 это нижний программный бордюр.

jerri
09.03.2017, 17:16
barsik, b2m не понимает
ф топку

NEO SPECTRUMAN
09.03.2017, 17:41
Однако я считаю, что вместо таких извращений в программировании, проще кинуть 1 проводок от ВГ75 к ПЗУ фонта, прошить фонт извращённым фонтом и получить занакоместо 6*10 (а лучше 8*10, заменив ИЕ4 на ИЕ5)
только кто побежит перепаивать комп чтоб запустить одну такую программку

я точно не побегу
и другие тоже...

barsik
09.03.2017, 17:43
Формат GAM эмулятор b2m не понимает
ф топку

Вы что-то делаете не так или у Вас какая-то старая версия. У меня версия эмулятора B2M от 28.12.2016 и я только и пользуюсь форматом GAM. Я в мониторе пишу I<ВК> и выбираю файл, - выскакивают адреса и контрольные суммы (из файла и расчитанная в считанном блоке). Если обе КС совпали, то загрузка прошла нормально.

А... наверное у Вас версия ПЗУ F800 другая, то есть конфиг-файл не соответствует ПЗУ. В конфиге есть строка где указывается начало подпрограммы ввода байта в ПЗУ. Эмулятор отлавливает вызов этой подпрограммы и заменяет это чтением из файла винчестера.

NEO SPECTRUMAN
09.03.2017, 17:44
а кто нить пробовал через строчную развертку на РК?
можно увеличить количество строк и сохранить при этом 50Гц?



Использовать после этого стандартные процедуры работы с экраном бессмысленно.
это вот то тормознутое неизвестно что из "монитора"??
да фтопку их

нужно пользоваться своими процедурами

а потом у таких мониторщиков курсор скачет по экрану во время отрисовки

barsik
09.03.2017, 17:55
Однако я считаю, что вместо таких извращений в программировании, проще кинуть 1 проводок от ВГ75 к ПЗУ фонта, прошить фонт извращённым фонтом и получить занакоместо 6*10 (а лучше 8*10, заменив ИЕ4 на ИЕ5)
только кто побежит перепаивать комп чтоб запустить одну такую программку

Я точно не побегу. И другие тоже...

В моей фразе речь идёт вообще не об играх, а о том, чтобы избавиться от двух пустых линий разделяющих строки, отчего вертикальные линии начерченные псевдографикой идут с разрывом. Но достаточно истратить 1 проводок длиной 10 сантиметров и дозашить в имеющееся ПЗУ еще один килобайт (т.к там пока занят только 1 кб), то в знакоместе 6*10 или 8*10 фонт будет занимать всё знакоместо и вертикальных разрывов не будет. Это сделали себе все кому нужна была хорошая текстообрабока (посмотрите картики фонта 8*10 от Alex-LG в теме по его загрузчику фонта). На играх, тем более псевдографических, где высоту знакоместа сокращают с 10 до 8, картинка будет совершенно одинаковая, т.к содержимое с 1 по 8 линию фонта не менялось. А выводятся две пустые линии из фонта, или из ПЗУ без чип-селекта, - без разницы. И там и там FF и эти 2 линии растра погашены (потому-то фонт и инверсный).

Смысл фразы был в том, что когда фонт с помощью расходования куска проволоки расширен на всё знакоместо, отчего нет вертикальных разрывов, то и менять режим ВГ75, чтобы рисовать рамки в НОРТОНЕ не требуется.

NEO SPECTRUMAN
09.03.2017, 18:11
Смысл фразы был в том, что когда фонт с помощью расходования куска проволоки расширен на всё знакоместо, отчего нет вертикальных разрывов, то и менять режим ВГ75, чтобы рисовать рамки а НОРТОНЕ не требуется.
так в чем проблема сменить режим работы вг75???
(разновидностей ркшек можно пересчитать по пальцам. каждую можно определить и сменить режим именно для ее портов...)
уменьшив высоту символов так же можно увеличить и количество самих строк

зачем паять проводок??? (в смысле когда почти решаемо программно)

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

jerri
09.03.2017, 18:18
NEO SPECTRUMAN, ну так товарищь барсик определенно железячник раз все мерит в МСЕК и верит что прерывания от дьявола.
я вот тут думаю а может стек попробовать для быстрой перестройки.
делать так уж делать... но блин как анноит этот вот текстмод.

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

barsik, таки да запустилось
но не надо мешать вместе игры с трех платформ - они не совсем работают

NEO SPECTRUMAN
09.03.2017, 18:25
я вот тут думаю а может стек попробовать для быстрой перестройки.
делать так уж делать... но блин как анноит этот вот текстмод.
на РК нет прерываний
не использовать стек при переброске блоков памяти это просто...
высшая степень...
...слоупокизма...

ладно на компах с прерываниями нужно еще 100 раз подумать а надо ли...


и верит что прерывания от дьявола.
а еще на прерываниях можно легко запилить всякую многозадачность
которая как раз от дьявола

barsik
09.03.2017, 18:34
барсик определенно железячник раз всё мерит в МСЕК и верит что прерывания от дьявола

В чём мерить время - личное дело каждого.

Время меряют в секундах, короткое время в миллисекундах. И с чего такой шум из-за того в чём мерить интервалы времени. На мой взгляд мерить надо всегда в секундах, т.к в тактах мерить неверно, из-за того что такт в разных компьютерах разный. У меня в 8-ми платах ОРИОНА и в 4-х платах СПЕЦИАЛИСТА везде такты CPU разные, но время обратного хода луча по кадрам везде 3.6 МСЕК. И как же тут мерить время в тактах? И кроме того время-то я считал из тех же машинных тактов и частоты CPU.

Речь шла именно о константе, независящей от железа - время обратного хода луча по кадрам. Которое в СПЕЦИАЛИСТЕ, ОРИОНЕ и РК86 отнимает равно 3.6 МСЕК из кадрового периода в 20 МСЕК. Так что я был абсолютно прав, считая время в милисекундах. Глупо считать время в машинных тактах, тогда надо одновременно указывать и такт.

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

А прерывания я не использую. Заглушил их во всех платах ОРИОНА, а в ИРИШЕ, с целью экономии электроэнергии вытащил ВН59 из панельки. Для привязки к времени мне хватало меандра 5 ГЦ на входе магнитофона. Прерывания не нужны, это знает любой владелец РК86. А железом я не увлекаюсь, точнее наоборот, - паяю только вынужденно, без этого при самодельном компьютере не обойтись.

И не понял при чём здесь стек?

И как сделать чересстрочную развертку? И что она даст? Кроме падения яркости?

Я в 1993 делал так. Мне надо было посмотреть 4-х плоскостные картинки С.Коровкина из Ижевска. У него в ОРИОНЕ 4-ре экранные плоскости (т.наз. 4-х плоскостный цвет, каждая точка любого из 16-ти цветов). А у меня только 2 плоскости. Тогда я поставил ТМ2, заведя на него КСИ, по каждому кадру ТМ2 переключался. И выход ТМ2 завел на бит номер экрана. При 0 выводился экран с 0000, при 1 с экран с 8000. 2 плоскости в 4-х цветном режиме, когда 2 бита, по одному из каждой плоскости дают яркость точки. Обычный режим 50 ГЦ. А у меня получился вывод с 4-х плоскостей, но с частотой 25 ГЦ. Один кадр с одного экрана, следующий с другого. Пришлось также чуть изменить видеовыход, чтобы были разные яркости с разных экранов. Получилась чересстрочная развёртка без сдвига на полстроки. Яркость картики заметно упала, но я видел цветную картинку в 16-ти цветах (в градациях яркости, не было цветного дисплея).


еще на прерываниях можно легко запилить всякую многозадачность

Очень смешно. Для РК86, где у пользователей нет даже CP/M, только не хватало многозадачной многобанковой ДОС реального времени с кучей одновременно работающих процессов.

jerri
09.03.2017, 18:38
barsik, сколько раз в секунду луч пробегает по экрану?

NEO SPECTRUMAN
09.03.2017, 19:42
Время меряют в секундах, короткое время в миллисекундах. И с чего такой шум из-за того в чём мерить интервалы времени. На мой взгляд мерить надо всегда в секундах, т.к в тактах мерить неверно, из-за того что такт в разных компьютерах разный.
вот как раз изза того что такт разный
на каждом компе за одно и то же время МСЕК разное количество тактов (даже на одинаковых компах тк кварц не сферический в вакууме а с +-)

а вот если мерять время относительно тактов процессора или тактов кварца
у них всех уже все одинаково

даже если у них разная частота кварцов в разы
из тактов легко обратно перевести в МСЕК

из МСЕК в такты не переведешь...


проблемы начинается когда для разных микрух свои кварцы
вот это уже...

+для точной эмуляции нужны именно такты а не мсек


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


но время обратного хода луча везде 4 МСЕК.
да не ужели

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

А вг75 поддерживает перепрограммирование прямо во время отрисовки кадра? (так точно не помню а найти сходу не могу)

или нужно делать сначала стоп дисплей а потом старт
и слетит ли при этом счетчик строк\знакомест
а в месте с ним строчные\кадровые синхроимпульсы
(200% уверен что это неизвестно)

нужно же вроде дождаться кадрового синхроимпульса читая регистр статуса
чтобы менять режим

а если не дожидаться
вдруг я хочу первые 5 строк высотой 10 пикселей
остальные по 8

(интересно как бы я мог провернуть что нибудь подобное не зная растактовки)


так же меня
меня заинтересовала команда
8. Установить счетчик

http://emuverse.ru/wiki/Intel_8275/%D0%94%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D 0%B0%D1%86%D0%B8%D1%8F

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


И не понял при чём здесь стек?

ну вот как раз и видно
что на РК не считают такты

а на спеке такты считают (умя вообще всегда растактовка почти всего кода)

и от этого все знают что юзая стек для чтения и записи
а не (hl)
тактов расходуется на порядок меньше (5/5.5 против 7 на z80)
от того и выигрыш в скорости


Скучно стало на Синклере. Это не удивляет. Переходите на РК86.
я одновременно на всех 8 битных платформах
и на некоторых 16/32

и вам советую не быть ограниченным одним РК
а заимствовать опыт у других более развитых платформ
и не рассказывать потом что это не будет мерцать...

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


только не хватало многозадачной многобанковой ДОС реального времени с кучей одновременно работающих процессов.

Прерывания не нужны, это знает любой владелец РК86
Кстате а как у РК-шников, которым не нужны прерывания, обстоят дела с подключением "музыкального сопроцессора"????
и воспроизведением на нем (на прерываниях конечно) всякой музыки во время скажем игрового процесса

а никак?
ну я понел

jerri
09.03.2017, 21:27
barsik,
https://www.youtube.com/watch?v=JVQbhw2VNew
вот эта музыка что играет вполне реализуема на устройстве имеющем звуковой бит
надо только как то синхронизироваться со временем.
как можно это сделать на РК?

нам не скучно на Спеке. нам хочется разнообразия.

SegaBoy
09.03.2017, 22:44
...
так же меня
меня заинтересовала команда
8. Установить счетчик
...


60037

Сам пытаюсь осмыслить написанное ))

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



...
и вопрос к окружающим.
может кто-нибудь испытать на живом RK86 то что будет напрограммировано в данном разделе?

Если Апогей засчитывается , то могу испытать на нём. Если что, сам могу поменять в коде адреса обращения к портам ПДП и ВГ75.

jerri
09.03.2017, 23:03
SegaBoy, ну он вроде совместимый.
ну предположительно подойдет.

barsik
09.03.2017, 23:06
не использовать стек при переброске блоков памяти это просто...


все знают, что юзая стек для чтения и записи, а не LD (HL) тактов расходуется на порядок меньше (5/5.5 против 7 на Z80), оттого и выигрыш в скорости

Порядок это в 10 раз. Данные о выгоде от копирования стеком глупо приводить в тактах. Сравнения делают в процентах, не в тактах. В моих программах выигрыш от копирования стеком сплошного массива составлял ~30% процентов.

О возможностях стека узнал в 1988: в драйверах СПЕЦИАЛИСТА так делается ролик и так работает с ВГ93 CP/M КОРВЕТА. В начале 90-х написал более 10 оконных драйверов на Z80, где ролик и очистка стеком, а позднее и для всех режимов VGA. Глупо делать выводы о чужих умениях программировать на ассемблере по одному примеру приведенному лишь для грубой оценки. Чваниться знаниями и надсмехаться над неумейками некрасиво.

А со стеком люди связываются только когда действительно надо выжать максимум скорости, а "в быту", т.е при повседневном программировании, при написании "quick and dirty" кода, где важна скорость разработки, а не её качество, этим никто не занимается.

Думаю, что сейчас для РК86 уже не стоит программировать на ассемблере. Якобы, PL/M даёт не менее эффективный код, а скорость разработки резко повышается. А с прерываниями по-прежнему не желаю связываться, уж лучше использовать опрос простейшего таймера, - достаточно кадровый бланк завести на вход порта. Прерывания в РК86 просто некуда прилепить, там нет сигнала BORDER.

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

Да и абсолютно не требуется, т.к чтобы не мерцало при панорамировании, достаточно переключить экран на другую область ОЗУ. Это же не СИНКЛЕР. Так что забудьте о прерываниях. Их на РК86 нет, не было и никогда не будет.

Pyk
09.03.2017, 23:17
вот эта музыка что играет вполне реализуема на устройстве имеющем звуковой бит
надо только как то синхронизироваться со временем.
как можно это сделать на РК?

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

SegaBoy
09.03.2017, 23:28
...
А вг75 поддерживает перепрограммирование прямо во время отрисовки кадра? (так точно не помню а найти сходу не могу)

или нужно делать сначала стоп дисплей а потом старт
и слетит ли при этом счетчик строк\знакомест
а в месте с ним строчные\кадровые синхроимпульсы
(200% уверен что это неизвестно)

нужно же вроде дождаться кадрового синхроимпульса читая регистр статуса
чтобы менять режим

а если не дожидаться
вдруг я хочу первые 5 строк высотой 10 пикселей
остальные по 8
...


60038

Задание всех параметров экрана происходит в команде "Сброс". Получив эту команду отрисовка кадра мгновенно прекращается. Счётчики обнуляются и выдать в одном кадре строки разной высоты не получится.
Запускать кадр надо обязательно командой "Начало воспроизведения". По команде "Прекращение воспроизведения" выключается только изображение, VRTC и HRTC продолжают работать как надо.

Вот в этой книжке «Микропроцессоры и микропроцессорные комплекты интегральных микросхем» 1988 г. том 1 (http://эквм.рф/biblioteka/knigi/0072.djvu) со стр. 122 идёт описание ВГ75.

barsik
10.03.2017, 00:01
на РК такого не сделать из-за того же режима ПДП, который периодически тормозит процессор, и из-за которого звук будет хриплым. Так что либо звук, либо картинка на экране. Не зря на РК при обмене с магнитофоном экран гасится

Да, на РК нормальные звуки - только через ВИ53 или AY-8912. А темп считать аппаратным таймером, хотя бы простейшим, в виде меандра 5 ГЦ заведённым на вход МГ. Расход деталей - один TTL-счетчик, делитель такта 50 ГЦ на 10.

Хотя на РК наверно получится читать время из одного из каналов ВИ53, но в ОРИОНЕ это у меня не получилось, никак не работало. Виню в этом слишком большую скорость CPU, а WAIT я тогда и не знал как включить в ОРИОНЕ (это было ещё в самом начале орионовщины). Потому всегда считал, что лучше все 3 канала ВИ53 отдать на вывод звука, потому-что 3-х голосная мелодия намного лучше двух голосной.

А вот регулировка громкости по каналам ВИ53 полезна. В компьютере ПК11/16 (я имел его в 1993) для звука стоят 2 ВИ53. Один дает 3 канала меандров, а второй ВИ53 регулирует громкость по каналам. Звуки красивые, похоже на AY-8912.

Для РК86, думаю, лучше придерживаться стандарта. Раз поставили ВИ53 в 1987, пусть и стоит. Тем более у всех ВИ53 уже есть. Регулировку громкости хотя бы по одному каналу можно сделать, используя КМОП-ключи. Это позволит иметь атаку и затухание звука у голоса, что даёт мелодию. Без этого намного хуже.

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

jerri
10.03.2017, 10:11
Думаю, что сейчас для РК86 уже не стоит программировать на ассемблере. Якобы, PL/M даёт не менее эффективный код, а скорость разработки резко повышается. А с прерываниями по-прежнему не желаю связываться, уж лучше использовать опрос простейшего таймера, - достаточно кадровый бланк завести на вход порта. Прерывания в РК86 просто некуда прилепить, там нет сигнала BORDER.


что значит некуда лепить?
как то же данные на ТВ передаются?

на микромашинах программить на PL/M который почти паскаль... ты случаем нашему "оберонщику" не родственник?
тот тоже предлагает ассм забыть как страшный сон

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



Да и абсолютно не требуется, т.к чтобы не мерцало при панорамировании, достаточно переключить экран на другую область ОЗУ. Это же не СИНКЛЕР. Так что забудьте о прерываниях. Их на РК86 нет, не было и никогда не будет.

ты определенно не писал на Спеке,
повторюсь на спеке 128, +2 +3 итд 2 экрана.

поэтому вещать о том в чем разбираешься плохо не надо.

кроме того если на РК в 90х все было так круто почему на этих машинах нет симпатичных игр?

barsik
10.03.2017, 11:46
Прерывания в РК86 просто некуда прилепить, там нет сигнала BORDER
что значит некуда лепить?

Под некуда прицепить, я имел ввиду, что в РК86 в базовой схеме нет сигнала возникающего в момент начала бордюра. Как я понимаю, именно в этом Вы видите главную пользу от прерываний, - чтобы узнать, когда начался кадровый бордюр и именно тогда начать модернизацию изображения на экране, отчего не будет мерцаний. Хотя мне непонятно какой от этого толк, если в кадровый бланк всё-равно не успеть сдвинуть весь экран, даже в ZX-Spectrum, где бордюр не 3.6 МСЕК, как во всех компьютерах, а намного больше. В итоге, пол экрана сдвинете в одном кадровом бланке, а половина в другом, отчего и возникнет мерцание при панорамировании. Хотя перерисовывать спрайты во время гашения экрана вполне получится. А в РК86 спрайты выводятся мгновенно. Зачем тогда в РК прерывания, если для вывода спрайтов они не нужны, а для панорамирования бесполезны?

В самой ВГ75 как раз есть сигнал "бордюр" по кадрам VRTC, хотя он называется гашение по кадрам, но это тоже самое. В Роботроне, где схема включения ВГ75 точно по РТМ на ВГ75, там можно по фронту VRTC вызывать прерывание. А в РК86 этот сигнал используется в качестве КСИ, а бордюр делается программно. Это достигается тем, что до минимума сокращается число строк отведённых на обратный ход луча по кадрам, т.е экран программно расширяется на место бордюра, а сам бордюр получается за счёт того, что в экранные ячейки соответствующие бордюру заносится байт 0, отчего на экран выводится чернота. Кстати из-за этого при введении цвета приходится делать так, чтобы бордюр всегда был чёрным, иначе бордюр пропадёт и будет срыв синхронизации.

Таким образом РК86 это компьютер без кадрового бланка. Всё чем Вы можете воспользоваться - это КСИ, который приходит в середине бордюра, отчего у Вас время для копирования на экран сокращается вдвое. Это ещё один довод, что вводить прерывания в РК86 бесполезно.


на микромашинах программить на PL/M который почти паскаль...

А вот тут, как пишут на сайте, поподробнее пожалуйста.

Какие у Вас предубеждения против PL/M? Если он даёт код более быстрый, чем ассемблер, поддерживает прерывания, работает по ячейкам памяти и вообще отличается от ассемблера только бОльшим удобством для программиста. Я давно разочарован в полезности СИ и Паскаля для 8-ми разрядок, но с PL/M ещё дела не имел. Я исхожу только из общеизвестных фактов, что для 8-ми разрядок стОящие программы были написаны только на ассемблере и на PL/M. На PL/M написаны все утилиты CP/M и MSDOS, а на СИ и Паскале для 8-ми разрядки вообще ничего не написано, кроме учебных программ и мелких утилит конверторов форматов.

PL/M написан для всех микропроцессоров, даже для 4004 и 8008 и всех микроконтроллеров. Что они ради праздного удовольствия это сделали? Как раз нет. А потому что PL/M даёт возможность писать очень эффективные программы именно для микропроцессоров. Так что Ваша фраза, что программить на PL/M для микропроцессоров - глупость, сама является глупостью. Почитайте биографию Гарри Килдела, где он утверждает, что PL/M эффективнее даже, чем ассемблер.


кроме того если на РК в 90х все было так круто почему на этих машинах нет симпатичных игр?

Откуда возьмутся симпатичные игры, если РК86 оказался в силу своих аппаратных недостатков "проходным" компьютером? Т.е первым компьютером, на котором любители делали первые шаги в программировании и, как только достигали умения в этом, тут-же уходина на ZX-Spectrum, ОРИОН или PC XT. Пик выпуска программ приходится на 1988. Последние программы это 1991. Далее - полное отсутствие, хотя число пользователей только росло. Но это не программисты и любители, собравшие РК86 своими руками и энтузиасты в программировании, а бесполезные пользователи, - непрограммирующие отцы семейств, купившие готовую ЭВМ, облапошенные нашей промышленностью, выпустившей сотни тысяч клонов РК, забыв о программах

Если в 1987-89 РК86 занимались профессионалы компьютерщики на СМ-1800 и СО-04, имеющие дело на работе с CP/M, то после 1990 те, кто не ушёл ранее на ZX, ушли на PC XT, т.к с 1990 на радиорынках стали доступны платы ПРАВЕЦ и XT TURBO для самосборки.

Но главное не в контингенте пользователей, а в отсутствии инструментария. Что можно написать если ассемблер позволяет странслировать только 2 кб. И чтобы сделать программу в 4К надо её разбивать на модули, вручную переписывая на бумагу адреса подпрограмм для связи между модулями. Потому приличные программы РК писали на других ЭВМ.

Проблема была в том, что традиционный НГМД из-за ПДП поставить сложно. Таким образом РК остался без дисковода и соответственно без CP/M, отчего был лишён макро ассемблера M80. Кстати то же самое повторилось и для ОРИОНА, там тоже программисты остались без макро ассемблера, но уже по другой причине (из-за ORDOS).

А CP/M для РК86 появилась только после 1993, когда Е.Седов придумал РК-КНГМД. Кроме того, как приличные игры можно сделать в текстовом режиме? Потому приличными и играбельными для РК86 является только XONIX, PAСMAN и TETRIS. Прошу фанатов РК не обижаться, т.к сужу только по тому что видел сам. Не знаю, может и появилось что-то более крутое, но у меня последние поступления в коллекцию программ были в 1994 с дискет ЛИАНОЗОВО. По тому уровню и сужу.

Более новых крутых программ РК не имею и не знаю где их взять. Очевидно, что без использования псевдо-графики 192*62 это то же самое, некрасивое, - одиночные монохромные символы бегающие по экрану. А псевдографика очень неудобна в программировании, потому сомневаюсь, что таких игр много. Кто-нибудь может дать игру написанную в псевдографике 192*102 или выложить скриншоты?

jerri
10.03.2017, 13:03
barsik, вы хоть иногда читаете что я вам пишу?
какие мерцания?

1 на Спеке УМЕЮТ освежать весь экран за 1 фрейм (период между приходами прерывания)
2 прерывания при игростроении используются для синхронизации игровых циклов
напишу жирными большими буквами
НЕ ДЛЯ ПРЕДОТВРАЩЕНИЯ "МЕРЦАНИЯ" (для этого используются другие способы), А ДЛЯ СТАБИЛИЗАЦИИ СКОРОСТИ ИГРОВОГО ПРОЦЕССА
3 прерывания используются для стабилизации звукового оформления игры
вот пример звукового оформления из игры SAUCER


;****************************************
; IN GAME BEEPER ROUTINES...
;****************************************

Beeper: ld hl,(FXPointer) ; table pointer

ld a,(hl) ; frequency + code (1 frame info only)
inc hl
cp LASTFXCODE ; new control code?
jr nc,PlayFX0

add a,a
jr nz,PlayFX
ld (FXNumber),a ; no more sound
jr WaitInt

PlayFX: push hl
add a,FXRout & 0xff
ld l,a
ld h,FXRout / 0x100
ld a,(hl)
inc l
ld h,(hl)
ld l,a
ld (FXCode),hl ; change current beeper routine
pop hl
ld a,(hl)

PlayFX0: ld (FXPointer),hl ; ready for next time
ld e,a ; current frequency
ld d,a
ld hl,PlayOut ; return address
push hl
ld hl,(FXCode)
defb OP_JPHL

PlayOut: xor a
out (BEEPPORT),a
di
ret

;****************************************
; NORMAL BEEP...
;****************************************

Beep: ld a,0x10
out (BEEPPORT),a
ld b,e
Beep0: ld a,r
ret m
djnz Beep0
jr Beep1

Beep1: ld a,0
out (BEEPPORT),a
ld b,d
Beep2: ld a,r
ret m
djnz Beep2
jr Beep

;****************************************
; PHASE BEEP...
;****************************************

Boop: ld a,0x10
out (BEEPPORT),a
inc e
ld b,e
Boop0: ld a,r
ret m
djnz Boop0
jr Boop1
Boop1: ld a,0
out (BEEPPORT),a
dec d
ld b,d
Boop2: ld a,r
ret m
djnz Boop2
jr Boop

;****************************************
; WHITE NOISE BEEP...
;****************************************

Hiss: ld hl,0 ; rom pointer

Hisso: ld a,0x10
out (BEEPPORT),a
ld b,(hl)
inc hl
Hiss0: ld a,r
ret m
djnz Hiss0
ld a,0
out (BEEPPORT),a
ld b,d
inc d
Hiss2: ld a,r
ret m
djnz Hiss2
jr Hisso




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



А вот тут, как пишут на сайте, поподробнее пожалуйста.

Какие у Вас предубеждения против PL/M? Если он даёт код более быстрый, чем ассемблер, поддерживает прерывания, работает по ячейкам памяти и вообще отличается от ассемблера только бОльшим удобством для программиста. Я давно разочарован в полезности СИ и Паскаля для 8-ми разрядок, но с PL/M ещё дела не имел. Я исхожу только из общеизвестных фактов, что для 8-ми разрядок стОящие программы были написаны только на ассемблере и на PL/M. На PL/M написаны все утилиты CP/M и MSDOS, а на СИ и Паскале для 8-ми разрядки вообще ничего не написано, кроме учебных программ и мелких утилит конверторов форматов.

PL/M написан для всех микропроцессоров, даже для 4004 и 8008 и всех микроконтроллеров. Что они ради праздного удовольствия это сделали? Как раз нет. А потому что PL/M даёт возможность писать очень эффективные программы именно для микропроцессоров. Так что Ваша фраза, что программить на PL/M для микропроцессоров - глупость, сама является глупостью. Почитайте биографию Гарри Килдела, где он утверждает, что PL/M эффективнее даже, чем ассемблер.

У меня нет предубеждений против PL\M
но вот какие именно стОящие несистемные программы были написаны на PL\M вы могли бы и указать.

кстати про CP\M
система написана под i8080 однако не использует ряд очень удобных моментов заложенных авторами процессора
так что извините.

barsik
10.03.2017, 13:30
Какие именно стОящие несистемные программы были написаны на PL/M вы могли бы и указать?

Откуда мне знать? Я видел только утилиты CP/M написанные на PL/M. Поищите на сайтах CP/M, там полно игр написанных на PL/M, хотя и для чуждых компьютеров, а т.к на PL/M пишут по железу, то нам это бесполезно. Я скачал только шахматы, чтобы странслировать для РК86.

На PL/M были написаны первые версии CP/M (прилагаю во вложении, посмотрите) и её утилиты (тоже прилагаю, что нашёл). Прилагаю также компилятор PL/M для PC. Сразу же начинайте писать на нём программы для РК86. Если написание программ для РК на PL/M займутся опытные программисты, то за несколько месяцев можно завалить РК86 цветными играми с хорошей графикой. Не повторяйте мою ошибку, не изучайте PL/M по англоязычным мануалам. Язык настолько прост, что достаточно прочесть небольшое описание, что прилагаю. Это отнимает на изучение PL/M всего час времени.


Вы хоть иногда читаете что я вам пишу?
Какие мерцания? На Спеке УМЕЮТ освежать весь экран за 1 фрейм (период между приходами прерывания)

Один фрейм это один кадр, что длится 20 МСЕК. За 20 МСЕК и РК успеет обновить свой экран. Полагаю, Вы имели в виду не кадр, а время гашения луча по кадрам.

При чём здесь ZX-Spectrum? Нам нет до него дела. Речь шла об РК86 и я с расчётом времён показал, что даже если бы были прерывания в момент начала бордюра, то РК86 никак не успевает за 3.6 МСЕК сдвинуть экран, даже если выключит экран для достижения максимальной скорости прогона. Поэтому даже, если прерывание было бы, то толку от него было бы "как от козла молока".

А для работы в реальном времени гораздо полезнее не прерывания, а таймер ВИ53, для чего его и разработали. В нем специально есть режим "чтение на лету", и мы можем считывать время пока счётчик не переполнится за 65535. Можем измерять не только миллисекунды, но и минуты и часы. Если в РК86 есть ВИ53, на кой ляд нам сдались Ваши бесполезные прерывания. И естественно, я понимаю, что в играх ZX и IBM PC прерывания используются для оценки времени, чтобы работать в реальном времени (хотя почему-то для многих игр XT это не помогло при переходе на 386 и выше). Почему Вы считаете других бестолковыми незнайками? Но ведь о работе в реальном времени речи и не шло. Наоборот Вы хором пытались убедить меня, что РК86 необходимы прерывания именно для избавления от мерцаний и неоднократно указывали, что именно для этого и используются прерывания на ZX-Spectrum.


Вы определенно не писали на Спеке

Естественно. С детства ненавижу Spectrum. Зачем для него писать? Всё, что можно, написали 30 лет назад? Я настроил ZX-48К в декабре 1987, кстати Z80 мне достал Сергей Зонов (с ним я учился в одной группе в ВУЗ-е). После чего сразу надолго заболел игроманией (играл и ночами, уходя на работу невыспавшись). После 3-х месяцев игромании, выкинул ZX с 9-го этажа и решил больше никогда не играть в игры. C тех пор в игры практически не играю. Редко, когда надо убить 10 минут запускаю PACMAN-а. Раньше играл в DIGGER (рекорд 120.000), Принца Персии и DOOM. А современные игры никогда не запускаю (боюсь заболеть игроманией), хотя имею 100 CD-дисков с играми (подарили). Игры на PC это зло. А вот играми РК86 игроманией не заболеешь. Займитесь изготовлением игр для РК86, покажите своё мастерство, если надо добавьте прерывания (эмулятор B2M это поддерживает).

mvg
10.03.2017, 14:09
Прилагаю также компилятор PL/M для PC. Сразу же начинайте писать на нём программы для РК86. Если написание программ для РК на PL/M займутся опытные программисты, то за несколько месяцев можно завалить РК86 цветными играми с хорошей графикой.

хммм....
а как хеловорд.рк скомпилировать то??? ;)

Pyk
10.03.2017, 14:35
BTW, РК-86 с прерываниями - это Партнер :)

Lethargeek
10.03.2017, 15:08
:v2_dizzy_facepalm: :v2_laugh: :v2_clap2:

NEO SPECTRUMAN
10.03.2017, 18:07
А темп считать аппаратным таймером, хотя бы простейшим, в виде меандра 5 ГЦ заведённым на вход МГ. Расход деталей - один TTL-счетчик, делитель такта 50 ГЦ на 10.

ну да
и пусть этот ваш PL/M вместо того чтоб выполнять полезную работу
постоянно опрашивает а не насчитал ли уже счетчик нужное число...
особенно порадовала его частота...

все что угодно чтоб не делать нормальные прерывания...


А считывание конца строки из ВГ75 ничего не даёт.
а что тогда дает аппаратный таймер, хотя бы простейший, в виде меандра 5 ГЦ заведённым на вход МГ?

ладно перестаю кормить троля
и про всякие не асмо счетчики буду тупо игнорить




надсмехаться над неумейками некрасиво.
если б этих неумеек на рк небыло 90% процентов от общего количества...
судя по качеству софта

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


BTW, РК-86 с прерываниями - это Партнер
чаво што?

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


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

да и само торможение это не так критично для звука
да качество его ухудшиться
его промодулирует 50 ГЦ-ами

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


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

пусть оно будет хоть посреди экрана
все равно
главное чтоб было за что зацепиться
и чтоб это что то вызвало процедуру обработчик прерываний (посреди работы другого кода)

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


Всё чем Вы можете воспользоваться - это КСИ, который приходит в середине бордюра, отчего у Вас время для копирования на экран сокращается вдвое. Это ещё один довод, что вводить прерывания в РК86 бесполезно
а на спеке будто не так...

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


Если он даёт код более быстрый, чем ассемблер
РЖУНИМАГУ

может он даже умеет xor a?

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


напишу жирными большими буквами
jerri забей

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


РК86 никак не успевает за 3.6 МСЕК сдвинуть экран
да вот как раз РК86 сдвинет экран за несколько ld (hl),a
тк это не спек

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


гораздо полезнее не прерывания, а таймер ВИ53, для чего его и разработали.
а его и разработали для создания прерываний...

krt17
10.03.2017, 18:16
С детства ненавижу Spectrum.
Странно что для пропаганды своих идей вы выбрали форум со слоганом
http://zx-pk.ru/images/styles/asdialup/misc/zxpkru_logo_ani.gif
Посмотрел PL/M, обычная марконадстройка на асмом. В свете убогих мнемоник i8080 это нормально :)
Скажите лучше хорошую игру на 86РК или клон какой, ознакомиться так сказать с лучшими представителями платформы.

NEO SPECTRUMAN
10.03.2017, 18:45
Сам пытаюсь осмыслить написанное ))
мда...
это что то не то о чем я подумал...


Задание всех параметров экрана происходит в команде "Сброс". Получив эту команду отрисовка кадра мгновенно

прекращается. Счётчики обнуляются и выдать в одном кадре строки разной высоты не получится.
Запускать кадр надо обязательно командой "Начало воспроизведения". По команде "Прекращение воспроизведения" выключается только

изображение, VRTC и HRTC продолжают работать как надо.

если при этом не начинается кадровый синхроимпульс(если он в конце кадра)
а сразу идут строчники
то вполне можно рассчитать время так чтоб после сброса никаких нарушений видеосигнала и не было

даже короткие провалы до 0 телек вполне может пережить (телек вообще может ловить такое что весьма условно похоже на видеосигнал)

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


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

сходу могу вспомнить

Boulder Dash

лежит тут
http://www.emu80.org/files/gp_1.zip
http://www.emu80.org/files/ga_1.zip
с квадратными глазами смотрим на год выпуска
и удивляемся почему же все остальные игры так унылы...

ну счас попробовал
чот вообще не играбельно... (управление не отзывается(при этом b2m эмулятор выдает оно с какой то бешаной скоростью по дефолту(конечно. времянки же не известны)))


больше что то не припоминаю
давно гулялся
(но для специалиста и ориона годного софта по больше будет)


немножко других сборников
http://www.emu80.org/dl.html#otherarc

посмотри там же
DIGGER.RKP - похожа на игру
KLAD.RKP - тоже похожа на игру
RISE.RKP - тут глянь графику


а так из более менее нормального это всякие пакманы и клоны лодерунеров
http://rk86.ru/catalog/ - тут даже эмулятор встроеный


а еще меня добивают в этих поделках (для советских компов)
унылые звуки в больших количествах
тупые долгие бессмысленные заставки
инструкция как играть и куча текста на весь экран "вы летите на... и вот..."
чуть ли не во всех играх один и тот же запрос
ваш уровень?
скорость итд...

ах да еще и сами игры не играбельные вообще...

barsik
10.03.2017, 19:09
Скажите лучше хорошую игру на 86РК или клон какой, ознакомиться так сказать с лучшими представителями платформы.
Игры РК86 смотреть не рекомендуется. Синклериста может и стошнить. Игры написаны в конце 80-х начинающими любителями, только узнавшими ассемблер. Отчего они постоянно пишут CP 0. Авторы пользуются убогим ассемблером с магнитофоном, не имея даже электронного диска. А это морока. Потому всем программистам 80-х для РК86 надо ставить памятник при жизни, за то что они хоть что-то работающее написали. А смеяться над чужими программами, написанными 30 лет назад просто подло. Чтобы критиковать сначала надо показать свою, более качественную программу из 1988 года.

Недавно выяснилось, что лучшие игры на "Партнёре", т.к там с модулем МЦПГ есть цвет и загрузка фонтов.




С детства ненавижу Spectrum
Странно что для пропаганды своих идей вы выбрали этот форум
Да, фраза явно не для этого сайта. Боюсь, что утром во Владивостоке проснётся админ, прочтёт и завтра меня на сайте уже не будет. Будем надеяться, что РК86 он не интересуется.

Естественно, это высказывание, для усиления смысла. Я отказался от ZX-48К, потому что для любительского программирования он не подходит из-за мизерного экранчика и из-за изобилия программ. Но на подобных сайтах запрещено обсуждать преимущества одних компов над другими.

NEO SPECTRUMAN
10.03.2017, 19:30
Недавно выяснилось, что
только хотел спросить а на каком компе было 8 наборов фонтов...
да именно на партнере...

апогей есть тоже цветной

в каких еще рк подобных больше чем один фонт из коробки?

Pyk
10.03.2017, 19:36
На Микроше два.

krt17
10.03.2017, 19:55
Игры РК86 смотреть не рекомендуется.
Не рекомендуется потому что он все в принципе шлак? Я на зх играю в такое от чего 99% выворачивает, например Sir Lancelot одна из самых любимых, да всё от Software Projects обожаю, убогость игры совсем не в скорости, количестве спрайтов или их размере. Тут все понятно, это нормально, подумаешь комп такой, что есть то есть, но не надо уподобляться владтру и возвышать, пусть и ностальгическую для кого то, платформу и пытаться доказать ее превосходство там где его нет в принципе.


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

Игры посмотрю, за ссылки спасибо.

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


Игры посмотрю, за ссылки спасибо.
Поиграл, нормальные игры, есть залипные, меня так то прикалывает такой совковый колорит, по крайней мере намного лучше векторовского хлама, который выглядел красочнее но игрался как полное *****. Жаль сразу по 2 кнопки не нажимается.

NEO SPECTRUMAN
10.03.2017, 20:03
Не рекомендуется потому что он все в принципе шлак?
шлак
но не потому что

убогость игры совсем не в скорости, количестве спрайтов или их размере

а потому что они еще и ужасного качества (игровой процесс)
ужасное управление
убогий интерфейс
ужасные ненужные звуки


ну и шлак потому что они позорят платформу
нормально не раскрывая даже части ее возможностей


Жаль сразу по 2 кнопки не нажимается.
ну нажимание только одной кнопки
и ужасные прыжки
это поголовно в этих "поделках"

krt17
10.03.2017, 20:15
шлак
Не нормально все, меня прикалывают такие. Куплю наверное апогей если Жека еще их продает, пусть будет.

jerri
10.03.2017, 20:16
Игры РК86 смотреть не рекомендуется. Синклериста может и стошнить. Игры написаны в конце 80-х начинающими любителями, только узнавшими ассемблер. Отчего они постоянно пишут CP 0. Авторы пользуются убогим ассемблером с магнитофоном, не имея даже электронного диска. А это морока. Потому всем программистам 80-х для РК86 надо ставить памятник при жизни, за то что они хоть что-то работающее написали. А смеяться над чужими программами, написанными 30 лет назад просто подло. Чтобы критиковать сначала надо показать свою, более качественную программу из 1988 года.

за что им памятники?
за то что драли друг у друга дизайн?
за то что не росли над собой?

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



Недавно выяснилось, что лучшие игры на "Партнёре", т.к там с модулеи МЦПГ есть цвет и загрузка фонтов.

Да, фраза явно не для этого сайта. Боюсь, что утром во Владивостоке проснётся админ, прочтёт и завтра меня на сайте уже не будет. Будем надеяться, что РК86 он не интересуется.

Естественно, это высказывание, для усиления смысла. Я отказался от ZX-48К, потому что для любительского программирования он не подходит из-за мизерного экранчика и из-за изобилия программ. Но на подобных сайтах запрещено обсуждать преимущества одних компов над другими.

да цвета они всегда хорошо.

не кокетничай, никому ты не нужен

а насчет программирования - расскажи об этом людям с WOS

NEO SPECTRUMAN
10.03.2017, 20:22
а еще у РК-шек убогейшее описание

вот ищу счас какой нибудь нормальный programming reference (который можно найти для кучи платформ)
чтоб глянуть де у РК порт для опроса клавиатуры и какие биты за что...
а сходу оно не попадается

ну зато всякие подпрограммы монитора
за упоминание которых надо...


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

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


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

barsik
10.03.2017, 21:21
Вы обплевали программы первых программистов страны, - легендарных программистов для РК86. Эти люди впоследствии стали крутыми программистами для IBM PC и сейчас с интересом нас читают. Теперь, "как честный человек, Вы обязаны жениться". То есть написать для РК-платформы десяток крутых игр уровня, хотя бы раннего ZX-Spectrum. Заодно и докажете свою правоту, что прерывания дико улучшают качество игр для РК86, что Вы умеете программровать, а не только болтать об этом. Итого, с Вас по 10 игр с каждого, всего 30 игр. Будем ждать.

Советую всё-таки воспользоваться PL/M и, чтобы получилось что-то красивое, используйте свой специальный фонт с собственной графикой. Если не будет хватать 28 кб для кода, можно использовать вторую полубанку (здесь у всех ОЗУ на РУ5-тых, так что это не проблема). Это будет и Вам интересно и нам, любителям РК86 полезно. Хоть узнаем как правильно надо программировать. Успехов в программировании.

goodboy
10.03.2017, 21:26
такое на РК возможно ?

https://youtu.be/WkeNVKpJu2Y

NEO SPECTRUMAN
10.03.2017, 21:34
первых программистов страны
да прям первых...

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


такое на РК возможно ?
ну да

это можно было бы показывать что нибудь от РК
и спрашивать а zx81\zx80 так может?
(тк у рк намного больше памяти и процессор хоть и слабее но не нагруженый отрисовкой экрана на 70%)

но почему то все с точностью да на оборот...

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

хотя если поднатужиться на zx80 то можно и такое (тут большая проблема именно нарисовать графику)
https://youtu.be/9T6m1IUqCa8

хотя на РК тоже можно выпендриться и выдать подобие псевдо hires
но это не получится так же хорошо как на zx80

jerri
10.03.2017, 21:41
NEO SPECTRUMAN, это же модификация шрифта?

NEO SPECTRUMAN
10.03.2017, 21:47
это же модификация шрифта?
какого еще шрифта?

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


это же модификация шрифта?
тут я рассказываю как происходит построение изображения на zx80 с точки зрения программиста
если еще не видел
http://zx-pk.ru/threads/27384-vopros-pro-quot-sostyazatelnuyu-nesostyazatelnuyu-quot-pamyat.html?p=902258&viewfull=1#post902258

у zx80 совсем не текстовый режим
если наскрепти 6К рамы то без проблем можно выдать 256х192 pseudo hires
так же как и 320х200

он может выкинуть на экран все что у него есть в пзу

jerri
10.03.2017, 22:10
NEO SPECTRUMAN, это были 70е годы 20 века, мы курили траву и придумывали компьютеры.
тот чья трава была хуже - победил.

NEO SPECTRUMAN
10.03.2017, 22:13
и еще
куда же на zx-е без
https://youtu.be/EjA-qlDv5Xw

SegaBoy
11.03.2017, 06:30
Пример кода для тех, кто не хочет мучиться с подбором констант инициализации ВГ75 и ВТ57, при построении экрана с нестандартными параметрами (правда пока без использования спецкоманд F0..F3).
Программа заполняет невидимую экранную область нулями, а видимую символами. Изменяя константы (в исходнике), можно менять параметры экрана.
Часть отвечающую за заполнение экрана символами можно выкинуть и использовать только процедуры инициализации. Она добавлена для наглядного отображения на ТВ и проверки на срывы синхронизации.
Курсор в данном примере переносится за границы экрана и поэтому не отображается. Кому он нужен, может удалить этот кусок кода.
Работа проверялась на Апогее, а так же в эмуляторах. Для написания кода использовался Прекрасный ассемблер (http://asdasd.rpg.fi/~svo/i8080/)




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

; параметры горизонтальной строки (в символах)
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 3 ; отступ сверху
v_act equ 25 ; видимых строк в кадре
v_front equ 2 ; отступ снизу
v_sync equ 1 ; кадровый синхроимпульс (1..4)
v_total equ v_back + v_act + v_front ; общее количество строк в кадре без учёта синхроимпульса (1..64)

line_per_row equ 10 ; линий в строке (1..16)
under_line equ 10 ; позиция линии подчёркивания в строке (1..16) если этот параметр больше 8, то верхняя и нижняя линии в строке гасятся
spaced_row equ 0 ; пропущенные строки (0..1) если 1, то каждая вторая строка гасится (соответственно и строк в кадре надо указывать в два раза меньше, и память под экран занимает в два раза меньше)
offset_line equ 1 ; смещение для первой линии в строке символов (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 ; команда Запуск ПДП

; подпрограммы Монитора для выхода из программы
wait_any_key equ 0xF803 ; ожидание нажатия клавиши
re_init_ctrl equ 0xFACE ; инициализация экранной области Монитора
jump_to_cli equ 0xF86C ; возврат управления в командную строку


.org 0x0000

StartProgram:
lxi h, screen_addr
lxi d, 0x2020
lxi b, 0

FillScreen:
mvi m, 0
mov a, b
cpi v_back
jc IncAddr
cpi v_back + v_act
jnc IncAddr
mov a, c
cpi h_back
jc IncAddr
cpi h_back + h_act
jnc IncAddr
mov m, e
inr e

IncAddr:
inx h
inr c
mov a, c
cpi h_total
jc FillScreen
inr d
mov e, d
mvi c, 0
inr b
mov a, b
cpi v_total
jc FillScreen


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


EndProgram:
call wait_any_key
call re_init_ctrl
jmp jump_to_cli

barsik
11.03.2017, 10:35
re_init_ctrl equ 0xFACE ; инициализация экранной области Монитора

Это инициализация ВГ75 на стандартный режим дисплея, экранная область не чистится.

Зачем делать JMP внутрь тела ПЗУ F800, на нестандартную подпрограмму. В одной версии ПЗУ F800 это есть, а в другом нет. В базовом ПЗУ РК86 есть, а в базовом ПЗУ Микроши и других клонов нет. В версии для КР580 есть, а в версии для Z80 или 6502 нет.

Это плохой стиль программирования "лезть внутрь ПЗУ F800". Зачем жестко привязывать программы к коду ПЗУ? Завтра к РК86 будет подключен модуль МЦПГ для добавления цвета и графики и в ПЗУ придётся вставить команды инициализации, отчего все внутренние нестандартные подпрограммы сдвинутся. И тогда все некорректные программы сделаные в стиле, "а мне плевать", лезущие во внутрь ПЗУ, перестанут работать. Такой стиль программирования обрекает использовать только программы РК сделанные до 1991 года и не позволяет сделать никаких совместимых программных улучшений.

Есть стандартная входная точка F82D, в которой в базовом ПЗУ стоит JMP FACE. Потому результат - без разницы, делать стандартный CALL F82D или нагло лезть внутрь ПЗУ F800, делая нестандартный CALL FACE.

Авторы РК86 неоднократно предупреждали, что лезть внутрь ПЗУ нельзя. Но нашлись умельцы, которые, чтобы с'экономить 9 МКСЕК времени и несколько байтов кода, стали лезть внутрь ПЗУ F800. Вероятно, из-за этого, авторы РК86 не смогли опубликовывать обещанную схему реконфигуратора архитектуры, дающего в РК86 две адресации портов - со старыми адресами портов на 8000 и с адресами портов на F000, что даёт 60 кб ОЗУ.

SegaBoy
11.03.2017, 16:52
Это инициализация ВГ75 на стандартный режим дисплея, экранная область не чистится.

Зачем делать JMP внутрь тела ПЗУ F800, на нестандартную подпрограмму. В одной версии ПЗУ F800 это есть, а в другом нет. В базовом ПЗУ РК86 есть, а в базовом ПЗУ Микроши и других клонов нет. В версии для КР580 есть, а в версии для Z80 или 6502 нет.

Это плохой стиль программирования "лезть внутрь ПЗУ F800". Зачем жестко привязывать программы к коду ПЗУ? Завтра к РК86 будет подключен модуль МЦПГ для добавления цвета и графики и в ПЗУ придётся вставить команды инициализации, отчего все внутренние нестандартные подпрограммы сдвинутся. И тогда все некорректные программы сделаные в стиле, "а мне плевать", лезущие во внутрь ПЗУ, перестанут работать. Такой стиль программирования обрекает использовать только программы РК сделанные до 1991 года и не позволяет сделать никаких совместимых программных улучшений.

Есть стандартная входная точка F82D, в которой в базовом ПЗУ стоит JMP FACE. Потому результат - без разницы, делать стандартный CALL F82D или нагло лезть внутрь ПЗУ F800, делая нестандартный CALL FACE.

Авторы РК86 неоднократно предупреждали, что лезть внутрь ПЗУ нельзя. Но нашлись умельцы, которые, чтобы с'экономить 9 МКСЕК времени и несколько байтов кода, стали лезть внутрь ПЗУ F800. Вероятно, из-за этого, авторы РК86 не смогли опубликовывать обещанную схему реконфигуратора архитектуры, дающего в РК86 две адресации портов - со старыми адресами портов на 8000 и с адресами портов на F000, что даёт 60 кб ОЗУ.
Может я непонятно написал. Это пример рабочего кода. Из него можно взять параметры инициализации и сами процедуры инициализации. Параметры позволяют не считать биты и вообще не задумываться автору, например желающему написать игру (а разве не после подобной темы отщепилась вот эта?), как изменить высоту строк, увеличить их количество и тд. Нужно только указать в параметрах желаемое. Не все же разбираются в мудрёных и запутанных константах для инициализации БИС, тем более что там нагорожено всё в кучу. Естественно, что переносить в свою программу заполнение экрана нулями и символами, а так же Выход из программы не надо (думал это и так каждому понятно).

Далее. Да, в конце это инициализация на стандартный режим дисплея. И нужна она, чтоб запустив программу (именно вот эту) из Монитора, потом из неё в этот же монитор и вернуться, на строку ниже с тем же курсором. Зачем здесь чистить экран? Лично я в Мониторе правил некоторые параметры в этой программе и снова запускал её. Смотрел как отображается новый экран и снова возвращался. Делал я всё это на Апогее, там и адреса были другие. Для проверки на эмуляторе РК переписал адреса под РК. А если появится желающий проверить "это" на другой машине, ему нужно вставить адреса контроллеров и процедур свои. Чего здесь непонятного? Повторяю - адреса процедур и адреса устройств любой желающий может поставить свои, какие хочет. Это возможность воткнуть в реальный ТВ реальный РК (или клон) и не дожидаясь создания какой-то новой игры или программы, проверить нестандартный режим экрана для РК, но вписывающийся в стандарты ТВ.

barsik
11.03.2017, 17:51
Может я непонятно написал. Это пример рабочего кода. Из него можно взять параметры инициализации и сами процедуры инициализации. Параметры позволяют не считать биты и вообще не задумываться автору, например желающему написать игру (а разве не после подобной темы отщепилась вот эта?), как изменить высоту строк, увеличить их количество и тд. Нужно только указать в параметрах желаемое. Не все же разбираются в мудрёных и запутанных константах для инициализации БИС, тем более что там нагорожено всё в кучу. Естественно, что переносить в свою программу заполнение экрана нулями и символами, а так же Выход из программы не надо (думал это и так каждому понятно).

Далее. Да, в конце это инициализация на стандартный режим дисплея. И нужна она, чтоб запустив программу (именно вот эту) из Монитора, потом из неё в этот же монитор и вернуться, на строку ниже с тем же курсором. Зачем здесь чистить экран? Лично я в Мониторе правил некоторые параметры в этой программе и снова запускал её. Смотрел как отображается новый экран и снова возвращался. Делал я всё это на Апогее, там и адреса были другие. Для проверки на эмуляторе РК переписал адреса под РК. А если появится желающий проверить "это" на другой машине, ему нужно вставить адреса контроллеров и процедур свои. Чего здесь непонятного? Повторяю - адреса процедур и адреса устройств любой желающий может поставить свои, какие хочет. Это возможность воткнуть в реальный ТВ реальный РК (или клон) и не дожидаясь создания какой-то новой игры или программы, проверить нестандартный режим экрана для РК, но вписывающийся в стандарты ТВ.

А может Вы не умеете читать?

На какой вопрос Вы отвечаете? В моей реплике нет ни слова о Вашем коде. Ни слова, ни для чего он используется, ни о его качестве. С чего такая обиженная реакция? Всё моё сообщение посвящено только одному. Тому, что Вы неграмотно лезете внутрь ПЗУ F800, что даёт мерзкий прецендент для программиста, если он заимствует ваш код или хотя бы ссылки. Разве я обсуждал, что Вы что-то там заполняете или нет нулями?


Зачем здесь чистить экран?
Где я утверждал, что где-то надо чистить экран? Инициализация ВГ75 - это не инициализация экранной области. Инициализация экранной области как-раз и означает заполнение экрана чем-то. Я совершенно правильно указал название, причём я даже не писал, что Ваше название неверное, я просто указал, что делает эта стандартная процедура. Которая и в РК и в его клонах и даже в ОРИОНЕ всегда вызывается на F82D ! А вовсе не залезанием внутрь ПЗУ, что просто неграмотно с любой точки зрения (как совместимости с клонами и эмуляторами, так и программисткой этики). Тем более, что Вы утверждаете, что эта процедура для всех клонов


Чего здесь непонятного? Повторяю...

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

Теперь по поводу реплики по убиранию курсора. Ваш ответ совершенно бессмысленен и объясняется лишь обидой непонятно на что. Речь идёт об убирании курсора вообще, а не только в псевдографическом режиме сплошных строк. А в псевдографическом режиме и проблемы нет. Смотрите. mvg перепрограммирует ВГ75, причём специально меняет номер линии подчёркивания с 10 на 8, чтобы курсор остался видимым и при строках в 8 линий. А затем зачем-то стремится его убрать. Ну если он не нужен, так и не меняйте параметр "линия подчёркивания" - курсор исчезнет сам.

SegaBoy
11.03.2017, 18:47
А может Вы не умеете читать?

Возможно.
Тогда о чём Вы? Надо было как-то по другому назвать процедуры? Или По другому выйти из программы?
Можете показать пример как правильно сделать?

krt17
11.03.2017, 21:46
Пришлось посмотреть даташит на i8275 http://www.jbox.dk/rc702/hardware/intel-8275.pdf так как за 6 страниц тут толком никто ничего не объяснил.
С синхрой все не так плохо, есть так называемые флаги статуса среди которых есть IR, выставляется на последней строке, не прерывание конечно но хоть что то. Клава по всей видимости примитивная, вроде как на ВВ55, какие адреса у нее не нашел, опрашивать энцать кнопок я думаю не проблема.
Что там за мониторы, точки входа, че собственно делает G не ясно.
Как вейтит i8257 тоже не ясно. Почитал много букв типа http://www.danbigras.ru/RK86/CPU/CPU.html полезной инфы 0
Внезапно обнаружил что символы 6x8 а не 8х8.
Не удивительно что даже те кому комп интересен не в состоянии найти минимальную информацию для программирования.

jerri
11.03.2017, 22:00
krt17, по опросу кнопок не все так просто
может ты поймешь

адрес вроде #80xx



ROM:FE72 kbd_scan2: ; CODE XREF: j_kbd_scan2j
ROM:FE72 ; sub_F9A4p ...
ROM:FE72 ld a, (byte_8002)
ROM:FE75 and 80h ; 'А'
ROM:FE77 jp nz, loc_FE7D
ROM:FE7A ld a, 0FEh ; '¦'
ROM:FE7C ret
ROM:FE7D ; ---------------------------------------------------------------------------
ROM:FE7D
ROM:FE7D loc_FE7D: ; CODE XREF: kbd_scan2+5j
ROM:FE7D xor a
ROM:FE7E ld (byte_8000), a
ROM:FE81 ld (byte_8002), a
ROM:FE84 ld a, (byte_7606)
ROM:FE87 and 1
ROM:FE89 or 6
ROM:FE8B ld (byte_8003), a
ROM:FE8E ld a, (byte_8001)
ROM:FE91 inc a
ROM:FE92 jp nz, loc_FE97
ROM:FE95 dec a
ROM:FE96 ret
ROM:FE97 ; ---------------------------------------------------------------------------
ROM:FE97
ROM:FE97 loc_FE97: ; CODE XREF: kbd_scan2+20j
ROM:FE97 push hl
ROM:FE98 ld l, 1
ROM:FE9A ld h, 7
ROM:FE9C
ROM:FE9C loc_FE9C: ; CODE XREF: kbd_scan2+3Aj
ROM:FE9C ld a, l
ROM:FE9D rrca
ROM:FE9E ld l, a
ROM:FE9F cpl
ROM:FEA0 ld (byte_8000), a
ROM:FEA3 ld a, (byte_8001)
ROM:FEA6 cpl
ROM:FEA7 or a
ROM:FEA8 jp nz, loc_FEB3
ROM:FEAB dec h
ROM:FEAC jp p, loc_FE9C
ROM:FEAF
ROM:FEAF loc_FEAF: ; CODE XREF: kbd_scan2+48j
ROM:FEAF ld a, 0FFh
ROM:FEB1 pop hl
ROM:FEB2 ret
ROM:FEB3 ; ---------------------------------------------------------------------------
ROM:FEB3
ROM:FEB3 loc_FEB3: ; CODE XREF: kbd_scan2+36j
ROM:FEB3 ld l, 20h ; ' '
ROM:FEB5
ROM:FEB5 loc_FEB5: ; CODE XREF: kbd_scan2+4Cj
ROM:FEB5 ld a, (byte_8001)
ROM:FEB8 cpl
ROM:FEB9 or a
ROM:FEBA jp z, loc_FEAF
ROM:FEBD dec l
ROM:FEBE jp nz, loc_FEB5
ROM:FEC1 ld l, 8
ROM:FEC3
ROM:FEC3 loc_FEC3: ; CODE XREF: kbd_scan2+53j
ROM:FEC3 dec l
ROM:FEC4 rlca
ROM:FEC5 jp nc, loc_FEC3
ROM:FEC8 ld a, h
ROM:FEC9 ld h, l
ROM:FECA ld l, a
ROM:FECB cp 1
ROM:FECD jp z, loc_FEFA
ROM:FED0 jp c, loc_FEF3
ROM:FED3 rlca
ROM:FED4 rlca
ROM:FED5 rlca
ROM:FED6 add a, 20h ; ' '
ROM:FED8 or h
ROM:FED9 cp 5Fh ; '_'
ROM:FEDB jp nz, loc_FF06
ROM:FEDE ld a, 20h ; ' '
ROM:FEE0 pop hl
ROM:FEE1 ret
ROM:FEE1 ; ---------------------------------------------------------------------------
ROM:FEE2 unk_FEE2: db 9 ; DATA XREF: kbd_scan2+89o
ROM:FEE3 db 0Ah
ROM:FEE4 db 0Dh
ROM:FEE5 db 7Fh ; 
ROM:FEE6 db 8
ROM:FEE7 db 19h
ROM:FEE8 db 18h
ROM:FEE9 db 1Ah
ROM:FEEA unk_FEEA: db 0Ch ; DATA XREF: kbd_scan2+82o
ROM:FEEB db 1Fh
ROM:FEEC db 1Bh
ROM:FEED db 0
ROM:FEEE db 1
ROM:FEEF db 2
ROM:FEF0 db 3
ROM:FEF1 db 4
ROM:FEF2 db 5
ROM:FEF3 ; ---------------------------------------------------------------------------
ROM:FEF3
ROM:FEF3 loc_FEF3: ; CODE XREF: kbd_scan2+5Ej
ROM:FEF3 ld a, h
ROM:FEF4 ld hl, unk_FEEA
ROM:FEF7 jp loc_FEFE
ROM:FEFA ; ---------------------------------------------------------------------------
ROM:FEFA
ROM:FEFA loc_FEFA: ; CODE XREF: kbd_scan2+5Bj
ROM:FEFA ld a, h
ROM:FEFB ld hl, unk_FEE2
ROM:FEFE
ROM:FEFE loc_FEFE: ; CODE XREF: kbd_scan2+85j
ROM:FEFE add a, l
ROM:FEFF ld l, a
ROM:FF00 ld a, (hl)
ROM:FF01 cp 40h ; '@'
ROM:FF03 pop hl
ROM:FF04 ret c
ROM:FF05 push hl
ROM:FF06
ROM:FF06 loc_FF06: ; CODE XREF: kbd_scan2+69j
ROM:FF06 ld l, a
ROM:FF07 ld a, (byte_8002)
ROM:FF0A ld h, a
ROM:FF0B and 40h ; '@'
ROM:FF0D jp nz, loc_FF1A
ROM:FF10 ld a, l
ROM:FF11 cp 40h ; '@'
ROM:FF13 jp m, loc_FF3F
ROM:FF16 and 1Fh
ROM:FF18 pop hl
ROM:FF19 ret
ROM:FF1A ; ---------------------------------------------------------------------------
ROM:FF1A
ROM:FF1A loc_FF1A: ; CODE XREF: kbd_scan2+9Bj
ROM:FF1A ld a, (byte_7606)
ROM:FF1D or a
ROM:FF1E jp z, loc_FF2A
ROM:FF21 ld a, l
ROM:FF22 cp 40h ; '@'
ROM:FF24 jp m, loc_FF2A
ROM:FF27 or 20h ; ' '
ROM:FF29 ld l, a
ROM:FF2A
ROM:FF2A loc_FF2A: ; CODE XREF: kbd_scan2+ACj
ROM:FF2A ; kbd_scan2+B2j
ROM:FF2A ld a, h
ROM:FF2B and 20h ; ' '
ROM:FF2D jp nz, loc_FF3F
ROM:FF30 ld a, l
ROM:FF31 cp 40h ; '@'
ROM:FF33 jp m, loc_FF3B
ROM:FF36 ld a, l
ROM:FF37 xor 20h ; ' '
ROM:FF39 pop hl
ROM:FF3A ret
ROM:FF3B ; ---------------------------------------------------------------------------
ROM:FF3B
ROM:FF3B loc_FF3B: ; CODE XREF: kbd_scan2+C1j
ROM:FF3B ld a, l
ROM:FF3C and 2Fh ; '/'
ROM:FF3E ld l, a
ROM:FF3F
ROM:FF3F loc_FF3F: ; CODE XREF: kbd_scan2+A1j
ROM:FF3F ; kbd_scan2+BBj
ROM:FF3F ld a, l
ROM:FF40 cp 40h ; '@'
ROM:FF42 pop hl
ROM:FF43 ret p
ROM:FF44 push hl
ROM:FF45 ld l, a
ROM:FF46 and 0Fh
ROM:FF48 cp 0Ch
ROM:FF4A ld a, l
ROM:FF4B jp m, loc_FF50
ROM:FF4E xor 10h
ROM:FF50
ROM:FF50 loc_FF50: ; CODE XREF: kbd_scan2+D9j
ROM:FF50 pop hl
ROM:FF51 ret
ROM:FF51 ; End of function kbd_scan2

собственно вот тут я её дербаню
https://www.dropbox.com/s/ri4rxu6xu2fq8l4/scuba91r.idb?dl=0

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_04-07-86/%D0%9A%D0%BB%D0%B0%D0%B2%D0%B8%D0%B0%D1%82%D1%83%D 1%80%D0%B0

krt17
11.03.2017, 22:20
Да вроде все просто, ряды пишуться в #8000, кнопари читаются из #8001. Сделан программный антидребезг, ну как и предполагалось, далее по табличкам ищут код клавиши. По схеме http://www.danbigras.ru/RK86/CPU/KeybrdP4.jpg можно составить карту, но это для сазорадистов, возможно они уже это сделали, ждем инфу от знатоков. Код конечно, хм.

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

Че там в #8002 и #8003 не ясно, что то полезное наверное.

barsik
11.03.2017, 22:26
Чтобы понять надо изучать исходники с комментариями. Исходники монитора и исходник теста.
В мониторе за счёт более эффективного программирования освобождено место для подпрограмм чтения/записи байта из доп.ОЗУ до 8 мб. Тест дизассемблировал 25 лет назад, чтобы доработать. Скоро переделаю и его. Но уже и так транслируется для тестирование не только 16К, а всех 32-х кб.

krt17
11.03.2017, 22:34
А точно у ВВ55 же есть управляющий регистр, он #8003, ну тогда все ясно. #8002 на всякий случай в 0 ставят.

Pyk
11.03.2017, 23:46
По поводу клавиатуры: на самом деле на РК обычно не опрашивают напрямую клавиатуру через порты, а пользуются достаточно удобным системным вызовом F81B - ввод кода нажатой клавиши без ожидания нажатия. Возвращает в аккумуляторе код нажатой клавиши либо FF, если ничего не нажато. Неприменимо, если нужно отслеживать одновременные нажатия, зато универсально: на РК применялись два основных типа клавиатуры: оригинальная РК и менее распространенная МС7007.

NEO SPECTRUMAN
12.03.2017, 00:00
По поводу клавиатуры: на самом деле на РК обычно не опрашивают напрямую клавиатуру через порты
ну конечно все через монитор...
а потом во всем софте тупое дубовое управление...

полез за схемой РК-шки короче...



А точно у ВВ55 же есть управляющий регист
мне вот интересно
что если перепрограммировать на ввод то что хардварно сделано на вывод
вопрос к железятникам
что я буду от туда читать????

jerri
12.03.2017, 00:14
Pyk, я вижу что в большинстве программ используют стандартную точку
но мне сейчас это вообще не надо
мне надо отслеживать нажатие нескольких клавиш одновременно
это реально?

я помню на микроше в игре змей горыныч я задавал левый пробел для поворота налево а правый пробел для поворота направо.
это было круто тогда а сейчас у меня вопрос "Как и нафига?"

и до сих пор рассматривая опрос клавиатуры спектрума
и читая что "при изготовлении Радио РК86 мы все делали ваще просто-просто в 2.9 корпусов"
возникает вопрос "Вы серьезно?"

нажатие любого сочетания из 40 кнопок и опрос всего одной из всего богатства в 64 кнопки.

я знаю что назвать РК86 игровым компом это очень громкое и смелое решение.
но блин бытовой комп должен быть немного игровым.
А тут - световое перо (нафиг не нужное) принтер (дома?)
джойстик где? Мышь где?

SegaBoy
12.03.2017, 05:17
Опросить клавиатуру через порты достаточно легко. Записывая поочерёдно 0 в один из разрядов порта А контроллера ВВ55, из порта В можно читать состояние одного ряда клавиш.
Если ничего не нажато, то возвращаются единицы. Если нажато, то на этих битах будут нули.
Например записав 0xFE по адресу 0x8000 опрашиваться будет ряд номер ноль. Прочитав байт из адреса 0x8001 получим состояние всех клавиш в этом ряду. В принципе, на Спектруме опрос происходит так же, только там порты не в памяти.
Записав в порт А 0x00 можно опросить сразу все линии и узнать нажата ли хоть какая-то клавиша.



порт А вход
0x7F 0xBF 0xDF 0xEF 0xF7 0xFB 0xFD 0xFE
7 6 5 4 3 2 1 0

SPACE ВW ОO ГG ?/ 7' DOWN 7

Ч^ ЖV НN ФF .> 6& RIGHT F4 6

Щ] УU МM ЕE -= 5% UP F3 5

Э\ ТT ЛL ДD ,< 4$ LEFT F2 4 порт В выход

Ш[ СS КK ЦC ;+ 3# ЗБ F1 3

ЗZ РR ЙJ БB :* 2" ВК АР2 2

ЫY ЯQ ИI АA 9) 1/ ПС СТР 1

ЬX ПP ХH Ю@ 8( 0 ТАБ \ 0


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



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

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

uart
12.03.2017, 09:27
Хуже будет если порт В перепрограммировать на вывод.
Почему? Там же вроде диоды стоят.

jerri
12.03.2017, 10:02
Опросить клавиатуру через порты достаточно легко. Записывая поочерёдно 0 в один из разрядов порта А контроллера ВВ55, из порта В можно читать состояние одного ряда клавиш.
Если ничего не нажато, то возвращаются единицы. Если нажато, то на этих битах будут нули.
Например записав 0xFE по адресу 0x8000 опрашиваться будет ряд номер ноль. Прочитав байт из адреса 0x8001 получим состояние всех клавиш в этом ряду. В принципе, на Спектруме опрос происходит так же, только там порты не в памяти.
Записав в порт А 0x00 можно опросить сразу все линии и узнать нажата ли хоть какая-то клавиша.



порт А вход
0x7F 0xBF 0xDF 0xEF 0xF7 0xFB 0xFD 0xFE
7 6 5 4 3 2 1 0

SPACE ВW ОO ГG ?/ 7' DOWN 7

Ч^ ЖV НN ФF .> 6& RIGHT F4 6

Щ] УU МM ЕE -= 5% UP F3 5

Э\ ТT ЛL ДD ,< 4$ LEFT F2 4 порт В выход

Ш[ СS КK ЦC ;+ 3# ЗБ F1 3

ЗZ РR ЙJ БB :* 2" ВК АР2 2

ЫY ЯQ ИI АA 9) 1/ ПС СТР 1

ЬX ПP ХH Ю@ 8( 0 ТАБ \ 0


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



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


А кнопка рус/лат где тут?

barsik
12.03.2017, 10:23
Спец клавиши СС, УС, РУСЛАТ стоят в порту C по битам D5, D6, D7. Посмотрите начало листига РК-ТЕСТА в моём последнем посте. Бит магнитофона (куда можно завести КСИ с выхода VRTC) - бит D4. Светодид - бит D3 (это уже на вывод). Журнал РАДИО 06.1986 стр 27.

jerri
12.03.2017, 10:30
barsik, я спросил где она в этой табличке.

кстати почему так?


AF825: LD A,(0) ; ждём команды с клавиатуры
LD (0),A

LD A,(PPA_KL+2) ; проверим нажали ли на спец.клавишу
LD B,A
AND 80H
JP Z,KEY_RL ; если нажата РУСЛАТ
LD A,B
AND 40H
JP Z,AF8F6 ; если нажата УС
LD A,B
AND 20H
JP Z,AFA9F ; если нажата СС
JP AF825


чем отличается
.xcall PAUSHL
от
CALL PAUSHL

barsik
12.03.2017, 11:29
я спросил где она в этой табличке

В таблице приведены коды клавиш матрицы 8*8, а спец клавиши стоят вне основного поля. УС и СС это модификаторы кодов нажатых клавиш. А именно, клавиша УС (Control на вражеском языке) сбрасывает бит 40H, а СС (на вражеском языке SHIFT) устанавливает бит 20H (точнее делает XOR 20H). А клавиша РУСЛАТ по F81B выдаёт код FE, а в F803 просто меняет байт RUSLAT (кажется 7606). Клавиша РУСЛАТ в 8-ми битовой кодировке (т.е при КОИ-8) должна называться CAPS LOCK (так она и используется на ОРИОНЕ в CP/M драйверах)



.
LD A,(0)
LD (0),A


Думаю, что это для отладки. Чтобы радиолюбитель мог осцилографом проконтролировать формирование сигналов /RAS /CAS для РУ3-тьих.


чем отличается .xcall от CALL

Это надо спрашивать у авторов РК86: Попова, Горшкова и Зелёнко. Макрокоманда .xcall - это цепочка команд заменяет CALL тогда, когда нет ОЗУ (отчего нельзя использовать стек). Точка в макрокомандах в M80 не обязательна, а мнемоники пишу большими буквами, чтобы не портить зрение, а все служебные слова пишу маленькими буквами для отличия. Некоторые делают наоборот, но это глупо (т.к зрение одно и большие буквы различаются лучше, - например, легко перепутать l и 1).

Но это не лучшая идея получения подпрограмм в программах без ОЗУ. Я в своих тестах СПЕЦИАЛИСТА и ОРИОНА делал так. Тестирую микросхему ППА, которая стоит в области памяти, и если исправна, ставлю стек на её адрес. Таким образом я получаю стек глубиной в 1 и ещё одну служебную ячейку. А с помощью всего одной служебной ячейки тоже можно делать тесты ОЗУ с подпрограммами. И даже совсем без ячеек ОЗУ можно. Тогда составляется таблица адресов возвратов и в одном из регистров подпрограмме передаётся вектор. Все подпрограммы после отработки уходят на п/п-мму @RET, где по вектору из таблицы извлекается адрес возврата. Итого имеем 256 вызовов подпрограмм не имея стека.

А вообще-то в РК86 применена лобовая идиотическая идея сканирования матрицы. Так делают только тупые профессионалы, всё делающие по учебникам. А любители делают лучше. Вот в СПЕЦИАЛИСТЕ клавиатуру делал любитель. Там нет никаких идиотических диодов. Выкидываем 0 по горизонтали, читаем по вертикали. Затем перепрограммируем ППА и выкидываем 0 по вертикали, а читаем по горизонтали. Из двух байтов получаем адрес в таблице размещения клавиш. Это в 10 раз быстрее и, т.к таблица, легко перемещать и менять коды клавиш, как угодно.


Читая, что "при изготовлении РАДИО-РК86 мы все сделали просто-просто в 29 корпусов", возникает вопрос "Вы серьезно?" ...определение одновременного нажатия всего одной из всего богатства в 64 кнопки. Назвать РК86 игровым компом это очень громкое и смелое решение. Но блин, бытовой комп должен быть хоть немного игровым. А тут - световое перо (нафиг не нужное), принтер (дома?). А джойстик где? Мышь где?

Есть доп.ППА. Через него можно подключить любое устройство, не только принтер. Контактный джойстик подключается параллельно курсорным клавишам. Мышь от БК-010 цеплялась к ОРИОНУ через ППА, так что и к РК86 её можно применить (мышь от БК даёт готовый байт сигналов, а не передаёт их по последовательному интефейсу). Мышь от PC подключить в 100 раз сложнее, но ведь её подключили к ОРИОНУ, так что можно заимствовать, Только зачем Вам мышь, если экран текстовый? А световое перо существенно облегчает рисование лабиринтов псевдографикой 128*60.

Насчёт 29-ти микросхем, это конечно глупость. Надо было 30 микросхем. Во-первых, круглая цифра. А во-вторых 30-я микросхема позволила бы иметь ССИ аппаратно, избавившись от необходимости делать бордюр слева и справа программно. Что позволило бы произвольно менять формат экрана по горизонтали. Например, сделать экран 32*24 и адаптировать программы от ZX80, а также тогда не надо было бы в графическом режиме переносить разбухший экран ниже 7500.

А если бы микросхем поставили 31-у, то были бы ССИ, КСИ и бордюр - аппаратными, отчего экран бы сократился на треть, увеличилось бы разрешение псевдографики по вертикали, а быстродействие возросло бы на 10%. Можно было бы запрограммировать ВГ75 в любые режимы, с любой матрицей экрана. Хотя число строк сильно сокращать нельзя, иначе нарушится регенерация ОЗУ.

Интересно, можно ли, имея КСИ, ССИ и бордюр аппаратными, заставить РК86 выводить на VGA?

Частота строк сейчас 15.625, для VGA надо 31.50 КГЦ. Даже не меняя такт ВГ75, сократив разрешение вдвое до 32*24, мы удвоим частоту строк, а частоту кадров программно поднимем до 70 Гц. Тогда сигнал будет пригоден для VGA монитора.

Получается, что заменив такт 8 МГЦ на ВГ75 на 16 МГЦ, т.е лишь убрав один каскад деления в счётчике ИЕ4 на плате РК86, можно получить сигнал для монитора VGA. Расход деталей: два TTL-корпуса на формирование ССИ и КСИ.

Получается, что РК86 это единственный самодельный компьютер пригодный для VGA монитора. Это ценное открытие для тех, у кого РК86 доработан до цвета. Так как у многих фанатов РК86 нет цветного CGA, только монохром. Зато у всех есть цветной VGA.

Pyk
12.03.2017, 13:57
мне надо отслеживать нажатие нескольких клавиш одновременно
это реально?
Вроде бы два одновременных нажатия можно отследить всегда. Если больше, то нужно смотртеть на матрицу - не появятся ли ложные нажатия.

A_AVL
12.03.2017, 14:29
Строки от столбцов в клавиатуре РК разделены диодами. В такой конфигурации можно отслеживать хоть все нажатые кнопки.

barsik
12.03.2017, 14:30
два одновременных нажатия можно отследить всегда

Собственной подпрограммой можно. Нельзя только стандартной п/п-мой из ПЗУ F800.


Можно ли, имея КСИ, ССИ и бордюр аппаратными, заставить РК86 выводить на VGA?

Частота строк сейчас 15.625, для VGA надо 31.50 КГЦ. Даже не меняя такт ВГ75, сократив разрешение вдвое до 32*24, мы удвоим частоту строк, а частоту кадров программно поднимем до 70 Гц. Тогда сигнал будет пригоден для VGA монитора.

Получается, что заменив такт 8 МГЦ на ВГ75 на 16 МГЦ, т.е лишь убрав один каскад деления в счётчике ИЕ4 на плате РК86, можно получить сигнал для монитора VGA. Расход деталей: два TTL-корпуса на формирование ССИ и КСИ.

Получается, что РК86 это единственный самодельный компьютер пригодный для VGA монитора. Это ценное открытие для тех, у кого РК86 доработан до цвета. Так как у многих фанатов РК86 нет цветного CGA, только монохром. Зато у всех есть цветной VGA.

NEO SPECTRUMAN
12.03.2017, 15:48
покопался в схеме
конечно книжачка
Домашний компьютер Г.В.Зеленко
сильно помогла в восприятии

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

а теперь вопросы

В РК можно программно мигать светодиодом????
так это просто шикарно!!!

у ИК57 есть доступ ко всем портам и пзу о_О?????
можно перекидывать содержимое портов и пзу на экран????


у РК с 16К рамы
в окне 4000-7FFF так понимаю не зеркалиться 0000-3FFF
что будет читаться от туда FF? или 00?


исходя из этого возникает вопрос
КАКОГО!!!! мужского полового члена в 16к версии нельзя было кинуть проводок
с 9 ноги DD10.3 на 4 ногу DD10.2 (ну или любая другая манипуляция(я не железятник))

получить этим зеркало в окне 4000-7FFF

и использовать ОДНО!!!!! ПЗУ(32К версию) для ОБОИХ КОМПОВ!!!!!????? о_О
а при добавлении еще 16К проводок снимать

я то думал адреса экрана и переменных
как то заметно отличаются
а нифига (кому там говоришь памятник ставить?)

по моему дебилизм разработчиков не в отдавании 24К адресного пространства под порты
а именно в использовании двух версий пзу

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


а мнемоники пишу большими буквами, чтобы не портить зрение
а мне наоборот намного тяжелей ее прочитать

я когда вижу такое
(особенно меня бесят табы между)



AF825: LD A,(0) ; ждём команды с клавиатуры
LD (0),A

LD A,(PPA_KL+2) ; проверим нажали ли на спец.клавишу
LD B,A
AND 80H
JP Z,KEY_RL ; если нажата РУСЛАТ
LD A,B
AND 40H
JP Z,AF8F6 ; если нажата УС
LD A,B
AND 20H
JP Z,AFA9F ; если нажата СС
JP AF825


исправляю на





af825: ld a,($0000) ; ждём команды с клавиатуры
ld ($0000),a

ld a,(ppa_kl+2) ; проверим нажали ли на спец.клавишу
ld a,a
and $80
jp z,key_rl ; если нажата РУСЛАТ
ld a,b
and $40
jp z,af8f6 ; если нажата УС
ld a,b
and $20
jp z,afa9f ; если нажата СС
jp af825


но сами шестнадцатеричные цифры я пишу большими

ld a,$FF
и их сразу видно
и они заметно отличаются от меток, переменных компилятора

не помню чтоб у меня хоть раз возникало спутывание l и 1
я чаще исправляю увиденную опечатку забывая сменить раскладку
(не если бы она менялось с первого раза... и когда их у меня...)
а потом не замечаю что там какое нибудь jз defи lв напечаталось...

Pyk
12.03.2017, 15:56
Строки от столбцов в клавиатуре РК разделены диодами. В такой конфигурации можно отслеживать хоть все нажатые кнопки.
Да, это я со Специалистом путаю.


у ИК57 есть доступ ко всем портам и пзу о_О?????
можно перекидывать содержимое портов и пзу на экран????
Можно-то можно, но это бессмысленно - скорее всего даже увидеть ничего не получится из-за наличия управляющих кодов F0-FF


у РК с 16К рамы
в окне 4000-7FFF так понимаю не зеркалиться 0000-3FFF
что будет читаться от туда FF? или 00?
82h скорее всего - слово состояния процессора, так как на РК не использовались шинные формирователи

NEO SPECTRUMAN
12.03.2017, 16:04
Можно-то можно, но это бессмысленно -
ну это
1. нужно эмулировать
2. нужно эмулировать
3. нужно эмулировать

иначе эмулятор не truЪ

а 4-е
если бы вместо этого для DMA
вместо 8000-FFFF было зеркало 0000-7FFF
это можно было бы попытаться использовать для ускорения кода

barsik
12.03.2017, 16:22
Отчего в 16К версии нельзя было кинуть проводок ..., чтобы
получить этим зеркало в окне 4000-7FFF и использовать одно ПЗУ F800 (32К версию) для ОБОИХ КОМПОВ !

Здравая мысль. Но опоздала на 30 лет. Надо было её опубликовать в ж.РАДИО в 1987 году.

Всего было не менее 100.000 владельцев РК86 и клонов. В клонах ОЗУ много - 32-64 кб. Предположительно, только наборы для самосборки шли в комплектации 16 кб. Среди самодельщиков первой волны 1986-1990 память в 16 кб не имел никто, т.к если спаял весь компьютер, то уж лишние 8 корпусов припаять сумеешь. Оттого программ для версии 16К мало, всего 20%, т.к они были никому не нужны, их никто не делал и они не сохранились.

Среди 25.000 людей купивших промышленный набор с ОЗУ 16К никто не догадался сделать "зеркальность", т.к готовые РК покупали уже не радиолюбители, а безрукие и некомпетентные отцы семейств, которые с трудом отличали байт от бита. Да и те обычно ставили расширение ОЗУ и перешивали ПЗУ на 32К.

"Зеркальность" памяти позволила бы на РК с ОЗУ 16К прогонять игры с размером до 3500, т.е, как минимум, половину программ. Но это должны были сделать авторы, т.к при этом возникают проблемы с RAMTOP для текстового редактора и бейсика (они определяют сколько ОЗУ, запросив RAMTOP).

Конечно, сейчас "кидаться тапками" в авторов некрасиво. Ведь они были первыми. Авторы РК сделали много ошибок, хотя и не были новичками. Они занимались компами на КР580 профессионально с 1978. И в 1980 уже сделали МИКРО-80 и опубликовали его в 1982 в журнале РАДИО. Есть воспоминания одного из авторов о разработке МИКРО-80 и РК86. http://zxbyte.ru/history.htm

NEO SPECTRUMAN
12.03.2017, 19:19
Но это должны были сделать авторы, т.к при этом возникают проблемы с RAMTOP для текстового редактора и бейсика (они определяют сколько ОЗУ, запросив RAMTOP).
проверка наличия зеркальности каких то 8 команд...
можно и меньше если наплевать на надежность...

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


Только зачем Вам мышь, если экран текстовый?
о_О
а как же мышь в любом nc, vc, dn в досе????
при текстковом режиме

удобно же!

хотя я вырос и без нее
и никаких трудностей не испытывал

qaopm наше фсеа!!!
намного лучше чем дубовый джойстик

krt17
12.03.2017, 19:46
Подскажите эмуль с отладчиком и правильной эмуляцией. Пользовался Emu80 3.13 но в хелпе про отладчик тихо, наверное там его нет, а гугл выдает только что то на js в которое свое загрузить не понятно как. Есть еще b2m, но это на крайний случай, очень уж он дубовый (особо раздражает что сбрасывает брейки по любому поводу).

NEO SPECTRUMAN
12.03.2017, 19:54
Такого нету...

b2m наверное самое нормальное
и самое дубовое при этом...

SegaBoy
12.03.2017, 20:19
А кнопка рус/лат где тут?
Таблица описывает что будет на выходе порта В при опросе порта А. Как выше заметили, остальные кнопки в порту С, который настроен одним полубайтом на вход, а другим на выход. Опросить их ещё проще - просто прочитать из порта С (0x8002).
В общем, не успел я про них написать и тем более табличку составить. Ночь была, да я и сам на тот момент не разобрался в схеме, какие биты порта С за что отвечают = ))

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


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

Pyk
12.03.2017, 20:33
Подскажите эмуль с отладчиком и правильной эмуляцией. Пользовался Emu80 3.13 но в хелпе про отладчик тихо, наверное там его нет
Ну так попробуй Emu80 v.4 - как раз только позавчера выложил тестовую сборку.
http://zx-pk.ru/threads/27488-emu80-v-4.html
Буду рад бета-тестированию.

barsik
12.03.2017, 20:40
Способ экономии размера экранного буфера при высоте знакоместа в 8 линий, изобретённый vinxru в основном основан на том, что в невидимых строках не выполняется видеовывод и соответственно, регенерация ОЗУ. Перерыв в регенерации при НЕ-выводе 5-ти строк составляет 5*64.5*10 + 2 * 64.5 = 3.354 МСЕК (за 2 линии ОЗУ регенерируется).

Максимальный период регенерации у РУ3/РУ5 составляет 2 МСЕК. Таким образом РУ3/РУ5 не будут правильно регенерированы. Но мы все знаем, что даже если выключить питание, а затем закоротить его на секунду на землю, некоторые ОЗУ упорно не хотят забывать (с этим сталкивался, когда ЭД не хотел забывать флаг форматированности диска при кратковременном выключении питания). Т.е в реальности времена хранения без регенерации намного превосходят паспортные данные.

Если ОЗУ не гибнет при НЕ-регенерации 5-ти строк, то этот способ можно использовать для экономии ОЗУ и ускорения работы - меньше тактов ПДП и во время обратного хода по кадрам процессор работает без тормозов.

Поэтому можно установить число строк на обратный ход луча по кадрам, не 1, как в базовом режиме, а 4, оставив не 30 отображаемых строк, а только 26. Перерыв регенерации будет даже на строку меньше (4 вместо 5). Адрес начала экрана надо установить не 76D0, а 76D0 + 78*2. Смещение координат по строкам - не 3, а 1. Все позиции экрана остаются на месте, только часть бордюра по кадрам станет аппаратной. Размер экрана сократится на 78*4= 312 байт.

Всё вышесказанное чётко объясняет почему схемотехника РК86 такая. Авторы, применив динамические ОЗУ и отказавшись от специальных схем регенерации, просто вынуждены были растянуть экран по вертикали до 30 строк (включив тем самым бордюр в экран) и имитировать бордюр программно. Они действовали по РТМ, зная, что при большом числе строк на обратный ход луча по кадрам, будет перерыв регенерации и потеря данных в ОЗУ. Поэтому они и применили минимальное число строк на обратный ход луча и программное формирование "гашения по кадрам".

Таким образом авторы РК86 оправданы от обвинений в идиотизме. Однако тот же программный способ они сдуру применили и для формирования ССИ и бордюра по строкам, затемнив по 7 знакомест слева и справа от строки, за счёт заполнения нулями. Хотя тут это уже не объясняется ничем, кроме желания с'экономить 1 корпус 155 серии.

Применение аппаратного ССИ и аппаратного бордюра по строкам, ускорило бы прогон, с'экономило бы 14*30=420 ячеек памяти, но главное - позволило бы произвольно программно менять режим дисплея, т.е число символов в строке. А сейчас мы жёстко связаны необходимостью иметь 78 символов в строке. Кстати ровно столько надо, чтобы частота строк была правильной. Строчный период: 78*(6:8) + 6*(6:8)= 64.5 МКСЕК.

Мой личный РК86 находится сейчас в стадии большой реконфигурации, поэтому я не могу сейчас проверить сокращение числа строк на практике.

krt17
12.03.2017, 20:56
Буду рад бета-тестированию.
Я просто запускаю http://zx-pk.ru/threads/27478-sekrety-i-tryuki-programmirovaniya-(v-tom-chisle-i-igr)-dlya-rk-86.html?p=904186&viewfull=1#post904186
И получаю в вашей версии немного не ту картинку что в 3.13 и b2m, как должно быть правильно я не в курсе.

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

Запускаю http://rgho.st/8ZmKxHQL8

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


Ну так попробуй Emu80 v.4
Ну и отладчика я тоже чет не нашел. Как его вызвать?

Pyk
12.03.2017, 21:17
krt17, вот здесь все нормально:
http://zx-pk.ru/threads/27478-sekrety-i-tryuki-programmirovaniya-(v-tom-chisle-i-igr)-dlya-rk-86.html?p=904186&viewfull=1#post904186
А в test.rk куда-то пропала одна команда:

mov a, m

WaitFlag:
mov a, m
ani disp_ir_flag
jz WaitFlag

Первая mov a,m отсутствует, а она важна: при первом чтении сбрасывается флаг IR в регистре статуса.
Добавь недостающую команду и результат будет одинаков во всех эмулятора и на реале тоже.

А сейчас получается, что Emu80 v.3 и Emu игнорируют этот нюанс, а Emu80 v.4 правильно выдает смещенную картинку, такая же будет и на реале.

А отладчик вызывается через Alt-D. Вообще советую нажать Alt-F12 и посмотреть что там еще есть во вкладке Help.

krt17
12.03.2017, 21:29
Первая mov a,m отсутствует, а она важна: при первом чтении сбрасывается флаг IR в регистре статуса.
Ха, наверное на автомате, пока перебивал на z80, удалил.


А отладчик вызывается через Alt-D.
отлично, только нет этой команды в хелпе по alt-f12 :)
Можно ли дизасм в z80 режим переключить.

Pyk
12.03.2017, 21:40
Увы, на данный момент поддерживается только 8080, хотя Z80 также планируется сделать.
А за замечание по хелпу спасибо - поправлю.

NEO SPECTRUMAN
13.03.2017, 00:13
Т.е в реальности времена хранения без регенерации намного превосходят паспортные данные.
А можно ткнуть носом в тот набор микрух которые отвечают за регенерацию ОЗУ?
И в адрес процедуры загрузки с матафона
где якобы используется программная регенерация ОЗУ(при отключенном экране)

barsik
13.03.2017, 13:06
А можно ткнуть носом в тот набор микросхем, которые отвечают за регенерацию ОЗУ? И в адрес процедуры загрузки с магнитофона, где якобы используется программная регенерация ОЗУ (при отключенном ПДП).

В схеме РК нет узла регенерации памяти, т.к она происходит сама по себе, в ходе считывания ПДП последовательных адресов памяти. Ради этого (чтобы не тратиться на схему регенерации ОЗУ) и "городится весь огород" с программным формированием КСИ, ССИ, бордюров и сдвижкой POSX и POSY на 8 и на 3. Хотя в схеме РК, благодаря наличию межстрочных линий, легко сделать схему регенерации, используя сигнал LC3.

Подпрограммы RDBYTE и WRBYTE первым делом отключают работу ПДП. Далее, каким-то образом ОЗУ не разрушается, пока что-то грузится с ленты и экран погашен. За счёт чего это достигается, я не знаю (не то вся программа занимает не менее 128 ячеек, отчего при её прогоне считываются все адреса или ещё как-то).



RDBYTE: PUSH HL
PUSH BC
PUSH DE
LD D,A
AFB9C: LD A,80H
LD (VT_57+8),A


А вот я не понимаю, почему ВГ75 работает так глупо. У неё есть внутренний буфер объёмом 80 байт. Т.е теоретически ВГ75 может загрузить целиком всю строку длиной до 80 байт. И тогда на время вывода всей строки, всех 10-ти линий растра входящих в строку, ей не придётся запрашивать ПДП и закачивать новые символы для вывода.

Тогда время простоя процессора сократится в 10 раз и быстродействие из-за ПДП будет падать не на 25%, а всего на чуть-чуть. А сейчас ВГ75 запрашивает данные у ПДП крошечными порциями по 8 байт, отчего, чтобы закачать всю строку в 78 символов, рвёт программу 8 раз за время вывода строки (64 МКСЕК). Старое содержимое строки теряется из-за того, что выведенные символы удаляются из буфера, освобождая место для новых.

Понятно, что при закачке строки по кусочкам, прогон программы прерывается на более короткий промежуток времени (хотя какая нам разница, если общее время простоя КР580 - то же самое).

По поводу пользы в играх от ПДП. К сожалению, ВТ57 не умеет качать "память-память". А вот ВТ37 умеет это делать. Поэтому для тех кому нужно мгновенное панорамирование экрана во все стороны, надо ставить ВТ37. Тратится 1 маш.такт на байт. Тогда на пересылку всего экрана размером в 2340 байт будет тратиться 2340:1.77= 1.322 МСЕК. Что позволяет успеть сделать панорамирование во время бордюра по кадрам, что длится в РК86 1*64*10 + 5*64*10= 3.660 МСЕК. Т.е за кадровый бланк можно сдвинуть экран почти 3 раза.

b2m
13.03.2017, 14:01
Далее, каким-то образом ОЗУ не разрушается, пока что-то грузится с ленты и экран погашен. За счёт чего это достигается, я не знаю
Странные манипуляции с регистром SP там не просто так. Во время работы эти подпрограммы постоянно выполняют POP PSW, т.е. читают последовательно из памяти.

HardWareMan
13.03.2017, 14:35
А вот я не понимаю, почему ВГ75 работает так глупо. У неё есть внутренний буфер объёмом 80 байт. Т.е теоретически ВГ75 может загрузить целиком всю строку длиной до 80 байт. И тогда на время вывода всей строки, всех 10-ти линий растра входящих в строку, ей не придётся запрашивать ПДП и закачивать новые символы для вывода.

Тогда время простоя процессора сократится в 10 раз и быстродействие из-за ПДП будет падать не на 25%, а всего на чуть-чуть. А сейчас ВГ75 запрашивает данные у ПДП крошечными порциями по 8 байт, отчего, чтобы закачать всю строку в 78 символов, рвёт программу 8 раз за время вывода строки (64 МКСЕК). Старое содержимое строки теряется из-за того, что выведенные символы удаляются из буфера, освобождая место для новых.
ПДП+ВГ75 делают ту же работу, что и канал #0 первого ПДП у IBM PC. Сам догадаешься, или подсказать?

b2m
13.03.2017, 15:14
А вот я не понимаю, почему ВГ75 работает так глупо. У неё есть внутренний буфер объёмом 80 байт. Т.е теоретически ВГ75 может загрузить целиком всю строку длиной до 80 байт. И тогда на время вывода всей строки, всех 10-ти линий растра входящих в строку, ей не придётся запрашивать ПДП и закачивать новые символы для вывода.
Я больше скажу: у ВГ75 два 8-битных буфера по 80 байт, и два 7-битных по 16 байт. И вся строка целиком грузится в течении вывода всех 10-ти (сколько запрограммировано) линий растра. Из одного буфера выводится, в другой грузится, потом меняются местами. Дополнительные буферы по 16 байт - это для кодов символов, если атрибут не должен занимать знакоместо. Хотя на самом деле атрибут всегда занимает знакоместо, просто выводится либо пробел (или символ с кодом ноль - тут я не в курсе), либо символ из 16-байтного буфера.

krt17
13.03.2017, 20:38
Посчитал такты в emu80 v4 получилось ~23400, без понимания как вейтится подбирать последовательности комманд не знаю как.

Pyk
13.03.2017, 21:10
krt17, Поясни, какие такты ты считаешь, что это за тест по ссылке выше и что нужно проверить?

krt17
13.03.2017, 21:34
krt17, Поясни, какие такты ты считаешь, что это за тест по ссылке выше и что нужно проверить?
Я считаю такты в 1 кадре, нужно для понимания на что собственно рассчитывать коду для 50 fps и сколько займет обработка кадров. В верхнем левом углу пишется 3 байтовое число, это и есть собственно число тактов +/- немного, оно шестнадцатеричное, так проще выводить:). Экран я просто заполняю, проверял при максимальном заполнении как бы, это я так понял не влияет.
По отображению не совсем понятно, вот эти поля обязательны по краям или можно использовать а 8275 сам бланки сделает?

Pyk
13.03.2017, 21:46
Ага, понял, уже и в коде увидел.
Заполнение не влияет.
Поля обязательны, при выводе на телевизор они не помещаются на экране. В эмуляторе они показываются, а на реальном ТВ или мониторе поместится не все - где-то больше, где-то меньше.
В принципе, наверное можно чуть расширить картинку с 31 до 32 строк (если использовать 8 скан-линий) - в экран ТВ должно влезть, да и цифра "круглее" получается. Но в стандартный диапазон видеопамяти наверное уже не поместится, даже с использованием F1, нужно будет использовать другую область памяти и перепрограммировать ПДП.

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

krt17
13.03.2017, 21:52
Еще насколько я понимаю сброса dma нет, то есть F1 нельзя использовать? Или все таки есть и можно? Тогда не понятно почему когда я забыл ld a,(hl) картинка не выровнялась? Короче наверное надо схему все таки смотреть :(

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


Поля обязательны, при выводе на телевизор они не помещаются на экране.
Ну сколько поместится меня не волнует:) я прикидываю как скроллинг делать, бланкам это не помешает как я понял.

Pyk
13.03.2017, 22:09
Можно использовать. Основной принцип тут такой: нельзя запускать отображение, пока все F1 не расставлены по местам. В этом тесте все ок: сначала заполняется экранная область начиная с адреса 1000, а потом уже перепрограммируется ВГ75 и ВТ57 на отображение из этой области. Скроллинг можно делать, если F1 остаются на месте. Кстати, есть еще код F3 - похож на F1, но действует не до конца строки,а до конца кадра. Ничего очень уж сложного тут нет, просто это нужно все "прочувствовать" ;)

Быстрый скроллинг я в свое время делал с помощью команд работы со стеком. Поскольку прерывания отсутствуют, это вполне безопасно.

krt17
13.03.2017, 22:19
Ничего очень уж сложного тут нет, просто это нужно все "прочувствовать"
Да спасибо, я понял, я про то что если не перебить 8257 то dma не сбросится само и не начнет сначала. Вроде основные моменты ясны, кроме вейтов:) ну да шут с ними.

Pyk
13.03.2017, 22:34
На реале 5AE1 = 23265
Ровно столько же (23265) в эмуляторе uart - у него такты считаются точнее.
Но наверное из-за увеличенного строчного импульса изображение сместилось влево и обрезались два первых столбца на моем ТВ-тюнере.
Наверное лучше не экспериментировать с параметрами и оставить все-таки стандартный размер строчного импульса и 78 символов в строке (в этом примере 74 символа и 8 символов строчный импульс вместо 4):
http://emu80.org/temp/tacts.png

OrionExt
13.03.2017, 22:58
Спектрумисты атакуют. Процессорный такт, и такт взятой конкретно платы. Разные вещи.

Я так понял тут еще с комплектом 580 разбираться долго, как он работает (в разрезе РК86).

jerri
13.03.2017, 23:12
Спектрумисты атакуют. Процессорный такт, и такт взятой конкретно платы. Разные вещи.

Я так понял тут еще с комплектом 580 разбираться долго, как он работает (в разрезе РК86).

давай рассказывай.
что у тебя не так с тактами? если у разных плат разная скорость исполнения фрейма то как вы вообще программы пишите?

Pyk
13.03.2017, 23:17
Почему разная? Все к одному кварцу привязано, так что в конечном счете все должно быть однозначно...

krt17
13.03.2017, 23:19
Я так понял тут еще с комплектом 580 разбираться долго, как он работает (в разрезе РК86).
разбирайтесь конечно, если что спрашивайте.

DDp
13.03.2017, 23:28
... F1 нельзя использовать?

:v2_finge:

Pyk
13.03.2017, 23:28
в этом примере 74 символа и 8 символов строчный импульс вместо 4
Наоборот. Зачем-то 4 вместо 8. Хотя, раз размер строки сократили, то хотя бы длительность строчного импульса нужно увеличить до 12. Неудивительно, что у uart на телевизоре синхронизация сбилась, но он ее увеличением кадрового выправил, а нужно было, наверное строчный увеличивать - вместо 4-го параметра поставить 95, а не 91. Да и у меня 2 левых символа обрезались по той же причине. На реале уже не попробую сегодня.

OrionExt
13.03.2017, 23:38
jerri, умаляю (нет прерывания). Нет у РК фреймов и у клонов.
Ну, Пентагону повезло. Стандарт, там и считаем. И эмуляторы подгоняют не под такт (платы), а под эмуль (вроде похоже на экране). Иначе это будет глюченая …

Pyk
13.03.2017, 23:43
plain.7z (2.5 Кб, Просмотров: 0)
Да, кстати: их совсем не обязательно использовать :)
Ну разве что, если хочется сэкономить немного памяти и капельку поднять быстродействие...

А расчет по тактам такой, если интересно: (74 символа в строке + 4 символа горизонтальный импульс) * ((30+1) строк * 10 скан-линий) = 24180 тактов ВГ75
24180 * 4/3 = 32240 - тактов процессора
74 * 30 = 2220 символов - всего на экране
2220 * 4 такта = 8880 - столько примерно тактов отнимает от процессора ПДП
32240 - 8880 = 23360 - остается процессору
23265 ≈ 23360 - Неплохо совпадает

OrionExt
14.03.2017, 00:27
NEO SPECTRUMAN. Надо орден дать на форуме за зеркальное ОЗУ #0000-#3fff (#4000-#7fff). Хули я этит игры переделывал в школе на КР-02.
Хотя это бы меня не спасло. ПЗУ перешить вот не разу не было возможности. И даже его стереть(

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

С высоты годов легко критиковать любую платформу. Особенно «свежим взглядом». Пример РК86 – Спектрум.

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

Можно выбрать такт (кварца) - для системы (эмулятор). Будем ловить вайты, хоть бы M1 (Z80). Да не лесом. ДА ну нафиг. Сейчас изучаю MSX. Понятие фреймов (константа) – это что такое? Блин=)

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

Не будьте категоричны)

Pyk
14.03.2017, 00:42
Вроде основные моменты ясны, кроме вейтов ну да шут с ними.
Кстати, откуда могут быть вейты на РК с ВМ80?:o

NEO SPECTRUMAN
14.03.2017, 00:45
Кстати, откуда могут быть вейты на РК с ВМ80
а дорожка на ногу проца hold от DMA не???

когда читает DMA проц покуривает в сторонке

OrionExt
14.03.2017, 01:00
Если судить. DMA вейт, таки. Я думал. А это ВМ80). Пора перестраиваться)

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

Pyk, РК хитрая штука. Я прозрел ток от реген озу. когда касетку потихоньку считываем=)

krt17
14.03.2017, 01:03
Наоборот. Зачем-то 4 вместо 8.
:) я чето там удалял, что то менял, забыл как было в начале. Не обращайте внимания это я с непривычки. А радисты народ то агрессивный, пафосный, жаль игр не делают.

OrionExt
14.03.2017, 01:12
Не буду Кассандрой. Ну монитор РК – жжет. Жаль монитор Ориона – это сброще дыбилов. Сори.

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

живите ту дружно:)

NEO SPECTRUMAN
14.03.2017, 01:18
В схеме РК нет узла регенерации памяти,

в моем понимании

Регенерация содержимого ОЗУ осуществляется подачей сигнала RAS с перебором всех 128 возможных состояний адреса, период регенерации не должен был превышать
когда ДМА успевает перебрать все 100% ??

пойду еще покурю схему



Понятно, что при закачке строки по кусочкам, прогон программы прерывается на более короткий промежуток времени (хотя какая нам разница, если общее время простоя КР580 - то же самое).
ну если после снятия hold проц сразу же продолжает работу в след такте то может и да
а если этот сигнал висит дольше времени самой переброски
или проц несколько тактов выходит из этого режима
тогда чем больше этих остановок тем...

как это у 8080 мну не знаю

пойду курить его мануал...



А сейчас ВГ75 запрашивает данные у ПДП крошечными порциями по 8 байт
у ва75 выставляется Число тактов между запросами ПДП 0-55
Число циклов ПДП в течение одного сеанса1-8

может если поставить 0,8 вся строка перебросится без остановки

OrionExt
14.03.2017, 02:53
ого)

Видимо ДМА стрельнуло

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

Ребята. Го Игру с куртизанками. Я да же Свой КР-02. Запущу

Кстати ВГ75 съели в соседнй теме. Тут даже не смешно.

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

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

движок у форома, слобоват. читеры?)

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

Движек форумаю Поченяем время. Сначала

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

Да услушат меняя. Рекламка нормально обновляетя

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

делать выводы. рекламо сосущих)

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

ого. тут есть модераторы. проверка?. хи хи да ну нах

barsik
14.03.2017, 06:09
если у разных плат разная скорость исполнения фрейма, то как вы вообще программы пишите?

Как раз разная. Если я правильно понял под незнакомым термином "скорость исполнения фрейма" - время прогона какой-то процедуры для работы с экраном.

Почти все грамотные пользователи РК86 используют турбирование по схеме из ж.РАДИО 01.1991, стр.38. При этом меняется кварц у ГФ24 с 16 МГЦ на 27 МГЦ, а для питания ВГ75 (и счётчика точек в знакоместе ИЕ4) такт сохраняется прежним. Для чего ставится простейший генератор на 531ЛН1 с старым кварцем 16 МГЦ. После переделки КР580 тактируется тактом 27:9=3 МГЦ и ВТ57 тактируется тем же повышенным тактом 3 МГЦ. Хотя, т.к в системе всё работает асинхронно, можно и для ВТ57 поставить отдельный генератор и тактировать его ещё более высоким тактом (например 3.5 МГЦ), тогда ПДП будет заполнять буфер ВГ75 ещё быстрее и скорость CPU дополнительно возрастёт.

В общем, после замены такта КР580 выигрыш больше, чем в число раз соотношений тактов 3:1.77= ~1.7 раза. А выигрыш примерно вдвое. А если поставить буфер на ОЗУ РУ5, то КР580 потянет такт до 3.5 МГЦ. Тогда РК86 почти сравняется в скорости с ZX-Spectrum.

ГФ24 с высокочастотными кварцами заводится только, если последовательно с кварцем ставить очень маленькую ёмкость в 3-5 пф.


А расчет по тактам такой:
(74 симв/стр + 4 символа ССИ) * (30 строк * 10 скан-линий) = 24.180 тактов ВГ75

Вообще-то (74+4) * (30*10)= 23.400.

Т.е слева уравнения ошибка, а вот результат правильный. 30 строк это на экране, а ещё есть расход в одну строку на обратный ход по кадрам. Строк должно быть 31, чтобы число строчных периодов в кадре было 310 (что довольно близко к стандарту в 312.5). И если подставить слева 31 вместо 30, то и получится 24.180.

Но термин неверный. Не тактов ВГ75 (у неё такт 8 МГЦ), а времён вывода знакоместа шириной 6 точек тактом 8 МГЦ , что равно 6:8= 0.75 МКСЕК. Это время сколько выводится одно знакоместо.


24180 * 4/3 = 32240 - тактов процессора

Не понял почему это так. Ведь такт ВГ75 - 8 МГЦ, а такт процессора - 1.77 МГЦ.

Число тактов процессора приходящихся на период кадра я бы посчитал так;

(74+4) *31*10 * 0.75 = 18.135 МСЕК (это у Вас неверный режим, кадровый период д.быть 20 МСЕК).

И число машинных тактов CPU в кадре: 18135 : (1:1.77)= 32098. А не 32240 !


ПДП + ВГ75 делают ту же работу, что и канал #0 первого ПДП у IBM PC. Сам догадаешься, или подсказать?

Пожалуйста, подскажите. Если мне не изменяет память, там это прерывание от таймера.

Pyk
14.03.2017, 07:59
Т.е слева уравнения ошибка, а вот результат правильный.
Опечатался. Добавил "+ 1" в исходное сообщение


Не тактов ВГ75 (у неё такт 8 МГЦ)
На сам кристалл подается 1,333 МГц = 8/6


(74+4) *31*10 * 0.75 = 18.135 МСЕК (это у Вас неверный режим, кадровый период д.быть 20 МСЕК).
Ну да, потому у uart и сбилась синхронизация при тесте на телевизоре.


18135 : (1:1.77)= 32098. А не 32240 !
А если вместо 1,77 взять 1,777778, будет 32240

HardWareMan
14.03.2017, 08:35
ПДП+ВГ75 делают ту же работу, что и канал #0 первого ПДП у IBM PC. Сам догадаешься, или подсказать?
Пожалуйста, подскажите. Если мне не изменяет память, там это прерывание от таймера.
Прерывание? У ПДП? Закусывать надо! Но отчасти вы правы: один из каналов таймера действительно подан на #0 канал первого ПДП. Для периодической генерации запроса ПДП.
http://savepic.ru/13287821.png

mvg
14.03.2017, 08:38
вопрос к barsik

Вы несколько раз упомянули компилятор pl/m для 8080.
есть ли какой нить мануал - как написать хеловорд.rk, к примеру?
хотелось бы что то по типу http://zx-pk.ru/threads/10442-pishem-na-assemblere-pod-emulyatorom.html
заранее благодарен

jerri
14.03.2017, 09:02
NEO SPECTRUMAN.
С высоты годов легко критиковать любую платформу. Особенно «свежим взглядом». Пример РК86 – Спектрум.

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

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

так что критикуем не платформу. критикуем систему.



Можно выбрать такт (кварца) - для системы (эмулятор). Будем ловить вайты, хоть бы M1 (Z80). Да не лесом. ДА ну нафиг. Сейчас изучаю MSX. Понятие фреймов (константа) – это что такое? Блин=)

фрейм, меряется в тактах процессора - это процессорное время выполнения отрисовки экрана от начала экрана до начала экрана
на фирменном 48к спектруме это 69888 тактов процессорного времени или 17472 простых команд.
скорость освежения игры часто измеряет во фреймах - чем выше фреймрейт (больше кадров в секунду отрисовывается) тем глаже смотрится анимация в игре.

50 фпс игры - Kolobok Zoom (http://www.worldofspectrum.org/infoseekid.cgi?id=0012901&loadpics=3), Pussy (http://www.worldofspectrum.org/infoseekid.cgi?id=0013018&loadpics=3)
25 фпс - firefly (http://www.worldofspectrum.org/infoseekid.cgi?id=0001772&loadpics=3), batman (http://www.worldofspectrum.org/infoseekid.cgi?id=0000442&loadpics=3)

низкий фреймрейт Sirwood (http://www.worldofspectrum.org/infoseekid.cgi?id=0004524&loadpics=3)

NEO SPECTRUMAN
14.03.2017, 13:25
фрейм, меряется в тактах процессора
в данном случае все немножко сложнее

это комп с произвольным фрейм рейтом
для zx80 все что нужно знать что в строке 207 тактов
тут же все сложней

если число символов в строке приведет к повышению частоты строчников
то вообще для каждого режима будут свои времянки
и хорошо если в каждой строке\строке знакомест задержки будут повторяться в одном и том же мести
а если они будут уплывать?

хотя по моему все это осуществимо




если у разных плат разная скорость исполнения фрейма
да так и есть
тк строили\строят другие клоны РК и запихивают их в fpga ничего не понимая во времянках и как они влияют на совместимость


НО каноничная плата только одна!
и все микрухи там от одного кварца
так что полноценная эмуляция возможна!

вот эмуляция плат с несколькими кварцами...
хотя если постараться


спеки тоже разные
и времянки на них тоже
но все фирменные и наиболее значимые эмулируются! (так же вспоминаем галочку late timings)
достаточно точно


+нам еще помогает то что в РК можно хоть как то синхронизироваться с кадровым синхроимпульсом
если высчитать количество тактов в каждом фрейме для каждого режима
то можно будет сделать выравнивание на первый такт
и пилить всякие мультиколоры эффекты

к сожалению против нас то что строка читается в буфер (я так понимаю) один раз за строку... или нет????
но если после сброса вг75 генерирует сразу строчники а не кадровый синхроимпульс
то думаю вполне можно будет выжать pseudo hires
или повысить разрешение по вертикали в 4 раза для псевдо графики
(делать сброс и менять адрес в ПДП каждую строку)
только хватит у РК тактов на это???

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


Прерывание? У ПДП? Закусывать надо!
да чавото в нашей документации там где всякие ПЭВМ
оно так называется...

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


С высоты годов легко критиковать любую платформу.
да я ее особо и не критикую
я как раз и говорю
что какая платформа сделана такая она уже и есть
а уже напаивать сверху что то поздно...

я критикую недалекость документации
и постоянные ссыпания на ПЗУ\драйвер (что недопустимо для такой медленной машины)
ну и крайне слабое программное обеспечение


С высоты годов легко критиковать любую платформу
так я не вижу нового более прогресивного софта
на других платформах все развивается...
...хотя на РК наконец началась демосцена хоть какаято

вон на chip8 запилен простенький движок вульфа
занимает он полтора килобайта (несмотря на дикую прожорливость кода chip8)
для работы ему нужно исполнять 50000 команд в секунду
1777777/50000=35,55554
за 35 тактов(даже с учетом замедления) на нативном коде вполне можно сделать и даже лучше...

У РК можно свободно менять адрес лежания видео памяти
вообще можно запилить(в отличии от спека) тройную буферизацию...

krt17
14.03.2017, 13:40
Из того что более менее понятно, но правильно ли ???
pixclk Пиксельклок 8Мгц
crtclk pixclk/6 i8275 клок 1.(3)Мгц
cpuclk pixclk/9*2 ??? i8080 клок 1.(7) Мгц
Времянки кадра в зависимости от настроек i8275. Для себя выбрал 68/16 36/4 6х8 вроде максимально соответствуют стандарту.
Каждое чтение i8257 дает 4 (?) такта вейта (или как он тут называется) на i8080, все задержки вроде прогнозируемы.
Строчный сброс i8275 как то уж очень экстремально выглядит, да и как в этом случае вертикальный бланк делать не ясно, а вот переинициализация i8257 каждый ряд вроде как реальна, вертикальный зумер или волны можно сделать.

NEO SPECTRUMAN
14.03.2017, 14:00
Но термин неверный. Не тактов ВГ75 (у неё такт 8 МГЦ), а времён вывода знакоместа шириной 6 точек тактом 8 МГЦ , что равно 6:8= 0.75 МКСЕК. Это время сколько выводится одно знакоместо.
на нее идет только один Character Clock с частотой кварц/9/12
вот это и есть её такты
частота низкая правда 16460,898148148148148148148148148

за один такт ВГ75 проходит 12 тактов проца (хорошое кратное число для z80 как по мне(на Atari 2600 с кратностью уже проблемы...))

не будет ли это значить что ВГ75 своей не поворотливостью будет еще больше тормозить проц

я надеюсь что DMA снимет hold как только прочитает все что нужно
и не будет ничего ожидать от ВГ75

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


Каждое чтение i8257 дает 4 (?) такта вейта (или как он тут называется) на i8080, все задержки вроде прогнозируемы.
они прогнозируемые

ТЫ МНЕ ПОКАЖИ ГДЕ ЛЕЖИТ ИХ СПИСОК И ОПИСАНИЕ
а не то что они прогнозируемые

и без знаков вопроса

и на 4 такта кого она будет вейтить проц??

ага у DMA вроде такая же частота как у проца

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


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

krt17
14.03.2017, 14:02
в этом как раз и есть проблема
Проблемы не вижу, заканчиваем истерить.

NEO SPECTRUMAN
14.03.2017, 14:28
Пиксельклок 8Мгц
а что там на пиксельклоке вообще фиолетово
тк все пляшет от Character Clock-а и клока DMA с процом

а еще нужно знать
что можно менять во время работы а что измениться только после перезапуска и по окончанию чава нибудь

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

DMA может перекидывать до 16К памяти
без перепрограммирования
крута!

а что будет если включить ВГ75 но не включать DMA
оно не будет кидать какой нибудь мусор на экран?



DU (DMA Underrun) — этот флаг устанавливается при потере данных во время процесса ПДП. В этом случае процесс ПДП прерывается и экран затемняется после кадрового синхроимпульса. Сбрасывается после чтения регистра статуса.
не совсем понятно

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


в моем понимании

Регенерация содержимого ОЗУ осуществляется подачей сигнала RAS с перебором всех 128 возможных состояний адреса, период регенерации не должен был превышать
когда ДМА успевает перебрать все 100% ??

тем более непонятно как тогда регенерируются вторые 16к памяти

barsik
14.03.2017, 15:30
При программировании режима ВГ75 можно задать число строк на обратный ход луча по кадрам. Причём в очень узком диапазоне - от 1 до 4 строк гашения. У меня есть небольшое подозрение, что в англоязычном Доке неточность. Я предполагаю что это величина - длительность VRTC с каждой из сторон картинки. Т.е, снизу картинки можно иметь до 4-х строк гашения и столько строк гасить над картикой. Т.е это не общий размер бордюра, а размер бордюра сверху и снизу. Тогда всё встаёт на свои места.

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

100 * 4 : (64+4)= 5.8%, или
20 МСЕК : (64+4) * 4= 1.175 МКСЕК.

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

Если максимальное число строк гашения реально 4, то получается, что разработчики ВГ75 изначально рассчитывали, что часть строк гашения по кадрам, в случае необходимости, будет погашена программно.

Для игр интересными представляются дополнительные режимы, возникающие за счёт 4-х строк гашения по кадрам, при условии что ОЗУ верно регенерируется при 4-х строках, в которых отключена работа ПДП, как это было выяснено в опытах vinxru.

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

Рассмотрим, какие режимы есть и какие возможны.

В играх обычно используется режим 36+1 строк из которых 30 строк видимые, что с базовым фонтом даёт псевдографику 128*60. Это основной режим псевдографических игр и графического редактора. С альтернативным фонтом с разложением знакоместа на 3 пикселя по горизонтали и 2 по вертикали получается режим 192*60.

Но сам я использовал нетрадиционный режим, основанных на альтернативном фонте. При программировании высоты знакоместа не в 8, в всего 6 линий растра и задании 48 строк и 4-х строк на гашение по кадрам (или 51 строка +1 на гашение), общее число строчных периодов в кадре составит 48*6 +4*6= 312, что и требуется. Я не устанавливал 4 строки на гашение, используя только одну, как в базовом режиме (неважно каким образом в растре 52 строки). При высоте знакоместа в 6 линий растра - видимы 42 строки. Такой режим позволяет выводить не только псевдографику, но и текст, хотя и не базовым фонтом (фонт высотой в 6 точек).

Так как в этом режиме высота знакоместа 6, мы вынуждены использовать разбиение знакоместа на 2 по горизонтали и 3 по вертикали. Что даёт общее псевдографическое разрешение 128*126. Если ввести аппаратный ССИ и поднять такт ВГ75 на 10%, т.е сделать 9 МГЦ вместо 8, как это сделано в "Партнёре", то пиксель такого режима станет квадратным, а с добавкой цвета такой режим станет идеальным для игр. Лично я использовал именно такой режим, т.к у меня был фонт 8*8, а 8 точек по горизонтали на 3 не делится, отчего 192 пикселя в линии, я иметь не мог.

Второй совершенно уникальный режим, который является не только более удобной для программиста модификацией режима 192*60, но и даёт High Resolution Mode. Не зная, как подогнать частоты, я использовал перестройку частот разверток в дисплее. Однако, теперь ясно, что можно обойтись и без этого.

В этом режиме используется 36 строк. Если уменьшить число линий растра в знакоместе с 8 до 4-х, и одновременно удвоить число строк, то псевдографичность по вертикали отпадёт, что существенно облегчает работу программиста. Тогда псевдографическая матрица сокращается с 3*2 до 3*1, хотя число пикселей в экране не меняется и остаётся тот же режим 192*60. Для вывода текста в этом режиме используется особый фонт, в котором символ формируется из двух знакомест размером 6*4, стоящих рядом по вертикали. Как плюс, - при этом можно делать более плавный вертикальный ролик с шагом в пол строки.

Однако, 36*2= 72 строки не запрограммировать на ВГ75. Поэтому приходится использовать 64+4=68 строк, что приводит к частоте кадров: 1 : ((64+4)*4*64)= 57 Герц. Для телевизора надо 50 ГЦ или 60 ГЦ. Чтобы довести частоту кадров до 60 ГЦ, укорачиваем ССИ с 6 до 4 и число символов в строке с 78 до 77. Тогда строчный период падает до: (77+4)*0.75= 60.75 МКС, а частота кадров составляет: 1 : ((64+4)*4*60.75)= ровно 60 Герц.

Если же ВГ75, как я предполагаю, позволяет иметь более 4-х строк на гашение по кадрам, то такой режим достигается и при 50 Гц. Вот почему возник вопрос о числе строк гашения по кадрам.

Теперь главный сюжет, - для чего это делается, т.е для чего лучше иметь альтернативный фонт 6*4. При использовании альтернативного фонта с разложением на 3 по горизонтали и 2 по вертикали (высота пикселя всего 2 линии), реализуется уникальный режим высокого разрешения 192*120. Этот режим работает с частотой кадров в 60 ГЦ, поэтому на старом советском телевизоре, без подстройки частот, он работать не может.

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





Регенерация содержимого ОЗУ осуществляется подачей фронта /RAS с перебором всех 128 возможных состояний адреса, период регенерации не должен был превышать 2 МСЕК
когда ДМА успевает перебрать все 100% ? Тем более непонятно, как тогда регенерируются вторые 16 кб памяти

Чтобы ОЗУ регенерились надо перебрать все сочетания битов на 7 линиях A0...A6, т.е 128 адресов. Причём, для регенерации - подача /CAS не нужна. А т.к /RAS подаётся сразу на все установленные в ЭВМ ОЗУ, то хотя читается из одной банки, регенерируются сразу все банки памяти. И банки по 16К на РУ3-тьих, и банки по 64К на РУ5, и банки по 256К на РУ7-мых, и банки по 8 мб на SIMM.


Вы упомянули компилятор PL/M для 8080. Есть ли какой-нибудь мануал ?

Я сам о крутизне PL/M узнал пару месяцев назад в одной из тем про программирование. В 90-е годы не имел PL/M для CP/M. Раньше я считал PL/M таким же бесполезным для 8-ми разрядок, как СИ и Паскаль.

С тех пор у всех клянчил учебник по PL/M на русском языке, - бесполезно. В списке литературы на Вики приведены 2 учебника на русском, но я не сумел скачать. Т.к требуют купить эти книги. Поэтому пришлось скачать мануалы на иностранном языке. А до программирования на PL/M я ещё даже не добрался.

И даже ещё не имею самого PL/M для CP/M, есть только исходник на фортране. Есть Nevada Fortran для CP/M. Рассчитываю откомпиллировать в нём исходник PL/M, чтобы получить CP/M COM-файл. А затем использовать его в эмуляторе ОРИОНА с CP/M или с резидентным эмулятором 22NICE в Windows.

Пока я "погряз" в возне с железяками. Лишь читаю ДОК-и по PL/M, вот и всё "движение", что есть пока в отношении PL/M. Оттого я и агитирую за PL/M, чтобы не разбираться в этом одному. Как пользоваться XPLM для PC, я тоже не знаю (он на выходе выдаёт не COM-файл, а какой-то промежуточный формат). Кстати есть и более развитая версия PL/M, называется PLMX.

С англоязычными учебниками та же проблема (хотя тут учебников больше) - требуется покупка книг. Например, "A Guide to PL/M Programming for Microcomputer Applications". Поэтому удалось скачать лишь ДОК-и от Intel для PL/M-80, PL/M-86, PL/M-386 и даже PL/M-8051. Пока читаю вот это: M/9800268B_PLM-80_Programming_Manual_Jan80.pdf

SegaBoy
14.03.2017, 15:42
Может кому-то будет полезным. Осциллограмма торможения процессора контроллером ПДП.
Из неё видно, что при поступлении сигнала HOLD, установка HLDA занимает от двух и более тактов, в зависимости от того о чём "думает" процессор. После снятия сигнала HOLD, процессор убирает HLDA всегда через два такта.

http://savepic.ru/13301188.png
http://savepic.ru/13279684.png
http://savepic.ru/13283780.png
http://savepic.ru/13278660.png
http://savepic.ru/13269444.png

krt17
14.03.2017, 16:00
Может кому-то будет полезным.
Вот спасибо, то что надо.

HardWareMan
14.03.2017, 16:10
SegaBoy, не полезно.
http://savepic.ru/13281731.png
Используйте сэйвпик.ру, вот так:

http://savepic.ru/13295042.png
http://savepic.ru/13287874.png
http://savepic.ru/13289922.png
http://savepic.ru/13300162.png
http://savepic.ru/13302210.png

NEO SPECTRUMAN
14.03.2017, 16:39
в зависимости от того о чём "думает" процессор.
ну он должен как то же завершить предыдущую команду...

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

длительность сигнал подтверждения hlda при этом все время 34т
кроме одного случая где он 26т

при каком режиме работы сделаны осциллограммы???
нужно знать как были запрограммированы ВГ75 И ДМА
оригинальная схема компа???

может укороченный hldа когда конец строки стоп ПДП

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


Может кому-то будет полезным.
ДАЕШЬ БОЛЬШЕ РАЗНЫХ ОСЦИЛЛОГРАММ!!!!

а можно записать?
несколько строк видео сигнала (штук 30) или CCLK (Character Clock)
на фоне тактов проца
и сигнала hold


после старта РК
когда видеорежим известен


есть возможность писать больше каналов?

SegaBoy
14.03.2017, 16:49
ну он должен как то же завершить предыдущую команду...

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

длительность сигнал подтверждения hlda при этом все время 34т
кроме одного случая где он 26т

при каком режиме работы сделаны осциллограммы???
нужно знать как были запрограммированы ВГ75 И ДМА
оригинальная схема компа???

может укороченный hldа когда конец строки стоп ПДП

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


ДАЕШЬ БОЛЬШЕ РАЗНЫХ ОСЦИЛЛОГРАММ!!!!

ПДП передаёт 10 пакетов. 9 по 8 байт и последний 6 (78 символов на строку). 26т это последний случай.
Режим работы стандартный, как в Мониторе задано.
Комп Апогей цветной.

Какие ещё сделать осциллограммы?

NEO SPECTRUMAN
14.03.2017, 16:54
ПДП передаёт 10 пакетов. 9 по 8 байт и последний 6 (78 символов на строку). 26т это последний случай.
сколько тактов проца\character clock-а между запросами?

нубский вопрос ПДП передает эти 10 пакетов каждую строку знакомест? (я понимаю так но подтверждения я не нашел и не помню)

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


Какие ещё сделать осциллограммы?
character clock
hold
клок проца

чтоб глянуть как идут hold-ы относительно ВГ75

размеры hlda и то что он завершается на 2 такта позже чем hold теперь известно

так же

клок проца
hold
dack тот что запрос DMA от вг75

чтоб глянуть с какой задержкой DMA сделает hold после того как оно захочет ВГ75

SegaBoy
14.03.2017, 17:12
ВГ75 выставляет DRQ для ВТ57. ВТ57 выставляет HOLD для ВМ80. ВМ80 отвечает HLDA. ВТ57 топает ногой /DACK для ВГ75.
Здесь показаны два последних пакета, 8 и 6 символов.

http://savepic.ru/13267423.png
http://savepic.ru/13243859.png

Добавил покрупнее пакет на 8 символов с сигналом /CCLK

b2m
14.03.2017, 17:31
Время кадрового бланка обычно составляет 25% длительности кадра.
Какие 25%?!! Да что же Вы всё выдумываете-то? Если говорить о телевизионных стандартах, то читаем ГОСТ (http://docs.cntd.ru/document/1200016362), вникаем...

NEO SPECTRUMAN
14.03.2017, 17:49
БОЖЭ!!!!
Я жестко проглючил про частоту CCLK-а
она же!!! частота кварца / 12

то есть на 4 такта проца
приходиться 3 такта character clock-a!!!!!!!!!!!!!!!!!!

задача резко немного усложняется...

SegaBoy
14.03.2017, 17:52
Одна строка (10 запросов, 78 символов) и один кадр (30 строк).

http://savepic.ru/13278678.png
http://savepic.ru/13264342.png

NEO SPECTRUMAN
14.03.2017, 18:03
Мдаааа
проц стоит по 4 такта на каждый байт перекидываемой памяти без учета дополнительных тормозов...

больше 312т уходит на переброску строки

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

А эти данные можно как то передать в оригинальном виде?

было бы полезно посмотреть пару фреймов в хорошом разрешении

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

А если ко всему этому добавить hrtc и vrtc с вг75?

помоему цифровой осцилограф это труЪ
ХАЧУУУУУ!!!!!!!!!!!!!!!!
ДАЙТЕ ТРИ!!!!!

SegaBoy
14.03.2017, 18:24
Добавил сигнал HRTC.

http://savepic.ru/13279726.png
http://savepic.ru/13272558.png
http://savepic.ru/13257198.png


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


Мдаааа
проц стоит по 4 такта на каждый байт перекидываемой памяти без учета дополнительных тормозов...

больше 312т уходит на переброску строки

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

А эти данные можно как то передать в оригинальном виде?

было бы полезно посмотреть пару фреймов в хорошом разрешении

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

А если ко всему этому добавить hrtc и vrtc с вг75?

помоему цифровой осцилограф это труЪ
ХАЧУУУУУ!!!!!!!!!!!!!!!!
ДАЙТЕ ТРИ!!!!!
Да, можно сохранить в виде файла и посмотреть программой.
Сейчас сниму вместе с VRTC и выложу файл. Пока можете установить софт https://www.saleae.com/downloads

файл здесь (https://cloud.mail.ru/public/E2oi/cWZftE2CQ)

NEO SPECTRUMAN
14.03.2017, 19:24
Тем временем вот установка видео режима апогея

порты
F000-F7FF DMA
EF00-EFFF ВГ57




ED03 KEYS
8A

EF01 ВГ75 СБРОС
00

EF00
4D ;78 СТРОК ширина
1D ;1 СТРОКА В КСИ 30 СТРОК высота
99 ;10 СТРОК ВЫСОТА ЛИНИИ ПОДЧЕРКИВАНИЯ 10 высота символов
D3 ;СТРОЧНИК 8 ЗНАКОМЕСТ Мигающий штрих под символом
;И ЕЩЕ 2 КАКИХ ТО РЕЖИМА

EF01 ;СТАРТ ДИСПЛЕЙ
27 :8 ЦИКЛОВ ПДП В ТЕЧЕНИИ СЕАНСА
;7 ТАКТОВ МЕЖДУ ЗАПРОСАМИ ПДП


READ EF01
READ EF01

AND $20??????
СИНХРОНИЗАЦИЯ С ЛУЧОМ


F008 Запись в РгР
80 Установка автозагрузки

F004 Канал 2, начальный адрес
D0
E1 ;E1D0
F005 Канал 2, количество циклов
23
49 $923+1??? +Цикл чтения ПД

F008 Запись в РгР
A4 Разрешение ПД ДЛЯ КАНАЛА 2
УСТАНОВКА УДЛИНЕННОЙ ЗАПИСИ
УСТАНОВКА АВТОЗАГРУЗКИ




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

что такое удлиненная запись???? о_О

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


1 такт ВГ75 = 1,333333..... тактов проца
1 такт ВГ75 = 6 пикселей
1 такт проца = 4.5 пикселей

Ширина строчников задается в тактах ВГ75 (в знакоместах)
как в мануале
Ширина экрана в ВГ75 устанавливается в тактах ВГ75 без учета строчников
как в мануале

1 строка = ширина ССИ + ширина экрана и больше ничего там нет!!

в данном режиме ширина строки 8+78=86 тактов ВГ75
114,66666666666666666666666666 тактов процессора в строке... (не приятно...(но это только для этого видео режима))

получается
начало первой строки пикселей 0 такт проца (условно)
начало второй строки пикселей 114,66666666666666666666666666 такт проца
начало третей строки пикселей 229,33333333333333333333333332 такт проца
начало четвертой строки пикселей 344 такт проца

каждые три строки начало строки пикселей совпадает с тактом процессора


длина кадрового синхроимпульса задается в знакоместах
высота символа * на количество знакомест в КСМ

кадровый синхроимпульс начинается в тоже время что и строчный
после его окончания сразу же включается следующий строчный синхроимпульс!!!
http://zx-pk.ru/attachment.php?attachmentid=60106&d=1489510615


первый запрос DRQ от ВГ75(чтение первой строки знакомест) начинается уже через 7 тактов(вг75) после начала КСИ
А второй(вторая строка знакомест) через через 7 тактов(вг75) после КСИ

это как раз те самые 7 ТАКТОВ МЕЖДУ ЗАПРОСАМИ ПДП
которые выставлены при старт дисплей

то есть строка начинается с ССИ и сразу же начинает считаться пауза между запросами ПДП
а только потом первый DRQ



без осцилограммы видео сигнала тяжело сказать
выводиться ли строка во время чтения второй
или она начинает выводиться уже во время КСИ
и верхние 6 пиксельных строк срезаются


да расчет мультиколоров тут жесткий...

uart
14.03.2017, 19:40
Строка еще состоит из 10 линий.

NEO SPECTRUMAN
14.03.2017, 19:44
строка пикселей
а не строка знакомест
уточнил

barsik
14.03.2017, 19:47
Время кадрового бланка обычно составляет 25% длительности кадра.

Какие 25%?!! Да что же Вы всё выдумываете-то? Если говорить о телевизионных стандартах, то читаем ГОСТ, вникаем...

Спасибо за ссылку. Никогда не знал точных длительностей КСИ и ССИ, а знал их только примерно.

Когда отвечаете на что-то, надо приводить цитату в контексте.


для профессионального видео-монитора с хорошей синхронизацией. Время кадрового бланка обычно составляет 25% длительности кадра

Тогда станет ясно, что речь не о телевидении, а о сигнале для компьютера.

Но разберёмся и с телевидением. Нет в описании ГОСТ-а такого параметра, как длительность гасящего импульса полей в виде цифры. А вот длительность гасящего импульса строк есть.

Но длительность гасящего импульса по кадрам в сигнале телевидения и длительность гасящего импульса в сигнале компьютера - это совершенно разные вещи. Гашение в сигнале телевидения служит лишь для того, чтобы схема легко отловила КСИ. Цели гашения бордюра этот сигнал не служит. Сколько влезло из 625 (312) строк, столько и увидел.

А в компьютерном сигнале гашение служит не для отделения КСИ от уравнивающих импульсов, а для формирования бордюра, чтобы у картинки были чёткие края.

Поэтому в компьютерах с CGA кадровый бланк никогда не бывает меньше 20% от 20 МСЕК. Потому что тогда картинка не влезет по вертикали. В IBM PC бордюр по кадрам отнимает 36%. В ZX-Spectrum - 38.5 %. Но наиболее оптимально иметь кадровый бланк именно 25% от длительности кадра. И это никак не связано с сигналом гашения в стандартном телевизионном сигнале. Так что из ГОСТА полезно было узнать только

4.7 МКСЕК - длительность ССИ
27.3 МКСЕК - длительность КСИ
длительность строчного бланка - минимум 12 МКСЕК (из 64 МКСЕК), хотя для обычного телевизора надо не менее 16, да и при 16-ти в экран влезает не всё.

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

И если число строк на обратный ход луча - только 4, то получается, что ВГ75 при 64 строках рассчитана только на профессиональный видео монитор с хорошей синхронизацией, а не на бытовой телевизор.

NEO SPECTRUMAN
14.03.2017, 20:28
короче HIRES не получится
тк DMA с трудом успевает перекинуть строку символов за 4 пиксельные строки...:v2_dizzy_wall:

но я надеюсь что можно будет делать волночки как на NES-е :v2_dizzy_dance:
двигая видео память каждую строку символов

+ все как я и ожидал
не только каждая строка может начинаться с 0.3 0.6 такта проца
так еще и каждый кадр может начинаться с 0.3 0.6 такта проца

то есть если мы хотим чтоб кадровый синхроимпульс начинался с первого такта проца в каждом фрейме
нам нужно подбирать параметры ВГ75 так чтобы
число тактов ВГ75 во фрейме были кратными 3-м!!!!!!

Pyk
14.03.2017, 21:07
короче HIRES не получится
тк DMA с трудом успевает перекинуть строку символов за 4 пиксельные строки...
А если паузу между DMA-запросами уменьшить?

NEO SPECTRUMAN
14.03.2017, 21:10
Такой вопрос
через сколько тактов после того как проц снимет hlda он сможет исполнять код
и сколько тактов он его не может исполнять до того как он hlda поставит

или все время когда проц не подтверждает готовность он может исполнять код?

Pyk
14.03.2017, 21:14
или все время когда проц не подтверждает готовность он может исполнять код?
Кажется, да

NEO SPECTRUMAN
14.03.2017, 21:14
А если паузу между DMA-запросами уменьшить?
пауза между ними 7 тактов вг75
7*9 = 63
в конечном итоге выигрыш будет пол строки...
(в строке 86 тактов...)

мне интересно что дает

УСТАНОВКА УДЛИНЕННОЙ ЗАПИСИ

SegaBoy
14.03.2017, 21:46
пауза между ними 7 тактов вг75
7*9 = 63
в конечном итоге выигрыш будет пол строки...
(в строке 86 тактов...)

мне интересно что дает

УСТАНОВКА УДЛИНЕННОЙ ЗАПИСИ
Я ранее давал ссылку на книжку «Микропроцессоры и микропроцессорные комплекты интегральных микросхем» 1988 г. том 1 (http://эквм.рф/biblioteka/knigi/0072.djvu)
Со стр. 90 идёт описание ВТ57. На стр.92 (левая колонка посередине) описывается режим удлинённой записи. Я пока не смог осмыслить что там написано.

Pyk
14.03.2017, 21:48
Судя по даташиту, это дает более раннюю активацию сигналов MEMW и I/OW, что позволяет избежать перевода 8257 в состояние ожидания, если устройство (память) выдает READY также раньше, чем обычно.
Пусть специалисты скажут свое веское слово, но я подозреваю, что это ннчем не поможет...

krt17
14.03.2017, 21:50
Насколько я понимаю избавится от курсора при высоте символа 8 пикселей или меньше можно только отправив его за экран?

NEO SPECTRUMAN
14.03.2017, 22:01
предсказание времени появления HOLD
HOLD появляется через такт после DRQ то есть простое +1
но если после перевода из тактов ВГ75 в такты проца число дробное *,333333 *,66666
то его нужно округлить в большую сторону а только потом +1
http://zx-pk.ru/attachment.php?attachmentid=60107&d=1489517555

теперь остается понять как именно ведет себя проц при появлении hold-а
и можно будет рассчитывать на каком такте проца сколько тактов задержки (в похожих режимах работы)...

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


Насколько я понимаю избавится от курсора при высоте символа 8 пикселей или меньше можно только отправив его за экран?
ну дык линия подчеркивания от 1 до 16
сместив ее на 16? можно забыть про нее навсегда?(наверное)

krt17
14.03.2017, 22:11
ну дык линия подчеркивания от 1 до 16
сместив ее на 16? можно забыть про нее навсегда?(наверное)
Нет.

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

По крайней мере в эмуле, я как бы проверяю а не просто пишу.

NEO SPECTRUMAN
14.03.2017, 23:06
По крайней мере в эмуле, я как бы проверяю а не просто пишу.
если без перемещения в край экрана нельзя тогда другая идея

переместить его вкрай
но поменять на не мигающий блок
а на том месте в видео памяти поставить другой псевдографический блок
он проинверсируется и в эмуле ничего не будет видно

дешево и сердито

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


А если паузу между DMA-запросами уменьшить?
да и нельзя наверное уменьшить
унее своя память
видимо она сначала копирует в неё
а потом из неё (как раз когда тот простой)

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


то есть если мы хотим чтоб кадровый синхроимпульс начинался с первого такта проца в каждом фрейме
нам нужно подбирать параметры ВГ75 так чтобы
число тактов ВГ75 во фрейме были кратными 3-м!!!!!!

вот эти параметры
высота экрана 38 + 1 КСИ
высота символов 8 строк
ширина строки 78 + 8 ССИ

и того
(38+1) * 8 = 312 пиксельных строк
78+8 = 86 знакомест ширина

312 * 86 = 26832т ВГ75 за фрейм

26832 * 1,33333 = 35776т проца за фрейм РОВНО!!!

итого частота кадров

(16000000 / 9) / 35776 = 49,691910157026436096203538064003 Hz

SegaBoy
14.03.2017, 23:40
вот эти параметры
высота экрана 38 + 1 КСИ
высота символов 8 строк
ширина строки 78 + 8 ССИ

и того
(38+1) * 8 = 312 пиксельных строк
78+8 = 86 знакомест ширина

312 * 86 = 26832т ВГ75 за фрейм

26832 * 1,33333 = 35776т проца за фрейм РОВНО!!!

итого частота кадров

(16000000 / 9) / 35776 = 49,691910157026436096203538064003 Hz

Сделал тестовую картинку с экраном в таком формате. Видимое изображения 64х32. Прикладываю файл rka для Апогея. Сейчас сделаю и для РК.

Добавил файл rk. Можно проверять на реалах и в эмуляторах.

Добавил файл rkm для Микроши.

63274

b2m
14.03.2017, 23:41
Когда отвечаете на что-то, надо приводить цитату в контексте.
Пожалуйста:

Потому-что, при 64-х строках, - всего 4 строки на обратный ход, - слишком мало для синхронизации, даже для профессионального видео-монитора с хорошей синхронизацией. Время кадрового бланка обычно составляет 25% длительности кадра.
Если говорить о видео-мониторах, например стандарта VGA, то опять же: идём на http://www.epanorama.net/faq/vga2rgb/calc.html выбираем любимый видео-режим, читаем, вникаем...

NEO SPECTRUMAN
14.03.2017, 23:50
Сделал тестовую картинку с экраном в таком формате.
я потом попробую написать тест для проверки...
...еще нужно придумать как сделать выравнивание на 1такт...

Pyk
15.03.2017, 00:06
Поправил в эмуляторе подсчет тактов. Сейчас такты ПДП считаются точно (по крайней мере в том тесте):
http://emu80.org/temp/5ae1.png
На днях выложу обновленную версию.

NEO SPECTRUMAN
15.03.2017, 13:22
то есть если мы хотим чтоб кадровый синхроимпульс начинался с первого такта проца

вот эти параметры
Да нет эти параметры сами по себе не дадаут выравнивание
они просто сделают так что все фреймы будут идти одинаковыми
а вот какой будет из 3-х вариантов фрейма...

нужна будет еще процедура которая определит в каком мы сейчас фрейме (думаю простой счетчик насчитает разное число в каждом из них...)
и сбросит вг75 так чтобы все устаканилось так как нам нужно

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

а в Апогее INTE не заведен на бипер???

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

А кто нибудь может подкинуть сохранялку в RK для sjasm-а??
дето она проплывала тут по моему...

SegaBoy
15.03.2017, 14:49
а в Апогее INTE не заведен на бипер???

Да, в Апогее INTE меняет набор шрифтов. И ещё он выведен наружу, на разъём расширения.

SegaBoy
15.03.2017, 17:06
По поводу работу ПДП в РК.
Пересылка байт из ОЗУ в ВГ75 происходит следующим образом. После торможения процессора, контроллер ПДП выставляет адрес на шину адреса и формирует сигнал чтения для ОЗУ через выход /MEMW. Появившиеся данные на шине данных ПДП проталкивает в ВГ75 сигналом /IORD. То есть по факту ВТ57 в себя не загружает эти данные, они просто находятся на шине данных.

Подробнее можно прочитать в книжке "Домашний компьютер" от авторов РК, на стр. 45.

HardWareMan
15.03.2017, 17:22
SegaBoy, ПДП не только в РК так делает, он это делает @design. Смысл в том, что ПДП при приходе DRQ (будем считать, что канал настроен и прочее) запрашивает шину у ЦП, и как только ЦП подтвердит, что шина свободна, ПДП формирует полный адрес памяти для доступа и активирует шины управления памятью MEMRD/MEMWR а так же подтверждает доступ устройству DACK. Устройство изначально настроено так, чтобы при приходе DACK сразу выдавать данные на шину либо принимать их с нее, в зависимости от направления передачи. У устройства могут быть несколько DACK и, соответственно, несколько DRQ, которые могут быть настроены на разные режимы. К примеру популярная SB16 использует 2 DMA канала, одна для 8ми битной передачи и вторая для 16ти битной. Либо сразу для дуплексного режима (одновременно воспроизведение и запись).

Таким образом да, ПДП выступает в качестве арбитра, который связывает приемник и передатчик на шине, минуя процессор. Более сложный ПДП умеет копирование памяти, для этого он имеет регистр хранения данных и формирует он 2 операции (одну запись и одно чтение).

Но особенность работы ПДП 8257 именно в РК заключается в особом подключении выводов MEMRD/MEMWR и IORD/IOWR самого контроллера. Поэтому операция при программировании выглядит не логичной.
http://savepic.ru/13272249.png
Но это все только из-за упрощения схемы самого РК, логику работы самого ПДП оно не нарушает.

SegaBoy
15.03.2017, 18:46
HardWareMan, спасибо!
Ну да, я это и имел в виду. Полезно иногда проговаривать в слух очевидные для одних вещи, не очевидные для других. На форуме полно тем, где многие нюансы раскрыты не до конца и максимум предлагается пойти и почитать. По-любому интерес к ВГ75 и ВТ57 возникнет не один раз, а читать книжки не всегда получается с пониманием. Даташиты и мануалы же везде разложены, но язык там такой непривычный, что люди постоянно переспрашивают - как это работает = ))

Pyk
15.03.2017, 19:02
по моемуу не проплывала, а то бы я не мучался. можно двумя путями - длинным, сохраняем чистый bin и внешней утилитой делаем съедобный файл, или коротким - с кривым заголовком, но Emu вполне хватает и такого, зато для быстрой проверки хорошо
Не понял, что имеется в виду по "кривым" заголовком? Если отсутствие в конце файла контрольной суммы, то просто добавьте в конец что-то типа:
db 00h, 0e6h, 00h, 00h
И файл будет грузиться в любом эмуляторе. Пусть даже выдавая ошибку КС.

А что касается Emu80, я так понял, что желательно убрать проверку наличия КС при загрузке из командной строки?

NEO SPECTRUMAN
15.03.2017, 20:38
ладно тогда напишу сам и потом выложу...

krt17
15.03.2017, 20:42
Подсчет контрольной суммы я уже выкладывал в составе исходника позавчера, честно говоря не думал что для кого то это может быть проблемой.

cs = 0
lua pass3
mems=_c("binBegin")
meme=_c("binEnd")
cs=0
for i=mems,meme-2 do
cs=(cs+sj.get_byte(i)*257)
end
cs=(cs-cs%256+(cs+sj.get_byte(meme-1))%256)%65536
_pl("cs = "..cs)
endlua
display cs
db 0,0,#e6,cs/#100,cs&#ff

Раз такое дело положу темплейт полностью

device zxspectrum48
org #0000
rkBegin
db progBegin/#100,progBegin&#ff
db (progEnd-1)/#100,(progEnd-1)&#ff
binBegin
disp #0000
progBegin
;-------------------------------------------
; code here
jp $
;-------------------------------------------
progEnd
ent
binEnd
cs = 0
lua pass3
mems=_c("binBegin")
meme=_c("binEnd")
cs=0
for i=mems,meme-2 do
cs=(cs+sj.get_byte(i)*257)
end
cs=(cs-cs%256+(cs+sj.get_byte(meme-1))%256)%65536
_pl("cs = "..cs)
endlua
display cs
db 0,0,#e6,cs/#100,cs&#ff
rkEnd
savebin "prog.rk",rkBegin,rkEnd-rkBegin

zebest
15.03.2017, 21:59
ну да, скрипт на lua - это же так просто.

NEO SPECTRUMAN
15.03.2017, 22:54
ну да, скрипт на lua - это же так просто.
просто

но отлаживать его если оно не будет с ходу работать
рассматривать эти долбанные print-ы
которые в командной строке не бесконечно хранятся...

а еще нету никакого подобия goto
и возможности преждевременно завершить цикл...

+списка доступных команд в sjasm-е нету (во всех мануалах по lua их побольше да и написание местами не совпадает...)
все методом научного тыка...

barsik
16.03.2017, 11:32
Имею конкретный вопрос по работе ВГ75, определяющий можно ли без введения хитроумного узла регенерации, ставить в РК86 большие SIMM.

Ранее, исходя из того, что в реале ВГ75 тормозит на 25%, тогда как по расчёту на основе имеющихся данных должна тормозить лишь на 7%, я предполал, что ВГ75 читает память в каждой линии растра, а не один раз за строку, т.е за 10 линий растра (отчего авторы ВГ75 попадают в категорию идиотов).

27% получаются из расчета: одно считывание 78-ми байт за всю строку, т.е за время вывода всех 10-ти линий растра, один байт передаётся за 4 такта и ВГ75 использует единожды считанное содержимое строки для вывода всех 10-ти линий растра. Вот расчёт:

100 * (78:1.77)*4 : ( 64*10)= 27.6%

Даже, если откорректировать расчёт с учётом, якобы обнаруженных в этой теме потерь 4-х тактов при пересылке каждой посылки из 8-ми байт, то получается дополнительная потеря 9*4=36 тактов 1.77 МГЦ (ПДП у нас на такте 1.77). Девять - это число посылок за которые пересылается строка в 78 байтов. Тогда получается вот такой расчёт:

100 * ((4*78+9*4) : 1.77) : ( 64*10)= 10%

Но никак не 25%. Таким образом, после прочтения этой темы, дело запуталось ещё больше. Теперь уже никто не знает, считывает ли ВГ75 требуемые 78 байтов один раз за строку из 10 линий, или делает это многократно, считывая какие-то куски строки для каких-то линий повторно. Тогда интересно, по какому алгоритму? Хотелось бы знать какие считанные байты и в каких строках используются повторно, а какие считываются всякий раз заново?

После расчёта, с учётом новых данных, я пришёл к выводу, что считывать байты для каждой линии растра ВГ75 не может. Т.к (78+9*4):1.77=64.4 МКСЕК, что даже больше строчного периода в 64 МКСЕК, т.е если бы ВГ75 читал для каждой линии растра, то прогон программы происходил бы только во время одной строки обратного хода по кадрам и быстродействие КР580 упало бы в 31 раз и составило бы 1.77:31= 57 КГЦ, а РК реально даёт не менее 1.3 МГЦ.

И объяснение, что тут предлагают, а именно - то что для одних линий считанные байты строки используются повторно, а для других считываются заново, - мне кажется полной ерундой. Логично только или одно считывание на всю строку или считывание для каждой линии растра, что как доказал расчёт невозможно. Отбросив невозможное, остаётся истина. Вывод: ВГ75 считывает строку только один раз и использует эти данные для вывода всех 10-ти линий растра строки (отчего авторы ВГ75 перестают быть идиотами).

Куда же ПДП тратит время. Тогда логично предположить, что ВТ57 тратит на пересылку байта из ОЗУ в ВГ75 не один такт, а два. Если ВТ57 тратит 2 такта на байт и никаких потерь по 4 байта на посылку нет, тогда:

100 * ((78*2) : 1.77) : ( 64*10)= 24%

А вот это уже близко к реальным 25%. Ещё 2 процента набежит из-за несинхронности ВГ75 и ВТ57, но КР580 немного отыграет за время вывода единственной строки за время обратного хода по кадрам, когда РК86 работает на полной скорости 1.77 МГЦ, без захватов шины.

Кстати, вот сколько РК86 отыгрывает на единственной строке гашения по кадрам.

(76*30 + 100*1) : 76*31= 1.0102

Т.е благодаря отсутствию захватов шины во время единственной строки гашения по кадрам выигрывается 1 процент быстродействия. Таким образом, одна погашенная строка добавляет к быстродействию 0.0102*1.77 МГЦ = 18.1 килогерц. А вот целых 4 погашенных строки ускоряют прогов в:

(76*27 + 100*4) : 76*31=1.0407 раза.

Четыре погашенные строки добавляют к быстродействию 4 процента, что соответствует приросту реального такта в 0.0407*1.77 МГЦ = 72.1 килогерца. А абсолютный выигрыш относительно стандартного режима составит 72.1-18.1= 54 КГЦ.

Кстати установка кода F1 в конце строки в позиции 8+64=72, только экономит 5 байтов, но не даёт ускорения, т.к последняя посылка все-равно читает 8 байтов. Вот если поставить F1 в позиции 8*8-1=63, то девятая посылка ВОЗМОЖНО не будет читаться. Хотя, скорее всего, всё-равно будет читаться, т.к оценку содержимого строки делает вероятно схема вывода, а не схема загрузки буфера.

Кто-нибудь может проверить в реале или по документации, сколько тактов на байт тратит при пересылках ВТ57? Ясно, что два, иначе времена не сходятся.

Моя идея регенерации SIMM была основана на том, что ВГ75 читает строку для каждой линии растра, таким образом за строку ОЗУ в одних и тех же ячейках регенерируется 10 раз. Идея заключалась в использовании того, что т.к сигналы LC0, LC1, LC2, подаваемые на ПЗУ фонта, меняются при каждой линии растра, то используя эти сигналы как A8, A9, A10 для мультиплексора регенерации, можно будет без потерь регенерировать параллельный экрану SIMM. Тогда при чтении ВГ75 первой линии регенерируется один столбец, на следующей линии другой и т.д. Но если ВГ75 читает за строку каждый символ строки только 1 раз, то идея вообще не работает, - прощайте большие SIMM в РК86, - тогда, увы, остаётся наращивать ОЗУ за счёт моря параллельных банок РУ5-тых... Как видите для аппаратных модернизаций РК86 нужны точные знания как работает его железо.

Итак, может кто-нибудь "пролить свет" на число считываний на строке, привести более правдоподобный расчёт реальной скорости РК86? От правильного ответа на этот вопрос зависит и работа программ, для которые считают такты...

SegaBoy
16.03.2017, 12:51
Итак, может кто-нибудь "пролить свет" на число считываний на строке...
Посмотрите картинки к посту 143 (http://zx-pk.ru/threads/27478-sekrety-i-tryuki-programmirovaniya-(v-tom-chisle-i-igr)-dlya-rk-86.html?p=904738&viewfull=1#post904738)
На втором и третьем изображении видно, что в стандартном видеорежиме (78+8 * 30+1) загрузка одной строки знакомест (78 шт.) занимает почти четыре строки вывода на экран (если судить по количеству импульсов HRTC). Следующие шесть строк вывода, ВГ75 не требует загрузки и ВТ57 простаивает (подозреваю что и регенерацией не занимается).

Загрузка одной строки знакомест происходит один раз. Если она длится меньше времени вывода всех линий предыдущей строки, то происходит ожидание окончания вывода предыдущей строки, после чего ВГ75 запрашивает новую строку символов.

barsik
16.03.2017, 13:57
загрузка одной строки знакомест (78 шт.) занимает почти четыре строки вывода на экран (если судить по количеству импульсов HRTC).

Я понял, что имелось ввиду, что загрузка занимает время вывода четырёх линий растра.

Это не даёт информации сколько тактов на байт тратит ВТ57, чтобы заслать байт в ВГ75. Но уверен, что два. На первом такте он читает из памяти, на втором засылает в какой-то порт. А какой конкретно порт, из-за схемотехники РК неважно.

Так много времени занимает пересылка 9-ти посылок по 8 байт, видимо потому, что установлен слишком большой интервал между запросами ПДП. А это сделано, вероятно, чтобы КР580 между захватами шины мог выполнить существенную работу. Например, обработать апп.прерывание. Т.е это надо для сокращения времени реакции на апп.прерывание. Если сделать паузу между пересылками не в 55 тактов, а очень маленькую, то КР580 в обработчике прерываний не успеет "заткнуть" ВТ57 и потеряет еще 2*8 + 4 тактов на следующем захвате шины.


Следующие шесть строк вывода, ВГ75 не требует загрузки и ВТ57 простаивает (подозреваю что и регенерацией не занимается).

Естественно, если ПДП не считывает, то и не регенерирует.

В общем, прощай установка в РК86 больших SIMM, да и РУ7-мые в схеме РК без специальных мер для регенерации будут работать с периодом регенерации более 4 МСЕК, т.е с нарушением паспортных данных. Т.о, чтобы достичь хотя бы 1 мб, придётся паять 16 банок РУ5-тых...

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

Можно бы поставить последовательно 2 счётчика. Первый будет делить ССИ на 8, а второй давать адреса регенерации. Но это тоже не пойдёт, потому что надо, чтобы адреса регенерации менялись каждую строку, а не каждые 8 линий (а число линий в знакоместе переменное). Нужен сигнал меняющийся раз за строку, а такого сигнала я не вижу. Пока в голову приходит только отлавливать 4 ССИ подряд, в которых нет HLDA, т.е отлавливать большую паузу в работе ПДП, что бывает раз за время вывода строки.

Кто-нибудь из аппаратчиков может предложить какое-нибудь максимально простое решение по регенерации больших SIMM, стоящих параллельно банке с экраном или даже вместо неё? (Если вместо неё, то это конечно потребует использовать режим CAS раньше RAS).

SegaBoy
16.03.2017, 14:18
Это не даёт информации сколько тактов на байт тратит ВТ57, чтобы заслать байт в ВГ75. Но уверен, что два. На первом такте он читает из памяти, на втором засылает в какой-то порт. А какой конретно порт, из-за схемотехники РК неважно.

Так много времени занимает пересылка 9-ти посылок по 8 байт, видимо потому, что установлен слишком большой интервал между запросами ПДП (кое-кто утверждает, что это тоже регулируется программно).

Да, не даёт. Я не успел этот момент зафиксировать, но собирался. Чуть позже сделаю.

Из мануала по ВГ75: Команда "Начало воспроизведения" - 001SSSBB, где SSS - интервал между пакетами ПДП, BB - число запросов в пакете.


SSS:
000 = 0
001 = 7
010 = 15
011 = 23
100 = 31
101 = 39
110 = 47
111 = 55

BB:
00 = 1
01 = 2
10 = 4
11 = 8


Инициализация ВГ75 в РК завершается командой 0x27 (001_001_11). Получается интервал между пакетами 7 тактов CCLK и число запросов в пакете 8.

barsik
16.03.2017, 15:59
А если увеличить паузу между посылками с 7 до 15-ти, то процессор сможет сделать в паузу вдвое больше полезной работы (что за полезную работу можно сделать за 7 машинных тактов?). Но главное, - улучшится качество звука. Если сделать паузы между посылками ПДП совсем равномерными по всему периоду кадра, то в спектре вместо двух низкочастоных гармоник будет только одна.

А что будет, если установить длину паузы между посылками в 31. Тогда последние символы в строке не считаются, и не будут выводиться? А нам и не надо, т.к там программный бордюр справа.

Чтобы получить чистый тон, на выход INTE можно включить вентиль (ЛА3 или ЛЕ1) и разрешать прохождение звука на динамик сигналом VRTC, т.е только во время обратного хода кадровой развёртки. Звук будет выдаваться без хрипов.Тогда сигнал будет чистым, но тихим, с частотой вибрато 50 ГЦ глубиной в 100% (обычно в тембре муз.инструментов вибрато имеет глубину до 30% и частоту 6-8 ГЦ).

Если точно знать, что во время вывода каких-то линий растра (например 5...10), HLDA точно не возникает, то подав сигнал LC2 с ВГ75 на разрешение прохождения звука на динамик, мы получим чистый звук меньшей скважности, т.е громче.

SegaBoy, раз уж у Вас есть аппаратура, не можете ли Вы выяснить, есть ли такие линии растра в знакоместе, при которых захвата шины никогда не бывает? Это бы существенно улучшило музыкальные возможности РК86.

Кстати, DI/EI в плане качества звука выгоднее, чем LD (port),A. Т.к длятся всего 4 такта вместо 13-ти.

Есть ещё одна победительная идея.

Использовать для ВТ57 и ВГ75 своё ОЗУ, а для КР580 - своё. Оба ОЗУ включены параллельно. КР580 пишет сразу в оба ОЗУ одновременно, а читает только из одного (своего) ОЗУ. Тогда когда ПДП и ВГ75 читают экранный буфер из своего ОЗУ, это нисколько не мешает процессору. И только если КР580 будет делать запись в экран при сигнале HLDA (который уже будет не из КР580, а из триггера, что взводится по запросу шины HRQ), то КР580 придётся остановить до конца цикла ПДП с помощью тактов WAIT, чтобы не потерять записываемые в экран данные. Но это нереализуемая идея, т.к требуется полная переделка платы и расход в три КП11, АП6, 6264 в качестве ОЗУ экрана и пара корпусов логики. А выигрыш - всего лишь ускорение на 25% и музыкальность звуков.

SegaBoy
16.03.2017, 17:18
Добавил сигналы ВГ75 LC0-3, теперь наглядно видно какая линия из строки выводится.
Добавил сигналы ВТ57 /MEMWR, /IORD и /IOWR. Первый выставляет адрес в ОЗУ, второй дёргает /WR ВГ75. Что делает третий не знаю, он заведён на сигнал /RAS ОЗУ. Может это и есть регенерация?

http://savepic.ru/13295694.png


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



SegaBoy, раз уж у Вас есть аппаратура, не можете ли Вы выяснить, есть ли такие линии растра в знакоместе, при которых захвата шины никогда не бывает? Это бы существенно улучшило музыкальные возможности РК86.

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

файл здесь (https://cloud.mail.ru/public/DX9M/twFTuaNLp)

NEO SPECTRUMAN
16.03.2017, 17:22
Итак, может кто-нибудь "пролить свет" на число считываний на строке, привести более правдоподобный расчёт реальной скорости РК86?
дла каждого видео режима своя эффективная скорость РК
в каждом варианте фрейма она своя
её нельзя взять и расчитать
+все задержки сразу уплывают в зависимости от исполняемого кода!!!
это тяжело просто так расчитать
тут нужно только писать нормальный эмулятор
тут все возможно

скорость рк 1.77777777777777777777 до бесконечности МГц

в строке свободной от ДМА-ления в строке порядка 115 тактов

в тех строках(пикселей) в которых происходит ДМА-ление
тактов под код в строке порядка 24-35 (27% от реальной скорости)

то есть чем выше высота символов и меньше их на экране
тем быстрее работает РК ))))))))))



чуть позже напишу тестов
обмозговав результат которых можно будет начать писать более менее полноценный эмулятор РК
и кодить более интересные вещи


я еще не переварил все выше написанное(в пред постах)...

SegaBoy
16.03.2017, 17:35
Значит так. ПДП не беспокоит процессор пока ВГ75 выводит линии с 3 по 8. Включается на последней строке 9 и продолжается с 0 по 2. Это актуально для оригинального режима. При сокращении линий в строке с 10 до 8, свободные от ПДП линии будут с 3 по 6 и запрос к ПДП начнётся с линии 7. Если менять режимы работы контроллеров то и эти цифры могут измениться.

http://savepic.ru/13275200.png


П.С. файл анализатора для самостоятельного изучения выложил в прошлом посте.

П.П.С. Поправочка. Ввёл всех в заблуждение, так как не учёл в 4-м параметре инициализации ВГ75 значение M. По умолчанию в РК (и Апогее) оно равно 1. Значит на выходах LC формируется значение на один больше.
Цифры выше надо понимать так - с 4 по 9 отображаемую строку нет ПДП и с 0 по 3 оно есть.

NEO SPECTRUMAN
16.03.2017, 18:09
А еще мне интересно
какого хрена гф24 делит частоту на такое не естественное число как 9?? о_О
и создает нам этим неимоверную кучу проблем...
почему нельзя было делить по людски на 8!!!

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

не я вкурсе что там

JJJJJJJJJ
ПП_______
__ППППП__
123456789

ВСЕ РАВНО БЕСИТ

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


Значит так. ПДП не беспокоит процессор пока ВГ75 выводит линии с 3 по 8. Включается на последней строке 9 и продолжается с 0 по 2.
это нелзя просто взять и предказать
была бы у 8080 40 тактовая команда
и проц бы пока не выполнил бы её всю
не подтверждал бы hlda
и переброска даже не начиналась бы....

всё напрямую зависит от исполняемого кода...

это вам не 6,5,4,3,2,1,0,0 на спектруме...

Vital72
16.03.2017, 18:17
А еще мне интересно
какого хрена гф24 делит частоту на такое не естественное число как 9?? о_О


У меня есть только предположение. Тактирование процессора двухфазное, и для получения правильных временнЫх интервалов требовалось такое деление. Предположение основано на картинке в какой-то книжке, где расписывалось, как нужно тактировать процессор 8080, так вот там период был поделен на 9 частей.

SegaBoy
16.03.2017, 18:22
это нелзя просто взять и предказать
была бы у 8080 40 тактовая команда
и проц бы пока не выполнил бы её всю
не подтверждал бы hlda
и переброска даже не начиналась бы....

всё напрямую зависит от исполняемого кода...

это вам не 6,5,4,3,2,1,0,0 на спектруме...
Да, предсказать точно нельзя. Пока вижу ~20 тактов процессора после окончания всей серии пакетов ПДП и началом вывода ВГ75 новой линии строки. Пакетов всего 10, даже если каждый задержится на несколько тактов, то максимум наедем на начало следующей линии и то на чуток.

NEO SPECTRUMAN
16.03.2017, 18:55
(что за полезную работу можно сделать за 7 машинных тактов?)
да в принципе абсолютно не важно
если в эти 7 тактов успеет начатся команда побольше
например 5 + 16
то и эти 7 тактов расширятся

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

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

можно будет грузить картинку на экран и видеть ее)))

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


Тактирование процессора двухфазное, и для получения правильных временнЫх интервалов требовалось такое деление.
ну я же вроде и "нарисовал" это
(только вчера этот период видел)

все равно делать такое...

ну железятники и программисты живут в разных вселенных...

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


Пакетов всего 10, даже если каждый задержится на несколько тактов, то максимум наедем на начало следующей линии и то на чуток.
напомню что чуток
1 такт процессора это 4.5 экранных пикселя
что совсем не чуть чуть...

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


Пакетов всего 10, даже если каждый задержится на несколько тактов, то максимум наедем на начало следующей линии и то на чуток.
напомню что чуток
1 такт процессора это 4.5 экранных пикселя
что совсем не чуть чуть...


Да, предсказать точно нельзя.
без видения исполняемого кода...

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

И еще как сделать доходчивое описание всего этого????? о_О
тут надо прилагать кучу осциллограмм...
все расписывать...
...у всего по 100500 режимов работы...
...кошмар...

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

А что такое ???

0 Нормальные символы
1 Недоступные (закрытые) символы
во время сброса
1-й байт параметра
в буржуйском мануале это называется spaced rows
и там есть для этого картинка
в которой после каждой строки
строка пробелов

видимо можно дать еще больше времени процу
используя этот режим (нужно вообще потестить на реале...)

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

и еще предложение
чтоб не путать строки символов и пикселей

давайте для строк пикселей будем использовать термин

Число горизонтальных линий в строке

SegaBoy
16.03.2017, 19:21
А что такое ???

во время сброса
1-й байт параметра
в буржуйском мануале это называется spaced rows
и там есть для этого картинка
в которой после каждой строки
строка пробелов

видимо можно дать еще больше времени процу
используя этот режим (нужно вообще потестить на реале...)

Тут всё просто. Если этот параметр равен 1, то экран становится через-строчным. Сначала выводятся все горизонтальные линии первой строки. Затем столько же выводится пустых (чёрных) линий. Потом начинается отображение всех горизонтальных линий второй строки, а за ней снова столько же пустых линий. И так до конца экрана. Соответственно сам экран в памяти занимает в два раза меньше места (и ПДП так же происходит в два раза реже).
Например можно сделать текстовый режим 64х16, читать в таком режиме будет намного удобнее.

Добавил под спойлер, как это выглядит на реальном Апогее.

http://savepic.ru/13262935.jpg


П.С. Похоже что последняя строка знакомест выводится без последующих spaced row. За ней сразу идёт кадровый синхроимпульс.

NEO SPECTRUMAN
16.03.2017, 19:37
не ну чтоб назвать это недоступные закрытые символы это надо быть...

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

а что в апогее по дефолту 4 байт конфига _F.. ....
записывается D3
field attribute mode 1 (не прозрачные атрибуты)


непрозрачные атрибуты это когда управляющие коды (которые будут выставлять цвет в апогее?) будут в виде пробела перед используемым символом?

и зачем это включать тогда по дефолту??????

SegaBoy
16.03.2017, 19:57
не ну чтоб назвать это недоступные закрытые символы это надо быть...

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

а что в апогее по дефолту 4 байт конфига _F.. ....
записывается D3
field attribute mode 1 (не прозрачные атрибуты)


непрозрачные атрибуты это когда управляющие коды (которые будут выставлять цвет в апогее?) будут в виде пробела перед используемым символом?

и зачем это включать тогда по дефолту??????

Если на Апогее случайно поместить управляющий код в экранную память, то он отобразиться как пробел, а за этим пробелом будет напечатан следующий символ. И всё, ничего страшного не случится. Если так сделать на РК, то он не отобразиться, а следующий символ будет напечатан вплотную к предыдущему. Но так как управляющий код это загруженный через ПДП байт, то ВГ75 попросит ещё один символ взамен неотображаемого. ВТ57 выдаст ему дополнительный символ, только это будет уже начало новой строки, так как случайно кинув атрибутом в экран мы не пересчитали размер блока для ПДП и не переинициализировали ВТ57. Выглядит на РК это как бегущий экран - чем больше накидать управляющих символов, тем сильнее он бежит.

Проще говоря, если этот бит установлен, то размер блока ПДП равен размеру экрана (78*30 байт по умолчанию). И не важно что в этом экране, нули, символы или управляющие коды. Если этот бит опущен, то размер блока ПДП надо всегда пересчитывать. Он будет равен размеру экрана, плюс количество атрибутов в этом экране. Если их расставить заранее и все посчитать, а потом не трогать (или трогать аккуратно) то экран не разрушится. Если их количество менять по ходу программы, то надо всегда их пересчитывать и инициализировать ПДП или экран убежит.

Pyk
16.03.2017, 19:58
NEO SPECTRUMAN, для простоты - чтобы не приходилось перепрограммировать ПДП при каждом добавлении управляющего кода.
Меняем пробелы между словами, например, на управляющие коды - и слово уже выделено другим цветом, и не нужно думать о программировании ВГ75 и ВТ57...

Error404
16.03.2017, 21:31
NEO SPECTRUMAN, для простоты - чтобы не приходилось перепрограммировать ПДП при каждом добавлении управляющего кода.
Меняем пробелы между словами, например, на управляющие коды - и слово уже выделено другим цветом, и не нужно думать о программировании ВГ75 и ВТ57...

А если надо выделить букву не с начала слова? Пример распространенный (управление в меню по ключевым кнопкам).
Вообще интересно, ну вот когда вы разберетесь с времянками, что дальше? Что за сакральное знание, времянки? Какие-то нештатные вещи с ВГ75 использовать?

barsik
16.03.2017, 21:40
Если на РК, где режим невидимых атрибутов, атрибут поместить в экранную область, то он не отобразится, а следующий символ будет напечатан вплотную к предыдущему. Но так как управляющий код это загруженный через ПДП байт, то ВГ75 попросит ещё один символ взамен неотображаемого. ВТ57 выдаст ему дополнительный символ, только это будет уже начало новой строки, т.к вставив в строку атрибут, мы не пересчитали размер блока для ПДП и не переинициализировали ВТ57. Выглядит на РК это как бегущий экран - чем больше накидать управляющих символов, тем сильнее он бежит.

Странно. Я использовал только RVV, и т.к это было почти 30 лет назад, то подробностей не помню. Но о необходимости перепрограммировать ПДП и сдвиге, и соответственно, сложности расчёта начал всех последующих строк, слышу первый раз. Зачем тогда нужен упр.код "конец строки"?


... вставив в строку атрибут, мы не пересчитали размер блока для ПДП...

Не понял, что за размер блока для ПДП. Если речь о размере ПДП-посылки, то вроде 8 - это уже и так максимум. И непонятно, что дало бы увеличение размера ПДП-посылки, если бы это даже было возможно.

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

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

Атрибуты отображаемые пробелом, крайне неудобны. Как сделать тогда "балку подсветки" в НОРТОНЕ? И интересно, - сам символ пробел выводится с атрибутным сигналом уже активным или он станет таким только для следующего символа.

И что происходит тогда при выключающем цвет атрибуте? В одном из двух вариантов ответа, Вы никак не получите "балку подсветки", где один пробел в цвете балки до цветного текста и один цветной пробел после. А вот с невидимыми атрибутами проблем нет. По сути режим с отображаемыми пробелом атрибутами вообще никогда не нужен.

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

Вот почему я сразу же забраковал RVV и использовал инверсию альтернативным фонтом, что к тому же ещё даёт и рамки и инверсные окна. И легко в программировании. Атрибуты удобны только для оперативного переключения фонтов, чтобы, например, в одном экране видеть КОИ-8, т.е и мелкие + заглавные латинские и мелкие + заглавные русские буквы.

При цвете, что описан в журнале "Радиолюбитель" 04.1992, задают только цвет INK (PAPER всегда черный). Поэтому я всегда считал, что надо не напрямую управлять RGB-лучами кинескопа, а через кодо-преобразователь (РЕ3, РТ5). Тогда из тех же 3-х битов получаем 8 сочетаний цветов, т.е имеем цвет как для символа, так и для фона. А 8-ми сочетаний как раз хватает для всех системных программ.

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

Судя по одному сообщению, что я где-то на сайте читал, атрибуты не могут идти подряд друг за другом. Никогда так не делал (да и цвета никогда не имел, только экспериментировал с RVV для инверсии знакомест). Соответствует ли это утверждение истине?

Вопрос: как тогда на цветных машинах устанавливают НЕОСНОВНЫЕ цвета (у которых несколько атрибутных сигналов активны). Если каждый из 3-х атрибутных выходов управляет одной цветовой пушкой телевизора, т.е R, G или B. А если надо включить белый цвет (для которого нужны все три луча), сразу после чёрного, то надо выводить подряд все 3 цветовых атрибута. Тогда если "перемежать" атрибуты пробелами, то тратятся не 6 байтов, а 12, а свободных имеется только 6. Тогда чтобы иметь белый цвет приходится строку укорачивать на 6 символов. А если на строке есть и другие фигурки в другом цвете? То строку укоротим ещё больше? Таким образом, цвета на базе атрибутов обходятся слишком большой "кровью" (программиста) и дают намного худший результат, чем цвет из МЦПГ.

В общем, тут требуется консультация знатока. Того кто разбирался с использованием цвета на РК и клонах. Это Pyk и b2m, а также владельцы цветных "Партнёров" и "Апогеев-010/Ц". Хотелось бы, чтобы они не скрывали свои знания от народа, т.к цветные игры выглядят намного лучше.

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


интересно, ну вот когда вы разберетесь с времянками, что дальше? Что за сакральное знание, времянки?

Сакральные знания якобы позволят заимствовать опыт спектрумистов для создания немерцающих игр для РК86. В качестве выходного результата этой темы ожидается разработка "движка" для РК-игр, обладающих свойством "немерцаемости" и кучей других свойств, а также получение 30-ти игр для РК86 уровня первых лет ZX-Spectrum.

SegaBoy
16.03.2017, 22:04
Всё это можно проверить на реальном компьютере РК. Если не ошибаюсь, чёрно-белый Апогей так же себя вёл (давно это было, аж в 90 году). Похоже что в цветном константу изменили.
К смещению экрана цвет не имеет никакого отношения.
Только что проверил в эмуляторе EMU - выбрал Радио-86РК, ввёл директиву Монитора М7А00. В первую строку поставил 33 и нажал ВК. На экране появилась цифра 3. В следующей строке ввёл 89 и нажал ВК - экран плавно поехал влево. Можете проверить самостоятельно.

Уплыл он, потому что размер экранной памяти, заданный в третьем и четвёртом параметре инициализации ВТ57 указан 0x0923 (2340 - 1 байт). Экран так же составляет 78*30=2340 байт. Но для ВГ75 имеет большое значение что там. И вот без этого флага, обсуждаемого выше, он не учитывает атрибут как символ. В показанном мной примере в строке стало 77 символов и один атрибут. Поэтому ВГ75 инициировал продолжение ПДП, а ВТ57 не в курсе что такое атрибуты. Он выдаёт байты когда попросят, вот и выдал. Только это уже было начало другой строки. Поэтому экран плавно едет влево и постепенно смещается вверх. Так и должно быть при одном атрибуте в экране. Киньте ещё пяток-другой и экран пулей начнёт носиться.

barsik
16.03.2017, 22:29
Атрибут надо выключать в конце строки. Нельзя оставлять атрибут активным, не будет синхронизации !

SegaBoy, вставьте атрибут включения в первую строку, через сколько-то символов вставьте атрибут выключения, а затем вставьте коды F0 или F1 в 78-й позиции строки, т.е в ячейку 77C2+4E-1= 780F. Тогда ВГ75 не будет запрашивать лишнюю посылку и ВТ57 не собъётся.

NEO SPECTRUMAN
16.03.2017, 22:41
что дальше? Что за сакральное знание, времянки?
вот на*****кодил тест для АПОГЕЯ
(я хотел написать что нить по лучше\по эффектней... но что то время затраты я не рассчитал(без нормальных средств отладки...))
в итоге получилось как всегда...

сравните то что на реале (я сильно надеюсь что там именно то что я представляю)
и то что в эмуляторе (кстате b2m эмуль приятно удивил! похоже но не совсем то)
Emu80 v.4 ничего вообще не выдает...

60134

хочу видео!!!! (не если оно такое же как в b2m то не надо)

ида извиняюсь за большой размер...

...и я чот не уверен что оно точно будет держать синхронизацию без наличия какого либо бордюра


Какие-то нештатные вещи с ВГ75 использовать?
именно да
для повышения качества картинки и не только...
и не только вг75
там много интересных микросхем...

SegaBoy
16.03.2017, 23:21
Атрибут надо выключать в конце строки. Нельзя оставлять атрибут активным, не будет синхронизации !

SegaBoy, вставьте атрибут включения в первую строку, через сколько-то символов вставьте атрибут выключения, а затем вставьте коды F0 или F1 в 78-й позиции строки, т.е в ячейку 77C2+4E-1= 780F. Тогда ВГ75 не будет запрашивать лишнюю посылку и ВТ57 не собъётся.

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

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


вот на*****кодил тест для АПОГЕЯ
(я хотел написать что нить по лучше\по эффектней... но что то время затраты я не рассчитал(без нормальных средств отладки...))
в итоге получилось как всегда...

сравните то что на реале (я сильно надеюсь что там именно то что я представляю)
и то что в эмуляторе (кстате b2m эмуль приятно удивил! похоже но не совсем то)
Emu80 v.4 ничего вообще не выдает...

60133

хочу видео!!!! (не если оно такое же как в b2m то не надо)

ида извиняюсь за большой размер...

...и я чот не уверен что оно точно будет держать синхронизацию без наличия какого либо бордюра


Оно?
видео (30 метров) (https://cloud.mail.ru/public/7Nkz/ynCk7qjYr)

Pyk
16.03.2017, 23:29
Или вот, захват с ТВ-выхода:
https://yadi.sk/i/L2MwStgE3G2ZpG
(700 Мб)

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

NEO SPECTRUMAN
16.03.2017, 23:30
ДА ИМЕННО ОНО!!!!!

barsik
16.03.2017, 23:31
Кстати, атрибут подчёркивания легко сделать работающим. Для этого нужен диод. Это даст подчёркивание текста и символ E0, позволяющий рисовать сплошную по горизонтали линию. Этот атрибут не имеет соответствующего выхода, а реализуется внешней логикой.

Чтобы не мучиться с атрибутом RVV для получения инверсии, я первоначально планировал на выходе ВГ75 поставить аппаратные ловушки на коды 0E, 0F. Эти коды в древних терминалах для этого и используются (точнее там они коммутируют фонт). Расход деталей 3 корпуса логики на ловушки и триггер, что взводится и сбрасывается, как только начинается вывод на экран этих кодов. Тогда код 0E включает инверсию и сам отображается инверсным пробелом, а код 0F выключает инверсию и отображается неинверсным пробелом.

Псевдографические символы 0E и 0F при этом теряются для отображения на экране. Но если этими кодами переключать фонт на альтернативный, то основной фонт остаётся тем же, что и сохраняет псевдографику кодов 0E и 0F.

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

NEO SPECTRUMAN
16.03.2017, 23:32
Когда думал, нужно ли поддерживать такое в эмуляторе, отмел эту идею как бредовую - не думал, что кто-то будет так извращаться
Сразу видно не спектрумист :v2_tong2:

SegaBoy
16.03.2017, 23:45
Судя по одному сообщению, что я где-то на сайте читал, атрибуты не могут идти подряд друг за другом. Никогда так не делал (да и цвета никогда не имел, только экспериментировал с RVV для инверсии знакомест). Соответствует ли это утверждение истине?

Вопрос: как тогда на цветных машинах устанавливают НЕОСНОВНЫЕ цвета (у которых несколько атрибутных сигналов активны). Если каждый из 3-х атрибутных выходов управляет одной цветовой пушкой телевизора, т.е R, G или B. А если надо включить белый цвет (для которого нужны все три луча), сразу после чёрного, то надо выводить подряд все 3 цветовых атрибута. Тогда если "перемежать" атрибуты пробелами, то тратятся не 6 байтов, а 12, а свободных имеется только 6. Тогда чтобы иметь белый цвет приходится строку укорачивать на 6 символов. А если на строке есть и другие фигурки в другом цвете? То строку укоротим ещё больше? Таким образом, цвета на базе атрибутов обходятся слишком большой "кровью" (программиста) и дают намного худший результат, чем цвет из МЦПГ.

В общем, тут требуется консультация знатока. Того кто разбирался с использованием цвета на РК и клонах. Это Pyk и b2m, а также владельцы цветных "Партнёров" и "Апогеев-010/Ц". Хотелось бы, чтобы они не скрывали свои знания от народа, т.к цветные игры выглядят намного лучше.

Вот как сделан цвет на Апогее. Код атрибута 10UIGBFR - где U подчёркивание, I инверсия, G зелёный, B синий, F мигание, R красный. Для установки любого цвета или варианта цвета с подчёркиванием, инверсией и/или миганием сразу, требуется всего один атрибут. То есть никаких нескольких цветовых атрибутов не надо для переключения на какой-то цвет.

NEO SPECTRUMAN
16.03.2017, 23:54
Подсчет контрольной суммы я уже выкладывал в составе исходника позавчера, честно говоря не думал что для кого то это может быть проблемой.


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

в конечном итоге глянул что РК-шная сумма для
defb 1,2,3
0606
и сделал
простое прогоняние всех байтов через

csum = (csum + (sj.get_byte(cnt) * 257))

и контрольная сума подходит!!!:v2_dizzy_aaaaa:
пробовал разные файлы...

по крайней мере нету знака вопроса (я не знаю как должен выглядеть tape loading error)))))
и всего 3 строки
как в других нормальных файлах



короче считаю что это был ЗАГАВАР :v2_dizzy_bomb:
не иначе!!! :v2_tong2:

3Ы на всякий случай надо добавить
csum = (csum + (sj.get_byte(cnt) * 257)) % 65536
чтоб не вступить в плавающие запятые...

barsik
17.03.2017, 00:06
Вот как сделан цвет на Апогее. Код атрибута 10UIGBFR - где U подчёркивание, I инверсия, G зелёный, B синий, F мигание, R красный.

Я сдуру считал, что каждый атрибут управляется отдельной командой. Но в реальности команда 10xx.xxxx управляет сразу всеми атрибутами. В "Апогее" получается такое кодирование GPA0 - B, GPA1 - G, HighLight - R, RVV - inverse. Ну а подчёркивание и мигание - это свойства самого ВГ75.

А интересно, совпадает ли такое кодирование с "Партнёром" и со схемой цвета из журнала "Радиолюбитель" 04.1992 ?

krt17
17.03.2017, 00:07
короче считаю что это был ЗАГАВАР
Весь нюанс в контрольной сумме что для последнего байта она считается без переполнения и плюсования в старший байт. Код контрольной суммы в мониторе простой как 3 копейки, на его основе я свою и делал.
Для себя тему рк пока отложу, подожду пока в emu80 появятся мнемоники z80 и реальный рк.

NEO SPECTRUMAN
17.03.2017, 00:12
Весь нюанс в контрольной сумме что для последнего байта она считается без переполнения и плюсования в старший байт. Код контрольной суммы в мониторе простой как 3 копейки, на его основе я свою и делал.
угу потом еще посмотрю

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


что кто-то будет так извращаться
кстате это не самое страшное извращение которое мне приходит в голову и которое я уже делал :333

но я всегда упираюсь в отсутствие такого реала
и полным отсутствием описания некоторых важных нюансов в доках

Pyk
17.03.2017, 00:13
мнемоники z80 и реальный рк
Мнемоники Z80 уже начал - скоро наверное будут, а что понимать под "реальным РК"?

SegaBoy
17.03.2017, 00:16
Может вот такой скрин поможет понять как работают цветные атрибуты в режиме отображаемых как пробел.

http://savepic.ru/13270924.png

После "2" идёт атрибут "жёлтый-инверсный". Сам атрибут выглядит как чёрный пробел, а вот цифры 3 и 4 за ним уже окрасились.
Затем идёт атрибут "фиолетовый-инверсный". Похоже на него не действует предыдущий атрибут и такой "пробел снова" чёрный. А вот цифры 5 и 6 за ним уже окрашиваются. И тд.

Добавил дамп надписи "Апогей" в углу экрана. Надпись начинается с атрибута "белый-инверсный", он отображается чёрным пробелом. Затем идёт уже белый инверсный текст. В конце стоит "настоящий" пробел (0x20). И заканчивает строку атрибут "белый-нормальный" (0х80).

krt17
17.03.2017, 00:18
а что понимать под "реальным РК"?
Эм ну железный, апогей можно купить он не дорогой, но меня клоны мало интересуют, а также всякие доработки. Если найду как из апогея БК-01Ц сделать нормальный рк будет вообще отлично.

Pyk
17.03.2017, 00:26
но я всегда упираюсь в отсутствие такого реала
и полным отсутствием описания некоторых важных нюансов в доках
К сожалению, всех недокументированных нюансов всех БИС учесть практически невозможно.
Не зря народ reverse engineering'ом занимается...

NEO SPECTRUMAN
17.03.2017, 00:29
но меня клоны мало интересуют,
Посмотри на схему
она буддто с РК срисована местами
по времянкам он 100% совместим на вид

+у него дополнительные плюшки

порты у него по другому правда...
и бипера нету...

я хочу и РК и Апогей

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


Похоже на него не действует предыдущий атрибут
а он и не будет действовать
и их ограниченное количество может быть в строке

barsik
17.03.2017, 00:29
Может вот такой скрин-шот поможет понять как работают цветные атрибуты в режиме отображаемых как пробел

Как это работает я понял еще в 1992 году, когда прочитал ж."Радиолюбитель". Только там мигание и подчёркивания нет, т.к там схема для РК86. Этот рисунок открыл мне глаза, что на такой цвет надо тратить все 4 атрибута, хотя я ранее думал, что хватит 3-х. А 4-тый атрибут можно будет задействовать на коммутацию фонта. Потому, что если RVV не тратить на инверсию цвета, то нельзя будет сделать цветным цвет фона (PAPER), только цвет символа (INK).

А не можете ли Вы сделать демонстрацию всех 8-ми цветов, а не только основных?


Похоже на него не действует предыдущий атрибут и такой "пробел снова" чёрный

Это естественно, ведь новая команда 10xx.xxxx установила новые сигналы на атрибутных выходах, т.к команда действует сразу на все атрибуты, а не только на один, как я думал.

NEO SPECTRUMAN
17.03.2017, 00:41
Если найду как из апогея БК-01Ц сделать нормальный рк будет вообще отлично.
Не надо этого делать!

ладно я понимаю какой нибудь самопал
а это серийная машина
новых их больше не будет

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


К сожалению, всех недокументированных нюансов всех БИС учесть практически невозможно.
ВНЕЗАПНО открыл для себя

Другие производители всех этих микросхем (которые могут быть под другими именами и с ходу не находиться)
тоже делают datasheet-ы
и они могут быть немного лучше чем оригинальные
в одном из них дополнительно указано что то еще
во втором указано еще что то

SegaBoy
17.03.2017, 01:03
а он и не будет действовать
и их ограниченное количество может быть в строке
"Чит", 32 цветовых атрибута в одной строке = ))

http://savepic.ru/13299585.png

barsik
17.03.2017, 01:24
Смотрите 32 цветовых атрибута в одной строке

Признайтесь, что это жульничество.

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

Но можно применить хитрость:

Включаем режим с неотображамыми атрибутами. Распределим экран так, чтобы на строку отводилось не 78, а например, 120 байтов. Но в позиции от 78-й до 119-й записать атрибуты, например, чередование вкл. и выкл. инверсиию, а в 120-й позиции любой байт или лучше атрибут конец строки. Причем всегда делать так, чтобы число отображаемых символов в строке (в позициях 1-120) было менее 78. Тогда вся строка будет считываться, её размер будет большИм, а сдвижки адреса начала следующей строки не будет. Только начала конкретной строки N будет вычисляться так: SCREEN + N*120. От этого скорость здорово упадёт (больше пачек ПДП будет считываться), но будут любые комбинации цветов по стране.

Если не поняли суть, тут идея в том, чтобы заставить ВГ75 проматывать резервированные числом более 78 дополнительные ячейки на строку, отчего шаг по строкам всегда остаётся постоянным.

По картинке вычислил цвета: красный, зелёный, синий, желтый, магента, голубой, белый, чёрный. А если бы добавили 155РЕ3, то сочетание цветов было бы произвольным и на порядок умнее. А так в каждом знакоместе один цвет - всегда чёрный.

SegaBoy
17.03.2017, 02:17
Признайтесь, что это жульничество.

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

Ну так я и написал что это чит ))

Я не нарушал порядок экрана и не сдвигал строки. В этой строке ровно 78 знакомест. 8+6 неотображаемых слева и справа. А в отображаемой зоне 32 пары атрибут+символ.
Вот содержимое этой строки:


data:
db 30h, 9ch, 31h, 95h, 32h, 99h, 33h, 94h, 34h, 98h, 36h, 91h, 36h, 90h, 37h, 8ch, 38h, 85h, 39h, 89h, 40h, 84h, 1eh, 88h, 09h, 81h, 41h, 80h, 30h, 9ch, 31h, 95h, 32h, 99h, 33h, 94h, 34h, 98h, 36h, 91h, 36h, 90h, 37h, 8ch, 38h, 85h, 39h, 89h, 40h, 84h, 1eh, 88h, 09h, 81h, 41h, 80h, 30h, 9ch, 31h, 95h, 32h, 99h, 33h, 80h


А по поводу жульничества. Тема же так и называется - "секреты и трюки" - а без этих самых трюков ничего путного не выйдет. Демомейкеры в основном трюками и занимаются. Ну и некоторым игроделам может пригодиться.

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

Добавлю скрин, на котором видно что это стандартный режим Монитора. Сначала я вывожу дамп ПЗУ, а потом копирую в экран строку символов и атрибутов.

http://savepic.ru/13291397.png

Как видно, экран остался таким же. Никакие строки короче не стали.

krt17
17.03.2017, 02:21
Распределим экран так, чтобы на строку отводилось не 78, а например, 120 байтов.
Я так понимаю это апофеоз бреда в этом топике.
Цвет конечно забавный но в 86РК его нет же, значит он не нужен.

Vital72
17.03.2017, 02:34
А у кого-нить есть идеи, как сделать, чтобы и цвет был (8 штук) и знакогенератор атрибутом переключался? Не портом или еще каким сигналом (INTE как в Апогее), а сигналом от ВГ75, чтобы была возможность выводить символы двух знакогенераторов одновременно.

SegaBoy
17.03.2017, 02:43
Цвет конечно забавный но в 86РК его нет же, значит он не нужен.
Согласен, цвет был показан только как пример отбражения/неотображения атрибутов ВГ75, для наглядности.
Я за скролы, волны, сдвиги и другие трюки в демках и играх, особенно в динамичных.
Но и новые интересные игры старой школы тоже было бы неплохо увидеть..

Vladimir_S
17.03.2017, 07:49
Цвет конечно забавный но в 86РК его нет же, значит он не нужен.
У меня в РКшке цвет именно такой. А нужен он или нет - это решать каждому в отдельности.

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

И кстати, возвращаясь к первому посту этой темы - если на экран поместить атрибут 8F, а потом на это место поставить курсор, то курсор становится невидимым.

barsik
17.03.2017, 09:07
Как видно, экран остался таким же. Никакие строки короче не стали
Да, это было уже понятно из кодов и первой картинки. Но ведь Вы использовали бесполезный режим с отображением атрибутов пробелами. Вот Вы сделайте то же самое, но закрашивайте каждый символ, а не с интервалом в пробел. Из картинок понял, что цветовой атрибут в режиме отображаемых атрибутов начинает действовать не с текущего знакоместа, а со следующего. Режим с отображаемыми атрибутами бесполезен.

Неудобно, что в "Апогее" экран не с E6D0, отчего неудобно адаптировать экранно-лезущие программы с/на РК86, где экран 76D0.


А у кого-нибудь есть идеи, как сделать, чтобы и цвет был (8 штук) и знакогенератор атрибутом переключался? Не портом или еще каким сигналом (INTE как в Апогее), а сигналом от ВГ75, чтобы была возможность выводить символы двух знакогенераторов одновременно.

Вообще-то цветов, точнее сочетаний битов программно управляемых атрибутных сигналов на выходах ВГ75 - 16, не 8. Есть 8 цветов для фона плюс 8 цветов для символа. Но не одновременно в одном знакоместе. То есть, в одном знакоместе можем задать ИЛИ цвет для фона ИЛИ цвет для символа. Второй цвет знакоместа всегда чёрный. Сигнал ReVerseVideo как бы переводит окраску цвета в окраску фона.

Так что удовлетворить Вашему условию в 8 цветов совсем просто - тратим бит RVV на управление фонтом, отчего цветов по-прежнему остаётся 8. Но увы, тогда раскрашивать можно будет только цвет символов - имеем только цветные буквы, всегда на чёрном фоне.

Самый грамотный вариант, - это использовать атрибутные выходы не для прямого управления электронными пушками кинескопа R, G и B. а через кодо-преобразователь. Сейчас имеем 16 цветов, точнее 8 цветов для символа ИЛИ 8 цветов для фона (что определяет сигнал RVV). Это тратит 4 бита, а даёт всего 8 цветов и к тому с таким ограничениями - красим или INK или PAPER.

Если использовать всего 3 бита, но подавать их через кодо-преобразователь, то цветов также останется 8 и к тому же цвета будут одновременно и для INK и для PAPER. Причём будут иметься самые ходовые цвета, а не только производные из основных цветов с весами 1. На 8-ми битовом кодо-преобразователе 3 в 8 получаются 3 бита на веса R, 3 бита на веса G и всего 2 бита на веса B. Но доступных цветов становится 256. А бит RVV освобождается для коммутации фонтов.

Мне нравится этот вариант (хотя цвет из фонта даёт больше цветов, в любом сочетании и окрашивает каждую линию растра). Расход деталей - одно ПЗУ кодо-преобразователя. Совместимость сохраняется (2 режима, переключаемые программно битом из ППА D14). Это даст в игре 256 символов, что достаточно для 8-ми спрайтов 2*2, по 4-8 фаз на каждый спрайт и немного графики для пейзажа.

Кстати, в качестве кодо-преобразователя соверешенно необязательно ставить трудно-прошиваемые РЕ3 или РТ5. Оказывается в этой роли прекрасно работают даже обычные УФ-ПЗУ 573РФ5.

Ещё одну идею на эту тему я уже высказал - затратить коды общепринятых как раз для этого символов 0E и 0F на переключение фонта. Тогда на выходе ВГ75 эти коды отлавливаются и подаются на R и S входы триггера. Расход деталей 4 корпуса.



Распределим экран так, чтобы на строку отводилось не 78, а например, 120 байтов.
Я так понимаю, - это апофеоз бреда в этом топике

Опять хамите. Слово бред, что самое любимое? Если идея программного удлинения области в 78 байт для символов строки не дошла, то это не повод ругаться.

А возразить, Вы должны были следующее. Что шаг 120 символов на строку не пойдет, потому что в пачке ПДП - 8 байтов. Поэтому если в 78-ми байтах с начала строки не набирается 78 отображаемых символов, то ВГ75 заказывает ещё одну посылку от ВГ75. В которой тоже 8 байтов. Поэтому если мы выберем строчный шаг в 78+8=86, то получим в строках больше места для вставки атрибутов и шаг по строкам будет неизменным, так что начало каждой строки N в ОЗУ будет чётко соответствовать формуле SCREEN +N*86.

Хотя, при желании, можно извращаться и со строками переменной длины. Тогда составляем таблицу адресов начал строк. И при каждой записи в строку двух атрибутов (вкл.цвет,выкл цвет), будем корректировать не только экранный буфер, но и адреса начал строк. Причём придется учитывать, что первая вставка 2-х атрибутов удлиняет строку на 8, три последующие вставки не удлиняют строку, а 4-я вставка двух атрибутов снова удлиняет строку еще на 8 байтов. В общем, это "полный электротрах" для сумасшедшего программиста. Естественно, таким извратом никто заниматься не будет.


Цвет конечно забавный но в 86РК его нет же, значит он не нужен

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

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



Практика показала, что введение в схему "Радио-86РК" цветообразующей схемы резко расширяет эстетическое восприятие "эркашных" картинок.

krt17
17.03.2017, 10:21
Хорошо, по вашим простыням у меня пару вопросов. Вы читали даташит на i8275 и все там поняли? Вы смотрели скрины с логического анализатора которые выкладывали в этой теме (достаточно первого, там уже все ясно)? Могу лишь сказать, пересмотрите их, возможно после этого ваши потоки букв будут иметь смысл.

jerri
17.03.2017, 14:10
Сакральные знания якобы позволят заимствовать опыт спектрумистов для создания немерцающих игр для РК86. В качестве выходного результата этой темы ожидается разработка "движка" для РК-игр, обладающих свойсвом "немерцаемости" и кучей других свойств, а также получение 30-ти игр для РК86 уровня первых лет ZX-Spectrum.

С мерцанием ваших РКшных игр мы разобрались еще на первом десятке страниц. Сейчас разговор идет о том чтобы настроить ваш видеопроц так чтобы он не мешал.

Vital72
17.03.2017, 14:30
Если использовать всего 3 бита, но подавать их через кодо-преобразователь, то цветов также останется 8 и к тому же цвета будут одновременно и для INK и для PAPER. Причём будут иметься самые ходовые цвета, а не только производные из основных цветов с весами 1. На 8-ми битовом кодо-преобразователе 3 в 8 получаются 3 бита на веса R, 3 бита на веса G и всего 2 бита на веса B. Но доступных цветов становится 256. А бит RVV освобождается для коммутации фонтов.

Хоть убей -- не понимаю как работает ваш кодо-преобразователь. Для 16 комбинаций (8 foreground + 8 background) нужно 4 линии. Как вы умудряетесь тремя линиями обойтись? Что за магия такая? Схему приведите.

b2m
17.03.2017, 15:43
Как вы умудряетесь тремя линиями обойтись?
Четвёртая линия - это собственно видеовыход: есть точка или нет.

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

А вообще, лучше палитру в ОЗУ сделать. Тогда вообще 8 любых цветов можно сделать как для фона, так и для символов.

Vital72
17.03.2017, 15:54
А вообще, лучше палитру в ОЗУ сделать.

Я уже писал, что разрабатываю 8-битный комп, там я уже заложил в схему палитру на ОЗУ

barsik
17.03.2017, 15:58
Не понимаю как работает ваш кодо-преобразователь. Для 16 комбинаций (8 foreground + 8 background) нужно 4 линии. Как вы умудряетесь тремя линиями обойтись? Что за магия такая? Схему приведите.

Вот схема видеовыхода совместимая со старым цветом. В режиме старого цвета выполняется прямое управление лучами кинескопа, а сигнал RVV выбирает - в знакоместе задаётся цвет фона или цвет символа. В режиме нового цвета, сохранены 8 цветов, причём цвет имеет одновременно и символ и фон, а бит RVV освобождён для использования в качестве оперативного коммутатора фонтов, что позволяет одновременно в одном экране иметь 256 символов. Таким образом, расходом в 2 корпуса достигается не только выигрыш в качестве цвета, но и в количестве доступных символов.

Сигнал "Video" с выхода ИР13 управляет тем, будет выдан на выход код цвета символа или код фона. Сочетания цветов любые, т.е и цвет фона и цвет символа могут быть любыми из 256 цветов. Но всего сочетаний цветов - только 8. Код этого сочетания как-раз и поступает с выходов ВГ75. Таким образом эти 3 бита не цвет, а код, задающий какими чернилами и на каком фоне рисуется символ. Например, код 0 можно сделать желтым на синем (или зеленым на чёрном) и это будет код монохрома.

В режиме совместимости сигнал "Mode" равен 1, отчего сигнал RVV проходит и схема работает как и ранее. Одновременно сигналом "Mode" формируется ноль на входе ПЗУ фонта, отчего включён базовый фонт, что и требуется для антикварных программ. Естественно, в режиме совместимости сигналы PB0...PB4 с D14, также задающие номер фонта (если фонтов больше 2-х), должны быть нулями, чтобы был включён базовый фонт. ПЗУ РЕ3 прошито так, что в режиме совместимости со старым цветом на всех весах Rx, Gx, Bx полностью повторяются сигналы на 3-х входах РЕ3 (как будто бы РЕ3 вообще нет), что и обеспечивает совместимость.

В режиме нового цвета сигналом "Mode"=0 запрещается прохождение RVV на схему инверсии на ЛП5, - вместо RVV туда подаётся 0, отчего схема инверсии не действует. В режиме нового цвета инверсный сигнал "Мode" разрешает поступление на вход А10 ПЗУ знакогенератора сигнала от атрибутного выхода RVV ВГ75. Тем самым в этом режиме бит RVV служит для оперативный смены фонта. Благодаря использованию РЕ3, в новом режиме число цветов не изменилось, причём цвета стали более удобными для программ.

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

Путём расхода ещё двух КП11 можно получить в данной схеме 2 палитры. Тогда коммутация выходов RGB делается не за счёт совместимой прошивки РЕ3, отчего сигнал "Mode" не подаётся на РЕ3 и её один вход освобождается. КП11-е коммутируют 8 выходов РЕ3. В режиме совместимости на выходы КП11 проходят сигналы GPA0, GPA1, HGLT (как в старой схеме цвета). А в режиме нового цвета на выходы проходят сигналы с РЕ3. На освободившийся адресный вход РЕ3 подаём бит выбора палитры PA0 ППА D14.

Однако, если для кодо-преобразования применять не РЕ3, а РТ5, то и без двух КП11-х получается 16 палитр выбираемых PA0...PA3 ППА D14.


А вообще, лучше палитру в ОЗУ сделать. Тогда вообще 8 любых цветов можно сделать как для фона, так и для символов.

Это и есть палитры, точнее только одна палитра, жёстко заданная прошивкой. Палитры это перекодирование логических цветов в физические значения в виде яркостей RGB. А чтобы получить полноценные палитры, т.е переключаемый набор цветов, то достаточно заменить РЕ3 на РТ5 (можно даже на 573РФ5) и подать с неиспользуемых разрядов ППА D14 на лишние адреса РТ5 биты управляющие выбором текушей палитры.

Vital72
17.03.2017, 17:29
идея мне нравится, надо это дело обмозговать

NEO SPECTRUMAN
17.03.2017, 17:38
Насколько я понимаю избавится от курсора при высоте символа 8 пикселей или меньше можно только отправив его за экран?
ну вот еще один показатель кривости эмуляторов...
и писание под кривой эмулятор...

смотрим тест что я выкладывал
и сравниваем
2 видео
и эмулятор b2m

умя курсор или на 9 или на 16 строке

на 2-х реалах его нет...
а в b2m он есть...

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


"Чит", 32 цветовых атрибута в одной строке = ))
а теперь вопрос

оно работает на реале?
или только в эмуляторе?

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


А у кого-нить есть идеи, как сделать, чтобы и цвет был (8 штук) и знакогенератор атрибутом переключался?
А что в Микроше Партнере???
у него банки псевдографики
будто у него переключение шрифтов выведено на "атрибутные выходы" вг75

Error404
17.03.2017, 17:46
А у кого-нить есть идеи, как сделать, чтобы и цвет был (8 штук) и знакогенератор атрибутом переключался? Не портом или еще каким сигналом (INTE как в Апогее), а сигналом от ВГ75, чтобы была возможность выводить символы двух знакогенераторов одновременно.

Такое (КОИ8 на 256 символов знакогенератора и 8 цветов сугубо средствами одной ВГ75) для делал freddy вот в этой теме (http://zx-pk.ru/threads/26455-chto-maksimum-mozhno-vyzhat-iz-kr580vg75-intel-8275-obsuzhdenie.html) (это не совсем РК, но думаю взлетело бы). Но вряд ли вы с ним договоритесь - по части договариваться там у автора большие проблемы.

krt17
17.03.2017, 18:02
умя курсор или на 9 или на 16 строке
Вообще не показатель кривости эмуляторов, а все лишь показатель кривости кода.
По вашему это нормальный видео режим?
http://i.imgur.com/HE81kfB.png

NEO SPECTRUMAN
17.03.2017, 18:09
а вот кусок Партнера с этой фичей
http://zx-pk.ru/attachment.php?attachmentid=60148&d=1489763598
ну вот в место цвета вполне можно и улучшенную графику


По вашему это нормальный видео режим?
было бы нормальное описание
я видимо поставил не то смещение символов (вроде бы выбирал то что начинается с адреса 0)
я задолбался пока его весь вписал

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

а свою задачу этот режим выполнил

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


Вообще не показатель кривости эмуляторов

ДА ПРЯМ
ТЫ ЕЩЕ СКАЖИ ЭМУЛЯЦИЯ ИДЕАЛЬНАЯ

И ДА НА 2-Х КОМПАХ КУРСОРА НЕТ
ПОЧЕМУ ЖЕ ОН ТОГДА ЭМИЛИРУЕТСЯ????

У КОГО КРИВОСТЬ?

3Ы: кстате скажите мне русским языком от куда в этом режиме читается первая линия????

krt17
17.03.2017, 18:25
ТЫ ЕЩЕ СКАЖИ ЭМУЛЯЦИЯ ИДЕАЛЬНАЯ
Нет не идеальная, но именно в этом случае проблемы нет. В чем то b2m лучше в чем то emu80, все равно реал нужен, эмуляцию срыва синхры все равно делать слишком геморно.

NEO SPECTRUMAN
17.03.2017, 18:27
кстате что это за тест такой?

как он в эму80
вызывается?

krt17
17.03.2017, 18:28
И ДА НА 2-Х КОМПАХ КУРСОРА НЕТ
Так его и в эмуле нет.

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


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

NEO SPECTRUMAN
17.03.2017, 18:30
Так его и в эмуле нет.
bashkiria2m ????
ссылку на эмуль
я специально скачивал проверял перед тем как написать

krt17
17.03.2017, 18:32
b2m?
ссылка на эмуль
Ну вообщето на скрине есть название.

NEO SPECTRUMAN
17.03.2017, 18:40
Ну вообщето на скрине есть название.

Так его и в эмуле нет.
да в emu80 и на экране все статично...
и движения никакого нет

да и речь не о нем...

SegaBoy
17.03.2017, 19:10
а теперь вопрос

оно работает на реале?
или только в эмуляторе?

На реале работает.

http://savepic.ru/13240317m.jpg (http://savepic.ru/13240317.htm)

NEO SPECTRUMAN
17.03.2017, 20:47
Так значет это просто щикарно!

krt17
17.03.2017, 20:47
Скучно стало без ldir'a ?

_ldir
dec bc
inc c
.l1
ld a, (hl)
ld (de), a
inc hl
inc de
dec c
jp nz , .l1
ld a, b
or a
ret z
dec b
jp .l1
Или профи i8080 как то еще более лучше делают (только не надо jp на ret менять) ?

NEO SPECTRUMAN
17.03.2017, 20:51
как то еще более лучше делают
так такты подпишите

Vital72
17.03.2017, 20:56
как то еще более лучше делают

зачем в цикле проверку делаете? делайте выход по окончании цикла



dec c
jp nz , .l1
dec b
jp nz , .l1
ret

krt17
17.03.2017, 21:02
так такты подпишите
А что у команд бывают разные такты? Тут насколько я знаю вся разница с z80 что inc RP и inc R занимают по 5 тактов а не 6 и 4, ну по крайней мере так было в таблице что я нашел. Может есть еще какие хитрости в отличие от z80?

NEO SPECTRUMAN
17.03.2017, 21:03
кстате для тех кто не понимает мнемоники 8080 как мну
60149



8080 z80
MOV A,A 5 4 LD A,A
MOV A,B 5 4 LD A,B
MOV A,C 5 4 LD A,C
MOV A,D 5 4 LD A,D
MOV A,E 5 4 LD A,E
MOV A,H 5 4 LD A,H
MOV A,L 5 4 LD A,L
MOV A,M 7 7 LD A,(HL)
LDAX B 7 7 LD A,(BC)
LDAX D 7 7 LD A,(DE)
LDA word 13 13 LD A,(word)

MOV B,A 5 4 LD B,A
MOV B,B 5 4 LD B,B
MOV B,C 5 4 LD B,C
MOV B,D 5 4 LD B,D
MOV B,E 5 4 LD B,E
MOV B,H 5 4 LD B,H
MOV B,L 5 4 LD B,L
MOV B,M 7 7 LD B,(HL)

MOV C,A 5 4 LD C,A
MOV C,B 5 4 LD C,B
MOV C,C 5 4 LD C,C
MOV C,D 5 4 LD C,D
MOV C,E 5 4 LD C,E
MOV C,H 5 4 LD C,H
MOV C,L 5 4 LD C,L
MOV C,M 7 7 LD C,(HL)

MOV D,A 5 4 LD D,A
MOV D,B 5 4 LD D,B
MOV D,C 5 4 LD D,C
MOV D,D 5 4 LD D,D
MOV D,E 5 4 LD D,E
MOV D,H 5 4 LD D,H
MOV D,L 5 4 LD D,L
MOV D,M 7 7 LD D,(HL)

MOV E,A 5 4 LD E,A
MOV E,B 5 4 LD E,B
MOV E,C 5 4 LD E,C
MOV E,D 5 4 LD E,D
MOV E,E 5 4 LD E,E
MOV E,H 5 4 LD E,H
MOV E,L 5 4 LD E,L
MOV E,M 7 7 LD E,(HL)

MOV H,A 5 4 LD H,A
MOV H,B 5 4 LD H,B
MOV H,C 5 4 LD H,C
MOV H,D 5 4 LD H,D
MOV H,E 5 4 LD H,E
MOV H,H 5 4 LD H,H
MOV H,L 5 4 LD H,L
MOV H,M 7 7 LD H,(HL)

MOV L,A 5 4 LD L,A
MOV L,B 5 4 LD L,B
MOV L,C 5 4 LD L,C
MOV L,D 5 4 LD L,D
MOV L,E 5 4 LD L,E
MOV L,H 5 4 LD L,H
MOV L,L 5 4 LD L,L
MOV L,M 7 7 LD L,(HL)

MOV M,A 7 7 LD (HL),A
MOV M,B 7 7 LD (HL),B
MOV M,C 7 7 LD (HL),C
MOV M,D 7 7 LD (HL),D
MOV M,E 7 7 LD (HL),E
MOV M,H 7 7 LD (HL),H
MOV M,L 7 7 LD (HL),L



MVI A,byte 7 7 LD A,byte
MVI B,byte 7 7 LD B,byte
MVI C,byte 7 7 LD C,byte
MVI D,byte 7 7 LD D,byte
MVI E,byte 7 7 LD E,byte
MVI H,byte 7 7 LD H,byte
MVI L,byte 7 7 LD L,byte

MVI M,byte 10 10 LD (HL),byte


STAX B 7 7 LD (BC),A
STAX D 7 7 LD (DE),A

STA word 13 13 LD (word),A

LXI B,word 10 10 LD BC,word
LXI D,word 10 10 LD DE,word
LXI H,word 10 10 LD HL,word
LXI SP,word 10 10 LD SP,word


LHLD word 16 16 LD HL,(word)


SHLD word 16 16 LD (word),HL


SPHL 5 6 LD SP,HL

XCHG 4 4 EX DE,HL
XTHL 18 19 EX (SP),HL


ADD A 4 4 ADD A,A
ADD B 4 4 ADD A,B
ADD C 4 4 ADD A,C
ADD D 4 4 ADD A,D
ADD E 4 4 ADD A,E
ADD H 4 4 ADD A,H
ADD L 4 4 ADD A,L
ADD M 7 7 ADD A,(HL)

ADI byte 7 7 ADD A,byte

ADC A 4 4 ADC A,A
ADC B 4 4 ADC A,B
ADC C 4 4 ADC A,C
ADC D 4 4 ADC A,D
ADC E 4 4 ADC A,E
ADC H 4 4 ADC A,H
ADC L 4 4 ADC A,L
ADC M 7 7 ADC A,(HL)

ACI byte 7 7 ADC A,byte

SUB A 4 4 SUB A
SUB B 4 4 SUB B
SUB C 4 4 SUB C
SUB D 4 4 SUB D
SUB E 4 4 SUB E
SUB H 4 4 SUB H
SUB L 4 4 SUB L
SUB M 7 7 SUB (HL)

SUI byte 7 7 SUB byte

SBB A 4 4 SBC A
SBB B 4 4 SBC B
SBB C 4 4 SBC C
SBB D 4 4 SBC D
SBB E 4 4 SBC E
SBB H 4 4 SBC H
SBB L 4 4 SBC L
SBB M 7 7 SBC (HL)

SBI byte 7 7 SBC byte

DAD B 10 11 ADD HL,BC
DAD D 10 11 ADD HL,DE
DAD H 10 11 ADD HL,HL
DAD SP 10 11 ADD HL,SP

DI 4 4 DI
EI 4 4 EI

NOP 4 4 NOP
HLT 7 4 HLT

INR A 5 4 INC A
INR B 5 4 INC B
INR C 5 4 INC C
INR D 5 4 INC D
INR E 5 4 INC E
INR H 5 4 INC H
INR L 5 4 INC L
INR M 10 11 INC (HL)

DCR A 5 4 DEC A
DCR B 5 4 DEC B
DCR C 5 4 DEC C
DCR D 5 4 DEC D
DCR E 5 4 DEC E
DCR H 5 4 DEC H
DCR L 5 4 DEC L
DCR M 10 11 DEC (HL)

INX B 5 6 INC BC
INX D 5 6 INC DE
INX H 5 6 INC HL
INX SP 5 6 INC SP

DCX B 5 6 DEC BC
DCX D 5 6 DEC DE
DCX H 5 6 DEC HL
DCX SP 5 6 DEC SP

DAA 4 4 DAA
CMA 4 4 CPL
STC 4 4 SCF
CMC 4 4 CCF

RLC 4 4 RLCA
RRC 4 4 RRCA
RAL 4 4 RLA
RAR 4 4 RRA

ANA A 4 4 AND A
ANA B 4 4 AND B
ANA C 4 4 AND C
ANA D 4 4 AND D
ANA E 4 4 AND E
ANA H 4 4 AND H
ANA L 4 4 AND L
ANA M 7 7 AND (HL)

ANI byte 7 7 AND byte

XRA A 4 4 XOR A
XRA B 4 4 XOR B
XRA C 4 4 XOR C
XRA D 4 4 XOR D
XRA E 4 4 XOR E
XRA H 4 4 XOR H
XRA L 4 4 XOR L
XRA M 7 7 XOR (HL)

XRI byte 7 7 XOR byte

ORA A 4 4 OR A
ORA B 4 4 OR B
ORA C 4 4 OR C
ORA D 4 4 OR D
ORA E 4 4 OR E
ORA H 4 4 OR H
ORA L 4 4 OR L
ORA M 7 7 OR (HL)

ORI byte 7 7 OR byte

CMP A 4 4 CP A
CMP B 4 4 CP B
CMP C 4 4 CP C
CMP D 4 4 CP D
CMP E 4 4 CP E
CMP H 4 4 CP H
CMP L 4 4 CP L
CMP M 7 7 CP (HL)

CPI byte 7 7 CP byte

JMP address 10 10 JP address
JNZ address 10 10 JP NZ,address
JZ address 10 10 JP Z,address
JNC address 10 10 JP NC,address

JC address 10 10 JP C,address
JPO address 10 10 JP PO,address
JPE address 10 10 JP PE,address
JP address 10 10 JP P,address
JM address 10 10 JP M,address
PCHL 5 4 JP (HL)

CALL address 17 17 CALL address

CNZ address 11/17 10/17 CALL NZ,address
CZ address 11/17 10/17 CALL Z,address
CNC address 11/17 10/17 CALL NC,address
CC address 11/17 10/17 CALL C,address
CPO address 11/17 10/17 CALL PO,address
CPE address 11/17 10/17 CALL PE,address
CP address 11/17 10/17 CALL P,address
CM address 11/17 10/17 CALL M,address


RET 10 10 RET

RNZ 5/11 5/11 RET NZ
RZ 5/11 5/11 RET Z
RNC 5/11 5/11 RET NC
RC 5/11 5/11 RET C
RPO 5/11 5/11 RET PO
RPE 5/11 5/11 RET PE
RP 5/11 5/11 RET P
RM 5/11 5/11 RET M

RST 0 11 11 RST 0
RST 1 11 11 RST 8
RST 2 11 11 RST 10H
RST 3 11 11 RST 18H
RST 4 11 11 RST 20H
RST 5 11 11 RST 28H
RST 6 11 11 RST 30H
RST 7 11 11 RST 38H

PUSH B 11 11 PUSH BC

PUSH D 11 11 PUSH DE

PUSH H 11 11 PUSH HL

PUSH PSW 11 11 PUSH AF

POP B 10 10 POP BC

POP D 10 10 POP DE

POP H 10 10 POP HL

POP PSW 10 10 POP AF


IN byte 10 11 IN A,(byte)

OUT byte 10 11 OUT (byte),A

krt17
17.03.2017, 21:05
зачем в цикле проверку делаете? делайте выход по окончании цикла



dec c
jp nz , .l1
dec b
jp nz , .l1
ret


Да хорошо, можно в начале inc b сделать. Принято.

NEO SPECTRUMAN
17.03.2017, 21:06
по крайней мере этим пользуюсь я

krt17
17.03.2017, 21:15
А нет, так не пойдет. Не принято

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

Сравните bc #101 и #100, будет понятно почему не покатит.

NEO SPECTRUMAN
17.03.2017, 21:20
накинуть единичку при старте...

и мы же не эмулируем ldir

он и на флаги не особо влияет в оригинале...

просто задавать уже с учетом

krt17
17.03.2017, 21:53
Не совсем.
Можно старт сделать

dec bc
inc c
inc b

Тогда вроде прокатывает. -1 байт

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

Так по тактам не все я запомнил, получается

ld r,r 5(4)
dec/inc r 5(4)
dec/inc (hl) 10(11)
dec/inc rp 5(6)
ld sp,hl 5(6)
jp (hl) 5(4)
ex (sp),hl 18(19)
add hl,rp 10(11)
call c,addr 11/17(10/17)
in a,(port) 10(11)
out (port),a 10(11)
Табличка пригодилась, спасибо, мне так удобнее запомнить, может еще кому.

NEO SPECTRUMAN
17.03.2017, 21:54
на всякий лучше ее еще кому то сверить
тк я ее делал из другой таблички...

Pyk
17.03.2017, 22:14
А что в Микроше Партнере???
у него банки псевдографики
будто у него переключение шрифтов выведено на "атрибутные выходы" вг75
В Партнере 2 шт. ВГ75 - один в центральном модуле, а второй - в дополнительном модуле МЦПГ.
В основном атрибутные выходы переключают 8 наборов шрифтов. А вот цветная псевдографика - в МЦПГ.

barsik
18.03.2017, 12:48
Не понимаю как работает ваш кодо-преобразователь. Для 16 комбинаций (8 foreground + 8 background) нужно 4 линии. Как вы умудряетесь тремя линиями обойтись? Что за магия такая? Схему приведите.

Вот схема видеовыхода совместимая со старым цветом. В режиме старого цвета выполняется прямое управление лучами кинескопа, а сигнал RVV выбирает - в знакоместе задаётся цвет фона или цвет символа. В режиме нового цвета, сохранены 8 цветов, причём цвет имеет одновременно и символ и фон, а бит RVV освобождён для использования в качестве оперативного коммутатора фонтов, что позволяет одновременно в одном экране иметь 256 символов. Таким образом, расходом в 2 корпуса достигается не только выигрыш в качестве цвета, но и в количестве доступных символов.

Сигнал "Video" с выхода ИР13 управляет тем, будет выдан на выход код цвета символа или код фона. Сочетания цветов любые, т.е и цвет фона и цвет символа могут быть любыми из 256 цветов. Но всего сочетаний цветов - только 8. Код этого сочетания как-раз и поступает с выходов ВГ75. Таким образом эти 3 бита не цвет, а код, задающий какими чернилами и на каком фоне рисуется символ.


В режиме совместимости сигнал "Mode" равен 1, отчего сигнал RVV проходит и схема работает как и ранее. Одновременно сигналом "Mode" формируется ноль на входе ПЗУ фонта, отчего включён базовый фонт, что и требуется для антикварных программ. Естественно, в режиме совместимости сигналы PB0...PB4 с D14, также задающие номер фонта (если фонтов больше 2-х), должны быть нулями, чтобы был включён базовый фонт. ПЗУ РЕ3 прошито так, что в режиме совместимости со старым цветом на всех весах Rx, Gx, Bx полностью повторяются сигналы на 3-х входах РЕ3 (как будто бы РЕ3 вообще нет), что и обеспечивает совместимость.

В режиме нового цвета сигналом "Mode"=0 запрещается прохождение RVV на схему инверсии на ЛП5, - вместо RVV туда подаётся 0, отчего схема инверсии не действует. В режиме нового цвета инверсный сигнал "Мode" разрешает поступление на вход А10 ПЗУ знакогенератора сигнала от атрибутного выхода RVV ВГ75. Тем самым в этом режиме бит RVV служит для оперативный смены фонта. Благодаря использованию РЕ3, в новом режиме число цветов не изменилось, причём цвета стали более удобными для программ.

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

Путём расхода ещё двух КП11 можно получить в данной схеме 2 палитры. Тогда коммутация выходов RGB делается не за счёт совместимой прошивки РЕ3, отчего сигнал "Mode" не подаётся на РЕ3 и её один вход освобождается. КП11-е коммутируют 8 выходов РЕ3. В режиме совместимости на выходы КП11 проходят сигналы GPA0, GPA1, HGLT (как в старой схеме цвета). А в режиме нового цвета на выходы проходят сигналы с РЕ3. На освободившийся адресный вход РЕ3 подаём бит выбора палитры PA0 ППА D14.

Однако, если для кодо-преобразования применять не РЕ3, а РТ5, то и без двух КП11-х получается 16 палитр выбираемых PA0...PA3 ППА D14.

Внимание. В данной схеме есть одно важное ограничение. Которое связано с тем, что в РК86 физически отсутствует сигнал BORDER, которым можно было бы гасить RGB на время обратного хода развёрток. Этот сигнал отсутствует по причине программного формирования бордюра, за счёт заполнения части экранного ОЗУ кодами 0 или пробел. Необходимо гасить RGB во время вывода бордюра (иначе сорвётся синхронизация. После вывода печатаемых символов строки все атрибутные сигналы сброшены, т.е 0. Это соответствует коду цвета 0. Код символа тоже 0 (или пробел). Таким образом во время бордюра выводится код цвета 0 и пустой символ, т.е выводится только цвет фона. Таким образом возникает ограничение, - цвет фона для кода цвета 0 - всегда должен быть чёрным. Из-за этого код 0 нельзя сделать желтым на синем, но можно сделать зеленым на чёрном и это будет код монохрома.

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

Решена проблема регенерации SIMM большого объёма. Для этого вводится счётчик регенерации, формирующий адреса регенерации A8, A9, A10, A11. Этот счётчик переключается с периодом вывода 4-х строк в момент вывода первой линии знакоместа. 4 строки необходимы, т.к в одной строке регенерируется только 64 столбца. 256 столбцов регенерируются за 4*64*10=2.56 МСЕК. SIMM 256 кб регенерируется за 5.12 МСЕК, SIMM 1 мб регенерируется за 10.24 МСЕК, а SIMM 16 мб регенерируется за 40.96 МСЕК, что с запасом удовлетворяет паспортным данных всех микросхем.