Инструменты пользователя

Инструменты сайта


msx:assembler_programming_guide-fakhrutdinov_bocharov:13

Это старая версия документа!


Первая страницаПредыдущая страницаНазад к обзоруСледующая страницаПоследняя страница

Приложение 3. Листинг программы управления спрайтом

Ниже приводится листинг программы управления спрайтом при помощи джойстика. Если у Вас его нет, можно воспользоваться MSX-мышью. Для работы мыши в режиме джойстика при включении компьютера или устанавливая мышь в разьем, держите нажатой левую кнопку мыши. Программа оттранслирована ассемблером системы DUAD. ``` 'sprite ctrl' Z80-Assembler Page: 1

                    title   'sprite ctrl'
            ; константы

0001 = nospr EQU 1 ; номер активного спрайта 0001 = step EQU 1 ; шаг приращения координат

                    ORG     9000h     ;начальный адрес прог.
            ; вводим номер джойстика

9000 CDC000 CALL 0C0h ;beep 9003 21AEF3 LD HL,0F3AEh ;разм. экр. в screen 0 9006 3628 LD (HL),40 ;width 40 9008 210F01 LD HL,010Fh 900B 22E9F3 LD (0F3E9h),HL;colOR 15,1 900E 21E0F3 LD HL,0F3E0h ;vdp(1) 9011 CBCE SET 1,(HL) ;16*16 9013 CB86 RES 0,(HL) ;норм. размер спрайта 9015 CD6C00 CALL 6Ch ;screen 0 9018 CDCC00 CALL 0CCh ;key off 901B 21F190 LD HL,input ;Введите номер джойс.

            ; вывод сообщения на экран

901E 7E LD a,(HL) 901F B7 OR a ;если код символа = 0, 9020 2806 JR z,l02 ;то закончить вывод 9022 CDA200 CALL 0A2h ;вывод символа (A)

                                      ;на экран

9025 23 INC HL ;адрес след. символа 9026 18F6 JR $-8 ;повторить вывод 9028 CD9F00 l02: CALL 9Fh ;ввести символ с клав. 902B 0600 LD b,0 ;номер джойстика = 0 902D D630 SUB '0' ;проверяем: 902F 280A JR z,l01 ;нажато «0», переходим 9031 04 INC b ;если нет, то джойс.=1 9032 3D DEC a ;нажата «1» 9033 2806 JR z,l01 ;если да, то переходим 9035 04 INC b ;джойстик = 2 9036 3D DEC a ;если нажата «2», 9037 2802 JR z,l01 ;переходим 9039 18ED JR l02 ;иначе вводим снова

            ; создаем шаблон номер NoSpr

903B CD7200 l01: CALL 72h ;screen 2 903E C5 PUSH BC ;сохр. номер джойстика 903F 3E01 LD a,nospr ;грузим номер спрайта 9041 CD8400 CALL 84h ;узнаем адрес шаблона 9044 111191 LD DE,sprdat ;грузим адрес данных 9047 012000 LD BC,32 ;длина данных 904A EB EX DE,HL 904B CD5C00 CALL 5Ch ;перепис. блок во VRAM

            ; выводим спрайт на экран

904E 3E01 putspr: LD a,nospr ;грузим номер спрайта 9050 CD8700 CALL 87h ;узнаем адр.табл.атр. 9053 113191 LD DE,y ;адрес блока данных 9056 010400 LD BC,4 ;длина блока 9059 EB EX DE,HL 905A CD5C00 CALL 5Ch ;пересылаем блок

            ; задержка

905D 110001 LD DE,100h ;кол-во пустых циклов 9060 1B DEC DE 9061 7A LD a,d 9062 B3 OR e 9063 20FB JR nz,$-3 ;если <> 0, то повт.

            ; вводим stick(b)

9065 C1 stick: POP BC ;считыв. номер джойст. 9066 CDB700 CALL 0B7h ;пров., не нажато ли

                                      ;ctrl+STOP

9069 D8 RET c ;если да, то возврат 906A 78 LD a,b ;A = номеру джойстика 906B C5 PUSH BC ;опять сохр. номер дж. 906C CDD500 CALL 0D5h ;вводим напр. джойс. 906F B7 OR a ;если ничего не нажато, 9070 28F3 JR z,stick ;то ввод снова 9072 0E01 LD c,step ;загр. значение шага

            ; вверх

9074 3D DEC a ;нажато вверх ? 9075 2005 JR nz,ur ;если нет, то следующ. 9077 CDBD90 CALL moveUP ;иначе - уменьшение Y 907A 18D2 JR putspr ;и переходим на спр.

            ; вверх/вправо

907C 3D ur: DEC a ;то же, что и выше 907D 2008 JR nz,right 907F CDBD90 CALL moveUP 9082 CDC890 CALL moveRG 9085 18C7 JR putspr

            ; вправо

9087 3D right: DEC a 9088 2005 JR nz,rd 908A CDC890 CALL moveRG 908D 18BF JR putspr

            ; вправо/вниз

908F 3D rd: DEC a 9090 2008 JR nz,down 9092 CDC890 CALL moveRG 9095 CDD690 CALL moveDW 9098 18B4 JR putspr

            ; вниз

909A 3D down: DEC a 909B 2005 JR nz,dl 909D CDD690 CALL moveDW 90A0 18AC JR putspr

            ; вниз/влево

90A2 3D dl: DEC a 90A3 2008 JR nz,left 90A5 CDD690 CALL moveDW 90A8 CDE490 CALL moveLF 90AB 18A1 JR putspr

            ; влево

90AD 3D left: DEC a 90AE 2005 JR nz,lu 90B0 CDE490 CALL moveLF 90B3 1899 JR putspr

            ; влево/вверх

90B5 CDE490 lu: CALL moveLF 90B8 CDBD90 CALL moveUP 90BB 1891 JR putspr

                             
            ; уменьшение ячейки Y на значение шага (в регистре C)

90BD 3A3191 moveUP: LD a,(y) ;A = (Y) 90C0 91 SUB c ;A = A - шаг 90C1 DCEF90 CALL c,lda0 ;если < 0, то A=0 90C4 323191 LD (y),a ;сохраняем A в (Y) 90C7 C9 RET 90C8 3A3291 moveRG: LD a,(x) ;A = (X) 90CB 81 ADD a,c ;A = A + шаг 90CC FEF0 CP 240 ;пров: A<240 ? 90CE 3802 JR c,$+4 ;если нет, 90D0 3EEF LD a,239 ;то A=239 90D2 323291 LD (x),a ;сохраняем А в (X) 90D5 C9 RET 90D6 3A3191 moveDW: LD a,(y) ;A = (Y) 90D9 81 ADD a,c ;A = A + шаг 90DA FEB0 CP 176 ;пров: A<176 90DC 3802 JR c,$+4 ;если нет, 90DE 3EAF LD a,175 ;то A=175 90E0 323191 LD (y),a ;сохраняем A в (Y) 90E3 C9 RET 90E4 3A3291 moveLF: LD a,(x) ;A = (X) 90E7 91 SUB c ;A = A - шаг 90E8 DCEF90 CALL c,lda0 ;если < 0, то A=0 90EB 323291 LD (x),a ;сохраняем A в (X) 90EE C9 RET 90EF AF lda0: XOR a ;A = 0 90F0 C9 RET 90F1 F7D7C5C4 input: DEFB 'Введите номер джойстика (0-2): ',0 90F5 C9D4C520 90F9 CECFCDC5D220C4D6 9101 CFCAD3D4C9CBC120 9109 28302D32293A2000

            ;таблица шаблона номер NOSPR

9111 F0818181 sprdat: DEFB 240,129,129,129,129,1,0,28,0,1,129 9115 8101001C 9119 000181 911C 818180F0 DEFB 129,129,128,240,0,30,2,2,2,2,0,0 9120 001E020202020000 9128 70000002 DEFB 112,0,0,2,2,2,2,30,0 912C 0202021E00

            ; таблица атрибутов спрайта номер NOSPR

9131 58 y: DEFB 88 ;координата Y 9132 80 x: DEFB 128 ;координата X 9133 04 DEFB nospr*4 ;номер шаблона спрайта 9134 0F clrspr: DEFB 15 ;цвет спрайта

                    END

```


Первая страницаПредыдущая страницаНазад к обзоруСледующая страницаПоследняя страница

msx/assembler_programming_guide-fakhrutdinov_bocharov/13.1589200902.txt.gz · Последние изменения: 2020-05-11 15:41 — GreyWolf