nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 17 Jul 2018 11:45



Reply to topic  [ 31 posts ]  Go to page Previous  1, 2, 3  Next
Видеоадаптер для 8-бит систем на Atmega328 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
shoorick wrote:
Lavr wrote:
А чем хуже - скомпилировать исходник на на Си и дизассемблировать его?
я пробовал - мне не понравилось. хотя можно и так. посмотреть и сделать хорошо :)

А я посмотрел, как делает Си - мне очень понравилось!
Честно говоря, я бы так не додумался. Потому как мы мыслим шаблонно и склонны
повторять удачный код, а вот Си - так не делает.

Хотя, конечно, всё зависит и от версии компилятора Си - видал я и очень дурковатый
код, скомпилированный ЯВУ.
Но если вопрос поставлен так:
rw6hrm wrote:
Как кусок сишной проги переделать в ассемблерный код?
Мне кажется - скомпилировать исходник на на Си и дизассемблировать его - кратчайший
путь, особенно, если нет желания вникать в Си-шный алгоритм...

_________________
iLavr


22 Jun 2018 00:48
Profile
Maniac
User avatar

Joined: 13 Nov 2007 12:09
Posts: 235
Location: Ставрополь
Reply with quote
Кусок кода небольшой, последняя четвёртая часть из прицепа. Проблема в том, что не зря же автор разнёс обработку и показуху по разным чипам, явно у него где-то не хватало места. А в куске-то всё просто, знай сравнивай стринги и выкидывай соответственные коды...
Вот и думай, как сделать сравнение строк под АВР или под Z80, где код будет более компактный.

УПД. Кстати, есть хекс этого кода как раз для 328-й меги, мож оттуда можно как-то вытащить...

Вообще весь код автора тут, http://searle.hostei.com/grant/cpm/z80sbcFiles.zip , от меня только добавлена СР866, без замены программного кода.


Attachments:
SBCInterface_328.zip [2.78 KiB]
Downloaded 5 times
SBCInterface.c [21.16 KiB]
Downloaded 23 times
22 Jun 2018 01:38
Profile WWW
Doomed
User avatar

Joined: 05 Nov 2007 06:08
Posts: 385
Location: Украина
Reply with quote
т.е. SBCInterface.c, как я понял - это прога для посылания кодов от клавы АТ в RS232?
и он чем-то не нравится? или в нем что-то есть, что нужно выдрать и куда-то впердолить?

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


22 Jun 2018 02:14
Profile WWW
Maniac
User avatar

Joined: 13 Nov 2007 12:09
Posts: 235
Location: Ставрополь
Reply with quote
Этот кусок железа делает:
- связь с хостом по RS232;
- связь с АТ-клавой;
- связь с видеоадаптером по 2/4/8-проводной шине;
- переделка ESC-последовательностей в упрощённые коды для отображения видеоадаптером.
Всё это в отдельном от видеоадаптера чипе.
Интересует последняя часть, дабы выдрать отсюда и вставить в видеоадаптер (код которого писан на асме Меги). Интуитивно прога понятна, осталось придумать, что лучше делать - модернизировать прошивку адаптера или биос компа для обработки ESC-последовательностей. В принципе и там, и там, места для дополнительного кода осталось маловато, но биос можно увеличить за счёт уменьшения ТРА, а вот в атмеге что-то придется выкидывать...


22 Jun 2018 02:28
Profile WWW
Doomed
User avatar

Joined: 05 Nov 2007 06:08
Posts: 385
Location: Украина
Reply with quote
т.е. нужно, чтобы модернизировать видеоадаптер, чтобы он реагировал на это?:
 
Code:
         //If it is an escape character then get the following characters to interpret
         //them as an ANSI escape sequence
         if (serInChar==27 && enableAnsiConversion==1) // && prevInChar!=26) // If the previous char was a "force character (26)" prefix then don't treat 27 as an escape
         {
            escParam1=0;
            escParam2=0;
            serInChar=getInChar();

            if (serInChar=='-')
            {
               enableAnsiConversion=0;  // ESC- will turn off the ANSI interpreter
            }
            if (serInChar=='[')
            {
               serInChar=getInChar();
               // Process a number after the "[" character
               while (serInChar>='0' && serInChar<='9')
               {
                  serInChar=serInChar-'0';
                  if (escParam1<100)
                  {
                     escParam1=escParam1*10;
                     escParam1=escParam1+serInChar;
                  }
                   serInChar=getInChar();
               }
               // If a ";" then process the next number
               if (serInChar==';')
               {
                  serInChar=getInChar();
                  while (serInChar>='0' && serInChar<='9')
                  {
                     serInChar=serInChar-'0';
                     if (escParam2<100)
                     {
                        escParam2=escParam2*10;
                        escParam2=escParam2+serInChar;
                     }
                      serInChar=getInChar();
                  }

               }
               // Esc[line;ColumnH or Esc[line;Columnf moves cursor to that coordinate
               if (serInChar=='H' || serInChar=='f')
               {
                  if (escParam1>0)
                  {
                     escParam1--;
                  }
                  if (escParam2>0)
                  {
                     escParam2--;
                  }
                  sendToDisplay(0x0F);
                  sendToDisplay(escParam1);
                  sendToDisplay(0x0E);
                  sendToDisplay(escParam2);
               }
               //Esc[J=clear from cursor down, Esc[1J=clear from cursor up, Esc[2J=clear complete screen
               else if (serInChar=='J')
               {
                  if (escParam1==0)
                  {
                     sendToDisplay(0x13);
                  }
                  if (escParam1==1)
                  {
                     sendToDisplay(0x12);
                  }
                  if (escParam1==2)
                  {
                     sendToDisplay(0x0C);
                  }

               }
               // Esc[K = erase to end of line, Esc[1K = erase to start of line
               else if (serInChar=='K')
               {
                  if (escParam1==0)
                  {
                     sendToDisplay(0x11);
                  }
                  if (escParam1==1)
                  {
                     sendToDisplay(0x10);
                  }

               }
               // Esc[L = scroll down
               else if (serInChar=='L')
               {
                  sendToDisplay(0x15);
               }
               // Esc[M = scroll up
               else if (serInChar=='M')
               {
                  sendToDisplay(0x14);
               }
            } // end of in char = '['
         } // end of in char = 27



22 Jun 2018 02:35
Profile WWW
Maniac
User avatar

Joined: 13 Nov 2007 12:09
Posts: 235
Location: Ставрополь
Reply with quote
Ага! :obye: (почему тут нет смайлика в виде шрековского кота?)
Могу неспешно до кучи подкинуть заголовочный файл (что автор позабыл вложить в архив) и свои шрифты, чтобы всё уже было вместе... Но это уже вечером. Тем более, что у меня компилить и нечем до сих пор...


22 Jun 2018 03:12
Profile WWW
Doomed
User avatar

Joined: 05 Nov 2007 06:08
Posts: 385
Location: Украина
Reply with quote
ну, заголовки пока не обязательно, мне некуда заливать, хотя если бы оно завелось в атмеге8, мне стало бы интересно :)

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

т.е., нужно проанализировать, как короткие команды выполняются дисплейной программой,
сравнить коды посылаемые и понимаемые, а также возможно отключить отключение интерпретации упр кодов (хотя бы временно), т.е. в исходнике закоментить строчку:
Code:
enableAnsiConversion=0;  // ESC- will turn off the ANSI interpreter
, скомпелировать и залить, а также написать свою прогу, которая будет уверенно слать в терминал коды, в которых вы уверены, наблюдать результат.

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


22 Jun 2018 03:45
Profile WWW
Maniac
User avatar

Joined: 13 Nov 2007 12:09
Posts: 235
Location: Ставрополь
Reply with quote
На короткие коды реагирует адекватно, по крайней мере список http://searle.hostei.com/grant/MonitorK ... Characters отрабатывает нормально. И как раз в сишном коде производится переделка ESC в короткие коды.
Обработка кодов в основной проге находится в прицепленом файле
В Атмегу8 уместиться может, если оставить только один фонт и выкинуть их переключение, а также возможности 2/4-проводного соединения, ибо в 328 32К ПЗУ, а в восьмёрке гораздо меньше.


Attachments:
ProcChr.inc [27.65 KiB]
Downloaded 24 times
22 Jun 2018 09:50
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Что-то вдруг память навеяла: а это вы не то пытаетесь сделать, что в MS-DOS называлось драйвер ANSI.SYS ?
Quote:
ANSI.SYS — драйвер для операционной системы MS-DOS, расширение стандартного драйвера клавиатуры и экрана CON, входящего в состав MS- DOS. Основывается на Управляющих последовательностях ANSI. Управляющие символы ANSI (англ. ANSI escape code) — символы, встраиваемые в текст.


Я к тому, что помню такой, он загружался резидентно - может и вам сделать также под z80 ?

_________________
iLavr


22 Jun 2018 10:12
Profile
Senior

Joined: 19 Feb 2017 04:46
Posts: 109
Location: 600 км от Москвы
Reply with quote
rw6hrm wrote:
barsik wrote:
Если обслуживания ANSI-последовательностей нет, то непонятно зачем их вводить. Разве у Вас есть программы, которые использую ANSI-коды?

WordStar, BBC Basic, Multiplan, DBase-II... могу продолжить
Не сможете.

Да и перечисленных Вами программ в варианте использующем управляющие коды ANSI нет. Все перечисленные Вами программы используют упр.коды VT52. Конечно, если для программы есть инсталлятор терминала, то можно задать любые управляющие последовательности. Но в архивах таких программ нет и в реале для 8-ми разрядок не использовались терминалы с ANSI-кодами, т.к их просто не существовало в природе. Да и появился драйвер ANSI.SYS намного позднее, в середине 80-тых и лишь для IBM PC, когда появились мощные видеоадаптеры для PC и фирма IBM догадалась, что функциями MSDOS реально поддерживается только чёрно-белый терминал или АЦПУ. Потому и придумали драйвер ANSI.SYS.

Да и он не получил распространения у пользователей и использования у программистов. Т.к неудобно к каждой программе добавлять отдельный драйвер. Потому ANSI.SYS нашёл применение только в оформлении продвинутых BAT-файлов и у начинающих любителей программировать на бейсике интерпретаторе.

Я в середине 90-тых перетранслировал CP/M текстов редактор написанный на CP/M Турбо-Паскале и управлящий экраном кодами VT52 для IBM PC, для чего достаточно было поменять несколько констант. При этом приходилось грузить драйвер ANSI.SYS. А потом просто доработал этот редактор используя добавленную в версии для PC процедуру gotoXY.

Потому считаю, что делать терминал с упр.кодами позаимствованными от IBM PC, это нужно только, если разработчик ненавидит упр.коды VT52 или ставит целью придумать себе ненужную дополнительную работу. Или, если Вы ранее написали на MSDOS бейсике IBM PC много своих программ под драйвер ANSI.SYS и хотите их перенести.

Судите сами. Если речь о CP/M, то 99% программ, что Вы найдёте, используют терминал VT52. Чтобы их использовать, Ваш CP/M BIOS в подпрограмме CONOUT (BIOS+9) должен будет отлавливать и конвертировать упр.коды VT52 в управляющие коды ANSI. Проще сразу сделать Ваш терминал понимающим упр.коды VT52, тогда CONOUT будет просто передавать байты в терминал без отлавливания упр.кодов и их конверсии.

Использование упр.кодов ANSI оправдано лишь, если объёма упр.команд VT52 недостаточно, да и то, тот же цвет лучше ввести в VT52 любым произвольным способом, чем менять стандартный во всём мире терминал на не пойми что.

rw6hrm wrote:
Да и ANSI-коды стандартны для 8-разрядок, это у нас клепали, кто во что горазд.
Заблуждение. Это VT52 стандарт для 8-ми разрядок. Программы CP/M написаны под VT52, а программы для DEC-процессоров написаны под VT100, поэтому у нас ничего не изобретали. А про ANSI.SYS в СССР узнали только в конце 80-тых, когда 8-ми разрядки умерли, а в стране появились первые отечественные клоны PC и их первые пользователи начали программировать на бейсике.

PS. BBC бейсик в оригинале прошивался в ПЗУ и работал по ячейкам ROM-BIOS. И когда BBC бейсик конвертировали для Z80, то использовали упр.коды целевой DOS. А вряд-ли в мире есть хоть один CP/M-компьютер, где использовался бы драйвер ANSI.SYS.

PPS. Драйвер ANSI.SYS сейчас заслуживает внимания тех, кто пользуется программами CP/M (например, компиляторами). Есть TSR CP/M-эмуляторы. Они позволяют в Win XP прогонять не работающие по железу программы для CP/M. Но увы, упр.коды терминалов не совпадают (точнее MSDOS функции вывода на экран вообще не обслуживают искейп-коды). Потому работают только телетайпные CP/M-программы, а не экранные. Можно дизассемблировать ANSI.SYS и переделать её под упр.коды VT52. Это, во-первых, позволит использовать текстовые редакторы, нортоны и другие экранные программы из CP/M.

А во-вторых, если изменить драайвер под вариант экранного драйвера ROM-BIOS или CP/M, например, ОРИОНА или РК86, то можно писать экранные программы, например на Паскале MT+ для MSDOS и отлаживать их прямо на PC. А затем ничего не меняя перетранслировать на Паскале МТ+ для CP/M, получая работоспособный код 8-ми разрядки.


Last edited by barsik on 22 Jun 2018 16:34, edited 5 times in total.



22 Jun 2018 14:05
Profile
Maniac
User avatar

Joined: 13 Nov 2007 12:09
Posts: 235
Location: Ставрополь
Reply with quote
Вот тут я первый раз с barsik'ом не соглашусь ;)
Quote:
перечисленных Вами программ в варианте использующем управляющие коды ANSI нет

Я могу сделать скрины экрана с выпадающими ансишными кодами. А уж от вида VТ52 они явно отличаются.
Quote:
в архивах таких программ нет и в реале для 8-ми разрядок не использовались терминалы с ANSI-кодами

http://www.retroarchive.org/cpm/index.html , скачивайте, смотрите если есть интерес.
Quote:
делать терминал с упр.кодами позаимствованными от IBM PC, это нужно только, если пользователь ненавидит упр.коды VT52 и ставит целью придумывать себе ненужную дополнительную работу.

Увы, но первоначальная конструкция уже содержала в себе такую функцию. Вот что я действительно ненавижу, так это тормознутое соединение по последовательному порту, который тем более не у всех есть. Поэтому и отказался от него.
Quote:
Проще сразу сделать Ваш терминал понимающим упр.коды VT52, тогда CONOUT будет просто передавать байты в терминал без отлавливания упр.кодов и их конверсии.

Опять же отсылка к первоначальной версии. Пока байты отправляются непосредственно, как отдают программы. Через последовательный порт всё нормально, в любом виде, на любой терминалке. Но применяется уже не терминал, а по сути видеокарта, работающая с логикой терминала, но с параллельным присоединением к компу/контроллеру. Если её применить в ЮТ-88, то вопросов бы не возникало, она наголову выше, чем "родной" ютовский убожищный простотекстовый видеоадаптер, под которого софта никакого нет. Но тут всё же задачи иные стоят, совместимость нужна...
Да, и про цвет - он не нужен. Вообще. Совсем. Даже коды увеличения яркости блокируются. Иначе проще и универсальнее было бы собрать видеокарту на нормальном проце, 6502, к примеру, c нормальным видеочипом, а не на Атмеге. Но это было бы уже не 7 корпусов...
Ну а если вспомнили писюк, то этот же видеоадаптер можно подключить на принтеровский порт и получить ещё одно устройство видеовывода, достаточно скоростное. Это, правда, мало кому нужно, но возможность есть.


22 Jun 2018 14:21
Profile WWW
Senior

Joined: 19 Feb 2017 04:46
Posts: 109
Location: 600 км от Москвы
Reply with quote
Post 
rw6hrm wrote:
barsik wrote:
в архивах таких программ нет и в реале для 8-ми разрядок не использовались терминалы с ANSI-кодами

http://www.retroarchive.org/cpm/index.html , скачивайте, смотрите если есть интерес

Спасибо, это всё давно скачано (и не только отсюда).

Иногда в Wiki-статьях дилетанты под термином ANSI-коды понимают вообще все упр.коды с префиксом ESC (несовместимые и для разных терминалов). Но в архивах CP/M нигде не встречается даже само слово ANSI. Потому странно слышать, что для CP/M есть программы настроенные на ANSI-коды.

Как я понял, ANSI-коды в основном совпадают с упр.кодами терминала VT100 http://microsin.net/adminstuff/xnix/ans ... ences.html. VT100 это терминал из 1978 года, который использовался и с CP/M-компьютерами. Но это дорогой терминал, применяемый на мини-ЭВМ. А CP/M это система эконом-класса, потому почти все программы CP/M рассчитаны на VT52, который проще и существенно отличается от VT100/ANSI.
rw6hrm wrote:
Опять же отсылка к первоначальной версии
Понятно. В описании указано, что устройство поддерживает ANSI-коды, но оказалось не поддерживает, и потому Вы поставили себе задачу довести функционал до описанного.
rw6hrm wrote:
по сути видеокарта, работающая с логикой терминала... она наголову выше, чем "родной" ютовский убогий просто-текстовый видеоадаптер, под которого софта никакого нет. Но тут всё же задачи иные стоят, совместимость нужна...
Я не встречал в CP/M программ требующих VT100 или ANSI и по-прежнему считаю, что для CP/M стандарт VT52, а не VT100.
rw6hrm wrote:
Да, и про цвет - он не нужен. Вообще. Совсем.
В CP/M-программах цвета нет. Понятно, что и в простых конструкциях цвета нет.

Зато, если у пользователя есть терминал с упр.кодами для задания цвета, можно писать свои цветные программы, причём даже на ЯВУ. С цветом программа выглядит веселее.

Даже для ВГ75 можно написать цветной драйвер. Из-за специфики цвета управляемого атрибутами ВГ75, драйвер должен считывать строку, сканировать её, находить ранее включённые атрибуты и на основе этого высчитывать позицию для вставки символа в строчный буфер. В начале каждой строки придётся поставить код выключения атрибутов, в конце строки - код конца строки. Интересно, что если строка заполнена, то в строке можно менять цвет всего 2 раза (т.к 8+64 байта занимает строка, и на атрибуты остаётся всего 6 байтов). Но если отображаемые символы в строке кончаются раньше, благодаря наличию кода конца строки, можно менять цвет большее число раз. Если код конца строки не поставить, то ВГ75 будет читать дальше, чтобы считать для строки 78 отображаемых символов. Из-за этого позиция начала следующей строки сдвинется, что совсем неприемлемо. Как видите, атрибутный цвет в РК86 неудобен и пригоден только для оцвечивания одиночных символов на чёрном фоне.


22 Jun 2018 16:20
Profile
Doomed
User avatar

Joined: 05 Nov 2007 06:08
Posts: 385
Location: Украина
Reply with quote
если на короткие коды реагирует, то никто не запрещает перехватить посылку ESC-кода и преобразовать ее в короткий в самой системе (z80) - такая мысль у меня тоже была как вариант.
основное преимущество - относительная легкость впендюривания, это же не МК перепрошивать, хотя если изменения вносятся в УФ ПЗУ, то перешивать МК может и удобней ;)


22 Jun 2018 22:59
Profile WWW
Maniac
User avatar

Joined: 13 Nov 2007 12:09
Posts: 235
Location: Ставрополь
Reply with quote
Относительная легкость впендюривания в самом компе заключается в том, что фиксится загружаемый с диска файл, а не содержимое ПЗУ, но сейчас у меня всего 127 байт доступно, чтобы ТРА не уменьшать. Наверное так и сделаю...


22 Jun 2018 23:37
Profile WWW
Doomed
User avatar

Joined: 05 Nov 2007 06:08
Posts: 385
Location: Украина
Reply with quote
в 127 байт на z80 можно всунуть некислую программу! ;)


23 Jun 2018 00:06
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 31 posts ]  Go to page Previous  1, 2, 3  Next

Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.