Заметил что 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.