1.8. В о з м о ж н о с т ь р а с ш и р е н и я п р о г р а м м н о г о о б е с п е ч е н и я н а MSX - к о м п ь ю т е р а х Удачное аппаратное и программное решение определили популярность MSX-компьютеров в нашей стране. Однако широкие возможности MSX практически не описаны в отечественной литературе. В.Лашук \/fc В подготовке этого материала принимали непосредственное участие: В.С.Лашук (Владимирский государственный педагогический институт), Ю.В.Юзифович (учащийся 8-го класса, г.Куйбышев). \/fn/e 1.8.1. П о д р о б н а я к а р т а п а м я т и Самый простой способ заново сложить дорожную карту - это сложить ее по-другому. Из дорожных правил Джоунса Каждый, кому приходится работать с большим объемом информации, неизбеж- но сталкивается с проблемой нехватки памяти. Обычно считается, что объем доступной для пользователя памяти на MSX-компьютерах (RAM) составляет все- го 32 Кбайта. Однако оказывается, что действительный объем RAM гораздо больше: 64 Кбайта на компьютерах серии MSX-1 и 134 Кбайта на компьютерах серии MSX-2 ! Вся память хранится в особых устройствах, называемых с л о т а м и ("slot"-"позиция","поле","участок"). На схеме изображена слотовая к а р - т а памяти компьютера серии MSX-1 (ROM локальной сети располагается в слоте 3-1 по адресам 4000h÷53FFh): ┌──────┬───────┬───────┬───────┬───────────────────────────────────────┐ │ │ │ │ │ С л о т 3 │ │Адреса│ Слот 0│ Слот 1│ Слот 2├─────────┬─────────┬─────────┬─────────┤ │ │ │ │ │ Слот 3-0│ Слот 3-1│ Слот 3-2│ Слот 3-3│ ├──────┼───────┼───────┼───────┼─────────┼─────────┼─────────┼─────────┤ │ 0000h│ ROM │ │ │ │ │ │ │ │ │ BASIC │ │ │ │ │ RAM │ │ │ 3FFFh│ (16 │ │ │ │ │ │ │ │ │Кбайтов) │ │ │ │ │ │ ├──────┼───────┼───────┼───────┼─────────┼─────────┼─────────┼─────────┤ │ 4000h│ ROM │ ROM │ ROM │ │ ROM │ │ │ │ │ BASIC │ диско-│ диско-│ │локальной│ │ │ │ │ (16 │ вода A│ вода B│ │ сети │ RAM │ │ │ │Кбайтов) (16 │ (16 │ │ (5 │ │ │ │ 7FFFh│ │Кбайтов)Кбайтов) │ Кбайтов)│ │ │ ├──────┼───────┼───────┼───────┼─────────┼─────────┼─────────┼─────────┤ │ 8000h│ │ ROM │ ROM │ │ │ │ │ │ │ │дополн.│дополн.│ │ │ RAM │ │ │ BFFFh│ │дисков.│дисков.│ │ │ │ │ ├──────┼───────┼───────┼───────┼─────────┼─────────┼─────────┼─────────┤ │ C000h│ │ │ │ │ │ RAM │ │ │ │ │ │ │ │ │(систем- │ │ │ │ │ │ │ │ │ ная об- │ │ │ FFFFh│ │ │ │ │ │ ласть) │ │ └──────┴───────┴───────┴───────┴─────────┴─────────┴─────────┴─────────┘ Итак, в MSX-компьютерах имеется ч е т ы р е слота. В свою очередь,к каждому слоту можно подключить расширитель, который содержит до ч е т ы- р е х новых (в т о р и ч н ы х) слотов. Обозначение "слот 3-1" подразуме- вает, что мы рассматриваем "подключение" к первичному слоту с номером 3 вторичного слота с номером 1. Каждый слот имеет свою м е т к у ( у к а з а т е л ь). Указатель сло- та - это двоичное число, биты которого имеют следующий смысл: ┌───┬───┬───┬───┬───┬───┬───┬───┐ │ ∗ │ 0 │ 0 │ 0 │ ∗ │ ∗ │ ∗ │ ∗ │ └─▲─┴───┴───┴───┴───▲───┴───▲───┘ │ │ └─ Номер первичного слота (2 бита) │ └───────── Номер вторичного слота (2 бита) ├── 0, если вторичный слот отсутствует или его номер равен нулю; └── 1 - можно использовать в любом случае. Например, для слота 3-2 указатель будет таким: &b 1 0 0 0 1 0 1 1 ▲ ─▲─ ─▲─ │ │ │ не 0 2 3 Напомним Вам, что для вызова подпрограммы, написанной в машинных кодах и расположенной в некотором слоте, применяется команда ассемблера: ┌─────────────────────────────────────────────────┐ │ RST 30h [Указатель слота/Адрес подпрограммы] │ └─────────────────────────────────────────────────┘ На языке MSX-BASIC эту команду можно "моделировать" следующим способом: 10 CLEAR 200,&HF300:DEFUSR=&HF300 20 INPUT"Номер первичного слота";N1 30 INPUT"Номер вторичного слота";N2 40 POKE &HF300,&HF7 ' F7 - код команды RST 30h 50 POKE &HF301,&H80+N2*4+N1 ' Указатель слота 60 INPUT"Адрес ячейки";AD% 70 POKE &HF302,PEEK(VARPTR(AD%)):POKE &HF303,PEEK(VARPTR(AD%)+1) 80 POKE &HF304,&HC9: A=USR(A) 'Код команды RET и запуск программы Покажем расположение памяти в слотах для компьютеров серии MSX-2: α) у ч и т е л ь с к и й компьютер Слот 0 Слот 1 Слот 2 Слот 3-0 Слот 3-1 Слот 3-2 Слот 3-3 0000h┌───────┐┌────────┐┌────────┐┌───────┐┌────────┐┌───────┐ │ ROM ││ ││ ││ ROM ││ ROM ││ │ 3800h│(16 Кб)││ ││ ││(16 Кб)││(16 Кб) ││ RAM │┌────────┐ │ BIOS ││ ││ ││ ││ ││(16 Кб)││ RAM │ │ BASIC ││ ││ ││PAINTER││ BASIC ││ ││ (2 Кб) │ 4000h├───────┤├────────┤├────────┤├───────┤├────────┤├───────┤├────────┤ │ ROM ││ ││ ││ ││ ROM ││ ││ ROM │ │(16 Кб)││ ROM ││ ROM ││ ROM ││(16 Кб) ││ ││ (14 Кб)│ │ ││( 16 Кб)││( 16 Кб)││(16 Кб)││ ││ RAM ││Лок.сеть│ 7800h│ ││ ││ ││ ││Дисковод││(16 Кб)│├────────┤ │ ││ Дополн.││ Дополн.││PAINTER││(BASIC, ││ ││ RAM │ │ ││дисковод││дисковод││ ││MSX-DOS)││ ││ (2 Кб) │ │ ││ ││ ││ ││ ││ ││Лок.сеть│ 8000h├───────┤├────────┤┼────────┤├───────┤├────────┤├───────┤├────────┤ │ ││ ROM ││ ROM ││ ROM ││ ││ ││ ROM │ │ ││( 16 Кб)││( 16 Кб)││(16 Кб)││ ││ ││ (14 Кб)│ │ ││ ││ ││ ││ ││ RAM ││Лок.сеть│ B800h│ ││ Дополн.││ Дополн.││PAINTER││ ││(16 Кб)│├────────┤ │ ││дисковод││дисковод││ ││ ││ ││ RAM │ │ ││ ││ ││ ││ ││ ││ (2 Кб) │ C000h├───────┤├────────┤├────────┤├───────┤├────────┤├───────┤├────────┤ │ ││ ││ ││ ROM ││ ││ RAM ││ │ │ ││ ││ ││(16 Кб)││ ││(16 Кб)││ │ │ ││ ││ ││PAINTER││ ││ System││ │ │ ││ ││ ││ ││ ││ area ││ │ FFFFh└───────┘└────────┘└────────┘└───────┘└────────┘├───────┤└────────┘ ┌────────────────────────────────────────────┐ │ RAM │ │ Записав в соответствующий порт номер пере- │ │(16 Кб)│ │ ключаемой страницы можно установить эту │ ├───────┤ │ страницу для д о с т у п а , например: │ │ RAM │ │ &hFB ──────▶ порт с адресом &hFC │ │(16 Кб)│ │ &hFA ──────▶ порт с адресом &hFD │ ├───────┤ │ &hF9 ──────▶ порт с адресом &hFE │ │ RAM │ │ &hF8 ──────▶ порт с адресом &hFF │ │(16 Кб)│ │ В отключаемых страницах данные сохраняются!│ ├───────┤ └────────────────────────────────────────────┘ │ RAM │ Л о г и ч е с к и е с т р а н и ц ы │(16 Кб)│ ┌───────────────────────────────────┐ └───────┘ 3 2 1 0 ◀── Номера логических страниц слота 3-2 &hFF &hFE &hFD &hFC ◀── Адрес порта, отвечающего за логическую страницу слота 3-2 ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ │ &hC000-│ &h8000-│ &h4000-│ &h0000-│ │ │ │ │ │ &hFFFF │ &hBFFF │ &h7FFF │ &h3FFF │ │ │ │ │ ├ ─ ─ ─ ─│─ ─ ─ ─ │─ ─ ─ ─ │─ ─ ─ ─ │ ─ ─ ─ ─│─ ─ ─ ─ │ ─ ─ ─ ─│─ ─ ─ ─ ┤ │ Н о м е р а с т р а н и ц RAM с л о т а 3-2 │ │ &hF8 │ &hF9 │ &hFA │ &hFB │ &hFC │ &hFD │ &hFE │ &hFF │ └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ 0 1 2 3 4 5 6 7 └───────────────────────────────────────────────────────────────────────┘ Ф и з и ч е с к и е с т р а н и ц ы с л о т а 3-2 и их н о м е р а β) у ч е н и ч е с к и й компьютер Слот 0 Слот 1 Слот 2 Слот 3-0 Слот 3-1 Слот 3-2 Слот 3-3 0000h┌───────┐┌────────┐┌────────┐┌───────┐┌────────┐┌───────┐ │ ROM ││ ││ ││ ROM ││ ││ │ 3800h│(16 Кб)││ ││ ││(16 Кб)││ ││ RAM │┌────────┐ │ BIOS ││ ││ ││ ││ ││(16 Кб)││ RAM │ │ BASIC ││ ││ ││ BASIC ││ ││ ││ (2 Кб) │ 4000h├───────┤├────────┤├────────┤├───────┤├────────┤├───────┤├────────┤ │ ROM ││ ││ ││ ││ ││ ││ ROM │ │(16 Кб)││ ROM ││ ROM ││ ROM ││ ROM ││ ││ (14 Кб)│ │ ││( 16 Кб)││( 16 Кб)││(16 Кб)││ (16 Кб)││ RAM ││Лок.сеть│ 7800h│ ││ ││ ││ ││ ││(16 Кб)│├────────┤ │ ││ Дополн.││ Дополн.││Система││Дисковод││ ││ RAM │ │ ││дисковод││дисковод││ CP/M ││ (BASIC,││ ││ (2 Кб) │ │ ││ ││ ││ ││MSX-DOS)││ ││Лок.сеть│ 8000h├───────┤├────────┤┼────────┤├───────┤├────────┤├───────┤├────────┤ │ ││ ROM ││ ROM ││ ROM ││ ││ ││ ROM │ │ ││( 16 Кб)││( 16 Кб)││(16 Кб)││ ││ ││ (14 Кб)│ │ ││ ││ ││ ││ ││ RAM ││Лок.сеть│ B800h│ ││ Дополн.││ Дополн.││Система││ ││(16 Кб)│├────────┤ │ ││дисковод││дисковод││ CP/M ││ ││ ││ RAM │ │ ││ ││ ││ ││ ││ ││ (2 Кб) │ C000h├───────┤├────────┤├────────┤├───────┤├────────┤├───────┤├────────┤ │ ││ ││ ││ ROM ││ ││ RAM ││ │ │ ││ ││ ││(16 Кб)││ ││(16 Кб)││ │ │ ││ ││ ││ ││ ││ System││ │ │ ││ ││ ││Система││ ││ area ││ │ │ ││ ││ ││ CP/M ││ ││ ││ │ FFFFh└───────┘└────────┘└────────┘└───────┘└────────┘├───────┤└────────┘ │ RAM │ │(16 Кб)│ ┌────────────────────────────────────────────┐ ├───────┤ │ Нумерация физических и логических страниц │ │ RAM │ │ слота 3-2, а также адреса соответствующих │ │(16 Кб)│ │ портов в ученическом компьютере аналогич- │ ├───────┤ │ ны учительскому компьютеру. │ │ RAM │ └────────────────────────────────────────────┘ │(16 Кб)│ ├───────┤ │ RAM │ │(16 Кб)│ └───────┘ Таким образом, непосредственным сложением нетрудно получить, что общий объем памяти MSX-компьютеров составляет: ┌───────────────────────┬────────────┬───────────┐ │ К о м п ь ю т е р │ ROM │ RAM │ ├───────────────────────┼────────────┼───────────┤ │ MSX-1 (без дисководов)│ 37 Кбайтов│ 64 Кбайта│ ├───────────────────────┼────────────┼───────────┤ │ MSX-2 (ученический) │ 92 Кбайта │ 134 Кбайта│ ├───────────────────────┼────────────┼───────────┤ │ MSX-2 (учительский) │ 156 Кбайтов│ 134 Кбайта│ └───────────────────────┴────────────┴───────────┘ В слоте 0 располагаются подпрограммы BIOS, используемые как в компьюте- рах серии MSX-1, так и в компьютерах серии MSX-2. Дополнительные подпрог- раммы BIOS ("расширенный BIOS"),которые используются только в компьютерах серии MSX-2, располагаются: для учительского компьютера - в слоте 3-1, для ученического компьютера - в слоте 3-0. 1.8.2. Р а б о т а с о с л о т а м и - Боюсь, что эти подробности утомительны, но вам не разобраться в ситуации, если вы не будете в курсе моих затруднений. А.Конан Дойль. Скандал в Богемии Все адресное пространство MSX-компьютера разобъем на ч е т ы р е т.н. л о г и ч е с к и е страницы (объемом по 16 Kбайтов каждая). Пронумеруем их следующим образом: ┌───────────────────┬─────────┬─────────────┬─────────────┬─────────────┐ │ Адреса │ 0÷3FFFh │ 4000h÷7FFFh │ 8000h÷BFFFh │ C000h÷FFFFh │ ├───────────────────┼─────────┼─────────────┼─────────────┼─────────────┤ │Логическая страница│ 0 │ 1 │ 2 │ 3 │ └───────────────────┴─────────┴─────────────┴─────────────┴─────────────┘ Заметим, что каждый слот также можно разбить на участки объемом по 16 Кбайтов каждый, которые мы будем называть ф и з и ч е с к и м и стра- ницами памяти. Прежде чем начать работу с физической страницей памяти, ее необходимо п о д к л ю ч и т ь к некоторой логической странице адресно- го пространства, для чего выполнить следующие операции: α) указать компьютеру н о м е р подключаемой логической страницы(тем самым мы присвоим физической странице некоторый начальный адрес). Заметим, что при включении компьютера некоторым физическим страницам памяти началь- ный адрес присваивается автоматически; β) указать н о м е р а первичного и вторичного слотов, которым при- надлежит выбранная физическая страница памяти. Номера первичных слотов записываются в порт ввода-вывода с адресом A8h, а номера вторичных слотов - в ячейку FFFFh рабочей области (слот 3-2). Порт ввода-вывода A8h: (номера п е р в и ч н ы х слотов) ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Старший ─▶│ ∗ │ ∗ │ ∗ │ ∗ │ ∗ │ ∗ │ ∗ │ ∗ │◀─ Младший бит └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ бит ─────▲───── ─────▲───── ─────▲───── ─────▲───── │ │ │ └───────┐ Номер слота, из которого Номер слота Номер слота Номер слота процессор берет информа- для логичес- для логичес- для логичес- цию при обращении к ло- кой страницы кой страницы кой страницы гической странице 3 с номером 2 с номером 1 с номером 0 Ячейка памяти FFFFh: (номера в т о р и ч н ы х слотов) ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ Старший ─▶│ ∗ │ ∗ │ ∗ │ ∗ │ ∗ │ ∗ │ ∗ │ ∗ │◀─ Младший бит └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ бит ─────▲───── ─────▲───── ─────▲───── ─────▲───── │ │ │ └───────┐ Номер слота, из которого Номер слота Номер слота Номер слота процессор берет информа- для логичес- для логичес- для логичес- цию при обращении к ло- кой страницы кой страницы кой страницы гической странице 3 с номером 2 с номером 1 с номером 0 Например, если содержимое порта A8h равно &B11001001 , а содержимое ячейки FFFFh равно &B01101100 , то в этом случае: логическая страница 3 рассматривается как участок памяти из слота 3-1, логическая страница 2 рассматривается как участок памяти из слота 0-2, логическая страница 1 рассматривается как участок памяти из слота 2-3, а логическая страница 0 рассматривается как участок памяти из слота 1-0. Теперь ясно, что подпрограмма подключения памяти к адресному пространс- тву выглядит следующим образом: DI ; Запретить прерывания при работе с портами ввода-вывода LD A, Номера первичных слотов OUT (A8h),A LD A, Номера вторичных слотов LD (FFFFh),A EI ; Разрешить системные прерывания RET \/i Внимание! При чтении числа из ячейки FFFFh оно выводится в и н в е р т и р о в а н н о м виде. \/i- П р и м е р 1. 10 POKE &HFFFF, &B01101100 ────────────── 20 PRINT BIN$(PEEK(&HFFFF)) run 10010011 Ok Теперь для того, чтобы узнать, какие вторичные слоты подключены к ад- ресному пространству, необходимо инвертировать полученный результат (заме- нить нули - единицами, а единицы - нулями). ┌─────────────────────────────────────────────────────────────────────┐ │ Отметим, что при включении компьютера в логические страницы 0 и 1 │ │ "помещаются" физические страницы памяти из слота 0, а в логические │ │ страницы 2 и 3 "помещаются" физические страницы памяти из слота 3-2.│ │ Содержимое порта ввода-вывода с адресом A8h при этом становится рав-│ │ ным &B11110000, а истинное содержимое ячейки памяти FFFFh становит-│ │ ся равным &B10100000 (не забудьте про инвертирование!) │ └─────────────────────────────────────────────────────────────────────┘ Если до выключения компьютера на странице 1 слота 3-2 создать идентифи- катор ROM и разместить на данной странице Вашу подпрограмму, то она будет "стартовать" при включении компьютера, т.к.первое обращение идет к этой странице. П р и м е р 2. А теперь небольшой фрагмент на макроассемблере... ───────────── DEFB 0FEH ; Программа запускается с адреса &H9000 DEFW START,KONEC+END-NACH,START ORG 09000H CLS EQU 00C3H ; Очистка экрана KEYOFF EQU CLS+09H ; Отключение функциональных клавиш FORCLR EQU 0F3E9H ; Адрес цвета изображения COLOR EQU 0062H ; Установка цвета CONSOL EQU 00A2H ; Вывод символа на консоль. START: LD HL,PROM ; Адрес старта реставрируемой подпрограммы PUSH HL ; Сохранили в стеке и при встрече RET DI ; переходим на этот адрес. LD A,0A8H ; Организация страниц RАМ и ROM: LD (0FFFFH),A ; 0 страница (0000H-4000H)-BASIC (BIOS) LD A,0FCH ; 1 страница (4000H-8000H)-СЛОТB 3-2 OUT (0A8H),A ; 2 страница (8000H-C000H)-СЛОТB 3-2 LD HL,KONEC+1 ; 3 страница (C000H-FFFFH)-СЛОТB 3-2 LD DE,NACH ; Пересылка подпрограммы на начало LD BC,END-NACH; первой страницы слота 3-2 LDIR ; KONEC: RET ; ; ORG 04000H ; ; NACH: DEFM "AB" ; Идентификатор псевдо-ROM DEFW PROM ; Адрес старта подпрограммы DEFS 12 ; Зарезервировано стандартом PROM: XOR A ; CALL CLS ; CALL KEYOFF ; Установка цвета,CLS и KEYOFF LD HL,FORCLR ; CLS:KEYOFF:COLOR 15,9,9 LD (HL),0FH ; INC HL ; LD (HL),09H ; INC HL ; LD (HL),09H ; CALL COLOR ; CALL INLINE ; Печать строки на мониторе ; ... Здесь может размещаться Ваша программа. ; ... Она будет работать даже при отключении LABEL: JP LABEL ; компьютера с помощью кнопки "RESET" INLINE: LD HL,STROKA ; Подпрограмма вывода символов на консоль LD A,(HL) ; LD C,A ; OR A ; RET Z ; LD A,C ; PUSH HL ; CALL CONSOL ; POP HL ; INC HL ; JR INLINE+3 ; STROKA: DEFM "ВЫКЛЮЧИ КОМПЬЮТЕР НА МИНУТУ." NOP END: NOP \/i В н и м а н и е ! 1. Логическая страница с номером 3 ни при каких условиях не должна под- вергаться изменениям, так как в ней расположены подпрограммы-ловушки и об- ласть системных переменных. Нарушение этого условия приведет к отказу сис- темы от дальнейшего выполнения программы и ее сбросу. 2. Если для физической страницы Вы используете начальный адрес 8000h, то прежде чем подключать ее к адресному пространству, позаботьтесь о пере- мещении программы на MSX-BASIC и стека в "безопасное" место, каковым явля- ется логическая страница с номером 3. Для этого выполните программу: 10 POKE &HF676,1:POKE &HF677,&HC0:POKE &HC000,0:NEW \/i- Существует еще один способ подключения физической страницы памяти к ад- ресному пространству.Для этого воспользуйтесь подпрограммой BIOS с именем ENASLT , расположенной в слоте 0 по адресу 0024h. Обращение к ней выглядит следующим образом: LD A, Указатель слота LD HL,Начальный адрес (0000h,4000h или 8000h) CALL ENASLT RET В качестве примера приведем программу подключения физической страницы из некоторого слота к логической странице 2 адресного пространства. П р и м е р 2. ────────────── 10 DATA 3E,00 :'LD A, Указатель слота 20 DATA 21,00,80 :'LD HL,8000h ;Начальный адрес 30 DATA CD,24,00 :'CALL ENASLT 40 DATA C9 :'RET 50 CLEAR 200,&HF300:DEFUSR=&HF300 60 FOR T=0 TO 8:READ Z$:POKE &HF300+T,VAL("&h"+Z$):NEXT 70 INPUT"Номер первичного слота";N1 80 INPUT"Номер вторичного слота";N2 90 POKE &HF301,&H80+N2*4+N1 '◀── Указатель слота 120 A=USR(A) Кстати, подобного эффекта можно достичь путем воздействия на ячейку па- мяти FFFFh в слоте 3-2: POKE &HFFFF,&H80 - активизирован слот 3-0 (для учительского компьютера); POKE &HFFFF,&HA0 - активизирован слот 3-2 (по умолчанию); POKE &HFFFF,&HB0 - активизирован слот 3-3. ┌───────────────────────────────────────────────────────────────┐ │ Итак, прежде чем работать с памятью, ее необходимо явно │ │ распределить в адресном пространстве компьютера ! │ └───────────────────────────────────────────────────────────────┘ Существует, однако, другой способ работы со слотами,заключающийся в ис- пользовании подпрограмм BIOS, расположенных в слоте 0. В этом случае проб- лема распределения памяти снимается с пользователя и целиком возлагается на систему. Опишем работу с некоторыми из этих подпрограмм. З а п и с ь числа в RAM любого слота осуществляется путем обращения к подпрограмме с именем WRSLT , расположенной по адресу 0014h. П р и м е р 3. ────────────── 10 DATA 3E,00 :'F300 LD A, Указатель слота 20 DATA 21,00,00 :'F302 LD HL,Адрес ячейки 30 DATA 1E,00 :'F305 LD E, Число 40 DATA CD,14,00 :'F307 CALL WRSLT 50 DATA C9 :'F30A RET 60 CLEAR 200,&HF300:DEFUSR=&HF300 70 FOR T=0 TO 10:READ Z$:POKE &HF300+T,VAL("&h"+Z$):NEXT 80 INPUT"Номер первичного слота";N1 90 INPUT"Номер вторичного слота";N2 100 POKE &HF301,&H80+N2*4+N1 '◀── Указатель слота 110 INPUT"Адрес ячейки";AD% 120 POKE &HF303,PEEK(VARPTR(AD%)):POKE &HF304,PEEK(VARPTR(AD%)+1) 130 INPUT"Какое число запишете";Q%:POKE &HF306,Q%:A=USR(A) Ч т е н и е числа из любой физической страницы, имеющей некоторый на- чальный адрес, осуществляется путем обращения к подпрограмме с именем RDSLT , расположенной по адресу 000Ch. П р и м е р 4. ────────────── 10 DATA 3E,00 :'F300 LD A,Указатель слота 20 DATA 21,00,00 :'F302 LD HL,Адрес читаемой ячейки 30 DATA CD,0C,00 :'F305 CALL RDSLT 40 DATA 32,10,F3 :'F308 ;Запись результата в доступную ячейку ;памяти (в нашем случае &HF310) 50 DATA C9 :'F30B RET 60 CLEAR 200,&HF300:DEFUSR=&HF300 70 FOR T=0 TO 11:READ Z$:POKE &HF300+T,VAL("&h"+Z$):NEXT 80 INPUT"Номер первичного слота";N1 90 INPUT"Номер вторичного слота";N2 100 POKE &HF301,&H80+N2*4+N1 '◀── Указатель слота 110 INPUT"Адрес ячейки";AD% 120 POKE &HF303,PEEK(VARPTR(AD%)):POKE &HF304,PEEK(VARPTR(AD%)+1) 130 A=USR(A):PRINT"Вот Ваше число:";PEEK(&HF310) Посмотрев на схему расположения памяти в слотах, Вы можете заметить, что некоторые физические страницы памяти слота 3-2 в компьютерах серии MSX-2 не имеют ф и к с и р о в а н н ы х адресов. Пронумеруем все физи- ческие страницы слота 3-2 от 0 до 7 сверху вниз (в порядке следования на рисунке). Любую из этих физических страниц можно подключить к любой логической странице адресного пространства. \/i При этом не рекомендуется изменять содержимое логической страницы с но- мером 3, так как это приводит к перезагрузке системы! \/i- Подключить физические страницы слота 3-2 можно путем воздействия на порты ввода-вывода с адресами 252, 253, 254 и 255. При этом, если Вы ис- пользуете порт с адресом 252+N, то процессор подключит распределяемую фи- зическую страницу к логической странице с номером N. ┌──────────────────────────────────────────────────────────────────────┐ │ Для подключения физической страницы к логической выполните команду │ │ OUT 252+N1,&hF8+N2 , │ │ где: N1 - номер логической страницы, │ │ N2 - номер физической страницы, │ │ &hF8 - число, полученное при вычитании 256 - M , │ │ M - число физических страниц в слоте 3-2 . │ └──────────────────────────────────────────────────────────────────────┘ Таким образом Вы получите доступ к л ю б о й ячейке памяти в слоте 3-2 (внимательно изучите т е к с т на схеме расположения памяти в слотах)! В заключение отметим, что для доступа к физическим страницам памяти, подключенным к адресному пространству,применяются оператор POKE и функция PEEK. Кроме того, для работы с памятью компьютера серии MSX-2, подключен- ного к локальной сети, применяются операторы CALL POKE и CALL PEEK. Если адрес принадлежит отрезку [&h4000,&h7FFF], то операторы CALL POKE и CALL PEEK "работают" с памятью, которая находится в слоте 3-3 и отвеча- ет за работу локальной сети. Во всех остальных случаях действие оператора CALL POKE совпадает с действием оператора POKE, а действие оператора CALL PEEK совпадает с действием функции PEEK.