Ток максимально короткую, а то у меня какой-то монстр получился.
Вид для печати
Ток максимально короткую, а то у меня какой-то монстр получился.
вот, накодил наскоряк.
особо за сокращением не гнался.
Добавлено через 6 минутКод: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
Собсна пришлолось всеже себя заставить покодить малость иначе :)
правда у этого кода есть недокументированная команда OUT (c),0.Код: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
шобы ее избежать, придеца добавить команды:
Код: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
На КМОП-версиях Z80 команда OUT (C),0 может работать как OUT (C),#FF, так что лучше ею не пользоваться, от греха.
Код:LD DE,#FF07
CALL $+6
LD DE,#000D
LD BC,#FFFD
OUT (C),E
LD B,#BF
OUT (C),D
RET
Вот и я чото типа этого изначально покодил, только развернутую. У Химика все равно получилось компактней по размеру и использованию стека.
По поводу OUT (C),0 - откуда информация? Как тогда OUT (C),FF действует? И если нужно именно ноль вывести, то как тогда, через аккумулятор что ли? И как тогда ведут себя другие варианты, например OUT (C),1?
ЗЫ. Сори, не внимательно читал, команда то недокументированная. Вопрос снят.
у данной процедуры есть пара недостатков:
1. она глушит микшер и генератор огибающей, но не гасит данные остальных регистров. Задача была всех :)
2. если после отработки такой процедуры попадет что-либо в регистр микшера, то мы услышим звук, исходя из последних данных регистров тона и шума. На мой взгляд это будет не корректно.
Добавлено через 4 минуты
э... что-то мой мозг сразу опух в процессе вспоминания ассёмблера :)
по моему таких команд как out (c),N - нет :)
Есть одна недокументированная команда, OUT (C),0 - но она, как описано выше работает по разному на разных типах проца. И это факт, который встречался нам в жизни, в далекие 90-е... Пара игрушек с защитами русских умельцев просто не запускались, а виной всему было именно использование команды OUT (C),0 - которая у нас работала как OUT (C),#FF. Если мне память не изменяет, даже в настройках Unreal Speccy есть пунктик про эмуляцию этой команды, которая указывает, что именно делать 0 или FF. :)
А OUT (C),1 - такой команды нет ваще :)
Немного не по теме, но ассемблер GENS4 понимает команду OUT (C),0 (#ED, #71), только писать ее надо OUT (C),(HL).Цитата:
Сообщение от himik
himik, твои процедурины в некоторых случаях что-то такое ужасное делают с компьютером, что стек уезжает в неизвестном направлении...
Сам удивляюсь... Удалил вызовы - все разом заработало, а до этого периодически после одного из out'ов почему-то стек слетал... Есть идеи почему?
Стек по 7fff, так что отпадает.
Когда-то дали... Длинно, но глушит всё:
Код: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
AER вот то что тебе нужно!