-
- ? Дмитрий
- 02.07.2017 13:29
Ловите
¤
http://rgho.st/8s4GC4qvD
пароль на доступ: bk0010.org
¤
Замечания/ошибки писать сюда.
- ? Дмитрий
- 27.06.2017 10:03
>> Также остался неясен замысел автора этой оболочки по поводу совместимости с FAT
Сделана упрощенная версия - памяти мало и полная поддержка каталогов отняла бы место. На 11(М) еще можно было бы сделать, а вот на 10(.01) лишней памяти не было.
¤
>> Никакой вариант не прокатил
Плохо читали доки. Для переноса данных БК-РС дискету надо форматировать на БК и только на БК. На РС адресный маркер не пишется, контроллер БК его требует, отсюда ошибка #5.
¤
>> И этот странный формат 800К
Стандартный формат БК
- ? Дмитрий
- 27.06.2017 01:38
Загрузочные ANDOS/MKDOS - они туда кладут свое "ядро".
- ? Дмитрий
- 26.06.2017 11:44
>> ещё распространенные фотматы JPG, GIF, PNG добавить, если это возможно
Форматы добавить можно
¤
>> программке надо уже готовый размер скармливать 256Х256
Да, или 512х256 для ч/б режима. Ресайз добавлять не стал, хотя это тоже не проблема.
- ? Дмитрий
- 19.06.2017 22:12
Тьфу ты, не посмотрел на скрины. Софт коннектится к серверу - отпадает реверс...
- ? Дмитрий
- 19.06.2017 22:10
Отреверсить прошивальщик, найти расшифровку прошивки. Нужен кто-то, кто этим займется.
- ? Дмитрий
- 19.06.2017 21:39
>> но стоит ли овчинка выделки
Вышеописанный девайс подключается к разъему флопа на мамке. Их давным-давно выпилили вместе с IDE. В современный комп лучше подошел бы USB-девайс с подключением к нему классического дисковода. Не собирать же спецом комп только для перегонки образов дискет!!
- ? Дмитрий
- 19.06.2017 17:47
И вдогонку: напомните, плз, зачем его перешивать? Родная прошивка не работает? А то на али уже есть обновленные версии этого эмулятора...
- ? Дмитрий
- 19.06.2017 17:13
Сделал бы кто-то обратный девайс, которому подключаешь обычный 1.44 флоп и втыкаешь его в USB, получая полноценный USB-дисковод. Имеющиеся USB-дисководы кривы и глючны.
- ? Дмитрий
- 07.06.2017 17:05
г-н Ozeroff бывает тут раз в пятилетку и мои вопросы к нему напоминают игру в шахматы по переписке. Вопрос я задал, но ответа не получил.
- ? Дмитрий
- 06.06.2017 18:03
Вдогонку. Не совсем понял, почему таймер 177706-177712 вложен в класс CPU, а не "мамки"?
¤
>> изобретать другой метод работы с ВП-128 и другую прошивку
В эмуляторе можно упростить работу с ВП путем отбрасывания чтения/записи различных маркеров. Поскольку нам известна последовательность чтения/записи маркеров и что за чем идет, то при попытке чтения служебной области выдавать в 177132 (а в 177130 выставлять биты) нужные данные СРАЗУ (без ожидания оборота диска (и прочих медиа-тактов), пока маркер окажется под головой). В итоге, даже если прошивка будет ждать маркер пустым циклом, то эмулятор не ждет оборотов, а сразу же сообщает, что маркер найден. И когда закончится цикл ожидания (который зависит от скорости ВМ1), все уже выдано в регистры и эмуль контроллера ждет дальнейших команд. Прошивка же остается неизменной. Придется подкорректировать эмуляцию контроллера и дисковода.
- ? Дмитрий
- 06.06.2017 14:09
1. Что-то я запутался.
¤
SetV((~old & m_ALU & m_Nbit) != 0)
¤
тут значения трех переменных DWORD накладываются друг на друга с помощью AND и результат проверяется на !=0?
¤
2. Если мне не изменяет память, ВП-128 работает на частоте ВМ1. Если "гнать" проц, то и частота эмулятора 128-й тоже будет расти. Железка такого не выдержит (сверх разумных пределов), а эмуляция - запросто, но! Прошивки контроллеров дисководов настроены на частоту работы 128-й (там паузы выдерживаются). Получается, если гнать проц с усреднением времени выполнения команд, то прошивка ПЗУшкой тронется. Если гнать 128-ю, то останутся ли верными задержки и не полетит вся эмуляция к чертям? "Отсюда мораль" - либо эмуляцию 128-й оставлять, допустим, на 4Мгц, либо как-то подгонять задержки в прошивке (что в разы геморнее). Получилось два подпорченных помидора и какой из них менее гнилой?
- ? Дмитрий
- 06.06.2017 10:11
>> Ученые - народ простой, им бы посчитать модельку на диссер, а не по золотарям бегать.
Это разные люди - те, кто думают о работе или творчестве, и те, которые увидев электронику думают только о кол-ве драгметаллов в изделии и почем/кому этот "хлам" можно сбагрить. У меня вот, честно говоря, даже сейчас не поднялась бы рука БКшку или платы ДВК и иже с ними сдать на золото. Даже, если там золота хотя бы на 200-500 бачей. И, прошу заметить, я отнюдь не коллекционер подобной техники.
- ? Дмитрий
- 05.06.2017 15:43
Книгу "Основы программирования на ассемблере для СМ ЭВМ" скачать в pdf http://www.torrentino.online/torrent/127851
¤
В принципе разобрано несколько поверхностно, но для общего понимания подойдет.
- ? Дмитрий
- 05.06.2017 13:58
Кстати, если кого заинтересует http://www.kontest.ru/catalog/205954/1/?q=1801 микросхемы 1801 серии. По наличию надо, ессно, звонить. Контора у нас заказывает оттуда регулярно отечественные микрухи - все чистые, без окислов, 90-91 гг выпуска. Поинтересуйтесь, вдруг 014, 037, 128, РР1, РЕ2 наличествуют...
- ? Дмитрий
- 05.06.2017 13:54
>> оригинальных доках не встречал
Есть там описания, изменяемые признаки. Но тоже кратко. А вот описание битов запрета/разрешения прерываний в регистре состояния понятно только поверхностно.
¤
Но, поскольку, в БК они не реализованы и никогда не будут, доки по ним нужны только для ознакомления. "Свои" команды FPP я примерно раскидал по диапазону 170000-177777, добавив несколько из FPP x86 и взяв за основу IEEE754 вместо самопального(??), используемого в PDP. Только вот времени катастрофически не хватает засесть за реализацию.
- ? Дмитрий
- 05.06.2017 00:58
>> «Архитектура и аппаратные средства мини-ЭВМ СМ-1600»
Сканов не нашел, по крайней мере, гугл наряду с тындексом не видит.
- ? Дмитрий
- 04.06.2017 19:23
>> Один из наиболее полных наборов плавучки был в СМ-4 - см. её ТО
А где его искать? Поиск видит только краткие ТТХ да схемы.
- ? Дмитрий
- 04.06.2017 17:58
Не буду создавать отдельную тему - спрошу тут. Есть ли описание команд, регистров, состояний, прерываний FPU PDP-11 на русском? Переводил ли вообще кто-нибудь эту инфу или она присутствует только на англ.?
- ? Дмитрий
- 27.05.2017 11:41
>> графика получше чем у БК будет (кол-во цветов)
Сомнительная "лучшесть" - цвет меняется не каждой точки, а знакоместа. В итоге 2 разноцветных спрайта при пересечении друг друга квадратят фоном и мерцают. Если про гигаскрин, то согласен - аналогов у БК нет (бустер в единичных экземплярах не в счет).
- ? Дмитрий
- 26.05.2017 09:09
Пока только BMP. А какие еще нужны?
- ? Дмитрий
- 18.05.2017 22:32
Софтинка готова. Запись в формат экрана БК делать .bin (с указанием адреса и размера) или только экран?
- ? Дмитрий
- 16.05.2017 21:24
>> А чё такого?
Сказано отлично. Долго смеялся. Тонко подмечено.
- ? Дмитрий
- 16.05.2017 21:22
>> ДА!!! Очень надо, а можно не только для монохромных?
Для монохромных много алгоритмов дизеринга, дающих отличные результаты. Для преобразования полноцветных в 4 цвета часто получается ерунда - слишком мало цветов и эту палитру менять нельзя. А за те палитры, которые зашиты в 11М, как уже говорилось, руки бы оторвать.
¤
В монохромный у меня есть, надо только доделать вывод в "формат" экрана БК и масштабирование.
- ? Дмитрий
- 16.05.2017 17:34
>> вносящий чудные искажения
Браво! Эта фраза на 5+. Аплодирую! :)
- ? Дмитрий
- 14.05.2017 17:27
>> Переписать было бы интересно
Переписать не проблема. У меня всякие наработки есть, только адаптировать надо. Но надо ли это кому?
- ? Дмитрий
- 13.05.2017 00:45
>> Я этим декомпилятором кучу snd из кучи демок обратно в tsn конвертировал
А выложить? :)
- ? Дмитрий
- 11.05.2017 13:32
Если я правильно помню, фрейм 20мс. Для БК10 частота 3Мгц или 3.000.000 тактов. Выходит на один 20мс фрейм (в 1 секунде у нас 50 фреймов) приходится 60.000 тактов. Но в коде ExecuteFrame
¤
m_fTickCount += (double)m_nCPUFreq / CPU_FRAMERATE; //количество тактов процессора в текущем фрейм
¤
а CPU_FRAMERATE = 25. Или дефолтный фрейм 40мс?
¤
Итак грубо: задается промежуток, через который должен завершиться таймер, в ExecuteFrame исполняются команды по тактам без каких-либо задержек (то бишь потоком, одна за другой), пока не накопится 60000 тактов или чуть более. Затем выполнение фрейма прерывается и ждем срабатывания таймера. Потом снова и пока запущен процессор. Получается исполнение происходит рывками по размеру фрейма.
¤
Хм, разве это достоверно? На глаз получается нормально, даже отлично, но если используется таймер 177706-177712, то он работает линейно (а вдруг внутри фрейма читается значение счетчика для чего-либо). А выполнение команд получается нелинейно, то, по идее, должно получится расхождение. Расхождение будет даже внутри одного фрейма, т.к. в цикле может многократно читаться счетчик (а задержки-то у нас между командами нет => т.е. получается, что команды фрейма исполняются на частоте проца компьютера, что не есть гуд). Также цикл чтения счетчика может быть не закончен в пределах одного фрейма, а мы задерживаем исполнение следующего фрейма для достижения рабочей частоты. Таким образом, внутри фрейма промежуток между считанными значениями счетчика будет меньше (по сравнению с аппаратным БК10), а между фреймами гораздо больше из-за накопившейся задержки. А если исполняется какой-то алгоритм, завязанный на временные промежутки? Или я что-то упустил?
¤
В LockVarType для чего использовать целое при значениях 0/1? И использовать InterlockedCompareExchange, которая тупо сравнивает два числа и выдает в результат 0 или 1? bool не проще было бы и избавиться от кернеловской InterlockedCompareExchange?
¤
И еще по поводу звуковых буферов. Создается 8 буферов и 8 заголовков. А зачем 8 заголовков? Параметры буферов одинаковые - не достаточно ли одного?
- ? Дмитрий
- 10.05.2017 23:13
>> Тайминги команд БК критически зависят от ВП1-037
Тогда, если выкинуть 037 и сделать а-ля "мгновенное 0-такт ОЗУ", все эти тайминги не нужны вообще. Или сделать, к примеру, CLR R0 - 2 такта, CLR (R0) - 3 такта, CLR (R0)+ и CLR -(R0) - 4 такта, CLR @(R0)+ и CLR @-(R0) - 5 тактов, CLR const - 6 тактов, CLR @const(R0) - 7 тактов. Как-то так.
¤
Частота на разных компах разная, значит, чтобы добиться результирующей частоты 50Мгц или 100, надо в потоке ставить задержку. Только вот не пойму, как с помощью QueryPerformanceFrequency/QueryPerformanceCounter сделать верную задержку на нужную частоту.
- ? Дмитрий
- 10.05.2017 21:14
>> моя потактовая модель ВМ1 + ВП1-037
Я имел в виду ТОЛЬКО модель самого ВМ1, без 037 и прочего. Только исполнение инструкций. Можно ли пока только эту часть "разогнать"? И какие константы править?
¤
Нашел в pdf тайминги команд на PDP11/40, но там в микросекундах, а не в тактах...
- ? Дмитрий
- 10.05.2017 11:38
Я в вопросах двигаюсь к пониманию как мне увеличить частоту проца и хотя бы грубо и приблизительно рассчитать остальные параметры буферов, фреймов и прочего. А уже потом двигать в небольших пределах относительно этих значений и добиваться наименьших задержек. На какие параметры мне обратить внимание? Если взять поток, который исполняет инструкции процессора и отбросить пока все остальные вспомогательные потоки, то получается ли так, что его можно легко перевести на любую частоту? Или нужно что-то менять кроме константы базовой частоты?
- ? Дмитрий
- 09.05.2017 21:22
Можно услышать о взаимосвязи времени фрейма, размеру и числу звуковых буферов, частоте проца и т.п.? Какими путями был выбран конечный результат, промежуточные результаты, почему не устроили отброшенные варианты?
- ? Дмитрий
- 07.05.2017 12:23
>> нужна своя аппаратная реализация, которую потом нужно заэмулировать
Согласен. Но ее нет. Проект Воланда по созданию БК12 так и не завешен и, вероятно, уже никогда не будет. Вот у меня и появилась мысль сделать его хоть в виде эмулятора.
¤
>> ничего общего с оригинальным не имеющее
По идее это развитие дальше. Система команд остается той же, но расширяется. Никто же не скажет, что нынешняя система команд Интела/АМД это уже не то, что было во времена 286/386. Все, что написано для них заработает и на нынешних машинах. Очень не хочется, чтобы БК умерла окончательно, пусть будет хоть в виде эмулятора. Этакий памятник несбывшимся аппаратным мечтам.
¤
>> иначе можно тупо всем новшествам задать быстродействие 1 такт и не париться с релистичностью
Вот насчет БК+ эта мысль и посещала. Все равно аппаратной реализации нет. 1-2 такта на команду (FPU 3-4, к примеру) и вперед.
¤
>> Когда появится возможность сделать точную модель процессора ВМ1 с достаточным быстродействием, тогда и появится новый эмулятор.
Ув. Vslav говорил как-то о точной реализации ВМ1 на 100мгц в ПЛИС по результатам вскрытия проца. Но пока никаких вестей нет. Но это будет просто ВМ1 без доп. плюшек, а 3мгц или 100 для старой БК нет никакой разницы.
- ? Дмитрий
- 06.05.2017 22:41
Тогда непонятно как сделать универсально, чтобы работало на любой частоте - хоть на 100мгц. Гипотетически если я, допустим, хочу сделать режим БК+: 50 или 100мгц, добавить 32 битные регистры, переписать прошивку СМК на LBA (выкинув прочий уже ненужный мусор), дописать "аппаратные" mul/div/ash/ashc (нужны только их время выполнения в тактах, сами команды несложны), fpu-команды (опять же нет тактов, и написать несколько сложнее), сделать линейно адресуемой памяти несколько мегабайт, видеоадаптер с "аппаратным" текстовым режимом и т.д. и т.п. А тут все заточено под конкретную частоту. И получается сразу же упираемся в то, что проще написать с нуля, чем перелопачивать имеющийся эмулятор.
- ? Дмитрий
- 06.05.2017 16:41
Тогда тут все крайне жестко завязано на частоту эмулируемого проца. Если, к примеру, у БК10 поставить не 3мгц, а 10, то все съедет к чертям - по крайней мере я не нашел пересчета времени выполнения команд в таблицах (или плохо смотрел). Но как тогда происходит выполнение при частоте, отличной от 3/4Мгц (когда ее клавишей увеличивают)?
- ? Дмитрий
- 06.05.2017 12:24
Что-то не могу разобраться каким образом эмулятор обрабатывает коды БК, выдерживая время выполнения каждой команды с учетом методов адресации. В коде есть фрейм, в котором выполняются команды "сколько влезет" в него. А сам фрейм каким образом выполняется? Что выполняется между двумя фреймами?
- ? Дмитрий
- 03.05.2017 09:21
>> На многие вопросы, которые Вы тут задавали, там есть исчерывающие ответы.
Я разбираюсь в исходнике и задаю вопросы по нему. Книги у меня все есть. :)
- ? Дмитрий
- 02.05.2017 21:29
>> Файл автоматически закрывается при уничтожении объекта CFile
А не приведет такое раздолбайство в мелочах к более серьезным последствиям в будущем? Имхо в сях различного рода приведение типов автоматом (типа массив+инт) как раз сделано для таких "ценителей". В итоге чем больше расслабонов в подобных случаях, там больше костылей впоследствии введут в студии. И так далее по нарастающей.
- ? Дмитрий
- 02.05.2017 20:48
>> там важен лишь тип передаваемого параметра
А не проще ли тогда вообще писать в .h только типы - bool FindTuning(int, DWORD, int); ?? И допустимо ли это?
- ? Дмитрий
- 02.05.2017 17:17
Как получается, что в классе CTape объявлена:
¤
bool FindTuning(int length, DWORD &wave_pos, int &wave_length);
¤
а в реализации:
¤
bool CTape::FindTuning(int nLength, DWORD &wave_pos, int &wave_length)
¤
в первом случае первый параметр length, а во втором nLength. И при компиляции нет ошибки типа определение отличается от предыдущего?
¤
--------------
¤
В CTape::SaveWaveFile (и еще в паре подобных мест класса) файл после записи не закрывается. Это нормально?
- ? Дмитрий
- 30.04.2017 17:22
тьфу, там же прогрессия. ошибся...
- ? Дмитрий
- 30.04.2017 17:21
CFDDController::DecodeTrackData
...
switch (sectno)
{
case 1:
sectorsize = 256;
break;
case 2:
sectorsize = 512;
break;
case 3:
sectorsize = 1024;
break;
default:
return false;
}
...
¤
не проще ли было записать как:
¤
if sectno < 1 && sectno > 3
{
return false;
}
else
{
sectorsize = 256 * sectno;
}
- ? Дмитрий
- 29.04.2017 17:49
http://bulba.untergrund.net/progr.htm тут всякого навалом
- ? Дмитрий
- 28.04.2017 23:21
>> Всякие дурацкие дельфи так не умеют
Кто сказал? Умеют. И там все написанное будет понятно - пусть длинее, но понятнее. А не так как в Си - массив + число. Не спец не поймет сразу что значит эта байда.
¤
>> поэтому там очень трудно писать нормальные программы
Так все сишники считают. Однако они ошибаются. :) Вот драйверы писать на дельфи крайне сложно и неудобно, хотя и можно. А любой другой софт - пожалуйста.
- ? Дмитрий
- 28.04.2017 16:35
>> Тут мы переменную m_nWaveFreeBlockCount, адрес которой теперь хранится в freeBlockCounter увеличиваем на единицу.
Мда, геморрой еще тот. Если адрес передан в dwInstance, то в паскале весь этот ужас
¤
int *freeBlockCounter = reinterpret_cast<int *>(dwInstance);
(*freeBlockCounter)++;
¤
легко заменяется на
¤
Inc(PInteger(dwInstance)^);
- ? Дмитрий
- 28.04.2017 16:30
CFDDController::SetCommand
...
if (m_drive != newdrive)
{
FlushChanges();
m_drive = newdrive;
m_pDrive = (newdrive == -1) ? nullptr : m_drivedata + m_drive;
okPrepareTrack = true;
}
¤
неясна логика работы в случае, если newdrive != -1: m_drivedata + m_drive. m_drivedata - массив структур CFloppyDrive по числу приводов. m_pDrive хранит указатель на одну из структур. И чтобы получить этот указатель к массиву прибавляется номер привода. Это как? А случаем не m_drivedata + m_drive * sizeof(CFloppyDrive)?? Или компилятор сам поймет, что нужно поместить ссылку на элемент массива, на который указывает m_drive?
¤
Вот за что я терпеть не могу Си, так это за такие закидоны. Квадратное скрестим с треугольным - пофиг как получится, главное, что заработает.
- ? Дмитрий
- 26.04.2017 20:21
Сишных не будет, только асм. В то время их писали исключительно на асме. Может быть случайно(!) кто-то переписывал много позже, но имхо надежды на то, что они внезапно где-то кем-то выложены малы...
- ? Дмитрий
- 26.04.2017 17:53
Т.е. в m_pWaveBlocks помещается указатель на весь массив и сначала идут подряд 8 заголовков WAVEHDR, а затем подряд 8 буферов.
- ? Дмитрий
- 26.04.2017 16:47
В BkSound объявлен WAVEHDR *m_pWaveBlocks. WAVEHDR это структура-заголовок, а *m_pWaveBlocks - указатель. В CBkSound::SoundGen_Initialize на нее "натягивается" выделенный массив памяти из 8 блоков "WAVEHDR+буфер", потом распределяются указатели в нем поблочно. Чем было вызван такой подход? Я завис на этой процедуре из-за непонимания процесса.
- ? Дмитрий
- 26.04.2017 15:55
BkSound -> WaveCallback
¤
int *freeBlockCounter = reinterpret_cast<int *>(dwInstance);
...
(*freeBlockCounter)++;
¤
непонятны эти два заклинания - что во что интерпретируется и где сохраняется результат увеличения? По оператору почитал - пока не совсем понятно. Встречались подобные заклинания неоднократно, пока пропускал, но их число увеличивается с каждым новым файлом исходников.
-
«
1 | ... | 5 | 6 | 7 | 8 | 9 | »
?