
Сообщение от
ZXMAK
Странную вещь наблюдаю в эмуляторе. При сбросе, спринтер дает команду #00 жесткому диску. Такой команды в ATA интерфейсе не существует.
Код, который производит вывод в порт находится по адресу #969F:
Код:
969F LD E,#00
96A1 LD BC,#4153
96A4 OUT (C),E
96A6 HALT
никто не знает что это может быть?
Вот весь лог обмена с ATA контроллером от сброса до ошибки:
Код:
[23:55:07.322][VirtualMachine.runThreadProc][DEBUG] AtaPort.Write(HeadAndDrive, 0xA0)
[23:55:07.327][VirtualMachine.runThreadProc][DEBUG] AtaPort.Write(HeadAndDrive, 0xA0)
[23:55:07.328][VirtualMachine.runThreadProc][DEBUG] AtaPort.Read(CommandStatus) = 0x50
[23:55:07.328][VirtualMachine.runThreadProc][DEBUG] AtaPort.Write(SectorCount, 0x05)
[23:55:07.329][VirtualMachine.runThreadProc][DEBUG] AtaPort.Read(SectorCount) = 0x05
[23:55:07.329][VirtualMachine.runThreadProc][DEBUG] AtaPort.Write(CommandStatus, 0x00)
[23:55:07.331][VirtualMachine.runThreadProc][ERROR] ATA00: Unknown ATA command #00
[23:55:07.337][VirtualMachine.runThreadProc][DEBUG] AtaPort.Read(CommandStatus) = 0x51
[23:55:07.337][VirtualMachine.runThreadProc][DEBUG] AtaPort.Write(CommandStatus, 0xEC)
[23:55:07.338][VirtualMachine.runThreadProc][DEBUG] AtaPort.Read(CommandStatus) = 0x58
ATA00 - это адрес устройства на АТА шине, 00 - это мастер
нашёл *****код в файле autoide.asm.
Код:
NO_BUSY LD E,#05
LD BC,HDW_CNT
OUT (C),E
LD BC,#0010
DJNZ $
DEC C
JR NZ,$-3
LD BC,HDR_CNT
IN A,(C)
CP E
JP NZ,ABSENT
LD A,(IDEDEV)
CP CDROM
JP Z,NOHDD
LD E,#00 ;NOP
LD BC,HDW_COM
OUT (C),E
вопрос не в том, что нет такой команды, а в том, что делает Альтера? возможно она перехватывает исполнение 0й команды и делает что-то там сама. маловероятно конечно, но мало ли. если нет, уберу эту хрень.