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

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


msx:basic_dialogue_programming_language:108

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
msx:basic_dialogue_programming_language:108 [2023-02-15 19:23]
GreyWolf [1.8.2 Работа со слотами]
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–компьютеров в нашей стране. Однако
Строка 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 !
  
Строка 219: Строка 217:
 </​code>​ </​code>​
 <WRAP round box> <WRAP round box>
-Нумерация физических и логических страниц слота 3-2, а также адреса соответствующих портов в ученическом компьютере ​ аналогичны учительскому компьютеру.+Нумерация физических и логических страниц слота 3-2, а также адреса соответствующих портов в ученическом компьютере аналогичны учительскому компьютеру.
 </​WRAP>​ </​WRAP>​
 </​WRAP>​ </​WRAP>​
Строка 240: Строка 238:
 <WRAP group 99%> <WRAP group 99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 — Боюсь, что эти подробности утомительны,​ — Боюсь, что эти подробности утомительны,​
 \\ но вам не разобраться в ситуации,​ если \\ но вам не разобраться в ситуации,​ если
Строка 249: Строка 247:
 </​WRAP></​WRAP>​ </​WRAP></​WRAP>​
  
-Все адресное пространство MSX—компьютера разобьем на  //​четыре//​ т.н. //​логические//​ страницы (объемом по 16 Kбайтов каждая). ​+Все адресное пространство MSX—компьютера разобьем на //​четыре//​ т.н. //​логические//​ страницы (объемом по 16 Kбайтов каждая).
  
 Пронумеруем их следующим образом:​ Пронумеруем их следующим образом:​
Строка 255: Строка 253:
 ^  Логическая страница ​ |  0  |  1  |  2  |  3  | ^  Логическая страница ​ |  0  |  1  |  2  |  3  |
  
-Заметим,​ что каждый слот также ​ можно ​ разбить ​ на участки ​ объемом по 16 Кбайтов каждый,​ которые мы будем называть //​физическими//​ страницами памяти. Прежде чем начать работу с физической страницей памяти,​ ее необходимо //​подключить//​ к некоторой логической странице адресного пространства,​ для чего выполнить следующие операции:​+Заметим,​ что каждый слот также можно разбить на участки объемом по 16 Кбайтов каждый,​ которые мы будем называть //​физическими//​ страницами памяти. Прежде чем начать работу с физической страницей памяти,​ ее необходимо //​подключить//​ к некоторой логической странице адресного пространства,​ для чего выполнить следующие операции:​
   * α) указать компьютеру //​номер//​ подключаемой логической страницы(тем самым мы присвоим физической странице некоторый начальный адрес). Заметим,​ что при включении компьютера некоторым физическим страницам памяти начальный адрес присваивается автоматически;​   * α) указать компьютеру //​номер//​ подключаемой логической страницы(тем самым мы присвоим физической странице некоторый начальный адрес). Заметим,​ что при включении компьютера некоторым физическим страницам памяти начальный адрес присваивается автоматически;​
-  * β) указать //​номера//​ первичного и вторичного слотов, ​ которым ​ принадлежит выбранная физическая страница памяти.+  * β) указать //​номера//​ первичного и вторичного слотов,​ которым принадлежит выбранная физическая страница памяти.
  
-Номера первичных слотов записываются в порт ввода–вывода с адресом A8h, а номера вторичных слотов ​в ячейку FFFFh рабочей области (слот 3-2).+Номера первичных слотов записываются в порт ввода–вывода с адресом A8h, а номера вторичных слотов ​— в ячейку FFFFh рабочей области (слот 3-2).
  
 Порт ввода–вывода A8h: (номера //​первичных//​ слотов) Порт ввода–вывода A8h: (номера //​первичных//​ слотов)
Строка 287: Строка 285:
 </​code>​ </​code>​
  
-Например,​ если содержимое порта A8h  равно ​ &​B11001001 , а содержимое ячейки ​ FFFFh  равно ​ &​B01101100 , то в этом случае:​+Например,​ если содержимое порта A8h равно &​B11001001,​ а содержимое ячейки FFFFh равно &​B01101100 , то в этом случае:​
   * логическая страница 3 рассматривается как участок памяти из слота 3-1,   * логическая страница 3 рассматривается как участок памяти из слота 3-1,
   * логическая страница 2 рассматривается как участок памяти из слота 0-2,   * логическая страница 2 рассматривается как участок памяти из слота 0-2,
Строка 295: Строка 293:
 Теперь ясно, что подпрограмма подключения памяти к адресному пространству выглядит следующим образом:​ Теперь ясно, что подпрограмма подключения памяти к адресному пространству выглядит следующим образом:​
 <​code>​ <​code>​
-DI        ; Запретить прерывания при работе с портами ввода-вывода+DI        ; Запретить прерывания при работе с портами вводавывода
 LD   A, Номера первичных слотов LD   A, Номера первичных слотов
 OUT  (A8h),A OUT  (A8h),A
Строка 319: Строка 317:
  
  
-Теперь для того, чтобы узнать,​ какие вторичные слоты подключены ​ к  адресному пространству,​ необходимо инвертировать полученный результат (заменить нули — единицами,​ а единицы — нулями). ​ +Теперь для того, чтобы узнать,​ какие вторичные слоты подключены к адресному пространству,​ необходимо инвертировать полученный результат (заменить нули — единицами,​ а единицы — нулями). ​
  
 <WRAP center round info 60%> <WRAP center round info 60%>
-Отметим,​ что при включении ​ компьютера в логические страницы ​ 0 и 1 "​помещаются"​ физические страницы ​ памяти из слота 0, а в логические страницы 2 и 3 "​помещаются"​ физические страницы памяти из слота 3-2.+Отметим,​ что при включении компьютера в логические страницы 0 и 1 "​помещаются"​ физические страницы памяти из слота 0, а в логические страницы 2 и 3 "​помещаются"​ физические страницы памяти из слота 3-2.
  
-Содержимое порта ввода-вывода с адресом A8h при этом становится равным &​B11110000,​ а истинное содержимое ячейки памяти FFFFh  становится равным &​B10100000 (не забудьте про инвертирование!) ​      ​+Содержимое порта ввода-вывода с адресом A8h при этом становится равным &​B11110000,​ а истинное содержимое ячейки памяти FFFFh становится равным &​B10100000 (не забудьте про инвертирование!) ​     
 </​WRAP>​ </​WRAP>​
  
Строка 342: Строка 340:
 CONSOL ​ EQU 00A2H       ; Вывод символа на консоль. CONSOL ​ EQU 00A2H       ; Вывод символа на консоль.
  
-START: ​ LD   ​HL,​PROM ​   ; Адрес старта реставрируемой подпрограммы ​+START: ​ LD   ​HL,​PROM ​   ; Адрес старта реставрируемой подпрограммы
         PUSH HL         ; Сохранили в стеке и при встрече RET         PUSH HL         ; Сохранили в стеке и при встрече RET
         DI              ; переходим на этот адрес.         DI              ; переходим на этот адрес.
Строка 350: Строка 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            ;
Строка 392: Строка 390:
 </​code>​ </​code>​
  
-<​WRAP ​center ​round important ​60%>+<WRAP round important>​
 //​Внимание//​ ! //​Внимание//​ !
-  - Логическая страница с номером 3 ни при каких условиях не должна подвергаться изменениям,​ так как в ней расположены подпрограммы-ловушки и область системных переменных. Нарушение этого условия приведет к отказу системы от дальнейшего выполнения программы и ее сбросу. +  - Логическая страница с номером 3 ни при каких условиях не должна подвергаться изменениям,​ так как в ней расположены подпрограммыловушки и область системных переменных. Нарушение этого условия приведет к отказу системы от дальнейшего выполнения программы и ее сбросу. 
-  - Если для физической страницы Вы используете ​ начальный адрес ​ 8000h, то прежде чем подключать ее к адресному пространству,​ позаботьтесь о перемещении программы на [[msx:​basic:​|]] и стека в "​безопасное"​ место, каковым является логическая страница с номером 3. Для этого выполните программу:​+  - Если для физической страницы Вы используете начальный адрес 8000h, то прежде чем подключать ее к адресному пространству,​ позаботьтесь о перемещении программы на [[msx:​basic:​|]] и стека в "​безопасное"​ место, каковым является логическая страница с номером 3. Для этого выполните программу:​
 <​code>​ <​code>​
 10 POKE &​HF676,​1:​POKE &​HF677,&​HC0:​POKE &​HC000,​0:​NEW 10 POKE &​HF676,​1:​POKE &​HF677,&​HC0:​POKE &​HC000,​0:​NEW
Строка 401: Строка 399:
 </​WRAP>​ </​WRAP>​
  
-Существует еще один способ подключения физической страницы памяти к адресному пространству.Для этого воспользуйтесь подпрограммой BIOS с именем ​ +Существует еще один способ подключения физической страницы памяти к адресному пространству. Для этого воспользуйтесь подпрограммой BIOS с именем ​''​ENASLT''​, расположенной в слоте 0 по адресу 0024h.
-<WRAP group> +
-<WRAP half column>​ +
-<​code>​ +
-ENASLT +
-</​code>​ +
-</​WRAP>​ +
-, +
-<WRAP half column>​ +
- +
-</​WRAP>​ +
-</​WRAP>​ +
-расположенной в слоте 0 по адресу 0024h.+
  
 Обращение к ней выглядит следующим образом:​ Обращение к ней выглядит следующим образом:​
Строка 422: Строка 408:
 RET RET
 </​code>​ </​code>​
-В качестве примера приведем программу подключения физической ​ страницы из некоторого слота к логической странице 2 адресного пространства.+В качестве примера приведем программу подключения физической страницы из некоторого слота к логической странице 2 адресного пространства.
  
 {{anchor:​e1082-03}} __//​Пример 3//__. \\ {{.examples:​1082-03.bas|}} \\ [[+tab|wmsxbpge>​1082-03.bas]] {{anchor:​e1082-03}} __//​Пример 3//__. \\ {{.examples:​1082-03.bas|}} \\ [[+tab|wmsxbpge>​1082-03.bas]]
Строка 442: Строка 428:
   * ''​POKE &​HFFFF,&​HB0''​ — активизирован слот 3-3.   * ''​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>​ <​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 
-пользовании подпрограмм BIOS, расположенных в слоте ​0. В этом случае проб- +60 CLEAR 200,&​HF300:​DEFUSR=&​HF300 
-лема распределения памяти снимается с пользователя и целиком  возлагается +70 FOR T=TO 10:READ Z$:POKE &​HF300+T,​VAL("&​h"​+Z$):​NEXT 
-на систему. +80 INPUT"​Номер первичного слота";N1 
-   Опишем работу с некоторыми из этих подпрограмм. +90 INPUT"​Номер ​вторичного слота";N2 
-   З а п и с ь  ​числа в RAM любого слота ​осуществляется путем обращения к +100 POKE &​HF301,&​H80+N2*4+N1 '​◀── Указатель слота 
-подпрограмме с именем ​              ​WRSLT ​  +110 INPUT"​Адрес ​ячейки";​AD% 
-расположенной по адресу 0014h.+120 POKE &HF303,PEEK(VARPTR(AD%)):​POKE &​HF304,​PEEK(VARPTR(AD%)+1) 
 +130 INPUT"​Какое число запишете";​Q%:​POKE &​HF306,​Q%:​A=USR(A) 
 +</​code>​
  
-   П р и м е р  3.  +//Чтение// числа из любой физической страницы, имеющей некоторый начальный адрес, ​осуществляется путем обращения к подпрограмме с именем ''​RDSLT''​расположенной ​по адресу 000Ch.
-   ​────────────── +
-   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)+
  
-   Ч т е н и е  числа из любой физической страницы,​ имеющей некоторый ​ на- +{{anchor:​e1082-05}} __//Пример ​5//__\\ {{.examples:​1082-05.bas|}} \\ [[+tab|wmsxbpge>​1082-05.bas]] 
-чальный адрес, осуществляется ​ путем ​ обращения ​ к  подпрограмме с именем +<​code>​ 
-                                   ​RDSLT ​  , +10 DATA 3E,00         :'​F300 ​ LD   ​A,​Указатель слота 
-расположенной по адресу 000Ch. +20 DATA 21,​00,​00 ​     :'​F302 ​ LD   ​HL,​Адрес читаемой ячейки 
-   П р и м е р  4+30 DATA CD,​0C,​00 ​     :'​F305 ​ CALL RDSLT 
-   ────────────── ​ +40 DATA 32,​10,​F3 ​     :'​F308 ​ ;​Запись результата в доступную ячейку 
-   ​10 DATA 3E,00         :'​F300 ​ LD   ​A,​Указатель слота +                              ;​памяти (в нашем случае &​HF310) 
-   ​20 DATA 21,​00,​00 ​     :'​F302 ​ LD   ​HL,​Адрес читаемой ячейки +50 DATA C9            :'​F30B ​ RET 
-   ​30 DATA CD,​0C,​00 ​     :'​F305 ​ CALL RDSLT +60 CLEAR 200,&​HF300:​DEFUSR=&​HF300 
-   ​40 DATA 32,​10,​F3 ​     :'​F308 ​ ;​Запись результата в доступную ячейку +70 FOR T=0 TO 11:READ Z$:POKE &​HF300+T,​VAL("&​h"​+Z$):​NEXT 
-                                 ​;​памяти (в нашем случае &​HF310) +80 INPUT"​Номер первичного слота";​N1 
-   ​50 DATA C9            :'​F30B ​ RET +90 INPUT"​Номер вторичного слота";​N2 
-   ​60 CLEAR 200,&​HF300:​DEFUSR=&​HF300 +100 POKE &​HF301,&​H80+N2*4+N1 '​◀── Указатель слота 
-   ​70 FOR T=0 TO 11:READ Z$:POKE &​HF300+T,​VAL("&​h"​+Z$):​NEXT +110 INPUT"​Адрес ячейки";​AD% 
-   ​80 INPUT"​Номер первичного слота";​N1 +120 POKE &​HF303,​PEEK(VARPTR(AD%)):​POKE &​HF304,​PEEK(VARPTR(AD%)+1) 
-   ​90 INPUT"​Номер вторичного слота";​N2 +130 A=USR(A):​PRINT"​Вот Ваше число:";​PEEK(&​HF310) 
-   ​100 POKE &​HF301,&​H80+N2*4+N1 '​◀── Указатель слота +</​code>​
-   ​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 сверху вниз (в порядке следования на рисунке).
-что некоторые физические страницы памяти слота 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.+
  
 +Любую из этих физических страниц можно подключить к любой логической странице адресного пространства.
  
-                              Следует стремиться увидеть в каждой вещи то, +<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>​ </​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>
Строка 557: Строка 546:
 </​WRAP>​ </​WRAP>​
 где: где:
-  * ''​CALL''​("​call"​-"​звать"​) ​служебное слово, которое можно заменять знаком "​_";​ +  * ''​CALL''​("​call"​-"​звать"​) ​— служебное слово, которое можно заменять знаком "​_";​ 
-  * список параметров ​необязательный список,​содержащий одно или несколько выражений,​ отделенных друг от друга запятыми.+  * список параметров ​— необязательный список,​содержащий одно или несколько выражений,​ отделенных друг от друга запятыми.
  
 Рассмотрим несколько встроенных подпрограмм,​ имеющих отношение к локальной вычислительной сети компьютеров MSX-1. Рассмотрим несколько встроенных подпрограмм,​ имеющих отношение к локальной вычислительной сети компьютеров MSX-1.
Строка 634: Строка 623:
  
  
-В рабочей области RAM, начиная с адреса FCC9h, находится участок памяти,​ отвечающий за каждую ​ //​логическую//​ страницу памяти,​ находящуюся в некотором слоте, причем адрес байта памяти,​ непосредственно отвечающего за логическую страницу памяти,​ вычисляется по формуле:​+В рабочей области RAM, начиная с адреса FCC9h, находится участок памяти,​ отвечающий за каждую //​логическую//​ страницу памяти,​ находящуюся в некотором слоте, причем адрес байта памяти,​ непосредственно отвечающего за логическую страницу памяти,​ вычисляется по формуле:​
 <WRAP group> <WRAP group>
 <WRAP half column> <WRAP half column>
Строка 673: Строка 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.1676478204.txt.gz · Последние изменения: 2023-02-15 19:23 — GreyWolf