PDA

Просмотр полной версии : Процедура детекта TurboSound.



Shiru
20.05.2005, 12:57
Вот.



; TurboSound detected? Return A=0/1 (no/yes)

tsDetect
ld hl,#fe00
ld de,#ffbf
ld bc,#fffd
out (c),h
out (c),l
ld b,e
out (c),c

ld b,d
out (c),b
out (c),l
ld b,e
out (c),b

ld b,d
out (c),h
out (c),l
in a,(c)
cp c
jr nz,noTS

out (c),d
out (c),l
in a,(c)
cp e
jr nz,noTS
ld a,1
ret

noTS
xor a
ret

Ronin
20.05.2005, 14:23
может сначала 7й регистр заглушить ? на всякий случай. или прям на нем и тестировать (а не 0-ом).

lvd
20.05.2005, 18:13
может сначала 7й регистр заглушить ? на всякий случай. или прям на нем и тестировать (а не 0-ом).

Ну или можно предварительно сохранить тот регистр, на котором будем проверять наличие 2х девайсов. =)

lvd
20.05.2005, 18:17
Вот.
; TurboSound detected? Return A=0/1 (no/yes)



Ну можно так сделать:

1 - включить нулевой (дефолтный) девайс
2 - записать в него число1
3 - включить первый (доп.) девайс
4 - записать в него число2(!=число1)
5 - включить нулевой взад
6 - считать и вычесть число1
7 - вернуться

На выходе: ноль - 2 девайса, неноль - 1 девайс.

Ronin
20.05.2005, 18:49
Ну или можно предварительно сохранить тот регистр, на котором будем проверять наличие 2х девайсов. =)
это чтоб шума всякого не было.
проще #3f в 7й регистр кинуть обоим. только если #07 можно скажем в A запихать, #3F пихать некуда ;)


На выходе: ноль - 2 девайса, неноль - 1 девайс.
а если ни одного ? :) то ноль вероятно.

Shiru
20.05.2005, 20:47
может сначала 7й регистр заглушить ? на всякий случай. или прям на нем и тестировать (а не 0-ом).
А смысл? Предполагается, что оба чипа заглушены на старте теста. Ну можно и на 7-ом - тогда первую строчку надо заменить на ld hl,#fe07

Ну можно так сделать:
Так тут практически так и сделано, только дополнительный шаг есть, чтобы при отсутствии чипов получить на выходе всё-таки 0 (нет чипов - нет и TS).

PheeL
20.05.2005, 21:10
Так тут практически так и сделано, только дополнительный шаг есть, чтобы при отсутствии чипов получить всё-таки 0.
Эм, а нафиг надо если всё-равно не будет слышно? Тут он чисто логически неоправдан как мне кажется. Имеется ввиду проверка на отсутствие чипов вообще.

Shiru
20.05.2005, 21:15
Эм, а нафиг надо если всё-равно не будет слышно? Тут он чисто логически неоправдан как мне кажется. Имеется ввиду проверка на отсутствие чипов вообще.
Да, она и имеется в виду. Код выше - что-то непонятно?

Выбираем 2-ой чип, пишем число N
Выбираем 1-ый чип, пишем число M
Выбираем 2-ой чип, читаем - если не N, чипа нет (ret 0)
Выбираем 1-ый чип, читаем - если не M, чипа нет (ret 0)
ret 1 (оба чипа есть)

lvd
20.05.2005, 23:07
Да, она и имеется в виду. Код выше - что-то непонятно?

Выбираем 2-ой чип, пишем число N
Выбираем 1-ый чип, пишем число M
Выбираем 2-ой чип, читаем - если не N, чипа нет (ret 0)
Выбираем 1-ый чип, читаем - если не M, чипа нет (ret 0)
ret 1 (оба чипа есть)

Гы, второй чип есть, а первого нету, надо же... :D

lvd
20.05.2005, 23:27
а если ни одного ? :) то ноль вероятно.

Ну тогда читай так: ноль - 2 девайса, не ноль - не два девайса. =)

lvd
20.05.2005, 23:37
Так тут практически так и сделано, только дополнительный шаг есть, чтобы при отсутствии чипов получить на выходе всё-таки 0 (нет чипов - нет и TS).

Дополнительный шаг у тебя - исключительно для случая, когда в плате турбосоунда стоит 2ой чип, но не стоит первый. И несмотря на то, что девайс формально есть (недоукомплектованный), выдастся, что его нет.

Shiru
21.05.2005, 00:17
На 'формальном' девайсе 6 каналов играть нельзя? Значит, TS нет.

lvd
21.05.2005, 02:00
На 'формальном' девайсе 6 каналов играть нельзя? Значит, TS нет.

Плата спектрума может не поддреживать чтение из АУка вообще, тогда что - твои программы гордо пошлют нахрен юзера?

Shiru
21.05.2005, 02:46
Плата спектрума может не поддреживать чтение из АУка вообще, тогда что - твои программы гордо пошлют нахрен юзера?
Всё зависит от того, кто и как собирается использовать процедуру детекта TS в своём софте. Скажем, если она обнаружит, что TS есть - можно по умолчанию включить его поддержку в опциях (если 'плата спектрума не поддерживает чтение из регистров' - юзеру придётся включить поддержку вручную, только и всего). Включать поддержку в случае, когда на плате есть только один чип (неважно, первый или второй) нет смысла.

lvd
21.05.2005, 20:46
Всё зависит от того, кто и как собирается использовать процедуру детекта TS в своём софте. Скажем, если она обнаружит, что TS есть - можно по умолчанию включить его поддержку в опциях (если 'плата спектрума не поддерживает чтение из регистров' - юзеру придётся включить поддержку вручную, только и всего). Включать поддержку в случае, когда на плате есть только один чип (неважно, первый или второй) нет смысла.

А если юзер сам всё включит, зачем тогда детектить? Чтобы место в коде занять?

lvd
21.05.2005, 20:48
Кстати, это меня тоже продолжает радовать:



cp e
jr nz,noTS
ld a,1
ret

noTS
xor a
ret


Невооруженным глазом видно, что sub e:ret, а предыдущий кусок - sub c:ret nz с соотв. изменением выходных данных.

Shiru
21.05.2005, 23:22
А если юзер сам всё включит, зачем тогда детектить? Чтобы место в коде занять?
Чтобы юзеру не пришлось включать вручную, если возможно определить автоматически.

Я не пойму, в чём заключаются твои претензии? Если ты знаешь, 'как надо' - так давай, покажи свой пример уже. Если не нравится процедура, или не знаешь, как/зачем её применить - тебя никто не заставляет. Я пока не вижу конструктивной критики.

lvd
23.05.2005, 12:12
Я не пойму, в чём заключаются твои претензии? Если ты знаешь, 'как надо' - так давай, покажи свой пример уже. Если не нравится процедура, или не знаешь, как/зачем её применить - тебя никто не заставляет.

Собственно ТАКИЕ процедуры любой кодер, более-менее знакомый с программированием Z80 и AY, пишет не задумываясь.



Я пока не вижу конструктивной критики.

А зря - несмотря на то, что я указывал: избыточность проверки и избыточность кода.

Shiru
23.05.2005, 12:32
А зря - несмотря на то, что я указывал: избыточность проверки и избыточность кода.
В чём избыточность, объясни ещё раз, и помедленнее.

Суть процедуры - определить наличие двух чипов. Если нет любого из двух - значит, нет 6 каналов, и нет TS.

himik
24.05.2005, 12:06
;Turbo-Sound checker by Himik's ZxZ/PoS-WT
;24.05.05 at work ;)
;Found:
; No ay/ym chip on board
; Single ay/ym chip on board
; Turbo-Sound port by PoS & Bitwalker (port #1F for swith)
; Turbo-Sound port by NedoPC (registors #FE-#FF selection)

ORG #61A8
C_1
DI
XOR A
LD HL,#FE00
LD DE,#FFBF
LD BC,#FFFD
OUT (C),B ;SELECT TS AY0 CHRV
OUT (C),A ;SELECT REG 0
LD B,E
OUT (C),B ;WRITE #BF IN REG 0 AY0 CHRV
INC A
OUT (#1F),A ;SELECT TS AY1 POS
OUT (C),C ;WRITE #FD IN REG 0 AY1 POS
LD B,D
OUT (C),H ;SELECT TS AY1 CHRV
OUT (C),L ;SELECT REG 0
LD B,E
OUT (C),H ;WRITE #FE IN REG 0 AY1 CHRV
LD A,L
OUT (#1F),A ;SELECT TS AY0 POS
OUT (C),L ;WRITE #00 IN REG 0 AY0 POS
INC A
OUT (#1F),A ;SELECT TS AY1 POS
LD B,D
OUT (C),D ;SELECT TS AY0 CHRV
OUT (C),L ;SELECT REG 0
IN A,(C) ;READ BYTE FROM REG 0
CP C
;переходим если нашли Turbo-Sound by NedoPC
JR Z,TS_ENABLE_CHRV
;переходим если нашли Turbo-Sound by PoS
CP #FE
JR Z,TS_ENABLE_POS
;переходим если ваще нет ни какого чипа
CP #FF
JR Z,NO_AY
C_2
;пришли сюда если у нас всего один чип и он есть
TE_DISABLE
LD A,1
OUT (#FE),A
RET
NO_AY
LD A,2
OUT (#FE),A
RET
TS_ENABLE_CHRV
LD A,4
OUT (#FE),A
RET
TS_ENABLE_POS
LD A,6
OUT (#FE),A
RET
DISPLAY /A, "Length: ",C_2-C_1

himik
25.05.2005, 20:37
Опять бл... Все пропали. У меня ваще месяц май - полный отстой. Все валица из рук. Игровой зал ограбили, админша сука денег сперла. Влетел на бабло, закрыли дискотеку, анестису не могу новую песню написать, не могу текст песни придумать, ребенку поставили близорукость в 4-е года, с арендой зала мозги имеют, сегодня банк не дал кредит на покупку акустики 5.1, с трубы уже три раза мегафон денег снял хрен знает за что, принес звездные войны 3 на двд - не посмотрел еще, 40-й день у товарища, за инет 15 тонн должен, открываю третий игровой зал... Короче...

Какие были времена... Сидишь в клубе, на своем пентагоне 128 кодишь пушер или еще какой нить шит, хаваешь макароны по скотски с соусом и хлебом. Куришь всякую гадость. И так сутками... Ни каких забот... Щас нажрусь...

himik
27.05.2005, 18:45
Процедура успешно вставленна в:

http://pos.fmshop.ru/archive/tse_b0.zip

Качаем новую бету редактора :)

23.05.05
1. Исправил некорректную работу при переключении режима EDIT PATTERN/COMPOSE
во время редактирования трека. Теперь при передвижении по паттернам вниз,
с последней позиции перескочит на позицию LOOP,
а от нее можно опять в обе стороны ходить. Переход
из 0 позиции зациклен на 0, т.е. перехода к последней позиции нет.
2. После удаления командой WHOLE MUSIC происходит обновление экрана.

27.05.05
1. Подключил автоопределение присутствия и модификации Turbo-Sound.
2. Подключил автоматический драйвер расширенной памяти. Определяет тип
автоматически. Проверил в Unreal, вроде работает. (Thanks to JTN !!!)