мультикарту от писюка в спек

ZXNet эхоконференция «real.speccy»

От Kirill Frolov Кому All 15.03.2001

Hемедленно нажми на RESET, All!


Думал над тем как мультикарту от пц с портами и хдд подключить к спеку.
А хдд то 16-битный должен быть. Хардварная часть проблем не вызывает: можно
ввести
дополнительный регистр для сохранения старшей/младшей половины шины данных и
читать
из портов по два раза. Hо тут всё упирается в то что прерывать процесс
чтения-записи
одного 16-битного слова другой программой обращающейся к 16-битным портам
нельзя!

Пусть например есть в системе винчестер (16-битный) и ещё некое 16-битное
устройство
с более высоким приоритетом прерываний. Система в один момент получает
прерывание от
винчестера и начинает считывать данные:

LDI
LDI
LDI
....
LDI


И между двумя командами LDI вдруг появляется прерывание. Причём появляется
в такой
момент времени что процессор успел считать из регистров только половину от
16-разрядного
слова. Процессор уходит в прерывание и начинает работать с другим 16-разрядным
устройством
и портит содержимое регистра содержащего половину слова данных от винчестера.
Потом процессор
выходит из прерывания и дочитывает ИСПОРЧЕHHЫЙ блок данных с винчестера.

И как тут быть? Понятно что надо запрещать прерывания между двумя
соседними
LDI и разрешать между другими двумя, типа такого:

DI
LDI
LDI
EI
NOP
DI
LDI LDI
EI
NOP
DI
LDI
LDI
....

Hо программным способом тормозно сильно получается. Можно аппаратно после
чтения половинки 16-разрядного слова удавливать прерывания на какое-либо время.
Hе нравится так.

Можно предусмотреть в программе обработки прерываний считывание не
дочитанной половинки
слова в память и потом запись обратно, а для 8-битных предусмотреть чтение в
обход запоминающего регистра.

Какие ещё будут идеи?