Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Unsorted (http://zx-pk.ru/forumdisplay.php?f=13)
-   -   ZX Spectrum: аппаратная реализация на восьми микросхемах (http://zx-pk.ru/showthread.php?t=13747)

balu_dark 2nd December 2011 20:56

Ну в Радио имелось ввиду скорее всего другое - интерпретатор бэйсика( родной РОМ короче говоря) использует только ИМ1 а в игрушках очень часто юзают ИМ2 потому как на него вешают например обработку клавиатуры или проигрывание музыки на сопроцессоре. Тоесть любые переодические операции для которых не нужно максимальное быстродействие и не занимающие много тактов.

у ИМ2 адрес таблицы векторов грузится в регистр I .
если на пальцах - при прерывании читается вектор прерывания с шины данных ( у большинства наших клонов там будет FF) младший бит вектора обнуляется автоматически( тоесть всегда равен нулю). и адрес куда прыгнуть обработчику чтобы взять вектор вычисляется Addr= (Register I * 256) + Vector from DATA bus. Вектор всегда только четное число.
Начиная с (Register I * 256) идет таблица из 128и двухбайных адресов обработчика.
чаще всего вся область забита или одним и тем же адресом или вообще используется только последний вектор. эти 2 байта кущего вектора - грузятся в регистр PC. или как он там на спеке назывался. и управление переходит по этому адресу.
Выход из обработчика прерывания стандартный - RETI.

Цитата из книжки :"Для перехода в режим ISR в режиме 2 требуется 19 тактовых периодов: 7 периодов для ввода 8ми разрядного вектора от прерывающего устройства,следующие 6 - для сохранения на стеке текущего состояния PC (адреса возврата) и еще 6 - для считывания стартового адреса ISR."

USERHOME 2nd December 2011 21:39

IM2
 
IM2 (IMM2 неправильно, СЭР)

Картинка по Z-80


Может пригодиться ВАМ Lisitsin

---------- Post added at 20:39 ---------- Previous post was at 20:20 ----------

2.Картинка по Z-80 IM2

3.Картинка по Z-80 IM2

И ещё по IM2 картинки

Lisitsin 2nd December 2011 21:42

Персональная благодарность
balu_dark, !!!
Есть только один вопросец: какие биты регистра I идут в ход при обработке imm1? Насколько я понимаю, только 7? То есть старший равен 0? Спасибо !!!

USERHOME 2nd December 2011 21:49

И ещё... Младший байт читается с ШД (шина данных) , а старший из регистра I
Младший байт всегда (8 резисторов подтягивающих ШД к +5 вольт) должен читаться 255 #FF %11111111
Это всё вцелом составляет вектор прерывания

---------- Post added at 20:49 ---------- Previous post was at 20:47 ----------

При IM 1 адрес физически фиксирован в самом Z-80 и независимо от I состовляет 56
#38 (IM0 тоже, как и IM1 режим)

Lisitsin 2nd December 2011 23:21

Quote:

Originally Posted by Lisitsin (Post 442054)
Персональная благодарность
balu_dark, !!!
Есть только один вопросец: какие биты регистра I идут в ход при обработке imm1? Насколько я понимаю, только 7? То есть старший равен 0? Спасибо !!!

Прошу прощения, разобрался. Перепутал регистр I с регистром R.

---------- Post added at 21:21 ---------- Previous post was at 19:58 ----------

Сделал, но что-то не работает. ELITE при старте, не нарисовав крутящийся корабль, уходит в безвозвратный сбой, R-TYPE виснет в заставке. ROBOCOP зависает при загрузке с чёрным экраном.

Lisitsin 2nd December 2011 23:50

1 Attachment(s)
вот как собствнно дклаю обработку прерывания: (вложение)

Lisitsin 2nd December 2011 23:58

Quote:

Originally Posted by zebest (Post 442091)
а если все же не на играх отлаживать, а на чем нить попроще, постабильнее?
в приложении маленький тест, под 48 режим как раз, и как раз IM2 точно использует. Что показывает?

На середине загрузки даёт серый экран и при пробеле корректно отдаётся бейсику )))

Lisitsin 3rd December 2011 00:08

Quote:

Originally Posted by Lisitsin (Post 442094)
На середине загрузки даёт серый экран и при пробеле корректно отдаётся бейсику )))

Так вроде говорят младший в ноль аппаратно сбрасывается для корректного прочтения двухбайтного адреса. Типа из нулевого адреса младший байт вектора читается, а из первого - старший, я так понял ...

psb 3rd December 2011 00:13

Quote:

Originally Posted by balu_dark (Post 442038)
младший бит вектора обнуляется автоматически( тоесть всегда равен нулю).

Quote:

Originally Posted by balu_dark (Post 442038)
Вектор всегда только четное число.

откуда дровишки? это нифига не так. первый раз прочитал, удивился, почти поверил. никакой бит не обнуляется. если в регистре I число #BB, а на шине #FF, то адрес возьмется из #BBFF и #BC00. и именно поэтому правильная табличка - 257 байт длиной.

---------- Post added at 01:13 ---------- Previous post was at 01:12 ----------

Quote:

Originally Posted by Lisitsin (Post 442098)
Так вроде говорят младший в ноль аппаратно сбрасывается

врут :)

goodboy 3rd December 2011 00:20

Quote:

Originally Posted by zebest (Post 442104)
с шины данных корректно должно прочитаться #FF. в тесте команда типаа
Code:

                LD A,#3B
                LD I,A
                IM 2

вот и посчитай, куда будет указывать вектор в программе, и где - у тебя.

в 48ом ПЗУ #FF по адресу #3BFF и #3C00.

Lisitsin 3rd December 2011 00:32

Ну вот эт другое дело .... Щас сделаю )))

---------- Post added at 22:31 ---------- Previous post was at 22:23 ----------

Пробовал с FF - то же самое.

Lisitsin 3rd December 2011 00:43

Quote:

Originally Posted by zebest (Post 442116)
ну запусти тест в любом эмуле с трассировкой в пошаговом режиме, и посмотри разницу со своей трассировкой. Где то же они будут расходиться во взглядах. Это сложно?


у меня трассировка медленная - я втыкаюсь в клавиатурный порт и пишусь в текстовом редакторе. Могу запуститься по известному критерию и вывести содержимое нужных регистров, но не всю трассировку вывести. А как можно делать трассировкуиз эмуляторов?
Есть ещё один момент: я не инициализирую I при включении питания и сбросе. Это плохо?

Lisitsin 3rd December 2011 01:10

Quote:

Originally Posted by zebest (Post 442121)
ну в том же спектакуляторе. к примеру. выходишь в дебАгер и шагаешь. в EmuZWin тоже нравится отладчик..
программа с #8000 адреса грузится и оттеда же работает..
в Unreal-e а5 же..

А как, к примеру, в EmuZWin нужный текст трейсинга получить, чтоб сравниваться автоматически?

balu_dark 3rd December 2011 01:17

Quote:

Originally Posted by psb (Post 442101)
откуда дровишки? это нифига не так. первый раз прочитал, удивился, почти поверил. никакой бит не обнуляется. если в регистре I число #BB, а на шине #FF, то адрес возьмется из #BBFF и #BC00. и именно поэтому правильная табличка - 257 байт длиной.[COLOR="Silver"]

Дровишки из лесу :) оно так для контроллера прерываний :)
а вот для нашего случая адрес берут из FF и (FF+1)
Сорри что немного ввел в заблуждение.
Короче не вдаваясь в лишние подробности для примера :
LD A,#C0
LD I,A
IM2

будет исполнятся примерно так :
PUSH PC
LD PC,(#C0FF) ( 256*RAM[#C100]+RAM[#C0FF])

balu_dark 3rd December 2011 02:07

Code:

IM_2:                                LDI        ZL,0XFF                ;Здесь обрабатывается IM2. В регистр косвенной адресации заношу:
                                IN                ZH,I                ;  0xFE – в младший регистр, I – в старший регистр.
                                CPI                ZH,0X40

А так если сделать?
И посмотреть бы код LOAD_PC_Z[12].

Lisitsin 3rd December 2011 02:27

1 Attachment(s)
Test-48 дает такой трейсинг :

Lisitsin 3rd December 2011 02:30

Quote:

Originally Posted by balu_dark (Post 442154)
Code:

IM_2:                                LDI        ZL,0XFF                ;Здесь обрабатывается IM2. В регистр косвенной адресации заношу:
                                IN                ZH,I                ;  0xFE – в младший регистр, I – в старший регистр.
                                CPI                ZH,0X40

А так если сделать?
И посмотреть бы код LOAD_PC_Z[12].

Так уже и fe и ff делал - примерно одно и то же.

USERHOME 3rd December 2011 02:45

IM2
 
5 Attachment(s)
http://zx.pk.ru/attachment.php?attac...1&d=1322861299

http://zx.pk.ru/attachment.php?attac...1&d=1322861454

http://zx.pk.ru/attachment.php?attac...1&d=1322861467

http://zx.pk.ru/attachment.php?attac...1&d=1322862186

А вот ниже самое интересное:v2_dizzy_roll:

http://zx.pk.ru/attachment.php?attac...1&d=1322862240

USERHOME 3rd December 2011 02:47

IM2
 
1 Attachment(s)
http://zx.pk.ru/attachment.php?attac...1&d=1322862422

Lisitsin 3rd December 2011 03:08

Ничего не понял. В одном месте читаю:
Команда RET I.

Код - ED 4D. Эта команда аналогична команде RET (возврат после вызова подпрограммы), но выполняет двойную функцию:

· возврат из подпрограммы, обслуживающей маскируемое прерывание;

· разрешение маскированного прерывания (ведь во время работы обслуживающей программы оно запрещалось, иначе новое прерывание могло бы прервать обработку прерывания и т.д.).

В другом: пользователь должен сам разрешать прерывания через EI, так как RETI этого не делает. Так как же на самом деле?

USERHOME 3rd December 2011 03:15

EI - всегда делает программист
RETI - Специальная комманда для серии из Z-80 логики (для контроллера прерываний, которого НЕТ в ZX-Specrume и совместимых компьютеров)

Можно писать в конце обработчика прерываний (для ZX)
EI
RET

и/или

EI
RETI

Одно и тоже!

---------- Post added at 02:15 ---------- Previous post was at 02:14 ----------

Просто по (это IMHO) команде RETI легко программисту определить конец обработчика прерываний (типа "этикет хорошего тона")

USERHOME 3rd December 2011 03:18

EI - всегда САМИ ручками пишем в любом случае

---------- Post added at 02:18 ---------- Previous post was at 02:18 ----------

перед RET или RETI

jerri 3rd December 2011 17:34

Quote:

Originally Posted by Lisitsin (Post 442002)
Эт можно ...
Искажённые символы на видео:
http://dl.dropbox.com/u/12408899/CVB...ROBOCOP%29.zip
Версия ELITE во вложении

значит так
символы N O находятся по адресу #5c00 и #5c08 соответственно
при обработке im1 там портятся данные

к тому же у тебя портятся данные во многих программах
там где используется IY

а правильно прерывания обрабатываются так

по адресу регистрI*256+#ff берется адрес обработчика

если I=#ff то данные берутся из #ffff и #0000

статус прерываний сохраняется гдето
и по команде RETI восстанавливается

так было в мануале, но у меня оно не работало

Lisitsin 3rd December 2011 18:56

Короче, пока не работает, разбираюсь ...

goodboy 3rd December 2011 19:25

если в робокопе портятся буквы то у тебя получается продолжает (не запрещается) работать подпрограмма по im1 - она-то и портит данные (в случае с робокопом - шрифт)

jerri 3rd December 2011 21:44

goodboy, да просто вместо им2 работает им1


Lisitsin, попробуй запустить игру Zynaps
она у тебя не должна заработать сейчас

Lisitsin 3rd December 2011 21:54

Зашуршал )))
http://dl.dropbox.com/u/12408899/AVR...48%20GAMES.ZIP

osa 3rd December 2011 22:05

это что вы реализовали? корректное im1?

Lisitsin 3rd December 2011 22:08

Короче сделал корректно im2. Сначала вектор читал сразу два байта, без проверок озу/пзу, и оно глючно было. Сделал перед чтением каждого байта проверку - и ему понравилось )))

Lisitsin 3rd December 2011 22:12

1 Attachment(s)
Сборщикам:

osa 3rd December 2011 22:18

не могу не спросить планы на цвет, звук(ay на avr уже реализовали недавно буквально), массовое производство

Lisitsin 3rd December 2011 22:35

Quote:

Originally Posted by osa (Post 442367)
не могу не спросить планы на цвет, звук(ay на avr уже реализовали недавно буквально), массовое производство

Звук есть, просто щас провод не подцепил. Насчёт цвета: бьюсь с PAL-кодером на CXA1645. Не силён я в этой области. Но теперь-то займусь более подробно. С AY я вообще никогда не работал. Буду учиться, но время на всё не хватает, так что пока с цветом буду копаться. А сейчас с цветом вот какие дела:
http://dl.dropbox.com/u/12408899/CVB...PE%20COLOR.zip

newart 3rd December 2011 23:23

Quote:

Originally Posted by osa (Post 442367)
на цвет, звук

Всё это увы бесполезно без дисковода.

Lisitsin 3rd December 2011 23:27

Quote:

Originally Posted by newart (Post 442418)
Всё это увы бесполезно без дисковода.

Были времена, когда и дисководов не было ...

osa 3rd December 2011 23:46

и дисковод прикрутится постепенно. для начала надо базовый блок сделать, потом 128, потом tr-dos...

Lisitsin 4th December 2011 00:09

Запустился тест floatspy:
http://dl.dropbox.com/u/12408899/CVB...20floatspy.zip
Кто-нибудь может объяснить что это значит?

_Ratibor_ 4th December 2011 00:29

Это тест так называемого порта FF, точнее порта атрибутов.
Скорее даже местоположение инта тестируется, но с помощью порта FF.
В первой строке цветные квадратики рисуются с атрибутами от 40h до 5Fh, а потом считывается состояние порта FF и считается количество тактов после инта и до вывода этих атрибутов в первой строке.
И если в компе реализован порт FF, то зная количество тактов от инта, до вывода первого атрибута 64 (40h), можно проверить на месте ли находится сигнал инт. Если нет, то можео листать кнопками Q и A и найти через сколько тактов выводятся эти атрибуты.
В общем вот в этой ветке все расписано по тестам.

Lisitsin 4th December 2011 11:48

Люди добрые, подскажите, а то я не очень в игрушках ориентируюсь: какие погонять в качестве теста? И какие есть ещё тестовые программы для эмуляторов кроме z80tests, zexall, floatspy?
Спасибо !!!

_Ratibor_ 4th December 2011 12:06

Quote:

Originally Posted by Lisitsin (Post 442531)
Люди добрые, подскажите, а то я не очень в игрушках ориентируюсь: какие погонять в качестве теста? И какие есть ещё тестовые программы для эмуляторов кроме z80tests, zexall, floatspy?
Спасибо !!!

Я же дал ссылку, там обсуждался весь необходимый минимум программ и игр для тестов.
http://zx.pk.ru/showpost.php?p=421104&postcount=167
http://zx.pk.ru/showthread.php?p=283577#post283577
http://www.worldofspectrum.org/faq/r...kreference.htm

Lisitsin 4th December 2011 14:16

Со звуком
http://dl.dropbox.com/u/12408899/CVB...OLOR_SOUND.zip

Тесты сейчас погоняю ...

---------- Post added at 12:16 ---------- Previous post was at 11:21 ----------

Погонял:
http://dl.dropbox.com/u/12408899/tests.zip


All times are GMT +4. The time now is 16:59.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.