![]() |
вызов функции на С - Версия для печати +- DC-SWAT Forum (http://www.dc-swat.ru/forum) +-- Форум: DreamShell (/forum-3.html) +--- Форум: Programming (/forum-28.html) +--- Тема: вызов функции на С (/thread-2096.html) |
вызов функции на С - megavolt85 - 25.12.2013 08:30 Код: #include "ds.h" RE: вызов функции на С - Wind - 25.12.2013 09:55 Наверное так: Код: int main(int argc, char *argv[]) { RE: вызов функции на С - SWAT - 25.12.2013 10:32 Оба варианта кода не имеют смысла ![]() Для функции cdrom_locate_data_track нужно передать аргументом сам TOC, а ты ему пустоту даешь (точнее даже не пустоту, а мусор из стека). Она по сути просто перебирает буфер с TOC в поиске нужного трека. Тебе нужно сначала считать этот TOC, а потом уже в нем искать трек с данными: PHP код: #include "ds.h" RE: вызов функции на С - Wind - 26.12.2013 06:10 Ну смысла то может и не имеют ![]() ![]() RE: вызов функции на С - SWAT - 26.12.2013 11:22 (26.12.2013 06:10)Wind писал(а): Ну смысла то может и не имеют Ну это да, твой вариант валидный, извиняюсь за некорректность ![]() RE: вызов функции на С - megavolt85 - 02.02.2014 10:36 потихоньку изучаю си и в процессе пытаюсь написать программку для рипа GD-ROM и штамповки, в связи с этим возникли вопросы: 1) сколько сессий на диске? (GD-ROM 2? штамповка 1?) 2) что из себя представляет gdi образ? (точная копия, сектор в сектор включая область видимую обычным CD-ROM?) 3) что нужно для рипа GD-ROM в sd-iso? (TOC+последняя дорожка+hack lba?) 4) что из себя представляет cdi рип? и нужен ли он вообще? (точная копия штамповки, сектор в сектор?) 5) что нужно для рипа штамповки в sd-iso? (TOC+дорожка с данными+hack lba?) RE: вызов функции на С - SWAT - 04.02.2014 06:45 1) Да 2) Да, но без обычной области 3) Да, TOC не нужен 4) Это спец. формат, в нем не все так просто, лучше забей 5) Да, TOC не нужен RE: вызов функции на С - megavolt85 - 04.02.2014 08:56 SWAT подскажи что я упустил PHP код: //* IP.BIN dumper *// запускаю на эмуляторе: cd /ram -> ipbin -> cat ip.bin вижу мусор из стека. Проверил fwrite, скормил набор символов, прочитал тот же набор, получается не правильно срабатывает cdrom_read_sectors или я буфер не правильный задал. И для чего эта функция: int cdrom_set_datatype(int p1, int cdxa, int sector_size); что за параметры p1 и cdxa RE: вызов функции на С - SWAT - 04.02.2014 11:30 Да, у тебя проблема в буфере для сектора, ты его сделал ссылкой, при этом указав его размер. У тебя получился массив ссылок на char. В общем я для наглядности сделал пару реализаций, на живую не проверял, так что извиняй если ошибка где затаилась ![]() PHP код: //* IP.BIN dumper *// PHP код: //* IP.BIN dumper *// А по поводу int cdrom_set_datatype(int p1, int cdxa, int sector_size); то в В KOS этой функции нет. И кстати я что вспомнил, для RC1 в SDK есть директория patch, в которой хранятся хэдэры, их нужно тебе заменить в KOS, ибо там были правки и дополнения. Допустим у функции чтения секторов, первым аргументом идет тип команды для сискола: PHP код: int cdrom_read_sectors(int cmd, void *buffer, int sector, int cnt); Поэтому в коде выше нужно сделать правки: PHP код: rc = cdrom_read_sectors(CMD_PIOREAD, secbuf, start + cur, 1); Я пожалел что это сделал, ибо нарушил совместимость. В новой версии я вернул все обратно, поэтому нужно будет тебе учесть в своей программе в будущем, под какую версию DS она собирается. Это касается только функций cdrom.h Update Убрал вычитание хардварного LBA 150, здесь это не нужно. Это когда работаешь с ISO9660, то там приходится его прибавлять и убавлять, так как все оффсеты прописаны без него. RE: вызов функции на С - megavolt85 - 04.02.2014 16:34 SWAT писал(а):И кстати я что вспомнил, для RC1 в SDK есть директория patch, в которой хранятся хэдэры, их нужно тебе заменить в KOS, ибо там были правки и дополнения.Я int cdrom_set_datatype(int p1, int cdxa, int sector_size) как раз в том хэдэре и нашел UPD: Если я правильно понял, то для RC2 нужно будет вернуть назад KOS'овский cdrom.h и вызывать int cdrom_read_sectors(void *buffer, int sector, int cnt); UPD: штамповку уже начал рипить, но ужасно долго, за ~40 минут 85 мегабайт RE: вызов функции на С - SWAT - 05.02.2014 06:41 (04.02.2014 16:34)megavolt85 писал(а): Я int cdrom_set_datatype(int p1, int cdxa, int sector_size) как раз в том хэдэре и нашел Ну вот лучше и не трогай ее. Но для того чтобы привод заставить читать GD диск, нужно его по другому инициализировать. Придется тебе перенести некоторые функции из KOS себе и изменить их. (04.02.2014 16:34)megavolt85 писал(а): UPD: Если я правильно понял, то для RC2 нужно будет вернуть назад KOS'овский cdrom.h и вызывать int cdrom_read_sectors(void *buffer, int sector, int cnt); Да. (04.02.2014 16:34)megavolt85 писал(а): UPD: штамповку уже начал рипить, но ужасно долго, за ~40 минут 85 мегабайт Это наверное потому что ты посекторно рипаешь, это действительно не быстро, да еще и в PIO режиме. По хорошему нужно через DMA данные гонять и не по одному сектору, а пачками. RE: вызов функции на С - MetalliC - 05.02.2014 13:30 немножко поправочек: (02.02.2014 10:36)megavolt85 писал(а): 1) сколько сессий на диске? (GD-ROM 2? штамповка 1?)по две сессии, и у GD и у MIL-CD, в обоих случаях первый трек должен быть с данными, второй аудио, ну и третий уже во второй сесии откуда всё грузится. (02.02.2014 10:36)megavolt85 писал(а): 2) что из себя представляет gdi образ? (точная копия, сектор в сектор включая область видимую обычным CD-ROM?)в общем говоря да, включая область обычной плотности (02.02.2014 10:36)megavolt85 писал(а): 4) что из себя представляет cdi рип? и нужен ли он вообще? (точная копия штамповки, сектор в сектор?)cdi - закрытый проприетарный формат, поддерживающий мультисессионные диски, в отличие от например iso. я так понимаю когда-то давно именно DiscJuggler с его CDI подвернулся под руку кому-то из дримовской тусовки, и потом типа прижился. как для дримкаста этот формат не хуже/лучше .mdf/mds или там .nrg. RE: вызов функции на С - SWAT - 05.02.2014 13:56 (05.02.2014 13:30)MetalliC писал(а): немножко поправочек: Странность в том, что при запросе TOC у mil-cd указывается первая сессия, а не вторая. А вот у GD указывается вторая. (05.02.2014 13:30)MetalliC писал(а):(02.02.2014 10:36)megavolt85 писал(а): 2) что из себя представляет gdi образ? (точная копия, сектор в сектор включая область видимую обычным CD-ROM?)в общем говоря да, включая область обычной плотности Да зачем она нужна, эта обычная область, лишний мусор и время на рип. RE: вызов функции на С - cybdyn - 05.02.2014 15:10 а смысл копировать штамповки - это пиратка CD ? проще же на компе скопировать? или это для теста обращения к приводу? у GD дисков игра по идее всегда начинается с 45000 lba. и далее до конца сессии, но вот есть диски с промежуточными аудио треками. аудио треки не нужны как бы но неучитывая их не собрать образ RE: вызов функции на С - megavolt85 - 05.02.2014 21:40 SWAT писал(а):Это наверное потому что ты посекторно рипаешь, это действительно не быстро, да еще и в PIO режиме.Да тут куча факторов: посекторно в PIO, ds_printf тормозит (я ей количество записанных мегабайт выводил), флешка у меня от дядюшки Ляо, да ещё и четвертого класса ![]() P.S SWAT функция ds_printf переводит курсор на новую строку даже без \n , если возможно подправь это и добавь \r в RC2 нравятся мне прогресс бары в консоли типа такого printf("100%%[:====================:]\n") ![]() cybdyn писал(а):а смысл копировать штамповкиРип в SD-ISO , чтоб с перепаковкой не париться SWAT писал(а):По хорошему нужно через DMA данные гонять и не по одному сектору, а пачками. А вот с этим грабли, попробовал IP.BIN рипнуть все 32 кб за раз, в /ram нормально , а в /sd , ошибка записи RE: вызов функции на С - SI{AY - 06.02.2014 08:13 >>Рип в SD-ISO , чтоб с перепаковкой не париться вот тут не плохо ппо структуру диска GD http://www.dcfan.net.ru/forum/f69/%E8%E7%E2%EB%E5%F7%E5%ED%E8%E5-%E4%E0%ED%ED%FB%F5-%E8%E7-%EE%E1%F0%E0%E7%EE%E2-%EE%F0%E8%E3%E8%ED%E0%EB%FC%ED%FB%F5-gd-rom-%E4%E8%F1%EA%EE%E2-2726/ RE: вызов функции на С - SWAT - 06.02.2014 09:56 Ну во первых не стоит делать частые вызовы printf ни в одной из ОС, она везде тормозит процесс (с учетом вывода на экран, а не в файл или еще куда), если сильно часто ее дергать. Дергай ее не на каждом проходе в цикле, а допустим каждый мегабайт. Про переводы строк и возврат каретки я в курсе, если будет время - доработаю. Просто консолью я сейчас не занимаюсь в принципе, так как стараюсь развивать GUI интерфейс и рано или поздно ты к нему тоже придешь, ибо пользователи не особо жалуют консольные приложения ![]() Ну и вообще нужно без фанатизма стараться визуализировать всякие процессы с большой точностью, ты отнимаешь и без того малое процессорное время. Так как все графические манипуляции в DS софтварные, а не хардварные (расплата за SDL, тут ничего не поделаешь). А пока, раз уж так хочется, можешь поиграться с функцией ds_uprintf, она всегда действует как возврат каретки, т.е. пишет всегда в одну строку (с заменой). В RC2 к слову я эту функцию уже убрал, она редко использовалась и я решил убрать ее чтобы не плодить лишнего, дабы потом их все не поддерживать, если переделаю вывод, а его я рано или поздно переделаю, это вопрос времени. RE: вызов функции на С - megavolt85 - 12.02.2014 23:38 Вообщем пока нет ничего быстрее флешки, разницы между PIO и DMA я не заметил, читал по 10 секторов через DMA и по одному в PIO, скорость рипа при этом равна 1 мегабит в секунду, похоже что SD карта быстрей не может. Надеюсь HDD на G1 будет шустрее RE: вызов функции на С - cybdyn - 13.02.2014 11:17 привод то сам является относительно медленый - считаем: по теории CD - 75 кадров в секунду . в кадре полезных 2048 кбайт ( копируетм только данные без хедеров и коррекц. кода) макс скорость - 12(макс скорость) итого : 75 * 2048 * 12 примерно~ 1,843 мегабайта в секунду. это предел! так что примерно на диск GD 1.2 гига это 10..11 минут. CD ~ 5..6 мин. это при условии что скорость чтения из привода и запись в HDD быстрее чем скорость потока даннных с диска. иначе добавляем задержку, в нашем случае запись в карту - как я помню с картой проц работает в PIO - дергая ножками сериал порта выполняя команды программы.. хотя ДМА как раз както бы разгружало проц, если делать параллельно - типа двойного буфера. вообщемто в итоге упрёмся в скорость самого медленного из пунктов. в данном случае обмен с флэхой. RE: вызов функции на С - SI{AY - 13.02.2014 19:18 megavolt85, что то медленно у вас. утилитка японца примерно за 35минут копирует gd диск. так что ищите у себя узкие места. есть к чему стремиться) |