Дополнительный шаг у тебя - исключительно для случая, когда в плате турбосоунда стоит 2ой чип, но не стоит первый. И несмотря на то, что девайс формально есть (недоукомплектованный), выдастся, что его нет.Цитата:
Сообщение от Shiru
Вид для печати
Дополнительный шаг у тебя - исключительно для случая, когда в плате турбосоунда стоит 2ой чип, но не стоит первый. И несмотря на то, что девайс формально есть (недоукомплектованный), выдастся, что его нет.Цитата:
Сообщение от Shiru
На 'формальном' девайсе 6 каналов играть нельзя? Значит, TS нет.
Плата спектрума может не поддреживать чтение из АУка вообще, тогда что - твои программы гордо пошлют нахрен юзера?Цитата:
Сообщение от Shiru
Всё зависит от того, кто и как собирается использовать процедуру детекта TS в своём софте. Скажем, если она обнаружит, что TS есть - можно по умолчанию включить его поддержку в опциях (если 'плата спектрума не поддерживает чтение из регистров' - юзеру придётся включить поддержку вручную, только и всего). Включать поддержку в случае, когда на плате есть только один чип (неважно, первый или второй) нет смысла.Цитата:
Сообщение от lvd
А если юзер сам всё включит, зачем тогда детектить? Чтобы место в коде занять?Цитата:
Сообщение от Shiru
Кстати, это меня тоже продолжает радовать:
Невооруженным глазом видно, что sub e:ret, а предыдущий кусок - sub c:ret nz с соотв. изменением выходных данных.Цитата:
cp e
jr nz,noTS
ld a,1
ret
noTS
xor a
ret
Чтобы юзеру не пришлось включать вручную, если возможно определить автоматически.Цитата:
Сообщение от lvd
Я не пойму, в чём заключаются твои претензии? Если ты знаешь, 'как надо' - так давай, покажи свой пример уже. Если не нравится процедура, или не знаешь, как/зачем её применить - тебя никто не заставляет. Я пока не вижу конструктивной критики.
Собственно ТАКИЕ процедуры любой кодер, более-менее знакомый с программированием Z80 и AY, пишет не задумываясь.Цитата:
Сообщение от Shiru
А зря - несмотря на то, что я указывал: избыточность проверки и избыточность кода.Цитата:
Я пока не вижу конструктивной критики.
В чём избыточность, объясни ещё раз, и помедленнее.Цитата:
Сообщение от lvd
Суть процедуры - определить наличие двух чипов. Если нет любого из двух - значит, нет 6 каналов, и нет TS.
Код HTML:;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