ZX-Ревю 1991 №3 1990 г.

128 K - продолжение.


Итак, переход из режима 128K в режим 48K может программно выполняться достаточно просто, чего не скажешь об обратном переходе. Во всех "фирменных" инструкциях по работе со 128-килобайтными машинами написано, что из режима 48K в режим 128K войти невозможно, кроме как выключив и снова включив компьютер. Тем не менее, если из машинного кода напрямую работать с пятым битом порта 7FFD, то такой переход выполнить все-таки можно, для чего и служит приведенная ниже программа, написанная на языке АССЕМБЛЕРа.

Включите компьютер и войдите в режим 128K. После этого можете командой SPECTRUM перейти в режим 48K, но если Вы сразу войдете в 48K, то программа работать не будет. Прежде чем загрузить программу опустите RAMTOP командой CLEAR 32767. После загрузки Вы имеете в своем распоряжении две команды.

RANDOMIZE USR 32781.

Эта команда равноценна команде SPECTRUM - она выполняет переход в 48K, но при этом не генерирует на экране сообщение 0:OK, т.е. исполнение программы не прерывается и она может продолжать исполняться со следующего оператора, хотя и в другом режиме.

Противоположная команда -

RANDOMIZE USR 32814.

Эта команда выполняет возврат в режим 128K и опять же продолжает исполнение программы со следующего оператора.

Хотя есть и некоторые ограничения на такую работу с компьютером. Естественно, поскольку 128-й компьютер хранит системные переменные в области буфера ZX-принтера, то ничего в эту область засылать нельзя, иначе работа станет невозможной. Нельзя соответственно использовать и команды ZX-принтера - COPY и LPRINT, если Вы находитесь в режиме 48K. Из режима 128K - можно.

Такая организация работы может быть полезной тем, кто имеет компьютер 128K со встроенным последовательным портом RS232, если программная поддержка этого порта выполняется только в режиме 128K, а работать надо с программами (например с текстовым редактором), которые в режиме 128K не работают.

Сохранение на стеке регистров A, B, C и F. В BC загружается порт 7FFD. В акк-р - текущая страница. Выключается бит 5, что "отпирает" переключение режимов. Переход на финальную часть процедуры переключения режимов (размещена в ПЗУ).

ORG 8000 PUSH AF PUSH BC LD BC,7FFD LD A,(BANK_M) AND 1F

JP 5B08,SWAP+8

SWAP_2

F5 C5

01FD7F 3A5C5B E61F

C3085B

ED7B3D5C MODE_48 E1

210313 E5

21761B E5

2A455C 22425C

3A475C

ORG 800D LD SP,(ERR_SP)

POP HL

LD HL,1303,MAIN-4 PUSH HL

LD HL,1B76,STMT_RET PUSH HL

LD HL,(PPC) LD (NEWPPC),HL

LD A,(SUBPPC)

Машинный стек опустошается до адреса возврата по ошибке. Ввод адреса возврата по ошибке.

На стек идет адрес возврата при ошибке в режиме 48K.

На стек идет адрес возврата после исполнения оператора. В HL - номер текущей строки. Он считается номером следующей строки.

В аккумулятор - номер теку-

щего оператора. Переход к следующему оператору в строке. Выключение 4-го бита. DE указывает на информацию канала "P" в режиме 48K. Переход на переключение режима.

3C

32445C 0600 11BE15

1810

INC A

LD (NSPPC),A LD B,00 LD DE,15BE

JR MODE CHANGE

ORG 802E MODE_128 LD A,C3

LD (SWAP)^ LD HL,SWAP,2 LD (SWAP+1),HL LD B,10

LD DE,8054,P_128

MODE_CHANGE LD A,(FLAGS) AND EF OR B

LD (FLAGS),A LD HL,(CHANS)

LD BC,000F ADD HL,BC

EX DE,HL

LD C,04

LDIR

RET

ORG 6054 P_128 DEFW 5B34,POUT

DEFW 5B2F,PIN

3EC3 32005B 210080 22015B 0610 115480

3A3B5С

E6EF

B0

323B5C 2A4F5C

010F00 09

EB

0E04 EDB0 C9

345B 2F5B

В SWAP устанавливается инструкция JP. Адрес перехода в SWAP указывает на данную программу. Включение 4-го бита. DE указывает на информацию канала "P" в режиме 128K. Вызов переменной FLAGS, Выключение 4-го бита. Переключение 4-го бита в соответствии с действующим режимом. Запоминание измененной переменной FLAGS, HL указывает на начало области информации о каналах.

HL указывает на информацию о канале "P".

DE указывает на информацию о канале "P". В BC - количество байтов, подлежащих копированию. Копирование данных в область информации канала "P" Возврат

Адрес выходной информации канала "P" Адрес входной информации канала "P".

Тогда находясь в режиме 128K Вы открываете поток и устанавливаете параметр скорости обмена командой FORMAT "P",n , а затем переходите в режим 48K для работы, скажем со своим редактором. Теперь когда Вам надо что-то напечатать Вы переходите в режим 128K с немедленным возвратом в 48K:

RANDOMIZE USR 32814: LPRINT "что угодно" :RANDOMIZE USR 32781

Приведенная здесь программа является релоцируемой, то есть ее можно перемещать в другие удобные Вам адреса, надо только подправить адресацию в двух инструкциях, которые используют абсолютную адресацию к меткам SWAP-2 и P-128.

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

Первый джойстик опрашивается по порту EFFE, схема приведена на рис. 1, а второй -по порту F7FE - схема на рис. 2.

Не используются

EFFE

7

6

5

4

3

2

1

0

влево

вниз

огонь

вправо вверх

Рис.1

7

6

5

4

3

2

1

0

огонь

вниз

влево

вверх вправо

Рис.2

Пример загрузки данных с джойстикового порта в аккумулятор процессора для последующей обработки выглядит так:

LD BC,F7FE IN A,(C)

Продолжение в следующем выпуске.




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Вступление - стихи и содержание номера.
Галерея герцога Бофора - Идея насчет галереи герцога Бофора весьма плодотворна, но только в ней отнюдь не должно быть рисунков, а одни подписи к картинам, как полагается у Дюма.
Интерактивные новости - Intel планирует атаку на игровой рынок.

В этот день...   19 октября