Просмотр полной версии : ПК Специалист + AY-3-8910/12
CityAceE
19.06.2025, 10:13
Для большей монструозности надо AY поставить для музла.
Мы обсуждали-обсуждали эту тему, но в итоге так и не пришли ни к чему. AY никогда на Специалисте не было и нет до сих пор, хотя его подключение - плёвый вопрос. На какие адреса вешать его?
Судя по этой истории (https://asvcorp.ru/darch/asv/specialist/index.html) подключали ВИ53, но ни с кем из разработчиков связи нет. Даже мыло не оставили.
CityAceE
19.06.2025, 19:23
AY никогда на Специалисте не было и нет до сих пор
Оказывается, ещё 30 лет назад таки его ставили в Специалист!
Оказывается, ещё 30 лет назад таки его ставили в Специалист!
Для AY еще нужно кадровые на прерывания завести на процессор. А то без прерываний будет не комильфо
CityAceE
20.06.2025, 08:18
Для AY еще нужно кадровые на прерывания завести на процессор.
Как выясняется, в Эрике это всё уже было сделано!
А то без прерываний будет не комильфо
Так-то да, но даже и без прерываний это уже что-то.
Serg6845
20.06.2025, 08:58
Как выясняется, в Эрике это всё уже было сделано!
а если верить вот этой схеме https://специалист-пк.рф/schemes/Erick.pdf (а другой я не нашел) - то нет, /INT висит на +5В.
- - - Добавлено - - -
Для AY еще нужно кадровые на прерывания завести на процессор.
и еще придумать как обеспечить их правильную работу (8080 в отличие от Z80 сам ничего не умеет). хотя бы шину подтянуть придется, надо смотреть будет ли этого достаточно.
и еще придумать как обеспечить их правильную работу (8080 в отличие от Z80 сам ничего не умеет).
Ну В ПК8000 прерывания от кадровой есть, да и AY на нем уже пробовали. Все замечательно звучало. Если совсем недавно, то можно взять схему прерываний из моей темы по Даунгрейду Ленинграда на ВМ80.
Как выясняется, в Эрике это всё уже было сделано!
Это (и не только это) было сделано SYR-ALEX. Автор же только упомянул в статье, что такой вариант есть, но авторской схемы, насколько знаю, нет.
CityAceE
20.06.2025, 12:28
Это (и не только это) было сделано SYR-ALEX.
Да, перечитал ветку и увидел всё. И что ты игрушку под это дело адаптировал.
А можешь какой-нибудь простенький тестик сделать для AY, подключенного по схеме из РадioАматора? Pyk мог бы это добавить в Emu80, но, говорит, что ему проверять не на чем.
Сделать можно, но зачем? Вариант мертворожденный, конфликтует как минимум с программатором, программ нет, желающих программировать для него тоже нет. Если уж подключать, то возможно есть более удачные адреса.
А для Эрика я все же побольше сделал, но это дело прошлое.
Serg6845
20.06.2025, 13:24
Если совсем недавно, то можно взять схему прерываний из моей темы по Даунгрейду Ленинграда на ВМ80.
ну так правильно, там анализируется слово состояния и в цикле прерывания нет сигнала RDM/, так что подтяжка шины выдает FF и все работает как надо. в Специалисте же слово состояния никак не анализируется, и как по факту будет работать прерывание - я предсказать не берусь.
из даташита 8080:
"It is the responsibility of the
peripheral logic to see that an eight-bit interrupt instruction
is "jammed" onto the processor's data bus during state T3.
In a typical system, this means that the data-in bus from
memory must be temporarily disconnected from the processor's
main data bus, so that the interrupting device can
command the main bus without interference."
а как подать на INT импульс с кадровой - так это дело десятое, один проводок кинуть.
CityAceE
20.06.2025, 14:33
Сделать можно, но зачем? Вариант мертворожденный, конфликтует как минимум с программатором, программ нет, желающих программировать для него тоже нет. Если уж подключать, то возможно есть более удачные адреса.
Хорошо, адреса можно и другие подобрать. Это ж не проблема. Пока проблема в отладке. А желающих программировать нет как минимум из-за того, что такая реализация только на бумаге - нет ни эмуляции, ни тем более в железе. А так можно было бы хотя бы плеер какой-нибудь адаптировать и вот уже у нас тонна музыки.
А для Эрика я все же побольше сделал, но это дело прошлое.
Да, но там AY подключен как на Спектруме, по таким же адресам портов. А у стандартного Специалиста портов нет. Нужен какой-то другой софт.
А так можно было бы хотя бы плеер какой-нибудь адаптировать и вот уже у нас тонна музыки.
Какой плеер с тонной музыки ты предлагаешь адаптировать под тот вариант подключения? Извратится можно и какую-то музыку адаптировать, но для более-менее комфортных адаптаций (скорее всего с вектора, где из 8080 больше всего музыки для AY) надо прерывания или в крайнем случае таймер.
Тот вариант представляет исторический интерес, а если ты хочешь пользоваться, а не страдать, надо решить комплексную задачу. И подключение AY и прерывания (или, повторюсь, хотя бы таймер).
CityAceE
20.06.2025, 15:13
надо решить комплексную задачу. И подключение AY и прерывания
Нужно же хоть с чего-то начать. Хотя бы с AY, и хотя бы в эмуляторе. Pyk готов дорабатывать свой эмулятор, но ему нужен хоть какой-то софт, который позволит ему эту эмуляцию проверить. А что касается ВИ53, то она уже реализована и в Emu80, и в FPGA Специалиста по схеме SP-580. Что касается прерываний, то обсуждение такое ведётся в Телеграм-группе, и я очень надеюсь, что в скором времени они будут реализованы, как минимум, в FPGA Специалисте. Надеюсь, и Emu80 не отстанет. А дальше будем смотреть. Но нужно с чего-то начать...
в Специалисте же слово состояния никак не анализируется, и как по факту будет работать прерывание - я предсказать не берусь.
Хорошо, а если ввести в Спец анализ слова состояния, насколько потеряется в совместимости?
По факту появляется плюс, выделения чисто портов по командам (IN и OUT). Но я не в курсе кто то халявит там с командами IN и OUT
Нужно же хоть с чего-то начать.
Надо начинать с пожеланий/требований. По ним делать/модифицировать (или хотя бы проектировать) железку. Параллельно реализовать в эмуляторе.
@Pyk готов дорабатывать свой эмулятор, но ему нужен хоть какой-то софт, который позволит ему эту эмуляцию проверить.
Это конечно здорово, а как ты думаешь я бы стал пробовать что-то сделать под AY? Я бы попытался модифицировать конфиг Emu, но это же может сделать и любой другой человек. В идеале для отладки эмулятора нужны тесты, а для написания тестов нужен эмулятор или железка. Тут нет единственно-верного варианта, что делать первым, у кого что получится, тот и молодец.
Serg6845
20.06.2025, 16:11
Хорошо, а если ввести в Спец анализ слова состояния, насколько потеряется в совместимости?
у меня вообще стоит ВК38 (и ВН59 до кучи) - проблем с совместимостью пока не замечал.
По факту появляется плюс, выделения чисто портов по командам (IN и OUT).
анализировать можно по разному, для прерываний достаточно 0-й бит смотреть, если 1 - значит прерывание и в этом цикле чтения отключаем шину и пусть на нее резисторы FF выдают, а все остальное останется как прежде, DBIN и /WR от этого не зависят.
Но я не в курсе кто то халявит там с командами IN и OUT
я даже пальцем могу показать :)
https://zx-pk.ru/threads/36134-zapolnenie-ekrana-spetsialista-tochkami-sluchajnogo-tsveta.html?p=1212377&viewfull=1#post1212377
Извините, что встреваю, но обсуждение прерываний и обращений к портам для меня выглядит странно.
Для прерываний по минимуму
1. Надо сгенерировать INT
2. В цикле INTERRUPT_M1 (идентифицируем по слову состояния) "чипсет" должен выдать процу FF (не обязательно, но это самое простое).
3. Гасим INT
Детали желающие могут обсуждать, но принципиальных проблем нет.
Что касается обращений к портам по out (можно и z80 приплести).
Если анализировать слово состояния для выявления например INTERRUPT_M1, то никто не заставляет еще выявлять и обращения к портам по IN/OUT и как-то их менять. Тут все может остаться как раньше.
И для z80 при большом желании можно сделать эмуляцию обращений к памяти по адресу (старший байт=номер порта, младший байт=номер порта). Для этого надо выявлять обращения к портам и в этих циклах дублировать (через мультиплексор) в старший байт ША младший байт ША.
Надо ли это? Зависит от целей, но в принципе все возможно, хотя и потребует изменений/доработок схемы, в некоторых случаях значительных.
у меня вообще стоит ВК38 (и ВН59 до кучи) - проблем с совместимостью пока не замечал.
А где можно поглядеть на включение ВК38 и ВН59 до кучи. Интересно.
- - - Добавлено - - -
анализировать можно по разному, для прерываний достаточно 0-й бит смотреть, если 1 - значит прерывание и в этом цикле чтения отключаем шину и пусть на нее резисторы FF выдают, а все остальное останется как прежде, DBIN и /WR от этого не зависят.
Ну я про порты упомянул просто с целью увеличения так сказать возможностей. Но если никому не уперлось, то да можно только один бит анализировать.
- - - Добавлено - - -
чем это Линёвский лучше?
Просто некоторые тут монстра создать решили, а мы так сказать подкинули идей для большей монструозности. :)
CityAceE
22.06.2025, 10:26
Оказывается, ещё 30 лет назад таки его ставили в Специалист!
Начало положено! Pyk сделал поддержку у себя в Emu80 и написал тест:
https://plvideo.ru/watch?v=dZ0ZOLZ-PFlh
Конфиг для Emu80 во вложении. С учётом того, что там же есть поддержка и ВИ53 по схеме SP580, то, наверное, можно и какую-нибудь мелодию адаптировать.
CityAceE
22.06.2025, 21:14
Набросал проигрыватель PSG-файлов:
https://plvideo.ru/watch?v=_EPaj7QcZzCm
Исходник + мелодия + готовый RKS во вложении.
CityAceE
23.06.2025, 11:14
Поправил ошибки в тексте проигрывателя, так как кое-что парсилось неверно и, соответственно, проигрывалось неправильно:
; PSG Player (memory-mapped AY-3-8910) with frame delay
; https://documentation.help/AY-3-8910.12-ZX-Spectrum-ru/ay_r9zqf.htm
device zxspectrum48
org 0 ; Адрес загрузки
startprog:
ay_sel equ 0xf403 ; Выбор регистра AY
ay_wr equ 0xf401 ; Запись в регистр AY
ay_rd equ 0xf400 ; Чтение из регистра AY
delay_const equ 1633 ; Константа задержки
psg_data equ psg + 16 ; Адрес начала PSG-данных
ld hl, psg_data
loop: ld a, (hl)
cp 0xfd ; Конец?
jp z, exit
cp 0xfe ; Задержка?
jp z, delay
cp 0xff ; Явный кадр?
jp z, frame
cp 0x0e ; Регистровая пара?
jp nc, skip
ld c, 0
jp write
; FF-блок
frame: inc hl
frloop: ld a, (hl)
cp 0xfd
jp z, exit
cp 0xfe
jp z, pause
cp 0xff
jp z, pause
cp 0x0e
jp nc, skip2
ld c, 1
jp write
skip2: inc hl
skip: inc hl
jp loop
; FE XX: задержка XX*4 кадров
delay: inc hl
ld a, (hl)
rlca
rlca
ld b, a
dloop: call wait
dec b
jp nz, dloop
inc hl
jp loop
; Запись регистра обычная (C=0) или внутри FF (C=1)
write: ld a, (hl)
ld (ay_sel), a
inc hl
ld a, (hl)
ld (ay_wr), a
inc hl
ld a, c
or a
jp nz, frloop
pause: call wait
jp loop
; Простая задержка на один кадр
wait: ld de, delay_const
wloop: dec de
ld a, d
or e
jp nz, wloop
ret
; Глушим все AY-регистры 0–13 перед выходом
exit: ld c, 0
eloop: ld a, c
ld (ay_sel), a
xor a
ld (ay_wr), a
inc c
ld a, c
cp 0x0e
jp c, eloop
ret
psg:
incbin "Slash - Molodoy (1996).psg"
; incbin "Stever - Cosmozone1_cut.psg"
db 0xfd ; Дублируем маркер конца мелодии на случай, если мелодия обрезана
endprog:
savebin "ay_spec.bin", startprog, endprog - startprog
CityAceE
23.06.2025, 14:03
Поэкспериментировал с индикацией:
https://plvideo.ru/watch?v=a7wICGGqjxUe
Мелодия играет вот эта (https://zxart.ee/eng/authors/s/slash1/molodoy/).
Мелодия играет вот эта.
Ну вот, а разговоров то было, что на Спеце AY нельзя сделать. Теперь еще прерывания и будет счастье :)
Поэкспериментировал с индикацией:
А что матрац не двигается, где понимаешь скролл, не порядок :)
CityAceE
23.06.2025, 16:17
А что матрац не двигается
На Специалисте такой матрац не подвинуть, разве что только познакоместно.
где понимаешь скролл, не порядок
Ждём прерывания ;)
разве что только познакоместно
По вертикали можно и построчно, проблема больше в отсутствии синхронизации с разверткой, будут видны разрывы. Ну и конечно не полноэкранно.
CityAceE
24.06.2025, 21:06
В Emu80 есть возможность включить прерывания для Специалиста (https://zx-pk.ru/threads/27488-emu80-v-4.html?p=943329&viewfull=1#post943329). Поэкспериментировал и с этим режимом. Проигрывание музыки и перемещение бегущей строки синхронизировано по прерываниям. Но, так как эти прерывания в Emu80 никак не синхронизированы с кадрами, имеет место тиринг...
https://plvideo.ru/watch?v=7adiG7WtPmaC
Поэкспериментировал и с этим режимом. Проигрывание музыки и перемещение бегущей строки синхронизировано по прерываниям. Но, так как эти прерывания в Emu80 никак не синхронизированы с кадрами, имеет место тиринг...
А цвет по какому стандарту сделал?
CityAceE
25.06.2025, 11:15
А цвет по какому стандарту сделал?
Стандартный восьмицвет. А НП с защёлкой.
Стандартный восьмицвет.
А в режиме МХ не пробовал, вроде там цвет поинтереснее?
- - - Добавлено - - -
Ждём прерывания
Кстати, поглядел схему цвета в Спеце, которая восьмицвет, то там вроде при доработке звук переносится на выход INTE процессора. Это наверное не очень полезно для введения прерывания.
CityAceE
25.06.2025, 11:57
А в режиме МХ не пробовал, вроде там цвет поинтереснее?
Пробовал, когда Batty адаптировал. Картинка получилась 1:1, как на Спектруме.
там вроде при доработке звук переносится на выход INTE процессора
Нет, там не звук переводится INTE, а НП (начальный пуск). И эта проблема решена защёлкой.
Нет, там не звук переводится INTE, а НП (начальный пуск). И эта проблема решена защёлкой.
Поглядел повнимательнее, да точно.
CityAceE
26.06.2025, 16:55
ivagor, а можешь подсказать, для 8080 вообще существует проигрыватель PT3 или что-нибудь в этом роде? Я так понимаю, что нужно в сторону софта для Вектора смотреть? Что там интересного создано для воспроизведения звука через AY, что можно было бы адаптировать для Специалиста?
Нативного проигрывателя PT3 для 8080 нет. Есть PT2, STM, некий RMP, вроде еще что-то. Но PT3 можно играть через упакованный PSG.
Если устроит выдергивание бинарников плееров, то можно пройтись по соответствующей категории базиса (https://caglrc.cc/scalar/categories/78/).
В виде исходников было в теме ПК8000. Mick выкладывал вроде STM, DemonID7 кажется PT2, я уже подзабыл.
Исходники распаковщиков psg можно глянуть в этой теме (https://zx-pk.ru/threads/35286-pleer-konverter-vortextracker-vi53.html?p=1186027&viewfull=1#post1186027)
marinovsoft
26.06.2025, 17:25
https://caglrc.cc/scalar/ware/607/
ЕМНИП, при подключении AY к Корвету (https://zx-pk.ru/threads/26761-podklyuchenie-ay8910-k-korvetu.html) я этот плеер переделывал
В виде исходников было в теме ПК8000. Mick выкладывал вроде STM
Я выкладывал порт плеера спектрумовского Sound Tracker - https://zx-pk.ru/threads/8374-pk8000-podklyuchenie-k-kompyuteru-ay-(ay-3-8910).html?p=150239&viewfull=1#post150239
CityAceE
27.06.2025, 13:40
Адаптировал для Специалиста проигрыватель Sound Tracker, который взял у DemonID7 здесь (https://zx-pk.ru/threads/8378-pk8000-soft-staryj-i-novyj.html?p=1169266&viewfull=1#post1169266). Он проигрывает модули .STC. Я не знаю кто изначальный автор данного проигрывателя.
Мелодии можно качать, например, отсюда (https://zxart.ee/eng/music/database/format:STC/sortParameter:votes/sortOrder:desc/resultsType:zxitem/).
В комплекте исходный текст (в мнемониках Z80), пример мелодии (KSA - E-MEGAMIX.stc) и готовый RKS (без использования прерываний).
CityAceE
27.06.2025, 16:25
Для демонстрации вставил проигрыватель в свою "мегадему":
https://plvideo.ru/watch?v=3II2v8X2CA0-
Для демонстрации вставил проигрыватель в свою "мегадему":
Ну теперь мегадему в видеорежиме стандарта МХ нужно сделать для наглядности
CityAceE
27.06.2025, 19:27
Решил поэкспериментировать с проигрыванием модулей PT2/PT3.
Взял исходники на ассемблере Z80 для Спектрума/MSX отсюда (https://bulba.untergrund.net/PTxTools.7z) (PTxPlay). Убедился, что то, что компилирую я, байт в байт совпадает со вложенным бинарником.
Далее я подправил процедуру вывода на AY:
IF SPEC
AY_SEL equ 0xf403 ; Выбор регистра AY
AY_WR equ 0xf401 ; Запись в регистр AY
AY_RD equ 0xf400 ; Чтение из регистра AY
;Специалист
XOR A
LD HL, AYREGS ; HL = указатель на данные AY
LD C, 0x0D ; C = 13 (счётчик регистров)
LOUT:
LD (AY_SEL), A ; Выбор регистра AY (0xF403)
LD B, A
LD A, (HL) ; Читаем значение в A
LD (AY_WR), a ; Записываем в AY (0xF401)
LD A, B
INC HL ; Переходим к следующему значению
INC A ; Увеличиваем номер регистра (A++)
CP C ; Проверяем, достигли ли 13 (C=0x0D)
JR NZ, LOUT ; Если нет — повторяем
; Обработка 13-го регистра
LD (AY_SEL), A ; Выбираем регистр 13
LD A, (HL) ; Читаем его значение
AND A ; Проверяем бит 7 (для RET M)
RET M ; Если бит 7 = 1 (знак минус), возвращаемся
LD (AY_WR), A ; Иначе записываем значение регистра 13
RET
ENDIF
Прицепил музыку после переменных, как того требует документация, и согласно ей же приделал цикл с вызовом нот. Скомпилировал. Получил RKS, и загрузил его в эмулятор Emu80 в Специалист с Z80. По моему плану я должен был услышать музыку. Вместо я этого я получаю зависание с порчей экрана. При первичном анализе выяснил, что всё рушится уже на первоначальной процедуре инициализации проигрывателя. Дальше не копал. Конфигурация эмулятора проверена на моей адаптации Batty, то есть Z80 работает, и на предыдущем проигрывателе, то есть AY тоже звучит.
Вот спрашивается, что может идти не так?
Сомневаюсь, что проблема с проигрывателем. Насколько помню здесь (https://zx-pk.ru/threads/29363-vozrozhdenie-quot-erika-quot.html?p=1043497&viewfull=1#post1043497) тоже использовал вариант с сайта Бульбы.
- - - Добавлено - - -
Действительно использовал плеер оттуда, а конкретно
;Vortex Tracker II v1.0 PT3 player for ZX Spectrum
;ROM version (specially for Axor)
;(c)2004,2007 S.V.Bulba <vorobey@mail.khstu.ru>
;убрал ссылки
;Release number
;Release EQU "MOR7"
CityAceE
28.06.2025, 08:58
Насколько помню здесь тоже использовал вариант с сайта Бульбы.
Что ж, раз так, то полез проверять всё заново. Начал с того, что скомпилировал код для Спектрума, чтобы убедится, что он работоспособен, музыкальный модуль я выбрал правильного формата и инициализация проходит верно. Скомпилировал всё на пересекающийся со Специалистом адрес ОЗУ 25000. Всё скомпилировалось и запустилось. Далее просто заменил процедура вывода на AY Специалиста. Скомпилировал и запустил на Специалисте. И, о чудо, всё заиграло! Потом сменил адрес на нулевой и всё точно так же продолжило играть. Что это было изначально непонятно...
Смущает только куча предупреждений во время компиляции. Интересно, почему автор не позаботился о них?
d:\Specialist\Develop\PTxPlay>d:\Specialist\Tools\sjasmplus PTxPlay.asm
SjASMPlus Z80 Cross-Assembler v1.20.3 (https://github.com/z00m128/sjasmplus)
Pass 1 complete (0 errors)
Pass 2 complete (0 errors)
PTxPlay.asm(306): warning: value 0x1F0 is truncated to 8bit value: 0xF0
PTxPlay.asm(366): warning: value 0x6917 is truncated to 8bit value: 0x17
PTxPlay.asm(413): warning: value 0x6923 is truncated to 8bit value: 0x23
PTxPlay.asm(686): warning: value 0x14587 is truncated to 16bit value: 0x4587
PTxPlay.asm(1008): warning: value 0x6AEC is truncated to 8bit value: 0xEC
PTxPlay.asm(1072): warning: value 0x69EC is truncated to 8bit value: 0xEC
PTxPlay.asm(1436): warning: value 0xDD8 is truncated to 8bit value: 0xD8
PTxPlay.asm(1448): warning: value 0xCDA is truncated to 8bit value: 0xDA
PTxPlay.asm(1461): warning: value 0xE08 is truncated to 8bit value: 0x08
PTxPlay.asm(1473): warning: value 0xFC0 is truncated to 8bit value: 0xC0
include data: name=Music/Slash - Molodoy (1996).pt2 (2754 bytes) Offset=0 Len=2754
Pass 3 complete
Errors: 0, warnings: 10, compiled: 1497 lines, work time: 0.047 seconds
CityAceE
30.06.2025, 22:19
Все выходные трудолюбиво поэтапно переводил код Z80 проигрывателя PT2/PT3 на i8080. Заботливо, команду за командой, каждый раз проверяя, что всё играет, как и раньше, переводил команду за командой. И вот ни одной команды, которую бы не знал i8080, в коде не осталось. SJAsmPlus всё компилирует без ошибок и предупреждений с ключом --i8080, а код получается в точности такой же, как и без этого ключа. Специалист с Z80 под Emu80 прекрасно поёт мелодию, заложенную в файл. И я уже готов был праздновать победу, пока не запустил RKS на стандартной конфигурации с процессором i8080. А там, увы, всё оказалось очень и очень печально - оно не поёт, а код уходит непонятно куда-то. Опечален. Устал, поэтому пока не понимаю как искать причину. Но слишком жалко бросать начатое. А так данный проигрыватель пригодился бы и для Вектора, и для ПК8000, и вообще для любого компа, к которому подключили AY.
Смущает только куча предупреждений во время компиляции
От них я избавился первым делом!
Сейчас в конфиге эмуляторе AY временно посадил на F400. Подумалось: может быть, и стоит его там оставить, предусмотрев дополнительный дешифратор и разбив диапазон F000-F7FF по аналогии с описанным в журнале дешифратором на F800-FFFF? Конфликты с чем-то будут?
CityAceE
01.07.2025, 08:21
Подумалось: может быть, и стоит его там оставить, предусмотрев дополнительный дешифратор и разбив диапазон F000-F7FF по аналогии с описанным в журнале дешифратором на F800-FFFF?
Прекрасная идея, думаю, что именно на ней стоит остановиться!
Конфликты с чем-то будут?
На диапазон F000-F7FF автор компьютера предложил вешать дополнительную ВВ55, чтобы подключать дополнительную периферию. И первым делом он подключил туда программатор. Схема и программа для программатора были опубликованы в журнале М-К 07'1987. Это была вообще третья публикация про Специалист, то есть по сути это основы и некий стандарт. Я полез в опубликованную программу и посмотрел, что там для доступа используются ячейки F000-F003.
О другом применении этого диапазона, за исключением монитора SP-580, я никогда не слышал.
Получается, что адреса F400, при условии применения дополнительного дешифратора, и с программатором не будут конфликтовать, и будут соответствовать схеме, опубликованной 30 нет назад в журнале Радиоаматор. Хотя нет, с Радиоаматором я погорячился, там F000 предлагался. Но всё равно F400 тоже хорошо ;)
Если ни у кого возражений нет, то на этом и остановимся. Pyk уже сделал всё в Emu80, на подходе реализация в FPGA. Ну и ждём, чтобы то же самое было реализовано ещё в железе. Хорошо бы, если бы fifan добавил бы эту доработку в Линевский вариант. А поддержка этого дела потихоньку пилится. Во всяком случае кое-какую музыку уже проиграть можно. Также можно будет какую-нибудь игрушку озвучить.
CityAceE
01.07.2025, 10:09
оно не поёт, а код уходит непонятно куда-то.
Нашёл и поборол. Теперь поёт и на i8080. Проблема была в том, что в коде активно используется самомодификация. И программа в процессе своей работы упорно подставляла в код инструкции Z80. Чуть приведу в порядок то, что получилось и выложу.
пригодился бы и для Вектора
В преддверии Ретрограда-2025 (https://zx-pk.ru/threads/36243-retrograd-2025-konkurs-dlya-vektor-06ts.html) очень даже пригодился бы.
CityAceE
01.07.2025, 11:11
В преддверии Ретрограда-2025 очень даже пригодился бы.
Не знаю насколько это в текущем виде можно будет использовать где-то, кроме отдельно проигрывателя. Я же просто в лоб команды менял. Оптимизации - ноль. Например, если подряд идут команды для работы с IX, то в каждой идёт сохранение, а потом восстановление задействованных регистров. По идее можно сохранение сделать один раз перед пачкой этих команд, а после один раз всё восстановить. Да и то, не все регистры необходимо сохранять/восстанавливать - нужно смотреть по контексту. Но на первом этапе уже хорошо то, что оно работает! А дальше, конечно, нужно долго и упорно всё доводить до ума.
Порт программатора используется не только по своему назначению. Забываете про подключенный считыватель SD карты. Не будет ли он конфликтовать с AY?
Serg6845
01.07.2025, 11:29
Порт программатора используется не только по своему назначению. Забываете про подключенный считыватель SD карты. Не будет ли он конфликтовать с AY?
не должен.
из исходников Vinxru:
CLC_PORT = 0F001h
DATA_PORT = 0F002h
CTL_PORT = 0F003h
CityAceE
01.07.2025, 12:29
У Сергея при реализации AY в FPGA встал вопрос, который тут пока не обсуждался. А как, собственно, раскидывать ABC по правому и левому каналам?
Не знаю насколько это в текущем виде можно будет использовать где-то, кроме отдельно проигрывателя. Я же просто в лоб команды менял. Оптимизации - ноль. Например, если подряд идут команды для работы с IX, то в каждой идёт сохранение, а потом восстановление задействованных регистров. По идее можно сохранение сделать один раз перед пачкой этих команд, а после один раз всё восстановить. Да и то, не все регистры необходимо сохранять/восстанавливать - нужно смотреть по контексту. Но на первом этапе уже хорошо то, что оно работает! А дальше, конечно, нужно долго и упорно всё доводить до ума.
Не все должно быть оптимизированно под 10 растровых строк. Такие плееры уже есть. Они полезны для демок и игр, но в них удобство использования не на первом месте. А кому-то может быть хотелось бы просто запустить плеер и послушать коллекцию pt2/pt3. Такого под Вектор по-моему нет даже на минималках, не говоря уже о том, чтобы красиво.
У меня есть Галаксия. Так вот в нёй есть AY и проигрыватель то же. Посмотрите информацию (https://xn----7sbombne2agmgm0c.xn--p1ai/Galaksija/index6.html) - может что полезное найдёте.
https://xn----7sbombne2agmgm0c.xn--p1ai/Galaksija/images/SoundGen.png
не должен.
из исходников Vinxru:
В SDOS тоже все ок:
SD_DATA_PORT EQU 0F000H ;0f700H
...
SD_DATA_PORT_WW55 EQU 0F000h
CityAceE
01.07.2025, 20:48
В общем вот. Это очень грубая адаптация под i8080 проигрывателя PT2/PT3-модулей Сергея Бульбы. Требует серьёзнейшей оптимизации! Гарантировать, что там нет ошибок, я не могу, хотя несколько модулей, которые я тестировал, на мой немузыкальный слух играли как положено.
В комплекте исходный код проигрывателя + файл с макросами + мелодия + готовый к запуску RKS. Макросы сильно упрощённые, подготовленные для конкретной программы. Использовать их для какого-либо другого переноса кода с Z80 на i8080 я не рекомендую.
На Специалисте без прерываний на прилагаемой мелодии слышна неравномерность воспроизведения, которая отсутствует при использовании прерываний.
Будет здорово, если кто-то поищет баги и займётся оптимизацией кода.
CityAceE
04.07.2025, 16:45
Развернул все макросы и, как и ожидал, увидел полный ужас. Кропотливо прошёл по всей программе, каждый раз проверяя свои изменения. Убеждался в каждом конкретном месте, какие регистры нужно сохранять, а какие можно игнорировать. В итоге универсальные конструкции типа таких:
; LD E,(IX+CHP.TnAcc)
ld (t_084 + 1), a
ld a, h
ld (TMP1 + 1), a
ld a, l
ld (TMP1), a
ld hl, (rIX)
ld a, b
ld (TMP2 + 1), a
ld a, c
ld (TMP2), a
ld bc, CHP.TnAcc
add hl, bc
ld a, (TMP2 + 1)
ld b, a
ld a, (TMP2)
ld c, a
ld e, (hl)
ld a, (TMP1 + 1)
ld h, a
ld a, (TMP1)
ld l, a
t_084 ld a, 0
; LD D,(IX+CHP.TnAcc+1)
ld (t_085 + 1), a
ld a, h
ld (TMP1 + 1), a
ld a, l
ld (TMP1), a
ld hl, (rIX)
ld a, b
ld (TMP2 + 1), a
ld a, c
ld (TMP2), a
ld bc, CHP.TnAcc+1
add hl, bc
ld a, (TMP2 + 1)
ld b, a
ld a, (TMP2)
ld c, a
ld d, (hl)
ld a, (TMP1 + 1)
ld h, a
ld a, (TMP1)
ld l, a
t_085 ld a, 0
Превратились в такое:
; LD E,(IX+CHP.TnAcc)
; LD D,(IX+CHP.TnAcc+1)
ld (TMP1+1), hl
ld hl, (rIX)
ld de, CHP.TnAcc
add hl, de
ld e, (hl)
inc hl
ld d, (hl)
TMP1: ld hl, 0
Не везде можно пользоваться стеком, но, где можно, я использовал PUSH/POP.
В аттаче текущая версия. Сделал всё, что мог. Думаю, что этим уже можно пользоваться. Но хотелось бы, чтобы всё-таки кто-нибудь сделал code review и потестировал на своих компах/эмуляторах с i8080.
Также выложил (https://github.com/CityAceE/i8080-PT2-PT3-player) на GitHub.
CityAceE
13.07.2025, 16:21
Pyk внедрил в Emu80 TurboSound и кадровые прерывания в эмуляцию Специалиста. Пока что в тестовой версии. Вот как оно работает:
https://plvideo.ru/watch?v=iMkMn3qB6Flz
Пока для теста использую проигрыватель, который я сам адаптировал. По совету ivagor воспроизвожу двумя проигрывателями, скомпилированными по разным адресам. Вроде бы играет, но есть уверенность, что так неправильно. Нужно вначале вывести данные на оба AY, а уже потом подготавливать данные для обеих AY для следующего кадра. Буду ждать правильной реализацию от ivagor ;)
Столкнулся с неожиданной проблемой. Не могу определить начало второй половины модуля, кроме как по поиску сигнатуры. Неужели в заголовке первого модуля нигде не указана его длина, чтобы автоматически вычислить смещение для второй половины? Даже у ИИ спросил. Но он то ли не знает, то ли ещё чего, но говорит, что именно по сигнатуре и нужно искать, и что якобы длина модуля нигде явно не указана. Странно это...
В "двухчастных" модулях в любом случае по сигнатуре искать. Не знаю, как положено, а для себя я сформулировал два варианта:
1. Ищем первую сигнатуру PT3! - после нее указано смещение второй части. Как вариант - ищем сигнатуру 02TS и потом по отрицательному смещению находим смещение второй части.
2. Вторую часть можно искать по совпадению начальных сигнатур модулей.
CityAceE
13.07.2025, 20:02
2. Вторую часть можно искать по совпадению начальных сигнатур модулей.
Собственно, именно этот вариант я у себя и реализовал в итоге.
string_length equ 10 ; По какому количеству байт искать
; Ищем второе вхождение начальной сигнатуры
; На выходе в HL адрес второй части
find_second_half:
ld bс, 0xff00
ld de, melody
ld hl, melody + string_length
find_second_half_01:
ld a, (de)
cp (hl)
jp z, find_second_half_02
ld c, 0
ld de, melody
jp find_second_half_03
find_second_half_02:
dec c
inc de
find_second_half_03:
inc hl
ld a, c
cp -string_length
jp nz, find_second_half_01
add hl, bc
ret
Проверки не длину нет, то есть считается, что повтор обязательно встретится. Вот так я придумал, но, как обычно, я делаю всё "в лоб". А как можно улучшить?
CityAceE
13.07.2025, 20:24
Вот как оно работает:
А вот оригинал подкинули!
https://www.youtube.com/watch?v=7RRudzgAfME&list=PLD41EA4FE2E5B8DD2&index= 3
Продолжим в теме про Линёвский - там воплотим в жизнь подключение AY.
Тут мысля пришла, пока идут разговоры о подключении АУ, то может быть поглядеть в сторону YM2203.
Плюсы:
- совместимость с AY по регистрам
- вменяемый интерфейс подключения, никаких BC и BDIR, а обычный CS, RD, WR, A0
- дополнительная FM часть (OPN)
- можно организовать прерывания от внутреннего таймера (играть музло как 50ГЦ, 60Гц, да хоть 100Гц)
Минусы
-нет
Особенности
- частота 3,5МГц (если для Спекки музона)
- для FM части нужен ЦАП YM3014 c обвязкой
Все это есть в продаже даже на Озоне.
Для сведения - он применяется в TSFM на Спектруме
CityAceE
26.07.2025, 15:12
Минусы
-нет
Если это реально так, и он действительно полностью совместим с привычным AY, то я лично только "за". У нас пока стандарт только формируется. Особой софтовой поддержки пока нет. Если Pyk добавит поддержку в Emu80, а RW9UAO в FPGA, то я попробую на нём что-нибудь проиграть.
Если это реально так, и он действительно полностью совместим с привычным AY, то я лично только "за".
Вот накидал небольшую схемку с YM2203, пока эскиз - https://disk.yandex.ru/i/6Fq2L6kwfze16A
Пока без номиналов, чисто схемотехника.
Из микросхем:
DD1 - К555ЛА3
DD2 - К555ИЕ7
DD3- YM2203C
DA1 - YM3014B
DA2 - 7805
DA3, DA4 - LM358
Кварц ZQ1 - 14МГц
Конденсаторы некоторые лишние, потом уберу
Даташит на YM2203 - https://disk.yandex.ru/i/F_WMDnMwGee5Ow
В кратце, регистры с 00h по 0Fh полностью совместимы с AY и YM2149. Их можно читать и писать в них
С 20h регистры относятся к FM части (синтез OPN). В них можно только писать, чтение возможно только статусного регистра
Как я уже говорил раньше, есть таймеры A и B которые могут генерить прерывание. Этим можно воспользоваться.
Из практики использования - на Спектруме есть карта TSFM, которую изначально сделала группа NedoPC, потом я вставил их часть в свою звуковую карту ZXM-SoundCard. К сожалению прерывания там не задействованы.
Описание TSFM можно почерпнуть из доки - http://alonecoder.nedopc.com/zx/books/TFM.rar и http://nedopc.com/TURBOSOUND/tfm-prg.zip
Прерывания по таймеру я использовал в другой своей звуковой карте ZXM-MoonSound, там используется чип YMF278(OPL4). Так вот там таймер использовался для генерации прерываний 60Гц для проигрывания музыки (так она была написана)
По поводу доступа, то как видно из схемы - пряма как феншую вписывается в наши компы.
Кстати, если сделать выбор частоты, то возможно проигрывать музыку с Амстрада CPC. Нужно подавать частоту 2МГц (если бы стоял AY то 1 МГц).
Serg6845
27.07.2025, 16:02
Вот накидал небольшую схемку с YM2203, пока эскиз - https://disk.yandex.ru/i/6Fq2L6kwfze16A
не нашел куда идут сигналы OP и CSDAC/ (хотя подозреваю что это один и тот же сигнал)
если сделать выбор частоты, то возможно проигрывать музыку с Амстрада CPC.
Для проигрывания большинства музыки с amstrad cpc скорее всего дополнительная частота не обязательна, хватит программной коррекции делителей в плеере.
Кстати о плеере. Плеер(или плееры, т.к. форматов несколько) дампов регистров YM2203 для 8080 планируешь сделать, или нацелен только на z80?
marinovsoft
27.07.2025, 16:51
Может лучше прикрутить к Специалисту шину NEMOBUS ?
не нашел куда идут сигналы OP и CSDAC/ (хотя подозреваю что это один и тот же сигнал)
Да именно, недорезал свою звуковуху. Обновил схему.
- - - Добавлено - - -
Для проигрывания большинства музыки с amstrad cpc скорее всего дополнительная частота не обязательна, хватит программной коррекции делителей в плеере.
Я высказал - как идею. Кстати насколько помню вроде у Атари 520STF тоже применялcя YM2149 и у него частота 2МГц (для YM2203 тогда надо 4МГц)
Кстати, если проигрывать массивы регистров, файлы ym, то там частота и по-моему прерывания указываются. Так что тут только переключать частоты.
- - - Добавлено - - -
Кстати о плеере. Плеер(или плееры, т.к. форматов несколько) дампов регистров YM2203 для 8080 планируешь сделать, или нацелен только на z80?
Немного не понял вопроса. AY часть YM2203 программится по сути как и обычный AY, т.е. как минимум Soundtracker и Protracker проигрыватели вроде портировали на ВМ80. С FM частью надо разбираться и искать.
- - - Добавлено - - -
Может лучше прикрутить к Специалисту шину NEMOBUS ?
Если к проекту нового Специалиста на z80, то имеет смысл. Для обычного Специалиста, нужны будут переделки портов и управления на каждой конкретной карте.
у Атари 520STF тоже применялcя YM2149
Проигрывание самой интересной музыки с atari st может вызвать трудности, а так я бы хотел послушать.
С FM частью надо разбираться и искать.
Ради AY вряд ли стоит заморачиваться с 2203, я спрашивал о плеере для FM.
Ради AY вряд ли стоит заморачиваться с 2203, я спрашивал о плеере для FM.
Если есть возможность добавить FM часть, то почему бы и нет. К тому же как я сказал выше, прерывания практически за так бонусом идут :)
А с FM частью, так для 8080 тоже не было раньше плееров для AY
Serg6845
28.07.2025, 18:37
К тому же как я сказал выше, прерывания практически за так бонусом идут :)
только к кадровому импульсу их уже не привяжешь.
только к кадровому импульсу их уже не привяжешь
Это да, но на безрыбье такое вполне сойдет, особенно если будет файл с 60Гц темпом.
marinovsoft
28.07.2025, 21:09
Конвертнул исходник плейера PT3/PT2 из сообщения (https://zx-pk.ru/threads/36257-pk-spetsialist-ay-3-8910-12.html?p=1216015&viewfull=1#post1216015) из ужасма в TASM с преобразованием мнемоник из Z80 в I8080.
При большом желании можно и прерывания от таймера привязать к развертке. Главное условие - частота тактирования таймера должна быть привязана к "базовой" частоте компа, из которой получаются частоты развертки и проца.
1. Необходимо завести на какой-нибудь порт состояние кадровых синхроимпульсов.
2. В цикле опрашиваем этот порт, ждем границы кадра.
3. Когда дождались программируем таймер на выдачу импульсов с кадровой (или кратной) частотой.
Удобнее, но затратнее по аппаратной части, использовать контроллер прерываний или коммутацию нескольких источников (например с частотой кадров и от таймера).
Кто-нибудь подвесит сопроцессор в реальный клон Специалиста или так и будем восхищаться работой проигрывателя в эмуляторе?
CityAceE
03.08.2025, 09:16
Кто-нибудь подвесит сопроцессор в реальный клон Специалиста или так и будем восхищаться работой проигрывателя в эмуляторе?
Я бы с радостью припаял, если бы у меня была возможность. А что касается эмулятора, то это попытка разорвать порочный круг, состоящий из двух утверждений:
1. Зачем припаивать AY к Специалисту, если под это дело нет софта?
2. Кому нужен софт для AY, если нет Специалистов с AY?
Когда Pyk добавлял поддержку AY в эмулятор, ему элементарно даже не на чем было протестировать его работу там, потому что софта под это дело было ровно ноль. Но после интеграции AY хотя бы в эмулятор у меня уже появилась возможность экспериментировать с этой связкой. В результате мы имеем несколько проигрывателей с исходным текстом. Это значит, что теперь, если подключить к настоящему Специалисту настоящий AY у пользователя появляется возможность проигрывать тысячи мелодий со Спектрума и других платформ. Конечно, в идеале нужно написать полноценный проигрыватель с догрузкой мелодий с SD и т.д. Это в планах. Но даже уже то, что есть, может кого-то смотивировать.
Второй момент - это прерывания (https://zx-pk.ru/threads/28929-preryvaniya-im2-v-spetsialiste-na-kr580.html). Само наличие AY в составе Специалиста - это уже круто. И я выкладывал примеры того, как он играет без всяких прерываний. Музыка (не PGS), конечно, играет неравномерно, с некими завываниями, но для неискушённого пользователя это может оказаться приемлемо. Кроме того, без прерываний AY можно использовать для озвучивания игрушек. Было бы идеально, если бы ivagor нашёл желание и время, чтобы добавить оригинальную AY-озвучку в Специалистовский порт Exolon'а. Такая игрушка точно могла бы стать мощным мотиватором и наглядным примером, как это может и должно выгядеть. Однако, по моему, да и не только по моему мнению, раскрыть полный потенциал AY позволят прерывания. Это тоже довольно простая доработка, которая также уже реализована в эмуляторе и ПЛИС. И от прерываний польза уже не только для AY, но и для всеё платформы в целом. Начиная от устранения мерцания спрайтов на экране и заканчивая правильной программной обработкой турбирования.
Короче: нахер нужен этот AY реальному Специалисту! Продолжайте извращаться в эмуляторе с проигрывателем, если делать нечего.
CityAceE
03.08.2025, 11:17
Короче: нахер нужен этот AY реальному Специалисту!
Весьма любопытный вывод. Только совершенно непонятно из чего он исходит? Почему AY нужен БК-0010, Вектору-06Ц, ПК8000 и даже Радио-86РК, но не нужен Специалисту?
Извините, что влезаю, но мне кажется, что можно было бы найти компромисс по варианту подключения AY (и даже не только AY). Как вариант - если ВВ55 из схемы программатора (адреса F000-F7FF) включить в состав (по крайней мере части) новых клонов специалиста и вывести на отдельный разъем порты ABC, то туда можно было бы подключать некоторую периферию. Кому что нужно - программатор или AY или может принтер или еще что. AY через 8255 подключен например в amstrad cpc, и для вектора есть такой вариант - R-Sound (2), его можно использовать практически без изменений. Недостаток (применительно к AY) - несколько более громоздкое и медленное программирование, но мне кажется это не так принципиально.
Извините, что влезаю, но мне кажется, что можно было бы найти компромисс по варианту подключения AY (и даже не только AY). Как вариант - если ВВ55 из схемы программатора (адреса F000-F7FF) включить в состав (по крайней мере части) новых клонов специалиста и вывести на отдельный разъем порты ABC, то туда можно было бы подключать некоторую периферию. Кому что нужно - программатор или AY или может принтер или еще что. AY через 8255 подключен например в amstrad cpc, и для вектора есть такой вариант - R-Sound (2), его можно использовать практически без изменений. Недостаток (применительно к AY) - несколько более громоздкое и медленное программирование, но мне кажется это не так принципиально.
На мой взгляд, не стоит такие костыли выдумывать. Каждый кто хочет сможет спаять платку и подключить к Специалисту. Вспоминаем Спектрум, народ спокойно подключал на проводках платки. То что кто то не хочет включать его в схему компа, то это полное право автора. Но от этого желание не отпадет у того кто действительно хочет подключить AY. Здесь более важно выработать стандарт по портам, чтобы нарабатывался софт и пускай он пока будет только в эмуле. То же самое решить вопрос с прерываниями, т.е. команды EI и DI вывести из ненадлежащего использования (типа вывод звука).
Если с прерываниями решится вопрос, то можно вообще сделать переходную плату на процессор. Типа платка вставляется заместо процессора, а на самой платке будет как сам процессор, так схема прерываний и AY. В этом случае проводков будет совсем минимум.
CityAceE
04.08.2025, 19:23
Если с прерываниями решится вопрос, то можно вообще сделать переходную плату на процессор. Типа платка вставляется заместо процессора, а на самой платке будет как сам процессор, так схема прерываний и AY. В этом случае проводков будет совсем минимум.
Такая плата мне очень нужна для моего Лика! Кому вносить предоплату?
Serg6845
04.08.2025, 21:28
Такая плата мне очень нужна для моего Лика! Кому вносить предоплату?
там одной платкой не обойдешься. придется еще схему формирования сигнала записи в ОЗУ переделывать - в журнальной схеме там "все что не чтение - то запись", а прерывание как раз и будет одним из вариантов "не чтение". в остальном - поставить ВК28 и все. если его скопировали правильно - там можно сделать одноуровневые прерывания просто подвесив одну ножку на +12В через резистор. хотя останется вопрос что делать с выборкой портов.
в журнальной схеме там "все что не чтение - то запись"
Насколько я понял, исходя из журнальной схемы (я ориентируюсь по своей редакции - http://micklab.ru/file/specialist/specialist_original.pdf ), то там сигнал WE/ формируется из трех на элементе DD7.2 сигналов RD/ =1, SYNC =1 (он стробируется F1TTL триггером DD12.2) и H1 (2МГц) =1.
То есть в момент SYNC =1 и H1 =0 есть время на анализ слово состояния.
В любом случае надо рисовать и анализировать, один фиг само собой не нарисуется и не сделается. А рассуждать можно долго.
в остальном - поставить ВК28 и все.
К тому же вроде ты сам писал что у тебя ВК28 стояла и ничего не порушилось.
Serg6845
07.08.2025, 21:17
Насколько я понял, исходя из журнальной схемы (я ориентируюсь по своей редакции - http://micklab.ru/file/specialist/specialist_original.pdf ), то там сигнал WE/ формируется из трех на элементе DD7.2 сигналов RD/ =1, SYNC =1 (он стробируется F1TTL триггером DD12.2) и H1 (2МГц) =1.
ну да, все что не чтение - то запись.
То есть в момент SYNC =1 и H1 =0 есть время на анализ слово состояния.
В любом случае надо рисовать и анализировать, один фиг само собой не нарисуется и не сделается. А рассуждать можно долго.
там еще надо смотреть тайминги DRAM, подробностей уже не помню.
К тому же вроде ты сам писал что у тебя ВК28 стояла и ничего не порушилось.
там же я писал что у меня этот сигнал переделан
https://zx-pk.ru/threads/30876-linevskij-spetsialist.html?p=1215678&viewfull=1#post1215678
p.s. вот схема (сигнал записи в самом низу). и еще - у меня ВК38, у него сигналы записи длинные, под ВК28 возможно придется модифицировать.
https://pic.maxiol.com/thumbs2/1754591278.1435348739.gal1.png (https://pic.maxiol.com/?v=1754591278.1435348739.gal1.png&dp=2)
ну да, все что не чтение - то запись.
Вот, решил поглядеть тайминги 8080 в момент прерывания. И похоже ничего страшного не произойдет. В момент прихода прерывания в SYNC стробируется обработчик прерывания и следующее за ним идет чтение вектора. А затем уже идут штатные записи указателя в стек. По сути ничего лишнего не запишется в этот момент в память. Возможно надо на всякий пожарный подтянуть шину данных, чтобы код RST 8 (0xFF) читался без ошибок.
Serg6845
09.08.2025, 18:32
Вот, решил поглядеть тайминги 8080 в момент прерывания. И похоже ничего страшного не произойдет. В момент прихода прерывания в SYNC стробируется обработчик прерывания и следующее за ним идет чтение вектора. А затем уже идут штатные записи указателя в стек. По сути ничего лишнего не запишется в этот момент в память.
ну да, это с ВК28/38 вместо /RD будет выдан /INTA. поэтому мне и пришлось этот кусок переделывать.
Возможно надо на всякий пожарный подтянуть шину данных, чтобы код RST 8 (0xFF) читался без ошибок.
надо будет разгребать слово состояния и если INTA - отключать шину данных. иначе будет полноценное чтение из памяти и подтяжка не спасет.
надо будет разгребать слово состояния и если INTA - отключать шину данных. иначе будет полноценное чтение из памяти и подтяжка не спасет.
С записью по сути разобрались, она не мешает, а вот чтение да - будет мешать в момент чтения вектора прерывания. Поскольку все равно планируем переходную плату, то вполне можно применить как ВК28/ВК38, так и на дискретах, выделив необходимые сигналы и подменив ими штатные. По сути если прерывания только от кадровой развертки, то можно обойтись без сигнала INTA. Либо поставить RC цепочку, либо как я в своих клонах на CPLD ставил счетчик тактов. Насколько помню там длительность прерывания была в пределах 32 тактов. То есть, ставим ТМ2 на кадровый импульс, а сбрасываем его по истечению 32 тактов.
CityAceE
10.08.2025, 08:15
сбрасываем его по истечению 32 тактов.
А в случае Турбо? Или это сугубо для переходной платы для стандартного варианта?
А в случае Турбо? Или это сугубо для переходной платы для стандартного варианта?
В турбо, все те же 32 такта процессора должно быть. Только в этом случае будет источник не 2МГц(штатная частота), а 4МГц
- - - Добавлено - - -
Сейчас глянул еще раз схему Специалиста и поскольку там строчные счетчики не сбрасываются, то в принципе можно обойтись без отдельного счетчика для длительности прерывания. Если брать все те же 32 такта, то при тактовой частоте процессора 2мГц, сброс триггера прерываний будет частотой 62,5кГц. Такая частота выходит на ноге счетчика 6 DD2 (ИЕ7).
И в чем преимущество над сбросом по INTE как в векторе? Или речь уже про z80?
И в чем преимущество над сбросом по INTE как в векторе? Или речь уже про z80?
Нет, идет речь про ВМ80 на отдельной платке, которая вставляется вместо штатного ВМ80. Идет пока обсуждение, естественно приветствуются все предложения. Про сброс по INTE я не в курсе.
P.S. Подумалось, ведь INTE вроде зависит от команд DI и EI. То есть программист должен в подпрограмме обслуживания прерывания обязательно поставить DI, чтобы сбросить. Но это для правильных программистов :)
Аппаратный сброс по счетчику гарантирует сброс прерывания допустим спустя 32 такта и от программиста не зависит - в этом мне кажется есть большой плюс.
Вчера ты написал
решил поглядеть тайминги 8080 в момент прерывания
Посмотри внимательно, там INTE сбрасывается в 1м такте цикла M1 выборки RST. Поэтому в подпрограмме обработки прерывания DI не нужно и нормальные люди его там не ставили. Хотя я видел и обработчики с DI, но кроме RTFM мне нечего сказать по этому поводу.
INTE (interrupt enabled) — выход, отражающий готовность процессора принять прерывание. Команды EI и DI, разрешающие и запрещающие прерывания, устанавливают соответственно высокий и низкий уровень на этом выводе. Низкий уровень устанавливается на этом выводе также после приёма запроса на прерывание.
Посмотри внимательно, там INTE сбрасывается в 1м такте цикла M1 выборки RST. Поэтому в подпрограмме обработки прерывания DI не нужно и нормальные люди его там не ставили. Хотя я видел и обработчики с DI, но кроме RTFM мне нечего сказать по этому поводу.
На INTE я не уделял своего внимания, я смотрел вход INT и как там его начинает проц обрабатывать - SYNC, DBIN
Пока нацарапал эскиз переходной платки для обсуждения. Наверняка где то напутал. AY я подцептил к портам 14h и 15h как делал в ПК8000 и вроде такие порты в Векторе - https://disk.yandex.ru/i/7jM5yl7QQYMzGw
Пара моментов замеченных при поверхностном просмотре:
1. Нет источника сигнала RD/ (инвертированный DBIN?)
2. Нет подтяжки D0-D7 к 5В. В самом специалисте ее вроде тоже нет, хотя вариантов много, тут я не знаю.
Если правильно понял OUT и IN перестанут обращаться к памяти, это стоит отметить.
Serg6845
11.08.2025, 08:22
Пока нацарапал эскиз переходной платки для обсуждения.
возвращаемся к теме "все что не чтение - то запись". с такой схемой вместо DBIN будет MEMRD - который в подтверждении прерывания выдан не будет, на что журнальная схема изобразит цикл записи и загадит память.
p.s. и кстати - не проще будет вместо набора логики просто ВК28 поставить? и места займет меньше, и умеет все что надо (и шину отключает когда надо и RST7 умеет выдавать штатно.)
хотя жрать будет больше, да.
Пара моментов замеченных при поверхностном просмотре:
1. Нет источника сигнала RD/ (инвертированный DBIN?)
2. Нет подтяжки D0-D7 к 5В. В самом специалисте ее вроде тоже нет, хотя вариантов много, тут я не знаю.
Если правильно понял OUT и IN перестанут обращаться к памяти, это стоит отметить.
Забыл конечно. Схему обновил.
Да, тут необходимо пояснить, что порты выведены из обращения к памяти. Поэтому программы, которые обращаются к портам (халявят) работать не будут.
AY предлагается нацепить на порты. В данном случае это 14h и 15h
Кроме того, с материнской платы (платы Специалиста) необходимо взять три провода.
Сигналы:
F1TTL - берется с выв. 12 микросхемы DD13(ИД4);
H6 - берется с выв. 6 микросхемы DD2(ИЕ7);
KSI/ - берется с выв. 8 микросхемы DD10(ЛА2)
Безусловно, если сбрасывать триггер прерывания по INTA или INTE, то нужно с платы будет взять только два сигнала. Но я бы все таки остановился на таком варианте, не зависящем от процессора, но как говорится не настаиваю.
Кстати, поглядел схему ПК8000, то там тоже на рассыпухе собран анализатор слова состояния процессора и прерывания от кадровой развертки сбрасываются по INTA.
Так что смотрим, вносим свои предложения.
- - - Добавлено - - -
p.s. и кстати - не проще будет вместо набора логики просто ВК28 поставить? и места займет меньше, и умеет все что надо (и шину отключает когда надо и RST7 умеет выдавать штатно.)
хотя жрать будет больше, да.
Вполне возможен и такой вариант, никто не мешает изобразить два варианта.
- - - Добавлено - - -
возвращаемся к теме "все что не чтение - то запись". с такой схемой вместо DBIN будет MEMRD - который в подтверждении прерывания выдан не будет, на что журнальная схема изобразит цикл записи и загадит память.
В таком случае, мне видится выход из ситуации такой. В момент прерывания блокировать SYNC на выходной колодке процессора. То есть на триггер защелки записи в момент прерывания не придет SYNC.
Но в этом случае лучше будет тогда сбрасывать триггеры сигналом INTA.
CityAceE
11.08.2025, 09:37
AY предлагается нацепить на порты.
Что касается портов вместо памяти, то с точки зрения программирования даже проще, хотя уже идёт вразрез с тем, что сделано. В конце концов можно будет автодетектилку сделать, я думаю. Но вот использование IN/OUT, конечно поставит крест на использование SP580 и софта он них же. Но с другой стороны мы же в соседней ветке проектируем новый супер-пупер клон, куда так или иначе решили закладывать возможность полноценно работать с портами.
В данном случае это 14h и 15h
А почему портов только два? Я так понимаю, что остались PORT_SEL и PORT_WR, а под нож пошёл PORT_RD? Прошу оставить и его тоже! У меня через него визуализация мелодии работает. Опять же если подключать принтере через AY он понадобится.
Безусловно, если сбрасывать триггер прерывания по INTA или INTE, то нужно с платы будет взять только два сигнала. Но я бы все таки остановился на таком варианте, не зависящем от процессора, но как говорится не настаиваю.
Что касается прерываний, то ты, пожалуйста, синхронизируйся с Pyk и RW9UAO, которые воплотили прерывания на Специалисте в эмуляторе и FPGA. Нужно чтобы они были одинаковые везде, включая поведение, время прихода, длительность и т.д. Это очень важный момент для будущего софта! Есть отдельная ветка (https://zx-pk.ru/threads/28929-preryvaniya-im2-v-spetsialiste-na-kr580.html). Может прерывания лучше продолжить там обсудить, чтобы было всё в одном месте?
А почему портов только два? Я так понимаю, что остались PORT_SEL и PORT_WR, а под нож пошёл PORT_RD? Прошу оставить и его тоже! У меня через него визуализация мелодии работает. Опять же если подключать принтере через AY он понадобится.
А что за PORT_RD такой. Вроде к AY обращались всегда по двум портам?
По данной схеме
Порт 14h - запись адреса регистра AY
Порт 15h - запись и чтение данных регистров AY
Никакой третий порт не нужен.
- - - Добавлено - - -
Что касается портов вместо памяти, то с точки зрения программирования даже проще, хотя уже идёт вразрез с тем, что сделано. В конце концов можно будет автодетектилку сделать, я думаю. Но вот использование IN/OUT, конечно поставит крест на использование SP580 и софта он них же. Но с другой стороны мы же в соседней ветке проектируем новый супер-пупер клон, куда так или иначе решили закладывать возможность полноценно работать с портами.
А что SP580 юзает халяву (порты).
И вроде тут обсуждается платка с AY для текущих Специалистов, а для будущего клона на Z80 как бы она не нужна.
CityAceE
11.08.2025, 11:43
А что за PORT_RD такой. Вроде к AY обращались всегда по двум портам?
Выбор регистра, запись в регистр, чтение из регистра - три порта, а точнее ячейки памяти используются на Специалисте.
Честно говоря, я до недавнего времени понятия не имел как вообще программировать AY. Возможно на Спектруме по одноу порту происходит и запись, и чтение, но на Специалисте почему-то под чтение и под запись используются разные ячейки. Почему так, я не имею ни малейшего представления. Pyk делал эмуляцию AY и на Спектруме, и на Специалисте, возможно он сможет прояснить что к чему.
А что SP580 юзает халяву (порты).
Нет там никаких портов. SP580 - это классический Специалист, только там ВВ55 переместили в конец памяти. А проблема в том, что весь Монитор (да и другой их софт) для доступа к ячейкам памяти периферии пестрит командами IN/OUT для экономии байтов.
И вроде тут обсуждается платка с AY для текущих Специалистов, а для будущего клона на Z80 как бы она не нужна.
Да, но SP580 у меня прекрасно жил на моём Лике. Я переключался между классическим Монитором и SP580 переключателем П2К. Сейчас я эту доработку отпаял и вернуло всё к заводу, но факт остаётся фактом.
Я не призываю что-то менять и от чего-то отказываться, а просто излагаю факты. Если делаем для классики, то было бы вообще идеально и AY с прерываниями заполучить, и ни с каким софтом совместимость не утратить. А для своего Лика я однозначно хочу такую плату какова бы у неё совместимость ни была!
Можно ограничить обращение к портам только адресами 14h и 15h. Или более грубо (если планируется еще что-то подключать к портам, иначе первый вариант лучше): 00-7F - порты, 80-FF - память. В таком случае большинство старого софта использовавшего IN/OUT сохранит работоспособность.
Выбор регистра, запись в регистр, чтение из регистра - три порта, а точнее ячейки памяти используются на Специалисте.
Зачем три ячейки. В Спектруме используется два порта, один порт на запись адреса регистра и один порт для чтения и записи данных регистра. На этой плате тоже используется два порта.
- - - Добавлено - - -
ожно ограничить обращение к портам только адресами 14h и 15h. Или более грубо (если планируется еще что-то подключать к портам, иначе первый вариант лучше): 00-7F - порты, 80-FF - память.
В принципе можно и так, тогда вариант лучше 80-FF на память, а 00-7F на порты.
Есть кстати еще вариант, но с нюансом. Оставить обращение к AY как к памяти, но сместить в область ПЗУ (C000-CFFF). Понятно, что это только на запись, без чтения.
Есть кстати еще вариант, но с нюансом. Оставить обращение к AY как к памяти, но сместить в область ПЗУ (C000-CFFF). Понятно, что это только на запись, без чтения.
Мне как то не понятны такие сложные движения по поводу AY. Тем более что в будущем планируется переходить на Z80. Сейчас написанных программ чуть больше чем ничего. И все программы (демы) написал я так понимаю Станислав. Так ему и ничего не стоит поменять условно обращение не к памяти, а к портам. Пока ничего страшного не произошло - в железе ничего нет. Зачем тащить потом на Z80 обращение к памяти, когда у него портов там тоже дофига.
CityAceE
12.08.2025, 09:43
ничего не стоит поменять условно обращение не к памяти, а к портам.
Вообще без проблем! Стандарт пока ещё не устаканился - пока что имеем реализацию только в эмуляторе и FPGA. А вот когда появится первая железная реализация, вот тогда уже можно будет о чём-то говорить. По большому счёту без разницы как обращаться к AY, но самое главное не навредить существующему софту. Как я уже писал, некоторые программы всё-таки используют IN/OUT (https://zx-pk.ru/threads/32172-quot-spetsialist-quot-syabr-v2-sborka-naladka-obmen-informatsiej.html?p=1170777&viewfull=1#post1170777) для обращения к стандартным портам. В качестве примера я приводил монитор SP580 и софт от тех же ребят. Мне понравилось предложение о блокировке чтения из памяти только при обращении к портам AY. Важно, чтобы именно эта переходная плата подключалась к любому стандартному Специалисту и ни с чем не конфликтовала.
в принципе можно обойтись без отдельного счетчика для длительности прерывания. Если брать все те же 32 такта, то при тактовой частоте процессора 2мГц, сброс триггера прерываний будет частотой 62,5кГц. Такая частота выходит на ноге счетчика 6 DD2 (ИЕ7).
"Бюджетный вариант". При всех неудобствах он используется на Спектруме и ничего, все привыкли...
прерывания от кадровой развертки сбрасываются по INTA
Так, конечно, даже еще правильнее, чем по INTE.
И в чем преимущество над сбросом по INTE как в векторе?
Как в Векторе - нет зависимости от длительности прерывания, можно не задумываться о том, что обработчик получился слишком коротким, и сигнал остается еще активным. А вот преимущество сброса по INTA уже более существенное: можно, например, запрещать прерывания на время выполнения небольших критичных участков кода (нестандартная работа со стеком), и они не будут потеряны, обработчик будет вызван после разрешения прерываний. Наверное, и по INTE можно так сделать, если предусмотреть возможность установки триггера даже при неактивном INTE, чтобы сброс происходил именно по фронту INTE, а не по уровню, как в Векторе.
- - - Добавлено - - -
А что за PORT_RD такой. Вроде к AY обращались всегда по двум портам?
Просто так было сделано в журнальной схеме подключения AY к Специалисту. Если нам совместимость не важна, можно без проблем сделать как и на других компах - 2 порта.
Так, конечно, даже еще правильнее, чем по INTE.
Это не "еще правильнее", это другие приоритеты.
Векторовский вариант гарантирует, что мы входим в обработчик прерывания всегда примерно в одно время. В векторе это критично для программирования палитры. Да, если прерывания запрещены, то пропустим.
Вариант ПК8000, когда запрос продолжает висеть, по своему хорош, но когда надо обеспечить регулярные прерывания через одинаковые промежутки времени и векторе и в пк8000 надо оставлять прерывания разрешенными и в этом случае разницы не будет. Тут на помощь приходят придуманные спектрумистами пара вариантов, когда даже нетрадиционное использование стека можно совмещать с прерываниями.
Просто так было сделано в журнальной схеме подключения AY к Специалисту. Если нам совместимость не важна, можно без проблем сделать как и на других компах - 2 порта.
По схеме Белухи сколько подключено реально AY и сколько до Станислава программ с AY на Специалисте? Просто, насколько сейчас актуально брать схемные решения, которые нигде не поддержаны. Как я писал недавно, не надо сильно повторять советский подход к построению ни с чем не совместимых систем, тем более сейчас, когда основной контингент пользователей входят в клуб 50+ или около того. Сейчас надо как то наоборот делать условные кроссоверы с другими компами, где это возможно.
- - - Добавлено - - -
И кстати говоря. Огласите плиз весь списочек программ с AY для Специалиста, а то я может отстал от жизни и уже куча софта есть, а я тут со своими так сказать фантазиями пытаюсь влезть.
CityAceE
12.08.2025, 13:44
Я не шарю в схемотехнике поэтому думал, что отдельные ячейки для чтения и записи - это чем-то обусловленное решение. Ну, а раз это сделано исключительно из-за опубликованной схемы, то и тянуть это к нам, я считаю, не стоит. Тем более, что даже адреса портов уже поменялись (F000 -> F400). Программы под это дело до нас не дошли, так что можем считать, что их нет. Все свои эксперименты с AY я ставил с заделом на то, что всё ещё будет меняться. Поэтому если есть какое-то более простое и грамотное решение, то и нужно использовать именно его. Обращение через IN/OUT и короче, и быстрее. Решить, как устранить конфликты при обращении к F000-FFFF через IN/OUT - и дело в шляпе.
Что касается самих прерываний, то пока мы ещё на берегу у нас есть возможность договориться, как делать правильно. Мне лично более понятен подход, когда прерывания пропускаются, если они запрещены. Но опять же, я не понимаю насколько какой вариант более прост/сложен. Можно использовать любой подход, главное его зафиксировать, задокументировать и принять за стандарт.
Ещё раз повторюсь, что самое главное для нас - это чтобы можно было без конфликтов подключить к любому стандартному Специалисту. У меня уже есть Лик, а в ближайшее время, я очень надеюсь, Serg6845 запустит мой Сябр. В обоих я очень хотел бы иметь AY с прерываниями через обсуждаемую переходную плату под процессор. А там, глядишь, можно будет и отдельную процессорную плату под Сябр развести для желающих ;)
Огласите плиз весь списочек программ с AY для Специалиста
Да нет абсолютно никакого софта! Чистый лист! Pyk'у, когда он интегрировал AY в свой эмулятор, даже проверить было на на чем. А вот отлаживать на FPGA было уже попроще, так как благодаря наличию поддержки AY в Emu80, я уже какой-то проигрыватель успел сделать.
Мое субъективное мнение - А.Белуха из Радиоаматора специально сделал схему непохожую на распространенные варианты для спектрума. Там и деление на 6 и 3 адреса вместо 2. Возможно не хотел, чтобы его обвинили в плагиате.
Забавный момент - попробуйте найти в статье ссылку на второй пункт списка литературы.
Мое субъективное мнение - А.Белуха из Радиоаматора специально сделал схему непохожую на распространенные варианты для спектрума. Там и деление на 6 и 3 адреса вместо 2. Возможно не хотел, чтобы его обвинили в плагиате.
О каком плагиате может идти речь, отечественный Спектрум по сути тоже нелегальная копия. Скорее всего он нарисовал эту схему из принципа, из того что было и мне так проще. Самое печальное то, что Белуха не привел ни одного примера использования AY на Специалисте. По сути статья ради статьи.
Забавный момент - попробуйте найти в статье ссылку на второй пункт списка литературы.
Затерялась в процессе редактирования статьи, по символам не уложился :)
- - - Добавлено - - -
Что касается самих прерываний, то пока мы ещё на берегу у нас есть возможность договориться, как делать правильно. Мне лично более понятен подход, когда прерывания пропускаются, если они запрещены. Но опять же, я не понимаю насколько какой вариант более прост/сложен. Можно использовать любой подход, главное его зафиксировать, задокументировать и принять за стандарт.
Тут интересный момент. Поскольку в Специалисте нет бордера и соответственно бордерных эффектов не предвидится, то брать прерывания с кадровой развертки без разницы откуда. Тут либо по кадровому импульсу (начало или конец), либо по кадровому гасящему импульсу. Вроде как в ПК8000 с гасящего берут.
Вопрос в другом, чтобы не резать плату Специалиста, нужно на время прихода прерывания, вернее обработка в его первом такте, сигнал SYNC на плату не давать, чтобы штатная схема не обработала его как запись.
В этом случае сбрасывать прерывания скорее всего надо по INTА, чтобы разблокировать следующие сигналы SYNC.
CityAceE
12.08.2025, 20:32
либо по кадровому гасящему импульсу. Вроде как в ПК8000 с гасящего берут.
Мы в Телеге уже обсуждали этот момент и пришли к заключению, что именно так и будет правильно - будем успевать нарисовать на экране всякого, прежде чем придём прерывание. Вроде, Pyk именно так в Emu80 и реализовал прерывания в Специалисте.
чтобы не резать плату Специалиста
Тоже очень важный момент!
В этом случае сбрасывать прерывания скорее всего надо по INTА, чтобы разблокировать следующие сигналы SYNC.
Поглядел, по сути да - надо вводить INTA. Если я правильно понял, то INTA будет длиться до следующего сигнала SYNC, а значит на это время его для основной платы сигнал SYNC можно сделать неактивным, поставив один элемент И. Тем самым мы предотвратим нештатное обращение к памяти.
Вроде как в ПК8000 с гасящего берут.
У ПК8000 прерывание примерно после окончания активной области изображения. Или можно грубо сказать что в начале нижнего бордюра.
У ПК8000 прерывание примерно после окончания активной области изображения. Или можно грубо сказать что в начале нижнего бордюра.
Понял, значит ПК8000 я привел неудачный пример.
Да нет абсолютно никакого софта! Чистый лист! Pyk'у, когда он интегрировал AY в свой эмулятор, даже проверить было на на чем.
Если решим переделать на 2 адреса, придется подправить только конфиг, в код эмулятора лезть не придется.
- - - Добавлено - - -
Понял, значит ПК8000 я привел неудачный пример.
Пример как раз удачный, Станислав именно это и имел в виду. Для Специалиста прерывание сделано как раз в начале следующей скан-линии после активной области изображения.
- - - Добавлено - - -
Это выход 9 DD6 по схеме Специалиста, кажется на каких-то схемах он был подписан "КГИ".
В emu80 сейчас реализовано защелкивание этого сигнала и сброс по INTE, как в Векторе.
При необходимости можно переделать.
Пример как раз удачный
если говорить о прерывании после активной области, но неудачный, если говорить о прерывании по КГИ.
Это выход 9 DD6 по схеме Специалиста, кажется на каких-то схемах он был подписан "КГИ".
Это так подписан в Специалист М. В оригинальной схеме это DD5. В моей редакции сигнал подписан как V8.
Хорошо, так и подпишем.
Вот другой вариант схемы - https://disk.yandex.ru/i/lz2AkJIM8OYDng
Пока порты не трогал, основную чать позаимствовал с ПК8000.
На время INTA/ блокируется SYNC на основную плату.
Прерывания сбрасываются по INTA/.
Сигнал прерываний берется с 9 выв. DD5 (ИЕ5) по оригинальной схеме.
CityAceE
13.08.2025, 09:36
На время INTA/ блокируется SYNC на основную плату.
Прерывания сбрасываются по INTA/.
Как это будет выглядеть с точки зрения программирования?
Как это будет выглядеть с точки зрения программирования?
Блин, не туда ответил. :(
Для программиста никак, он об этом знать не будет
INTA возникает, когда приходят и разрешены прерывания. Он длится один машинный цикл, за время которого считывается с шины данных 0xFF, т.е. команда RST 7
Кроме того когда возникает INTA то блокируется выход на основную плату сигнал SYNC, чтобы система не восприняла отсутствие сигнала чтения как запись в память, т.е. предотвращается случайная запись в память.
Ну и INTA сбрасывает триггер прерывания, чтобы они не висели.
CityAceE
13.08.2025, 10:02
Ну и INTA сбрасывает триггер прерывания, чтобы они не висели.
Не очень понял, по итогу они защёлкиваться будут? Вот, например, у нас прерывания разрешены и пришло прерывание - комп перешёл на адрес 0x38. Что в этот момент с прерываниями? Они по-прежнему разрешены или после прихода запрещаются? Если запрещаются, так как они потом разрешаются? По EI или как-то иначе?
например, у нас прерывания разрешены и пришло прерывание - комп перешёл на адрес 0x38. Что в этот момент с прерываниями? Они по-прежнему разрешены или после прихода запрещаются?
Желательно уточнить, о чем речь. С началом обработки прерывания внутри проца прерывания запрещаются (как бы неявный аналог DI) и это зависит только от самого проца. Ну а от схемы снаружи зависит, останется ли (и если останется, то до каких пор) активный запрос после начала обработки прерывания.
Как это будет выглядеть с точки зрения программирования?
Если прерывание придет, когда прерывания разрешены, то сразу же будет вызван обработчик, и запрос сбросится до следующего кадра.
При вызове обработчика, как обычно, прерывания автоматически запрещаются, при возврате их нужно явно разрешать.
Если прерывание придет, пока прерывания запрещены, запрос останется висеть, он будет обработан и сброшен, как только будет разрешены прерывания.
По-моему, самый универсальный вариант, так как допускает использование и "как в спектруме", и асинхронно с кадрами.
Правда, будет чуть другое поведение, если обработчик вдруг не уложится за время кадра: следующее прерывание возникнет немедленно, а не на следующем кадре.
Обновил последнюю схему - https://zx-pk.ru/threads/36257-pk-spetsialist-ay-3-8910-12.html?p=1217192&viewfull=1#post1217192
Забыл ввести сигнал MEMRD для выхода на колодку процессора.
Так что решили по портам или обращению к AY как памяти?
Если делать порты совместимость с SP580, то как предлагает ivagor - порты
00...7Fh как порты
80...FFh - как память
По сути там надо одной линией A7 рулить.
Еще вопрос, будем буферить шину адреса?
CityAceE
13.08.2025, 14:46
Так что решили по портам или обращению к AY как памяти?
Если делать порты совместимость с SP580, то как предлагает ivagor - порты
00...7Fh как порты
80...FFh - как память
Вот это решение мне кажется идеальным!
Еще вопрос, будем буферить шину адреса?
Плата не будет слишком громоздкой?
Плата не будет слишком громоздкой?
Она и так будет не совсем маленькой. В корпус Лика вторым рядом вряд ли засунуть удастся.
Ну, если ничего больше подключать не будем, то буфер ставить не будем.
Вариант схемы с разделением портов до 7F и после - https://disk.yandex.ru/i/OThf-Hm0Wrv0mA
Вроде ничего не напутал. В любом случае смотрим и если никаких замечаний или предложений не будет, то разводим платку.
CityAceE
14.08.2025, 10:19
если никаких замечаний или предложений не будет, то разводим платку.
Может быть прежде чем разводить плату стоит на макетке убедиться, что всё работает именно так, как ожидается?
Может быть прежде чем разводить плату стоит на макетке убедиться, что всё работает именно так, как ожидается?
На макетке уж много проводов паять надо. Если кто желает, то пожалуйста - схема есть.
Возможно стоило бы смикшировать штатный бипер с AY, но не знаю, насколько это востребовано.
Возможно стоило бы смикшировать штатный бипер с AY, но не знаю, насколько это востребовано.
Для этого есть отдельный вход на общем микшере - для подключения внешних устройств. как собственно и выход :)
По идее можно было бы и ВИ53 прицепить, но тогда получится ну уж очень многофункциональная плата. Но лучше пока начать с достигнутого.
CityAceE
14.08.2025, 11:59
Возможно стоило бы смикшировать штатный бипер с AY
Да, хорошее замечание!
Кстати, для уменьшения количества микросхем можно логику запихать в одну CPLD типа EPM7032. Останутся только сам процессор, AY, буфер шины данных, ЛН1 в генераторе 14МГц. Плюсы в таком подходе, не надо будет если что резать дорожки, если ошибся с инверсией или схемотехникой. Минусы - стоимость (от 200руб) и необходимость программировать (USB ByteBlaster и программа от Quartus для программирования).
Вот вариант с EPM7032 - https://disk.yandex.ru/i/KEiMpxT2v-9dwg
В прошлом варианте забыл инвертировать RESET, обновил
CityAceE
14.08.2025, 18:17
Минусы - стоимость (от 200руб) и необходимость программировать (USB ByteBlaster и программа от Quartus для программирования).
200 руб. - это не те деньги, из-за которых могут возникать какие-то сомнения :) Что касается прошивания, то, думаю, кто будет собирать, у того всё нужное оборудование есть, а люди типа меня всё равно будут обращаться к специалистам ;)
Ещё прогонял в голове сценарий использования и понял, что мне не хватает микшированного моно выхода. У меня монитор EIZO 8020 от MSX, там встроенный монофонический динамик и меня на всех компах сложился некий стандарт для DIN-7, один из контактов которого звук. Поэтому хотелось бы не городить что-то навесом, а просто подключить проводок от платы к DIN-7 и иметь сразу готовый моносигнал BEEPER+AY.
200 руб. - это не те деньги, из-за которых могут возникать какие-то сомнения :) Что касается прошивания, то, думаю, кто будет собирать, у того всё нужное оборудование есть, а люди типа меня всё равно будут обращаться к специалистам ;)
Ещё прогонял в голове сценарий использования и понял, что мне не хватает микшированного моно выхода. У меня монитор EIZO 8020 от MSX, там встроенный монофонический динамик и меня на всех компах сложился некий стандарт для DIN-7, один из контактов которого звук. Поэтому хотелось бы не городить что-то навесом, а просто подключить проводок от платы к DIN-7 и иметь сразу готовый моносигнал BEEPER+AY.
DIN-7 это на платке на этой надо поставить, какие контакты?
Так в схему включил выход моно, и собственно добавил в микшер и вход моно, если вдруг внутренний звук подмешать кто то захочет. Схема тут - https://zx-pk.ru/threads/36257-pk-spetsialist-ay-3-8910-12.html?p=1217251&viewfull=1#post1217251
P.S. Обнаружил у себя штук 20 EPM7032SLC44. Значит будем на них делать. :)
CityAceE
15.08.2025, 11:21
DIN-7 это на платке на этой надо поставить, какие контакты?
Не, не. DIN-7 - это разъём у меня на корпусе. 6-й контакт - это у меня звук. Вот к нему я и потяну проводок от платы расширения. Никаких дополнительных разъёмов на эту плату ставить не требуется. По-моему вполне можно обойтись гребёнкой. Плата всё равно будет где-то внутри компа. Ну не у всех, конечно, комп в корпусе, но тем не менее.
Так в схему включил выход моно
Супер! Спасибо.
если вдруг внутренний звук подмешать кто то захочет
Я точно захочу!
Обнаружил у себя штук 20 EPM7032SLC44. Значит будем на них делать.
Отлично! Бронирую одну под себя ;) Готов внести предоплату!
Вчера получил письмо с просьбой добавить на платку как я понял вот эту схемку - https://zx-pk.ru/threads/27577-rasshirenie-tsveta-i-ozu-spetsialista.html?p=1157864&viewfull=1#post1157864
Насколько я понимаю, она позволяет использовать "брошенные" 16кб ОЗУ, в случае применения линейки памяти на РУ5.
Я не силен в возможностях Специалиста, но в принципе в CPLD остались 4 свободные ноги и можно так сказать попробовать такое провернуть. Но для надежности, выведу их на пустые контактные площадки, как и A14 c A15. Там уж каждый решит, будет пользоваться или нет. Просто надо будет соединить их перемычками.
Посему обновил схему - https://zx-pk.ru/threads/36257-pk-spetsialist-ay-3-8910-12.html?p=1217251&viewfull=1#post1217251
- - - Добавлено - - -
Я точно захочу!
Ну тогда, если больше замечаний и предложений нет, приступаем к разводке.
Насколько я понимаю, она позволяет использовать "брошенные" 16кб ОЗУ, в случае применения линейки памяти на РУ5.
Или я туплю или эта схема (https://zx-pk.ru/threads/27577-rasshirenie-tsveta-i-ozu-spetsialista.html?p=1157864&viewfull=1#post1157864) всего лишь переадресует (при MODE=1) обращения к C000-FFFF в область 0000-3FFF. Само по себе это ничего полезного не дает, чтобы залезть в РУ5 по адресам C000-FFFF надо резать основную плату. Или там в более ранних постах была еще часть схемы, которая реализовывала нужный функционал. Можно не привязываться к РУ5, а поставить на дополнительную плату еще и SRAM, в который переадресовать обращения к С000-FFFF при включенном соответствующем режиме в т.ч. для специалистов на РУ6.
Я не агитирую в пользу этого или других изощрений, просто обращаю внимание.
- - - Добавлено - - -
Возможно там предполагалось пустить A14' только на дешифрацию, чтобы старый дешифратор трактовал (при MODE=1) обращения к C000-FFFF как к озу, а к РУ5 должен подходить старый адрес A14, чтобы реальное обращение шло в ранее неиспользуемую часть озу. Тогда примерно понятно.
CityAceE
21.08.2025, 07:45
Mick, есть новости?
Mick, есть новости?
В процессе разводки. На этой неделе планирую дорисовать.
Попутно вопрос, как планируешь размещать. Мне кажется в сам ЛИК вторым этажом наверное не влезет, клава будет мешать. Для бескорпусных там все понятно.
CityAceE
21.08.2025, 13:09
Mick, есть новости?
Попутно вопрос, как планируешь размещать. Мне кажется в сам ЛИК вторым этажом наверное не влезет, клава будет мешать. Для бескорпусных там все понятно.
Вот так выглядит место около процессора:
https://pic.maxiol.com/thumbs2/1755770689.780858384.photo20250821130135.jpg (https://pic.maxiol.com/?v=1755770689.780858384.photo20250821130135.jpg&dp=2)
Вместо клавиатуры положил линейку и виден зазор:
https://pic.maxiol.com/thumbs2/1755770735.780858384.photo20250821130125.jpg (https://pic.maxiol.com/?v=1755770735.780858384.photo20250821130125.jpg&dp=2)
От дна линейки до верхушки процессора ~5.5 мм. От дна линейки до верхней части колодки, куда вставлен процессор, ~8.6 мм. Если на переходной плате процессор будет впаян, то всё должно поместиться. Единственный момент, это аксиальные конденсаторы, которые чуть выше, чем процессорная колодка. Колодка возвышается над платой на 6.5 мм, а конденсаторы на 7.6 мм.
P.S. Посмотрел даташиты на современные колодки. Высота 4.8 мм. В теории даже с колодками всё должно поместиться.
P.S. Посмотрел даташиты на современные колодки. Высота 4.8 мм. В теории даже с колодками всё должно поместиться.
На переходной плате тоже есть высокие элементы. Конкретно для ЛИКа надо будет искать низкие конденсаторы электролиты. Но в любом случае надо пробовать.
Завершил разводку. Сначала нарисовал так
https://i.ibb.co/4g5sLKrm/specialist-ext-03top.png (https://ibb.co/4g5sLKrm)
https://i.ibb.co/XxJrsJBG/specialist-ext-03bot.png (https://ibb.co/XxJrsJBG)
Потом достал плату ЛИКа и там где ЛН1 нарисовалась стойка, пришлось сдвигать ее.
https://i.ibb.co/QFj0LYxb/specialist-ext-03top-lik.png (https://ibb.co/QFj0LYxb)
https://i.ibb.co/4ZWD8k46/specialist-ext-03bot-lik.png (https://ibb.co/4ZWD8k46)
Размеры платы 128x80мм
Микросхемы в ДИПе. Проц и AY в SMD нет, EPM7032 в PLCC44 корпусе и кроватке (хотя в принципе ее можно впаять на плату, тогда придется контактные площадки менять). ЛН1 и АП6, а также LM324N в в ДИП
В ЛИКе это от ПЗУ до края платы - это по длине. А по ширине, от выступа стойки около процессора до крайнего от проца ряда ОЗУ, вернее на половину ОЗУшек налезем.
Возможно в самом ЛИКе придется кондерчики чуток прижать.
CityAceE
22.08.2025, 18:19
Потом достал плату ЛИКа и там где ЛН1 нарисовалась стойка, пришлось сдвигать ее.
Ого! У тебя плата Лика есть? Очень круто! Радости моей нет предела, что даже стойка учтена :)
го! У тебя плата Лика есть? Очень круто! Радости моей нет предела, что даже стойка учтена
Да плата есть, но вот при внимательном осмотре - проц то в другую сторону стоит. Оба на облом, надо разворачивать. :(
CityAceE
23.08.2025, 16:20
Можно не привязываться к РУ5, а поставить на дополнительную плату еще и SRAM, в который переадресовать обращения к С000-FFFF при включенном соответствующем режиме в т.ч. для специалистов на РУ6.
В этом случае получилась бы реально звуковая карта со своей памятью!
Вот я, например, Тони делаю, и памяти на музыку там, конечно же не остаётся. А вот если использовать AY + прерывания + эти дополнительные 16 кб, то с таким набором можно будет озвучить уже почти всё, что угодно. Практически идеальное решение для Специалиста! Mick, подумай, пожалуйста, над таким решением.
В этом случае получилась бы реально звуковая карта со своей памятью!
Вот я, например, Тони делаю, и памяти на музыку там, конечно же не остаётся. А вот если использовать AY + прерывания + эти дополнительные 16 кб, то с таким набором можно будет озвучить уже почти всё, что угодно. Практически идеальное решение для Специалиста! Mick, подумай, пожалуйста, над таким решением.
Дык уже не знаю. Я эту весь день переворачивал проц, даже ужал на 5мм по ширине вы еще SRAM запихать хотите. Эдак так и до нового Специалиста дойдет дело :)
Вот результаты переворота проца. Изящно перевернуть не получилось, пришлось совмещать с колодкой
https://i.ibb.co/LXSs6QkC/specialist-ext-03top-lik01.png (https://ibb.co/LXSs6QkC)
https://i.ibb.co/3m8yx7gk/specialist-ext-03bot-lik01.png (https://ibb.co/3m8yx7gk)
CityAceE
23.08.2025, 19:59
даже ужал на 5мм по ширине вы еще SRAM запихать хотите. Эдак так и до нового Специалиста дойдет дело
Я вижу на плате ещё полно свободного места! ;) Я тоже вначале подумал, что получается слишком навороченная плата, хотя изначально просто AY хотели поставить. Подумал, что слишком много хотелок. Но потом посидел, прикинул и понял, что тут память прям очень напрашивается. И именно для музыки, а не как нечто левое, хоть и полезное! Просто идеальное решение - настоящая звуковая карта, а не просто музыкальный чип. Ну и если всё взлетит, то и в новый клон обязательно нужно будет интегрировать это обкатанное решение. А с меня поддержка этой штуки в Tony. Я там уже почти на финишную прямую вышел ;) Но без дополнительной памяти музыку, к сожалению, некуда будет засовывать.
Изящно перевернуть не получилось, пришлось совмещать с колодкой
По мне так всё очень круто выглядит!
Я вижу на плате ещё полно свободного места!
То что есть какое то свободное место, это совсем не значит что туда можно поставить ОЗУшку в 28 ног и дотащить туда почти все адресные линии процессора. Скорее всего плата в этом случае наоборот станет шире.
Причем, насколько я понял мысль, то во время обращения к этой памяти нужно блокировать сигналы чтения и записи на основной плате, чтобы не было коллизий.
Да и из памяти SRAM я понимаю туда ставить только микруху типа КЭШ от материнки 386 - типа 62256 (32Кб)
CityAceE
23.08.2025, 22:17
Причем, насколько я понял мысль, то во время обращения к этой памяти нужно блокировать сигналы чтения и записи на основной плате, чтобы не было коллизий.
Я в схемотехнике не шарю, а высказываю только соображения с точки зрения программирования. Чтобы получить доступ к этим 16 кб, нужно будет в некий порт отправить число 1, тогда отрубится ПЗУ и область периферии на основной плате, то есть всё, что выше 0xc000. На это место подключаются 16 кб из внешнего ОЗУ. Есть подать в порт число 2, то подключаются следующие 16 кб из внешнего ОЗУ, раз микросхема на 32 кило. Подаём в порт 0 и всё возвращается на место. По сбросу, соответственно, тоже всё возвращается на место. Не знаю насколько это реально или не реально, но высказываю так, как я это вижу.
Я в схемотехнике не шарю, а высказываю только соображения с точки зрения программирования. Чтобы получить доступ к этим 16 кб, нужно будет в некий порт отправить число 1, тогда отрубится ПЗУ и область периферии на основной плате, то есть всё, что выше 0xc000.
То есть, в этом случае чтобы из своей программы обратиться к клаве надо опять подключить это "окно" назад. По сути эта память становится просто либо RAM диском, либо "специализированной" памятью, где нельзя обращаться к этому новому порту, иначе улетаешь сразу в космос. Может эту новую память действительно подключать в существующие окна - 0000...3FFFh или 4000...7FFFh. Тогда хоть в них можно полноценно обращаться к периферии или к ПЗУ.
CityAceE
24.08.2025, 13:14
То есть, в этом случае чтобы из своей программы обратиться к клаве надо опять подключить это "окно" назад.
Я не вижу в этом проблем. Переключился, взял нужную ноту, отправил в AY, переключился обратно.Ну не будет клавиатура в этот момент доступна, да и бог с ней.
Может эту новую память действительно подключать в существующие окна - 0000...3FFFh или 4000...7FFFh. Тогда хоть в них можно полноценно обращаться к периферии или к ПЗУ.
Я предполагаю, что и того варианта, который я предложил, должно хватить. Готовая программа, которую предполагается озвучивать, может иметь процедуры, раскиданные по всей области 0000-С000. А область с C000 гарантированно свободна от кода пользовательских программ.
Но если есть возможность в дополнение к моему предложению ещё и в другие окна вставлять, то почему-то бы и нет? Ну и 32 кб, конечно же можно не ограничиваться ;)
Вкарячил микросхему КЭШ на 32кб. Все ноги CPLD теперь заняты стали. Сигнал записи на КЭШ завел отдельно, чтобы можно было блокировать сигналы чтения и записи на основную плату.
Схема тут - https://disk.yandex.ru/i/SwAEMaZddG6tDg
Два дня потратил на по сути переразводку платы. Она стала шире 128мм x 90мм, но это плата за дополнительную микросхему. Ужиматься не буду, ибо уже утомило.
https://i.ibb.co/qwTZZXr/specialist-ext-04top-lik.png (https://ibb.co/qwTZZXr)
https://i.ibb.co/99FFM6Xs/specialist-ext-04bot-lik.png (https://ibb.co/99FFM6Xs)
Смотрите, если есть какие замечания, давайте. И наконец закажем пробник, а то так и будем расширяться до бесконечности.
CityAceE
25.08.2025, 16:31
Отлично! Спасибо за дополнительные 32 Кб. Отличная озвучка вырисовывается!
Так, раз замечаний больше нет, то завтра попробую заказать пробничек в 5 плат.
Немного косметики перед заказом
https://i.ibb.co/CpV5pV7g/specialist-ext-04top-lik01.png (https://ibb.co/CpV5pV7g)
https://i.ibb.co/H6JZNXP/specialist-ext-04bot-lik01.png (https://ibb.co/H6JZNXP)
Герберы платы отправил изготовителю, посмотрим что ответит.
CityAceE
27.08.2025, 09:38
Отлично! Надеюсь, что взлетит ;)
P.S. Все ещё готов внести предоплату. По возможности, конечно, за плату в сборе.
Вкарячил микросхему КЭШ на 32кб
Я не совсем понял, как можно будет программно обращаться к этой памяти?
Я не совсем понял, как можно будет программно обращаться к этой памяти?
Насколько я понял идею, то имеем порт страниц, допустим 10h. В нем есть кроме битов номеров страниц, в нашем случае всего две по 16кб и бит режима работы. Тк вот при включении бита режима работы, то любое обращение к области C000...FFFFh, будет равносильно обращению к памяти КЭШины. При этом сигналы чтения записи на основой плате будут заблокированы. Есть минус, при обращении к портам или к ПЗУ, придется бит режима обнулять. Как то так.
Пример:
Допустим выбрали порт 10h - менеджер страниц:
D0 - бит страницы 0 - первые 16кб, 1 - вторые 16кб;
D7 - бит режима работы маппера 0 - C000....FFFF работают штатно как ПЗУ и порты, 1 - C000....FFFF работает как КЭШ
CityAceE
27.08.2025, 16:14
Логичнее было бы засылать 0 для стандартного режима. А страницами рулить другими битами. Условно 0-я страница - это ПЗУ + порты, 1 - 1-я страница ОЗУ, 2 - 2-ая, и т.д. Так не получится сделать?
Логичнее было бы засылать 0 для стандартного режима. А страницами рулить другими битами. Условно 0-я страница - это ПЗУ + порты, 1 - 1-я страница ОЗУ, 2 - 2-ая, и т.д. Так не получится сделать?
Логичнее с точки зрения программиста, а с точки зрения схемотехники он выливается в дополнительные схемы, а именно в данном случае у нас придется задействовать D0 и D1 биты. В данном случае придется их анализировать на 0, а для адреса микросхемы ОЗУ надо типа делать типа вычитания 1, что усложнит схему и не факт что можно сейчас это провернуть.
00 - ПЗУ порты
01 - первые 16кб
10 - вторые 16кб
11 - облом в никуда.
При таком раскладе в будущем, применении толстой микросхеме ОЗУ последние 16кб буду не задействованы.
Этот расклад по сути повторяет то что выше написал
00 - ПЗУ порты
01 - облом в никуда
10 - первые 16кб
11 - вторые 16кб
Третий вариант, это использовать условно регистр только не на 2 бита, а на 3.
0 бит регистра - D0 or D1
1 бит регистра - D0
2 бит регистра - D1
В этом случае при записи в порт номера страниц будет следующая комбинация битов (210):
0 страница - 000
1 страница - 011
2 страница - 101
В этом случае для программиста прозрачно будет все, только не надо так сказать халтурить, устанавливая недопустимые комбинации. :)
Serg6845
27.08.2025, 17:54
Логичнее с точки зрения программиста, а с точки зрения схемотехники он выливается в дополнительные схемы, а именно в данном случае у нас придется задействовать D0 и D1 биты. В данном случае придется их анализировать на 0, а для адреса микросхемы ОЗУ надо типа делать типа вычитания 1, что усложнит схему и не факт что можно сейчас это провернуть.
что, в плисине уже места нет? схема вроде как элементарная...
00 - ПЗУ порты
01 - первые 16кб
10 - вторые 16кб
11 - облом в никуда.
При таком раскладе в будущем, применении толстой микросхеме ОЗУ последние 16кб буду не задействованы.
а более толстую просто так и не поставишь - она уже 32 ноги будет. да и старший адрес брать неоткуда - ноги на плисине закончились уже.
Третий вариант, это использовать условно регистр только не на 2 бита, а на 3.
0 бит регистра - D0 or D1
1 бит регистра - D0
2 бит регистра - D1
В этом случае при записи в порт номера страниц будет следующая комбинация битов (210):
0 страница - 000
1 страница - 011
2 страница - 101
В этом случае для программиста прозрачно будет все, только не надо так сказать халтурить, устанавливая недопустимые комбинации. :)
с тремя битами тоже проблема - DB2 на плисину не заведен. использовать DB4 - опять коряво с точки зрения программиста получается.
CityAceE
27.08.2025, 18:00
Усложнять и делать больше корпусов, естественно, не нужно. Меня лично устроит по нулю врубать стандартный конфиг и далее любой из предложенных вариантов по переключению страниц, по возможности с заделом на память свыше 32 кб.
а более толстую просто так и не поставишь - она уже 32 ноги будет. да и старший адрес брать неоткуда - ноги на плисине закончились уже.
с тремя битами тоже проблема - DB2 на плисину не заведен. использовать DB4 - опять коряво с точки зрения программиста получается.
Это уже на будущее я размышлял. Там естественно потолще CPLDху и память можно поставить.
На данном этапе ног свободных нет. Поэтому остановимся пока на 3 варианте :)
- - - Добавлено - - -
Усложнять и делать больше корпусов, естественно, не нужно. Меня лично устроит по нулю врубать стандартный конфиг и далее любой из предложенных вариантов по переключению страниц, по возможности с заделом на память свыше 32 кб
Скорее всего 3 варант должен взлететь. Триггеров не много в CPLD задействовано, там только на трассировку цепей надо будет глядеть.
Кстати вопрос, SP580 по каким портам командой out долбит? Если выше С0h, то раз уж в CPLD вся схема управления, то хочу отожрать портов, нефиг разбрасываться. Ограничим 00...BFh - порты, С0...FFh - совместимость.
CityAceE
27.08.2025, 19:37
Кстати вопрос, SP580 по каким портам командой out долбит?
Он, как минимум, так обращается к ВВ55, которая по адресам F000-F7FF. Но также он и к ВИ53 обращается и ко второй ВВ55. В общем, это диапазон E000-F7FF.
Mick, не вижу соединения выхода INT CPLD с входом INT процессора...
Mick, не вижу соединения выхода INT CPLD с входом INT процессора...
Как же, он есть 24 вывод на CPLD. Его нет на колодке процессора, которая будет вставляться в оригинальное гнездо процессора.
CityAceE
28.08.2025, 08:49
А чисто теоретически возможна ли аналогичная плата, где вместо i8080 будет стоять Z80? Вот так же, чтобы ничего не резать на основной плате и не подкидывать дополнительных сигналов, просто вставить в колодку вместо проца и всё.
А чисто теоретически возможна ли аналогичная плата, где вместо i8080 будет стоять Z80?
Так сделано в Специалисте МХ2 стоят две панельки под два процессора.
CityAceE
28.08.2025, 11:11
fifan, совсем скоро заберу у Сергея свой собранный Сябр и буду изучать, что за звери такие эти МХ и МХ2. Пока что для меня лично это какие-то другие платформы. Кажется, что даже Орион-128 ближе к Специалисту, чем МХ/МХ2.
А чисто теоретически возможна ли аналогичная плата, где вместо i8080 будет стоять Z80? Вот так же, чтобы ничего не резать на основной плате и не подкидывать дополнительных сигналов, просто вставить в колодку вместо проца и всё.
Теоретически все возможно :) Но без дополнительных сигналов может и не обойтись. Сейчас же есть два дополнительных сигнала.
P.S. Платы оплачены и ушли в производство.
Его нет на колодке процессора, которая будет вставляться в оригинальное гнездо процессора.
Я об этом и говорю. Потом отдельно пробросить на колодку МГТФом?
Serg6845
28.08.2025, 22:09
Я об этом и говорю. Потом отдельно пробросить на колодку МГТФом?
а нужно? все равно в большинстве Специалистов он на земле сидит.
Serg6845, если будет AY, то думаю, что и прерывание нужно. Иначе будет сложно его программировать.
Serg6845
28.08.2025, 23:10
Serg6845, если будет AY, то думаю, что и прерывание нужно. Иначе будет сложно его программировать.
так оно есть, там на плату кадровый импульс подается. просто не через оригинальную ножку.
так оно есть, там на плату кадровый импульс подается. просто не через оригинальную ножку
Эта ножка - вход процессора. Так что скорее с платы на эту ножку не подается. А на плату заводится КГИ, да.
Я об этом и говорю. Потом отдельно пробросить на колодку МГТФом?
Еще раз по понятнее. На переходной плате будет стоять процессор. На "материнской" плате процессор удаляется, вместо него впаивается колодка. Вот в эту колодку и устанавливается переходная плата. На переходной плате микросхема DD1 - это процессор. От него до CPLD идет сигнал прерывания. XP1 - это разъем, через который и будет происходить соединение с платой. Так как была задача ничего не резать на основной плате, поэтому два дополнительных сигнала F1TTL и КГИ просто допаиваются проводками. Так что в идеале - все должно работать. А так, как тут правильно заметили - в обычных Специалистах ножка прерываний процессора сидит на земле.
Mick, прошу прощения, увидел. Перепутал колодку с самим процессором.
Печатные платы изготовили и вчера отправили из Китая.
CityAceE
03.09.2025, 09:57
Печатные платы изготовили и вчера отправили из Китая.
Ура! :)
Так, платки уже во Внуково прошли таможню, а значит скоро уже получим их.
CityAceE
12.09.2025, 17:11
скоро уже получим их.
Отлично! С нетерпением ждём! Спасибо, что держишь в курсе! ;)
SYR-ALEX
18.09.2025, 20:06
Замакетил часть схемы из этой темы . Та схема ,что на рассыпухе , без SRAM . Т.е. замену ВК28/38 . Эксперементирую на Сябре с модулем ЦПУ i8080 , прошивка ПЗУ от Алексея Морозова с поддержкой его SD контроллера. Но сделал немного по своему . Сигналы управления шинами сделал в формате Z80 (/MREQ,/IORQ,/RD,/WR). Сигналы INTA\ и INT по схеме Mick .
Запускал схему по этапно . Сначала запустил работу с портами , потом занялся прерываниями .
С портами по IN/OUT работает без нареканий .
А вот с прерываниями засада . Когда подключил сигнал INT к процессору , компьютер перестал стартовать . В процессе выяснил , в прошивке по адресу #C006 код FB т.е. команда EI . Это в самом начале инициализации разрешаются прерывания , проц плучает запрос на прерывание , прыгает на #0038 , а там случайный код и привет нирвана .
Разомкнул сигнал INT (подтянут резистором к 0) . Подал питание комп стартует .Через Монитор по адресу #0038 прописываю F3 (DI - запретить прерывания ) и C9 . Замыкаю INT . Компьютер работает , жму RESET также работает . Значит прерывание отрабатывает .
Так как после сброса прерывания запрещены , исправил в ПЗУ код FB на 00 . Стартует штатно . Но оболочка SD контроллера теперь ч\б . Плохо помню , но кажется где то упоминалось про детект цвета на Специалисте по по команде EI . Видимо это тот случай .
Делаю вывод : надо либо аппаратно отключать прерывания , либо править существующий софт . Мне попалась первая программа и самая важная . Сколько ещё таких программ будет ?
Когда запускали и прокачивали Эрика я делал управление прерываниями ВКЛ\ВЫКЛ через прорт #FB .
Что скажите ?
CityAceE
18.09.2025, 20:42
Чтобы INT работал совместно с восьмицветом, необходимо делать защелку на систему начального пуска, как, например, сделано в Экспрессе. EI появилась в ПЗУ вместе с восьмицветом, когда систему НП пересадили на INTE.
SYR-ALEX
18.09.2025, 21:03
В Сябре НП сделан именно через защёлку . И вывод INTE процессора не задействован . Прогонял другие программы , 8 цветов работают как и раньше . Проблема на данный момент с шелом SD контроллера .
CityAceE
18.09.2025, 21:16
В Сябре НП сделан именно через защёлку .
Ах, вот оно что. Ну тогда проблема явно чисто софтовая.
Так как после сброса прерывания запрещены , исправил в ПЗУ код FB на 00 . Стартует штатно .
Тогда уж логичнее не патчить патченое, а вернуть оригинальное журнальное ПЗУ, в котором изначально не было EI.
Плохо помню , но кажется где то упоминалось про детект цвета на Специалисте по по команде EI . Видимо это тот случай .
Да, это ivagor писал, что так определяет наличие восьмицвета. И если дело только в этом, то проблем пропатчить оболочку нет.
Полез в исходники оболочки, и конечно же нашёл вот это:
setColorAutoDisable:
lxi h, 49152
shld memchr8_1
mvi a, 251
sta memchr8_2
mvi a, 16
call memchr8
; Сложение с константой 0
mov a, l
ora h
jnz l287
; 5 asm {
MVI A, 0C9h
STA setColor
l287:
ret
memchr8:
sta memchr8_3
; 2 asm {
; lda memchr8_3
mov d, a
lda memchr8_2
lhld memchr8_1
memchr8_l1:
; *dest = *src
cmp m
rz
inx h
dcr d
jnz memchr8_l1
xra a
mov h, a
mov l, a
ret
Да, это ivagor писал, что так определяет наличие восьмицвета.
Для протокола. Я использовал сравнение сигнатуры из пзу для определения варианта цвета в одной версии одной игрушки в качестве proof of concept. Я понимал и понимаю, что в качестве регулярного средства это порочный подход и больше я его не использовал, делал отдельные версии.
- - - Добавлено - - -
И я сейчас посмотрел, как делал детект в той игрушке. Там сильно отличается от того, что сделал Алексей Морозов и с большой вероятностью на современных клонах, у которых начальный пуск без бита ВВ55 и без INTE и даже без EI в пзу игрушка должна переключаться в 8-цветный режим.
CityAceE
19.09.2025, 09:19
Я понимал и понимаю, что в качестве регулярного средства это порочный подход и больше я его не использовал
Я не правильно выразился. Хотел сказать, что ты упоминал такой вариант, как один из возможных. При этом неохотно поделился им, и сказал, что так определять не стОит.
CityAceE
22.09.2025, 11:48
платки уже во Внуково прошли таможню
10 дней прошло. Не дошли ещё?
10 дней прошло. Не дошли ещё?
С 15 сентября находится сортировочном центре в Калуге. Все никак не отсортируют
С 15 сентября находится сортировочном центре в Калуге. Все никак не отсортируют
Что то непонятное творится с нашей сортировочной. 23 числа в приложении пожаловался на непонятные задержки. 24 сентября сменили на Сортировку и опять зависон.
Вот не пойму что так - такое в первый раз происходит. Блин досада, вроде как платы и пришли в город, а получить не могу. Сразу вспоминается мультик про Печкина, посылка есть, а не отдам. :(
CityAceE
27.09.2025, 15:18
Ну вот, а я уж было обрадовался, увидев от тебя сообщение в теме...
Ну вот, а я уж было обрадовался, увидев от тебя сообщение в теме...
Похоже надежда на получение плат сохранилась. После 3 недель валяния на сортировочной и одной жалобы, все таки посылка добралась до почты. В субботу должен забрать.
CityAceE
01.10.2025, 14:02
В субботу должен забрать.
Наконец-то! Ждём с нетерпением.
Тут подумалось. Есть интересный чип YMF288. По сути, это тоже самое что и YM2203, а именно SSG+FM. Напомню, что SSG - это наш AY. Вкусность чипа в том что он в smd корпусе. К сожалению ВМ80А не имеет аналога в qfp корпусе, только раритеты в золотом планаре, но их фиг достанешь. Если допустим переходить на 8085А, то есть у OKI вариант в qfp корпусе, но опять фиг достанешь. А так было бы прикольно собрать все в smd.
Кстати, вариант с YMF288 мне кажется имеет смысл попробовать даже с родным диповским ВМ80А.
CityAceE
02.10.2025, 08:30
Кстати, вариант с YMF288 мне кажется имеет смысл попробовать даже с родным диповским ВМ80А.
Давай уже вторым этапом ;) Сначала запустим, отладим и обеспечим ПО базовый вариант с AY. А уж если всё взлетит, то почему бы не расширить его ещё и FM?
Давай уже вторым этапом Сначала запустим, отладим и обеспечим ПО базовый вариант с AY. А уж если всё взлетит, то почему бы не расширить его ещё и FM?
Ну это я так, косточку бросить :)
Mick, ты хочешь YMF288 ради компактности платы (и использовать только AY часть) или ты готов адаптировать проигрыватель FM для 8080?
Mick, ты хочешь YMF288 ради компактности платы (и использовать только AY часть) или ты готов адаптировать проигрыватель FM для 8080?
Первую часть осилю, а вторую часть лучше бы общественность сподвиглась :)
Кстати, есть у кого тулса для создания прог для Специалиста. Как плату с музлом проверять будем.
CityAceE
02.10.2025, 10:55
Кстати, есть у кого тулса для создания прог для Специалиста. Как плату с музлом проверять будем.
Сообщишь мне порты и другие необходимые данные, а я попробую сделать что-то, что должно будет звук на AY выдавать.
А вообще я пишу всё на SjASMPlus и компилю потом с ключом --8080. Вот здесь рассказывал:
https://rutube.ru/video/28009cd6c0423d20eccb79412d7d1842/
А вообще я пишу всё на SjASMPlus и компилю потом с ключом --8080. Вот здесь рассказывал:
Это хорошо, но рыбу бы выложили с утилитами. Как получить rks, как получить из rks wav?
Как на реал то загонять - у меня пока нет SD адаптера.
CityAceE
02.10.2025, 15:07
Это хорошо, но рыбу бы выложили с утилитами. Как получить rks, как получить из rks wav?
Вот тебе рыба.
hello_compile.bat - для компиляции и получения RKS + WAV
В системе должен стоять Python.
SjASMPlus и Emu80 сам в папку Tools положишь.
Забрал сегодня с почты платки.
https://i.ibb.co/qY1LFL8d/1759588543843.jpg (https://ibb.co/qY1LFL8d)
CityAceE
04.10.2025, 21:51
Забрал сегодня с почты платки.
Наконец-то! С замиранием сердца жду результатов сборки и отладки.
CityAceE
07.10.2025, 22:36
Миша, ну что там? Почему до сих пор тишина в эфире?
Миша, ну что там? Почему до сих пор тишина в эфире?
Ну не так все быстро идет. Пока в процессе сборки, некоторых деталей не оказалось (как обычно внезапно кончились), идут из чупа дипса.
Тут при сборке платы столкнулся с дилеммой. Какой разъем выбирать для установки в плату компа. Если не ограничиваться корпусом по высоте допустим ЛИКа, то можно выбрать связку 2шт PLS-20 и 2шт PBS-20.
То есть, на плату компьютера устанавливаем два гнезда PBS-20 вместо процессора или колодки, если процессор на ней стоит. А на плате звуковой карты ставить два разъема PLS-20 с обратной стороны.
Эта комбинация позволяет достаточно крепко держаться. Но минус в этом такой, разъем PBS имеет высоту корпуса 8,5мм. Разъем PLS имеет высоту 2,5мм. Итого 11мм до платы звуковухи. В принципе, если убрать с PLS корпус и уменьшить штыри на эти самые 2,5мм, то можно сократить расстояние до платы звуковухи до 8,5мм. Но не забываем высоте деталей на самой звуковухе. И к сожалению PLS не лезут ни в цангу, ни в наши колодки PC40. Если брать связку цанга-цанга, то получается конечно конструкция ниже но соединение не достаточно надежное (цанговые штыри хлипенькие).
Для себя, так как я не гонюсь по высоте, я наверное сделаю на связке PBS + PLS.
А вот для реальной жизни надо думать как устанавливать.
CityAceE
10.10.2025, 12:32
PLS-20 + PBS-20 - это, конечно, идеальное соединение. Но мне лично, это не подходит по двум причинам:
1. Не проходит по высоте, так как ЛИК у меня всё-таки в штатном корпусе и что-то менять в этом вопросе я не планирую.
2. У меня уже впаяна колодка. Боюсь, что тот хлипкий текстолит попросту не переживёт ещё одного вмешательства в этом месте.
Мне нужно что-то такое, чтобы можно вставлять в существующую колодку и при этом чтобы всё проходило по высоте. На ум приходит Скорпионовcкий переходник AY. На плате Скоприона установлена панелька под короткий AY-3-8912, но через переходник установлен длинный AY-3-8910. Сам переходник - это просто небольшая текстолитовая платка, в которую впаян AY-3-8910, а низу к плате припаяны ножки. Я не знаю из чего эти ножки сделаны, возможно, просто из толстой луженой проволоки. Вот мне, скорее всего, да и другим владельцам оригинального ЛИКа (интересно, есть ещё тут такие?), понадобится типа такого решения.
Что же платку собрал. Как и говорил раньше - у меня связка PBS+PLS. И собрана со всеми установленными деталями - так сказать, витринный образец.
Естественно в ЛИК многие разъемы ставить не надо будет.
Фото
https://i.ibb.co/dJKxgfJ7/DSCN2809.jpg (https://ibb.co/dJKxgfJ7)
https://i.ibb.co/QjKqsTHW/DSCN2808.jpg (https://ibb.co/QjKqsTHW)
https://i.ibb.co/1G7yDKwM/Specialist-soundcard.jpg (https://ibb.co/1G7yDKwM)
Казалось, осталось перейти к программированию, но придется подождать.
1. На плате ЛИКа процессор впаян в плату
2. Блок питания заказан в Чип-Дипе, ибо я уже забыл, что наши компы требуют 3 напряжения, а под рукой не оказалось свободного
https://i.ibb.co/3YNbbfpS/DSCN2833.jpg (https://ibb.co/3YNbbfpS)
https://i.ibb.co/gZxMh3vL/DSCN2830.jpg (https://ibb.co/gZxMh3vL)
CityAceE
14.10.2025, 08:12
Что же платку собрал.
Выглядит прекрасно! Ещё бы и заработала, как задумано ;)
Любопытно, но на моём Лике не было на плате скобы, которая держит шлейф клавиатуры. Я даже не знал, что там отверстия на плате есть под эту скобу. Сейчас проверил у себя - тоже оказывается, есть.
С нетерпением жду результатов запуска!
SYR-ALEX
14.10.2025, 12:31
Конечно заработает . Отдельные узлы у меня сначала на макетке , а теперь и на дочке к ВМ80 - работают .
CityAceE
14.10.2025, 14:20
а теперь и на дочке к ВМ80 - работают
Ух ты! А герберы и прочее? Я бы хотел для своего Сябра такую!
SYR-ALEX
14.10.2025, 22:14
Выглядит так
https://pic.maxiol.com/thumbs2/1760469021.1571430188.img202510142046192.jpg (https://pic.maxiol.com/?v=1760469021.1571430188.img202510142046192.jpg&dp=2)
Подготовлю доки и выложу в теме про Сябр .
Готово (https://zx-pk.ru/threads/32172-quot-spetsialist-quot-syabr-v2-sborka-naladka-obmen-informatsiej.html?p=1219594&viewfull=1#post1219594)
CityAceE
18.10.2025, 13:50
Mick, почему опять тишина в эфире?
@Mick, почему опять тишина в эфире?
Как я выше писал - не все идет быстро. Но подготовительные работы ведутся. В понедельник сделаю небольшой фотоотчет.
А так вкратце:
1. Получил из Чупа-Дипа блок питания MeanWell RT-50A. У него 3 нужных нам напряжения. +5, +12 и -5 и чтобы пальцами не тыкать куда не следует взял блок розетки с выключателем и предохранителем.
Спаял хвосты и проверил - напряжения все есть.
2. Добрались руки до платы Лика, при попытке демонтажа проца оторвалось несколько дорожек. Посему если проц стоит в панельке - вам повезло и подбирайте под него штыри.
Пришлось утраченные дорожки дублировать МГТФ.
3. Откопал свой старый монитор LG c входом AV - буду туда пробовать подключать.
CityAceE
18.10.2025, 14:40
блок питания MeanWell RT-50A. У него 3 нужных нам напряжения. +5, +12 и -5
Так а разве любой БП АТХ не подошёл бы? Вроде бы у него тоже всё, что нужно имеется. Возможно, -5 уже не везде есть, но всё же это стандарт.
Посему если проц стоит в панельке - вам повезло и подбирайте под него штыри.
У меня изначально тоже был впаян. Это я его ещё тогда, много лет назад в панельку пересадил. А уже сегодня ту же процедуру с ВВ55 проделал по моей просьбе Serg6845.
Откопал свой старый монитор LG c входом AV - буду туда пробовать подключать.
Ну вот, вижу что почти всё готово! Надеюсь, что всё подключится и заработает, чтобы можно было уже, наконец, экспериментировать.
В понедельник сделаю небольшой фотоотчет.
Очень жду!
Serg6845
18.10.2025, 21:08
Так а разве любой БП АТХ не подошёл бы? Вроде бы у него тоже всё, что нужно имеется. Возможно, -5 уже не везде есть, но всё же это стандарт.
-5 в АТХ вот уже лет 10-15 нет ни в одном. а древний живой с -5 далеко не у всех в тумбочке валяется :)
CodeMaster
19.10.2025, 10:00
а древний живой с -5 далеко не у всех в тумбочке валяется
Что странно для посетителей данного сайта. ¯\_(ツ)_/¯
SYR-ALEX
22.10.2025, 21:47
Выглядит так
https://pic.maxiol.com/thumbs2/1760469021.1571430188.img202510142046192.jpg (https://pic.maxiol.com/?v=1760469021.1571430188.img202510142046192.jpg&dp=2)
Подготовлю доки и выложу в теме про Сябр .
Отписал в теме (https://zx-pk.ru/threads/32172-quot-spetsialist-quot-syabr-v2-sborka-naladka-obmen-informatsiej.html?p=1219594&viewfull=1#post1219594)
Ну вот, вижу что почти всё готово! Надеюсь, что всё подключится и заработает
Так прошивку CPLD еще разрабатывать и отлаживать, нет?
Так прошивку CPLD еще разрабатывать и отлаживать, нет?
Дык прошивку там по сути не так долго писать. Тут больше в подготовительных работах тупим :)
Подключил я осцил, проверил активность проца. Все сигналы присутствуют, т.е. проц как бы работает. Куда дальше смотреть.
Вытащил ПЗУ, как Станислав писал картинка не изменилась - матрац. То есть теоретически нет выбора ПЗУ или ....?
Итак, вроде починил плату ЛИКа, пора возвращаться к нашим так сказать "баранам".
Пока вопрос к общественности. Есть ли сейчас эмулятор, где Специалист поддерживает AY и прерывания, если нет, как быстро можно сделать. Дело в том что, нужно ведь проверить сначала какую ту музыку (программу, плеер), прежде чем в железе проверять.
Для проверки хочу портировать свою бегущую строку, которую выдрал из игры Sokoban (ZX Spectrum) и прилепил к ПК8000. Там есть плеер музыки SoundTracker (Song by ST compiler). Заодно так сказать потренируюсь в написании чего то для Специалиста.
Из железных вопросов по карте.
10h - системный порт
используется бит DB7 - разрешение прерывания (при сбросе выключено)
11h - порт менеджера страниц
Используются биты DB0 и DB1 по 3 варианту - https://zx-pk.ru/threads/36257-pk-spetsialist-ay-3-8910-12.html?p=1217664&viewfull=1#post1217664
регистр только не на 2 бита, а на 3.
0 бит регистра - DB0 or DB1
1 бит регистра - DB0
2 бит регистра - DB1
В этом случае при записи в порт номера страниц будет следующая комбинация битов (210):
0 страница - 000 - ПЗУ и порты
1 страница - 011 - первые 16кб ОЗУ (доп. память)
2 страница - 101 - вторый 16кб ОЗУ (доп. память)
14h - порт данных AY
15h - порт регистров AY
Также ограничить обращение к портам диапазоном
00..BFh, т.е. обращение к портам C0...FFh равносильно обращение к ОЗУ в диапазонах C000...FFFFh. Я вот сейчас не скажу на память, там вроде в команде out старший адрес дублируется младшим, т.е. если пишем в порт F0h, то вроде адрес выставляется F0F0h. Могу конечно и ошибаться.
CityAceE
21.11.2025, 12:53
Есть ли сейчас эмулятор, где Специалист поддерживает AY и прерывания, если нет, как быстро можно сделать.
Да, последние версии Emu80 поддерживают и AY (и даже TS!), и кадровые прерывания. Всё это включается в настройках через GUI.
Именно на этом конфиге я всё тестировал и выкладывал сюда. Во всех своих адаптациях я умышленно выносил порты AY в константы, чтобы можно было в любой момент всё быстренько переделать на другое подключение.
Там есть плеер музыки SoundTracker (Song by ST compiler).
В этой теме я выкладывал (https://zx-pk.ru/threads/36257-pk-spetsialist-ay-3-8910-12.html?p=1216015&viewfull=1#post1216015) адаптацию к i8080 последней версии проигрывателя PT3/PT2.
10h - системный порт
Пока никак прокомментировать не могу.
11h - порт менеджера страниц
Было бы неплохо не ограничивать всё 32-мя килобайтами. Вдруг всё окажется удобно и захочется иметь больше памяти?
14h - порт регистров AY
15h - порт данных AY
Если я ничего не путаю, то именно на эти порты повесили AY на Векторе? Если это так, то это правильный выбор.
00..EFh, т.е. обращение к портам F0...FFh равносильно обращение к ОЗУ в диапазонах F000...FFFFh.
Возможно, стоит расширить диапазон всем диапазоном ПЗУ+ПОРТЫ, то есть C000-FFFF. Например, SP580 повесил ВИ53 в этом диапазоне и обращается к нему по OUT. У меня на ЛИКе есть режим SP580 и таймер припаян.
Я вот сейчас не скажу на память, там вроде в команде out старший адрес дублируется младшим, т.е. если пишем в порт F0h, то вроде адрес выставляется F0F0h. Могу конечно и ошибаться.
Да, ты абсолютно прав! Некоторые программы именно так обращаются к портам. Например, Монитор и софт от SP580. Поэтому важно, чтобы звуковая карта не мешала этому методу.
Было бы неплохо не ограничивать всё 32-мя килобайтами. Вдруг всё окажется удобно и захочется иметь больше памяти?
Это ограничение текущей платы, ограничение линий данных на CPLD.
Если я ничего не путаю, то именно на эти порты повесили AY на Векторе? Если это так, то это правильный выбор.
Да, такие же порты выбраны сделаны были и в ПК8000. Но ноги растут от Вектора
- - - Добавлено - - -
Да, последние версии Emu80 поддерживают и AY (и даже TS!), и кадровые прерывания. Всё это включается в настройках через GUI.
А ссылку можно, чтобы не искать.
Было бы не плохо, если b2m, тоже вставил в свой эмулятор. Но не знаю, на сколько он сейчас им занимается.
CityAceE
21.11.2025, 15:07
А ссылку можно, чтобы не искать.
Вот прямая ссылка на раздел скачивания: https://emu80.org/distr/
Вот на последнюю Виндовую сборку: https://emu80.org/v4beta/Emu80qt_40535.zip
Mick, если что, AY в эмуляторе в текущей реализации сидит по адресам F400-F47F, а прерывание возникает по фронту КГИ.
При необходимости можно оперативно изменить адреса в конфиге.
Возможно, стоит расширить диапазон всем диапазоном ПЗУ+ПОРТЫ, то есть C000-FFFF. Например, SP580 повесил ВИ53 в этом диапазоне и обращается к нему по OUT. У меня на ЛИКе есть режим SP580 и таймер припаян.
Хорошо, согласен. Тем более на CPLD приходят только A14 и A15
- - - Добавлено - - -
Если я ничего не путаю, то именно на эти порты повесили AY на Векторе? Если это так, то это правильный выбор.
Уточню, я немного ошибся
Правильно вот так
14h - порт данных AY
15h - порт регистров AY
Пост выше я поправил
- - - Добавлено - - -
При необходимости можно оперативно изменить адреса в конфиге.
Было бы не плохо поправить, чтобы уже отлаживать программу.
Еще вопрос, прерывания возникают по 38h (выполнение команды rst 7) адресу?
CityAceE
24.11.2025, 21:14
Еще вопрос, прерывания возникают по 38h (выполнение команды rst 7) адресу?
Да. Но при жалении в файле конфигурации эмулятора это можно изменить.
Что то не пойму почему не работает
;-------------------------------------------------------
; Описание: Начало программы
;-------------------------------------------------------
START_PROGRAMM:
di
ld hl, SCREEN_BASE_INFO ;адрес начала видео информации
ld bc, 3000h
ld e, 0
call MEMORY_ARRAY_FILL ;очистим видео область
call STRACK_INIT
call SBAN_STR_INIT ;инициализация строки
ld hl, SBAN_INTERRUPT
ld (0039h), hl
ld a, 0C3h
ld (0038h), a
ei
SBAN_STR_LOOP:
call SBAN_STR_PROCESS ;обработка строки
ei
halt ;замерли
jp SBAN_STR_LOOP
; ---------------------------------------------------------------------------
SBAN_INTERRUPT:
push hl
push bc
push de
push af
call STRACK_PLAY
pop af
pop de
pop bc
pop hl
ei
ret
Если убрать halt и прерывания, то строка бежит. А если поставить, то почему то бесконечный цикл в этой строке
call SBAN_STR_INIT ;инициализация строки
Сам файл - https://disk.yandex.ru/d/fvu6JIBxWmyxGw
CityAceE
25.11.2025, 10:27
Что то не пойму почему не работает
А кто на адрес 0x38 будет ставить переход на обработчик прерывания? ;)
Добавил прямо в отладчике
0038 C3 26 01 (JP SBAN_INTERRUPT)
И попрыгала строка!
Пофиксеный RKS во вложении.
А кто на адрес 0x38 будет ставить переход на обработчик прерывания?
А эти строки разве не устанавливают
ld hl, SBAN_INTERRUPT
ld (0039h), hl
ld a, 0C3h
ld (0038h), a
CityAceE
25.11.2025, 11:12
А эти строки разве не устанавливают
А код туда не доходит!
В представленном исходнике только два вызова:
call STRACK_INIT
call SBAN_STR_INIT ;инициализация строки
Но в RKS есть ещё какой-то третий вызов, то есть три разных вызова подряд идёт. И вот после второго всё возвращается на адрес 100 - на начало всей программы. Таким образом до третьего вызова и всего остального дело даже не доходит.
SYR-ALEX
25.11.2025, 11:14
Может лишние EI убрать ? Наверное не хорошо разрешать прерывания внутри обработчика прерываний ?
CityAceE
25.11.2025, 11:28
И вот после второго всё возвращается на адрес 100 - на начало всей программы.
Потому что во второй вызываемой подпрограмме есть EI! И пока она не отработала, успевает прийти прерывание - а там нули. Всё благополучно доходит до стартового адреса и начинается всё заново.
В общем, установку обработчика на 0x38 нужно делать в самом начале программы.
SYR-ALEX
25.11.2025, 11:49
Так оставить EI только перед HALT , остальные убрать .
Так, ei лишние убрал вроде заработал. Если порты 14 и 15 добавить в эмулятор, то услышите музыку. С музыкой строчка рвет, ее по сути надо оптимизировать.
https://disk.yandex.ru/d/fvu6JIBxWmyxGw
CityAceE
25.11.2025, 12:37
Так, ei лишние убрал вроде заработал.
Пока только под эмулятором или на реале тоже?
Пока только под эмулятором или на реале тоже?
Пока под эмулятором. Кстати я немного лишил возможности самомодификации (там всего три места было) плеер SounTracker, так что можно его и в ПЗУ закинуть, если надо.
Если порты 14 и 15 добавить в эмулятор, то услышите музыку.
Конфиг для этого варианта, заменить в последнем релизе эмулятора (4.0.535) или git-сборке.
CityAceE
25.11.2025, 21:03
Отлично! Есть музыка и строчка скачет, неравномерно, правда, и тиринг есть. Но на данном этапе на это не обращаем внимания. Главное теперь, чтобы на реале взлетело.
CityAceE
01.12.2025, 21:35
А как вам такой вариант? ;)
https://rutube.ru/video/bac8a323d28909d96a817d2672a36f1d/
CodeMaster
02.12.2025, 09:21
А как вам такой вариант?
Тоже вариант, но Titus делает полноценный реверс AY-3-8910 для CPLD.
Занялся тут написанием прошивки для CPLD и похоже уже забыл что там хотели сделать.
И с целью восстановления так сказать памяти решил сначала изобразить карту на дискретах - https://disk.yandex.ru/i/KEiMpxT2v-9dwg
В дискретном варианте на порт 11h (страниц ОЗУ) идут сигналы буферизированной шины данных. В CPLD же будут идти сигналы шины данных с процессора.
Управление сигналами для работы с памятью и портами получились мудреными. Я исходил из такой логики.
Обращаться к портам можно только в диапазоне 00...BFh, все что выше это обращение как бы к памяти. Анализируются два старших бита адреса А14 и А15. Почему взял так, просто процессор дублирует адрес порта, который находится в младшем байте, в старший байт. Таким образом при обращении к порту C0h, адрес на шине будет C0C0h, если к обратиться к порту FEh, то адрес будет FEFEh.
Далее когда идет обращение к памяти дополнительного ОЗУ, а это адреса C000...FFFFh, то обращение к портам С0...FFh будут всеравно перенаправляться на системную плату. Таким образом, даже находясь в дополнительном ОЗУ можно будет достучаться до клавы.
Просьба взглянуть свежим так сказать взглядом сию схему и если что заметите не так в логике, просьба ответить.
CityAceE
03.12.2025, 15:25
Далее когда идет обращение к памяти дополнительного ОЗУ, а это адреса C000...FFFFh, то обращение к портам С0...FFh будут всеравно перенаправляться на системную плату. Таким образом, даже находясь в дополнительном ОЗУ можно будет достучаться до клавы.
О! Вот это интересная особенность! Отличная находка!
Просьба взглянуть свежим так сказать взглядом сию схему и если что заметите не так в логике, просьба ответить.
Надеюсь, что кто-нибудь, кто понимает, всё таки посмотрит и ответит.
CityAceE
09.12.2025, 10:40
Mick, как обстановка? Есть ли подвижки? Или энтузиазм совсем иссяк?
Предполагаю, что жизнь отравляет отсутствие быстрой загрузки в Специалист. Тебе бы, конечно, SD подключить, чтобы отлаживать всё удобно стало... Я вот отлаживаю протокол обмена с Arduino и даже с SD это напоминает геморрой, а что уж говорить про магнитофон.
Serg6845
09.12.2025, 12:05
Я вот отлаживаю протокол обмена с Arduino и даже с SD это напоминает геморрой, а что уж говорить про магнитофон.
эт точно... поэтому в свое время я приделал COM порт и написал xmodem - для отладки гораздо удобнее...
CityAceE
09.12.2025, 15:02
я приделал COM порт и написал xmodem - для отладки гораздо удобнее...
Прелесть такого подхода я тоже успел вкусить на FPGA Специалисте. Тоже организовали там этот протокол и программу поместили в ПЗУ. Стало очень удобно отправлять туда файлы прямо с компа. Подумываю вот тоже что-то подобное сделать на коленке для Сябра и Лика.
Тоже вариант, но Titus делает полноценный реверс AY-3-8910 для CPLD.
Не для CPLD.
Я уже сделал реверс и выложил его в виде синхронной схемы, которая вполне годится для перевода в FPGA.
Но делал это не для реализации AY в FPGA, а скорее для точного понимания работы AY, и для потактовой реализации в эмуляторе, чтобы точно знать, что AY-звучит 1:1 как оригинал во всех режимах и проявлениях.
@Mick, как обстановка? Есть ли подвижки? Или энтузиазм совсем иссяк?
Предполагаю, что жизнь отравляет отсутствие быстрой загрузки в Специалист. Тебе бы, конечно, SD подключить, чтобы отлаживать всё удобно стало... Я вот отлаживаю протокол обмена с Arduino и даже с SD это напоминает геморрой, а что уж говорить про магнитофон.
По сути ты уже ответил на свой вопрос. Прошивку как бы нацарапал, а вот как быстро это проверить. Пока только майфун есть в качестве ввода. Еще откопал плату расширения для Экспресса, там вроде есть SD. Но ее еще надо спаять. Вообще, я хочу все таки до Нового Года все таки получить рабочий вариант.
CityAceE
09.12.2025, 20:00
Очень надеюсь, что всё у тебя получится! И если есть SD-интерфейс, то конечно стоит начать с его сборки и подключения.
Очень надеюсь, что всё у тебя получится! И если есть SD-интерфейс, то конечно стоит начать с его сборки и подключения.
Пока детали для SD интерфейса не пришли, то пока приспособил старый ноутбук в качестве магнитофона. Хорошо, что Станислав сделал проги, которые генерит кроме rks файла еще и wav. Очень пригодились. Пока решил проверить вообще загружается или нет с магнитофона что нибудь. Упростил программу с бегущей строкой - убрал пока прерывания, только в цикле. Бегущую строку на реале увидел. Теперь буду ставить платку с AY и пока добиваться буду чтобы играла еще и музыка. А потом уже попробую с прерываниями.
https://i.ibb.co/NdygrhKV/DSCN2905.jpg (https://ibb.co/NdygrhKV)
https://i.ibb.co/mVp7y1Gj/DSCN2906.jpg (https://ibb.co/mVp7y1Gj)
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot