|
|||
СПИСОК ЛИТЕРАТУРЫ ⇐ ПредыдущаяСтр 5 из 5 СПИСОК ЛИТЕРАТУРЫ
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 Гц
|
|||
|