Поиск по сайту:
MSDN по русски. Глобальные функции Windows C++ .NET - Статья.
Как составить программу для "DENDY" - Статья.
Субтрактивные цветовые модели - Статья.
Новая таблица умножения - Статья.
1 Общие сведения
2 Внутреннее устройство "Dendy"
3 Центральный процессор
3.1 Семейство микропроцессоров MCS65xx
3.2 Распределение адресного пространства ЦП
4 Видеопроцессор
4.1 Распределение адресного пространства ВП
4.2 Структура ВП
4.3 Формирование изображений
4.4 Структура спрайтов
4.5 Цветовые возможности
5 Организация портов, задействованных при работе ГИТС
5.1 Порты джойстиков
5.2 Порты музыкального сопроцессора
5.3 Порт прямого доступа в память
5.4 Порты видеопроцессора
5.5 Порты, расположенные в картридже
6 Программирование в машинных кодах процессора MCS6502
7 Методика составления программы для ГИТС
8 Программы-эмуляторы
9 Разновидности телевизионных тестов
Список литературы
Приложение А - Ассемблерный листинг программы S-ROM (DS1)
8 ПРОГРАММЫ-ЭМУЛЯТОРЫ
Можно ли увидеть результаты изменений в программе, не прошивая РПЗУ? Оказывается, можно. Для этого необходимо иметь IBM-совместимый компьютер не ниже Pentium-120 с объемом памяти не менее 4 Мб и звуковой картой. Еще потребуется одна из программ-эмуляторов, например, FCE-Ultra, RockNES, Nester, бесплатные версии которых можно скачать с сайта http://emu-russia.km.ru. “Старинный” DOS-эмулятор Nesticle использовать не рекомендуется, поскольку в нем не совсем корректно выполнена процедура выхода из немаскируемого прерывания.
Кроме того, необходимо перевести бинарные файлы прошивок S-ROM и V-ROM (ГИТС) в специальный формат, понятный эмулятору. Таких форматов существует несколько типов: iNES формат (расширение .nes), Famicom Disk System (расширения .dka, .dkb, .500), dNESe формат, fwNES формат. Самый распространенный из них - это формат iNES и соответственно файлы с расширением .nes. Структура типичного файла .nes приведена в приложении В настоящего документа.
Для ориентира, первые 16 байтов отводятся под загрузчик (хэддер). Для прошивки ГИТС он будет иметь вид: <4E 45 53 1A 01 01 00 00 00 00 00 00 00 00 00 00>.
После успешной отработки данной методики можно приступить к творческому процессу создания своего собственного телевизионного теста. О том, какие существуют тесты и что проверяют с их помощью, пойдет речь дальше.
9 РАЗНОВИДНОСТИ ТЕЛЕВИЗИОННЫХ ТЕСТОВ
В радиолюбительской литературе опубликовано большое количество схем самодельных генераторов телевизионных сигналов. Их классификация и возможности подробно изложены в [9]. Методика настройки с их помощью приводится буквально в каждом справочнике по ремонту телевизоров.
Преимуществом ГИТС на базе “Dendy” является универсальность и оперативность, поскольку в любой момент времени можно заменой РПЗУ добавить новый тест или изменить существующий. Программным путем легко создать практически любую испытательную картинку для комплексной проверки телевизора. Для лучшего представления о возможностях испытательных сигналов ниже приводится обобщенная информация.
1) Сигнал “равномерно светящееся поле” предназначен для регулировки статического баланса белого, чистоты цвета, установки оптимального электрического режима кинескопа, проверки цепей стабилизации высокого напряжения.
2) Сигналы “точечное поле”, “сетчатое поле”, “шахматное поле” должны быть геометрически синхронизированы между собой, в частности, точки должны совпадать с вершинами квадратных ячеек. Желательно иметь их прямые и инвертированные разновидности. Наблюдая попеременно изображения перечисленных сигналов, можно визуально проконтролировать работу устройств стабилизации размеров кадра. Также эти сигналы предназначены для установки формата изображения и его центрирования, проверки нелинейных и геометрических искажений растра, статического и динамического сведения лучей, фокусировки в центре и по краях, проверки общей работоспособности телевизора.
3) Сигнал “шкала серого” или “градации серого” предназначен для проверки правильности воспроизведения полутонов, динамического баланса белого, точности фиксации уровня черного, установки контрастности, контроля подавления цветовой поднесущей при разных уровнях яркости. В ГИТС имеется следующая шкала градаций яркости: 0, 25, 50, 75, 100%.
4) Сигнал “мелкие вертикальные полосы” предназначен для оценки полосы пропускания канала изображения, регулировки четкости, проверки прохождения ВЧ-составляющих телевизионного сигнала.
5) Сигналы “горизонтальные черно-белые полосы” и “вертикальные черно-белые полосы” предназначены для проверки переходных искажений в канале яркости, точности фиксации уровня черного, регулировки яркости и контрастности изображения.
6) Сигналы “горизонтальные цветные полосы” и “вертикальные цветные полосы” предназначены для проверки правильности воспроизведения основных и дополнительных цветов, насыщенности в смежных строках, равенства уровней прямого и задержанного сигналов, настройка НЧ- и ВЧ-предыскажений, проверки правильности матрицирования, устойчивости работы устройств цветовой синхронизации.
Рассматриваемый генератор вырабатывает телевизионный сигнал формата PAL, поэтому необходимо обращать внимание на структуру искажений и помех, являющихся специфическими для данного формата:
- “дифференциальное усиление” – нежелательное относительное изменение размаха сигнала цветности при изменении мгновенного значения сигнала яркости;
- “дифференциальная фаза” – нежелательное относительное изменение фазы сигнала цветности при изменении мгновенного значения сигнала яркости;
- “квадратурные искажения” – нарушение квадратурности составляющих сигнала цветности и, как следствие, возникновение между ними перекрестных искажений.
Перечисленные сигналы относятся к числу основных и наиболее простых для формирования. Более сложными являются цветные комплексные испытательные таблицы типа УЭИТ и ТИТ, подобные тем, что передаются из телецентров. Их аналоги можно сформировать при помощи ГИТС, предварительно нарисовав на бумаге всю структуру изображения, включая графику каждого из 960 блоков экрана. Двух фонтов формирования пейзажа должно хватить на самый изощренный рисунок испытательной таблицы, включая круг в центре экрана. На каждое такое изображение потребуется 1 Кб памяти S-ROM, итого в микросхеме КР573РФ6А должно поместиться 7 комплексных таблиц, а с уплотнением информации – еще больше.
1 Рюмик С. “Dendy” – генератор испытательных телевизионных сигналов. - Радио, 2001, №8, с.26-28.
2 Бычик В. Вторгаемся в “Денди”. - Радиолюбитель, 1994, №10, с.9.
3 Веремеенко C. Dendy под микроскопом. – Радиолюбитель. Ваш компьютер, 1996, №2, с.24, 25; №3, с.22-24; №4, с.24-26.
4 Веремеенко С. Подробнее о видеопроцессоре Dendy. – Радиолюбитель. Ваш компьютер, 1996, №9, с.25-27.
5 Рюмик С. Особенности схемотехники восьмибитных видеоприставок. - Радио, 1997, №10, с.27-30; № 12, с.20-23.
6 Рюмик С. Подключение DENDY-картриджей к IBM PC. – Радiоаматор, 2000, №4, с.38, 39; №5, с.38, 39; №6, с.44, 45.
7 Мымрин М.П. Конструкция, применение, программирование и ремонт ПЭВМ “Агат”. – М.: Машиностроение, 1990. – 370 с.
8 Морер У. Язык ассемблера для персонального компьютера Эпл: Пер. с англ. – М.: Мир, 1987. – 430 с.
9 Гапличук Л.С. ГИС – помощник телемастера: Справочное пособие – Киев: МП “СЭА”: “Радiоаматор”, 1993. – 160 с.
10 Рюмик С. ГИТС-2 на базе “Dendy”. - Радио, 2002, № 10.
----------------------------------------------------------------------------------------------------------------
ПРИЛОЖЕНИЕ А
АССЕМБЛЕРНЫЙ ЛИСТИНГ ПРОГРАММЫ S-ROM (DS1)
(Программа распространяется на условиях “freeware” для использования в личных, но не коммерческих целях. Коды прошивок РПЗУ микросхемы DS1 приведены в [1])
0001 0000 n00 .EQU $0300 ; Начало ОЗУ пользователя
0002 0000 n20 .EQU $0320 ; Ячейка опроса джойстика-0
0003 0000 n24 .EQU $0324 ; Общий атрибут пейзажа
0004 0000 n25 .EQU $0325 ; Номер элемента пейзажа
0005 0000 n28 .EQU $0328 ; Ячейка номера теста
0006 0000 n2A .EQU $032A ; Ячейка для кнопки "START"
0007 0000 n2B .EQU $032B ; Ячейка для кнопки "SELECT"
0008 0000 n2C .EQU $032C ; Ячейка насыщенности цвета
0009 0000 n2D .EQU $032D ; Ячейка смены “START-SELECT”
0010 0000 n80 .EQU $0380 ; Буфер для атрибута пейзажа
0011 0000 nF0 .EQU $03F0 ; Буфер для RG03
0012 0000 nF1 .EQU $03F1 ; Буфер для RG07
0013 0000 nF2 .EQU $03F2 ; Буфер для RG0B
0014 0000 nF3 .EQU $03F3 ; Буфер для RG0F
0015 0000 r0 .EQU $2000 ; Регистр состояния 2000h
0016 0000 r1 .EQU $2001 ; Регистр режимов 2001h
0017 0000 r2 .EQU $2002 ; Регистр синхронизации 2002h
0018 0000 r3 .EQU $2003 ; Рег.адреса ОЗУ спрайт. 2003h
0019 0000 r5 .EQU $2005 ; Регистр скроллинга 2005h
0020 0000 r6 .EQU $2006 ; Рег. адреса ОЗУ пейз. 2006h
0021 0000 r7 .EQU $2007 ; Рег. данных ОЗУ пейз. 2007h
0022 0000 ekr24 .EQU $24 ; Начало области видео-ОЗУ
0023 0000 ekr27 .EQU $27 ; Окончание области видео-ОЗУ
0024 0000 ;
0025 83C0 start .ORG $83C0 ; Начало размещения программы
0026 83C0 ; Таблица байтов для вертикальных полос-1, -2
0027 83C0 FF FF AA AA .BYTE $FF,$FF,$AA,$AA
0028 83C4 55 55 00 00 .BYTE $55,$55,$00,$00
0029 83C8 FF FF AA AA .BYTE $FF,$FF,$AA,$AA
0030 83CC 55 55 00 00 .BYTE $55,$55,$00,$00
0031 83D0 FF FF AA AA .BYTE $FF,$FF,$AA,$AA
0032 83D4 55 55 00 00 .BYTE $55,$55,$00,$00
0033 83D8 FF FF AA AA .BYTE $FF,$FF,$AA,$AA
0034 83DC 55 55 00 00 .BYTE $55,$55,$00,$00
0035 83E0 FF FF AA AA .BYTE $FF,$FF,$AA,$AA
0036 83E4 55 55 00 00 .BYTE $55,$55,$00,$00
0037 83E8 FF FF AA AA .BYTE $FF,$FF,$AA,$AA
0038 83EC 55 55 00 00 .BYTE $55,$55,$00,$00
0039 83F0 FF FF AA AA .BYTE $FF,$FF,$AA,$AA
0040 83F4 55 55 00 00 .BYTE $55,$55,$00,$00
0041 83F8 FF FF AA AA .BYTE $FF,$FF,$AA,$AA
0042 83FC 55 55 00 00 .BYTE $55,$55,$00,$00
0043 8400 ; Таблица байтов для горизонтальных полос-1, -2
0044 8400 FF FF FF FF .BYTE $FF,$FF,$FF,$FF
0045 8404 FF FF FF FF .BYTE $FF,$FF,$FF,$FF
0046 8408 FF FF FF FF .BYTE $FF,$FF,$FF,$FF
0047 840C FF FF FF FF .BYTE $FF,$FF,$FF,$FF
0048 8410 AA AA AA AA .BYTE $AA,$AA,$AA,$AA
0049 8414 AA AA AA AA .BYTE $AA,$AA,$AA,$AA
0050 8418 AA AA AA AA .BYTE $AA,$AA,$AA,$AA
0051 841C AA AA AA AA .BYTE $AA,$AA,$AA,$AA
0052 8420 55 55 55 55 .BYTE $55,$55,$55,$55
0053 8424 55 55 55 55 .BYTE $55,$55,$55,$55
0054 8428 55 55 55 55 .BYTE $55,$55,$55,$55
0055 842C 55 55 55 55 .BYTE $55,$55,$55,$55
0056 8430 00 00 00 00 .BYTE $00,$00,$00,$00
0057 8434 00 00 00 00 .BYTE $00,$00,$00,$00
0058 8438 00 00 00 00 .BYTE $00,$00,$00,$00
0059 843C 00 00 00 00 .BYTE $00,$00,$00,$00
0060 8440 ; Таблица байтов, определяющих чередование цветов
0061 8440 3E 00 10 20 .BYTE $3E,$00,$10,$20 ; градации яркости-1
0062 8444 00 10 20 30 .BYTE $00,$10,$20,$30 ; градации яркости-2
0063 8448 02 06 09 00 .BYTE $02,$06,$09,$00 ; верт., гор. полосы-1
0064 844C 04 08 0C 00 .BYTE $04,$08,$0C,$00 ; вертикальн. полосы-2
0065 8450 01 07 0B 00 .BYTE $01,$07,$0B,$00 ; горизонтал. полосы-2
0066 8454 ;
0067 8454 ; Подпрограмма обработки немаскируемых прерываний NMI
0068 8454 ;
0069 8454 48 PHA ; Занесение регистра А в стек
0070 8455 8A TXA
0071 8456 48 PHA ; Занесение регистра Х в стек
0072 8457 98 TYA
0073 8458 48 PHA ; Занесение регистра Y в стек
0074 8459 08 PHP ; Занесение рег. сост. в стек
0075 845A A9 00 LDA # $00 ; Установка адреса начала
0076 845C 8D 03 20 STA r3 ; области размещения ОЗУ
0077 845F A9 02 LDA # $02 ; спрайтов 0200h (стандарт.
0078 8461 8D 14 40 STA $4014 ; прием)
0079 8464 20 6E 84 JSR joy ; Подпрограмма опроса джойст.
0080 8467 28 PLP ; Извлеч. рег. сост. из стека
0081 8468 68 PLA ; Извлеч. регистра Y из стека
0082 8469 A8 TAY
0083 846A 68 PLA ; Извлеч. регистра X из стека
0084 846B AA TAX
0085 846C 68 PLA ; Извлеч. регистра A из стека
0086 846D 40 RTI ; Возврат из прерывания
0087 846E ;
0088 846E ; Подпрограмма опроса состояния джойстиков
0089 846E ; (джойстик-0 - основной, джойстик-1 - дополнительный)
0090 846E A2 01 joy LDX # $01 ; Предварительное
0091 8470 8E 16 40 STX $4016 ; занесение в
0092 8473 A9 00 LDA # $00 ; порт 4016h
0093 8475 8D 16 40 STA $4016 ; кодов "01h", "00h"
0094 8478 9D 20 03 j2 STA n20,X ; Обнуление яч. 0321h (0320h)
0095 847B A0 08 LDY # $08 ; Регистр Y - счетчик байтов
0096 847D BD 16 40 j1 LDA $4016,X ; Опрос сост. джойстика-1 (-0)
0097 8480 29 03 AND # $03 ; Маска от ложных срабатываний
0098 8482 C9 01 CMP # $01 ; Выделение младшего разряда
0099 8484 3E 20 03 ROL n20,X ; Циклический сдвиг влево
0100 8487 88 DEY ; Переход к следующему байту
0101 8488 D0 F3 BNE j1 ; Проверка количества байтов
0102 848A A9 00 LDA # $00 ; Обнуление аккумулятора
0103 848C CA DEX ; Переход к джойстику-0
0104 848D 10 E9 BPL j2 ; Повторение для джойстика-0
0105 848F 60 RTS ; Выход из подпрограммы
0106 8490 ;
0107 8490 ; Начало основной программы ("холодный" старт)
0108 8490 ;
0109 8490 D8 CLD ; Сброс десятичного режима
0110 8491 78 SEI ; Запрет маск. прерываний INT
0111 8492 A9 00 LDA # $00 ; Обнуление аккумулятора
0112 8494 8D 00 20 STA r0 ; Запрет немаск. прерыв. NMI
0113 8497 8D 01 20 STA r1 ; Запрет спрайтов, пейзажа
0114 849A A2 FF LDX # $FF
0115 849C 9A TXS ; Вершина стека - в яч. 01FFh
0116 849D AD 02 20 a1 LDA r2
0117 84A0 10 FB BPL a1 ; Задержка до прерывания NMI
0118 84A2 20 08 85 JSR atest ; Тест ОЗУ, инициализация
0119 84A5 20 31 85 JSR apeiz ; Загрузка пейзажа 960 байт
0120 84A8 20 53 85 JSR aatrp ; Атрибуты пейзажа 64 байт
0121 84AB 20 69 85 JSR arg ; Загрузка регистров цвета
0122 84AE 20 7E 85 JSR azvuk ; Звук "плим"
0123 84B1 20 D7 85 a8027 JSR aopen ; Разрешение прерываний
0124 84B4 20 EA 85 JSR ajst ; Опрос кнопок джойстиков
0125 84B7 20 D9 87 JSR atime ; Звук и задержка
0126 84BA AD 28 03 a8030 LDA n28 ; В рег. А - номер теста
0127 84BD 10 0B BPL a8040 ; Проверка смены тестов
0128 84BF A9 15 LDA # $15 ; Номер старшего теста
0129 84C1 8D 28 03 a8037 STA n28
0130 84C4 20 7E 85 JSR azvuk ; Звук "плим"
0131 84C7 4C BA 84 JMP a8030 ; Возврат в начало опроса
0132 84CA C9 0E a8040 CMP # $0E
0133 84CC 30 1F BMI b0D ; Однотонный цвет экрана
0134 84CE F0 20 BEQ b0E ; Вертикальные полосы-1
0135 84D0 38 SEC
0136 84D1 E9 0F SBC # $0F ; Сокращение длины программы
0137 84D3 AA TAX
0138 84D4 F0 1D BEQ b0F ; Вертикальные полосы-2
0139 84D6 CA DEX
0140 84D7 F0 1D BEQ b10 ; Горизонтальные полосы-1
0141 84D9 CA DEX
0142 84DA F0 1D BEQ b11 ; Горизонтальные полосы-2
0143 84DC CA DEX
0144 84DD F0 1D BEQ b12 ; Градации яркости-1
0145 84DF CA DEX
0146 84E0 F0 1D BEQ b13 ; Градации яркости-2
0147 84E2 CA DEX
0148 84E3 F0 1D BEQ b14 ; Шахматное поле
0149 84E5 CA DEX
0150 84E6 F0 1D BEQ b15 ; Сетчатое поле
0151 84E8 A9 00 LDA # $00
0152 84EA 4C C1 84 JMP a8037
0153 84ED 4C 82 86 b0D JMP c0D ; Однотонный цвет экрана
0154 84F0 4C A9 86 b0E JMP c0E ; Вертикальные полосы-1
0155 84F3 4C B7 86 b0F JMP c0F ; Вертикальные полосы-2
0156 84F6 4C C5 86 b10 JMP c10 ; Горизонтальные полосы-1
0157 84F9 4C DE 86 b11 JMP c11 ; Горизонтальные полосы-2
0158 84FC 4C 8B 86 b12 JMP c12 ; Градации яркости-1
0159 84FF 4C EC 86 b13 JMP c13 ; Градации яркости-2
0160 8502 4C FA 86 b14 JMP c14 ; Шахматное поле
0161 8505 4C 74 87 b15 JMP c15 ; Сетчатое поле
0162 8508 ;
0163 8508 ; Подпрограмма тестирования рабочей области ОЗУ
0164 8508 ; пользователя 0300-03FFh и начальная инициализация
0165 8508 ;
0166 8508 A9 55 atest LDA # $55 ; Занесение во все
0167 850A A0 02 LDY # $02 ; тестируемые ячейки
0168 850C A2 00 LDX # $00 ; памяти 0300-03FFh
0169 850E 9D 00 03 at1 STA n00,X ; кода 55h
0170 8511 DD 00 03 at2 CMP n00,X ; Проверка результата
0171 8514 D0 FB BNE at2 ; Зацикливание при ошибке
0172 8516 E8 INX
0173 8517 D0 F5 BNE at1
0174 8519 A9 AA LDA # $AA ; Смена кода на AAh
0175 851B 88 DEY
0176 851C D0 F0 BNE at1 ; Повтор проверки
0177 851E A9 00 LDA # $00 ; Обнуление аккумулятора
0178 8520 9D 00 03 at3 STA n00,X ; Начальное занесение
0179 8523 E8 INX ; кода 00h
0180 8524 D0 FA BNE at3 ; по адресам 0300-03FFh
0181 8526 A9 FF LDA # $FF
0182 8528 8D 24 03 STA n24 ; Однородные атрибуты пейзажа
0183 852B A9 10 LDA # $10
0184 852D 8D 2C 03 STA n2C ; Насыщенность уменьшена
0185 8530 60 RTS ; Выход из подпрограммы
0186 8531 ;
0187 8531 ; Подпрограмма заполнения области пейзажа 960 байтов
0188 8531 ;
0189 8531 A9 24 apeiz LDA # ekr24 ; Начало ОЗУ пейзажа
0190 8533 8D 06 20 STA r6 ; пейзажа
0191 8536 A9 00 LDA # $00 ; устанавливается
0192 8538 8D 06 20 STA r6 ; равным 2400h
0193 853B AA TAX ; Обнуление регистра Х
0194 853C AD 25 03 LDA n25 ; Номер элемента пейзажа
0195 853F A0 03 LDY # $03 ; Y - счетчик
0196 8541 8D 07 20 ap1 STA r7 ; Заполнение области
0197 8544 CA DEX ; 2400-26FFh
0198 8545 D0 FA BNE ap1 ; байтами с номером
0199 8547 88 DEY ; выбранного элемента
0200 8548 D0 F7 BNE ap1 ; пейзажа
0201 854A 8D 07 20 ap2 STA r7
0202 854D E8 INX
0203 854E E0 C0 CPX # $C0 ; Проверка на достижение
0204 8550 D0 F8 BNE ap2 ; адреса 27С0h
0205 8552 60 RTS ; Выход из подпрограммы
0206 8553 ;
0207 8553 ; Подпрограмма заполнения атрибутов пейзажа 64 байта
0208 8553 ;
0209 8553 A9 27 aatrp LDA # ekr27 ; Начало ОЗУ атрибутов
0210 8555 8D 06 20 STA r6 ; пейзажа
0211 8558 A9 C0 LDA # $C0 ; устанавливается
0212 855A 8D 06 20 STA r6 ; равным 27C0h
0213 855D AD 24 03 LDA n24 ; Код атрибутов пейзажа
0214 8560 A2 40 LDX # $40 ; Количество байтов (64)
0215 8562 8D 07 20 aa1 STA r7
0216 8565 CA DEX
0217 8566 D0 FA BNE aa1 ; Проверка адреса 2800h
0218 8568 60 RTS ; Выход из подпрограммы
0219 8569 ;
0220 8569 ; Подпрограмма групповой загрузки регистров цвета
0221 8569 ;
0222 8569 A9 00 arg LDA # $00 ; Обнуление аккумулятора
0223 856B A2 3F a81C2 LDX # $3F ; Точка входа (А - код цвета)
0224 856D 8E 06 20 STX r6
0225 8570 A2 00 LDX # $00
0226 8572 8E 06 20 STX r6
0227 8575 A0 20 LDY # $20 ; Область 3F00-3F1Fh
0228 8577 8D 07 20 ar1 STA r7 ; заполняется кодом,
0229 857A 88 DEY ; который содержится
0230 857B D0 FA BNE ar1 ; в регистре А
0231 857D 60 RTS ; Выход из подпрограммы
0232 857E ;
0233 857E ; Подпрограммы звука
0234 857E ;
0235 857E A9 02 azvuk LDA # $02 ; Загрузка регистров
0236 8580 8D 15 40 STA $4015 ; 4015h, 4004-4007h
0237 8583 A9 3F LDA # $3F ; для извлечения звука
0238 8585 8D 04 40 STA $4004 ; "плим"
0239 8588 A9 9A LDA # $9A
0240 858A 8D 05 40 STA $4005
0241 858D A9 FF LDA # $FF
0242 858F 8D 06 40 STA $4006
0243 8592 A9 00 LDA # $00
0244 8594 8D 07 40 STA $4007
0245 8597 60 RTS ; Выход из подпрограммы
0246 8598 A9 03 abip1 LDA # $03 ; Вход для звука "бип"
0247 859A 8D 2D 03 STA n2D ; Переключение START-SELECT
0248 859D 8D 15 40 STA $4015 ; Загрузка регистров
0249 85A0 A9 F0 LDA # $F0 ; 4015h, 4000-4003h
0250 85A2 8D 02 40 STA $4002 ; для извлечения звука
0251 85A5 A9 87 LDA # $87 ; "бип"
0252 85A7 8D 00 40 ab1 STA $4000
0253 85AA A9 80 LDA # $80
0254 85AC 8D 01 40 STA $4001
0255 85AF A9 00 LDA # $00
0256 85B1 8D 03 40 STA $4003
0257 85B4 60 RTS ; Возврат из подпрограммы
0258 85B5 20 C5 85 abip2 JSR az1 ; Вход для звука "пила"
0259 85B8 A9 20 LDA # $20
0260 85BA 4C A7 85 JMP ab1
0261 85BD 20 C5 85 abip3 JSR az1 ; Вход для непрерывного звука
0262 85C0 A9 3E LDA # $3E
0263 85C2 4C A7 85 JMP ab1
0264 85C5 ; Общая часть формирования звуков
0265 85C5 A9 03 az1 LDA # $03
0266 85C7 8D 15 40 STA $4015
0267 85CA A9 C0 LDA # $C0 ; Частота 500 Гц
02