====== MSX — RTC ======
RTC (Real-time clock) — часы реального времени. Напряжение питания 3 В, для питания используются 2×AA(LR6).
Применяется с [[msx:msx_2|]].
Микросхема имеет в себе четыре блока (каждый блок состоит из 13 4-битных регистров, которые имеют адреса с 0 по 12):
- [[#block0|Блок 0]]
- [[#block1|Блок 1]]
- [[#block2|Блок 2]]
- [[#block3|Блок 3]]
Кроме этого, имеются еще три 4-битных регистра для выбора блока или функций управления. Они имеют номера с 13 по 15.
Из регистров с 0 по 12 и регистра режима ([[#MODE]]) 13 можно читать информацию, можно также и записывать данные в эти регистры. Регистры теста ([[#TEST]]) 14 и сброса ([[#RESET]]) могут использоваться только для записи.
====== Описание ======
Дата и время хранятся в [[#block0|блоке 0]], значения для будильника — в [[#block1|блоке 1]]. Секунды для будильника не устанавливаются. Когда времена часов и будильника совпадают, ничего не происходит.
В часах год представляется двумя цифрами (регистры 11 и 12). Эти две последние цифры года увеличиваются на 80. Таким образом год 0 означает календарный год 1980.
Регистр 10 [[#block1|блока 1]] используется для выбора между 12- и 24-часовой режимами часов. Режим 12 часов устанавливается, когда бит 0 сброшен в 0, а шкала 24 часа — когда он установлен в 1.
Если установлен режим 24-часового времени, то бит 1 регистра 5 [[#block0|блока 0 ]] определяет время дня — до полудня или после.
Когда оба младших бита регистра 11 [[#block1|блока 1]] равны нулю, это означает високосный год, в котором февраль имеет 29 дней. При выполнении оператора ''[[:msx:basic_dialogue_programming_language:007#setdate|SET DATE]]'' эти биты определяются делением года нацело на 4.
{{anchor:block0}}
====== Блок 0 (часы) ======
^ Регистр ^ Биты ^^^^ Значение ^
^:::^ 3 ^ 2 ^ 1 ^ 0 ^:::^
| 0 | | | | |Секунды (1–я цифра)|
| 1 | — | | | |Секунды (2–я цифра)|
| 2 | | | | |Минуты (1–я цифра)|
| 3 | — | | | |Минуты (2–я цифра)|
| 4 | | | | |Часы (1–я цифра)|
| 5 | — | — | | |Часы (2–я цифра)|
| 6 | — | | | |День недели:
* 0 воскресенье
* 1 понедельник
* 2 вторник
* 3 среда
* 4 четверг
* 5 пятница
* 6 суббота
|
| 7 | | | | |День (1–я цифра)|
| 8 | — | — | | |День (2–я цифра)|
| 9 | | | | |Месяц (1–я цифра)|
| A | — | — | | |Месяц (2–я цифра)|
| B | | | | |Год (1–я цифра)|
| C | | | | |Год (2–я цифра)|
Для работы с регистрами из [[msx:basic:|]] используются операторы:
* [[msx:basic_dialogue_programming_language:007#setdate|SET DATE]]
* [[msx:basic_dialogue_programming_language:007#settime|SET TIME]]
{{anchor:block1}}
====== Блок 1 (будильник) ======
^ Регистр ^ Биты ^^^^ Значение ^
^:::^ 3 ^ 2 ^ 1 ^ 0 ^:::^
| 0 | — | — | — | — |Не используется|
| 1 | — | — | — | — |:::|
| 2 | | | | |Минуты (1–я цифра)|
| 3 | — | | | |Минуты (2–я цифра)|
| 4 | | | | |Часы (1–я цифра)|
| 5 | — | — | | |Часы (2–я цифра)|
| 6 | — | | | |День недели:
* 0 воскресенье
* 1 понедельник
* 2 вторник
* 3 среда
* 4 четверг
* 5 пятница
* 6 суббота
|
| 7 | | | | |День (1–я цифра)|
| 8 | — | — | | |День (2–я цифра)|
| 9 | — | — | — | — |Не используется|
| A | — | — | — | |Режим 12/24 часа|
| B | — | — | | |Високосный год |
| C | — | — | — | — |Не используется|
{{anchor:block2}}
====== Блок 2 ======
^ Регистр ^ Биты ^^^^ Значение ^
^:::^ 3 ^ 2 ^ 1 ^ 0 ^:::^
| 0 | | | | |ID|
| 1 | | | | |коррекция X (от -8 до +7)|
| 2 | | | | |коррекция Y (от -8 до +7)|
| 3 | — | — | И | Э |
* И тип интерф.
* Э тип экрана
|
| 4 | | | | |Ширина экрана (младшие биты)|
| 5 | | | | |Ширина экрана (старшие биты)|
| 6 | | | | |Цвет изображения|
| 7 | | | | |Цвет фона|
| 8 | | | | |Цвет бордюра|
| 9 | М | П | К | Ф |
* М скорость [[msx:data_recorder|магнитофона]]
* П тип [[msx:printer:printer|принтера]]
* К звук клавиш
* Ф вкл./выкл. отображения текста функциональных клавиш
|
| A | Т | Т | Г | Г |Звук клавиш:
* Т тип
* Г громкость
|
| B | — | — | | |Цвет заголовка|
| C | | | | |Код страны:
* 00 Японский
* 01 Русский (на Sanyo и Sony)
* 02 Английский (международный)
* 03 Английский (Великобритания)
* 04 Французский
* 05 Немецкий
* 07 Испанский
* 09 Корейский
* 0А Русский (только на Yamaha)
|
Для работы с регистрами из [[msx:basic:|]] используются операторы:
* [[msx:basic_dialogue_programming_language:007#setadjust|SET ADJUST]]
* [[msx:basic_dialogue_programming_language:007#setbeep|SET BEEP]]
* [[msx:basic_dialogue_programming_language:007#setscreen|SET SCREEN]]
{{anchor:block3}}
====== Блок 3 (настройка) ======
Блок 3 имеет три функции, зависящие от значения ID (регистр 0), поэтому одновременная установка приветствия заголовка, пароля и подсказки невозможна
{{anchor:block3_0}}
===== ID=0 (заголовок) =====
^ Регистр ^ Биты ^^^^ Значение ^
^:::^ 3 ^ 2 ^ 1 ^ 0 ^:::^
| 0 | 0 | 0 | 0 | 0 |Вариант: заголовок|
| 1 | | | | |1–й символ заголовка (младшие биты)|
| 2 | | | | |1–й символ заголовка (старшие биты)|
| 3 | | | | |2–й символ заголовка (младшие биты)|
| 4 | | | | |2–й символ заголовка (старшие биты)|
| 5 | | | | |3–й символ заголовка (младшие биты)|
| 6 | | | | |3–й символ заголовка (старшие биты)|
| 7 | | | | |4–й символ заголовка (младшие биты)|
| 8 | | | | |4–й символ заголовка (старшие биты)|
| 9 | | | | |5–й символ заголовка (младшие биты)|
| A | | | | |5–й символ заголовка (старшие биты)|
| B | | | | |6–й символ заголовка (младшие биты)|
| C | | | | |6–й символ заголовка (старшие биты)|
Для работы с регистрами из [[msx:basic:|]] используется оператор [[msx:basic_dialogue_programming_language:007#settitle|SET TITLE]]
{{anchor:block3_1}}
===== ID=1 (пароль) =====
^ Регистр ^ Биты ^^^^ Значение ^
^:::^ 3 ^ 2 ^ 1 ^ 0 ^:::^
| 0 | 0 | 0 | 1 | 0 |Вариант: пароль|
| 1 | | | | |Использование ID=1|
| 2 | | | | |Использование ID=2|
| 3 | | | | |Использование ID=3|
| 4 | | | | |Сжатые до 4 бит данные пароля × 4|
| 5 | | | | |:::|
| 6 | | | | |:::|
| 7 | | | | |:::|
| 8 | | | | |Флаг наличия ключевого картриджа|
| 9 | | | | |Значение ключевого картриджа |
| A | | | | |:::|
| B | | | | |:::|
| C | | | | |:::|
Для работы с регистрами из [[msx:basic:|]] используется оператор [[msx:basic_dialogue_programming_language:007#setpassword|SET PASSWORD]]
{{anchor:block3_2}}
===== ID=2 (подсказка в MSX-BASIC) =====
^ Регистр ^ Биты ^^^^ Значение ^
^:::^ 3 ^ 2 ^ 1 ^ 0 ^:::^
| 0 | 0 | 1 | 0 | 0 |Вариант: подсказка|
| 1 | | | | |1–й символ подсказки (младшие биты)|
| 2 | | | | |1–й символ подсказки (старшие биты)|
| 3 | | | | |2–й символ подсказки (младшие биты)|
| 4 | | | | |2–й символ подсказки (старшие биты)|
| 5 | | | | |3–й символ подсказки (младшие биты)|
| 6 | | | | |3–й символ подсказки (старшие биты)|
| 7 | | | | |4–й символ подсказки (младшие биты)|
| 8 | | | | |4–й символ подсказки (старшие биты)|
| 9 | | | | |5–й символ подсказки (младшие биты)|
| A | | | | |5–й символ подсказки (старшие биты)|
| B | | | | |6–й символ подсказки (младшие биты)|
| C | | | | |6–й символ подсказки (старшие биты)|
Для работы с регистрами из [[msx:basic:|]] используется оператор [[msx:basic_dialogue_programming_language:007#setprompt|SET PROMPT]]
{{anchor:mode}}
====== Регистр 13 (MODE) ======
Функции регистра режима (MODE)
Выбор блока: Два младших бита регистра MODE (M1,M0) используются для указания блока перед чтением/записью в регистры 0..12. Регистры 13..15 доступны при любых значениях MODE.
Включение/выключение будильника: Переключение бита 2 регистра MODE (AE) включает/выключает будильник. Однако нужно иметь в виду, что MSX-2 будильник не поддерживает.
Завершение подсчета времени: Запись нуля в бит 3 выключает счет секунд, и функция часов останавливается. Запись единицы возобновляет счет.
|< 25% 25% 25% 25%>|
^ Биты ^^^^
^ 3 ^ 2 ^ 1 ^ 0 ^
| TE | AE | M1 | M0 |
{{anchor:test}}
====== Регистр 14 (TEST) ======
Функции регистра теста (TEST)
Регистр теста 14 используется для быстрого увеличения верхнего счетчика и для подтверждения того, что дата и время считаются правильно. Установка в единицу каждого бита этого регистра означает прямую установку пульса 2^14 (=16384 Hz) в счетчики дня (D), часа (H), минуты (M), секунды (S).
|< 25% 25% 25% 25%>|
^ Биты ^^^^
^ 3 ^ 2 ^ 1 ^ 0 ^
| D | H | M | S |
{{anchor:reset}}
====== Регистр 15 (RESET) ======
Функции регистра сброса (RESET)
Сброс будильника: Установка в единицу бита 0 (AR) вызывает сброс в ноль всех регистров будильника.
Точная установка секунд: Установка в единицу бита 1 (CR) означает сброс дробей секунд.
Включение/выключение пульса часов: Установка в единицу бита 2 (C16) означает выход пульса 16 Hz, а запись нуля в бит 3 (C1) - 1 Hz. Система MSX-2 эти возможности не поддерживает.
|< 25% 25% 25% 25%>|
^ Биты ^^^^
^ 3 ^ 2 ^ 1 ^ 0 ^
| C1 | C16 | CR | AR |
====== Процедуры BIOS ======
FIXME
Следующие процедуры BIOS предназначены для доступа к регистрам. Поскольку эта процедуры находится в SUB ROM, они вызывается с использованием межслотового вызова.
|REDCLK (01F5/SUB)|Считывает регистр по адресу, указанному в регистре C, и сохраняет его в регистре A|
|WRTCLK (01F9/SUB)|Записывает содержимое регистра A в регистр по адресу, указанному в регистре C. Адрес указывается в формате, аналогично REDCLK|
Метод спецификации регистра:
| ^ Биты ^^^^^^^^
|Адрес [C]^ 7 ^ 6 ^ 5 ^ 4 ^ 3 ^ 2 ^ 1 ^ 0 ^
|Значение [A]| 0 | 0 | M1 | M0 | A3 | A2 | A1 | A0 |
| ||| номер блока || номер регистра ||||
====== Примеры ======
[[msx:datapack:datapack#examples|MSX Datapack]], программа ''PROMPT.MAC''
====== Ссылки ======
[[msxorg>wiki/RTC|RTC]]
[[msxorg>wiki/Ricoh_RP-5C01|Ricoh RP-5C01]]
[[http://fms.komkon.org/MSX/Docs/Clock.txt|Clock Chip in MSX2]]
[[http://ngs.no.coocan.jp/doc/wiki.cgi/datapack?page=6%BE%CF+CLOCK%A4%C8%A5%D0%A5%C3%A5%C6%A5%EA%A5%D0%A5%C3%A5%AF%A5%A2%A5%C3%A5%D7%A1%A6%A5%E1%A5%E2%A5%EA|MSX Datapack wiki — CLOCK]]
[[github>oboroc/msx-books/blob/master/msx2-fb-1993-ru.md#9-часы-и-энергонезависимая-память|Архитектура и устройства микрокомпьютеров стандарта MSX-2 — 9. Часы и энергонезависимая память]]
[[github>oboroc/msx-books/blob/master/msx2-fb-1993-ru.md#323-доступ-к-микросхеме-таймера-и-энергонезависимой-памяти|Архитектура и устройства микрокомпьютеров стандарта MSX-2 — 3.23. Доступ к микросхеме таймера и энергонезависимой памяти]]
{{tag>MSX Hardware}}