Просмотр полной версии : Пожелания и планы по эмулятору Башкирия-2М
Только что увидел, что есть эмуляция Арго :) А фиолетовый цвет в цветном режиме - это взято на основании чего? И, кстати, может ли так быть, что у Арго аналогичная реализация цвета, как и в Юниоре?
Насчёт цвета - пока не ясно. К сожалению, пока нет ни одной программы для Арго. Вот если бы кто-то нашёл кассету, которая была в стандартной поставке, там был эмулятор ZX-Spectrum, вот тогда бы и с цветом яснее стало, и с портами. Агро достаточно сильно от Юниора отличается, в железном плане.
у тебя регистры identify правильно возвращаются?
Это откуда кусок кода? В etherdev.c такого нет. RCBR это же просто счётчик, или он после сброса имеет указанное в коде значение?
Под VirtualBox (на "честной" винде не проверял) emu при переключении пропорций в 2:1 такие корки мочит... :) ... На ПринтСкрин оно не попадает: показать не могу.
Не надо показывать, я видел :) Такое происходит, если директ-х-шное окно выходит за пределы виртуального экрана (т.е. достаточно окно эмулятора за границу десктопа подвинуть). Возможно, это фича виртуализации, как с ней бороться - я не знаю.
---------- Post added 26.06.2011 at 00:51 ---------- Previous post was 25.06.2011 at 23:40 ----------
Добавил identify, icmpecho заработало.
---------- Post added at 00:51 ---------- Previous post was at 00:51 ----------
Добавил identify, icmpecho заработало.
Error404
26.06.2011, 09:12
Это откуда кусок кода? В etherdev.c такого нет. RCBR это же просто счётчик, или он после сброса имеет указанное в коде значение?
Добавил identify, icmpecho заработало.
Это я добавил, отсебятинка. :) В etherdev.c меня заинтриговало такое назначение регистров, описывающих буфер отправки и кольцо приема:
#define ETH_TX_PAGE_START 0x40 /* 0x4000 Tx buffer is 6 * 256 = 1536 bytes */
#define ETH_RX_PAGE_START 0x46 /* 0x4600 Rx buffer is 26 * 256 = 6656 bytes */
#define ETH_RX_PAGE_STOP 0x60 /* 0x6000 */
Оно конечно работает, но нафига? Почему не от нуля? Памяти то 16к.
И самое интересное - все писатели (я с полдюжины проектов на RTL пересмотрел на разных контроллерах) копируют к себе такую инициализацию (у всеx функция init практически один-в-один).
Error404
07.07.2011, 15:03
В-общем, httpd в EMU.EXE не заработало тоже (как и telnetd).
Может, посмотришь? Мыслей пока нет.
В-общем, httpd в EMU.EXE не заработало тоже (как и telnetd).
Может, посмотришь? Мыслей пока нет.
Могу предложить новый метод отладки всего этого хозяйства.
Я скрестил исходники telnet+uIP с моими исходниками эмуляции rtl8019as. И отлаживал уже в IDE. :)
Как и следовало ожидать, ничего не заработало. Кроме того, грузит процессор чуть ли не на 100%, но это, в принципе, понятно. Стал копать, выяснил, что в определённый момент отправка/приём деактивируется и больше не активируется. И момент этот - в самом конце приёма пакета. Если, однако, после приёма происходит отправка, то отправка/приём снова реанимируется. Получается, если приняли пакет, и ничего не отправили, то вилы.
А получается это, потому-что включение страницы регистров ты сделал так:
#define ETHERDEV_REG_PAGE(page) ETHERDEV_REG_WRITE(CR,(page << 6)|RD2|STP)
А в оригинале было так:
#define ETHERDEV_SELECT_REG_PAGE(page) \
do \
{ \
etherdev_reg_write(CR, etherdev_reg_read(CR) & ~(PS1 | PS0)); \
etherdev_reg_write(CR, etherdev_reg_read(CR) | (page << 6)); \
} while(0)
Поэтому, после того, как я сделал:
#define ETHERDEV_REG_PAGE(page) ETHERDEV_REG_WRITE(CR,(page << 6) | (ETHERDEV_REG_READ(CR) & 0x3F))
всё заработало и у меня.
Error404
07.07.2011, 19:54
Могу предложить новый метод отладки всего этого хозяйства.
Я скрестил исходники telnet+uIP с моими исходниками эмуляции rtl8019as. И отлаживал уже в IDE. :)
Как и следовало ожидать, ничего не заработало. Кроме того, грузит процессор чуть ли не на 100%, но это, в принципе, понятно. Стал копать, выяснил, что в определённый момент отправка/приём деактивируется и больше не активируется. И момент этот - в самом конце приёма пакета. Если, однако, после приёма происходит отправка, то отправка/приём снова реанимируется. Получается, если приняли пакет, и ничего не отправили, то вилы.
А получается это, потому-что включение страницы регистров ты сделал так:
#define ETHERDEV_REG_PAGE(page) ETHERDEV_REG_WRITE(CR,(page << 6)|RD2|STP)
А в оригинале было так:
#define ETHERDEV_SELECT_REG_PAGE(page) \
do \
{ \
etherdev_reg_write(CR, etherdev_reg_read(CR) & ~(PS1 | PS0)); \
etherdev_reg_write(CR, etherdev_reg_read(CR) | (page << 6)); \
} while(0)
Поэтому, после того, как я сделал:
#define ETHERDEV_REG_PAGE(page) ETHERDEV_REG_WRITE(CR,(page << 6) | (ETHERDEV_REG_READ(CR) & 0x3F))
всё заработало и у меня.
Я, помнится, долго думал над глубоким смыслом этих строк в исходнике, и поскольку такое задание регистров не следует из спецификаци, и более того - далеко не во всех драйверах используется, то "выкинул лишнее". :)
Ладно, добавим.
Я, помнится, долго думал над глубоким смыслом этих строк
А смысл очень прост - нужно изменить только старшие два бита (номер страницы), а вот другие менять не надо. В оригинале, правда, это сделано слишком уж оригинально :)
---------- Post added at 21:40 ---------- Previous post was at 21:38 ----------
Конечно, если известно, какие младшие биты установлены, то можно было бы и обойтись без чтения регистра CR. Но тут - общий случай.
---------- Post added at 21:42 ---------- Previous post was at 21:40 ----------
Например, можно запоминать последний вывод в CR в какой-нибудь переменной.
---------- Post added at 21:43 ---------- Previous post was at 21:42 ----------
Но какой смысл? Если эта переменная и регистр CR фактически одно и то-же :)
Error404
07.07.2011, 21:10
А смысл очень прост - нужно изменить только старшие два бита (номер страницы), а вот другие менять не надо. В оригинале, правда, это сделано слишком уж оригинально :)
---------- Post added at 21:40 ---------- Previous post was at 21:38 ----------
Конечно, если известно, какие младшие биты установлены, то можно было бы и обойтись без чтения регистра CR. Но тут - общий случай.
---------- Post added at 21:42 ---------- Previous post was at 21:40 ----------
Например, можно запоминать последний вывод в CR в какой-нибудь переменной.
---------- Post added at 21:43 ---------- Previous post was at 21:42 ----------
Но какой смысл? Если эта переменная и регистр CR фактически одно и то-же :)
Ну и как тебе Web-сервер? По-моему, мощно! :)
Тут и сервер, и стек, и CGI, и файловая система (вместе с файлами) - и все в 18кб. А если на экран ничего не выводить, то и в 16Кб можно влезть. И ведь это не ассемблер, а С!
Ну и как тебе Web-сервер? По-моему, мощно! :)
А вот его я и не пробовал, ограничился telnet-ом. Ты уже собрал бинарники с обещанным исправлением?
Error404
07.07.2011, 23:20
А вот его я и не пробовал, ограничился telnet-ом. Ты уже собрал бинарники с обещанным исправлением?
Да. Пересобрал - теперь все работает. :v2_thumb:
И перезалил на форум в те же сообщения что и до того.
Да, теперь работает, только медленно :)
Error404
08.07.2011, 08:28
Да, теперь работает, только медленно :)
Надо эмулировать пентиум III - он ускоряет интернет. :)
Error404
23.07.2011, 11:59
Чегой-то у меня EMU не видит заведомо присутствующих файлов (см. скриншот)
Я тоталом не пользуюсь. Как запускал? Через File/Open, drag&drop или тотал как-то через командную строку запускает?
Error404
23.07.2011, 23:41
Я тоталом не пользуюсь. Как запускал? Через File/Open, drag&drop или тотал как-то через командную строку запускает?
Через File/Open
ТС приведен только для иллюстрации, что этот файл в том каталоге есть.
Не знаю. Попробуй с другого каталога, раздела, переименовать файл или другой снапшот открыть, в конце концов. Вообще странно, что в заголовке окна имя файла не показано (перед минусом). Пока не понятно, с чем связано.
---------- Post added at 02:26 ---------- Previous post was at 02:16 ----------
Скачал именно этот файл - у меня открывается нормально. Может у тебя антивирус дурит? Попробуй открыть файл в любом hex-редакторе.
Error404
24.07.2011, 12:27
Не знаю. Попробуй с другого каталога, раздела, переименовать файл или другой снапшот открыть, в конце концов. Вообще странно, что в заголовке окна имя файла не показано (перед минусом). Пока не понятно, с чем связано.
---------- Post added at 02:26 ---------- Previous post was at 02:16 ----------
Скачал именно этот файл - у меня открывается нормально. Может у тебя антивирус дурит? Попробуй открыть файл в любом hex-редакторе.
Антивируса на этой машинке нет, не устанавливался никакой.
Другое дело, что сама машинка - виртуальная (я на Линуксе сейчас сижу, а виндовозное ПО запускаю из-под Oracle VBox), в которой проставлен WinXP.
С другой стороны, Спектакулятор этот же самый файл отлично открывает, и ТС и прочее системное. Хотя казалось бы - и тот и другой должны делать одинаковое - FileOpen(filename, дыр-быр), ибо ничего там больше не сделаешь. Т.е. идти через одни и те же вызовы API винды на том же самом железе.
С третьей стороны, Unreal к примеру - вообще не запускается. :)
А драйв J у тебя отдельная NTFS-партиция, или виртуальный драйв? Нет ли заморочек с маленькими/большими буквами? Я понимаю, что это бред, но чем чёрт не шутит?
Error404
24.07.2011, 16:50
А драйв J у тебя отдельная NTFS-партиция, или виртуальный драйв? Нет ли заморочек с маленькими/большими буквами? Я понимаю, что это бред, но чем чёрт не шутит?
драйв J - это файловая система Linux, которая экспортируется в винду при помощи драйверов VBOX и представляется под виндой как сетевой драйв (smb-устройство).
На диске C: этот же файл (zxoom98a.SNA) находится эмулятором, но пишет "Unknown file format" (в заголовке окна перед "-" опять же пусто). Может, просто снапшоты не поддерживаются?
Версия 1.01, от 24.06.2011
драйв J - это файловая система Linux, которая экспортируется в винду при помощи драйверов VBOX и представляется под виндой как сетевой драйв (smb-устройство).
Нечто такое я и подозревал. У тебя тотал пишет J:\Temp, скорее всего именно так папка и называется, а эмулятор пытается открыть в каталоге J:\TEMP
На диске C: этот же файл (zxoom98a.SNA) находится эмулятором, но пишет "Unknown file format" (в заголовке окна перед "-" опять же пусто). Может, просто снапшоты не поддерживаются?
Версия 1.01, от 24.06.2011
Да, поддержка SNA есть только в последней версии 08.07.2011
Error404
24.07.2011, 23:15
Нечто такое я и подозревал. У тебя тотал пишет J:\Temp, скорее всего именно так папка и называется, а эмулятор пытается открыть в каталоге J:\TEMP
Ну да. Папка TEMP, в корне ФС на линуксе. И этот же каталог TEMP в корне ФС, но под виндой. ФС монтируется под виндой от корня. C точки зрения винды - это обычная виндовозная ФС, подмонтированная к символу диска J. Любая виндовозная утилита в каталоге TEMP открывает файл с образом (снапшотом).
На С: в корне создавал точно такой же каталог (TEMP). Почему эмуль отрабатывает J: и С: по-разному - это ХЗ.
У меня была подобная проблема с папками на примонтированых дисках из линукса, оказалось что папки имеют ненулевой размер, при этом папки с дисков реально пренадлежащих винде всегда имеют нулевой размер. может и тут что то подобное?
Можно ли добавить эмуляцию приставки "Эльф"? Приставка спектрум-совместимая, схема отрисована, порты расписаны, прошивки слиты (осталось ещё мои картриджи посчитывать, у меня не такой, как уже считали)? Всю инфу по приставке собрал Prusak здесь: http://zxbyte.ru/alf.htm
Сделал конфиг для Эльфа: http://bashkiria-2m.narod.ru/files/alf.rar
В статье ошибка, порт управления банками памяти не 1F, а 5F. Раскладка битов джойстика тоже другая (в обратном порядке). На фото две кнопки Fire, я пока сделал одну, как в статье, т.к. в программах анализируются только 5 бит. Со вторым джойстиком тоже не понял, судя по всему данные с него должны быть инверсными, иначе некоторые игры виснут в цикле опроса джойстика (как будто кнопка постоянно нажата).
Со сменой картриджа пока не совсем понял, по сбросу не реагирует, приходится стартовать конфиг заново. Кроме того, есть ошибка в эмуляторе, если длина файла не кратна 16Кб (учту в будущих версиях).
Error404
26.03.2012, 11:33
Есть такое пожелание: сделать эмулятор бекэндом для отладчиков. Эмулятору придется слушать некий TCP порт и в зависимости от команд в приходящих пакетах, отвечать о состоянии регистров, ставить брекпоинты (и реализовывать прочие примитивы отладчика).
Интересуют 2 формата бэкэнда (оба): один стандартный - GDBServer, и один нестандартный - для компилятора SDCC (в сущности, работает всё также по телнету, но с командами отличными от GDBServer)
Эта полезнейшая доработка в перспективе даст возможность реализовать на PC нормальные source-level отладчики - хоть для ASM, хоть для С (меня это особо интересует) из соответствующего компилятора, универсального GUI разработчика ЯВУ (их есть в природе) и эмулятора.
Ну как идея?
Ну как идея?
Да, была такая идея. Только эти source-level отладчики я пока в глаза не видел, надо бы скачать и посмотреть. Если не лень - кинь ссылки сюда.
Error404
26.03.2012, 11:59
Да, была такая идея. Только эти source-level отладчики я пока в глаза не видел, надо бы скачать и посмотреть. Если не лень - кинь ссылки сюда.
Можно начать с компилятора SDCC. Оно на sorceforge есть (http://sdcc.sourceforge.net/) в исходниках. Там имеется source-level отладчик sdcdb (http://manpages.ubuntu.com/manpages/precise/man1/sdcdb.1.html), заточеный под интерфейс с эмулятором ucSim (который платформу Z80 эмулирует только в версии для Линукс и не совместим по формату с GDBserver). Поэтому как мне кажется, прикрутить к sdcc штатные фронтэнды разработки/отладки (GUI), заточенные под GDBserver, не совсем тривиально. Я пока не выгуглил готовых конечных (GUI-compiler-debugger-emulator) реализаций с целевой платформой Z80.
Но работать в этом направлении всё равно надо. :)
Посмотрел я sdcdb. Мазохизм какой-то. :)
Теперь ещё придётся Emacs для винды где-то искать, может там оно лучше выглядит.
Глядя на всё на это, хочется найти нормальный редактор с подсветкой синтаксиса для винды, в котором есть поддержка отладки, и разобравшись с форматом отладочной информации sdcc, написать что-то своё. Emacs не предлагать :)
Error404
26.03.2012, 18:07
Посмотрел я sdcdb. Мазохизм какой-то. :)
Дадад. Но как говорится, на безрыбье...
Я как прикинул что для постановки брекпоинта буду в уме строки нумеровать, так и решил - надо искать как прикрутить ГУЙ. :) И бэкенд надо орионовский, а не просто абстактный Z80.
Теперь ещё придётся Emacs для винды где-то искать, может там оно лучше выглядит.
Глядя на всё на это, хочется найти нормальный редактор с подсветкой синтаксиса для винды, в котором есть поддержка отладки, и разобравшись с форматом отладочной информации sdcc, написать что-то своё. Emacs не предлагать :)
Из простого я посматриваю в сторону ProgrammersNotepad (http://www.pnotepad.org/), но пока с ним еще не все ясно - в частности насколько у него хорошо с режимом отладчика.
Мдя. Emacs я ниасилил. Не быть мне линуксоводом :)
Не смог даже запустить sdcdb.el
И потом, терпеть 150Мб ради простого текстового редактора - это уж слишком. Надо искать более компактную среду.
Насколько я понимаю, sdcdb имитирует поведение gdb. Так? То есть, если среда поддерживает gdb в качестве отладчика, то и sdcdb тоже прокатит?
Error404
26.03.2012, 19:40
Мдя. Emacs я ниасилил. Не быть мне линуксоводом :)
Не смог даже запустить sdcdb.el
И потом, терпеть 150Мб ради простого текстового редактора - это уж слишком. Надо искать более компактную среду.
Насколько я понимаю, sdcdb имитирует поведение gdb. Так? То есть, если среда поддерживает gdb в качестве отладчика, то и sdcdb тоже прокатит?
Вопрос в том, насколько оно соответствует gdb. В релиз-нотах разработчики sdcdb писали, цитирую по памяти, "мы старались приблизиться к gdb". Как бы там ни было, до поддержки протокола GDBServer для общения с бэкендом их стараний не хватило.
Есть такая тема: Win+SDCC+Eclipse. HOWTO (http://andrear.altervista.org/home/sdcceclipse.php)
Есть и под Винду и под Линух. Уже качаю, вроде как все готовое - надо пробовать. Опять 150Мб. :) но уже с отладчиком.
Но бэкенд платформенного отладчика на базе эмулятора все равно надо как-то делать, мне дефолтный SDCC-шный эмулятор "MCS51 only" - ниочем. А протокол нестандартный и не описан, надо лезть в исходники или смотреть чего оно в родной эмулятор передает.
http://sourceforge.net/projects/eclipse-sdcc/screenshots/61949
Из простого я посматриваю в сторону ProgrammersNotepad (http://www.pnotepad.org/), но пока с ним еще не все ясно - в частности насколько у него хорошо с режимом отладчика.
Ну, то, что он компактный - это уже хорошо. Исходники есть, если надо - допишем нужный функционал. А может и add-on-ом обойдёмся.
Посмотрю повнимательнее, что за зверь. :)
Error404
27.03.2012, 09:23
Есть такая тема: Win+SDCC+Eclipse.
Есть и под Винду и под Линух. Уже качаю, вроде как все готовое - надо пробовать. Опять 150Мб. :) но уже с отладчиком.
Фиг там. Интеграцию с SDCC доделали только до компиляции. Отладчик SDCDB не прицеплен, полагаю ввиду его нестандартности. Т.к. для стандартных протоколов опции интеграции отладчиков в рассмотренном плагине Eclipse просматриваются
b2m, спасибо, что добавили эмуляцию Эльфа :) Скажите, а есть ли возможность попробовать заэмулировать Байт-01 (ну и просто байт к нему впридачу?)? Инфу тоже вродь всю собрали и восстановили по фирменной БЭМЗовской документации... Инфа тута (http://zxbyte.ru/byte106.htm) (ну и остальные подразделы).
Скажите, а есть ли возможность попробовать заэмулировать Байт-01 (ну и просто байт к нему впридачу?)?
Будет время - сделаю.
Error404, я тут плагин к Programmer's Notepad состряпал, вроде даже работает. Потестируй на досуге http://bashkiria-2m.narod.ru/files/emuide.rar.
Отладка - как везде:
Ctrl+F9 запустить make
F9 поставить точку останова
F5 запуск с точками останова
Ctrl+F5 просто запуск
F10 шаг
F11 шаг с заходом внутрь процедуры (или запуск отладки по шагам, если ещё не запущено)
Error404
03.04.2012, 22:02
Будет время - сделаю.
Error404, я тут плагин к Programmer's Notepad состряпал, вроде даже работает. Потестируй на досуге http://bashkiria-2m.narod.ru/files/emuide.rar.
Ща заценим. :) А что-то я не вижу там sdcdb.exe. Через что оно отлаживает? Что шагает по исходнику?
А где это "везде" такие кнопки? У борландов другие.
Отладка - как везде:
Ctrl+F9 запустить make
F9 поставить точку останова
F5 запуск с точками останова
Ctrl+F5 просто запуск
F10 шаг
F11 шаг с заходом внутрь процедуры (или запуск отладки по шагам, если ещё не запущено)
Я тут начал SDCC использовать - сплошное расстройство. :( Код не ахти как оптимизирует, компилирует долго - уснуть можно. K&R не понимает, только ANSI (а HitechC середины прошлого столетия, к примеру, понимает и тот и тот). Любительский какой-то продукт.
Error404
03.04.2012, 22:23
Ща заценим. :)
напиши что делать надо. А то я открываю файл, жму Run и вижу только черный экран:
напиши что делать надо.
Сильно не разбирался (времени особо не было).
Запускаем IDE.cmd, компилируем (Ctrl+F9 запустить make), а потом уже RUN и т.д.
Error404
04.04.2012, 00:13
Сильно не разбирался (времени особо не было).
Запускаем IDE.cmd, компилируем (Ctrl+F9 запустить make), а потом уже RUN и т.д.
Дада. Я так и делаю, однако ".ihx not found". Черный эмулятор и никакого и т.д. ЧЯДНТ?
Error404
04.04.2012, 00:29
Просто надо было открывать проект, а не файлы по отдельности. :)
Идем дальше.
Поправил файл тест.с и не могу запустить или скомпилировать - оно пытается сохраниться (какого хека, его просили сохраняться?), но не может: выдает такое или такое с непонятной закономерностью (при любом выборе не сохраняется. И не компилирует потому что не сохранено. замкнутый круг) Тут я застрелился{зачеркнуто} пошел спать.
Error404
04.04.2012, 00:34
Будет время - сделаю.
Error404, я тут плагин к Programmer's Notepad состряпал, вроде даже работает. Потестируй на досуге http://bashkiria-2m.narod.ru/files/emuide.rar.
Отладка - как везде:
Ctrl+F9 запустить make
F9 поставить точку останова
F5 запуск с точками останова
Ctrl+F5 просто запуск
F10 шаг
F11 шаг с заходом внутрь процедуры (или запуск отладки по шагам, если ещё не запущено)
Еще очень нужны вотчи для хотя бы переменных (но если будет с выражениями, то будет шикарно). Без вотчей отладчик теряет смысл. Калстек - это уже опционально, можно и обойтись без него.
Через что оно отлаживает? Что шагает по исходнику?
Собственный отладчик. sdcdb.dll написана с нуля, с ней связывается эмулятор через pipe.
А где это "везде" такие кнопки? У борландов другие.
У мелкософтовской студии :)
Дада. Я так и делаю, однако ".ihx not found". Черный эмулятор и никакого и т.д. ЧЯДНТ?
Забыл сказать: надо обязательно проект открывать. Имя запускаемого файла будет по имени проекта. Сейчас make.cmd так делает, но надо бы нормальный make приделать. Ты каким пользуешься?
Хотя, запуск без проекта я тоже предусмотрел, только надо make.cmd поправить, чтобы имя скомпилированного файла совпадало с именем сишного (с точностью до расширения, конечно).
---------- Post added at 01:42 ---------- Previous post was at 01:34 ----------
оно пытается сохраниться (какого хека, его просили сохраняться?), но не может
Это я не знаю, это к разработчику Programmer's Notepad :)
Еще очень нужны вотчи для хотя бы переменных (но если будет с выражениями, то будет шикарно). Без вотчей отладчик теряет смысл. Калстек - это уже опционально, можно и обойтись без него.
Экий ты шустрый парень! :)
Всё будет. Только вот интерфейс к плагинам у Programmer's Notepad весьма скудный. Я даже клавиши (F5,F9...) сейчас "нелегально" перехватываю, через подставную wndproc. А уж док-панель свою с вотчами сделать - это пока нереально. Пока думаю, как можно сделать. Самое простое - в виде текста в Output, но мне не нравится.
Error404
04.04.2012, 09:55
Идем дальше.
Поправил файл тест.с и не могу запустить или скомпилировать - оно пытается сохраниться (какого хека, его просили сохраняться?), но не может: выдает такое или такое с непонятной закономерностью (при любом выборе не сохраняется. И не компилирует потому что не сохранено. замкнутый круг)
Как оказалось - старая проблема. Не знаю какими функциями файлового IO пользуется PNotepad, но он как и твой эмулятор (об этом я писал в треде с полгода назад) не дружит с виртуальными дисками VirtualBox-а (они из-под хост системы с Линукс по cifs прокидываются в виртуалку в винду, т.е. это как бы сетевые диски). Весь архив лежал на таком диске и глючил. Как только я переместил архив на C: стало работать нормально и все сохраняется.
Пожелания: немного по точкам останова.
1. Во вложении картинка на которой видно, что в эмуляторе еще не закончил работать первый print (не все цифры выведены), а эмулятор уже провалился в точку останова второго print.
2. В точку останова в функции aaa() мне никак не удалось попасть, хотя она явно вызывается - результат ее действия выводится в теле основных print-ов.
3. А можно в какой-нибудь настроечный файл вынести настройку кнопок управления шагалкой, брикпоинтами, запуском/билдом и т.п.? А то очень непривычно. И еще - есть ли возможность ставить точки останова кликом мыши по серому полю слева от строк программы? Кнопкой ставится только в позиции курсора.
Можешь для лучшего понимания написать пару слов - каким образом в модель Ориона влетает скомпилированный бинарник? Просто я не заметил характерных этапов загрузка ДОС Ориона, ощущение такое, что она работает с образа памяти или снапшота - что и как при этом там проинициализировано? Бинарник запускается средствами CCP CP/M (ведь CCP при загрузке файла на выполнение делает некую инициализацию стека и областей 05Ch...06Сh...080h..0FFh)? Можно ли передать параметры командной строки и как?
А вообще, в целом очень приятно выглядит. Если ты допилишь до конца, это будет очень здорово, дело очень нужное. :v2_thumb: Надеюсь у многих людей появится стимул сдвинуть свои С-шные проекты с мертвой точки, т.к. дебугер это очень большое подспорье.
Error404
04.04.2012, 11:34
Пипец. SDCC не понимает ключи путей если путь закнчивается на бэкслеш. И начинает характерно глючить. По-моему любой пионер при передаче параметров через комстроку в своих программах анализирует лишние слеши (мало ли чего там пользователь напишет?). :v2_dizzy_facepalm:
Пожелания: немного по точкам останова.
1. Во вложении картинка на которой видно, что в эмуляторе еще не закончил работать первый print (не все цифры выведены), а эмулятор уже провалился в точку останова второго print.
2. В точку останова в функции aaa() мне никак не удалось попасть, хотя она явно вызывается - результат ее действия выводится в теле основных print-ов.
3. А можно в какой-нибудь настроечный файл вынести настройку кнопок управления шагалкой, брикпоинтами, запуском/билдом и т.п.? А то очень непривычно. И еще - есть ли возможность ставить точки останова кликом мыши по серому полю слева от строк программы? Кнопкой ставится только в позиции курсора.
1. Это особенность эмулятора. На экране видно только то, что к данному моменту времени успел отобразить "луч кинескопа".
2. Видимо, компилятор соптимизировал до:
int aaa(int as)
{
return as+12;
}
А то и вовсе сам константу посчитал. Шагай клавишей F11, она покажет реальный код, который остался.
3. Настройки клавиш пока рановато делать, надо костяк дописать. Про мышь - посмотрю, может и можно. Но не гарантирую.
Можешь для лучшего понимания написать пару слов - каким образом в модель Ориона влетает скомпилированный бинарник? Просто я не заметил характерных этапов загрузка ДОС Ориона, ощущение такое, что она работает с образа памяти или снапшота - что и как при этом там проинициализировано? Бинарник запускается средствами CCP CP/M (ведь CCP при загрузке файла на выполнение делает некую инициализацию стека и областей 05Ch...06Сh...080h..0FFh)? Можно ли передать параметры командной строки и как?
Если посмотреть на настройки команды Run, то там видно, что эмулятор вызывается с параметрами: orion.emu /d "dbgsvr:%p". То есть грузится сохранённое состояние и указано, что нужно конектиться к внешнему отладчику (параметр %p это имя проекта, фактически, путь к запускаемому файлу, эмулятор передаёт его отладчику). Состояние я сохранил после запуска программы test.com, которая состоит только из перехода jmp 100h, догадываясь, что просто запуск программы с адреса 100h может оказаться неожиданным для ДОСа. :)
После того, как эмулятор сконнектился, отладчик грузит в память эмулятора программу из .ihx, а также анализирует .cdb, после чего запускает программу с начального адреса.
Таким образом, можно сохранить состояние эмулятора для другого компьютера (например ZX Spec), подправить crt0, и можно будет отлаживать программы для Спектрума.
Параметры командной строки передать пока нельзя, можно лишь сохранить состояние эмулятора после запуска test с параметрами. Над этим потом подумаем.
Error404
04.04.2012, 17:11
2. Видимо, компилятор соптимизировал до:
int aaa(int as)
{
return as+12;
}
А то и вовсе сам константу посчитал. Шагай клавишей F11, она покажет реальный код, который остался.
А можно тогда сделать такое:
Я расставляю брикпоинты по исходному тексту, после постановки они красные. Я нажимаю make или run, выполняется компиляция, и по ее результату брекпоинты которые становятся указывающими на несуществующие в выходном файле строки (те что съел при оптимизации компилятор), выделяются другим цветом (например, белым - типа "disabled")?
Просто, шагание - не выход. Я может на тот брекпоинт после миллионного цикла попасть должен (оказывается - не должен: соптимизировано). В рунтайме оно бысто проскочило бы, а шагать я буду до морковкиного заговения.
А так я заранее буду видеть почему оно на этой точке не остановилось.
---------- Post added at 17:11 ---------- Previous post was at 16:58 ----------
1. Это особенность эмулятора. На экране видно только то, что к данному моменту времени успел отобразить "луч кинескопа".
Странный луч какой-то. Не все же 5 цифр показывает "срезанные до половины" (как я представлял бы себе построчную развертку), а три из пяти, но эти три - целые.
Может, тогда как-то допилить чтобы эмулятор на точке останова возвращал управление в отладчик с задержкой в 20мс (чтобы луч с гарантией дошел)? Не на каждой строке чтобы делало задержку, а только после брекпоинта перед возвращением фокуса в PNotepad. Для отладчика это не принципиально - там же человек сидит, которому для реакции что, +20мс, что -20мс это один фиг не заметно.
А можно тогда сделать такое:
Я расставляю брикпоинты по исходному тексту, после постановки они красные. Я нажимаю make или run, выполняется компиляция, и по ее результату брекпоинты которые становятся указывающими на несуществующие в выходном файле строки (те что съел при оптимизации компилятор), выделяются другим цветом (например, белым - типа "disabled")?
Да, нечто такое предполагается сделать.
Странный луч какой-то. Не все же 5 цифр показывает "срезанные до половины" (как я представлял бы себе построчную развертку), а три из пяти, но эти три - целые.
Странно ты понимаешь. Луч-то быстрее оказался, чем вывод символа. Т.е. строка (вся) отобразилась лучём на момент между выводом последнего видимого и следующего невидимого.
Может, тогда как-то допилить чтобы эмулятор на точке останова возвращал управление в отладчик с задержкой в 20мс (чтобы луч с гарантией дошел)?
И что должен делать процессор и остальные устройства (таймер, например) в эти 20мс?
Рассинхронизация времени различных устройств на данный момент не предусмотрена. Первое, что приходит в голову - видео сгенерирует ещё одно прерывание по кадру. И таких мелочей может оказаться очень много. Тут надо какое-то особое извещение посылать, что надо обновить экран, не трогая время внутри эмулятора.
Error404
04.04.2012, 18:49
Рассинхронизация времени различных устройств на данный момент не предусмотрена. Первое, что приходит в голову - видео сгенерирует ещё одно прерывание по кадру. И таких мелочей может оказаться очень много. Тут надо какое-то особое извещение посылать, что надо обновить экран, не трогая время внутри эмулятора.
не различных устройств, а отрисовщика экрана и всего прочего эмулятора. Это таймер и ЦПУ сложно по отдельности останавливать, а отрисовку экрана можно приостанавливать (или запускать) когда угодно - за один проход луча оно восстановит отображение на экран текущего состояния экранной памяти.
Поэтому и предложение было такое: останов на брекпоинте останавливает все треды/устройства сразу, кроме треда (или как оно у тебя организовано) экрана, который делает еще один проход луча и тоже встает. И только после этого идет возврат в дебагер. Можно просто тупо "в лоб" (без всяких дополнительных сообщений от дебагера) вызывать в эмуляторе отрисовку сразу после останова всего на паузу/брикпоинт, не выдерживая интервал между проходами луча. Вот примерно такое я имел в виду.
Впрочем, тебе как автору виднее. Но корректные принты на экран нужны - отладка при помощи принтов на экран очень часто используется, а тут она вдруг будет разъезжаться.
Но корректные принты на экран нужны - отладка при помощи принтов на экран очень часто используется, а тут она вдруг будет разъезжаться.
На этот счёт я думал сделать перехват вывода в какой-нибудь несуществующий порт, и выводить в Output прямо в IDE. Типа OutputDebugString.
Error404
04.04.2012, 23:19
На этот счёт я думал сделать перехват вывода в какой-нибудь несуществующий порт, и выводить в Output прямо в IDE. Типа OutputDebugString.
Тогда проще "присесть" на вектор conout BIOS и дублировать в IDE то что туда выводится. Только как быть с conin?
b2m,
Дмитрий, в версии от 22.03.12 в эмуляции "Специалист" не загружаются "кассеты" по сбросу. Раньше всё работало. Пример файла http://www.pk-info.ru/UPLOAD/igroteka_6_(start)_original.zip
в версии от 22.03.12 в эмуляции "Специалист" не загружаются "кассеты" по сбросу. Раньше всё работало.
Исправлено. После того, как я добавил коррекцию среднего значения, эмулятор стал реагировать на шум (когда нет сигнала). В данном файле шум случайно выдал синхробайт. Я добавил пороговое значение шума 2%.
---------- Post added at 17:42 ---------- Previous post was at 17:40 ----------
Тогда проще "присесть" на вектор conout BIOS и дублировать в IDE то что туда выводится. Только как быть с conin?
Никак. Отладочная печать предназначена только для вывода.
Error404
05.04.2012, 18:00
Никак. Отладочная печать предназначена только для вывода.
как продвигается дело?
Еще очень полезно было бы в некое окно в pnotepad грабить вывод компилятора (линковщика,ассемблера), при этом строки с ошибками помечать в исходном тексте неким цветом фона. (Так делает плагин для связки Эклипса с SDCC, очень удобно).
как продвигается дело?
Пока пытаюсь прилепить док-панель. Если добавить в проект плагина ATL и пару framework-ов из исходников PN, то панель создаётся и даже таскается туда-сюда. Однако, во-первых, код дублирует существующий (и недоступный через интерфейс) в PN, а во-вторых, иногда при закрытии PN по непонятной причине выскакивает исключение. При этом все dll-ки вроде как уже выгружены, и код в месте ошибки даже дизассемблер не выдаёт. Видимо, проблема в том, что окно создаётся плагином, а удаляется PN-ом.
Еще очень полезно было бы в некое окно в pnotepad грабить вывод компилятора (линковщика,ассемблера), при этом строки с ошибками помечать в исходном тексте неким цветом фона.
А сейчас разве не так? У меня ошибки компилятора в Output-e как раз красным фоном и выдаёт. И даже кликнуть по ней можно. Строку он находит, а позицию в строе - нет, видимо не предусмотрено. Но там вроде можно свой анализатор состряпать, посмотри настройки Tools для make.
Error404
05.04.2012, 21:17
иногда при закрытии PN по непонятной причине выскакивает исключение. При этом все dll-ки вроде как уже выгружены, и код в месте ошибки даже дизассемблер не выдаёт. Видимо, проблема в том, что окно создаётся плагином, а удаляется PN-ом.
Наверное окну надо овнера/родителя правильного подсунуть. Чтобы они корректно закрывались. А зачем док-окно, для вотчей?
А сейчас разве не так? У меня ошибки компилятора в Output-e как раз красным фоном и выдаёт. И даже кликнуть по ней можно. Строку он находит, а позицию в строе - нет, видимо не предусмотрено. Но там вроде можно свой анализатор состряпать, посмотри настройки Tools для make.
Ну, я на самом деле реально пока еще не работаю в этой среде, жду более-менее функцональную версию - хотя бы с вотчами (чтобы не переучиваться потом). Пока отлаживаюсь принтфами, тяжко. SDCC чего-то науевертил, что у меня компилированное им очень странно [не] работает на стыке с Ethernet (код произведенный HitechC из этих же исходников работает корректно).
А проект собранный из множества файлов-модулей оно будет шагать, переключаясь между окнами/закладками с разными соответствующими исходными файлами?
Не относящееся к разработке: цвета в твоем эмуляторе сделай пожалуйста поярче/почетче. Изображение как будто чуть замыленное , тяжеловато воспринимается.
А зачем док-окно, для вотчей?
Конечно, сам-же просил ;)
А проект собранный из множества файлов-модулей оно будет шагать, переключаясь между окнами/закладками с разными соответствующими исходными файлами?
В тестовом проекте я специально conio.c с отладочной информацией скомпилировал, чтобы по нему шагать. Если на print-е нажать F11, то откроется conio.c. Единственное пока ограничение, все файлы должны лежать в каталоге проекта, т.к. в .cdb имя файла без пути. Позднее, можно будет сделать парсинг файла-проекта, там пути есть. А ещё, из файла-проекта можно генерить makefile, тогда можно будет нормальный make запускать. Я думаю, надо будет написать build.exe, который из проекта сгенерирует makefile и запустит make.
Не относящееся к разработке: цвета в твоем эмуляторе сделай пожалуйста поярче/почетче. Изображение как будто чуть замыленное , тяжеловато воспринимается.
А в меню выбирал 1:1? Один-в-один должно быть не "замыленное".
Error404
06.04.2012, 00:16
А ещё, из файла-проекта можно генерить makefile, тогда можно будет нормальный make запускать. Я думаю, надо будет написать build.exe, который из проекта сгенерирует makefile и запустит make.
Честно признаться, makefile никогда не пользуюсь. Т.е. готовый запустить могу, но сам писать не стану. Как-то оно там не по-людски описывается, маргиналами делано. И дело не в описании через переменные, которые через переменные, которые через переменные - этим программирующего не смутить. А в том что просто прет оттуда какой-то линуксячий маргинализм. Не знаю как описать. В-общем, генератор не помешает. Сам то по себе мake полезен, он умеет пересобирать как весь проект, так и только измененное.
А в меню выбирал 1:1? Один-в-один должно быть не "замыленное".
Пользовался так как оно по дефолту открывается. 1:1 наверное маловато будет размером. А 2:1 есть? И все равно зеленый у тебя какой-то темно-зеленый. На черном фоне приходится вглядываться. Я помню на реале у меня (подключал в 90-х к телику 3УСЦТ) зеленый в монохроме был ярко-зеленым.
Error404
09.04.2012, 19:45
Конечно, сам-же просил ;)
Ну как, получается?
Либо отладочная информация неправильно генерируется, либо я что-то не понимаю, но номера блоков в отладочной информации (которые нужны, чтобы восстановить иерархию блоков, чтобы показывать все переменные, а не только из текущего блока), иногда не соответствуют строке и адресу. Обычно на границах процедур. Вобщем - пока не получается.
Error404
16.04.2012, 12:39
Либо отладочная информация неправильно генерируется, либо я что-то не понимаю, но номера блоков в отладочной информации (которые нужны, чтобы восстановить иерархию блоков, чтобы показывать все переменные, а не только из текущего блока), иногда не соответствуют строке и адресу. Обычно на границах процедур. Вобщем - пока не получается.
Пинг. :)
Может с каким-нибудь упрощениями получится? Допусками-посадками?
Основная проблема сейчас: в отладочной информации никак не отражена оптимизация. Например, в результате оптимизации переменные были размещены в регистрах, и доступ к локальным переменным через IX больше стал не нужен. В итоге, стандартный пролог функции PUSH IX/LD IX,0/ADD IX,SP был выкинут, к аргументам он адресуется через SP, но в отладочной информации об этом ни байта, более того, смещения к аргументам так и остались с учётом того, что в стек кладётся IX. Но с этой мелочью я справился (проверяю наличие пролога). Гораздо хуже, что иногда, несмотря на то, что переменная находится в стеке, и в отладочной информации именно это и сказано, переменная временно располагается в регистре, т.е. при отладке по шагам показываемое значение переменной (из стека) не соответствует реальному значению, т.е. переменная как-бы не меняется, хотя на самом деле это не так. А ещё, бывает, в отладочной информации сказано, что переменная в регистре, а имя регистра не указано (пустая строка). Вот так.
---------- Post added at 14:56 ---------- Previous post was at 14:49 ----------
А ещё, такие перлы:
ld 4 (ix),l
C$conio.c$99$1$30 = .
.globl C$conio.c$99$1$30
;conio.c:99: } while (value != 0);
ld 5 (ix), h
ld a, h
or a,4 (ix)
jr NZ,00101$
Здесь: ld 5 (ix), h сохранение старшего байта переменной, относящееся к строке 98, и если мы стоим на строке 99, оно ещё не выполнилось. Отладчик покажет половину старого и половину нового значения переменной :)
Error404
16.04.2012, 16:15
Основная проблема сейчас: в отладочной информации никак не отражена оптимизация. Например, в результате оптимизации переменные были размещены в регистрах, и доступ к локальным переменным через IX больше стал не нужен. В итоге, стандартный пролог функции PUSH IX/LD IX,0/ADD IX,SP был выкинут, к аргументам он адресуется через SP, но в отладочной информации об этом ни байта, более того, смещения к аргументам так и остались с учётом того, что в стек кладётся IX. Но с этой мелочью я справился (проверяю наличие пролога). Гораздо хуже, что иногда, несмотря на то, что переменная находится в стеке, и в отладочной информации именно это и сказано, переменная временно располагается в регистре, т.е. при отладке по шагам показываемое значение переменной (из стека) не соответствует реальному значению, т.е. переменная как-бы не меняется, хотя на самом деле это не так. А ещё, бывает, в отладочной информации сказано, что переменная в регистре, а имя регистра не указано (пустая строка). Вот так.
---------- Post added at 14:56 ---------- Previous post was at 14:49 ----------
А ещё, такие перлы:
ld 4 (ix),l
C$conio.c$99$1$30 = .
.globl C$conio.c$99$1$30
;conio.c:99: } while (value != 0);
ld 5 (ix), h
ld a, h
or a,4 (ix)
jr NZ,00101$
Здесь: ld 5 (ix), h сохранение старшего байта переменной, относящееся к строке 98, и если мы стоим на строке 99, оно ещё не выполнилось. Отладчик покажет половину старого и половину нового значения переменной :)
Маркер 99 строки похоже на строку раньше входит. Сначала идет присвоение (видимо 98 строка) - записью HL в IX+4+5, затем проверка на неноль (строка 99).
Похоже на шутки от Peephole optimization. Если исключить опции оптимизации, то может оно получше станет? Тогда будем отлаживаться без оптимизации.
Похоже на шутки от Peephole optimization.
А можно поподробнее про Peephole optimization? Я искал ключи, чтобы отключить оптимизацию, но мне показалось что peephole optimization это какая-то конкретная оптимизация, а не вся, и я даже не стал пробовать. А опцию, чтобы отключить вообще всю оптимизацию я не нашёл.
---------- Post added at 18:02 ---------- Previous post was at 17:46 ----------
Действительно, с опцией --no-peep получилось так:
ld 4 (ix),l
ld 5 (ix),h
C$conio.c$99$1$30 = .
.globl C$conio.c$99$1$30
;conio.c:99: } while (value != 0);
ld a,5 (ix)
or a, 4 (ix)
or a, a
jp NZ,00101$
Error404
16.04.2012, 17:04
А можно поподробнее про Peephole optimization? Я искал ключи, чтобы отключить оптимизацию, но мне показалось что peephole optimization это какая-то конкретная оптимизация, а не вся, и я даже не стал пробовать. А опцию, чтобы отключить вообще всю оптимизацию я не нашёл.
Ну, там правила описываются, типа "конструкции { AA; AA; BB } менять на { 2AA; BB }", оптимизатор шерстит окном в несколько соседних строк по тексту и по шаблону меняет совпадающие конструкции. Я особенно их не изучал, но думаю что переставлять или еще как перекашивать строки оно может.
А опций компилятора там действительно богато:
3.2.8 Optimization Options
--nogcse Will not do global subexpression elimination, this option may be used when the compiler creates
undesirably large stack/data spaces to store compiler temporaries (spill locations, sloc). A warning
message will be generated when this happens and the compiler will indicate the number of extra bytes
it allocated. It is recommended that this option NOT be used, #pragma nogcse can be used to turn off
global subexpression elimination for a given function only.
--noinvariant Will not do loop invariant optimizations, this may be turned off for reasons explained for the previous
option. For more details of loop optimizations performed see Loop Invariants in section 8.1.4. It is recommended that this option NOT be used, #pragma noinvariant can be used to turn off invariant optimizations for a given function only.
--noinduction Will not do loop induction optimizations, see section strength reduction for more details. It is recommended that this option is NOT used, #pragma noinduction can be used to turn off induction optimizations for a given function only.
--nojtbound Will not generate boundary condition check when switch statements are implemented using jumptables. See section 8.1.7 Switch Statements for more details. It is recommended that this option is
NOT used, #pragma nojtbound can be used to turn off boundary checking for jump tables for a given function only.
--noloopreverse Will not do loop reversal optimization.
--nolabelopt Will not optimize labels (makes the dumpfiles more readable).
--no-xinit-opt Will not memcpy initialized data from code space into xdata space. This saves a few bytes in code space if you don’t have initialized data.
--nooverlay The compiler will not overlay parameters and local variables of any function, see section Parameters and local variables for more details.
--no-peep Disable peep-hole optimization with built-in rules.
--peep-file <filename> This option can be used to use additional rules to be used by the peep hole optimizer. See section 8.1.13 Peep Hole optimizations for details on how to write these rules.
--peep-asm Pass the inline assembler code through the peep hole optimizer. This can cause unexpected changes to inline assembler code, please go through the peephole optimizer rules defined in the source file tree
’<target>/peeph.def’ before using this option.
--peep-return Let the peep hole optimizer do return optimizations. This is the default without --debug.
--no-peep-return Do not let the peep hole optimizer do return optimizations. This is the default with --debug.
--opt-code-speed The compiler will optimize code generation towards fast code, possibly at the expense of code size.
--opt-code-size The compiler will optimize code generation towards compact code, possibly at the expense of code speed.
--fomit-frame-pointer Frame pointer will be omitted when the function uses no local variables.
Я бы для начала удалил из командника компиляции ключи "--opt-*" и добавил все "--no-*", ну может кроме --no-xinit-opt и --nogcse
А что это за оптимизация?
ld a,-19 (ix)
ld -33 (ix),a
ld a,-18 (ix)
ld -32 (ix),a
00139$:
pop hl
push hl
Здесь ix-33 это верхнее значение стека, pop hl как раз его и достаёт.
---------- Post added at 18:29 ---------- Previous post was at 18:16 ----------
Я бы для начала удалил из командника компиляции ключи "--opt-*"
У меня ни одного такого не используется. Похоже, он сам по-умолчанию всю оптимизацию активирует. Отключить всё подряд можно, но, думаю, нет необходимости. Хотя, попробовать нужно.
---------- Post added at 18:46 ---------- Previous post was at 18:29 ----------
Похоже, постинкремент всегда обрабатывается так: для неувеличенного значения заводится временная переменная, туда копируется значение, и переменная увеличивается, далее используется временная переменная. А в вышеописанном случае эта временная переменная оказалась на вершине стека, что и вылилось в pop/push. Только я не понял, почему дальше увеличивалась уже временная переменная, а нормальная (смещение которой указано в отладочной информации) - вообще не использовалась.
b2m, что с "Кристой-2". Будет поддержка в эмуляторе?
b2m, что с "Кристой-2". Будет поддержка в эмуляторе?
Наверное будет :) Там ведь только видеовывод доделать, так?
Наверное будет :) Там ведь только видеовывод доделать, так?
Видеовывод, параллельный порт имеет отличия от вектора, плюс последовательный порт.
Вся существенная инфа тут
http://www.sensi.org/~svo/scalar/ware/562
http://www.sensi.org/~svo/scalar/ware/703
http://www.sensi.org/~svo/scalar/ware/842
В "секретах" описаны еще разные варианты подключения контроллера дисковода.
А что это за оптимизация?
Незнаю, что и делать с оптимизацией. Вобщем, выложил на сайте текущую версию EMU IDE. Переменные показываются в текстовом окне Output. Если какая-либо переменная не показана, или не меняется в процессе отладки, значит (чаще всего) виновата оптимизация. Т.е. отладочная информация не соответствует коду. Вывод содержимого структур пока не сделан.
Фиг там. Интеграцию с SDCC доделали только до компиляции. Отладчик SDCDB не прицеплен, полагаю ввиду его нестандартности. Т.к. для стандартных протоколов опции интеграции отладчиков в рассмотренном плагине Eclipse просматриваются
Нету.
Для любого gdb, отличного от стандартного, надо свой плагин к эклипсу писать. Eclipse шибко умный, он результат своей компиляции сам встроенными парсерами парсит, чтобы понять, может ли он это отлаживать.
Более-менее какая-то гибкость появляется, если компилировать в ELF. Но для z80 таких компиляторов нет.
b2m, что с "Кристой-2". Будет поддержка в эмуляторе?
Сделал.
Привет b2m
есть просьба
немного допилить конфиги для корвета
сделать явно korvet1/korvet2
korvet1:
rom: korvet11.rom
канал 2 таймера
syn2: ~vbl
ct2: как и для каналов 0 и 1 (как я понял "1")
irq4: ~VBL
korvet2:
rom: korvet2.rom
канал 2 таймера
syn2: ~hbl
ct2: ~SVBL
irq4: ~SVBL
---
и еще, задать по умолчанию номер РМУ=0 (чтоб с диска грузился без F1)
lan.netid (оно инвертировано там)
там в коде
; ЗАГРУЗЧИК ОС МикроДОС
LOADTST LDA ADRRM ; НОМЕР РАБОЧЕГО МЕСТА
ORA A
JNZ LOADBAS
LOADOS LDA CONFG ; НАЛИЧИЕ ДИСКОВОДА
ORA A
JNZ LOADBAS
---------- Post added at 10:54 ---------- Previous post was at 10:23 ----------
и кстате, давно хотел написать
перенести все папки с данными внутрь папки cinfig
тогда все чистенько будет ;)
есть просьба
немного допилить конфиги для корвета
Хорошо, я учту (на будущее).
перенести все папки с данными внутрь папки cinfig
тогда все чистенько будет ;)
Не, мне так неудобно. Папка config является частью архива с исходниками, будет неудобно архивировать исходники проекта. Если уж собирать всё в один каталог, то назвать его data, и всё туда свалить.
Еще хотелка для Корвета - добавить кнопочку 'Color mode'
основная масса мониторов под корвет была ЧБ
Еще хотелка для Корвета - добавить кнопочку 'Color mode'
основная масса мониторов под корвет была ЧБ
А как там градации чёрного формировались?
у себя я так делал
for (i=0;i<16;i++) {
// COLOR PALETTE
bright=(LUT[i]&0x8)?21:0;
pallete[LUT_BASE_COLOR+i].r=((LUT[i]&0x4)?42:0)+bright;
pallete[LUT_BASE_COLOR+i].g=((LUT[i]&0x2)?42:0)+bright;
pallete[LUT_BASE_COLOR+i].b=((LUT[i]&0x1)?42:0)+bright;
if (BWFlag) {// BLACK & WHILE PALETTE
c=pallete[LUT_BASE_COLOR+i].r*0.3+pallete[LUT_BASE_COLOR+i].g*0.5+pallete[LUT_BASE_COLOR+i].b*0.2;
pallete[LUT_BASE_COLOR+i].r=c;
pallete[LUT_BASE_COLOR+i].g=c; // if r=0 & b=0 -- cool black green pallete
pallete[LUT_BASE_COLOR+i].b=c;
}
}
set_palette_range(pallete,LUT_BASE_COLOR,LUT_BASE_ COLOR+16,1);
а посмотрел по схема (лист 8) - бардак :(
на двух разны - разные значения резистров
а на двух других - биты другие ;)
I - 75k
G -75k
R - 33K
B - 33K
на второй
I - 3k
G -12k
R - 24K
B - 6.2K
в обчем бардак
1) Неприятность, которая делает совершенно невозможной отладку программы в начале ее исполнения:
а) открываю какой-нибудь ром
б) открываю дебуггер, опционально ставлю брекпоинт
в) переключаюсь в основное окно
г) Alt+F, 1 (перегружаю тот же ром)
д) все падает
Повторяемость 100%.
2) Видел, что в дебуггер можно засасывать листинг. Какой должен быть формат у листинга?
1) Неприятность, которая делает совершенно невозможной отладку программы в начале ее исполнения:
Открытие файла сопровождается закрытием текущей сессии, так что отладчик со всеми бряками должен был бы закрыться. А он, зараза, падает. Такая-же фигня была раньше, если при открытом отладчике закрыть окно эмулятора, но это я отловил. А твой вариант - не догадался.
2) Видел, что в дебуггер можно засасывать листинг. Какой должен быть формат у листинга?
TASM, которым я пользуюсь, выдаёт такой формат:
NNNN AAAA XX XX XX \tSource line
NNNN номер строки исходного файла (я игнорирую)
AAAA адрес
XX XX XX байты (между ними один пробел)
А еще: как сделать, чтобы при перегрузке файла сохранялись точки останова? Бывает, что становится немного утомительно устанавливать все заново в 40-й раз ;)
Не предусмотрено. Только если через отладчик загружать бинарный файл.
Дмитрий, а почему на эмулляторе не работают на 50% самопально написанные программы, используемые обращения к MX-DOS под Специалистом_МХ? Вроде использую оригинальные подпрограммы работы с дискетой, но просто висит эмулятор. Каким образом происходит проверка наличия дискеты (образа odi)?
Я написал на 50%, потому что моя прога с имиджа дискеты (my1disk.odi/From Fifam/SpetsCom.EXE) запускается, а вот если загружать в эмулляторе через File/Open, то - нефига.
В атаче прикрепил три файла. Имидж диска и два файла cpu/i80 самой программы.
При запуске программы требуется выбрать диск (дискету А или В, или С - ROM-диск). Для дискеты предварительно нужно подцепить образ. Пока реализованы три клавиши: F1, F2, F3, F4, по Enterу - запуск программ (правда пока с ROM-диска).
Если нужно, могу дать исходники.
Вроде использую оригинальные подпрограммы работы с дискетой, но просто висит эмулятор.
Я пробовал по всякому, но не висит эмулятор, хоть плач :)
Открываю через File/Open твой файл, подключаю образ, жму enter - показывает каталог. Если жму enter, а потом подключаю образ - всё равно показывает. Что я делаю не так?
Каким образом происходит проверка наличия дискеты (образа odi)?
Откуда я знаю, как в твоих "стандартных" процедурах происходит проверка наличия дискеты?
---------- Post added at 20:45 ---------- Previous post was at 20:40 ----------
Единственное, чего не понял: это так и задумано, что клава так тормозно реагирует? Нельзя, что-ли, сделать нормальный опрос клавы?
вдруг будет новая версия
на всяуий случай напоминаю про Корвет ;)
http://zx.pk.ru/showpost.php?p=497680&postcount=571
У меня через File/Open прога загружается, но по Enter А и В диски не загружаются, только С, а должны.
Про клаву. Использую стандартно: call #c81b.
P.S. Почти написал другую прогу - высвечивает таблицу FAT посекторно на экран. Там ситуация хуже - на процедурах опроса дисковода - всё виснит. Почему знаю что вообще работает? На другом эмуляторе spmx_v42 всё прекрасно работает, но он зараза по виндой 7 вообще не работает....
fifan, через Dosbox запускайте эмулятор spmx_v42 и будет вам щастье ;)
Жаль. ситуация с новой прогой повторилась. Т.е. записываю прогу в образ odi, запускаю - работает. Через File/Open загрузка cpu/i80 - висит на начальном этапе.
Нашёл ещё один глюк в Специалисте_МХ. Не переключаются дискеты в MX-DOS по F3. Вернее в место выбора диска В, просто перечитывается дисковод А. В системе имя диска В пишется верно, образы odi для обоих дисков назначаю и разные.
Error404
11.09.2012, 18:51
Жаль. ситуация с новой прогой повторилась. Т.е. записываю прогу в образ odi, запускаю - работает. Через File/Open загрузка cpu/i80 - висит на начальном этапе.
Может, у тебя в программе что-то недоинициализировано перед стартом основных процедур? Поэтому и разница в зависисмости от способа запуска (на по-разному инициализированной памяти/портах).
Так и было. Прошу прощения у b2m за нарекания. Взял дизассемблировал MX-DOS v3.6, который записывался в начало каждой дискеты для Специалиста_МХ. Нашёл там процедуры опроса состояния ВГ93 и установки дисковода на нулевую дорожку. Вставил в SpetsCommnder. Но теперь отсутствие дисковода (не назначены образы в эмулляторе) приводит к зависанию проги. Вот скриншоты некоторых функций программы. В основном процесс написания SpetsCommanderа я выкладываю здесь (http://www.zx.pk.ru/showthread.php?t=17071&page=5).
P.S. Всё ж не поддержка дисковода В в MX-DOS не работает в данном эмуляторе. Проверял в spmx_v42, там всё в порядке.
Но теперь отсутствие дисковода (не назначены образы в эмулляторе) приводит к зависанию проги.
Ну, наверное, в проге так и задумано. Просто ждёт готовности дисковода.
Всё ж поддержка дисковода В в MX-DOS не работает в данном эмуляторе.
Заглянул в конфиг - действительно нет выбора. Надо добавить. Ну и какими битами там дисковод выбирается?
CodeMaster
12.09.2012, 09:41
В первом посте я буду собирать их вместе, и по мере реализации отмечать как сделанные.
А можно добавить в первый пост кумулятивный список эмулируемых компов, а то на сайте его тоже нет. А просто качать, что бы посмотреть этот список в выборе конфигурации ИМХО не правильно. Или вот этот список из даунлоада полный?
Башкирия-2М, Агат-7, Апогей, БК-0010, БК-0011м, Вектор-06ц, Вектор Старт-1200, Ириша, Корвет, Лик, Львов ПК-01, Микро-80, Микроша, Наири, Океан-240, Орион-128, Орион-Про, Партнёр, ПК-6128ц, ПК 8000 Сура/Веста/Хобби, ПК 8002 Эльф, Радио-86РК, Специалист, Специалист-МХ, Юниор, ЮТ-88
Или вот этот список из даунлоада полный?
Да, этот список я стараюсь держать актуальным. В этом списке нет тех, которые не входят в основной архив (игровые автоматы на основе компов) и которые нужно скачивать отдельно. Кроме того, нет тех, эмуляция которых находится в зачаточном состоянии (например Арго).
---------- Post added at 11:01 ---------- Previous post was at 10:56 ----------
Хотя, наверное стоит добавить в этот список MSX, MSX-2, Robotron 1715, ZX Spectrum 48, ZX Spectrum 128. Но это не отечественные компы...
Заглянул в конфиг - действительно нет выбора. Надо добавить. Ну и какими битами там дисковод выбирается?
Бит 0/1 задаёт дисковод А/В путём записи в порт #fff3. Вот схема (http://www.spetsialist-mx.ru/schemes/FDDController1.png) контроллера дисковода, триггер D4.1.
Ещё глюк, сегодня обнаружил. Мне нужно организовать переход по нажатию F8 и F9, но на записанные коды #8b и #8c эмулятор никак не реагирует. Используется стандартная подпрограмма по вводу кода нажатой клавиши - #c81b. Все остальные (F1...F7) и назначенная Esc вместо АР2 прекрасно работают.
Вот схема (http://www.spetsialist-mx.ru/schemes/FDDController1.png) контроллера дисковода, триггер D4.1.
Спасибо, вроде раньше её не видел. Судя по этой схеме, у меня вообще неправильно сделано. Совпадают только проты ВГ93 и номер стороны. :)
Мне нужно организовать переход по нажатию F8 и F9, но на записанные коды #8b и #8c эмулятор никак не реагирует.
Не понял, куда "записанные коды #8b и #8c"?
Не понял, куда "записанные коды #8b и #8c"?
Они должны соответствовать нажатым клавишам F8 и F9 при опросе клавиатуры, но не тут то было. Вот по такому коду переход на метки F8 и F9 не происходит:
CycleScan1 call #c81b ; опрос клавиатуры
cp #19
jp z, Up1 ; курсор вверх
cp #1a
jp z, Down1 ; курсор вниз
cp #0d
jp z, Enter1 ; клавиша ВК
cp #00
jp z, F1 ; выбор левой панели файлов
cp #01
jp z, F2 ; выбор правой панели файлов
cp #02
jp z, F3 ; печать инфо панели
cp #03
jp z, F4 ; редактор
cp #04
jp z, F5 ; копирование
cp #05
jp z, F6 ; переименование/перенос
cp #06
jp z, F7 ; создание каталога
cp #8b
jp z, F8 ; удаление
cp #8c
jp z, F9 ; меню
jp CycleScan1
Клавиши F8-F10 служебные, при их нажатии меняется верхняя служебная строка, а драйвер их попросту не выдаёт.
Я смотрю эмулятор обновился и теперь дисководы меняются. Спасибо. Как же быть с F8 и F9? Никак нельзя задействовать их?
Как же быть с F8 и F9? Никак нельзя задействовать их?
Можно, напиши свой драйвер клавы.
Хотя, там наверняка можно имеющиеся процедуры использовать, и много переписывать не придётся.
b2m, привет! Нашёл тут глюк в твоей программе. В отладчике View/Start debugger по запросу Ctrl+L не верно считается длина загружаемого блока - наверное нужно на байт больше.
Скачай новую версию. Этот диалог уже давно не так выглядит :)
b2m, принимай багрепорт
что-то не так с эмуляцией звука,
у Корвета и нашел еще явно теже грабли у "Zx Spectrum 128 tr-dos"
причем у ZX эт прям со старта
а у Корвета, надо запустить любую игрушку с эмуляцией AY
c моего disk.kdi
XYZON
BINALEND
NINJA
MAFIA
ну или у моего нового ATHLETIC LAND (http://zx.pk.ru/showpost.php?p=561999&postcount=52) (то что park_sound)
похоже грабли когда часто в порт ВИ53 пишем ?
хотя у ZX же стоит AY ...
самая старая версия что у меня есть эт 20120423
ну и на последней тоже проверил
Да, странно, раньше вроде такого не было (у ZX было, но я думал, так и должно быть, тем более, что после нажатия на клавишу шум исчезал).
Откатил кое-какое изменение, внесённое 2 года!!! назад (видимо, количество пользователей моего эмулятора плавно стремится к нулю). Правда, теперь нет одной фичи: выход меандра ВИ53 в режиме 3 теперь опять нельзя использовать для формирования сигнала разрешения генерации другого канала.
Откатил кое-какое изменение, внесённое 2 года!!! назад (видимо, количество пользователей моего эмулятора плавно стремится к нулю). Правда, теперь нет одной фичи: выход меандра ВИ53 в режиме 3 теперь опять нельзя использовать для формирования сигнала разрешения генерации другого канала.
я вон как этот Athletic Land мучал - каждый день пускал в твоем ;)
я не знаю есть ли где еще эффект кроме как в некоторых игрушках в Корвете.
>>выход меандра ВИ53 в режиме 3 теперь опять нельзя использовать для формирования сигнала разрешения генерации другого канала.
а на что/кого это влияет ?
когда будет новая версия ?
а на что/кого это влияет ?
На Специалист-МХ повлияет. Я не помню, используеся ли эта фича ещё где-то.
когда будет новая версия ?
Я уже выложил исправленный вариант.
Я уже выложил исправленный вариант.
Спасибо, а то я думал эт у меня ошибки ;)
А что это за Специалист 4 цвета в конфигурациях? Я видел только чб Специалист, 8 цветный (бумага черная), и 16 цветный (бумага+чернила) лишь.
Первая цветная доработка публиковалась в Моделист-Конструктор 7'88 (стр 46-47 (http://publ.lib.ru/ARCHIVES/M/''Modelist-konstruktor''/''MK'',1988,N07.[djv].zip)). Там как раз 4 цвета (с учётом чёрного фона - 5). Потом был ещё один вариант в 8'90 (http://www.spetsialist-mx.ru/Docs/mk1990_08.djvu), он не сильно отличался (добавилась ещё одна 565РУ3 и номер цвета формировался исходя из некоторой совместимости с прежним 4-х цветным вариантом), но позволял выводить до 8 цветов (с учётом чёрного фона - 9).
16-цветный режим использовался в Специалисте-МХ (http://www.spetsialist-mx.ru/index23.html).
b2m, огромное спасибо за твой эмулятор! На нём все проги испытываю перед переносом на реальную железку.
Граф Куракин
12.01.2013, 02:12
Доброе время суток! :smile:
Есть пожелание, чтобы была версия эмулятора с установкой под windows. Смысл в том, что если программа просто экзехка, то в CrossOver под Мак она не устанавливается... :mad_std:
А так, она бы встала и работала, а то приходится под Маком запускать Параллель, из Параллели винду, а уже из винды эмулятор... :v2_wink2:
А программа-установщик это ведь тоже "экзехка", она-то как запускается? Или это какой-то специальный установщик должен быть?
Граф Куракин
12.01.2013, 12:43
Установщик обычный, ну чтобы размещал файлы в программную директорию, создавал иконки и т.д. Crossover запускает установщик и создает виртуальную машину для уже установленной программы. А потом эту виртуальную машину запускает. Методом тыка проверенно :)
+0.25 за инсталлер ;)
хотя лично мне удобно и как сейчас
http://nsis.sourceforge.net/Main_Page ?
и кстати, у меня в последней версии не пустлся Океан-240 ...
Граф Куракин
12.01.2013, 14:29
Копаюсь дальше. По анализо лога установки обнаружил, что нет файла mfc42.dll. Может, эмулятор просит каких-то стандартных файлов, какие есть у винды, но нет в CrossOvere?
кстати, у меня в последней версии не пустлся Океан-240 ...
Я знаю. :) Проблема со звуком в Корвете как раз и появилась, когда я новую фичу для Океана-240 в эмуляцию ВИ53 добавил. Только тогда я этого не заметил.
Думаю, как решить эту проблему. Можно, конечно, сделать в конфиге опцию для Океана, но меня коробит тот факт, что эмуляцию ВИ53 надо подгонять под компьютер.
---------- Post added at 19:24 ---------- Previous post was at 19:19 ----------
Копаюсь дальше. По анализо лога установки обнаружил, что нет файла mfc42.dll. Может, эмулятор просит каких-то стандартных файлов, какие есть у винды, но нет в CrossOvere?
Ну, там много файлов требуется :)
ddraw.dll
dsound.dll
winmm.dll
mfc42.dll
msvcrt.dll
kernel32.dll
user32.dll
gdi32.dll
shell32.dll
comctl32.dll
wsock32.dll
Но, как правило, эти файлы являются частью винды и в установщик не включаются.
Граф Куракин
12.01.2013, 21:11
Вообщем, думаю, установщик не помешает :) Если есть желание и возможность написать... ;)
Граф Куракин
13.01.2013, 03:25
И в установщик программы вбить все нужные длл и компоненты - тогда мир линукса и эйпла ляжет у твоих ног ;)
Граф Куракин
24.01.2013, 23:24
Ну так стоит ожидать инсталлятор? :)
Граф Куракин
23.02.2013, 21:13
С Праздником!!!! :)
Ждем-с инсталятор :v2_dizzy_vodka2:
А программа-установщик это ведь тоже "экзехка", она-то как запускается? Или это какой-то специальный установщик должен быть?
Есть два вида установщиков -- скриптовые и Windows Installer совместимые.
Скриптовые (NSIS например) дают на выходе .exe, который выполняет действия согласно написанному скрипту.
Windows Installer совместимые дают .msi файл -- это БД которая описывает состояние системы после установки приложения, плюс можно навесить скрипты на события при переходе из состояния в состояние. Windows Installer это часть системы, поэтому он в какой-то мере обеспечивает транзакционность установки -- если что-то не так то она откатится целиком.
Со своей стороны крайне рекомендую WiX -- опенсорсный, написан сотрудником MS, Windows Installer совместимый.
http://rsdn.ru/article/install/Deploying.xml
http://www.rsdn.ru/article/install/wixfaq.xml
На WiX написан инсталлер для UKNCBTL -- см. http://code.google.com/p/ukncbtl/source/browse/#svn%2Ftrunk%2Fsrc%2FUKNCBTL.WiX
b2m, я хотел попросить сделать конфигурацию Specialist8color с подключением SD контроллера и Flash-диска, как сделано в SpecialistMX2. Адреса для SD контролера будут f000/f001, для Flash-диска - f000...f003. Вроде адреса немного пересекаются, но должно работать.
Адреса для SD контролера будут f000/f001, для Flash-диска - f000...f003. Вроде адреса немного пересекаются, но должно работать.
И как это всё работать должно?
И как это всё работать должно?
Да хрен его знает. А как это работает в Специалисте_МХ2? Там тоже два устройства привязаны к одному порту дополнительного ВВ55.
А как это работает в Специалисте_МХ2?
FFE4-FFE7 внешняя ВВ55 (флэшдиск)
FFF4-FFF7 контроллер SD-card
FFE4-FFE7 внешняя ВВ55 (флэшдиск)
FFF4-FFF7 контроллер SD-card
Ну по аналогии:
F000-F003 внешняя ВВ55 (флэшдиск)
F100-F103 контроллер SD-card
Правда SD контроллер (в Специалисте_МХ2 тоже) юзает только два первых адреса : F100,F101.
Вот строки из SD драйвера от HardWareMan'а:
; Адреса ячеек железки
SPIData: .equ 0F000h ; F000h - регистр данных SPI
SPICtrl: .equ 0F001h ; F001h - регистр управления и статуса
Ну по аналогии:
F000-F003 внешняя ВВ55 (флэшдиск)
F100-F103 контроллер SD-card
Вот конфиг. Флэшдиск в файле 001.rom, образ sd-карты в sd.img, если надо - измени в конфиге.
Выбор содержимого Flash-диска сделал так:
fdisk : Memory {
rom="Specialist\001.rom"
romselect="Change Flash-Disk ROM"
romfiles="ROM files (*.rom)|*.rom"
}
Пока в своей программа я что-то со стеком намудрил, ищу. Как запущу SD - отпишусь.
b2m, представленная тобой конфигурация SpecialistFD работает! Я в своей программе (http://www.zx.pk.ru/showpost.php?p=581423&postcount=70) сделал загрузку и запуск файлов с Flash-диска и загрузку с SD карты.
b2m, я тут просмотрев конфигурацию Специалиста_МХ не понял, а почему она не верно описывает подключение таймера К580ВИ53:
tim : K580wi53 {
clock[0].rate=1/1
clock[1].rate=1/1
clock[2]=tim.out[1]
~gate[0]=tim.out[2]
gate[1].value=1
gate[2].value=1
}
Она несколько напоминает рекомендации по использованию таймера для работы с Монитором SP580. Правильное подключение в Специалисте_МХ другое.
Я делал конфигурацию, чтобы работало как описано: каналы 1,2 образуют 4-х байтовый счётчик, который в режиме меандра переодически включает/выключает звук, генерируемый каналом 0. В Специалисте-МХ это сделано объединением выходных сигналов каналов 0,1 логическим ИЛИ. По-другому, т.е. делая какие-то операции над генерируемыми сигналами, в эмуляторе пока нельзя. Есть, правда, небольшая разница: в моём случае, а также в схеме SP580, нельзя генерировать два звуковых сигнала разной частоты (после объединения по ИЛИ они оба будут более-менее слышны). А так - принцип работы одинаков.
b2m, при загрузке в конфигурации Специалист_МХ2 файла I80 происходит переключение в режим Специалиста_МХ и соответственно отключаются Flash-диск и SD карта,присущие Специалисту_МХ2. I80 присущие только одной конфигурации Специалист_МХ?
Пока приходится записывать отлаживаемый файл на дискету и оттуда запускать.
I80 присущие только одной конфигурации Специалист_МХ?
Да, привязка расширения к конфигурации задаётся в файле emu.ext, но там не всё так просто. Чтобы запустить файл на исполнение в определённой конфигурации иногда необходимо сначала сделать определённые действия (например, настроить порты, или подождать, пока их настроит bios), и только потом загрузить файл по нужному адресу и запустить его.
ILoveSpeccy
27.05.2013, 13:00
Пара вопросов по эмуляции корвета
- как произвести сброс?
- можно ли грузить программы с wav-файла?
- есть ли возможномть сохранить в wav-файл?
За ранее спасибо
reset - красная точка на тулбаре ;)
Пара вопросов по эмуляции корвета
- можно ли грузить программы с wav-файла?
- есть ли возможномть сохранить в wav-файл?
В файле(-ах) конфигурации Korvet*.cfg изменить:
в секцию ppa1 добавить строку
portA[0]=cas.playback
в секцию ppa2 добавить строку
portC[1]=cas.record
добавить пустую секцию
cas : tape-recorder {
}
На тулбаре появятся кнопки "Play/Stop" и "Record/Stop".
Балдею, не просто эмулятор, а эмулятор-конструктор. :v2_thumb:
- как произвести сброс?
- можно ли грузить программы с wav-файла?
- есть ли возможномть сохранить в wav-файл?
Сброс везде - Ctrl+Break
Поддержки wav-файла нет, не было необходимости.
---------- Post added at 21:32 ---------- Previous post was at 21:31 ----------
Балдею, не просто эмулятор, а эмулятор-конструктор. :v2_thumb:
Спасибо, хоть один человек оценил :)
эмулятор супер, но доки нетууууууууу
эт я опять начинаюююююю
сайт покорежило, css пропало ?
ага, в Chrome - нормально
в FF (24) - нет цветов вообще CSS?
https://dl.dropboxusercontent.com/u/490774/b2msitebug.png
Странно. Может это укоз-овская система дурит.
Хотел как лучше (переделал под их систему), а получилось как обычно...
Тут все ок, Хром и ФФ одинаково.
сорри за панику, проблемы на моей стороне
Виноват оказался AdBlock PLUS
похоже убивая рекламу на UCOZ он уносит и оформление.
выключу ка я его нафиг.
еще раз сори за панику.
Привет
b2m, есть просьба,
можно прекрутить дебаг out к сетевым функциям эмуляции корвета ?
а то там что-то сильно не так, и хотелось бы разобрать, и пофиксить
да и в копании с протоколом бы сильно помогло.
лог наверное что-то типа
timestamp in/out HEXdata
в крайнем случае дай описание протокола, а то реверсить его лень ;)
и чтоб два раза не вставать, про эмуляцию сети же
насколько сложно сделать чтобы номер РМУ был
1) в заголовке окна/названии конфигурации (типа Корвет РМУ #01) (возможно опционально включалось в конфиге ??
2) чтоб номер РМУ задавался в конфиге а не "каждый следующий"
или оставить и "каждый следующий" если номер в рму в конфиге = 0
тем более что номер рму должен быть там в порту забит.
лог наверное что-то типа
timestamp in/out HEXdata
Есть такая фича.
Подключается в конфиге примерно так:
main.CPUClock=2500KHz
main.Caption="Корвет 1.1"
mystat : access-stat {
output="mystat.txt"
mem[FB20-FB21]=1,log
}
CPU : K580wm80a {
stat=mystat
mem=mm
Первоначально было сделано для статистики обращений к портам/памяти, число после знака равно - это сколько адресов группировать, например mem[0000-FFFF].ro=400 даст статистику обращений на чтение к 64 областям размером 1Кб.
Но если добавить ,log то будет сохранён ещё и протокол обращений, он бывает очень большой, надо быть осторожнее, сначала посмотреть, сколько обращений будет.
чтоб номер РМУ задавался в конфиге а не "каждый следующий"
В конфиге есть строчка:
portA[C-F]=lan.netid
Замени на такое:
portA[C-F]=01
---------- Post added at 02:54 ---------- Previous post was at 02:45 ----------
а то там что-то сильно не так, и хотелось бы разобрать, и пофиксить
Незнаю, насколько это удастся пофиксить. Основная проблема вроде была такая: сетевые функции рассчитывают на быстрый ответ, а эмуляция двух компов одновременно разными процессами приводит к тому, что один процесс работает, а другой ждёт, в результате первый никак не может дождаться быстрого ответа от второго.
Решение вроде есть: заставить работать несколько эмулируемых компов в рамках одного процесса (там своя диспетчеризация виртуального времени). Но для этого придётся круто переделывать эмулятор, сейчас он не рассчитан на эмуляцию нескольких компов одновременно.
не, я все время повторяю что этому монстроэмулятору не хватает сущей мелочи - документации ;)
Есть такая фича.
Подключается в конфиге примерно так:
mystat : access-stat {
output="mystat.txt"
mem[FB20-FB21]=1,log
}
CPU : K580wm80a {
stat=mystat
mem=mm
ой, генерит, но формат описание бы пригодился, а то не понял что-там такое
mem r/w FB20-FB21:
FB20-FB20: 43012
FB21-FB21: 1454849
000825BA 0000.214: FF 0384
00000016 0000.214: FF 0384
000583D3 0000.358: FF 0384
...
0000002F 0059.056: 92 03D0
0000002F 0059.056: 92 03D0
0000002F 0059.056: 97 03D0
00000039 0059.056: 00 039F
00000029 0059.056: 92 03D0
0000002F 0059.056: 92 03D0
В конфиге есть строчка:
portA[C-F]=lan.netid
Замени на такое:
portA[C-F]=01
а будет ли оно работать правильно в обратную сторону, если я поставлю 01 то это будет сетевой адрес 01 ??
Незнаю, насколько это удастся пофиксить. Основная проблема вроде была такая: сетевые функции рассчитывают на быстрый ответ, а эмуляция двух компов одновременно разными процессами приводит к тому, что один процесс работает, а другой ждёт, в результате первый никак не может дождаться быстрого ответа от второго.
Решение вроде есть: заставить работать несколько эмулируемых компов в рамках одного процесса (там своя диспетчеризация виртуального времени). Но для этого придётся круто переделывать эмулятор, сейчас он не рассчитан на эмуляцию нескольких компов одновременно.
так это, там же вроде сеть не на время завязана
а везде стоит ожидание готовности уарта
и на прием и на передачу !?!?!?!
---------- Post added at 17:25 ---------- Previous post was at 17:20 ----------
есть для корвеа такая хрень "сендер", передает ком файл на рму
так он работает
но!
он очень немного передает через ПЗУшный функции, там байт 100 всего - приемник
пзу - там есть подтверждения = двунаправленный обмен
так вот, этот сендер нормально передает большие файлы, но передает уже сам, без подтверждений, просто пуляя байты в порт.
в эмуляторе - как раз работает
выглядит как будто двунаправленный обмен сильно страдает ....
---------- Post added at 17:37 ---------- Previous post was at 17:25 ----------
а флага RD/WR нету ??
понятно что последнее число - значении PC после доступа
первые два числа - вообще мрак ...
ой, генерит, но формат описание бы пригодился, а то не понял что-там такое
1. количество тактов с момента предыдущего доступа (hex)
2. время с начала эмуляции - секунды.миллисекунды
3. считанное/записанное значение
4. адрес команды
а будет ли оно работать правильно в обратную сторону, если я поставлю 01 то это будет сетевой адрес 01 ??
Не понял вопроса. Что поставишь, то и будет из порта читаться.
так это, там же вроде сеть не на время завязана
а везде стоит ожидание готовности уарта
и на прием и на передачу !?!?!?!
Такое ощущение, что там есть таймаут ожидания готовности байта.
а флага RD/WR нету ??
Я не помню, может и протоколируется, но в файл не выводится точно.
огромное спасибо!
буду изучать и думать.
Не понял вопроса. Что поставишь, то и будет из порта читаться.
похоже я торможу, у тебя все байты доставляются всем машинам ?
а можеш написать как конкретно работает "эмулятор сети"
типа
на RMU записали байт в порт, он доставился в порт на рмуXX ......
Такое ощущение, что там есть таймаут ожидания готовности байта.
вот вообще не встречал ;)
обычно вида
wait:
ld a,(stat)
and 4
cp 4
jnz wait
Я не помню, может и протоколируется, но в файл не выводится точно.
немного усложняет жизнь, но уже можно жить.
хотя флаг запись/чтение был бы очень к месту, а так надо делать привязку к коду ;)
похоже я торможу, у тебя все байты доставляются всем машинам ?
Да. Посылает место преподавателя - принимают все, посылает ученик - принимает только место преподавателя.
а можеш написать как конкретно работает "эмулятор сети"
После того, как клиент приконнектился к серверу (место преподавателя), сервер посылает ему один байт - номер соединения, именно этот байт выдаётся через lan.netid (сервер выдаст ноль). В конфиге есть фича, т.к. номер должен быть инверсный, то написано не portA[4-7], а portA[C-F], т.е. если номер бита 8 и больше, то он инвертируется.
---------- Post added at 16:17 ---------- Previous post was at 16:15 ----------
немного усложняет жизнь, но уже можно жить.
По-моему, гораздо проще взять какой-нибудь сниффер, и посмотреть, что передаётся через указанный в конфиге порт.
По-моему, гораздо проще взять какой-нибудь сниффер, и посмотреть, что передаётся через указанный в конфиге порт.
;)
это я попробовал ДО того как писать сюда ;)
и как-то сразу не полчилось.
у меня как-то странно с wireshark получилось
он вилит траффик только если запустить сервер в одной виртуалке а клиента в другой
в пределах одной виртуалки - не видит он траффика
вопрос
а отправляет он побайтно или пакетами (как показалось на первый взгляд, и что смутило)
в пределах одной виртуалки - не видит он траффика
Т.е. не ловит пакеты через интерфейс 127.0.0.1
а отправляет он побайтно или пакетами
Отправляет-то побайтно, только второй эмулятор в это время простаивает, и все байты будут накоплены в буфере сокета.
Не только, я вешал и на не локалхост, тоже не видел.
Гм, может это и проблема ?
По моему ему критично что после отправки байта может прийти ответ на него
Точнее можем отправить пакет и ждать вменяемого ответа на него
Гм, может это и проблема ?
По моему ему критично что после отправки байта может прийти ответ на него
Точнее можем отправить пакет и ждать вменяемого ответа на него
Ничего не понял.
---------- Post added at 02:03 ---------- Previous post was at 02:00 ----------
Ты имеешь ввиду, такое: прога не дождавшись ответа посылает пакет снова, он накапливается в буфере и другая сторона отправляя что-либо на первый пакет тут-же получает вторую копию?
hantarex
27.03.2014, 16:09
можно прикрутит к эмулятору кнопку magic? чтоб нажал и сбросил в файл полный дамп памяти с озу и пзу без вызова отладчика?
demetrius2003
27.03.2014, 18:03
А! Вот! Подскажите, можно добавить на панель эмулятора состояние светодиодиков Суровских. И нигде не могу раскладку клавиатурную найти (спецклавиши) к Суре.
можно прикрутит к эмулятору кнопку magic? чтоб нажал и сбросил в файл полный дамп памяти с озу и пзу без вызова отладчика?
И чё потом с этим дампом делать?
Подскажите, можно добавить на панель эмулятора состояние светодиодиков Суровских.
Я как-то пытался сделать светодиоды в строке состояния, но что-то там с MFC пошло не так, и я забросил эту идею. В Векторе пришлось сделать в области экрана. Может когда-нибудь вернусь к этой фиче.
И нигде не могу раскладку клавиатурную найти (спецклавиши) к Суре.
О каких спецклавишах речь? Матрица клавиатуры описана в pk8000.kbd
hantarex
28.03.2014, 08:37
И чё потом с этим дампом делать?
загнать образ в иду или другой отладчик например
Ничего не понял.
Ты имеешь ввиду, такое: прога не дождавшись ответа посылает пакет снова, он накапливается в буфере и другая сторона отправляя что-либо на первый пакет тут-же получает вторую копию?
типа того, получается нет обмена
там же обычно логикак какая
бейсик работает примерно так.
РМП передает пакет в сеть, несколько байт. (с ожиданием порта для каждого байта)
после этого начинает ждать ответ (проверяя статус порта)
РМУ отправляет ответ (тоже несколько байт) (с ожиданием порта для каждого байта).
и так по кругу
правда рму не "ждет порта" а работает по прерываниям
эт конечно усложняет жизнь
хотя если в момент "ожидания отправки байта" убедится что байт доставлне по сети до адресата ?
в общем не всё так просто.
--------------------------------------------
и кстати, вспомнил про корвет еще одну фичу
при записи в LUT (а это 155РУ2) если лучь должен прочитать его, то из него читается 0xF и на экране белые полоски (пока проц пишет?)
это очень классно на реале видно в SOKO.COM (сокобан)
когда на экране в заставке два человечка держат заставку и она мигает
там на экране мельтешение белых полосок.
как всегда была рекомендация писать в LUT только в VBL - но кого это волновало ? ;)
можно такое эмулировать ?
можно такое эмулировать?
Эмулировать можно практически всё. Другое дело, что сейчас влом что-либо переделывать. Строка экрана формируется мгновенно, в Векторе пришлось делать дополнительную буферизацию строки и высчитывать, в какой точке нужно отразить действия процессора.
Kakos_nonos
16.05.2014, 20:58
А можно в эмуляцию РК и подобных (Микро-80, ЮТ-88, Апогей) добавить возможность отображения только видимой части видеопамяти. Или рамку просто. Там же видеопамяти 78*30 а отоброжается только 66*27 кажется, непомню точно.
Неудобно при написании программ, приходится на реал ходить и постоянно смотреть, как изображение на нём выглядит, не вылазит ль что-то за экран.
Только делать надо не по знакоместам, а по пикселям. Могу сделать точные замеры, как надо ограничивать.
тогда уж "приглушать" невидимые символы, или сделать переключение
...видеопамяти 78*30 а отоброжается только 66*27 кажется, непомню точно...
...Только делать надо не по знакоместам, а по пикселям. Могу сделать точные замеры, как надо ограничивать.
Точно ты скажешь только для СВОЕГО монитора. На других мониторах свои ограничения. И вообще, "...отсечение вылетов не стандартизировано..." (http://ru.wikipedia.org/wiki/%D0%92%D1%8B%D0%BB%D0%B5%D1%82%D1%8B_%D1%80%D0%B0% D0%B7%D0%B2%D1%91%D1%80%D1%82%D0%BA%D0%B8)
---------- Post added at 12:39 ---------- Previous post was at 12:35 ----------
Маленькое замечание по эмулятору.
Для моделей с ВГ75(i8275) - 86РК, Микроша, Апогей (про другие не скажу) режим курсора «блок» - в реале «инверсный блок». Данный тип курсора формируется сигналом RVV (pin 36).
Reverse Video: Output signal used to enable the video signal to the CRT circuity to reverse the video signal. This output is active at the cursor position if a reverse video block cursor is programmed or at the positions specified by the field attribute codes.
В исходных схемах 86РК и Микроши этот сигнал не задействован, по этому у них не работает атрибут инверсии и курсор типа «блок». Инверсия появляется при "цветной" доработке.
извините если уже был вопрос: а как с поддержкой Win x64 ?
извините если уже был вопрос: а как с поддержкой Win x64 ?
У мну работает под 7х64.
Спасибо, у мну на 8.1pro x64 тоже заработало после того как я папку emu в корневой каталог вернул.
У меня папка прямо на рабочем столе, на всякий случай я поставил "запуск от имени...", но это я уже делаю автоматом.
Очень хороший эмулятор, я по нему изучал архитектуры компов, ковырялся в Мониторах... Автор - воистину молодец!
Kakos_nonos
04.06.2014, 19:49
Точно ты скажешь только для СВОЕГО монитора
Количество строк до экранной области сверхе и количество неотображаемых пикселов слева неизменно и зависит от стандартов pal/ntsc.
Сделайте тогда этот прямоугольник настраеваемый, а то неудобно, пишешь программу, а там строки в экран не влазят, или не там стоят.
Kakos_nonos
23.07.2014, 19:37
b2m, расскажи как писать плагины к эмулятору (те dll, что в папке Plugins).
Может про это уже написано где-то?
Хочу написать плагин для передачи/приёма данных с интернета.
Будет время - напишу. Для компиляции плагинов нужен будет VC++ 6.0
liberation
22.11.2014, 15:11
Имею подтвержденный наукой багрепорт касательно эмуляции ПК-02 "Львов"! ;)
У меня есть адаптация со Спектрума игры "Savage-1", которая не работает даже в последней версии эмулятора. Игры запускается в штатном режиме, отображает меню, звучит биперная музыка, но при попытке перейти к непосредственно игровому процессу игрушка виснет. До сих пор я думал, что проблема в том, что до наших дней дошел исключительно битый образ S1, но вчера уважаемый kapitan-u запустил эту игрушку без проблем на своем ПК-02... И ни одного зависания.
Я сомневаюсь, что kapitan-u что-то коварно подпаял в схеме, чтобы запустить эту игрушку, поэтому предлагаю поискать причину в эмуляторе.
Вот файл с игрой (https://www.wuala.com/olegd/pc01_forum/Share/zx-pk.ru/pc02/SAVAGE-1.lvt/).
hantarex
13.12.2014, 09:35
а есть вариант прикрутить к эмулятору виртуальный СОМ-порт? как в протеусе?
чтобы можно было с виндовым терминалом связаться, или файлы передавать?
нужен для написания и отладки терминальных программ для старых компов.
ну, или подскажите, как это делать без СОМ-порта?
Есть возможность соеденить эмулируемый ВВ51 с TCP/IP сокетом. Задаётся в конфиге так:
чтобы сам коннектился
comport : K580ww51 {
connect="tcp:12345:localhost"
}
чтобы был сервером
comport : K580ww51 {
connect="tcp:12345"
}
Единственная неприятность (или фича) - сервер при соединении посылает номер соединения (1,2,...) в виде текста. Соответственно, клиент сразу после соединения (в теч. 100мс) хавает номер. Данная фича сделана для организации сети компьютеров Башкирия-2м.
demetrius2003
12.02.2015, 12:22
А кто-нибудь пробовал для Микро-80 на Басике писать? Почему с тем знакогенератором, что идёт в комплекте в Басик листинге все токены имеют последнюю букву маленькую русскую? В других эмулях не так (но там и знакогенераторы другие).
Видимо у меня был недостаток информации по поводу знакогенератора. Вполне возможно, что старший бит видео-памяти не учитывается, и символы из диапазона 00-7F должны повторяться в диапазоне 80-FF, а у меня там вместо латинских - маленькие русские. А Бейсик, выводя служебные слова, не заботится о старшем бите, который там обычно означает конец служебного слова.
hantarex
19.03.2015, 21:17
для ПК8002 реализован автозапуск картриджей ПЗУ? которые с AB начинаются?
пробовал по образцу ПК8000 прикрутить, не получилось.
для ПК8002 реализован автозапуск картриджей ПЗУ? которые с AB начинаются?
Не помню, надо код монитора смотреть. Хочется верить, что есть. Раз уж это наше подобие Ямахи :)
hantarex
20.03.2015, 12:21
судя по описанию - в мониторе эта функция должна быть. а в эмуляторе как внешнее ПЗУ подключать?
Примерно так, как в аттаче (будут работать только картриджи с адреса 4000h). Только что ты будешь запускать? Я нашёл пару файлов с АВ вначале, оно даже запускается, но после старта выключает слот картриджа и благополучно выполняет случайные данные в ОЗУ :)
hantarex
23.03.2015, 16:26
нашёл пару файлов с АВ вначале, оно даже запускается
от Эльфа файлы? можешь выложить?
Я по-моему сам эти файлы и сохранил из отладчика - тупо копия с адреса 4000h непосредственно перед запуском программы (т.е. я ставил точку останова на запускаемый адрес перед загрузкой). Оказалось, это совсем не то, что внутри .cas файла.
Пока не нашлись оригинальные внешние пзу к 8002 выложил (https://yadi.sk/d/r95EIIZEfaBwL) пару самопальных новоделов. Один пример меньше 16 Кб, другой больше. Лучше начать с jetset, т.к. после старта galaxiana загрузчик не будет смотреть внешнее пзу (я поленился убрать четыре байта вначале) и придется выйти из эмулятора и запустить его снова
Пожелание - хорошо было бы добавить опциональный ФВЧ для убирания постоянной составляющей из wav записанного с магнитофонного выхода. Если, например, записать из конфига РК86 wav и потом его прочитать, то директива I правильно прочитает данные, но завершит работу некорректно (не напечатает начало, конец, КС). Да, можно в звуковом редакторе либо применить ФВЧ либо "обрезать по содержимому", и тогда wav будет читаться корректно, но желательно бы сразу получать хороший wav
желательно бы сразу получать хороший wav
Я, конечно, попробую. Если после этого считывание записанного не пострадает, то эта фича будет в следующем релизе. В конце концов, если это будет опционально задаваться в конфиге, то все останутся довольны :)
Дмитрий2012
28.04.2015, 21:54
Просьба. По возможности, в эмулятор для конфигурации Орион-Про 2 добавить музыкальный процессор AY 3-8910 с дешифратором по прилагаемой схеме.
http://i58.fastpic.ru/big/2015/0428/3b/11b0c76e22a0f134c14e3189309c193b.gif (http://fastpic.ru/)
3EH - запись данных музыкального процессора (DD9)
3FH - чтение данных музыкального процессора (DD9)
3FH - запись номера регистра музыкального процессора (DD9)
Был такой (http://zx-pk.ru/showpost.php?p=632359&postcount=36) вариант
Дмитрий2012
28.04.2015, 22:42
Был такой вариант
Спасибо. Именно то , что нужно.
А архив с игрушками или еще какими программами использующие AY не сохранился?
b2m, Хорошо бы этот конфиг положить в архив с эмулятором, чтобы не искать по всему форуму. Может еще кому-нибудь понадобится:)
Хорошо бы этот конфиг положить в архив с эмулятором, чтобы не искать по всему форуму.
Добавил.
hantarex
30.04.2015, 16:15
ivagor, вот здесь http://zx-pk.ru/showpost.php?p=792354&postcount=681 вы выкладывали адаптации игрушек для ПК8002. они полностью автономны? или используют процедуры из ПЗУ? если используют - поделитесь пожалуйста точками входа и параметрами процедур. спасибо!
они полностью автономны?
Да
Полностью я пзу 8002 не дизассемблировал, но кое-что, в частности загрузку с ленты, разбирал. Искал базу иды от 8002 - не нашел. Еще на другом компе посмотрю в субботу, но маловероятно, что найду. С другой стороны, там не так уж и много, можно и по новой
архив с игрушками
Обновил ссылку (http://zx-pk.ru/showpost.php?p=632359&postcount=36)
Желательно поправить в 6128 тайминги следующих команд:
call
xchg
sim
rim
rstv
В VV все нормально. Вроде и в emu раньше все было нормально, но я сейчас не проверял старые версии.
Error404
01.12.2015, 20:30
Обновил ссылку (http://zx-pk.ru/showpost.php?p=632359&postcount=36)
В архиве эмулятор MSX. А где брать игрушки, перечисленные в XLS? Может быть они есть одним архивом, чтобы не собирать по-одной?
Дык в том же посте
Комплект с игрушками здесь.
Вроде и в emu раньше все было нормально, но я сейчас не проверял старые версии.
Проверил старые версии (за 13-14 их у меня мало)
...
29.11.2013 - тайминги в 6128 еще нормальные
.?.
13.01.2014 - тайминги в 6128 уже поломались
13.01.2014 - тайминги в 6128 уже поломались
Я тогда доделывал эмуляцию специфичных для ВМ85 команд, и почему-то ещё и тайминги поменял. С CALL точно косяк вышел. Откуда я брал тайминги - убей не помню. Однако были также изменения для INX,PUSH,SPHL,PCHL и условный RET. Теперь вот тоже не уверен.
call,xchg,sim,rim,rstv верну взад, как было. Остальные, подожду пока твоей реакции :)
Для ПК-6128Ц есть тест (vstvi53 1.4) и есть результаты dk_spb с реала, т.ч. тут не вижу повода для сомнений. Обсуждали это в почте довольно давно, наверно несколько лет прошло уже.
Для бестормозного 8085 есть табличка (http://pastraiser.com/cpu/i8085/i8085_opcodes.html). На нее ссылался дяденька (http://www.righto.com/search/label/8085), который реверсил 8085, т.ч. ей я доверяю.
Остальные команды посмотрел в 29.04.2015 в условном рк с 8085:
push 12 ok
inx 6 ok
sphl 6 ok
pchl 6 ok
ret сc - 12Y/6N ok
ok по совпадению с вышеупомянутой таблицей
Doronetty
04.12.2015, 16:37
А в эмуляции БК-шки (с надеждой в голосе и интонацией Карлсона), в БК-шке 11М делаются ли какие улучшения? А то её, бедную, никак до ума никто не доведёт - все проекты либо сырые, либо заморожены, даже до уровня Эмулятора-3000 столетней давности она не доведена :v2_frown:
даже до уровня Эмулятора-3000 столетней давности она не доведена
А что подразумевается под этим "уровнем"?
Doronetty
05.12.2015, 09:48
Демки типа Technological Dreams проигрываются до без глюков и до конца :)
То есть там, где картина с дядей и тётей и надпись "The End" это ещё не конец?
Хотя да, если сначала запустить Disco Club, а потом Technological Dreams, то подвисает при переходе к Technological Death. С чем связано - непонятно. Трассировать демки - дело наблагодарное, так что вряд-ли я когда-либо узнаю...
Doronetty
08.12.2015, 19:29
То есть там, где картина с дядей и тётей и надпись "The End" это ещё не конец?
Хотя да, если сначала запустить Disco Club, а потом Technological Dreams, то подвисает при переходе к Technological Death. С чем связано - непонятно. Трассировать демки - дело наблагодарное, так что вряд-ли я когда-либо узнаю...
После "Some greetings to..." у B2M экран замерзает на имени SWAY (хотя другие эмули просто вешаются раньше, на имени XPEH), потом постепенно выдаёт "дядю с тётей", после чего музыка заканчивается и начинается рандомный набор звуковых сигналов. А ведь после этого самого SWAY идёт ещё одна чать демки - Amiga Dance Club с танцующим товарищем (похоже на Disco Club), а там уже приходят дядя с тётей (похоже это Ким Бессинджер и Алек Болдуин, хотя я могу ошибаться), но и это ещё не конец, после этого под другую музыку идёт вертикальный скроллинг "Привет всем любителям острых ощущений в области компьютерного искусства! Вот и настал момент.....(и там ещё долго)" с полупрозрачным промтом, предлагающим ввести своё имя.
P.S: У Эмулятора-3000 конечно есть свои небольшие баги в демках - видимо не 100% попадание в тайминги в той же Technological Death дают не совсем верную картинку. Но всё же он все демки тянет и ни на каких проблимных местах не виснет.
hantarex
05.01.2016, 21:14
В эмуляторе ПК8000 пишу программку, сохраняю save "name", открываю блокнотом, добавляю-удаляю строки, блоки из других cas-файлов и все прекрасно грузится. Если вставить блок из текстового файла - грузиться перестает, постоянный выбор файла. Какие-то косяки с кодировкой? или что-то еще?
Возможно добавит загрузку-выгрузку васик-файлов, как чистого текста? а то непосредственно в эмуляторе не очень удобно набирать-редактировать тексты программ. у всех компов раскладка разная, особенно всякие (!"№;%:?*), задолбаешься, пока найдешь. да и средства редактирования программ не очень удобные.
Какие-то косяки с кодировкой? или что-то еще?
Где примеры? То, что прекрасно грузится, но не грузится после добавления блока из текстового файла, например (оба файла приложи).
Возможно добавит загрузку-выгрузку васик-файлов, как чистого текста?
Если скажешь - как :) Разбираться с конкретным васиком желания мало.
hantarex
06.01.2016, 09:13
Если скажешь - как Разбираться с конкретным васиком желания мало.
в пункте выбор файла, там есть выбор между .rk и .cas. добавить .txt, с заголовком в ascii. как-то так.
если не для всех васиков, то, хотя бы, для msx-подобных. ямаха, ПК8000, Корвет, возможно - Вектор? у них же есть выгрузка в незжатом виде?
косяки выложу позже, до дома доберусь.
в пункте выбор файла, там есть выбор между .rk и .cas. добавить .txt, с заголовком в ascii. как-то так.
Как выбирать файл - понятно, непонятно как подсунуть данные бейсику, чтобы он их переварил.
hantarex
06.01.2016, 17:13
В файл r1.cas, между строками 1 и 9999 вставляю содержимое 99bob.bas - и вуаля, нифига не грузится.заголовок не трогаю, последний блок тоже.
Эмулятор ver. 1.01, версия файла 1.0.0.1. вставляю в стандартном блокноте и в notepad++ v5.8.7, результат одинаков. винда ХР, sp3. Вроде все данные.
- - - Добавлено - - -
Как выбирать файл - понятно, непонятно как подсунуть данные бейсику, чтобы он их переварил.
ну, может важную инфу как-нить пометить, чтоб случайно не изменить. насколько я понял, в заголовке, кроме имени файла, другой инфы нет?
можно обойтись, если копипаста заработает.
вообще - где почитать по форматам *.bas файлов разных компов? или сводной инфы нет?
ну, может важную инфу как-нить пометить, чтоб случайно не изменить. насколько я понял, в заголовке, кроме имени файла, другой инфы нет?
можно обойтись, если копипаста заработает.
вообще - где почитать по форматам *.bas файлов разных компов? или сводной инфы нет?
Выяснил я, почему не грузится. Дело в том, что Бейсик записывает файл блоками по 256 байт. Т.е. идёт раккорд, байты EA EA... затем имя, следующий блок - раккорд и 256 байт (или меньше, если последний), и т.д, а последний блок дополнен байтами 1A (где-то тоже было, минимум 10 байт). Я не знаю, кто придумал кодировать раккорд в файле 8-ю специальными байтами, но файлы оцифровывал не я, и я принял это как должное, даже в конфиг вынес эту последовательность. Т.е. первые 8 байт в файле - это раккорд.
Таким образом, чтобы перевести обычный текст в .cas файл, недостаточно просто прилепить заголовок и окончание. Я сделал в эмуляторе возможность вызывать внешний конвертор при загрузке определённых файлов (т.е. если при открытии файла после команды load выбрать указанный в конфиге тип файлов). В аттаче есть изменённый конфиг для примера и конвертор. Новые строчки в конфиге:
convert[0].filter="Basic text files (*.bas)|*.bas"
convert[0].exec="PK8000\cascvt.exe @in @out"
Таким образом, с этим конфигом в новой версии эмулятора текстовые файлы с расширением .bas будут загружаться как бейсик-программы.
В процессе восстановления "Партнёр 01.01" эмулятор очень помог в отладке тестового ПЗУ. Спасибо! :) Комп был успешно запущен.
Вот такие различия с реальным "Партнёр 01.01" удалось заметить в EMU ("Башкирия-2М"):
1. Процессор стартует с адреса 0xF800. Должен стартовать с нулевого адреса.
2. Экран сдвинут влево. У "Партнёра" видимая часть экрана начинается с адреса 77BDh, а не с 77C2h, как в "Радио-86РК".
3. Работа интерпретации атрибута "подчёркивание" происходит некорректно по сравнению с реальным компьютером.
4. Присутствуют артефакты при интерпретации кода переключения знакогенератора.
https://img-fotki.yandex.ru/get/3913/203760433.a3/0_1551ab_f78e8bc7_orig.jpg
В остальном - всё, вроде, ок :)
1. Так проще было реализовать схему начального пуска. Но ошибка всё-же есть, надо бы поправить в конфиге стартовый адрес на pc=E000
2. Отображаемая часть у обоих начинается с адреса 76D0h, в эмуляторе видно все символы (хотя часть из них используется в реале для формирования сигнала гашения), на реале всё зависит от настроек развёртки телевизора.
3. Есть такое, поправим в будущем. Хотя странно, что я сделал именно так. Теста-то раньше не было.
4. Тоже странно, вообще-то служебные символы не должны отображаться, буду искать ошибку.
b2m, в идеале, стартовый адрес должен быть всегда 0, так как это особенность Intel 8080. Для "Партнёра" (да и для "Радио") легко написать прошивку ПЗУ, которая заработает на реале, но не будет работать на эмуляторе, в котором стартовый адрес процессора не нулевой (достаточно наличия в программе одного JMP в начальные адреса). В случае с "Партнёром", как мне кажется, стартовый адрес вообще достаточно переставить на 0, и всё будет работать. В случае с "Радио" надо эмулировать триггер начального запуска. После сброса он подключает в начало памяти ПЗУ, а при чтении (любом, не только при выборке команды) из ячейки с адресом 8000h-FFFFh, ПЗУ отключается, и в начало адресного пространства отображается ОЗУ.
С экраном на данный момент получается такая ситуация, что в Вашем эмуляторе вывод программ для "Партнёра" всегда сдвинут влево по сравнению с выводом этих же программ (их версий) для "Радио". Аналогично, если попытаться делать вывод на реальном "Партнёре", используя 77C2h, как рекомендуемое начало видимой области, то получим изображение, сдвинутое вправо, возможно, вылезающее за границы экрана телевизора/монитора. Всё дело в отличающихся схемах формирования горизонтальных синхроимпульсов. Разработчики "Партнёра", изменив оригинальную схему видеоконтроллера "Радио", решили программно сдвинуть изображение чуть влево и приняли за "стандарт" другой начальный адрес видимой области экрана.
Так проще было реализовать схему начального пуска.
В Партнере совсем все по честному сделано, pc=0000 в конфиге тоже работает, в нулевой странице там ПЗУ, а потом монитор сам переключается на вторую. Или я что-то не понимаю?
В случае с "Партнёром", как мне кажется, стартовый адрес вообще достаточно переставить на 0, и всё будет работать.
Да, можно убрать строчку pc=F800 из конфига. Карта памяти давно уже максимально приближена к реальности, нету только недокументированной части. Видимо, такая схема начального пуска осталась со времён, когда я из Радио делал Партнёра.
Vladimir_S
24.01.2016, 15:59
b2m, А Радио-86рк color исправишь?
Может можно как то задать это битовой маской?
В конфигурации Башкирия-2М используются только младшие 5 бит адреса, задаётся это строкой portmask=1F
- - - Добавлено - - -
b2m, А Радио-86рк color исправишь?
Напомни, что конкретно, чтобы весь форум не шерстить.
Vladimir_S
26.01.2016, 08:26
Напомни
В Radio-86RK color любой закинутый в экранную область атрибут приводит к срыву синхронизации изображения.
Vladimir_S, это от настроек ВГ75 зависит, а они в мониторе задаются, то есть по идее в цветном РК86 надо монитор менять
Vladimir_S
26.01.2016, 08:52
uart, В мониторе по адресу FADC 93 нужно поменять на D3.
uart, В мониторе по адресу FADC 93 нужно поменять на D3.
Вопрос в том, что считать "официальным" монитором. Где был опубликован дамп монитора? Если там D3 - не вопрос, поменяю.
b2m, в "официальном" мониторе 93. D3 это патч для цветной доработки, у Микроши тоже.
b2m, вопрос по эмулятору
при старте он просит выбрать модель и запускается (я выбрал эльф)
далее я кидаю ему ром файл (ром от ЭЛЬФА)
он включает режим компа Вектор и успешно зависает
Нам тут предоставили нечто под названием АРМ-ШК Башкирия, во вложении снятое с него ПЗУ. Там по идее 16 Кб ПЗУ и 2 Кб знакогенератор. Можете посмотреть, что это, и нужно ли?
Благотворитель: Романов Хаким, email: spectrum53@yandex.ru
b2m, вопрос по эмулятору
при старте он просит выбрать модель и запускается (я выбрал эльф)
далее я кидаю ему ром файл (ром от ЭЛЬФА)
он включает режим компа Вектор и успешно зависает
Открытие файла из командной строки, через меню File/Open или посредством Drag&Drop производит один и тот-же эффект: в файле EXT.ini ищется подходящее расширение файла, и если найдено, то запускается соответствующая ему конфигурация. Чтобы поключить ром-файл к компьютеру, нужно нажать на тулбаре другую кнопку, с изображением микросхемы.
- - - Добавлено - - -
Нам тут предоставили нечто под названием АРМ-ШК Башкирия, во вложении снятое с него ПЗУ. Там по идее 16 Кб ПЗУ и 2 Кб знакогенератор. Можете посмотреть, что это, и нужно ли?
Благотворитель: Романов Хаким
О! За это огромное спасибо!!!
Кажется, это то - что нужно.
Буду делать эмулятор первой Башкирии :)
- - - Добавлено - - -
Хаким оказывается и мне на мыло прислал их, я просто на форум раньше, чем в почту, зашёл :)
Обновил эмулятор, добавил АРМ-ШК Башкирия.
Надо сказать, это какой-то более новый вариант. Я помню, наши Башкирии не грузили автоматом бейсик из ПЗУ, а в мониторе не было информации о командах монитора, он просто писал строчку * МОНИТОР *. Тем не менее, большинство команд те-же, однако есть и новые, например передача экрана школьника. У нас никакой сети не было.
Эмулятор в стадии разработки, но кое-что уже работает. Не думал, что Башкирия окажется такой капризной, уже нашёл достаточно нехорошую ошибку эмуляции контроллера прерываний ВН59, но поскольку, если исправить эту ошибку, то порушится куча компов, пришлось добавить костыль для АРМ-ШК. После этого теннис заработал нормально.
Чтобы долго не искать, вот что я выяснил:
- команда LOAD имеет один параметр, один символ без кавычек, варианты такие: 1,2,5 - программы на бейсике из ПЗУ, M - загрузка с магнитофона, Z - меню переходов на другие программы в ПЗУ
- выход в монитор Ctrl+N
- в мониторе: L T загрузка тенниса, L B загрузка бейсика
Да, и с клавиатурой надо что-то делать, она терминального типа, сейчас просто коды клавиш из винды передаются, так что раскладка не совпадает, в теннисе, например, правая ракетка управляется одной клавишей без shift, другую надо с shift-ом нажимать. Левая ракетка "1", "J" и ";", правая "0", "-" и ":". На Башкирии эти клавиши были рядом.
Жаль, конечно, что не сохранились кассеты с программами, которые я в 1988 году разрабатывал. Писал прямо в кодах, никакого ассемблера у нас не было. :)
Одна из них, исполнитель Черепаха, получила продолжение на Башкирии-2М, но обратно портировать, я думаю, будет сложнее, чем написать заново.
- - - Добавлено - - -
Статья про Башкирию (http://xn----7sbacsfsccnbdnzsqis3h5a6ivbm.xn--p1ai/index.php/2-statya/15536-kompyuter)
Пожелание - переделать отключение пзу старта-1200. Некоторые векторовские (06ц) программы при задании палитры включают его обратно, что не могло быть на реале.
b2m, Попробовал добавить прошивки от КСД3 в эм. ДВК-КСМ, служебная стока моргает и всё.
Понятно что это не КСМ. Может где-то надо подправить чтоб КСДшные прошивки подошли.
Спасибо.
КСД-ПЗУ (http://tis.kz/progs/rom-ksd3.rar)
Спасибо Andrey_Ak за прошивки.
UPD.
Если поставить прошивку от КСМ KSM.BIN то запускается. Но в КСД font не отличается от КСМ, так что отбой.
b2m, Попробовал добавить прошивки от КСД3 в эм. ДВК-КСМ, служебная стока моргает и всё.
Понятно что это не КСМ. Может где-то надо подправить чтоб КСДшные прошивки подошли.
Что такое КСДЗ?
Что такое КСДЗ?
Контроллер Символьного Дисплея.
http://tis.kz/temp/SAL-160416/IMG_1626.JPG
Контроллер Символьного Дисплея.
Чем он отличается от КСМ, что означает З на конце, и т.д.?
Чем он отличается от КСМ,
Основное отличие, тем что плата КГД подключается через плату сопряжения к КСД. На КСМ уже другие разъёмы и КГД подключается на прямую.
что означает З на конце, и т.д.? Думаю что перед этим были варианты 1 и 2.
А фоток самого работающего агрегата нет, его дисплея?
b2m, Попробовал добавить прошивки от КСД3 в эм. ДВК-КСМ, служебная стока моргает и всё.
Понятно что это не КСМ. Может где-то надо подправить чтоб КСДшные прошивки подошли.
Спасибо.
Сравнил прошивки от КСМ и КСД, ничем не отличаются. В варианте КСМ была битая прошивка с описанием строк (D16), здесь вроде нормальная.
А фоток самого работающего агрегата нет, его дисплея?
У меня нет. А дисплей будет типа МС 6105.
В варианте КСМ была битая прошивка с описанием строк (D16), здесь вроде нормальная. В КСД схема отличается от КСМ. Или известно что она битая?
В КСД схема отличается от КСМ. Или известно что она битая?
То что она битая, было понятно по содержимому, потом кто-то выкладывал нормальный вариант. И битая прошивка не именно в КСМ, а именно та микросхема, с которой было считано, это файл ksm_02_PLM_D16.BIN. А прошивка с описанием строк КСД3-К573РФ2-368.rf2 нормальная, без ошибок.
КСД3-К573РФ2-368.rf2 нормальная, без ошибок.
Эту прошивку эмулятор не использует. А вот с КСД3-К573РФ2-8604.rf2 которую использует, эмулятор не идет.
Эту прошивку эмулятор не использует. А вот с КСД3-К573РФ2-8604.rf2 которую использует, эмулятор не идет.
Так там надо сшить КСД3-К573РФ2-8604.rf2 и КСД3-К573РФ2-8601.rf2 командой copy /b КСД3-К573РФ2-8604.rf2+КСД3-К573РФ2-8601.rf2 ksm.bin.
Так там надо сшить
Да, так и есть.
b2m, Не знаю пригодится или нет, прошивка к РК86. Приглашение даёт как MONITOR 32.
Спасибо, конечно. От стандартной немного отличается, для чего сделаны отличия - так и не понял. Такое ощущение, что есть фича синхронизации ВГ75 с чем-то на порту А000 (скорее всего ВВ55), возможно для вывода телетекста (были раньше такие применения).
b2m, Интересно будет увидеть в составе эмулятора терминал ВТА2000-15М. Он вроде шёл с СМ1800.
Прошивки- здесь. (http://rgho.st/download/private/87HqstSFh/5c7b857a4fac9d10666c850fece5d2ea/6a258ecd4e12b6e5326fd8d483295073b13e9514/2ed73e8ecbc9020f5560b592039dbc51f2555d5b/%D0%91%D0%94%D0%9F-15_EPROMs.zip)
Спасибо anasana за прошивки.
Прошивки скачал, буду посмотреть.
Я пока даже информацию по данному терминалу не начинал собирать. Можешь помочь ссылками, тогда будет быстрее. Описание терминала- здесь. (http://doc.pdp-11.org.ru/Terminals/BTA2000/%c2%d2%c02000_15.pdf)
Описание терминала- здесь. (http://doc.pdp-11.org.ru/Terminals/BTA2000/%c2%d2%c02000_15.pdf)
А можно ещё ссылку на схему? А то пока даже раскладка памяти не получается, всё рябит и дёргается...
А можно ещё ссылку на схему?
К сожалению нет. Насколько я знаю их 3 модификации (может и больше).
1) В корзине 6 плат - вариант 1984 года.*
2) В корзине 4 платы -вариант 1985 года.*
3) В корзине 2 платы -вариант 1988 года.* Где по внутренним разъёмам не совместимы с предыдущими. Настройки сохраняются в ЭРПЗУ КР1601РР1 (очень медленная :v2_dizzy_facepalm: ).
* года определены по маркировкам м/х.
А то пока даже раскладка памяти не получается, всё рябит и дёргается...
Можно посмотреть исходный код, как там сделано.
Здесь. (http://infitis.dp.ua/media/i/p/vta2000.zip)
shattered
12.07.2016, 01:47
можно и такой исходник посмотреть -- https://github.com/mamedev/mame/blob/master/src/mame/drivers/vta2000.cpp. картинку он показывает, но клавиатуры и линии нет :)
Можно посмотреть исходный код, как там сделано. Здесь. (http://infitis.dp.ua/media/i/p/vta2000.zip)
Не, ну это совсем не то. Это просто терминальная программа, обрабатывающая esc-последовательности аналогично ВТА-2000.
можно и такой исходник посмотреть -- https://github.com/mamedev/mame/blob/master/src/mame/drivers/vta2000.cpp. картинку он показывает, но клавиатуры и линии нет :)
Вот это уже кое-что. Но совсем не похоже на ВГ75. Биты атрибутов вроде такие-же, но выборка из памяти вообще никак не подходит. Схема могла бы прояснить ситуацию, но раз нет - значит нет. Будем догадки строить.
Это вы про ВТА 2000-15М, которые с ВГ75 ? Если да, то я кое-что помню...
Я встретил КР580ВГ75 на панельке платы терминала BTA-2000 15M.
https://fotki.yandex.ru/users/lodedome/album/93699/
Причем их там аж две штучки
Видимо, ПДП работает на удвоенной частоте, и чётные байты скармливает одной ВГ75, а нечётные - другой. Итого получится до 14 бит на символ.
- - - Добавлено - - -
Блин, там на фотках платы ВИ53 тоже две штуки. По дампу ПЗУ было не очевидно... Интересно, для чего?
b2m, возможно вам будет интересно, в вашем эмуляторе можно добавить эмуляцию игрового компьютера Интеллект-02, на настоящий момент есть ПЗУ картриджа "Шахматы":
http://zx-pk.ru/threads/26864-emulyator-shakhmatnogo-kompyutera-intellekt-02.html
http://www.emuverse.ru/wiki/%D0%98%D0%BD%D1%82%D0%B5%D0%BB%D0%BB%D0%B5%D0%BA%D 1%82-02
Doronetty
21.08.2016, 14:23
nzeemin & b2m Э-эх, объединили бы вы усилия и допилили реализацию БК-0011М, а то адекватного эмулятора так и нет до сих пор :v2_crazy:
shattered
21.08.2016, 14:51
... из десяти существующих? :) а в чем у них проблемы?
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot