Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Программирование (http://zx-pk.ru/forumdisplay.php?f=14)
-   -   Дайте плиз заглушку всех каналов AY (http://zx-pk.ru/showthread.php?t=8206)

Shadow Maker 12th August 2008 20:36

Дайте плиз заглушку всех каналов AY
 
Ток максимально короткую, а то у меня какой-то монстр получился.

himik 12th August 2008 21:13

Quote:

Originally Posted by Shadow Maker (Post 146138)
Ток максимально короткую, а то у меня какой-то монстр получился.

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

Code:

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 минут
Собсна пришлолось всеже себя заставить покодить малость иначе :)

Code:

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.
шобы ее избежать, придеца добавить команды:

Code:

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 13th August 2008 21:59

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

Evgeny Muchkin 15th August 2008 13:38

Quote:

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

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

Grand 16th August 2008 02:11

Code:

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


Shadow Maker 16th August 2008 03:52

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

valeron 16th August 2008 16:00

Quote:

Originally Posted by Evgeny Muchkin (Post 146935)
Я бы даже, наверное, добавил, что не просто может, а именно так на кмосах она и работает. :)

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

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

himik 16th August 2008 16:02

Quote:

Originally Posted by Grand (Post 147127)
Code:

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


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

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

Originally Posted by valeron (Post 147189)
По поводу 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 17th August 2008 00:16

Quote:

Originally Posted by himik (Post 147190)
у данной процедуры есть пара недостатков: ...

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

Grand 18th August 2008 04:45

Quote:

Originally Posted by himik
по моему таких команд как out (c),N - нет
Есть одна недокументированная команда, OUT (C),0 - но она, как описано выше работает по разному на разных типах проца.

Немного не по теме, но ассемблер GENS4 понимает команду OUT (C),0 (#ED, #71), только писать ее надо OUT (C),(HL).


All times are GMT +4. The time now is 21:02.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.