Вот предлагаю фрагмент моего кода, который считывает с диска сектор. Это кусок прошивки ПЗУ, порты вг93 в ней открыты, поэтому программа обращается к ним напрямую, а если действовать через тр-дос - то надо пользоваться соответствующими точками входа.
RDBOOT: DI
LD A,00011000B
OUT (0FFH),A
LD A,00111100B
OUT (0FFH),A
LD HL,300
CALL PAUSE
LD A,0D0H
OUT (1FH),A
LD HL,1000
CALL PAUSE
LD A,8
OUT (1FH),A
CALL WT_IRQ
LD A,9
OUT (5FH),A
LD HL,5D25H
LD A,80H
OUT (1FH),A
LD C,7FH
CALL DMA_RD
LD A,B
OR A
JP Z,B_ERR
IN A,(1FH)
AND 1FH
JP NZ,B_ERR
RET
PAUSE: PUSH AF
PAU_0: DEC HL
LD A,H
OR L
JR NZ,PAU_0
POP AF
RET
DMA_RD: LD B,3
DRD1: IN A,(0FFH)
AND 0C0H
JR NZ,DRD2
INC DE
LD A,E
OR D
JR NZ,DRD1
DJNZ DRD1
RET
WT_IRQ: IN A,(0FFH)
AND 0C0H
JP Z,WT_IRQ
RET M
DRD2: INI
JP WT_IRQ
Обращаю внимание, что шаманская последовательность команд на вг93 (сначала вывод в порт FF, потом пауза, потом D0, потом опять пауза, потом 8) является критичной, если ее нарушить - то мотор дисковода не включается и вообще ничего не происходит. Нигде в датащитах я не видел описания того, как надо "пинать" вг93 после сброса, а данная последовательность была найдена в ходе экспериментов и анализа других загрузчиков.




Ответить с цитированием