Сообщение от
forth32
Я там в соседней теме выложил доделанный BIOS. Ты обязательно возьми его для экспериментов. По сравнению с тем, что я давал утром - в этом исправлены некоторые серьезные ошибки.
Кстати, я туда уже встроил новые процедуры чтения-записи сектора, с учетом твоиз оптимизаций. Стало заметно быстрее даже на глаз. Вот что значит совместная разработка open source!
круто!
тогда уж дальше оптимизировать
Код:
EXR_GETSEC:
PUSH BC
PUSH DE
LD C,128 ; счетчик байтов сектора, всего 128 байт
EX DE,HL ; адрес буфера -> DE
LD HL,PORTC
GSL:
LD A,(HL) ; слово состояния ВВ55 - берется из порта С
AND 20h ; выделяем сигнал IBF
JP Z,GSL ; IBF=0 - данных еще нет
LD A,(PORTA) ; данные поступили - выбираем их из порта А
LD (DE),A ; принимаем и размещаем очередной байт
INC DE ; указатель буфера ++
DEC C ; принимаем остальные байты
JP NZ,GSL
POP DE
POP BC
RET
Код:
EXR_GETSEC:
PUSH BC
PUSH DE
LD BC,0x8080 ; счетчик байтов сектора, всего 128 байт
EX DE,HL ; адрес буфера -> DE
LD HL,PORTC
GSL:
LD A,(HL) ; слово состояния ВВ55 - берется из порта С
AND B ; выделяем сигнал IBF
JP Z,GSL ; IBF=0 - данных еще нет
LD A,(PORTA) ; данные поступили - выбираем их из порта А
LD (DE),A ; принимаем и размещаем очередной байт
INC DE ; указатель буфера ++
DEC C ; принимаем остальные байты
JP NZ,GSL
POP DE
POP BC
RET
ну и дальше
экономия целого байта !
в идеальном случае (когда сразу прошли) ращницы нет
а в худшем экономия целых 3х тактов на каждый цикл
а вообще имхо ты маньяк
зачем CP/M компилить, я бы только сам биос трогал
и имхо для надёжности я бы оставил оригинальные ДОС, а только биос менял
и может патчил дос
предсталяеш что будет если на измененном досе кто-то запустит тот-же дос,
получим креш