в оффтопку
Зачетная игра по переписке, изначально для Game Boy Advance: https://awbw.amarriner.com/[свернуть]
в оффтопку
Зачетная игра по переписке, изначально для Game Boy Advance: https://awbw.amarriner.com/[свернуть]
Больше игр нет
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Посмотрел в эмуляторе. Не похоже это на ВВ51. Моё предположение такое:
8 двунаправленных сигналов данных, направлением рулит сервер (управляющий сигнал не показан на схеме)
1 управляющий сигнал от сервера команда/данные (на твоей схеме обозначен "передача")
1 сигнал запрос/подтверждение от сервера к клиентам (у тебя "байт на шине", запрос это или подтверждение зависит от направления передачи)
1 сигнал запрос/подтверждение от клиентов к серверу (у тебя "байт прочитан")
После того, как клиент обнаружил команду, предназначенную ему, он подтверждает её. И это единственный вывод в порт В в загрузчике. Формат команды NNNAAAAA, где N - номер команды (0 - начальная загрузка), а A - адресат.
Номера других команд и формат их пакетов, естесственно, неизвестен.
Да, согласен. Не похоже на ВВ51.
Глянул код инициализации, не вижу классической инициализации (загрузки настроек и команд в регистры контроллера), в порт В выводится только то, что до этого считывается из порта А (с маской 1Fh). И сразу после этого Вектор ожидает начала сеанса.
Вроде как прочитал из порта А свой адрес, выдал его в контроллер (порт В), и ждёт что контроллер будет готов к работе.
После начальной билитристики, ВВ55 настраивает младшие биты порта С как вЫходные сигналы (при этом в загрузчике используется только один бит - подтверждение приёма байта), а старшие биты порта С - входные сигналы (старший бит в загрузчике не используется).
Т.к. нет ни настоящего контроллера, и нет родного ПО с полноценной реализацией протокола, нам остаётся только гадать на кофейной гуще.
b2m, у описания соединения:
com5 : K580ww51 {
connect="tcp:30360:127.0.0.1"
}
есть ещё какие-то параметры?
"логин/пароль" например, или ещё что-то, что могло-бы идентифицировать данного "клиента" на стороне "сервера", кроме номера порта клиента, который выбирается системой случайным образом (первый из свободных).
Нет, либо с IP адресом, чтобы сам коннектился, либо без, чтобы ждал соединения. В последнем случае первым байтом выдаст номер соединения (нужен для сетей). Когда работает в качестве сервера, то данные рассылает всем клиентам.
Сомневаюсь, что это представляет для кого-то интерес.
Но выложу папку с проектом виртуального контроллера ЛВС на Delphi7.
Удобно, что эмулятор emu удерживает данные (отправленные в сокет) для порта Вектора даже когда порт уже был прочитан программой Вектора.
Например при опросе наличия контроллера, программа читает из порта 3 байта (с ожиданием синхры передачи байта) и проверяет на соответствие 55h.
А виртуальному контроллеру, в этой ситуации достаточно один раз отправить в сокет байт 55h и три пары байт синхры - передачи байта информации. Программа Вектора читая порты воспринимает это как положено.
Заменил исходники. Обнаружил избыточность передачи синхры, и добавил возможность менять номера портов для серверов.
Последний раз редактировалось KTSerg; 13.06.2020 в 10:25.
Improver(13.06.2020)
Сомневаюсь, что это представляет для кого-то интерес.
Но... Прикрутил я к эмулятору язычёк под названием Lua (ниже ссылка на архив с плагином). Очень уж захотелось сделать виртуальный контроллер ЛВС.
Сначала я не хотел выкидывать ВВ55, чтобы не париться с её реализацией в Lua, но как выяснилось, при настройке порта на ввод, эмуль ничего не пишет в связанное с этим портом устройством (на ввод же программируем). Т.е. привязка к еденице в реальном устройстве не будет эмулироваться как хотелось бы. В связи с этим пришлось полностью заменить ВВ55 виртуальным устройством на Lua.
Для начала меняем конфиг:
Тут мы задаём имя файла со скриптом и имена функций для устройства ext.data (вместо data могло быть что-то иное, но я решил оставить имя, которое было у ВВ55).Код:ext : lua-script { script="Vector06c\lua\locnet.lua" data.onread="read" data.onwrite="write" }
Привязка к портам процессора осталась как и была у ВВ55:
Минимальный .lua в данном случае мог выглядеть так:Код:CPU : K580wm80a { ... port~[04-07]=ext.data ...
То есть при чтении всегда выдаётся 0, а при записи ничего не делаем.Код:function read(addr) return 0 end function write(addr, val) end
Первым делом я сделал протоколирование обращения к устройству:
Далее, в зависимости от режима ВВ55 (поддерживаются только некоторые из всех возможных) я сделал возможность выполнять разные действия, и одним из первых стал режим детектирования контроллера ЛВС:Код:local f = io.open("test.txt", "w+") function read(addr) local val = 0 f:write("rd ", addr, " ", val, "\n") return val end function write(addr, val) f:write("wr ", addr, " ", val, "\n") end
Скрытый текст
Код:local function zero() return 0 end local function nop(val) end local detval = 0 local function rdet() return detval end local function wdet(val) detval = (val&0x80)>>4 end local default = { name = "default", read = {zero,zero,zero,zero}, write = {nop,nop,nop}, enter = nop } local recv = { name = "recv", read = {zero,zero,zero,zero}, write = {nop,nop,nop}, enter = nop } local send = { name = "send", read = {zero,zero,zero,zero}, write = {nop,nop,nop}, enter = nop } local detect = { name = "detect", read = {zero,zero,rdet,zero}, write = {wdet,nop,nop}, enter = nop } local modesel = { [0x9B] = default, [0x9A] = recv, [0x98] = send, [0x8B] = detect } local mode = default local f = io.open("test.txt", "w+") function read(addr) local val = mode.read[addr+1]() f:write("rd ", addr, " ", val, "\n") return val end function write(addr, val) if addr==3 then mode = modesel[val] or default mode.enter() f:write("mode ", mode.name, "\n") else mode.write[addr+1](val) f:write("wr ", addr, " ", val, "\n") end end[свернуть]
Имейте ввиду, что если массивы задаются списком, то первый элемент имеет индекс 1.
Ну а далее шаг за шагом реализовывался весь (известный) протокол ЛВС. Конечный вариант есть в архиве. Имя загружаемого файла задаётся в самом скрипте.
Архив с плагином: luaplug.zip
Я пролистал тред и только запутался. Вся борьба за эмуляцию чего? подключенного к Вектору через ВВ51 некоего LAN-устройства? какого именно? А то уже тут ЛУА, и неясно во что именно в железе выльются все эмуляторские изыски.
Лучше сделать и жалеть, чем не сделать и жалеть.
Некоторые из моих поделок тут: https://github.com/serge-404
Название треда вроде говорит само за себя: эмуляция виртуального контроллера. Гипотетическое устройство, подключаемое к портам эмулируемого Вектора. При желании, можно реализовать какое-либо реальное устройство. В данном случае рассматривался контроллер локальной сети, который в железе теперь очень сложно найти. И найдёт ли кто-нибудь - неизвестно.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)