RE: G1-ATA Devices - SWAT - 20.03.2014 21:22
Да там.
RE: G1-ATA Devices - cybdyn - 20.03.2014 22:27
из того что у меNя под вопросом в коде.
1- не ясно почему ждем BUSY а не drq.
/* Wait for the device to signal it is ready. */
g1_ata_wait_nbsy(); <--- ???
/* Send the data! */
for(j = 0; j < 256; ++j) {
OUT16(G1_ATA_DATA, *buf++);
в начале может оно и надо ждать busy, но потом смотрим drq, это как чтение -только тут мы вписываем в рег данных ,
т.е бит drq обозначает готовность устройства к обмену ( чтения или записи..)
но это B идеале если команда правильная и с параметрами ок. а так вообще то после того как bsy упал, надо смотреть статусник и ещe какойто рег (1ый после рега данных, или 2ой ) - тем самым смотрим нет ли ошибки и готовность устройства к обмену., точнее к приёму данных
а тут както в лоб, bsy упал - и тут же пишим данные в устройство...))))
2- не заметил проверку окончания операции, обычно получают прерывание об окнчании операции , по котороmy считывают статус. причем при чтении статусного рега сбрасывается прерывание (подтверждаетя) , по альт статусу онo не сбрасывается, но тоже выдаёт статус.
если в случае работы не попрерыванию, не знаю, наверно следим за bsy и смотри статусный рег. нет ли ошибки , и опятьже 1ый (или 2ой) что операция complete
RE: G1-ATA Devices - SWAT - 20.03.2014 22:46
(20.03.2014 22:27)cybdyn писал(а): если в случае работы не попрерыванию, не знаю, наверно следим за bsy и смотри статусный рег. нет ли ошибки , и опяже 1ый (или 2ой) что операция complete
Да так оно сейчас и есть. Прерывания будут реализованы когда будет DMA я думаю.
RE: G1-ATA Devices - cybdyn - 20.03.2014 22:56
вообщемто и не-пo-прерыванию тоже работаю люди. просто понимаem, что bsy пропал - значит появился какойто статус. далее по контексту если всё good... после вписывания обозначенного количества в рег данных винта, bsy опять встаёт - говоря о том что устройство занято записью... поэтому ждём когда опять упадёт bsy. и смотрим статус.
с ДМА тоже може без прерываний работать...
прерывание даст просто ресурс проца программе, вместо того чтобы ждать бизи и статусы...
RE: G1-ATA Devices - SWAT - 21.03.2014 07:45
(20.03.2014 22:56)cybdyn писал(а): с ДМА тоже може без прерываний работать...
прерывание даст просто ресурс проца программе, вместо того чтобы ждать бизи и статусы...
Ну так в этом то и дело, DMA в принципе служит для разгрузки проца, а если проц будет ждать значение регистра, опрашивая его постоянно, то вся разгрузка на смарку считай. А в PIO режиме в этом особого смысла нету. Отсюда и мое предположение, что будет это реализовано вместе с DMA.
RE: G1-ATA Devices - cybdyn - 21.03.2014 08:30
dma намного быстрее pio, если не сказать что вообще высасывает данные )))
т.е если даже не делать прерывания, dma должно проявить себя)))
RE: G1-ATA Devices - SWAT - 21.03.2014 12:12
(21.03.2014 08:30)cybdyn писал(а): dma намного быстрее pio, если не сказать что вообще высасывает данные )))
т.е если даже не делать прерывания, dma должно проявить себя)))
Не ну это понятно, с DMA в принципе скорости другие. Но все равно нагружать проц. опросом статуса в ожидании DMA как то не правильно.
RE: G1-ATA Devices - Wind - 21.03.2014 21:08
Если ждать статуса от передачи по DMA то смысла в DMA не будет. Только вот Вам наверное придеться повозится с модингом обработчика прерывания стандартного.
RE: G1-ATA Devices - cybdyn - 22.03.2014 10:49
ожидание окончания по ДМА, намного меньше ожидания данных в пио и их последующего вычитывания.
прерываения помогут только если сохраняется структура работы что и с приводом, там видимо внутри сисколов, или через взаимо свзязь с системой, может через события - както регулировался этот процесс. с новыми сисколами может так и не получиться. т.е в итоге придётся ждать какого то признака окончания чтения.
RE: G1-ATA Devices - Wind - 22.03.2014 12:16
Быстрее не быстрее, а смысл в том что без прерываний это пустая трата времени. Лучше оставить PIO тогда уж. А модинг обработчиков не простой, но и не так чтобы слишком уж сложный. От внешних устройств у дрима события весят на 0x5f6904 регистре, этот регистр содержит статусы модема, сетевой карты и т.п. Т.е. модинг не простой да, но задача вполне себе решаемая. Все основные статусы весят на 0x5f6900 т.е. модинг не коснется работы в целом.
RE: G1-ATA Devices - SWAT - 22.03.2014 17:37
Дело в том что фактически по скорости, в PIO режиме мы получили сейчас только Mode 0 (3 MB/s), а Multiword DMA Mode 2 должна выдавать около 16 MB/s, так что разница ощутима, не важно с прерываниями или без.
Но, если заставить работать в PIO Mode 3 или даже 4 (если шина вообще поддерживает), вот тогда смысла не будет без прерываний делать DMA, ибо скорости там такие же получаются.
RE: G1-ATA Devices - cybdyn - 22.03.2014 17:38
есть или нет разницы покажет практика. sd мод работал на малых скоростях и без прерываний. тут скорость может увеличиться в десятки раз. если это будет достаточно программе то и без прерываний можно обойтись.
обработчики и регистры тут не причём. это ясно что они както использоваться будут. в обработчике же надо чтото вызвать или записать в какуто переменную - что данные пришли, или уже считаны по дма.
что такое работа по прервапнию - это пришёл запрос на чтение , мы записали в реги ДМА нужные параметры, потом в реги АТА , и команду на чтение - и выходим из функции. далее - по прерыванию от дма - проц входит в обработчик, видим что данные считаны ..и что дальше???
во вторых не факт что все команды на чтение обязательно работaют асинхронно. может както передаётся параметр, чтобы не выходить из функции чтения пока не считаются данные или не будет ошибки.
либо есть отдельный сискол синхронизации завершения операций от привода.
без понимания как их встроить эти прерывания - приводит к тому что они живут своей жизнью,))) а приложение или ждёт или давно думает что всё прочитано)))
RE: G1-ATA Devices - SWAT - 22.03.2014 20:49
С сисколами проблем в общем то не будет, там все сделано так, чтобы был асинхрон или синхрон по желанию (3 сискола используется в комбинации).
RE: G1-ATA Devices - megavolt85 - 23.03.2014 04:02
SWAT вот вывод запуска OUTPUT:> Console enabled
OUTPUT:> Upload <C:\Users\3D\Desktop\Dreamcast\g1ata-ext2fs.elf>
OUTPUT:> File format is elf32-shl, start address is 0x8c010000
OUTPUT:> Section .text, lma 0x8c010000, size 297152
OUTPUT:> Executing at <0x8c010000>
OUTPUT:> Sending execute command (0x8c010000, console=1)...executing
OUTPUT:> --
OUTPUT:> KallistiOS Git revision abd905c: Ср. февр. 19 13:02:42 NOVT 2014
OUTPUT:> swat@SWAT-PC:/usr/local/dc/kos/kos
OUTPUT:> thd: pre-emption enabled, HZ=100
OUTPUT:> maple: active drivers:
OUTPUT:> Dreameye (Camera): Camera
OUTPUT:> Sound Input Peripheral: Microphone
OUTPUT:> PuruPuru (Vibration) Pack: JumpPack
OUTPUT:> VMU Driver: Clock, LCD, MemoryCard
OUTPUT:> Mouse Driver: Mouse
OUTPUT:> Keyboard Driver: Keyboard
OUTPUT:> Controller Driver: Controller
OUTPUT:> DMA Buffer at ac0c48e0
OUTPUT:> vid_set_mode: 640x480 NTSC
OUTPUT:> dc-load console support enabled
OUTPUT:> maple: attached devices:
OUTPUT:> g1_ata_scan: found device with LBA48: 156299375
OUTPUT:> Listing the contents of /ide:
OUTPUT:> .
OUTPUT:> ..
OUTPUT:> lost+found
OUTPUT:> DS
OUTPUT:> Wrote to file "hello.txt"
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 0 (01000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 1 (01000001)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 2 (01000002)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 3 (20007dfe)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 4 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 5 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 6 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 7 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 8 (01008000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 9 (01008001)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 10 (01008002)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 11 (20007dfe)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 12 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 13 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 14 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 15 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 16 (01010000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 17 (01010001)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 18 (01010002)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 19 (20007dfe)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 20 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 21 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 22 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 23 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 24 (01018000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 25 (01018001)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 26 (01018002)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 27 (20007dfe)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 28 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 29 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 30 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 31 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 32 (01020000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 33 (01020001)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 34 (01020002)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 35 (20007dfe)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 36 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 37 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 38 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 39 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 40 (01028000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 41 (01028001)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 42 (01028002)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 43 (20007dfe)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 44 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 45 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 46 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 47 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 48 (01030000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 49 (01030001)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 50 (01030002)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 51 (20007dfe)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 52 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 53 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 54 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 55 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 56 (01038000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 57 (01038001)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 58 (01038002)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 59 (20007dfe)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 60 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 61 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 62 (00000000)
OUTPUT:> Thread 1/8c01542c freeing block @ 8c10c158
OUTPUT:> post-magic is wrong at index 63 (00000000)
OUTPUT:> DAMAGED BLOCK DURING FREE
OUTPUT:> *** ASSERTION FAILURE ***
OUTPUT:> Assertion "((char*)p) >= min_address" failed at malloc.c:3265 in `do_check_chunk'
OUTPUT:> arch: shutting down kernel
P.S. всё же дело было не в кабеле, вернул адаптер на ILX232D по трёх проводной схеме и перегрузился в винду
RE: G1-ATA Devices - SWAT - 23.03.2014 10:08
О ну хорошо, теперь тебе по удобней будет разработку вести, если сделаешь еще какой то автоматический хотсвап Serial <-> SPI ))
Откуда там такие ошибки конечно валятся не понятно, но это ладно. Записался файл то или нет? Попробуй еще пример с sd так же.
RE: G1-ATA Devices - megavolt85 - 23.03.2014 14:14
Файл не создался
RE: G1-ATA Devices - SWAT - 23.03.2014 17:18
Пробовал отформатировать вторую партицию на SD в EXT2:
Ошибок не выдает, форматирование завершается успешно. Раздел этот монтируется в DS без проблем, но файл записать не получается Даже корневую директорию просто прочитать не получается.
Похоже придется баг-репорт писать для KOS...
megavolt85 может попробуешь на HDD это сделать? Надо убедится окончательно.
RE: G1-ATA Devices - OzOnE - 24.03.2014 06:32
@SWAT - Does this mean you got your G1 adapter working OK with an SD adapter now?
I have a lot of catching up to do. lol
I have my Dreamcast out again, and will be testing cybdyn's DCIO code this week.
I can ask Lawrence (BlueCrab) directly about any questions on the KOS IDE code.
He wrote the PIO code after I sent him a G1 adapter, so he should be able to fix any bugs (if he's not too busy.)
I'll really be trying to get into the DC stuff again now, as I'm just getting over a bad Flu.
OzOnE.
RE: G1-ATA Devices - SWAT - 24.03.2014 12:20
(24.03.2014 06:32)OzOnE писал(а): @SWAT - Does this mean you got your G1 adapter working OK with an SD adapter now?
I have a lot of catching up to do. lol
I have my Dreamcast out again, and will be testing cybdyn's DCIO code this week.
I can ask Lawrence (BlueCrab) directly about any questions on the KOS IDE code.
He wrote the PIO code after I sent him a G1 adapter, so he should be able to fix any bugs (if he's not too busy.)
I'll really be trying to get into the DC stuff again now, as I'm just getting over a bad Flu.
SD and IDE works for read, but with write we have some strange problems on both devices.
This is similar to the problem in the file system, but both the file systems (FAT and EXT2) behave roughly the same.
I'm still not sure exactly what is the problem, I will try to find the reason for a while.
If it turns out that this is a problem in KOS, then I'll write to BlueCrab on dcemulation or IRC. I already asked him there to fix other bugs.
RE: G1-ATA Devices - cybdyn - 24.03.2014 13:35
chk ATA specification?))
anyway if READ works, it's enough for play games)))
|