-
- ? gid
- 08.02.2019 09:34
Потому что по немаскируемому прерыванию IRQ1, которое вызывает переход в пультовый режим, а из-за отсутствия пультовой памяти, происходит зависание на шине и прерывание по вектору 4.
При этом с 90% вероятностью (или даже больше) адрес возврата из вектора прерывания равен {адрес опкода} + 2 (независимо от того, скольки словная команда), при этом данный опкод как правило ещё не выполнился, прерывание помешало.
Для этого и корректируют адрес возврата, чтобы прерванная команда всё таки выполнилась, и выполнение программы шло как задумано.
Но если очень-очень быстро-быстро долбить по кнопке СТОП, можно достичь того, что попадём в остаточные 10% (или меньше) и что-то пойдёт не так, и программа таки зависнет. Мне такое удавалось. Чисто из вредности.
- ? gid
- 07.02.2019 19:59
Это вопрос?
тогда вот так неубиваемость по СТОПУ на БК10 делали:
mov #hlt4,@#4
mov #psw,@#6 ;текущий приоритет, такой же какой у программы
...
hlt4: sub (pc),(sp)
rti
¤
Особый шик - такой приём:
mov #161716,@#2 ;по адресу 2 команда sub (pc),(sp)
mov #2,@#4 ;по адресу 4 - команда rti и одновременно адрес вектора - адрес команды sub (pc),(sp)
mfps @#6 ;приоритет вектора
- ? gid
- 06.02.2019 09:41
Да. Злоупотребление кнопкой СТОП творит интересные непотребства в фокале и неинтересные в бейсике и неожиданные в редакторе vortex. В остальных местах не проверял.
- ? gid
- 05.02.2019 19:06
[ну если только кому то ШАГ нужно ввести скриптом...]
Ну вот кому-то СТОП нужно ввести.
Я не буду делать текстовое окно с эмуляцией ввода с клавиатуры. Почти это же самое успешно делает уже готовый функционал. Та правда не эмуляция нажатия клавиш, а тупо засылание в регистр 177662 сканкодов, чтобы БКшка думала, что это ей с клавиатуры данные приходят.
¤
Скачайте свежий релиз. Там в скрипте кнопка СТОП повешена на букву Ё. Этой буквы на БК нету, даже кода её нету. Там и пример есть.
- ? gid
- 05.02.2019 07:47
Нулевой символ - сканкод клавиши шаг, и конец строки в Си
- ? gid
- 04.02.2019 20:08
Драгндропом. Берёшь файл скрипта, и кидаешь его на окно эмулятора. То, что кинут именно скрипт, опознаётся по его расширению .bkscript.
Кнопку стоп нажать нельзя, потому что у неё нету аски символа. Но можно договориться, каким символом считать кнопку стоп.
Или ввести что-то вроде esc последовательностей, для служебной и не текстовой информации
И ещё, сейчас скриптообработчик вроде как поломался. Я пробовал на БК-11М в вортексе, там символы теряются. Хотя по алгоритмам не должны. Пока не нашёл решения кроме как сделать задержку побольше, чтоб символы пореже передавались.
- ? gid
- 04.02.2019 07:39
В эмуляторе с самого начала есть скрипты. Делают абсолютно то же самое, но не из текстового окошка, а просто из текстового файла. Я этой штукой ни разу не пользовался. Только изредка проверяю - не поломалась ли, пока что-то другое улучшал.
Я не помню, можно ли запустить скрипт на исполнение в любое время, поэтому погляжу, как можно расширить функционал ихний.
- ? gid
- 03.02.2019 15:36
Идей я и сам нафонтанировать могу. Вы мне рабочий пример приведите. Напишите эту штуку и прицепите к эмулятору. А я дальше доделаю.
Экранная клавиатура в эмуляторе так и появилась. Один энтузиаст, которому было очень надо, взял и вкрячил, как сумел, клавиатуру. А я посмотрел в исходники, и сделал так же, только лучше. А потом оно само пошло. Улучшалось постепенно, и дошло до того, что есть.
Точно так же появились некоторые элементы интерфейса.
Так что нет ничего невозможного. Всё упирается в отсутствие желания шевелиться и морщить мозг у пользователей. И отсутствие знаний и умений у меня.
- ? gid
- 01.02.2019 14:17
Ничем. Ни у кого такого шрифта нету и наверное не было (или есть такой или что-то подобное, но они сами себе его рисовали, поэтому не поделятся).
Знающие люди посоветовали пользоваться шрифтом ZXSpectrum.ttf, он примерно такой.
¤
Однако, что-то мне кажется, что в этой теме были сообщения по этому поводу. И даже ссылка на спектрумовский шрифт была. А сейчас ничего нету.
- ? gid
- 31.01.2019 14:41
Таки вот. Кому надо, скачивайте новую версию, где один единственный фикс - вернуты пропавшие иконки в ВинХР.
И куча внутренних изменений алгоритмов, которые могут где-то привести к тормозам, где-то наоборот, тут нужны бесплатные бета тестеры со своим многообразием конфигураций железа.
- ? gid
- 28.01.2019 13:25
[В результате частота дискретизации звука получается как раз примерно 44100.]
Ну вот, если процессор работает на частоте 4МГЦ и программа что-то генерирует, то при заданных условиях, звук получится именно такой. Т.е. воспроизводить его надо с настройками частоты дискретизации 44100 Гц.
¤
Если мы поменяем частоту процессора на 6МГц, то при заданной формуле, условия генерации звука останутся прежними, и он по прежнему будет генерироваться на частоте дискретизации 44100 Гц.
- ? gid
- 28.01.2019 13:20
[почему в реализации YM2149 частота взята ... в 2 раза больше, чем реальная?]
Потому что такой алгоритм реализации YM2149. Есть другие алгоритмы, там по другому сделано, напр. см. в BKBTL самых свежих версий на гитхабе.
А период в тактах как-то связан с битностью регистра тона. Внутренним, там получается 24 бита и за один такт частоты чипа меняется на одно значение заданным образом (насколько я разобрался в алгоритме)
¤
[И к чему мы тут привязываемся? К частоте звукового чипа?]
Вы решили привязаться к частоте звукового чипа. Это тоже вариант, но наверно не очень удобный.
¤
Я синхронизировался с частотой CPU. У меня через каждый интервал, равный CPUFreq/SoundSampleRate (4000000/44100) выполняется функция CMotherBoard::NextTick, которая формирует звук в звуковом буфере. В результате частота дискретизации звука получается как раз примерно 44100. А передискретизация звука из частоты генерации YM2149 в текущий SoundSampleRate делается в отдельной функции, реализации YM2149. В BKBTL в реализации YM2149 например сделано наоборот, там звуковой сопр. уже генерирует звук в заданной частоте дискретизации.
¤
Естественно, у меня, выполнение команды процессора, занимающей тактов больше, чем интервалов CPUFreq/SoundSampleRate и выполнение нужного количества CMotherBoard::NextTick выполняется последовательно друг за другом, а не одновременно. Потому что вот нихера не получается сделать малой кровью многопоточную реализацию, которая бы работала быстрее однопоточной. Там надо как-то умудриться сделать независимые потоки, которые бы никак не обращались к одной и той же области памяти одновременно, и как-то передавать им данные. Т.е. надо переписать всё с нуля, а то все ресурсы уходят на переключение контекстов и доступ к общей памяти, которая копируется из контекста в контекст.
¤
И вот, когда мы сгенерируем буфер с заданной частотой дискретизации, мы отправляем его звуковому устройству, а сами заполняем следующий буфер.
Буферы заполняются быстрее, чем звучат, в результате получится так, что все буферы заполнены, и чтобы отправить следующий буфер звучать, нужно ждать, пока отзвучит предыдущий. Вот тут и получается синхронизация с реальным временем звучания звука.
При этом чем больше у нас буферов, или чем больше их размер, тем больше отставание звука от реального положения дел. А если размер буферов маленький - то сильно повышается нагрузка на процессор. Тут надо искать компромисс.
- ? gid
- 25.01.2019 21:14
в большинстве своём, описан там https://github.com/1801BM1/cpu11/blob/master/vm1/doc/1801vm1.pdf
Верилог модели 1801ВМ1 где весь микрокод в бинарном виде описан, брать там https://zx-pk.ru/threads/23978-tsifrovaya-arkheologiya-1801-i-vse-vse-vse.html
- ? gid
- 25.01.2019 19:43
[Описал бы кто кому доступна вся картинка в голове.], [ИР13 - 8 разрядный регистр... Значит видеопамять читается побайтно или там всё же два ИР13]
Для этого есть схемы электрические принципиальные БК10 и БК11(М)
¤
[Сколько процентов времени шина занята формированием картинки. И так далее.]
Диаграмм же сами просили не давать, а это там.
¤
Описывать всё это словами - получится большая и толстая книга. А она уже написана, называется "МИКРО-ЭВМ индивидуального пользования "ЭЛЕКТРОНИКА БК0010" М1.492.000 РД Инструкция по ремонту" в двух частях.
ищите там https://yadi.sk/d/c4FJ4g6YUFB3P файлы bk0010_rd_1_(DjVuPhoto).djvu и bk0010_rd_2_(DjVuPhoto).djvu
- ? gid
- 25.01.2019 12:14
Ну так вся картина целиком и описана в файле.
А он нигде память не вычитывает. И никогда не занимался этим. Он выставляет адрес микросхемам памяти, и команду - читать данные с шины или выдавать данные на шину. А читает и пишет их процессор.
А в цикле видеовывода - читает данные ИР13 и потом побитно формирует точки на экране.
- ? gid
- 25.01.2019 09:46
>>? Лёха Башой - 24.01.2019 20:07
[А кто-нибудь может описать точно как ВП1-037 работает?]
Могу дать почитать описание модели на верилоге. Теперь оно всем доступно на гитхабе https://github.com/1801BM1/k1801/blob/master/037/rtl/va_037.v
¤
>>? Дмитрий - 24.01.2019 21:23
[А для этого нужны все точные растактовки для каждой команды]
Если кто-нибудь сумеет модель на верилоге преобразовать из описания мелкоты на лог.элементов в описание функциональных блоков, то будет быстрая потактовая модель, а пока есть только то, что сделал Patron. Я вроде бы давал ссылку. http://emulator.pdp-11.org.ru/DVK/MPI/distr/MPI_API_v1.1.zip
Там эквивалентная потактовая модель, которая по словам Patronа в точности соответствует верилог модели, но более быстрая.
- ? gid
- 24.01.2019 19:45
и тут мы приходим к пониманию, чем симулятор отличается от эмулятора.
¤
[Сделать главный поток "тактового генератора"][- тупое увеличение переменной на 1 + несколько проверок]
....
[А эмуляция команды может выполняться дольше числа тактов]
А для этого и нужен точный потактовый эмулятор процессора, которому на вход будет подаваться тик тактового генератора, и процессор будет считать, и сам, когда надо будет делать ввод/вывод по шине МПИ с точного потактового эмулятора контроллера памяти ВП1-037, который заодно ещё будет и видео рисовать.
¤
Пока этого нет, придётся обходиться примерной эмуляцией, и делать так, чтобы было хотя бы приблизительно как в реальности.
- ? gid
- 24.01.2019 16:29
Вот там: http://www.bk001x.ru/forum/121-104-1
- ? gid
- 24.01.2019 15:46
>>? Дмитрий - 24.01.2019 14:53
[Каким образом будет синхронизация выполнения команд, если эмуляция выполняется на частоте хост-проца?]
В целом, принцип работы такой же, как и описано в статьях на хабре. Есть коэффициент пересчёта тактов проца в частоту дискретизации звука (или наоборот), т.е. сколько за 1/44100Гц выполняется тактов процессора, чтобы синхронизировать генерируемый звук с реальным временем.Просто у меня есть ещё и фрейм - пережиток прошлого, от которого можно в принципе и отказаться. Раньше он нужен был для синхронизации вывода видеокадров, но сейчас видео тоже синхронизируется с частотой проца через коэффициент пересчёта частоты проца с частотой работы ВП1-037 6МГц. Мне неохота за это браться, там слишком много ломать надо будет.
¤
>>? Лёха Башой - 24.01.2019 14:39
Есть уже такая конфигурация, и даже лучше, называется БК10+СМК.
В зависимости от режима работы СМК можно сделать ОЗУ по адресам 120000-157777, или вообще все 64КБ ОЗУ, с разными нюансами.
- ? gid
- 24.01.2019 13:43
>>? Дмитрий - 24.01.2019 10:22
Я в общем-то так и делаю. Синхронизация делается по звуку. А таймеры и ожидание - на всякий случай, если в системе нет вообще звуковой подсистемы, то начнут работать они, а когда она есть - никто никого не ждёт.
¤
>>? Лёха Башой - 24.01.2019 11:56
Фикс будет. Скоро.
¤
[Конфигурация .01 + 32кб ОЗУ.. попытка записи в 140000+ приводит к классическому СТОПу..]
Так и должно быть. там пусто. туда писать нельзя.
Я как-то забыл отразить эту херню в документации. Потому что подразумевалось, что все и так знают как этот расширитель ОЗУ работает.
Доп ОЗУ подключается по адресам 120000-140000, банком 8кБ. Всего 4 банка. Для подключения нужного банка надо записать его номер в любое место по адресам 100000-117777.
Кто и зачем придумал такое нерациональное решение - без понятия. Вот если бы был ещё блок МСТД, с фокалом по адресу 140000 и тестами по адресу 160000, то было бы понятно. а так - чтобы всего 8кб ОЗУ и 16кб пустоты за ней, зачем надо - неясно.
Это оригинальная конфигурация из эмулятора Калмыкова, как есть. Я её вообще не трогал.
- ? gid
- 24.01.2019 09:58
При более внимательном изучении, оказалось, что всё работает, просто в ВинХР не отображаются иконки. В Вин10, Вин7 отображаются, а в ВинХР - эта же самая иконка не отображается.
Я вообще не понимаю, как так получается, иконки в одном и том же графическом формате, одной и той же битности, в одних случаях отображаются, а в других - нет. Чего им не хватает, хер знает. Поэтому обычно беру уже готовые, нарисованные людьми, которые соображают в них.
- ? gid
- 23.01.2019 19:46
Однако точно, не работает. Но тот же самый код работает в Вин7, значит микрософт где-то в своём апи подгадил.
И наверное там ещё много где чего по мелочи не работает.
Мне проще сказать, что ВинХР больше не поддерживается, чем даунгрейдить код из С++11 в С++99 и собирать его в VS2008 под ХР.
Пусть найдётся энтузиаст, который будет делать это для себя.
- ? gid
- 23.01.2019 09:58
Всё нормально в отладчике. И точки останова никуда не деваются. Работоспособность эмулятора проверяется на Вин10, Вин7 (правда чистые девелоперские, не засранные всяким софтом) и ВинХР (на виртуалке, тоже вообще голая ХР без ничего).
Дважды кликнул мышой на строке в поле точки останова - точка поставилась, дважды кликнул мышой на точке останова - снялась. Лень кликать - то же самое можно делать клавишей F9, но там точка ставится/снимается только на той строке, которая выделена жёлтым курсором.
¤
[На команде RTI сделал пошаговый - потерял управление.]
Если делал это клавишей F10 - всё правильно, управление теряешь и должен вернуть будешь по адресу за командой RTI, что маловероятно. Чтобы не терять управление, нужно делать это клавишей F11.
Все команды, которые изменяют в результате свое работы PC лучше трассировать клавишей F11
¤
[Видимо придется компилить эмулятор самому]
Вот это самое верное решение. Потом результатами поделиться не забудьте, чтоб все могли пользоваться.
- ? gid
- 22.01.2019 13:18
Принципиально - ничего сложного в этом нет. Прицепить можно, но быстроту не обещаю, не знаю, когда заняться смогу. И если таймер имеется в виду 177706-177712, то могу сказать сразу - он будет врать, т.к. эмуляция ничего общего с реальностью не имеет. Тайминги команд неверные, эмуляция процессора приблизительная. Поэтому то, что покажет таймер в эмуляторе и в реальности - две большие разницы.
- ? gid
- 21.01.2019 15:41
Дизассемблировал щас по-быстрому этот Mini-C, чтоб посмотреть, что там внутри. Точно, ему не МСТД надо, ему режим РП надо, поэтому чтоб с дискеты его запускать, нужно сперва пропатчить, чтоб перед началом работы режим РП включался, или файл загрузчик написать, который включит режим РП и загрузит сам этот компилятор.
Такое чувство у меня, что этот Mini-C написан на самом Mini-C, код корявый и неоптимальный, память используется нерационально, одни и те же текстовые строки много раз повторяются.
- ? gid
- 21.01.2019 14:22
Воспользуйтесь экранной клавиатурой. В эмуляторе их два вида - плёночная и кнопочная. Там и кнопки СУ есть, которые кнопкой Ctrl эмулируются. Если экранная клавиатура выключена, включается в меню "Вид"->"Панели инструментов и закрепляемые окна".
Переход в режим РП делается нажатием клавиш Alt+F8, что соответствует нажатию клавиш АР2+СБР
Подсказка: в комплекте с эмулятором идёт документация. там есть файл kbdLayout_BKPC.html в котором можно наглядно посмотреть, какие клавиши ПК соответствуют клавишам БК.
- ? gid
- 20.01.2019 15:45
Ну что, получилось у кого-нибудь?
Вот вам бинарники, сконвертированные из WAV. https://transfiles.ru/w7sg2
Дока сопротивлялась дольше компилятора, но и она сдалась, для её работы требуется блок МСТД БК10, поэтому сам текст прилагается отдельно.
Подозреваю, что и компилятору требуется блок МСТД БК10, т.к. он у меня при вопросе "Изменить параметры" при нажатии на любую клавишу вылетал в андос.
- ? gid
- 18.01.2019 14:50
У меня нет джойстика. Поэтому я не знаю как проверить работоспособность того, что я наэмулирую.
У меня есть гейпад (именно так, т.к. с помощью этого унылого поделия я не смог поиграть ни в одну игру на ПК, т.к. очень неудобно). И изредка я думаю, что надо бы что-то сделать такое, но полежу немного - и проходит.
- ? gid
- 16.01.2019 15:47
Есть эта модель на Си. Но там такой же мрак. Как было в 2016 году нифига не получалось, так и до сих пор всё в таком же состоянии. http://gid.pdp-11.ru/f/vm1cpp.rar
Код только рефакторится время от времени, когда настроение есть. Никаких улучшений не придумывается.
Вот модель 1801ВП1-037 там может работать аж на 6,5МГц, если только одна, сама по себе. Но толку от неё нету никакого.
- ? gid
- 16.01.2019 12:35
Я тоже не знаю. Поэтому сделал так, как сделал.
А настоящее синхронное "тикание" тактов и выполнение инструкций можно сделать только полной потактовой эмуляцией полноценной модели процессора на основе кода в верилоге. У меня такая модель может работать на частоте максимум 500Мгц и ни в какую быстрее не получается. И это без всего остального, только процессор и память с 0-тактовой задержкой.
- ? gid
- 24.12.2018 07:44
да. по каким-то непонятным или исторически забытым причинам только текст в таком виде.
- ? gid
- 21.12.2018 16:36
блин, невнимательно прочитал. Зато, нашёл тут про LBA48.
В исходниках unreal speccy 0.38.4 в hdd.cpp можно поглядеть. Там оказывается, есть два блока регистров 1f0-1f7
и в первом блоке регистры 1f3-1f5 - это младшие 24 бита LBA, а во втором блоке эти же регистры - старшие 24 бита LBA.
Вот как получается якобы 16 битность. И переключается это через бит HOB в регистре 3F6, а не 1F7.
- ? gid
- 21.12.2018 11:04
Хотя нет. У меня код - гибрид из libspectrum и unreal speccy версии 0.35b2. Собственно эмуляция HDD - преимущественно из libspectrum, и что-то возможно из unreal speccy. Я обычно когда есть выбор разных реализаций, беру себе ту, что проще понять, как работает и как мне кажется более правильнее работает. А эмуляция интерфейса ATA взята из unreal speccy.
- ? gid
- 21.12.2018 09:41
Когда я искал исходники эмуляторов HDD, я нашёл три штуки, из них самый простой для понимания оказался исходник libspectrum.
http://fuse-emulator.sourceforge.net/libspectrum.php на тот момент версия была 1.0.0. Вот оттуда я и взял весь код почти без изменений, только из С сделал С++ и в класс это всё обернул.
Умники, которые так написали: Copyright (c) 2003-2004 Garry Lancaster, 2004 Philip Kendall, все вопросы к ним.
Насколько там всё было правильно, меня не волновало, главное - вся эта штука на БК заработала при минимуме усилий с моей стороны.
- ? gid
- 15.12.2018 09:18
Я в этом даже не разбирался, т.к. всё это завязано на ДМА и без ДМА не работает, посему для БК не имеет смысла.
Максимум, что можно - 24 битный ЛБА доступ через ПИО моде.
¤
Там, чем дальше в лес, тем толще партизаны, все эти АТА6 и далее рассчитаны на большие скорости и большие объёмы данных, там уже даже со старыми стандартами нет совместимости. Переключаешься в этот режим, и всё - по тем же адресам совсем другие регистры с другим назначением.
- ? gid
- 13.12.2018 09:21
Вы уже не первый такое спрашиваете. Но я понятия не имею о чём речь. Я никогда не увлекался бейсиком и не было у меня никаких программ на нём.
Что за программа такая на бейсике? Бейсик же сам может и читать и писать с/на магнитофон(а). там есть команды LOAD,CLOAD,BLOAD/SAVE,CSAVE,BSAVE. Не нужны бейсику никакие программы чтобы работать с магнитофоном.
Кто-то в прошлый раз спрашивал про программу на бейсике для РС. Я недавно случайно в архиве Макса Багаева наткнулся на какую-то прогу, может это она http://pdp-11.ru/mybk/PC_Util/bk-mg/
- ? gid
- 03.12.2018 19:16
Так положено по алгоритму расчёта КС, нужно менять знак результата суммы. исходники можно посмотреть в прошивке АльтПро.
к счастью компилятор си не считает себя умнее программиста. Сказано поменять знак, значит будет поменян знак. Даже у беззнакового типа. Это просто ассемблерная команда neg al, а уж как интерпретировать содержимое al, это решать программисту.
- ? gid
- 22.11.2018 12:56
Manwe, не в ту тему флуд.
А у msf теговая структура, дока на неё есть.
Слепок памяти БК хранится в том виде, как описано в *.h файле соответствующей конфигурации.
Слепок памяти СМК немного дебиловат, т.к. СМК делалось на основе А16М, а оно - на основе БК10+КНГМД. Поэтому первые 16Кб ОЗУ СМК прилеплены к памяти БК, остальные - отдельно.
Ковырять это вручную - ненужный героизм. Нужно писать прогу, которая разбирает msf на части и оперирует этими частями.
- ? gid
- 16.11.2018 12:31
Не помню. Запустите образ нехакнутого оверкилла и всё увидите.
Я уже не в том возрасте, когда интересна вся эта возня с защитами. Просто пока руки помнят, снял её и забыл.
- ? gid
- 15.11.2018 15:42
Есть. там всё есть. Я когда его хакал, убрал только защиту от копирования. Всё остальное - абсолютно нетронуто.
- ? gid
- 15.11.2018 12:41
нету идей.
и, честно говоря, мне пофиг.
Я даже в писишные игры не играю (потому что нет денег на новую видеокарту, чтоб современный графоний смотреть, и нет лишних денег на электричество, ибо наше правительство вконец охуело с тарифами, и времени лишнего нету тоже), не то что в это БКшное убожество.
- ? gid
- 09.11.2018 16:17
BD, это не БКшный образ, это микрософтовский образ, в нулевом секторе микрософтовская таблица MBR, в которой одна запись об одном логическом диске. Формат диска: 32 сектора в кластере, 60749 блоков на диске, 6 секторов в ФАТ, и 512 элементов в корневом каталоге, т.е. каталог - 32 блока.
Мне потому и стало интересно, чем они это на БК смотрели, патченым андосом или ещё чем-то? Или вообще ничем, и это не для БК
- ? gid
- 09.11.2018 10:15
Заинтриговали. Этот образ на БКшке кто обрабатывает? Написали свою ОС или андос пропатчили?
- ? gid
- 07.11.2018 09:32
в ANDOS на диск из 1600 блоков помещается всего 397 кластеров. если выделить все файлы и директории, то они покажут используемый размер как раз в 397 кластеров. Ни единого свободного нету.
Однако из-за того, что размер кластера - 4 блока, то последний из них в файле бывает заполнен незначительно. И если считать размеры файлов в байтах, то получается, что дискета заполнена на 2/3 всего. Из-за этого то многие и не любят АНДОС.
И если смотреть размер такой дискеты не в АНДОС, а в МКДОС, то оно будет показывать не правду, а какие-то свои представления о файловой структуре ФАТ.
- ? gid
- 06.11.2018 21:35
там файловая система - андосный Fat12, т.е. кластер 4 сектора, и иногда в конце файла остаётся много пустого места.
Только это слишком грязный и ненадёжный хак - прятать нужные данные в конце кластера.
Я мало интересовался, что там к чему, вот что мне известно:
¤
ENDBLOK - главный файл.
грузится из загрузчика по адресу 40000.
содержит в себе заставку, монитор БК10 и андос, в общем всю 4-ю страницу.
точка входа - 137410. там восстанавливается системная область 0..400
и загружается файл SFOGUS.EXE
¤
обозначения: * - защита, v - вирус, # - проверки
¤
SFOGUS.EXE - стартовый игровой файл. *v
грузится по адресу 500, точа входа 26110.
помещает по адресу 137500 модуль загрузки подгрузок. 137500 - jmp, 137502 - call
загружает и запускает FOGUS, DEMO5.BS, READ.BS
¤
READ.BS - адрес загрузки 500, точка входа 25530 *v
загружает и запускает SFOGUS.EXE
¤
FOGUS - адрес загрузки 500, точка входа 26530, #
загружает и запускает OPROS
¤
OPROS - адрес загрузки 500, точка входа 31670, *
загружает и запускает INSLOT1
¤
INSLOT1 - адрес загрузки 1000, точка входа 7300
загружает INSLOT2 по адресу 40000, а запускает по адресам 100000..137777
загружает и запускает STORY0
¤
¤
DEMO5.BS - адрес загрузки 500, точка входа 32030 *v#
загружает LEVEL5.VN по адресу 40000 в стр 6(?)
загружает LEVEL5.N1 по адресу 40000 в стр 2
загружает LEVEL5.N2 по адресу 40000 в стр 7
загружает и запускает LEVEL5.DEM
¤
LEVEL5.DEM - адрес загрузки 500, точка входа 37000
загружает LEVEL6.V по адресу 40000 в стр 1
загружает LEVEL6 по адресу 1000, точка входа 37000
¤
STORY0 - адрес загрузки 500, точка входа 14300
1. загружает STORY1 по адресу 40000 в стр 1
загружает STORY2 по адресу 40000 в стр 2
загружает STORY3 по адресу 40000 в стр 3
загружает STORY4 по адресу 40000 в стр 7
2. загружает STORY5 по адресу 40000 в стр 1
загружает STORY6 по адресу 40000 в стр 2
загружает STORY7 по адресу 40000 в стр 3
загружает STORY8 по адресу 40000 в стр 7
3. загружает STORY9 по адресу 40000 в стр 1
загружает STORY10 по адресу 40000 в стр 2
загружает STORY11 по адресу 40000 в стр 3
загружает STORY12 по адресу 40000 в стр 7
4. загружает STORY13 по адресу 40000 в стр 1
загружает STORY14 по адресу 40000 в стр 2
загружает STORY15 по адресу 40000 в стр 3
загружает STORY16 по адресу 40000 в стр 7
5. загружает STORY17 по адресу 40000 в стр 1
загружает и запускает SBOR_112 по адресу 1000, точка входа - 1000SBOR_112 - адрес загрузки 1000, точка входа 1000
загружает LEVEL1.V по адресу 40000 в стр 1
загружает MENU2.V по адресу 40000 в стр 2
загружает MENU3.V или MENU3K.V по адресу 40000 в стр 3 в зависимости от ранее выбраных условий
загружает NAGRUZ7.V по адресу 40000 в стр 7
запускает MENU3.V или MENU3K.V по адресу 75640
¤
MENU3.V - адрес загрузки 40000, точка входа 75640
загружает DYNAMIC по адресу 1000
загружает LEVEL1 по адресу 500, запускает с адреса 500
¤
MENU3K.V - адрес загрузки 40000, точка входа 75640
загружает DYNAMIC по адресу 1000
загружает LEVEL1.K по адресу 500, запускает с адреса 500
¤
LEVELn, LEVELn.K - адрес загрузки 500, точка входа 37000
¤
LEVELn.V - адрес загрузки 40000 в стр 1
¤
INFOn и ORDERn - фигня какая-то
¤
¤
т.е. для корректного взлома достаточно вычистить всего 4 файла:
SFOGUS.EXE
READ.BS
OPROS
DEMO5.BS
¤
Если INFOn и ORDERn бесполезный мусор - то можно их удалить и будет место для загрузчика драйвера EIS.
Или придумывать, какой файл запаковать БКпаком и прицепить туда драйвер EIS.
Или модифицировать ENDBLOK. т.е. кусок монитора БК10 там запаковать, в свободное место понапихать нужного, запустить это нужное, потом распаковать монитор БК10, чтоб всё как было стало.
¤
В общем, я простых путей не вижу.
- ? gid
- 01.11.2018 16:57
Вот я, например, драйвер EIS в МБР подключал программой SETMBR, которая вместе с SERVICE2 идёт. Хотя этим вроде бы ещё какая-то прога занималась. Но сейчас уже не помню.
- ? gid
- 01.11.2018 14:37
Там же, в документации к контроллеру (если я ничего не путаю) и написано, что это резидентный драйвер, он, если есть в МБР, загружается в сегмент по адресу 170000, в ту же страницу, где таблица разделов находится. И всегда доступен, пока кто-нибудь его не затрёт своими данными.
И ещё там было написано, как писать свои резидентные драйверы, чтобы туда же запихивать и использовать.
¤
Т.е. если использовать СМК и прописать в MBR драйвер EIS/FIS, он будет доступен прозрачно так же, как и эмулятор EIS/FIS в КНГМД с ПЗУ 326. И ничего никуда грузить не надо, всё делается автоматически, даже вектор 10 устанавливается при загрузке драйвера.
- ? gid
- 01.11.2018 09:49
Почему забыл?
Надо будет - руки вспомнят.
- ? gid
- 23.10.2018 19:36
[к функции «загрузка ленты» будет наверное добавить кнопку останова загрузки или воспроизведения]
Такая кнопка есть с самого начала. Она находится в окошке "Управление чтением/записью лент" (кнопочка с квадратиком) Она становится активной, если выключены опции эмуляции загрузки/сохранения ленты, т.е. если вы можете запустить на воспроизведение Wav файл, то и остановить его в любой момент тоже можете, этой самой кнопкой. Горячих клавиш у неё нет, поэтому только тыкать мышкой в неё.
¤
[Есть ли возможность сделать так что бы эмулятор понимал диски от спектрума]
Это чисто программная задача. Если кто-то напишет или когда-то писал драйвер чтения спектрумовских дисков на БК, то это будет возможно.
А писать специально какой-то транслятор, чтобы диски понимались БКшкой как родные, что-то тяжко. проще использовать сторонние проги. Сперва на РС выковыривать нужные файлы с диска или образа диска Спектрума, а потом заковыривать их на образы дисков БК с помощью BKDE, а потом использовать образ в эмуляторе.
- ? gid
- 23.10.2018 15:48
Объясняю что происходит:
в прошлой версии, при редактировании поля значение проверялось на граничные условия, но не обновлялось, если выходило за границы. Это легко увидеть, если смотреть на частоту в статус баре.
Вы удаляете цифру 4, т.о. рабочая ТЧ стала 0, а нуль - нельзя, оно поправляется ни минимально возможную - текущая частота дискретизации звука * 10, в статус баре показывается - 441000.
Потом вводите цифру 6, т.о. рабочая ТЧ стала 6000000.
¤
А в текущей версии, мало того что значение проверяется на граничные условия, оно ещё при этом и корректируется в поле ввода.
Вы удаляете цифру 4, т.о. рабочая ТЧ стала 0, а нуль - нельзя, оно поправляется ни минимально возможную - текущая частота дискретизации звука * 10. И она корректируется в поле ввода, там стало 441000.
После этого вводите цифру 6, т.к. количество символов не изменилось. было 000000, стало 441000, то курсор остался на месте и цифра 6 ввелась перед числом 441000, и т.о. текущая ТЧ стала 6441000.
¤
В общем-то не очень хорошо получилось. Я уберу коррекцию поля ввода. Есть альтернатива - заканчивать ручное редактирование ТЧ в поле ввода обязательным нажатием Enter, но там кода больше и я поленился делать это.
-
«
1 | ... | 8 | 9 | 10 | ... | 15 | »
?