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

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


msx:basic_dialogue_programming_language:108

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
msx:basic_dialogue_programming_language:108 [2023-02-15 19:41]
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            ;
Строка 394: Строка 392:
 <WRAP round important>​ <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
Строка 410: Строка 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]]
Строка 435: Строка 433:
 </​WRAP>​ </​WRAP>​
  
-Существует,​ однако,​ другой способ работы со слотами,​заключающийся в использовании подпрограмм BIOS, расположенных в слоте 0. В этом случае проблема распределения памяти снимается с пользователя и целиком ​ возлагается на систему. +Существует,​ однако,​ другой способ работы со слотами,​заключающийся в использовании подпрограмм BIOS, расположенных в слоте 0. В этом случае проблема распределения памяти снимается с пользователя и целиком возлагается на систему. 
-   ​+
 Опишем работу с некоторыми из этих подпрограмм. Опишем работу с некоторыми из этих подпрограмм.
  
Строка 458: Строка 456:
 </​code>​ </​code>​
  
-//​Чтение//​ числа из любой физической страницы,​ имеющей некоторый ​ начальный адрес, осуществляется ​ путем ​ обращения ​ к  подпрограмме с именем ''​RDSLT'',​ расположенной по адресу 000Ch.+//​Чтение//​ числа из любой физической страницы,​ имеющей некоторый начальный адрес, осуществляется путем обращения к подпрограмме с именем ''​RDSLT'',​ расположенной по адресу 000Ch.
  
 {{anchor:​e1082-05}} __//​Пример 5//__. \\ {{.examples:​1082-05.bas|}} \\ [[+tab|wmsxbpge>​1082-05.bas]] {{anchor:​e1082-05}} __//​Пример 5//__. \\ {{.examples:​1082-05.bas|}} \\ [[+tab|wmsxbpge>​1082-05.bas]]
Строка 478: Строка 476:
 </​code>​ </​code>​
  
-Посмотрев на схему ​ расположения ​ памяти в слотах,​ Вы можете ​ заметить,​ что некоторые физические страницы памяти слота 3-2  в  компьютерах ​ серии MSX-2  не имеют //​фиксированных//​ адресов. Пронумеруем все физические страницы слота 3-2 от 0 до 7 сверху вниз (в порядке следования на рисунке).+Посмотрев на схему расположения памяти в слотах,​ Вы можете заметить,​ что некоторые физические страницы памяти слота 3-2 в компьютерах серии MSX-2 не имеют //​фиксированных//​ адресов. Пронумеруем все физические страницы слота 3-2 от 0 до 7 сверху вниз (в порядке следования на рисунке).
  
-Любую из этих физических страниц ​ можно ​ подключить ​ к любой логической странице адресного пространства.+Любую из этих физических страниц можно подключить к любой логической странице адресного пространства.
  
 <WRAP round important>​ <WRAP round important>​
Строка 486: Строка 484:
 </​WRAP>​ </​WRAP>​
  
-Подключить физические страницы слота 3-2 можно ​ путем ​ воздействия ​ на порты ввода-вывода с адресами 252, 253, 254 и 255.  При этом, если Вы  используете порт с адресом 252+N, ​ то процессор подключит распределяемую физическую страницу к логической странице с номером N.+Подключить физические страницы слота 3-2 можно путем воздействия на порты вводавывода с адресами 252, 253, 254 и 255. При этом, если Вы используете порт с адресом 252+N, то процессор подключит распределяемую физическую страницу к логической странице с номером N.
  
 Для подключения физической страницы к логической выполните команду Для подключения физической страницы к логической выполните команду
Строка 503: Строка 501:
   * ''​N1''​ — номер логической страницы,​   * ''​N1''​ — номер логической страницы,​
   * ''​N2''​ — номер физической страницы,​   * ''​N2''​ — номер физической страницы,​
-  * ''&​hF8''​ — число, полученное при вычитании ​ 256 - M ,+  * ''&​hF8''​ — число, полученное при вычитании 256 - M ,
   * ''​M ''​ — число физических страниц в слоте 3-2.   * ''​M ''​ — число физических страниц в слоте 3-2.
  
 Таким образом Вы получите доступ к //​любой//​ ячейке памяти в слоте 3-2 (внимательно изучите //​текст//​ на схеме расположения памяти в слотах)! Таким образом Вы получите доступ к //​любой//​ ячейке памяти в слоте 3-2 (внимательно изучите //​текст//​ на схеме расположения памяти в слотах)!
  
-В заключение отметим,​ что для доступа ​ к физическим ​ страницам ​ памяти,​ подключенным к адресному пространству,​применяются оператор ''​POKE''​ и функция ''​PEEK''​. Кроме того, для работы с памятью компьютера серии MSX-2, ​ подключенного к локальной сети, применяются операторы ''​CALL POKE''​ и ''​CALL PEEK''​.+В заключение отметим,​ что для доступа к физическим страницам памяти,​ подключенным к адресному пространству,​применяются оператор ''​POKE''​ и функция ''​PEEK''​. Кроме того, для работы с памятью компьютера серии MSX-2, подключенного к локальной сети, применяются операторы ''​CALL POKE''​ и ''​CALL PEEK''​.
  
-Если адрес принадлежит отрезку [&​h4000,&​h7FFF],​ то операторы ''​CALL POKE''​ и ''​CALL PEEK''​ "​работают"​ с памятью,​ которая находится в слоте 3-3  и отвечает за работу локальной сети. Во всех остальных случаях действие оператора ''​CALL POKE''​ совпадает с действием оператора ''​POKE'',​ а действие оператора ''​CALL PEEK''​ совпадает с действием функции ''​PEEK''​.+Если адрес принадлежит отрезку [&​h4000,&​h7FFF],​ то операторы ''​CALL POKE''​ и ''​CALL PEEK''​ "​работают"​ с памятью,​ которая находится в слоте 3-3 и отвечает за работу локальной сети. Во всех остальных случаях действие оператора ''​CALL POKE''​ совпадает с действием оператора ''​POKE'',​ а действие оператора ''​CALL PEEK''​ совпадает с действием функции ''​PEEK''​.
  
 <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>​
Строка 524: Строка 522:
 <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>​
 —//​Сократ//​ —//​Сократ//​
Строка 535: Строка 533:
 ===== 1.8.3. Создание новых операторов ===== ===== 1.8.3. Создание новых операторов =====
  
-В языке [[msx:​basic:​|]] допускается использование ​ так ​ называемых "​встроенных"​ подпрограмм. Каждая из этих подпрограмм имеет свое имя. Для обращения к встроенным подпрограммам используется оператор ​+В языке [[msx:​basic:​|]] допускается использование так называемых "​встроенных"​ подпрограмм. Каждая из этих подпрограмм имеет свое имя. Для обращения к встроенным подпрограммам используется оператор:
 <WRAP group> <WRAP group>
 <WRAP half column> <WRAP half column>
Строка 548: Строка 546:
 </​WRAP>​ </​WRAP>​
 где: где:
-  * ''​CALL''​("​call"​-"​звать"​) ​служебное слово, которое можно заменять знаком "​_";​ +  * ''​CALL''​("​call"​-"​звать"​) ​— служебное слово, которое можно заменять знаком "​_";​ 
-  * список параметров ​необязательный список,​содержащий одно или несколько выражений,​ отделенных друг от друга запятыми.+  * список параметров ​— необязательный список,​содержащий одно или несколько выражений,​ отделенных друг от друга запятыми.
  
 Рассмотрим несколько встроенных подпрограмм,​ имеющих отношение к локальной вычислительной сети компьютеров MSX-1. Рассмотрим несколько встроенных подпрограмм,​ имеющих отношение к локальной вычислительной сети компьютеров MSX-1.
Строка 625: Строка 623:
  
  
-В рабочей области RAM, начиная с адреса FCC9h, находится участок памяти,​ отвечающий за каждую ​ //​логическую//​ страницу памяти,​ находящуюся в некотором слоте, причем адрес байта памяти,​ непосредственно отвечающего за логическую страницу памяти,​ вычисляется по формуле:​+В рабочей области RAM, начиная с адреса FCC9h, находится участок памяти,​ отвечающий за каждую //​логическую//​ страницу памяти,​ находящуюся в некотором слоте, причем адрес байта памяти,​ непосредственно отвечающего за логическую страницу памяти,​ вычисляется по формуле:​
 <WRAP group> <WRAP group>
 <WRAP half column> <WRAP half column>
Строка 664: Строка 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.1676479261.txt.gz · Последние изменения: 2023-02-15 19:41 — GreyWolf