User Tag List

Показано с 1 по 10 из 39

Тема: Вектор-06Ц: Эмуляция - Виртуальные контроллеры

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #37

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    290
    Поблагодарили
    216 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Сомневаюсь, что это представляет для кого-то интерес.
    Но... Прикрутил я к эмулятору язычёк под названием Lua (ниже ссылка на архив с плагином). Очень уж захотелось сделать виртуальный контроллер ЛВС.

    Сначала я не хотел выкидывать ВВ55, чтобы не париться с её реализацией в Lua, но как выяснилось, при настройке порта на ввод, эмуль ничего не пишет в связанное с этим портом устройством (на ввод же программируем). Т.е. привязка к еденице в реальном устройстве не будет эмулироваться как хотелось бы. В связи с этим пришлось полностью заменить ВВ55 виртуальным устройством на Lua.

    Для начала меняем конфиг:
    Код:
    ext : lua-script {
      script="Vector06c\lua\locnet.lua"
      data.onread="read"
      data.onwrite="write"
    }
    Тут мы задаём имя файла со скриптом и имена функций для устройства ext.data (вместо data могло быть что-то иное, но я решил оставить имя, которое было у ВВ55).

    Привязка к портам процессора осталась как и была у ВВ55:
    Код:
    CPU : K580wm80a {
    ...
      port~[04-07]=ext.data
    ...
    Минимальный .lua в данном случае мог выглядеть так:
    Код:
    function read(addr)
      return 0
    end
    function write(addr, val)
    end
    То есть при чтении всегда выдаётся 0, а при записи ничего не делаем.

    Первым делом я сделал протоколирование обращения к устройству:
    Код:
    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
    Далее, в зависимости от режима ВВ55 (поддерживаются только некоторые из всех возможных) я сделал возможность выполнять разные действия, и одним из первых стал режим детектирования контроллера ЛВС:

    Скрытый текст

    Код:
    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

    Эти 2 пользователя(ей) поблагодарили b2m за это полезное сообщение:

    KTSerg(14.06.2020), svofski(14.06.2020)

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Вектор-06Ц: Эмуляция
    от ZEman в разделе Вектор
    Ответов: 1516
    Последнее: 16.10.2025, 11:13
  2. Вектор-06Ц: Эмуляция - КР580ВИ53
    от Tim0xA в разделе Вектор
    Ответов: 264
    Последнее: 05.06.2025, 14:20
  3. Вектор-06Ц: Эмуляция - КР580ВМ1
    от svofski в разделе Вектор
    Ответов: 50
    Последнее: 06.10.2023, 21:11
  4. Вектор-06Ц: Эмуляция - КР580ВМ80А
    от Ramiros в разделе Вектор
    Ответов: 199
    Последнее: 17.08.2014, 22:19
  5. Ответов: 40
    Последнее: 27.07.2012, 13:07

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •