PDA

Просмотр полной версии : Вопросы по архитектуре "Специалиста"



CityAceE
26.09.2023, 16:07
Думаю, что эта тема всё-таки ближе к реальному Специалисту, чем к эмуляторам, хотя и возникли вопросы при написании очередного эмулятора (https://zx-pk.ru/threads/35288-emulyator-pk-spetsialist-quot-speciarmlist-quot.html). Почти всё можно проверить на реальном компьютере, но у меня пока такая возможность отсутствует. Несмотря на то, что я уже написал один вполне рабочий эмулятор Специалиста (https://zx-pk.ru/threads/29897-spycialist-emulyator-pk-spetsialist-na-python.html), но там была задача чтобы просто запускались программы. Здесь же хочется сделать более качественную эмуляцию. Поэтому скопились вопросы:


Что правильно должно считываться по адресам С000-EFFF, если микросхема ПЗУ не установлена? Emu80 отображает FF, как будто бы установлены чистые микросхемы памяти. Это корректное поведение? Оно обусловлено схемотехникой компьютера?
Что должно считывается по адресам в диапазоне F000-F7FF в журнальной версии компьютера? Emu80 отображает циклическую последовательность 00 00 00 FF. Чем это обусловлено? Что будет если попытаться записывать туда данные на реальном компьютере в стандартной конфигурации?
Что должно считываться с адресов F8003, F8007 и т.д., то есть адресов куда проецируется порт управления штатной микросхемы параллельного порта (КР580ВВ55А)?
Как на реальном Специалисте ведут себя команды работы с прерываниями: DI, EI, HLT? Существуют ли какие-то устройства для Специалиста, которые будут реагировать на эти команды?
Как на реальном Специалисте ведут себя команды работы с портами IN xx и OUT xx? Что будет если считать данные с несуществующего порта? Существуют ли какие-то устройства для Специалиста, которые будут реагировать на эти команды?
Процессор Специалиста работает с частотой 2 МГц. Телевизор отображает 50 кадров в секунду. Я считаю, что между кадрами укладывается (2 * 1 000 000 / 50) тактов процессора. Насколько мои вычисления корректны?
Я правильно понимаю, что у Специалиста отсутствует какая-либо привязка начала построения кадра к чему-либо. Или всё-таки кадр строится по каким-то временнЫм правилам?


Очень надеюсь на компетентную информацию, как минимум, от эксперта 8-ми (и не только) битного мира ivagor

ivagor
26.09.2023, 17:05
Думаю по Специалисту на форуме наиболее компетентен HardWareMan, вопрос в том, чтобы он захотел ответить на вопросы. В крайнем случае могу и я подключиться, но надеюсь это не понадобиться.

CityAceE
26.09.2023, 17:10
HardWareMan, найдётся минутка на ответы?

HardWareMan
26.09.2023, 21:07
Что правильно должно считываться по адресам С000-EFFF, если микросхема ПЗУ не установлена? Emu80 отображает FF, как будто бы установлены чистые микросхемы памяти. Это корректное поведение? Оно обусловлено схемотехникой компьютера?
На любом ЛК с процессором ВМ80 на висячей и не подтянутой шине считывается слово состояния. Для IN это будет 42H, для остальных - 82H.


Что должно считывается по адресам в диапазоне F000-F7FF в журнальной версии компьютера? Emu80 отображает циклическую последовательность 00 00 00 FF. Чем это обусловлено? Что будет если попытаться записывать туда данные на реальном компьютере в стандартной конфигурации?
Зависит от того, есть там физический порт ВВ55 или его нет. Если нет, то смотри п.1


Что должно считываться с адресов F8003, F8007 и т.д., то есть адресов куда проецируется порт управления штатной микросхемы параллельного порта (КР580ВВ55А)?
Во-первых, адрес превышает адресное пространство ВМ80, но я полагаю это ошибка. Во-вторых, что считывается из РУС ВВ55 вроде как есть в букваре на 8255.


Как на реальном Специалисте ведут себя команды работы с прерываниями: DI, EI, HLT? Существуют ли какие-то устройства для Специалиста, которые будут реагировать на эти команды?
Как и должны - как NOP, ибо сигнал INTE не используется. Что касается HLT, то по идее она должна сделать вечный стоп, ведь прерываний на Специалисте нет. Я только 1 раз подавал эту команду на кружке и тогда у нас сгорела ВВ55. Препод сказал, что это просто совпадение, но мыслей повторить эксперимент не возникало. Сейчас я понимаю, что это глупо и реально совпадение, но ведь при останове процессор бросает шину, а она не подтянута, и дешифратор мог что-то сделать не так. Что касается INTE, то можно подмешать к звуку и использовать музыкальный софт от РКшки. Так же есть информация, что один из клонов Специалиста использует INTE как сигнал начального пуска.


Как на реальном Специалисте ведут себя команды работы с портами IN xx и OUT xx? Что будет если считать данные с несуществующего порта? Существуют ли какие-то устройства для Специалиста, которые будут реагировать на эти команды?
Как LDA где адрес состоит из двух одинаковых байт. Например, IN 0F0H = LDA 0F0F0H. А OUT 0F3H = STA 0F3F3H. Некоторый софт использует это для сокращения времени доступа к порту и/или уменьшению размера программы.


Процессор Специалиста работает с частотой 2 МГц. Телевизор отображает 50 кадров в секунду. Я считаю, что между кадрами укладывается (2 * 1 000 000 / 50) тактов процессора. Насколько мои вычисления корректны?
Откуда мне знать? Ты можешь просто посмотреть до скольки будет считать счётчик синхрогенератора. Там вроде строка считает до 64 а кадры до 312. Каждый такт H это 2 такта процессора (и, соответственно, RAS/CAS). Т.е., всего 128*312=39936. Как видишь, кадровая у Специалиста не 50Гц, а чуть выше, потому что 15625/312=50.08. Для получения стандартных 50 надо делать 312,5 или интерлейс в 312+313.


Я правильно понимаю, что у Специалиста отсутствует какая-либо привязка начала построения кадра к чему-либо. Или всё-таки кадр строится по каким-то временнЫм правилам?
Никакой привязки нет. Да и в Спектруме привязка условная, через VInt. В МХе есть привязка к таймеру. А вот в Эрике вроде что-то было, но это не точно, не моя тема.

Serg6845
26.09.2023, 21:07
Что правильно должно считываться по адресам С000-EFFF, если микросхема ПЗУ не установлена? Emu80 отображает FF, как будто бы установлены чистые микросхемы памяти. Это корректное поведение? Оно обусловлено схемотехникой компьютера?

в журнальном варианте насколько я помню - читается 82 (слово состояния процессора, запомненное на емкости висящей в воздухе шины данных).


Что должно считывается по адресам в диапазоне F000-F7FF в журнальной версии компьютера? Emu80 отображает циклическую последовательность 00 00 00 FF. Чем это обусловлено? Что будет если попытаться записывать туда данные на реальном компьютере в стандартной конфигурации?


в совсем журнальной конфигурации (МК №2 1987) - то же что из пустой памяти, там ничего нет. позже туда повесили второй ВВ55 для программатора - судя по всему Emu80 его эмулирует.


Что должно считываться с адресов F8003, F8007 и т.д., то есть адресов куда проецируется порт управления штатной микросхемы параллельного порта (КР580ВВ55А)?


зависит от того как сконфигурирован ВВ55 и что ему на входы приходит, за исключением адресов с 11 в младших разрядах - там пустая память (РУС ВВ55 не читается, только запись)
и в адресах нолик лишний.


Как на реальном Специалисте ведут себя команды работы с прерываниями: DI, EI, HLT? Существуют ли какие-то устройства для Специалиста, которые будут реагировать на эти команды?

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


Как на реальном Специалисте ведут себя команды работы с портами IN xx и OUT xx? Что будет если считать данные с несуществующего порта? Существуют ли какие-то устройства для Специалиста, которые будут реагировать на эти команды?


будет операция с памятью по соответствующему адресу (например IN/OUT 80 приведет к чтению/записи по адресу 8080). про устройства - см. предыдущий пункт.


Процессор Специалиста работает с частотой 2 МГц. Телевизор отображает 50 кадров в секунду. Я считаю, что между кадрами укладывается (2 * 1 000 000 / 50) тактов процессора. Насколько мои вычисления корректны?


считать надо, насколько там ровно 50Гц. навскидку уже не помню.


Я правильно понимаю, что у Специалиста отсутствует какая-либо привязка начала построения кадра к чему-либо. Или всё-таки кадр строится по каким-то временнЫм правилам?

правильно. никакой привязки нет.

CityAceE
26.09.2023, 21:44
HardWareMan, Serg6845, большое спасибо за ответы! Буду переваривать! Вернусь с наводящими и дополнительными вопросами ;)

CityAceE
27.09.2023, 12:25
Итак, переварил то, что мне ответили. Что-то пришлось догуглиливать, но в целом картина прояснилась. Я сейчас отвечу на всё, как понял, а вы меня поправьте, если я где-то ошибся.

1. Что правильно должно считываться по адресам С000-EFFF, если микросхема ПЗУ не установлена? Emu80 отображает FF, как будто бы установлены чистые микросхемы памяти. Это корректное поведение? Оно обусловлено схемотехникой компьютера?

По любому адресу, к которому не подключено ни ОЗУ, ни ПЗУ, ни какое-то другое устройство, любой командой, работающей с памятью (например, LDA adr) должен считываться байт 0x82. Но есть одно исключение: если ту же самую область пытаться считать командой IN xx, то в этом случае будет считываться байт 0x42.

Байты 0x82 и 0x42 представляют из себя слово состояния (Status Word) выдаваемое на шину данных в первом такте машинного цикла и сопровождаемом сигналом SYNC.

Остаётся вопрос: почему это слово разное для команды IN и остальных команд?

2. Что должно считывается по адресам в диапазоне F000-F7FF в журнальной версии компьютера? Emu80 отображает циклическую последовательность 00 00 00 FF. Чем это обусловлено? Что будет если попытаться записывать туда данные на реальном компьютере в стандартной конфигурации?

В стандартном варианте в эту область ничего не подключено. И поэтому оттуда должно считываться 0x82 (0x42), как описано в первом вопросе.

3. Что должно считываться с адресов F803, F807 и т.д., то есть адресов куда проецируется порт управления штатной микросхемы параллельного порта (КР580ВВ55А)?

Результат считывания сложный и зависит от содержимого других регистров микросхемы. Эту информацию необходимо получить из документации по КР580ВВ55А (i8255).

b2m вот здесь (https://zx-pk.ru/threads/8634-vektor-06ts-emulyatsiya.html?p=943274&viewfull=1#post943274) пишет: "По поводу РУС: была информация, что оттуда читается последнее записанное в любой из портов А,В,С значение. Тест подтверждает это, но однако показывает, что если порты настроены на ввод, то оттуда читается FF. Можно поправить в эмуляторе для аутентичности (у меня пока возвращается ноль). Что возвращать, когда порт настроен на ввод, а схемно он предназначен на вывод - непонятно."

4. Как на реальном Специалисте ведут себя команды работы с прерываниями: DI, EI, HLT? Существуют ли какие-то устройства для Специалиста, которые будут реагировать на эти команды?

В схеме Специалиста не задействован сигнал процессора INTE, отвечающий за обработку прерываний. Поэтому в Специалисте команды DI и EI будут работать просто, как NOP. Команда HLT остановит процессор и он будет ждать сигнала INTE. Но так как, INTE не задействован, процессор ничего не дождётся и будет "висеть". Вывести его из этого состояния можно только сбросом компьютера.

5. Как на реальном Специалисте ведут себя команды работы с портами IN xx и OUT xx? Что будет если считать данные с несуществующего порта? Существуют ли какие-то устройства для Специалиста, которые будут реагировать на эти команды?

На Специалисте команды IN и OUT работают точно так же, как и обычные команды работы с памятью. Команда IN считывает в регистр А значение из ячейки памяти, адрес которой формируется из байта, указанного в команде IN. Этот байт помещается и в младший, и в старший байт адреса. Команда OUT записывает значение регистра A в адрес, сформированный по той же схеме, что и в команде IN.

Команда IN AB аналогична команде LDA ABAB
Команда OUT AB аналогична команде STA ABAB

Вопрос: Что из себя представляют полноценные порты для процессора 8080? Они организуются какой-то дополнительной микросхемой? 8080 может обслуживать только 256 разных портов?

6. Процессор Специалиста работает с частотой 2 МГц. Телевизор отображает 50 кадров в секунду. Я считаю, что между кадрами укладывается (2 * 1 000 000 / 50) тактов процессора. Насколько мои вычисления корректны?

Частота кадров Специалиста не ровно 50 Hz, а 50,08 Hz. Это значение получается, если частоту строчной развертки, которая составляет 15625 Hz, поделить на количество строк, формируемых Специалистом - 312.
15625 Hz / 312 строк = 50,08 кадров в секунду

Один кадр строится за 39936 тактов процессора. Это значение получается, если умножить количество строк (312) одного кадра на количество тактов, которое тратится на формирование одной строки (128)
128 тактов * 312 строк = 39936 тактов

Вопрос: Правильно ли я понимаю, что частота кадров 50,08 - это константа? Если увеличивать частоту процессора, то в компьютере, который сделан правильно и его схемотехника учитывает все эти повышения (например, замена i8080 на Z80), частота кадров так и останется равной 50,08 Hz, а количество тактов между началами формирования двух кадров будет увеличено кратно множителю, на который будет увеличена частота процессора?

7. Я правильно понимаю, что у Специалиста отсутствует какая-либо привязка начала построения кадра к чему-либо. Или всё-таки кадр строится по каким-то временнЫм правилам?

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

CityAceE
27.09.2023, 15:06
Далее для собственного удобства я буду оперировать мнемониками Z80, так как мнемоники 8080 я забыл и сейчас они для меня совсем непонятны.

Прошу знающих людей указать на неточности, если они есть, а также ответить на вопрос.

У Специалиста область ПЗУ начинается с адреса 0xC000. Соответственно, после включения компьютера для подготовки его к работе должна начать выполняться программа из ПЗУ, то есть с адреса 0xC000. Однако процессор Intel 8080 (КР580ВМ80А) после сброса передаёт управление на адрес 0x0000. И тем не менее код, находящийся в ПЗУ по адресу 0xC000, запускается и работает.

Начало кода в ПЗУ выглядит так:



0xC000: JP 0xC003
0xC003: LD SP, 0x7FFF
0xC006: LD A, 0x82
0xC008: LD (0xFF03), A
0xC00B: JP 0xC4444


На первый взгляд команда JP 0xC003 совсем лишняя, так как она всего лишь передаёт управление на следующую строку. Однако именно эта команда и передаёт управление на код, размещающийся в ПЗУ. Дело в том, что сразу после включения компьютера эта команда как раз и находится по адресу 0x0000. То есть как раз там, куда передаёт управление процессор сразу после его сброса.

Как же так получается? А всё дело в том, что после сброса компьютера ПЗУ помимо своего стандартного положения по адресу 0xC000 дополнительно проецируется в начальную область памяти, начиная с адреса 0x0000. Таким образом, код, зашитый в ПЗУ одновременно находится и по адресу 0xC000, и по адресу 0x0000.

За переключение расположения ПЗУ отвечает штатная микросхема программируемого параллельного интерфейса Intel 8255 (КР580ВВ55А).

В коде ПЗУ две команды, следующие за командой установки стека, отключают это дублирование ПЗУ в ОЗУ и переводят память в штатный режим:



0xC006: LD A, 0x82
0xC008: LD (0xFF03), A


Эта операция обратима. При большом желании можно затем и вручную снова включить ПЗУ в область ОЗУ, подав следующие команды:



LD A, 0x10 ; 00010000 - включен 4-й бит порта С (PC4)
LD (0xFF02), A


Остаётся вопрос, на который мне не удалось найти ответа, а принципиальная схема компьютера мне ни о чём не говорит. Какой объём памяти после включения Специалиста дублируется с 0xC000 на адрес 0x0000? Вся вторая половина адресного пространства, то есть 0xC000-0xFFFF? Только область Загрузчика - 0xC000-0xС7FF? Какой-то другой вариант?

ivagor
27.09.2023, 15:28
Байты 0x82 и 0x42 представляют из себя слово состояния программы, оно же PSW
Извините за занудство, но PSW - Processor Status Word. А с упомянутыми байтами речь не о нем, а о Status Word выдаваемом на шину данных в первом такте машинного цикла и сопровождаемом сигналом SYNC.

Если собираешься эмулировать схему начального пуска, то возможно стоит учесть, что кроме оригинала есть и другие варианты. Доработка до 8 цветов (МК 90/8) сопровождалась заменой управления начальным пуском с бита ВВ55 на выход INTE процессора (+ модификация ПЗУ). И для такого восьмицвета EI и DI не просто NOP. А у современных клонов альтернативный (более распространенный и в других компьютерах) вариант, который позволяет и восьмицветом пользоваться и прерывания не трогать.
Ну и раз речь коснулась EI и DI, то можно вспомнить и про особенность HALT в орионе и скорее всего в оригинальном специалисте (начиная с этого сообщения (https://zx-pk.ru/threads/27597-syabr-sborka-i-naladka.html?p=1169495&viewfull=1#post1169495), подробности дальше). fifan с присущей ему тактичностью вместо переноса в более подходящее место просто обрубил дискуссию, но вся информация там есть, кроме результата проверки на реале. И надо еще раз подчеркнуть, что для современных клонов типа сябра это не актуально.

CityAceE
27.09.2023, 17:55
Извините за занудство, но PSW - Processor Status Word. А с упомянутыми байтами речь не о нем, а о Status Word выдаваемом на шину данных в первом такте машинного цикла и сопровождаемом сигналом SYNC.
Спасибо! Отредактировал своё сообщение, откорректировав информацию прямо процитировав эту информацию. А за одно задал новый вопрос :) Я хочу потом, когда всё забуду, этим постом пользоваться в качестве справки. Поэтому для себя же всё и разжёвываю, пока знаю и помню.


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


Доработка до 8 цветов (МК 90/8) сопровождалась заменой управления начальным пуском с бита ВВ55 на выход INTE процессора (+ модификация ПЗУ). И для такого восьмицвета EI и DI не просто NOP. А у современных клонов альтернативный (более распространенный и в других компьютерах) вариант, который позволяет и восьмицветом пользоваться и прерывания не трогать.
И за это тоже спасибо! Я как раз перечитывая тему про эмулятор Titus'а наталкивался на эту информацию. Буду тоже держать её в голове. Или на листочке для надёжности. Хотя эту тему я как завёл, чтобы ничего потом не забыть.


Ну и раз речь коснулась EI и DI, то можно вспомнить и про особенность HALT в орионе и скорее всего в оригинальном специалисте (начиная с этого сообщения, подробности дальше). fifan с присущей ему тактичностью вместо переноса в более подходящее место просто обрубил дискуссию, но вся информация там есть, кроме результата проверки на реале. И надо еще раз подчеркнуть, что для современных клонов типа сябра это не актуально.
Ого! А вот эта информация вообще для меня в новинку! Спасибо! Пользуясь своим служебным положением вынес то обсуждение в отдельную тему (https://zx-pk.ru/threads/35306-osobennosti-vypolneniya-komandy-hlt-na-spetsialiste.html). Очень надеюсь, что кто-то сможет проверить на реальном Специалисте.

ivagor, а можно такой же тест (https://zx-pk.ru/threads/8634-vektor-06ts-emulyatsiya.html?p=943268&viewfull=1#post943268) и для Специалиста собрать?

Serg6845
27.09.2023, 18:48
Байты 0x82 и 0x42 представляют из себя слово состояния (Status Word) выдаваемое на шину данных в первом такте машинного цикла и сопровождаемом сигналом SYNC.

Остаётся вопрос: почему это слово разное для команды IN и остальных команд?


Рекомендую первоисточник (https://datasheetspdf.com/pdf/1328908/Intel/8080/1) стр.71


3. Что должно считываться с адресов F803, F807 и т.д., то есть адресов куда проецируется порт управления штатной микросхемы параллельного порта (КР580ВВ55А)?

Результат считывания сложный и зависит от содержимого других регистров микросхемы. Эту информацию необходимо получить из документации по КР580ВВ55А (i8255).

это я в прошлый раз невнимательно вопрос прочитал. если речь только о регистре управления - то см. тот же первоисточник стр. 182 - там это называется "ILLEGAL CONDITION", по факту - может быть что угодно, плюс еще зависеть от производителя микросхемы. это для 8255. а вот если ППА 82C55 - то будет прочитано то что было записано в регистр управления.


Вопрос: Что из себя представляют полноценные порты для процессора 8080? Они организуются какой-то дополнительной микросхемой? 8080 может обслуживать только 256 разных портов?

да на оба вопроса. микросхема называется 8228 (8238) = 580ВК28/ВК38. первоисточник стр. 69



Один кадр строится за 39936 тактов процессора. Это значение получается, если умножить количество строк (312) одного кадра на количество тактов, которое тратится на формирование одной строки (128)
128 тактов * 312 строк = 39936 тактов

Вопрос: Правильно ли я понимаю, что частота кадров 50,08 - это константа? Если увеличивать частоту процессора, то в компьютере, который сделан правильно и его схемотехника учитывает все эти повышения (например, замена i8080 на Z80), частота кадров так и останется равной 50,08 Hz, а количество тактов между началами формирования двух кадров будет увеличено кратно множителю, на который будет увеличена частота процессора?


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

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



За переключение расположения ПЗУ отвечает штатная микросхема программируемого параллельного интерфейса Intel 8255 (КР580ВВ55А).

В коде ПЗУ две команды, следующие за командой установки стека, отключают это дублирование ПЗУ в ОЗУ и переводят память в штатный режим:



0xC006: LD A, 0x82
0xC008: LD (0xFF03), A


Эта операция обратима.

и по большому счету - бессмысленна. пропадает доступ к основному ОЗУ, остается только область C000-FFFF.


При большом желании можно затем и вручную снова включить ПЗУ в область ОЗУ, подав следующие команды:



LD A, 0x10 ; 00010000 - включен 4-й бит порта С (PC4)
LD (0xFF02), A


Остаётся вопрос, на который мне не удалось найти ответа, а принципиальная схема компьютера мне ни о чём не говорит. Какой объём памяти после включения Специалиста дублируется с 0xC000 на адрес 0x0000? Вся вторая половина адресного пространства, то есть 0xC000-0xFFFF? Только область Загрузчика - 0xC000-0xС7FF? Какой-то другой вариант?

C000-FFFF - это верхняя четверть адресного пространства. при 1 на РС4 (журнальный вариант) - она повторяется 4 раза - 0000-3FFF, 4000-7FFF, 8000-BFFF, C000-FFFF.

ivagor
27.09.2023, 19:05
Остаётся вопрос: почему это слово разное для команды IN и остальных команд?
Если это новый вопрос, то варианты машинных циклов и соответствующие им слова состояния можно посмотреть в мануале intel или в советских книжках. Интересный момент - в мануале intel 75 года 10 вариантов, в книге
Щелкунов Н.Н., Дианов А.П. Микропроцессорные средства и системы. М. Радио и связь, 1989
- 11. Надо поискать более свежий мануал, но 11й в книжке - второй и третий циклы подтверждения прерывания, для специалиста это, скажем так, не особо критично.


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

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


микросхема называется 8228 (8238) = 580ВК28/ВК38
Или на мелкой логике.

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

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

Посмотрел мануал 79 года (там 8080 и 8085) - остались 10 типов машинных циклов.

HardWareMan
27.09.2023, 19:32
В схеме Специалиста не задействован сигнал процессора INTE, отвечающий за обработку прерываний. Поэтому в Специалисте команды DI и EI будут работать просто, как NOP. Команда HLT остановит процессор и он будет ждать сигнала INTE. Но так как, INTE не задействован, процессор ничего не дождётся и будет "висеть". Вывести его из этого состояния можно только сбросом компьютера.
Не следует путать выводы INT и INTE. Вывод INT является входом и именно через него формируется запрос прерывания. В Специалисте он удерживается в пассивном состоянии. А вывод INTE является выходом, который отображает состояние внутреннего триггера разрешения прерывания и сигнал на этом выводе можно переключать командами DI и EI. В РК86 его используют как однобитный порт для вывода звука, например.


Если это новый вопрос, то варианты машинных циклов и соответствующие им слова состояния можно посмотреть в мануале intel или в советских книжках. Интересный момент - в мануале intel 75 года 10 вариантов, в книге
Щелкунов Н.Н., Дианов А.П. Микропроцессорные средства и системы. М. Радио и связь, 1989
- 11. Надо поискать более свежий мануал, но 11й в книжке - второй и третий циклы подтверждения прерывания, для специалиста это, скажем так, не особо критично.
Достаточно перед глазами держать ту самую табличку из вышеупомянутого букваря:
https://i.ibb.co.com/ssMZDJj/image.png
Имея на руках имена каждого бита становится понятно, в каких состояниях может находится процессор. Один важный факт: при исполнении команды DAD процессор формирует 3 машинных цикла, однако во 2м и 3м он слово состояния не выдаёт. Для этого в схеме есть специальный блокирующий сигнал.
https://i.ibb.co.com/Fh3h2fX/image.png
https://i.ibb.co.com/brrxMhh/image.png

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


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

CityAceE
28.09.2023, 08:31
Ещё раз огромное спасибо всем, кто отвечает и вносит уточнения! Для меня лично это просто бесценная информация!


если речь только о регистре управления - то см. тот же первоисточник стр. 182 - там это называется "ILLEGAL CONDITION", по факту - может быть что угодно, плюс еще зависеть от производителя микросхемы. это для 8255. а вот если ППА 82C55 - то будет прочитано то что было записано в регистр управления.
В общем, на текущий момент понятно, что результаты могут быть разные в зависимости от производителя микросхемы программируемого параллельного интерфейса. Информация везде противоречивая. Один из вариантов я процитировал в ответе с своём втором сообщении этой темы. А чтобы поставить окончательную точку требуются тесты на реальном железе. Здесь бы сильно помог тест ivagor'а, но у него, к сожалению, не возникло желания его сделать для Специалиста.


пропадает доступ к основному ОЗУ, остается только область C000-FFFF.
Ну, раз так себя ведёт реальный компьютер, то это обязательно нужно учитывать.


C000-FFFF - это верхняя четверть адресного пространства. при 1 на РС4 (журнальный вариант) - она повторяется 4 раза - 0000-3FFF, 4000-7FFF, 8000-BFFF, C000-FFFF.
Ну да, я конечно же описАлся: не половина, а четверть. Ещё одним пробелом стало меньше!

На всякий случай уточню: я же правильно понимаю, что в этом режиме, если стоит только ПЗУ Загрузчика, то по адресам 0800-3FFF, 4800-7FFF, 8800-BFFF будут считываться байты 0x82 (0x42)?


Собрать можно, но я сам лучше не буду. У специалиста надо осторожнее подойти к тому, что писать в ВВ55, по крайней мере на оригинальном надо учитывать начальный пуск. Для желающих исходник есть, значительную часть относящуюся к вектору надо выкинуть. Ну или по аналогии написать свой.
Ужасно жаль! Это значит только одно: такого теста на Специалисте не появится. Его попросту некому будет сделать! Несмотря на наличие исходников. Нужно отлично понимать как работает i8255 и понимать мнемоники i8080. Ну и иметь мотивацию. Вот у тебя как раз сложности с третьим условием. А у меня с первыми двумя. А всем остальным это вообще не нужно.


Не следует путать выводы INT и INTE.
ОК. Спасибо за уточнения! Поправлю ответ и дам на проверку :)


Достаточно перед глазами держать ту самую табличку из вышеупомянутого букваря:
Хорошо, что носом ткнул именно в эту картинку. Я-то этот мануал пытался читать, но сходу не понял, что на этой картинке и пропустил её. А вот теперь всё встало на свои места! Ну и по ходу возник очередной вопрос. Сейчас при неустановленной памяти или устройства мы можем прочитать два типа машинного цикла: 2 -Memory Read (0x82) и 6 - Input Read (0x42). Существуют ли способы получить и остальные значения, или всё это всегда остаётся исключительно за кадром?


Причём, используется особенность ВВ55: она обнуляет регистр вывода при настройке порта на вывод. Т.е., любой порт, настраиваемый на вывод через РУС, автоматически обнуляется. Именно поэтому для НП в Спеце достаточно штатной настройки ППА согласно схеме (НП находится в старшем ниббле порта С, где вывод на мафон и прочие биты на вывод).
И ещё в тему i8255 и начальной инициализации компьютера для моего личного понимания. Я правильно понимаю, что конфигурацией памяти занимается исключительно микросхема 8255? То есть, когда после сброса ПЗУ дублируется в ОЗУ - это результат такого конфигурирования портов 8255 (верхняя половина порта С в режиме чтения, а PC4 устанавливается в единицу), а не что-то ещё? Ну, типа, что так память организована по-умолчанию, а 8255 потом уже конфигурирует её как надо по командам из ПЗУ?

CityAceE
28.09.2023, 08:40
Ещё очень хочу с вашей помощью уяснить вопрос с пропорциями пикселя Специалиста.

Разрешение Специалиста 384x256 (384 / 256 = 1.5)
Стандартное соотношение кадра 4:3 (4 / 3 = 1.33)

Очевидно, что пиксель на Специалисте не квадратный. Для того, чтобы пиксель был квадратным у него должно было быть разрешение 384x288 или 341x256.

Вот здесь (http://www.nedopc.org/forum/viewtopic.php?p=108384#p108384) я нашел такую информацию от разработчика Специалиста (А. Волкова):



Штатная тактовая частота для процессора К580ИК80 — 2 МГц : http://ru.wikipedia.org/wiki/КР580ВМ80А
565ру3 Время цикла: 500нс : http://www.155la3.ru/datafiles/k565ru3.pdf
Параметры стандартной развертки : http://dvo.sut.ru/libr/tvivt/i100_tv/1.htm (https://web.archive.org/web/20140213213713/http://dvo.sut.ru/libr/tvivt/i100_tv/1.htm)
длительность активной части строки=64-12=52мкс
число видимых строк =287
если пропорции экрана 4/3 , то на 52мкс приходится 287/3*4=382.666 квадратных точек (кварц 7.359мгц)
ближайшие целые значения 7 и 8 мгц.
По понятным причинам 8мгц удобнее: 48(32+16)=384
— 2 МГц (К580ИК80) =8/2/2/2
-565ру3 Время цикла: 500нс =8/2/2
Сделать регенерацию счетчиком по строкам не получится.
Выбираем число строк 256<287 ( равно количеству циклов регенерации озу).
неравномерность процесса регенерации : на кадровом гасящем интервале регенерируются часть адресов
а затем регенерация начинается с нулевого адреса. Задержка регенерации 3.5мс не имеет значения.
Период регенерации 20мс.
требуемый объем озу - 12к.
Чтобы обеспечить ортогональность и непрерывность адресации экрана - ячейки нумеруются сверху вниз.
После обращения процессора к памяти ВСЕГДА остаются свободные циклы памяти
а на 8бит экрана приходится 2 цикла озу.
Следовательно поставив буфер можно иметь прозрачную память для процессора и дисплей без помех
на изображении (а не так ,как было на многих эвм тех лет).
Некоторое искажение пропорций корректировалась настройками телевизора (к тому же эти телевизоры
использовались только с компьютером).


Отсюда я делаю вывод, возможно неправильный, что экран Специалиста вписан в разрешение 384x287. То есть сверху и снизу остаются чёрные полосы. Но при таком вариант пиксель будет квадратным, а тут говорится про искажения. Как я понимаю, количество строк - это постоянная величина. Мы не можем по своему желанию делать количество строк больше или меньше, но зато мы можем менять количество пикселей в строке. То есть мы можем чуть сплюснуть изображение по вертикали, чтобы 384x256 приобрели пропорции 3:4. И вот тут я снова запутался. Чёрные полосы сверху и снизу всё-таки должны быть, если количество строк неизменно. Но тогда и сплющивать ничего не нужно. Или я ошибаюсь с константой на количество строк? В общем, у меня вопросов больше, чем ответов. Проясните пожалуйста!

Чтобы стало совсем понятно, что я хочу выяснить: Есть разрешение 1024x768 (3:4) (или 640x480, или 800x600). Как нужно отмасштабировать экран Специалиста и полностью вписать его в это разрешение так, чтобы сохранить пропорции пикселя оригинального компьютера? То есть по большому счёту ответ сводится к тому, нужны чёрные полосы сверху и снизу или нет.

Serg6845
28.09.2023, 09:11
Ну да, я конечно же описАлся: не половина, а четверть. Ещё одним пробелом стало меньше!

На всякий случай уточню: я же правильно понимаю, что в этом режиме, если стоит только ПЗУ Загрузчика, то по адресам 0800-3FFF, 4800-7FFF, 8800-BFFF будут считываться байты 0x82 (0x42)?


точнее по адресам 0800-37FF, 4800-77FF, 8800-B7FF. в верхних 2к в каждом куске будет продублирован 8255.


И ещё в тему i8255 и начальной инициализации компьютера для моего личного понимания. Я правильно понимаю, что конфигурацией памяти занимается исключительно микросхема 8255? То есть, когда после сброса ПЗУ дублируется в ОЗУ - это результат такого конфигурирования портов 8255 (верхняя половина порта С в режиме чтения, а PC4 устанавливается в единицу), а не что-то ещё? Ну, типа, что так память организована по-умолчанию, а 8255 потом уже конфигурирует её как надо по командам из ПЗУ?

да, за конфиграцию памяти в оригинале отвечает исключительно PC4.
по сбросу все порты 8255 настраиваются на ввод. а поскольку к PC4 подключен вход ТТЛ микросхемы - это равнозначно лог. 1 (хотя это bad design - надо бы хотя бы резистором к плюсу подтянуть).
ну а дальше порт C настраивается на вывод (командами из ПЗУ) - и на PC4 устанавливается лог. 0.

ivagor
28.09.2023, 09:17
не возникло желания его сделать для Специалиста
У тебя есть реал (какой именно?), на котором хочешь тестировать или позитивно настроенный знакомый с реалом?

вопрос с пропорциями пикселя Специалиста
Для ТВ стандарта с 625 строками пиксельклок обеспечивающий квадратный пиксель - 14.75 МГц (можно найти много где, например здесь (https://pdf1.alldatasheet.com/datasheet-pdf/view/466394/TI1/TVP5010.html)). С прогрессивной разверткой будет пропорционально меньше. Получается PAR специалиста 1/(8/(14.75*312/625))=0.9204 или грубо 12:13. Но это на правильно настроенном телевизоре, желательно без возможности легко (для обычного зрителя) управлять размерами экрана (если такая возможность есть - ею наверняка пользовались). При наличии регулировок PAR определяется вписыванием изображения в экран и вкусами регулировщика.
Вобще вопрос с разверткой специалиста и пропорциями тоже стоит привязывать к конкретной модели (например оригиналу), а то у современных клонов развертки бывают разные.

CityAceE
28.09.2023, 10:35
в верхних 2к в каждом куске будет продублирован 8255.
Ну да, это само собой. Спасибо за уточнение!


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


У тебя есть реал (какой именно?), на котором хочешь тестировать или позитивно настроенный знакомый с реалом?
У меня есть мой Лик. Не знаю как оно туда попало, но фото именно моего компа иллюстрирует статью на Wiki (https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BA_(%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C %D1%8E%D1%82%D0%B5%D1%80)). Проблема в том, что Лик сейчас лежит на складе вместе с другим моим барахлом, которое осталось не забранным после переезда. Но пока есть запал, я настроен в ближайшее время съездить туда, привезти его домой и подключить к ТВ. Я его очень давно не включал, но очень надеюсь, что компьютер всё ещё работает. Иначе это будет катастрофой!

Кстати, у меня там ВВ55 в панельке стоит. Сам её туда впраиал в своё время, так как они почему-то у меня горели. Не помню какая там сейчас стоит микросхема, но у себя в закромах нашёл UM82C55A и КР580ВВ55А (дата 9002). С какой-то из них игра SkyScraper работала, а с какой-то сбрасывалась (возможно, с UM). Так что если всё запустится, то я смогу тест прогнать на разных вариантах ППИ.


Получается PAR специалиста 1/(8/(14.75*312/625))=0.9204 или грубо 12:13.
Спасибо!

ivagor
28.09.2023, 11:08
Кстати, у меня там ВВ55 в панельке стоит. Сам её туда впраиал в своё время, так как они почему-то у меня горели.
У специалиста весьма своеобразная клавиатура и не исключено, что если постараться, то с ее помощью можно повредить вв55. Это еще уменьшает мотивацию для адаптации теста.
Что конкретно ты хочешь протестировать применительно к ВВ55? Данных из справочников или из той векторовской темы недостаточно? Как вариант можно попробовать подцепить ВВ55 куда-нибудь "сбоку" и протестировать отдельно, чтобы она не влияла на работу компьютера и не подвергалась (пусть даже гипотетическому) риску.

HardWareMan
28.09.2023, 11:24
В общем, на текущий момент понятно, что результаты могут быть разные в зависимости от производителя микросхемы программируемого параллельного интерфейса. Информация везде противоречивая. Один из вариантов я процитировал в ответе с своём втором сообщении этой темы. А чтобы поставить окончательную точку требуются тесты на реальном железе.
Есть принципиальная разница даже перед ранним вариантом ИК55 и поздним ВВ55. ИК55 при конфигурировании порта на вывод при чтении этого порта всегда возвращает 0FFH. ВВ55 возвращает то, что было записано в порт.


Существуют ли способы получить и остальные значения, или всё это всегда остаётся исключительно за кадром?
Что значит - получить значения? Это индикатор текущего состояния/намерения процессора при обращении к шине.


Я правильно понимаю, что конфигурацией памяти занимается исключительно микросхема 8255? То есть, когда после сброса ПЗУ дублируется в ОЗУ - это результат такого конфигурирования портов 8255 (верхняя половина порта С в режиме чтения, а PC4 устанавливается в единицу), а не что-то ещё? Ну, типа, что так память организована по-умолчанию, а 8255 потом уже конфигурирует её как надо по командам из ПЗУ?
Чтобы понять сей феномен, обратимся к журнальной схеме:
https://i.ibb.co.com/qNktQqN/image.pnghttps://i.ibb.co.com/D1MbsdV/image.png
Тот же самый узел у Экспресса:
https://i.ibb.co.com/6ByzPc7/image.png
При поступлении сброса ВВ55 настраивается автоматически на ввод по всем портам. Серия К155 висящий вход всегда принимает за лог.1, поэтому вход аналогичен лог.1. Этот сигнал блокирует выбор ОЗУ (в журнальном варианте блокируя A14 и A15 на лог.1, что даёт адреса 0C000H-0FFFFH). Поэтому срабатывает JMP 0C003H, первая команда в ПЗУ, перемещая PC процессора в область посадки ПЗУ. А затем команда настройки ППА формирует лог.0 на сигнале НП и ОЗУ подключается обратно. У Экспресса работа НП происходит схожим образом, только там блокируется сам дешифратор, а не адреса. Смысл абсолютно тот же. И вот тут главное отличие от РКшек и Орионов: на НП нет отдельного триггера, который есть в РКшках и Орионе. Понятное дело, что это экономия в случае со Специалистом, но это накладывает определённые ограничения при работе с ППА. Единственным
Специалистом, лишённым сего недостатка является МХ, дешифратор которого построен так, что НП не нужен, ибо страница с ПЗУ там подключается с адреса 0000Н. Ну и в новоделах тоже: в моём МХ2 применяется метод от МХа, а в Восточном Экспрессе установлен внешний триггер НП.

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


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

CityAceE
28.09.2023, 11:34
У специалиста весьма своеобразная клавиатура и не исключено, что если постараться, то с ее помощью можно повредить вв55. Это еще уменьшает мотивацию для адаптации теста.
Я за давностью лет уже не помню почему они горели. Но совершенно точно не просто так, а после какого-то внешнего вмешательства - скорее всего после попыток подключить к ним внешние устройства типа принтера или программатора.


Что конкретно ты хочешь протестировать применительно к ВВ55? Данных из справочников или из той векторовской темы недостаточно?
Хочется иметь рабочий инструмент, чтобы им можно было протестировать собственный (и не только) эмулятор и потом сравнить результат с реальным железом. Например, сейчас я взялся за эмуляцию клавиатуры, и мне неоценимую помощь оказывает тест клавиатуры, который ты написал!


Как вариант можно попробовать подцепить ВВ55 куда-нибудь "сбоку" и протестировать отдельно, чтобы она не влияла на работу компьютера и не подвергалась (пусть даже гипотетическому) риску.
Боюсь, что сейчас не осилю такое подцепление, хотя когда-то у меня на Лике ко второй ВВ55 был подключен принтер. Но если вдруг во время теста сгорит штатная микросхема, то она у меня в панельке - просто заменю и всё. Они оказывается до сих пор свободно продаются (https://www.chipdip.ru/product/kr580vv55a).

Serg6845
28.09.2023, 11:37
У специалиста весьма своеобразная клавиатура и не исключено, что если постараться, то с ее помощью можно повредить вв55.


Подтвержденный факт. только дело не в схеме клавиатуры, а в привычках пользователя. у моего знакомого в те времена (начало 90-х) постоянно выгорал ВВ55. у меня - впаян в плату и ни разу не менялся с 89 года. синтетическая одежда не рулит ни разу. статикой выносит.
ну либо надо клавиатуру делать с заземленной прослойкой. или все клавиатурные входы диодами обвешивать.

CityAceE
28.09.2023, 11:44
Что значит - получить значения? Это индикатор текущего состояния/намерения процессора при обращении к шине.
Ну, как-то программно считать это значение, типа как это происходит в случае с неустановленной памятью.


При поступлении сброса ВВ55 настраивается автоматически на ввод по всем портам. Серия К155 висящий вход всегда принимает за лог.1, поэтому вход аналогичен лог.1. Этот сигнал блокирует выбор ОЗУ (в журнальном варианте блокируя A14 и A15 на лог.1, что даёт адреса 0C000H-0FFFFH).
Спасибо за разъяснение!


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

ivagor
28.09.2023, 12:17
Оквадратить пиксель пытались в Орионе, давая пиксельклок 10МГц.
У ориона пиксель еще менее квадратный, чем у специалиста PAR=1/(10/(14.75*312/625))=0.7363 или грубо 3:4. На мой взгляд повышение пиксельклока ориона было лишь побочным эффектом от сохранения схемы выборки видео при повышении частоты. А главной задачей было ускорение компьютера за счет повышения частоты проца. PAR 3:4 дал достаточно специфичное отображение спековских игр, когда их стали массово портировать после установки z80.

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

HardWareMan
28.09.2023, 13:26
Ну, как-то программно считать это значение, типа как это происходит в случае с неустановленной памятью.
Это сигналы для оборудования, зачем программе об этом знать?


Да, подтверждаю, вылазил! Причём никакими регулировками телевизора мне не удавалось сдвинуть изображение моего Лика вправо так, чтобы я полностью увидел крайний левый столбец. У моего друга с Ликом была аналогичная ситуация. Но у нас был ещё один знакомый с самособранным Специалистом из журнала. У него левая граница на его телеке была в норме. Нам тоже так хотелось, но проблему мы решить так и не смогли. Вот ещё один момент, который нужно будет протестировать на современном телевизоре :)
Это решалось регулировкой размера по горизонтали + регулировкой фазы строчной развёртки. Однако, на цветных телевизорах RGB вход мог быть заметно сдвинут влево после таких манипуляций.

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

ivagor, я вообще не понимаю, откуда взялись твои цифры. Если принять, что квадрат это 4:3 (отношение 1.3_в_периоде), то для нашей развёртки это должно быть 384х288. А 384 точки должны быть вписаны в 52мкс или 0,135 мкс/точка, что равно 7,384 МГц (что намекает, что ты используешь х2 от этой частоты, видимо намёк на 768х576 в интерлейсе). Однако, принятый цифровой "стандарт" внутри аналогового это 352х288 (704х288 в интерлейсе), которые составляют отношение 1,2 но согласно стандарту должны быть растянуты до 1,3. При этом пиксельклок будет 6,769МГц (13,538 МГц для 704х572 в интерлейсе). А на самом деле в горизонтали аналоговой развёртки нет никаких точек, а есть разрешающая способность, выражаемая в видимых линиях (т.е. за каждой белой должна идти чёрная, что даёт нам 2 пикселя по сути), типовое значение которых даже для видика от 200 до 300. 300 линий это по сути 600 пикселей.

ivagor
28.09.2023, 14:06
Если принять, что квадрат это 4:3 (отношение 1.3_в_периоде), то для нашей развёртки это должно быть 384х288. А 384 точки должны быть вписаны в 52мкс или 0,135 мкс/точка, что равно 7,384 МГц
Да, у меня аналогично, просто шел из другого места. А к чему ведут последующие рассуждения я не понял.

LeoN65816
28.09.2023, 14:47
Ещё очень хочу с вашей помощью уяснить вопрос с пропорциями пикселя Специалиста.

Разрешение Специалиста 384x256 (384 / 256 = 1.5)
Стандартное соотношение кадра 4:3 (4 / 3 = 1.33)




X DAR
--- = ---
Y PAR

384 4:3
--- = ---
256 PAR

3 4:3
--- = ---
2 PAR

PAR=DAR x Y / X=(4:3)x2/3=8:9

ivagor
28.09.2023, 15:04
384 4:3
--- = ---
256 PAR
При настройках телевизора по умолчанию так не будет, т.к. изображение специалиста не займет весь экран (или, в более общем случае с учетом условных бордюров, не будет строго пропорционально размерам экрана). А если менять размеры и положение изображения, то разговоры об аспектах присущих данному компьютеру лишаются смысла, т.к. аспект будет определяться личными предпочтениями зрителя и диапазоном регулировок.

HardWareMan
28.09.2023, 17:19
При настройках телевизора по умолчанию так не будет, т.к. изображение специалиста не займет весь экран (или, в более общем случае с учетом условных бордюров, не будет строго пропорционально размерам экрана). А если менять размеры и положение изображения, то разговоры об аспектах присущих данному компьютеру лишаются смысла, т.к. аспект будет определяться личными предпочтениями зрителя и диапазоном регулировок.
Мониторы и телики на кружке у нас были подкручены так, что явно были видны гапы между строк. На одном телике даже сильнее чем у других. Это немного раздражало сначала но потом привыкаешь. Идеально оказалось на домашнем телевизоре 61см 3УСЦТ, настроенном геометрией на эфир. Но я не помню, насколько круглый был круг, вроде как овальным не казался. Ну и идеальный квадрат это вписывание х2 768х512 в разрешение 800х600 на мониторе 4:3 с центровкой. Что я на МХ2 и сделал.

ivagor
28.09.2023, 18:05
Ну и идеальный квадрат это вписывание х2 768х512 в разрешение 800х600 на мониторе 4:3 с центровкой. Что я на МХ2 и сделал.
Как раз пример того, о чем я писал

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

CityAceE
29.09.2023, 21:27
Проблема в том, что Лик сейчас лежит на складе вместе с другим моим барахлом, которое осталось не забранным после переезда. Но пока есть запал, я настроен в ближайшее время съездить туда, привезти его домой и подключить к ТВ.

Высокая мотивация - страшная сила ;)

https://pic.maxiol.com/thumbs2/1696011771.780858384.photo20230929212029.jpg (https://pic.maxiol.com/?v=1696011771.780858384.photo20230929212029.jpg&dp=2)

Осталась мелочь - подключить к телевизору и "магнитофону". Пока включил вслепую и убедился по звуку, что работает. Ура!

Обратите внимание на два отверстия в левом верхнем углу. Это я их сверлил, чтобы вывести индикацию питания и "РУС/ЛАТ". Подписи делал с помощью переводных шрифтов. Именно по этим признакам идентифицировал фото на Wiki.

HardWareMan
30.09.2023, 06:25
CityAceE, сказал А, говори и Б. Показывай кишочки!

CityAceE
30.09.2023, 07:45
Показывай кишочки!
Вот они родные! :) Посмотри, может быть что-нибудь интересное сможешь рассказать про них.

А сам для себя я увидел, что, во-первых, ВВ55 у меня ни разу не в панельке. Зато процессор в панельке. Перепутал, видимо, с процессором за давностью лет. Но друг у меня точно ВВ55-ю в панельку ставил. Вроде у него они летели часто. А моя, возможно, и не сгорала никогда. А следы канифоли, это от ВВ55-й, которую я вторым этажом ставил для подключение принтера и программатора по схеме SP-580.

И вторым сюрпризом для меня стал набор ПЗУ. У меня раньше на переднюю панель был выведен переключатель в виде кнопки, который менял конфигурацию компьютера со стандартной на конфигурацию SP-580. Я потом все свои обвесы убрал по какой-то причине. Но микросхемы с прошивкой SP-580 сейчас стоят на местах, где должны стоять стандартные Загрузчик и Монитор. Видимо, я жёстко зафиксировал конфигурацию SP-580, судя по тому, что неподключенный к монитору комп на клавиатуру реагирует и звук выдаёт. Теперь придётся разбираться, как всё вернуть обратно, чтобы заработала стандартная конфигурация. А ещё, если я не ошибаюсь, у меня живы все 6 родных микросхем ПЗУ с оригинальной прошивкой от ЛИКа.

А зелёненькие кондёры - это, я так понимаю, и есть те самые КМ-ки, за которым вандалы гоняются? ;)

https://pic.maxiol.com/thumbs2/1696049033.780858384.20230930073820.jpg (https://pic.maxiol.com/?v=1696049033.780858384.20230930073820.jpg&dp=2) https://pic.maxiol.com/thumbs2/1696049052.780858384.20230930073826.jpg (https://pic.maxiol.com/?v=1696049052.780858384.20230930073826.jpg&dp=2)
https://pic.maxiol.com/thumbs2/1696049070.780858384.20230930073831.jpg (https://pic.maxiol.com/?v=1696049070.780858384.20230930073831.jpg&dp=2) https://pic.maxiol.com/thumbs2/1696049086.780858384.20230930073838.jpg (https://pic.maxiol.com/?v=1696049086.780858384.20230930073838.jpg&dp=2)
https://pic.maxiol.com/thumbs2/1696049105.780858384.20230930073856.jpg (https://pic.maxiol.com/?v=1696049105.780858384.20230930073856.jpg&dp=2) https://pic.maxiol.com/thumbs2/1696049125.780858384.20230930073936.jpg (https://pic.maxiol.com/?v=1696049125.780858384.20230930073936.jpg&dp=2)

CityAceE
30.09.2023, 14:03
Что-то пока ничего не получается загрузить в компьютер. Из магнитофонов у меня только смартфоны. Я очень рассчитывал на программу RKM Tape Player. Но компьютер вообще никак не реагирует на то, что звучит из смартфона с помощью этой программы. Пробовал разные уровни громкости, но тщетно. Вот теперь переживаю, не спалил ли я компоратор высокой громкостью. Воспользоваться утилитой bin2wav не смог, так как она ругается при запуске:



module.js:549
throw err;
^

Error: Cannot find module 'd:\Specialist\2\bin2wav.js'
at Function.Module._resolveFilename (module.js:547:15)
at Function.Module._load (module.js:474:25)
at Function.Module.runMain (module.js:693:10)
at Object.<anonymous> (d:\Specialist\2\bin2wav.exe:352:30)
at Module._compile (module.js:652:30)
at _third_party_main.js:37:36
at NativeModule.compile (bootstrap_node.js:614:7)
at Function.NativeModule.require (bootstrap_node.js:559:18)
at bootstrap_node.js:134:22
at _combinedTickCallback (internal/process/next_tick.js:131:7)


Установка свежей node.js ничего не изменила.

Есть ли ещё какие-то варианты? Может есть ссылка на готовый проверенный wav?

CityAceE
30.09.2023, 18:34
Всё, загрузил файлы благополучно! И с помощью RKM Tape Player (https://zx-pk.ru/threads/31721-rkm-player-proigryvatel-kassetnykh-formatov-dlya-android.html) они грузятся, и после конверсии программой rk2wav (https://emu80.org/files/?id=69). Ура!:v2_yahoo:

CityAceE
01.10.2023, 13:54
Решил расставить для себя все точки над i с геометрией изображения на реальном компьютере. Для этого нарисовал вот такую тестовую картинку:
https://pic.maxiol.com/thumbs2/1696157607.780858384.spec.png (https://pic.maxiol.com/?v=1696157607.780858384.spec.png&dp=2)

На экране телевизора это выглядит вот так:

https://pic.maxiol.com/thumbs2/1696157732.780858384.01.jpg (https://pic.maxiol.com/?v=1696157732.780858384.01.jpg&dp=2)

И тут сразу видно три момента:



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


Круг измерил линейкой. По высоте он получился 221 мм, а в ширину 202,5 мм. Соотношение составляет 1,09. Чтобы убедится в правильности расчётов нарисовал вот такой круг:

https://pic.maxiol.com/thumbs2/1696157942.780858384.circle.png (https://pic.maxiol.com/?v=1696157942.780858384.circle.png&dp=2)

И вот такой круг на телевизоре выглядит как настоящий круг:

https://pic.maxiol.com/thumbs2/1696158255.780858384.02.jpg (https://pic.maxiol.com/?v=1696158255.780858384.02.jpg&dp=2)

Замерил его линейкой прямо на экране и горизонталь с вертикалью совпали до миллиметра.

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

Перво-наперво понял, что справа не помещается 4 пикселя:

https://pic.maxiol.com/thumbs2/1696158735.780858384.03.jpg (https://pic.maxiol.com/?v=1696158735.780858384.03.jpg&dp=2) https://pic.maxiol.com/thumbs2/1696158753.780858384.04.jpg (https://pic.maxiol.com/?v=1696158753.780858384.04.jpg&dp=2)

Верхняя строка начинает с отступом в 1 пиксель:

https://pic.maxiol.com/thumbs2/1696158895.780858384.05.jpg (https://pic.maxiol.com/?v=1696158895.780858384.05.jpg&dp=2)

Слева расстояние от края 9 пикселей:

https://pic.maxiol.com/thumbs2/1696159651.780858384.06.jpg (https://pic.maxiol.com/?v=1696159651.780858384.06.jpg&dp=2)

Снизу до края 12 пикселей:

https://pic.maxiol.com/thumbs2/1696159993.780858384.07.jpg (https://pic.maxiol.com/?v=1696159993.780858384.07.jpg&dp=2)

Итого на моём телевизоре кадр размер 389 x 269 пикселя. И на этом кадре изображение Специалиста начинается сверху с отступом в 1 пиксель, в слева 9.

Может быть существует простой способ, чтобы сдвинуть изображение Специалиста чуть влево, чтобы справа поместились все пиксели?

Прилагаю картинки, которые я загружал к себе в Специалист. Они загружаются сразу в экранную область и оттуда же стартуют. Там вначале я поместил мёртвый цикл из трёх байтов, поэтому изображение на экране в левом верхнем углу чуть запорчено.

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

https://pic.maxiol.com/thumbs2/1696160954.780858384.apples.png (https://pic.maxiol.com/?v=1696160954.780858384.apples.png&dp=2) https://pic.maxiol.com/thumbs2/1696160976.780858384.kremlin.png (https://pic.maxiol.com/?v=1696160976.780858384.kremlin.png&dp=2)

ivagor
01.10.2023, 15:08
202.5/221=0.916 на 4.5% отличается от 0.9204 которые я насчитал (https://zx-pk.ru/threads/35304-voprosy-po-arkhitekture-quot-spetsialista-quot.html?p=1186190&viewfull=1#post1186190). Учитывая не абсолютную точность настройки ТВ это очень хорошее попадание. Думаю если измерить несколько ТВ, то среднее должно сходится ближе к 0.9204.

CityAceE
01.10.2023, 18:13
Проверил, ещё на трёх телеках:

1. Телевизор DNS 32":
https://pic.maxiol.com/thumbs2/1696172864.780858384.8.jpg (https://pic.maxiol.com/?v=1696172864.780858384.8.jpg&dp=2)
Тут влезли все 384 пикселя по горизонтали.
Размер круга: 341 мм * 362 мм. Соотношение: 0,942

2. Телевизор Samsung 65":
https://pic.maxiol.com/thumbs2/1696173009.780858384.09.jpg (https://pic.maxiol.com/?v=1696173009.780858384.09.jpg&dp=2)
Как и на мелоком Самсунге не помещаются правые 4 пикселя. При этот картинка нестабильная, скачет, изображение теряется.
Соотношение смог посчитать только по фото: 0,922

3. Телевизор TCL 65":
Тут даже фотографировать не стал, ибо картинки как таковой нет. Сквозь искажения прослеживается инверсия и всё искорёжено.

Делаю вывод, что чем современнее телек, тем хуже на нём картинка.

CityAceE
03.10.2023, 19:15
Продолжаю свои вопросы к экспертам. Итак, известно, что Специались после включения память не очищает и в ней содержатся некоторые данные:

https://pic.maxiol.com/thumbs2/1696348909.780858384.photo20231003185913.jpg (https://pic.maxiol.com/?v=1696348909.780858384.photo20231003185913.jpg&dp=2) https://pic.maxiol.com/thumbs2/1696349254.780858384.photo20231003190708.jpg (https://pic.maxiol.com/?v=1696349254.780858384.photo20231003190708.jpg&dp=2)

У меня эта картинка почти всегда похожа. Среди FF и 00 иногда встречаются "прожилки" других кодов. На данных картинках это:


0008: EF
0052: DF
00AC: DF
00D6: DF
0184: 20
018C: 20
0201: 20
0209: 20
0225: DF
0285: 20
028D: 20
02D3: DF
02D6: FB


Собственно, вопросы:
1. Почему именно такая закономерность 00 и FF?
2. Откуда берутся эти "прожилки" и можно ли их предсказать?

lexarr
03.10.2023, 19:36
1. Почему именно такая закономерность 00 и FF?

Это КРУшки так стартуют (начальное состояние заряда динамической памяти).


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

CityAceE
03.10.2023, 20:33
Это КРУшки так стартуют (начальное состояние заряда динамической памяти).
Осталось понять какие РУшки отвечают за какие адреса. Я действительно не знаю, как организована память на аппаратном уровне, какие биты хранятся в каких микросхемах. У меня ОЗУ 36 Кб организовано на 24 микросхемах РУ6. Однажды у меня сдох комп. Я запустил тест и он мне показал битую память. Я практически наугад заменил микросхему и попал в яблочко с первого раз.
https://pic.maxiol.com/thumbs2/1696049052.780858384.20230930073826.jpg (https://pic.maxiol.com/?v=1696049052.780858384.20230930073826.jpg&dp=2)
По-моему это была вторая слева сверху.

HardWareMan
03.10.2023, 21:04
Это КРУшки так стартуют (начальное состояние заряда динамической памяти).
Это комбинация поверапа РУшек и метода сканирования адресов. В Специалисте оно не совсем стандартное для РУ5/РУ6/РУ3. С другой стороны, я когда менял РУшки на MBM у меня начальный паттерн был не полосочки а кубики, почти как матрас этого вашего Спектрума.

Serg6845
03.10.2023, 21:33
Осталось понять какие РУшки отвечают за какие адреса. Я действительно не знаю, как организована память на аппаратном уровне, какие биты хранятся в каких микросхемах. У меня ОЗУ 36 Кб организовано на 24 микросхемах РУ6. Однажды у меня сдох комп. Я запустил тест и он мне показал битую память. Я практически наугад заменил микросхему и попал в яблочко с первого раз.
https://pic.maxiol.com/thumbs2/1696049052.780858384.20230930073826.jpg (https://pic.maxiol.com/?v=1696049052.780858384.20230930073826.jpg&dp=2)
По-моему это была вторая слева сверху.

не 36к а 48к. 3х16.
бегло посмотрел картинки на известном сайте (http://xn----7sbombne2agmgm0c.xn--p1ai/index36.html) - получается снизу вверх - 0000 - 4000 - 8000 и слева направо - D0-D7.

CityAceE
03.10.2023, 21:49
не 36к а 48к. 3х16.
Ну да, я это я зачем-то исключил видеоОЗУ. 48 Кб, конечно.


получается снизу вверх - 0000 - 4000 - 8000 и слева направо - D0-D7.
Спасибо! Буду переваривать. Сходу не могу осознать почему именно такая картина с содержимым ОЗУ после включения.

На счёт "прожилок", я так понял, что это просто помехи, которые можно игнорировать или при эмуляции как-то нагенерировать случайным образом, так как предугадать их невозможно. Я просто думал, что там есть некая закономерность, например от циклов процессора, содержимое шины и т.д. А тут просто помехи. Стало быть это проще.

Serg6845
03.10.2023, 22:09
Сходу не могу осознать почему именно такая картина с содержимым ОЗУ после включения.


это как "шахматка" на спектруме. зависит от типа и производителя микросхем ОЗУ. в общем случае вещь непредсказуемая. закладываться на что-то конкретное - я бы не стал. на Специалисте с памятью на РУ3, РУ5 и РУ6 - три разные картины.
если говорить об эмуляторе - я бы для определенности инициализировал нулями.

HardWareMan
04.10.2023, 06:21
Serg6845, Лик максимально приближён к журнальному?

CityAceE
04.10.2023, 08:15
Лик максимально приближён к журнальному?

Вот его схема:
https://pic.maxiol.com/thumbs2/1696396324.780858384..jpg (https://pic.maxiol.com/?v=1696396324.780858384..jpg&dp=2)

Наименование деталей на отдельных страницах. Страницы большие, в сканер не лезут, поэтому только фотографирование. Ели нужно, сфотаю и их.

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

https://pic.maxiol.com/thumbs2/1696398675.780858384.bom1.jpg (https://pic.maxiol.com/?v=1696398675.780858384.bom1.jpg&dp=2) https://pic.maxiol.com/thumbs2/1696398755.780858384.bom2.jpg (https://pic.maxiol.com/?v=1696398755.780858384.bom2.jpg&dp=2)

У fifan'а на сайте тоже, оказывается, схема лежит (http://специалист-пк.рф/schemes/Lick1.png).


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

HardWareMan
04.10.2023, 08:55
Вот его схема:
https://pic.maxiol.com/thumbs2/1696396324.780858384..jpg (https://pic.maxiol.com/?v=1696396324.780858384..jpg&dp=2)

Наименование деталей на отдельных страницах. Страницы большие, в сканер не лезут, поэтому только фотографирование. Ели нужно, сфотаю и их.
Ну, получается, да. Максимально журнальный вариант. С уклоном на мелкие изменения, вроде РУ6 вместо РУ3 и ПЗУшек батарея.
https://pic.maxiol.com/thumbs2/1696398849.2992249824.scheme.jpg (https://pic.maxiol.com/?v=1696398849.2992249824.scheme.jpg&dp=2)

Serg6845
04.10.2023, 09:56
Ну уж нет! Это же не по спортивному! У меня есть настоящий комп, и если я знаю какие-то особенности его поведения, то я просто обязан повторить их в эмуляторе. Пусть даже эти особенности и ни на что не влияют и ими никто никогда не воспользуется.

тогда можно в настройку вынести тип микросхем :)
вот так выглядят РУ5
https://pic.maxiol.com/thumbs2/1696402427.1435348568.spetsru5.jpg (https://pic.maxiol.com/?v=1696402427.1435348568.spetsru5.jpg&dp=2)

а РУ3 - 256 байт 00, 256 байт FF, затем повторяется

CityAceE
04.10.2023, 10:59
тогда можно в настройку вынести тип микросхем
Очень даже неплохая идея! И, возможно, если у меня дойдёт дело до настроек, то я воплощу её в жизнь. Правда, я до сих пор не уверен, что удастся всё довести до логического конца, так как слишком много вопросов с архитектурой Raspberry Pi, которые в одиночку я пока не могу решить.


У меня прожилки отсутствуют при включении (т. е. всё идеально)
Сегодня с утра включил комп и дамп был идеальным, то есть без "прожилок". Очевидно, что при эмуляции их можно будет либо игнорировать, либо как-то рандомизировать.

DDp
07.10.2023, 21:46
Неплохо бы, если бы кто-то ещё проверил мои файлы у себя.
ЖК, и тоже самсунг - circle 1:1. Отношение сторон матрицы 5:4 (1280x1024) - справа обрезано.
ЭЛТ - экран Специалиста отображается почти полностью. Пропорции измерять не стал.

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


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

вот так выглядят РУ5
Микрон2 (https://zx-pk.ru/threads/27790-quot-mikron-2-quot-(g-degtyarsk).html), РУ5. Каждое включение - небольшие изменения.

79590 79589

CityAceE
08.10.2023, 08:04
DDp, большое спасибо за статистику!


Каждое включение - небольшие изменения.
Хм, прямо какие-то значительные изменения. Сама суть, где в идеале находятся 00, а где FF, ясна, но искажений на них как-то уж очень много.

CityAceE
08.10.2023, 17:27
Обучил я в своём эмуляторе виртуальную ВВ55 двум командам - 0x82 и 0x91. Порадовался, что игры и клавиатурный тест ivagor'а (https://zx-pk.ru/threads/29897-spycialist-emulyator-pk-spetsialist-na-python.html?p=993325&viewfull=1#post993325) работают как часы. Правда попутно нашёл и обезвредил баг с клавишей НР. Но потом запустил тест Рюмика и жёстко обломался - он мою клавиатуру вообще не видит. Только клавиша НР при нажатии залипла и всё на этом. Полез в недра теста и увидел, что конкретно тест клавиатуры посылает в РУС три команды: 0x82, 0x0B и 0x0A. Про две из которых моя ВВ55 ничего не знает. Пришлось лезть за информацией в Интернет, по сути изучать вопрос заново, так как всё забылось. И вот тут снова возникли вопросы.

1. ВВ55 может работать в трёх режимах. В газете Nicron #24 нашёл следующую информацию:



ВВ55 может работать в трех режимах, различающихся назначением отдельных разрядов портов и портов в целом. В режимах 1 и 2 адаптер способен в ограниченных пределах самостоятельно поддерживать протоколы передачи/приема данных, например, путем выставления специальных флагов или сигналов запросов на прерывания, под которые выделяются соответствующие линии некоторых портов. Для нас эти режимы особого интереса не представляют, так как в "Спектруме" их реализация затруднена да и вообще мало полезна. В режиме 0 адаптер работает как 3 параллельных порта ввода-вывода, в которые можно просто записывать данные или считывать оттуда. В режиме 0 порты A и B программируются либо на ввод, либо на вывод как 8-разрядные регистры, а порт C делится на два 4-битных регистра, каждый из которых может либо принимать, либо передавать данные.


Вопрос: А что со Специалистом, работают ли режимы 1 и 2 на нём?

2. Команды 0x0A и 0x0B, которые подаёт тест Рюмика в РУС не используют бит Флага управления:

https://pic.maxiol.com/images2/1696774969.780858384.vv55.png

Вопрос: Я правильно понимаю, что Флаг управления (D7) используется только для использования совместно с битами Выбора режима (D6, D5 и D2), а направление каналов можно задавать и без D7?

lexarr
08.10.2023, 18:15
А что со Специалистом, работают ли режимы 1 и 2 на нём?
Нет. Специалист под режимы 1 и 2 не запаян. Эти режимы для работы с оборудованием типо принтера и т.п.
МС ВВ55 — аналог Intel 8255, значит и документацию (https://www.emuverse.ru/wiki/Intel_8255/%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) лопатить на него.
В спойлере реализация на C, но только режим 0 (т.е. что требуется).

bb55ppi.h:


#ifndef __BB55PPI_H
#define __BB55PPI_H

typedef struct _BB55
{
char ain;
unsigned char a;
char bin;
unsigned char b;
char clin;
char chin;
unsigned char c;
} BB55;

void BB55Reset (BB55 *pbb55);
int BB55Wr (BB55 *pbb55, int port, int val);
int BB55Rd (BB55 *pbb55, int port);
int BB55Set (BB55 *pbb55, int row, int val);
int BB55Get (BB55 *pbb55, int row);

#endif

bb55ppi.c:

#include "bb55ppi.h"

void BB55Reset (BB55 *pbb55)
{
pbb55->ain = -1;
pbb55->bin = -1;
pbb55->clin = -1;
pbb55->chin = -1;
pbb55->a = pbb55->b = pbb55->c = 0;
}

int BB55Wr (BB55 *pbb55, int port, int val)
{
switch(port & 0x3) {
case 0: if (pbb55->ain)
return -1;
pbb55->a = (unsigned char) val;
break;
case 1: if (pbb55->bin)
return -1;
pbb55->b = (unsigned char) val;
break;
case 2: if (pbb55->chin)
val &= 0x0f;
if (pbb55->clin)
val &= 0xf0;
pbb55->c |= val;
if (pbb55->clin || pbb55->chin)
return (int)(unsigned char)val | (-1&~0xff);
break;
case 3: if (val & 0x80) {
if (val & 0x10)
pbb55->ain = -1;
else {
pbb55->ain = 0;
pbb55->a = 0;
}
if (val & 0x02)
pbb55->bin = -1;
else {
pbb55->bin = 0;
pbb55->b = 0;
}
if (val & 0x08)
pbb55->chin = -1;
else {
pbb55->chin = 0;
pbb55->c &= 0x0f;
}
if (val & 0x01)
pbb55->clin = -1;
else {
pbb55->clin = 0;
pbb55->c &= 0xf0;
}
break;
}
if ((val & 0x0e) >= 8)
if (pbb55->chin)
return -1;
else {
unsigned char mask = 1<<((val & 0x0e)>>1);
pbb55->c &= ~mask;
pbb55->c |= val & 0x01 ? mask : 0;
}
else if (pbb55->clin)
return -1;
else {
unsigned char mask = 1<<((val & 0x0e)>>1);
pbb55->c &= ~mask;
pbb55->c |= val & 0x01 ? mask : 0;
}
break;
}
return (unsigned char) val;
}

int BB55Rd (BB55 *pbb55, int port)
{
switch (port & 0x3) {
case 0: return pbb55->a | (pbb55->ain ? 0 : -1&~0xff);
case 1: return pbb55->b | (pbb55->bin ? 0 : -1&~0xff);
case 2: return pbb55->c | (pbb55->clin && pbb55->chin ? 0 : -1&~0xff);
case 3: return (pbb55->ain ? 0x10 : 0) | (pbb55->bin ? 0x02 : 0) |
(pbb55->clin ? 0x01 : 0) | (pbb55->chin ? 0x08 : 0);
}
return 0;
}

int BB55Set (BB55 *pbb55, int row, int val)
{
switch (row & 0x3) {
case 0: if (!pbb55->ain)
return -1;
pbb55->a = (unsigned char) val;
break;
case 1: if (!pbb55->bin)
return -1;
pbb55->b = (unsigned char) val;
break;
case 2: if (!pbb55->clin)
return -1;
pbb55->c &= 0xf0;
pbb55->c |= (unsigned char)val & 0x0f;
break;
case 3: if (!pbb55->chin)
return -1;
pbb55->c &= 0x0f;
pbb55->c |= (unsigned char)val &0xf0;
break;
}
return 0;
}

int BB55Get (BB55 *pbb55, int row)
{
switch (row & 0x3) {
case 0: return pbb55->a | (pbb55->ain ? -1&~0xff : 0);
case 1: return pbb55->b | (pbb55->bin ? -1&~0xff : 0);
case 2: return (pbb55->c & 0x0f) | (pbb55->clin ? -1&~0xff : 0);
case 3: return (pbb55->c & 0xf0) | (pbb55->chin ? -1&~0xff : 0);
}
return -1;
}



направление каналов можно задавать и без D7
D7=1 — признак записи управляющего слова в регистр управления (а значит и направления передачи).
D7=0 — оперирование битами.

CityAceE
08.10.2023, 19:49
Специалист под режимы 1 и 2 не запаян. Эти режимы для работы с оборудованием типа принтера и т.п.
ОК. И тогда как должна себя вести ВВ55 при подаче команды на переключения в 1-й или 2-й режим?


МС ВВ55 — аналог Intel 8255, значит и документацию лопатить на него.
Да, спасибо. Пользовался в том числе и этой статьёй при изучении вопроса.


Я правильно понимаю, что Флаг управления (D7) используется только для использования совместно с битами Выбора режима (D6, D5 и D2), а направление каналов можно задавать и без D7?
Уже понял, что это не так. Но оно и по описанию было понятно. Просто смутило, что тест Рюмика пишет в РУС без указания D7. А опытным путём я понял, что это программирование звука. Правда пока не очень ясно, почему записывая в ВУС мы получаем запись в старшую тетраду канала С. Смутно помню, что что-то по этому вопросу было, но не нашёл инфу.

Сейчас получается, что тест Рюмика у меня не работает из-за некоей ошибки в моём коде. Этот тест каким-то образом в своей работе обходится только режимом 0x82, а у меня он реализован. Значит, я что-то не учитываю или где-то ошибся...

Serg6845
08.10.2023, 20:34
ОК. И тогда как должна себя вести ВВ55 при подаче команды на переключения в 1-й или 2-й режим?


как описано в даташите. будет ли оно иметь практический смысл в применении к Специалисту - большой вопрос.



Уже понял, что это не так. Но оно и по описанию было понятно. Просто смутило, что тест Рюмика пишет в РУС без указания D7. А опытным путём я понял, что это программирование звука. Правда пока не очень ясно, почему записывая в ВУС мы получаем запись в старшую тетраду канала С. Смутно помню, что что-то по этому вопросу было, но не нашёл инфу.


в даташите подробно все описано. запись в РУС при сброшенном D7 - манипуляция с битами порта С. при этом D0 - то что надо записать в нужный бит, D1-D3 - номер бита, D4-D6 - dont care.
это используется в подпрограммах звука и записи на ленту если не ошибаюсь.

lexarr
08.10.2023, 20:59
ОК. И тогда как должна себя вести ВВ55 при подаче команды на переключения в 1-й или 2-й режим?
Всё что угодно. Может и замкнуть. Эти режимы не используются на спеце вообще, их можно не реализовывать.


Да, спасибо. Пользовался в том числе и этой статьёй при изучении вопроса.
Больше половины статьи можно не изучать (посвящено 1-му и 2-му режимам), нужно лишь знать, как порты переключаются на ввод/вывод и щёлкаются отдельные ножки.


что-то по этому вопросу было, но не нашёл инфу
Нет, там (https://www.emuverse.ru/wiki/Intel_8255/%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) есть всё, разбираться нужно.

CityAceE
08.10.2023, 22:28
Значит, я что-то не учитываю или где-то ошибся...
Ошибся :) Снова при определённых условиях портилась регистровая пара BC, а за одно и флаги. Всё из-за того, что вовремя не делал 32-х битному регистру AND A,#FF. В итоге лишние единицы, которые появлялись в верхних разрядах при определённых условиях портили B, C и F. Теперь тест Рюмика работает, как положено. Зато снова много про ВВ55 почитал :)

CityAceE
10.10.2023, 18:17
И снова я с вопросами. На этот раз не по архитектуре, а по логике работы клавиатуры.

Тест клавиатуры C.Рюмика работает исключительно в режиме #82 ППИ ВВ55: каналы A и младший С на запись, а В на считывание. Очевидно, что он поочерёдно засылает в каждый бит портов А и С нули, а потом их встречает в порту В. Где пересечение, там кнопка и нажата. Так ведь? И это отлично работает при одной нажатой клавише. Но при таком методе, если нажать 3 клавиши по углам квадрата, то автоматически "нажмётся" и 4-я:

https://pic.maxiol.com/thumbs2/1696950660.780858384.photo20231010180921.jpg (https://pic.maxiol.com/?v=1696950660.780858384.photo20231010180921.jpg&dp=2)

И я в этом убедился, когда реализовал этот подход при подключении матричной клавиатуры к эмулятору. Для экспериментов подключил клавиатуру от Ардуино 4x4. Вот такую:

https://pic.maxiol.com/thumbs2/1696950774.780858384.raspberryklaviatura.jpg (https://pic.maxiol.com/?v=1696950774.780858384.raspberryklaviatura.jpg&dp=2)

Нажатые клавиши у меня хранятся в матрице 4x4. Это 16-ти битное число, где каждый включенный бит - это нажатая клавиша. И всё вроде хорошо, кроме вот этого эффекта.

Однако в тесте Рюмика ничего подобного не происходит! Как он этого добился? Не могу сообразить.

HardWareMan
10.10.2023, 22:03
CityAceE, ты прав, развязки (диодов) нет, все косяки и опасности присутствуют. Если интересует, как именно опрашивает клавишу Рюмик - просто дизассемблируй его тест. Найти код, обращающийся к ППА не вызовет проблем.

CityAceE
10.10.2023, 22:44
развязки (диодов) нет
Я никак не соображу чем диоды в данном случае смогут помочь помимо защиты порта от выгорания?

Диоды если только так ставить, на каждую клавишу, а не на линию:
https://usamodelkina.ru/uploads/posts/2021-03/medium/1614866369_1-3.jpg


просто дизассемблируй его тест
Я думал, что существует какой-то известный алгоритм. Но глядя на рисунок я вижу и понимаю, что это просто невозможно. И тем не менее Рюмик работает! Это просто какая-то магия!

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

Тем интереснее стало узнать, как же это организовано у Рюмика.

HardWareMan
10.10.2023, 23:11
Диоды если только так ставить, на каждую клавишу, а не на линию:
Не обязательно. Получается монтажное И. Главное, чтобы диоды были на порту, что настраивается на выход. А у Специалсита нет диодов и можно опрашивать порты как 6х12 так и 12х6.

Serg6845
10.10.2023, 23:30
Не обязательно. Получается монтажное И. Главное, чтобы диоды были на порту, что настраивается на выход.

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


А у Специалсита нет диодов и можно опрашивать порты как 6х12 так и 12х6.

оно так и делается в журнальном ПЗУ. и за счет использования фичи 8255 с обнулением портов при настройке на запись - можно получить гораздо более быстрый опрос клавы без перебора отдельных битов.

lexarr
11.10.2023, 00:54
Решается кардинально только диодами на каждой клавише.
Есть ещё "треугольная" разводка, но там клавиш вдвое меньше.

HardWareMan
11.10.2023, 06:21
только большого смысла в этом нет - тот самый "квадрат" разрулить не поможет.
И в Спектруме это никого не тревожит?

CityAceE
11.10.2023, 08:13
Главное, чтобы диоды были на порту, что настраивается на выход.
Что это даст?

Внутри матрицы клавиатуры создаётся цепь! И её никакими внешними обвесами и тем более программными средствами невозможно прервать или отследить. Можно вмешаться только внутрь матрицы. Во всяком случае здравый смысл именно об этого говорит.

Ещё раз привожу схему замыкания:

https://pic.maxiol.com/thumbs2/1696950660.780858384.photo20231010180921.jpg (https://pic.maxiol.com/?v=1696950660.780858384.photo20231010180921.jpg&dp=2)

Однако ж и на Специалисте, и на Спектруме с такой проблемой я не сталкивался. И тест Рюмика каким-то чудом всё отслеживает.


за счет использования фичи 8255 с обнулением портов при настройке на запись - можно получить гораздо более быстрый опрос клавы без перебора отдельных битов.
А можно "на пальцах" объяснить в чём суть этого быстрого метода?

HardWareMan
11.10.2023, 09:08
А можно "на пальцах" объяснить в чём суть этого быстрого метода?
У МХ детект нажатия идет через 6х12 (2 чтения на все 72 кнопки), а скан обычный 12х6 по таблице.

Serg6845
11.10.2023, 09:54
И в Спектруме это никого не тревожит?

там линии клавы висят прямо на ША проца, так что диоды необходимы. но "квадрат" на Спектруме точно так же не разруливается.



Однако ж и на Специалисте, и на Спектруме с такой проблемой я не сталкивался. И тест Рюмика каким-то чудом всё отслеживает.

сомнительно как-то. вечером на реале посмотрю.

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




А можно "на пальцах" объяснить в чём суть этого быстрого метода?

очень просто
- ряды на ввод, колонки на вывод (и в 0) - читаем ряды - если все 1 - ничего не нажато, иначе запоминаем где 0
- колонки на ввод, ряды на вывод (и в 0) - читаем колонки - если все 1 - ничего не нажато, иначе запоминаем где 0
по пересечению позиции 0 в двух случаях - определяем нажатые кнопки. т.о. если нажаты кнопки без конфликтующих комбинаций - они определяются за 5 обращений к ВВ55, включая настройку РУС (на Специалисте). если есть конфликтующие комбинации- тут сложнее.

CityAceE
11.10.2023, 10:31
сомнительно как-то. вечером на реале посмотрю.
Проверил! Вот, что значит тестировать всё под эмулятором, пусть даже и очень хорошим, и ждать того же результата от реального компьютера.
Ну, конечно же, на реале тест Рюмика с одновременным нажатием нескольких клавиш ведёт себя совсем не так, как под Emu80! Две клавиши по горизонтали он вообще никак не детектит - показывает только одну, ту что левее. По вертикали да, показывает комбинации. Зато под Emu80 тест показывает чёткий "квадрат" ;)

Но нет худа без добра! В результате изучения данной проблемы я сделал дизассемблер теста Рюмика и скомпилировал его в RKS для загрузки с магнитофона на реал. Из теста я удалил всё, кроме самого теста клавиатуры - можно тестировать в том числе клавиши 1, 2 и 3, которые в оригинале включают другие тесты.

P.S. Уж извините, но дизассемблер в мнемониках Z80.

CityAceE
11.10.2023, 10:40
Две клавиши по горизонтали он вообще никак не детектит - показывает только одну, ту что левее.
Вернее не совсем так. Одну клавишу, которая левее, он действительно показывает, но только если левая клавиша - это порт С, а правая была в порту А. Если же нажать две клавиши на одном порту, то он вообще ни одной нажатой нажатой клавиши не покажет.

Serg6845
11.10.2023, 18:04
Есть ещё "треугольная" разводка, но там клавиш вдвое меньше.

это смотря что понимать под треугольной разводкой.
есть например вот такое (https://www.rlocman.ru/shem/schematics.html?di=151880) - светодиоды заменить на кнопки, получим 55 кнопок на 11 I/O линиях. по классической прямоугольной схеме на 11 линиях получим 5х6 = 30 кнопок.
но эта схема требует возможности индивидуально назначать отдельные линии входами либо выходами - на ВВ55 такого не получится.

lexarr
11.10.2023, 18:51
это смотря что понимать под треугольной разводкой.
При такой схеме "квадраты" невозможны.

на ВВ55 такого не получится.
Кстати, ВВ55 можно вообще выкинуть и использовать регистры.


есть например вот такое (https://www.rlocman.ru/shem/schematics.html?di=151880)
Да, эта схема наиболее крутая с точки зрения количества выводов и способности обнаруживать любые сочетания нажатий. Только возможна на МК с индивидуальным управлением внешних линий и диодов многовато нужно.


светодиоды заменить на кнопки, получим 55 кнопок
При двунаправленном сканировании 110 кнопок.

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

b2m
12.10.2023, 11:55
но эта схема требует возможности индивидуально назначать отдельные линии входами либо выходами - на ВВ55 такого не получится.
Достаточно добавить мультиплексор и дешифратор, потребуются 8 бит на выход (2 по 4 для номера линии), один на вход. Всё равно группового сканирования нет, на одну линию подаём сигнал, с другой считываем. Каждая пара линий определяет место в треугольнике. Про двунаправленность и 110 кнопок уже сказали.

NEO SPECTRUMAN
13.10.2023, 12:18
"квадрат" на Спектруме точно так же не разруливается.
ну тобешь это и есть именно тот keymatrix effect?
https://i.postimg.cc/Y01x3kz2/2023-10-13-121543.png
https://i.postimg.cc/YCqCM3Vb/2023-10-13-122002.png
https://i.postimg.cc/PqCf8qdD/2023-10-13-122056.png

UncleDim
13.10.2023, 14:19
ну тобешь это и есть именно тот keymatrix effect?
который не возникает на механике, где не пожадничали диодик последовательно с каждой кнопочкой

CityAceE
27.10.2023, 08:12
В статье "Восемь цветов" в журнале "Моделист-Конструктор" №8 за 1990 год написано следующее:


Теперь схема начального пуска отключается командой FB (разрешение прерывания).


Правильно ли я понимаю, что запрет прерываний (DI) снова включает эту схему? Или же схема снова включается исключительно после сброса компьютера?

Serg6845
27.10.2023, 08:42
Правильно ли я понимаю, что запрет прерываний (DI) снова включает эту схему? Или же схема снова включается исключительно после сброса компьютера?

в журнальном варианте - да, включит обратно.

CityAceE
27.10.2023, 08:44
в журнальном варианте - да, включит обратно.
А есть ещё какой-то вариант помимо журнального?

Serg6845
27.10.2023, 09:43
А есть ещё какой-то вариант помимо журнального?

подозреваю что больше одного. у меня например этот узел аппаратный. взводится по обращению в старшие адреса памяти, сбрасывается только кнопкой сброса. вариация на тему - например в Специалисте-м (http://xn----7sbombne2agmgm0c.xn--p1ai/index12.html) - там активация по записи в ВВ55, как в оригинале, а сброс - только по кнопке.

lexarr
27.10.2023, 12:00
Правильно ли я понимаю, что запрет прерываний (DI) снова включает эту схему?
Запрет прерываний ни на что не влияет.

Или же схема снова включается исключительно после сброса компьютера?
Можно включить позже (в журнальном вар-те), только смысла в этом мало.

написано следующее:
отключается командой FB (разрешение прерывания)
Они не так выразились.

CityAceE
27.10.2023, 12:07
Запрет прерываний ни на что не влияет.
И какая информация в итоге корректная? Сейчас имеем два противоречивых мнения.


Можно включить позже (в журнальном вар-те), только смысла в этом мало.
Как?


Они не так выразились.
А как должно было быть?

Serg6845
27.10.2023, 16:07
Запрет прерываний ни на что не влияет.

смотрим схему (http://xn----7sbombne2agmgm0c.xn--p1ai/Docs/mk1990_08.djvu) (конкретно - рис.2), делаем выводы.

lexarr
27.10.2023, 16:29
И какая информация в итоге корректная? Сейчас имеем два противоречивых мнения.
А как должно было быть?
Схемотехника не исходная-оригинальная, модифицированная. Тогда неверно.


Как?
В режиме '82', если записать 0x09 в 0xFF03 (MVI A, 09h; STA 0FF03h)
то он в следующей команде перейдёт PC := PC | 0xC000

CityAceE
27.10.2023, 17:02
В режиме '82', если записать 0x09 в 0xFF03 (MVI A, 09h; STA 0FF03h)
то он в следующей команде перейдёт PC := PC | 0xC000
Так для того же и сделаны эти доработки, чтобы этого не происходило при использовании 8-цветов! Что-то здесь не так...

CityAceE
15.02.2024, 18:25
На основе вот этой информации (https://zx-pk.ru/threads/28891-emulyator-spetsialista-emustudio.html?p=953178&viewfull=1#post953178) сваял небольшой тестик. На Emu80 он запускается и отрабатывает, а на моём ЛИКе просто сбрасывается, да ещё и память портит - повторно тест уже не вызвать. Вроде бы всё логично barsik описал, и оно должно работать на реале, но вот не работает. В чём может быть причина?

Serg6845
15.02.2024, 21:39
на моём ЛИКе просто сбрасывается, да ещё и память портит - повторно тест уже не вызвать. Вроде бы всё логично barsik описал, и оно должно работать на реале, но вот не работает. В чём может быть причина?

я бы начал с содержимого ПЗУ по адресу C254 и дальше.

p.s. мой реал этот тест обзывает эмулятором, что неудивительно - у меня там схема другая.

b2m
16.02.2024, 12:21
На основе вот этой информации (https://zx-pk.ru/threads/28891-emulyator-spetsialista-emustudio.html?p=953178&viewfull=1#post953178) сваял небольшой тестик. На Emu80 он запускается и отрабатывает, а на моём ЛИКе просто сбрасывается, да ещё и память портит - повторно тест уже не вызвать. Вроде бы всё логично barsik описал, и оно должно работать на реале, но вот не работает. В чём может быть причина?


Там такой код (когда ПЗУ включено с нуля):



.
A0254: LD A,82H
LD (0FF03H),A
RET



Барсик, как всегда, только теоретизирует. Я вот не поленился, доделал в конфиге Лика начальный пуск. Действительно улетает: 80379

А всё почему? Что будет в памяти, когда мы её обратно включим командой LD (0FF03H),A ? Правильно, то что в тесте по адресу 0259. А там нули. Если мы поставим там RET, то про мой эмуль тест скажет, что это реал (с новым конфигом из аттача).

CityAceE
16.02.2024, 13:07
А всё почему? Что будет в памяти, когда мы её обратно включим командой LD (0FF03H),A ? Правильно, то что в тесте по адресу 0259. А там нули. Если мы поставим там RET, то про мой эмуль тест скажет, что это реал (с новым конфигом из аттача).
Точно! Спасибо!

Доработал тест, теперь всё работает и на моём реальном ЛИКе!

CityAceE
28.07.2024, 21:51
C000-FFFF - это верхняя четверть адресного пространства. при 1 на РС4 (журнальный вариант) - она повторяется 4 раза - 0000-3FFF, 4000-7FFF, 8000-BFFF, C000-FFFF.

На всякий случай вопрос, просто чтобы убедиться. Я же правильно понимаю, что если в таком состоянии что-то писать по любому адресу памяти, хоть с помощью OUT, хоть с помощью любой другой команды, то поведение будет ровно такое же, как если писать в область С000-FFFF? То есть, если это ПЗУ, то записываться ничего не будет, если висячие адреса, то тоже, если область портов, то и реакция будет соответствующей.

А экран в этом состоянии откуда читается?

HardWareMan
28.07.2024, 23:11
А экран в этом состоянии откуда читается?
Синхрогенератор выставляет свой адрес, ему пофигу, какая карта памяти активна у процессора в данный момент. Что касается процессора, то при НП когда ПЗУ маппируется во всю память ему экран не доступен, поэтому, он сначала прыгает в верхние адреса (JMP C003) а уже потом отключает НП через настройку системного ППА. А после этого карта памяти стандартная и ОЗУ с экраном и портами доступны по своим законным местам.

Есть 2 вида схемы НП: на триггере (как в РКшке или Орионе) и упрощённая как у Экспресса. Так вот, у Экспресса нельзя настраивать порт PC4 в лог.1 - карта памяти сразу же переключится в режим НП и всё скорее всего зависнет. Такова плата за простоту. Триггерная схема НП сбрасывается по физическому сбросу и устанавливается однократно при чтении из верхней памяти и по этому не чувствительна к разного рода шалостям и порт можно использовать как хочется. НП у Специалист-МХ отсутствует как класс ибо по сбросу там активируется внутренний ROM-диск, а это один из штатных режимов ЛК. Цена за такое - маленькая загрузочная программа находится в ROM-диске и занимает некоторое количество его объёма.

CityAceE
29.07.2024, 07:17
Так вот, у Экспресса нельзя настраивать порт PC4 в лог.1 - карта памяти сразу же переключится в режим НП и всё скорее всего зависнет. Такова плата за простоту.
Я так понимаю, что и у журнального варианта (и у моего Лика) такое же поведение?

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

Добрался до эмуляции этой особенности Специалиста и не хочу ничего упустить. По сути эта фишка вообще нигде не используется и вряд ли её как-то можно задействовать с пользовй, но раз компьютер именно так себя ведёт и это можно проверить (https://zx-pk.ru/threads/35304-voprosy-po-arkhitekture-quot-spetsialista-quot.html?p=1194618&viewfull=1#post1194618), то и я хочу это повторить в эмуляторе.

HardWareMan
29.07.2024, 08:23
Я так понимаю, что и у журнального варианта (и у моего Лика) такое же поведение?
Надо смотреть конкретную схему конкретного журнала.

И записи в память в время начального пуска убедительно прошу подтвердить или опровергнуть моё предположение.
По схеме в режиме НП доступно всё, кроме, собственно, ОЗУ, такова упрощённая дешифрация ресурсов в Специалисте. Запись в область самого ПЗУ ничего не даст, РФки не умеют в запись, но если подключить FLASH то можно писать в неё. Запись в системное ППА жизненно необходимо для работы НП.

CityAceE
29.07.2024, 10:32
Надо смотреть конкретную схему конкретного журнала.

Вот схема конкретно моего Лика:
https://pic.maxiol.com/thumbs2/1696396324.780858384..jpg (https://pic.maxiol.com/?v=1696396324.780858384..jpg&dp=2)



По схеме в режиме НП доступно всё, кроме, собственно, ОЗУ, такова упрощённая дешифрация ресурсов в Специалисте

Спасибо! Собственно, это я и пытался выяснить.

HardWareMan
29.07.2024, 13:24
Вот схема конкретно моего Лика:
https://pic.maxiol.com/thumbs2/1696396324.780858384..jpg (https://pic.maxiol.com/?v=1696396324.780858384..jpg&dp=2)

Ну,тут непосредственная схема НП как в Экспрессе. Стало быть он должен вести себя так же.

CityAceE
29.07.2024, 18:12
Так, стандартную журнальную схему начального пуска реализовал. Всё работает, тест проходит. Добрался до 8-ми цвета.

В М-К №8 за 1990 год написано следующее:


Подключение модуля к выводу 13 DD44 (см. схему компьютера "Специалист") вызвало необходимость изменить схему начального пуска. Кроме того, потребовалось внести коррективы в системную ПЗУ.


Изменения в схеме:
https://pic.maxiol.com/images2/1722264919.780858384..png

Стандартное ПЗУ:
https://pic.maxiol.com/images2/1722264958.780858384..png

Патченое ПЗУ для 8-ми цветов:
https://pic.maxiol.com/images2/1722265009.780858384.8.png

То есть ввели команду EI. По схеме я не уверен, что на 100% понимаю происходящее. Мы перерезаем дорожку от 4-го бита порта С ППА. И таким образом система начального пуска перестаёт реагировать на 4-й бит регистра С.

Далее на место отрезанной дорожки подаём сигнал INTE (разрешение прерываний) с процессора. Итого, насколько я понимаю, как только мы подаём команду EI, то память конфигурируется в рабочее положение с ОЗУ, экраном, ПЗУ и портами.

Правильно?

А если теперь подать команду DI, то что будет? Снова С000-FFFF продублируется в 4-х областях? Или EI защёлкивает конфигурацию памяти до следующего сброса?

ivagor
29.07.2024, 18:40
А если теперь подать команду DI, то что будет?
То же самое, что и при PC4=1 в оригинальной схеме.

HardWareMan
29.07.2024, 21:06
Выход INTE это суть однобитный регистр, который имеет 2 выделенные команды для его установки или сброса: DI записывает в него 0, а EI = 1. Конечно, он сбрасывается в 0 с общим сбросом. Этот выход используется для организации маскирования прерываний, поэтому команды имеют такую мнемонику. Так как в ЛК прерывания не используются, то логично использовать такой халявный регистр с эксклюзивными быстрыми командами в своих целях. В РКшке он работает на звук. Ну а тут решили использовать как НП. У Z80, например, схема маскирования находится внутри на кристалле, поэтому у него есть 2 входа прерывания (маскируемое и не маскируемое) и нет выхода INTE. У i8080/ВМ80 прерывания по сути не маскируются, маску следует организовывать снаружи. Поэтому можно организовать NMI в любой адресации или комбинации, в отличии от Z80.

CityAceE
31.07.2024, 09:11
Я вот не поленился, доделал в конфиге Лика начальный пуск. Действительно улетает: Lik.zip
Попытался по аналогии сделать конфиг для модифицированной схемы НП для 8-ми цветного режима, чтобы раскладка памяти менялась не с помощью PC4 ППА, а с помощью сигнала INT процессора. Но что-то у меня ничего не работает. Прошу помощи!

ivagor
31.07.2024, 10:50
с помощью сигнала INT процессора
Чтобы не было путаницы: вход INT - 14й вывод 8080, выход INTE (который и используется в схеме оригинального 8цвета) - 16й вывод.

CityAceE
31.07.2024, 18:26
Я прекрасно понимаю, что определить наличие платы цветности у Специалиста невозможно. Можно только выяснить будет ли мешать 8-ми цвет при непеределанной схеме НП. Ну и косвенно можно судить о наличии 8-ми цвета, если сделана доработка схемы НП.

Но вот я подумал, а может быть всё-таки каким-то чудесным образом записывая и читая ППИ, значение его РУС в определённый момент (https://zx-pk.ru/threads/8634-vektor-06ts-emulyatsiya.html?p=943274&viewfull=1#post943274) или как-то иначе, всё-таки позволят судить о наличии цвета у компьютера? Вот прямо никак не хочется верить, что нет никакого решения :)

ivagor
31.07.2024, 18:51
определить наличие платы цветности у Специалиста невозможно.
Возможно, но в неактуальном для современности варианте (много ли сейчас реалов с 8 цветами, у которых начальный пуск сделан как у авторов данной схемы?). Даже делал и где-то выкладывал версию портированной игрушки с попытками подобного рода, но учитывая современные клоны специалиста которые есть и которые возможно будут, пришел к мысли, что лучше не злоупотреблять подобными автодетектами. Это мое субъективное мнение, вполне возможно, что кто-то считает наоборот.

CityAceE
31.07.2024, 19:16
Возможно
Иван, поделись информацией ещё раз, пожалуйста! Я пропустил :( Мне не для игрушки! Мне для теста конфигурации/эмуляции!

ivagor
31.07.2024, 20:17
Ссылка с игрушкой протухла, возобновлять не хочу, как уже сказал я сменил отношение к подобному автодетекту на отрицательное. Собственно сам автодетект (4с(или bw)/8с/MX2) опирался на отличия в пзу

.ORG 0h

jmp Test1
Test2:
sta 0FF02h
nop
nop
nop
nop
nop
cpi 10h
jz Spec8c
;4 цвета
lxi h,ClrTab4
shld SetClrTabAdr+1
jmp Spec8c

Test1:
lda 0C000h
cpi 0C3h
jnz SpecMX

lxi h,0C006h
mvi a,3Eh
cmp m
jnz Spec8c
inx h
mvi a,82h
cmp m
jnz Spec8c
mvi a,10h
jmp Test2
SpecMX:
lda 0F01Ah
ori 2
sta 0F01Ah
Spec8c:

На реалах это не проверялось. SpecMX - подразумевается MX2.

CityAceE
01.08.2024, 07:55
Собственно сам автодетект (4с(или bw)/8с/MX2) опирался на отличия в пзу
Спасибо за код! Я поизучал и для меня это было полезно. Вполне себе неплохое определение того, что игра останется работоспособной на конкретном железе. Однако у тебя, собственно, тоже определяется не само наличие схемы цветности, а то, что код применяемый к цвету не будет конфликтовать с железом.
Я у себя тоже переключаю ПЗУ по классической схеме. Если переключилось, то классика - возможны 5 цветов и ч/б. Далее я заморочился и научился переключать ПЗУ туда и обратно по доработанной схеме. Если переключилось, то возможны 8 цветов и всё, что ниже. Но это тоже только про саму возможность. А вот если бы хоть как-нибудь определять прямо физическое подключение платы цветности... Но, видимо, всё-таки никакими трюками это сделать невозможно :(

ivagor
01.08.2024, 10:45
А вот если бы хоть как-нибудь определять прямо физическое подключение платы цветности
То есть ты допускаешь, что кто-нибудь изменил схему начального пуска на EI/DI, но при это не реализовал 8 цветов. Это примерно как "обманул таксиста - заплатил и не поехал", хотя гипотетическую возможность можно допустить. Но такой подход можно применить к почти любому детекту и не обязательно на специалисте. Например "имитатор vga", который с программной точки зрения может вести себя идентично натуральному, но при этом не генерировать никакого изображения.
Случай восьмицветов без EI/DI (например как в MX2) я не затронул, там возможны свои детекты.

b2m
01.08.2024, 13:53
Попытался по аналогии сделать конфиг для модифицированной схемы НП для 8-ми цветного режима, чтобы раскладка памяти менялась не с помощью PC4 ППА, а с помощью сигнала INT процессора. Но что-то у меня ничего не работает. Прошу помощи!
Вот: 81070

Но ПЗУ нужно конечно-же подправить. Там как раз два байта свободны после JMP:


было 0000: C3 03 C0 31 FF 7F 3E 82 32 03 FF C3 44 C4 00 00
надо 0000: C3 03 C0 31 FF 7F 3E 82 32 03 FF FB 00 C3 44 C4

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

CityAceE
01.08.2024, 15:24
Вот: Lik_inte.zip
Спасибо! То, что нужно! Я делал ровно то же самое, но не учёл, что нужно в карте памяти сигнал инвертировать. Поэтому у меня ничего не работало. Зато теперь всё работает. И моя определялка теперь протестирована не только на моём эмуляторе. Что косвенно подтверждает, что я у себя тоже всё сделал правильно. Хотя, безусловно, лучше всего всё проверять на реальном железе, но желающих не нашлось.