Black_Cat | Дата: Среда, 10.09.2014, 19:58 | Сообщение # 1 |
Координатор
Группа: Координаторы
Сообщений: 727
Статус: Offline
| psb наваял утилитку для проверки правильности умножения в ЦАПе GS. В цикле в ЦАП громкости пишется 0 или 63, а кнопками от 1 до 9 можно менять значение в ЦАПе звука соответственно от 0 до 255. При правильном умножении громкость писка должна возрастать от 128 (кнопка 5) - это условный ноль до отрицательного максимума = 0 (кнопка 1), или до положительного максимума = 255 (кнопка 9). Но psb обнаружил, что реальный GS ведёт себя не так, а громкость равномерно нарастает от 0 до 255, чего конечно не должно было бы быть.. но это так. При внимательном взгяде на схему становится ясно почему - это действительно баг схемотехники , удивительно, что за более чем 15 лет этот баг заметил только psb Прискорбно, но все выпущенные zorel'ом новоделы, а так же ZXM-GeneralSound Mick'а, имеют этот же баг.. В архиве лежит скомпиленый .trd и исходник:
Код device zxspectrum128
; ----------------------------------------------------------------------------- ; GS Volume DAC test v0.1, (c)2014, psb. ; This test sets different values to sound DAC (by pressing 1-9 keys) and ; do a beep with values 0|63 to volume DAC. ; ; Original GS: 1 - no sound, 5 - middle volume, 9 - max volume. ; Correct case: 1/9 - max volume, 5 - no sound. ; -----------------------------------------------------------------------------
org #6000
ld a,#f3:call sendcom
; chans init xor a:call setchan xor a:call setvol xor a:call setdac
ld a,1:call setchan xor a:call setvol xor a:call setdac
ld a,2:call setchan xor a:call setvol xor a:call setdac
ld a,3:call setchan xor a:call setvol xor a:call setdac
; test chan 0 xor a:call setchan
loop res 5,(iy+1) ei:halt bit 5,(iy+1) jr z,loop ld a,(iy-50) ;pressed key
cp '1':jr c,loop cp '9'+1:jr nc,loop
sub '1' ld l,a,h,0,de,tab:add hl,de ld a,(hl):call beepvol
jr loop
; sound DAC values (1-9) tab db 0, 31, 63, 95, 127, 159, 191, 223, 255
; do beep while key is pressed beepvol di call setdac ;set value to sound DAC bvloop ld a,63:call setvol djnz $,$,$,$ ;delay xor a:call setvol djnz $,$,$,$ ;delay
xor a:in a,(#fe):cpl:and #1f jr nz,bvloop ;still pressed? repeat ei ret
; -----------------------------------------------------------------------------
setchan out (#b3),a ld a,#04:call sendcom ;set chan # ret
setvol out (#b3),a ld a,#05:call sendcom ;set volume value ret
setdac out (#b3),a ld a,#06:call sendcom ;set dac value ret
; -----------------------------------------------------------------------------
sendcom out (#bb),a gswc in a,(#bb) rrca:jr c,gswc ret
senddat out (#b3),a gswd in a,(#bb) rlca:jr c,gswd ret
; -----------------------------------------------------------------------------
len equ $-#6000
savesna "gsvol_test.sna",#6000 emptytrd "gsvol.trd" savetrd "gsvol.trd","gsvoltst.C",#6000,len
"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!". "Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло." Гарри Трумэн
|
|
| |