Из газеты Echo #06, Брест, 07.2000 Witchcraft DMA Ultra Sound Card "Звук-это колебания воздуха, которые колышат наши уши и через них воспринимаются мозгом, конечно если он у вас есть." Hi, all! Эту статью меня побудили написать слухи упорно ходящие (бродящие) по просторам нашей необьятной родины, в частности в fido. Итак что такое DMA Ultrosound Card (да-да, DMA,а не Direct Sound). Начнем с ее звуковых возможностей: Число каналов: 4 Разрядность, бит: 8 Уровень рег. громкости: 0-63(6 bit) Частота дискретизации: до 3.5 МHz (НЕ КНz!) Максимальный размер обслуживаемой памяти: 16 МБ. (чем не звуковая карта к SPRINTER'у?!) Т.к. спекки это не грозит, стандартно испольуется до 1МБ. Максимальный размер сэмпла: 64кб (т.к. DMA видит страницы не по 16кБ, как Z80, а по 64кБ!) Вообще длина сэмпла не ограничена, она просто разбивается на отрезки кратные 64кБ. Программится карта ОЧЕНЬ легко, все что нужно-это закинуть в соответствующие порты номер банка, в котором лежит сэмпл, его адрес в банке, длину, громкость, параметр RATE и разрешить работу программируемого канала. Чтобы потом не говорили,что мы такие- сякие не дали примеров программинга, мы приводим готовые процедурки. Итак, погнали: 1. Опрос наличия карты. TEST xor a ;\ ld bc,#dc77 ; > сброс DMA out (c),a ;/ ld b,#0c ;берем 16 битный порт (регистр адреса) ld de,#1234 ;кидаем out (c),e ;в него out (c),d ;любое число in a,(c) ;считываем его из порта cp e jr nz,noDMA ;сравниваем его с закидываемым in a,(c) cp d jr nz,noDMA ;если не оно, то DMA absent present -------- ;иначе-приятного вам прослушивания! noDMA -------- ;все понятно. В отличие от теста на General Sound, комп не вешается. 2. Проигрывание сэмпла Mode equ #48 ;0-й канал, чтение памяти, без автозагруз- ;ки, увеличение адреса, простой доступ по ;запросу Rate equ 16 ;частота выборки в кГц Bank equ 0 ;0-й банк Adres equ 0 ;адрес в формате DMA(т.е. если сэмпл лежит ;в 16-й странице компа, то для DMA будет ;адрес-#0000,в 17-#8000 и т.д. до #ffff) Len equ #2000 ;длина сэмпла 8кБ Volume equ 63 ;громкость 0-63 Mask equ 0 ;маска для канала PLAYER ld bc,#8c77 ;установка общего sub a ;режима(один раз out (c),a ;после сброса). ld b,#fd ;устанавливаем режим первого ld a,#34 ;канала первого таймера(тоже один out (c),a ;раз после сброса). ld b,#3d ;задаем ld de,3500/Rate;частоту out (c),e ;выборки out (c),d ;для сэмпла. ld b,#bc ;программится режим ld a,Mode ;канала out (c),a ;DMA. ld a,Bank ;программится банк ld b,#07 ;DMA для out (c),a ;первого канала. ld hl,Adres ;устанавливаем ld b,#0c ;начальный out (c),l ;адрес out (c),h ;сэмпла. ld hl,Len ;длина ld b,#1c out (c),l ;сэмпла. out (c),h ld a,Volume ;устанавливаем ld b,#3f ;громкость out (c),a ;звучания. ld a,Mask ;разрешаем ld b,#ac ;работу out (c),a ;первого канала. ret Теперь можете творить все что захотите, а sample будет играть по фону пока не сыграет все 8кБ. Можно зациклить воспроизведение, нужно всего лишь установить 4 бит в байте Mode. Параметры этого плейера устанавливают, что сэмпл грузится по адресу #c000 страницы #10. Чаще всего возникают вопросы (споры) о частоте дискретизации (RATE), обьясню подробно: м\с 8237A (8237A-4, 8237A-5, аналог - 1810ВТ37) работает, по схеме, с максимальной частотой выборки 3.5MHz (7MHz некоторые модификации при TURBO), найти такое применение в области звука весьма сложно, т.к. максимальная частота дискретизации .wav 48KHz. Поэтому во всех характеристи- ках, связанных со звуком, пишется 48KHz. Надеюсь с этим вопро- сом разобрались. Принцып работы основан на прямом доступе к памяти (Direct Memory Access - DMA). Помимо звуковых возможностей устройство можно использовать как акселератор при операциях с блоками, т.к. 8237 имеет команду аналогичную ldir которая выполняется в 2 раза (в 4 раза при 7MHz) быстрее Z80. Отсюда следующие выгоды: 1) пересылка блока память-память; 2) заполнение адресного пространства байтом. Т.к. у 8237 размер страницы 64кб появляется возможность пе- ресылать данные для работы Z80 без заморочек со страницами. Пересылка блока возможна в том случае, если имеются 2 свободных канала. В устройстве помимо 8237 юзаются два таймера 8253 (8254, аналог - 580ви53). Каждый таймер имеет по 3 канала, всего 6, из них 4 закреплены за звуковыми каналами. Остальные 2 канала прог- раммер может использовать по своему усмотрению, для получения прерываний 30...150 Гц. Если изменять частоту выборки, то можно програмно выставить любую скорость компа (50%...100% скорости), т.е. можно получить любой INT. Я вот лицезрел дему ADRINALIZ со скоростью 60% от но- минальной - круто!!! Проигрывание .mod ведется по прерываниям, реального времени у проца DMA Sound Card забирает 1000 тактов за INT(9000 в пике). При использовании устройства в качестве ускорителя можно напи- сать scroll всего экранa за INT +25000 тактов проца свободно, а при турбе 8237 scroll+ мультиколор всего экрана + 10000 тактов проца свободно. Еще одна возможность DMA Ultrosound Card - проигрывание с винта .wav в реальном времени с CD качеством, стерео 44кHz, не ограниченной длинны. Ну а слушать . mod и одновременно работать с ВГ93 вообще без проблем. Как-то в эхе мелькала мысль, что ~...про граф сопр автор, не знает...~, это не так, уж кому как не автору знать об этом. Т.к. проигрывание .wav ведется по прерываниям и есть возможность получать прерывания с различной частотой, то можно проигрывать звук в формате аналогичном MPEG'у, благо свободного времени у проца на распаковку хватает (теоретические разработки уже ведутся). Теперь о вопросе с торможением проца картой: если бы был .wav с частотой дискретизации 1.75МГц то он бы при проигрывании тормозил проц на 50%. Те,кто хоть чуть-чуть знаком с арифметикой может прикинуть сколько времени у проца займет проигрывание .wav 48кГц (примерно 3-5%). Мелькала идея увеличения тактовой у DMA до 12-14МГц. Ничего путного не получится. В области воспроизведения звука никакого выигрыша не будет, т.к. сэмпла с частотой дискретизации 14000кГц не существует, а что касается использования как ускорителя, то операция пересылки блока будет занимать 1-2 такта. Но всегда есть ~но~ - выдержит ли память? 565ру7 не выдержат однозначно, а переводить всю память на симы - и возни многовато и цена. А будет ли от этого реальный выигрыш - ни кто не знает. Вполне достаточна тактовая 7МГц и овцы целы и волки сыты. Единственная доработка,которую можно приветствовать- подключение ~ведомого~ контроллера ПДП 8237, с целью увеличе- ния числа каналов до 7(4-звуковых и 3-для обслуживания перифе- рийных устройств как на пц). Что касается эмуляции general'a, sound drive, ay - это возможно как аппаратно, так и програмно. Кто-то предлогал добавить в карту проц z80 или аналогичный, своей памяти и т.д. Отвечу сразу: ничего хорошего не выйдет, будем иметь некий симбиоз general sоund с прямым доступом в свою же память. Мне кажется, что это бессмысленно (кто-нибудь видел на писюке Sound Blaster + Pentium III?), т.к. загруженность проца будет не более 10-15%. Никакой речи о дешевизне по отношению к GS после такой доработки идти не может,т.к. процессор потянет за собой и ПЗУ,и дополнительную логику. Наибольший плюс этой карты-независимость от ПЗУ, в отличие о general sound, я не сомневаюсь, что глюков в ПЗУ general'a хватит до следующего тысячилетия. Теперь о сборке карты: схема действительно большая, но ничего сложного в повторении нет. Сборка производится постепенно. Существует методика сборки и отладки карты, где очень подробно рассказано как, что и где паять, куда тыкать и на что нажимать. Приведены всевозможные тесты. Для отладки необходим только логический пробник на одной мелкосхеме (схема которого приведена там же). Вполне возможно собрать карту за 3-4 недели. Как-то Alexander Kulik писал на ответ Tim'у Kelly, мол:~... видел я таких авторов. Присылали всякие кассетки и говорили, что это их "детище сотворило", а на самом деле...~. Я тоже сразу не поверил, что так играет DMA Ultrasound Card, пока не собрал ее и не проверил в деле. Качество звука на DMA Ultrasound Card не уступает AWE32 (не верите? Можете спросить у KGS INC и у Афенди- кова). Некий Dmitry Moskaluk писал: ~...нафига на спектруме хорошая звуковая плата, если ее цена раза в три(еще один камень в сторо- ну GS-прим. автора) самого компьютера...~.О стоимости: мне обош- лась карта в 15 баксов(!). М\с 8237 стоит - 1.50 бакса, м\с 8253 по 1 баксу, 2 бакса за 8 штук 572па1 ну и логика на остальные, и полигон. Кстати, насколько мне известно существует две карты: одна у Иноземцева Алексея, вторая у HARD from WITCHCRAFT (т.е. у меня). Действительно существует и база софта под эту карту - проигры- ватели .mod, .wav, редактор Digital Studio, и примерно двадцать полностью озвученных игрушек. Сейчас пишется редактор .mod и другой софт. Т.к.DMA Ultrasound Card не коммерческая разработка(в отличие от GS), то любая информация предоставляется всем свободно(беско- рыстно и безвозмездно). Связаться с нами или с автором пo fido можно через Pawel Kislyak 2:454/11.25 или по e-mail Pawel#nm.ru ВСЕ, КТО ИНТЕРЕСУЕТСЯ ИНФОРМАЦИЕЙ ПО ЭТОЙ КАРТЕ, ХОЧЕТ ЕЕ СОБРАТЬ ИЛИ ПО ДРУГИМ ВОПРОСАМ ПИШИТЕ ПО АДРЕСУ: 343581, Украина, Донецкая область, г. Дзержинск, пос.Кирово, ул. Юности 16/48 Михальченкову Дмитрию. Выражаем огромную благодарность Pawel'у за предоставленную почту ---------------------------------------------------------------- С уважением Михальченков Дмитрий & Иноземцев Алексей Аналоговая часть DMA Ultrasound Card
Микросхемы: DD21-DD24 1533ИР23 DD24-DD28 1533ТМ9 DA1-DA4 и DA9-DA12 572ПА1 DA5-DA8 КР140УД20 Логическая часть DMA Ultrasound Card
Микросхемы: DD1,DD2 555ИД7 DD3 555ЛП8 DD4,DD20 555ЛИ1 DD5 555ЛН1 DD6 1810ВТ37 DD7 555АП4 DD8 555ЛА3 DD9 555ИР26 DD10,DD11 580ВИ53 DD12,DD19 555ЛЛ1 DD13,DD17 555ИР22 DD14,DD16 555ТР2 DD15 555ТМ2 DD18 555ТМ8 CLK 3.5MHz CLK2 1.75MHz ------------------------------------------ Методика отладки DMA Ultra Sound Card ------------------------------------------ ВСТУПЛЕНИЕ Итак, для сборки звуковой карты необхо- димо: полигон, где-то мелкосхем на 50, бу- дет больше - берите, не жмитесь-свободное место еще пригодится, авометр, простенький логический пробник, если есть - осцилограф типа ОМЛ-2, Н3015 (лично мне он не понадо- бился), жменя логики, пара таймеров, пара резисторов, штучек 8 кондесаторов, монтаж- ный провод, БИС 1810ВТ37, стандартный ра- зЬем СНП64 (как на контроллере TR-DOS) с ответной частью для подключения карты к компутеру и самое главное - паяльник. Пол- ный список деталей смотри далее. Настройка и сборка разбивается на нес- колько этапов. Если у вас карта полностью собрана, то не нужно ее разбирать, только достаточно восстановить изменения на плате компьютера. После распайки элементов необходимо ТЩАТЕЛЬНО ПРОЗВОНИТЬ все соединения на правильность и все соседние ножки микрос- хем на отсутствие коротких замыканий между ними. Особое внимание следует уделить цепям питания, т. к. ошибки могут вывести из строя половину микросхем или блок пита- ния. Ну что, поехали... 1. Настройка блока ЦАП 1.1 Впаиваются микросхемы: DD21-DD28, DA1-DA12 и связанные с ними дискретные элементы. 1.2 Выхода звука подаются на вход ау- диоусилителя. ____ ____ ____ ____ 1.3 Сигналы CSC1 - CSC4, CSV1 - CSV4 подаются с дополнительной микросхемы 555ИД7, которая включается следующим обра- зом: 1.3.1 Для Пентагона: +--+--+ 1| |__|15 ____ A4 ------+A0|Q0+--- CSC1 2| |__|14 ____ A5 ------+A1|Q1+--- CSC2 3| |__|13 ____ A6 ------+A2|Q2+--- CSV1 +--+__|12 ____ 4|__|Q3+--- CSV2 A7 ------+V1|__|11 ____ ___ 5|__|Q4+--- CSC3 DOS -----+V2|__|10 ____ 6| |Q5+--- CSC4 IOWR ----+V3|__|9 ____ | |Q6+--- CSV3 | |__|7 ____ | |Q7+--- CSV4 +--+--+ Сигналы A4 - A7 берутся с процессора, DOS с 8D76, IOWR с 10D64 Пентагона. 1.3.2 Для других компьютеров: +--+--+ 1| |__|15 ____ A4 ----+A0|Q0+--- CSC1 2| |__|14 ____ A5 ----+A1|Q1+--- CSC2 3| |__|13 ____ A6 ----+A2|Q2+--- CSV1 +--+__|12 ____ 4|__|Q3+--- CSV2 A7 ----+V1|__|11 ____ ____ 5|__|Q4+--- CSC3 IORQ ->+-+--------+V2|__|10 ____ __ | 6| |Q5+--- CSC4 WR --->+-+ +--+V3|__|9 ____ | | | |Q6+--- CSV3 -----+ | | |__| ___ + 1к | | |Q7+--- CSV4 DOS -----------+ +--+--+ Диоды типа КД521. Все сигналы берутся с процессора, DOS берется с контроллера дис- ковода так, чтобы когда активно ПЗУ TRDOS на нем был лог. 0. Если вы не знаете где его взять, то просто подайте на него +5В (это не повлияет на работоспособность, просто работа дисковода будет сопровож- даться "шумовыми эффектами"). Сразу после подачи питания проверьте как сильно нагре- лись м\с К572ПА1,если они не греются - все в норме, если они сразу стали горячими - без промедления отключите питание, дабы их не спалить, и вместо 12 вольт на оных м\с подайте 5, на звуке это практически не от- разится. Лучше всего использовать км572па1 (проверено на личном опыте) - они работают стабильно при всех условиях. 1.4 Наберите тестовую программу для получившегося "Super sound drive". 10 LET PC=15; 31; 79; 95 20 LET PV=47; 63; 111;127 30 FOR I=0 TO 63: OUT PV,I 40 OUT PC,0: OUT PC,255 50 NEXT I 60 GOTO 30 После запуска должен появиться звук плавно изменяющейся громкости. 1.4.1 ПРИМЕЧАНИЕ. Звуковая карта име- ет 4 канала и все их нужно тестировать отдельно. Чтобы не писать отдельные прог- раммы для каждого канала, для некоторых переменных будут даваться 4 (6, 8 или дру- гое необходимое количество) варианта зна- чений, разделенных точкой с запятой. Необ- ходимо подставить сначала первые значения, затем вторые и т. д. В вышеприведеном примере сначала следует подставить PC=15: PV=47, затем PC=31: PV=47 и снова запус- тить программу и т. д. Такая запись будет встречаться почти во всех программах. 1.5 Делается проверка всех каналов. Все каналы должны четко воспроизводить звук, громкость должна регулироваться плавно. 1.6 Если на одном или на всех каналах отсутствует звук, то необходима более де- тальная проверка. Для такой проверки нужны специальные измерительные приборы: осцил- лограф или логические пробники, которые описаны в приложении. 1.6.1 Сначала убедимся в правильной работе дешифратора на доп. микросхеме ИД7. 1.6.1(о).1 Набираем программу: PORT EQU #0F;#1F;#2F;#3F;#4F;#5F;#6F;#7F DI M1 OUT (PORT),A LD A,#7F IN A,(#FE) RRCA JR C,M1 EI RET после чего проверяется наличие импуль- сов вот такой формы: TTTTTTTTTTTT с часто- |||||||||||| той около 77 кГц на 15, 14, 13, 12, 11,10, 9 и 7 ножках доп. ИД7 (15 ножке соответст- вует порт #0F, 14 - #1F и т. д). 1.6.1(о).2 При отсутствии таких им- пульсов необходимо еще раз тщательно про- верить распайку доп. ИД7 и если ошибок не обнаружено то ИД7 следует заменить. 1.6.1(п).1 Набираем программу: PORT EQU #0F;#1F;#2F;#3F;#4F;#5F;#6F;#7F DI M1 OUT (PORT),A LD BC,0 M2 DEC BC LD A,B OR C JR NZ,M2 LD A,#7F IN A,(#FE) RRCA JR C,M1 EI RET После чего Пробником #1 проверяем нали- чие стробирующих импульсов с частотой около 2 Гц на 15, 14, 13, 12, 11, 10, 9 и 7 ножках доп. ИД7 (15 ножке соответствует порт #0F, 14 - #1F и т. д). 1.6.1(п).2 См. п.1.6.1(о).2 1.7 Проверка блока ЦАП закончена. До- полнительную м/с 555ИД7 можно отпаять. Для окончательной проверки качества звука за- пустите какую нибудь прогу для SOUND DRIVE, к примеру FLASH TRAKER, перед за- пуском не забудте в соответстующих портах (OUT 47, 63: OUT 63, 63: OUT 111, 63: OUT 127, 63) установить громкость. 2. Настройка задающих генераторов 2.1 Впаиваются микросхемы DD1, DD4.1 DD4.2. 2.2(о) Набирается программа тестирова- ния портов: PORT EQU #FC77;#FD77;#FE77;#FF77 DI M1 LD BC,PORT OUT (C),A LD A,#7F IN A,(#FE) RRCA JR C,M1 EI RET После чего проверяется наличие импуль- сов вот такой формы: TTTTTTTTTTTT с часто- |||||||||||| той около 77 кГц на 15, 14, 13, 12 ножках DD1 (15 ножке соответствует порт #FC77, 14 #FD77 и т.д.). 2.2(п) Набирается программа тестирова- ния портов: PORT EQU #FC77;#FD77;#FE77;#FF77 DI M1 LD BC,PORT OUT (C),A LD BC,0 M2 DEC BC LD A,B OR C JR NZ,M2 LD A,#7F IN A,(#FE) RRCA JR C,M1 EI RET После чего проверяется наличие строби- рующих импульсов с частотой около 2 Гц на 15, 14, 13, 12 ножках DD1 (15 ножке соот- ветствует порт #FC77, 14 - #FD77 и т. д). 2.3 Впаиваются микросхемы DD10, DD11 сигнал CLK берется в Пентагоне с 8D1. Это тактовая частота 3.5МГц которая обычно подается на Z80, но если у вас есть турбо- режим, то брать ее непосредственно с про- цессора нельзя. Сигнал CLK2 берется в Пен- тагоне с 11D2. Это тактовая частота 1.75 Мгц, которая подается на AY8910(12) и ее можно взять непосредственно с AY. 2.4 Набирается программа: 10 LET R=64887; 64887; 64887; 65143; 65143; 65143 20 LET P=15735; 32119; 48503; 15991; 32375; 48759; 30 LET C=52; 116; 180; 52; 116; 180; 40 LET F=1000: LET FH=INT (F/256): LET FL=F-256*FH 50 OUT R,C: OUT P,FL: OUT P,FH 60 PRINT AT 0,0; IN (P)+256*IN (P), 70 GOTO 60 После запуска должны замелькать числа от 0 до 1000 в полном беспорядке, но очень быстро, а на выводах 10, 13, 17 DD10 и DD11 должны появиться импульсы вот такой формы: TTTTTTTTTTTT с частотой около 3.5 |||||||||||| кГц на 10 и 13 ножках, и 1.75 кГц на 17 ножках (10DD10 соответствует первый набор параметров, 13DD10 - второй, 17DD10 - 3й, 10DD11 - 4й, 13DD11 - 5й и 17DD11 - 6й). 2.5 Если у вас 580ВИ53 то запускать тестовую программу нужно БЕЗ турборежима, но лучше использовать импортный аналог 8253 (82C53, D8253 и т. д.), который рабо- тает совершенно нормально и в турбе. 2.6 Если тест не идет, то нужно наб- рать тестовую программу из п.2.2 порта для тестирования должны быть такими: PORT EQU #3D77;#7D77;#BD77;#FD77; #3E77;#7E77;#BE77;#FE77 И затем проверяется наличие строб. им- пульсов на 21 ножках DD10 и DD11 (портам #XD77 соответствует 21DD10, #XE77 21DD11 (X - любая цифра)). 3. Настройка контроллера DMA 3.1 Впаиваются микросхемы DD3(кроме 2 и 3 ножки), DD4.4, DD5.1 - DD5.5, DD6,DD7, DD14, между 36 ногой DD6(EOP) и +5В веша- ется резистор сопротивлением 10кОм. ____ __ __ _____ _____ ___ 3.2 Сигналы MREQ,RD,WR,BUSAC,BUSRQ,RES берутся с 19, 21, 22, 23, 25 и 26 ноги процессора соответственно. 3.3 Набирается тестовая программа: 10 LET P=3191; 7287; 11383; 15479; 19575; 23671; 27767; 31863 20 FOR I=0 TO 65535 40 LET H=INT(I/256): LET L=I-H*256 50 OUT P,L: OUT P,H 60 PRINT I, IN (P)+256*IN (P) 70 NEXT I После запуска на экране должны появить- ся два столбца чисел, числа в обоих столб- цах должны совпадать. Если число в правом столбце не меняется, то см. п.3.3.1, ес- ли числа не совпадают, но в правом столбце числа изменяются, то необходимо проверить выводы 21 - 23, 26 - 30 DD6, и если там порядок - заменить DD6. 3.3.1 Необходимо набрать тестовую про- грамму из п.2.2 порта для тестирования до- лжны быть такими: PORT EQU #0C77;#1C77;#2C77;#3C77; #4C77;#5C77;#6C77;#7C77 И проверить наличие сигнала выборки на 11DD6 и 4DD6 (для всех портов). Необходимо проверить 13DD6 (нормально там должен быть лог. 0). 3.4 Набирается тестовая программа: 10 DATA 3191,7287,11383,15479,19575, 23671,27767,31863 20 FOR I=0 TO 7 40 READ P 50 OUT P,I*2: OUT P,I*2+1 60 PRINT I*2: PRINT I*2+1 70 NEXT I 80 RESTORE 90 FOR I=0 TO 7 100 READ P 110 PRINT AT I*2,16;IN (P) 120 PRINT AT I*2+1,16;IN (P) 130 NEXT I Как и прежде, числа в обоих столбцах должны совпасть. Если этого не происходит, то 3.4.1 Подключаем Пробник #2: щуп "C" к 11DD6, щупы "1", "2", "3", "4" к 32, 33, 34, 35 ногам DD6 соответственно. Наби- раем программу: 10 LET P=3191; 7287; 11383; 15479; 19575; 23671; 27767; 31863 20 OUT P,0 После запуска сигнатура должна быть та- кой: ГГГГ; НГГГ; ГНГГ; ННГГ; ГГНГ; НГНГ; ГННГ; НННГ; (порту 3191 соотв.сигнатура "ГГГГ" и т.д.) 3.5 Проверяем теперь режим DMA. Набира- ем программу: TimerC EQU #FD77;#FD77;#FE77;#FE77 TimerD EQU #3D77;#7D77;#3E77;#7E77 TimerB EQU #34;#74;#34;#74 DmaS EQU #0C77;#2C77;#4C77;#6C77 DmaL EQU #1C77;#3C77;#5C77;#6C77 DmaC EQU #50;#51;#52;#53 DmaM EQU #00;#01;#02;#03 LD BC,TimerC LD A,TimerB OUT (C),A LD BC,TimerD LD DE,2 OUT (C),E OUT (C),D LD BC,#8C77 XOR A OUT (C),A LD BC,#CC77 OUT (C),A LD BC,#BC77 LD A,DmaC OUT (C),A LD BC,DmaS LD DE,#8000 OUT (C),E OUT (C),D LD BC,DmaL LD DE,0 OUT (C),E OUT (C),D LD BC,#AC77 LD A,DmaM OUT (C),A RET После запуска программы быстродействие компьютера уменьшается в два раза. Это тестовый режим DMA. В этом режиме форми- руется только запрос прямого доступа, а сигналы выборки не формируются. Поэтому, единственный видимый эффект - это замедле- ние работы компьютера из-за того, что DMA делает 437500 обращений к памяти в секунду (в режиме теста). Тестовый режим остается и после возврата из тестовой программы - до сброса. Команда OUT 56439, 0 (OUT #DF77, #00) также сбрасывает контроллер DMA, после нее быстродействие должно вер- нуться к норме. Компьютер должен устойчиво работать в тесте. Основная болезнь - сбои в ОЗУ из-за плохого контактирования мик- росхем в панельках и неточной фазы сигнала CAS. В Пентагоне помогает установка доп. конденсатора 20 - 40 пФ между 3DD45 и зем- лей, но лучше всего переделать адресацию памяти, не пугайтесь для этого необходимо поменять местами 2 пары сигналов. Для ос- тальных компьютеров это не понадобится. Это происходит из-за предельно длинного цикла регенерации памяти, а вклинивание обращений DMA к памяти вообще растягивает его. 3.5.1 Если тест не пошел (никакого за- медления нет), то следует набрать прог- рамму из п.3.5, изменить в ней строку: DmaC EQU #40;#41;#42;#43 После запуска проверить - на выводе 4DD14; 7DD14; 9DD14; 13DD14 (19DD6; 18DD6; 17DD6; 16DD6) должна быть лог. 1, если ее там нет то необходимо проверить вывод 25DD6;26DD6; 27DD6; 28DD6 там тоже должна быть лог. 1, если ее там нет, то неисправна DD6, иначе нужно осциллографом проверить наличие им- пульсов вот такой формы:TTTTTTTTTTTT с ча- |||||||||||| стотой 1.75МГц на выводе 2и3DD14; 6DD14; 11и12DD14; 15DD14 или подсоединить к нему Пробник #1 - его светодиод должен светить- ся в полнакала. Если импульсов нет, то не- пропаяна связь DD10 (DD11) - DD14, если есть - то неисправна DD14. Биты 4 - 7 регистра состояния (#8C77 (35959)) должны иметь тоже значение, что и выводы 19 - 16 DD6 (выводу 19 соотв. бит 4, выв. 18 - бит 5 и т. д.), т. е. ес- ли на выводе лог. 0 то и соотв бит =0 и наоборот. В этом тоже полезно убедится. 3.5.2 Если в предыдущем пункте все OK, а тест все-равно не идет, следует прове- рить сигналы запроса шины: 3.5.2(о) Набирается программа из п.3.5. На 10DD6 нужно осциллографом про- верить наличие импульсов вот такой формы: |||||||||||| с частотой 440кГц. На 8DD5 и ++++++++++++ на 25Z80 должны быть импульсы такой формы: TTTTTTTTTTTT с той-же часто- т8ой. |||||||||||| 3.5.2(п) Набирается программа: TimerC EQU #FD77;#FD77;#FE77;#FE77 TimerD EQU #3D77;#7D77;#3E77;#7E77 TimerB EQU #34;#74;#34;#74 DmaS EQU #0C77;#2C77;#4C77;#6C77 DmaL EQU #1C77;#3C77;#5C77;#6C77 DmaC EQU #40;#41;#42;#43 DmaM EQU #00;#01;#02;#03 LD BC,TimerC LD A,TimerB OUT (C),A LD BC,TimerD LD DE,2 OUT (C),E OUT (C),D LD BC,#8C77 XOR A OUT (C),A LD BC,#CC77 OUT (C),A LD BC,#BC77 LD A,DmaC OUT (C),A LD BC,DmaS LD DE,#8000 OUT (C),E OUT (C),D LD BC,DmaL LD DE,0 OUT (C),E OUT (C),D M1 LD BC,#AC77 LD A,DmaM OUT (C),A M2 HALT HALT HALT HALT HALT LD A,#7F IN A,(#FE) RRCA JR C,M2 RRCA JR C,M1 RET После набора программы следует подклю- чить Пробник #1 к 8DD5. На каждое нажатие SPACE светодиод пробника должен изменять свое состояние на противоположное. Выход из программы SS+SPACE. Если все нормально, то проверяется 8DD5 и 25Z80. 3.5.3. Если после запуска программы из п.3.5. и п.3.5.1 компьютер виснет, а на 25Z80 постоянно лог. 0 - следует проверить линию подтверждения запроса шины. Проверя- ем 4DD5 - там должна быть лог. 1. Если все так и есть - неисправна DD6. 3.5.4. Для окончательной проверки ра- ботоспособности контроллера ПДП восполь- зуйтесь утилитой FreeSpeed. 3.6. Впаиваются микросхемы DD2, DD8.1, DD8.4, DD9, DD12 и DD13. 3.6.1 Теперь нужно проделать самую неприятную операцию - изменения на плате компьютера. Неприятную потому, что хотя многие фирмы гордятся своими "системными шинами", на которые вроде-как выведены сигналы для прямого доступа, к сожалению нет ни одного компьютера, который может без переделок предоставить для прямого доступа более 48k памяти. Поэтому я позво- лю себе сделать некоторое отступление, чтобы хоть как-то объяснить что нужно сде- лать, т. к. указания типа "возьми то, при- паяй туда" я могу дать только для очень ограниченного количества схем. Итак, немножко о том как компьютер ад- ресует память. Для это в нем есть такая вещь как диспетчер памяти. Основная его задача - взять адрес от процессора и преобразовать его в адрес для микросхем памяти. Сначала рассмотрим самый простой диспетчер - такой как стоит в 48м компью- тере. Кое-кто скажет, что в 48м нет ника- кого диспетчера.. и ошибется. Диспетчер там есть, но очень ма-аленький. Единствен- ное что он делает это проверяет, что A14 и A15 равны 0 и если это так, то направляет адрес в ПЗУ иначе в ОЗУ. Все очень просто, но если такой компьютер собран на 565РУ5, емкость которых 64кб, то при таком раскла- де 16кбайт, пропадает зря (накрывается ПЗУхой). Теперь поглядим, что творится в 128м. Здесь картина уже сложнее. Процессор не может адресовать больше чем 65536 (2^16) байт потому как у него только 16 адресных линий. Для этого диспетчер делает следую- щее. Когда процессор обращается к адресам #C000-#FFFF (т. е. A14 и A15 = 1) диспет- чер не выдает старшие разряды адреса прямо в ОЗУ, а подменяет их значениями из порта #7FFD. Обозначим старшие адреса которые идут в ОЗУ как A14', A15', A16' (и A17', A18' для 512к) чтобы отличить их от про- цессорных (A0-A13 идут в ОЗУ напрямую). Теперь посмотрите что получается, когда процессор обращается к различным участкам памяти: Диапазон |A14|A15|A14'|A15'|A16' -----------+---+---+----+----+------ #C000-#F000| 1 | 1 |берется из #7FFD #8000-#BFFF| 0 | 1 | 0 | 1 | 0 #4000-#7FFF| 1 | 0 | 1 | 0 | 1 #0000-#3FFF| 0 | 0 | ОЗУ не выбирается Для 512й машины все абсолютно тоже са- мое только добавляются еще две адресные линии A17' и A18'. Все это кое-как работает пока нет контроллера прямого доступа, но для DMA такая структура памяти совершенно не го- дится. Во-первых контроллер DMA - это почти сопроцессор, он, в отличии от других периферийных контроллеров может адресовать память ВМЕСТО процессора, но выбирает он оттуда только данные, команды он получает через порт. Поэтому ему совершенно не нуж- на ПЗУ в адресном пространстве, очень трудно представить зачем нужен прямой дос- туп к ПЗУ. Во-вторых абсолютно невозможно переключать порт #7FFD так, чтобы каждый канал забирал данные со своей страницы. И в-третьих, как не трудно заметить про- цессорные страницы имеют размер 16к, но контроллер DMA может передавать за раз до 64к, что позволяет использовать инструмен- ты в 4 раза длиннее. Из всего выше сказанного следует, что надо найти в компьютере старшие адресные линии ОЗУ A14', A15', A16' ( и A17', A18' для 512к) и сделать так, чтобы они отклю- чались внешним сигналом. Все бы ничего, да вот только диспетчер почти всегда разбро- сан по плате и по схеме. Конкретные схемы подключения к двум известным мне диспетче- рам RAM 512k будут приведены в следующий раз. Подключение к ПЕНТагону 128к вот та- кое: Сигнал А16' соединяется с 9D61, А15' - 7D61, A14' - 4D61, ничего не отрезается, кроме 15D61 от земли. На 15D61 подключает- ся AEN(не инверсный). Примечание: если у Вас 512к или выше, то я рекомендую сначала подключать карту без переделки диспетчера памяти, как к 128к. Потом, убедившись, что карта работает нормально произвести пере- делку диспетчера. 3.7. Сборка диспетчера прерываний осо- бых трудностей не вызывает. После оконча- тельной сборки диспетчера необходимо пере- резать дорожку, идущую на вывод INT Z80. Сигнал INT, который шел на процессор подк- лючается к сигналу INT на карте, а INT' с карты подается на Z80. Работу диспетчера прерываний можно проверить утилитой INT. Окончательную проверку собраной карты можно произвести с помощью программ MODPlayer, SFX и т. д. Используемые м/с: 555ИД7 - 2 шт 555ЛП8 - 1 шт 555ЛИ1 - 2 шт 555ЛН1 - 1 шт 1810ВТ37 - 1 шт 555АП4 - 1 шт 555ЛА3 - 1 шт 555ИР26 - 1 шт 580ВИ53 - 2 шт 555ЛЛ1 - 2 шт 555ИР22 - 2 шт 555ТР2 - 2 шт 555ТМ2 - 1 шт 555ТМ8 - 1 шт 555ИР23 - 4 шт 555ТМ9 - 4 шт 572ПА1 - 8 шт КР140УД20 - 4 шт Приложение. Логичекие пробники Пробник #1. Индикатор Стробирующих импульсов. 1+-+--+5 // 560ом щуп +5В<-+R| Q+--+ ------------->+5В 3| | | АЛ307 <--------+C| | 2| | | +-----+D| | | 4| | _|6 |+5В<-+S| Q+--+ | +-+--+ | +-------------+ 555ТМ2 Этот пробник предназначен для проверки наличия стробирующих импульсов, т. е. им- пульсов выбора портов, регистров и т. п. Каждый стробирующий импульс вызывает пе- реключение светодиода в противоположное состояние. Для проверки пробника прикосни- тесь щупом к земле (имеется в виду не наша планета, а общий провод схемы) светодиод должен переключиться в противоположное состояние (Из-за нечеткого контакта это может произойти не с первой попытки). Предназначен этот пробник для проверки портов. Для примера проверим порт #FE на работоспособность. В пентагоне это D43. Подключаем пробник щупом к 9D43, питание на пробник берется только с платы компью- тера. Набираем программу: 10 OUT 254,RND*7: PAUSE 0: GO TO 10 После запуска на каждое нажатие клавиши светодиод пробника должен изменять свое состояние на противоположное. Если при этом бордюр тоже меняет цвет то все ОК. Если пробник показывает наличие импульсов, а бордюр не меняется то D43 протянула нож- ки, а если наоборот, то вы воткнули щуп явно не туда. Аналогично проверяется любой другой порт. Главное что: если строб. им- пульсы доходят до порта, а порт ни бэ ни мэ, то сдох регистр порта (типа там ТМ8, ТМ9, ИР23, БИСки и тд), а если импульсов нет, то регистр ни при чем и неисправность надо искать в дешифраторе (ИД7, логика и т. п.). (Маленькое примечание: если строб импульсы отсутствуют, то надо оторвать эту линию от входа регистра и снова проверить пробником. Если импульсы появились то зна- чит сдох регистр и своим входом садит де- шифратор). Пробник #2. Сигнатурный анализатор. 3+--+--+2 "1"// "1"<------+D0|Q0+-----+ ---------->+5В 4| | |5 "2"// "2"<------+D1|Q1+-----+ ---------->+5В 7| | |6 "3"// "3"<------+D2|Q2+-----+ ---------->+5В 8| | |9 "4"// "4"<------+D3|Q3+-----+ ---------->+5В 13| | |12 "5"// "5"<------+D4|Q4+-----+ ---------->+5В 14| | |15 "6"// "6"<------+D5|Q5+-----+ ---------->+5В 17| | |16 "7"// "7"<------+D6|Q6+-----+ ---------->+5В 18| | |19 "8"// "8"<------+D7|Q7+-----+ ---------->+5В 11| |__|1 "C"<------+C |OE+---+ +--+--+ + все диоды - АЛ307, все резисторы 560ом Предыдущий пробник предназначен для проверки наличия стробирующих импульсов на регистрах, а вот для того, чтобы узнать какие именно данные заносятся в эти ре- гистры и служит пробник #2. Чтобы прове- рить работоспособность этого пробника, коснитесь щупом "C" земли - все светодиоды погаснут. Теперь соедините шупы "1" - "8" с землей и снова коснитесь земли щупом "C". Все светодиоды должны загореться. Для проверки чего-нибудь соединим щупы "1" - "8" с шиной данных, а щуп "C" с линией стробирования. После OUT'а светодиоды пе- реключаются в некоторое состояние, которое называется сигнатурой. Сигнатура - это сокращенная запись, какой светодиод горит, а какой нет. Например сигнатура "ГГНГН" означает, что светодиод "1" горит, 2 го- рит, 3 - негорит, 4 - горит, 5 - негорит, состояние остальных безразлично. Практи- чески вам не придется вычислять, что будет гореть если сделать OUT куда-то, что-то. Достаточно сделать OUT туда-то, то-то и сравнить с приведенной сигнатурой. Для примера допроверим порт бордюра. Подсоеди- ним щупы "1" - "3" к 4, 5 и 12 ножкам D43, а щуп "C" к 9D43. теперь из Бейсика даем команду BORDER и смотрим на пробник. Срав- ните сигнатуры для различных цветов бордю- ра: BORDER 0 ГГГ BORDER 1 НГГ BORDER 2 ГНГ BORDER 3 ННГ BORDER 4 ГГН BORDER 5 НГН BORDER 6 ГНН BORDER 7 ННН Если все сигнатуры правильные, а порт функционирует неверно, то что-то с регист- ром, если же сигнатуры не сходятся по ка- кой-то линии (или линиям) то причина на этой линии (обрыв, замыкание и т. п.). Этим пробником можно проверять не только данные, но и адреса портов, всякие сопутствующие сигналы, что даже не всегда возможно сделать осциллографом.