-
- ? Alexander "Sandro" Tishin
- 20.07.2020 13:39
gid> Как, например, прервать цикл ожидания данных в ком порте по прерыванию и анализ принятого на предмет определённых данных от БК, я не представляю, кроме как обернуть цикл в try, а на кнопку "Отмена" повесить throw, хрень какая-то получается.
¤
Правильно, хрень и работать не будет. Надо запускать работу с портом в отдельном потоке и ждать функцией WaitForMultipleObjects и символов от терминала, и семафора, срабатывающего по кнопке "Отмена" и прочих событий.
¤
Специально для таких вещей эта функция и нужна.
¤
PS: Можно и иначе, но так проще всего.
- ? Alexander "Sandro" Tishin
- 07.07.2020 22:04
Принято. Соберу потихоньку. Кстати. Сейчас схожу за пивом, и попробую общественности задать вопрос, накопилось у меня.
¤
PS: CORDIC действительно перебор, для наших целей он слишком дорог. Я делал оценку, не надо с ним связыватся. Алгоритм хороший, но для Астероидов и т.д. -- это реально перебор.
- ? Alexander "Sandro" Tishin
- 07.07.2020 11:41
Ну да, в одной таблице. Выложу попозже, просто я занят сейчас. Всё равно же для своих целей уже написал, почему бы не выложить-то?
¤
256 возможных углов хватит?
- ? Alexander "Sandro" Tishin
- 29.06.2020 07:25
S_V_B, а что именно нужно? Код для поворота координат? Так там умножаем вектор-столбец на матрицу поворота, и всё.
¤
Мне просто код для вращения и переноса в произвольную точку привести?
- ? Alexander "Sandro" Tishin
- 05.06.2020 18:14
Честно признаюсь: я вообще не понимаю, в чём проблема. Для БК мало 1,5МБ/сек? У неё команд в секунду в пять раз меньше! Хост выдаёт так мало? Ну так это где-то косяк в софте, современные винты выдают порядка 100 МБ/сек. И дело тут явно не в ЯВУ вместо ассемблера.
¤
В общем, не понимаю.
- ? Alexander "Sandro" Tishin
- 04.06.2020 14:31
Посмотрим. В любом случае, в DirectX всё равно те же 60 Гц, никакого чуда там быть не может. Еднственный вариант -- оконная система вносит случаюйную задержку. Надо будет какую-нибудь телеметрию туда прикрутить для получаения отчётов, а то разговоры на форуме тут не помогут.
Кстати, а какая версия эмулятора используется? В последней я несколько поменял алгоритм синхронизации. Теоретически должно было стать лучше.
¤
PS: Кстати, специально проверил -- на моей машине Java использует именно Direct2D в качестве средства вывода. Может, вообще сделать какой-нибудь отчёт об аппаратной конфигурации? Виртуалка виртуалкой, а кое-что из неё таки доступно.
- ? Alexander "Sandro" Tishin
- 04.06.2020 14:17
Я знаю. Поэтому и спрашиваю -- зачем кэшировать в эмуляторе, если всё равно узкое место -- эмулируемая машина.
- ? Alexander "Sandro" Tishin
- 04.06.2020 09:57
А какая разница? Дисковая подсистема ОС всё равно делает упреждающее чтение и кэширует данные. Ты просто продублируешь и так уже имеющийся функционал.
¤
Собственно, ты же сам об этом и пишешь. Если винт и ОС сами буферизуют данные, зачем это делать в третий раз?
- ? Alexander "Sandro" Tishin
- 29.05.2020 00:56
KUVO: монитор 60 герц, так? Из-за этого каждый пятый кадр показывается два раза. Потому, как у БК 50 кадров, или, если быть точным, 48 с копейками. Нужен 50/100 Гц монитор. Ну или 120, на нём хоть дрожь будет мельче.
- ? Alexander "Sandro" Tishin
- 24.05.2020 15:48
Multicolor намертво включен и выключаться не будет. Эта опция -- реликт. Вероятно, там будет включение экспериментального расширителя палитры.
¤
С монохромом мне пока не очень ясно, как его делать из-за известных заморочек с преключением типа монитора кабелем и поддержкой серого режима.
Исходно была идея сделать его в виде, собственно эмуляции подключения через монохромный выход, но, поскольку это и так можно переключать кнопками ...
¤
Ну, выбор цвета в монохром режиме я в любом случае сделаю, а вот необходимость опции "монохром" не так уж и очевидна.
¤
Про инициализацию -- подумаю, как лучше сделать. Скорее всего, придётся ставить ловушку исполнения кода в нужном месте монитора (после инициализации), и грузить уже тогда. В принципе, для точек останова в отладчике это всё равно нужно делать.
¤
Кстати, надо бы и механизм дампа памяти сделать, да. И загрузки его. Подумаю.
¤
Ещё пожелания?
- ? Alexander "Sandro" Tishin
- 16.05.2020 12:47
Так же, как к БК без СМК-512. Он тут вообще ни при чём.
¤
Подключение -- шина МПИ (AD0..15, SYNC, DIN, DOUT, WTBT, RPLY), сдвиговый регистр (4 линии), строб записи в 177662, частота 6 МГц. Ну и питание.
¤
Выход видео -- ну тут есть варианты. Либо подрубиться к существующим выводам, либо сделать разъёмы отдельно. Тут надо думать, что лучше.
¤
Борода МГТФ, ну а что поделать? Ну технически да, можно вместо этого сделать внешнюю платку на разъём МПИ и вывести на него нужные 6 проводов, вроде свободных выводов хватает.
- ? Alexander "Sandro" Tishin
- 16.05.2020 08:16
grf@, как платка с несколькими (навскидку выходит чуть больше 10) ИС малой степени интеграции, 1533 серия. И чутка аналоговых деталей. Всё строго аутентично и в рамках технических возможностей второй половины 1980-х.
- ? Alexander "Sandro" Tishin
- 07.05.2020 14:33
Дешифраторы на группы 17755x и 17772x не отличаются ничем -- два нулевых бита и 11 единичных что так, что эдак.
¤
Но на 17755x надо как-то обеспечивать распознавание наличия расширителя, но при этом не ломать устройства, которые закрывают эти адреса и, тем более, считают свою контрольную сумму. так-то мой расширитель и поверх ОЗУ работать будет, если там нули. Читаемые и записываемые порты полностью разделены.
¤
Теоретически, разумеется, можно по начальному сбросу прятать регистр состояния -- больше доступных по чтению нет -- и делать доступным только после записи в регистр режима. Тогда это будет работать с Бейсиком и пр. Лишь бы по адресу 177550 были нули, и никто в адреса 17755x не писал, больше ничего не нужно.
¤
По сложности это максимум один корпус мелкой логики. Не катастрофа.
- ? Alexander "Sandro" Tishin
- 07.05.2020 11:28
Понятно. Ну, мультипроцессорность на ВМ1 вообще весьма сомнительная вещь, и да -- её нет смысла делать. Даже какой-нибудь странный ускоритель на ВМ2 и то намного лучше будет.
¤
Сцепляться по адресам с СМК _очень_ не хочется. Потому как расширитель палитры -- это регистры, которые при активной работе с графикой нужны постоянно, в том числе и во время работы ОС, а не включил -- поработал -- выключил.
¤
Тогда выходит 177720? Без вариантов?
- ? Alexander "Sandro" Tishin
- 06.05.2020 22:29
Вот же ж блин! То-то ведь адреса знакомыми показались. А ведь я же сам делал перехватчик пультового режима, да. Совсем зашился уже :(
¤
А из каких соображений именно эти адреса? Ну и в любом случае, ниже 177400 что-то располагать боязно, а то есть любители туда ОЗУ, к примеру засунуть. ПЗУ Бейсика десяточного, опять же аж до 177577 достаёт, правда, неясно, почему так. Нули-то с 177532 идут, зачем там этот блудный байт?
- ? Alexander "Sandro" Tishin
- 06.05.2020 14:57
Мультиколор!
¤
Предупреждаю сразу, код я только что написал из головы и не проверял. Но вроде работать должен.
¤
; Мультиколор с произвольным режимом и палитрой на строку
; с адреса 030000 должна располагаться построчная таблица значений
; регистров 177672 и 177674, всего 01000 (1024.) байт.
START:
; Запретим прерывания, выключим экран и обнулим прокрутку
MTPS #340
CLR @#177672
MOV #1330, @#177664
¤
; Подготовим изображение
CALL LOAD_IMAGE
¤
; Для начала, ждём целый новый кадр
¤
1$: TST @#177670
BMI 1$
¤
; Цикл отрисовки
; Поехали!
MAIN_LOOP:
; Счётчик строк
CLR R0
; Таблица построчных значений
MOV #30000, R1
; адреса регистров
MOV #177670, R3
MOV #177672, R2
MOV #177674, R4
; Ждем вертикальное гашение
2$: TST @R3
BPL 2$
; Пропустим ожидание 0 строки
BR 4$
; Цикл по строкам
3$: CMPB R0, @R3
; паранойя (а вдруг мы пропустили строку?) – так-то и BNE хватит ;)
BHI 3$
; должно быть гашение перед новой строкой – обновляем режим и палитру
4$: MOV (R1)+, @R2
MOV (R1)+, @R4
; тут есть немного времени; можно, например, положить звук в Covox
; как-то так (но тогда не забываем это делать и в других местах!):
; MOVB (R5)+, @#177714
; на следующую строку
INCB R0
BNE 3$
; Видимые строки закончились;
; У нас есть ~15К тактов на различные расчёты
CALL LOGIC
; На следующий кадр
BR MAIN_LOOP
- ? Alexander "Sandro" Tishin
- 06.05.2020 14:54
Расширитель палитры БК до 64 цветов (РПБК-64)
¤
Необходимость:
¤
1) Отсутствие палитр в 0010, странный набор палитр в 0011М
2) Отсутствие программного переключения 256 ↔ 512 точек
3) Отсутствие режима 16 цветов
4) Сложности с выяснением текущей позиции луча на 0011М, невозможность на 0010
5) Нет кадрового прерывания на 0010
¤
Желательно:
¤
Минимум переделок; совместимость со штатными режимами 0010/0011М; использование контроллера памяти 1801ВП1-37 (64 байта в строке). Адаптация спрайтовой графики с минимальным вмешательством в код, а лучше – без оного.
¤
¤
Предлагается:
¤
Палитра 2/4 цвета из 64 возможных, либо непосредственно 16 цветов с фиксированным кодированием.
¤
¤
Регистры:
¤
177670 – регистр состояния, только чтение
177672 – регистр режима и грубой палитры, только запись
177674 – регистр точной палитры, только запись
177676 – резерв, Trap to 4
¤
Регистр состояния, биты:
¤
0..7 – номер очередной строки. Выводится номер текущей строки при нахождении на активном поле, либо номер следующей к выводу, если на поле гашения сигнала.
14 – горизонтальное гашение (HBLANK)
15 – вертикальное гашение (VBLANK)
¤
Остальные биты – нули (для удобного использования команды CMP при ожидании нужной строки)
¤
Регистр режима и грубой палитры, биты:
¤
0..2 – GRB цвет 0, старшие биты
3..5 – GRB цвет 1, старшие биты
6..8 – GRB цвет 2, старшие биты
9..11 – GRB цвет 3, старшие биты
12..13 – режим
14 – разрешение кадрового прерывания (дубликат 177662)
15 – выбор страницы для вывода на дисплей (дубликат 177662, только 0011М)
¤
Регистр точной палитры:
¤
0..2 – GRB цвет 0, младшие биты
3..5 – GRB цвет 1, младшие биты
6..8 – GRB цвет 2, младшие биты
9..11 – GRB цвет 3, младшие биты
12..15 – резерв.
¤
При записи в регистр режима и грубой палитры старшие биты цветов автоматически записываются и в младшие биты (в регистр точной палитры). Это позволяет при использовании 8 цветов не производить запись в регистр точной палитры.
¤
Переключение в расширенный режим производится любой записью в регистр режима. Переключение в исходный режим 0011М – любой записью в 177662(177663). Переключение в исходный режим на БК-0010 – ??
¤
При начальном сбросе (DCLO = 0) расширенный режим выключается.
¤
Режимы работы
¤
Все режимы работы имеют 64 байта в строке из соображений максимального использования оригинальной аппаратуры БК. Как и в оригинальной БК, изображение формируется из 16-битного слова, пиксели упорядочены слева направо с младших бит в старшие.
¤
Всего есть 4 режима, выбираемые битами 12 и 13 регистра режима:
¤
00 – 512 точек в строке, два цвета. Используются цвета палитры 0 и 1.
01 – 256 точек в строке, четыре цвета. Используется вся палитра.
10 – 256 точек в строке, 16 цветов блочный 8x1. Старший байт содержит два IGRB цвета, младший, побитово, соответствие пикселям. Палитра не используется.
11 – 128 точек в строке, 16 цветов, 4 бита (IGRB) на пиксель. Палитра не используется.
¤
Декодирование IGRB цвета в 6-битный GgRrBb цвет
¤
IGRB цвет представляется по схеме, принятой в CGA/EGA, то есть бит I используется в качестве младшего бита каждой из компонент: GIRIBI → GgRrBb
¤
Это позволяет получить 4 уровня яркости серого и два – остальных цветов, плюс получить более натуральный (66%, а не 100%) уровень насыщенности ярких цветов.
¤
Вывод на цветной монитор производится посредством трёх двухбитных ЦАП с линейной характеристикой (результирующая гамма – sRGB, т. е. С показателем степени 2,2).
Вывод на монохромный монитор производится посредством одного шестибитного ЦАП со следующим порядком перемежения бит: GRBgrb. Гамма та же.
¤
Программирование.
¤
Определение наличия расширителя рекомендуется производить командой TST @#177670. При отсутствии расширителя произойдёт Trap to 4.
¤
В случае, если достаточно использовать в палитре 8 базовых цветов, достаточно записи в регистр режима и грубого цвета. Пример:
¤
; установить режим 4 цвета чёрный – красный — зелёный — белый, экран 0,
; кадровое прерывание запрещено
MOV #17420,@#177672
¤
; установить режим 2 цвета синий — белый, экран 0,
; кадровое прерывание запрещено
MOV #71,@#177672
¤
; установить режим 16 цветов 8x1, экран 1,
; кадровое прерывание запрещено
MOV #120000,@#177672
¤
; установить режим 128x256x16 цветов экран 0,
; кадровое прерывание разрешено
MOV #70000,@#177672
¤
; установить режим 4 оттенка серого, экран 0,
; кадровое прерывание запрещено
MOV #17700,@#177672
MOV #7070,@#177674
¤
; установить режим 4 оттенка зелёного, экран 0,
; кадровое прерывание разрешено
MOV #54400,@#177672
MOV #4040,@#177672
¤
; погасить экран и запретить кадровое прерывание
CLR @#177672
- ? Alexander "Sandro" Tishin
- 06.05.2020 14:52
Ну, начнём ;)
¤
В общем, думаю я про реализацию расширителя палитры БК уже давно, но предыдущие варианты мне не очень-то нравились и самому. Но недавно мне в голову пришёл вариант, который я хотел бы выставить на обсуждение. Базовые идеи:
¤
0) (не обсуждается) Простая реализация на аутентичной аппаратуре с минимальным вмешательством в схемотехнику БК. Выходит чуть более десятка корпусов 1533 серии. Точно ещё не скажу, т.к. управляющую мелочёвку не разрисовал пока.
1) Максимально возможная совместимость с оригинальной БК. Софт должен работать либо без переделок, либо с минимальной правкой. В играх желательно ограничиться заменой спрайтов без вмешательства в код. Да, это автоматом подразумевает 64 байта в строке и прочие особенности 1801ВП1-37. Ну так и пункт 0 это подразумевает.
2) Разумный максимум возможных цветов, но без экстремизма. На БК мало памяти всё же. Да и вообще, много ли толку Коммодору от его 4096 цветов, если это 4096 оттенков коричневого? ;) Пока принято 64 цвета (EGA цвета).
3) Хочется мультиколор, то есть все цвета одновременно со стабильной картинкой. С ограничениями, но реализуемо. Видеорежимы и палитру можно переключать в любой момент.
4) В пределах разумного, поддержка и БК-0010 тоже.
¤
Сейчас выложу сюда черновик описания.
¤
Да, сразу вопрос: адреса 177670..77 кто-нибудь у нас занимает? Про Unibus машины я знаю, но это не про нас.
- ? Alexander "Sandro" Tishin
- 06.05.2020 11:02
Чего-то раньше пропустил эту тему.
¤
sav, да, это можно и нужно было сделать. В ВП1-37 свободна ровно половина микросхемы, места завались. Реально сложности с размещением и трассировкой БМК начинаются где-то в районе 2/3 .. 3/4 заполнения, зависит от регулярности логики.
¤
Даже если просто уметь использовать текущий цикл, а не ждать следующего, уже можно было бы значительно ускорить всё. У даже реально сделанной БК окно доступа для ЦП составляет 666 нс, а время цикла у 565РУ6В -- 280 нс, время есть (Сколько там у РУ6Г? 350?).
¤
Ну а с регистрами 2x16 можно было бы получить, действительно, мгновенную запись и очень быстрое чтение. Да.
¤
Правда, разработчики 1-37 этого бы точно не осилили :(
¤
В качестве примера: мало того, что у них в кадре не стандартные 312,5 строк, а 320, так ещё и счётчик там зачем-то сделан переключаемый на 256 и 64 строк, по очереди. Зачем так? Нельзя нормально было?
- ? Alexander "Sandro" Tishin
- 06.05.2020 09:03
Наконец-то нашлось время проверить по схеме электрической принципиальной. В общем, там всё просто, как валенок: на самом деле (как я и подозревал) там сделан простенький детектор поля гашения видеосигнала на двух триггерах. Конкретно, на первом триггере из D28 (К555ИЕ5, четырёхразрядный счётчик - делитель) и D3.2 (К555ТМ2, два D-триггера со сбросом и установкой, использован второй).
¤
Оба тактируются непосредственно выходом синхросмеси с 1801ВП1-37, но на самом деле важен только строчный синхроимпульс, так как во время кадрового детектор стоит в защёлкнутом состоянии и ждёт начала изображения. Тактирование происходит по заднему фронту, так как синхроимпульс -- инверсный.
¤
Логика работы: если между двумя строчными импульсами не было записи в пиксельные сдвиговые регистры, то запрос на прерывание взводится; если произошла запись (т.е. пошёл вывод на экран) -- то снимается. Иначе сохраняется предыдущее значение.
¤
То есть, если считать первую видимую строку изображения за №0, то прерывание начинается в конце ССИ, замыкающего строку 256, и запрос удерживается до первого видимого пикселя строки 0. Итого 62.66 строки, или примерно 4010 мкс. Прорва времени, за него можно очень много перерисовать. Это вам не всякие вредные машинки с прерыванием аккурат в начале видимой области ;)
¤
Тонкости:
Если включен короткий экран, то детектор сработает на ССИ, замыкающем 64 строку. Если включить короткий экран во время вывода нижних 192 строк, то прерывание произойдёт через одну полную строку (на втором ССИ). Таким образом можно вызвать несколько прерываний на кадр.
Бит в регистре 177662 непосредственно запрещает запись единицы во второй триггер. Таким образом, после разрешения кадровых прерываний прерывание произойдёт по первому фронту _любого_ синхросигнала. Включая выравнивающие импульсы на на КСИ. Таким образом тоже можно вызвать несколько прерываний, но уже на поле вертикального гашения.
¤
Отсюда следует, что если нужны нормальные кадровые прерывания, то оба этих бита лучше не изменять во время работы программы. Один раз настроил, и всё.
¤
¤
Ну, собственно, вот и вся теория :)
¤
Совсем точные времена в тактах напишу как-нибудь позже (не сегодня, сегодня буду программы писать).
- ? Alexander "Sandro" Tishin
- 05.05.2020 11:06
Думаю, для отладчика достаточно контролировать глубину стека. Если пошли какие-то хитрые заморочки, то всё равно это придётся разбирать вручную.
- ? Alexander "Sandro" Tishin
- 04.05.2020 14:01
Надо смотреть, как это делают реальные процессоры :)
¤
Для оптимизации возвратов там есть очень короткий аппаратный стек, называется RSB (Return Stack Buffer). При каждом вызове туда пишется, где продолжать исполнение при возврате, и текущее значение SP. С RET всё понятно. Ну а иначе -- если SP оказался выше -- выбрасываем запись, там был какой-то хитрый выход из подпрограммы.
¤
Как адаптировать к отладчику -- очевидно.
- ? Alexander "Sandro" Tishin
- 01.05.2020 16:58
А вот память подводит -- насколько хорошо с ними было? С одной стороны, физически они вполне себе существовали, с другой стороны, некоторые кварцы были магическим образом недоступны, несмотря на наличие их в справочниках.
Это я к чему: сейчас я потихонечку сооружаю точную поведенческую модель ВП1-37, чтобы раз и навсегда иметь точные времянки памяти. И по ходу дела пришла мне в голову мысль: вот тут ММ уже который год агитирует за "идеологически верную БК". В том числе, за видережим 640x256, он же 320x256x4 с квадратным пикселем. Всё это хорошо, но для этого нужна частота 8 МГц, и при этом, если мы хотим режим совместимости с оригинальной БК, нужно и 6 МГц. Наименьшее общее кратное -- 24 МГц. Так вот, будет ли подобная машина адекватна реальности 80-х в смысле доступности этого кварца?
¤
Ну сейчас, понятное дело, их как грязи, в любых корпусах.
- ? Alexander "Sandro" Tishin
- 01.04.2020 23:56
Выложил на http://sandro.pdp-11.ru/ версию 0.6 alpha 3.
¤
Пока мелочи: сделал принудительное включение серого режима по Ctrl-Alt-F8, плюс Covox с обратной связью (опция Loopback Covox). In Your Space теперь работает ;)
- ? Alexander "Sandro" Tishin
- 25.03.2020 14:03
Я правильно понимаю, что ты пытаешься туда запрограммировать асинхронную версию реверса процессора? Так у Зайлинкса беда с асинхронными схемами.
- ? Alexander "Sandro" Tishin
- 14.03.2020 10:14
Для Перевала был доступен копировщик, кажется BYCOP6 он назывался, который писал на кассету защищённую версию. Занимал всю память БК-0010.
¤
Ещё у всей первой пятёрки игр от Бортника (Bally, etc) исходно тоже был защищённый загрузчик а-ля спектрумовские игры со счётчиком загрузки. Теоретически на кассетах у меня всё это было, но вопрос, есть ли сейчас.
¤
Кстати, про Перевал: пройти можно только оригинальную версию с защитой. Сломанная версия из двух файлов сломана криво -- там испорчен код отвечающий за, собственно, обработку победы.
¤
Впрочем пройти её честным образом, по всей видимости, невозможно. Даже с бесконечными жизнями я потратил очень много времени. Несколько часов, хотя уровни там короткие.
- ? Alexander "Sandro" Tishin
- 04.03.2020 02:25
Всё, спасибо Максу, официальным сайтом теперь будет http://sandro.pdp-11.ru/
¤
Пока сделал краткое описание (на английском) в качестве главной страницы и залил последнюю альфу. Кто уже скачал -- там пока то же самое.
- ? Alexander "Sandro" Tishin
- 04.03.2020 01:37
Кстати говоря, да. В принципе, у меня в эмуляторе так и сделано, что по завершению кадра по тикам процессора даётся пинок его достроению до конца (там асинхронно) и готовый буфер 512x256 отдаётся на показ.
¤
Ничто не мешает именно в этот момент сделать скриншот.
¤
Более того, MPEG разрешает неквадратный пиксель в принципе.
¤
(есть идеи даже про lossless MPEG для изображений низкого цветового разрешения, но это уже полное мракобесие).
- ? Alexander "Sandro" Tishin
- 04.03.2020 01:01
Информация:
¤
Почту проверил, ок, по основной работе у меня сейчас загруз со сдачей очередного этапа, надеюсь, к выходным закончится. Тогда будет что выложить, и заодно опробовать сайт.
¤
Буду выкладывать альфы, т.к. не факт, что будет время на отполированную версию.
¤
У bitbucket последнее время происходят какие-то непонятные трансформации, не уверен, что там будет надёжный хостинг исходников и бинарников. Посмотрим.
- ? Alexander "Sandro" Tishin
- 03.03.2020 22:06
gid, от мыла в OpenGL спасает параметр фильтрации текстур GL_NEAREST. Тогда будут прямоугольники. Для Direct3D, соответственно, будет D3DTEXF_POINT.
- ? Alexander "Sandro" Tishin
- 03.03.2020 21:55
По историческим причинам в винде действует правило "кто первым встал, того и тапки". То есть, какой поток первым начал рисовать, такой и числится владельцем прав рисования.
¤
Остальным -- как повезёт.
¤
Везение зависит от версии винды, драйверов видеокарты, фазы Луны и т.д.
¤
Сам попадался на это.
¤
Причиной является то, что GDI внутри однопоточный, и многим потокам исполяемых программ прибивается на ходу системой костылей. Отсюда и проблемы.
- ? Alexander "Sandro" Tishin
- 21.02.2020 08:45
Адам, джойстик есть, правда на цифровой клавиатуре. Блок нагрузок -- а зачем он? Что им тестировать в эмулируемой машине? Или имеется в виду covox с обратной связью?
¤
Монохром -- я не хочу вводить в эмулятор логику, идущую вразрез с эмулируемой машиной. Пока поэтому сделал режим принудительного форсирования монохрома по Alt-ScrollLock/Ctrl-Alt-F8. В нём просто игнорируются все манипуляции с палитрами, всегда выводится монохром, как в 0010 оригинальной.
¤
С отладчиком сложнее, это же в первую очередь -- пользовательский интерфейс. Ну то есть, можно малой кровью сделать чисто консольный отладчик со всякими d 100 и т.д. но это очень неудобно. Разве что какой-то гибрид, навроде командного режима vim?
- ? Alexander "Sandro" Tishin
- 21.02.2020 08:39
Манве, бегло просмотрел исходник democracy. Да, тут нужна точная потактовая эмуляция, иначе сползёт. Единственное, а точно обработчик прерывания должен выполняться при MTPS #0? Это как-то странно.
- ? Alexander "Sandro" Tishin
- 21.02.2020 08:37
Макс, спасибо, страничка будет очень в тему. Моя почта: sandro.tishin@gmail.com
¤
Собственно, надо было вставить в readme для упрощения обратной связи, не подумал. В следующем релизе добавлю.
¤
Правда, есть одна неловкость: на форуме вроде был пользователь с ником Сандро, правда -- кириллицей. Наверное, если я всегда буду писать свой ник латиницей, этого должно хватить для различения ...
- ? Alexander "Sandro" Tishin
- 15.02.2020 23:57
Manwe, нет там ничего, только democracy.bin и file_id.diz
- ? Alexander "Sandro" Tishin
- 15.02.2020 16:46
А исходник можно, чтобы с дизассемблером не возиться?
¤
Про 5 часть я знаю. Там генератор случайных чисел ЕМНИМС на времянки машины как-то завязан, вот оно и выходит так.
¤
Про палитры: в десятке вообще не было никакой конверсии цветов. Просто коды 01, 10, 11 транслировались либо в уровни серого, либо в BGR. За BGR им отдельное "спасибо", так как по уму надо было делать BRG. В порядке возрастания субъективной яркости. Ну да, пришлось бы подумать про шрифт в режиме 512 пикселей, ну и что?
Ладно, про этому тему можно много написать, но это не в эту тему.
¤
Так вот, если делать веса RGB 3:2:1, то палитра 0 будет выглядеть, как оттенки серого на десятке, но остальное будет довольно-таки кошмарно. Например в палитрах, где есть Cyan и Red одновременно, то они будут почти одинакового цвета, причём красный -- ярче. Бедный CSIDOS ...
¤
Если делать физиологически корректно, RGB 2:4:1, то многие палитры 11М будут выглядеть нормально, зато в палитре 0 будет совсем непохоже на десятку в оттенках серого. Особенно пострадает этот самый режим 512 пикселей, там будет бред -- сплошная закраска в два, а то и четыре раза темнее дырчатой. Это никуда не годится.
¤
Вот почему и спрашиваю. Делать-то что?
¤
Я, разумеется, могу сделать оба варианта. Но это будет бардак, разброд и шатание. У всех разные цвета, как у УКНЦ с палитрами RGB vs GRB ...
¤
Очень не хочется так делать
¤
(Кстати, как-нибудь можно попросить админов zx-pk.ru поменять мне почту регистрации? Старая уже ушла давно, а пароля я, естественно, не помню.)
- ? Alexander "Sandro" Tishin
- 15.02.2020 16:20
Поднимем тему для ясности, так как теперь известна точная схема ВП1-37.
¤
Кадр состоит из 320 строк по 64 мкс (384 пикселя с учётом полей гашения) каждая, таким образом его длительность -- 20,48 мс. Что даёт кадровую частоту 48,828125 Гц ровно.
¤
Вот такие пироги.
- ? Alexander "Sandro" Tishin
- 13.02.2020 20:00
Terra, в лоб действительно на БК нет горизонтального скролла, но его можно делать достаточно быстрым и в программном виде. Одна проблема -- придётся делать так, чтобы не весь экран перерисовывать. У тебя самое большее 100К записей в память в секунду, надо в это ограничение как-то влезть. Если перерисовывать весь экран, то это не более десяти кадров в секунду, мало.
¤
Смутные мысли есть, но это же надо технодемку писать, и смотреть, как оно там выходит, сколько накладных расходов поверх копирования...
- ? Alexander "Sandro" Tishin
- 13.02.2020 19:47
S_V_B, не прокатит на процедурах из ПЗУ, они медленные до жути. Я в древние ещё времена писал преобразование Фурье на БК и очень быстро понял, что SIN()/COS() бейсиковские категорически противопоказаны.
¤
Сделай себе таблицу на 256, скажем, значений, и пользуйся. Так все делают. Можно даже на 64, засунуть туда первый квадрант и пользоваться. Скорее даже нужно.
¤
Таблицу с собой таскать не надо, она тривиально считается по алгоритму Гёрцеля: https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%93%D1%91%D1%80%D1%86%D0%B5%D0%BB%D1%8F
¤
Умножать надо через таблицу квадратов, её тоже можно очень просто генерировать.
¤
В принципе, орень плавные Астероиды должны в 4К влезть с ааааагромаднейшим запасом. Но на ассемблере ;)
- ? Alexander "Sandro" Tishin
- 13.02.2020 19:11
Манве, а как переключать-то? В десятке же нет палитр, а в 11 есть. Если просто 2 бита в 4 уровня конвертировать, то на 11 такого не было никогда, а если RrGB цвет после применения палитры, то это уже не 4 уровня.
- ? Alexander "Sandro" Tishin
- 13.02.2020 19:07
Ффух. Стало понятно, что свободного времени как нет, так и не будет, скорее всего. Поэтому выкладываю что есть в качестве альфа-версии 0.6
¤
Благо, теперь есть результаты реверса микросхем, и многое стало понятней.
¤
Что есть:
¤
* Починена эмуляция AY. Теперь синтезатор работает, как на самом деле, а не как в документации написано. Звук стал намного более похож на реал.
* В значительной части починен видеоадаптер. Теперь там 320 строк, а не 312. Блин, в упор не понимаю, так было сложно счётчик до 312 сделать? Вместо того схемотехнического ужаса, который они там нагородили?
* Кадровое прерывание подвинуто в более правдоподобное место. Впрочем, поскольку времянки всё равно не совсем совпадают с 11М, то некоторая кривость осталась.
* Реальные палитры.
¤
* Вообще несколько перепилены звук и видео, а то на Windows 7 наблюдались странности. На XP и Vista вроде бы не повлияло. На 8/10 не проверял.
* Ещё некоторое количество мелких правок.
¤
* Ключи командной строки. Ещё что-нибудь стоит добавить?
¤
Чего нет.
¤
* Полноэкранного режима. Если хочется получить красивую картинку, то там больше заморочек, чем я ожидал. Пока отложено.
* SMK и соответственно HDD. Надо бы, но там надо писать эмуляцию с нуля.
* Совсем точных времянок процессора. Надо смотреть верилог и реконструировать, особенно взаимодействие с шиной. Хотя бы потому, что правильная эмуляция зомби-циклов критична.
* Эмуляции новооткрытых багов, в первую очередь бага с флагом C. MOVB, CLR(B) и MFPS тоже однозначно нуждаются в ремонте.
* Вместо отладчика как был макет, так и остался. Увы.
* Нет мыши.
* Не эмулируются тонкости работы клавиатуры.
¤
Пока так.
¤
Ссылка: https://yadi.sk/d/j8wY2SLzse-Vfw
¤
Предложения по мелким доработкам (час-два работы) принимаются. Пишите.
- ? Alexander "Sandro" Tishin
- 17.10.2018 18:25
Так, дела такие:
¤
К сожалению, свободное время нашлось только сейчас.
¤
Управление с командной строки уже есть, осталось дотестировать.
Цвета будут правильные.
Будет полноэкранный режим.
Со звуком надо что-то делать, они в Java 8, похоже, переделали потроха, пока поставлено в низкоприоритетные задачи.
Потактовая симуляция, слава BarsMonster'у, будет, но не в этой версии. Много переписывать.
¤
Исходники будут, но дайте что ли время их причесать. Кто какую лицензию рекомендует? Я пока склоняюсь к MIT.
¤
PS: И, в конце концов, есть где-нибудь однозначная дока на SMK? А то мне какое-то обрывки попадаются.
- ? Alexander "Sandro" Tishin
- 04.09.2018 14:33
Поддерживаю. Вообще не читал.
- ? Alexander "Sandro" Tishin
- 30.08.2018 18:41
У 1801РР1 это не "стартовый адрес", а адрес, с которого ПЗУ будет располагаться в адресном пространстве машины. Программируется отдельно от данных. Так сделано, чтобы микросхеме не требовался внешний дешифратор старших разрядов адреса.
- ? Alexander "Sandro" Tishin
- 19.08.2018 10:51
А ты насколько точно хочешь поймать луч? Напоминаю, время исполнения MOV R0,R0 -- 2 слова пикселей. Для команд работы с памятью ещё хуже, время дрожит, так как видеконтроллер и проц работают асинхронно. Так что можно надеяться только поймать с точностью до строки. А для этого играться с вычислением точного момента не нужно.
¤
Впрочем, способ есть. Но кривой, так как будет неконтролируемое смещение, зависящее от конкретного экземпляра БК.
¤
На память, разрешили прерывания от 50Гц таймера, запретили клавиатуру, и:
¤
MOV #177712, R5
CLR R0
CLR R1
WAIT
MOV @R5, R4
INC R1
CMP @R5, R4
BEQ .-8
MOV @R5, R4
INC R0
CMP @R5, R4
BEQ .-8
;... пошли рисовать
¤
в R0 будет период таймера, В R1 -- сдвиг фазы тамера вправо.
- ? Alexander "Sandro" Tishin
- 09.08.2018 13:42
Maxvel> Вообще есть вопросы к тем людям которые писали его и самый главный для какой изначально машины он писался? Так как в процессе его копания была обнаружена следующая ошибка находящаяся по адресу 125162 MOV R0,@#176566 хотя известно что в ПЗУ не чего не запишешь или подпрограммы к которым не кто и не как не обращается к стати одна такая была перемещена в адреса 116xxx а на ее месте точнее начале оставлен JMP @#xxxxxx.
¤
Ну вот зачем так кидаться словами, не разобравшись в вопросе? 176566 -- это не ошибка, а работа с блоком ИРПС. Прочитай про КУВТ-86 что-нибудь техническое.
- ? Alexander "Sandro" Tishin
- 21.06.2018 12:11
Дмитрий, а что есть точное время? ;)
¤
Нет его. У звуковой подсистемы есть какое-то своё время, у видео своё, у процессора -- третье. Поэтому надо выбирать что-то одно.
¤
В эмуляторах и видеопроигрывателях за источник времени всегда выбирают звук, так как его искажения наиболее заметны. Соответственно, звук надо воспроизводить как можно точнее, а остальное -- как получится. Вот и всё :)
- ? Alexander "Sandro" Tishin
- 11.06.2018 10:57
Всегда пожалуйста!
К сожалению, последний месяц был сплошной аврал, домой приходил только поспать. Сейчас время освободилось, потихоньку приделываю параметры командной строки. Возможно будет что-то ещё. Может, полноэкранный режим, может, более точная эмуляция AY (сейчас там звук не вполне соответствует оригиналу кое-где, если внимательно слушать).
¤
Пожелания есть?
- ? Alexander "Sandro" Tishin
- 11.06.2018 08:57
Как же надоел этот ваш срач. Ругаетесь тут матом, как дети маленькие.
¤
dk_spb, а к тебе у меня отдельная претензия. Я был о тебе гораздо лучшего мнения. Неприятно, знаешь ли, разочаровываться в людях.
¤
Прекратили бы уже, к чертям, позориться на весь Интернет ...
- ? Alexander "Sandro" Tishin
- 31.05.2018 08:21
> почему именно Jamicon ?
¤
Самые приличные конденсаторы для блоков питания за скромные деньги. Я их в материнки паяю вместо вздутых -- всё нормально работает. А в современной материнке там суммарный ток около ста ампер на батарею из десятка конденсаторов, между прочим.
-
«
1 | 2 | 3 | 4 | »
?