PDA

Просмотр полной версии : Дайте плиз заглушку всех каналов AY



Shadow Maker
12.08.2008, 19:36
Ток максимально короткую, а то у меня какой-то монстр получился.

himik
12.08.2008, 20:13
Ток максимально короткую, а то у меня какой-то монстр получился.

вот, накодил наскоряк.
особо за сокращением не гнался.


FX_OFF LD C,#FD
XOR A
LD E,A
FXF1 LD B,#FF
OUT (C),A
LD B,#BF
OUT (C),E
INC A
CP #0F
JR NZ,FXF1
RET


Добавлено через 6 минут
Собсна пришлолось всеже себя заставить покодить малость иначе :)


FX_OFF
LD D,#0F
FX_OFF1 LD BC,#FFFD
OUT (C),D
LD B,#BF
OUT (C),0
DEC D
JP P,FX_OFF1
RET


правда у этого кода есть недокументированная команда OUT (c),0.
шобы ее избежать, придеца добавить команды:


FX_OFF
XOR A
LD D,#0F
FX_OFF1 LD BC,#FFFD
OUT (C),D
LD B,#BF
OUT (C),A
DEC D
JP P,FX_OFF1
RET

Barmaley_m
13.08.2008, 20:59
На КМОП-версиях Z80 команда OUT (C),0 может работать как OUT (C),#FF, так что лучше ею не пользоваться, от греха.

Evgeny Muchkin
15.08.2008, 12:38
На КМОП-версиях Z80 команда OUT (C),0 может работать как OUT (C),#FF, так что лучше ею не пользоваться, от греха.

Я бы даже, наверное, добавил, что не просто может, а именно так на кмосах она и работает. :)

Grand
16.08.2008, 01:11
LD DE,#FF07
CALL $+6
LD DE,#000D
LD BC,#FFFD
OUT (C),E
LD B,#BF
OUT (C),D
RET

Shadow Maker
16.08.2008, 02:52
Вот и я чото типа этого изначально покодил, только развернутую. У Химика все равно получилось компактней по размеру и использованию стека.

valeron
16.08.2008, 15:00
Я бы даже, наверное, добавил, что не просто может, а именно так на кмосах она и работает. :)

По поводу OUT (C),0 - откуда информация? Как тогда OUT (C),FF действует? И если нужно именно ноль вывести, то как тогда, через аккумулятор что ли? И как тогда ведут себя другие варианты, например OUT (C),1?

ЗЫ. Сори, не внимательно читал, команда то недокументированная. Вопрос снят.

himik
16.08.2008, 15:02
LD DE,#FF07
CALL $+6
LD DE,#000D
LD BC,#FFFD
OUT (C),E
LD B,#BF
OUT (C),D
RET

у данной процедуры есть пара недостатков:
1. она глушит микшер и генератор огибающей, но не гасит данные остальных регистров. Задача была всех :)
2. если после отработки такой процедуры попадет что-либо в регистр микшера, то мы услышим звук, исходя из последних данных регистров тона и шума. На мой взгляд это будет не корректно.

Добавлено через 4 минуты

По поводу OUT (C),0 - откуда информация? Как тогда OUT (C),FF действует? И если нужно именно ноль вывести, то как тогда, через аккумулятор что ли? И как тогда ведут себя другие варианты, например OUT (C),1?

э... что-то мой мозг сразу опух в процессе вспоминания ассёмблера :)
по моему таких команд как out (c),N - нет :)
Есть одна недокументированная команда, OUT (C),0 - но она, как описано выше работает по разному на разных типах проца. И это факт, который встречался нам в жизни, в далекие 90-е... Пара игрушек с защитами русских умельцев просто не запускались, а виной всему было именно использование команды OUT (C),0 - которая у нас работала как OUT (C),#FF. Если мне память не изменяет, даже в настройках Unreal Speccy есть пунктик про эмуляцию этой команды, которая указывает, что именно делать 0 или FF. :)
А OUT (C),1 - такой команды нет ваще :)

Grand
16.08.2008, 23:16
у данной процедуры есть пара недостатков: ...
Вот не знал. :O Много лет ей пользуюсь. Всегда работала идеально.
Процедура позаимствована из какой-то программы.

Grand
18.08.2008, 03:45
по моему таких команд как out (c),N - нет
Есть одна недокументированная команда, OUT (C),0 - но она, как описано выше работает по разному на разных типах проца.Немного не по теме, но ассемблер GENS4 понимает команду OUT (C),0 (#ED, #71), только писать ее надо OUT (C),(HL).

Shadow Maker
13.01.2009, 11:55
himik, твои процедурины в некоторых случаях что-то такое ужасное делают с компьютером, что стек уезжает в неизвестном направлении...

himik
13.01.2009, 12:23
himik, твои процедурины в некоторых случаях что-то такое ужасное делают с компьютером, что стек уезжает в неизвестном направлении...

покажи мне в них хоть одну команду, которая трогает стек? :)

Shadow Maker
13.01.2009, 12:25
Сам удивляюсь... Удалил вызовы - все разом заработало, а до этого периодически после одного из out'ов почему-то стек слетал... Есть идеи почему?

Vitamin
13.01.2009, 13:40
Есть идеи почему?
Работа и/или стек в адресах старше 49152, вывод в порт переключает страницу? :-)

Shadow Maker
14.01.2009, 03:16
Стек по 7fff, так что отпадает.

Slider
15.01.2009, 21:05
Когда-то дали... Длинно, но глушит всё:

xor a
ld d,14
n1 ld bc,#fffd
dec d
out (c),d
ld b,#bf
out (c),a
jr nz,n1
ld b,#ff
ld d,7
out (c),d
ld b,#bf
dec a
out (c),a

jerri
16.08.2010, 13:45
AER вот то что тебе нужно!