Как написать игру для ZX Spectrum на ассемблере


         

в канал не разрешен DEC


GETSND LD (N_CHAN),A ;запоминаем номер канала LD A,(IX+7) AND A RET Z ;выход, если вывод в канал не разрешен DEC (IX+8) ;уменьшаем счетчик длительности звука JR NZ,GETS5 LD L,(IX+2) ;текущий адрес основного блока данных LD H,(IX+3) GETS1 LD A,(HL) INC HL AND 3 JR NZ,GETS2 ; Код 0 - возврат на повторение эффекта LD A,(IX+11) ;установка текущего адреса LD (IX+13),A ; данных изменения частоты LD A,(IX+12) ; на начало LD (IX+14),A ; блока LD L,(IX) ;начальный адрес основного LD H,(IX+1) ; блока данных DEC (IX+9) ;уменьшение количества повторений JR NZ,GETS1 XOR A ;завершение звучания в канале LD (IX+7),A ;запрет вывода звука в канал LD (IX+10),A LD A,(N_CHAN) ADD A,8 LD E,A XOR A JP SETREG ;выключение громкости GETS2 DEC A JR NZ,GETS3 ; Код 1 - адрес данных для изменения тона LD A,(HL) ;младший байт адреса LD (IX+11),A INC HL LD A,(HL) ;старший байт адреса LD (IX+12),A INC HL JR GETS1 GETS3 DEC A JR NZ,GETS4 ; Код 2 - адрес данных для формирования огибающей LD A,(HL) ;младший байт адреса LD (IX+15),A LD (IX+17),A INC HL LD A,(HL) ;старший байт адреса LD (IX+16),A LD (IX+18),A INC HL JR GETS1 ; Код 3 - управление выводом тона/шума GETS4 LD A,(HL) ;1 - тон, 8 - шум, 0 - пауза, ; 9 - тон и шум одновременно INC HL AND 9 LD (IX+10),A LD A,(HL) ;продолжительность вывода INC HL LD (IX+8),A LD (IX+2),L LD (IX+3),H ; Восстановление текущего адреса данных для изменения тона LD A,(IX+11) LD (IX+13),A LD A,(IX+12) LD (IX+14),A GETS5 LD L,(IX+13) LD H,(IX+14) GETS6 LD A,(HL) INC HL CP 128 ;задание частоты тона JR NZ,GETS7 LD A,(HL) LD (IX+4),A INC HL LD A,(HL) AND 15 LD (IX+5),A INC HL JR GETS6 GETS7 CP 129 ;задание частоты шума JR NZ,GETS8 LD A,(HL) AND 31 LD (IX+6),A JR GETS6 GETS8 CP 130 ;метка нового начала JR NZ,GETS9 LD (IX+11),L LD (IX+12),H JR GETS6 GETS9 CP 131 ;возврат к началу JR NZ,GETS10 LD L,(IX+11) LD H,(IX+12) JR GETS6 ; Изменение частоты звука или шума GETS10 LD (IX+13),L LD (IX+14),H LD D,0 BIT 7,A JR Z,GETS11 LD D,255 GETS11 LD E,A LD L,(IX+4) LD H,(IX+5) ADD HL,DE LD (IX+4),L LD (IX+5),H ADD A,(IX+6) LD (IX+6),A ; Определение элементов массива DATREG, задающих частоту LD (DATREG+6),A ;частота шума LD A,(N_CHAN) ADD A,A LD E,A LD A,L PUSH HL CALL SETREG ;младший байт частоты тона POP HL INC E LD A,H CALL SETREG ;старший байт частоты тона ; Формирование огибающей LD L,(IX+17) LD H,(IX+18) GETS12 LD A,(HL) INC HL CP 128 ;повторение с начала JR NZ,GETS13 LD L,(IX+15) LD H,(IX+14) JR GETS12 GETS13 LD (IX+17),L LD (IX+18),H AND 15 PUSH AF LD A,(N_CHAN) ADD A,8 LD E,A POP AF JP SETREG ;задание громкости звука


Содержание  Назад  Вперед