Очень слоупочный фпс из-за очистки буфера и переброски его на реальный экран, все 7 килобайт.
Как сделать максимально быструю очистку всего экрана, и копирование его на реальный?
смотря что у тебя с прерываниями - разрешены/запрещены. ldi/ldd / push/pop
Очистку без проблем можно делать через стек и с разрешенными, т.к. идем сверху вниз. Развертываем PUSH RX (RX=00) на сколько памяти не жалко.
Копирование... максимально быстро через прямое задание SP для буфера и экрана, т.е. отдельно для PUSH и POP, и забор данных во все регистры.
Соответственно, процедура переброса займет примерно как сам экран. Прерывания допустимы, нужно разделить переброс между ними "впритык" или около.
Либо писать хитрожопый обработчик прерываний, анализирующий команды во время его прихода, и восстанавливающий 2 байта на стеке из нужной рег. пары.
Чуть помедленнее развертка вида POP HL: LD (NN),HL - но жрет памяти вдвое больше объема переброса. Зато два байта стека восстановить просто (прерывание).
Еще медленнее, но универсально и минимально по размеру, строчка команд LDI. Пояснений не требует.
Программа работает с IM2, и ей понадобилось прочесть файл с дискеты. Запретить на время прерывания по DI - этого мало ??
Обязательно надо IM 1: DI а потом уже 3d13h?
И второй вопрос, плавно вытекающий из первого.
Надо прочесть в буфер следующий файл на диске. Название не важно, количество секторов как бы еще неизвестно. Это надо с каталога сперва инфу прочесть, а потом уже файл читать ?
Profi v3.2 -=- Speccy2010,r2
zebest(13.01.2022)
zebest(13.01.2022)
Ну у меня сей час так и сделано:
но надо знать количество секторов. С парой файлов я то могу посчитать сектора, а елси мне 255 штук надо считывать ?Код:im 1 di ; ld hl,buff_ ; ld de,(current_track_sector) ld bc,0605h ; C=#05 - чтение блока секторов: call 3d13h ;
Считывать инфу из каталога под текущий current_track_sector?
ну раз надо - то попробую IY выставить
Profi v3.2 -=- Speccy2010,r2
Постановка задачи то какая?
Если нужно загрузить несколько файлов из своего проекта, то размер этих файлов в секторах известен и берется из заранее составленной таблицы.
В более общем случае:
1. находим дескриптор первого файла в каталоге
2. берем из него сектор/дорожку и длину файла в секторах
3. грузим файл
4. переходим к дескриптору следующего файла
5. goto п.2, пока не загрузим нужное количество файлов.
255 с одного диска не получится загрузить. Максимум 128
zebest(13.01.2022)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)