|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Радио-86РК на SRAM 128K Alpha (2014) & Beta (2024)
Author |
Message |
Alikberov
Maniac
Joined: 14 Oct 2019 18:10 Posts: 327 Location: Tashkent
|
Кстати, имеется ещё одно предложение.. На оригинальной клавиатуре МС-7007 красная клавиша "Стоп" и серая "Сброс" - не так, как у КР-03. Это натолкнуло на некоторые додумки... Использовать на Сброс кнопку двойного нажатия (можно, конечно, использовать и две отдельно - вопрос концептуальной эстетики), чтобы "реальный Сброс" производился при "сильном" нажатии. Тогда как при "лёгком" срабатывало бы нечто подобное "аппаратному прерыванию" (как Magic Button в ZX-Spectrum на NMI). Так как в схеме РК отсутствует (и не нужен) ВН59, на уровне логики можно "искусственно" выработать код FD (недокументированный CALL из серии CD/DD/ED/FD) три раза, что спровоцирует "CALL FDFD" без самого прерывания (счётчик PC следует потом подправить) с передачей управления в некую "оболочку" (полезно иметь несколько ПЗУ или одно побольше, где вместе с Монитором будет некая "оболочка" в "теневой плоскости" ПЗУ, включаемой лишь по "мягкому Сбросу", где можно разместить всё хозяйство (контроль знакогенераторов, атрибутов и т.п.) с современным приятным интерфейсом (как BIOS) без всяческих "тумблеров" и "рубильников"... Лучше "больше", чем "меньше" (640 Кб хватит всем!)...
|
25 Jan 2024 04:05 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22735 Location: Silicon Valley
|
По идее Толкалин и Акименко - это рудименты прошлого - так сказать промежуточные этапы на пути к варианту Апогея Однако у людей они есть и люди пишут под них программы, поэтому их надобно поддержать Другой вопрос надо ли их настраивать через биос-сетап? Не думаю - т.к. например факт необходимости включить Акименко или Толкалина вместо цветов Апогея (а также что нам нужен серый-на-чёрном вместо чёрный-на-чёрном, чтобы игра выглядела как в эмуляторе) может выясниться уже лишь после запуска игры - и тут тумблеры становятся незаменимым инструментом в руках пользователя "Лучше меньше, да лучше"
|
25 Jan 2024 04:23 |
|
|
Alikberov
Maniac
Joined: 14 Oct 2019 18:10 Posts: 327 Location: Tashkent
|
О чём я и говорю: Подобие Magic Button для РК, когда программа прерывается и через интерфейс "теневого ПЗУ" ставим/убираем галочки и меняем конфигурацию, после чего выполнение программ продолжается. (И никаким рубильниками украшать схему РК не нужно! )
|
25 Jan 2024 04:31 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22735 Location: Silicon Valley
|
Это слишком сложно К тому же magic как пишут лажала часто - приводила к порче диска, ребуту и потере прогресса в игре А тумблеры лажать не могут P.S. Кстати для magic button надо NMI (немаскируемое прерывание), которое есть на Z80 или 8085, но нет на 8080 (и вообще в схеме РК через выход запрещения-разрешения прерываний звук играется)
|
25 Jan 2024 04:37 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22735 Location: Silicon Valley
|
На зхпк мне Ведущий_специалист предлагает режим цветности Толкалин-Акименко-Апогей не только вручную устанавливать, но и программно - это 2 бита и они в #F000 уже не влезут. Соответственно надо их отдельно заводить, и логично, что переключение шрифтов/палитр и акценты надо выносить туда же - придётся добавлять новый регистр #F001? Кстати а имело бы смысл акценты делать разными для разных палитр? Или это уже слишком заморочено получается? Хотя наверное это всё надо перенести на потом...
|
26 Jan 2024 10:18 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22735 Location: Silicon Valley
|
Пока решил без фоновых полутонов попробовать: Теперь тут только 20 цветов: Новая программа под спойлером: rk-color3-accents.c | | | | Code: #include <stdio.h> #include <stdlib.h> #include <string.h>
#define BLACKBACK
long cols[9]={0x0000FF,0x00FF00,0xFF0000,0xFFFFFF,0x0000AA,0x00AA00,0xAA0000,0x000000};
int main() { char str[8],sta[8][8]; int i,j,k,ii,jj; long l,ll[25]; FILE *f; f = fopen("accents.htm","wt"); if(f==NULL) return -1; ll[24] = 0xFFFFFF; fprintf(f,"<HTML><BODY BGCOLOR=#FFFFFF>\n"); fprintf(f,"<h1>Colors of RK-tiles with accents</h1>\n"); for(k=0;k<2;k++) { fprintf(f,"<h2>Palette %i</h2>\n",k); ii = 0; fprintf(f,"<table border=1 cellpadding=5>\n"); for(j=0;j<9;j++) { #ifdef BLACKBACK if(j==6) break; #endif strcpy(str,"000"); fprintf(f,"<tr>\n"); for(i=0;i<10;i++) { if(i==0) { if(j==0) fprintf(f," <td> "); else if(j==1) fprintf(f," <td rowspan=4>Foreground"); else if(j==5) #ifdef BLACKBACK fprintf(f," <td>Background"); #else fprintf(f," <td rowspan=4>Background"); #endif } else if(i==1) { if(j==0) fprintf(f," <td>Accent-->"); else { #ifdef BLACKBACK if(j==5) fprintf(f," <td align=right>Attr XX",ii++); else #endif fprintf(f," <td align=right>Attr %02d",ii++); if(ii==2) ii=10; if(ii==12) ii=0; } } else // i>=2 { if(j==0) { fprintf(f," <td>%s",str); strcpy(sta[i-2],str); if(++str[2]=='2') { str[2] = '0'; if(++str[1]=='2') { str[1] = '0'; str[0]++; } } } else { jj = 25; l = cols[j-1]; if(k) { if(l==0xFF0000) l=0x00FFFF; else if(l==0x00FF00) l=0xFF00FF; else if(l==0x0000FF) l=0xFFFF00; else if(l==0xAA0000) l=0x00AAAA; else if(l==0x00AA00) l=0xAA00AA; else if(l==0x0000AA) l=0xAAAA00; if(j<4) // subtract accents for palette 1 { if(sta[i-2][0]=='1'&&(l&0xFF0000)){l&=0x00FFFF;l|=0xAA0000;} if(sta[i-2][1]=='1'&&(l&0x00FF00)){l&=0xFF00FF;l|=0x00AA00;} if(sta[i-2][2]=='1'&&(l&0x0000FF)){l&=0xFFFF00;l|=0x0000AA;} } // compare colors with palette 0 for(jj=0;jj<25;jj++) if(ll[jj]==l) break; } else if(j<4) // add accents for palette 0 { if(sta[i-2][0]=='1'&&!(l&0xFF0000)) l|=0xAA0000; if(sta[i-2][1]=='1'&&!(l&0x00FF00)) l|=0x00AA00; if(sta[i-2][2]=='1'&&!(l&0x0000FF)) l|=0x0000AA; ll[((j-1)<<3)+i-2] = l; // store colors from paletter 0 } #ifdef BLACKBACK if(j==5) l=0; #endif if(jj<25) fprintf(f," <td bgcolor=#%6.6X align=right>*",l); else fprintf(f," <td bgcolor=#%6.6X> ",l); } } fprintf(f,"</td>\n"); } fprintf(f,"</tr>\n"); } fprintf(f,"</table>\n"); } fprintf(f,"<p>* Color is present in palette 0 as well.</b>\n"); fprintf(f,"</BODY></HTML>\n"); return 0; }
| | | | |
В порту F000 можно оставить только переключение страниц ОЗУ, как сейчас. В новом порту F001 будет 3 акцента RGB и 1 бит переключения шрифтов и палитр (а в будущем будут ещё 2 бита выбора способа обычной РК-раскраски наряду с тумблером). Команды E4 и E5 будут переключать в основной шрифт и в альтернативный соответственно (вместе с палитрой) - также надо будет сделать трюк как сделал Alikberov - складывать VSP с LA0 по OR и далее использовать это как гашение (чтобы E4 не показывался как Д с подчёркиванием, а E5 - как E с подчёркиванием). Цветной фон можно будет сделать путём включения цвета по Апогею с инверсией - в этом случае фон окрасится в выбранный цвет (это может быть даже серый AAAAAA), а чёрный цвет символов будет перебит цветами тайла - тут у нас как бы получаются тайлы с прозрачностью - или это слишком сложно? А вообще локальные цвета из тайла будут иметь больший приоритет, чем глобальные цвета так что без инверсии РК-шные цвета раскраски будут перебиты цветами из тайла и тайл будет нарисован на чёрном фоне.
|
26 Jan 2024 21:54 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22735 Location: Silicon Valley
|
Вот такая схема тайлов с 2 палитрами и 8 акцентами получается (без полутоновых заливок): По копусам выходит 8: Плюс ещё надо будет корпуса 3 на согласование с обычной схемой цветности РК (которая сама по себе будучи универсальной весит 10 корпусов), чтобы сделать возможным просвечивание фона сквозь тайлы либо сделать тайлы всегда на чёрном фоне - это будет чуть полегче...
|
27 Jan 2024 00:24 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22735 Location: Silicon Valley
|
Вот вроде с полутоновыми заливками получилось: Выходит порядка 10 корпусов:
|
27 Jan 2024 04:45 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22735 Location: Silicon Valley
|
Возвращаю обратно полутоновые заливки: И это снова 23 цвета: (без AAAAAA, AAFFFF, FFAAFF и FFFFAA) И вот программа, которая генерирует такой HTML файл: rk-color4-accents.c | | | | Code: #include <stdio.h> #include <stdlib.h> #include <string.h>
long cols[9]={0x0000FF,0x00FF00,0xFF0000,0xFFFFFF,0x0000AA,0x00AA00,0xAA0000,0x000000};
int main() { char str[8],sta[8][8]; int i,j,k,ii,jj; long l,ll[25]; FILE *f; f = fopen("accents.htm","wt"); if(f==NULL) return -1; ll[24] = 0xFFFFFF; fprintf(f,"<HTML><BODY BGCOLOR=#FFFFFF>\n"); fprintf(f,"<h1>Colors of RK-tiles with accents</h1>\n"); for(k=0;k<2;k++) { fprintf(f,"<h2>Palette %i</h2>\n",k); ii = 0; fprintf(f,"<table border=1 cellpadding=5>\n"); for(j=0;j<9;j++) { strcpy(str,"000"); fprintf(f,"<tr>\n"); for(i=0;i<10;i++) { if(i==0) { if(j==0) fprintf(f," <td> "); else if(j==1) fprintf(f," <td rowspan=4 align=center>Foreground<br>color<br>over black"); else if(j==5) fprintf(f," <td rowspan=4 align=center>Special case<br>(all ones)"); } else if(i==1) { if(j==0) fprintf(f," <td>Accent-->"); else { fprintf(f," <td align=right>Attr %02d",ii++); if(ii==2) ii=10; if(ii==12) ii=0; } } else // i>=2 { if(j==0) { fprintf(f," <td>%s",str); strcpy(sta[i-2],str); if(++str[2]=='2') { str[2] = '0'; if(++str[1]=='2') { str[1] = '0'; str[0]++; } } } else { jj = 25; l = cols[j-1]; if(k) { if(l==0xFF0000) l=0x00FFFF; else if(l==0x00FF00) l=0xFF00FF; else if(l==0x0000FF) l=0xFFFF00; else if(l==0xAA0000) l=0x00AAAA; else if(l==0x00AA00) l=0xAA00AA; else if(l==0x0000AA) l=0xAAAA00; if(j<4) // subtract accents for palette 1 { if(sta[i-2][0]=='1'&&(l&0xFF0000)){l&=0x00FFFF;l|=0xAA0000;} if(sta[i-2][1]=='1'&&(l&0x00FF00)){l&=0xFF00FF;l|=0x00AA00;} if(sta[i-2][2]=='1'&&(l&0x0000FF)){l&=0xFFFF00;l|=0x0000AA;} } // compare colors with palette 0 for(jj=0;jj<25;jj++) if(ll[jj]==l) break; } else if(j<4) // add accents for palette 0 { if(sta[i-2][0]=='1'&&!(l&0xFF0000)) l|=0xAA0000; if(sta[i-2][1]=='1'&&!(l&0x00FF00)) l|=0x00AA00; if(sta[i-2][2]=='1'&&!(l&0x0000FF)) l|=0x0000AA; ll[((j-1)<<3)+i-2] = l; // store colors from paletter 0 } if(jj<25) fprintf(f," <td bgcolor=#%6.6X align=right>*",l); else fprintf(f," <td bgcolor=#%6.6X> ",l); } } fprintf(f,"</td>\n"); } fprintf(f,"</tr>\n"); } fprintf(f,"</table>\n"); } fprintf(f,"<p>* Color is present in palette 0 as well.</b>\n"); fprintf(f,"</BODY></HTML>\n"); return 0; }
| | | | |
P.S. Теперь можно рисовать вот такие цветные шрифты
|
27 Jan 2024 04:57 |
|
|
Alikberov
Maniac
Joined: 14 Oct 2019 18:10 Posts: 327 Location: Tashkent
|
Кстати, здесь редактор знакогенератора с поддержкой "светового пера" (в эмуляторе мышкой легко рисовать символы). (Делал специально для опытов.) К сожалению, исходник временно утерян: Код довольно компактен. (В эмуляторе я в режиме реального времени все цвета видел.)
|
27 Jan 2024 10:03 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22735 Location: Silicon Valley
|
А он редактирует прямо знакогенератор дырками по 4 байта? Надо будет приспособить под моё железо И чтобы обе половинки мог редактировать
|
27 Jan 2024 14:10 |
|
|
Alikberov
Maniac
Joined: 14 Oct 2019 18:10 Posts: 327 Location: Tashkent
|
Нет, данный вариант - публичный (для EEPROM-программаторов) и просто редактирует символы в ОЗУ. Тот (что работал с "дырками") - промежуточный вариант сугубо для внутренних нужд (работал через MOV-префиксы те самые). Этот код - очень компактный и интерфейс спартанский. Хотя, можно там добавить реакцию на клавишу, чтобы из ОЗУ переносить данные в память знакогенератора. Но по причинам "компактности" я ничего не добавлял. (Типа, на АР2 вместо выхода в Монитор повесить адрес на свой код, который и будет знакогенератор перезаписывать.)
|
27 Jan 2024 15:01 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22735 Location: Silicon Valley
|
Получается так: - тайлы без полутонов - 3 корпуса
- тайлы с полутноами - 7 корпусов
- тайлы без полутонов, но с акцентами - 8 корпусов
- тайлы с полутонами и с акцентами - 10 корпусов (?)
P.S. Надо чтоли уже закончить софтину, которая будет брать логисимовский дизайн и строить из него топологию печатной платы с мелкой логикой ТТЛ
|
27 Jan 2024 18:30 |
|
|
vital72
Senior
Joined: 17 Jun 2014 04:29 Posts: 138 Location: 93.80.157.217
|
мне интересно посмотреть на код распаковщика шрифта, сжатого твоим алгоритмом, а самое главное -- сколько времени он будет распаковывать? проведи измерения. я также сделал сжатие шрифтов и в первой своей реализации использовал честный алгоритм Хаффмана. но когда я увидел с какой скоростью он у меня распаковывает шрифты, слегка расстроился. переосмыслил алгоритм и сделал максимально упрощенный алгоритм на основе того же Хаффмана и теперь распаковка 4 килобайтного шрифта (4 шрифта по 1к) происходит почти незаметно на глаз. некоторые данные моего способа сжатия: шрифт в 2 килобайта (два шрифта, один для латинских букв, второй для русских в обоих регистрах, первые 64 символа у них идентичные) шириной 6 пикселов сжимается в 1201 байт плюс 43 байта алфавит. тоже самое для шрифта шириной 8 пикселов -- сжатые данные 1314 байта плюс 63 байта алфавит.
_________________https://radio-86rk.ruкто я такой, чтобы спорить с самим собой
|
27 Jan 2024 20:40 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22735 Location: Silicon Valley
|
По степени сжатия я там приводил размеры: По скорости SHAFF0 должен быть относительно быстрым ибо он байт-ориентированный, а не бит-ориентированный как SHAFF1 - на Z80 я написал для SHAFF0 два депакера - простой (перемещаемый) и навороченный, который можно настраивать ключиками, чтоб он был турбо и супертурбо http://www.nedopc.org/forum/viewtopic.php?p=159961#p159961Скорости там были такие (на примере LD-библиотекаря написанного в кодах Z80 и в сравниении с LDIR, т.е. инструкцией Z80 для копирования блоков памяти): (а вот SHAFF1 на Z80 декодил тот же LD со скоростью 470.5 тактов на байт или 22.4*LDIR, что в 12 раз медленнее, чем SHAFF0 - см. тут)
|
27 Jan 2024 22:29 |
|
|
Who is online |
Users browsing this forum: No registered users and 5 guests |
|
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
|
|