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)

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




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Реклама - Стоимость рекламного объявления Бесплатно.
Вступление - содержание номера.
Реклама - реклама и объявления.
Реклама - реклама и объявления.
Вступление - Вы 4итaете гродненскую гaзету SPITE.

В этот день...   1 января

SibNews #08, Woot! #01, Spectrum Magazine #01, ACNews #25, Psychoz #14, ACNews #14, Last 128 #08, Last 128 #06, Last 128 #05, Last 128 #04, Last 128 #03, Last 128 #02, Last 128 #09, Last 128 #3.5, Last 128 #8.025, Sinclair Club #05, Last 128 #M!R 01, Fantadrom #01, Buzz #20, Last 128 #01, DonNews #13, Nicron #120, Promised Land #01, Inferno #01, Marazm #25, Ultimathum #01, Marazm #21, Hooy Mag #02, KrNews #11, Marazm #22, Marazm #23, ZX Football 2000 #01, Codemania #01, Always #03, Bugs #02, IzhNews #08, Virtual Worlds #01, Listok #04, Scenergy #02, Flash Info #18, Marazm #16, Marazm #17, Zed #01, Balagan #02, ZX Format #08, ZX Power #03, Shock #01, Impulse #02, Deja Vu #03, ZX Club #08, ZX Club #06, Numberology #01, Marazm #13, Marazm #12, Marazm #14, Gorodok #02, Zodiac #01, Marazm #15, Deja Vu #07, Marazm #11, Deja Vu #07, Playboy #03, Crazy News #2, Crazy News #4, ZX Light #01, Crazy News #5, Playboy #02, ZX News #03, ZX Review #1-2, Read Me #02, Crazy News #3, Nicron #13, Read Me #01, Public Spirit #01, Faultless #06, Faultless #05, ZX Software #01, Stump #04, Speccy #07, Возраждение #0, Speccy #03, On-Line #17, Scene+ #01, Welcome Press #01, ZX Konig #04, Adventurer #01, Faultless #05, Faultless #04, Di Halt #01, Faultless #01, Playboy #01, Crazy News #1, Faultless #03, Pioneer #03, Sinclair Town #02, ZX Magazine #01, Eldorado #01, ZX Magazine #02, Spectron #01, ZX News #01, ZX Konig #02, 200 #W, Welcome Press #00, Dune #07, Subliminal Extacy #01, Subliminal Extacy #02, ZX Konig #01, Subliminal Extacy #00, Muchomor #01, Spectrofon #01, ZX Revija #02, Outlet #01, Outlet #1-3