Сообщение от
KokaF77
Мне бонусы не нужны, меня результат интересует.
Ладно, будет тебе результат (предварительный уже на сайте).
Столкнулся с тремя непонятными вещами.
1. В загрузчике есть такой код (ожидание ТРБ):
Код:
RAM:A070 ; --------------- S U B R O U T I N E ---------------------------------------
RAM:A070
RAM:A070
RAM:A070 sub_A070: ; CODE XREF: RAM:A015p
RAM:A070 ; RAM:A01Bp ...
RAM:A070 DB 50 in 50h
RAM:A072 17 ral
RAM:A073 DA 70 A0 jc sub_A070
RAM:A076 C9 ret
RAM:A076 ; End of function sub_A070
Т.е. если старший бит установлен, то ждём, когда можно будет считать байт.
Однако в БИОСе Ириши имеем такой код:
Код:
044A: 0E 80 MVI C, 80h
044C: DB 50 IN 50h
044E: 17 RAL
044F: D2 4C 04 JNC 044Ch
0452: DB 51 IN 51h
0454: 77 MOV M,A
0455: 23 INX H
0456: 0D DCR C
0457: C2 4C 04 JNZ 044Ch
Т.е. если старший бит не установлен, то ждём.
Сделал пока "заглушку" - старший бит то установлен, то нет.
2. Размер БИОСа ГМД 300h, загружается он по адресу 0BA00h, т.е. последний байт у него по адресу 0BCFFh. Однако в коде БИОСа есть CALL 0BD00h. Спрашивается, где ещё один сектор и что там было?
Сделал пока "заглушку" - очистку пары байтов по адресу 0003h и RET
3. Поскольку самого CP/M KokaF77 для версии дисковода ГМД не предоставил, я использовал от контроллера на ВГ75 (в котором она зашита в ПЗУ). Поскольку она независима от БИОСа, то она работает. Однако при "горячей" загрузке (например, когда нажимаем Ctrl+C, или происходит выход из программы обратно в CP/M) БИОС, после подгрузки CP/M с диска, прыгает куда-то внутрь CP/M, и очевидно, не туда, куда надо. В аналогичной ситуации БИОС контроллера на ВГ75 прыгает по адресу 0A400h, т.е. на самое начало командного процессора.
Сделал пока "заглушку" - JMP 0A400h вместо странного перехода.
---------- Post added at 19:26 ---------- Previous post was at 17:54 ----------
KokaF77, ты БИОС сам набирал, или с дискетки какой-то удалось считать? Потому как там вроде в таблице трансляции секторов ошибка есть - нету сектора 19h, но есть сектор 00h. В результате, считывается не совсем то, что записывается (а в эмуляторе номер сектора не контролируется ).