Вот настала пора расширить память моего Кворума-64 до 1 метра памяти, но вот вопрос, по какому стандарту? Что существует на сегодня для расширения до 1 метра:
младшие 3 бита у всех машин по порту 7FFD, остальные:
Profi 1024: D0-D2 порта DFFD
ATM TURBO: D0-D2 порта FDFD
KAY-1024: D7 порта 7FFD; D4,D7 порта 1FFD (ваще полный бардак)
Pentagon 1024: D5-D7 порта 7FFD
Если ошибаюсь, поправьте меня.
А теперь о том, как это выглядит с точки зрения быстродействия драйвера, обслуживающего память. Пусть на входе в RG.A – номер банка, никакие регистры портить нельзя:
Profi:
PUSH AF
PUSH BC
PUSH DE
LD BC,#7FFD
LD E,A
AND 7
OR 16
OUT (C),A
LD A,E
RRCA
RRCA
RRCA
AND 7
LD B,#DF
OUT (C),A
POP DE
POP BC
POP AF
RET
ATMTURBO: то же самое, только с портом FDFD.
KAY:
PUSH AF
PUSH BC
PUSH DE
LD BC,#7FFD
LD E,A
AND 7
BIT 3,E
JR Z,M1
OR 128
M1 OR 16
OUT (C),A
LD B,#1F
LD A,E
BIT 5,A
JR Z,M2
OR 128
M2 AND 144
OUT (C),A
POP DE
POP BC
POP AF
RET
Pentagon:
PUSH AF
PUSH BC
PUSH DE
LD BC,#7FFD
LD E,A
RLA
RLA
AND 224
XOR E
AND 224
XOR E
OUT (C),A
POP DE
POP BC
POP AF
RET
А если использовать табличный метод, тогда:
PUSH AF
PUSH BC
LD C,A
LD B,TAB’
LD A,(BC)
LD BC,#7FFD
OUT (C),A
POP BC
POP AF
RET
TAB 64 байта
Плюс ко всему у Pentagon'a нельзя определить автоматически наличие верхней памяти из-за 5 бита порта 7FFD.
Ну и как вам это нравится? Не один из способов расширения не обеспечивает главного – высокого быстродействия. А как следовало бы сделать по уму, чтобы обеспечить самое высокое быстродействие? Я думаю так:
1) Первые три бита порта 7FFD должны дублироваться в дополнительном порту расширения (ДПР). Т.е. если мы даём команды LD BC,#7FFD, OUT (C),A, то изменяется и состояние первых трех битов ДПР. И наоборот, если даём команды LD BC,ДПР, OUT (C),A, то изменяется состояние битов порта 7FFD.
2) Соответственно биты D3,D4,D5 ДПР отвечают за память свыше 128Кб. Биты D6 и D7 могут использоваться для расширения до 4 метров.
3) Самый больной вопрос (уже слышу негативные оклики: “Опять новый стандарт выдумал!”, “У меня и так уже все адресные линии заняты!”, “Конфликтов со старыми портами не оберешься!”): По какому адресу цеплять ДПР?
Чтобы избежать каких бы то ни было конфликтов с портом OUT(#FD),A и не ставить всякие кнопки ON/OFF можно ввести порт, который будет выбираться при A0=0 и, например, A5=0. Как правило, во всех мощных компах есть порт кемпстон джойстика. И обычно для определения порта используется мс ИД7, либо другая, у которой один из выходов и есть нужный нам порт. И заметьте – никаких конфликтов ни с внутренними устройствами, ни с внешними.
А вот как будет выглядеть драйвер верхней памяти для данного расширения:
OUT (222),A
RET
Чувствуете разницу?