Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Эмуляторы (http://zx-pk.ru/forumdisplay.php?f=8)
-   -   вопрос к SMT по исходникам анрила (http://zx-pk.ru/showthread.php?t=2277)

boo_boo 19th January 2006 06:58

вопрос к SMT по исходникам анрила
 
hi!
пытаюсь портировать куски анрила на линух, начал с ВГ93... скомпилировать удалось, заставить работать пока нет.
думаю на задержки, все остальное вроде весчь в себе, поэтому вопрос:
в файле wd93cmd.cpp дважды встречается конструкция
Code:

comp.t_states + cpu.t
это что такое?
пытался всякую муть сюда пихать (счетчик циклов CPU, счетчик кадров и тп), в некоторых случаях при попытке чтения диска получалось disc error, в некоторых -- ошибка чтения... :(

SMT 19th January 2006 09:29

Quote:

это что такое?
та же самая вроде весчь в себе - это "текущее время" эмулируемого спектрума - число тактов от старта

вообще, хорошо, что уже есть ощутимые результаты

GriV 19th January 2006 10:04

Вопрос такой
 
исходя из каких соображений идёт эмуляция Beeper и SPK?

SMT 19th January 2006 10:06

глупый вопрос

boo_boo 19th January 2006 15:19

Quote:

Originally Posted by SMT
это "текущее время" эмулируемого спектрума - число тактов от старта

ооо, спасибо! теперь при включенных задержках время опроса дисковода похоже на реальное...
все равно disc error, впрочем...
хм... после записи в регистр команд команды чтения сектора, и при последующих попытках что-то взять из регистра данных, младший бит регистра состояния (занято) перманентно установлен... :confused:
будем думать :)

SMT 19th January 2006 18:08

ты взял глюкалку или фуз?

GriV 19th January 2006 18:26

Quote:

Originally Posted by SMT
глупый вопрос

Вообще ничего не вижу глупого, может всё таки ответишь?

Знахарь 19th January 2006 18:35

SMT - профессионал! Сразу видно, ибо "только проф. программеру проще объяснить, почему нельзя написать что-то, чем написать" :) кажется так было написано :)

Boo boo - молодец! Давай эмуль под линуха... Думаю там очередь желающих. Я, кстати, тоже не против.

boo_boo 19th January 2006 19:24

Quote:

Originally Posted by SMT
ты взял глюкалку или фуз?

глюкалку... весь день долблюсь, без толку. впрочем, я довольно приблизительное представление имею о работе ВГ, так что оно не удивительно...

вот лог обращения к ВГ -- может, по нему видно, на каком этапе пошли глюки?
Code:

file /home/boo/!ZX/CM2DEMO.trd loaded in drive A

Захожу в TRDOS:

 WD OUT(0xff,0x00)    status = 10000000
 WD OUT(0xff,0xff)    status =      100
 WD OUT(0x1f,0xd0)    status = 10000100

 32 раза: {
 WD OUT(0xff,0xf7)    status = 10000100
 WD OUT(0xff,0xff)    status = 10000100
 }

Делаю CAT:

 WD OUT(0xff,0x3c)    status = 10000100
 WD OUT(0x1f,0x08)    status =      101 /*восстановление*/
 WD IN(0xff)=0xbf    status =      100 /*INTRQ*/
 WD IN(0x1f)=0x24    status =  100100 /*состояние*/

 2408 раз {
 WD IN(0x1f)=0x26    status =  100110 /*дергаем состояние*/
 }

 WD OUT(0x1f,0x08)    status =  100111 /*восстановление*/
 WD IN(0xff)=0xbf    status =  100100  /*INTRQ*/
 WD OUT(0x7f,0x20)    status =  100100
 WD OUT(0x1f,0x18)    status =  100111 /*поиск дорожки*/
 WD IN(0xff)=0xbf    status =  100100 /*INTRQ*/
 WD OUT(0x7f,0x01)    status =  100000
 WD OUT(0x1f,0x18)    status =  100011 /*поиск дорожки*/
 WD IN(0xff)=0xbf    status =  100000 /*INTRQ*/
 WD IN(0x1f)=0x22    status =  100010
 WD OUT(0x7f,0x00)    status =  100000
 WD OUT(0x1f,0x18)    status =  100011 /*поиск дорожки*/
 WD IN(0xff)=0xbf    status =  100000 /*INTRQ*/
 WD IN(0x1f)=0x26    status =  100110
 WD OUT(0xff,0x3c)    status =  100110
 WD IN(0x1f)=0x26    status =  100110
 WD IN(0x3f)=0x00    status =  100110
 WD OUT(0x7f,0x00)    status =  100100
 WD OUT(0x1f,0x18)    status =  100111 /*поиск дорожки*/
 WD IN(0xff)=0xbf    status =  100100 /*INTRQ*/
 WD OUT(0x1f,0xc0)    status =  100111 /*чтение адреса*/
 WD IN(0xff)=0x3f    status =        1
 WD IN(0xff)=0x7f    status =      11 /*DRQ*/
 WD IN(0xff)=0x7f    status =      11 /*DRQ*/
 WD IN(0x7f)=0x00    status =        1
 WD IN(0xff)=0x7f    status =      11 /*DRQ*/
 WD IN(0x7f)=0x00    status =        1
 WD IN(0xff)=0x7f    status =      11 /*DRQ*/
 WD IN(0x7f)=0x06    status =        1
 WD IN(0xff)=0x3f    status =        1
 WD IN(0xff)=0x7f    status =      11 /*DRQ*/
 WD IN(0x7f)=0x01    status =        1
 WD IN(0xff)=0x7f    status =      11 /*DRQ*/
 WD IN(0x7f)=0x63    status =        1
 WD IN(0xff)=0x3f    status =        1
 WD IN(0xff)=0x7f    status =      11 /*DRQ*/
 WD IN(0x7f)=0x9b    status =        1
 WD IN(0xff)=0xbf    status =        0 /*INTRQ*/
 WD OUT(0x3f,0x00)    status =        0 /*уст. 0 дорожку*/
 WD OUT(0xff,0x3c)    status =        0
 WD IN(0x1f)=0x00    status =        0
 WD IN(0x3f)=0x00    status =        0
 WD OUT(0x7f,0x00)    status =        0
 WD OUT(0x1f,0x18)    status =        1 /*поиск дорожки*/
 WD IN(0xff)=0xbf    status =  100100 /*INTRQ*/
 WD OUT(0x1f,0xc0)    status =  100101 /*чтение адреса*/
 WD IN(0xff)=0x3f    status =        1
 WD IN(0xff)=0x7f    status =      11 /*DRQ*/
 WD IN(0xff)=0x7f    status =      11 /*DRQ*/
 WD IN(0x7f)=0x00    status =        1 /*данные*/
 WD IN(0xff)=0x7f    status =      11 /*DRQ*/
 WD IN(0x7f)=0x00    status =        1 /*данные*/
 WD IN(0xff)=0x7f    status =      11 /*DRQ*/
 WD IN(0x7f)=0x09    status =        1 /*данные*/
 WD IN(0xff)=0x3f    status =        1
 WD IN(0xff)=0x7f    status =      11 /*DRQ*/
 WD IN(0x7f)=0x01    status =        1 /*данные*/
 WD IN(0xff)=0x7f    status =      11 /*DRQ*/
 WD IN(0x7f)=0x73    status =        1 /*данные*/
 WD IN(0xff)=0x3f    status =        1
 WD IN(0xff)=0x7f    status =      11 /*DRQ*/
 WD IN(0x7f)=0xa5    status =        1 /*данные*/
 WD IN(0xff)=0xbf    status =        0 /*INTRQ -- прочитали адрес*/
 WD OUT(0x3f,0x00)    status =        0 /*уст. 0 дорожку*/
 WD OUT(0xff,0x3c)    status =        0
 WD IN(0x3f)=0x00    status =        0
 WD OUT(0x7f,0x00)    status =        0
 WD IN(0x3f)=0x00    status =        0
 WD OUT(0x1f,0x18)    status =        1 /*поиск дорожки*/
 WD IN(0xff)=0xbf    status =  100100 /*INTRQ*/
 WD OUT(0x3f,0x00)    status =  100100 /*уст. 0 дорожку*/
 WD OUT(0x5f,0x09)    status =  100100 /*уст. 9 сектор*/
 WD OUT(0x1f,0x80)    status =  100101 /*чтение сектора*/
 WD IN(0xff)=0x3f    status =        1

 30 раз: {
 WD IN(0xff)=0x7f    status =      11 /*DRQ*/
 }

 около 100 примерно таких кусков: {
 WD IN(0x7f)=0x00    status =        1 /*данные*/
 WD IN(0xff)=0x7f    status =      11 /*DRQ*/
 WD IN(0x7f)=0x00    status =        1 /*данные*/
 WD IN(0xff)=0x7f    status =      11 /*DRQ*/
 WD IN(0x7f)=0x00    status =        1 /*данные*/
 WD IN(0xff)=0x3f    status =        1
 WD IN(0xff)=0x7f    status =      11 /*DRQ*/
 WD IN(0x7f)=0x00    status =        1 /*данные*/
 WD IN(0xff)=0x7f    status =      11 /*DRQ*/
 WD IN(0x7f)=0x00    status =        1 /*данные*/
 WD IN(0xff)=0x7f    status =      11 /*DRQ*/
 WD IN(0x7f)=0x00    status =        1 /*данные*/
 WD IN(0xff)=0x7f    status =      11 /*DRQ*/
 WD IN(0x7f)=0x00    status =        1 /*данные*/
 WD IN(0xff)=0x7f    status =      11 /*DRQ*/
 WD IN(0x7f)=0x00    status =        1 /*данные*/
 WD IN(0xff)=0x3f    status =        1
 WD IN(0xff)=0x7f    status =      11 /*DRQ*/
 }

 WD IN(0xff)=0xbf    status =        0 /*INTRQ -- считали 9й сектор*/
 WD IN(0x1f)=0x00    status =        0 /*состояние -- типа все ок*/
 WD OUT(0xff,0x37)    status =        0 /

 15 раз: {
 WD OUT(0xff,0x3f)    status = 10000000
 WD OUT(0xff,0x37)    status = 10000000
 }

 WD OUT(0xff,0x3f)    status = 10000000
 WD OUT(0xff,0x34)    status = 10000000

 15 раз: {
 WD OUT(0xff,0x3c)    status =        0
 WD OUT(0xff,0x34)    status =        0
 }

 WD OUT(0xff,0x3c)    status =        0

Получаю Disc Error

UPD: хммм, выглядит так, будто вместо 9го сектора считалось хрен знает что, по случаю чего ошибка. но фигли тогда сошлась контрольная сумма? :confused:

SMT 19th January 2006 19:37

GriV, слишком общий вопрос. всё равно, что рассказать "из каких соображений" телевизор показывает картинку. развёрнутый ответ сейчас не могу дать

boo, если догадаюсь в чём дело, напишу


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

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