https://emuverse.ru/w/api.php?action=feedcontributions&user=Panther&feedformat=atomEmuverse - Вклад [ru]2024-03-19T01:19:16ZВкладMediaWiki 1.40.0https://emuverse.ru/w/index.php?title=%D0%90%D0%B3%D0%B0%D1%82/%D0%A2%D0%B5%D1%85%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8F&diff=3752Агат/Техническая информация2024-02-14T15:07:08Z<p>Panther: /* Управление памятью */</p>
<hr />
<div>{{Emuverse}}<br />
<br />
== Контроллер и дисковод 140к ==<br />
* Физические параметры: сторон: 1 (0), дорожек: 35 (0-34), секторов: 16 (0-15). Нумерация секторов от 0!<br />
* Используется свой алгоритм кодирования [https://en.wikipedia.org/wiki/Group_coded_recording GCR 6.2], отличающийся от Apple Disk ][?<br />
** Пока замечено, что два «лишних» байта при кодировании первого блока «заворачиваются» на начало буфера, а в найденных эмуляторах Apple берутся нулевыми, что не влияет на раскодированные данные, но меняет контрольную сумму.<br />
* Порядок секторов 0x0,0xD,0xB,0x9,0x7,0x5,0x3,0x1,0xE,0xC,0xA,0x8,0x6,0x4,0x2,0xF — при этом в файле DSK они находятся именно в таком порядке, и при генерации NIB-трека их переставлять не нужно.<br />
* Как и в Apple Disk ][, число физических дорожек равно 70, но стандартно используется только каждая вторая, следовательно, номер дорожки в образе равен половине номера физической дорожки.<br />
<br />
Документация по nib-формату:<br />
* https://github.com/fadden/CiderPress2/blob/main/DiskArc/Disk/Nibble-notes.md<br />
* https://github.com/fadden/CiderPress2/blob/main/DiskArc/Disk/Unadorned-notes.md<br />
<br />
== Агат-9 ==<br />
=== Распределение портов ===<br />
* C000-C00F ― регистр данных клавиатуры.<br />
* C010-C01F ― очистка регистра данных клавиатуры.<br />
* C020-C02F ― магнитофон?<br />
* C030-C03F ― звук? <br />
* C040-C04F ― ?<br />
* C050-C057 ― чт/зп ― видеорежим Apple, переключение ДК в режим Apple (ПА <= 0).<br />
* C058-C05F ― ?<br />
* C060-C06F ― клавиатура, пульты.<br />
* C070-C07F ― ? <br />
* C080-C08F ― режим пзу, псевдо-пзу, сегмента D000-DFFF.<br />
* C0F0-C0FF ― запись ― переключение ПМ <= 1, чтение ― ?.<br />
* C100-C1FF ― запись ― переключение страниц памяти, чтение ― возврат номера подключенного банка.<br />
* C200-C2FF ― разъём 2.<br />
* C300-C3FF ― разъём 3.<br />
* C400-C4FF ― разъём 4.<br />
* C500-C5FF ― разъём 5.<br />
* C700-C7FF ― Видеорежим Агат, переключение ДК а режим Агат/Apple (ПА)<br />
<br />
=== ПА и ПМ ===<br />
* '''ПМ''' ― «Признак Машины»<br />
** 0 ― ОЗУ в режиме Агат, только сброс.<br />
** 1 ― ОЗУ в режиме Apple, запись по адресу C0F0-C0FF<br />
* '''ПА''' ― «Признак Apple»<br />
** 0 ― ДК в режиме Apple, обращение (ч/з) по адресам C050-C057 <br/>или C700-C7FF (при ПМ==1)<br />
** 1 ― ДК в режиме Агат, сброс или обращение по адресам C700-C7FF при ПМ==0<br />
<br />
'''Внимание! В отдельных изданиях официальной документации названия сигналов перепутаны!'''<br />
<br />
=== Управление памятью ===<br />
Назначение банков физической памяти на логические сегменты происходит записью произвольного значения по адресам C100-C1FF. Формат адреса: C1mn, где m ― номер логического сегмента (0-7), n ― номер банка (0-F). Чтение возвращает записанное значение. Запись разрешена только в режиме Агат (ПМ==0).<br />
<br />
При этом m = 0-7 обозначают номера сегментов в режиме Агат, а E и F указывают на подключенные банки к сегментам 6 и 7 в режиме Apple.<br />
<br />
=== Порт клавиатуры ===<br />
Для работы с клавиатурой используются следующие порты ввода-вывода:<br />
* C000&mdash;C00F &ndash; код нажатой клавиши (младшие 7 битов). Старший бит, равный 1, означает, что код готов к чтению.<br />
* C063 &ndash; линия Р/Л, старший бит кода нажатой клавиши (бит 7).<br />
* C010&mdash;C01F &ndash; обращение по этим адресам сбрасывает буфер для приема следующей клавиши.<br />
<br />
[[Категория:Агат]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%90%D0%B3%D0%B0%D1%82/%D0%A2%D0%B5%D1%85%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8F&diff=3751Агат/Техническая информация2024-02-14T14:28:39Z<p>Panther: /* ПА и ПМ */</p>
<hr />
<div>{{Emuverse}}<br />
<br />
== Контроллер и дисковод 140к ==<br />
* Физические параметры: сторон: 1 (0), дорожек: 35 (0-34), секторов: 16 (0-15). Нумерация секторов от 0!<br />
* Используется свой алгоритм кодирования [https://en.wikipedia.org/wiki/Group_coded_recording GCR 6.2], отличающийся от Apple Disk ][?<br />
** Пока замечено, что два «лишних» байта при кодировании первого блока «заворачиваются» на начало буфера, а в найденных эмуляторах Apple берутся нулевыми, что не влияет на раскодированные данные, но меняет контрольную сумму.<br />
* Порядок секторов 0x0,0xD,0xB,0x9,0x7,0x5,0x3,0x1,0xE,0xC,0xA,0x8,0x6,0x4,0x2,0xF — при этом в файле DSK они находятся именно в таком порядке, и при генерации NIB-трека их переставлять не нужно.<br />
* Как и в Apple Disk ][, число физических дорожек равно 70, но стандартно используется только каждая вторая, следовательно, номер дорожки в образе равен половине номера физической дорожки.<br />
<br />
Документация по nib-формату:<br />
* https://github.com/fadden/CiderPress2/blob/main/DiskArc/Disk/Nibble-notes.md<br />
* https://github.com/fadden/CiderPress2/blob/main/DiskArc/Disk/Unadorned-notes.md<br />
<br />
== Агат-9 ==<br />
=== Распределение портов ===<br />
* C000-C00F ― регистр данных клавиатуры.<br />
* C010-C01F ― очистка регистра данных клавиатуры.<br />
* C020-C02F ― магнитофон?<br />
* C030-C03F ― звук? <br />
* C040-C04F ― ?<br />
* C050-C057 ― чт/зп ― видеорежим Apple, переключение ДК в режим Apple (ПА <= 0).<br />
* C058-C05F ― ?<br />
* C060-C06F ― клавиатура, пульты.<br />
* C070-C07F ― ? <br />
* C080-C08F ― режим пзу, псевдо-пзу, сегмента D000-DFFF.<br />
* C0F0-C0FF ― запись ― переключение ПМ <= 1, чтение ― ?.<br />
* C100-C1FF ― запись ― переключение страниц памяти, чтение ― возврат номера подключенного банка.<br />
* C200-C2FF ― разъём 2.<br />
* C300-C3FF ― разъём 3.<br />
* C400-C4FF ― разъём 4.<br />
* C500-C5FF ― разъём 5.<br />
* C700-C7FF ― Видеорежим Агат, переключение ДК а режим Агат/Apple (ПА)<br />
<br />
=== ПА и ПМ ===<br />
* '''ПМ''' ― «Признак Машины»<br />
** 0 ― ОЗУ в режиме Агат, только сброс.<br />
** 1 ― ОЗУ в режиме Apple, запись по адресу C0F0-C0FF<br />
* '''ПА''' ― «Признак Apple»<br />
** 0 ― ДК в режиме Apple, обращение (ч/з) по адресам C050-C057 <br/>или C700-C7FF (при ПМ==1)<br />
** 1 ― ДК в режиме Агат, сброс или обращение по адресам C700-C7FF при ПМ==0<br />
<br />
'''Внимание! В отдельных изданиях официальной документации названия сигналов перепутаны!'''<br />
<br />
=== Управление памятью ===<br />
Назначение банков физической памяти на логические сегменты происходит записью произвольного значения по адресам C100-C1FF. Формат адреса: C1mn, где m ― номер логического сегмента (0-7), n ― номер банка (0-F). Чтение возвращает записанное значение. Запись разрешена только в режиме Агат (ПМ==0).<br />
<br />
=== Порт клавиатуры ===<br />
Для работы с клавиатурой используются следующие порты ввода-вывода:<br />
* C000&mdash;C00F &ndash; код нажатой клавиши (младшие 7 битов). Старший бит, равный 1, означает, что код готов к чтению.<br />
* C063 &ndash; линия Р/Л, старший бит кода нажатой клавиши (бит 7).<br />
* C010&mdash;C01F &ndash; обращение по этим адресам сбрасывает буфер для приема следующей клавиши.<br />
<br />
[[Категория:Агат]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%90%D0%B3%D0%B0%D1%82/%D0%A2%D0%B5%D1%85%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8F&diff=3750Агат/Техническая информация2024-02-14T09:34:46Z<p>Panther: /* Агат-9 */</p>
<hr />
<div>{{Emuverse}}<br />
<br />
== Контроллер и дисковод 140к ==<br />
* Физические параметры: сторон: 1 (0), дорожек: 35 (0-34), секторов: 16 (0-15). Нумерация секторов от 0!<br />
* Используется свой алгоритм кодирования [https://en.wikipedia.org/wiki/Group_coded_recording GCR 6.2], отличающийся от Apple Disk ][?<br />
** Пока замечено, что два «лишних» байта при кодировании первого блока «заворачиваются» на начало буфера, а в найденных эмуляторах Apple берутся нулевыми, что не влияет на раскодированные данные, но меняет контрольную сумму.<br />
* Порядок секторов 0x0,0xD,0xB,0x9,0x7,0x5,0x3,0x1,0xE,0xC,0xA,0x8,0x6,0x4,0x2,0xF — при этом в файле DSK они находятся именно в таком порядке, и при генерации NIB-трека их переставлять не нужно.<br />
* Как и в Apple Disk ][, число физических дорожек равно 70, но стандартно используется только каждая вторая, следовательно, номер дорожки в образе равен половине номера физической дорожки.<br />
<br />
Документация по nib-формату:<br />
* https://github.com/fadden/CiderPress2/blob/main/DiskArc/Disk/Nibble-notes.md<br />
* https://github.com/fadden/CiderPress2/blob/main/DiskArc/Disk/Unadorned-notes.md<br />
<br />
== Агат-9 ==<br />
=== Распределение портов ===<br />
* C000-C00F ― регистр данных клавиатуры.<br />
* C010-C01F ― очистка регистра данных клавиатуры.<br />
* C020-C02F ― магнитофон?<br />
* C030-C03F ― звук? <br />
* C040-C04F ― ?<br />
* C050-C057 ― чт/зп ― видеорежим Apple, переключение ДК в режим Apple (ПА <= 0).<br />
* C058-C05F ― ?<br />
* C060-C06F ― клавиатура, пульты.<br />
* C070-C07F ― ? <br />
* C080-C08F ― режим пзу, псевдо-пзу, сегмента D000-DFFF.<br />
* C0F0-C0FF ― запись ― переключение ПМ <= 1, чтение ― ?.<br />
* C100-C1FF ― запись ― переключение страниц памяти, чтение ― возврат номера подключенного банка.<br />
* C200-C2FF ― разъём 2.<br />
* C300-C3FF ― разъём 3.<br />
* C400-C4FF ― разъём 4.<br />
* C500-C5FF ― разъём 5.<br />
* C700-C7FF ― Видеорежим Агат, переключение ДК а режим Агат/Apple (ПА)<br />
<br />
=== ПА и ПМ ===<br />
* '''ПМ''' ― «Признак Машины»<br />
** 0 ― ОЗУ в режиме Агат, только сброс.<br />
** 1 ― ОЗУ в режиме Apple, запись по адресу C0F0-C0FF<br />
* '''ПА''' ― «Признак Apple»<br />
** 0 ― ДК в режиме Apple, обращение (ч/з) по адресам C050-C057 <br/>или C700-C7FF (при ПМ==1)<br />
** 1 ― ДК в режиме Агат, сброс или обращение по адресам C700-C7FF при ПМ==0<br />
<br />
'''Внимание! В отдельных изданиях официальной документации названия сигналов перепутаны!'''<br />
<br />
=== Порт клавиатуры ===<br />
Для работы с клавиатурой используются следующие порты ввода-вывода:<br />
* C000&mdash;C00F &ndash; код нажатой клавиши (младшие 7 битов). Старший бит, равный 1, означает, что код готов к чтению.<br />
* C063 &ndash; линия Р/Л, старший бит кода нажатой клавиши (бит 7).<br />
* C010&mdash;C01F &ndash; обращение по этим адресам сбрасывает буфер для приема следующей клавиши.<br />
<br />
[[Категория:Агат]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%90%D0%B3%D0%B0%D1%82/%D0%A2%D0%B5%D1%85%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8F&diff=3749Агат/Техническая информация2024-02-14T09:11:30Z<p>Panther: /* Агат-9 */</p>
<hr />
<div>{{Emuverse}}<br />
<br />
== Контроллер и дисковод 140к ==<br />
* Физические параметры: сторон: 1 (0), дорожек: 35 (0-34), секторов: 16 (0-15). Нумерация секторов от 0!<br />
* Используется свой алгоритм кодирования [https://en.wikipedia.org/wiki/Group_coded_recording GCR 6.2], отличающийся от Apple Disk ][?<br />
** Пока замечено, что два «лишних» байта при кодировании первого блока «заворачиваются» на начало буфера, а в найденных эмуляторах Apple берутся нулевыми, что не влияет на раскодированные данные, но меняет контрольную сумму.<br />
* Порядок секторов 0x0,0xD,0xB,0x9,0x7,0x5,0x3,0x1,0xE,0xC,0xA,0x8,0x6,0x4,0x2,0xF — при этом в файле DSK они находятся именно в таком порядке, и при генерации NIB-трека их переставлять не нужно.<br />
* Как и в Apple Disk ][, число физических дорожек равно 70, но стандартно используется только каждая вторая, следовательно, номер дорожки в образе равен половине номера физической дорожки.<br />
<br />
Документация по nib-формату:<br />
* https://github.com/fadden/CiderPress2/blob/main/DiskArc/Disk/Nibble-notes.md<br />
* https://github.com/fadden/CiderPress2/blob/main/DiskArc/Disk/Unadorned-notes.md<br />
<br />
== Агат-9 ==<br />
=== Распределение портов ===<br />
* C000-C00F ― регистр данных клавиатуры.<br />
* C010-C01F ― очистка регистра данных клавиатуры.<br />
* C020-C02F ― магнитофон?<br />
* C030-C03F ― звук? <br />
* C040-C04F ― ?<br />
* C050-C057 ― чт/зп ― видеорежим Apple, переключение ДК в режим Apple (ПМ <= 0).<br />
* C058-C05F ― ?<br />
* C060-C06F ― клавиатура, пульты.<br />
* C070-C07F ― ? <br />
* C080-C08F ― режим пзу, псевдо-пзу, сегмента D000-DFFF.<br />
* C0F0-C0FF ― запись ― переключение ПА <= 1, чтение ― ?.<br />
* C100-C1FF ― запись ― переключение страниц памяти, чтение ― возврат номера подключенного банка.<br />
* C200-C2FF ― разъём 2.<br />
* C300-C3FF ― разъём 3.<br />
* C400-C4FF ― разъём 4.<br />
* C500-C5FF ― разъём 5.<br />
* C700-C7FF ― Видеорежим Агат, переключение ДК а режим Агат/Apple (ПМ)<br />
<br />
=== ПА и ПМ ===<br />
* '''ПА''' ― «Признак Apple»<br />
** 0 ― ОЗУ в режиме Агат, только сброс.<br />
** 1 ― ОЗУ в режиме Apple, запись по адресу C0F0-C0FF<br />
* '''ПМ''' ― «Признак Машины»<br />
** 0 ― ДК в режиме Apple, обращение (ч/з) по адресам C050-C057 <br/>или C700-C7FF (при ПА==1)<br />
** 1 ― ДК в режиме Агат, сброс или обращение по адресам C700-C7FF при ПА==0<br />
<br />
=== Порт клавиатуры ===<br />
Для работы с клавиатурой используются следующие порты ввода-вывода:<br />
* C000&mdash;C00F &ndash; код нажатой клавиши (младшие 7 битов). Старший бит, равный 1, означает, что код готов к чтению.<br />
* C063 &ndash; линия Р/Л, старший бит кода нажатой клавиши (бит 7).<br />
* C010&mdash;C01F &ndash; обращение по этим адресам сбрасывает буфер для приема следующей клавиши.<br />
<br />
[[Категория:Агат]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%90%D0%B3%D0%B0%D1%82/%D0%A2%D0%B5%D1%85%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8F&diff=3748Агат/Техническая информация2024-02-14T09:10:22Z<p>Panther: /* ПА и ПМ */</p>
<hr />
<div>{{Emuverse}}<br />
<br />
== Контроллер и дисковод 140к ==<br />
* Физические параметры: сторон: 1 (0), дорожек: 35 (0-34), секторов: 16 (0-15). Нумерация секторов от 0!<br />
* Используется свой алгоритм кодирования [https://en.wikipedia.org/wiki/Group_coded_recording GCR 6.2], отличающийся от Apple Disk ][?<br />
** Пока замечено, что два «лишних» байта при кодировании первого блока «заворачиваются» на начало буфера, а в найденных эмуляторах Apple берутся нулевыми, что не влияет на раскодированные данные, но меняет контрольную сумму.<br />
* Порядок секторов 0x0,0xD,0xB,0x9,0x7,0x5,0x3,0x1,0xE,0xC,0xA,0x8,0x6,0x4,0x2,0xF — при этом в файле DSK они находятся именно в таком порядке, и при генерации NIB-трека их переставлять не нужно.<br />
* Как и в Apple Disk ][, число физических дорожек равно 70, но стандартно используется только каждая вторая, следовательно, номер дорожки в образе равен половине номера физической дорожки.<br />
<br />
Документация по nib-формату:<br />
* https://github.com/fadden/CiderPress2/blob/main/DiskArc/Disk/Nibble-notes.md<br />
* https://github.com/fadden/CiderPress2/blob/main/DiskArc/Disk/Unadorned-notes.md<br />
<br />
== Агат-9 ==<br />
=== Распределение портов ===<br />
* C000-C00F ― регистр данных клавиатуры.<br />
* C010-C01F ― очистка регистра данных клавиатуры.<br />
* C020-C02F ― магнитофон?<br />
* C030-C03F ― звук? <br />
* C040-C04F ― ?<br />
* C050-C05F ― чт/зп ― видеорежим Apple, переключение ДК в режим Apple (ПМ <= 0).<br />
* C060-C06F ― клавиатура, пульты.<br />
* C070-C07F ― ? <br />
* C080-C08F ― режим пзу, псевдо-пзу, сегмента D000-DFFF.<br />
* C0F0-C0FF ― запись ― переключение ПА <= 1, чтение ― ?.<br />
* C100-C1FF ― запись ― переключение страниц памяти, чтение ― возврат номера подключенного банка.<br />
* C200-C2FF ― разъём 2.<br />
* C300-C3FF ― разъём 3.<br />
* C400-C4FF ― разъём 4.<br />
* C500-C5FF ― разъём 5.<br />
* C700-C7FF ― Видеорежим Агат, переключение ДК а режим Агат/Apple (ПМ)<br />
<br />
=== ПА и ПМ ===<br />
* '''ПА''' ― «Признак Apple»<br />
** 0 ― ОЗУ в режиме Агат, только сброс.<br />
** 1 ― ОЗУ в режиме Apple, запись по адресу C0F0-C0FF<br />
* '''ПМ''' ― «Признак Машины»<br />
** 0 ― ДК в режиме Apple, обращение (ч/з) по адресам C050-C057 <br/>или C700-C7FF (при ПА==1)<br />
** 1 ― ДК в режиме Агат, сброс или обращение по адресам C700-C7FF при ПА==0<br />
<br />
=== Порт клавиатуры ===<br />
Для работы с клавиатурой используются следующие порты ввода-вывода:<br />
* C000&mdash;C00F &ndash; код нажатой клавиши (младшие 7 битов). Старший бит, равный 1, означает, что код готов к чтению.<br />
* C063 &ndash; линия Р/Л, старший бит кода нажатой клавиши (бит 7).<br />
* C010&mdash;C01F &ndash; обращение по этим адресам сбрасывает буфер для приема следующей клавиши.<br />
<br />
[[Категория:Агат]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%90%D0%B3%D0%B0%D1%82/%D0%A2%D0%B5%D1%85%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8F&diff=3747Агат/Техническая информация2024-02-14T09:07:18Z<p>Panther: /* ПА и ПМ */</p>
<hr />
<div>{{Emuverse}}<br />
<br />
== Контроллер и дисковод 140к ==<br />
* Физические параметры: сторон: 1 (0), дорожек: 35 (0-34), секторов: 16 (0-15). Нумерация секторов от 0!<br />
* Используется свой алгоритм кодирования [https://en.wikipedia.org/wiki/Group_coded_recording GCR 6.2], отличающийся от Apple Disk ][?<br />
** Пока замечено, что два «лишних» байта при кодировании первого блока «заворачиваются» на начало буфера, а в найденных эмуляторах Apple берутся нулевыми, что не влияет на раскодированные данные, но меняет контрольную сумму.<br />
* Порядок секторов 0x0,0xD,0xB,0x9,0x7,0x5,0x3,0x1,0xE,0xC,0xA,0x8,0x6,0x4,0x2,0xF — при этом в файле DSK они находятся именно в таком порядке, и при генерации NIB-трека их переставлять не нужно.<br />
* Как и в Apple Disk ][, число физических дорожек равно 70, но стандартно используется только каждая вторая, следовательно, номер дорожки в образе равен половине номера физической дорожки.<br />
<br />
Документация по nib-формату:<br />
* https://github.com/fadden/CiderPress2/blob/main/DiskArc/Disk/Nibble-notes.md<br />
* https://github.com/fadden/CiderPress2/blob/main/DiskArc/Disk/Unadorned-notes.md<br />
<br />
== Агат-9 ==<br />
=== Распределение портов ===<br />
* C000-C00F ― регистр данных клавиатуры.<br />
* C010-C01F ― очистка регистра данных клавиатуры.<br />
* C020-C02F ― магнитофон?<br />
* C030-C03F ― звук? <br />
* C040-C04F ― ?<br />
* C050-C05F ― чт/зп ― видеорежим Apple, переключение ДК в режим Apple (ПМ <= 0).<br />
* C060-C06F ― клавиатура, пульты.<br />
* C070-C07F ― ? <br />
* C080-C08F ― режим пзу, псевдо-пзу, сегмента D000-DFFF.<br />
* C0F0-C0FF ― запись ― переключение ПА <= 1, чтение ― ?.<br />
* C100-C1FF ― запись ― переключение страниц памяти, чтение ― возврат номера подключенного банка.<br />
* C200-C2FF ― разъём 2.<br />
* C300-C3FF ― разъём 3.<br />
* C400-C4FF ― разъём 4.<br />
* C500-C5FF ― разъём 5.<br />
* C700-C7FF ― Видеорежим Агат, переключение ДК а режим Агат/Apple (ПМ)<br />
<br />
=== ПА и ПМ ===<br />
* '''ПА''' ― «Признак Apple»<br />
** 0 ― ОЗУ в режиме Агат, только сброс.<br />
** 1 ― ОЗУ в режиме Apple, запись по адресу C0F0-C0FF<br />
* '''ПМ''' ― «Признак Машины»<br />
** 0 ― ДК в режиме Apple, обращение (ч/з) по адресам C050-C05F <br/>или C700-C7FF (при ПА==1)<br />
** 1 ― ДК в режиме Агат, сброс или обращение по адресам C700-C7FF при ПА==0<br />
<br />
=== Порт клавиатуры ===<br />
Для работы с клавиатурой используются следующие порты ввода-вывода:<br />
* C000&mdash;C00F &ndash; код нажатой клавиши (младшие 7 битов). Старший бит, равный 1, означает, что код готов к чтению.<br />
* C063 &ndash; линия Р/Л, старший бит кода нажатой клавиши (бит 7).<br />
* C010&mdash;C01F &ndash; обращение по этим адресам сбрасывает буфер для приема следующей клавиши.<br />
<br />
[[Категория:Агат]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%90%D0%B3%D0%B0%D1%82/%D0%A2%D0%B5%D1%85%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8F&diff=3746Агат/Техническая информация2024-02-14T09:00:31Z<p>Panther: /* Распределение портов */</p>
<hr />
<div>{{Emuverse}}<br />
<br />
== Контроллер и дисковод 140к ==<br />
* Физические параметры: сторон: 1 (0), дорожек: 35 (0-34), секторов: 16 (0-15). Нумерация секторов от 0!<br />
* Используется свой алгоритм кодирования [https://en.wikipedia.org/wiki/Group_coded_recording GCR 6.2], отличающийся от Apple Disk ][?<br />
** Пока замечено, что два «лишних» байта при кодировании первого блока «заворачиваются» на начало буфера, а в найденных эмуляторах Apple берутся нулевыми, что не влияет на раскодированные данные, но меняет контрольную сумму.<br />
* Порядок секторов 0x0,0xD,0xB,0x9,0x7,0x5,0x3,0x1,0xE,0xC,0xA,0x8,0x6,0x4,0x2,0xF — при этом в файле DSK они находятся именно в таком порядке, и при генерации NIB-трека их переставлять не нужно.<br />
* Как и в Apple Disk ][, число физических дорожек равно 70, но стандартно используется только каждая вторая, следовательно, номер дорожки в образе равен половине номера физической дорожки.<br />
<br />
Документация по nib-формату:<br />
* https://github.com/fadden/CiderPress2/blob/main/DiskArc/Disk/Nibble-notes.md<br />
* https://github.com/fadden/CiderPress2/blob/main/DiskArc/Disk/Unadorned-notes.md<br />
<br />
== Агат-9 ==<br />
=== Распределение портов ===<br />
* C000-C00F ― регистр данных клавиатуры.<br />
* C010-C01F ― очистка регистра данных клавиатуры.<br />
* C020-C02F ― магнитофон?<br />
* C030-C03F ― звук? <br />
* C040-C04F ― ?<br />
* C050-C05F ― чт/зп ― видеорежим Apple, переключение ДК в режим Apple (ПМ <= 0).<br />
* C060-C06F ― клавиатура, пульты.<br />
* C070-C07F ― ? <br />
* C080-C08F ― режим пзу, псевдо-пзу, сегмента D000-DFFF.<br />
* C0F0-C0FF ― запись ― переключение ПА <= 1, чтение ― ?.<br />
* C100-C1FF ― запись ― переключение страниц памяти, чтение ― возврат номера подключенного банка.<br />
* C200-C2FF ― разъём 2.<br />
* C300-C3FF ― разъём 3.<br />
* C400-C4FF ― разъём 4.<br />
* C500-C5FF ― разъём 5.<br />
* C700-C7FF ― Видеорежим Агат, переключение ДК а режим Агат/Apple (ПМ)<br />
<br />
=== ПА и ПМ ===<br />
* '''ПА''' ― «Признак Apple»<br />
** 0 ― ОЗУ в режиме Агат, только сброс.<br />
** 1 ― ОЗУ в режиме Apple, запись по адресу C0F0-C0FF<br />
* '''ПМ''' ― «Признак Машины»<br />
** 0 ― ДК в режиме Apple, обращение (ч/з) по адресам C050-C05F <br/>или C700-C7FF (при ПА==1)<br />
** 1 ― ДК в режиме Агат, обращение по адресам C700-C7FF при ПА==0<br />
<br />
=== Порт клавиатуры ===<br />
Для работы с клавиатурой используются следующие порты ввода-вывода:<br />
* C000&mdash;C00F &ndash; код нажатой клавиши (младшие 7 битов). Старший бит, равный 1, означает, что код готов к чтению.<br />
* C063 &ndash; линия Р/Л, старший бит кода нажатой клавиши (бит 7).<br />
* C010&mdash;C01F &ndash; обращение по этим адресам сбрасывает буфер для приема следующей клавиши.<br />
<br />
[[Категория:Агат]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%90%D0%B3%D0%B0%D1%82/%D0%A2%D0%B5%D1%85%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8F&diff=3745Агат/Техническая информация2024-02-14T08:54:28Z<p>Panther: /* Контроллер и дисковод 140к */</p>
<hr />
<div>{{Emuverse}}<br />
<br />
== Контроллер и дисковод 140к ==<br />
* Физические параметры: сторон: 1 (0), дорожек: 35 (0-34), секторов: 16 (0-15). Нумерация секторов от 0!<br />
* Используется свой алгоритм кодирования [https://en.wikipedia.org/wiki/Group_coded_recording GCR 6.2], отличающийся от Apple Disk ][?<br />
** Пока замечено, что два «лишних» байта при кодировании первого блока «заворачиваются» на начало буфера, а в найденных эмуляторах Apple берутся нулевыми, что не влияет на раскодированные данные, но меняет контрольную сумму.<br />
* Порядок секторов 0x0,0xD,0xB,0x9,0x7,0x5,0x3,0x1,0xE,0xC,0xA,0x8,0x6,0x4,0x2,0xF — при этом в файле DSK они находятся именно в таком порядке, и при генерации NIB-трека их переставлять не нужно.<br />
* Как и в Apple Disk ][, число физических дорожек равно 70, но стандартно используется только каждая вторая, следовательно, номер дорожки в образе равен половине номера физической дорожки.<br />
<br />
Документация по nib-формату:<br />
* https://github.com/fadden/CiderPress2/blob/main/DiskArc/Disk/Nibble-notes.md<br />
* https://github.com/fadden/CiderPress2/blob/main/DiskArc/Disk/Unadorned-notes.md<br />
<br />
== Агат-9 ==<br />
=== Распределение портов ===<br />
* C050-C05F ― чт/зп ― видеорежим Apple, переключение ДК в режим Apple (ПМ <= 0).<br />
* C080-C08F ― режим пзу, псевдо-пзу, сегмента D000-DFFF.<br />
* C0F0-C0FF ― запись ― переключение ПА <= 1, чтение ― ?.<br />
* C100-C1FF ― запись ― переключение страниц памяти, чтение ― возврат номера подключенного банка.<br />
* C200-C2FF ― разъём 2.<br />
* C300-C3FF ― разъём 3.<br />
* C400-C4FF ― разъём 4.<br />
* C500-C5FF ― разъём 5.<br />
* C700-C7FF ― Видеорежим Агат, переключение ДК а режим Агат/Apple (ПМ)<br />
<br />
=== ПА и ПМ ===<br />
* '''ПА''' ― «Признак Apple»<br />
** 0 ― ОЗУ в режиме Агат, только сброс.<br />
** 1 ― ОЗУ в режиме Apple, запись по адресу C0F0-C0FF<br />
* '''ПМ''' ― «Признак Машины»<br />
** 0 ― ДК в режиме Apple, обращение (ч/з) по адресам C050-C05F <br/>или C700-C7FF (при ПА==1)<br />
** 1 ― ДК в режиме Агат, обращение по адресам C700-C7FF при ПА==0<br />
<br />
=== Порт клавиатуры ===<br />
Для работы с клавиатурой используются следующие порты ввода-вывода:<br />
* C000&mdash;C00F &ndash; код нажатой клавиши (младшие 7 битов). Старший бит, равный 1, означает, что код готов к чтению.<br />
* C063 &ndash; линия Р/Л, старший бит кода нажатой клавиши (бит 7).<br />
* C010&mdash;C01F &ndash; обращение по этим адресам сбрасывает буфер для приема следующей клавиши.<br />
<br />
[[Категория:Агат]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%90%D0%B3%D0%B0%D1%82/%D0%A2%D0%B5%D1%85%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8F&diff=3744Агат/Техническая информация2024-02-14T08:47:12Z<p>Panther: /* Агат-9 */</p>
<hr />
<div>{{Emuverse}}<br />
<br />
== Контроллер и дисковод 140к ==<br />
* Физические параметры: сторон: 1 (0), дорожек: 35 (0-34), секторов: 16 (0-15). Нумерация секторов от 0!<br />
* Используется свой алгоритм кодирования [https://en.wikipedia.org/wiki/Group_coded_recording GCR 6.2], отличающийся от Apple Disk ][?<br />
* Порядок секторов 0x0,0xD,0xB,0x9,0x7,0x5,0x3,0x1,0xE,0xC,0xA,0x8,0x6,0x4,0x2,0xF — при этом в файле DSK они находятся именно в таком порядке, и при генерации NIB-трека их переставлять не нужно.<br />
* Как и в Apple Disk ][, число физических дорожек равно 70, но стандартно используется только каждая вторая, следовательно, номер дорожки в образе равен половине номера физической дорожки.<br />
<br />
Документация по nib-формату:<br />
* https://github.com/fadden/CiderPress2/blob/main/DiskArc/Disk/Nibble-notes.md<br />
* https://github.com/fadden/CiderPress2/blob/main/DiskArc/Disk/Unadorned-notes.md<br />
<br />
== Агат-9 ==<br />
=== Распределение портов ===<br />
* C050-C05F ― чт/зп ― видеорежим Apple, переключение ДК в режим Apple (ПМ <= 0).<br />
* C080-C08F ― режим пзу, псевдо-пзу, сегмента D000-DFFF.<br />
* C0F0-C0FF ― запись ― переключение ПА <= 1, чтение ― ?.<br />
* C100-C1FF ― запись ― переключение страниц памяти, чтение ― возврат номера подключенного банка.<br />
* C200-C2FF ― разъём 2.<br />
* C300-C3FF ― разъём 3.<br />
* C400-C4FF ― разъём 4.<br />
* C500-C5FF ― разъём 5.<br />
* C700-C7FF ― Видеорежим Агат, переключение ДК а режим Агат/Apple (ПМ)<br />
<br />
=== ПА и ПМ ===<br />
* '''ПА''' ― «Признак Apple»<br />
** 0 ― ОЗУ в режиме Агат, только сброс.<br />
** 1 ― ОЗУ в режиме Apple, запись по адресу C0F0-C0FF<br />
* '''ПМ''' ― «Признак Машины»<br />
** 0 ― ДК в режиме Apple, обращение (ч/з) по адресам C050-C05F <br/>или C700-C7FF (при ПА==1)<br />
** 1 ― ДК в режиме Агат, обращение по адресам C700-C7FF при ПА==0<br />
<br />
=== Порт клавиатуры ===<br />
Для работы с клавиатурой используются следующие порты ввода-вывода:<br />
* C000&mdash;C00F &ndash; код нажатой клавиши (младшие 7 битов). Старший бит, равный 1, означает, что код готов к чтению.<br />
* C063 &ndash; линия Р/Л, старший бит кода нажатой клавиши (бит 7).<br />
* C010&mdash;C01F &ndash; обращение по этим адресам сбрасывает буфер для приема следующей клавиши.<br />
<br />
[[Категория:Агат]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%9F%D0%B0%D1%80%D1%82%D0%BD%D1%91%D1%80_01.01&diff=3743Партнёр 01.012024-02-06T10:36:30Z<p>Panther: /* Документация */ + 1</p>
<hr />
<div>{{Википедия|Партнер 01.01}}<br />
{{Карточка компьютера<br />
| Photo = <br />
| Type = Домашний компьютер<br />
| Released = 1987<br />
| Discontinued = <br />
| Processor = [[КР580ВМ80А]]<br />
| Memory = ОЗУ — 64 КБ, ПЗУ — 16 KБ<br />
| OS = <br />
}}<br />
'''«Партнер 01.01»''' — советский 8-разрядный бытовой компьютер. Разработан на основе схемотехники [[Радио 86РК]] и сохраняет с ним частичную программную совместимость. Серийно выпускался на производственном объединении «САМ» СКБ ВМ в г.Рязань примерно с середины 1987 года.<br />
<br />
== Технические характеристики ==<br />
* Процессор: [[КР580ВМ80А]]<br />
* Быcтродействие: 370 тысяч (регистровых) операций в секунду<br />
* Память: [[ОЗУ]] — 64 [[Килобайт|КБ]], [[Постоянное запоминающее устройство|ПЗУ]] — 16 КБ (ROM-BIOS, монитор, редактор текстов и бейсик)<br />
* Разрешение экрана: текстовый режим 25 строк по 64 символа, монохром (с модулем МЦПГ — 8 цветов). Полноценного графического режима нет, но есть псевдографика с разрешением 128×62 и 128×129.<br />
* Габариты: 418×334×64 мм<br />
* Масса: 3,7 кг<br />
* Потребляемая мощность: 22 Вт<br />
<br />
<br />
Выполнен в виде моноблока, в котором размещены блок питания, плата и клавиатура. В качестве устройства вывода использовался обычный телевизор (через антенный вход) либо монитор «Электроника» МС 6105. Внешнее запоминающее устройство — бытовой кассетный магнитофон.<br />
<br />
В отличие от «Радио-86РК», имеющего возможность отображения набора лишь из 128 символов, знакогенератор ПК «Партнёр» имеет 8 наборов символов, переключаемых программно. Среди них присутствуют: стандартный набор символов «Радио-86РК», основанный на [[КОИ-7]] Н2 (смешанный русско-английский, только заглавные буквы, отсутствует твёрдый знак и буква Ё), полноценные наборы символов русского и английского языков с заглавными и строчными буквами (так называемая [[Основная кодировка]] ГОСТ), несколько наборов псевдографики.<br />
<br />
Отличительная особенность ПК Партнер — возможность подключения дополнительных модулей. Модули — небольшие одноплатные картриджи в пластмассовом корпусе. К ПЭВМ можно подключить до восьми модулей (4 — к моноблоку и 4 — к дополнительному расширителю)<br />
* Партнер-02.01 — Модуль параллельного интерфейса<br />
* Партнер-03.11 — Модуль программатора ПЗУ<br />
* Партнер-01.61 — Модуль цветной псевдографический (МЦПГ)<br />
* Партнер-01.51 — Модуль контроллера дисковода<br />
* Партнер-02.11 — Модуль последовательного интерфейса<br />
<br />
Модуль МЦПГ позволял подключать компьютер к цветным телевизорам, имеющим RGB-вход, и расширял графические и звуковые возможности компьютера. В состав модуля входили [[видеоконтроллер]] [[КР580ВГ75]], микросхема таймера [[КР580ВИ53]] и [[ОЗУ]] [[знакогенератор]]а на двух микросхемах КР537РУ10, общим объёмом 4 КБ. Видеоконтроллер работал параллельно с видеоконтроллером компьютера и позволял отображать поверх обычного текстового экрана цветное изображение, создаваемое из загружаемых в ОЗУ знакогенератора символов. При этом разрешение графики, выводимой МЦПГ, не совпадало с разрешением текстового экрана (символы 4×8 вместо 6×8 пикселей). Микросхема таймера использовалась в качестве трёхканального синтезатора звука. В комплект поставки модуля входила [[магнитофонная кассета|кассета]] с [[графические программы|графической программой]] и несколькими играми, поддерживающими возможности МЦПГ.<ref>[http://bashkiria-2m.narod.ru/arendatr/MODULES/r0161.htm Руководство по эксплуатации]</ref><br />
<br />
== Программное обеспечение ==<br />
<br />
Вместе с компьютером поставлялось программное обеспечение на кассетах — языки [[Бейсик]], [[Язык ассемблера|Ассемблер]], [[Форт (язык программирования)|Форт]].<br />
В ПЗУ компьютера было прошито следующее ПО:<br />
* операционная система «Монитор» (сильно расширенная версия «Монитора» [[Радио 86РК]], учитывавшая продвинутые возможности Партнёра), было выпущено 3 версии «Монитора»;<br />
* интерпретатор языка Бейсик (почти полный клон Basic *MICRON* [[Радио 86РК]]), интерпретатор загружался в ОЗУ за 2 секунды;<br />
* строчный редактор и ассемблер, заимствованные у [[Радио 86РК]].<br />
Полная программная совместимость с [[Радио 86РК]], [[Микроша]], [[Апогей БК-01]] отсутствует (т.к. другие адреса экранного буфера и портов БИС), но общность технических решений и входных точек стандартных подпрограмм ROM-BIOS позволяла легко адаптировать несовместимые программы с этих компьютеров на Партнёр, благодаря чему было доступно множество системных и игровых программ.<br />
При подключении модуля контроллера дисковода возможно использование адаптированной версии ОС [[CP/M]] с дискетами формата 360 кб.<br />
<br />
== Публикации ==<br />
* [[Партнёр/Радиолюбитель 1994/Большие возможности ПК «Партнёр»|Большие возможности ПК «Партнёр»]] — «Радиолюбитель», 1994.<br />
<br />
== Документация ==<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/Partner/docs/Partner_Schematics_Album.djvu Альбом схем]<br />
* {{pdf}} [https://emuverse.ru/downloads/computers/Partner/docs/Partner_Operators_Manual.pdf Руководство оператора] ([https://xlat.livejournal.com/559201.html источник])<br />
<br />
== Ссылки ==<br />
* [http://arendatr.chat.ru/ Сайт Михаила Голованова]<br />
* [http://bashkiria-2m.narod.ru/ Эмулятор]<br />
<br />
== Файлы ==<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Partner/firmware/ Несколько вариантов ПЗУ]<br />
* {{zip}} [https://emuverse.ru/downloads/computers/Partner/software/ Коллекция программ]<br />
<br />
[[Категория:Партнёр|*]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%9E%D1%80%D0%B8%D0%BE%D0%BD-128&diff=3741Орион-1282024-02-03T18:04:20Z<p>Panther: /* Ссылки */</p>
<hr />
<div>{{Википедия}}<br />
<br />
'''«Орион-128»''' — любительский 8-разрядный [[персональный компьютер]]. Разработан радиолюбителями из подмосковья — Вячеславом Сафроновым, Владиславом Сугоняко, Константином Коненковым. Схема и описание компьютера были опубликованы в [[Радио (журнал)|журнале «Радио»]] № 1/[[1990]], другие материалы по теме публиковались в этом журнале до [[1996]] года.<br />
<br />
Технические характеристики:<br />
* Процессор: [[КР580ВМ80А]] на частоте 2,5 МГц, быстродействие 625 тысяч оп/сек.<br />
* Память: [[ОЗУ]] — 128 Кб с возможностью наращивания до 256 Кб, [[ПЗУ]] — 2&nbsp;Kб<br />
* Устройство вывода: телевизор; работа в графическом режиме 384&nbsp;&times;&nbsp;256 точек; 25 строк по 64 символа при использовании стандарного шрифта; цветность: монохромный, 4, 16 цветов<br />
* Внешняя память: бытовой магнитофон, ROM-диск 64 Кб, DD дисковод<br />
* Клавиатура: 64 клавиши в матрице 8*8 плюс 3 отдельных или промышленная клавиатура MS7007<br />
<br />
== Программное обеспечение ==<br />
* Монитор 1/2/3<br />
* Операционные системы: ORDOS 2.40/4.03, [[CP/M]] 2.2, SPDOS, [http://orion-128.narod.ru DSDOS]<br />
* Написанные любителями и адаптированные игры<br />
<br />
== См. также ==<br />
* [[Орион-Про]]<br />
<br />
== Ссылки ==<br />
* [http://emu80.org/ Эмулятор Ориона Виктора Пыхонина]<br />
* [https://github.com/serge-404/OriZEmu Эмулятор Ориона Orion/Z от Error404]<br />
* [http://rdk.regionsv.ru/orion128.htm ПК Орион-128 возрождение, модернизация, клоны, апгрейд, Орион-Про]<br />
* [http://www.computer-museum.ru/histussr/orion.htm История компьютера «Орион» на сайте Виртуального компьютерного музея]<br />
* <s>[http://orion-z.hoter.ru/ Исполняемые файлы и исходные тексты эмулятора Орион/Z (Орион + Z80), вспомогательных утилит, архивы игр и программ Ориона]</s><br />
* <s>[http://gri.irk.ru/orion/ Сайт эмулятора Ориона на процессоре КР580ВМ80 (i8080)]</s><br />
* <s>[http://orion128.nikom.biz/ Информация о истории и развитии Ориона (документация, программы Ориона)]</s><br />
<br />
== Документация ==<br />
* [[:Категория:Орион-128/Публикации|Публикации в журнале Радио]]<br />
* [[Орион-128/Техническая информация|Техническая информация]]<br />
* [[Орион-128/Радио 12-92/Контроллер НГМД|Контроллер дисковода]] (Вариант 1, SP-DOS)<br />
* [[Орион-128/Радио 05,06-93/СР/М-80. Контроллер дисковода|Контроллер дисковода]] (Вариант 2, CP/M)<br />
* {{djvu}}{{статья<br />
|заглавие = Операционная система СР/М-80 для ПРК «Орион-128»<br />
|издание = журнал «Радиолюбитель»<br />
|номер = 11, 12, 1, 2, 3<br />
|год = 1992, 1993<br />
|ссылка = https://emuverse.ru/downloads/computers/Orion-128/docs/Orion-128_CPM.djvu<br />
}}<br />
* {{djvu}}{{статья<br />
|заглавие = «Орион-128»: контроллер дисковода<br />
|издание = журнал «Радиолюбитель»<br />
|номер = 5-7<br />
|год = 1993<br />
|ссылка = https://emuverse.ru/downloads/computers/Orion-128/docs/Orion-128_FDC.djvu<br />
}}<br />
* [[Орион-128/ZCard-II|Установка Z80]] («Ленинградский вариант», Z80Card-II, ставший стандартом де-факто)<br />
* [[Орион-128/Радио 04,06-96/Z80 CARD|Установка Z80]] («Орион-Сервис», «Московский», Z80Card)<br />
<br />
=== Схемы ===<br />
* {{rar}} [https://emuverse.ru/downloads/computers/Orion-Pro/docs/OrionPro-PCAD.rar Комплект схем]. Авторские схемы в формате PCAD 4.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/Scheme_corrected.png Схема 1]. Оригинал из журнала, с исправлениями.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/Orion_scheme.png Схема 2]. Авторский доработанный вариант.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/ROMDISK_scheme.png ROM-DISK].<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/Z80-1.png Установка Z80]. Авторский вариант, плата в панель ВМ80.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/Z80CardII.png Z80Card-II]. «Ленинградский вариант» Чистякова.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/KTR.png Контроллер дисковода]. Авторский вариант.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/FDC-Altair-Scheme.png Контроллер дисковода]. Вариант «Altair» Чистякова.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/512VI1_orion.GIF RTC]. Часы реального времени. Вариант [http://orion-z.hoter.ru Error404].<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/IDE-RTC.gif IDE+RTC]. «Смоленский» вариант.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/COM-AY.gif COM+AY]. Установка RS-232 и AY-8910.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/scr400x256-AY8910.jpg 400х256+AY]. Отключение 400х256 и AY-8910.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/11MHz-scr480x256-Turbo3,9.jpg Турбо+480х256]. Два турбо-режима и расширенный экран.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/turbo3,5-kempston-RAM_protect.jpg Турбо+Kempston+RAM]. Турбо-режим, джойстик, полное использование RAM.<br />
<br />
== Файлы ==<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Orion-128/firmware/Orion128_M1.rom Монитор-1]<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Orion-128/firmware/Orion128_M2.rom Монитор-2]<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Orion-128/firmware/Orion128_M31.rom Монитор-3]<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Orion-128/firmware/Orion128_RomDisk1.rom Образ ROM-диска 1]<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Orion-128/firmware/Orion128_RomDisk4.rom Образ ROM-диска 2]<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Orion-128/firmware/RAM_TEST.BIN RAM-TEST]<br />
<br />
[[Категория:Орион-128|*]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%90%D0%B3%D0%B0%D1%82/%D0%A2%D0%B5%D1%85%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8F&diff=3740Агат/Техническая информация2024-01-26T22:07:38Z<p>Panther: </p>
<hr />
<div>{{Emuverse}}<br />
<br />
== Контроллер и дисковод 140к ==<br />
* Физические параметры: сторон: 1 (0), дорожек: 35 (0-34), секторов: 16 (0-15). Нумерация секторов от 0!<br />
* Используется свой алгоритм кодирования [https://en.wikipedia.org/wiki/Group_coded_recording GCR 6.2], отличающийся от Apple Disk ][?<br />
* Порядок секторов 0x0,0xD,0xB,0x9,0x7,0x5,0x3,0x1,0xE,0xC,0xA,0x8,0x6,0x4,0x2,0xF — при этом в файле DSK они находятся именно в таком порядке, и при генерации NIB-трека их переставлять не нужно.<br />
* Как и в Apple Disk ][, число физических дорожек равно 70, но стандартно используется только каждая вторая, следовательно, номер дорожки в образе равен половине номера физической дорожки.<br />
<br />
Документация по nib-формату:<br />
* https://github.com/fadden/CiderPress2/blob/main/DiskArc/Disk/Nibble-notes.md<br />
* https://github.com/fadden/CiderPress2/blob/main/DiskArc/Disk/Unadorned-notes.md<br />
<br />
== Агат-9 ==<br />
=== Порт клавиатуры ===<br />
Для работы с клавиатурой используются следующие порты ввода-вывода:<br />
* C000&mdash;C00F &ndash; код нажатой клавиши (младшие 7 битов). Старший бит, равный 1, означает, что код готов к чтению.<br />
* C063 &ndash; линия Р/Л, старший бит кода нажатой клавиши (бит 7).<br />
* C010&mdash;C01F &ndash; обращение по этим адресам сбрасывает буфер для приема следующей клавиши.<br />
<br />
[[Категория:Агат]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%90%D0%B3%D0%B0%D1%82&diff=3739Агат2024-01-18T09:56:55Z<p>Panther: /* Документация */</p>
<hr />
<div>{{Emuverse}}<br />
<br />
'''«Ага́т»''' — советский серийный 8-разрядный персональный компьютер. <br />
<br />
== Документация ==<br />
* [[MOS Technology 6502|Документация на процессор 6502]]<br />
* [[/Техническая информация|Техническая информация]]<br />
* {{djvu}} {{книга<br />
|автор = Мымрин М. П.<br />
|заглавие = Конструкция, применение, программирование и ремонт ПЭВМ «Агат».<br />
|место = М.<br />
|издательство = Машиностроение, 1990.<br />
|том = <br />
|isbn = <br />
|ссылка = https://emuverse.ru/downloads/computers/Agat/docs/Mymrin.djvu<br />
}}<br />
* {{djvu}} {{книга<br />
|автор = Петров А. О.<br />
|заглавие = Персональные компьютеры семейства Apple II (обзор)<br />
|место = <br />
|издательство = <br />
|том = <br />
|isbn = <br />
|ссылка = https://emuverse.ru/downloads/computers/Agat/docs/petrov-bw.djvu<br />
}}<br />
* Источник: http://www.agat-legacy.narod.ru/<br />
** [https://emuverse.ru/downloads/computers/Agat/docs/agat-legacy.narod.ru/chs.xls Алгоритм расчета контрольной суммы диска Агат-7, Агат-9]<br />
** [https://emuverse.ru/downloads/computers/Agat/docs/agat-legacy.narod.ru/image.xls Формат файла образа диска]<br />
** [https://emuverse.ru/downloads/computers/Agat/docs/agat-legacy.narod.ru/link.xls Интерфейс Агат-PC]<br />
** [https://emuverse.ru/downloads/computers/Agat/docs/agat-legacy.narod.ru/teac.rar Исходный код прошивки контроллера дисковода с комментариями]<br />
* {{www}} http://ssmu.ru/er/agat/Reading/<br />
<br />
== Файлы ==<br />
* Источник: [http://emulator3000.org/e3.htm Эмулятор 3000]<br />
** {{rom}} [https://emuverse.ru/downloads/computers/Agat/firmware/E3000/Agat9.rom Агат-9 ROM]<br />
** {{rom}} [https://emuverse.ru/downloads/computers/Agat/firmware/E3000/Agat9.fnt Агат-9 Font]<br />
** {{rom}} [https://emuverse.ru/downloads/computers/Agat/firmware/E3000/Disk140K.rom Загрузочное ПЗУ контроллера НГМД 140 К]<br />
** {{rom}} [https://emuverse.ru/downloads/computers/Agat/firmware/E3000/Disk1M.rom Загрузочное ПЗУ контроллера НГМД 840 K]<br />
* [https://emuverse.ru/downloads/computers/Agat/emulators/agat!.zip Эмулятор Сергея Гоцуляка] (Кажется, взят с http://www.sergo.pisem.net, уже неработающего)<br />
<br />
== Ссылки ==<br />
* [[w:Агат (компьютер)|статья в Википедии]]<br />
* http://www.agatcomp.ru/ Самый большой архив информации<br />
* http://web.ssmu.ru/er/agat/ Эмулятор, программы, документация<br />
** http://deka18.tsk.ru/er/agat/ (зеркало)<br />
* http://agatemulator.sourceforge.net/ - Эмулятор, информация о компьютере<br />
* http://agat9.narod.ru/ Эмулятор, документация, публикации (полумёртв)<br />
* http://www.agat-legacy.narod.ru/ Программы, немного документации<br />
* http://kasarino.narod.ru/agat/ Два эмулятора и несколько программ<br />
* {{www}} [http://retropc.org/index.html?action=w_razdela&id_razdel=31#c113 Документация на сайте retropc.org]<br />
<br />
[[Категория:Агат]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%90%D0%B3%D0%B0%D1%82/%D0%A2%D0%B5%D1%85%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8F&diff=3738Агат/Техническая информация2024-01-18T09:56:03Z<p>Panther: Новая страница: «{{Emuverse}} == Агат-9 == === Порт клавиатуры === Для работы с клавиатурой используются следующие порты ввода-вывода: * C000&mdash;C00F &ndash; код нажатой клавиши (младшие 7 битов). Старший бит, равный 1, означает, что код готов к чтению. * C063 &ndash; линия Р/Л, старший бит кода нажат...»</p>
<hr />
<div>{{Emuverse}}<br />
<br />
== Агат-9 ==<br />
=== Порт клавиатуры ===<br />
Для работы с клавиатурой используются следующие порты ввода-вывода:<br />
* C000&mdash;C00F &ndash; код нажатой клавиши (младшие 7 битов). Старший бит, равный 1, означает, что код готов к чтению.<br />
* C063 &ndash; линия Р/Л, старший бит кода нажатой клавиши (бит 7).<br />
* C010&mdash;C01F &ndash; обращение по этим адресам сбрасывает буфер для приема следующей клавиши.<br />
<br />
[[Категория:Агат]]</div>Pantherhttps://emuverse.ru/w/index.php?title=MOS_Technology_6502/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4&diff=3737MOS Technology 6502/Система команд2024-01-15T06:47:56Z<p>Panther: /* Источники */</p>
<hr />
<div>{{Emuverse}}<br />
<small>{{TOCright}}</small><br />
== Регистры ==<br />
* A — аккумулятор, 8 бит;<br />
* X, Y — индексные регистры, 8 бит;<br />
* PC — счетчик команд, 16 бит;<br />
* S — указатель стека, 8 бит;<br />
* P — регистр состояния;<br />
** <tt>C (P0)</tt> — перенос;<br />
** <tt>Z (P1)</tt> — ноль;<br />
** <tt>I (P2)</tt> — запрет внешних прерываний — IRQ (I=0 — прерывания разрешены);<br />
** <tt>D (P3)</tt> — режим BCD для инструкций сложения и вычитания с переносом;<br />
** <tt>B (P4)</tt> — обработка прерывания (B=1 после выполнения команды BRK);<br />
** <tt>1 (P5)</tt> — не используется, равен 1;<br />
** <tt>V (P6)</tt> — переполнение;<br />
** <tt>N (P7)</tt> — знак. Равен старшему биту значения, загруженного в A, X или Y в результате выполнения операции (кроме TXS).<br />
<br />
== Режимы адресации и страницы ==<br />
Вся адресуемая 6502 память разбита на страницы по 256 байт. Если при обработке команды происходит пересечение границы страницы, инструкции могут выполняться несколько по-другому, что описано ниже. Две страницы имеют особое значение — страница 0 (00H-FFH), называемая «нулевой» — для этой страницы выделен особый режим адресации с однобайтовым адресом. Другая особая страница — № 1 (100H-1FFH), отведенная под стек. Так как регистр указателя стека восьмиразрядный, при обращении к стеку к значению регистра всегда добавляется 100H.<br />
<br />
Многие команды могут работать с несколькими режимами адресации, которые перечислены ниже:<br />
<br />
{| class=border<br />
! Название англ.<br />
! Название русск.<br />
! Описание<br />
! Обозначение<br />
! Пример<br />
! Код<br />
|-<br />
| Immediate<br />
| Непосредственная<br />
| Операнд располагается сразу за кодом инструкции<br />
| #<br />
| LDA #$0A<br />
| A9 02<br />
|-<br />
| Absolute<br />
| Абсолютная (прямая)<br />
| Адрес операнда располагается сразу за кодом инструкции<br />
|<br />
| LDA $1234<br />
| AD 34 12<br />
|-<br />
| Zeropage<br />
| Абсолютная на нулевой странице (для адресов 00H-0FFH)<br />
|<br />
|<br />
| LDA $2F<br />
| A5 2F<br />
|-<br />
| Accumulator/Implied<br />
| Аккумуляторная/Неявная<br />
| Операнд подразумевается самой командой.<br />
|<br />
| TAX<br />
| AA<br />
|-<br />
| Absolute, x<br />Absolute, y<br />
| Абсолютная индексная<br />
| Адрес, указанный за кодом операции, складывается со значением индексного регистра<br />
| ADDR, X<br /> ADDR, Y<br />
| nowrap | LDA $1234, X<br /> LDA $1234, Y<br />
| nowrap | D9 34 12<br />DD 34 12<br />
|-<br />
| Zeropage, x<br />Zeropage, y<br />
| Абсолютная индексная на нулевой странице<br />
|<br />
| ADDR, X<br /> ADDR, Y<br />
| LDA $2F, X<br />
| B5 2F<br />
|-<br />
| Indirect<br />
| Косвенная<br />
| Только в команде JMP. Новый адрес для счетчика команд берется из памяти, по адресу, указанному за кодом команды<br />
| (ADDR)<br />
| JMP ($1234)<br />
| 6С 34 12<br />
|-<br />
| Indirect, x<br />
| Индексно-косвенная на нулевой странице<br />
| Адрес операнда складывается из байта, следующего за кодом команды и содержимого регистра X. Важно! Старший байт суммы отбрасывается!<br />
| (ADDR, X)<br />
| LDA ($3E, X)<br />
| A1 3E<br />
|-<br />
| Indirect, y<br />
| Косвенно-индексная<br />
| Адрес операнда складывается из двух байт в нулевой странице по адресу, указанному вторым байтом команды, и регистра Y.<br />
| (ADDR), Y<br />
| LDA ($4C), Y<br />
| B1 4C<br />
|-<br />
| Relative<br />
| Относительная<br />
| Используется в условных переходах. Второй байт команды (как число со знаком от −128 до +127) добавляется к счетчику команд при выполнении условия. Важно! При сложении используется адрес команды, следующей за командой условного перехода, а не адрес выполняемой команды!<br />
|<br />
| BEQ $A7<br />
| F0 A7<br />
|}<br />
<br />
== Алфавитный список команд ==<br />
Влияние на флаги:<br />
* «*» — влияет;<br />
* «-» — не влияет;<br />
* «0» — устанавливает в 0;<br />
* «1» — устанавливает в 1;<br />
<br />
Тайминги<br />
* «*» означает, что время увеличивается на 1 такт, если код команды пересекает границу страницы;<br />
* «+» означает время в случае перехода в пределах страницы;<br />
* «++» означает время в случае перехода за пределы текущей страницы;<br />
<br />
{{Команда<br />
| Обозначение = ADC<br />
| Операция = A + M + C -> A, C<br />
| Описание = Сложение с переносом<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - - - - * *<br />
| IMM | ADC #Oper | 69 | 2 | 2<br />
| ZP | ADC Oper | 65 | 2 | 3<br />
| ZP, X | ADC Oper,X | 75 | 2 | 4<br />
| ABS | ADC Oper | 6D | 3 | 4<br />
| ABS, X | ADC Oper,X | 7D | 3 | 4*<br />
| ABS, Y | ADC Oper,Y | 79 | 3 | 4*<br />
| IND, X | ADC (Oper,X) | 61 | 2 | 6<br />
| IND, Y | ADC (Oper),Y | 71 | 2 | 5*<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = AND<br />
| Операция = A and M -> A<br />
| Описание = Логическое AND<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | AND #Oper | 29 | 2 | 2<br />
| ZP | AND Oper | 25 | 2 | 3<br />
| ZP, X | AND Oper,X | 35 | 2 | 4<br />
| ABS | AND Oper | 2D | 3 | 4<br />
| ABS, X | AND Oper,X | 3D | 3 | 4*<br />
| ABS, Y | AND Oper,Y | 39 | 3 | 4*<br />
| IND, X | AND (Oper,X) | 21 | 2 | 6<br />
| IND, Y | AND (Oper),Y | 31 | 2 | 5<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ASL<br />
| Операция = C <- [A или M] <- 0<br />
| Описание = Арифметический сдвиг влево<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| ACC | ASL A | 0A | 1 | 2<br />
| ZP | ASL Oper | 06 | 2 | 5<br />
| ZP, X | ASL Oper,X | 16 | 2 | 6<br />
| ABS | ASL Oper | 0E | 3 | 6<br />
| ABS, X | ASL Oper,X | 1E | 3 | 7<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BCC<br />
| Операция = Branch on Carry Clear<br />
| Описание = Условный переход, если нет переноса<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BCC Oper | 90 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BCS<br />
| Операция = Branch on Carry Set<br />
| Описание = Условный переход, если перенос<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BCS Oper | B0 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BEQ<br />
| Операция = Branch on Equal<br />
| Описание = Условный переход, если равно (Z=1)<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BEQ Oper | F0 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BIT<br />
| Операция = (A and M) == 0 -> Z, M7 -> N, M6 -> V<br />
| Описание = Проверка битов<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - - - - * -<br />
| ZP | BIT Oper | 24 | 2 | 3<br />
| ABS | BIT Oper | 2C | 3 | 4<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BMI<br />
| Операция = Branch on Minus<br />
| Описание = Условный переход, если отрицательно (S=1)<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BMI Oper | 30 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BNE<br />
| Операция = Branch on Not Equal<br />
| Описание = Условный переход, если не равно (Z=0)<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BNE Oper | D0 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BPL<br />
| Операция = Branch on Plus<br />
| Описание = Условный переход, если положительно (S=0)<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BPL Oper | 10 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BRK<br />
| Операция = PC+2 -> (S+1200), P -> (S-2), S-3 -> S, ($FFFE) -> PC<br />
| Описание = Программное прерывание<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - 1 - 1 - -<br />
| IMP | BRK | 00 | 1 | 7<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BVC<br />
| Операция = Branch on Overflow Clear<br />
| Описание = Условный переход, если нет переполнения (V=0)<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BVC Oper | 50 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BVS<br />
| Операция = Branch on Overflow Set<br />
| Описание = Условный переход, если переполнение (V=1)<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BVS Oper | 70 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = CLC<br />
| Операция = 0 -> C<br />
| Описание = Очистка флага переноса<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - 0<br />
| IMP | CLC | 18 | 1 | 2<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = CLD<br />
| Операция = 0 -> D<br />
| Описание = Очистка флага BCD<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - 0 - - -<br />
| IMP | CLD | D8 | 1 | 2<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = CLI<br />
| Операция = 0 -> I<br />
| Описание = Очистка флага запрета прерываний<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - 0 - -<br />
| IMP | CLI | 58 | 1 | 2<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = CLV<br />
| Операция = 0 -> V<br />
| Описание = Очистка флага переполнения<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - 0 - - - - - -<br />
| IMP | CLV | B8 | 1 | 2<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = CMP<br />
| Операция = A – M<br />
| Описание = Сравнение аккумулятора с памятью<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| IMM | CMP #Oper | C9 | 2 | 2 <br />
| ZP | CMP Oper | C5 | 2 | 3<br />
| ZP, X | CMP Oper,X | D5 | 2 | 4<br />
| ABS | CMP Oper | CD | 3 | 4<br />
| ABS, X | CMP Oper,X | DD | 3 | 4*<br />
| ABS, Y | CMP Oper,Y | D9 | 3 | 4*<br />
| IND, X | CMP (Oper,X) | C1 | 2 | 6<br />
| IND, Y | CMP (Oper),Y | D1 | 2 | 5*<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = CPX<br />
| Операция = X – M<br />
| Описание = Сравнение X с памятью<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| IMM | CPX *Oper | E0 | 2 | 2<br />
| ZP | CPX Oper | E4 | 2 | 3<br />
| ABS | CPX Oper | EC | 3 | 4<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = CPY<br />
| Операция = Y – M<br />
| Описание = Сравнение Y с памятью<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| IMM | CPY *Oper | C0 | 2 | 2 <br />
| ZP | CPY Oper | C4 | 2 | 3 <br />
| ABS | CPY Oper | CC | 3 | 4 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = DEC<br />
| Операция = M – 1 -> M<br />
| Описание = Декремент памяти<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| ZP | DEC Oper | C6 | 2 | 5 <br />
| ZP, X | DEC Oper,X | D6 | 2 | 6 <br />
| ABS | DEC Oper | CE | 3 | 6 <br />
| ABS, X | DEC Oper,X | DE | 3 | 7 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = DEX<br />
| Операция = X – 1 -> X<br />
| Описание = Декремент X<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | DEX | CA | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = DEY<br />
| Операция = Y – 1 -> Y<br />
| Описание = Декремент Y<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | DEY | 88 | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = EOR<br />
| Операция = A xor M -> A<br />
| Описание = Логическое XOR<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | EOR #Oper | 49 | 2 | 2 <br />
| ZP | EOR Oper | 45 | 2 | 3 <br />
| ZP, X | EOR Oper,X | 55 | 2 | 4 <br />
| ABS | EOR Oper | 4D | 3 | 4 <br />
| ABS, X | EOR Oper,X | 5D | 3 | 4* <br />
| ABS, Y | EOR Oper,Y | 59 | 3 | 4* <br />
| IND, X | EOR (Oper,X) | 41 | 2 | 6 <br />
| IND, Y | EOR (Oper),Y | 51 | 2 | 5* <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = INC<br />
| Операция = M + 1 -> M<br />
| Описание = Инкремент памяти<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| ZP | INC Oper | E6 | 2 | 5 <br />
| ZP, X | INC Oper,X | F6 | 2 | 6 <br />
| ABS | INC Oper | EE | 3 | 6 <br />
| ABS, X | INC Oper,X | FE | 3 | 7 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = INX<br />
| Операция = X + 1 -> X<br />
| Описание = Инкремент X<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | INX | E8 | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = INY<br />
| Операция = Y + 1 -> Y<br />
| Описание = Инкремент Y<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | INY | C8 | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = JMP<br />
| Операция = (PC+1) -> PC или ((PC+1)) -> PC<br />
| Описание = Безусловный переход<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ABS | JMP Oper | 4C | 3 | 3 <br />
| IND | JMP (Oper) | 6C | 3 | 5 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = JSR<br />
| Операция = PC+2 -> (S+3000), S - 2 -> S, (PC+1) -> PC<br />
| Описание = Вызов подпрограммы<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ABS | JSR Oper | 20 | 3 | 6 <br />
| Примечание = В стек помещается адрес следующей команды минус один байт!<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = LDA<br />
| Операция = M -> A<br />
| Описание = Загрузка аккумулятора<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | LDA #Oper | A9 | 2 | 2 <br />
| ZP | LDA Oper | A5 | 2 | 3 <br />
| ZP, X | LDA Oper,X | B5 | 2 | 4 <br />
| ABS | LDA Oper | AD | 3 | 4 <br />
| ABS, X | LDA Oper,X | BD | 3 | 4* <br />
| ABS, Y | LDA Oper,Y | B9 | 3 | 4* <br />
| IND, X | LDA (Oper,X) | A1 | 2 | 6 <br />
| IND, Y | LDA (Oper),Y | B1 | 2 | 5* <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = LDX<br />
| Операция = M -> X<br />
| Описание = Загрузка X<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | LDX #Oper | A2 | 2 | 2 <br />
| ZP | LDX Oper | A6 | 2 | 3 <br />
| ZP, Y | LDX Oper,Y | B6 | 2 | 4 <br />
| ABS | LDX Oper | AE | 3 | 4 <br />
| ABS, Y | LDX Oper,Y | BE | 3 | 4* <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = LDY<br />
| Операция = M -> Y<br />
| Описание = Загрузка Y<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | LDY #Oper | A0 | 2 | 2 <br />
| ZP | LDY Oper | A4 | 2 | 3 <br />
| ZP, X | LDY Oper,X | B4 | 2 | 4 <br />
| ABS | LDY Oper | AC | 3 | 4 <br />
| ABS, X | LDY Oper,X | BC | 3 | 4* <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = LSR<br />
| Операция = 0 -> [A или M] -> С<br />
| Описание = Логический сдвиг вправо<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = 0 - - - - - * *<br />
| ACC | LSR A | 4A | 1 | 2 <br />
| ZP | LSR Oper | 46 | 2 | 5 <br />
| ZP, X | LSR Oper,X | 56 | 2 | 6 <br />
| ABS | LSR Oper | 4E | 3 | 6 <br />
| ABS, X | LSR Oper,X | 5E | 3 | 7 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = NOP<br />
| Операция = No operation<br />
| Описание = Пустая операция<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| IMP | NOP | EA | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ORA<br />
| Операция = A or M -> A<br />
| Описание = Логическое OR<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | ORA #Oper | 09 | 2 | 2 <br />
| ZP | ORA Oper | 05 | 2 | 3 <br />
| ZP, X | ORA Oper,X | 15 | 2 | 4 <br />
| ABS | ORA Oper | 0D | 3 | 4 <br />
| ABS, X | ORA Oper,X | 1D | 3 | 4* <br />
| ABS, Y | ORA Oper,Y | 19 | 3 | 4* <br />
| IND, X | ORA (Oper,X) | 01 | 2 | 6 <br />
| IND, Y | ORA (Oper),Y | 11 | 2 | 5 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = PHA<br />
| Операция = A -> (S + 3700), S - 1 -> S<br />
| Описание = Поместить аккумулятор в стек<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| IMP | PHA | 48 | 1 | 3 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = PHP<br />
| Операция = P -> (S + 3800), S - 1 -> S<br />
| Описание = Поместить слово состояния в стек<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| IMP | PHP | 08 | 1 | 3 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = PLA<br />
| Операция = S + 1 -> S, (S + 3900) -> A<br />
| Описание = Загрузить аккумулятор из стека<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | PLA | 68 | 1 | 4 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = PLP<br />
| Операция = S + 1 -> S, (S + 4000) -> P<br />
| Описание = Загрузить слово состояния из стека<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - * * * * *<br />
| IMP | PLP | 28 | 1 | 4 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ROL<br />
| Операция = <- [A или M] <- C <-<br />
| Описание = Циклический сдвиг влево<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| ACC | ROL A | 2A | 1 | 2 <br />
| ZP | ROL Oper | 26 | 2 | 5 <br />
| ZP, X | ROL Oper,X | 36 | 2 | 6 <br />
| ABS | ROL Oper | 2E | 3 | 6 <br />
| ABS, X | ROL Oper,X | 3E | 3 | 7 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ROR<br />
| Операция = -> C -> [A или M] -><br />
| Описание = Циклический сдвиг вправо<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| ACC | ROR A | 6A | 1 | 2 <br />
| ZP | ROR Oper | 66 | 2 | 5 <br />
| ZP, X | ROR Oper,X | 76 | 2 | 6 <br />
| ABS | ROR Oper | 6E | 3 | 6 <br />
| ABS, X | ROR Oper,X | 7E | 3 | 7 <br />
| Примечание = Инструкция ROR доступна в микропроцессорах MCS650X с июня 1976 г.<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = RTI<br />
| Операция = (4300 + S + 1) -> P, (4300 + S + 2) -> PC, S + 3 -> S<br />
| Описание = Возврат из прерывания<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - * * * * *<br />
| IMP | RTI | 40 | 1 | 6 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = RTS<br />
| Операция = (4400 + S + 1) -> PС, S + 2 -> S<br />
| Описание = Возврат из подпрограммы<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| IMP | RTS | 60 | 1 | 6 <br />
| Примечание = После извлечения адреса возврата из стека к нему прибавляется единица!<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SBC<br />
| Операция = A - M - C -> A, C<br />
| Описание = Вычитание с займом<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - - - - * *<br />
| IMM | SBC #Oper | E9 | 2 | 2 <br />
| ZP | SBC Oper | E5 | 2 | 3 <br />
| ZP, X | SBC Oper,X | F5 | 2 | 4 <br />
| ABS | SBC Oper | ED | 3 | 4 <br />
| ABS, X | SBC Oper,X | FD | 3 | 4* <br />
| ABS, Y | SBC Oper,Y | F9 | 3 | 4* <br />
| IND, X | SBC (Oper,X) | E1 | 2 | 6 <br />
| IND, Y | SBC (Oper),Y | F1 | 2 | 5 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SEC<br />
| Операция = 1 -> C<br />
| Описание = Установка флага переноса<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - 1<br />
| IMP | SEC | 38 | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SED<br />
| Операция = 1 -> D<br />
| Описание = Установка флага BCD<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - 1 - - -<br />
| IMP | SED | F8 | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SEI<br />
| Операция = 1 -> I<br />
| Описание = Установка флага запрета прерываний<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - 1 - - -<br />
| IMP | SEI | 78 | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = STA<br />
| Операция = A -> M<br />
| Описание = Сохранить аккумулятор в памяти<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ZP | STA Oper | 85 | 2 | 3 <br />
| ZP, X | STA Oper,X | 95 | 2 | 4 <br />
| ABS | STA Oper | 8D | 3 | 4 <br />
| ABS, X | STA Oper,X | 9D | 3 | 5 <br />
| ABS, Y | STA Oper, Y | 99 | 3 | 5 <br />
| IND, X | STA (Oper,X) | 81 | 2 | 6 <br />
| IND, Y | STA (Oper),Y | 91 | 2 | 6 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = STX<br />
| Операция = X -> M<br />
| Описание = Сохранить X в памяти<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ZP | STX Oper | 86 | 2 | 3 <br />
| ZP, Y | STX Oper,Y | 96 | 2 | 4 <br />
| ABS | STX Oper | 8E | 3 | 4 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = STY<br />
| Операция = Y -> M<br />
| Описание = Сохранить Y в памяти<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ZP | STY Oper | 84 | 2 | 3 <br />
| ZP, X | STY Oper,X | 94 | 2 | 4 <br />
| ABS | STY Oper | 8C | 3 | 4 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = TAX<br />
| Операция = A -> X<br />
| Описание = Передать A в X<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | TAX | AA | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = TAY<br />
| Операция = A -> Y<br />
| Описание = Передать A в X<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | TAY | A8 | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = TSX<br />
| Операция = S -> X<br />
| Описание = Передать S в X<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | TSX | BA | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = TXA<br />
| Операция = X -> A<br />
| Описание = Передать X в A<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | TXA | 8A | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = TXS<br />
| Операция = X -> S<br />
| Описание = Передать X в S<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| IMP | TXS | 9A | 1 | 2 <br />
| Примечание = В отличие от других операций загрузки, не влияет на флаг N<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = TYA<br />
| Операция = Y -> A<br />
| Описание = Передать Y в A<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | TYA | 98 | 1 | 2 <br />
}}<br />
<br />
== Особенности ==<br />
=== Пересечение границ страниц в разных режимах адресации ===<br />
В режиме адресации к нулевой странице верхний байт вычисленного адреса всегда обнуляется, поэтому последовательность<br />
<br />
LDX #1<br />
LDA $FF,X<br />
<br />
Загрузит значение из адреса 0000H, а не 0100H, как можно было бы ожидать.<br />
<br />
При косвенной (Indirect) адресации двухбайтовый адрес не может быть извлечен через границу страницы, поэтому все варианты<br />
<br />
LDA ($FF),Y<br />
<br />
LDX #$00<br />
LDA ($FF,X)<br />
<br />
LDX #$FF<br />
LDA ($00,X)<br />
Извлекут младший байт из адреса 00FFH, а младший из 0000H.<br />
<br />
JMP (92FF)<br />
<br />
Получит младший байт из адреса 12FFH, а старший из 1200H.<br />
<br />
=== Внешняя установка флага V ===<br />
В некоторых моделях процессоров есть внешний сигнал -SO, устанавливающий флаг V. Назначение такого сигнала — прерывание ожидания вызова от внешнего устройства в бесконечном цикле команды BVC ($50 $FE).<br />
<br />
=== Флаг B при совпадении BRK и NMI ===<br />
В случае если в момент обработки BRK приходит аппаратное прерывание NMI, процессор переходит по адресу ($FFFA) вместо ($FFFE), а в стек попадает значение P с установленным флагом B.<br />
<br />
=== Работа команд ADC, SBC и ARR в режиме BCD ===<br />
В режиме BCD данные команды работают с числами не двоичном режиме, а BCD-представлении. Фактически, из особенностей нужно упомянуть только влиянии этого режима на установку флагов N, Z и V.<br />
<br />
* Z устанавливается по значению, эквивалентному двоичной, а не BCD-операции.<br />
Например, код<br />
<br />
SED<br />
CLC<br />
LDA #$80<br />
ADC #$80<br />
<br />
Даст в результате A=$60, но при этом Z=1.<br />
<br />
* Флаги N и V устанавливаются после исправления нижнего полубайта, но до исправления верхнего.<br />
<br />
Общий алгоритм работы команды ADC в режиме BCD следующий:<br />
<pre><br />
беззнаковые<br />
A, /* Аккумулятор */<br />
AL, /* нижняя половина аккумулятора */<br />
AH, /* верхняя половина аккумулятора */<br />
<br />
C, /* Флаг переноса */<br />
Z, /* Флаг нуля */<br />
V, /* Флаг переполнения */<br />
N, /* Флаг знака */<br />
<br />
s; /* значение, прибавляемое к аккумулятору */<br />
<br />
AL = (A & 15) + (s & 15) + C; /* Вычисляем нижнюю половину. */<br />
<br />
AH = (A >> 4) + (s >> 4) + (AL > 15); /* Вычисляем верхнюю половину. */<br />
<br />
if (AL > 9) AL += 6; /* BCD-исправление нижней половины. */<br />
<br />
Z = ((A + s + C) & 255 != 0); /* Флаг нуля устанавливается<br />
Как обычно. */<br />
<br />
/* Флаги знака и переполнения устанавливаются как обычно,<br />
но до исправления верхней половины */<br />
<br />
N = (AH & 8 != 0);<br />
V = ((AH << 4) ^ A) & 128 && !((A ^ s) & 128);<br />
<br />
if (AH > 9) AH += 6; /* BCD-исправление верхней половины. */<br />
<br />
/* Перенос – единственный, кто устанавливается в самом конце. */<br />
<br />
C = (AH > 15);<br />
A = ((AH << 4) | (AL & 15)) & 255;<br />
</pre><br />
<br />
С SBC проще. На установку флагов после нее флаг D не влияет.<br />
<br />
<pre><br />
беззнаковые<br />
A, /* Аккумулятор */<br />
AL, /* нижняя половина аккумулятора */<br />
AH, /* верхняя половина аккумулятора */<br />
<br />
C, /* Флаг переноса */<br />
Z, /* Флаг нуля */<br />
V, /* Флаг переполнения */<br />
N, /* Флаг знака */<br />
<br />
s; /* значение, вычитаемое из аккумулятора */<br />
<br />
AL = (A & 15) - (s & 15) - !C; /* Вычисляем нижнюю половину. */<br />
<br />
if (AL & 16) AL -= 6; /* BCD-исправление нижней половины. */<br />
<br />
AH = (A >> 4) - (s >> 4) - (AL & 16); /* Вычисляем верхнюю половину. */<br />
<br />
if (AH & 16) AH -= 6; /* BCD-исправление верхней половины. */<br />
<br />
/* Все флаги устанавливаем как обычно. */<br />
<br />
C = (A - s - !C) & 256 != 0;<br />
Z = (A - s - !C) & 255 != 0;<br />
V = ((A - s - !C) ^ s) & 128 && (A ^ s) & 128;<br />
N = (A - s - !C) & 128 != 0;<br />
<br />
A = ((AH << 4) | (AL & 15)) & 255;<br />
</pre><br />
<br />
=== Другие особенности ===<br />
* Процессор всегда прочитывает второй байт команды условного перехода. Если происходит переход с пересечением границы страницы, то процессор сначала читает байт из текущей страницы, и только потом из нужной.<br />
* Если граница страницы пересекается в других режимах адресации, процессор всегда сначала читает ошибочный байт со страницы, на 1 меньшую, чем нужная.<br />
* Команды вида «Прочитать-Изменить-Записать» выполняют две операции записи — сначала неизмененное значение, затем измененное (то есть INC физически выполняется как LDX loc; STX loc; INX; STX loc).<br />
* В цикле записи сигнал -RDY игнорируется, поэтому перед выполнением DMA его нужно держать не менее 3 циклов подряд, так как это максимально возможное подряд число циклов записи, вызываемое переходом на обработчик прерывания).<br />
* При отработке сигнала -RESET значения в регистрах, за исключением PC, остаются неизменными.<br />
* Процессор всегда прочитывает байт, следующий за кодом команды. Так как многие команды двух-трехбайтовые, это достаточно эффективно.<br />
* Если команда в своем последнем цикле не сохраняет результат в память, то процессор в этот момент читает код следующей команды. Поэтому для таких команд в таблицах обычно указывается время исполнения, на 1 меньше реального.<br />
<br />
=== Обработка прерываний ===<br />
Обработка NMI и IRQ занимает 7 циклов, их обработка в целом похожа на команду BRK. IRQ и BRK устанавливают флаг I, в то время как NMI — нет.<br />
<br />
Перед обработкой прерывания процессор ожидает завершения выполнения текущей команды. Чтобы прерывание было обработано до следующей команды, оно должно быть получено не позднее последнего цикла текущей команды. Исключение есть только для команды BRK. Если прерывание приходит до 4-го цикла (сохранение флагов), то команда игнорируется и происходит переход на обработчик аппаратного прерывания. Обычно это не вызывает проблем, так как в случае совпадения BRK и IRQ все равно устанавливается флаг B, обработчик считает, что выполняется BRK, а IRQ срабатывает по возвращении из обработки BRK. С другой стороны, совпадение BRK и NMI более фатально. Если флаг B не проверяется в обработчике NMI, и перед возвращением адрес возврата не уменьшается на 2, то команда BRK будет потеряна.<br />
<br />
При совпадении IRQ и NMI, процессор, теоретически, должен перейти на обработку NMI, а потом сразу на IRQ, хотя это и не проверено на практике.<br />
<br />
Обработка RESET занимает 6 циклов с момента снятия сигнала. Все регистры сохраняются, кроме PC.<br />
<br />
=== Отличия NMOS и CMOS вариантов ===<br />
* Индексная адресация при пересечении границы страницы:<br />
** NMOS: Дополнительное чтение по неправильному адресу;<br />
** CMOS: Дополнительное чтение последнего байта инструкции;<br />
* Выполнение команд с недопустимыми кодами:<br />
** NMOS: Вешают процессор до выполнения принудительного сброса;<br />
** CMOS: Исполняются как NOP (Резерв на будущее)<br />
* Переход по косвенному адресу, когда операнд пересекает границу страницы (xxFFH):<br />
** NMOS: Второй байт берется из первого байта текущей страницы;<br />
** CMOS: Второй байт берется со следующей страницы, ко времени исполнения добавляется 1 такт.<br />
* Команды вида «Прочитать-Изменить-Записать»<br />
** NMOS: Одна лишняя запись (см. выше);<br />
** CMOS: Одно лишнее чтение.<br />
* Флаг D<br />
** NMOS: После сброса не определен;<br />
** CMOS: Сбрасывается в 0 после аппаратного сброса или прерывания.<br />
* Флаги в режиме BCD<br />
** NMOS: Значения некорректны (см. выше);<br />
** CMOS: Значения правильные, но добавляется 1 цикл.<br />
* Прерывания в момент выборки команды BRK:<br />
** NMOS: Происходит переход по вектору прерывания, а не BRK;<br />
** CMOS: Сначала исполняется команда BRK, потом срабатывает прерывание.<br />
<br />
== Недокументированные команды ==<br />
<br />
Многие недокументированные команды реально не выполняют операцию AND между регистрами. Это происходит автоматически, когда два значения помещаются одновременно на внутреннюю шину с открытыми коллекторами.<br />
<br />
=== NOP ===<br />
Команда NOP, помимо кода 90, может выполняться с другими методами адресации. В этом случае она эквивалентна команде LDA, за исключением того, что она не сохраняет результат и не влияет на флаги.<br />
<br />
{{Команда<br />
| Обозначение = ANE<br />
| Операция = Вар. 1: A = ((A and #581 and X) or ( #$EE and X)) and #byte; Вар. 2: X and #byte -> A<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | ANE #byte | 8B | 2 | ? <br />
| Примечание = В реальности параметр #581 может принимать значения #580, #58 или #$00, что зависит от значения, оставленного на шине видеоконтроллером после прерывания команды в режиме DMA.<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ANC<br />
| Операция = Вар. 1: A and #byte -> A, ASL A; Вар. 2: предыдущее без ASL<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| IMM | ANC #Oper | 0B | 2 | ?<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ANC?<br />
| Операция = Вар. 1: A and #byte -> A, ROL A; Вар. 2: предыдущее без ROL<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| IMM | ANC #Oper | 2B | 2 | ?<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ARR (ADC + ROR)<br />
| Операция = D=0: A and #byte -> A, ROR, A7->S, A6->V, (A==0)->Z, A6 xor A5 -> C<br><br />
D=1: см. код ниже<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - - - - * *<br />
| IMM | ARR #byte | 6B | 2? | ? <br />
| Примечание = Алгоритм для BCD-режима:<br />
<pre><br />
A, /* Аккумулятор */<br />
AL, /* нижняя половина аккумулятора */<br />
AH, /* верхняя половина аккумулятора */<br />
<br />
C, /* Флаг переноса */<br />
Z, /* Флаг нуля */<br />
V, /* Флаг переполнения */<br />
N, /* Флаг знака */<br />
<br />
t, /* вспомогательная переменная */<br />
s; /* байт-параметр команды */<br />
<br />
t = A & s; /* Выполняем AND. */<br />
<br />
AH = t >> 4; /* Делим результат */<br />
AL = t & 15; /* на части. */<br />
<br />
N = C; /* Флаг знака */<br />
Z = !(A = (t >> 1) | (C << 7)); /* Z как обычно */<br />
V = (t ^ A) & 64; /* a V магически. */<br />
<br />
if (AL + (AL & 1) > 5) /* «заплатка» BCD для нижней половины. */<br />
A = (A & 0xF0) | ((A + 6) & 0xF);<br />
<br />
if (C = AH + (AH & 1) > 5) /* Перенос. */<br />
A = (A + 0x60) & 0xFF; /* «заплатка» BCD для верхней половины. */<br />
</pre><br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ASR<br />
| Операция = A and #byte -> A, LSR A<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| IMM | ASR #Oper | 4B | 2 | ?<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = DCP (DEC + CMP)<br />
| Операция = M + 1 -> M, A – M<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| ZP | DCP Oper | C7 | 2 | ? <br />
| ZP, X | DCP Oper,X | D7 | 2 | ? <br />
| ABS | DCP Oper | CF | 3 | ? <br />
| ABS, X | DCP Oper,X | DF | 3 | ? <br />
| ABS, Y | DCP Oper, Y | DB | 3 | ? <br />
| IND, X | DCP (Oper,X) | C3 | 2 | ? <br />
| IND, Y | DCP (Oper),Y | D3 | 2 | ? <br />
}}<br />
<br />
<br />
{{Команда<br />
| Обозначение = ISB (INC + SBC)<br />
| Операция = M + 1 -> M, A – M -> A <br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - - - - * *<br />
| ZP | ISB Oper | E7 | 2 | ? <br />
| ZP, X | ISB Oper,X | F7 | 2 | ? <br />
| ABS | ISB Oper | EF | 3 | ? <br />
| ABS, X | ISB Oper,X | FF | 3 | ? <br />
| ABS, Y | ISB Oper, Y | FB | 3 | ? <br />
| IND, X | ISB (Oper,X) | E3 | 2 | ? <br />
| IND, Y | ISB (Oper),Y | F3 | 2 | ? <br />
}}<br />
<br />
<br />
{{Команда<br />
| Обозначение = LAS<br />
| Операция = M and S -> A, X, S<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| ABS, Y | LAS Oper, Y | BB | 3 | ? <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = LAX<br />
| Операция = M -> A, X<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| ZP | LAX Oper | A7 | 2 | ? <br />
| ZP, Y! | LAX Oper,Y | B7 | 2 | ? <br />
| ABS | LAX Oper | AF | 3 | ? <br />
| ABS, Y | LAX Oper,Y | BF | 3 | ? <br />
| IND, X | LAX (Oper,Y) | A3 | 2 | ? <br />
| IND, Y | LAX (Oper),Y | B3 | 2 | ? <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = LXA<br />
| Операция = Вар. 1: A = X = ANE; Вар. 2: A = X = (A & #byte); Вар. 3: A = X = #byte;<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | LXA #byte | AB | 2? | ? <br />
}}<br />
<br />
<br />
{{Команда<br />
| Обозначение = RLA<br />
| Операция = ROL M, A and M -> A<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| ZP | RLA Oper | 27 | 2 | ? <br />
| ZP, X | RLA Oper,X | 37 | 2 | ? <br />
| ABS | RLA Oper | 2F | 3 | ? <br />
| ABS, X | RLA Oper,X | 3F | 3 | ? <br />
| ABS, Y | RLA Oper, Y | 3B | 3 | ? <br />
| IND, X | RLA (Oper,X) | 23 | 2 | ? <br />
| IND, Y | RLA (Oper),Y | 33 | 2 | ? <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = RRA<br />
| Операция = ROR M, ADC(A, M) -> A<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - - - - * *<br />
| ZP | RRA Oper | 67 | 2 | ? <br />
| ZP, X | RRA Oper,X | 77 | 2 | ? <br />
| ABS | RRA Oper | 6F | 3 | ? <br />
| ABS, X | RRA Oper,X | 7F | 3 | ? <br />
| ABS, Y | RRA Oper, Y | 7B | 3 | ? <br />
| IND, X | RRA (Oper,X) | 63 | 2 | ? <br />
| IND, Y | RRA (Oper),Y | 73 | 2 | ? <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SAX<br />
| Операция = A and X -> M<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ZP | SAX Oper | 87 | 2 | ? <br />
| ZP, Y! | SAX Oper,Y | 97 | 2 | ? <br />
| ABS | SAX Oper | 8F | 3 | ? <br />
| IND, X | SAX (Oper,X) | 83 | 2 | ? <br />
}}<br />
<br />
<br />
{{Команда<br />
| Обозначение = SBX (CMP + DEX)<br />
| Операция = (A and X) - #byte -> X<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| IMM | SBX #byte | CB | 2 | ? <br />
| Примечание = От CMP осталось вычитание, от DEX – сохранение результата в X. AND берется из одновременного подключения A и X к АЛУ.<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SHA<br />
| Операция = A & X & (ADDR_HI + 1)) -> M<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| IND, Y | SHA (Oper),Y | 93 | 2 | ?<br />
| ABS, Y | SHA Oper,Y | 9F | 3 | ?<br />
| Примечание = ADDR_HI, вероятно, старший байт адреса M?<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SHS<br />
| Операция = A and X -> S, S and ADDR_HI -> M<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ABS, Y | SHS Oper,Y | 9B | 3 | ?<br />
| Примечание = ADDR_HI, вероятно, старший байт адреса M?<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SHX<br />
| Операция = Вар. 1: X and (ADDR_HI + 1) -> M; Вар. 2: X and ADDR_HI -> M<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ABS, Y | SHX Oper,Y | 9E | 3 | ?<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SHY<br />
| Операция = Вар. 1: Y & (ADDR_HI + 1) -> M; Вар. 2: Y and ADDR_HI -> M<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ABS, Y | SHY Oper,Y | 9C | 3 | ?<br />
| Примечание = По другому источнику, режим адресации ABS, X.<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SLO (ASL + ORA)<br />
| Операция = ASL M -> M, A or M -> A<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| ZP | SLO Oper | 07 | 2 | ? <br />
| ZP, X | SLO Oper,X | 17 | 2 | ? <br />
| ABS | SLO Oper | 0F | 3 | ? <br />
| ABS, X | SLO Oper,X | 1F | 3 | ? <br />
| ABS, Y | SLO Oper, Y | 1B | 3 | ? <br />
| IND, X | SLO (Oper,X) | 03 | 2 | ? <br />
| IND, Y | SLO (Oper),Y | 13 | 2 | ? <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SRE<br />
| Операция = LSR M -> M, A xor M -> A<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| ZP | SRE Oper | 47 | 2 | ? <br />
| ZP, X | SRE Oper,X | 57 | 2 | ? <br />
| ABS | SRE Oper | 4F | 3 | ? <br />
| ABS, X | SRE Oper,X | 5F | 3 | ? <br />
| ABS, Y | SRE Oper, Y | 5B | 3 | ? <br />
| IND, X | SRE (Oper,X) | 43 | 2 | ? <br />
| IND, Y | SRE (Oper),Y | 53 | 2 | ? <br />
}}<br />
<br />
== Порядок декодирования команд ==<br />
<br />
Любую команду 6502 можно представить следующим образом:<br />
<br />
XXXYYYZZ<br />
└┬┘└┬┘└┤<br />
│ │ └── Группа команд<br />
│ └───── Режим адресации<br />
└──────── Код команды<br />
<br />
Таким образом, для уменьшения сравнений можно использовать следующий алгоритм:<br />
<br />
swith ZZ:<br />
case 0:<br />
switch XXX:<br />
case 0:<br />
//Команды 000yyy00<br />
Do_Command_0(yyy);<br />
break;<br />
case 1:<br />
//Команды 001yyy00<br />
Do_Command_1(yyy);<br />
break;<br />
// etc<br />
end;<br />
case 1:<br />
switch XXX:<br />
case 0:<br />
//Команды 000yyy01<br />
Do_Command_2(yyy);<br />
break;<br />
case 1:<br />
//Команды 001yyy01<br />
Do_Command_3(yyy);<br />
break;<br />
// etc<br />
end;<br />
break<br />
end; <br />
<br />
Далее все команды сгруппированы по этому принципу.<br />
* «*» отмечены недокументированные команды)<br />
* HALT обозначает зависание процессора<br />
* «*NOP mode» обозначает, что команда эквивалента «LDA mode», но результат не сохраняется и флаги не меняются.<br />
<br />
??? 000xxx00<br />
000 BRK<br />
001 *NOP zp<br />
010 PHP<br />
011 *NOP abs<br />
100 BPL<br />
101 *NOP zp,x<br />
110 CLC<br />
111 *NOP abs,x<br />
<br />
??? 001xxx00<br />
000 JSR<br />
001 BIT zp<br />
010 PLP impl<br />
011 BIT abs<br />
100 BMI rel<br />
101 *NOP zp,x<br />
110 SEC impl<br />
111 *NOP abs,x<br />
<br />
??? 010xxx00<br />
000 RTI<br />
001 *NOP zp<br />
010 PHA impl<br />
011 JMP abs<br />
100 BVC rel<br />
101 *NOP zp,x<br />
110 CLI impl<br />
111 *NOP abs,x<br />
<br />
??? 011xxx00<br />
000 RTS<br />
001 *NOP zp<br />
010 PLA impl<br />
011 JMP (abs)<br />
100 BVS rel<br />
101 *NOP zp,x<br />
110 SEI impl<br />
111 *NOP abs,x<br />
<br />
??? 100xxx00<br />
000 *NOP<br />
001 STY zp<br />
010 DEY impl<br />
011 STY abs<br />
100 BCC rel<br />
101 STY zp,x<br />
110 TYA impl<br />
111 *SHY abs,x<br />
<br />
??? 101xxx00<br />
000 LDY<br />
001 LDY zp<br />
010 TAY impl<br />
011 LDY abs<br />
100 BCS rel<br />
101 LDY zp,x<br />
110 CLV impl<br />
111 LDY abs,x<br />
<br />
??? 110xxx00<br />
000 CPY<br />
001 CPY zp<br />
010 INY impl<br />
011 CPY abs<br />
100 BNE rel<br />
101 *NOP zp,x<br />
110 CLD impl<br />
111 *NOP abs,x<br />
<br />
??? 111xxx00<br />
000 CPX<br />
001 CPX zp<br />
010 INX impl<br />
011 CPX abs<br />
100 BEQ rel<br />
101 *NOP zp,x<br />
110 SED impl<br />
111 *NOP abs,x<br />
<br />
ORA 000xxx01<br />
000 ind,x<br />
001 zp<br />
010 immed<br />
011 abs<br />
100 ind,y<br />
101 zp,x<br />
110 abs,y<br />
111 abs,x<br />
<br />
AND 001xxx01<br />
EOR 010xxx01<br />
ADC 011xxx01<br />
STA 100xxx01<br />
LDA 101xxx01<br />
CMP 110xxx01<br />
SBC 111xxx01<br />
<br />
ASL 000xxx10<br />
000 *HALT<br />
001 zp<br />
010 accum<br />
011 abs<br />
100 *HALT<br />
101 zp,x<br />
110 *NOP<br />
111 abs,x<br />
<br />
ROL 001xxx10<br />
000 *HALT<br />
001 zp<br />
010 accum<br />
011 abs<br />
100 *HALT<br />
101 zp,x<br />
110 *NOP<br />
111 abs,x<br />
<br />
LSR 010xxx10<br />
000 *HALT<br />
001 zp<br />
010 accum<br />
011 abs<br />
100 *HALT<br />
101 zp,x<br />
110 *NOP<br />
111 abs,x<br />
<br />
ROR 011xxx10<br />
000 *HALT<br />
001 zp<br />
010 accum<br />
011 abs<br />
100 *HALT<br />
101 zp,x<br />
110 *NOP<br />
111 abs,x<br />
<br />
STX 100xxx10<br />
000 *NOP(HALT)<br />
001 zp<br />
010 TXA (accum)<br />
011 abs<br />
100 *HALT<br />
101 zp,y<br />
110 TXS<br />
111 *SHX**y)<br />
<br />
LDX 101xxx10<br />
000 imm<br />
001 zp<br />
010 TAX (accum)<br />
011 abs<br />
100 *HALT<br />
101 zp,y<br />
110 TSX<br />
111 *y)<br />
<br />
DEC 110xxx10<br />
000 *NOP(HALT)<br />
001 zp<br />
010 DEX (impl)<br />
011 abs<br />
100 *HALT<br />
101 zp,x<br />
110 *NOP<br />
111 abs,x<br />
<br />
INC 111xxx10<br />
000 *NOP(HALT)<br />
001 zp<br />
010 NOP (impl)<br />
011 abs<br />
100 *HALT<br />
101 zp,x<br />
110 *NOP<br />
111 abs,x<br />
<br />
*SLO 000xxx11<br />
000 *SLO ind,x<br />
001 *SLO zp<br />
010 *ANC imm<br />
011 *SLO abs<br />
100 *SLO ind,y<br />
101 *SLO zp,x<br />
110 *SLO abs,y<br />
111 *SLO abs,x<br />
<br />
*RLA 001xxx11<br />
000 *RLA ind,x<br />
001 *RLA zp<br />
010 *ANC imm<br />
011 *RLA abs<br />
100 *RLA ind,y<br />
101 *RLA zp,x<br />
110 *RLA abs,y<br />
111 *RLA abs,x<br />
<br />
*SRE 010xxx11<br />
000 *SRE ind,x<br />
001 *SRE zp<br />
010 *ASR imm<br />
011 *SRE abs<br />
100 *SRE ind,y<br />
101 *SRE zp,x<br />
110 *SRE abs,y<br />
111 *SRE abs,x<br />
<br />
*RRA 011xxx11<br />
000 *RRA ind,x<br />
001 *RRA zp<br />
010 *ARR imm<br />
011 *RRA abs<br />
100 *RRA ind,y<br />
101 *RRA zp,x<br />
110 *RRA abs,y<br />
111 *RRA abs,x<br />
<br />
*??? 100xxx11<br />
000 *SAX ind,x<br />
001 *SAX zp<br />
010 *ANE imm<br />
011 *SAX abs<br />
100 *SHA ind,y<br />
101 *SAX* y)<br />
110 *SHS abs,y<br />
111 *SHA**y)<br />
<br />
*??? 101xxx11<br />
000 *LAX ind,x<br />
001 *LAX zp<br />
010 *LXA imm<br />
011 *LAX abs<br />
100 *LAX ind,y<br />
101 *LAX* y)<br />
110 *LAS abs,y<br />
111 *LAX* y)<br />
<br />
*DCP 110xxx11<br />
000 *DCP ind,x<br />
001 *DCP zp<br />
010 *SBX imm<br />
011 *DCP abs<br />
100 *DCP ind,y<br />
101 *DCP zp,x<br />
110 *DCP abs,y<br />
111 *DCP abs,x<br />
<br />
*ISB 111xxx11<br />
000 *ISB ind,x<br />
001 *IBS zp<br />
010 *SBC imm<br />
011 *ISB abs<br />
100 *ISB ind,y<br />
101 *ISB zp,x<br />
110 *ISB abs,y<br />
111 *ISB abs,x<br />
<br />
== Источники ==<br />
* http://www.oxyron.de/html/opcodes02.html<br />
* [http://6502.org/tutorials/65c02opcodes.html 65C02 Opcodes]<br />
* https://emuverse.ru/downloads/datasheets/processors/6502/c64doc.txt<br />
* [http://6502.org/tutorials/interrupts.html Investigating Interrupts]<br />
* [https://www.nesdev.org/the%20'B'%20flag%20&%20BRK%20instruction.txt 6502 'B' flag & BRK opcode]<br />
* [http://www.6502.org/tutorials/vflag.html The Overflow (V) Flag Explained]<br />
* [http://www.6502.org/tutorials/decimal_mode.html Decimal Mode] - псевдокод не везде верен, не проходит собственные тесты<br />
* [https://wilsonminesco.com/NMOS-CMOSdif/ Differences between NMOS 6502 and CMOS 65c02]<br />
<br />
=== Наборы тестов ===<br />
* [https://github.com/Klaus2m5/6502_65C02_functional_tests Klaus Dormann's test suite]<br />
* https://github.com/TomHarte/ProcessorTests<br />
* https://github.com/blitzcode/neskell/tree/master/src/tests<br />
* https://www.nesdev.org/wiki/Visual6502wiki/6502TestPrograms<br />
* https://github.com/mnaberez/py65/tree/main/py65/tests/devices<br />
<br />
<br />
<br />
[[Категория:MOS 6502]]</div>Pantherhttps://emuverse.ru/w/index.php?title=MOS_Technology_6502/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4&diff=3736MOS Technology 6502/Система команд2024-01-12T20:51:07Z<p>Panther: /* Источники */</p>
<hr />
<div>{{Emuverse}}<br />
<small>{{TOCright}}</small><br />
== Регистры ==<br />
* A — аккумулятор, 8 бит;<br />
* X, Y — индексные регистры, 8 бит;<br />
* PC — счетчик команд, 16 бит;<br />
* S — указатель стека, 8 бит;<br />
* P — регистр состояния;<br />
** <tt>C (P0)</tt> — перенос;<br />
** <tt>Z (P1)</tt> — ноль;<br />
** <tt>I (P2)</tt> — запрет внешних прерываний — IRQ (I=0 — прерывания разрешены);<br />
** <tt>D (P3)</tt> — режим BCD для инструкций сложения и вычитания с переносом;<br />
** <tt>B (P4)</tt> — обработка прерывания (B=1 после выполнения команды BRK);<br />
** <tt>1 (P5)</tt> — не используется, равен 1;<br />
** <tt>V (P6)</tt> — переполнение;<br />
** <tt>N (P7)</tt> — знак. Равен старшему биту значения, загруженного в A, X или Y в результате выполнения операции (кроме TXS).<br />
<br />
== Режимы адресации и страницы ==<br />
Вся адресуемая 6502 память разбита на страницы по 256 байт. Если при обработке команды происходит пересечение границы страницы, инструкции могут выполняться несколько по-другому, что описано ниже. Две страницы имеют особое значение — страница 0 (00H-FFH), называемая «нулевой» — для этой страницы выделен особый режим адресации с однобайтовым адресом. Другая особая страница — № 1 (100H-1FFH), отведенная под стек. Так как регистр указателя стека восьмиразрядный, при обращении к стеку к значению регистра всегда добавляется 100H.<br />
<br />
Многие команды могут работать с несколькими режимами адресации, которые перечислены ниже:<br />
<br />
{| class=border<br />
! Название англ.<br />
! Название русск.<br />
! Описание<br />
! Обозначение<br />
! Пример<br />
! Код<br />
|-<br />
| Immediate<br />
| Непосредственная<br />
| Операнд располагается сразу за кодом инструкции<br />
| #<br />
| LDA #$0A<br />
| A9 02<br />
|-<br />
| Absolute<br />
| Абсолютная (прямая)<br />
| Адрес операнда располагается сразу за кодом инструкции<br />
|<br />
| LDA $1234<br />
| AD 34 12<br />
|-<br />
| Zeropage<br />
| Абсолютная на нулевой странице (для адресов 00H-0FFH)<br />
|<br />
|<br />
| LDA $2F<br />
| A5 2F<br />
|-<br />
| Accumulator/Implied<br />
| Аккумуляторная/Неявная<br />
| Операнд подразумевается самой командой.<br />
|<br />
| TAX<br />
| AA<br />
|-<br />
| Absolute, x<br />Absolute, y<br />
| Абсолютная индексная<br />
| Адрес, указанный за кодом операции, складывается со значением индексного регистра<br />
| ADDR, X<br /> ADDR, Y<br />
| nowrap | LDA $1234, X<br /> LDA $1234, Y<br />
| nowrap | D9 34 12<br />DD 34 12<br />
|-<br />
| Zeropage, x<br />Zeropage, y<br />
| Абсолютная индексная на нулевой странице<br />
|<br />
| ADDR, X<br /> ADDR, Y<br />
| LDA $2F, X<br />
| B5 2F<br />
|-<br />
| Indirect<br />
| Косвенная<br />
| Только в команде JMP. Новый адрес для счетчика команд берется из памяти, по адресу, указанному за кодом команды<br />
| (ADDR)<br />
| JMP ($1234)<br />
| 6С 34 12<br />
|-<br />
| Indirect, x<br />
| Индексно-косвенная на нулевой странице<br />
| Адрес операнда складывается из байта, следующего за кодом команды и содержимого регистра X. Важно! Старший байт суммы отбрасывается!<br />
| (ADDR, X)<br />
| LDA ($3E, X)<br />
| A1 3E<br />
|-<br />
| Indirect, y<br />
| Косвенно-индексная<br />
| Адрес операнда складывается из двух байт в нулевой странице по адресу, указанному вторым байтом команды, и регистра Y.<br />
| (ADDR), Y<br />
| LDA ($4C), Y<br />
| B1 4C<br />
|-<br />
| Relative<br />
| Относительная<br />
| Используется в условных переходах. Второй байт команды (как число со знаком от −128 до +127) добавляется к счетчику команд при выполнении условия. Важно! При сложении используется адрес команды, следующей за командой условного перехода, а не адрес выполняемой команды!<br />
|<br />
| BEQ $A7<br />
| F0 A7<br />
|}<br />
<br />
== Алфавитный список команд ==<br />
Влияние на флаги:<br />
* «*» — влияет;<br />
* «-» — не влияет;<br />
* «0» — устанавливает в 0;<br />
* «1» — устанавливает в 1;<br />
<br />
Тайминги<br />
* «*» означает, что время увеличивается на 1 такт, если код команды пересекает границу страницы;<br />
* «+» означает время в случае перехода в пределах страницы;<br />
* «++» означает время в случае перехода за пределы текущей страницы;<br />
<br />
{{Команда<br />
| Обозначение = ADC<br />
| Операция = A + M + C -> A, C<br />
| Описание = Сложение с переносом<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - - - - * *<br />
| IMM | ADC #Oper | 69 | 2 | 2<br />
| ZP | ADC Oper | 65 | 2 | 3<br />
| ZP, X | ADC Oper,X | 75 | 2 | 4<br />
| ABS | ADC Oper | 6D | 3 | 4<br />
| ABS, X | ADC Oper,X | 7D | 3 | 4*<br />
| ABS, Y | ADC Oper,Y | 79 | 3 | 4*<br />
| IND, X | ADC (Oper,X) | 61 | 2 | 6<br />
| IND, Y | ADC (Oper),Y | 71 | 2 | 5*<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = AND<br />
| Операция = A and M -> A<br />
| Описание = Логическое AND<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | AND #Oper | 29 | 2 | 2<br />
| ZP | AND Oper | 25 | 2 | 3<br />
| ZP, X | AND Oper,X | 35 | 2 | 4<br />
| ABS | AND Oper | 2D | 3 | 4<br />
| ABS, X | AND Oper,X | 3D | 3 | 4*<br />
| ABS, Y | AND Oper,Y | 39 | 3 | 4*<br />
| IND, X | AND (Oper,X) | 21 | 2 | 6<br />
| IND, Y | AND (Oper),Y | 31 | 2 | 5<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ASL<br />
| Операция = C <- [A или M] <- 0<br />
| Описание = Арифметический сдвиг влево<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| ACC | ASL A | 0A | 1 | 2<br />
| ZP | ASL Oper | 06 | 2 | 5<br />
| ZP, X | ASL Oper,X | 16 | 2 | 6<br />
| ABS | ASL Oper | 0E | 3 | 6<br />
| ABS, X | ASL Oper,X | 1E | 3 | 7<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BCC<br />
| Операция = Branch on Carry Clear<br />
| Описание = Условный переход, если нет переноса<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BCC Oper | 90 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BCS<br />
| Операция = Branch on Carry Set<br />
| Описание = Условный переход, если перенос<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BCS Oper | B0 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BEQ<br />
| Операция = Branch on Equal<br />
| Описание = Условный переход, если равно (Z=1)<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BEQ Oper | F0 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BIT<br />
| Операция = (A and M) == 0 -> Z, M7 -> N, M6 -> V<br />
| Описание = Проверка битов<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - - - - * -<br />
| ZP | BIT Oper | 24 | 2 | 3<br />
| ABS | BIT Oper | 2C | 3 | 4<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BMI<br />
| Операция = Branch on Minus<br />
| Описание = Условный переход, если отрицательно (S=1)<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BMI Oper | 30 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BNE<br />
| Операция = Branch on Not Equal<br />
| Описание = Условный переход, если не равно (Z=0)<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BNE Oper | D0 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BPL<br />
| Операция = Branch on Plus<br />
| Описание = Условный переход, если положительно (S=0)<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BPL Oper | 10 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BRK<br />
| Операция = PC+2 -> (S+1200), P -> (S-2), S-3 -> S, ($FFFE) -> PC<br />
| Описание = Программное прерывание<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - 1 - 1 - -<br />
| IMP | BRK | 00 | 1 | 7<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BVC<br />
| Операция = Branch on Overflow Clear<br />
| Описание = Условный переход, если нет переполнения (V=0)<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BVC Oper | 50 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BVS<br />
| Операция = Branch on Overflow Set<br />
| Описание = Условный переход, если переполнение (V=1)<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BVS Oper | 70 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = CLC<br />
| Операция = 0 -> C<br />
| Описание = Очистка флага переноса<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - 0<br />
| IMP | CLC | 18 | 1 | 2<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = CLD<br />
| Операция = 0 -> D<br />
| Описание = Очистка флага BCD<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - 0 - - -<br />
| IMP | CLD | D8 | 1 | 2<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = CLI<br />
| Операция = 0 -> I<br />
| Описание = Очистка флага запрета прерываний<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - 0 - -<br />
| IMP | CLI | 58 | 1 | 2<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = CLV<br />
| Операция = 0 -> V<br />
| Описание = Очистка флага переполнения<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - 0 - - - - - -<br />
| IMP | CLV | B8 | 1 | 2<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = CMP<br />
| Операция = A – M<br />
| Описание = Сравнение аккумулятора с памятью<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| IMM | CMP #Oper | C9 | 2 | 2 <br />
| ZP | CMP Oper | C5 | 2 | 3<br />
| ZP, X | CMP Oper,X | D5 | 2 | 4<br />
| ABS | CMP Oper | CD | 3 | 4<br />
| ABS, X | CMP Oper,X | DD | 3 | 4*<br />
| ABS, Y | CMP Oper,Y | D9 | 3 | 4*<br />
| IND, X | CMP (Oper,X) | C1 | 2 | 6<br />
| IND, Y | CMP (Oper),Y | D1 | 2 | 5*<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = CPX<br />
| Операция = X – M<br />
| Описание = Сравнение X с памятью<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| IMM | CPX *Oper | E0 | 2 | 2<br />
| ZP | CPX Oper | E4 | 2 | 3<br />
| ABS | CPX Oper | EC | 3 | 4<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = CPY<br />
| Операция = Y – M<br />
| Описание = Сравнение Y с памятью<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| IMM | CPY *Oper | C0 | 2 | 2 <br />
| ZP | CPY Oper | C4 | 2 | 3 <br />
| ABS | CPY Oper | CC | 3 | 4 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = DEC<br />
| Операция = M – 1 -> M<br />
| Описание = Декремент памяти<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| ZP | DEC Oper | C6 | 2 | 5 <br />
| ZP, X | DEC Oper,X | D6 | 2 | 6 <br />
| ABS | DEC Oper | CE | 3 | 6 <br />
| ABS, X | DEC Oper,X | DE | 3 | 7 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = DEX<br />
| Операция = X – 1 -> X<br />
| Описание = Декремент X<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | DEX | CA | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = DEY<br />
| Операция = Y – 1 -> Y<br />
| Описание = Декремент Y<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | DEY | 88 | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = EOR<br />
| Операция = A xor M -> A<br />
| Описание = Логическое XOR<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | EOR #Oper | 49 | 2 | 2 <br />
| ZP | EOR Oper | 45 | 2 | 3 <br />
| ZP, X | EOR Oper,X | 55 | 2 | 4 <br />
| ABS | EOR Oper | 4D | 3 | 4 <br />
| ABS, X | EOR Oper,X | 5D | 3 | 4* <br />
| ABS, Y | EOR Oper,Y | 59 | 3 | 4* <br />
| IND, X | EOR (Oper,X) | 41 | 2 | 6 <br />
| IND, Y | EOR (Oper),Y | 51 | 2 | 5* <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = INC<br />
| Операция = M + 1 -> M<br />
| Описание = Инкремент памяти<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| ZP | INC Oper | E6 | 2 | 5 <br />
| ZP, X | INC Oper,X | F6 | 2 | 6 <br />
| ABS | INC Oper | EE | 3 | 6 <br />
| ABS, X | INC Oper,X | FE | 3 | 7 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = INX<br />
| Операция = X + 1 -> X<br />
| Описание = Инкремент X<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | INX | E8 | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = INY<br />
| Операция = Y + 1 -> Y<br />
| Описание = Инкремент Y<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | INY | C8 | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = JMP<br />
| Операция = (PC+1) -> PC или ((PC+1)) -> PC<br />
| Описание = Безусловный переход<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ABS | JMP Oper | 4C | 3 | 3 <br />
| IND | JMP (Oper) | 6C | 3 | 5 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = JSR<br />
| Операция = PC+2 -> (S+3000), S - 2 -> S, (PC+1) -> PC<br />
| Описание = Вызов подпрограммы<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ABS | JSR Oper | 20 | 3 | 6 <br />
| Примечание = В стек помещается адрес следующей команды минус один байт!<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = LDA<br />
| Операция = M -> A<br />
| Описание = Загрузка аккумулятора<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | LDA #Oper | A9 | 2 | 2 <br />
| ZP | LDA Oper | A5 | 2 | 3 <br />
| ZP, X | LDA Oper,X | B5 | 2 | 4 <br />
| ABS | LDA Oper | AD | 3 | 4 <br />
| ABS, X | LDA Oper,X | BD | 3 | 4* <br />
| ABS, Y | LDA Oper,Y | B9 | 3 | 4* <br />
| IND, X | LDA (Oper,X) | A1 | 2 | 6 <br />
| IND, Y | LDA (Oper),Y | B1 | 2 | 5* <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = LDX<br />
| Операция = M -> X<br />
| Описание = Загрузка X<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | LDX #Oper | A2 | 2 | 2 <br />
| ZP | LDX Oper | A6 | 2 | 3 <br />
| ZP, Y | LDX Oper,Y | B6 | 2 | 4 <br />
| ABS | LDX Oper | AE | 3 | 4 <br />
| ABS, Y | LDX Oper,Y | BE | 3 | 4* <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = LDY<br />
| Операция = M -> Y<br />
| Описание = Загрузка Y<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | LDY #Oper | A0 | 2 | 2 <br />
| ZP | LDY Oper | A4 | 2 | 3 <br />
| ZP, X | LDY Oper,X | B4 | 2 | 4 <br />
| ABS | LDY Oper | AC | 3 | 4 <br />
| ABS, X | LDY Oper,X | BC | 3 | 4* <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = LSR<br />
| Операция = 0 -> [A или M] -> С<br />
| Описание = Логический сдвиг вправо<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = 0 - - - - - * *<br />
| ACC | LSR A | 4A | 1 | 2 <br />
| ZP | LSR Oper | 46 | 2 | 5 <br />
| ZP, X | LSR Oper,X | 56 | 2 | 6 <br />
| ABS | LSR Oper | 4E | 3 | 6 <br />
| ABS, X | LSR Oper,X | 5E | 3 | 7 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = NOP<br />
| Операция = No operation<br />
| Описание = Пустая операция<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| IMP | NOP | EA | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ORA<br />
| Операция = A or M -> A<br />
| Описание = Логическое OR<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | ORA #Oper | 09 | 2 | 2 <br />
| ZP | ORA Oper | 05 | 2 | 3 <br />
| ZP, X | ORA Oper,X | 15 | 2 | 4 <br />
| ABS | ORA Oper | 0D | 3 | 4 <br />
| ABS, X | ORA Oper,X | 1D | 3 | 4* <br />
| ABS, Y | ORA Oper,Y | 19 | 3 | 4* <br />
| IND, X | ORA (Oper,X) | 01 | 2 | 6 <br />
| IND, Y | ORA (Oper),Y | 11 | 2 | 5 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = PHA<br />
| Операция = A -> (S + 3700), S - 1 -> S<br />
| Описание = Поместить аккумулятор в стек<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| IMP | PHA | 48 | 1 | 3 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = PHP<br />
| Операция = P -> (S + 3800), S - 1 -> S<br />
| Описание = Поместить слово состояния в стек<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| IMP | PHP | 08 | 1 | 3 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = PLA<br />
| Операция = S + 1 -> S, (S + 3900) -> A<br />
| Описание = Загрузить аккумулятор из стека<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | PLA | 68 | 1 | 4 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = PLP<br />
| Операция = S + 1 -> S, (S + 4000) -> P<br />
| Описание = Загрузить слово состояния из стека<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - * * * * *<br />
| IMP | PLP | 28 | 1 | 4 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ROL<br />
| Операция = <- [A или M] <- C <-<br />
| Описание = Циклический сдвиг влево<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| ACC | ROL A | 2A | 1 | 2 <br />
| ZP | ROL Oper | 26 | 2 | 5 <br />
| ZP, X | ROL Oper,X | 36 | 2 | 6 <br />
| ABS | ROL Oper | 2E | 3 | 6 <br />
| ABS, X | ROL Oper,X | 3E | 3 | 7 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ROR<br />
| Операция = -> C -> [A или M] -><br />
| Описание = Циклический сдвиг вправо<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| ACC | ROR A | 6A | 1 | 2 <br />
| ZP | ROR Oper | 66 | 2 | 5 <br />
| ZP, X | ROR Oper,X | 76 | 2 | 6 <br />
| ABS | ROR Oper | 6E | 3 | 6 <br />
| ABS, X | ROR Oper,X | 7E | 3 | 7 <br />
| Примечание = Инструкция ROR доступна в микропроцессорах MCS650X с июня 1976 г.<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = RTI<br />
| Операция = (4300 + S + 1) -> P, (4300 + S + 2) -> PC, S + 3 -> S<br />
| Описание = Возврат из прерывания<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - * * * * *<br />
| IMP | RTI | 40 | 1 | 6 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = RTS<br />
| Операция = (4400 + S + 1) -> PС, S + 2 -> S<br />
| Описание = Возврат из подпрограммы<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| IMP | RTS | 60 | 1 | 6 <br />
| Примечание = После извлечения адреса возврата из стека к нему прибавляется единица!<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SBC<br />
| Операция = A - M - C -> A, C<br />
| Описание = Вычитание с займом<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - - - - * *<br />
| IMM | SBC #Oper | E9 | 2 | 2 <br />
| ZP | SBC Oper | E5 | 2 | 3 <br />
| ZP, X | SBC Oper,X | F5 | 2 | 4 <br />
| ABS | SBC Oper | ED | 3 | 4 <br />
| ABS, X | SBC Oper,X | FD | 3 | 4* <br />
| ABS, Y | SBC Oper,Y | F9 | 3 | 4* <br />
| IND, X | SBC (Oper,X) | E1 | 2 | 6 <br />
| IND, Y | SBC (Oper),Y | F1 | 2 | 5 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SEC<br />
| Операция = 1 -> C<br />
| Описание = Установка флага переноса<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - 1<br />
| IMP | SEC | 38 | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SED<br />
| Операция = 1 -> D<br />
| Описание = Установка флага BCD<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - 1 - - -<br />
| IMP | SED | F8 | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SEI<br />
| Операция = 1 -> I<br />
| Описание = Установка флага запрета прерываний<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - 1 - - -<br />
| IMP | SEI | 78 | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = STA<br />
| Операция = A -> M<br />
| Описание = Сохранить аккумулятор в памяти<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ZP | STA Oper | 85 | 2 | 3 <br />
| ZP, X | STA Oper,X | 95 | 2 | 4 <br />
| ABS | STA Oper | 8D | 3 | 4 <br />
| ABS, X | STA Oper,X | 9D | 3 | 5 <br />
| ABS, Y | STA Oper, Y | 99 | 3 | 5 <br />
| IND, X | STA (Oper,X) | 81 | 2 | 6 <br />
| IND, Y | STA (Oper),Y | 91 | 2 | 6 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = STX<br />
| Операция = X -> M<br />
| Описание = Сохранить X в памяти<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ZP | STX Oper | 86 | 2 | 3 <br />
| ZP, Y | STX Oper,Y | 96 | 2 | 4 <br />
| ABS | STX Oper | 8E | 3 | 4 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = STY<br />
| Операция = Y -> M<br />
| Описание = Сохранить Y в памяти<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ZP | STY Oper | 84 | 2 | 3 <br />
| ZP, X | STY Oper,X | 94 | 2 | 4 <br />
| ABS | STY Oper | 8C | 3 | 4 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = TAX<br />
| Операция = A -> X<br />
| Описание = Передать A в X<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | TAX | AA | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = TAY<br />
| Операция = A -> Y<br />
| Описание = Передать A в X<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | TAY | A8 | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = TSX<br />
| Операция = S -> X<br />
| Описание = Передать S в X<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | TSX | BA | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = TXA<br />
| Операция = X -> A<br />
| Описание = Передать X в A<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | TXA | 8A | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = TXS<br />
| Операция = X -> S<br />
| Описание = Передать X в S<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| IMP | TXS | 9A | 1 | 2 <br />
| Примечание = В отличие от других операций загрузки, не влияет на флаг N<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = TYA<br />
| Операция = Y -> A<br />
| Описание = Передать Y в A<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | TYA | 98 | 1 | 2 <br />
}}<br />
<br />
== Особенности ==<br />
=== Пересечение границ страниц в разных режимах адресации ===<br />
В режиме адресации к нулевой странице верхний байт вычисленного адреса всегда обнуляется, поэтому последовательность<br />
<br />
LDX #1<br />
LDA $FF,X<br />
<br />
Загрузит значение из адреса 0000H, а не 0100H, как можно было бы ожидать.<br />
<br />
При косвенной (Indirect) адресации двухбайтовый адрес не может быть извлечен через границу страницы, поэтому все варианты<br />
<br />
LDA ($FF),Y<br />
<br />
LDX #$00<br />
LDA ($FF,X)<br />
<br />
LDX #$FF<br />
LDA ($00,X)<br />
Извлекут младший байт из адреса 00FFH, а младший из 0000H.<br />
<br />
JMP (92FF)<br />
<br />
Получит младший байт из адреса 12FFH, а старший из 1200H.<br />
<br />
=== Внешняя установка флага V ===<br />
В некоторых моделях процессоров есть внешний сигнал -SO, устанавливающий флаг V. Назначение такого сигнала — прерывание ожидания вызова от внешнего устройства в бесконечном цикле команды BVC ($50 $FE).<br />
<br />
=== Флаг B при совпадении BRK и NMI ===<br />
В случае если в момент обработки BRK приходит аппаратное прерывание NMI, процессор переходит по адресу ($FFFA) вместо ($FFFE), а в стек попадает значение P с установленным флагом B.<br />
<br />
=== Работа команд ADC, SBC и ARR в режиме BCD ===<br />
В режиме BCD данные команды работают с числами не двоичном режиме, а BCD-представлении. Фактически, из особенностей нужно упомянуть только влиянии этого режима на установку флагов N, Z и V.<br />
<br />
* Z устанавливается по значению, эквивалентному двоичной, а не BCD-операции.<br />
Например, код<br />
<br />
SED<br />
CLC<br />
LDA #$80<br />
ADC #$80<br />
<br />
Даст в результате A=$60, но при этом Z=1.<br />
<br />
* Флаги N и V устанавливаются после исправления нижнего полубайта, но до исправления верхнего.<br />
<br />
Общий алгоритм работы команды ADC в режиме BCD следующий:<br />
<pre><br />
беззнаковые<br />
A, /* Аккумулятор */<br />
AL, /* нижняя половина аккумулятора */<br />
AH, /* верхняя половина аккумулятора */<br />
<br />
C, /* Флаг переноса */<br />
Z, /* Флаг нуля */<br />
V, /* Флаг переполнения */<br />
N, /* Флаг знака */<br />
<br />
s; /* значение, прибавляемое к аккумулятору */<br />
<br />
AL = (A & 15) + (s & 15) + C; /* Вычисляем нижнюю половину. */<br />
<br />
AH = (A >> 4) + (s >> 4) + (AL > 15); /* Вычисляем верхнюю половину. */<br />
<br />
if (AL > 9) AL += 6; /* BCD-исправление нижней половины. */<br />
<br />
Z = ((A + s + C) & 255 != 0); /* Флаг нуля устанавливается<br />
Как обычно. */<br />
<br />
/* Флаги знака и переполнения устанавливаются как обычно,<br />
но до исправления верхней половины */<br />
<br />
N = (AH & 8 != 0);<br />
V = ((AH << 4) ^ A) & 128 && !((A ^ s) & 128);<br />
<br />
if (AH > 9) AH += 6; /* BCD-исправление верхней половины. */<br />
<br />
/* Перенос – единственный, кто устанавливается в самом конце. */<br />
<br />
C = (AH > 15);<br />
A = ((AH << 4) | (AL & 15)) & 255;<br />
</pre><br />
<br />
С SBC проще. На установку флагов после нее флаг D не влияет.<br />
<br />
<pre><br />
беззнаковые<br />
A, /* Аккумулятор */<br />
AL, /* нижняя половина аккумулятора */<br />
AH, /* верхняя половина аккумулятора */<br />
<br />
C, /* Флаг переноса */<br />
Z, /* Флаг нуля */<br />
V, /* Флаг переполнения */<br />
N, /* Флаг знака */<br />
<br />
s; /* значение, вычитаемое из аккумулятора */<br />
<br />
AL = (A & 15) - (s & 15) - !C; /* Вычисляем нижнюю половину. */<br />
<br />
if (AL & 16) AL -= 6; /* BCD-исправление нижней половины. */<br />
<br />
AH = (A >> 4) - (s >> 4) - (AL & 16); /* Вычисляем верхнюю половину. */<br />
<br />
if (AH & 16) AH -= 6; /* BCD-исправление верхней половины. */<br />
<br />
/* Все флаги устанавливаем как обычно. */<br />
<br />
C = (A - s - !C) & 256 != 0;<br />
Z = (A - s - !C) & 255 != 0;<br />
V = ((A - s - !C) ^ s) & 128 && (A ^ s) & 128;<br />
N = (A - s - !C) & 128 != 0;<br />
<br />
A = ((AH << 4) | (AL & 15)) & 255;<br />
</pre><br />
<br />
=== Другие особенности ===<br />
* Процессор всегда прочитывает второй байт команды условного перехода. Если происходит переход с пересечением границы страницы, то процессор сначала читает байт из текущей страницы, и только потом из нужной.<br />
* Если граница страницы пересекается в других режимах адресации, процессор всегда сначала читает ошибочный байт со страницы, на 1 меньшую, чем нужная.<br />
* Команды вида «Прочитать-Изменить-Записать» выполняют две операции записи — сначала неизмененное значение, затем измененное (то есть INC физически выполняется как LDX loc; STX loc; INX; STX loc).<br />
* В цикле записи сигнал -RDY игнорируется, поэтому перед выполнением DMA его нужно держать не менее 3 циклов подряд, так как это максимально возможное подряд число циклов записи, вызываемое переходом на обработчик прерывания).<br />
* При отработке сигнала -RESET значения в регистрах, за исключением PC, остаются неизменными.<br />
* Процессор всегда прочитывает байт, следующий за кодом команды. Так как многие команды двух-трехбайтовые, это достаточно эффективно.<br />
* Если команда в своем последнем цикле не сохраняет результат в память, то процессор в этот момент читает код следующей команды. Поэтому для таких команд в таблицах обычно указывается время исполнения, на 1 меньше реального.<br />
<br />
=== Обработка прерываний ===<br />
Обработка NMI и IRQ занимает 7 циклов, их обработка в целом похожа на команду BRK. IRQ и BRK устанавливают флаг I, в то время как NMI — нет.<br />
<br />
Перед обработкой прерывания процессор ожидает завершения выполнения текущей команды. Чтобы прерывание было обработано до следующей команды, оно должно быть получено не позднее последнего цикла текущей команды. Исключение есть только для команды BRK. Если прерывание приходит до 4-го цикла (сохранение флагов), то команда игнорируется и происходит переход на обработчик аппаратного прерывания. Обычно это не вызывает проблем, так как в случае совпадения BRK и IRQ все равно устанавливается флаг B, обработчик считает, что выполняется BRK, а IRQ срабатывает по возвращении из обработки BRK. С другой стороны, совпадение BRK и NMI более фатально. Если флаг B не проверяется в обработчике NMI, и перед возвращением адрес возврата не уменьшается на 2, то команда BRK будет потеряна.<br />
<br />
При совпадении IRQ и NMI, процессор, теоретически, должен перейти на обработку NMI, а потом сразу на IRQ, хотя это и не проверено на практике.<br />
<br />
Обработка RESET занимает 6 циклов с момента снятия сигнала. Все регистры сохраняются, кроме PC.<br />
<br />
=== Отличия NMOS и CMOS вариантов ===<br />
* Индексная адресация при пересечении границы страницы:<br />
** NMOS: Дополнительное чтение по неправильному адресу;<br />
** CMOS: Дополнительное чтение последнего байта инструкции;<br />
* Выполнение команд с недопустимыми кодами:<br />
** NMOS: Вешают процессор до выполнения принудительного сброса;<br />
** CMOS: Исполняются как NOP (Резерв на будущее)<br />
* Переход по косвенному адресу, когда операнд пересекает границу страницы (xxFFH):<br />
** NMOS: Второй байт берется из первого байта текущей страницы;<br />
** CMOS: Второй байт берется со следующей страницы, ко времени исполнения добавляется 1 такт.<br />
* Команды вида «Прочитать-Изменить-Записать»<br />
** NMOS: Одна лишняя запись (см. выше);<br />
** CMOS: Одно лишнее чтение.<br />
* Флаг D<br />
** NMOS: После сброса не определен;<br />
** CMOS: Сбрасывается в 0 после аппаратного сброса или прерывания.<br />
* Флаги в режиме BCD<br />
** NMOS: Значения некорректны (см. выше);<br />
** CMOS: Значения правильные, но добавляется 1 цикл.<br />
* Прерывания в момент выборки команды BRK:<br />
** NMOS: Происходит переход по вектору прерывания, а не BRK;<br />
** CMOS: Сначала исполняется команда BRK, потом срабатывает прерывание.<br />
<br />
== Недокументированные команды ==<br />
<br />
Многие недокументированные команды реально не выполняют операцию AND между регистрами. Это происходит автоматически, когда два значения помещаются одновременно на внутреннюю шину с открытыми коллекторами.<br />
<br />
=== NOP ===<br />
Команда NOP, помимо кода 90, может выполняться с другими методами адресации. В этом случае она эквивалентна команде LDA, за исключением того, что она не сохраняет результат и не влияет на флаги.<br />
<br />
{{Команда<br />
| Обозначение = ANE<br />
| Операция = Вар. 1: A = ((A and #581 and X) or ( #$EE and X)) and #byte; Вар. 2: X and #byte -> A<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | ANE #byte | 8B | 2 | ? <br />
| Примечание = В реальности параметр #581 может принимать значения #580, #58 или #$00, что зависит от значения, оставленного на шине видеоконтроллером после прерывания команды в режиме DMA.<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ANC<br />
| Операция = Вар. 1: A and #byte -> A, ASL A; Вар. 2: предыдущее без ASL<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| IMM | ANC #Oper | 0B | 2 | ?<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ANC?<br />
| Операция = Вар. 1: A and #byte -> A, ROL A; Вар. 2: предыдущее без ROL<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| IMM | ANC #Oper | 2B | 2 | ?<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ARR (ADC + ROR)<br />
| Операция = D=0: A and #byte -> A, ROR, A7->S, A6->V, (A==0)->Z, A6 xor A5 -> C<br><br />
D=1: см. код ниже<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - - - - * *<br />
| IMM | ARR #byte | 6B | 2? | ? <br />
| Примечание = Алгоритм для BCD-режима:<br />
<pre><br />
A, /* Аккумулятор */<br />
AL, /* нижняя половина аккумулятора */<br />
AH, /* верхняя половина аккумулятора */<br />
<br />
C, /* Флаг переноса */<br />
Z, /* Флаг нуля */<br />
V, /* Флаг переполнения */<br />
N, /* Флаг знака */<br />
<br />
t, /* вспомогательная переменная */<br />
s; /* байт-параметр команды */<br />
<br />
t = A & s; /* Выполняем AND. */<br />
<br />
AH = t >> 4; /* Делим результат */<br />
AL = t & 15; /* на части. */<br />
<br />
N = C; /* Флаг знака */<br />
Z = !(A = (t >> 1) | (C << 7)); /* Z как обычно */<br />
V = (t ^ A) & 64; /* a V магически. */<br />
<br />
if (AL + (AL & 1) > 5) /* «заплатка» BCD для нижней половины. */<br />
A = (A & 0xF0) | ((A + 6) & 0xF);<br />
<br />
if (C = AH + (AH & 1) > 5) /* Перенос. */<br />
A = (A + 0x60) & 0xFF; /* «заплатка» BCD для верхней половины. */<br />
</pre><br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ASR<br />
| Операция = A and #byte -> A, LSR A<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| IMM | ASR #Oper | 4B | 2 | ?<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = DCP (DEC + CMP)<br />
| Операция = M + 1 -> M, A – M<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| ZP | DCP Oper | C7 | 2 | ? <br />
| ZP, X | DCP Oper,X | D7 | 2 | ? <br />
| ABS | DCP Oper | CF | 3 | ? <br />
| ABS, X | DCP Oper,X | DF | 3 | ? <br />
| ABS, Y | DCP Oper, Y | DB | 3 | ? <br />
| IND, X | DCP (Oper,X) | C3 | 2 | ? <br />
| IND, Y | DCP (Oper),Y | D3 | 2 | ? <br />
}}<br />
<br />
<br />
{{Команда<br />
| Обозначение = ISB (INC + SBC)<br />
| Операция = M + 1 -> M, A – M -> A <br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - - - - * *<br />
| ZP | ISB Oper | E7 | 2 | ? <br />
| ZP, X | ISB Oper,X | F7 | 2 | ? <br />
| ABS | ISB Oper | EF | 3 | ? <br />
| ABS, X | ISB Oper,X | FF | 3 | ? <br />
| ABS, Y | ISB Oper, Y | FB | 3 | ? <br />
| IND, X | ISB (Oper,X) | E3 | 2 | ? <br />
| IND, Y | ISB (Oper),Y | F3 | 2 | ? <br />
}}<br />
<br />
<br />
{{Команда<br />
| Обозначение = LAS<br />
| Операция = M and S -> A, X, S<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| ABS, Y | LAS Oper, Y | BB | 3 | ? <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = LAX<br />
| Операция = M -> A, X<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| ZP | LAX Oper | A7 | 2 | ? <br />
| ZP, Y! | LAX Oper,Y | B7 | 2 | ? <br />
| ABS | LAX Oper | AF | 3 | ? <br />
| ABS, Y | LAX Oper,Y | BF | 3 | ? <br />
| IND, X | LAX (Oper,Y) | A3 | 2 | ? <br />
| IND, Y | LAX (Oper),Y | B3 | 2 | ? <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = LXA<br />
| Операция = Вар. 1: A = X = ANE; Вар. 2: A = X = (A & #byte); Вар. 3: A = X = #byte;<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | LXA #byte | AB | 2? | ? <br />
}}<br />
<br />
<br />
{{Команда<br />
| Обозначение = RLA<br />
| Операция = ROL M, A and M -> A<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| ZP | RLA Oper | 27 | 2 | ? <br />
| ZP, X | RLA Oper,X | 37 | 2 | ? <br />
| ABS | RLA Oper | 2F | 3 | ? <br />
| ABS, X | RLA Oper,X | 3F | 3 | ? <br />
| ABS, Y | RLA Oper, Y | 3B | 3 | ? <br />
| IND, X | RLA (Oper,X) | 23 | 2 | ? <br />
| IND, Y | RLA (Oper),Y | 33 | 2 | ? <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = RRA<br />
| Операция = ROR M, ADC(A, M) -> A<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - - - - * *<br />
| ZP | RRA Oper | 67 | 2 | ? <br />
| ZP, X | RRA Oper,X | 77 | 2 | ? <br />
| ABS | RRA Oper | 6F | 3 | ? <br />
| ABS, X | RRA Oper,X | 7F | 3 | ? <br />
| ABS, Y | RRA Oper, Y | 7B | 3 | ? <br />
| IND, X | RRA (Oper,X) | 63 | 2 | ? <br />
| IND, Y | RRA (Oper),Y | 73 | 2 | ? <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SAX<br />
| Операция = A and X -> M<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ZP | SAX Oper | 87 | 2 | ? <br />
| ZP, Y! | SAX Oper,Y | 97 | 2 | ? <br />
| ABS | SAX Oper | 8F | 3 | ? <br />
| IND, X | SAX (Oper,X) | 83 | 2 | ? <br />
}}<br />
<br />
<br />
{{Команда<br />
| Обозначение = SBX (CMP + DEX)<br />
| Операция = (A and X) - #byte -> X<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| IMM | SBX #byte | CB | 2 | ? <br />
| Примечание = От CMP осталось вычитание, от DEX – сохранение результата в X. AND берется из одновременного подключения A и X к АЛУ.<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SHA<br />
| Операция = A & X & (ADDR_HI + 1)) -> M<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| IND, Y | SHA (Oper),Y | 93 | 2 | ?<br />
| ABS, Y | SHA Oper,Y | 9F | 3 | ?<br />
| Примечание = ADDR_HI, вероятно, старший байт адреса M?<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SHS<br />
| Операция = A and X -> S, S and ADDR_HI -> M<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ABS, Y | SHS Oper,Y | 9B | 3 | ?<br />
| Примечание = ADDR_HI, вероятно, старший байт адреса M?<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SHX<br />
| Операция = Вар. 1: X and (ADDR_HI + 1) -> M; Вар. 2: X and ADDR_HI -> M<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ABS, Y | SHX Oper,Y | 9E | 3 | ?<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SHY<br />
| Операция = Вар. 1: Y & (ADDR_HI + 1) -> M; Вар. 2: Y and ADDR_HI -> M<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ABS, Y | SHY Oper,Y | 9C | 3 | ?<br />
| Примечание = По другому источнику, режим адресации ABS, X.<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SLO (ASL + ORA)<br />
| Операция = ASL M -> M, A or M -> A<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| ZP | SLO Oper | 07 | 2 | ? <br />
| ZP, X | SLO Oper,X | 17 | 2 | ? <br />
| ABS | SLO Oper | 0F | 3 | ? <br />
| ABS, X | SLO Oper,X | 1F | 3 | ? <br />
| ABS, Y | SLO Oper, Y | 1B | 3 | ? <br />
| IND, X | SLO (Oper,X) | 03 | 2 | ? <br />
| IND, Y | SLO (Oper),Y | 13 | 2 | ? <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SRE<br />
| Операция = LSR M -> M, A xor M -> A<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| ZP | SRE Oper | 47 | 2 | ? <br />
| ZP, X | SRE Oper,X | 57 | 2 | ? <br />
| ABS | SRE Oper | 4F | 3 | ? <br />
| ABS, X | SRE Oper,X | 5F | 3 | ? <br />
| ABS, Y | SRE Oper, Y | 5B | 3 | ? <br />
| IND, X | SRE (Oper,X) | 43 | 2 | ? <br />
| IND, Y | SRE (Oper),Y | 53 | 2 | ? <br />
}}<br />
<br />
== Порядок декодирования команд ==<br />
<br />
Любую команду 6502 можно представить следующим образом:<br />
<br />
XXXYYYZZ<br />
└┬┘└┬┘└┤<br />
│ │ └── Группа команд<br />
│ └───── Режим адресации<br />
└──────── Код команды<br />
<br />
Таким образом, для уменьшения сравнений можно использовать следующий алгоритм:<br />
<br />
swith ZZ:<br />
case 0:<br />
switch XXX:<br />
case 0:<br />
//Команды 000yyy00<br />
Do_Command_0(yyy);<br />
break;<br />
case 1:<br />
//Команды 001yyy00<br />
Do_Command_1(yyy);<br />
break;<br />
// etc<br />
end;<br />
case 1:<br />
switch XXX:<br />
case 0:<br />
//Команды 000yyy01<br />
Do_Command_2(yyy);<br />
break;<br />
case 1:<br />
//Команды 001yyy01<br />
Do_Command_3(yyy);<br />
break;<br />
// etc<br />
end;<br />
break<br />
end; <br />
<br />
Далее все команды сгруппированы по этому принципу.<br />
* «*» отмечены недокументированные команды)<br />
* HALT обозначает зависание процессора<br />
* «*NOP mode» обозначает, что команда эквивалента «LDA mode», но результат не сохраняется и флаги не меняются.<br />
<br />
??? 000xxx00<br />
000 BRK<br />
001 *NOP zp<br />
010 PHP<br />
011 *NOP abs<br />
100 BPL<br />
101 *NOP zp,x<br />
110 CLC<br />
111 *NOP abs,x<br />
<br />
??? 001xxx00<br />
000 JSR<br />
001 BIT zp<br />
010 PLP impl<br />
011 BIT abs<br />
100 BMI rel<br />
101 *NOP zp,x<br />
110 SEC impl<br />
111 *NOP abs,x<br />
<br />
??? 010xxx00<br />
000 RTI<br />
001 *NOP zp<br />
010 PHA impl<br />
011 JMP abs<br />
100 BVC rel<br />
101 *NOP zp,x<br />
110 CLI impl<br />
111 *NOP abs,x<br />
<br />
??? 011xxx00<br />
000 RTS<br />
001 *NOP zp<br />
010 PLA impl<br />
011 JMP (abs)<br />
100 BVS rel<br />
101 *NOP zp,x<br />
110 SEI impl<br />
111 *NOP abs,x<br />
<br />
??? 100xxx00<br />
000 *NOP<br />
001 STY zp<br />
010 DEY impl<br />
011 STY abs<br />
100 BCC rel<br />
101 STY zp,x<br />
110 TYA impl<br />
111 *SHY abs,x<br />
<br />
??? 101xxx00<br />
000 LDY<br />
001 LDY zp<br />
010 TAY impl<br />
011 LDY abs<br />
100 BCS rel<br />
101 LDY zp,x<br />
110 CLV impl<br />
111 LDY abs,x<br />
<br />
??? 110xxx00<br />
000 CPY<br />
001 CPY zp<br />
010 INY impl<br />
011 CPY abs<br />
100 BNE rel<br />
101 *NOP zp,x<br />
110 CLD impl<br />
111 *NOP abs,x<br />
<br />
??? 111xxx00<br />
000 CPX<br />
001 CPX zp<br />
010 INX impl<br />
011 CPX abs<br />
100 BEQ rel<br />
101 *NOP zp,x<br />
110 SED impl<br />
111 *NOP abs,x<br />
<br />
ORA 000xxx01<br />
000 ind,x<br />
001 zp<br />
010 immed<br />
011 abs<br />
100 ind,y<br />
101 zp,x<br />
110 abs,y<br />
111 abs,x<br />
<br />
AND 001xxx01<br />
EOR 010xxx01<br />
ADC 011xxx01<br />
STA 100xxx01<br />
LDA 101xxx01<br />
CMP 110xxx01<br />
SBC 111xxx01<br />
<br />
ASL 000xxx10<br />
000 *HALT<br />
001 zp<br />
010 accum<br />
011 abs<br />
100 *HALT<br />
101 zp,x<br />
110 *NOP<br />
111 abs,x<br />
<br />
ROL 001xxx10<br />
000 *HALT<br />
001 zp<br />
010 accum<br />
011 abs<br />
100 *HALT<br />
101 zp,x<br />
110 *NOP<br />
111 abs,x<br />
<br />
LSR 010xxx10<br />
000 *HALT<br />
001 zp<br />
010 accum<br />
011 abs<br />
100 *HALT<br />
101 zp,x<br />
110 *NOP<br />
111 abs,x<br />
<br />
ROR 011xxx10<br />
000 *HALT<br />
001 zp<br />
010 accum<br />
011 abs<br />
100 *HALT<br />
101 zp,x<br />
110 *NOP<br />
111 abs,x<br />
<br />
STX 100xxx10<br />
000 *NOP(HALT)<br />
001 zp<br />
010 TXA (accum)<br />
011 abs<br />
100 *HALT<br />
101 zp,y<br />
110 TXS<br />
111 *SHX**y)<br />
<br />
LDX 101xxx10<br />
000 imm<br />
001 zp<br />
010 TAX (accum)<br />
011 abs<br />
100 *HALT<br />
101 zp,y<br />
110 TSX<br />
111 *y)<br />
<br />
DEC 110xxx10<br />
000 *NOP(HALT)<br />
001 zp<br />
010 DEX (impl)<br />
011 abs<br />
100 *HALT<br />
101 zp,x<br />
110 *NOP<br />
111 abs,x<br />
<br />
INC 111xxx10<br />
000 *NOP(HALT)<br />
001 zp<br />
010 NOP (impl)<br />
011 abs<br />
100 *HALT<br />
101 zp,x<br />
110 *NOP<br />
111 abs,x<br />
<br />
*SLO 000xxx11<br />
000 *SLO ind,x<br />
001 *SLO zp<br />
010 *ANC imm<br />
011 *SLO abs<br />
100 *SLO ind,y<br />
101 *SLO zp,x<br />
110 *SLO abs,y<br />
111 *SLO abs,x<br />
<br />
*RLA 001xxx11<br />
000 *RLA ind,x<br />
001 *RLA zp<br />
010 *ANC imm<br />
011 *RLA abs<br />
100 *RLA ind,y<br />
101 *RLA zp,x<br />
110 *RLA abs,y<br />
111 *RLA abs,x<br />
<br />
*SRE 010xxx11<br />
000 *SRE ind,x<br />
001 *SRE zp<br />
010 *ASR imm<br />
011 *SRE abs<br />
100 *SRE ind,y<br />
101 *SRE zp,x<br />
110 *SRE abs,y<br />
111 *SRE abs,x<br />
<br />
*RRA 011xxx11<br />
000 *RRA ind,x<br />
001 *RRA zp<br />
010 *ARR imm<br />
011 *RRA abs<br />
100 *RRA ind,y<br />
101 *RRA zp,x<br />
110 *RRA abs,y<br />
111 *RRA abs,x<br />
<br />
*??? 100xxx11<br />
000 *SAX ind,x<br />
001 *SAX zp<br />
010 *ANE imm<br />
011 *SAX abs<br />
100 *SHA ind,y<br />
101 *SAX* y)<br />
110 *SHS abs,y<br />
111 *SHA**y)<br />
<br />
*??? 101xxx11<br />
000 *LAX ind,x<br />
001 *LAX zp<br />
010 *LXA imm<br />
011 *LAX abs<br />
100 *LAX ind,y<br />
101 *LAX* y)<br />
110 *LAS abs,y<br />
111 *LAX* y)<br />
<br />
*DCP 110xxx11<br />
000 *DCP ind,x<br />
001 *DCP zp<br />
010 *SBX imm<br />
011 *DCP abs<br />
100 *DCP ind,y<br />
101 *DCP zp,x<br />
110 *DCP abs,y<br />
111 *DCP abs,x<br />
<br />
*ISB 111xxx11<br />
000 *ISB ind,x<br />
001 *IBS zp<br />
010 *SBC imm<br />
011 *ISB abs<br />
100 *ISB ind,y<br />
101 *ISB zp,x<br />
110 *ISB abs,y<br />
111 *ISB abs,x<br />
<br />
== Источники ==<br />
* http://www.oxyron.de/html/opcodes02.html<br />
* [http://6502.org/tutorials/65c02opcodes.html 65C02 Opcodes]<br />
* https://emuverse.ru/downloads/datasheets/processors/6502/c64doc.txt<br />
* [http://6502.org/tutorials/interrupts.html Investigating Interrupts]<br />
* [https://www.nesdev.org/the%20'B'%20flag%20&%20BRK%20instruction.txt 6502 'B' flag & BRK opcode]<br />
<br />
<br />
<br />
[[Категория:MOS 6502]]</div>Pantherhttps://emuverse.ru/w/index.php?title=MOS_Technology_6502/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4&diff=3735MOS Technology 6502/Система команд2024-01-12T13:20:12Z<p>Panther: /* Источники */</p>
<hr />
<div>{{Emuverse}}<br />
<small>{{TOCright}}</small><br />
== Регистры ==<br />
* A — аккумулятор, 8 бит;<br />
* X, Y — индексные регистры, 8 бит;<br />
* PC — счетчик команд, 16 бит;<br />
* S — указатель стека, 8 бит;<br />
* P — регистр состояния;<br />
** <tt>C (P0)</tt> — перенос;<br />
** <tt>Z (P1)</tt> — ноль;<br />
** <tt>I (P2)</tt> — запрет внешних прерываний — IRQ (I=0 — прерывания разрешены);<br />
** <tt>D (P3)</tt> — режим BCD для инструкций сложения и вычитания с переносом;<br />
** <tt>B (P4)</tt> — обработка прерывания (B=1 после выполнения команды BRK);<br />
** <tt>1 (P5)</tt> — не используется, равен 1;<br />
** <tt>V (P6)</tt> — переполнение;<br />
** <tt>N (P7)</tt> — знак. Равен старшему биту значения, загруженного в A, X или Y в результате выполнения операции (кроме TXS).<br />
<br />
== Режимы адресации и страницы ==<br />
Вся адресуемая 6502 память разбита на страницы по 256 байт. Если при обработке команды происходит пересечение границы страницы, инструкции могут выполняться несколько по-другому, что описано ниже. Две страницы имеют особое значение — страница 0 (00H-FFH), называемая «нулевой» — для этой страницы выделен особый режим адресации с однобайтовым адресом. Другая особая страница — № 1 (100H-1FFH), отведенная под стек. Так как регистр указателя стека восьмиразрядный, при обращении к стеку к значению регистра всегда добавляется 100H.<br />
<br />
Многие команды могут работать с несколькими режимами адресации, которые перечислены ниже:<br />
<br />
{| class=border<br />
! Название англ.<br />
! Название русск.<br />
! Описание<br />
! Обозначение<br />
! Пример<br />
! Код<br />
|-<br />
| Immediate<br />
| Непосредственная<br />
| Операнд располагается сразу за кодом инструкции<br />
| #<br />
| LDA #$0A<br />
| A9 02<br />
|-<br />
| Absolute<br />
| Абсолютная (прямая)<br />
| Адрес операнда располагается сразу за кодом инструкции<br />
|<br />
| LDA $1234<br />
| AD 34 12<br />
|-<br />
| Zeropage<br />
| Абсолютная на нулевой странице (для адресов 00H-0FFH)<br />
|<br />
|<br />
| LDA $2F<br />
| A5 2F<br />
|-<br />
| Accumulator/Implied<br />
| Аккумуляторная/Неявная<br />
| Операнд подразумевается самой командой.<br />
|<br />
| TAX<br />
| AA<br />
|-<br />
| Absolute, x<br />Absolute, y<br />
| Абсолютная индексная<br />
| Адрес, указанный за кодом операции, складывается со значением индексного регистра<br />
| ADDR, X<br /> ADDR, Y<br />
| nowrap | LDA $1234, X<br /> LDA $1234, Y<br />
| nowrap | D9 34 12<br />DD 34 12<br />
|-<br />
| Zeropage, x<br />Zeropage, y<br />
| Абсолютная индексная на нулевой странице<br />
|<br />
| ADDR, X<br /> ADDR, Y<br />
| LDA $2F, X<br />
| B5 2F<br />
|-<br />
| Indirect<br />
| Косвенная<br />
| Только в команде JMP. Новый адрес для счетчика команд берется из памяти, по адресу, указанному за кодом команды<br />
| (ADDR)<br />
| JMP ($1234)<br />
| 6С 34 12<br />
|-<br />
| Indirect, x<br />
| Индексно-косвенная на нулевой странице<br />
| Адрес операнда складывается из байта, следующего за кодом команды и содержимого регистра X. Важно! Старший байт суммы отбрасывается!<br />
| (ADDR, X)<br />
| LDA ($3E, X)<br />
| A1 3E<br />
|-<br />
| Indirect, y<br />
| Косвенно-индексная<br />
| Адрес операнда складывается из двух байт в нулевой странице по адресу, указанному вторым байтом команды, и регистра Y.<br />
| (ADDR), Y<br />
| LDA ($4C), Y<br />
| B1 4C<br />
|-<br />
| Relative<br />
| Относительная<br />
| Используется в условных переходах. Второй байт команды (как число со знаком от −128 до +127) добавляется к счетчику команд при выполнении условия. Важно! При сложении используется адрес команды, следующей за командой условного перехода, а не адрес выполняемой команды!<br />
|<br />
| BEQ $A7<br />
| F0 A7<br />
|}<br />
<br />
== Алфавитный список команд ==<br />
Влияние на флаги:<br />
* «*» — влияет;<br />
* «-» — не влияет;<br />
* «0» — устанавливает в 0;<br />
* «1» — устанавливает в 1;<br />
<br />
Тайминги<br />
* «*» означает, что время увеличивается на 1 такт, если код команды пересекает границу страницы;<br />
* «+» означает время в случае перехода в пределах страницы;<br />
* «++» означает время в случае перехода за пределы текущей страницы;<br />
<br />
{{Команда<br />
| Обозначение = ADC<br />
| Операция = A + M + C -> A, C<br />
| Описание = Сложение с переносом<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - - - - * *<br />
| IMM | ADC #Oper | 69 | 2 | 2<br />
| ZP | ADC Oper | 65 | 2 | 3<br />
| ZP, X | ADC Oper,X | 75 | 2 | 4<br />
| ABS | ADC Oper | 6D | 3 | 4<br />
| ABS, X | ADC Oper,X | 7D | 3 | 4*<br />
| ABS, Y | ADC Oper,Y | 79 | 3 | 4*<br />
| IND, X | ADC (Oper,X) | 61 | 2 | 6<br />
| IND, Y | ADC (Oper),Y | 71 | 2 | 5*<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = AND<br />
| Операция = A and M -> A<br />
| Описание = Логическое AND<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | AND #Oper | 29 | 2 | 2<br />
| ZP | AND Oper | 25 | 2 | 3<br />
| ZP, X | AND Oper,X | 35 | 2 | 4<br />
| ABS | AND Oper | 2D | 3 | 4<br />
| ABS, X | AND Oper,X | 3D | 3 | 4*<br />
| ABS, Y | AND Oper,Y | 39 | 3 | 4*<br />
| IND, X | AND (Oper,X) | 21 | 2 | 6<br />
| IND, Y | AND (Oper),Y | 31 | 2 | 5<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ASL<br />
| Операция = C <- [A или M] <- 0<br />
| Описание = Арифметический сдвиг влево<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| ACC | ASL A | 0A | 1 | 2<br />
| ZP | ASL Oper | 06 | 2 | 5<br />
| ZP, X | ASL Oper,X | 16 | 2 | 6<br />
| ABS | ASL Oper | 0E | 3 | 6<br />
| ABS, X | ASL Oper,X | 1E | 3 | 7<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BCC<br />
| Операция = Branch on Carry Clear<br />
| Описание = Условный переход, если нет переноса<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BCC Oper | 90 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BCS<br />
| Операция = Branch on Carry Set<br />
| Описание = Условный переход, если перенос<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BCS Oper | B0 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BEQ<br />
| Операция = Branch on Equal<br />
| Описание = Условный переход, если равно (Z=1)<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BEQ Oper | F0 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BIT<br />
| Операция = (A and M) == 0 -> Z, M7 -> N, M6 -> V<br />
| Описание = Проверка битов<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - - - - * -<br />
| ZP | BIT Oper | 24 | 2 | 3<br />
| ABS | BIT Oper | 2C | 3 | 4<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BMI<br />
| Операция = Branch on Minus<br />
| Описание = Условный переход, если отрицательно (S=1)<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BMI Oper | 30 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BNE<br />
| Операция = Branch on Not Equal<br />
| Описание = Условный переход, если не равно (Z=0)<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BNE Oper | D0 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BPL<br />
| Операция = Branch on Plus<br />
| Описание = Условный переход, если положительно (S=0)<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BPL Oper | 10 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BRK<br />
| Операция = PC+2 -> (S+1200), P -> (S-2), S-3 -> S, ($FFFE) -> PC<br />
| Описание = Программное прерывание<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - 1 - 1 - -<br />
| IMP | BRK | 00 | 1 | 7<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BVC<br />
| Операция = Branch on Overflow Clear<br />
| Описание = Условный переход, если нет переполнения (V=0)<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BVC Oper | 50 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BVS<br />
| Операция = Branch on Overflow Set<br />
| Описание = Условный переход, если переполнение (V=1)<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BVS Oper | 70 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = CLC<br />
| Операция = 0 -> C<br />
| Описание = Очистка флага переноса<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - 0<br />
| IMP | CLC | 18 | 1 | 2<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = CLD<br />
| Операция = 0 -> D<br />
| Описание = Очистка флага BCD<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - 0 - - -<br />
| IMP | CLD | D8 | 1 | 2<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = CLI<br />
| Операция = 0 -> I<br />
| Описание = Очистка флага запрета прерываний<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - 0 - -<br />
| IMP | CLI | 58 | 1 | 2<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = CLV<br />
| Операция = 0 -> V<br />
| Описание = Очистка флага переполнения<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - 0 - - - - - -<br />
| IMP | CLV | B8 | 1 | 2<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = CMP<br />
| Операция = A – M<br />
| Описание = Сравнение аккумулятора с памятью<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| IMM | CMP #Oper | C9 | 2 | 2 <br />
| ZP | CMP Oper | C5 | 2 | 3<br />
| ZP, X | CMP Oper,X | D5 | 2 | 4<br />
| ABS | CMP Oper | CD | 3 | 4<br />
| ABS, X | CMP Oper,X | DD | 3 | 4*<br />
| ABS, Y | CMP Oper,Y | D9 | 3 | 4*<br />
| IND, X | CMP (Oper,X) | C1 | 2 | 6<br />
| IND, Y | CMP (Oper),Y | D1 | 2 | 5*<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = CPX<br />
| Операция = X – M<br />
| Описание = Сравнение X с памятью<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| IMM | CPX *Oper | E0 | 2 | 2<br />
| ZP | CPX Oper | E4 | 2 | 3<br />
| ABS | CPX Oper | EC | 3 | 4<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = CPY<br />
| Операция = Y – M<br />
| Описание = Сравнение Y с памятью<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| IMM | CPY *Oper | C0 | 2 | 2 <br />
| ZP | CPY Oper | C4 | 2 | 3 <br />
| ABS | CPY Oper | CC | 3 | 4 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = DEC<br />
| Операция = M – 1 -> M<br />
| Описание = Декремент памяти<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| ZP | DEC Oper | C6 | 2 | 5 <br />
| ZP, X | DEC Oper,X | D6 | 2 | 6 <br />
| ABS | DEC Oper | CE | 3 | 6 <br />
| ABS, X | DEC Oper,X | DE | 3 | 7 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = DEX<br />
| Операция = X – 1 -> X<br />
| Описание = Декремент X<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | DEX | CA | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = DEY<br />
| Операция = Y – 1 -> Y<br />
| Описание = Декремент Y<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | DEY | 88 | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = EOR<br />
| Операция = A xor M -> A<br />
| Описание = Логическое XOR<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | EOR #Oper | 49 | 2 | 2 <br />
| ZP | EOR Oper | 45 | 2 | 3 <br />
| ZP, X | EOR Oper,X | 55 | 2 | 4 <br />
| ABS | EOR Oper | 4D | 3 | 4 <br />
| ABS, X | EOR Oper,X | 5D | 3 | 4* <br />
| ABS, Y | EOR Oper,Y | 59 | 3 | 4* <br />
| IND, X | EOR (Oper,X) | 41 | 2 | 6 <br />
| IND, Y | EOR (Oper),Y | 51 | 2 | 5* <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = INC<br />
| Операция = M + 1 -> M<br />
| Описание = Инкремент памяти<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| ZP | INC Oper | E6 | 2 | 5 <br />
| ZP, X | INC Oper,X | F6 | 2 | 6 <br />
| ABS | INC Oper | EE | 3 | 6 <br />
| ABS, X | INC Oper,X | FE | 3 | 7 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = INX<br />
| Операция = X + 1 -> X<br />
| Описание = Инкремент X<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | INX | E8 | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = INY<br />
| Операция = Y + 1 -> Y<br />
| Описание = Инкремент Y<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | INY | C8 | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = JMP<br />
| Операция = (PC+1) -> PC или ((PC+1)) -> PC<br />
| Описание = Безусловный переход<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ABS | JMP Oper | 4C | 3 | 3 <br />
| IND | JMP (Oper) | 6C | 3 | 5 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = JSR<br />
| Операция = PC+2 -> (S+3000), S - 2 -> S, (PC+1) -> PC<br />
| Описание = Вызов подпрограммы<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ABS | JSR Oper | 20 | 3 | 6 <br />
| Примечание = В стек помещается адрес следующей команды минус один байт!<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = LDA<br />
| Операция = M -> A<br />
| Описание = Загрузка аккумулятора<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | LDA #Oper | A9 | 2 | 2 <br />
| ZP | LDA Oper | A5 | 2 | 3 <br />
| ZP, X | LDA Oper,X | B5 | 2 | 4 <br />
| ABS | LDA Oper | AD | 3 | 4 <br />
| ABS, X | LDA Oper,X | BD | 3 | 4* <br />
| ABS, Y | LDA Oper,Y | B9 | 3 | 4* <br />
| IND, X | LDA (Oper,X) | A1 | 2 | 6 <br />
| IND, Y | LDA (Oper),Y | B1 | 2 | 5* <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = LDX<br />
| Операция = M -> X<br />
| Описание = Загрузка X<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | LDX #Oper | A2 | 2 | 2 <br />
| ZP | LDX Oper | A6 | 2 | 3 <br />
| ZP, Y | LDX Oper,Y | B6 | 2 | 4 <br />
| ABS | LDX Oper | AE | 3 | 4 <br />
| ABS, Y | LDX Oper,Y | BE | 3 | 4* <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = LDY<br />
| Операция = M -> Y<br />
| Описание = Загрузка Y<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | LDY #Oper | A0 | 2 | 2 <br />
| ZP | LDY Oper | A4 | 2 | 3 <br />
| ZP, X | LDY Oper,X | B4 | 2 | 4 <br />
| ABS | LDY Oper | AC | 3 | 4 <br />
| ABS, X | LDY Oper,X | BC | 3 | 4* <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = LSR<br />
| Операция = 0 -> [A или M] -> С<br />
| Описание = Логический сдвиг вправо<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = 0 - - - - - * *<br />
| ACC | LSR A | 4A | 1 | 2 <br />
| ZP | LSR Oper | 46 | 2 | 5 <br />
| ZP, X | LSR Oper,X | 56 | 2 | 6 <br />
| ABS | LSR Oper | 4E | 3 | 6 <br />
| ABS, X | LSR Oper,X | 5E | 3 | 7 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = NOP<br />
| Операция = No operation<br />
| Описание = Пустая операция<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| IMP | NOP | EA | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ORA<br />
| Операция = A or M -> A<br />
| Описание = Логическое OR<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | ORA #Oper | 09 | 2 | 2 <br />
| ZP | ORA Oper | 05 | 2 | 3 <br />
| ZP, X | ORA Oper,X | 15 | 2 | 4 <br />
| ABS | ORA Oper | 0D | 3 | 4 <br />
| ABS, X | ORA Oper,X | 1D | 3 | 4* <br />
| ABS, Y | ORA Oper,Y | 19 | 3 | 4* <br />
| IND, X | ORA (Oper,X) | 01 | 2 | 6 <br />
| IND, Y | ORA (Oper),Y | 11 | 2 | 5 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = PHA<br />
| Операция = A -> (S + 3700), S - 1 -> S<br />
| Описание = Поместить аккумулятор в стек<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| IMP | PHA | 48 | 1 | 3 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = PHP<br />
| Операция = P -> (S + 3800), S - 1 -> S<br />
| Описание = Поместить слово состояния в стек<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| IMP | PHP | 08 | 1 | 3 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = PLA<br />
| Операция = S + 1 -> S, (S + 3900) -> A<br />
| Описание = Загрузить аккумулятор из стека<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | PLA | 68 | 1 | 4 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = PLP<br />
| Операция = S + 1 -> S, (S + 4000) -> P<br />
| Описание = Загрузить слово состояния из стека<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - * * * * *<br />
| IMP | PLP | 28 | 1 | 4 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ROL<br />
| Операция = <- [A или M] <- C <-<br />
| Описание = Циклический сдвиг влево<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| ACC | ROL A | 2A | 1 | 2 <br />
| ZP | ROL Oper | 26 | 2 | 5 <br />
| ZP, X | ROL Oper,X | 36 | 2 | 6 <br />
| ABS | ROL Oper | 2E | 3 | 6 <br />
| ABS, X | ROL Oper,X | 3E | 3 | 7 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ROR<br />
| Операция = -> C -> [A или M] -><br />
| Описание = Циклический сдвиг вправо<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| ACC | ROR A | 6A | 1 | 2 <br />
| ZP | ROR Oper | 66 | 2 | 5 <br />
| ZP, X | ROR Oper,X | 76 | 2 | 6 <br />
| ABS | ROR Oper | 6E | 3 | 6 <br />
| ABS, X | ROR Oper,X | 7E | 3 | 7 <br />
| Примечание = Инструкция ROR доступна в микропроцессорах MCS650X с июня 1976 г.<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = RTI<br />
| Операция = (4300 + S + 1) -> P, (4300 + S + 2) -> PC, S + 3 -> S<br />
| Описание = Возврат из прерывания<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - * * * * *<br />
| IMP | RTI | 40 | 1 | 6 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = RTS<br />
| Операция = (4400 + S + 1) -> PС, S + 2 -> S<br />
| Описание = Возврат из подпрограммы<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| IMP | RTS | 60 | 1 | 6 <br />
| Примечание = После извлечения адреса возврата из стека к нему прибавляется единица!<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SBC<br />
| Операция = A - M - C -> A, C<br />
| Описание = Вычитание с займом<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - - - - * *<br />
| IMM | SBC #Oper | E9 | 2 | 2 <br />
| ZP | SBC Oper | E5 | 2 | 3 <br />
| ZP, X | SBC Oper,X | F5 | 2 | 4 <br />
| ABS | SBC Oper | ED | 3 | 4 <br />
| ABS, X | SBC Oper,X | FD | 3 | 4* <br />
| ABS, Y | SBC Oper,Y | F9 | 3 | 4* <br />
| IND, X | SBC (Oper,X) | E1 | 2 | 6 <br />
| IND, Y | SBC (Oper),Y | F1 | 2 | 5 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SEC<br />
| Операция = 1 -> C<br />
| Описание = Установка флага переноса<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - 1<br />
| IMP | SEC | 38 | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SED<br />
| Операция = 1 -> D<br />
| Описание = Установка флага BCD<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - 1 - - -<br />
| IMP | SED | F8 | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SEI<br />
| Операция = 1 -> I<br />
| Описание = Установка флага запрета прерываний<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - 1 - - -<br />
| IMP | SEI | 78 | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = STA<br />
| Операция = A -> M<br />
| Описание = Сохранить аккумулятор в памяти<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ZP | STA Oper | 85 | 2 | 3 <br />
| ZP, X | STA Oper,X | 95 | 2 | 4 <br />
| ABS | STA Oper | 8D | 3 | 4 <br />
| ABS, X | STA Oper,X | 9D | 3 | 5 <br />
| ABS, Y | STA Oper, Y | 99 | 3 | 5 <br />
| IND, X | STA (Oper,X) | 81 | 2 | 6 <br />
| IND, Y | STA (Oper),Y | 91 | 2 | 6 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = STX<br />
| Операция = X -> M<br />
| Описание = Сохранить X в памяти<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ZP | STX Oper | 86 | 2 | 3 <br />
| ZP, Y | STX Oper,Y | 96 | 2 | 4 <br />
| ABS | STX Oper | 8E | 3 | 4 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = STY<br />
| Операция = Y -> M<br />
| Описание = Сохранить Y в памяти<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ZP | STY Oper | 84 | 2 | 3 <br />
| ZP, X | STY Oper,X | 94 | 2 | 4 <br />
| ABS | STY Oper | 8C | 3 | 4 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = TAX<br />
| Операция = A -> X<br />
| Описание = Передать A в X<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | TAX | AA | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = TAY<br />
| Операция = A -> Y<br />
| Описание = Передать A в X<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | TAY | A8 | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = TSX<br />
| Операция = S -> X<br />
| Описание = Передать S в X<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | TSX | BA | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = TXA<br />
| Операция = X -> A<br />
| Описание = Передать X в A<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | TXA | 8A | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = TXS<br />
| Операция = X -> S<br />
| Описание = Передать X в S<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| IMP | TXS | 9A | 1 | 2 <br />
| Примечание = В отличие от других операций загрузки, не влияет на флаг N<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = TYA<br />
| Операция = Y -> A<br />
| Описание = Передать Y в A<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | TYA | 98 | 1 | 2 <br />
}}<br />
<br />
== Особенности ==<br />
=== Пересечение границ страниц в разных режимах адресации ===<br />
В режиме адресации к нулевой странице верхний байт вычисленного адреса всегда обнуляется, поэтому последовательность<br />
<br />
LDX #1<br />
LDA $FF,X<br />
<br />
Загрузит значение из адреса 0000H, а не 0100H, как можно было бы ожидать.<br />
<br />
При косвенной (Indirect) адресации двухбайтовый адрес не может быть извлечен через границу страницы, поэтому все варианты<br />
<br />
LDA ($FF),Y<br />
<br />
LDX #$00<br />
LDA ($FF,X)<br />
<br />
LDX #$FF<br />
LDA ($00,X)<br />
Извлекут младший байт из адреса 00FFH, а младший из 0000H.<br />
<br />
JMP (92FF)<br />
<br />
Получит младший байт из адреса 12FFH, а старший из 1200H.<br />
<br />
=== Внешняя установка флага V ===<br />
В некоторых моделях процессоров есть внешний сигнал -SO, устанавливающий флаг V. Назначение такого сигнала — прерывание ожидания вызова от внешнего устройства в бесконечном цикле команды BVC ($50 $FE).<br />
<br />
=== Флаг B при совпадении BRK и NMI ===<br />
В случае если в момент обработки BRK приходит аппаратное прерывание NMI, процессор переходит по адресу ($FFFA) вместо ($FFFE), а в стек попадает значение P с установленным флагом B.<br />
<br />
=== Работа команд ADC, SBC и ARR в режиме BCD ===<br />
В режиме BCD данные команды работают с числами не двоичном режиме, а BCD-представлении. Фактически, из особенностей нужно упомянуть только влиянии этого режима на установку флагов N, Z и V.<br />
<br />
* Z устанавливается по значению, эквивалентному двоичной, а не BCD-операции.<br />
Например, код<br />
<br />
SED<br />
CLC<br />
LDA #$80<br />
ADC #$80<br />
<br />
Даст в результате A=$60, но при этом Z=1.<br />
<br />
* Флаги N и V устанавливаются после исправления нижнего полубайта, но до исправления верхнего.<br />
<br />
Общий алгоритм работы команды ADC в режиме BCD следующий:<br />
<pre><br />
беззнаковые<br />
A, /* Аккумулятор */<br />
AL, /* нижняя половина аккумулятора */<br />
AH, /* верхняя половина аккумулятора */<br />
<br />
C, /* Флаг переноса */<br />
Z, /* Флаг нуля */<br />
V, /* Флаг переполнения */<br />
N, /* Флаг знака */<br />
<br />
s; /* значение, прибавляемое к аккумулятору */<br />
<br />
AL = (A & 15) + (s & 15) + C; /* Вычисляем нижнюю половину. */<br />
<br />
AH = (A >> 4) + (s >> 4) + (AL > 15); /* Вычисляем верхнюю половину. */<br />
<br />
if (AL > 9) AL += 6; /* BCD-исправление нижней половины. */<br />
<br />
Z = ((A + s + C) & 255 != 0); /* Флаг нуля устанавливается<br />
Как обычно. */<br />
<br />
/* Флаги знака и переполнения устанавливаются как обычно,<br />
но до исправления верхней половины */<br />
<br />
N = (AH & 8 != 0);<br />
V = ((AH << 4) ^ A) & 128 && !((A ^ s) & 128);<br />
<br />
if (AH > 9) AH += 6; /* BCD-исправление верхней половины. */<br />
<br />
/* Перенос – единственный, кто устанавливается в самом конце. */<br />
<br />
C = (AH > 15);<br />
A = ((AH << 4) | (AL & 15)) & 255;<br />
</pre><br />
<br />
С SBC проще. На установку флагов после нее флаг D не влияет.<br />
<br />
<pre><br />
беззнаковые<br />
A, /* Аккумулятор */<br />
AL, /* нижняя половина аккумулятора */<br />
AH, /* верхняя половина аккумулятора */<br />
<br />
C, /* Флаг переноса */<br />
Z, /* Флаг нуля */<br />
V, /* Флаг переполнения */<br />
N, /* Флаг знака */<br />
<br />
s; /* значение, вычитаемое из аккумулятора */<br />
<br />
AL = (A & 15) - (s & 15) - !C; /* Вычисляем нижнюю половину. */<br />
<br />
if (AL & 16) AL -= 6; /* BCD-исправление нижней половины. */<br />
<br />
AH = (A >> 4) - (s >> 4) - (AL & 16); /* Вычисляем верхнюю половину. */<br />
<br />
if (AH & 16) AH -= 6; /* BCD-исправление верхней половины. */<br />
<br />
/* Все флаги устанавливаем как обычно. */<br />
<br />
C = (A - s - !C) & 256 != 0;<br />
Z = (A - s - !C) & 255 != 0;<br />
V = ((A - s - !C) ^ s) & 128 && (A ^ s) & 128;<br />
N = (A - s - !C) & 128 != 0;<br />
<br />
A = ((AH << 4) | (AL & 15)) & 255;<br />
</pre><br />
<br />
=== Другие особенности ===<br />
* Процессор всегда прочитывает второй байт команды условного перехода. Если происходит переход с пересечением границы страницы, то процессор сначала читает байт из текущей страницы, и только потом из нужной.<br />
* Если граница страницы пересекается в других режимах адресации, процессор всегда сначала читает ошибочный байт со страницы, на 1 меньшую, чем нужная.<br />
* Команды вида «Прочитать-Изменить-Записать» выполняют две операции записи — сначала неизмененное значение, затем измененное (то есть INC физически выполняется как LDX loc; STX loc; INX; STX loc).<br />
* В цикле записи сигнал -RDY игнорируется, поэтому перед выполнением DMA его нужно держать не менее 3 циклов подряд, так как это максимально возможное подряд число циклов записи, вызываемое переходом на обработчик прерывания).<br />
* При отработке сигнала -RESET значения в регистрах, за исключением PC, остаются неизменными.<br />
* Процессор всегда прочитывает байт, следующий за кодом команды. Так как многие команды двух-трехбайтовые, это достаточно эффективно.<br />
* Если команда в своем последнем цикле не сохраняет результат в память, то процессор в этот момент читает код следующей команды. Поэтому для таких команд в таблицах обычно указывается время исполнения, на 1 меньше реального.<br />
<br />
=== Обработка прерываний ===<br />
Обработка NMI и IRQ занимает 7 циклов, их обработка в целом похожа на команду BRK. IRQ и BRK устанавливают флаг I, в то время как NMI — нет.<br />
<br />
Перед обработкой прерывания процессор ожидает завершения выполнения текущей команды. Чтобы прерывание было обработано до следующей команды, оно должно быть получено не позднее последнего цикла текущей команды. Исключение есть только для команды BRK. Если прерывание приходит до 4-го цикла (сохранение флагов), то команда игнорируется и происходит переход на обработчик аппаратного прерывания. Обычно это не вызывает проблем, так как в случае совпадения BRK и IRQ все равно устанавливается флаг B, обработчик считает, что выполняется BRK, а IRQ срабатывает по возвращении из обработки BRK. С другой стороны, совпадение BRK и NMI более фатально. Если флаг B не проверяется в обработчике NMI, и перед возвращением адрес возврата не уменьшается на 2, то команда BRK будет потеряна.<br />
<br />
При совпадении IRQ и NMI, процессор, теоретически, должен перейти на обработку NMI, а потом сразу на IRQ, хотя это и не проверено на практике.<br />
<br />
Обработка RESET занимает 6 циклов с момента снятия сигнала. Все регистры сохраняются, кроме PC.<br />
<br />
=== Отличия NMOS и CMOS вариантов ===<br />
* Индексная адресация при пересечении границы страницы:<br />
** NMOS: Дополнительное чтение по неправильному адресу;<br />
** CMOS: Дополнительное чтение последнего байта инструкции;<br />
* Выполнение команд с недопустимыми кодами:<br />
** NMOS: Вешают процессор до выполнения принудительного сброса;<br />
** CMOS: Исполняются как NOP (Резерв на будущее)<br />
* Переход по косвенному адресу, когда операнд пересекает границу страницы (xxFFH):<br />
** NMOS: Второй байт берется из первого байта текущей страницы;<br />
** CMOS: Второй байт берется со следующей страницы, ко времени исполнения добавляется 1 такт.<br />
* Команды вида «Прочитать-Изменить-Записать»<br />
** NMOS: Одна лишняя запись (см. выше);<br />
** CMOS: Одно лишнее чтение.<br />
* Флаг D<br />
** NMOS: После сброса не определен;<br />
** CMOS: Сбрасывается в 0 после аппаратного сброса или прерывания.<br />
* Флаги в режиме BCD<br />
** NMOS: Значения некорректны (см. выше);<br />
** CMOS: Значения правильные, но добавляется 1 цикл.<br />
* Прерывания в момент выборки команды BRK:<br />
** NMOS: Происходит переход по вектору прерывания, а не BRK;<br />
** CMOS: Сначала исполняется команда BRK, потом срабатывает прерывание.<br />
<br />
== Недокументированные команды ==<br />
<br />
Многие недокументированные команды реально не выполняют операцию AND между регистрами. Это происходит автоматически, когда два значения помещаются одновременно на внутреннюю шину с открытыми коллекторами.<br />
<br />
=== NOP ===<br />
Команда NOP, помимо кода 90, может выполняться с другими методами адресации. В этом случае она эквивалентна команде LDA, за исключением того, что она не сохраняет результат и не влияет на флаги.<br />
<br />
{{Команда<br />
| Обозначение = ANE<br />
| Операция = Вар. 1: A = ((A and #581 and X) or ( #$EE and X)) and #byte; Вар. 2: X and #byte -> A<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | ANE #byte | 8B | 2 | ? <br />
| Примечание = В реальности параметр #581 может принимать значения #580, #58 или #$00, что зависит от значения, оставленного на шине видеоконтроллером после прерывания команды в режиме DMA.<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ANC<br />
| Операция = Вар. 1: A and #byte -> A, ASL A; Вар. 2: предыдущее без ASL<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| IMM | ANC #Oper | 0B | 2 | ?<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ANC?<br />
| Операция = Вар. 1: A and #byte -> A, ROL A; Вар. 2: предыдущее без ROL<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| IMM | ANC #Oper | 2B | 2 | ?<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ARR (ADC + ROR)<br />
| Операция = D=0: A and #byte -> A, ROR, A7->S, A6->V, (A==0)->Z, A6 xor A5 -> C<br><br />
D=1: см. код ниже<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - - - - * *<br />
| IMM | ARR #byte | 6B | 2? | ? <br />
| Примечание = Алгоритм для BCD-режима:<br />
<pre><br />
A, /* Аккумулятор */<br />
AL, /* нижняя половина аккумулятора */<br />
AH, /* верхняя половина аккумулятора */<br />
<br />
C, /* Флаг переноса */<br />
Z, /* Флаг нуля */<br />
V, /* Флаг переполнения */<br />
N, /* Флаг знака */<br />
<br />
t, /* вспомогательная переменная */<br />
s; /* байт-параметр команды */<br />
<br />
t = A & s; /* Выполняем AND. */<br />
<br />
AH = t >> 4; /* Делим результат */<br />
AL = t & 15; /* на части. */<br />
<br />
N = C; /* Флаг знака */<br />
Z = !(A = (t >> 1) | (C << 7)); /* Z как обычно */<br />
V = (t ^ A) & 64; /* a V магически. */<br />
<br />
if (AL + (AL & 1) > 5) /* «заплатка» BCD для нижней половины. */<br />
A = (A & 0xF0) | ((A + 6) & 0xF);<br />
<br />
if (C = AH + (AH & 1) > 5) /* Перенос. */<br />
A = (A + 0x60) & 0xFF; /* «заплатка» BCD для верхней половины. */<br />
</pre><br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ASR<br />
| Операция = A and #byte -> A, LSR A<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| IMM | ASR #Oper | 4B | 2 | ?<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = DCP (DEC + CMP)<br />
| Операция = M + 1 -> M, A – M<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| ZP | DCP Oper | C7 | 2 | ? <br />
| ZP, X | DCP Oper,X | D7 | 2 | ? <br />
| ABS | DCP Oper | CF | 3 | ? <br />
| ABS, X | DCP Oper,X | DF | 3 | ? <br />
| ABS, Y | DCP Oper, Y | DB | 3 | ? <br />
| IND, X | DCP (Oper,X) | C3 | 2 | ? <br />
| IND, Y | DCP (Oper),Y | D3 | 2 | ? <br />
}}<br />
<br />
<br />
{{Команда<br />
| Обозначение = ISB (INC + SBC)<br />
| Операция = M + 1 -> M, A – M -> A <br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - - - - * *<br />
| ZP | ISB Oper | E7 | 2 | ? <br />
| ZP, X | ISB Oper,X | F7 | 2 | ? <br />
| ABS | ISB Oper | EF | 3 | ? <br />
| ABS, X | ISB Oper,X | FF | 3 | ? <br />
| ABS, Y | ISB Oper, Y | FB | 3 | ? <br />
| IND, X | ISB (Oper,X) | E3 | 2 | ? <br />
| IND, Y | ISB (Oper),Y | F3 | 2 | ? <br />
}}<br />
<br />
<br />
{{Команда<br />
| Обозначение = LAS<br />
| Операция = M and S -> A, X, S<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| ABS, Y | LAS Oper, Y | BB | 3 | ? <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = LAX<br />
| Операция = M -> A, X<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| ZP | LAX Oper | A7 | 2 | ? <br />
| ZP, Y! | LAX Oper,Y | B7 | 2 | ? <br />
| ABS | LAX Oper | AF | 3 | ? <br />
| ABS, Y | LAX Oper,Y | BF | 3 | ? <br />
| IND, X | LAX (Oper,Y) | A3 | 2 | ? <br />
| IND, Y | LAX (Oper),Y | B3 | 2 | ? <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = LXA<br />
| Операция = Вар. 1: A = X = ANE; Вар. 2: A = X = (A & #byte); Вар. 3: A = X = #byte;<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | LXA #byte | AB | 2? | ? <br />
}}<br />
<br />
<br />
{{Команда<br />
| Обозначение = RLA<br />
| Операция = ROL M, A and M -> A<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| ZP | RLA Oper | 27 | 2 | ? <br />
| ZP, X | RLA Oper,X | 37 | 2 | ? <br />
| ABS | RLA Oper | 2F | 3 | ? <br />
| ABS, X | RLA Oper,X | 3F | 3 | ? <br />
| ABS, Y | RLA Oper, Y | 3B | 3 | ? <br />
| IND, X | RLA (Oper,X) | 23 | 2 | ? <br />
| IND, Y | RLA (Oper),Y | 33 | 2 | ? <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = RRA<br />
| Операция = ROR M, ADC(A, M) -> A<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - - - - * *<br />
| ZP | RRA Oper | 67 | 2 | ? <br />
| ZP, X | RRA Oper,X | 77 | 2 | ? <br />
| ABS | RRA Oper | 6F | 3 | ? <br />
| ABS, X | RRA Oper,X | 7F | 3 | ? <br />
| ABS, Y | RRA Oper, Y | 7B | 3 | ? <br />
| IND, X | RRA (Oper,X) | 63 | 2 | ? <br />
| IND, Y | RRA (Oper),Y | 73 | 2 | ? <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SAX<br />
| Операция = A and X -> M<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ZP | SAX Oper | 87 | 2 | ? <br />
| ZP, Y! | SAX Oper,Y | 97 | 2 | ? <br />
| ABS | SAX Oper | 8F | 3 | ? <br />
| IND, X | SAX (Oper,X) | 83 | 2 | ? <br />
}}<br />
<br />
<br />
{{Команда<br />
| Обозначение = SBX (CMP + DEX)<br />
| Операция = (A and X) - #byte -> X<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| IMM | SBX #byte | CB | 2 | ? <br />
| Примечание = От CMP осталось вычитание, от DEX – сохранение результата в X. AND берется из одновременного подключения A и X к АЛУ.<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SHA<br />
| Операция = A & X & (ADDR_HI + 1)) -> M<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| IND, Y | SHA (Oper),Y | 93 | 2 | ?<br />
| ABS, Y | SHA Oper,Y | 9F | 3 | ?<br />
| Примечание = ADDR_HI, вероятно, старший байт адреса M?<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SHS<br />
| Операция = A and X -> S, S and ADDR_HI -> M<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ABS, Y | SHS Oper,Y | 9B | 3 | ?<br />
| Примечание = ADDR_HI, вероятно, старший байт адреса M?<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SHX<br />
| Операция = Вар. 1: X and (ADDR_HI + 1) -> M; Вар. 2: X and ADDR_HI -> M<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ABS, Y | SHX Oper,Y | 9E | 3 | ?<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SHY<br />
| Операция = Вар. 1: Y & (ADDR_HI + 1) -> M; Вар. 2: Y and ADDR_HI -> M<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ABS, Y | SHY Oper,Y | 9C | 3 | ?<br />
| Примечание = По другому источнику, режим адресации ABS, X.<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SLO (ASL + ORA)<br />
| Операция = ASL M -> M, A or M -> A<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| ZP | SLO Oper | 07 | 2 | ? <br />
| ZP, X | SLO Oper,X | 17 | 2 | ? <br />
| ABS | SLO Oper | 0F | 3 | ? <br />
| ABS, X | SLO Oper,X | 1F | 3 | ? <br />
| ABS, Y | SLO Oper, Y | 1B | 3 | ? <br />
| IND, X | SLO (Oper,X) | 03 | 2 | ? <br />
| IND, Y | SLO (Oper),Y | 13 | 2 | ? <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SRE<br />
| Операция = LSR M -> M, A xor M -> A<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| ZP | SRE Oper | 47 | 2 | ? <br />
| ZP, X | SRE Oper,X | 57 | 2 | ? <br />
| ABS | SRE Oper | 4F | 3 | ? <br />
| ABS, X | SRE Oper,X | 5F | 3 | ? <br />
| ABS, Y | SRE Oper, Y | 5B | 3 | ? <br />
| IND, X | SRE (Oper,X) | 43 | 2 | ? <br />
| IND, Y | SRE (Oper),Y | 53 | 2 | ? <br />
}}<br />
<br />
== Порядок декодирования команд ==<br />
<br />
Любую команду 6502 можно представить следующим образом:<br />
<br />
XXXYYYZZ<br />
└┬┘└┬┘└┤<br />
│ │ └── Группа команд<br />
│ └───── Режим адресации<br />
└──────── Код команды<br />
<br />
Таким образом, для уменьшения сравнений можно использовать следующий алгоритм:<br />
<br />
swith ZZ:<br />
case 0:<br />
switch XXX:<br />
case 0:<br />
//Команды 000yyy00<br />
Do_Command_0(yyy);<br />
break;<br />
case 1:<br />
//Команды 001yyy00<br />
Do_Command_1(yyy);<br />
break;<br />
// etc<br />
end;<br />
case 1:<br />
switch XXX:<br />
case 0:<br />
//Команды 000yyy01<br />
Do_Command_2(yyy);<br />
break;<br />
case 1:<br />
//Команды 001yyy01<br />
Do_Command_3(yyy);<br />
break;<br />
// etc<br />
end;<br />
break<br />
end; <br />
<br />
Далее все команды сгруппированы по этому принципу.<br />
* «*» отмечены недокументированные команды)<br />
* HALT обозначает зависание процессора<br />
* «*NOP mode» обозначает, что команда эквивалента «LDA mode», но результат не сохраняется и флаги не меняются.<br />
<br />
??? 000xxx00<br />
000 BRK<br />
001 *NOP zp<br />
010 PHP<br />
011 *NOP abs<br />
100 BPL<br />
101 *NOP zp,x<br />
110 CLC<br />
111 *NOP abs,x<br />
<br />
??? 001xxx00<br />
000 JSR<br />
001 BIT zp<br />
010 PLP impl<br />
011 BIT abs<br />
100 BMI rel<br />
101 *NOP zp,x<br />
110 SEC impl<br />
111 *NOP abs,x<br />
<br />
??? 010xxx00<br />
000 RTI<br />
001 *NOP zp<br />
010 PHA impl<br />
011 JMP abs<br />
100 BVC rel<br />
101 *NOP zp,x<br />
110 CLI impl<br />
111 *NOP abs,x<br />
<br />
??? 011xxx00<br />
000 RTS<br />
001 *NOP zp<br />
010 PLA impl<br />
011 JMP (abs)<br />
100 BVS rel<br />
101 *NOP zp,x<br />
110 SEI impl<br />
111 *NOP abs,x<br />
<br />
??? 100xxx00<br />
000 *NOP<br />
001 STY zp<br />
010 DEY impl<br />
011 STY abs<br />
100 BCC rel<br />
101 STY zp,x<br />
110 TYA impl<br />
111 *SHY abs,x<br />
<br />
??? 101xxx00<br />
000 LDY<br />
001 LDY zp<br />
010 TAY impl<br />
011 LDY abs<br />
100 BCS rel<br />
101 LDY zp,x<br />
110 CLV impl<br />
111 LDY abs,x<br />
<br />
??? 110xxx00<br />
000 CPY<br />
001 CPY zp<br />
010 INY impl<br />
011 CPY abs<br />
100 BNE rel<br />
101 *NOP zp,x<br />
110 CLD impl<br />
111 *NOP abs,x<br />
<br />
??? 111xxx00<br />
000 CPX<br />
001 CPX zp<br />
010 INX impl<br />
011 CPX abs<br />
100 BEQ rel<br />
101 *NOP zp,x<br />
110 SED impl<br />
111 *NOP abs,x<br />
<br />
ORA 000xxx01<br />
000 ind,x<br />
001 zp<br />
010 immed<br />
011 abs<br />
100 ind,y<br />
101 zp,x<br />
110 abs,y<br />
111 abs,x<br />
<br />
AND 001xxx01<br />
EOR 010xxx01<br />
ADC 011xxx01<br />
STA 100xxx01<br />
LDA 101xxx01<br />
CMP 110xxx01<br />
SBC 111xxx01<br />
<br />
ASL 000xxx10<br />
000 *HALT<br />
001 zp<br />
010 accum<br />
011 abs<br />
100 *HALT<br />
101 zp,x<br />
110 *NOP<br />
111 abs,x<br />
<br />
ROL 001xxx10<br />
000 *HALT<br />
001 zp<br />
010 accum<br />
011 abs<br />
100 *HALT<br />
101 zp,x<br />
110 *NOP<br />
111 abs,x<br />
<br />
LSR 010xxx10<br />
000 *HALT<br />
001 zp<br />
010 accum<br />
011 abs<br />
100 *HALT<br />
101 zp,x<br />
110 *NOP<br />
111 abs,x<br />
<br />
ROR 011xxx10<br />
000 *HALT<br />
001 zp<br />
010 accum<br />
011 abs<br />
100 *HALT<br />
101 zp,x<br />
110 *NOP<br />
111 abs,x<br />
<br />
STX 100xxx10<br />
000 *NOP(HALT)<br />
001 zp<br />
010 TXA (accum)<br />
011 abs<br />
100 *HALT<br />
101 zp,y<br />
110 TXS<br />
111 *SHX**y)<br />
<br />
LDX 101xxx10<br />
000 imm<br />
001 zp<br />
010 TAX (accum)<br />
011 abs<br />
100 *HALT<br />
101 zp,y<br />
110 TSX<br />
111 *y)<br />
<br />
DEC 110xxx10<br />
000 *NOP(HALT)<br />
001 zp<br />
010 DEX (impl)<br />
011 abs<br />
100 *HALT<br />
101 zp,x<br />
110 *NOP<br />
111 abs,x<br />
<br />
INC 111xxx10<br />
000 *NOP(HALT)<br />
001 zp<br />
010 NOP (impl)<br />
011 abs<br />
100 *HALT<br />
101 zp,x<br />
110 *NOP<br />
111 abs,x<br />
<br />
*SLO 000xxx11<br />
000 *SLO ind,x<br />
001 *SLO zp<br />
010 *ANC imm<br />
011 *SLO abs<br />
100 *SLO ind,y<br />
101 *SLO zp,x<br />
110 *SLO abs,y<br />
111 *SLO abs,x<br />
<br />
*RLA 001xxx11<br />
000 *RLA ind,x<br />
001 *RLA zp<br />
010 *ANC imm<br />
011 *RLA abs<br />
100 *RLA ind,y<br />
101 *RLA zp,x<br />
110 *RLA abs,y<br />
111 *RLA abs,x<br />
<br />
*SRE 010xxx11<br />
000 *SRE ind,x<br />
001 *SRE zp<br />
010 *ASR imm<br />
011 *SRE abs<br />
100 *SRE ind,y<br />
101 *SRE zp,x<br />
110 *SRE abs,y<br />
111 *SRE abs,x<br />
<br />
*RRA 011xxx11<br />
000 *RRA ind,x<br />
001 *RRA zp<br />
010 *ARR imm<br />
011 *RRA abs<br />
100 *RRA ind,y<br />
101 *RRA zp,x<br />
110 *RRA abs,y<br />
111 *RRA abs,x<br />
<br />
*??? 100xxx11<br />
000 *SAX ind,x<br />
001 *SAX zp<br />
010 *ANE imm<br />
011 *SAX abs<br />
100 *SHA ind,y<br />
101 *SAX* y)<br />
110 *SHS abs,y<br />
111 *SHA**y)<br />
<br />
*??? 101xxx11<br />
000 *LAX ind,x<br />
001 *LAX zp<br />
010 *LXA imm<br />
011 *LAX abs<br />
100 *LAX ind,y<br />
101 *LAX* y)<br />
110 *LAS abs,y<br />
111 *LAX* y)<br />
<br />
*DCP 110xxx11<br />
000 *DCP ind,x<br />
001 *DCP zp<br />
010 *SBX imm<br />
011 *DCP abs<br />
100 *DCP ind,y<br />
101 *DCP zp,x<br />
110 *DCP abs,y<br />
111 *DCP abs,x<br />
<br />
*ISB 111xxx11<br />
000 *ISB ind,x<br />
001 *IBS zp<br />
010 *SBC imm<br />
011 *ISB abs<br />
100 *ISB ind,y<br />
101 *ISB zp,x<br />
110 *ISB abs,y<br />
111 *ISB abs,x<br />
<br />
== Источники ==<br />
* http://www.oxyron.de/html/opcodes02.html<br />
* https://emuverse.ru/downloads/datasheets/processors/6502/c64doc.txt<br />
* [http://6502.org/tutorials/interrupts.html Investigating Interrupts]<br />
* [https://www.nesdev.org/the%20'B'%20flag%20&%20BRK%20instruction.txt 6502 'B' flag & BRK opcode]<br />
<br />
<br />
<br />
[[Категория:MOS 6502]]</div>Pantherhttps://emuverse.ru/w/index.php?title=MOS_Technology_6502&diff=3734MOS Technology 65022024-01-09T20:37:19Z<p>Panther: /* Ссылки */ +1</p>
<hr />
<div>{{Emuverse}}<br />
<br />
[[Изображение:MOS 6502AD 4585 top.jpg|thumb|Процессор 6502 в пластмассовом корпусе DIL-40]]<br />
'''MOS Technology 6502''', '''6502''', — 8-ми разрядный микропроцессор, первоначально разрабртанный компанией MOS Technology.<br />
<br />
== Варианты ==<br />
* 6501 — исходная версия процессора, весь тираж уничтожен из-за лицензионных проблем с Motorola;<br />
* 6502 — основная версия процессора, вариант 6501 с измененным внешним интерфейсом и встроенным двухфазным тактовым генератором;<br />
* 6507 — упрощенная версия 6502 без внешних прерываний и урезанной шиной адреса;<br />
* 6508 — микроконтроллер с ядром 6502, 8-ми битнытным портом ввода-вывода и 256 байтами статической ОЗУ;<br />
* 6509 — вариант 6502, способный адресовать 1 Мб внешней памяти с помощью встроенного блока переключения банков;<br />
* 6510 — вариант 6502 с 8-ми битным портом ввода-вывода (в большинстве вариантов были доступны 6 бит. Применялся в компьютере [[Commodore 64]];<br />
* 8500 — HMOS-версия 6510;<br />
* 7501/8501 — полностью совместимые версии 6510;<br />
* 8502 — версия 6510, имеющая отличия в исполнении некоторых недокументированных команд;<br />
* 65C02 — обновленная версия 6502, имеющая несколько новых команд;<br />
* 65CE02 — ядро, применявшееся в микроконтроллере [[MOS Technology 4510]];<br />
* [[65816|WDC 65816/65802]] — 16-ти разрядный микропроцессор, усовершенствованный 6502. Имеет режим полной эмуляции 6502. 65802 полностью совместим с 6502 по внешним выводам и может быть использован вместо него в старых компьютерах;<br />
<br />
== Системы на основе 6502 ==<br />
* Игровые приставки [[Atari 2600]] (6507), [[Nintendo Entertainment System]];<br />
* [[Apple II]];<br />
* [[Правец 8]];<br />
* [[Агат]] (Клон 6502 болгарского производства, оригинальные процессоры со спиленной маркировкой);<br />
* [[Commodore 64]] (6510).<br />
<br />
== Рекомендуемая литература ==<br />
* ''Морер&nbsp;У.'' Язык Ассемблера для персонального компьютера ЭПЛ.&nbsp;— М.: Мир, 1987. 430&nbsp;с.<br />
<br />
== Ссылки ==<br />
* [http://www.6502.org/ www.6502.org]{{ref-en}}<br />
* [https://github.com/Klaus2m5/6502_65C02_functional_tests Тесты команд]<br />
* [https://wilsonminesco.com/NMOS-CMOSdif/ Отличия 65с02 от 6502]<br />
<br />
== Документация ==<br />
* [[MOS Technology 6502/Система команд|Полная система команд 6502/6510]]<br />
* {{txt||Микропроцессор 6502|datasheets/processors/6502/6502.rus.txt}}<br />
* {{www}} [http://www.zophar.net/tech/files/6502ref.html 65C02 Reference Manual] {{ref-en}}<br />
* {{www}} [http://6502.org/tutorials/interrupts.html Описание механизма прерываний] {{ref-en}}<br />
* {{txt||6502/6510/8500/8502 instruction set] + undoc|datasheets/processors/6502/c64doc.txt}} {{ref-en}}<br />
* {{pdf||UMC UM6502 datasheet|datasheets/processors/6502/UM6502.pdf}} {{ref-en}}<br />
* {{pdf||WDC W65C02S datasheet|datasheets/processors/6502/W6502S.pdf}} {{ref-en}}<br />
* {{zip||Commodore Semicounductor Group 6508 datasheet|datasheets/processors/6502/6508.zip}} {{ref-en}}<br />
* {{zip||Commodore Semicounductor Group 6509 datasheet|datasheets/processors/6502/6509-8610.zip}} {{ref-en}}<br />
* {{txt||6502 bugs list|datasheets/processors/6502/6502.bugs.txt}} {{ref-en}}<br />
* {{www}} [http://www.atariarchives.org/mlb/ Machine Language For Beginners] by Richard Mansfield, published 1983 {{ref-en}}<br />
<br />
[[Категория:MOS 6502]]</div>Pantherhttps://emuverse.ru/w/index.php?title=MOS_Technology_6502/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4&diff=3733MOS Technology 6502/Система команд2024-01-08T20:49:25Z<p>Panther: jsr, rts уточнение</p>
<hr />
<div>{{Emuverse}}<br />
<small>{{TOCright}}</small><br />
== Регистры ==<br />
* A — аккумулятор, 8 бит;<br />
* X, Y — индексные регистры, 8 бит;<br />
* PC — счетчик команд, 16 бит;<br />
* S — указатель стека, 8 бит;<br />
* P — регистр состояния;<br />
** <tt>C (P0)</tt> — перенос;<br />
** <tt>Z (P1)</tt> — ноль;<br />
** <tt>I (P2)</tt> — запрет внешних прерываний — IRQ (I=0 — прерывания разрешены);<br />
** <tt>D (P3)</tt> — режим BCD для инструкций сложения и вычитания с переносом;<br />
** <tt>B (P4)</tt> — обработка прерывания (B=1 после выполнения команды BRK);<br />
** <tt>1 (P5)</tt> — не используется, равен 1;<br />
** <tt>V (P6)</tt> — переполнение;<br />
** <tt>N (P7)</tt> — знак. Равен старшему биту значения, загруженного в A, X или Y в результате выполнения операции (кроме TXS).<br />
<br />
== Режимы адресации и страницы ==<br />
Вся адресуемая 6502 память разбита на страницы по 256 байт. Если при обработке команды происходит пересечение границы страницы, инструкции могут выполняться несколько по-другому, что описано ниже. Две страницы имеют особое значение — страница 0 (00H-FFH), называемая «нулевой» — для этой страницы выделен особый режим адресации с однобайтовым адресом. Другая особая страница — № 1 (100H-1FFH), отведенная под стек. Так как регистр указателя стека восьмиразрядный, при обращении к стеку к значению регистра всегда добавляется 100H.<br />
<br />
Многие команды могут работать с несколькими режимами адресации, которые перечислены ниже:<br />
<br />
{| class=border<br />
! Название англ.<br />
! Название русск.<br />
! Описание<br />
! Обозначение<br />
! Пример<br />
! Код<br />
|-<br />
| Immediate<br />
| Непосредственная<br />
| Операнд располагается сразу за кодом инструкции<br />
| #<br />
| LDA #$0A<br />
| A9 02<br />
|-<br />
| Absolute<br />
| Абсолютная (прямая)<br />
| Адрес операнда располагается сразу за кодом инструкции<br />
|<br />
| LDA $1234<br />
| AD 34 12<br />
|-<br />
| Zeropage<br />
| Абсолютная на нулевой странице (для адресов 00H-0FFH)<br />
|<br />
|<br />
| LDA $2F<br />
| A5 2F<br />
|-<br />
| Accumulator/Implied<br />
| Аккумуляторная/Неявная<br />
| Операнд подразумевается самой командой.<br />
|<br />
| TAX<br />
| AA<br />
|-<br />
| Absolute, x<br />Absolute, y<br />
| Абсолютная индексная<br />
| Адрес, указанный за кодом операции, складывается со значением индексного регистра<br />
| ADDR, X<br /> ADDR, Y<br />
| nowrap | LDA $1234, X<br /> LDA $1234, Y<br />
| nowrap | D9 34 12<br />DD 34 12<br />
|-<br />
| Zeropage, x<br />Zeropage, y<br />
| Абсолютная индексная на нулевой странице<br />
|<br />
| ADDR, X<br /> ADDR, Y<br />
| LDA $2F, X<br />
| B5 2F<br />
|-<br />
| Indirect<br />
| Косвенная<br />
| Только в команде JMP. Новый адрес для счетчика команд берется из памяти, по адресу, указанному за кодом команды<br />
| (ADDR)<br />
| JMP ($1234)<br />
| 6С 34 12<br />
|-<br />
| Indirect, x<br />
| Индексно-косвенная на нулевой странице<br />
| Адрес операнда складывается из байта, следующего за кодом команды и содержимого регистра X. Важно! Старший байт суммы отбрасывается!<br />
| (ADDR, X)<br />
| LDA ($3E, X)<br />
| A1 3E<br />
|-<br />
| Indirect, y<br />
| Косвенно-индексная<br />
| Адрес операнда складывается из двух байт в нулевой странице по адресу, указанному вторым байтом команды, и регистра Y.<br />
| (ADDR), Y<br />
| LDA ($4C), Y<br />
| B1 4C<br />
|-<br />
| Relative<br />
| Относительная<br />
| Используется в условных переходах. Второй байт команды (как число со знаком от −128 до +127) добавляется к счетчику команд при выполнении условия. Важно! При сложении используется адрес команды, следующей за командой условного перехода, а не адрес выполняемой команды!<br />
|<br />
| BEQ $A7<br />
| F0 A7<br />
|}<br />
<br />
== Алфавитный список команд ==<br />
Влияние на флаги:<br />
* «*» — влияет;<br />
* «-» — не влияет;<br />
* «0» — устанавливает в 0;<br />
* «1» — устанавливает в 1;<br />
<br />
Тайминги<br />
* «*» означает, что время увеличивается на 1 такт, если код команды пересекает границу страницы;<br />
* «+» означает время в случае перехода в пределах страницы;<br />
* «++» означает время в случае перехода за пределы текущей страницы;<br />
<br />
{{Команда<br />
| Обозначение = ADC<br />
| Операция = A + M + C -> A, C<br />
| Описание = Сложение с переносом<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - - - - * *<br />
| IMM | ADC #Oper | 69 | 2 | 2<br />
| ZP | ADC Oper | 65 | 2 | 3<br />
| ZP, X | ADC Oper,X | 75 | 2 | 4<br />
| ABS | ADC Oper | 6D | 3 | 4<br />
| ABS, X | ADC Oper,X | 7D | 3 | 4*<br />
| ABS, Y | ADC Oper,Y | 79 | 3 | 4*<br />
| IND, X | ADC (Oper,X) | 61 | 2 | 6<br />
| IND, Y | ADC (Oper),Y | 71 | 2 | 5*<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = AND<br />
| Операция = A and M -> A<br />
| Описание = Логическое AND<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | AND #Oper | 29 | 2 | 2<br />
| ZP | AND Oper | 25 | 2 | 3<br />
| ZP, X | AND Oper,X | 35 | 2 | 4<br />
| ABS | AND Oper | 2D | 3 | 4<br />
| ABS, X | AND Oper,X | 3D | 3 | 4*<br />
| ABS, Y | AND Oper,Y | 39 | 3 | 4*<br />
| IND, X | AND (Oper,X) | 21 | 2 | 6<br />
| IND, Y | AND (Oper),Y | 31 | 2 | 5<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ASL<br />
| Операция = C <- [A или M] <- 0<br />
| Описание = Арифметический сдвиг влево<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| ACC | ASL A | 0A | 1 | 2<br />
| ZP | ASL Oper | 06 | 2 | 5<br />
| ZP, X | ASL Oper,X | 16 | 2 | 6<br />
| ABS | ASL Oper | 0E | 3 | 6<br />
| ABS, X | ASL Oper,X | 1E | 3 | 7<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BCC<br />
| Операция = Branch on Carry Clear<br />
| Описание = Условный переход, если нет переноса<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BCC Oper | 90 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BCS<br />
| Операция = Branch on Carry Set<br />
| Описание = Условный переход, если перенос<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BCS Oper | B0 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BEQ<br />
| Операция = Branch on Equal<br />
| Описание = Условный переход, если равно (Z=1)<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BEQ Oper | F0 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BIT<br />
| Операция = (A and M) == 0 -> Z, M7 -> N, M6 -> V<br />
| Описание = Проверка битов<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - - - - * -<br />
| ZP | BIT Oper | 24 | 2 | 3<br />
| ABS | BIT Oper | 2C | 3 | 4<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BMI<br />
| Операция = Branch on Minus<br />
| Описание = Условный переход, если отрицательно (S=1)<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BMI Oper | 30 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BNE<br />
| Операция = Branch on Not Equal<br />
| Описание = Условный переход, если не равно (Z=0)<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BNE Oper | D0 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BPL<br />
| Операция = Branch on Plus<br />
| Описание = Условный переход, если положительно (S=0)<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BPL Oper | 10 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BRK<br />
| Операция = PC+2 -> (S+1200), P -> (S-2), S-3 -> S, ($FFFE) -> PC<br />
| Описание = Программное прерывание<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - 1 - 1 - -<br />
| IMP | BRK | 00 | 1 | 7<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BVC<br />
| Операция = Branch on Overflow Clear<br />
| Описание = Условный переход, если нет переполнения (V=0)<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BVC Oper | 50 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = BVS<br />
| Операция = Branch on Overflow Set<br />
| Описание = Условный переход, если переполнение (V=1)<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| REL | BVS Oper | 70 | 2 | 2<br>3+<br>4++<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = CLC<br />
| Операция = 0 -> C<br />
| Описание = Очистка флага переноса<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - 0<br />
| IMP | CLC | 18 | 1 | 2<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = CLD<br />
| Операция = 0 -> D<br />
| Описание = Очистка флага BCD<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - 0 - - -<br />
| IMP | CLD | D8 | 1 | 2<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = CLI<br />
| Операция = 0 -> I<br />
| Описание = Очистка флага запрета прерываний<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - 0 - -<br />
| IMP | CLI | 58 | 1 | 2<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = CLV<br />
| Операция = 0 -> V<br />
| Описание = Очистка флага переполнения<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - 0 - - - - - -<br />
| IMP | CLV | B8 | 1 | 2<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = CMP<br />
| Операция = A – M<br />
| Описание = Сравнение аккумулятора с памятью<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| IMM | CMP #Oper | C9 | 2 | 2 <br />
| ZP | CMP Oper | C5 | 2 | 3<br />
| ZP, X | CMP Oper,X | D5 | 2 | 4<br />
| ABS | CMP Oper | CD | 3 | 4<br />
| ABS, X | CMP Oper,X | DD | 3 | 4*<br />
| ABS, Y | CMP Oper,Y | D9 | 3 | 4*<br />
| IND, X | CMP (Oper,X) | C1 | 2 | 6<br />
| IND, Y | CMP (Oper),Y | D1 | 2 | 5*<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = CPX<br />
| Операция = X – M<br />
| Описание = Сравнение X с памятью<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| IMM | CPX *Oper | E0 | 2 | 2<br />
| ZP | CPX Oper | E4 | 2 | 3<br />
| ABS | CPX Oper | EC | 3 | 4<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = CPY<br />
| Операция = Y – M<br />
| Описание = Сравнение Y с памятью<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| IMM | CPY *Oper | C0 | 2 | 2 <br />
| ZP | CPY Oper | C4 | 2 | 3 <br />
| ABS | CPY Oper | CC | 3 | 4 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = DEC<br />
| Операция = M – 1 -> M<br />
| Описание = Декремент памяти<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| ZP | DEC Oper | C6 | 2 | 5 <br />
| ZP, X | DEC Oper,X | D6 | 2 | 6 <br />
| ABS | DEC Oper | CE | 3 | 6 <br />
| ABS, X | DEC Oper,X | DE | 3 | 7 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = DEX<br />
| Операция = X – 1 -> X<br />
| Описание = Декремент X<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | DEX | CA | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = DEY<br />
| Операция = Y – 1 -> Y<br />
| Описание = Декремент Y<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | DEY | 88 | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = EOR<br />
| Операция = A xor M -> A<br />
| Описание = Логическое XOR<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | EOR #Oper | 49 | 2 | 2 <br />
| ZP | EOR Oper | 45 | 2 | 3 <br />
| ZP, X | EOR Oper,X | 55 | 2 | 4 <br />
| ABS | EOR Oper | 4D | 3 | 4 <br />
| ABS, X | EOR Oper,X | 5D | 3 | 4* <br />
| ABS, Y | EOR Oper,Y | 59 | 3 | 4* <br />
| IND, X | EOR (Oper,X) | 41 | 2 | 6 <br />
| IND, Y | EOR (Oper),Y | 51 | 2 | 5* <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = INC<br />
| Операция = M + 1 -> M<br />
| Описание = Инкремент памяти<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| ZP | INC Oper | E6 | 2 | 5 <br />
| ZP, X | INC Oper,X | F6 | 2 | 6 <br />
| ABS | INC Oper | EE | 3 | 6 <br />
| ABS, X | INC Oper,X | FE | 3 | 7 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = INX<br />
| Операция = X + 1 -> X<br />
| Описание = Инкремент X<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | INX | E8 | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = INY<br />
| Операция = Y + 1 -> Y<br />
| Описание = Инкремент Y<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | INY | C8 | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = JMP<br />
| Операция = (PC+1) -> PC или ((PC+1)) -> PC<br />
| Описание = Безусловный переход<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ABS | JMP Oper | 4C | 3 | 3 <br />
| IND | JMP (Oper) | 6C | 3 | 5 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = JSR<br />
| Операция = PC+2 -> (S+3000), S - 2 -> S, (PC+1) -> PC<br />
| Описание = Вызов подпрограммы<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ABS | JSR Oper | 20 | 3 | 6 <br />
| Примечание = В стек помещается адрес следующей команды минус один байт!<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = LDA<br />
| Операция = M -> A<br />
| Описание = Загрузка аккумулятора<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | LDA #Oper | A9 | 2 | 2 <br />
| ZP | LDA Oper | A5 | 2 | 3 <br />
| ZP, X | LDA Oper,X | B5 | 2 | 4 <br />
| ABS | LDA Oper | AD | 3 | 4 <br />
| ABS, X | LDA Oper,X | BD | 3 | 4* <br />
| ABS, Y | LDA Oper,Y | B9 | 3 | 4* <br />
| IND, X | LDA (Oper,X) | A1 | 2 | 6 <br />
| IND, Y | LDA (Oper),Y | B1 | 2 | 5* <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = LDX<br />
| Операция = M -> X<br />
| Описание = Загрузка X<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | LDX #Oper | A2 | 2 | 2 <br />
| ZP | LDX Oper | A6 | 2 | 3 <br />
| ZP, Y | LDX Oper,Y | B6 | 2 | 4 <br />
| ABS | LDX Oper | AE | 3 | 4 <br />
| ABS, Y | LDX Oper,Y | BE | 3 | 4* <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = LDY<br />
| Операция = M -> Y<br />
| Описание = Загрузка Y<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | LDY #Oper | A0 | 2 | 2 <br />
| ZP | LDY Oper | A4 | 2 | 3 <br />
| ZP, X | LDY Oper,X | B4 | 2 | 4 <br />
| ABS | LDY Oper | AC | 3 | 4 <br />
| ABS, X | LDY Oper,X | BC | 3 | 4* <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = LSR<br />
| Операция = 0 -> [A или M] -> С<br />
| Описание = Логический сдвиг вправо<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = 0 - - - - - * *<br />
| ACC | LSR A | 4A | 1 | 2 <br />
| ZP | LSR Oper | 46 | 2 | 5 <br />
| ZP, X | LSR Oper,X | 56 | 2 | 6 <br />
| ABS | LSR Oper | 4E | 3 | 6 <br />
| ABS, X | LSR Oper,X | 5E | 3 | 7 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = NOP<br />
| Операция = No operation<br />
| Описание = Пустая операция<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| IMP | NOP | EA | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ORA<br />
| Операция = A or M -> A<br />
| Описание = Логическое OR<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | ORA #Oper | 09 | 2 | 2 <br />
| ZP | ORA Oper | 05 | 2 | 3 <br />
| ZP, X | ORA Oper,X | 15 | 2 | 4 <br />
| ABS | ORA Oper | 0D | 3 | 4 <br />
| ABS, X | ORA Oper,X | 1D | 3 | 4* <br />
| ABS, Y | ORA Oper,Y | 19 | 3 | 4* <br />
| IND, X | ORA (Oper,X) | 01 | 2 | 6 <br />
| IND, Y | ORA (Oper),Y | 11 | 2 | 5 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = PHA<br />
| Операция = A -> (S + 3700), S - 1 -> S<br />
| Описание = Поместить аккумулятор в стек<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| IMP | PHA | 48 | 1 | 3 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = PHP<br />
| Операция = P -> (S + 3800), S - 1 -> S<br />
| Описание = Поместить слово состояния в стек<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| IMP | PHP | 08 | 1 | 3 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = PLA<br />
| Операция = S + 1 -> S, (S + 3900) -> A<br />
| Описание = Загрузить аккумулятор из стека<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | PLA | 68 | 1 | 4 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = PLP<br />
| Операция = S + 1 -> S, (S + 4000) -> P<br />
| Описание = Загрузить слово состояния из стека<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - * * * * *<br />
| IMP | PLP | 28 | 1 | 4 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ROL<br />
| Операция = <- [A или M] <- C <-<br />
| Описание = Циклический сдвиг влево<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| ACC | ROL A | 2A | 1 | 2 <br />
| ZP | ROL Oper | 26 | 2 | 5 <br />
| ZP, X | ROL Oper,X | 36 | 2 | 6 <br />
| ABS | ROL Oper | 2E | 3 | 6 <br />
| ABS, X | ROL Oper,X | 3E | 3 | 7 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ROR<br />
| Операция = -> C -> [A или M] -><br />
| Описание = Циклический сдвиг вправо<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| ACC | ROR A | 6A | 1 | 2 <br />
| ZP | ROR Oper | 66 | 2 | 5 <br />
| ZP, X | ROR Oper,X | 76 | 2 | 6 <br />
| ABS | ROR Oper | 6E | 3 | 6 <br />
| ABS, X | ROR Oper,X | 7E | 3 | 7 <br />
| Примечание = Инструкция ROR доступна в микропроцессорах MCS650X с июня 1976 г.<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = RTI<br />
| Операция = (4300 + S + 1) -> P, (4300 + S + 2) -> PC, S + 3 -> S<br />
| Описание = Возврат из прерывания<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - * * * * *<br />
| IMP | RTI | 40 | 1 | 6 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = RTS<br />
| Операция = (4400 + S + 1) -> PС, S + 2 -> S<br />
| Описание = Возврат из подпрограммы<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| IMP | RTS | 60 | 1 | 6 <br />
| Примечание = После извлечения адреса возврата из стека к нему прибавляется единица!<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SBC<br />
| Операция = A - M - C -> A, C<br />
| Описание = Вычитание с займом<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - - - - * *<br />
| IMM | SBC #Oper | E9 | 2 | 2 <br />
| ZP | SBC Oper | E5 | 2 | 3 <br />
| ZP, X | SBC Oper,X | F5 | 2 | 4 <br />
| ABS | SBC Oper | ED | 3 | 4 <br />
| ABS, X | SBC Oper,X | FD | 3 | 4* <br />
| ABS, Y | SBC Oper,Y | F9 | 3 | 4* <br />
| IND, X | SBC (Oper,X) | E1 | 2 | 6 <br />
| IND, Y | SBC (Oper),Y | F1 | 2 | 5 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SEC<br />
| Операция = 1 -> C<br />
| Описание = Установка флага переноса<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - 1<br />
| IMP | SEC | 38 | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SED<br />
| Операция = 1 -> D<br />
| Описание = Установка флага BCD<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - 1 - - -<br />
| IMP | SED | F8 | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SEI<br />
| Операция = 1 -> I<br />
| Описание = Установка флага запрета прерываний<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - 1 - - -<br />
| IMP | SEI | 78 | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = STA<br />
| Операция = A -> M<br />
| Описание = Сохранить аккумулятор в памяти<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ZP | STA Oper | 85 | 2 | 3 <br />
| ZP, X | STA Oper,X | 95 | 2 | 4 <br />
| ABS | STA Oper | 8D | 3 | 4 <br />
| ABS, X | STA Oper,X | 9D | 3 | 5 <br />
| ABS, Y | STA Oper, Y | 99 | 3 | 5 <br />
| IND, X | STA (Oper,X) | 81 | 2 | 6 <br />
| IND, Y | STA (Oper),Y | 91 | 2 | 6 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = STX<br />
| Операция = X -> M<br />
| Описание = Сохранить X в памяти<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ZP | STX Oper | 86 | 2 | 3 <br />
| ZP, Y | STX Oper,Y | 96 | 2 | 4 <br />
| ABS | STX Oper | 8E | 3 | 4 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = STY<br />
| Операция = Y -> M<br />
| Описание = Сохранить Y в памяти<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ZP | STY Oper | 84 | 2 | 3 <br />
| ZP, X | STY Oper,X | 94 | 2 | 4 <br />
| ABS | STY Oper | 8C | 3 | 4 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = TAX<br />
| Операция = A -> X<br />
| Описание = Передать A в X<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | TAX | AA | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = TAY<br />
| Операция = A -> Y<br />
| Описание = Передать A в X<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | TAY | A8 | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = TSX<br />
| Операция = S -> X<br />
| Описание = Передать S в X<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | TSX | BA | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = TXA<br />
| Операция = X -> A<br />
| Описание = Передать X в A<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | TXA | 8A | 1 | 2 <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = TXS<br />
| Операция = X -> S<br />
| Описание = Передать X в S<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| IMP | TXS | 9A | 1 | 2 <br />
| Примечание = В отличие от других операций загрузки, не влияет на флаг N<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = TYA<br />
| Операция = Y -> A<br />
| Описание = Передать Y в A<br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMP | TYA | 98 | 1 | 2 <br />
}}<br />
<br />
== Особенности ==<br />
=== Пересечение границ страниц в разных режимах адресации ===<br />
В режиме адресации к нулевой странице верхний байт вычисленного адреса всегда обнуляется, поэтому последовательность<br />
<br />
LDX #1<br />
LDA $FF,X<br />
<br />
Загрузит значение из адреса 0000H, а не 0100H, как можно было бы ожидать.<br />
<br />
При косвенной (Indirect) адресации двухбайтовый адрес не может быть извлечен через границу страницы, поэтому все варианты<br />
<br />
LDA ($FF),Y<br />
<br />
LDX #$00<br />
LDA ($FF,X)<br />
<br />
LDX #$FF<br />
LDA ($00,X)<br />
Извлекут младший байт из адреса 00FFH, а младший из 0000H.<br />
<br />
JMP (92FF)<br />
<br />
Получит младший байт из адреса 12FFH, а старший из 1200H.<br />
<br />
=== Внешняя установка флага V ===<br />
В некоторых моделях процессоров есть внешний сигнал -SO, устанавливающий флаг V. Назначение такого сигнала — прерывание ожидания вызова от внешнего устройства в бесконечном цикле команды BVC ($50 $FE).<br />
<br />
=== Флаг B при совпадении BRK и NMI ===<br />
В случае если в момент обработки BRK приходит аппаратное прерывание NMI, процессор переходит по адресу ($FFFA) вместо ($FFFE), а в стек попадает значение P с установленным флагом B.<br />
<br />
=== Работа команд ADC, SBC и ARR в режиме BCD ===<br />
В режиме BCD данные команды работают с числами не двоичном режиме, а BCD-представлении. Фактически, из особенностей нужно упомянуть только влиянии этого режима на установку флагов N, Z и V.<br />
<br />
* Z устанавливается по значению, эквивалентному двоичной, а не BCD-операции.<br />
Например, код<br />
<br />
SED<br />
CLC<br />
LDA #$80<br />
ADC #$80<br />
<br />
Даст в результате A=$60, но при этом Z=1.<br />
<br />
* Флаги N и V устанавливаются после исправления нижнего полубайта, но до исправления верхнего.<br />
<br />
Общий алгоритм работы команды ADC в режиме BCD следующий:<br />
<pre><br />
беззнаковые<br />
A, /* Аккумулятор */<br />
AL, /* нижняя половина аккумулятора */<br />
AH, /* верхняя половина аккумулятора */<br />
<br />
C, /* Флаг переноса */<br />
Z, /* Флаг нуля */<br />
V, /* Флаг переполнения */<br />
N, /* Флаг знака */<br />
<br />
s; /* значение, прибавляемое к аккумулятору */<br />
<br />
AL = (A & 15) + (s & 15) + C; /* Вычисляем нижнюю половину. */<br />
<br />
AH = (A >> 4) + (s >> 4) + (AL > 15); /* Вычисляем верхнюю половину. */<br />
<br />
if (AL > 9) AL += 6; /* BCD-исправление нижней половины. */<br />
<br />
Z = ((A + s + C) & 255 != 0); /* Флаг нуля устанавливается<br />
Как обычно. */<br />
<br />
/* Флаги знака и переполнения устанавливаются как обычно,<br />
но до исправления верхней половины */<br />
<br />
N = (AH & 8 != 0);<br />
V = ((AH << 4) ^ A) & 128 && !((A ^ s) & 128);<br />
<br />
if (AH > 9) AH += 6; /* BCD-исправление верхней половины. */<br />
<br />
/* Перенос – единственный, кто устанавливается в самом конце. */<br />
<br />
C = (AH > 15);<br />
A = ((AH << 4) | (AL & 15)) & 255;<br />
</pre><br />
<br />
С SBC проще. На установку флагов после нее флаг D не влияет.<br />
<br />
<pre><br />
беззнаковые<br />
A, /* Аккумулятор */<br />
AL, /* нижняя половина аккумулятора */<br />
AH, /* верхняя половина аккумулятора */<br />
<br />
C, /* Флаг переноса */<br />
Z, /* Флаг нуля */<br />
V, /* Флаг переполнения */<br />
N, /* Флаг знака */<br />
<br />
s; /* значение, вычитаемое из аккумулятора */<br />
<br />
AL = (A & 15) - (s & 15) - !C; /* Вычисляем нижнюю половину. */<br />
<br />
if (AL & 16) AL -= 6; /* BCD-исправление нижней половины. */<br />
<br />
AH = (A >> 4) - (s >> 4) - (AL & 16); /* Вычисляем верхнюю половину. */<br />
<br />
if (AH & 16) AH -= 6; /* BCD-исправление верхней половины. */<br />
<br />
/* Все флаги устанавливаем как обычно. */<br />
<br />
C = (A - s - !C) & 256 != 0;<br />
Z = (A - s - !C) & 255 != 0;<br />
V = ((A - s - !C) ^ s) & 128 && (A ^ s) & 128;<br />
N = (A - s - !C) & 128 != 0;<br />
<br />
A = ((AH << 4) | (AL & 15)) & 255;<br />
</pre><br />
<br />
=== Другие особенности ===<br />
* Процессор всегда прочитывает второй байт команды условного перехода. Если происходит переход с пересечением границы страницы, то процессор сначала читает байт из текущей страницы, и только потом из нужной.<br />
* Если граница страницы пересекается в других режимах адресации, процессор всегда сначала читает ошибочный байт со страницы, на 1 меньшую, чем нужная.<br />
* Команды вида «Прочитать-Изменить-Записать» выполняют две операции записи — сначала неизмененное значение, затем измененное (то есть INC физически выполняется как LDX loc; STX loc; INX; STX loc).<br />
* В цикле записи сигнал -RDY игнорируется, поэтому перед выполнением DMA его нужно держать не менее 3 циклов подряд, так как это максимально возможное подряд число циклов записи, вызываемое переходом на обработчик прерывания).<br />
* При отработке сигнала -RESET значения в регистрах, за исключением PC, остаются неизменными.<br />
* Процессор всегда прочитывает байт, следующий за кодом команды. Так как многие команды двух-трехбайтовые, это достаточно эффективно.<br />
* Если команда в своем последнем цикле не сохраняет результат в память, то процессор в этот момент читает код следующей команды. Поэтому для таких команд в таблицах обычно указывается время исполнения, на 1 меньше реального.<br />
<br />
=== Обработка прерываний ===<br />
Обработка NMI и IRQ занимает 7 циклов, их обработка в целом похожа на команду BRK. IRQ и BRK устанавливают флаг I, в то время как NMI — нет.<br />
<br />
Перед обработкой прерывания процессор ожидает завершения выполнения текущей команды. Чтобы прерывание было обработано до следующей команды, оно должно быть получено не позднее последнего цикла текущей команды. Исключение есть только для команды BRK. Если прерывание приходит до 4-го цикла (сохранение флагов), то команда игнорируется и происходит переход на обработчик аппаратного прерывания. Обычно это не вызывает проблем, так как в случае совпадения BRK и IRQ все равно устанавливается флаг B, обработчик считает, что выполняется BRK, а IRQ срабатывает по возвращении из обработки BRK. С другой стороны, совпадение BRK и NMI более фатально. Если флаг B не проверяется в обработчике NMI, и перед возвращением адрес возврата не уменьшается на 2, то команда BRK будет потеряна.<br />
<br />
При совпадении IRQ и NMI, процессор, теоретически, должен перейти на обработку NMI, а потом сразу на IRQ, хотя это и не проверено на практике.<br />
<br />
Обработка RESET занимает 6 циклов с момента снятия сигнала. Все регистры сохраняются, кроме PC.<br />
<br />
=== Отличия NMOS и CMOS вариантов ===<br />
* Индексная адресация при пересечении границы страницы:<br />
** NMOS: Дополнительное чтение по неправильному адресу;<br />
** CMOS: Дополнительное чтение последнего байта инструкции;<br />
* Выполнение команд с недопустимыми кодами:<br />
** NMOS: Вешают процессор до выполнения принудительного сброса;<br />
** CMOS: Исполняются как NOP (Резерв на будущее)<br />
* Переход по косвенному адресу, когда операнд пересекает границу страницы (xxFFH):<br />
** NMOS: Второй байт берется из первого байта текущей страницы;<br />
** CMOS: Второй байт берется со следующей страницы, ко времени исполнения добавляется 1 такт.<br />
* Команды вида «Прочитать-Изменить-Записать»<br />
** NMOS: Одна лишняя запись (см. выше);<br />
** CMOS: Одно лишнее чтение.<br />
* Флаг D<br />
** NMOS: После сброса не определен;<br />
** CMOS: Сбрасывается в 0 после аппаратного сброса или прерывания.<br />
* Флаги в режиме BCD<br />
** NMOS: Значения некорректны (см. выше);<br />
** CMOS: Значения правильные, но добавляется 1 цикл.<br />
* Прерывания в момент выборки команды BRK:<br />
** NMOS: Происходит переход по вектору прерывания, а не BRK;<br />
** CMOS: Сначала исполняется команда BRK, потом срабатывает прерывание.<br />
<br />
== Недокументированные команды ==<br />
<br />
Многие недокументированные команды реально не выполняют операцию AND между регистрами. Это происходит автоматически, когда два значения помещаются одновременно на внутреннюю шину с открытыми коллекторами.<br />
<br />
=== NOP ===<br />
Команда NOP, помимо кода 90, может выполняться с другими методами адресации. В этом случае она эквивалентна команде LDA, за исключением того, что она не сохраняет результат и не влияет на флаги.<br />
<br />
{{Команда<br />
| Обозначение = ANE<br />
| Операция = Вар. 1: A = ((A and #581 and X) or ( #$EE and X)) and #byte; Вар. 2: X and #byte -> A<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | ANE #byte | 8B | 2 | ? <br />
| Примечание = В реальности параметр #581 может принимать значения #580, #58 или #$00, что зависит от значения, оставленного на шине видеоконтроллером после прерывания команды в режиме DMA.<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ANC<br />
| Операция = Вар. 1: A and #byte -> A, ASL A; Вар. 2: предыдущее без ASL<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| IMM | ANC #Oper | 0B | 2 | ?<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ANC?<br />
| Операция = Вар. 1: A and #byte -> A, ROL A; Вар. 2: предыдущее без ROL<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| IMM | ANC #Oper | 2B | 2 | ?<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ARR (ADC + ROR)<br />
| Операция = D=0: A and #byte -> A, ROR, A7->S, A6->V, (A==0)->Z, A6 xor A5 -> C<br><br />
D=1: см. код ниже<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - - - - * *<br />
| IMM | ARR #byte | 6B | 2? | ? <br />
| Примечание = Алгоритм для BCD-режима:<br />
<pre><br />
A, /* Аккумулятор */<br />
AL, /* нижняя половина аккумулятора */<br />
AH, /* верхняя половина аккумулятора */<br />
<br />
C, /* Флаг переноса */<br />
Z, /* Флаг нуля */<br />
V, /* Флаг переполнения */<br />
N, /* Флаг знака */<br />
<br />
t, /* вспомогательная переменная */<br />
s; /* байт-параметр команды */<br />
<br />
t = A & s; /* Выполняем AND. */<br />
<br />
AH = t >> 4; /* Делим результат */<br />
AL = t & 15; /* на части. */<br />
<br />
N = C; /* Флаг знака */<br />
Z = !(A = (t >> 1) | (C << 7)); /* Z как обычно */<br />
V = (t ^ A) & 64; /* a V магически. */<br />
<br />
if (AL + (AL & 1) > 5) /* «заплатка» BCD для нижней половины. */<br />
A = (A & 0xF0) | ((A + 6) & 0xF);<br />
<br />
if (C = AH + (AH & 1) > 5) /* Перенос. */<br />
A = (A + 0x60) & 0xFF; /* «заплатка» BCD для верхней половины. */<br />
</pre><br />
}}<br />
<br />
{{Команда<br />
| Обозначение = ASR<br />
| Операция = A and #byte -> A, LSR A<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| IMM | ASR #Oper | 4B | 2 | ?<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = DCP (DEC + CMP)<br />
| Операция = M + 1 -> M, A – M<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| ZP | DCP Oper | C7 | 2 | ? <br />
| ZP, X | DCP Oper,X | D7 | 2 | ? <br />
| ABS | DCP Oper | CF | 3 | ? <br />
| ABS, X | DCP Oper,X | DF | 3 | ? <br />
| ABS, Y | DCP Oper, Y | DB | 3 | ? <br />
| IND, X | DCP (Oper,X) | C3 | 2 | ? <br />
| IND, Y | DCP (Oper),Y | D3 | 2 | ? <br />
}}<br />
<br />
<br />
{{Команда<br />
| Обозначение = ISB (INC + SBC)<br />
| Операция = M + 1 -> M, A – M -> A <br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - - - - * *<br />
| ZP | ISB Oper | E7 | 2 | ? <br />
| ZP, X | ISB Oper,X | F7 | 2 | ? <br />
| ABS | ISB Oper | EF | 3 | ? <br />
| ABS, X | ISB Oper,X | FF | 3 | ? <br />
| ABS, Y | ISB Oper, Y | FB | 3 | ? <br />
| IND, X | ISB (Oper,X) | E3 | 2 | ? <br />
| IND, Y | ISB (Oper),Y | F3 | 2 | ? <br />
}}<br />
<br />
<br />
{{Команда<br />
| Обозначение = LAS<br />
| Операция = M and S -> A, X, S<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| ABS, Y | LAS Oper, Y | BB | 3 | ? <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = LAX<br />
| Операция = M -> A, X<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| ZP | LAX Oper | A7 | 2 | ? <br />
| ZP, Y! | LAX Oper,Y | B7 | 2 | ? <br />
| ABS | LAX Oper | AF | 3 | ? <br />
| ABS, Y | LAX Oper,Y | BF | 3 | ? <br />
| IND, X | LAX (Oper,Y) | A3 | 2 | ? <br />
| IND, Y | LAX (Oper),Y | B3 | 2 | ? <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = LXA<br />
| Операция = Вар. 1: A = X = ANE; Вар. 2: A = X = (A & #byte); Вар. 3: A = X = #byte;<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * -<br />
| IMM | LXA #byte | AB | 2? | ? <br />
}}<br />
<br />
<br />
{{Команда<br />
| Обозначение = RLA<br />
| Операция = ROL M, A and M -> A<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| ZP | RLA Oper | 27 | 2 | ? <br />
| ZP, X | RLA Oper,X | 37 | 2 | ? <br />
| ABS | RLA Oper | 2F | 3 | ? <br />
| ABS, X | RLA Oper,X | 3F | 3 | ? <br />
| ABS, Y | RLA Oper, Y | 3B | 3 | ? <br />
| IND, X | RLA (Oper,X) | 23 | 2 | ? <br />
| IND, Y | RLA (Oper),Y | 33 | 2 | ? <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = RRA<br />
| Операция = ROR M, ADC(A, M) -> A<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * * - - - - * *<br />
| ZP | RRA Oper | 67 | 2 | ? <br />
| ZP, X | RRA Oper,X | 77 | 2 | ? <br />
| ABS | RRA Oper | 6F | 3 | ? <br />
| ABS, X | RRA Oper,X | 7F | 3 | ? <br />
| ABS, Y | RRA Oper, Y | 7B | 3 | ? <br />
| IND, X | RRA (Oper,X) | 63 | 2 | ? <br />
| IND, Y | RRA (Oper),Y | 73 | 2 | ? <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SAX<br />
| Операция = A and X -> M<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ZP | SAX Oper | 87 | 2 | ? <br />
| ZP, Y! | SAX Oper,Y | 97 | 2 | ? <br />
| ABS | SAX Oper | 8F | 3 | ? <br />
| IND, X | SAX (Oper,X) | 83 | 2 | ? <br />
}}<br />
<br />
<br />
{{Команда<br />
| Обозначение = SBX (CMP + DEX)<br />
| Операция = (A and X) - #byte -> X<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| IMM | SBX #byte | CB | 2 | ? <br />
| Примечание = От CMP осталось вычитание, от DEX – сохранение результата в X. AND берется из одновременного подключения A и X к АЛУ.<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SHA<br />
| Операция = A & X & (ADDR_HI + 1)) -> M<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| IND, Y | SHA (Oper),Y | 93 | 2 | ?<br />
| ABS, Y | SHA Oper,Y | 9F | 3 | ?<br />
| Примечание = ADDR_HI, вероятно, старший байт адреса M?<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SHS<br />
| Операция = A and X -> S, S and ADDR_HI -> M<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ABS, Y | SHS Oper,Y | 9B | 3 | ?<br />
| Примечание = ADDR_HI, вероятно, старший байт адреса M?<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SHX<br />
| Операция = Вар. 1: X and (ADDR_HI + 1) -> M; Вар. 2: X and ADDR_HI -> M<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ABS, Y | SHX Oper,Y | 9E | 3 | ?<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SHY<br />
| Операция = Вар. 1: Y & (ADDR_HI + 1) -> M; Вар. 2: Y and ADDR_HI -> M<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = - - - - - - - -<br />
| ABS, Y | SHY Oper,Y | 9C | 3 | ?<br />
| Примечание = По другому источнику, режим адресации ABS, X.<br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SLO (ASL + ORA)<br />
| Операция = ASL M -> M, A or M -> A<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| ZP | SLO Oper | 07 | 2 | ? <br />
| ZP, X | SLO Oper,X | 17 | 2 | ? <br />
| ABS | SLO Oper | 0F | 3 | ? <br />
| ABS, X | SLO Oper,X | 1F | 3 | ? <br />
| ABS, Y | SLO Oper, Y | 1B | 3 | ? <br />
| IND, X | SLO (Oper,X) | 03 | 2 | ? <br />
| IND, Y | SLO (Oper),Y | 13 | 2 | ? <br />
}}<br />
<br />
{{Команда<br />
| Обозначение = SRE<br />
| Операция = LSR M -> M, A xor M -> A<br />
| Описание = <br />
| Флаги = N V 1 B D I Z C<br />
| Изменение флагов = * - - - - - * *<br />
| ZP | SRE Oper | 47 | 2 | ? <br />
| ZP, X | SRE Oper,X | 57 | 2 | ? <br />
| ABS | SRE Oper | 4F | 3 | ? <br />
| ABS, X | SRE Oper,X | 5F | 3 | ? <br />
| ABS, Y | SRE Oper, Y | 5B | 3 | ? <br />
| IND, X | SRE (Oper,X) | 43 | 2 | ? <br />
| IND, Y | SRE (Oper),Y | 53 | 2 | ? <br />
}}<br />
<br />
== Порядок декодирования команд ==<br />
<br />
Любую команду 6502 можно представить следующим образом:<br />
<br />
XXXYYYZZ<br />
└┬┘└┬┘└┤<br />
│ │ └── Группа команд<br />
│ └───── Режим адресации<br />
└──────── Код команды<br />
<br />
Таким образом, для уменьшения сравнений можно использовать следующий алгоритм:<br />
<br />
swith ZZ:<br />
case 0:<br />
switch XXX:<br />
case 0:<br />
//Команды 000yyy00<br />
Do_Command_0(yyy);<br />
break;<br />
case 1:<br />
//Команды 001yyy00<br />
Do_Command_1(yyy);<br />
break;<br />
// etc<br />
end;<br />
case 1:<br />
switch XXX:<br />
case 0:<br />
//Команды 000yyy01<br />
Do_Command_2(yyy);<br />
break;<br />
case 1:<br />
//Команды 001yyy01<br />
Do_Command_3(yyy);<br />
break;<br />
// etc<br />
end;<br />
break<br />
end; <br />
<br />
Далее все команды сгруппированы по этому принципу.<br />
* «*» отмечены недокументированные команды)<br />
* HALT обозначает зависание процессора<br />
* «*NOP mode» обозначает, что команда эквивалента «LDA mode», но результат не сохраняется и флаги не меняются.<br />
<br />
??? 000xxx00<br />
000 BRK<br />
001 *NOP zp<br />
010 PHP<br />
011 *NOP abs<br />
100 BPL<br />
101 *NOP zp,x<br />
110 CLC<br />
111 *NOP abs,x<br />
<br />
??? 001xxx00<br />
000 JSR<br />
001 BIT zp<br />
010 PLP impl<br />
011 BIT abs<br />
100 BMI rel<br />
101 *NOP zp,x<br />
110 SEC impl<br />
111 *NOP abs,x<br />
<br />
??? 010xxx00<br />
000 RTI<br />
001 *NOP zp<br />
010 PHA impl<br />
011 JMP abs<br />
100 BVC rel<br />
101 *NOP zp,x<br />
110 CLI impl<br />
111 *NOP abs,x<br />
<br />
??? 011xxx00<br />
000 RTS<br />
001 *NOP zp<br />
010 PLA impl<br />
011 JMP (abs)<br />
100 BVS rel<br />
101 *NOP zp,x<br />
110 SEI impl<br />
111 *NOP abs,x<br />
<br />
??? 100xxx00<br />
000 *NOP<br />
001 STY zp<br />
010 DEY impl<br />
011 STY abs<br />
100 BCC rel<br />
101 STY zp,x<br />
110 TYA impl<br />
111 *SHY abs,x<br />
<br />
??? 101xxx00<br />
000 LDY<br />
001 LDY zp<br />
010 TAY impl<br />
011 LDY abs<br />
100 BCS rel<br />
101 LDY zp,x<br />
110 CLV impl<br />
111 LDY abs,x<br />
<br />
??? 110xxx00<br />
000 CPY<br />
001 CPY zp<br />
010 INY impl<br />
011 CPY abs<br />
100 BNE rel<br />
101 *NOP zp,x<br />
110 CLD impl<br />
111 *NOP abs,x<br />
<br />
??? 111xxx00<br />
000 CPX<br />
001 CPX zp<br />
010 INX impl<br />
011 CPX abs<br />
100 BEQ rel<br />
101 *NOP zp,x<br />
110 SED impl<br />
111 *NOP abs,x<br />
<br />
ORA 000xxx01<br />
000 ind,x<br />
001 zp<br />
010 immed<br />
011 abs<br />
100 ind,y<br />
101 zp,x<br />
110 abs,y<br />
111 abs,x<br />
<br />
AND 001xxx01<br />
EOR 010xxx01<br />
ADC 011xxx01<br />
STA 100xxx01<br />
LDA 101xxx01<br />
CMP 110xxx01<br />
SBC 111xxx01<br />
<br />
ASL 000xxx10<br />
000 *HALT<br />
001 zp<br />
010 accum<br />
011 abs<br />
100 *HALT<br />
101 zp,x<br />
110 *NOP<br />
111 abs,x<br />
<br />
ROL 001xxx10<br />
000 *HALT<br />
001 zp<br />
010 accum<br />
011 abs<br />
100 *HALT<br />
101 zp,x<br />
110 *NOP<br />
111 abs,x<br />
<br />
LSR 010xxx10<br />
000 *HALT<br />
001 zp<br />
010 accum<br />
011 abs<br />
100 *HALT<br />
101 zp,x<br />
110 *NOP<br />
111 abs,x<br />
<br />
ROR 011xxx10<br />
000 *HALT<br />
001 zp<br />
010 accum<br />
011 abs<br />
100 *HALT<br />
101 zp,x<br />
110 *NOP<br />
111 abs,x<br />
<br />
STX 100xxx10<br />
000 *NOP(HALT)<br />
001 zp<br />
010 TXA (accum)<br />
011 abs<br />
100 *HALT<br />
101 zp,y<br />
110 TXS<br />
111 *SHX**y)<br />
<br />
LDX 101xxx10<br />
000 imm<br />
001 zp<br />
010 TAX (accum)<br />
011 abs<br />
100 *HALT<br />
101 zp,y<br />
110 TSX<br />
111 *y)<br />
<br />
DEC 110xxx10<br />
000 *NOP(HALT)<br />
001 zp<br />
010 DEX (impl)<br />
011 abs<br />
100 *HALT<br />
101 zp,x<br />
110 *NOP<br />
111 abs,x<br />
<br />
INC 111xxx10<br />
000 *NOP(HALT)<br />
001 zp<br />
010 NOP (impl)<br />
011 abs<br />
100 *HALT<br />
101 zp,x<br />
110 *NOP<br />
111 abs,x<br />
<br />
*SLO 000xxx11<br />
000 *SLO ind,x<br />
001 *SLO zp<br />
010 *ANC imm<br />
011 *SLO abs<br />
100 *SLO ind,y<br />
101 *SLO zp,x<br />
110 *SLO abs,y<br />
111 *SLO abs,x<br />
<br />
*RLA 001xxx11<br />
000 *RLA ind,x<br />
001 *RLA zp<br />
010 *ANC imm<br />
011 *RLA abs<br />
100 *RLA ind,y<br />
101 *RLA zp,x<br />
110 *RLA abs,y<br />
111 *RLA abs,x<br />
<br />
*SRE 010xxx11<br />
000 *SRE ind,x<br />
001 *SRE zp<br />
010 *ASR imm<br />
011 *SRE abs<br />
100 *SRE ind,y<br />
101 *SRE zp,x<br />
110 *SRE abs,y<br />
111 *SRE abs,x<br />
<br />
*RRA 011xxx11<br />
000 *RRA ind,x<br />
001 *RRA zp<br />
010 *ARR imm<br />
011 *RRA abs<br />
100 *RRA ind,y<br />
101 *RRA zp,x<br />
110 *RRA abs,y<br />
111 *RRA abs,x<br />
<br />
*??? 100xxx11<br />
000 *SAX ind,x<br />
001 *SAX zp<br />
010 *ANE imm<br />
011 *SAX abs<br />
100 *SHA ind,y<br />
101 *SAX* y)<br />
110 *SHS abs,y<br />
111 *SHA**y)<br />
<br />
*??? 101xxx11<br />
000 *LAX ind,x<br />
001 *LAX zp<br />
010 *LXA imm<br />
011 *LAX abs<br />
100 *LAX ind,y<br />
101 *LAX* y)<br />
110 *LAS abs,y<br />
111 *LAX* y)<br />
<br />
*DCP 110xxx11<br />
000 *DCP ind,x<br />
001 *DCP zp<br />
010 *SBX imm<br />
011 *DCP abs<br />
100 *DCP ind,y<br />
101 *DCP zp,x<br />
110 *DCP abs,y<br />
111 *DCP abs,x<br />
<br />
*ISB 111xxx11<br />
000 *ISB ind,x<br />
001 *IBS zp<br />
010 *SBC imm<br />
011 *ISB abs<br />
100 *ISB ind,y<br />
101 *ISB zp,x<br />
110 *ISB abs,y<br />
111 *ISB abs,x<br />
<br />
== Источники ==<br />
* http://www.oxyron.de/html/opcodes02.html<br />
* https://emuverse.ru/downloads/datasheets/processors/6502/c64doc.txt<br />
<br />
<br />
<br />
[[Категория:MOS 6502]]</div>Pantherhttps://emuverse.ru/w/index.php?title=MOS_Technology_6502&diff=3732MOS Technology 65022024-01-08T20:43:44Z<p>Panther: /* Документация */ +ints</p>
<hr />
<div>{{Emuverse}}<br />
<br />
[[Изображение:MOS 6502AD 4585 top.jpg|thumb|Процессор 6502 в пластмассовом корпусе DIL-40]]<br />
'''MOS Technology 6502''', '''6502''', — 8-ми разрядный микропроцессор, первоначально разрабртанный компанией MOS Technology.<br />
<br />
== Варианты ==<br />
* 6501 — исходная версия процессора, весь тираж уничтожен из-за лицензионных проблем с Motorola;<br />
* 6502 — основная версия процессора, вариант 6501 с измененным внешним интерфейсом и встроенным двухфазным тактовым генератором;<br />
* 6507 — упрощенная версия 6502 без внешних прерываний и урезанной шиной адреса;<br />
* 6508 — микроконтроллер с ядром 6502, 8-ми битнытным портом ввода-вывода и 256 байтами статической ОЗУ;<br />
* 6509 — вариант 6502, способный адресовать 1 Мб внешней памяти с помощью встроенного блока переключения банков;<br />
* 6510 — вариант 6502 с 8-ми битным портом ввода-вывода (в большинстве вариантов были доступны 6 бит. Применялся в компьютере [[Commodore 64]];<br />
* 8500 — HMOS-версия 6510;<br />
* 7501/8501 — полностью совместимые версии 6510;<br />
* 8502 — версия 6510, имеющая отличия в исполнении некоторых недокументированных команд;<br />
* 65C02 — обновленная версия 6502, имеющая несколько новых команд;<br />
* 65CE02 — ядро, применявшееся в микроконтроллере [[MOS Technology 4510]];<br />
* [[65816|WDC 65816/65802]] — 16-ти разрядный микропроцессор, усовершенствованный 6502. Имеет режим полной эмуляции 6502. 65802 полностью совместим с 6502 по внешним выводам и может быть использован вместо него в старых компьютерах;<br />
<br />
== Системы на основе 6502 ==<br />
* Игровые приставки [[Atari 2600]] (6507), [[Nintendo Entertainment System]];<br />
* [[Apple II]];<br />
* [[Правец 8]];<br />
* [[Агат]] (Клон 6502 болгарского производства, оригинальные процессоры со спиленной маркировкой);<br />
* [[Commodore 64]] (6510).<br />
<br />
== Рекомендуемая литература ==<br />
* ''Морер&nbsp;У.'' Язык Ассемблера для персонального компьютера ЭПЛ.&nbsp;— М.: Мир, 1987. 430&nbsp;с.<br />
<br />
== Ссылки ==<br />
* [http://www.6502.org/ www.6502.org]{{ref-en}}<br />
* [https://github.com/Klaus2m5/6502_65C02_functional_tests Тесты команд]<br />
<br />
== Документация ==<br />
* [[MOS Technology 6502/Система команд|Полная система команд 6502/6510]]<br />
* {{txt||Микропроцессор 6502|datasheets/processors/6502/6502.rus.txt}}<br />
* {{www}} [http://www.zophar.net/tech/files/6502ref.html 65C02 Reference Manual] {{ref-en}}<br />
* {{www}} [http://6502.org/tutorials/interrupts.html Описание механизма прерываний] {{ref-en}}<br />
* {{txt||6502/6510/8500/8502 instruction set] + undoc|datasheets/processors/6502/c64doc.txt}} {{ref-en}}<br />
* {{pdf||UMC UM6502 datasheet|datasheets/processors/6502/UM6502.pdf}} {{ref-en}}<br />
* {{pdf||WDC W65C02S datasheet|datasheets/processors/6502/W6502S.pdf}} {{ref-en}}<br />
* {{zip||Commodore Semicounductor Group 6508 datasheet|datasheets/processors/6502/6508.zip}} {{ref-en}}<br />
* {{zip||Commodore Semicounductor Group 6509 datasheet|datasheets/processors/6502/6509-8610.zip}} {{ref-en}}<br />
* {{txt||6502 bugs list|datasheets/processors/6502/6502.bugs.txt}} {{ref-en}}<br />
* {{www}} [http://www.atariarchives.org/mlb/ Machine Language For Beginners] by Richard Mansfield, published 1983 {{ref-en}}<br />
<br />
[[Категория:MOS 6502]]</div>Pantherhttps://emuverse.ru/w/index.php?title=MOS_Technology_6502&diff=3731MOS Technology 65022024-01-07T08:32:14Z<p>Panther: /* Ссылки */ + tests</p>
<hr />
<div>{{Emuverse}}<br />
<br />
[[Изображение:MOS 6502AD 4585 top.jpg|thumb|Процессор 6502 в пластмассовом корпусе DIL-40]]<br />
'''MOS Technology 6502''', '''6502''', — 8-ми разрядный микропроцессор, первоначально разрабртанный компанией MOS Technology.<br />
<br />
== Варианты ==<br />
* 6501 — исходная версия процессора, весь тираж уничтожен из-за лицензионных проблем с Motorola;<br />
* 6502 — основная версия процессора, вариант 6501 с измененным внешним интерфейсом и встроенным двухфазным тактовым генератором;<br />
* 6507 — упрощенная версия 6502 без внешних прерываний и урезанной шиной адреса;<br />
* 6508 — микроконтроллер с ядром 6502, 8-ми битнытным портом ввода-вывода и 256 байтами статической ОЗУ;<br />
* 6509 — вариант 6502, способный адресовать 1 Мб внешней памяти с помощью встроенного блока переключения банков;<br />
* 6510 — вариант 6502 с 8-ми битным портом ввода-вывода (в большинстве вариантов были доступны 6 бит. Применялся в компьютере [[Commodore 64]];<br />
* 8500 — HMOS-версия 6510;<br />
* 7501/8501 — полностью совместимые версии 6510;<br />
* 8502 — версия 6510, имеющая отличия в исполнении некоторых недокументированных команд;<br />
* 65C02 — обновленная версия 6502, имеющая несколько новых команд;<br />
* 65CE02 — ядро, применявшееся в микроконтроллере [[MOS Technology 4510]];<br />
* [[65816|WDC 65816/65802]] — 16-ти разрядный микропроцессор, усовершенствованный 6502. Имеет режим полной эмуляции 6502. 65802 полностью совместим с 6502 по внешним выводам и может быть использован вместо него в старых компьютерах;<br />
<br />
== Системы на основе 6502 ==<br />
* Игровые приставки [[Atari 2600]] (6507), [[Nintendo Entertainment System]];<br />
* [[Apple II]];<br />
* [[Правец 8]];<br />
* [[Агат]] (Клон 6502 болгарского производства, оригинальные процессоры со спиленной маркировкой);<br />
* [[Commodore 64]] (6510).<br />
<br />
== Рекомендуемая литература ==<br />
* ''Морер&nbsp;У.'' Язык Ассемблера для персонального компьютера ЭПЛ.&nbsp;— М.: Мир, 1987. 430&nbsp;с.<br />
<br />
== Ссылки ==<br />
* [http://www.6502.org/ www.6502.org]{{ref-en}}<br />
* [https://github.com/Klaus2m5/6502_65C02_functional_tests Тесты команд]<br />
<br />
== Документация ==<br />
* [[MOS Technology 6502/Система команд|Полная система команд 6502/6510]]<br />
* {{txt||Микропроцессор 6502|datasheets/processors/6502/6502.rus.txt}}<br />
* {{www}} [http://www.zophar.net/tech/files/6502ref.html 65C02 Reference Manual] {{ref-en}}<br />
* {{txt||6502/6510/8500/8502 instruction set] + undoc|datasheets/processors/6502/c64doc.txt}} {{ref-en}}<br />
* {{pdf||UMC UM6502 datasheet|datasheets/processors/6502/UM6502.pdf}} {{ref-en}}<br />
* {{pdf||WDC W65C02S datasheet|datasheets/processors/6502/W6502S.pdf}} {{ref-en}}<br />
* {{zip||Commodore Semicounductor Group 6508 datasheet|datasheets/processors/6502/6508.zip}} {{ref-en}}<br />
* {{zip||Commodore Semicounductor Group 6509 datasheet|datasheets/processors/6502/6509-8610.zip}} {{ref-en}}<br />
* {{txt||6502 bugs list|datasheets/processors/6502/6502.bugs.txt}} {{ref-en}}<br />
* {{www}} [http://www.atariarchives.org/mlb/ Machine Language For Beginners] by Richard Mansfield, published 1983 {{ref-en}}<br />
<br />
[[Категория:MOS 6502]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0/%D0%9D%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8&diff=3730Заглавная страница/Новости2024-01-06T19:57:01Z<p>Panther: </p>
<hr />
<div>* 13.09.2023 Сервер обновлен на актуальные версии ПО.<br />
* 06.01.2024 Вышел первый релиз эмулятора [https://github.com/Ptr314/ecat3 eCat 3-й версии].<br />
<!--<br />
* 25.08.2016 Отсканирован комплект технических описаний [[Искра-1030|Искра-1030.11 исполнение 5]]<br />
* 18.06.2016 Отсканирован комплект технических описаний [[Искра-1030|Искра-1030М]]<br />
* 08.06.2016 Отсканирован комплект документации [[Нейрон И9.66]]<br />
* 20.12.2015 Отсканирован альбом схем [[EC-184x|ЕС-1841]]<br />
* 12.12.2015 Включена поддержка SVG<br />
* 07.10.2015 Добавлены материалы по [[УКНЦ]]<br />
* 29.09.2015 Добавлена статья [[Формат дисков CP/M 2.2]];<br />
* 11.07.2015 Отсканирован альбом схем [[Т3-29]];<br />
* 03.04.2015 Отсканировано Руководство пользователя [[Т3-29]];<br />
* 28.02.2014 Выложены прошивки контроллеров ИРПС и НГМД компьютера [[Поиск]];<br />
* 23.02.2014 Отсканировано техническое описание [[Т3-29]];<br />
* 21.02.2014 Выложены прошивки клавиатуры [[Искра-1030]] и контроллера КЖД [[EC-184x|ЕС-1841]];<br />
* 19.02.2014 Выложены прошивки [[Электроника Т3-29]] и [[Искра-1030|Искра-1030М]];<br />
* Загружена статья о [[Контроллер дисковода: схемотехника и принципы работы|схемотехнике и принципах работы контроллеров дисководов]];<br />
* Собран из частей альбом схем ПК «[[Партнер]]»<br />
* [[Корвет|Выложена вся имеющаяся документация по «Корвету»]]<br />
* [[Юниор|Схема и руководство от компьютера «Юниор»]]<br />
* [[Teledisk|Описание формата Teledisk]]<br />
* [[FDC 1793|Описание контроллера КР1818ВГ93&nbsp;/ FDC&nbsp;1793]]<br />
* [[MOS Technology 6502/Система команд|Система команд 6502]]<br />
* [[Орион-Про|Авторская документация по «Орион-Про»]]<br />
* [[Ириша|Отсканирована и размещена в DjVu книга «Персональный компьютер «Ириша»]]<br />
* [[Эрик/Радиолюбитель 1994/Персональный компьютер «Эрик»|Персональный компьютер «Эрик» — статья из журнала «Радиолюбитель»]]<br />
* [[Партнёр/Радиолюбитель 1994/Большие возможности ПК «Партнёр»|ПК «Партнёр» — статья из журнала «Радиолюбитель»]]<br />
* [[:Категория:Микро-80/Публикации|Публикации по Микро-80]]<br />
* [[Радиолюбитель 1994-02,03/Спектрум-128|Архитектура Спектрум-128]]<br />
* [[Zilog Z80/Система команд|Система команд Z80]<br />
--><br />
<small>[https://emuverse.ru/w/index.php?title=Заглавная_страница/Новости&action=edit редактировать]</small></div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0/%D0%9D%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8&diff=3729Заглавная страница/Новости2024-01-06T19:56:34Z<p>Panther: eCat 3.0.0</p>
<hr />
<div>* 13.09.2023 Сервер обновлен на актуальные версии ПО<br />
* 06.01.2024 Вышел первый релиз эмулятора [https://github.com/Ptr314/ecat3 eCat 3-й версии].<br />
<!--<br />
* 25.08.2016 Отсканирован комплект технических описаний [[Искра-1030|Искра-1030.11 исполнение 5]]<br />
* 18.06.2016 Отсканирован комплект технических описаний [[Искра-1030|Искра-1030М]]<br />
* 08.06.2016 Отсканирован комплект документации [[Нейрон И9.66]]<br />
* 20.12.2015 Отсканирован альбом схем [[EC-184x|ЕС-1841]]<br />
* 12.12.2015 Включена поддержка SVG<br />
* 07.10.2015 Добавлены материалы по [[УКНЦ]]<br />
* 29.09.2015 Добавлена статья [[Формат дисков CP/M 2.2]];<br />
* 11.07.2015 Отсканирован альбом схем [[Т3-29]];<br />
* 03.04.2015 Отсканировано Руководство пользователя [[Т3-29]];<br />
* 28.02.2014 Выложены прошивки контроллеров ИРПС и НГМД компьютера [[Поиск]];<br />
* 23.02.2014 Отсканировано техническое описание [[Т3-29]];<br />
* 21.02.2014 Выложены прошивки клавиатуры [[Искра-1030]] и контроллера КЖД [[EC-184x|ЕС-1841]];<br />
* 19.02.2014 Выложены прошивки [[Электроника Т3-29]] и [[Искра-1030|Искра-1030М]];<br />
* Загружена статья о [[Контроллер дисковода: схемотехника и принципы работы|схемотехнике и принципах работы контроллеров дисководов]];<br />
* Собран из частей альбом схем ПК «[[Партнер]]»<br />
* [[Корвет|Выложена вся имеющаяся документация по «Корвету»]]<br />
* [[Юниор|Схема и руководство от компьютера «Юниор»]]<br />
* [[Teledisk|Описание формата Teledisk]]<br />
* [[FDC 1793|Описание контроллера КР1818ВГ93&nbsp;/ FDC&nbsp;1793]]<br />
* [[MOS Technology 6502/Система команд|Система команд 6502]]<br />
* [[Орион-Про|Авторская документация по «Орион-Про»]]<br />
* [[Ириша|Отсканирована и размещена в DjVu книга «Персональный компьютер «Ириша»]]<br />
* [[Эрик/Радиолюбитель 1994/Персональный компьютер «Эрик»|Персональный компьютер «Эрик» — статья из журнала «Радиолюбитель»]]<br />
* [[Партнёр/Радиолюбитель 1994/Большие возможности ПК «Партнёр»|ПК «Партнёр» — статья из журнала «Радиолюбитель»]]<br />
* [[:Категория:Микро-80/Публикации|Публикации по Микро-80]]<br />
* [[Радиолюбитель 1994-02,03/Спектрум-128|Архитектура Спектрум-128]]<br />
* [[Zilog Z80/Система команд|Система команд Z80]<br />
--><br />
<small>[https://emuverse.ru/w/index.php?title=Заглавная_страница/Новости&action=edit редактировать]</small></div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%9E%D1%80%D0%B8%D0%BE%D0%BD-128&diff=3728Орион-1282023-12-27T18:27:07Z<p>Panther: /* Ссылки */ +1</p>
<hr />
<div>{{Википедия}}<br />
<br />
'''«Орион-128»''' — любительский 8-разрядный [[персональный компьютер]]. Разработан радиолюбителями из подмосковья — Вячеславом Сафроновым, Владиславом Сугоняко, Константином Коненковым. Схема и описание компьютера были опубликованы в [[Радио (журнал)|журнале «Радио»]] № 1/[[1990]], другие материалы по теме публиковались в этом журнале до [[1996]] года.<br />
<br />
Технические характеристики:<br />
* Процессор: [[КР580ВМ80А]] на частоте 2,5 МГц, быстродействие 625 тысяч оп/сек.<br />
* Память: [[ОЗУ]] — 128 Кб с возможностью наращивания до 256 Кб, [[ПЗУ]] — 2&nbsp;Kб<br />
* Устройство вывода: телевизор; работа в графическом режиме 384&nbsp;&times;&nbsp;256 точек; 25 строк по 64 символа при использовании стандарного шрифта; цветность: монохромный, 4, 16 цветов<br />
* Внешняя память: бытовой магнитофон, ROM-диск 64 Кб, DD дисковод<br />
* Клавиатура: 64 клавиши в матрице 8*8 плюс 3 отдельных или промышленная клавиатура MS7007<br />
<br />
== Программное обеспечение ==<br />
* Монитор 1/2/3<br />
* Операционные системы: ORDOS 2.40/4.03, [[CP/M]] 2.2, SPDOS, [http://orion-128.narod.ru DSDOS]<br />
* Написанные любителями и адаптированные игры<br />
<br />
== См. также ==<br />
* [[Орион-Про]]<br />
<br />
== Ссылки ==<br />
* [http://emu80.org/ Эмулятор Ориона Виктора Пыхонина]<br />
* [https://github.com/serge-404/OriZEmu Эмулятор Ориона Orion/Z от Error404]<br />
* [http://rdk.regionsv.ru/orion128-soft.htm Софт Орион-128, Орион Экспресс 512, Орион ПРО, прошивки, системные программы, описание]<br />
* [http://www.computer-museum.ru/histussr/orion.htm История компьютера «Орион» на сайте Виртуального компьютерного музея]<br />
* <s>[http://orion-z.hoter.ru/ Исполняемые файлы и исходные тексты эмулятора Орион/Z (Орион + Z80), вспомогательных утилит, архивы игр и программ Ориона]</s><br />
* <s>[http://gri.irk.ru/orion/ Сайт эмулятора Ориона на процессоре КР580ВМ80 (i8080)]</s><br />
* <s>[http://orion128.nikom.biz/ Информация о истории и развитии Ориона (документация, программы Ориона)]</s><br />
<br />
== Документация ==<br />
* [[:Категория:Орион-128/Публикации|Публикации в журнале Радио]]<br />
* [[Орион-128/Техническая информация|Техническая информация]]<br />
* [[Орион-128/Радио 12-92/Контроллер НГМД|Контроллер дисковода]] (Вариант 1, SP-DOS)<br />
* [[Орион-128/Радио 05,06-93/СР/М-80. Контроллер дисковода|Контроллер дисковода]] (Вариант 2, CP/M)<br />
* {{djvu}}{{статья<br />
|заглавие = Операционная система СР/М-80 для ПРК «Орион-128»<br />
|издание = журнал «Радиолюбитель»<br />
|номер = 11, 12, 1, 2, 3<br />
|год = 1992, 1993<br />
|ссылка = https://emuverse.ru/downloads/computers/Orion-128/docs/Orion-128_CPM.djvu<br />
}}<br />
* {{djvu}}{{статья<br />
|заглавие = «Орион-128»: контроллер дисковода<br />
|издание = журнал «Радиолюбитель»<br />
|номер = 5-7<br />
|год = 1993<br />
|ссылка = https://emuverse.ru/downloads/computers/Orion-128/docs/Orion-128_FDC.djvu<br />
}}<br />
* [[Орион-128/ZCard-II|Установка Z80]] («Ленинградский вариант», Z80Card-II, ставший стандартом де-факто)<br />
* [[Орион-128/Радио 04,06-96/Z80 CARD|Установка Z80]] («Орион-Сервис», «Московский», Z80Card)<br />
<br />
=== Схемы ===<br />
* {{rar}} [https://emuverse.ru/downloads/computers/Orion-Pro/docs/OrionPro-PCAD.rar Комплект схем]. Авторские схемы в формате PCAD 4.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/Scheme_corrected.png Схема 1]. Оригинал из журнала, с исправлениями.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/Orion_scheme.png Схема 2]. Авторский доработанный вариант.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/ROMDISK_scheme.png ROM-DISK].<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/Z80-1.png Установка Z80]. Авторский вариант, плата в панель ВМ80.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/Z80CardII.png Z80Card-II]. «Ленинградский вариант» Чистякова.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/KTR.png Контроллер дисковода]. Авторский вариант.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/FDC-Altair-Scheme.png Контроллер дисковода]. Вариант «Altair» Чистякова.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/512VI1_orion.GIF RTC]. Часы реального времени. Вариант [http://orion-z.hoter.ru Error404].<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/IDE-RTC.gif IDE+RTC]. «Смоленский» вариант.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/COM-AY.gif COM+AY]. Установка RS-232 и AY-8910.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/scr400x256-AY8910.jpg 400х256+AY]. Отключение 400х256 и AY-8910.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/11MHz-scr480x256-Turbo3,9.jpg Турбо+480х256]. Два турбо-режима и расширенный экран.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/turbo3,5-kempston-RAM_protect.jpg Турбо+Kempston+RAM]. Турбо-режим, джойстик, полное использование RAM.<br />
<br />
== Файлы ==<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Orion-128/firmware/Orion128_M1.rom Монитор-1]<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Orion-128/firmware/Orion128_M2.rom Монитор-2]<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Orion-128/firmware/Orion128_M31.rom Монитор-3]<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Orion-128/firmware/Orion128_RomDisk1.rom Образ ROM-диска 1]<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Orion-128/firmware/Orion128_RomDisk4.rom Образ ROM-диска 2]<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Orion-128/firmware/RAM_TEST.BIN RAM-TEST]<br />
<br />
[[Категория:Орион-128|*]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%9E%D1%80%D0%B8%D0%BE%D0%BD-128&diff=3727Орион-1282023-12-26T17:10:39Z<p>Panther: /* Ссылки */ +1</p>
<hr />
<div>{{Википедия}}<br />
<br />
'''«Орион-128»''' — любительский 8-разрядный [[персональный компьютер]]. Разработан радиолюбителями из подмосковья — Вячеславом Сафроновым, Владиславом Сугоняко, Константином Коненковым. Схема и описание компьютера были опубликованы в [[Радио (журнал)|журнале «Радио»]] № 1/[[1990]], другие материалы по теме публиковались в этом журнале до [[1996]] года.<br />
<br />
Технические характеристики:<br />
* Процессор: [[КР580ВМ80А]] на частоте 2,5 МГц, быстродействие 625 тысяч оп/сек.<br />
* Память: [[ОЗУ]] — 128 Кб с возможностью наращивания до 256 Кб, [[ПЗУ]] — 2&nbsp;Kб<br />
* Устройство вывода: телевизор; работа в графическом режиме 384&nbsp;&times;&nbsp;256 точек; 25 строк по 64 символа при использовании стандарного шрифта; цветность: монохромный, 4, 16 цветов<br />
* Внешняя память: бытовой магнитофон, ROM-диск 64 Кб, DD дисковод<br />
* Клавиатура: 64 клавиши в матрице 8*8 плюс 3 отдельных или промышленная клавиатура MS7007<br />
<br />
== Программное обеспечение ==<br />
* Монитор 1/2/3<br />
* Операционные системы: ORDOS 2.40/4.03, [[CP/M]] 2.2, SPDOS, [http://orion-128.narod.ru DSDOS]<br />
* Написанные любителями и адаптированные игры<br />
<br />
== См. также ==<br />
* [[Орион-Про]]<br />
<br />
== Ссылки ==<br />
* [http://emu80.org/ Эмулятор Ориона]<br />
* [http://rdk.regionsv.ru/orion128-soft.htm Софт Орион-128, Орион Экспресс 512, Орион ПРО, прошивки, системные программы, описание]<br />
* [http://www.computer-museum.ru/histussr/orion.htm История компьютера «Орион» на сайте Виртуального компьютерного музея]<br />
* <s>[http://orion-z.hoter.ru/ Исполняемые файлы и исходные тексты эмулятора Орион/Z (Орион + Z80), вспомогательных утилит, архивы игр и программ Ориона]</s><br />
* <s>[http://gri.irk.ru/orion/ Сайт эмулятора Ориона на процессоре КР580ВМ80 (i8080)]</s><br />
* <s>[http://orion128.nikom.biz/ Информация о истории и развитии Ориона (документация, программы Ориона)]</s><br />
<br />
== Документация ==<br />
* [[:Категория:Орион-128/Публикации|Публикации в журнале Радио]]<br />
* [[Орион-128/Техническая информация|Техническая информация]]<br />
* [[Орион-128/Радио 12-92/Контроллер НГМД|Контроллер дисковода]] (Вариант 1, SP-DOS)<br />
* [[Орион-128/Радио 05,06-93/СР/М-80. Контроллер дисковода|Контроллер дисковода]] (Вариант 2, CP/M)<br />
* {{djvu}}{{статья<br />
|заглавие = Операционная система СР/М-80 для ПРК «Орион-128»<br />
|издание = журнал «Радиолюбитель»<br />
|номер = 11, 12, 1, 2, 3<br />
|год = 1992, 1993<br />
|ссылка = https://emuverse.ru/downloads/computers/Orion-128/docs/Orion-128_CPM.djvu<br />
}}<br />
* {{djvu}}{{статья<br />
|заглавие = «Орион-128»: контроллер дисковода<br />
|издание = журнал «Радиолюбитель»<br />
|номер = 5-7<br />
|год = 1993<br />
|ссылка = https://emuverse.ru/downloads/computers/Orion-128/docs/Orion-128_FDC.djvu<br />
}}<br />
* [[Орион-128/ZCard-II|Установка Z80]] («Ленинградский вариант», Z80Card-II, ставший стандартом де-факто)<br />
* [[Орион-128/Радио 04,06-96/Z80 CARD|Установка Z80]] («Орион-Сервис», «Московский», Z80Card)<br />
<br />
=== Схемы ===<br />
* {{rar}} [https://emuverse.ru/downloads/computers/Orion-Pro/docs/OrionPro-PCAD.rar Комплект схем]. Авторские схемы в формате PCAD 4.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/Scheme_corrected.png Схема 1]. Оригинал из журнала, с исправлениями.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/Orion_scheme.png Схема 2]. Авторский доработанный вариант.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/ROMDISK_scheme.png ROM-DISK].<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/Z80-1.png Установка Z80]. Авторский вариант, плата в панель ВМ80.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/Z80CardII.png Z80Card-II]. «Ленинградский вариант» Чистякова.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/KTR.png Контроллер дисковода]. Авторский вариант.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/FDC-Altair-Scheme.png Контроллер дисковода]. Вариант «Altair» Чистякова.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/512VI1_orion.GIF RTC]. Часы реального времени. Вариант [http://orion-z.hoter.ru Error404].<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/IDE-RTC.gif IDE+RTC]. «Смоленский» вариант.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/COM-AY.gif COM+AY]. Установка RS-232 и AY-8910.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/scr400x256-AY8910.jpg 400х256+AY]. Отключение 400х256 и AY-8910.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/11MHz-scr480x256-Turbo3,9.jpg Турбо+480х256]. Два турбо-режима и расширенный экран.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/turbo3,5-kempston-RAM_protect.jpg Турбо+Kempston+RAM]. Турбо-режим, джойстик, полное использование RAM.<br />
<br />
== Файлы ==<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Orion-128/firmware/Orion128_M1.rom Монитор-1]<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Orion-128/firmware/Orion128_M2.rom Монитор-2]<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Orion-128/firmware/Orion128_M31.rom Монитор-3]<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Orion-128/firmware/Orion128_RomDisk1.rom Образ ROM-диска 1]<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Orion-128/firmware/Orion128_RomDisk4.rom Образ ROM-диска 2]<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Orion-128/firmware/RAM_TEST.BIN RAM-TEST]<br />
<br />
[[Категория:Орион-128|*]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&diff=3716Заглавная страница2023-11-10T16:47:53Z<p>Panther: </p>
<hr />
<div><center><br />
{{Раздел заглавной страницы | x=0 | y=0 | Содержание=<br />
<div style="font-size:162%; border:0; margin:0; padding:.1em; color:#000">Добро пожаловать в [[Emuverse:Описание|Emuverse]]</div><br />
техническую энциклопедию, в которой собирается информация о любых электронных устройствах, <br>поддающихся эмуляции на современном компьютере. <br />
<div style="top:0.2em; font-size:95%"> Сейчас в Emuverse '''[[Special:Statistics|{{NUMBEROFARTICLES}}]]''' {{plural:{{NUMBEROFARTICLES}}|статья|статьи|статей}}.</div><br />
<div style="color: red; margin-bottom: 10px;">Внимание! В связи с наплывом спамеров регистрация новых пользователей пока заблокирована. Если вы хотите редактировать статьи, пожалуйста, свяжитесь со [[User:Panther|мной]].</div><br />
}}<br />
</center><br />
{| width="100%"<br />
| width="75%" valign=top | {{Раздел заглавной страницы | x=1 | y=1 | Содержание=<br />
<span style="font-weight:bold">Основные категории</span><br />
<ncl style=compact maxdepth=2 headings=bullet headstart=2 showcats=1 showarts=0>Категория:Всё</ncl><br />
}}<br />
| &nbsp;&nbsp;<br />
| width="25%" valign=top | {{Раздел заглавной страницы | x=1 | y=1 | Содержание=<br />
<span style="font-weight:bold">Новости</span><br />
{{/Новости}}<br />
}}<br />
|}<br />
<div style="background-color:#E0E0E0;font-size:1px;height:8px;border:1px solid #AAAAAA;-moz-border-radius-topright:0.5em;-moz-border-radius-topleft:0.5em;"></div><br />
<div style="border:1px solid #AAAAAA;border-top:0px solid white;padding:5px 5px 10px 5px;margin-bottom:3ex;"><br />
<span style="font-weight:bold">Правовая информация</span><br />
<br />
В силу того, что основная часть доступной технической документации защищена авторскими правами и не может распространяться под свободными лицензиями, в энциклопедии Emuverse принята следующая лицензионная политика:<br />
* Все материалы должны содержать указание на источник и правовой статус в виде специального шаблона в начале страницы;<br />
* Материалы, взятые из источников со свободными лицензиями, распространяются на условиях исходной лицензии;<br />
* Материалы, созданные специально для Emuverse, распространяются под лицензией [http://creativecommons.org/licenses/by-sa/3.0/ CC-BY-SA 3.0];<br />
* Материалы, защищённые авторскими правами, загружаются в Emuverse на условиях добросовестного использования для образовательных некоммерческих целей, то есть не могут распространяться далее вопреки этим условиям;<br />
* Защищённое авторскими правами программное обеспечение может загружаться только в объёме, необходимом для создания и тестирования эмуляторов.<br />
<br />
<!--div style="font-weight:bold; margin-top:20px;">Как стать редактором</div><br />
<br />
В связи с засильем спамеров, редактирование закрыто для участников с неподтвержденными email. Если у вас возникли проблемы, свяжитесь со [[User:Panther|мной]].<br />
--><br />
</div></div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%A1%D0%9C1810&diff=3575СМ18102023-09-18T18:55:17Z<p>Panther: links</p>
<hr />
<div>{{Emuverse}}<br />
Ряд «Систем Малых» ЭВМ построенных на Процессорах К1810ВМ86 (аналог Intel 8086) и системной шине И41 (аналог Multibus).<br />
<br />
'''СМ1810.13 (Нивка)''' — IBM XT совместимая машина<br />
Исполнение - Тумба 4.115.056 (Tower)<br />
Платы: <br />
СМ1810/002<br />
СМ1810.2204.03 1/2N МЦП-16<br />
СМ1810.2204.03 2/2N МЦП 16<br />
Контроллер НМД и НГМД СМ 1810.5126.M1<br />
Видеоконтроллер цветной СМ 1810.7006 (аналог CGA) <br />
<br />
'''СМ1810.21''' Для работы под Большой операционной системой БОС1810 (аналог Intel RMX-86)<br />
Исполнение - Тумба СМ1810.0103<br />
Платы:<br />
1 слот - СМ1810.2005 Модуль системного контроля<br />
2 слот - СМ1810.2204.02 1/2N МЦП-16<br />
3 слот - СМ1810.2204.02 2/2N МЦП 16<br />
4 слот - СМ1800.2202.09 1/2N МЦП-1<br />
5 слот - СМ1800.2202.09 2/2N МЦП-1<br />
6 слот - СМ1810.5125 1/2N Контроллер ГМД<br />
7 слот - СМ1810.5125 2/2N Контроллер ГМД<br />
8 слот - СМ1810.4106 Модуль сопряжения с ИРПС 4 канала<br />
9 слот - пустой<br />
10 слот Блок питания В253.01<br />
<br />
'''СМ1810.42''' Для работы под Большой операционной системой БОС1810 (аналог Intel RMX-86)<br />
Исполнение - Стойка 4.115.048-8<br />
Платы: <br />
Н3 слот - пустой<br />
Н2 слот - пустой<br />
Н1 слот - пустой<br />
Н0 слот - СМ1810.3516.03 1/2N (ОЗУ)<br />
У слот - СМ1810.3516.03 2/2N (Контролёр)<br />
О1 слот - СМ1810.2010 Модуль системного контроля<br />
О2 слот - СМ1810.2204.06 1/2N МЦП-16<br />
О3 слот - СМ1810.2204.06 2/2N МЦП 16<br />
О4 слот - СМ1810.4106 Модуль сопряжения с ИРПС 4 канала<br />
О5 слот - пустой <br />
О6 слот - СМ1810.5126 1/2N Контроллер НМД и НГМД<br />
О7 слот - СМ1810.5126 2/2N Контроллер НМД и НГМД<br />
О8 слот - пустой<br />
О9 слот - пустой<br />
О10 слот - пустой<br />
О11 слот Блок питания В253.01<br />
О12 слот Блок питания В253.03<br />
<br />
== Документация ==<br />
* {{pdf}} {{книга<br />
|автор = <br />
|заглавие = Средства вычислительной техники. Ряд микроЭВМ: СМ 1803, СМ 1804, СМ 1810, СМ 1814<br />
|место = М.<br />
|издательство = ЦНИИТЭИприборостроения, 1988.<br />
|том = <br />
|isbn = <br />
|ссылка = https://emuverse.ru/downloads/computers/SM1810/docs/sm18xx.pdf<br />
}}<br />
* {{djvu}} {{книга<br />
|автор = <br />
|заглавие = Операционная система МДОС 1810<br />
|место = М.<br />
|издательство = Эврика.<br />
|том = <br />
|isbn = <br />
|ссылка = https://emuverse.ru/downloads/computers/SM1810/docs/Operacionnaya_Sistema_MDOS_1810.djvu<br />
}}<br />
== Файлы ==<br />
* Источник: [https://emuverse.ru]<br />
** {{rom}} [https://emuverse.ru/downloads/computers/SM1810/firmware/SM1810.13.zip СМ1810.13(Нивка) ROM]<br />
** {{rom}} [https://emuverse.ru/downloads/computers/SM1810/firmware/SM1810.42.zip СМ1810.42 ROM]<br />
** {{rom}} [https://emuverse.ru/downloads/computers/SM1810/firmware/SM1810.5126-fdd-hdd.zip ПЗУ контроллера 5126 НГМД-НМЖД]<br />
[[Категория:Отечественные компьютеры]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_%D0%BF%D1%83%D0%BB%D1%8C%D1%82%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_%D1%80%D0%B5%D0%B6%D0%B8%D0%BC%D0%B0_%D0%94%D0%92%D0%9A&diff=3574Команды пультового режима ДВК2023-09-18T18:54:02Z<p>Panther: links</p>
<hr />
<div>{{Emuverse}}<br />
<br />
== ПЗУ 134 ==<br />
* <tt>/</tt> открыть текущую ячейку.<br />
** <tt>aaaaaaaa/</tt> открыть ячейку с адресом aaaaaaaa (aaaaaaaa — 8 восьмеричных цифр).<br />
* <tt>_</tt> открыть ячейку с адресом, равным адресу текущей ячейки+2+содержимое ячейки.<br />
** <tt>oooooo_</tt> занести oooooo в текущую ячейку и открыть ячейку с адресом, равным адресу текущей ячейки+2+oooooo<br />
* <tt>^</tt> открыть предыдущую ячейку.<br />
* <tt>@</tt> открыть ячейку с адресом, равным содержимому текущей ячейки.<br />
** <tt>aaaaaa@</tt> занести aaaaaa в текущую ячейку и перейти на адрес aaaaaa (aaaaaa — 6 восьмеричных цифр).<br />
* <tt>dddddd^</tt> занести dddddd в текущую ячейку и открыть предыдущую ячейку.<br />
* <tt>LF</tt> (Клавиша ПС, Ctrl+J) открыть следующую ячейку.<br />
** <tt>ddddddLF</tt> занести dddddd в текущую ячейку и открыть следующую ячейку.<br />
* <tt>CR</tt> (ввод) завершает работу команд модификации ячеек и выводит приглашение.<br />
** <tt>ddddddCR</tt> заносит dddddd в текущую ячейку и выходит на приглашение.<br />
* <tt>&gt;</tt> перейти по смещению команды ветвления в текущей ячейке.<br />
* <tt>bbbbbb&gt;</tt> занести код команды ветвления bbbbbb в текущую ячейку и перейти по смещению команды ветвления. <br />
** Возможна проблема со смещением в командах SOB и MARK, так как они имеют меньше 6 разрядов в поле смещения, вместо 8 у других команд ветвления.<br />
* <tt>Rn/</tt> открыть регистр Rn, где n 0..7.<br />
** После открытия команды <tt>^ LF</tt> будут работать с регистрами процессора таким же образом, как с ячейками, перебирая их вверх-вниз, а @ откроет ячейку, на которую указывает текущий регистр).<br />
* <tt>RS/</tt> открыть регистр состояния процессора.<br />
* <tt>;</tt> отменить ввод числа.<br />
* <tt>BS</tt> (забой) стереть последний введённый символ, однако при записи в ячейки или регистры учитываются только последние 6 цифр числа.<br />
* <tt>G</tt> запустить программу с адреса, находящегося в R7.<br />
** <tt>aaaaaaaaG</tt> запустить программу с указанного адреса.<br />
*** Адрес не может находиться в расширенной памяти, так как команда запуска программы делает сброс всем устройствам, в том числе и диспетчеру памяти. Поэтому допустимые адреса 0..157776 и 17760000..17777776, последние подставляются в адресное пространство вместо 160000..177776.<br />
* <tt>P</tt> продолжить остановленную программу по кнопке Пульт, либо инструкции halt. Если кнопка пульт нажата, то выполняется одна инструкция и управление возвращается в пульт.<br />
* <tt>M</tt> получить сообщение о причине выхода в пульт.<br />
* <tt>B</tt> вызвать диспетчер загрузчиков, далее после $ вводится имя устройства и номер привода.<br />
* <tt>Tn</tt> запустить тест с номером n, где 0 запускает тесты 1,2,3,6 подряд и заполняет всю память нулями, при этом кнопка пульт должна быть отжата. Тест 4 тестирует память, тест 5 — принтер, тесты 1,2,3,6 — контрольную сумму пзу, пультовое озу, частично процессор.<br />
<br />
== ПЗУ 377 ==<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/DVK/docs/DVK_pult_377.djvu Программа пультового (HALT) режима]<br />
[[Категория:ДВК]]</div>Pantherhttps://emuverse.ru/w/index.php?title=PLx45D.5&diff=3573PLx45D.52023-09-18T18:50:48Z<p>Panther: links</p>
<hr />
<div>{{Emuverse}}<br />
'''PLx45D.5''' — 5" дисковод. <br />
<br />
== Документация ==<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/@FDD/PLx45D.5_TO.djvu Техническое описание]<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/@FDD/PLx45D.5_E3.djvu Альбом схем]<br />
<br />
[[Категория:Дисководы]]</div>Pantherhttps://emuverse.ru/w/index.php?title=MF_54/58&diff=3572MF 54/582023-09-18T18:50:34Z<p>Panther: links</p>
<hr />
<div>{{Emuverse}}<br />
'''МF 54D, МF 54S, МF 58D, МF 58S''' — 5" дисковод. <br />
<br />
== Документация ==<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/@FDD/MF_58D_PS.djvu Паспорт]<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/@FDD/MF_58D_TO.djvu Техническое описание]<br />
<br />
[[Категория:Дисководы]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%B8%D0%BA%D0%B0-60&diff=3571Электроника-602023-09-18T18:50:01Z<p>Panther: links</p>
<hr />
<div>{{Emuverse}}<br />
'''«Электроника-60»''' — серия микроЭВМ.<br />
<br />
== Материалы ==<br />
* [[w:Электроника-60|Статья в Википедии]]<br />
* [[QUASIC-2|Система QUASIC-2 для программирования на микро-ЭВМ]]<br />
<br />
== Ссылки ==<br />
* [http://www.tis.kz/forum/topic.php?forum=1&topic=12 Коллекция программ]<br />
<br />
== Документация ==<br />
* {{djvu|Электроника-60М. Книга 2. |Техническое описание 2.791.004-03 ТО|computers/E-60/docs/E60_Book_2.djvu}}<br />
* {{djvu|Электроника-60 15 ВМ-16. Книга 4. |Основной тест команд. Программное обеспечение 2.791.004 ПО1|computers/E-60/docs/E60_Book_4.djvu}}<br />
* {{djvu| Центральный процессор М1. Устройство управления В1.|Альбом схем|computers/E-60/docs/E60_sch.djvu}}<br />
* {{djvu| Устройство управления В1.|Схема электрическая принципиальная|computers/E-60/docs/B1-sch.djvu}}<br />
* {{djvu| Центральный процессор М2.|Альбом схем|computers/E-60/docs/M2_sch.djvu}}<br />
* {{djvu| Центральный процессор М2.|Техническое описание и инструкция по эксплуатации. Часть 1|computers/E-60/docs/M2_TO&IE_Part_1.djvu}}<br />
* {{djvu| Электроника-60. 15 ВМ-16. Книга 11. | Устройство управления В21. Техническое описание и инструкция по эксплуатации|computers/E-60/docs/E60_Book_11_B21-TO&E3.djvu}}<br />
* {{djvu| Запоминающее устройство П3.|Техническое описание и инструкция по эксплуатации|computers/E-60/docs/P3_TO&IE.djvu}}<br />
* {{djvu| Источник питания МС 92301.1.|Паспорт|computers/E-60/docs/MC92301.djvu}}<br />
* {{djvu| Устройство управления В3.|Техническое описание и инструкция по эксплуатации.|computers/E-60/docs/V3_TO_IE.djvu}}<br />
* {{www}} [http://retropc.org/index.html?action=w_razdela&id_razdel=31#c149 Документация на сайте retropc.org]<br />
* {{www}} [http://www.tis.kz/forum/topic.php?forum=28&topic=8&postid=1473785230#1473785230 Комплект документации на Электроника-100]<br />
<br />
== Литература ==<br />
* {{книга<br />
|автор = И. Л. Талов, А. Н. Соловьев, В. Д. Борисенков.<br />
|часть = <br />
|заглавие = Книга 1. Семейство ЭВМ «Электроника 60»<br />
|оригинал = <br />
|ссылка = https://emuverse.ru/downloads/computers/E-60/docs/Micro-EVM_Book_1.djvu<br />
|ответственный = Под ред. Л. Н. Преснухина<br />
|издание = МикроЭВМ: В 8 кн.: Практ. пособие.<br />
|место = М<br />
|издательство = Высшая школа<br />
|год = 1988<br />
|том = <br />
|страницы = <br />
|страниц = <br />
|серия = <br />
|isbn = <br />
|тираж =<br />
}}<br />
* {{книга<br />
|автор = И. В. Захаров.<br />
|заглавие = Техническое обслуживание и эксплуатация МикроЭВМ «Электроника-60М»<br />
|оригинал = <br />
|ссылка = https://emuverse.ru/downloads/computers/E-60/docs/toe60m.djvu<br />
|издание = <br />
|место = М<br />
|издательство = «Машиностроение»<br />
|год = 1989<br />
|том = <br />
|страницы = <br />
|страниц = <br />
|серия = <br />
|isbn = 5-217-00385-5<br />
|тираж = <br />
}}<br />
<br />
* {{книга<br />
|автор = С. Т. Хвощ, Н. Н. Варлинский, Е. А. Попов.<br />
|часть = Глава 17.1: МикроЭВМ серии «Электроника-60М»<br />
|заглавие = Микропроцессоры и МикроЭВМ в системах автоматического управления: Справочник<br />
|оригинал = <br />
|ссылка = <br />
|ответственный = Под общ. ред. С. Т. Хвоща<br />
|издание = <br />
|место = Л<br />
|издательство = Машиностроение. Ленингр. отд-ние<br />
|год = 1987<br />
|том = <br />
|страницы = 512—522<br />
|страниц = <br />
|серия = <br />
|isbn = <br />
|тираж = <br />
}}<br />
<br />
[[Категория:Электроника-60|*]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%B8%D0%BA%D0%B0_%D0%A23-29&diff=3568Электроника Т3-292023-09-18T18:49:34Z<p>Panther: links</p>
<hr />
<div>{{Emuverse}}<br />
<br />
'''«Электроника Т3-29»''' (15ВУМС-32-001) — семейство советских вычислительных управляющих микросистем (ВУМС) и профессиональных персональных ЭВМ<br />
<br />
== Материалы ==<br />
* [[w:Электроника Т3-29|Статья в Википедии]]<br />
<br />
== Документация ==<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/T3-29/docs/T3-29_Technical_Rererence.djvu Микросистема Вычислительная Управляющая 15 ВУМС-32-001. Техническое описание]<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/T3-29/docs/T3-29_Schematics.djvu Микросистема Вычислительная Управляющая 15 ВУМС-32-001. Схемы электрические принципиальные]<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/T3-29/docs/T3-29_ROM.djvu Устройство постоянное запоминающее ПЗУ-8-001. Паспорт]<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/T3-29/docs/T3-29_Interfaces.djvu Блок интерфейсных плат 15 КВ-10-002. Паспорт]<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/T3-29/docs/T3-29_Input-Output_Devices.djvu Устройства ввода-вывода УВВ.МД-2560 50. Паспорт]<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/T3-29/docs/T3-29_Users_Manual.djvu Вычислительная Управляющая Микросистема 15ВУМС-32-001. Инструкция по эксплуатации]<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/T3-29/docs/T3-29_Forms_For_Programs.djvu Вычислительная Управляющая Микросистема 15ВУМС-32-001. Формы для программ]<br />
<br />
== Файлы ==<br />
* {{rom}} [https://emuverse.ru/downloads/computers/T3-29/firmware/T3-29-RF2.zip Прошивка ПЗУ К573РФ2 (BIOS)].<br />
* {{rom}} [https://emuverse.ru/downloads/computers/T3-29/firmware/T3-29-RT4.zip Прошивка ПЗУ К556РТ4 платы процессора (ПЗУ микрокоманд)].<br />
<br />
[[Категория:Электроника Т3-29|*]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%A1%D0%9C_5508&diff=3565СМ 55082023-09-18T18:46:48Z<p>Panther: links</p>
<hr />
<div>{{Emuverse}}<br />
'''СМ 5508''' - накопитель на жестких дисках.<br />
<br />
== Документация ==<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/@Other/SM5508.djvu СМ 5508. паспорт] <small>([http://www.zx.pk.ru/showpost.php?p=240602&postcount=95 источник])</small><br />
<br />
[[Категория:Жёсткие диски]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%95%D0%A1_5313&diff=3564ЕС 53132023-09-18T18:45:27Z<p>Panther: links</p>
<hr />
<div>{{Emuverse}}<br />
'''ЕС 5313''' - накопитель на жестких дисках.<br />
<br />
== Документация ==<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/@Other/EC5313.djvu ЕС 5313. паспорт] <small>([http://www.zx.pk.ru/showpost.php?p=233282&postcount=87 источник])</small><br />
<br />
[[Категория:Жёсткие диски]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%A1%D0%9C_5640&diff=3563СМ 56402023-09-18T18:45:17Z<p>Panther: links</p>
<hr />
<div>{{Emuverse}}<br />
'''Robotron СМ 5640''' — 5" дисковод. <br />
* Сторон: 1;<br />
* Дорожек: 80;<br />
* Плотность записи: одинарная (FM), двойная (MFM);<br />
* Паспортная ёмкость носителя: до 0,5 Мб;<br />
* Скорость вращения: 300 об/мин.;<br />
* Высота: 2х (86 мм).<br />
<br />
== Документация ==<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/@Other/SM5640.djvu Техническая документация]<br />
<br />
[[Категория:Дисководы]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%9C%D0%A1_5301&diff=3562МС 53012023-09-18T18:45:03Z<p>Panther: links</p>
<hr />
<div>{{Emuverse}}<br />
'''МС 5301''' — 5" дисковод. <br />
* Сторон: 2;<br />
* Дорожек: 40;<br />
* Плотность записи: двойная (до 216 бит/мм);<br />
* Паспортная ёмкость носителя: до 0,5 Мб;<br />
* Скорость вращения: 300 об/мин.;<br />
* Высота: 2х (100 мм).<br />
<br />
== Документация ==<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/@Other/MS5301.rar Руководство, паспорт, схема]. <small>([http://www.zx.pk.ru/showthread.php?p=227313#post227313 источник])</small><br />
<br />
[[Категория:Дисководы]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%9C%D0%A1_6106&diff=3561МС 61062023-09-18T18:44:45Z<p>Panther: links</p>
<hr />
<div>{{Emuverse}}<br />
'''Электроника МС 6106''' — цветной монитор. <br />
<br />
== Разъём РП15 ==<br />
# +12 В<br />
# ССИ<br />
# Контроль<br />
# Общий клавиатуры<br />
# КСИ<br />
# Земля красного<br />
# Земля зеленого<br />
# Земля синего<br />
# Вход клавиатуры<br />
# Выход клавиатуры<br />
# Контроль<br />
#<br />
# Красный<br />
# Зеленый<br />
# Синий<br />
<br />
== Документация ==<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/@Other/ms6106.djvu Электроника МС 6106. Альбом схем. Версия 1] ([http://uknc.narod.ru/ источник])<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/@Other/ms6106sch.zip Электроника МС 6106. Альбом схем. Версия 2] ([http://zx.pk.ru/showpost.php?p=373814&postcount=272 источник])<br />
<br />
[[Категория:Мониторы]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%B8%D0%BA%D0%B0_32_%D0%92%D0%A2%D0%A6&diff=3560Электроника 32 ВТЦ2023-09-18T18:44:05Z<p>Panther: links</p>
<hr />
<div>{{Emuverse}}<br />
[[Изображение:Elektronika 32 VTC.jpg|right|thumb|300px|Фото alexeenko с форума zx.pk.ru]]<br />
'''Электроника 32 ВТЦ''' — цветной монитор. <br />
<br />
== Разъёмы ==<br />
=== 5 pin (СШ-5, DIN 5) ===<br />
# СС (синхросмесь, отрицательная полярность. Можно подать Ч/Б видеосигнал);<br />
# Ground;<br />
# R;<br />
# B;<br />
# G.<br />
<br />
=== 7 pin (СШ-7, DIN 7) ===<br />
# B;<br />
# Ground;<br />
# R;<br />
# КСИ (положительная полярность);<br />
# ССИ (положительная полярность);<br />
# G;<br />
# Y (яркость).<br />
<br />
== Документация ([http://www.zx.pk.ru/showthread.php?p=203223 источник])==<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/@Other/electronica_32vtc_201.djvu Электроника 32 ВТЦ-201 (МС 6113). Принципиальная схема];<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/@Other/Electronica_32vtc_202_1.djvu Электроника 32 ВТЦ-202 (МС 6113.02). Принципиальная схема] Вариант 1. (без последнего листа);<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/@Other/Electronica_32vtc_202_2.djvu Электроника 32 ВТЦ-202. Принципиальная схема] Вариант 2;<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/@Other/Electronica_32vtc_202_3.djvu Электроника 32 ВТЦ-202. Принципиальная схема] Вариант 3.<br />
* {{www}} [http://retropc.org/index.html?action=w_razdela&id_razdel=31#c70 Документация на сайте retropc.org]<br />
<br />
[[Категория:Мониторы]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%B8%D0%BA%D0%B0-85&diff=3559Электроника-852023-09-18T18:43:11Z<p>Panther: links</p>
<hr />
<div>{{Emuverse}}<br />
<br />
{{Карточка компьютера<br />
| Photo = <br />
| Type = Персональный компьютер<br />
| Released = 1985<br />
| Discontinued = <br />
| Processor = [[МК1]]<br />
| Chipset = <br />
| Storage = НГМД 2*5,25"(НГМД&nbsp;6121, МС&nbsp;5301, МС&nbsp;5305, либо МС&nbsp;5311) и НЖМД MFM (МС&nbsp;5401 или МС&nbsp;5405)<br />
| Memory = 512 Кбайт<br />
| OS = [[ПРОС]], [[ФОДОС]], [[ДЕМОС]], [[RT-11]], UNIX-подобные<br />
}}<br />
<br />
'''«Электроника МС&nbsp;0585»''' — советский компьютер, клон DEC Professional 3xx (DEC Pro-350). Разработан в г. Воронеж на заводе «Процессор», и выпускался серийно с 1985 года. Устроство ввода — клавиатура [[МС 7004]]. Устроства вывода — монохромный [[МС6105]].03 или цветной [[МС6106]] мониторы.<br />
<br />
== Состав оборудования ==<br />
* Процессор - КН1811ВМ1, ВУ1, ВУ2, ВУ3 в составе сборки МК1;<br />
* ПЗУ — программа диагностики c графическим отображением, загрузчик ОС;<br />
* ОЗУ 512 Кбайт;<br />
* Контроллеры:<br />
** Видеоконтроллер: 32 Кбайт памяти; на основе БМК КМ1527ХМ1-0715, КМ1527ХМ1-0716, КМ1527ХМ1-0717;<br />
** Расширитель памяти видеоконтроллера. Увеличивает общий объём видеопамяти до 96 Кбайт. Позволяет выводить изображение в восьми цветах (или в восьми оттенках серого при использовании ч/б монитора);<br />
** Накопителя на гибких магнитных дисках (КНГМД). Базовый формат: 1 сторона/80 дорожек; 0-я дорожка сдвинута на одну к центру (формат DZ). Замена микропрограммы позволяет работать с двумя сторонами дискеты и форматировать ее.<br />
** Жёсткого диска (КЖД) на основе [[КМ1818ВМ01]] с подлючением одного накопителя;<br />
** 2 5" НГМД Электроника НГМД 6121, [[МС 5301]], МС 5305, МС 5311, TEAC (доработанные);<br />
** НЖМД Электроника МС 5401 (5 Мбайт), МС 5405 (20 Мбайт), Seagate ST-225.<br />
** Блок питания МС 9005.<br />
** Дополнительно: комплект совместимости с IBM PC «Электроника МС 1702» — модуль на основе [[КР1810ВМ86]], позволявший запускать программы в среде MS-DOS 3.30 с учетом ограничений КНГМД.<br />
<br />
== Документация ==<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/E-85/MS0585-Sch.djvu НС-1. Принципиальная схема.] (системная плата)<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/E-85/NS1_TO.djvu НС-1. ТО.]<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/E-85/NP2.djvu НП-2. ТО.] (модуль памяти)<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/E-85/KNMD-Sch.djvu КНМД. Принципиальная схема.]<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/E-85/KNMD-TO.djvu КНМД. ТО.]<br />
* {{djvu}} Источник питания МС 9002. [http://emuverse.ru/downloads/computers/E-85/MC9002.djvu Техническое описание]<br />
* {{djvu}} Источник питания МС 9005. [https://emuverse.ru/downloads/computers/E-85/MC9005.djvu Паспорт], [https://emuverse.ru/downloads/computers/E-85/MC9005_schematics.png отдельно схема]<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/DVK/docs/ms7004.djvu Блок клавиатуры «МС 7004»] (техпаспорт)<br />
* [https://emuverse.ru/downloads/computers/E-85/MS6105_Cord.png Схема кабеля для подключения монитора МС 6105]<br />
* [https://emuverse.ru/downloads/computers/E-85/MS6106_Cord.png Схема кабеля для подключения монитора МС 6106]<br />
* От [http://www.zx.pk.ru/showpost.php?p=271044&postcount=146 Юрия Лесных]<br />
** {{djvu}} [https://emuverse.ru/downloads/computers/E-85/L%20Juriy/MC0585_NP2.djvu Устройство запоминающее НП2]<br />
** {{djvu}} [https://emuverse.ru/downloads/computers/E-85/L%20Juriy/MC0585_NMD_E3.djvu Электроника МС 0585 Контроллер НМД Э3]<br />
** {{djvu}} [https://emuverse.ru/downloads/computers/E-85/L%20Juriy/MC0585_NMD_TO.djvu Электроника МС 0585 Контроллер НМД ТО]<br />
** {{djvu}} [https://emuverse.ru/downloads/computers/E-85/L%20Juriy/MC0585_TO.djvu Электроника МС 0585 ТО]<br />
** {{djvu}} [https://emuverse.ru/downloads/computers/E-85/L%20Juriy/MC0585_IE.djvu Электроника МС 0585 ИЭ]<br />
** {{djvu}} [https://emuverse.ru/downloads/computers/E-85/L%20Juriy/MC0585_CEC.djvu Электроника МС 0585 СЭС]<br />
** {{djvu}} [https://emuverse.ru/downloads/computers/E-85/L%20Juriy/MC0585_FO.djvu Электроника МС 0585 ФО]<br />
<br />
== Ссылки ==<br />
* [http://www.zx-pk.ru/showthread.php?t=10371 Обсуждение] запуска Э-85 и ее эмулятора на zx.pk.ru.<br />
* [http://www.tis.kz/forum/topic.php?forum=1&topic=10 Коллекция программ]<br />
<br />
[[Категория:Электроника-85]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%94%D0%92%D0%9A&diff=3558ДВК2023-09-18T18:41:03Z<p>Panther: links</p>
<hr />
<div>{{Emuverse}}<br />
<br />
'''Диалоговый вычислительный комплекс''' ('''ДВК''') — семейство советских персональных компьютеров середины 80-х — начала 90-х годов ХХ века.<br />
<br />
== Публикации и литература ==<br />
* [[w:Диалоговый вычислительный комплекс|Статья в Википедии]]<br />
* {{книга<br />
|автор = В. С. Кокорин, А. А. Попов, А. А. Шишкевич<br />
|заглавие = Книга 2. Персональные ЭВМ<br />
|ссылка = httpы://emuverse.ru/downloads/computers/DVK/docs/MicroEVM_Book_2.djvu<br />
|ответственный = Под ред. Л. Н. Преснухина<br />
|издание = МикроЭВМ: В 8 кн.: Практ. пособие.<br />
|место = М<br />
|издательство = Высшая школа<br />
|год = 1988<br />
}}<br />
* {{статья<br />
|автор = Попов А. А., Хохлов М. М., Глухман В. Л.<br />
|заглавие = Диалоговые вычислительные комплексы «Электроника НЦ-80-20»<br />
|оригинал = <br />
|ссылка = http://emuverse.ru/downloads/computers/DVK/docs/MPSS_DVK_1984_4.djvu<br />
|издание = «Микропроцессорные средства и системы»<br />
|тип = Журнал<br />
|год = 1984<br />
|номер = 4 <br />
|страницы = 61—64<br />
}}<br />
* {{книга<br />
|заглавие = Книга 1. Руководство пользователя<br />
|ссылка = http://emuverse.ru/downloads/computers/DVK/docs/PO_DVK/PO_DVK_Book_1.djvu<br />
|издание = Программное обеспечение ДВК<br />
|издательство = НИИ «Научный Центр»<br />
|год = 1989<br />
}}<br />
* {{книга<br />
|заглавие = Книга 2. Командный язык системы<br />
|ссылка = http://emuverse.ru/downloads/computers/DVK/docs/PO_DVK/PO_DVK_Book_2.djvu<br />
|издание = Программное обеспечение ДВК<br />
|издательство = НИИ «Научный Центр»<br />
|год = 1990<br />
}}<br />
* {{книга<br />
|заглавие = Книга 3. Языки программирования. Ассемблер, Паскаль, Бейсик<br />
|ссылка = http://emuverse.ru/downloads/computers/DVK/docs/PO_DVK/PO_DVK_Book_3.djvu<br />
|издание = Программное обеспечение ДВК<br />
|издательство = НИИ «Научный Центр»<br />
|год = 1990<br />
}}<br />
* {{книга<br />
|заглавие = Книга 4. Языки программирования. Фортран, Модула-2<br />
|ссылка = http://emuverse.ru/downloads/computers/DVK/docs/PO_DVK/PO_DVK_Book_4.djvu<br />
|издание = Программное обеспечение ДВК<br />
|издательство = НИИ «Научный Центр»<br />
|год = 1990<br />
}}<br />
* {{книга<br />
|заглавие = Книга 5. Руководство системного программиста<br />
|ссылка = http://emuverse.ru/downloads/computers/DVK/docs/PO_DVK/PO_DVK_Book_5.djvu<br />
|издание = Программное обеспечение ДВК<br />
|издательство = НИИ «Научный Центр»<br />
|год = 1990<br />
}}<br />
* {{книга<br />
|заглавие = Книга 6. Системные библиотеки и сообщения системы<br />
|ссылка = http://emuverse.ru/downloads/computers/DVK/docs/PO_DVK/PO_DVK_Book_6.djvu<br />
|издание = Программное обеспечение ДВК<br />
|издательство = НИИ «Научный Центр»<br />
|год = 1990<br />
}}<br />
* {{книга<br />
|заглавие = Книга 7. Тест-мониторная система<br />
|ссылка = http://emuverse.ru/downloads/computers/DVK/docs/PO_DVK/PO_DVK_Book_7.djvu<br />
|издание = Программное обеспечение ДВК<br />
|издательство = <br />
|год = 1988<br />
}}<br />
* {{книга<br />
|заглавие = Книга 8. Программное обеспечение дисплея на базе КЦГД<br />
|ссылка = http://emuverse.ru/downloads/computers/DVK/docs/PO_DVK/PO_DVK_Book_8.djvu<br />
|издание = Программное обеспечение ДВК<br />
|издательство = НИИ «Научный Центр»<br />
|год = 1990<br />
}}<br />
* {{книга<br />
|автор = Кузьменко Ю.В., Дегодюк В.В.<br />
|заглавие = ДВК. Обработка текстовой информации<br />
|серия = Персональный компьютер. Решение прикладных задач<br />
|место = М<br />
|издательство = Воениздат<br />
|год = 1990<br />
|страниц = 192<br />
}}<br />
* Справочное пособие, Программирование на микроЭВМ. В. Ф. Аникеенко, Б. М. Киселёв, В. И. Убийконь. Минск, издательство Вышэйшая школа, <!--31.07.-->1987<br />
* В. Л. Горбунов, Д. И. Панфилов, Д. Л. Преснухин. Справочное пособие по микропроцессорам и микроЭВМ> под редакцией лауреата государственной премии СССР, члена-корреспондента АН СССР Л. Н. Преснухина, рекомендовано Госпрофобром СССР. Рецензенты д-р техн. наук проф. В. И. Васильев (Московский институт гражданской авиации, кандидат техн. наук Э. Ю. Красс (Всесоюзный научно методический центр по профессионально-техническому образованию), издательство Высшая школа, 1988.<br />
* Программное обеспечение МИКРОЭВМ книга 10 из 11 Б. В. Шевкопляс. КОНТРОЛЬ, НАЛАДКА И ТЕСТИРОВАНИЕ, под редакцией профессора В. Ф. Шаньгина. Высшая школа, 1991.<br />
<br />
== Документация ==<br />
=== ДВК-1 ===<br />
* {{djvu|МС1201.01|Паспорт. Вариант 1|computers/DVK/docs/MC1201/mc1201-01_passport.djvu}}<br />
* {{djvu|МС1201.01|Паспорт. Вариант 2|computers/DVK/docs/MC1201/MicroEVM_MC1201.01_PS.djvu}}<br />
* {{djvu|МС1201.01|Принципиальная схема. Вариант 1|computers/DVK/docs/MC1201/mc1201-01_schematic.djvu}}<br />
* {{djvu|МС1201.01|Принципиальная схема. Вариант 2|computers/DVK/docs/MC1201/ms1201.01_shematic.djvu}}<br />
* {{djvu|МС1201.01|схема|computers/DVK/docs/ms11100-1.djvu МС11100.1}}<br />
* {{djvu|МС1201.01, МС1201.02. |Техническое описание (вариант 1)|computers/DVK/docs/MC1201/MC1201.01_TO.djvu}}<br />
* {{djvu|МС1201.01, МС1201.02. |Техническое описание (вариант 2)|computers/DVK/docs/MC1201/MC11100-tech-1985.djvu}}<br />
* Терминал [[15ИЭ-00-013]]<br />
<br />
=== ДВК-2 ===<br />
* нет<br />
<br />
=== ДВК-3 ===<br />
* МС1201.02 (ДВК-3)<br />
** {{djvu|МС1201.02. |Вариант 1. Паспорт, техническое описание, схема|computers/DVK/docs/MC1201/MC1201.02_TO.djvu}}<br />
** {{djvu|МС1201.02. |Вариант 1. Схема, сборочный чертеж|computers/DVK/docs/MC1201/ms1202-2.djvu}}<br />
** {{djvu|МС1201.02. |Вариант 2. Паспорт, схема|computers/DVK/docs/MC1201/MS1201.02_passport.djvu}} (Найдено [http://www.phantom.sannata.ru/forum/index.php?t=14507&amp;a=stdforum_view&amp;o=&st=all здесь])<br />
* МС1201.03 (ДВК-3М)<br />
** {{djvu|МС1201.03. |Паспорт, схема, перечень элементов (Вариант 1)|computers/DVK/docs/MC1201/MC1201.03_PS_E3_PE3.djvu}}<br />
** {{djvu|МС1201.03. |Паспорт, схема, перечень элементов (Вариант 2)|computers/DVK/docs/MC1201/ms1203ps.djvu}}<br />
** {{djvu|МС1201.03. |Cхема, сборочный чертеж (Вариант 3)|computers/DVK/docs/swscan00001_1.djvu}}<br />
** {{djvu|МС1201.03. |Техническое описание. Часть 1|computers/DVK/docs/MC1201/MC1201.03_TO_1.djvu}}<br />
** {{djvu|МС1201.03. |Техническое описание. Часть 2. Описание системы команд процессора ВМ3|computers/DVK/docs/MC1201/MC1201.03_TO_2.djvu}}<br />
* МС1201.04 (ДВК-3М)<br />
** {{djvu|МС1201.04. |Паспорт. |computers/DVK/docs/MC1201/MS1201.04_PS.djvu}}<br />
** {{djvu|МС1201.04. |Схема, перечень элементов. |computers/DVK/docs/MC1201/MC1201.04_E3_PE.djvu}}<br />
* {{djvu||(схема соединения блоков)|computers/DVK/docs/mc0507_02_blok.djvu МС0507.02}}<br />
<br />
=== ДВК-4 ===<br />
* {{djvu|МС0507.03. |Паспорт, Техническое описание, Инструкция по эксплуатации|computers/DVK/docs/MC0507_PS_TO_IE.djvu}}<br />
<br />
=== КГД ===<br />
* {{djvu|КГД. |Паспорт, техническое описание, перечень элементов|computers/DVK/docs/KGD/kgd_passport.djvu}}<br />
* {{djvu|КГД. |Принципиальная схема|computers/DVK/docs/KGD/kgd_schematic.djvu}}<br />
<br />
=== КЦГД ===<br />
* [http://zx-pk.ru/showthread.php?t=23110 Источник]<br />
* {{djvu|КЦГД. |Краткое описание|computers/DVK/docs/KCGD/KCGD_short.djvu}}<br />
* {{djvu|КЦГД. |Техническое описание|computers/DVK/docs/KCGD/KCGD_TO.djvu}}<br />
* {{djvu|КЦГД. |Схема и перечень элементов|computers/DVK/docs/KCGD/KCGD_E3_PE3.djvu}}<br />
* {{djvu|КЦГД. |Инструкция по эксплуатации|computers/DVK/docs/KCGD/KCGD_IE.djvu}}<br />
* {{djvu|КЦГД. |Паспорт|computers/DVK/docs/KCGD/KCGD_PS.djvu}}<br />
* {{статья<br />
|автор = В. С. Безобразов, А. И. Мякотин, А. А. Шишкевич.<br />
|заглавие = Контроллер цветного графического дисплея для персональных ЭВМ<br />
|ссылка = http://emuverse.ru/downloads/computers/DVK/docs/KCGD/MPSS_DVK_1988_3.djvu<br />
|издание = Микропроцессорные Средства и Системы<br />
|тип = Журнал<br />
|год = 1988<br />
|номер = 3<br />
|страницы = 53-57, обложка, вкладка<br />
}}<br />
* {{статья<br />
|автор = Н.В. Воробьев, В. С. Безобразов.<br />
|заглавие = Графический манипулятор мышь для персональных ЭВМ<br />
|ссылка = http://emuverse.ru/downloads/computers/DVK/docs/KCGD/MPSS_DVK_1988_3.djvu<br />
|издание = Микропроцессорные Средства и Системы<br />
|тип = Журнал<br />
|год = 1988<br />
|номер = 3<br />
|страницы = 57-60<br />
}}<br />
* {{статья<br />
|автор = В. М. Курлянд, В. В. Лагута.<br />
|заглавие = Графическая система для микроЭВМ «ДВК-3»<br />
|издание = Микропроцессорные Средства и Системы<br />
|тип = Журнал<br />
|номер = 2<br />
|год = 1990<br />
|ссылка = httpы://emuverse.ru/downloads/computers/DVK/docs/KCGD/dvk3_po.djvu<br />
}}<br />
<br />
=== КМД ===<br />
* {{djvu|КМД MX. |Паспорт, техническое описание. Версия 1|computers/DVK/docs/KMD/KMD_MX.djvu}}<br />
* {{djvu|КМД MX. |Паспорт, техническое описание. Версия 2|computers/DVK/docs/KMD/kngmd_MX_2.djvu}}<br />
* {{djvu|КМД MY. Прошивка 091 (К1809РУ1Б - ВП1-097). |Паспорт, техническое описание, перечень элементов, схема|computers/DVK/docs/KMD/KMD_MY_RU1_.djvu}}<br />
* {{djvu|КМД MY. Прошивка 091 (К1809РУ1Б - ВП1-097). |Только схема|computers/DVK/docs/KMD/KMD_MY_RU1_E3.djvu}}<br />
<br />
=== КСМ ===<br />
* {{djvu|КСМ. | Паспорт, принципиальная схема|computers/DVK/docs/KSM/KSMSchema1.djvu}}<br />
* {{djvu|КСМ. | Принципиальная схема|computers/DVK/docs/KSM/KSM_E3.djvu}}<br />
<br />
=== Клавиатура МС 7004 ===<br />
* {{djvu|Блок клавиатуры «МС 7004». |Паспорт. Вариант 1.|computers/DVK/docs/MC7004/ms7004.djvu}}<br />
* {{djvu|Блок клавиатуры «МС 7004». |Паспорт. Вариант 2.|computers/DVK/docs/MC7004/Keyboard_MC7004_2.djvu}}<br />
<br />
=== Прочее ===<br />
* [[КМ1801ВМ3]]<br />
* [[1801BMx|Микропроцессорный комплект К1801]]<br />
* {{djvu|Корзина K01.|Принципиальная схема|computers/DVK/docs/K01_E3.djvu}}<br />
* {{djvu|Блок питания «МС 9002».|Техническое описание, принципиальная схема|computers/DVK/docs/MS9002.djvu}}<br />
* {{djvu|Блок питания «МС 9002».|Принципиальная схема (Вариант 2)|computers/DVK/docs/DVK_Power_Supply_sch.djvu}}<br />
* {{djvu|КЖД| (техпаспорт)|computers/DVK/docs/kzhd.djvu}}<br />
* {{djvu|КТЛК| (техпаспорт)|computers/DVK/docs/ktlk.djvu}}<br />
* {{djvu|НГМД-6022.|Альбом схем|computers/@FDD/NGMD6022_E3.djvu}}<br />
* {{djvu|Введение в программное обеспечение| (У1.20001-01 90 06-ЛУ)|computers/DVK/docs/Soft_DVK1.djvu}}<br />
* {{djvu||Программа пультового (HALT) режима|computers/DVK/docs/DVK_pult_377.djvu}}<br />
* {{txt||Справочник по командам системы «РАФОС»|computers/DVK/docs/rafoshlp.htm}}<br />
* {{txt| Методика проверки работоспособности ДВК «Электроника МС 0501.08»| (руководство оператора)|computers/DVK/docs/test0505.htm}}<br />
* {{txt}} [httpы://emuverse.ru/downloads/computers/DVK/docs/block_devices.htm Краткое описание файловой системы блочных устройств ОС RT-11, РАФОС, ФОДОС и др.]<br />
* {{www}} [http://zx-pk.ru/threads/26624-emulyatsiya-vychtekhniki-na-mpk-k1801-v-mame-mess.html Сборник ссылок на документацию на zx.pk.ru]<br />
<br />
== Ссылки ==<br />
* {{www}} [http://ershov.iis.nsk.su/archive/eaindex.asp?did=28139 Профессиональная ЭВМ «Электроника-Микро». Архив академика Ершова.]<br />
* {{www}} [http://zx.pk.ru/forumdisplay.php?f=66 ДВК и УКНЦ на форуме zx.pk.ru]<br />
* {{www}} [http://forum.maxiol.com/index.php?showforum=86 ДВК на форуме MAXIOL]<br />
* {{www}} http://archive.pdp-11.org.ru/ - Архив программ и документации для компьютеров УК-НЦ, ДВК и БК<br />
* {{www}} http://doc.pdp-11.org.ru/DVK/ - Архив программ и документации<br />
* {{www}} http://pdp-11.ru/mybk/pdp11/ - Файловый архив<br />
* {{www}} [http://grands.land.ru/soft_dvk.htm grands.land.ru] (закрыт)<br />
* {{www}} [http://www.tis.kz/forum/topic.php?forum=28&topic=7 Коллекция программ]<br />
* {{www}} [http://zx-pk.ru/showthread.php?t=2348&p=219594&viewfull=1#post219594 Создание дискет на PC для контроллера MY]<br />
<br />
[[Категория:ДВК|*]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%A0%D0%B0%D0%B4%D0%B8%D0%BE-86%D0%A0%D0%9A&diff=3557Радио-86РК2023-09-18T18:39:35Z<p>Panther: links</p>
<hr />
<div>{{Википедия|Радио 86РК}}<br />
'''Радио-86РК''' — самодельный 8-разрядный [[персональный компьютер]], схема которого впервые была опубликована в [[Радио (журнал)|журнале «Радио»]] № 4-6/[[1986]] г. Авторы статьи — Д. Горшков, Г. Зеленко, Ю. Озеров, С. Попов.<br />
<br />
В начале 80-х журнал «Радио» уже публиковал описание любительского компьютера на процессоре КР580. Это был [[Микро-80]], построенный на ~120 микросхемах, сложный для повторения. Из-за сложности, отсутствия печ.плат и цифровых микросхем в свободной продаже в начале 80-тых, этот компьютер не получил распространения, но сама серия статей была полезной познакомив любителей с МП техникой.<br />
<br />
Схема Радио-86РК в минимальном варианте включала всего 29 микросхем, доступных в [[СССР]], благодаря чему его мог изготовить даже малоопытный радиолюбитель. Успеху РК86 способствовало то, что с середины 1980-тых цифровые микросхемы 155-той серии стали доступны в магазинах "Электроника" (хотя стоили довольно дорого 2-3 рубля) и в магазинах "Юный Техник" (там они как некондиция стоили всего 30-40 копеек, но были лишь нескольких типов). Радио-86РК позволял использовать почти все немногие программы от Микро-80. Хотя он был лишь частично программно совместим с [[Микро-80]], - годились системные программы и игры на бейсике, но игр для Микро-80 в кодах практически и не было.<br />
<br />
== Технические характеристики ==<br />
<br />
[[Изображение:Radio-86RK_PCB.jpg|thumb|right|Печатная плата Радио 86РК]]<br />
<br />
* Процессор: КР580ВМ80A (до 1985 г. обозначался как [[КР580ИК80А]] ) — советский аналог [[i8080]] 1,78 [[МГц]].<br />
* [[ОЗУ]]: в оригинальном варианте — 16 [[КБ]] на микросхемах DRAM К565РУ3. Также могли применяться К565РУ6 (4116) или отбраковка, «половинки» и «четвертинки» К565РУ5 (4164). В расширенном варианте - память 32 КБ. <br />
* [[Адресация В/У]]: Внешние устройства включаются в области памяти и им отводится верхняя половина адресного пространства в 32 Кб. Команды IN/OUT изначально не были предназначены для работы с портами, но упрощённая схемотехника и особенности самого процессора позволила их использовать для адресации некоторых БИС на плате.<br />
* [[ПЗУ]]: 2 КБ — УФ-ПЗУ К573РФ2 (2716).<br />
* Видеоподсистема: по сбросу текстовый режим 25 строк на 64 символа. Применён «контроллер алфавитно-цифрового терминала» [[КР580ВГ75]] работающий только совместно с «контроллером прямого доступа в память» КР580ВТ57 (i8257). В ходе работы этой связки из двух БИС попутно происходит регенерация динамической памяти. Символы для знакогенератора прошиты в ПЗУ (К573РФ1, 1 КБ). Курсор аппаратно формирует ВГ75. В некоторых играх, чтобы избежать межстрочного разрыва, высота знакоместа программно меняется с 10 на 8. При этом на экране умещается 30 строк высотой в 8 линий растра (формат экрана - 64*30). Такой режим используется в большинстве игр использующих псевдографику.<br />
* Цвет: стал доступен после публикации в ж.«Радиолюбитель» 04.1992 схемы простой доработки до цвета (схема цвета заимствована из цветного «Апогея-БК-01Ц» выпускаемого с конца 80-тых годов).<br />
* [[Клавиатура]]: матрица клавиш с контактами на замыкание, обслуживается программно процессором через ППА [[КР580ВВ55]] (i8255). Текущий регистр клавиатуры отображается светодиодом РУС/ЛАТ. Впоследствии была разработан вариант использования промышленной клавиатуры MS7007, но все игры с прямым опросом клавиш рассчитаны на оригинальную РК-матрицу, потому при клавиатуре MS7007 в некоторых играх управление неудобно.<br />
* Звук: в качестве источника звука используется контакт процессора INTE (разрешение прерываний). Поскольку прерывания в компьютере не используются, он был свободен. Из-за особенностей работы видеоконтроллера музыкальные тоны звучат хрипло. Чтобы это исправить в клоны обычно добавляли 580ВИ53.<br />
* Внешние устройства: в качестве устройства для хранения программ применялся бытовой [[магнитофон]]. К ППА пользователя КР580ВВ55 могло подключаться внешнее устройство (принтер, ROM-диск и программатор УФ-ПЗУ). С 1993 года после публикации в ж.«Радио» также стал доступен дисковод (FM формат, 400 кб на диск).<br />
* Конструктив: конструкция одноплатная. Немодульная. Это связано отчасти с небольшим числом деталей, а главное, что схема компьютера это неделимый модуль. Нельзя выделить в отдельный модуль память и настроить отдельно, т.к. без работы ПДП память забывает данные, а ПДП не работает без БИС видеоконтроллера, который в свою очередь не работает без его программирования процессором. Все узлы в этом компьютере взаимосвязаны. Из-за этого РК86 намного сложнее всех остальных советских компьютеров в настройке. Если не работает какая-то мелочь, то не работает вообще всё и нет признаков по которым можно понять, где искать дефект.<br />
<br />
== Графические возможности ==<br />
<br />
В различных источниках могут встречаться различные параметры видеосистемы Радио-86РК. Эти расхождения — следствие использования в качестве видеоконтроллера микросхемы КР580ВГ75, которая позволяет программно изменять видеорежим. Теоретически она может программироваться на 64 строки по 80 символов в каждой. <br />
<br />
Чтобы во время гашения экрана на время обратного хода луча регенерация динамических ОЗУ не прекращалась, используется программное формирование сигнала гашения по кадрам. Также программно формируется и гашение на время обратного хода луча по строкам (хотя это уже не обусловлено работой схемы, а лишь ради экономии). Таким образом ВГ75 продолжает выводить на экран во время строчного и кадрового бордюров, а кадровый и строчный бордюры получаются за счёт заполнения экранных ячеек соответствующих бордюру нулями (или кодом $20 или кодом $FF).<br />
<br />
В Радио-86РК по сбросу ВГ75 программируется на режим 30 строк по 78 символов и высотой знакоместа в 10 линий растра. Видимы при этом лишь 25 строк (3 строки сверху и 2 снизу заполняются нулями, что формирует кадровый бордюр) и лишь 64 символа в строке. При этом в памяти вся экранная область занимает 78*30 — 2340 байт.<br />
<br />
Некоторые возможности, поддерживаемые КР580ВГ75, не использованы в схеме Радио-86РК. В частности, не используется возможность вывода 11 аппаратных символов псевдографики. Также, не используются режим подсветки символов и инверсии знакомест. Но в любительских доработках для введения цвета эти атрибутные сигналы ВГ75 задействованы для задания цвета символов (впервые это сделано в промышленном клоне «Апогей-БК-01Ц»).<br />
<br />
Формат знакоместа для режима по сбросу - 6x10. Но выводится лишь 8 линий из фонта, потому при высоте знакоместа в 10 линий две нижние линии знакоместа затемнены. ВГ75 кодирует символы 7-ю битами (экранные байты с выставленным 8-мым битом являются командами смены режима либо аппаратной псевдографикой). В ряде клонов используется увеличенный объём ПЗУ знакогенератора и дополнительные символьные наборы в нём. В этом случае нужный набор выбирается с помощью разряда из пользовательского ППА D20 или атрибутными битами ВГ75.<br />
<br />
Псевдографические возможности Радио-86РК реализуются с помощью 16-ти псевдографических символов в ПЗУ знакогенератора. Эти символы имитируют разбиение знакоместа на матрицу 2*2 пикселя (в продвинутых клонах есть фонт с матрицей 3*2 пикселя), что в базовом режиме 64*25 даёт общее разрешение экрана в 128*50 пикселей, а в режиме с высотой знакоместа в 8 линий, который обычно и используется для графических игр, - 128*60. К сожалению, оператор PLOT бейсика режим в 30 строк не поддерживает (работает только в базовом режиме 64*25 с межстрочными разрывами). В западных текстовых компьютерах такой способ вывода графики называется блочная графика.<br />
<br />
При использовании альтернативного фонта (которого в базовом РК нет) иногда получают ещё один псевдографический видеорежим, в котором знакоместо программируется на высоту знакоместа в 4 линии, а общее число строк программируется на максимум - 64. При этом видимыми являются только 51 строка (остальные уходят на бордюр). При этом частота строк увеличивается до 60 Гц, что нормально для телевизора (т.к столько в NTSC), но не для видеомонитора, зато формат экрана составляет 128*102. А в некоторых клонах с альтернативным фонтом так выводится графика аж 192*102. Но программ под такой режим нет (только демо режима)[http://ipic.su/img/img7/fs/mode_192x102.1579013727.png].<br />
<br />
== Программное обеспечение ==<br />
[[Изображение:Radio86RK_Klad_Screenshot.gif|thumb|320px|right|Скриншот игры «Клад»]]<br />
<br />
Резидентно в «Радио-86РК» имеется «Монитор» в [[Постоянное запоминающее устройство|ПЗУ]], который содержит не только драйверы периферии, но также играет роль ОС. «Монитор» поддерживает простейшие функции отладчика, позволяет просматривать и изменять ячейки памяти, вводить и запускать программы. Журнал «Радио» опубликовал также дампы основных системных программ, однако ручной ввод их в компьютер был весьма трудозатратным.<br />
<br />
Базовое инструментальное программное обеспечение опубликованное в 1986-1987 годах в журнале «Радио» в виде шестнадцатеричных дампов включало в себя:<br />
* [[Бейсик]] [[интерпретатор]]<br />
* [[Текстовый редактор]] <br />
* [[Ассемблер]]<br />
* [[Дизассемблер]]<br />
<br />
В последующие годы было опубликовано ещё несколько полезных системных программ. Прикладное программное обеспечение создавалось программистами любителями и его можно было приобрести в вскоре возникших кооперативах, скопировать у знакомых или купить на радиорынке. В конце 80-х годов на нелегальных радиорынках возник пиратский частный бизнес по торговле программами бытовых ПК, что существенно облегчало людям доступ к программам, но лишало разработчиков программ возможности заработать на своих программах.<br />
<br />
Прикладное ПО включало в основном следующие программы:<br />
* Инструментальные программы: макроассемблер и отладчики (отладчик Г.Штефана, экранный отладчик С.Дрогайцева, DDT и SID адаптированные из [[CP/M]])<br />
* [[Высокоуровневый язык программирования|ЯВУ]]: до десятка лишь слегка отличающихся и несколько доработанных версий бейсика, компиляторы Си и Паскаля. Из-за нехватки в компьютере объёма ОЗУ, этими компиляторами можно транслировать лишь маленькие программы, но они позволили многим будущим профессиональным программистам сделать первое знакомство с программированием на [[Высокоуровневый язык программирования|ЯВУ]].<br />
* Игры в кодах: Шахматы, Змейка, Xonix, Pacman, Лабиринт, Лестница, Жизнь, Тетрис, Морской бой, Диверсант, Скорпион, Стратегия, Цирк, Рикошет, Volkano, Krok, Land, LodeRuner, Digger, Mars, Barmen, BoulderDash, Into the Eagles Nest, Ladder, Stena и др. Не считая слегка изменённые дубли игр было не более 200. Сейчас на архивных сайтах можно найти около 100 РК-игр.<br />
* Игры на бейсике: Королевство Эйфория, Война с клингами, Питон, Сокобан, Минное поле, Бомбардировщик, Биржа, Кегельбан, Покер, Пика-фама, Ханойская башня, Гомоку и др. Около 30 игр.<br />
* Несколько десятков неигровых программ (текстовые и граф.редакторы, примитивные картотеки, словари, программы печати, инструментальные для разработки и радиолюбительского назначачения).<br />
<br />
== Клоны ==<br />
Промышленность выпускала и стопроцентные клоны «Радио-86РК», но в большем объёме серийно производились более развитые РК-производные компьютеры, которые имели лишь частичную совместимость, т.е совместимость лишь для системных программ. Из-за разных адресов экрана и В/У игры были несовместимы, хотя из-за общности схемотехники и ROM-BIOS адаптация игр между РК-подобными компьютерами была несложна.<br />
* [[Микроша]]<br />
* [[Электроника КР-01/02/03/04]] (конструктор для самостоятельной сборки)<br />
* [[Партнёр 01.01]]<br />
* [[Спектр-001 (компьютер)|Спектр-001]]<br />
* [[Апогей БК-01]]<br />
* [[Криста (компьютер)|Криста]] — выпускался заводом РИП в г.Муром<br />
* Альфа-БК[https://zx-pk.ru/wiki/Альфа_БК]<br />
* УМПК-Р-32 — выпускался заводом Мукачевприбор<br />
* Импульс<br />
* Согдиана-1<br />
* Mikro-88 — выпускался одним из рижских кооперативов, отличался от оригинала клавиатурой и небольшими изменениями в ПЗУ, плата компьютера не отличалась от оригинальной версии на 32 КБ.<br />
<br />
== Публикации ==<br />
<br />
* {{статья<br />
|заглавие = Процессорный модуль микро-ЭВМ<br />
|издание = журнал «Радио»<br />
|номер = 4-7<br />
|год = 1986<br />
}}<br />
<br />
* {{статья<br />
| издание = журнал «Радио»<br />
| заглавие = Различные статьи о Радио-86РК<br />
| год = 8/1986-1/1998<br />
}}<br />
<br />
* {{книга<br />
|автор = Зеленко Г. В., Панов В. В., Попов С. Н.<br />
|заглавие = Домашний компьютер<br />
|место = М.<br />
|издательство = Радио и связь, серия Массовая радиобиблиотека<br />
|том = 1139<br />
|isbn = 5-526-00312-7<br />
|ссылка = https://emuverse.ru/downloads/computers/Radio-86rk/docs/MRB-1139_Zelenko_Domashniy_computer_1989.djvu<br />
}}<br />
<br />
== Ссылки ==<br />
* [http://old.h1.ru/xussr/pk86.shtml Радио 86РК и совместимые ] — краткий обзор Радио 86РК и его клонов<br />
* [[Emu80]] — эмулятор Радио 86РК и совместимых, а также некоторых других компьютеров<br />
* [http://nf8.jinr.ru/~volkov/pc-nostalgia/ ПК-Ностальгия ] — информация и ПО для Радио 86РК, включая операционную систему REAL TIME<br />
<br />
== Документация ==<br />
* [[:Категория:Радио-86РК/Публикации|Публикации в журнале Радио]]<br />
* [[Intel 8257/Документация#Пример программирования]]<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/Radio-86rk/docs/spectr-001_schematics.djvu Спектр-001. Схема системного блока и блока питания] <small>([http://zx.pk.ru/showpost.php?p=329052&postcount=73 Источник])</small><br />
<br />
== Файлы ==<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Radio-86rk/firmware/RK86-16.rom ПЗУ 16k]<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Radio-86rk/firmware/RK86-32.rom ПЗУ 32k]<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Radio-86rk/firmware/Font.rom Прошивка знакогенератора]<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Radio-86rk/firmware/spektr001.rom ПЗУ компьютера Спектр 001]<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Radio-86rk/firmware/TEST_ROM_32.bin Тест памяти 32К] <small>([http://zx.pk.ru/showpost.php?p=328332&postcount=72 Источник])</small><br />
<br />
== Сборники программ ==<br />
* {{www}} [http://www.emu80.org/dl.html Emu80.org]<br />
* {{www}} [http://rk86.shatu.ru/games.htm rk86.shatu.ru]<br />
* {{www}} [http://www.itwas.ru/radio/ www.itwas.ru/radio/]<br />
<br />
[[Категория:Радио-86РК|*]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%9F%D0%B0%D1%80%D1%82%D0%BD%D1%91%D1%80_01.01&diff=3556Партнёр 01.012023-09-18T18:38:14Z<p>Panther: links</p>
<hr />
<div>{{Википедия|Партнер 01.01}}<br />
{{Карточка компьютера<br />
| Photo = <br />
| Type = Домашний компьютер<br />
| Released = 1987<br />
| Discontinued = <br />
| Processor = [[КР580ВМ80А]]<br />
| Memory = ОЗУ — 64 КБ, ПЗУ — 16 KБ<br />
| OS = <br />
}}<br />
'''«Партнер 01.01»''' — советский 8-разрядный бытовой компьютер. Разработан на основе схемотехники [[Радио 86РК]] и сохраняет с ним частичную программную совместимость. Серийно выпускался на производственном объединении «САМ» СКБ ВМ в г.Рязань примерно с середины 1987 года.<br />
<br />
== Технические характеристики ==<br />
* Процессор: [[КР580ВМ80А]]<br />
* Быcтродействие: 370 тысяч (регистровых) операций в секунду<br />
* Память: [[ОЗУ]] — 64 [[Килобайт|КБ]], [[Постоянное запоминающее устройство|ПЗУ]] — 16 КБ (ROM-BIOS, монитор, редактор текстов и бейсик)<br />
* Разрешение экрана: текстовый режим 25 строк по 64 символа, монохром (с модулем МЦПГ — 8 цветов). Полноценного графического режима нет, но есть псевдографика с разрешением 128×62 и 128×129.<br />
* Габариты: 418×334×64 мм<br />
* Масса: 3,7 кг<br />
* Потребляемая мощность: 22 Вт<br />
<br />
<br />
Выполнен в виде моноблока, в котором размещены блок питания, плата и клавиатура. В качестве устройства вывода использовался обычный телевизор (через антенный вход) либо монитор «Электроника» МС 6105. Внешнее запоминающее устройство — бытовой кассетный магнитофон.<br />
<br />
В отличие от «Радио-86РК», имеющего возможность отображения набора лишь из 128 символов, знакогенератор ПК «Партнёр» имеет 8 наборов символов, переключаемых программно. Среди них присутствуют: стандартный набор символов «Радио-86РК», основанный на [[КОИ-7]] Н2 (смешанный русско-английский, только заглавные буквы, отсутствует твёрдый знак и буква Ё), полноценные наборы символов русского и английского языков с заглавными и строчными буквами (так называемая [[Основная кодировка]] ГОСТ), несколько наборов псевдографики.<br />
<br />
Отличительная особенность ПК Партнер — возможность подключения дополнительных модулей. Модули — небольшие одноплатные картриджи в пластмассовом корпусе. К ПЭВМ можно подключить до восьми модулей (4 — к моноблоку и 4 — к дополнительному расширителю)<br />
* Партнер-02.01 — Модуль параллельного интерфейса<br />
* Партнер-03.11 — Модуль программатора ПЗУ<br />
* Партнер-01.61 — Модуль цветной псевдографический (МЦПГ)<br />
* Партнер-01.51 — Модуль контроллера дисковода<br />
* Партнер-02.11 — Модуль последовательного интерфейса<br />
<br />
Модуль МЦПГ позволял подключать компьютер к цветным телевизорам, имеющим RGB-вход, и расширял графические и звуковые возможности компьютера. В состав модуля входили [[видеоконтроллер]] [[КР580ВГ75]], микросхема таймера [[КР580ВИ53]] и [[ОЗУ]] [[знакогенератор]]а на двух микросхемах КР537РУ10, общим объёмом 4 КБ. Видеоконтроллер работал параллельно с видеоконтроллером компьютера и позволял отображать поверх обычного текстового экрана цветное изображение, создаваемое из загружаемых в ОЗУ знакогенератора символов. При этом разрешение графики, выводимой МЦПГ, не совпадало с разрешением текстового экрана (символы 4×8 вместо 6×8 пикселей). Микросхема таймера использовалась в качестве трёхканального синтезатора звука. В комплект поставки модуля входила [[магнитофонная кассета|кассета]] с [[графические программы|графической программой]] и несколькими играми, поддерживающими возможности МЦПГ.<ref>[http://bashkiria-2m.narod.ru/arendatr/MODULES/r0161.htm Руководство по эксплуатации]</ref><br />
<br />
== Программное обеспечение ==<br />
<br />
Вместе с компьютером поставлялось программное обеспечение на кассетах — языки [[Бейсик]], [[Язык ассемблера|Ассемблер]], [[Форт (язык программирования)|Форт]].<br />
В ПЗУ компьютера было прошито следующее ПО:<br />
* операционная система «Монитор» (сильно расширенная версия «Монитора» [[Радио 86РК]], учитывавшая продвинутые возможности Партнёра), было выпущено 3 версии «Монитора»;<br />
* интерпретатор языка Бейсик (почти полный клон Basic *MICRON* [[Радио 86РК]]), интерпретатор загружался в ОЗУ за 2 секунды;<br />
* строчный редактор и ассемблер, заимствованные у [[Радио 86РК]].<br />
Полная программная совместимость с [[Радио 86РК]], [[Микроша]], [[Апогей БК-01]] отсутствует (т.к. другие адреса экранного буфера и портов БИС), но общность технических решений и входных точек стандартных подпрограмм ROM-BIOS позволяла легко адаптировать несовместимые программы с этих компьютеров на Партнёр, благодаря чему было доступно множество системных и игровых программ.<br />
При подключении модуля контроллера дисковода возможно использование адаптированной версии ОС [[CP/M]] с дискетами формата 360 кб.<br />
<br />
== Публикации ==<br />
* [[Партнёр/Радиолюбитель 1994/Большие возможности ПК «Партнёр»|Большие возможности ПК «Партнёр»]] — «Радиолюбитель», 1994.<br />
<br />
== Документация ==<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/Partner/docs/Partner_Schematics_Album.djvu Альбом схем]<br />
<br />
== Ссылки ==<br />
* [http://arendatr.chat.ru/ Сайт Михаила Голованова]<br />
* [http://bashkiria-2m.narod.ru/ Эмулятор]<br />
<br />
== Файлы ==<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Partner/firmware/ Несколько вариантов ПЗУ]<br />
* {{zip}} [https://emuverse.ru/downloads/computers/Partner/software/ Коллекция программ]<br />
<br />
[[Категория:Партнёр|*]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D1%88%D0%B0&diff=3555Микроша2023-09-18T18:36:35Z<p>Panther: links</p>
<hr />
<div>{{Emuverse}}<br />
'''«Микроша»''' — 8-разрядный микрокомпьютер, клон [[Радио-86РК|«Радио-86РК»]], частично совместимый с оригиналом. <br />
<br />
== Публикации ==<br />
* [[w:Микроша|Статья в Википедии]]<br />
* {{книга<br />
|автор = С. Н. Попов.<br />
|часть = <br />
|заглавие = Персональный компьютер МИКРОША и его программное обеспечение<br />
|оригинал = <br />
|ссылка = https://emuverse.ru/downloads/computers/Mikrosha/docs/Popov_Mikrosha.djvu<br />
|ответственный = <br />
|издание = <br />
|место = М.<br />
|издательство = НПК «ЭМИС»<br />
|год = 1990<br />
|том = <br />
|страницы = <br />
|страниц = <br />
|серия = <br />
|isbn = <br />
|тираж =<br />
}}<br />
* {{статья | автор = С. Н. Попов | заглавие = Графический редактор для ПЭВМ «Микроша» | издание = Микропроцессорные средства и системы | год = 1987 | номер = 5 | страницы = 65—69}}<br />
* {{статья | автор = Зеленко Г., Горшков Д. | заглавие = «Микроша» | издание = «Радио-86РК» | издательство = Радио | год = 1989 | номер = 12 | страницы = 43}} — приводится код Монитора, предназначенного для снижения несовместимости «Микроши» с «Радио-86РК».<br />
* {{книга | ответственный=Васильев Б.М. (редактор)| заглавие = Персональная ЭВМ «Микроша»| серия=Вычислительная техника и её применение |место = М. | издательство = «Знание» | год = 1992 |isbn=5-07-002407-8}}<br />
* {{статья | автор = Вячеслав Алексеев. | ссылка = http://technica-molodezhi.ru/docs/Archive/TM_06_1991 | заглавие = Два сапога — не пара, Или Домашняя «Микро»-история (страница 38 по нумерации "движка" сайта| издание = Журнал «Техника-Молодежи» | номер = 6 | год = 1991}}<br />
<br />
== Ссылки ==<br />
* [http://home.onego.ru/~bav9/9.html ПЭВМ «Микроша»]<br />
* [http://www.tis.kz/micro.php ПК Микроша]<br />
* [http://zx-pk.ru/forumdisplay.php?f=58 Раздел по Радио-86РК на zx-pk.ru]<br />
<br />
== Эмуляторы ==<br />
* [http://bashkiria-2m.narod.ru/ Башкирия-2М] (развивается)<br />
* [http://zx-pk.ru/showthread.php?t=23977 Эмулятор для OS X] (развивается)<br />
* [http://emu80.org/ Emu80] (заморожен в 2007)<br />
* [http://www.emulator3000.org/rus-e3.htm Е3000] (заморожен в 2004)<br />
<br />
== Документация ==<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/Mikrosha/docs/Mikrosha_Manual.djvu Руководство по эксплуатации]<br />
* {{www}} [http://zxbyte.ru/mikrosha.htm Страница Микроши на сайте zxbyte. Схемы и расположение элементов]<br />
<br />
== Файлы ==<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Mikrosha/firmware/Microsha.rom Прошивка ПЗУ монитора]<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Mikrosha/firmware/Font.rom Прошивка ПЗУ знакогенератора]<br />
<br />
== Программы ==<br />
* [http://zx-spectrum.narod.ru/mikrosha.htm На сайте zx-spectrum.narod.ru]<br />
* [http://emu80.org/dl.html На сайте emu80.org]<br />
* [http://www.tis.kz/microp.php На сайте tis.kz]<br />
<br />
[[Категория:Радио-86РК]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%9B%D1%8C%D0%B2%D0%BE%D0%B2_%D0%9F%D0%9A-01&diff=3554Львов ПК-012023-09-18T18:35:46Z<p>Panther: links</p>
<hr />
<div>{{Википедия}}<br />
{{Карточка компьютера<br />
| Photo = <br />
| Type = Домашний компьютер<br />
| Released = 1986<br />
| Discontinued = <br />
| Processor = [[КР580ВМ80А]]<br />
| Memory = ОЗУ — 48 КБ, ПЗУ — 16 КБ<br />
| OS = <br />
}}<br />
'''ПК-01 «Львов»''' — 8-разрядный домашний [[микрокомпьютер]]. Выпускался с [[1986]] года Львовским производственным объединением им. В.И.Ленина.<br />
<br />
== Технические характеристики ==<br />
* Процессор: [[КР580ВМ80А]] на такте 2.2 МГЦ, но есть такты ожидания<br />
* Быстродействие: ~400 тыс. оп./сек<br />
* Доступна замена процессора на [[Z80]], что даёт ускорение в 1.5-2 раза<br />
* Память: [[ОЗУ]] — 48 КБ, [[ПЗУ]] — 16 КБ (доработками расширяется до 144 КБ)<br />
* Дисплей символьно-графический на базе бытового цветного телевизора, количество выводимых на экран символов 32 &times; 24, точек 256 &times; 256, количество одновременно отображаемых цветов (из палитры) — 4. Объём видеопамяти — 16 КБ.<br />
* Внешняя память: бытовой кассетный магнитофон<br />
* Расширение: подключение контролера [[НГМД]], формат 360 КБ (при [[Z80]] 720 КБ)<br />
* Габариты: системный блок — 365&times;250&times;45 мм, блок питания — 90&times;120&times;200 мм<br />
* Потребляемая мощность: 10 Вт<br />
<br />
== Программное обеспечение ==<br />
* в ПЗУ — интерпретатор Бейсик<br />
* на кассете: [[Бейсик]], Монитор-отладчик, Редактор текста, Макроассемблер, Реассемблер, БСП, прикладные программы<br />
* Несколько десятков любительских игр довольно высокого качества<br />
* При наличии контролера [[НГМД]] доступна Hameleon-DOS или CP/M-36К<br />
<br />
== Ссылки ==<br />
* [http://pc01.lviv.ua/forum/ Форум посвящённый ПК-01 «ЛЬВОВ»]<br />
* [https://web.archive.org/web/20120922064031/http://lvovpc.cu.cc/ Сайт эмулятора ПК-01 «ЛЬВОВ»]<br />
* [http://bashkiria-2m.narod.ru/ Универсальный эмулятор «Башкирия-2М»]<br />
* [http://lvovpk.org.ua/ Java-эмулятор]<br />
<br />
== Документация ==<br />
* [[Львов/Руководство по эксплуатации|Руководство по эксплуатации]]<br />
* [[Львов/Руководство программисту|Руководство программисту]]<br />
* [https://emuverse.ru/downloads/computers/Lvov/docs/Lvov_sheet1.png Принципиальная схема]<br />
* {{djvu||Перечень элементов|computers/Lvov/docs/elements_list.djvu}}<br />
* {{www}} [http://www.zx.pk.ru/showpost.php?p=396256&postcount=191 Формат файлов LVT]<br />
<br />
== Файлы ==<br />
* {{rom||Стандартное ПЗУ|computers/Lvov/firmware/Lvov1.rom}}<br />
* {{rom||Стандартное ПЗУ v.2|computers/Lvov/firmware/Lvov2.rom}}<br />
* {{rom||ПЗУ с монитором и бейсиком|computers/Lvov/firmware/Lvov3.rom}}<br />
<br />
[[Категория:Львов ПК-01]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%9A%D0%BE%D1%80%D0%B2%D0%B5%D1%82&diff=3553Корвет2023-09-18T18:35:05Z<p>Panther: links</p>
<hr />
<div>{{Википедия|Корвет (компьютер)}}<br />
<br />
'''«Корвет»''' — 8-разрядный [[персональный компьютер]]. Разработан сотрудниками [[Институт ядерной физики Московского государственного университета|Института ядерной физики Московского государственного университета]]: Сергеем Ахмановым, Николаем Рой и Александром Скурихиным. Выпускался серийно с [[1988]] года на Бакинском производственном объединении «Радиостроение», в Московском экспериментально-вычислительном центре ЭЛЕКС ГКВТИ и в кооперативе ЭНЛИН, на [[Каменск-Уральский|Каменск-Уральском]] ПО «Октябрь» («Нейва<sup>®</sup>»).<br />
<br />
Изначально компьютер предназначался для автоматизации управления установкой по дистанционному измерению параметров низкотемпературной плазмы методами лазерной спектроскопии, а также для обработки получаемой информации и теоретических расчетов, ведения архива данных и ряда других нужд. Разработка была начата в конце [[1985]] года. Некоторые идеи были взяты у Radio Shack [[TRS-80]].<br />
<br />
ПК «Корвет» был принят Министерством образования СССР в качестве базового для обучения информатике в школе. На основе ПК «Корвет» выпускался [[комплекс учебной вычислительной техники]] (КУВТ), в который входило рабочее место преподавателя (ПК8020, оборудован НГМД) и до 15 рабочих мест учащихся (ПК8010), связанных в [[локальная сеть|локальную сеть]]. Однако, серийное производство ПК было сопряжено с рядом трудностей, из-за чего компьютер «запоздал» и не получил ожидаемого широкого распространения.<br />
<br />
== Технические характеристики ==<br />
* Процессор: [[КР580ВМ80А]] на тактовой частоте 2,5 МГц, быстродействие 625 тыс. оп./с.<br />
* Память: [[ОЗУ]] — 64 КБ, [[ПЗУ]] — 8-24 KБ, [[ГЗУ]] — 48 (3 слоя х по 16к) х 1 стр./ 192 (3 слоя х по 16к) х 4 стр., [[АЦЗУ]] — 1 КБ (16х64)<br />
* Устройство вывода: монитор либо телевизор, текстовый режим 16 строк по 64 символа, графический режим 512 &times; 256, 16 цветов (текст и графика — отображаются параллельно)<br />
* Звукогенератор<br />
* Клавиатура: 80 клавиш<br />
* Внешние интерфейсы:<br />
** параллельный стандарта Centronics для подключения [[принтер]]а (обычно — Epson FX800)<br />
** последовательные — RS-232C и «токовая петля», возможно подключение мыши, до двух аналоговых [[джойстик]]ов, подключение к локальной сети<br />
** разъём для подключения внешних модулей<br />
** разъём для диагностического оборудования<br />
* Внешняя память:<br />
** возможность подключения до 4-х НГМД<br />
** бытовой кассетной магнитофон (2400 бит/с)<br />
<br />
Компьютеры «Корвет» могли быть объединены в локальную сеть, до 16-ти машин в сети.<br />
<br />
== Программное обеспечение ==<br />
* Интерпретатор языка [[Бейсик]]<br />
* Операционные системы [[МикроДОС]] и [[CP/M|CP/M-80]] (при подключении дисковода)<br />
* Текстовые редакторы «Супертекст», «МикроМир» (MIM) и т.д.<br />
* dBase II<br />
* Табличный процессор Microsoft Multiplan<br />
* Компиляторы с языков Фортран, Паскаль, Си, Ада, Форт, Лисп, ПЛ/М и др.<br />
<br />
== Публикации ==<br />
* С.А. Ахманов, Н.Н. Рой, А.В.Скурихин, ''Персональный компьютер «Корвет»''. — Ж-л «Мир ПК», №3 1989 г.<br />
<br />
==См. также==<br />
* [[Комплекс Учебной Вычислительной Техники]]<br />
<br />
== Ссылки ==<br />
* [http://ershov.iis.nsk.su/archive/eaindex.asp?lang=1&did=7971 Характеристика персональных ЭВМ «Корвет» и «Электроника УК-НЦ»…]<br />
* [http://www.zx.pk.ru/forumdisplay.php?f=65 zx.pk.ru] — Раздел форума о Корвете<br />
* [http://soviet-pc.narod.ru/ soviet-pc.narod.ru]<br />
<br />
== Документация ==<br />
* [[Корвет/Техническая документация|Справочник НИИСЧЕТМАШ по программно-аппаратной конфигурации]]<br />
* [[Корвет/Устройство и работа комплекса|Описание схемы]]<br />
* [[:Категория:Корвет/Публикации|Публикации в журнале «Радио»]]<br />
* [[:Категория:Корвет/Документация|Различная документация]]<br />
Схемы и описание к ним ([http://pk8020.narod.ru/ источник])<br />
* [[Корвет/Техническое описание|Техническое описание]]<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/Korvet/docs/Korvet_Schematics.djvu Альбом схем]<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/Korvet/docs/Korvet_TO.djvu Системный блок СБ 8020. Техническое описание] <small>([http://zx.pk.ru/showpost.php?p=284504&postcount=11 Источник])</small><br />
Распределение памяти<br />
* [[:Изображение:Korvet Memory map.png|Распределение памяти в стандартных режимах]]<br />
* [[:Изображение:Korvet PLM Memory ranges.png|Карта срабатывания конфигураций ПЛМ К556РТ2 системы управления памятью]]<br />
<br />
== Файлы ==<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Korvet/firmware/ Различные версии прошивок ПЗУ]<br />
<br />
== Эмуляторы ==<br />
* [http://bashkiria-2m.narod.ru/ Универсальный эмулятор Башкирия-2М]<br />
* [http://pk8020.narod.ru/s2-emulator.html pk8020.narod.ru]<br />
* [http://soviet-pc.narod.ru/ Korvet emulator by Mech Warrior]<br />
<br />
== Программы ==<br />
* [http://disktrouble.narod.ru/korvet.html disktrouble.narod.ru]<br />
* [http://master-shkanov.narod.ru/museum.html master-shkanov.narod.ru]<br />
* [http://oldkorvet.narod.ru/ oldkorvet.narod.ru]<br />
* [http://pk8020.narod.ru/s2-download-soft.html pk8020.narod.ru]<br />
* [http://bashkiria-2m.narod.ru/download.html Образы дисков на сайте эмулятора Башкирия-2М]<br />
* [http://zx.pk.ru/showpost.php?p=126588&postcount=7 Подборка дисков по ссылке]<br />
<br />
[[Категория:Корвет|*]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%92%D0%B5%D0%BA%D1%82%D0%BE%D1%80-06%D0%A6&diff=3552Вектор-06Ц2023-09-18T18:33:42Z<p>Panther: links</p>
<hr />
<div>{{Википедия}}<br />
<br />
{{Карточка компьютера<br />
| Photo = [[Изображение:Vector-06c.jpg|320px|Вектор-06Ц]]<br />
| Type = Бытовой компьютер<br />
| Released = 1987<br />
| Discontinued = ???<br />
| Processor = [[КР580ВМ80А]]<br />
| Chipset = [[КР580]]<br />
| Storage = МЛ<br />
| Memory = 64К<br />
| OS = Бейсик, CP/M, МикроДОС<br />
}}<br />
'''«Вектор-06Ц»''' — советский персональный компьютер (ПК), созданный в конце 1980-х гг.<br />
<br />
Персональный компьютер «Вектор-06Ц» был создан в конце 80-х годов советскими инженерами из Кишинёва Д. Темиразовым и А. Соколовым. На 33-й Всесоюзной радиовыставке в 1987 году «Вектор-06Ц» получил первую премию<br />
<ref>{{cite journal | quotes=no | title=1-я страница обложки | journal=Радио | <br />
volume = 10/1987 | issn=0033-765X}}</ref>. Было начато производство ПК на кишинёвском ПО «Счётмаш». «Вектор» выпускался ещё десятком оборонных предприятий по всему СССР. В 1988 году «Вектор» получил серебряную медаль ВДНХ СССР, а в 1989 году занял первое место среди 8-ми разрядных ПЭВМ (второе общее) на конкурсе ГКВТИ СССР. В 1991 году «Счётмаш» выпустил модель «Вектор-06Ц.02» с несколько переделанной схемой, но полностью совместимой с прежней моделью и с такими же возможностями. С массовым распространением в 90-х годах в странах бывшего СССР зарубежных IBM-совместимых компьютеров ПК «Вектор» вместе с другими 8-ми разрядными ПК постепенно сошёл со сцены и сейчас его в работающем виде можно найти только у отдельных фанатичных любителей компьютерного антиквариата.<br />
<br />
== Основные технические характеристики ==<br />
* Разрядность: 8 бит шины данных, 16 бит адресной шины<br />
* Процессор: [[КР580ВМ80А]] установленный на нестандартную тактовую частоту 3 Мгц (стандартная максимальная частота 2,5 Мгц)<br />
* Память: 64 Кб ОЗУ из которых до 32 Кб может использоваться под видеопамять (видеопамять выделяется страницами по 8 Кб), 2 Кб ПЗУ (первоначально объем ПЗУ Вектор-06Ц был 512 байт)<ref name=timosh>{{cite web | url=http://emu80.org/dev/dev_v.html | title=Техническая информация по ПК "Вектор" | language=Russian | accessdate=2007-06-17}}</ref><br />
<br />
=== Видеосистема ===<br />
<br />
[[Файл:Vector-06c-video-memory.png|right|thumb|Видеопамять ПК Вектор-06Ц]]<br />
<br />
Встроенная схема разрядностью 32 бита (при 8-ми битной шине данных). Поддерживаемые видеорежимы:<ref name=timosh/><br />
<br />
* 256×256 пикселов с общей палитрой 256 цветов, из которых одновременно можно задействовать 16<br />
* 512×256 пикселов с палитрой 4 цвета из 256<br />
* 256×256 или 512×256 в монохромном режиме, уменьшенный расход видеопамяти<br />
<br />
Во всех графических режимах аппаратно поддерживается установка любого из 256 цветов общей палитры для установки цвета фона и любого цвета из текущей палитры для окрашивания бордюра.<br />
<br />
Видеопамять организована в виде четырех страниц, или битовых плоскостей, по 8 Кб каждая, которые можно программно включать и отключать. Отключённые плоскости могли быть задействованы как обычная память для программ и данных. Изменяя число задействованных плоскостей видеопамяти можно было получать видеорежимы с разным количеством бит на пиксел. Так, четыре включенных плоскости давали 4 бита на пиксел, то есть 16 одновременно отображаемых цветов. Две одновременно работающих плоскости дают 2 бита на пиксел, 4 цвета. Одна плоскость дает монохромное изображение.<br />
<br />
Аппаратная реализация текстовых режимов отсуствовала. Текстовые режимы эмулировались через графические: чаще всего использовались режимы в 64 или 32 символа в строке, реже 80 символов для различных системных программ. Эмуляция текстовых режимов была облегчена аппаратно реализованной вертикальной прокруткой экрана, которая позволяла мгновенно перемещать изображение вверх или вниз на любое количество строк, не превышающее 255. Эта возможность также использовалась и для реализации специальных эффектов применяемых в играх и демо-программах.<br />
<br />
Нестандартным программированием видеоконтроллера можно было получать различные «спецэффекты», в частности превышение ограничения в 16 одновременно отображаемых цветов.<br />
<br />
В качестве устройства отображения использовался обычный телевизор с подключением по видеовходу, либо монитор.<br />
<br />
=== Звук ===<br />
Встроенная звуковая подсистема выводила звук на одиночный пьезодинамик. Звуковой генератор на базе программируемого таймера [[КР580ВИ53]] позволял синтезировать мелодии с трехголосой [[Полифония|полифонией]]. Позже сторонними разработчиками была адаптирована внешняя схема на аудиоконтроллере [[General Instruments]] [[AY-3-8910]].<br />
<br />
=== Возможности расширения ===<br />
Два разъёма расширения, расположенные на задней стенке компьютера, позволяли подключать различные периферийные устройства. В заводской поставке никаких дополнительных устройств для подключения в эти разъёмы не предлагалось, но их можно было приобрести отдельно.<br />
<br />
=== Хранение данных ===<br />
В качестве внешнего накопителя использовался бытовой кассетный [[магнитофон]] и программы записывались на обычные аудиокассеты. Использовались два способа модуляции: частотная и фазовая. Ёмкость и скорость обмена для 60-ти минутной кассеты была:<br />
* не менее 512 Кб при [[фазовая манипуляция|фазовой манипуляции]] (скорость обмена 1500—2400 бод)<br />
* не менее 360 Кб при [[частотная манипуляция|частотной манипуляции]] (скорость обмена 1200 бод).<br />
Частотная модуляция использовалась в основном в режимах совместимости с форматами других ПК (позволяя считывать с аудиокассет данные, записанные на [[Микроша|Микроше]], [[Радио-86РК]] или [[ZX Spectrum]]. Собственный формат использовал фазовую манипуляцию, как более надёжную и позволяющую увеличить плотность записи.<br />
<br />
Формат записи данных на кассету был интересен тем, что данные разбивались на короткие блоки по 256 байт, каждый из которых был снабжён собственным заголовком. Это позволяло в некоторой степени компенсировать неудобство хранения данных на аудиокассете, когда определить название и размер файла можно было только начав его чтение с начала, то есть перемотав ленту точно на паузу перед заголовком нужного файла. Формат, применённый в «Векторе» не требовал этого и чтение файла с любого места показывало его параметры. Также, при неудачном чтении сбойные блоки можно было перечитать, не повторяя чтение всего файла. При таком медленном и неудобном носителе как магнитная аудиолента подобные возможности значительно повышали удобство использования накопителя.<br />
<br />
Для расширения возможностей хранения данных был запланирован модуль расширения памяти объемом 256 Кб, который назывался «квазидиск» потому что предназначался для использования в качестве дискового накопителя. Для работы с ним была адаптирована операционная система CP/M со всеми возможностями дисковой ОС. Внутренняя архитектура квазидиска обеспечивала доступ к его содержимому в двух основных режимах — как к стеку или как к окну с переключаемыми страницами. Начальная загрузка квазидиска производилась с магнитной ленты. Московская фирма COMAN создала аналогичный кишинёвскому диск объемом 1 Мб.<br />
<br />
В «Векторе» предусматривалось использование 5" или 3,5" [[НГМД|дисковода]] через внешнюю схему контроллера НГМД. Сторонними разработчиками были созданы несколько несовместимых между собой схем контроллеров и адаптированы операционные системы [[CP/M]] и [[МикроДОС]]. Ёмкость дискет была 640 Кб (CP/M) и 800 Кб (CP/M, МикроДОС).<br />
<br />
В период адаптации НГМД появились новые версии стандартного ПЗУ. Был разработан ROM-диск объемом 65 Кб и больше на основе РФ5, который предусматривал возможность переключения микросхем. В то же время радиолюбители проектировали универсальные [[Программатор|программаторы]] ПЗУ для Вектора.<br />
<br />
Позднее появилась схема подключения [[Жёсткий диск|жёсткого диска]] с возможностью разбиения на логические области. И, соответственно, операционная система с поддержкой НЖМД.<br />
<br />
== Программное обеспечение ==<br />
«'''Вектор-06Ц'''» поставлялся с программным обеспечением. В комплекте была одна аудиокассета с несколькими системными программами и играми. Дополнительные программы можно было заказать в фирмах, торговавших компьютерными программами для ПК. В основном это были игры, но также предлагались различные системные и прикладные программы, в частности Бейсик, Паскаль, монитор-отладчик, ассемблер, редакторы текста и графики и др. С появлением схемы контроллера НГМД появилась возможность использования ОС CP/M версии 2.2 и её отечественного клона — ОС МикроДОС. Стало возможным использование значительной части зарубежных программ написанных под ОС CP/M. Например: СУБД dBase II, текстовый процессор WordStar и табличный процессор SuperCalc, компиляторы Си, Ada, Pascal, LISP, Assembler и другие программы.<br />
<br />
Также ПК через эмулятор позволял запускать программы от компьютеров [[Радио 86РК]], [[Микроша]], [[Специалист]]. Путём рекомпиляции с помощью специальных программ адаптировались отдельные программы с [[ZX Spectrum]] и [[MSX]].<ref name=vu2021><br />
{{статья<br />
|автор = Ю. Макринский<br />
|заглавие = Универсальный дизассемблер команд Z80 и 8080<br />
|издание = Vector User<br />
|номер = 20, 21}}<br />
</ref>.<br />
<br />
== Сообщество пользователей ==<br />
«Вектор» держался в тени более распространённых в СССР ПК [[БК-0010]] и клонов [[ZX-Spectrum]]. Но, поскольку превосходил их в ряде параметров, имел значительное число приверженцев. Энтузиастами были адаптированы различные аппаратные и программные решения, такие как расширение памяти (RAM-диск) до 256 Кб/2 Мб (было несколько несовместимых версий от разных авторов), контроллеры звука и НЖМД, системные часы, FM-тюнер и многое другое. Несколько фирм занимались поддержкой ПК и разработкой программ (например московская фирма «Коман»). Самиздатовским способом издавались газеты с аппаратными схемами и описаниями программ: «Коман-Инфо» (фирма «Коман») и «Vector-User» (В. Фиронов),<br />
<ref name=vector_pub>{{cite web | url=http://vector06c.narod.ru/info.html|title=Вектор-06Ц: Электронные издания | language=Russian | accessdate=2007-06-17}}</ref><br />
ряд статей по схемотехнике «Вектора» и аппаратным решениям для него публиковался в журналах [[Радиолюбитель|«Радиолюбитель»]] (в период с 1992 по 1997 годы) и «ПК для всех» (1994 год). Также с распространением интернета появился ряд электронных изданий («Invector», «Владимир Вектор» и др.). В Санкт-Петербурге в середине 90-х (1998, 1999) энтузиастами проводился конкурс «DemosFan», где демонстрировались игры и демо-программы для ПК «Вектор»<br />
<ref name=vector_rant>{{cite web | url=http://vector06c.narod.ru/general.html|title=Вектор-06Ц: О главном| language=Russian | accessdate=2007-06-17}}</ref>.<br />
<br />
== Модификации ==<br />
<br />
Модификации базовой модели «'''Вектор-06Ц'''»: «'''Вектор-06Ц.02'''», «'''Вектор Старт-1200'''», «'''Вектор Турбо+'''».<br />
<br />
«'''Вектор Турбо+'''» был модернизацией заводского варианта '''Вектора-06Ц''', расширяющей его возможности. Доработка включала в себя, в частности, замену процессора КР580ВМ80А на [[Zilog Z80|Z80]] работающий на частотах<br />
3, 6 и 12 МГц, расширение ОЗУ до 1-2 Мб, улучшение характеристик видеоадаптера с максимальным режимом 1024×256 точек при 4 цветах, наличие системных часов, дисковод, клавиатура IBM AT, полноценный контроллер прерываний. Эта разработка предлагалась НПП «Интек», г. Владимир. Согласно электронному изданию InVector № 4, прототип этой системы был создан, но так и не был запущен в серию.<br />
<ref name=vu15><br />
{{статья<br />
|автор = НПП «Интек»<br />
|заглавие = Вектор-Турбо Плюс<br />
|издание = Vector User<br />
|год = 1993<br />
|том = <br />
|номер = 15<br />
|страницы = 4 }}<br />
</ref><br />
<ref name="inv4">{{статья<br />
|автор = Быков В. П.<br />
|заглавие = Новости<br />
|издание = InVector<br />
|год = 1997<br />
|номер = 4}}</ref><br />
<br />
По мотивам «Вектор-06Ц» был создан компьютер [[Криста-2 (компьютер)|Криста-2]], который сохранил частичную совметимость с Вектором. Тактовая частота «Кристы-2» была 2,5 МГц, палитра цветов не перепрограммировалась.<br />
<br />
== Источники и библиография ==<br />
{{reflist}}<br />
<br />
== Эмуляторы ==<br />
* [http://www.emulator3000.org/e3.htm Эмулятор 3000]<br />
* [http://bashkiria-2m.narod.ru/ Башкирия-2М]<br />
* [https://emu80.org/ emu80] от Виктора Пыхонина (Pyk)<br />
* [https://cloud.mail.ru/public/5uyc/2pkicQPoZ Virtual Vector (VV)] от Игоря Титарь (Ramiros)<br />
* [https://github.com/svofski/vector06sdl v06x SDL] от Станислава Славинского (svofski)<br />
* v06x Godot от Станислава Славинского (svofski)<br />
<br />
== Ссылки ==<br />
* Техническое описание: [[Вектор-06Ц/Техническое описание. Версия 1|Версия 1]] • [[Вектор-06Ц/Техническое описание. Версия 2|Версия 2]]<br />
* [[Вектор-06Ц/Instruction Timings|Тайминг инструкций]] • [[Вектор-06Ц/Секреты Вектора|Секреты Вектора]] • [[Вектор-06Ц/Квазидиск|Квазидиск]] • [[Вектор-06Ц/Джойстики|Джойстики]] • [[Вектор-06Ц/Сжатие данных|Сжатие данных]] • [[Вектор-06Ц/Генератор случайных чисел|Генератор случайных чисел]]<br />
<br />
* [http://zx.pk.ru/forumdisplay.php?f=55 zx.pk.ru Вектор] — раздел форума о Векторе<br />
* [http://vector06c.narod.ru vector06c.narod.ru] (недоступен) Большой ресурс о Векторе-06Ц: ПО, техническая документация, архив публикаций<br />
** [http://vector06c.zx-pk.ru/ Зеркало на zx-pk.ru]<br />
* [http://sensi.org/scalar/recent20/ '''Базис'''] — каталог программ и документации<br />
* [http://sensi.org/%7Esvo/vector06c sensi.org/~svo/vector06c] Некоторые публикации и проект «Вектор-06Ц в FPGA»<br />
* [http://code.google.com/p/vector06cc/wiki/Technical_Description Техническое описание]<br />
* http://timsoftf.chat.ru Образы дисков;<br />
* [http://www.forth.org.ru/~af/vector.htm Язык программирования ФОРТ для Вектор-06Ц]<br />
* [http://www.emulator3000.org/rus-vector06c.htm Архив изданий ''Vector User'' и ''Coman Info'']<br />
* http://tmksoft.chat.ru/ (недоступен)<br />
** [https://emuverse.ru/downloads/computers/Vector/sites/tmksoft.chat.ru/ Локальная копия]<br />
* [http://sblive.narod.ru/ZX-Spectrum/Krista2/Krista2.htm Схемы и программы Криста-2]<br />
* [http://bashkiria-2m.narod.ru/index/files/0-11 Софт для Вектора на сайте эмулятора Башкирия-2М]<br />
<br />
== Документация ==<br />
* {{djvu|Вектор Старт-1200. |Руководство программиста|computers/Vector/docs/Vector_Start_1200_Programmers_Manual.djvu}}.<br />
* {{djvu|Вектор Старт-1200. |Альбом схем|computers/Vector/docs/Vector_Start_1200_Schematics.djvu}}. ([http://asdasd.rpg.fi/~svo/scalar/ware/510/ Источник])<br />
<br />
== Файлы ==<br />
* {{rom|Вектор Старт-1200. |Загрузчик и монитор. |computers/Vector/firmware/mon1200.rom}} ([http://zx-pk.ru/showthread.php?t=8636&p=151248&viewfull=1#post151248 Источник])<br />
* {{rom|Вектор Старт-1200. |ПЗУ палитры D75. |computers/Vector/firmware/VS1200_D75_512.BIN}} ([http://zx-pk.ru/showthread.php?t=8636&p=851261&viewfull=1#post851261 Источник])<br />
<br />
[[Категория:Вектор-06Ц|*]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%A3%D0%9A%D0%9D%D0%A6&diff=3551УКНЦ2023-09-18T18:32:48Z<p>Panther: links</p>
<hr />
<div>{{Википедия}}<br />
<br />
'''Электроника УКНЦ''' (также УК-НЦ — «учебный компьютер Научного центра» либо «учебный компьютер — научный центр») — советский учебный компьютер, а также комплект учебной вычислительной техники (КУВТ).<br />
<br />
== ПЗУ ==<br />
{| class="standard"<br />
! ПЗУ || MD5 checksum !! Размер !! Примечания<br />
|-<br />
| КР1801РЕ2-135 || || 8 KB || ПЗУ прототипа УКНЦ<br />
|-<br />
| КР1801РЕ2-136 || || 8 KB || ПЗУ прототипа УКНЦ<br />
|-<br />
| КР1801РЕ2-137 || || 8 KB || ПЗУ прототипа УКНЦ<br />
|-<br />
| КР1801РЕ2-205 || || 8 KB ||<br />
|-<br />
| КР1801РЕ2-206 || || 8 KB ||<br />
|-<br />
| КР1801РЕ2-207 || || 8 KB ||<br />
|-<br />
| КР1801РЕ2-208 || || 8 KB ||<br />
|-<br />
|}<br />
<br />
== Документация ==<br />
* {{pdf}} [https://emuverse.ru/downloads/computers/UKNC/docs/uknc-to.pdf Техническое описание]<br />
* [[УКНЦ Техническое описание прототипа]]<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/UKNC/docs/UKNC_schematics.djvu Комплект схем]<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/UKNC/docs/Electronica_MS_0202_Book_4.djvu Электроника МС 0202. Книга 4]<br />
* [[УКНЦ Устройство КМД УК|Устройство КМД УК]]<br />
* [[К1801ВП1-128|Техническое описание 1801ВП1-128]]<br />
* [[Персональный компьютер УКНЦ|Журнал «Персональный компьютер УКНЦ»]]<br />
* [[УКНЦ Худяков Практика работы с ПП|Худяков Р. К. Практика работы с периферийным процессором]]<br />
* [[УКНЦ Micronet]]<br />
* [[УКНЦ Бейсик Описание языка]] — БЕЙСИК. Описание языка. У1.00031-01 35 01.<br />
* [[УКНЦ Бейсик Руководство программиста]] — БЕЙСИК. Руководство программиста. У1.00031-01 33 01<br />
* [[УКНЦ Бейсик Руководство оператора]] — БЕЙСИК. Руководство оператора. У1.00031-01 34 02<br />
* [[УКНЦ ФОДОС-2 SYSMAC]]<br />
* [[УКНЦ ФОДОС-2 программирование периферии]]<br />
* [[УКНЦ РАФОС SYSMAC]]<br />
* [[УКНЦ RT-11 монитор]]<br />
* [[Ресурсы УКНЦ]] (книга Влада Жигалова)<br />
* [[УКНЦ RAM.LST]] — описание ОЗУ, из документа RAM.LST от Alex_K<br />
* [[УКНЦ ROM disasm]] — листинги дизассемблированного ПЗУ, от Alex_K<br />
* [[УКНЦ БМК]]<br />
<br />
== Эмуляторы ==<br />
* {{www}} https://github.com/nzeemin/ukncbtl — эмулятор UKNCBTL на GitHub, [https://zx-pk.ru/threads/6257-emulyator-uknts.html Эмулятор УКНЦ] обсуждение на форуме<br />
* {{www}} [https://zx-pk.ru/threads/18027-emulyator-uknts-emustudio.html Эмулятор УКНЦ — EmuStudio] — эмулятор dr.Titus<br />
* {{www}} [https://github.com/mamedev/mame/blob/master/src/mame/ussr/uknc.cpp Драйвер uknc] в эмуляторе MESS, нерабочий<br />
* {{www}} [https://nzeemin.github.io/ukncbtl-wasm/index.html?run=1 Онлайн-эмулятор UKNCBTL]<br />
* {{www}} [https://github.com/Chessforeva/UKNC-MS-0511/tree/master/jsUKNC Онлайн-эмулятор УКНЦ]<br />
<br />
== Ссылки ==<br />
* {{www}} http://uknc.narod.ru/ — станица по УКНЦ Арсения Гордина<br />
* {{www}} http://archive.pdp-11.org.ru/ — архив программ и документации для компьютеров УК-НЦ, ДВК и БК<br />
* {{www}} [http://retropc.org/index.html?action=w_razdela&id_razdel=31#c15 Документация на сайте retropc.org]<br />
* {{www}} [http://micklab.ru/MC0511.htm Схема и плата УКНЦ в формате PCAD 2002, отрисовал Mick]<br />
<br />
[[Категория:УКНЦ|*]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%91%D0%9A&diff=3549БК2023-09-18T18:31:43Z<p>Panther: links</p>
<hr />
<div>{{Википедия}}<br />
{{Карточка компьютера<br />
| Photo = [[Изображение:Bk0010-01-sideview.jpg| 320px | БК0010-01]]<br />
| Type = [[Бытовой компьютер]]<br />
| Released = 1985<br />
| Discontinued = <br />
| Processor = [[К1801ВМ1]]<br />
| Chipset = 1801<br />
| Storage = МЛ<br />
| Memory = 32К<br />
| OS = см. [[Операционные системы БК-0010/11]]<br />
}}<br />
'''БК''' — cемейство [[СССР|советских]] 16-разрядных домашних и учебных компьютеров, совместимых по системе команд и частично по архитектуре с [[СМ ЭВМ]], [[PDP-11]] и [[диалоговый вычислительный комплекс|ДВК]].<br />
<br />
Разработан в [[Научный Центр (НПО)|НПО «Научный Центр»]], г.&nbsp;[[Зеленоград]]. Производился серийно на заводе «Экситон», г.&nbsp;[[Павловский Посад]] с [[1985]] года. БК-0010-01 также производился в г.&nbsp;[[Шауляй]] ([[Литва]])<ref>http://avr.nikolaew.org/homekomp.htm</ref> и в Армении. В 1990 г розничная цена на БК-0010-01 в сети фирменных магазинов «Электроника» составляла 650 рублей.<br />
<br />
В качестве дисплея использовался бытовой черно-белый или цветной [[телевизор]] или, реже, специальный монитор, внешней памятью служил бытовой кассетный магнитофон. B дальнейшем, силами любителей, к компьютеру постепенно начала подключаться периферия — [[Компьютерная мышь|мышь]], [[джойстик]], [[принтер]], а ещё позже появилась возможность подключать [[дисковод]]ы и [[Жёсткий диск|жёсткие диски]].<br />
<br />
Компьютеру были посвящёны многочисленные самодеятельные информационные бюллетени (фэнзины) [[БК-ОБЗОР]], журнал «Персональный компьютер БК-0010 БК-0011М» и газета «[[MaD Press]]» и рубрики в научно-популярных журналах<br />
[[Наука и жизнь (журнал)|«Наука и жизнь»]], [[Техника — молодёжи (журнал)|«Техника — молодёжи»]], «Вычислительная техника и её применение», «Микропроцессорные средства и системы»<br />
<ref name=mss><br />
{{статья<br />
|автор = С.М. Косенков, А.Н.Полосин, З.А.Счепицкий, М.И.Дябин, А.И.Половянюк<br />
|заглавие = Бытовая персональная микроЭВМ «Электроника БК-0010»<br />
|издание = Микропроцессорные средства и системы<br />
|год = 1985<br />
|номер = 1<br />
|страницы = 22-25<br />
|ссылка = https://emuverse.ru/downloads/computers/BK/docs/bk-851022-25.djvu}}<br />
</ref><br />
, [[Информатика и образование (журнал)|«Информатика и образование»]].<br />
<br />
В настоящее время с компьютером БК можно ознакомиться с помощью одного из программных [[Эмуляция|эмуляторов]] БК для современных компьютеров.<br />
<br />
<br />
== БК-0010 ==<br />
[[Image:osbk11.png|256px|thumb|ОС БК-11 — единственная операционная система, поддержанная производителем]]<br />
* [[Процессор]]: [[К1801ВМ1]] (аналог LSI-11/03 из семейства [[PDP-11]]) на тактовой частоте 3&nbsp;МГц<br />
* [[Оперативная память]]: 32 КБ, из которых 16 КБ отведено под [[Компьютерная программа|программы]] и данные, и ещё 16&nbsp;КБ — под [[видеопамять]]<br />
* [[Клавиатура]]: пленочная, 92 клавиши; контроллер К1801ВП1-014<br />
* Видео: текстовый режим, чёрно-белый 512 &times; 256 точек, 4-цветный 256 &times; 256 точек; контроллер К1801ВП1-037<br />
* Язык программирования — интерпретатор языка [[Фокал]] в [[ПЗУ]].<br />
* Блок питания для защиты от помех помещался в отдельном корпусе.<br />
* Стандартным устройством хранения данных служил кассетный магнитофон с функцией управления лентопротяжным механизмом, или без неё.<br />
* Параллельный интерфейс ИРПР позволял подключать принтер и другие периферийные устройства<br />
<br />
Конструктив БК-0010 не предусматривал расширения ОЗУ. Периферийные устройства (принтер, НГМД с контроллером) существовали, но в продажу поступали редко и были дефицитными.<br />
<br />
Пленочная клавиатура представляла из себя печатную плату с установленными на ней 92 переключателями ПКН-150, закрытую цветным пленочным шильдом. На шильде были нанесены обозначения клавиш и функциональных зон. Предполагалась возможность замены шильда в соответсвии со спецификой используемого программного обеспечения.<ref name="mss"/><br />
<br />
== БК-0010.01 ==<br />
Вариант БК-0010 с клавишной клавиатурой вместо плёночной и языком Бейсик-86 (BASIC-86), он же «[[вильнюсский бейсик]]» в ПЗУ. Интерпретатор языка Фокал перенесен в ПЗУ специального подключаемого модуля МСТД.<br />
<br />
== БК-0010Ш и БК-0010.01Ш ==<br />
<br />
: ''См. также: [[Комплекс Учебной Вычислительной Техники]]''<br />
<br />
«Школьные» модификации, дополнительно комплектовались блоком ИРПС для соединения в комплекс '''КУВТ-86''', состоящий из [[диалоговый вычислительный комплекс|ДВК]]-2МШ в качестве сервера и двенадцати БК-0010.<br />
<br />
== БК-0011 ==<br />
Появилась в [[1990]] году. Отличия от БК-0010:<br />
* больший объём оперативной памяти — 128 КБ, постраничная организация памяти, две страницы памяти можно было поочерёдно отображать на экран, что обеспечивало мгновенную перерисовку экрана<br />
* процессор стал работать на частоте 4 МГц<br />
* появились экранные палитры<br />
* контроллер дисковода стал входить в стандартную поставку<br />
<br />
== БК-0011M ==<br />
«Электроника МС 0513». Исправленная версия БК-0011. Под БК-11 обычно понимается БК-0011М, так как БК-0011 было выпущено немного. Одно из заметных исправлений — на БК-0011 не работал звук в программах, написанных для БК-0010; в БК-0011М эта ошибка была исправлена.<br />
<br />
== Программное обеспечение ==<br />
[[Изображение:BK-multiboot.png|thumb|256px|Меню бут-менеджера мультизагрузорчного диска с выбором операционной системы]]<br />
{{main|:w:Операционные системы БК-0010/11|Операционные системы БК-0010/11 (статья в Википедии)}}<br />
<br />
Большинство программного обеспечения создавалось самими пользователями (иногда в виде адаптации программ с других ЭВМ близкой архитектуры, например с ДВК) и распространялось путем обмена программами. Существовали также кооперативы, тиражирующие и продающие программы на кассетах (обычно не свои).<br />
<br />
== Мелкие аппаратные доработки ==<br />
<br />
Несколько несложных полезных доработок делалось, как правило, самими пользователями.<br />
<br />
* Кнопка сброса. Некоторые [[Компьютерная программа|программы]] часто [[Зависание|зависали]], не все [[Компьютерная игра|игры]] имели правильно работающую функцию выхода. Без кнопки сброса перезагрузить компьютер можно было выключением и включением питания, но это нередко приводило к преждевременному износу выключателя на блоке питания.<br />
<br />
* Переключатель паузы. Переключатель аппаратно приостанавливал выполнение инструкций процессором. Это было удобно для временной приостановки игр, не имеющих встроенной функции паузы. К сожалению, отдельные игры не возвращались после этого к работе корректно, так как программируемый аппаратный [[Таймер (информатика)|таймер]] в компьютере продолжал работать даже когда выполнение программы центральным процессором было заморожено.<br />
<br />
* Переключатель тактовой частоты процессора (переключатель «турбо»). Позволял изменить [[Тактовая частота|тактовую частоту]] со стандартной 3 МГц (в серии БК-0010*) на 4 либо 6 МГц, или со стандартной 4 МГц (в серии БК-0011*) на 3 либо 6 МГц. Не все экземпляры процессоров надежно работали на частоте 6 МГц; пригодность каждого определялась опытным путем. Изменение тактовой частоты изменяло скорость игрового процесса в динамических играх. Переключатель частоты обычно ставился вместе с переключателем паузы, так как в простейшей схеме переключателя частоты неизбежный дребезг контактов механического переключателя искажал [[Форма сигнала|форму]] тактового синхросигнала и мог привести к зависанию программы в результате сбоя процессора, если процессор не был остановлен на время переключения.<br />
<br />
* Выключатель звука, либо плавный регулятор громкости встроенного [[Пьезоэлектрический эффект|пьезоэлектрического]] динамика. Одновременно в корпус мог быть установлен более громкий динамик.<br />
<br />
<br />
== Источники и библиография ==<br />
{{reflist}}<br />
<br />
<br />
<br />
== Эмуляторы ==<br />
* {{www}} [http://www.emulator3000.org/rus-e3.htm Эмулятор 3000] (Windows, 2004)<br />
* {{www}} http://bashkiria-2m.narod.ru (Windows, развивается) — универсальный эмулятор Дмитрия Целикова<br />
* {{www}} http://code.google.com/p/bk0010/ — реализация БК0010.01 на Altera DE1<br />
* {{zip}} [https://emuverse.ru/downloads/computers/BK/emulators/BK10-DmitryTjurev.zip БК-0010 by Dmitry Tjurev] (MS-DOS, + src-asm);<br />
* {{zip}} БК-0011М от Алексея Савельева (MS-DOS, + утилиты, программы) [https://emuverse.ru/downloads/computers/BK/emulators/emu50b.rar v.&nbsp;5.0], [https://emuverse.ru/downloads/computers/BK/emulators/upg50b2.rar Update 1], [https://emuverse.ru/downloads/computers/BK/emulators/upg52b.zip Update 2], [https://emuverse.ru/downloads/computers/BK/emulators/emulator.rar v.&nbsp;6.04] ;<br />
* {{zip}} [https://emuverse.ru/downloads/computers/BK/emulators/BK11-Samara.zip BK11-Samara] (MS-DOS, 1997)<br />
* {{zip}} http://www.mailcom.com/bk0010/bk-terak-emu.2005.08.26.tar.gz - эмулятор Леонида Брухиса для UNIX и Linux<br />
<br />
== Внешние ссылки ==<br />
* [http://zx.pk.ru/forumdisplay.php?f=59 http://zx.pk.ru/] — раздел форума, посвященный БК;<br />
* http://bk0010.narod.ru — история, документация, публикации, утилиты, программы;<br />
* http://www.bk-001x.land.ru — коллекция эмуляторов, игры, программы, публикации, документация по дисководу;<br />
* http://vanyas.chat.ru/world_bk — коллекция эмуляторов (2000 г.), игры, системные программы;<br />
* http://www.mailcom.com/bk0010 — эмулятор, документация, игры;<br />
* http://bk0010.org (бывший http://bk.default.ru) — эмулятор, утилиты, документация;<br />
* http://bkcrew.narod.ru — эмулятор (MS-DOS), программы;<br />
* [http://boulder-dash.narod.ru/bk_emulator.html http://boulder-dash.narod.ru] — эмулятор (Windows, 2005, +исходники), программы;<br />
* http://bksoft.by.ru — коллекция ссылок на эмуляторы, программы;<br />
* http://bk0010.chat.ru — программы, подборка ссылок;<br />
* http://cplusplus.boom.ru — эмулятор (Windows?), программы;<br />
* [http://sergk.org.ua/mercury/index.html http://sergk.org.ua/mercury] — программы, подборка ссылок;<br />
* http://gazetakpss.narod.ru — электронная версия газеты «КПСС»;<br />
* [http://forum.maxiol.com/index.php?showtopic=989 http://forum.maxiol.com] — большая подборка программ;<br />
* [http://www.vak.ru/doku.php/proj/bk-fpga http://www.vak.ru] — документация;<br />
<br />
* [http://alexxoft.dom.raid.ru/dprogs.htm http://alexxoft.dom.raid.ru] — несколько программ;<br />
* http://www.dataforce.net/~andos/ — домашняя страница ANDOS;<br />
* http://bk0010.leob.com — несколько программ;<br />
* http://bk0011m.listopad.info — Архив Московского клуба БК на Свиблово (образы дисков БК);<br />
* ftp://ftp.komkon.org/pub/EMIL8/BK0010/ — сборник эмуляторов, программы;<br />
<br />
* [http://groups.google.com/group/bk0010 Группа в Google Groups]<br />
* [http://iiorao.ru/iio/pages/history/history_COMP/comp1/ http://iiorao.ru] — история, фотографии;<br />
* [http://old.h1.ru/xussr/0010.shtml http://old.h1.ru] — история;<br />
* [http://www.computerra.ru/hitech/novat/30130/ http://www.computerra.ru] — история;<br />
* [http://www.zolitude.lv/museum/data/exhibits_data/5.htm http://www.zolitude.lv] — история;<br />
* [http://www.users.itl.net.ua/~prool/BK-0010.html http://www.users.itl.net.ua/~prool] — коллекция ссылок;<br />
<br />
* {{www}} http://archive.pdp-11.org.ru/ - Архив программ и документации для компьютеров УК-НЦ, ДВК и БК<br />
<br />
== Документация ==<br />
* [[:Категория:К1801ВМ1|Материалы по ЦП К1801ВМ1]]<br />
* [[БК-0010 - Руководство пользователя]]<br />
* [[БК-0011М - Руководство системного программиста]]<br />
* [[Программирование на БК-0010-01]]<br />
* [[БК: Флоппи-диски 800 килобайт|Техническая информация по подключению дисковода]]<br />
* {{zip}} [https://emuverse.ru/downloads/computers/BK/firmware/BK0010_0011_ROM_sources.rar Исходные тексты ПЗУ БК-0010 и БК-0011, техническое описание БК-0010]<br />
* {{pdf}} [https://emuverse.ru/downloads/computers/BK/docs/bk0010-operating-manual.pdf Руководство по эксплуатации БК-0010/БК-0010-01]<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/BK/docs/bk0010-schematics.djvu Схема БК-0010]<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/BK/docs/bk0011m-schematics.djvu Схема БК-0011М]<br />
* {{djvu}} [https://emuverse.ru/downloads/computers/BK/docs/bk-851022-25.djvu Статья в журнале МСиС №1, 1985]<br />
* [https://emuverse.ru/downloads/computers/BK/docs/BK-0010-interfaces.jpg Распайка внешних кабелей]<br />
* [https://emuverse.ru/downloads/computers/BK/docs/BK-RGB-SCART.png Подключение к цветному телевизору через SCART]<br />
* {{www}} [http://retropc.org/index.html?action=w_razdela&id_razdel=31#c3 Документация на сайте retropc.org]<br />
<br />
[[Категория:БК-0010/11|*]]<br />
<br />
== Файлы ==<br />
* {{rom}} [https://emuverse.ru/downloads/computers/BK/firmware/BK0010.rom Прошивка ПЗУ БК-0010]<br />
* {{rom}} [https://emuverse.ru/downloads/computers/BK/firmware/BK0010_01.rom Прошивка ПЗУ БК-0010.01]<br />
* {{rom}} [https://emuverse.ru/downloads/computers/BK/firmware/BK0011M.rom Прошивка ПЗУ БК-0011М]<br />
* {{rom}} [https://emuverse.ru/downloads/computers/BK/firmware/fdc/ Различные версии прошивок ПЗУ контроллера дисковода]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%90%D0%B3%D0%B0%D1%82&diff=3548Агат2023-09-18T18:28:45Z<p>Panther: links</p>
<hr />
<div>{{Emuverse}}<br />
<br />
'''«Ага́т»''' — советский серийный 8-разрядный персональный компьютер. <br />
<br />
== Документация ==<br />
* [[MOS Technology 6502|Документация на процессор 6502]]<br />
* {{djvu}} {{книга<br />
|автор = Мымрин М. П.<br />
|заглавие = Конструкция, применение, программирование и ремонт ПЭВМ «Агат».<br />
|место = М.<br />
|издательство = Машиностроение, 1990.<br />
|том = <br />
|isbn = <br />
|ссылка = https://emuverse.ru/downloads/computers/Agat/docs/Mymrin.djvu<br />
}}<br />
* {{djvu}} {{книга<br />
|автор = Петров А. О.<br />
|заглавие = Персональные компьютеры семейства Apple II (обзор)<br />
|место = <br />
|издательство = <br />
|том = <br />
|isbn = <br />
|ссылка = https://emuverse.ru/downloads/computers/Agat/docs/petrov-bw.djvu<br />
}}<br />
* Источник: http://www.agat-legacy.narod.ru/<br />
** [https://emuverse.ru/downloads/computers/Agat/docs/agat-legacy.narod.ru/chs.xls Алгоритм расчета контрольной суммы диска Агат-7, Агат-9]<br />
** [https://emuverse.ru/downloads/computers/Agat/docs/agat-legacy.narod.ru/image.xls Формат файла образа диска]<br />
** [https://emuverse.ru/downloads/computers/Agat/docs/agat-legacy.narod.ru/link.xls Интерфейс Агат-PC]<br />
** [https://emuverse.ru/downloads/computers/Agat/docs/agat-legacy.narod.ru/teac.rar Исходный код прошивки контроллера дисковода с комментариями]<br />
* {{www}} http://ssmu.ru/er/agat/Reading/<br />
<br />
== Файлы ==<br />
* Источник: [http://emulator3000.org/e3.htm Эмулятор 3000]<br />
** {{rom}} [https://emuverse.ru/downloads/computers/Agat/firmware/E3000/Agat9.rom Агат-9 ROM]<br />
** {{rom}} [https://emuverse.ru/downloads/computers/Agat/firmware/E3000/Agat9.fnt Агат-9 Font]<br />
** {{rom}} [https://emuverse.ru/downloads/computers/Agat/firmware/E3000/Disk140K.rom Загрузочное ПЗУ контроллера НГМД 140 К]<br />
** {{rom}} [https://emuverse.ru/downloads/computers/Agat/firmware/E3000/Disk1M.rom Загрузочное ПЗУ контроллера НГМД 840 K]<br />
* [https://emuverse.ru/downloads/computers/Agat/emulators/agat!.zip Эмулятор Сергея Гоцуляка] (Кажется, взят с http://www.sergo.pisem.net, уже неработающего)<br />
<br />
== Ссылки ==<br />
* [[w:Агат (компьютер)|статья в Википедии]]<br />
* http://www.agatcomp.ru/ Самый большой архив информации<br />
* http://web.ssmu.ru/er/agat/ Эмулятор, программы, документация<br />
** http://deka18.tsk.ru/er/agat/ (зеркало)<br />
* http://agatemulator.sourceforge.net/ - Эмулятор, информация о компьютере<br />
* http://agat9.narod.ru/ Эмулятор, документация, публикации (полумёртв)<br />
* http://www.agat-legacy.narod.ru/ Программы, немного документации<br />
* http://kasarino.narod.ru/agat/ Два эмулятора и несколько программ<br />
* {{www}} [http://retropc.org/index.html?action=w_razdela&id_razdel=31#c113 Документация на сайте retropc.org]<br />
<br />
[[Категория:Агат]]</div>Pantherhttps://emuverse.ru/w/index.php?title=%D0%9E%D1%80%D0%B8%D0%BE%D0%BD-128&diff=3547Орион-1282023-09-18T18:25:50Z<p>Panther: links</p>
<hr />
<div>{{Википедия}}<br />
<br />
'''«Орион-128»''' — любительский 8-разрядный [[персональный компьютер]]. Разработан радиолюбителями из подмосковья — Вячеславом Сафроновым, Владиславом Сугоняко, Константином Коненковым. Схема и описание компьютера были опубликованы в [[Радио (журнал)|журнале «Радио»]] № 1/[[1990]], другие материалы по теме публиковались в этом журнале до [[1996]] года.<br />
<br />
Технические характеристики:<br />
* Процессор: [[КР580ВМ80А]] на частоте 2,5 МГц, быстродействие 625 тысяч оп/сек.<br />
* Память: [[ОЗУ]] — 128 Кб с возможностью наращивания до 256 Кб, [[ПЗУ]] — 2&nbsp;Kб<br />
* Устройство вывода: телевизор; работа в графическом режиме 384&nbsp;&times;&nbsp;256 точек; 25 строк по 64 символа при использовании стандарного шрифта; цветность: монохромный, 4, 16 цветов<br />
* Внешняя память: бытовой магнитофон, ROM-диск 64 Кб, DD дисковод<br />
* Клавиатура: 64 клавиши в матрице 8*8 плюс 3 отдельных или промышленная клавиатура MS7007<br />
<br />
== Программное обеспечение ==<br />
* Монитор 1/2/3<br />
* Операционные системы: ORDOS 2.40/4.03, [[CP/M]] 2.2, SPDOS, [http://orion-128.narod.ru DSDOS]<br />
* Написанные любителями и адаптированные игры<br />
<br />
== См. также ==<br />
* [[Орион-Про]]<br />
<br />
== Ссылки ==<br />
* [http://emu80.org/ Эмулятор Ориона]<br />
* [http://www.computer-museum.ru/histussr/orion.htm История компьютера «Орион» на сайте Виртуального компьютерного музея]<br />
* <s>[http://orion-z.hoter.ru/ Исполняемые файлы и исходные тексты эмулятора Орион/Z (Орион + Z80), вспомогательных утилит, архивы игр и программ Ориона]</s><br />
* <s>[http://gri.irk.ru/orion/ Сайт эмулятора Ориона на процессоре КР580ВМ80 (i8080)]</s><br />
* <s>[http://orion128.nikom.biz/ Информация о истории и развитии Ориона (документация, программы Ориона)]</s><br />
<br />
== Документация ==<br />
* [[:Категория:Орион-128/Публикации|Публикации в журнале Радио]]<br />
* [[Орион-128/Техническая информация|Техническая информация]]<br />
* [[Орион-128/Радио 12-92/Контроллер НГМД|Контроллер дисковода]] (Вариант 1, SP-DOS)<br />
* [[Орион-128/Радио 05,06-93/СР/М-80. Контроллер дисковода|Контроллер дисковода]] (Вариант 2, CP/M)<br />
* {{djvu}}{{статья<br />
|заглавие = Операционная система СР/М-80 для ПРК «Орион-128»<br />
|издание = журнал «Радиолюбитель»<br />
|номер = 11, 12, 1, 2, 3<br />
|год = 1992, 1993<br />
|ссылка = https://emuverse.ru/downloads/computers/Orion-128/docs/Orion-128_CPM.djvu<br />
}}<br />
* {{djvu}}{{статья<br />
|заглавие = «Орион-128»: контроллер дисковода<br />
|издание = журнал «Радиолюбитель»<br />
|номер = 5-7<br />
|год = 1993<br />
|ссылка = https://emuverse.ru/downloads/computers/Orion-128/docs/Orion-128_FDC.djvu<br />
}}<br />
* [[Орион-128/ZCard-II|Установка Z80]] («Ленинградский вариант», Z80Card-II, ставший стандартом де-факто)<br />
* [[Орион-128/Радио 04,06-96/Z80 CARD|Установка Z80]] («Орион-Сервис», «Московский», Z80Card)<br />
<br />
=== Схемы ===<br />
* {{rar}} [https://emuverse.ru/downloads/computers/Orion-Pro/docs/OrionPro-PCAD.rar Комплект схем]. Авторские схемы в формате PCAD 4.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/Scheme_corrected.png Схема 1]. Оригинал из журнала, с исправлениями.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/Orion_scheme.png Схема 2]. Авторский доработанный вариант.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/ROMDISK_scheme.png ROM-DISK].<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/Z80-1.png Установка Z80]. Авторский вариант, плата в панель ВМ80.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/Z80CardII.png Z80Card-II]. «Ленинградский вариант» Чистякова.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/KTR.png Контроллер дисковода]. Авторский вариант.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/FDC-Altair-Scheme.png Контроллер дисковода]. Вариант «Altair» Чистякова.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/512VI1_orion.GIF RTC]. Часы реального времени. Вариант [http://orion-z.hoter.ru Error404].<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/IDE-RTC.gif IDE+RTC]. «Смоленский» вариант.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/COM-AY.gif COM+AY]. Установка RS-232 и AY-8910.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/scr400x256-AY8910.jpg 400х256+AY]. Отключение 400х256 и AY-8910.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/11MHz-scr480x256-Turbo3,9.jpg Турбо+480х256]. Два турбо-режима и расширенный экран.<br />
* [https://emuverse.ru/downloads/computers/Orion-128/docs/schemes/turbo3,5-kempston-RAM_protect.jpg Турбо+Kempston+RAM]. Турбо-режим, джойстик, полное использование RAM.<br />
<br />
== Файлы ==<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Orion-128/firmware/Orion128_M1.rom Монитор-1]<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Orion-128/firmware/Orion128_M2.rom Монитор-2]<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Orion-128/firmware/Orion128_M31.rom Монитор-3]<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Orion-128/firmware/Orion128_RomDisk1.rom Образ ROM-диска 1]<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Orion-128/firmware/Orion128_RomDisk4.rom Образ ROM-диска 2]<br />
* {{rom}} [https://emuverse.ru/downloads/computers/Orion-128/firmware/RAM_TEST.BIN RAM-TEST]<br />
<br />
[[Категория:Орион-128|*]]</div>Panther