Инструменты пользователя

Инструменты сайта


msx:basic_dialogue_programming_language:108

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
msx:basic_dialogue_programming_language:108 [2023-02-14 22:44]
GreyWolf [1.8.1 Подробная карта памяти]
msx:basic_dialogue_programming_language:108 [2023-02-19 16:28] (текущий)
GreyWolf
Строка 1: Строка 1:
 [<>] [<>]
 ~~TOC wide~~ ~~TOC wide~~
- 
-[[msx:​basic_dialogue_programming_language:​108_old|]] 
  
 FIXME FIXME
Строка 11: Строка 9:
 <WRAP group 99%> <WRAP group 99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify+<WRAP half column><​WRAP ​right
-\\ Удачное аппаратное и программное решение определили+Удачное аппаратное и программное решение определили
 \\ популярность MSX–компьютеров в нашей стране. Однако \\ популярность MSX–компьютеров в нашей стране. Однако
 \\ широкие возможности MSX практически не описаны в \\ широкие возможности MSX практически не описаны в
Строка 22: Строка 20:
  
 В подготовке этого материала принимали непосредственное участие:​ В подготовке этого материала принимали непосредственное участие:​
-\\ В.С.Лашук ​   (Владимирский государственный педагогический институт),​+\\ В.С.Лашук (Владимирский государственный педагогический институт),​
 \\ Ю.В.Юзифович (учащийся 8–го класса,​ г.Куйбышев). \\ Ю.В.Юзифович (учащийся 8–го класса,​ г.Куйбышев).
  
Строка 31: Строка 29:
 <WRAP group 99%> <WRAP group 99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Самый простой способ заново сложить дорожную Самый простой способ заново сложить дорожную
-\\ карту — это сложить ее по-другому.+\\ карту — это сложить ее подругому.
 <WRAP rightalign>​ <WRAP rightalign>​
 —//Из дорожных правил Джоунса//​ —//Из дорожных правил Джоунса//​
Строка 39: Строка 37:
 </​WRAP></​WRAP>​ </​WRAP></​WRAP>​
  
-Каждый,​ кому приходится работать с большим объемом информации,​ неизбежно сталкивается с проблемой нехватки памяти. ​ Обычно считается,​ что объем доступной для пользователя памяти на MSX-компьютерах (RAM) составляет всего 32 Кбайта. Однако оказывается,​ что действительный ​ объем RAM гораздо больше:​ 64 Кбайта на компьютерах серии MSX-1 и 134 Кбайта на компьютерах +Каждый,​ кому приходится работать с большим объемом информации,​ неизбежно сталкивается с проблемой нехватки памяти. Обычно считается,​ что объем доступной для пользователя памяти на MSXкомпьютерах (RAM) составляет всего 32 Кбайта. Однако оказывается,​ что действительный объем RAM гораздо больше:​ 64 Кбайта на компьютерах серии MSX-1 и 134 Кбайта на компьютерах 
-серии MSX-2 !  +серии MSX-2 !
  
-Вся память ​ хранится ​ в  особых устройствах,​ называемых //​слотами//​ ("​slot"​—"​позиция","​поле","​участок"​). На схеме изображена слотовая //​карта//​ памяти компьютера серии MSX-1  (ROM локальной ​ сети ​ располагается в слоте 3-1 по адресам 4000h÷53FFh):​+Вся память хранится в особых устройствах,​ называемых //​слотами//​ ("​slot"​—"​позиция",​ "​поле",​ "​участок"​). На схеме изображена слотовая //​карта//​ памяти компьютера серии MSX-1 (ROM локальной сети располагается в слоте 3-1 по адресам 4000h÷53FFh):​
 <​code>​ <​code>​
 ┌──────┬───────┬───────┬───────┬───────────────────────────────────────┐ ┌──────┬───────┬───────┬───────┬───────────────────────────────────────┐
Строка 70: Строка 68:
 └──────┴───────┴───────┴───────┴─────────┴─────────┴─────────┴─────────┘ └──────┴───────┴───────┴───────┴─────────┴─────────┴─────────┴─────────┘
 </​code>​ </​code>​
-Итак, в MSX–компьютерах имеется //​четыре// ​ слота. ​ В свою очередь,​ к каждому слоту можно подключить расширитель,​ который ​ содержит до //​четырех//​ новых (//​вторичных//​) слотов. Обозначение "​слот 3-1" подразумевает,​ что мы рассматриваем "​подключение"​ к первичному слоту ​ с номером 3 вторичного слота с номером 1.+Итак, в MSX–компьютерах имеется //​четыре//​ слота. В свою очередь,​ к каждому слоту можно подключить расширитель,​ который содержит до //​четырех//​ новых (//​вторичных//​) слотов. Обозначение "​слот 3-1" подразумевает,​ что мы рассматриваем "​подключение"​ к первичному слоту с номером 3 вторичного слота с номером 1.
  
 Каждый слот имеет свою //​метку (указатель)//​. Указатель слота — это двоичное число, биты которого имеют следующий смысл: Каждый слот имеет свою //​метку (указатель)//​. Указатель слота — это двоичное число, биты которого имеют следующий смысл:
Строка 93: Строка 91:
 RST 30h [Указатель слота/​Адрес подпрограммы] RST 30h [Указатель слота/​Адрес подпрограммы]
 </​code>​ </​code>​
-На языке ​MSX-BASIC ​эту команду можно "​моделировать"​ следующим способом:​+ 
 +На языке ​[[msx:​basic:​|]] ​эту команду можно "​моделировать"​ следующим способом:​ 
 +{{anchor:​e1081-01}} \\ {{.examples:​1081-01.bas|}} \\ [[+tab|wmsxbpge>​1081-01.bas]]
 <​code>​ <​code>​
 10 CLEAR 200,&​HF300:​DEFUSR=&​HF300 10 CLEAR 200,&​HF300:​DEFUSR=&​HF300
Строка 106: Строка 106:
  
 Покажем расположение памяти в слотах для компьютеров серии MSX-2: Покажем расположение памяти в слотах для компьютеров серии MSX-2:
-  * α) //​учительский//​ компьютер <​code>​+  * <​WRAP>​α) //​учительский//​ компьютер <​code>​
       Слот 0    Слот 1    Слот 2  Слот 3-0  Слот 3-1 Слот 3-2  Слот 3-3       Слот 0    Слот 1    Слот 2  Слот 3-0  Слот 3-1 Слот 3-2  Слот 3-3
 0000h┌───────┐┌────────┐┌────────┐┌───────┐┌────────┐┌───────┐ 0000h┌───────┐┌────────┐┌────────┐┌───────┐┌────────┐┌───────┐
Строка 134: Строка 134:
      ​│ ​      ​││ ​       ││ ​       ││ ​      ​││ ​       ││ area  ││ ​       │      ​│ ​      ​││ ​       ││ ​       ││ ​      ​││ ​       ││ area  ││ ​       │
 FFFFh└───────┘└────────┘└────────┘└───────┘└────────┘├───────┤└────────┘ FFFFh└───────┘└────────┘└────────┘└───────┘└────────┘├───────┤└────────┘
- ────────────────────────────────────────────┐ ​     │  RAM  │ +                                                     ​│ ​ RAM  │ 
- │ Записав в соответствующий порт номер пере- │      │(16 Кб)│ +                                                     ​│(16 Кб)│ 
- ​│ ​ключаемой страницы ​ можно ​ установить эту ​ ​│ ​     ├───────┤ +                                                     ├───────┤ 
- ​│ ​страницу для ​ д о с т у п а , например: ​   ​│ ​     │  RAM  │ +                                                     ​│ ​ RAM  │ 
- │     &hFB ──────▶ порт с адресом &​hFC ​      │      │(16 Кб)│ +                                                     ​│(16 Кб)│ 
- │     &hFA ──────▶ порт с адресом &​hFD ​      │      ├───────┤ +                                                     ├───────┤ 
- │     &hF9 ──────▶ порт с адресом &​hFE ​      │      │  RAM  │ +                                                     ​│ ​ RAM  │ 
- │     &hF8 ──────▶ порт с адресом &​hFF ​      │      │(16 Кб)│ +                                                     ​│(16 Кб)│ 
- │ В отключаемых страницах данные сохраняются!│      ├───────┤ +                                                     ├───────┤ 
- └────────────────────────────────────────────┘ ​     │  RAM  │ +                                                     ​│ ​ RAM  │ 
-Л о г и ч е с к и е   с т р а н и ц ы                ​│(16 Кб)│ +                                                     ​│(16 Кб)│ 
-┌───────────────────────────────────┐ ​               ​└───────┘+                                                     └───────┘ 
 +</​code>​ 
 + 
 +Записав в соответствующий порт номер переключаемой страницы ​ можно ​ установить эту страницу для ​//доступа//, например:​ 
 +|&hFB|──────▶|порт с адресом &hFC| 
 +|&hFA|──────▶|порт с адресом &hFD| 
 +|&hF9|──────▶|порт с адресом &hFE| 
 +|&hF8|──────▶|порт с адресом &hFF| 
 +В отключаемых страницах данные сохраняются! 
 + 
 +<​code>​ 
 +Л о г и ч е с к и е   с т р а н и ц ы 
 +┌───────────────────────────────────┐
     3        2        1        0  ◀── Номера логических страниц слота 3-2     3        2        1        0  ◀── Номера логических страниц слота 3-2
    &​hFF ​    &​hFE ​    &​hFD ​    &​hFC ◀── Адрес ​ порта, отвечающего ​ за    &​hFF ​    &​hFE ​    &​hFD ​    &​hFC ◀── Адрес ​ порта, отвечающего ​ за
Строка 160: Строка 172:
 Ф и з и ч е с к и е  с т р а н и ц ы   с л о т а  3-2  и  их  н о м е р а Ф и з и ч е с к и е  с т р а н и ц ы   с л о т а  3-2  и  их  н о м е р а
 </​code>​ </​code>​
-  ​* β)  //​ученический//​ компьютер <​code>​+ 
 +</​WRAP>​ 
 +  ​<​WRAP> ​β)  //​ученический//​ компьютер <​code>​
       Слот 0    Слот 1    Слот 2  Слот 3-0  Слот 3-1 Слот 3-2  Слот 3-3       Слот 0    Слот 1    Слот 2  Слот 3-0  Слот 3-1 Слот 3-2  Слот 3-3
 0000h┌───────┐┌────────┐┌────────┐┌───────┐┌────────┐┌───────┐ 0000h┌───────┐┌────────┐┌────────┐┌───────┐┌────────┐┌───────┐
Строка 191: Строка 205:
                                                      ​│ ​ RAM  │                                                      ​│ ​ RAM  │
                                                      ​│(16 Кб)│                                                      ​│(16 Кб)│
-   ​┌────────────────────────────────────────────┐ ​   ​├───────┤ +                                                     ├───────┤ 
-   │ Нумерация физических и логических страниц ​ │    ​│  RAM  │ +                                                     ​│  RAM  │ 
-   │ слота 3-2, а также адреса соответствующих ​ │    ​│(16 Кб)│ +                                                     ​│(16 Кб)│ 
-   │ портов в ученическом компьютере ​ аналогич- │    ​├───────┤ +                                                     ​├───────┤ 
-   │ ны учительскому компьютеру. ​               │    ​│  RAM  │ +                                                     ​│  RAM  │ 
-   └────────────────────────────────────────────┘ ​   ​│(16 Кб)│+                                                     ​│(16 Кб)│
                                                      ​├───────┤                                                      ​├───────┤
                                                      ​│ ​ RAM  │                                                      ​│ ​ RAM  │
Строка 202: Строка 216:
                                                      ​└───────┘                                                      ​└───────┘
 </​code>​ </​code>​
 +<WRAP round box>
 +Нумерация физических и логических страниц слота 3-2, а также адреса соответствующих портов в ученическом компьютере аналогичны учительскому компьютеру.
 +</​WRAP>​
 +</​WRAP>​
 +
 +
 Таким образом,​ непосредственным сложением нетрудно получить,​ что общий объем памяти MSX–компьютеров составляет:​ Таким образом,​ непосредственным сложением нетрудно получить,​ что общий объем памяти MSX–компьютеров составляет:​
 ^  //​Компьютер// ​ ^  ROM  ^  RAM  ^ ^  //​Компьютер// ​ ^  ROM  ^  RAM  ^
Строка 208: Строка 228:
 |MSX-2 (учительский)| ​ 156 Кбайтов ​ |  134 Кбайта ​ | |MSX-2 (учительский)| ​ 156 Кбайтов ​ |  134 Кбайта ​ |
  
-В слоте 0 располагаются подпрограммы BIOS, используемые как в компьютерах серии MSX-1, так и в компьютерах серии MSX-2. Дополнительные ​ подпрограммы BIOS ("​расширенный BIOS"​),​которые используются только в компьютерах серии MSX-2, располагаются:​+В слоте 0 располагаются подпрограммы BIOS, используемые как в компьютерах серии MSX-1, так и в компьютерах серии MSX-2. Дополнительные подпрограммы BIOS ("​расширенный BIOS"​),​которые используются только в компьютерах серии MSX-2, располагаются:​
   * для учительского компьютера - в слоте 3-1,   * для учительского компьютера - в слоте 3-1,
   * для ученического компьютера - в слоте 3-0.   * для ученического компьютера - в слоте 3-0.
Строка 215: Строка 235:
 {{anchor:​n1082}} {{anchor:​n1082}}
 ===== 1.8.2 Работа со слотами ===== ===== 1.8.2 Работа со слотами =====
-<​code>​ 
-                                 - Боюсь, что эти подробности утомительны,​ 
-                                   но вам не разобраться в ситуации,​ если 
-                                   вы не будете в курсе моих затруднений. 
-                                         ​А.Конан Дойль. Скандал в Богемии 
  
-   ​Все адресное пространство MSX-компьютера разобъем на  ​ч е т ы р е  т.н. +<WRAP group 99%> 
-л о г и ч е с к и е  страницы (объемом ​по 16 Kбайтов каждая).  +<WRAP half column> \\ </​WRAP>​ 
-   Пронумеруем их следующим ​образом:​ +<WRAP half column><​WRAP right> 
-┌───────────────────┬─────────┬─────────────┬─────────────┬─────────────┐ +— Боюсьчто ​эти подробности ​утомительны, 
-│      Адреса ​      │ 0÷3FFFh │ 4000h÷7FFFh │ 8000h÷BFFFh │ C000h÷FFFFh │ +\\ но вам не разобраться в ситуацииесли 
-├───────────────────┼─────────┼─────────────┼─────────────┼─────────────┤ +\\ вы не будете ​в курсе ​моих затруднений
-│Логическая ​страница│ ​   0    │      1      │      2      │      3      │ +<WRAP rightalign>​ 
-└───────────────────┴─────────┴─────────────┴─────────────┴─────────────┘ +—//А.Конан Дойль. Скандал в Богемии// 
-   ​Заметим,​ что каждый слот также  ​можно ​ разбить ​ на участки ​ объемом по +</​WRAP></​WRAP>​ 
-16 Кбайтов каждыйкоторые мы будем называть  ф и з и ч е с к и м и  стра- +</​WRAP></​WRAP>​
-ницами памяти. Прежде чем начать ​работу с физической страницей памяти,​ ее +
-необходимо ​ п о д к л ю ч и т ь   к некоторой логической странице адресно- +
-го пространства,​ для чего ​выполнить ​следующие операции:​ +
-   α) указать компьютеру  н о м е р  подключаемой логической страницы(тем +
-самым мы присвоим физической странице некоторый начальный адрес). Заметим, +
-что при ​включении компьютера некоторым физическим страницам памяти началь- +
-ный адрес присваивается автоматически;​ +
-   β) указать  н о м е р а  первичного и вторичного слотов, ​ которым ​ при- +
-надлежит выбранная физическая страница памяти+
-   Номера первичных слотов записываются в порт ввода-вывода с адресом A8h, +
-а номера вторичных слотов - в ячейку FFFFh рабочей области (слот 3-2).+
  
-        ​Порт ввода-вывода A8h: (номера ​ п е р в и ч н ы х  слотов)+Все адресное пространство MSX—компьютера разобьем на //​четыре//​ т.н. //​логические//​ страницы (объемом по 16 Kбайтов каждая). 
 + 
 +Пронумеруем их следующим образом:​ 
 +^  Адреса ​ |  0÷3FFFh ​ |  4000h÷7FFFh ​ |  8000h÷BFFFh ​ |  C000h÷FFFFh ​ | 
 +^  Логическая страница ​ |  0  |  1  |  2  |  3  | 
 + 
 +Заметим,​ что каждый слот также можно разбить на участки объемом по 16 Кбайтов каждый,​ которые мы будем называть //​физическими//​ страницами памяти. Прежде чем начать работу с физической страницей памяти,​ ее необходимо //​подключить//​ к некоторой логической странице адресного пространства,​ для чего выполнить следующие операции:​ 
 +  * α) указать компьютеру //​номер//​ подключаемой логической страницы(тем самым мы присвоим физической странице некоторый начальный адрес). Заметим,​ что при включении компьютера некоторым физическим страницам памяти начальный адрес присваивается автоматически;​ 
 +  * β) указать //​номера//​ первичного и вторичного слотов,​ которым принадлежит выбранная физическая страница памяти. 
 + 
 +Номера первичных слотов записываются в порт ввода–вывода с адресом A8h, а номера вторичных слотов — в ячейку FFFFh рабочей области (слот 3-2). 
 + 
 +Порт ввода–вывода A8h: (номера ​//первичных// слотов) 
 +<​code>​
             ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐             ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
   Старший ─▶│ ​ ∗  │  ∗  │  ∗  │  ∗  │  ∗  │  ∗  │  ∗  │  ∗  │◀─ Младший   Старший ─▶│ ​ ∗  │  ∗  │  ∗  │  ∗  │  ∗  │  ∗  │  ∗  │  ∗  │◀─ Младший
Строка 249: Строка 266:
              ​─────▲───── ─────▲───── ─────▲───── ─────▲─────              ​─────▲───── ─────▲───── ─────▲───── ─────▲─────
                   │           ​│ ​          ​│ ​          ​└───────┐                   │           ​│ ​          ​│ ​          ​└───────┐
-Номер слота, из которого ​  ​Номер слота ​   Номер слота ​   Номер слота +  ​Номер слота, из которого ​  ​Номер слота ​   Номер слота ​   Номер слота 
-процессор берет информа- ​  ​для логичес- ​  ​для логичес- ​  ​для логичес- +  процессор берет информа- ​  ​для логичес- ​  ​для логичес- ​  ​для логичес- 
-цию при обращении ​ к ло-   ​кой страницы ​  ​кой страницы ​  ​кой страницы +  цию при обращении ​ к ло-   ​кой страницы ​  ​кой страницы ​  ​кой страницы 
-гической странице 3        с номером 2    с номером 1    с номером 0+  гической странице 3        с номером 2    с номером 1    с номером 0 
 +</​code>​
  
-       Ячейка памяти FFFFh: ​  ​(номера ​ в т о р и ч н ы х  слотов)+Ячейка памяти FFFFh: (номера ​//вторичных// слотов) 
 +<​code>​
             ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐             ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
   Старший ─▶│ ​ ∗  │  ∗  │  ∗  │  ∗  │  ∗  │  ∗  │  ∗  │  ∗  │◀─ Младший   Старший ─▶│ ​ ∗  │  ∗  │  ∗  │  ∗  │  ∗  │  ∗  │  ∗  │  ∗  │◀─ Младший
Строка 264: Строка 283:
 цию при обращении ​ к ло-   ​кой страницы ​  ​кой страницы ​  ​кой страницы цию при обращении ​ к ло-   ​кой страницы ​  ​кой страницы ​  ​кой страницы
 гической странице 3        с номером 2    с номером 1    с номером 0 гической странице 3        с номером 2    с номером 1    с номером 0
-   ​Например,​ если содержимое порта ​    ​A8h ​ равно ​ &​B11001001 , а +</​code>​
-                  содержимое ячейки ​ FFFFh  равно ​ &​B01101100 , +
-то в этом случае:​ +
-логическая страница 3 рассматривается как участок памяти из слота 3-1, +
-логическая страница 2 рассматривается как участок памяти из слота 0-2, +
-логическая страница 1 рассматривается как участок памяти из слота 2-3, а +
-логическая страница 0 рассматривается как участок памяти из слота 1-0.+
  
-   Теперь ясно, что подпрограмма подключения памяти к адресному пространс+Например,​ если содержимое порта A8h равно &​B11001001,​ а содержимое ячейки FFFFh равно &​B01101100 , то в этом случае:​ 
-тву выглядит следующим образом:​ +  * логическая страница 3 рассматривается как участок памяти из слота 3-1, 
-     ​DI        ; Запретить прерывания при работе с портами ввода-вывода +  * логическая страница 2 рассматривается как участок памяти из слота 0-2, 
-     ​LD   A, Номера первичных слотов +  * логическая страница 1 рассматривается как участок памяти из слота 2-3, а 
-     ​OUT  (A8h),A +  * логическая страница 0 рассматривается как участок памяти из слота 1-0. 
-     ​LD   A, Номера вторичных слотов + 
-     ​LD   ​(FFFFh),​A +Теперь ясно, что подпрограмма подключения памяти к адресному пространству выглядит следующим образом:​ 
-     ​EI       ; Разрешить системные прерывания +<​code>​ 
-     ​RET +DI        ; Запретить прерывания при работе с портами вводавывода 
-\/i +LD   A, Номера первичных слотов 
-            Внимание! ​ При чтении числа из ячейки FFFFh оно +OUT  (A8h),A 
-           выводится ​ в  и н в е р т и р о в а н н о м  виде. +LD   A, Номера вторичных слотов 
-\/i- +LD   ​(FFFFh),​A 
-   ​П р и м е р  1.    10 POKE &HFFFF, &​B01101100 +EI       ; Разрешить системные прерывания 
-   ────────────── ​    20 PRINT BIN$(PEEK(&​HFFFF)) +RET 
-                      run +</code> 
-                      10010011 +<WRAP center round important 60%> 
-                      Ok +Внимание! При чтении числа из ячейки FFFFh оно выводится в //инвертированном// виде. 
-   ​Теперь для того, чтобы узнать,​ какие вторичные слоты подключены ​ к  ад+ 
-ресному пространству,​ необходимо инвертировать полученный результат (заме+</WRAP> 
-нить нули ​единицами,​ а единицы ​нулями). ​  + 
- ┌─────────────────────────────────────────────────────────────────────┐ + 
- │ Отметим,​ что при включении ​ компьютера в логические страницы ​ 0 и 1 │ +{{anchor:​e1082-01}} __//Пример 1//__\\ {{.examples:​1082-01.bas|}} \\ [[+tab|wmsxbpge>​1082-01.bas]] 
- ​│ ​"​помещаются"​ физические страницы ​ памяти из слота 0, а в логические ​│ +<​code>​ 
- ​│ ​страницы 2 и 3 "​помещаются"​ физические страницы памяти из слота 3-2. +10 POKE &HFFFF, &​B01101100 
- │ Содержимое порта ввода-вывода с адресом A8h при этом становится рав-│ +20 PRINT BIN$(PEEK(&​HFFFF)) 
- ​│ ​ным &​B11110000,​ а истинное содержимое ячейки памяти FFFFh  становит-│ +run 
- ​│ ​       ​ся равным &​B10100000 (не забудьте про инвертирование!) ​      │ +10010011 
- └─────────────────────────────────────────────────────────────────────┘ +Ok 
-   ​Если до выключения компьютера на странице 1 слота 3-2 создать идентифи+</​code>​ 
-катор ROM и разместить на данной странице Вашу подпрограмму,​ то она будет + 
-"​стартовать"​ при включении компьютера,​ т.к.первое обращение идет ​ к  этой + 
-странице. +Теперь для того, чтобы узнать,​ какие вторичные слоты подключены к адресному пространству,​ необходимо инвертировать полученный результат (заменить нули ​— единицами,​ а единицы ​— нулями).  
-   ​П р и м е р 2.  А теперь небольшой фрагмент на макроассемблере... + 
-   ─────────────+<WRAP center round info 60%> 
 +Отметим,​ что при включении компьютера в логические страницы 0 и 1 "​помещаются"​ физические страницы памяти из слота 0, а в логические страницы 2 и 3 "​помещаются"​ физические страницы памяти из слота 3-2. 
 + 
 +Содержимое порта ввода-вывода с адресом A8h при этом становится равным &​B11110000,​ а истинное содержимое ячейки памяти FFFFh становится равным &​B10100000 (не забудьте про инвертирование!) ​      
 +</​WRAP>​ 
 + 
 +Если до выключения компьютера на странице 1 слота 3-2 создать идентификатор ROM и разместить на данной странице Вашу подпрограмму,​ то она будет "​стартовать"​ при включении компьютера,​ т.к. первое обращение идет к этой странице. 
 + 
 + 
 +{{anchor:​e1082-02}} __//Пример 2//__. А теперь небольшой фрагмент на макроассемблере...\\ {{.examples:​1082-02.asm|}} 
 +<​code>​
         DEFB 0FEH       ; Программа запускается с адреса &H9000         DEFB 0FEH       ; Программа запускается с адреса &H9000
         DEFW START,​KONEC+END-NACH,​START         DEFW START,​KONEC+END-NACH,​START
Строка 317: Строка 340:
 CONSOL ​ EQU 00A2H       ; Вывод символа на консоль. CONSOL ​ EQU 00A2H       ; Вывод символа на консоль.
  
-START: ​ LD   ​HL,​PROM ​   ; Адрес старта реставрируемой подпрограммы ​+START: ​ LD   ​HL,​PROM ​   ; Адрес старта реставрируемой подпрограммы
         PUSH HL         ; Сохранили в стеке и при встрече RET         PUSH HL         ; Сохранили в стеке и при встрече RET
         DI              ; переходим на этот адрес.         DI              ; переходим на этот адрес.
Строка 325: Строка 348:
         OUT  (0A8H),​A ​  ; 2 страница (8000H-C000H)-СЛОТB 3-2         OUT  (0A8H),​A ​  ; 2 страница (8000H-C000H)-СЛОТB 3-2
         LD   ​HL,​KONEC+1 ; 3 страница (C000H-FFFFH)-СЛОТB 3-2         LD   ​HL,​KONEC+1 ; 3 страница (C000H-FFFFH)-СЛОТB 3-2
-        LD   ​DE,​NACH ​   ; Пересылка подпрограммы на начало ​+        LD   ​DE,​NACH ​   ; Пересылка подпрограммы на начало
         LD   ​BC,​END-NACH;​ первой страницы слота 3-2         LD   ​BC,​END-NACH;​ первой страницы слота 3-2
         LDIR            ;         LDIR            ;
Строка 365: Строка 388:
         NOP         NOP
 END:    NOP END:    NOP
-\/+</code>
-   В н и м а н и е ! +
-   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.  +<WRAP round important>​ 
-   ────────────── +//Внимание// ! 
-   10 DATA 3E,00         :'​F300 ​ LD   A, Указатель слота +  ​- Логическая страница с номером 3 ни при каких условиях не должна подвергаться изменениямтак как в ней расположены подпрограммы–ловушки и область системных ​переменных. Нарушение этого ​условия приведет к отказу системы от дальнейшего ​выполнения программы и ее сбросу. 
-   20 DATA 21,​00,​00 ​     :'​F302 ​ LD   HL,Адрес ячейки +  - Если для физической страницы Вы используете начальный адрес 8000h, то прежде чем подключать ее к адресному пространству,​ позаботьтесь о перемещении программы на [[msx:basic:|]] и стека в "безопасное"​ место, каковым является логическая страница с номером 3. Для этого выполните ​программу: 
-   30 DATA 1E,00         :'​F305 ​ LD   E, Число +<​code>​ 
-   40 DATA CD,​14,​00 ​     :'​F307 ​ CALL WRSLT +10 POKE &HF676,1:POKE &​HF677,&​HC0:​POKE &​HC000,​0:​NEW 
-   50 DATA C9            :'​F30A ​ RET +</​code>​ 
-   60 CLEAR 200,&​HF300:​DEFUSR=&​HF300 +</​WRAP>​
-   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)+
  
-   ​Ч ​т е н и е  числа из любой физической страницыимеющей некоторый ​ на- +Существует еще один способ подключения ​физической страницы ​памяти к адресному пространству. Для этого воспользуйтесь подпрограммой BIOS с именем ​''​ENASLT''​, расположенной ​в слоте 0 по адресу 0024h.
-чальный ​адресосуществляется  ​путем  обращения ​ к  ​подпрограмме с именем +
-                                   ​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=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  в  компьютерах ​ серии +<​code>​ 
-MSX-2  не имеют ​ ф и к с и р о в а н н ы х  адресов. Пронумеруем все физи- +LD   ​A, Указатель слота 
-ческие страницы ​слота 3-2 от 0 до 7 сверху вниз (в порядке  следования на +LD   HL,Начальный адрес ​(0000h,4000h или ​8000h) 
-рисунке). +CALL ENASLT 
-  Любую из этих физических страниц  ​можно ​ подключить ​ к любой логической +RET 
-странице адресного пространства. +</​code>​ 
-\/i +В качестве примера приведем ​программу подключения физической страницы из некоторого слота к логической странице ​адресного пространства.
-   При этом не рекомендуется изменять содержимое ​логической страницы с но- +
-мером 3так как это приводит к перезагрузке системы! +
-\/i- +
-   ​Подключить физические страницы слота 3-2 можно ​ путем ​ воздействия ​ на +
-порты ввода-вывода с адресами 252253, 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.+
  
 +{{anchor:​e1082-03}} __//​Пример 3//__. \\ {{.examples:​1082-03.bas|}} \\ [[+tab|wmsxbpge>​1082-03.bas]]
 +<​code>​
 +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)
 +</​code>​
 +Кстати,​ подобного эффекта можно достичь путем воздействия на ячейку памяти FFFFh в слоте 3-2:
 +  * ''​POKE &​HFFFF,&​H80''​ — активизирован слот 3-0 (для учительского компьютера);​
 +  * ''​POKE &​HFFFF,&​HA0''​ — активизирован слот 3-2 (по умолчанию);​
 +  * ''​POKE &​HFFFF,&​HB0''​ — активизирован слот 3-3.
  
-                              Следует стремиться увидеть в каждой вещи то, 
-                              чего еше никто не видел, и над чем ​ еще ​ ни- 
-                              кто не думал. 
-                                                             ​Г.Лихтенберг 
-                              То, что я понял,​прекрасно,​ из этого я заклю- 
-                              чаю, что остальное,​ чего я  не  понял, тоже 
-                              прекрасно. 
-                                                                   ​Сократ 
  
 +<WRAP round important>​
 +Итак, прежде чем работать с памятью,​ ее необходимо явно распределить в адресном пространстве компьютера !
 +</​WRAP>​
 +
 +Существует,​ однако,​ другой способ работы со слотами,​заключающийся в использовании подпрограмм BIOS, расположенных в слоте 0. В этом случае проблема распределения памяти снимается с пользователя и целиком возлагается на систему.
 +
 +Опишем работу с некоторыми из этих подпрограмм.
 +
 +//​Запись//​ числа в RAM любого слота осуществляется путем обращения к подпрограмме с именем ''​WRSLT''​ , расположенной по адресу 0014h.
 +
 +{{anchor:​e1082-04}} __//​Пример 4//__. \\ {{.examples:​1082-04.bas|}} \\ [[+tab|wmsxbpge>​1082-04.bas]]
 +<​code>​
 +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)
 </​code>​ </​code>​
  
 +//​Чтение//​ числа из любой физической страницы,​ имеющей некоторый начальный адрес, осуществляется путем обращения к подпрограмме с именем ''​RDSLT'',​ расположенной по адресу 000Ch.
 +
 +{{anchor:​e1082-05}} __//​Пример 5//__. \\ {{.examples:​1082-05.bas|}} \\ [[+tab|wmsxbpge>​1082-05.bas]]
 +<​code>​
 +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)
 +</​code>​
 +
 +Посмотрев на схему расположения памяти в слотах,​ Вы можете заметить,​ что некоторые физические страницы памяти слота 3-2 в компьютерах серии MSX-2 не имеют //​фиксированных//​ адресов. Пронумеруем все физические страницы слота 3-2 от 0 до 7 сверху вниз (в порядке следования на рисунке).
 +
 +Любую из этих физических страниц можно подключить к любой логической странице адресного пространства.
 +
 +<WRAP round important>​
 +При этом не рекомендуется изменять содержимое логической страницы с номером 3, так как это приводит к перезагрузке системы!
 +</​WRAP>​
 +
 +Подключить физические страницы слота 3-2 можно путем воздействия на порты ввода–вывода с адресами 252, 253, 254 и 255. При этом, если Вы используете порт с адресом 252+N, то процессор подключит распределяемую физическую страницу к логической странице с номером N.
 +
 +Для подключения физической страницы к логической выполните команду
 +<WRAP group>
 +<WRAP half column>
 +<​code>​
 +OUT 252+N1,&​hF8+N2
 +</​code>​
 +</​WRAP>​
 +,
 +<WRAP half column>
 +
 +</​WRAP>​
 +</​WRAP>​
 +где: ​
 +  * ''​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''​.
 +
 +<WRAP group 99%>
 +<WRAP half column> \\ </​WRAP>​
 +<WRAP half column><​WRAP right>
 +Следует стремиться увидеть в каждой вещи то, чего
 +\\ еще никто не видел, и над чем еще ни кто не думал.
 +<WRAP rightalign>​
 +—//​Г.Лихтенберг//​
 +</​WRAP></​WRAP>​
 +</​WRAP></​WRAP>​
 +
 +<WRAP group 99%>
 +<WRAP half column> \\ </​WRAP>​
 +<WRAP half column><​WRAP right>
 +\\ То, что я понял,​прекрасно,​ из этого я заключаю,​
 +\\ что остальное,​ чего я не понял, тоже прекрасно.
 +<WRAP rightalign>​
 +—//​Сократ//​
 +</​WRAP></​WRAP>​
 +</​WRAP></​WRAP>​
  
 {{anchor:​n1083}} {{anchor:​n1083}}
 ===== 1.8.3. Создание новых операторов ===== ===== 1.8.3. Создание новых операторов =====
  
-В языке [[msx:​basic:​|]] допускается использование ​ так ​ называемых "​встроенных"​ подпрограмм. Каждая из этих подпрограмм имеет свое имя. Для обращения к встроенным подпрограммам используется оператор ​+В языке [[msx:​basic:​|]] допускается использование так называемых "​встроенных"​ подпрограмм. Каждая из этих подпрограмм имеет свое имя. Для обращения к встроенным подпрограммам используется оператор:
 <WRAP group> <WRAP group>
 <WRAP half column> <WRAP half column>
Строка 519: Строка 546:
 </​WRAP>​ </​WRAP>​
 где: где:
-  * ''​CALL''​("​call"​-"​звать"​) ​служебное слово, которое можно заменять знаком "​_";​ +  * ''​CALL''​("​call"​-"​звать"​) ​— служебное слово, которое можно заменять знаком "​_";​ 
-  * список параметров ​необязательный список,​содержащий одно или несколько выражений,​ отделенных друг от друга запятыми.+  * список параметров ​— необязательный список,​содержащий одно или несколько выражений,​ отделенных друг от друга запятыми.
  
 Рассмотрим несколько встроенных подпрограмм,​ имеющих отношение к локальной вычислительной сети компьютеров MSX-1. Рассмотрим несколько встроенных подпрограмм,​ имеющих отношение к локальной вычислительной сети компьютеров MSX-1.
Строка 596: Строка 623:
  
  
-В рабочей области RAM, начиная с адреса FCC9h, находится участок памяти,​ отвечающий за каждую ​ //​логическую//​ страницу памяти,​ находящуюся в некотором слоте, причем адрес байта памяти,​ непосредственно отвечающего за логическую страницу памяти,​ вычисляется по формуле:​+В рабочей области RAM, начиная с адреса FCC9h, находится участок памяти,​ отвечающий за каждую //​логическую//​ страницу памяти,​ находящуюся в некотором слоте, причем адрес байта памяти,​ непосредственно отвечающего за логическую страницу памяти,​ вычисляется по формуле:​
 <WRAP group> <WRAP group>
 <WRAP half column> <WRAP half column>
Строка 635: Строка 662:
 <WRAP group 99%> <WRAP group 99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify+<WRAP half column><​WRAP ​right
-Читающий,​ если не усвоишь ​перечти,​+Читающий,​ если не усвоишь ​— перечти,​
 \\ переждав. \\ переждав.
 <WRAP rightalign>​ <WRAP rightalign>​
msx/basic_dialogue_programming_language/108.1676403876.txt.gz · Последние изменения: 2023-02-14 22:44 — GreyWolf