B2M EMU

Использование и разработка софта (преимущественно на ПЦ)

Moderator: Shaos

b2m
Devil
Posts: 949
Joined: 26 May 2003 13:57
Contact:

B2M EMU

Post by b2m »

Lavr wrote:После загрузки Digit.emu программа emu почему-то выходит в свой Debugger - в нём надо нажать F5.
Это потому, что отладчик был использован. Если после начала эмуляции компьютера отладчик не был использован, то он не запишется в сохранённый файл.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
User avatar
Lavr
Supreme God
Posts: 17017
Joined: 21 Oct 2009 15:08
Location: Россия

Re: 1816ВЕ48

Post by Lavr »

b2m wrote:
Lavr wrote:После загрузки Digit.emu программа emu почему-то выходит в свой Debugger - в нём надо нажать F5.
Это потому, что отладчик был использован.
Ну естественно, отладчик был использован, потому как по Ctrl-L в "Специалист-МХ" грузится бинарник,
а по Ctrl-S - выгружается отдебуженный исходник.
А нельзя как-то прописать где-то, чтобы Debugger не стартовал, когда не надо?
И где можно что-то прописать, чтобы программа по умолчанию сразу загружала "Специалист-МХ"
без предварительного меню выбора компьютера
?

И еще один момент, не очень приятный... хотя, может быть, он у тебя исправлен уже...
Вот смотрю я на встроенном отладчике исполнение программы и жду, когда она запишет что-то в память:

дебаг.PNG
дебаг.PNG (89.13 KiB) Viewed 16360 times

Наконец, программа пишет в память (STA XXYY), но в памяти - ничего не меняется по адресу XXYY ! :o
Башка начинает закипать... как же так? :roll: Оказывается, надо уйти с этого участка памяти и открыть его снова! 8)
Какая-то очень неудобная фича... :-?

И как во встроенном отладчике изменить содержимое регистров процессора, если это необходимо?
iLavr
b2m
Devil
Posts: 949
Joined: 26 May 2003 13:57
Contact:

Re: 1816ВЕ48

Post by b2m »

Lavr wrote:А нельзя как-то прописать где-то, чтобы Debugger не стартовал, когда не надо?
Нет. Нужно добиться того, чтобы программа без отладчика запускалась. В случае Специалист-МХ можно стартовать файлы для эмулятора Шевцова .cpu/.i80

emu.exe MyCoolProg.cpu
Lavr wrote:И где можно что-то прописать, чтобы программа по умолчанию сразу загружала "Специалист-МХ"
без предварительного меню выбора компьютера
?
Вот несколько примеров:

emu.exe /c "Orion-128"
emu.exe /d
emu.exe /c "Orion-128" /d
emu.exe /c "Orion-128" /brk F842
emu.exe /c "Orion-128" /brk @my.brk

1. C автоматическим выбором конфигурации
2. Вызов отладчика, без выбора конфигурации
3. Более полезный вариант, с автоматическим выбором конфигурации
4. Ещё более удобный вариант, с указанием точки останова
5. Вариант с сохранением точек останова в файле my.brk
Lavr wrote:Наконец, программа пишет в память (STA XXYY), но в памяти - ничего не меняется по адресу XXYY !
Раньше компы были слабые, такая вот оптимизация, не обновляется окно дампа. Но можно трассировать с shift, тогда обновляется. Правда, жмакать shift постоянно не надо, а то CALL проскочишь :)
Lavr wrote:И как во встроенном отладчике изменить содержимое регистров процессора, если это необходимо?
Прямо в окне регистров и менять. Или Tab-ом туда перейти, или мышью ткнуть.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
User avatar
Lavr
Supreme God
Posts: 17017
Joined: 21 Oct 2009 15:08
Location: Россия

Re: 1816ВЕ48

Post by Lavr »

b2m wrote:Правда, жмакать shift постоянно не надо, а то CALL проскочишь :)
Жмакать постоянно вообще ничего не надо! :wink:
Добрая Венда за этим следит и вылазит с предупреждением о залипании клавиш... :lol:

Залип.PNG
Залип.PNG (28.96 KiB) Viewed 16510 times

Как она меня утомила во время отладки этой игры! :ebiggrin:
iLavr
User avatar
Lavr
Supreme God
Posts: 17017
Joined: 21 Oct 2009 15:08
Location: Россия

Re: 1816ВЕ48

Post by Lavr »

[OFFTOP]
b2m wrote:В случае Специалист-МХ можно стартовать файлы для эмулятора Шевцова .cpu/.i80

emu.exe MyCoolProg.cpu
Извини уж, может быть я в чем-то туплю, но столь удобный вариант у меня не работает никак... :(

RAMFOS.PNG
RAMFOS.PNG (57.9 KiB) Viewed 15731 times

При старте "Специалист-МХ" ОС RAMFOS видит отсутствие даты по адресу 0xD202 и запрашивает её.
В этот момент RAMFOS еще не развернулся до конца...

Но в этот момент в память загружается программа Hanoi.CPU и управление отдаётся ей.
В результате всё вешается на приведённом выше скриншоте...

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

Но здесь я пробовал и утилитой nircmd.exe нажать введение даты - достаточно {0 [Enter]}.
Но не срабатывает и этот фокус...

Как автор emu.exe посоветует разрешить этот траббл? По-простому у меня не вышло никак...
:-?

P.S. Но даже если стартануть emu.exe обычным образом, и запустить из меню файл *.cpu, то
из RAMFOS всё равно вылетаешь на ввод даты...

RAMFOS1.PNG
RAMFOS1.PNG (43.83 KiB) Viewed 15730 times

P.P.S. Я посмотрел свой старый исходник spmx42, дата вводится вот так:

Code: Select all

procedure SetData;
 begin
  asm
   push ax
   push cx
   push dx
   mov  ax,$2a00 {________________________ введем автоматом дату__}
   int  21h      {______________________________ для RAMFOS_______}
  {===============================================================}
   les di,buf1          {укажем стpаницу 1 (служебное озу)}
   add di,$ffbb         {смещение к атpибуту даты}
   mov al,$1            {пpизнак}
   mov es:[di],al       {установим}

   mov al,$8b           {дата введена}
   mov es:[di+1],al     {установим}

   xor  ax,ax
   mov  al,dl           {__________________________ день_____}
   call Dec_cor
   {mov  al,$20}        {тест}
   mov es:[di+2],al

   mov  al,dh           {__________________________ месяц____}
   call Dec_cor
   {mov  al,$04}        {тест}
   mov es:[di+3],al

   sub  cx,2000
   mov  al,cl           {__________________________ год______}
   call Dec_cor
   {mov  al,$65}        {тест}
   mov es:[di+4],al
   pop dx
   pop cx
   pop ax
  end
 end;
Эти 5 байт пишутся в первую, а не в нулевую страницу ОЗУ, причем важны 01h, 8Bh - признак даты,
а сама дата не так уж и важна...

[/OFFTOP]
iLavr
b2m
Devil
Posts: 949
Joined: 26 May 2003 13:57
Contact:

Re: 1816ВЕ48

Post by b2m »

Lavr wrote:Как автор emu.exe посоветует разрешить этот траббл?
А почему не в теме про ханойские башни?
Выкладывай свои hanoi.cpu/.i80, попробую разобраться.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
User avatar
Lavr
Supreme God
Posts: 17017
Joined: 21 Oct 2009 15:08
Location: Россия

Re: 1816ВЕ48

Post by Lavr »

b2m wrote:А почему не в теме про ханойские башни?
А потому что совет ты мне давал здесь, а не в теме про ханойские башни.
b2m wrote:В случае Специалист-МХ можно стартовать файлы для эмулятора Шевцова .cpu/.i80
emu.exe MyCoolProg.cpu
b2m wrote:Выкладывай свои hanoi.cpu/.i80, попробую разобраться.
А зачем тебе мои hanoi.cpu/.i80? :roll: Так работает любой файл *cpu/.i80 :esmile:
Я просто собирался пописать hanoi, но сутки прыгаю с бубном вокруг emu.exe.
Когда я этого совета не знал, то и не делал так, но ты посоветовал, а оно - никак... :-?
iLavr
b2m
Devil
Posts: 949
Joined: 26 May 2003 13:57
Contact:

Re: 1816ВЕ48

Post by b2m »

Ну файл-то твой запускается? Я думаю да.
А вот то, что сервисы RAMFOSа не работают - это уже другой вопрос. Тут разбираться надо, как более корректно его запускать.

Enter можно подсунуть изменив файл EMU.ext (там есть похожие строчки):

Code: Select all

cpu : loader {
  config="SpecialistMX"
  cmd[0].delay=700
  cmd[0].keymacro="{enter}"
  cmd[1].delay=1500
  cmd[1].poke="FFF8:70"
  cmd[2].start=now
  mode=2
}
Но надо ли это делать с другими мониторами - вопрос.

Поэтому лучше для совместимости скопировать под именем, например mx, и вместо .cpu делать файл .mx
То есть так:

Code: Select all

mx : loader {
  config="SpecialistMX"
  cmd[0].delay=700
  cmd[0].keymacro="{enter}"
  cmd[1].delay=1500
  cmd[1].poke="FFF8:70"
  cmd[2].start=now
  mode=2
}
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
User avatar
Lavr
Supreme God
Posts: 17017
Joined: 21 Oct 2009 15:08
Location: Россия

Re: 1816ВЕ48

Post by Lavr »

Ну я немного иначе поступил... поскольку не мог позволить себе попрыгать сутки с бубном безрезультатно... :-?
Я пропатчил файл RAMFOS и убрал запрос ввода даты - всё равно в случае с эмуляторами - это чисто фиктивная
функция, ибо даты всех внешних файлов прописывает Венда, а эмулятор - чисто запуск и отладка...

Патч следующий:

PATCH.png
PATCH.png (6.2 KiB) Viewed 15650 times

В файле SPMX.ROM ищем сигнатуру 21 A9 D1 - это указатель на дата:
Адрес D1 A9 может быть и другой в других версиях RAMFOS, тогда сначала
ищем, где дата: - это сигнатура C4 C1 D4 C1 для WinHEX, т.к. KOI-8, и слово
не видно... ну а потом патчим указанный участок вот так:

PATCH1.png
PATCH1.png (5.01 KiB) Viewed 15650 times

По сути дела в командную строку вводится 30 30 0D, что равносильно "0 0" [ENTER].

Теперь RAMFOS успевает развернуться и разложить всё что надо по своим служебным
ячейкам и падать перестаёт. Без этого он и виснуть будет и вылетать на дата:
Патч линейный, от адреса не зависит.

Но! Теперь не будет работать функция Удалить дату: - дата и так всегда 00 00 00. :wink:

Для других мониторов, я думаю, ничего делать не надо - они же не запрашивают дату...


P.S. Кстати... я там увидел в наборе MC6502.dll и "Агат", а чего ты "Apple I" не добавишь?
Он же простенький совсем...
iLavr
User avatar
Lavr
Supreme God
Posts: 17017
Joined: 21 Oct 2009 15:08
Location: Россия

Re: 1816ВЕ48

Post by Lavr »

b2m wrote:Enter можно подсунуть изменив файл EMU.ext (там есть похожие строчки):

Code: Select all

cpu : loader {
  config="SpecialistMX"
  cmd[0].delay=700
  cmd[0].keymacro="{enter}"
  cmd[1].delay=1500
  cmd[1].poke="FFF8:70"
  cmd[2].start=now
  mode=2
}
Несмотря на то, что подправил RAMFOS на автоматическое нажатие "0 0" [Enter], файл EMU.ext также
пришлось подшаманить, и нормально всё работает вот так:

Code: Select all

cpu : loader {
  config="SpecialistMX"
  cmd[0].delay=1500
  cmd[0].poke="FFF8:70"
  cmd[1].delay=500
  cmd[1].start=now
  mode=2
}
Иначе что-то там RAMFOS у себя не успевал, и программа *.cpu запускалась в инверсном цвете порой... :-?
Lavr wrote:Кстати... я там увидел в наборе MC6502.dll и "Агат", а чего ты "Apple I" не добавишь?
Он же простенький совсем...
Я, честно говоря, Hanoi больше хотел под 6502 написать, но столкнулся с тем, что КУЧА скачанных мной
из интернета компиляторов ассемблера не умеет скомпилировать правильно простой код: :o

Code: Select all

   LDA BOX; где BOX - короткий адрес в zero page
Они справляются правильно лишь в ситуации типа:

Code: Select all

   LDA $55; где $55 - короткий адрес в zero page
А если явно подсказать вот так (взять младшую часть):

Code: Select all

   LDA <BOX; где BOX - короткий адрес в zero page
То у них возникает фазовая ошибка - на первом проходе резервировали 2 байта под BOX,
на втором проходе вдруг понимают, что <BOX - это байт, и рухнули все адреса меток дальше...

Поэтому я решил алгоритм прогнать на i8080, и перенести его потом аккуратно под 6502.
Тем более, что среда под i8080 более удобная для работы.

Ну и я попробовал было "Агат-7", из emu.exe в качестве заменителя Apple...
Но с ним получается вот что - там в папочке есть примеры его программ с адресами запуска:
PACMAN - 2000G
MARS - 4000G
TARAKAN - 4000G
ROCKER - 5600G
Из меню "Агат-7" их загрузить не умеет:

Агат.PNG
Агат.PNG (39.03 KiB) Viewed 15545 times

Их загружать только через отладчик?

А второй момент - после старта "Агат-7", он пишет сверху Apple 11 в цвете и больше не реагирует
на нажатия клавиш... Что ему надо нажать, чтобы хоть в Воз-монитор вывалился? :roll:
iLavr
b2m
Devil
Posts: 949
Joined: 26 May 2003 13:57
Contact:

Re: 1816ВЕ48

Post by b2m »

Lavr wrote:Что ему надо нажать, чтобы хоть в Воз-монитор вывалился?
При сбросе удерживать пробел, например. Т.е. нажать на пробел и не отпуская ткнуть мышью на кнопку сброса на тулбаре. Или нажать Space+Ctrl+Break.
Lavr wrote:Их загружать только через отладчик?
Нет, всё как на обычном компьютере. Ввести команду R, откроется окно выбора файла с расширением .b (эмуляция магнитофона).
И уже потом вводить команду запуска, для PACMAN - 2000G

В файле .b первые два байта - адрес загрузки, вторая пара - длина блока данных, затем сами данные.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
User avatar
Lavr
Supreme God
Posts: 17017
Joined: 21 Oct 2009 15:08
Location: Россия

Re: B2M EMU

Post by Lavr »

Пора бы уже, видимо, портировать EMU под Android ! :roll:

Под ним ведь и на C++ можно писать приложения, и под Python...

А то - народ жаждет на своих смартфонах отечественных ретро-компьютеров! :o

А за всё прошедшее время на платформе Android лишь гордо реет одинокий
BkEmu — эмулятор БК-0010 для платформы Android :wink:
https://github.com/3cky/bkemu-android

Image

И ничего отечественного больше нет... :-? Десктопы да ноуты не в моде ведь ныне! :wink:
iLavr
b2m
Devil
Posts: 949
Joined: 26 May 2003 13:57
Contact:

Re: B2M EMU

Post by b2m »

Для начала "Пора бы уже" сделать его кроссплатформенным.
Однако воз и ныне там: то времени нет, то желания, а то и просто нет мотивации.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
Mondx
Doomed
Posts: 657
Joined: 10 Aug 2022 14:27
Location: Crimea

Re: B2M EMU

Post by Mondx »

b2m, а возможно как то для произвольного z80 компа как то сконфигурировать?
Типа, ОЗУ, ПЗУ, 1 порт ввода и 1 вывода? Реально?)
b2m
Devil
Posts: 949
Joined: 26 May 2003 13:57
Contact:

Re: B2M EMU

Post by b2m »

Можно. Но в качестве портов ввода-вывода не получится использовать реальное железо. Максимум - эмуляция ВВ55 через TCP соединение. Можно ещё типа светодиодов сделать вместо вывода на экран (по аналогии с Наири). Ну и типа клавиатуры что-нибудь, вместо порта ввода. Всё остальное - только в отладчике смотреть.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
Post Reply