Поиск по сайту:


Смотри также:

MSDN по русски. Глобальные функции Windows C++ .NET - Статья.

Пошаговая инструкция по работе с программой P-CAD (ACCEL EDA) - Статья.

Как составить программу для "DENDY" - Статья.

MSDN по русски. Описание классов .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