Важная информация

User Tag List

Показано с 1 по 8 из 8

Тема: Некорректная эмуляция ВГ93 в UNREAL SPECCY?

  1. #1
    Member
    Регистрация
    23.11.2007
    Адрес
    Ростов-на-Дону
    Сообщений
    171
    Спасибо Благодарностей отдано 
    37
    Спасибо Благодарностей получено 
    108
    Поблагодарили
    58 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Некорректная эмуляция ВГ93 в UNREAL SPECCY?

    Заметил что SMASH COMMANDER не способен установить вращение диска в UNREAL SPECCY. (такая же картина и в EmulZWin, а в Spectaculator это работает нормально. На реале тоже работало).

    Посмотрел код где всё это происходит.

    Вот процедура из SMASH COMMANDER определяющая наличие диска в дисководе:

    (с комментами)

    Код:
    Процедура вызова дос-подрограмм, она
    будет использоваться:
    
    #8dc5: push de
           jp #3d2f
    
    
    Процедура определения наличия диска
    в дисководе. 
    (На выходе флаг Z - диска нет).
    
           ld a,#08
           di
           ld de,#2fc3 ; адрес процедуры дос: out(1f),a:ret
           call #8dc5  ; даем команду ВГ93 с кодом 8.
                         не помню что это, по-моему 
                         это "восстановление"
                        (головка идет на нулевой трек).
           ld de,#3dba ; адрес процедуры дос: 
           ld b,#ff      in a,(1f): and 02: cp b: ret nz
           call #8dc5  ; считываем 1-й бит порта #1F.
           ld (#a293),a ;запоминаем его.
           ld de,0
           ld bc,#1770  устанавливаем счетчик цикла.
    a25e:  push de    ; начало цикла
           push bc
           ld a,#08
           ld de,#2fc3
           call #8dc5  ; даём команду ВГ93 с кодом 8
           ld de,#3dba
           ld b,#ff
           call #8dc5  ;  считываем бит 1 из порта #1F.
           and 02  ;дальше какие-то сравнения - это не важно
           pop bc       
           pop de
           ld h,a          
           ld a,(#a293)        
           xor h               
           and h               
           and #02
           rra
           ld l,a
           ld a,h
           ld (#a293),a
           ld h,0
           add hl,de
           ex de,hl
           ld a,d
           or e        ; если зафиксировали смену бита 1
           jr nz,#a28f ; то выходим.
           dec bc
           ld a,b
           or c
           jr nz,#a25e ; иначе переходим на начало цикла
    a28f:  ld a,d
           or e
           ei
           ret
    Вот такая вот процедурка. Есть там много лишних команд, но самое главное - там в каждом цикле проверки бита 1 дается команда 8 в порт 1F ВГ93. Команда эта нафиг не нужна, но похоже именно из-за неё SMASH коммандер не может определить наличие диска в UNREAL SPECCY. На реале она не мешала, а в эмуляторе мешает. Если удалить эту команду (забить call нулями), то SMASH коммандер начинает обнаруживать диск и работает нормально (вроде. По крайней мере определение диска работает).
    В общем, видимо посыл команды к ВГ93 влияет на эмулирование вращения диска в UNREAL SPECCY.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Member
    Регистрация
    24.08.2007
    Адрес
    Минск
    Сообщений
    88
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А где его скачать-то? (SmashCommander)

  4. #3
    Master
    Регистрация
    17.01.2005
    Адрес
    Старый Оскол
    Сообщений
    537
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    4 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я у себя нашёл некий Smash Commander 2.0 и он нормально запускается (и сам запускает другие файлы) во всех указанных эмуляторах. Возможно только версия не та.
    По поводу вращения диска (в UnrealSpeccy) надо отключить настройку Beta128->No delays.

  5. #4
    Member
    Регистрация
    23.11.2007
    Адрес
    Ростов-на-Дону
    Сообщений
    171
    Спасибо Благодарностей отдано 
    37
    Спасибо Благодарностей получено 
    108
    Поблагодарили
    58 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alexandr Medvedev Посмотреть сообщение
    Я у себя нашёл некий Smash Commander 2.0 и он нормально запускается (и сам запускает другие файлы) во всех указанных эмуляторах. Возможно только версия не та.
    По поводу вращения диска (в UnrealSpeccy) надо отключить настройку Beta128->No delays.
    Я смотрел код SMASH COM 1.0.
    Но и 2.0 дает такой же баг.
    Он и должен запускаться нормально и файлы другие запускать. Речь идет о команде смены диска (select drive). Надо нажать "1" и выбрать текущий дисковод (откуда этот smash был загружен, например). У меня он в этом случае пишет "DRIVE NOT READY".
    Если выключить галку Beta128->No delays, то он вообще начинает писать DISK ERROR (то есть вращение уже регистрирует, но глючит дальше при чтении). Лечится нажатием на Retry (с т.е. всё-таки читает, но через DISK ERROR'ы).
    Версия Unreal у меня видимо 0.32b2.
    Последний раз редактировалось CPLx; 31.12.2007 в 15:38.

  6. #5
    Member
    Регистрация
    23.11.2007
    Адрес
    Ростов-на-Дону
    Сообщений
    171
    Спасибо Благодарностей отдано 
    37
    Спасибо Благодарностей получено 
    108
    Поблагодарили
    58 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от DZh Посмотреть сообщение
    А где его скачать-то? (SmashCommander)
    Где скачать не знаю. Идея там неплохая, но реализация имхо не идеальная.
    Вложения Вложения

  7. #6
    Master Аватар для Vladimir Kladov
    Регистрация
    09.02.2005
    Адрес
    Новосибирск
    Сообщений
    933
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Изучил я исходники unreal и поробвал "честно" передрать эмуляци ВГшки. Не получается. Выдаю лог обращений к портам и вижу странность непонятную мне. Итак, начальные условия: диска в лотке нет, выдаём команду CAT <Enter>. У меня:

    outFF:3C PC=3DD7
    out1F:08 PC=3D9C
    in FF:00 PC=3DA8

    (ЗС - после команды т.е. надо вычесть 2).
    Ставлю бреки в unreal на эти адреса и вижу: out FF<-3C, out1F<-08, inFF->3F !!!

    Не понимаю: почему 3F, ведь там читается просто rqs, точнее comp.wd.rqs, но в этот rqs вообще никак не может попасть ничего, кроме 0, INTRQ=0x80 или DRQ=0x40. Где я туплю, скажите, люди? (отлаживать сам unreal я не могу, по причине кривых рук и неумения настроить его компилируемость в MS VC).
    Последнюю версию EmuZWin (2.7) можно получить по этой ссылке, а "официальная" страница с описанием здесь. Если что-то не пашет, берите там же версии 2.6 или старше. [B]

  8. #7
    Veteran Аватар для molodcov_alex
    Регистрация
    13.03.2006
    Адрес
    Колпино
    Сообщений
    1,250
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    8
    Поблагодарили
    6 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vladimir Kladov Посмотреть сообщение
    Не понимаю: почему 3F, ведь там читается просто rqs, точнее comp.wd.rqs, но в этот rqs вообще никак не может попасть ничего, кроме 0, INTRQ=0x80 или DRQ=0x40. Где я туплю, скажите, люди? (отлаживать сам unreal я не могу, по причине кривых рук и неумения настроить его компилируемость в MS VC).
    Так по коду прописано:
    Код:
    if (port & 0x80) return rqs | 0x3F;
    Остальные линии наверно таким образом считаются подтянутыми к 1?
    Последний раз редактировалось molodcov_alex; 24.02.2008 в 18:31.
    ZX Spectrum forever!

  9. #8
    Master Аватар для Vladimir Kladov
    Регистрация
    09.02.2005
    Адрес
    Новосибирск
    Сообщений
    933
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Странно, у меня нету | 0x3F; Вроде исходники одни из последних от SMT. Ну да ладно, 3F можно просто добавить, оно на результат, как оказалось, не влияет. Спасибо, что прояснили.
    Последнюю версию EmuZWin (2.7) можно получить по этой ссылке, а "официальная" страница с описанием здесь. Если что-то не пашет, берите там же версии 2.6 или старше. [B]

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

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

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

Похожие темы

  1. Порт Unreal Speccy под Linux!
    от ^m00h^ в разделе Эмуляторы
    Ответов: 62
    Последнее: 28.11.2018, 22:02
  2. Настройщик Unreal Speccy
    от Dr.Lion/RSM в разделе Эмуляторы
    Ответов: 97
    Последнее: 03.03.2008, 14:12
  3. Эмуляция Speccy на Nintendo DS
    от max_iwamoto в разделе Эмуляторы
    Ответов: 10
    Последнее: 23.02.2007, 21:27
  4. unreal speccy beakpoints
    от Raider в разделе Эмуляторы
    Ответов: 2
    Последнее: 10.07.2005, 23:13

Ваши права

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