25.12.2013, 08:30
Код:
#include "ds.h"
int main(int argc, char *argv[]) {
uint32 fd;
char *toc;
fd=cdrom_locate_data_track (*toc);
ds_printf("log=%d ", fd);
return CMD_OK;
}
#include "ds.h"
int main(int argc, char *argv[]) {
uint32 fd;
char *toc;
fd=cdrom_locate_data_track (*toc);
ds_printf("log=%d ", fd);
return CMD_OK;
}
int main(int argc, char *argv[]) {
uint32 fd;
char toc[102*4];
fd=cdrom_locate_data_track (toc);
ds_printf("log=%d ", fd);
return CMD_OK;
}
#include "ds.h"
int main(int argc, char *argv[]) {
CDROM_TOC toc;
uint32 lba;
if(cdrom_read_toc(&toc, 0) != 0)
return CMD_ERROR;
if(!(lba = cdrom_locate_data_track(&toc)))
return CMD_ERROR;
ds_printf("LBA: %ld\n", lba);
return CMD_OK;
}
(26.12.2013 06:10)Wind писал(а): [ -> ]Ну смысла то может и не имеют , вопрос-то было как вызвать ф-ию
//* IP.BIN dumper *//
#include "ds.h"
int main(int argc, char *argv[]) {
FILE *dst_file;
CDROM_TOC toc;
char *secbuf[2048];
char *dirp = "ip.bin";
int start,s_size,istep;
if(cdrom_read_toc(&toc, 0) != 0)
return CMD_ERROR;
start = TOC_LBA(toc.entry[1]);
start = start - 150 ;
s_size = 16;
if ((dst_file = fopen(dirp, "wb"))== NULL)
{
ds_printf("DS_ERROR: Cannot open %s for writing!\n",dirp);
return CMD_ERROR;
}
cdrom_set_sector_size (2048);
for (istep=0;istep<s_size;istep++){
if (cdrom_read_sectors(&secbuf,start+istep,1) != 0){
ds_printf("DS_ERROR: GD-ROM read error\n");
return CMD_ERROR;
}
if (fwrite(secbuf,sizeof(secbuf),1,dst_file) !=1){
ds_printf("DS_ERROR: Error write to file\n");
return CMD_ERROR;
}
}
fclose(dst_file);
return CMD_OK;
}
//* IP.BIN dumper *//
#include "ds.h"
int main(int argc, char *argv[]) {
file_t fd;
uint8 secbuf[2048];
CDROM_TOC *toc = (CDROM_TOC *)secbuf; /* Т.к. TOC используешь один раз, стоит разгрузить стек */
char dirp[] = "/ram/ip.bin"; /* Можно взять из аргумента к команде - argv[1] */
uint32 start, cur;
int rc;
rc = cdrom_read_toc(toc, 0);
if(rc != ERR_OK) {
ds_printf("DS_ERROR: Cannot read TOC: %d\n", rc);
return CMD_ERROR;
}
start = cdrom_locate_data_track(toc);
if(!start) {
ds_printf("DS_ERROR: Cannot find data track!\n");
return CMD_ERROR;
}
fd = fs_open(dirp, O_WRONLY);
if (fd == FILEHND_INVALID) {
ds_printf("DS_ERROR: Cannot open %s for writing!\n", dirp);
return CMD_ERROR;
}
for(cur = 0; cur < 16; cur++) {
rc = cdrom_read_sectors(secbuf, start + cur, 1);
if (rc != ERR_OK) {
ds_printf("DS_ERROR: GD-ROM read error: %d\n", rc);
fs_close(fd);
return CMD_ERROR;
}
rc = fs_write(fd, secbuf, sizeof(secbuf));
if (rc != sizeof(secbuf)) {
ds_printf("DS_ERROR: Error write to file: %d vs %d\n", rc, sizeof(secbuf));
fs_close(fd);
return CMD_ERROR;
}
}
fs_close(fd);
return CMD_OK;
}
//* IP.BIN dumper *//
#include "ds.h"
#define IPBIN_SIZE 32768
int main(int argc, char *argv[]) {
file_t fd;
uint8 *secbuf;
CDROM_TOC toc;
char dirp[] = "/ram/ip.bin";
uint32 start, cur;
int rc;
secbuf = calloc(1, IPBIN_SIZE);
if(secbuf == NULL) {
ds_printf("DS_ERROR: No memory\n");
return CMD_ERROR;
}
rc = cdrom_read_toc(&toc, 0);
if(rc != ERR_OK) {
ds_printf("DS_ERROR: Cannot read TOC: %d\n", rc);
free(secbuf);
return CMD_ERROR;
}
start = cdrom_locate_data_track(&toc);
if(!start) {
ds_printf("DS_ERROR: Cannot find data track!\n");
free(secbuf);
return CMD_ERROR;
}
fd = fs_open(dirp, O_WRONLY);
if (fd == FILEHND_INVALID) {
ds_printf("DS_ERROR: Cannot open %s for writing!\n", dirp);
free(secbuf);
return CMD_ERROR;
}
rc = cdrom_read_sectors(secbuf, start, IPBIN_SIZE / 2048);
if (rc != ERR_OK) {
ds_printf("DS_ERROR: GD-ROM read error: %d\n", rc);
fs_close(fd);
free(secbuf);
return CMD_ERROR;
}
rc = fs_write(fd, secbuf, IPBIN_SIZE);
if (rc != IPBIN_SIZE) {
ds_printf("DS_ERROR: Error write to file: %d vs %d\n", rc, IPBIN_SIZE);
fs_close(fd);
free(secbuf);
return CMD_ERROR;
}
fs_close(fd);
free(secbuf);
return CMD_OK;
}
int cdrom_read_sectors(int cmd, void *buffer, int sector, int cnt);
rc = cdrom_read_sectors(CMD_PIOREAD, secbuf, start + cur, 1);
rc = cdrom_read_sectors(CMD_PIOREAD, secbuf, start, IPBIN_SIZE / 2048);
SWAT писал(а):И кстати я что вспомнил, для RC1 в SDK есть директория patch, в которой хранятся хэдэры, их нужно тебе заменить в KOS, ибо там были правки и дополнения.Я int cdrom_set_datatype(int p1, int cdxa, int sector_size) как раз в том хэдэре и нашел
(04.02.2014 16:34)megavolt85 писал(а): [ -> ]Я int cdrom_set_datatype(int p1, int cdxa, int sector_size) как раз в том хэдэре и нашел
(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 мегабайт
(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.
(05.02.2014 13:30)MetalliC писал(а): [ -> ]немножко поправочек:
(02.02.2014 10:36)megavolt85 писал(а): [ -> ]1) сколько сессий на диске? (GD-ROM 2? штамповка 1?)по две сессии, и у GD и у MIL-CD, в обоих случаях первый трек должен быть с данными, второй аудио, ну и третий уже во второй сесии откуда всё грузится.
(05.02.2014 13:30)MetalliC писал(а): [ -> ](02.02.2014 10:36)megavolt85 писал(а): [ -> ]2) что из себя представляет gdi образ? (точная копия, сектор в сектор включая область видимую обычным CD-ROM?)в общем говоря да, включая область обычной плотности
SWAT писал(а):Это наверное потому что ты посекторно рипаешь, это действительно не быстро, да еще и в PIO режиме.Да тут куча факторов: посекторно в PIO, ds_printf тормозит (я ей количество записанных мегабайт выводил), флешка у меня от дядюшки Ляо, да ещё и четвертого класса . Стал выводить отладочную инфу через printf, скорость значительно выросла ( 431 мегабайт за 62 минуты). Эх жаль printf не знает ключа \r (перевод курсора в начало строки)
cybdyn писал(а):а смысл копировать штамповкиРип в SD-ISO , чтоб с перепаковкой не париться
SWAT писал(а):По хорошему нужно через DMA данные гонять и не по одному сектору, а пачками.