А что мешает развить в следующих ревизиях? И прерывания какие угодно и спектрум не занят только отправкой данных на звуковуху.
Вид для печати
Никто не мешает дальше развивать. Но вопрос сейчас стоит не в развитии, а о том как сварганить прерывание. Выход прерывания есть и на этой карте и она может генерить как само прерывание, так и вектор отличный от FF. Как мне этот вектор описать в программе. Иными словами, тупо нужен пример кода формирователя такого прерывания.
Ты на пальцах наглядно объясни.
Вот есть допустим два прерывания, одно выдает FFh на шину (от видеоконтроллера), а пользовательское устанавливает на шине данных F0h, а в регистре I при этом будет 60h. Как будет выглядеть процедура установки обработчика.
Меня вот именно это интересует. Кто может показать наглядно?
Можно даже не заводить отдельный вектор - у OPL есть два таймера с битами состояния, а значит их можно прочитать в обработчике и проверить: OPL ли это прерывания прислал? Они на MSX так ведь и проверяют:
Но вот у VSYNC прерывания у Speccy не такого бита, а главное он широкий (по крайней мере на некоторых клонах), при том, что z80 принимает прерывание по срезу сигнала, это кадровый гасящий возможно будет гадить и прерывание от OPL будет пропущено. Если был бы контроллер прерываний или хотя бы они по уровню обрабатывались, а не импульсом... Беда в общем, остаётся надеяться, что такое редко будет случаться и на следующем VSYNС подхватим потерянное прерывание или в паузе придёт очередное от OPL (оопс, а подтверждение он получил?) И надеяться, что никто это не услышит.Код:opl4_int_han:
in a,(0C4H) ; Put this shit in the RS232 area
rla ; this is to prevent 50 or 60 CALLFs
ret nc ; to the replayer
rst 030h
Другой вариант - задействовать под прерывание другой вход процессора, NMI...
P.S. Сколько себя помню в IM2 режиме никто не надеялся, что с шины придёт именно 0xFF, всегда лепили таблички в 257 одинаковых байт.
---------- Post added at 21:06 ---------- Previous post was at 20:29 ----------
Я чего-то не понял: криокамера или таки музыка от Sage Dreamcast вещь доступная?
Микросхема SEGA 315-6232 (QFP -100) - 80,00 руб.
Микросхема Stereo DAC PCM1725U - 50,00 руб.
80 рублей, Карл...
Ну да странный какой-то G2 интерфейс 16-ти битный, загрузка ARM7DI через него, но это же кошерный Ямаховский чипец "Yamaha Super Intelligent Sound Processor" AICA, умеющий MIDI XG, поддерживающий до 8MB SDRAM, имеющий встроенный эффект процессор... В MAME для аркадных автоматов давным-давно научились эмулировать.
Ты не до конца написал тот обработчик
Код:opl4_int_han:
in a,(0C4H) ; Put this shit in the RS232 area
rla ; this is to prevent 50 or 60 CALLFs
ret nc ; to the replayer
rst 030h
Page_nmb: db 0
dw play_int
ret
Код:play_int:
di
ld a,4
out (0C4H),a
opl4_wait ; wait if Turbo-R
ld a,128+1
out (0C5H),a ; reset opl4 IRQ
.....
хреновасто он там эмулируется ;), лучше вот этим http://www.foobar2000.org/components/view/foo_input_ht
его слегка погнули копипастой не верного кода из МАМЕ, но это лучшее что пока есть
музычку можно взять там - http://dsf.joshw.info/ (дримкаст/наоми) или там http://ssf.joshw.info/ (сатурн/ств)
ps: жирные архивы не имеет смысла качать, там потоковое аудио в каком-нибудь .adx, а в мелких - более интересные секвенсорные музоны.
из хороших примеров - http://dsf.joshw.info/s/Skies%20of%2...orks)(Sega).7z
Чуть посложнее, чем описано по треду далее.
Во первых, каждому источнику прерывания, включая кадровое, соответствовал отдельный бит в векторе прерывания. Это нужно, чтобы можно было обработать прерывание сразу из нескольких источников. Т.е. концу цикла ДМА соответствовал бит 7, первому таймеру бит 6, второму - бит 5, кадровому - инверсный бит 4. Соответственно, в таблице прерываний расставлялось 16 переходов на обработчики. На вектор #6F ставился обработчик конца ДМА, на вектор #BF - первый таймер, на #2F - конец ДМА и первый таймер, и т.д. Бит кадрового прерывания был инверсным, соответственно кадровое прерывание - вектор #FF, кадровое и конец ДМА - #7F и т.д.
Во вторых, запрос на все прерывания, кроме кадрового, не снимался до подтверждения, можно было в программе по ходу пользоваться DI и EI, это не вело к пропуску прерывания.
Вектор выставлялся на шину по совместному сигналу /IORQ и /M1, этим же сигналом сбрасывались триггеры запроса прерывания.
Вот как-то так было, если склероз не подводит.
https://www.youtube.com/watch?v=ZHuo4O9NJoI
Интересно, а эта музыка записывалась с настоящего SID? Автор пишет про реверберацию, панирование и задержки как вроде бы сторонние эффекты. Что скажете, специалисты? :)