From eb1d638411c1d77fa36dd8701f493738cee83593 Mon Sep 17 00:00:00 2001 From: megavolt85 Date: Sun, 3 Mar 2024 20:05:10 +0300 Subject: [PATCH 001/148] [isoldr] fix sys id init for low level --- firmware/isoldr/syscalls/flash_font_sys.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/isoldr/syscalls/flash_font_sys.s b/firmware/isoldr/syscalls/flash_font_sys.s index 9c09e59c..872555ec 100644 --- a/firmware/isoldr/syscalls/flash_font_sys.s +++ b/firmware/isoldr/syscalls/flash_font_sys.s @@ -121,7 +121,7 @@ _sysinfo_syscall: mova .flashrom_off, r0 mov.l @(4, r0), r0 mov.l .dc_id, r5 - add #2, r5 + add #8, r5 mov.l .dc_id_offset, r4 jsr @r0 mov #5, r6 From f0477c2a51d9b47640f627acda95d6bb6dc322ac Mon Sep 17 00:00:00 2001 From: megavolt85 Date: Sun, 3 Mar 2024 23:16:34 +0300 Subject: [PATCH 002/148] [fw-isoldr] more dreamcast id bug fix for low-level --- firmware/isoldr/syscalls/flash_font_sys.s | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/firmware/isoldr/syscalls/flash_font_sys.s b/firmware/isoldr/syscalls/flash_font_sys.s index 872555ec..ad67e5e1 100644 --- a/firmware/isoldr/syscalls/flash_font_sys.s +++ b/firmware/isoldr/syscalls/flash_font_sys.s @@ -127,7 +127,7 @@ _sysinfo_syscall: mov #5, r6 mov.l .dc_id, r4 - add #7, r4 + add #23, r4 mov #0, r5 mov #10, r0 @@ -135,11 +135,11 @@ _sysinfo_syscall: mov.b r5, @(r0, r4) dt r0 bt .sysinfo_syscall_cp_loop - add #-21, r4 + add #-31, r4 ocbwb @r4 lds.l @r15+, pr rts - nop + mov #0, r0 .align 2 .dc_id: From b661aaf654404fdea3f6ba99396b450b59a30ac0 Mon Sep 17 00:00:00 2001 From: megavolt85 Date: Mon, 4 Mar 2024 03:31:03 +0300 Subject: [PATCH 003/148] [fw-isoldr] dreamcast id final bug fix for low-level --- firmware/isoldr/syscalls/flash_font_sys.s | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/firmware/isoldr/syscalls/flash_font_sys.s b/firmware/isoldr/syscalls/flash_font_sys.s index ad67e5e1..b6b71f89 100644 --- a/firmware/isoldr/syscalls/flash_font_sys.s +++ b/firmware/isoldr/syscalls/flash_font_sys.s @@ -1,6 +1,6 @@ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! This file is part of DreamShell ISO Loader ! -! Copyright (C)2019 megavolt85 ! +! Copyright (C)2019-2024 megavolt85 ! ! ! ! This program is free software: you can redistribute it and/or modify ! ! it under the terms of the GNU General Public License version 3 as ! @@ -77,7 +77,7 @@ _sysinfo_syscall: cmp/eq #1, r0 bt .sysinfo_syscall_case1 cmp/eq #3, r0 - bf .sysinfo_syscall_case3 + bt .sysinfo_syscall_case3 mov #10, r0 cmp/hs r0, r4 @@ -127,15 +127,15 @@ _sysinfo_syscall: mov #5, r6 mov.l .dc_id, r4 - add #23, r4 + add #12, r4 mov #0, r5 - mov #10, r0 + mov #11, r0 .sysinfo_syscall_cp_loop: mov.b r5, @(r0, r4) dt r0 - bt .sysinfo_syscall_cp_loop - add #-31, r4 + bf .sysinfo_syscall_cp_loop + add #-20, r4 ocbwb @r4 lds.l @r15+, pr rts From 5e0925181a33b9798590cc4259d7ad4f7e6db47a Mon Sep 17 00:00:00 2001 From: DC-SWAT Date: Mon, 4 Mar 2024 18:33:22 +0700 Subject: [PATCH 004/148] [fw-isoldr] Improved GDI reader. Also some cleanup and bump version to 0.8.1. --- firmware/isoldr/loader/Makefile.cfg | 2 +- firmware/isoldr/loader/reader.c | 137 ++++++++++++++-------------- 2 files changed, 68 insertions(+), 71 deletions(-) diff --git a/firmware/isoldr/loader/Makefile.cfg b/firmware/isoldr/loader/Makefile.cfg index 820c436d..ccab760f 100644 --- a/firmware/isoldr/loader/Makefile.cfg +++ b/firmware/isoldr/loader/Makefile.cfg @@ -6,7 +6,7 @@ TARGET = 0x8ce00000 BUILD = build -VERSION = "0.8.0" +VERSION = "0.8.1" INSTALL_PATH = ../../../build/firmware/isoldr # INSTALL_PATH = /Volumes/DREAMSHELL/DS/firmware/isoldr diff --git a/firmware/isoldr/loader/reader.c b/firmware/isoldr/loader/reader.c index a71c0518..81ead995 100644 --- a/firmware/isoldr/loader/reader.c +++ b/firmware/isoldr/loader/reader.c @@ -135,35 +135,28 @@ int InitReader() { gd_state_t *GDS = get_GDS(); #ifdef HAVE_MULTI_DISC - if (GDS->disc_num) { - - if (IsoInfo->image_file[len - 7] != 'k') { + if(GDS->disc_num) { + if(IsoInfo->image_file[len - 7] != 'k') { len--; } IsoInfo->image_file[len - 6] = GDS->disc_num + '0'; memcpy(&IsoInfo->image_file[len - 5], "03.iso\0", 7); GDS->data_track = 3; } - else if(IsoInfo->image_type == ISOFS_IMAGE_TYPE_GDI) { - if (IsoInfo->image_file[len - 7] != 'k') { - memcpy(&IsoInfo->image_file[len - 7], "03.iso\0", 7); + else +#endif + if(IsoInfo->image_type == ISOFS_IMAGE_TYPE_GDI) { + len -= (IsoInfo->image_file[len - 7] != 'k' ? 7 : 6); + if(IsoInfo->sector_size == 2048) { + memcpy(&IsoInfo->image_file[len], "03.iso\0", 7); } else { - IsoInfo->image_file[len - 6] = '0'; - IsoInfo->image_file[len - 5] = '3'; + memcpy(&IsoInfo->image_file[len], "03.bin\0", 7); } GDS->data_track = 3; - } else { - GDS->data_track = 1; } -#else - if(IsoInfo->image_type == ISOFS_IMAGE_TYPE_GDI) { - IsoInfo->image_file[len - 6] = '0'; - IsoInfo->image_file[len - 5] = '3'; - GDS->data_track = 3; - } else { + else { GDS->data_track = 1; } -#endif open_iso(GDS); @@ -197,42 +190,47 @@ int InitReader() { void switch_gdi_data_track(uint32 lba, gd_state_t *GDS) { + uint32 req_track, is_raw = 0; +#ifdef LOG + uint32 old_track = GDS->data_track; +#endif - if(lba < IsoInfo->track_lba[0]) { - - if(GDS->data_track != 1) { - int len = strlen(IsoInfo->image_file); - IsoInfo->image_file[len - 6] = '0'; - IsoInfo->image_file[len - 5] = '1'; - GDS->data_track = 1; - open_iso(GDS); + for(req_track = TOC_TRACK(IsoInfo->toc.last); req_track > 0; --req_track) { + if(lba >= TOC_LBA(IsoInfo->toc.entry[req_track - 1]) - 150) { + is_raw = TOC_CTRL(IsoInfo->toc.entry[req_track - 1]) == 0; + break; } } - else if((IsoInfo->track_lba[0] == IsoInfo->track_lba[1] || - lba < IsoInfo->track_lba[1]) && GDS->data_track != 3) { - + if(GDS->data_track != req_track) { + if(is_raw || GDS->data_track == 4) { + if(_iso_fd[2] != -1) { + /* Need close second data track to prevent fd optimization. */ + close(_iso_fd[2]); + _iso_fd[2] = -1; + } + } int len = strlen(IsoInfo->image_file); - - IsoInfo->image_file[len - 6] = '0'; - IsoInfo->image_file[len - 5] = '3'; - GDS->data_track = 3; - open_iso(GDS); - } - else if(lba >= IsoInfo->track_lba[1] && GDS->data_track <= 3) { + IsoInfo->image_file[len - 6] = (req_track / 10) + '0'; + IsoInfo->image_file[len - 5] = (req_track % 10) + '0'; - int len = strlen(IsoInfo->image_file); - IsoInfo->image_file[len - 6] = IsoInfo->image_second[5]; - IsoInfo->image_file[len - 5] = IsoInfo->image_second[6]; + if(is_raw) { + memcpy(&IsoInfo->image_file[len - 3], "raw", 3); + } else if(IsoInfo->sector_size == 2048) { + memcpy(&IsoInfo->image_file[len - 3], "iso", 3); + } else { + memcpy(&IsoInfo->image_file[len - 3], "bin", 3); + } - uint8 n = (IsoInfo->image_second[5] - '0') & 0xf; - GDS->data_track = n * 10; - n = (IsoInfo->image_second[6] - '0'); - GDS->data_track += n; + GDS->data_track = req_track; open_iso(GDS); } switch_sector_size(GDS); - DBGFF("%d\n", GDS->data_track); +#ifdef LOG + if(old_track != req_track) { + LOGFF("t=%ld s=%d b=%d a=%d\n", GDS->data_track, sec_size, b_seek, a_seek); + } +#endif } @@ -283,24 +281,26 @@ int ReadSectors(uint8 *buf, int sec, int num, fs_callback_f *cb) { lseek(iso_fd, offset, SEEK_SET); - if(cb != NULL) { #ifdef _FS_ASYNC + if(cb != NULL) { + if(read_async(iso_fd, buf, len, cb) < 0) { rv = FAILED; } else { rv = PROCESSING; } -#else - rv = FAILED; -#endif /* _FS_ASYNC */ - } else { + } + else +#endif + { if(read(iso_fd, buf, len) < 0) { rv = FAILED; } else { rv = COMPLETED; } } + break; } } @@ -331,20 +331,19 @@ int PreReadSectors(int sec, int num) { } -static int _read_sector_by_sector(uint8 *buff, uint cnt, uint sec_size -#if defined(DEV_TYPE_IDE) || defined(DEV_TYPE_GD) -, int old_dma -#endif -) { +static int _read_sector_by_sector(uint8 *buff, uint cnt, int old_dma) { while(cnt-- > 0) { - lseek(iso_fd, b_seek, SEEK_CUR); - + if(b_seek) { + lseek(iso_fd, b_seek, SEEK_CUR); + } #if defined(DEV_TYPE_IDE) || defined(DEV_TYPE_GD) if(!cnt && old_dma) { fs_enable_dma(old_dma); } +#else + (void)old_dma; #endif if(read(iso_fd, buff, sec_size) < 0) { return FAILED; @@ -362,22 +361,26 @@ static int _read_sector_by_sector(uint8 *buff, uint cnt, uint sec_size static int read_data_sectors(uint8 *buff, uint sector, uint cnt, fs_callback_f *cb) { int tmps = sec_size * cnt; + int old_dma = 0; + uint8 *tmpb; - lseek(iso_fd, IsoInfo->track_offset + (sector * IsoInfo->sector_size), SEEK_SET); + if(sector) { + lseek(iso_fd, IsoInfo->track_offset + (sector * IsoInfo->sector_size), SEEK_SET); + } /* Reading normal data sectors */ - if(IsoInfo->sector_size == sec_size) { - if(cb != NULL) { + if(IsoInfo->sector_size <= sec_size) { #ifdef _FS_ASYNC + if(cb != NULL) { + if(read_async(iso_fd, buff, tmps, cb) < 0) { return FAILED; } return PROCESSING; -#else - return FAILED; + } + else #endif - - } else { + { if(read(iso_fd, buff, tmps) < 0) { return FAILED; } @@ -386,10 +389,8 @@ static int read_data_sectors(uint8 *buff, uint sector, uint cnt, fs_callback_f * } /* Reading not optimized GDI or CDI */ - uint8 *tmpb; - #if defined(DEV_TYPE_IDE) || defined(DEV_TYPE_GD) - int old_dma = fs_dma_enabled(); + old_dma = fs_dma_enabled(); if(old_dma) { fs_enable_dma(FS_DMA_HIDDEN); @@ -419,11 +420,7 @@ static int read_data_sectors(uint8 *buff, uint sector, uint cnt, fs_callback_f * tmps = sec_size * cnt; } -#if defined(DEV_TYPE_IDE) || defined(DEV_TYPE_GD) - return _read_sector_by_sector(buff, cnt, sec_size, old_dma); -#else - return _read_sector_by_sector(buff, cnt, sec_size); -#endif + return _read_sector_by_sector(buff, cnt, old_dma); } From 611456c3b3338ed2658ec97595b151b5555a0653 Mon Sep 17 00:00:00 2001 From: DC-SWAT Date: Mon, 4 Mar 2024 18:35:38 +0700 Subject: [PATCH 005/148] [fw-isoldr] Improved offset handling for CDDA playback. --- firmware/isoldr/loader/cdda.c | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/firmware/isoldr/loader/cdda.c b/firmware/isoldr/loader/cdda.c index 189f70c7..ae4d919b 100644 --- a/firmware/isoldr/loader/cdda.c +++ b/firmware/isoldr/loader/cdda.c @@ -208,7 +208,7 @@ static void setup_pcm_buffer(void) { * * 32KB - 36185 (small cumulative error) * 16KB - 18090 (no error) - * 8KB - 9042 (small error) + * 8KB - 9043 (small error) * * Measured values for ADPCM 4-bit 44100 Hz: * @@ -255,7 +255,7 @@ static void setup_pcm_buffer(void) { uint32 s = (exception_inited() ? 1 : 2); ram_usage >>= s; cdda->size >>= s; - cdda->end_tm = 9042; + cdda->end_tm = 9043; } break; } @@ -1261,13 +1261,15 @@ static void play_next_track() { #ifdef _FS_ASYNC static void read_callback(size_t size) { - DBGF("CDDA: FILL END %d\n", size); if(cdda->stat > CDDA_STAT_IDLE) { if(size == (size_t)-1) { lseek(cdda->fd, cdda->cur_offset + cdda->offset, SEEK_SET); cdda->stat = CDDA_STAT_FILL; + LOGF("CDDA: FILL ERR\n"); } else if(size < cdda->size >> 1) { - cdda->stat = CDDA_STAT_FILL; + LOGF("CDDA: FILL END %d\n", size); + cdda->stat = CDDA_STAT_PREP; + memset(cdda->buff[PCM_TMP_BUFF] + size, 0, (cdda->size >> 1) - size); } else { cdda->stat = CDDA_STAT_PREP; } @@ -1277,16 +1279,24 @@ static void read_callback(size_t size) { static void fill_pcm_buff() { - cdda->cur_offset = tell(cdda->fd) - cdda->offset; + uint32 remain_bytes; + uint32 read_bytes = cdda->size >> 1; if(cdda->last_lba > 0) { + remain_bytes = (cdda->last_lba * RAW_SECTOR_SIZE) - cdda->cur_offset; uint32 offset = (cdda->cur_offset / RAW_SECTOR_SIZE) + cdda->lba; - if (offset > cdda->last_lba) { + if(offset >= cdda->last_lba) { play_next_track(); return; } + } else { + remain_bytes = cdda->track_size - cdda->cur_offset; + } + + if(remain_bytes < read_bytes) { + read_bytes = remain_bytes; } if(cdda->cur_offset >= cdda->track_size) { play_next_track(); @@ -1297,9 +1307,9 @@ static void fill_pcm_buff() { #ifdef _FS_ASYNC cdda->stat = CDDA_STAT_WAIT; - int rc = read_async(cdda->fd, cdda->buff[PCM_TMP_BUFF], cdda->size >> 1, read_callback); + int rc = read_async(cdda->fd, cdda->buff[PCM_TMP_BUFF], read_bytes, read_callback); #else - int rc = read(cdda->fd, cdda->buff[PCM_TMP_BUFF], cdda->size >> 1); + int rc = read(cdda->fd, cdda->buff[PCM_TMP_BUFF], read_bytes); cdda->stat = CDDA_STAT_PREP; #endif @@ -1342,9 +1352,6 @@ void CDDA_MainLoop(void) { /* Reading data for left or all channels */ if(cdda->stat == CDDA_STAT_FILL) { fill_pcm_buff(); - /* Update LBA for SCD command */ - gd_state_t *GDS = get_GDS(); - GDS->lba = cdda->lba + (cdda->cur_offset / RAW_SECTOR_SIZE); unlock_cdda(); return; } @@ -1358,6 +1365,11 @@ void CDDA_MainLoop(void) { } aica_dma_irq_restore(); } + /* Update LBA for SCD command */ + gd_state_t *GDS = get_GDS(); + cdda->cur_offset = tell(cdda->fd) - cdda->offset; + GDS->lba = cdda->lba + (cdda->cur_offset / RAW_SECTOR_SIZE); + if(cdda->trans_method != PCM_TRANS_SQ_SPLIT) { aica_pcm_split(cdda->buff[PCM_TMP_BUFF], cdda->buff[PCM_DMA_BUFF], cdda->size >> 1); } From 93976ce51db59cd1f3f0173d163c15becd0f08da Mon Sep 17 00:00:00 2001 From: DC-SWAT Date: Mon, 4 Mar 2024 18:41:04 +0700 Subject: [PATCH 006/148] [fw-isoldr] Fixed sysinfo and VMU emu for WinCE --- firmware/isoldr/loader/include/main.h | 3 ++- firmware/isoldr/loader/main.c | 4 ++-- firmware/isoldr/loader/syscalls.c | 31 ++++++++++++++++++++------- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/firmware/isoldr/loader/include/main.h b/firmware/isoldr/loader/include/main.h index b7285c32..500fc1fb 100644 --- a/firmware/isoldr/loader/include/main.h +++ b/firmware/isoldr/loader/include/main.h @@ -28,7 +28,8 @@ #define BIOS_ROM_APP_BIN_ADDR (BIOS_ROM_ADDR + 0x10000) #define BIOS_ROM_FONT_ADDR (BIOS_ROM_ADDR + 0x100020) #define FLASH_ROM_ADDR 0x00200000 -#define FLASH_ROM_REGION_ADDR (FLASH_ROM_ADDR + 0x1a000) +#define FLASH_ROM_SYS_ID_ADDR (FLASH_ROM_ADDR + 0x1a000) +#define FLASH_ROM_REGION_ADDR FLASH_ROM_SYS_ID_ADDR #define FLASH_ROM_ICON_ADDR (FLASH_ROM_ADDR + 0x1a480) #define RAM_START_ADDR 0x0c000000 #define RAM_END_ADDR 0x0d000000 diff --git a/firmware/isoldr/loader/main.c b/firmware/isoldr/loader/main.c index f258251a..c5ef7990 100644 --- a/firmware/isoldr/loader/main.c +++ b/firmware/isoldr/loader/main.c @@ -18,7 +18,7 @@ int main(int argc, char *argv[]) { (void)argc; (void)argv; - + if(is_custom_bios() && is_no_syscalls()) { bfont_saved_addr = 0xa0001000; } @@ -157,7 +157,7 @@ int main(int argc, char *argv[]) { #endif #ifdef HAVE_MAPLE if(IsoInfo->emu_vmu) { - maple_init_vmu(IsoInfo->emu_vmu, IsoInfo->exec.type != BIN_TYPE_KOS); + maple_init_vmu(IsoInfo->emu_vmu, IsoInfo->exec.type == BIN_TYPE_KATANA); } #endif diff --git a/firmware/isoldr/loader/syscalls.c b/firmware/isoldr/loader/syscalls.c index b02dd56d..708bf61e 100644 --- a/firmware/isoldr/loader/syscalls.c +++ b/firmware/isoldr/loader/syscalls.c @@ -92,8 +92,9 @@ static inline void lock_gdsys_wait(void) { #ifdef LOG static const char cmd_name[48][18] = { - {0}, {0}, {"CHECK_LICENSE"}, {0}, {"REQ_SPI_CMD"}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {"PIOREAD"}, {"DMAREAD"}, {"GETTOC"}, {"GETTOC2"}, + {0}, {0}, {"CHECK_LICENSE"}, {0}, {"REQ_SPI_CMD"}, + {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, + {"PIOREAD"}, {"DMAREAD"}, {"GETTOC"}, {"GETTOC2"}, {"PLAY"}, {"PLAY2"}, {"PAUSE"}, {"RELEASE"}, {"INIT"}, {"DMA_ABORT"}, {"OPEN_TRAY"}, {"SEEK"}, {"DMAREAD_STREAM"}, {"NOP"}, {"REQ_MODE"}, {"SET_MODE"}, {"SCAN_CD"}, {"STOP"}, {"GETSCD"}, {"GETSES"}, {"REQ_STAT"}, {"PIOREAD_STREAM"}, @@ -135,14 +136,18 @@ static void GetTOC() { memcpy(toc, &IsoInfo->toc, sizeof(CDROM_TOC)); - if(IsoInfo->image_type == ISOFS_IMAGE_TYPE_CDI || IsoInfo->image_type == ISOFS_IMAGE_TYPE_GDI || IsoInfo->track_lba[0] == 45150) { + if(IsoInfo->image_type == ISOFS_IMAGE_TYPE_CDI || + IsoInfo->image_type == ISOFS_IMAGE_TYPE_GDI || + IsoInfo->track_lba[0] == 45150) { LOGF("Get TOC from %cDI and prepare for session %d\n", - (IsoInfo->image_type == ISOFS_IMAGE_TYPE_CDI ? 'C' : 'G'), GDS->param[0] + 1); + (IsoInfo->image_type == ISOFS_IMAGE_TYPE_CDI ? 'C' : 'G'), + GDS->param[0] + 1); if(GDS->param[0] == 0) { /* Session 1 */ - if(IsoInfo->image_type == ISOFS_IMAGE_TYPE_GDI || IsoInfo->track_lba[0] == 45150) { + if(IsoInfo->image_type == ISOFS_IMAGE_TYPE_GDI || + IsoInfo->track_lba[0] == 45150) { toc->first = (toc->first & 0xfff0ffff) | (1 << 16); toc->last = (toc->last & 0xfff0ffff) | (2 << 16); @@ -179,7 +184,8 @@ static void GetTOC() { } } - } else if(IsoInfo->image_type == ISOFS_IMAGE_TYPE_GDI || IsoInfo->track_lba[0] == 45150) { + } else if(IsoInfo->image_type == ISOFS_IMAGE_TYPE_GDI || + IsoInfo->track_lba[0] == 45150) { toc->entry[0] = (uint32)-1; toc->entry[1] = (uint32)-1; @@ -729,7 +735,7 @@ static int init_cmd() { #endif #ifdef HAVE_MAPLE if(IsoInfo->emu_vmu) { - maple_init_vmu(IsoInfo->emu_vmu, IsoInfo->exec.type != BIN_TYPE_KOS); + maple_init_vmu(IsoInfo->emu_vmu, IsoInfo->exec.type == BIN_TYPE_KATANA); } #endif } @@ -1455,7 +1461,16 @@ int flashrom_delete(int offset) { */ int sys_misc_init(void) { LOGFF(NULL); - // It's done by BIOS at startup. + + uint8 *src = (uint8 *)NONCACHED_ADDR(FLASH_ROM_SYS_ID_ADDR); + uint8 *dst = (uint8 *)NONCACHED_ADDR(SYSCALLS_INFO_SYS_ID_ADDR); + rom_memcpy(dst, src, 8); + + if(IsoInfo->boot_mode == BOOT_MODE_DIRECT) { + src = (uint8 *)NONCACHED_ADDR(FLASH_ROM_REGION_ADDR); + dst = (uint8 *)NONCACHED_ADDR(SYSCALLS_INFO_REGION_ADDR); + rom_memcpy(dst, src, 5); + } return 0; } From f97d914ec88304696ec1662ca7ebaf9c80ab9512 Mon Sep 17 00:00:00 2001 From: DC-SWAT Date: Tue, 5 Mar 2024 14:10:04 +0700 Subject: [PATCH 007/148] [fw-isoldr] Fixed and improved sysinfo init syscall. --- firmware/isoldr/loader/include/main.h | 5 +++-- firmware/isoldr/loader/main.c | 2 +- firmware/isoldr/loader/syscalls.c | 15 ++++++++------- firmware/isoldr/loader/utils.c | 10 +++++----- 4 files changed, 17 insertions(+), 15 deletions(-) diff --git a/firmware/isoldr/loader/include/main.h b/firmware/isoldr/loader/include/main.h index 500fc1fb..bc264667 100644 --- a/firmware/isoldr/loader/include/main.h +++ b/firmware/isoldr/loader/include/main.h @@ -28,8 +28,8 @@ #define BIOS_ROM_APP_BIN_ADDR (BIOS_ROM_ADDR + 0x10000) #define BIOS_ROM_FONT_ADDR (BIOS_ROM_ADDR + 0x100020) #define FLASH_ROM_ADDR 0x00200000 -#define FLASH_ROM_SYS_ID_ADDR (FLASH_ROM_ADDR + 0x1a000) -#define FLASH_ROM_REGION_ADDR FLASH_ROM_SYS_ID_ADDR +#define FLASH_ROM_REGION_ADDR (FLASH_ROM_ADDR + 0x1a000) +#define FLASH_ROM_SYS_ID_ADDR (FLASH_ROM_ADDR + 0x1a056) #define FLASH_ROM_ICON_ADDR (FLASH_ROM_ADDR + 0x1a480) #define RAM_START_ADDR 0x0c000000 #define RAM_END_ADDR 0x0d000000 @@ -71,6 +71,7 @@ extern uint32 loader_end; extern void boot_stub(void *, uint32) __attribute__((noreturn)); void setup_machine(void); void shutdown_machine(void); +void setup_region(void); #define launch(addr) \ void (*fboot)(uint32) __attribute__((noreturn)); \ diff --git a/firmware/isoldr/loader/main.c b/firmware/isoldr/loader/main.c index c5ef7990..9b33bf12 100644 --- a/firmware/isoldr/loader/main.c +++ b/firmware/isoldr/loader/main.c @@ -118,7 +118,7 @@ int main(int argc, char *argv[]) { if(IsoInfo->boot_mode != BOOT_MODE_DIRECT) { printf("Loading IP.BIN...\n"); - if(!Load_IPBin(IsoInfo->boot_mode == BOOT_MODE_DIRECT)) { + if(!Load_IPBin(0)) { goto error; } } diff --git a/firmware/isoldr/loader/syscalls.c b/firmware/isoldr/loader/syscalls.c index 708bf61e..430ecaa0 100644 --- a/firmware/isoldr/loader/syscalls.c +++ b/firmware/isoldr/loader/syscalls.c @@ -1460,17 +1460,18 @@ int flashrom_delete(int offset) { * Sysinfo syscalls */ int sys_misc_init(void) { + uint8 *src, *dst = (uint8 *)NONCACHED_ADDR(SYSCALLS_INFO_SYS_ID_ADDR); + LOGFF(NULL); + memset(dst, 0, 32 - 8); - uint8 *src = (uint8 *)NONCACHED_ADDR(FLASH_ROM_SYS_ID_ADDR); - uint8 *dst = (uint8 *)NONCACHED_ADDR(SYSCALLS_INFO_SYS_ID_ADDR); + src = (uint8 *)NONCACHED_ADDR(FLASH_ROM_SYS_ID_ADDR); + dst = (uint8 *)NONCACHED_ADDR(SYSCALLS_INFO_SYS_ID_ADDR); rom_memcpy(dst, src, 8); + setup_region(); - if(IsoInfo->boot_mode == BOOT_MODE_DIRECT) { - src = (uint8 *)NONCACHED_ADDR(FLASH_ROM_REGION_ADDR); - dst = (uint8 *)NONCACHED_ADDR(SYSCALLS_INFO_REGION_ADDR); - rom_memcpy(dst, src, 5); - } + dst = (uint8 *)NONCACHED_ADDR(SYSCALLS_INFO_SYS_ID_ADDR - 8); + dcache_flush_range((uint32)dst, 32); return 0; } diff --git a/firmware/isoldr/loader/utils.c b/firmware/isoldr/loader/utils.c index a51b2c93..185852ed 100644 --- a/firmware/isoldr/loader/utils.c +++ b/firmware/isoldr/loader/utils.c @@ -166,7 +166,7 @@ uint Load_BootBin() { } -static void set_region() { +void setup_region() { char region_str[3][6] = { {"00000"}, {"00110"}, @@ -177,9 +177,9 @@ static void set_region() { uint8 *reg = (uint8 *)NONCACHED_ADDR(SYSCALLS_INFO_ADDR + 0x20); uint32 ipbin_reg = NONCACHED_ADDR(IP_BIN_REGION_ADDR); - if (*(uint32 *)(ipbin_reg) == 0x2045554a) { + if (IsoInfo->boot_mode == BOOT_MODE_DIRECT || *(uint32 *)(ipbin_reg) == 0x2045554a) { *reg = 0; - memcpy(dst, src, 5); + rom_memcpy(dst, src, 5); } else if(*((char *)(ipbin_reg + 2)) == 'E') { *reg = 3; memcpy(dst, region_str[2], 5); @@ -213,9 +213,9 @@ uint Load_IPBin(int header_only) { *((uint16 *)ipbin_addr + 0x10d8) = 0x5113; *((uint16 *)ipbin_addr + 0x140a) = 0x000b; *((uint16 *)ipbin_addr + 0x140c) = SH4_OPCODE_NOP; - set_region(); + setup_region(); } else if(header_only) { - set_region(); + setup_region(); } return 1; } From af54b9e9e71df0e22e4e824beacd2a34e2d47901 Mon Sep 17 00:00:00 2001 From: DC-SWAT Date: Tue, 5 Mar 2024 14:12:40 +0700 Subject: [PATCH 008/148] [fw-isoldr] Returned partial reading of sectors using DMA without copying. Not used in syscalls yet. --- firmware/isoldr/loader/dev/ide/ide.c | 56 +++++++++++++++----------- firmware/isoldr/loader/fs/fat/src/ff.c | 32 +++++---------- firmware/isoldr/loader/include/fs.h | 2 +- 3 files changed, 45 insertions(+), 45 deletions(-) diff --git a/firmware/isoldr/loader/dev/ide/ide.c b/firmware/isoldr/loader/dev/ide/ide.c index ab10e894..08873f0e 100644 --- a/firmware/isoldr/loader/dev/ide/ide.c +++ b/firmware/isoldr/loader/dev/ide/ide.c @@ -153,9 +153,7 @@ typedef struct ide_req { static struct ide_device ide_devices[MAX_DEVICE_COUNT]; static u32 device_count = 0; -#ifndef DEV_TYPE_IDE static u32 g1_dma_part_avail = 0; -#endif static u32 g1_dma_irq_inited = 0; static u32 g1_dma_irq_visible = 1; static u32 g1_dma_irq_code_game = 0; @@ -182,6 +180,9 @@ static u32 g1_pio_trans = 0; #define g1_ata_wait_dma() \ do {} while(IN32(G1_ATA_DMA_STATUS)) +#define g1_ata_irq_disable() OUT8(G1_ATA_CTL, 2) +#define g1_ata_irq_enable() OUT8(G1_ATA_CTL, 0) + u8 swap8(u8 n) { return ((n >> 4) | (n << 4)); } @@ -334,7 +335,6 @@ static void g1_dma_irq_hide(void) { *ASIC_IRQ9_MASK |= ASIC_NRM_GD_DMA; } - OUT8(G1_ATA_CTL, 2); g1_dma_irq_visible = 0; } @@ -354,7 +354,6 @@ static void g1_dma_irq_restore(void) { *ASIC_IRQ9_MASK &= ~ASIC_NRM_GD_DMA; } - OUT8(G1_ATA_CTL, 0); g1_dma_irq_visible = 1; } @@ -368,22 +367,30 @@ void g1_dma_set_irq_mask(s32 last_transfer) { if (!g1_dma_irq_visible) { g1_dma_irq_restore(); + g1_ata_irq_enable(); } - - } else if (dma_mode == FS_DMA_HIDDEN) { + } + else if (dma_mode == FS_DMA_HIDDEN) { /* Hide all internal DMA transfers (CDDA, etc...) */ if (g1_dma_irq_visible) { g1_dma_irq_hide(); + g1_ata_irq_disable(); } - - } else if (dma_mode == FS_DMA_SHARED) { + } + else if (dma_mode == FS_DMA_SHARED || dma_mode == FS_DMA_STREAM) { if (last_transfer && !g1_dma_irq_visible) { g1_dma_irq_restore(); - } else if (!last_transfer && g1_dma_irq_visible) { + if (dma_mode == FS_DMA_SHARED) { + g1_ata_irq_enable(); + } + } + else if (!last_transfer && g1_dma_irq_visible) { g1_dma_irq_hide(); - } else if(!g1_dma_irq_code_game) { + g1_ata_irq_disable(); + } + else if(!g1_dma_irq_code_game) { g1_dma_irq_code_game = g1_dma_has_irq_mask(); } } @@ -783,7 +790,7 @@ static s32 g1_ata_access(struct ide_req *req) { } if (req->cmd == G1_READ_PIO) { - OUT8(G1_ATA_CTL, 2); + g1_ata_irq_disable(); g1_pio_reset(len * sector_size); // g1_pio_xfer((u32)buff, len * sector_size); g1_pio_trans = 1; @@ -809,11 +816,11 @@ static s32 g1_ata_access(struct ide_req *req) { g1_ata_ack_irq(); g1_ata_wait_bsydrq(); g1_pio_reset(0); - OUT8(G1_ATA_CTL, 0); + g1_ata_irq_enable(); } #if _FS_READONLY == 0 else if (req->cmd == G1_WRITE_PIO) { - OUT8(G1_ATA_CTL, 2); + g1_ata_irq_disable(); for (u32 i = 0; i < len; i++) { g1_ata_wait_nbsy(); @@ -826,7 +833,7 @@ static s32 g1_ata_access(struct ide_req *req) { OUT8(G1_ATA_COMMAND_REG, dev->lba48 ? ATA_CMD_CACHE_FLUSH_EXT : ATA_CMD_CACHE_FLUSH); g1_ata_wait_bsydrq(); g1_ata_ack_irq(); - OUT8(G1_ATA_CTL, 0); + g1_ata_irq_enable(); } #endif else { @@ -969,7 +976,7 @@ s32 g1_ata_read_blocks(u64 block, size_t count, u8 *buf, u8 wait_dma) { req.lba = block; req.async = (wait_dma || req.cmd == G1_READ_PIO) ? 0 : 1; - // g1_dma_part_avail = 0; + g1_dma_part_avail = 0; DBGF("G1_ATA_READ: %ld %d 0x%08lx %s[%d] %s\n", (uint32)block, count, (uint32)buf, req.cmd == G1_READ_DMA ? "DMA" : "PIO", fs_dma_enabled(), @@ -1001,7 +1008,7 @@ s32 g1_ata_write_blocks(u64 block, size_t count, const u8 *buf, u8 wait_dma) { } #endif -#if 0 + s32 g1_ata_read_lba_dma_part(u64 sector, size_t bytes, u8 *buf) { LOGF("G1_ATA_PART: b=%d a=%d", bytes, g1_dma_part_avail); @@ -1032,7 +1039,7 @@ s32 g1_ata_read_lba_dma_part(u64 sector, size_t bytes, u8 *buf) { LOGF(" read c=%d a=%d\n", req.count, g1_dma_part_avail); return g1_ata_access(&req); } -#endif + s32 g1_ata_pre_read_lba(u64 sector, size_t count) { const u8 drive = 1; // TODO @@ -1076,7 +1083,7 @@ s32 g1_ata_pre_read_lba(u64 sector, size_t count) { g1_dma_set_irq_mask(1); if (fs_dma_enabled()) { - // g1_dma_part_avail = 0; + g1_dma_part_avail = 0; OUT8(G1_ATA_COMMAND_REG, ATA_CMD_READ_DMA_EXT); } else { OUT8(G1_ATA_COMMAND_REG, ATA_CMD_READ_PIO_EXT); @@ -1104,9 +1111,9 @@ s32 g1_ata_poll(void) { rv = g1_ata_ack_irq(); } - // if(!g1_dma_part_avail) { + if(!g1_dma_part_avail) { OUT8(G1_ATA_DMA_ENABLE, 0); - // } + } return rv; } @@ -1155,9 +1162,9 @@ void g1_pio_xfer(u32 addr, size_t bytes) { u32 gd_sec_remain = (transfered % gd_sec_size); if (gd_sec_remain == 0 || gd_sec_remain == ide_sec_size || transfered == gd_sec_size >> 1) { - OUT8(G1_ATA_CTL, 0); + g1_ata_irq_enable(); } else if (gd_sec_remain == (gd_sec_size - ide_sec_size) && transfered != ide_sec_size) { - OUT8(G1_ATA_CTL, 2); + g1_ata_irq_disable(); } if ((transfered % ide_sec_size) == 0) { @@ -1178,7 +1185,7 @@ void g1_pio_xfer(u32 addr, size_t bytes) { g1_pio_trans = 0; if (g1_pio_avail == 0) { - OUT8(G1_ATA_CTL, 0); + g1_ata_irq_enable(); } } @@ -1222,6 +1229,7 @@ u32 g1_ata_transfered(void) { void g1_ata_abort(void) { g1_ata_aborted = 1; + g1_dma_part_avail = 0; if (fs_dma_enabled()) { g1_dma_abort(); @@ -1229,6 +1237,8 @@ void g1_ata_abort(void) { g1_pio_abort(); } + g1_dma_set_irq_mask(1); + OUT8(G1_ATA_DEVICE_SELECT, 0x10); OUT8(G1_ATA_FEATURES, 0); diff --git a/firmware/isoldr/loader/fs/fat/src/ff.c b/firmware/isoldr/loader/fs/fat/src/ff.c index 8eebb55b..4d58431b 100644 --- a/firmware/isoldr/loader/fs/fat/src/ff.c +++ b/firmware/isoldr/loader/fs/fat/src/ff.c @@ -2831,58 +2831,48 @@ FRESULT f_poll(FIL* fp, UINT *bp) { rcnt = SS(fp->fs) * cc; /* Number of bytes transferred */ #ifdef DEV_TYPE_IDE -/* UINT part = fp->btr - rcnt; - UINT mmu = mmu_enabled(); - if (mmu && part < SS(fp->fs)) { + + if (fs_dma_enabled() == FS_DMA_STREAM && part < SS(fp->fs)) { rcnt += part; } -*/ + g1_dma_set_irq_mask( ((fp->btr - rcnt) == 0) ); -/* - if (mmu - && fs_dma_enabled() == FS_DMA_SHARED - && part - && fp->btr == rcnt - ) { + + if (fs_dma_enabled() == FS_DMA_STREAM && part && fp->btr == rcnt) { if (disk_read_part(fp->fs->drv, fp->rbuff, sect, rcnt)) { ABORT(fp->fs, FR_DISK_ERR); } - } else -*/ + } + else #endif if (disk_read_async(fp->fs->drv, fp->rbuff, sect, cc)) { ABORT(fp->fs, FR_DISK_ERR); } - goto _continue; } - fp->dsect = sect; } - rcnt = SS(fp->fs) - ((UINT)fp->fptr % SS(fp->fs)); /* Get partial sector data from sector buffer */ if (rcnt > fp->btr) rcnt = fp->btr; #ifdef DEV_TYPE_IDE - g1_dma_set_irq_mask( ((fp->btr - rcnt) == 0) ); -/* - if (mmu_enabled()) { + + if (fs_dma_enabled() == FS_DMA_STREAM) { if (disk_read_part(fp->fs->drv, fp->rbuff, fp->dsect, rcnt)) { ABORT(fp->fs, FR_DISK_ERR); } } else { -*/ if (move_window(fp->fs, fp->dsect)) /* Move sector window */ ABORT(fp->fs, FR_DISK_ERR); - + mem_cpy(fp->rbuff, &fp->fs->win[fp->fptr % SS(fp->fs)], rcnt); /* Pick partial sector */ dcache_purge_range((uint32)fp->rbuff, rcnt); - // } + } #else if (move_window(fp->fs, fp->dsect)) /* Move sector window */ ABORT(fp->fs, FR_DISK_ERR); diff --git a/firmware/isoldr/loader/include/fs.h b/firmware/isoldr/loader/include/fs.h index 46f667ac..1276b675 100644 --- a/firmware/isoldr/loader/include/fs.h +++ b/firmware/isoldr/loader/include/fs.h @@ -78,7 +78,7 @@ enum FS_DMA_STATE { FS_DMA_DISABLED = 0, FS_DMA_SHARED = 1, FS_DMA_HIDDEN = 2, - FS_DMA_NO_IRQ = 3 + FS_DMA_STREAM = 3 }; enum FS_IOCTL_CMD { From 88ff173ae9bbe9476f8c96bea1dcff000011c07e Mon Sep 17 00:00:00 2001 From: DC-SWAT Date: Tue, 5 Mar 2024 15:49:12 +0700 Subject: [PATCH 009/148] [fw-isoldr] Fixed system syscalls redirection. --- firmware/isoldr/loader/sys_syscall.s | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/firmware/isoldr/loader/sys_syscall.s b/firmware/isoldr/loader/sys_syscall.s index cf898bed..318d585b 100644 --- a/firmware/isoldr/loader/sys_syscall.s +++ b/firmware/isoldr/loader/sys_syscall.s @@ -59,22 +59,20 @@ sys_redir_k: .long sys_redir sys_redir: - mov r7,r0 - mov #3,r1 - cmp/hi r0,r1 - bf badsyscall - mov.l sys_syscall,r1 - shll2 r0 + mov #4,r1 + cmp/hs r1,r7 + bt badsyscall + mov r7, r1 + mova sys_misc_init,r0 + shll2 r1 mov.l @(r0,r1),r0 jmp @r0 nop badsyscall: - mov #-1,r0 rts - nop + mov #-1,r0 -sys_syscall: - .long sys_misc_init +.align 2 sys_misc_init: .long _sys_misc_init sys_unknown: From 45b58a87dc8033f7d43e7101ce4dc36f953e3288 Mon Sep 17 00:00:00 2001 From: DC-SWAT Date: Tue, 5 Mar 2024 16:03:58 +0700 Subject: [PATCH 010/148] [core] Calling sys info init before getting board ID. --- src/main.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main.c b/src/main.c index 4511f5d4..a2693f56 100644 --- a/src/main.c +++ b/src/main.c @@ -74,6 +74,13 @@ const char *GetVersionBuildTypeString(int type) { return build_str[type]; } +static int sys_info_init() { + int (*sc)(int, int, int, int) = NULL; + uint32 *scv = (uint32 *)≻ + *scv = *((uint32 *)0x8c0000b0); + return sc(0, 0, 0, 0); +} + static uint8 *get_board_id() { uint8 *(*sc)(int, int, int, int) = NULL; uint32 *scv = (uint32 *)≻ @@ -226,10 +233,10 @@ int InitDS() { /* If used custom BIOS and syscalls is not installed, setting up it */ if(is_custom_bios() && is_no_syscalls()) { - tmpb = (uint8 *)0x8c000068; + tmpb = (uint8 *)0xa021a056; } else { - /* Getting board ID */ + sys_info_init(); tmpb = get_board_id(); if(strncmp(getenv("PATH"), "/cd", 3)) { From 6761d2363174eaa06f2b99fa7f9e59efa71c7fae Mon Sep 17 00:00:00 2001 From: DC-SWAT Date: Tue, 5 Mar 2024 16:20:52 +0700 Subject: [PATCH 011/148] [core] Updated KallistiOS and fixed bootloader target name. Also added alternative build path and tuned gitignore. --- .gitignore | 2 -- firmware/bootloader/Makefile | 2 +- sdk/Makefile.cfg | 1 + sdk/doc/KallistiOS.txt | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 349553ac..48679ecb 100644 --- a/.gitignore +++ b/.gitignore @@ -15,8 +15,6 @@ *.d *.opk *.klf -*.raw -*.wav *.iso *.gdi *.cdi diff --git a/firmware/bootloader/Makefile b/firmware/bootloader/Makefile index 997c4ce0..92dbd946 100644 --- a/firmware/bootloader/Makefile +++ b/firmware/bootloader/Makefile @@ -5,7 +5,7 @@ TARGET = bootloader VERSION = 2.6 -TARGET_NAME = DreamShell_boot_$(TARGET)_v$(VERSION) +TARGET_NAME = DreamShell_$(TARGET)_v$(VERSION) TARGET_CD = cd/1DS_BOOT.BIN KOS_ROMDISK_DIR = romdisk diff --git a/sdk/Makefile.cfg b/sdk/Makefile.cfg index b7b6ede5..956ec08a 100644 --- a/sdk/Makefile.cfg +++ b/sdk/Makefile.cfg @@ -13,6 +13,7 @@ DC_SERIAL_BAUD = 500000 DS_BASE = $(KOS_BASE)/ds DS_SDK = $(DS_BASE)/sdk DS_BUILD = $(DS_BASE)/build +# DS_BUILD = /Volumes/DREAMSHELL/DS DS_RES = $(DS_BASE)/resources KOS_SIZE = $(KOS_CC_BASE)/bin/$(KOS_CC_PREFIX)-size diff --git a/sdk/doc/KallistiOS.txt b/sdk/doc/KallistiOS.txt index cfdcd222..bc838091 100644 --- a/sdk/doc/KallistiOS.txt +++ b/sdk/doc/KallistiOS.txt @@ -1 +1 @@ -6220f330c91a02f4def0126aa27c2abc972f73eb +ba408f3d97331498552a1eeff538e31deb1626a9 From dda3ce6ce10975586992b91b7bd3b3707a875107 Mon Sep 17 00:00:00 2001 From: DC-SWAT Date: Wed, 6 Mar 2024 09:34:56 +0700 Subject: [PATCH 012/148] [app-isoldr] Fixed custom memory value for presets. --- applications/iso_loader/modules/module.c | 41 ++++++++++++------------ 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/applications/iso_loader/modules/module.c b/applications/iso_loader/modules/module.c index 5a5288ff..2e084d4a 100644 --- a/applications/iso_loader/modules/module.c +++ b/applications/iso_loader/modules/module.c @@ -1386,20 +1386,22 @@ void isoLoader_DefaultPreset() { int isoLoader_SavePreset() { - if (!GUI_WidgetGetState(self.preset)) { + if(!GUI_WidgetGetState(self.preset)) { return 0; } - char *filename, *memory = NULL; + char *filename; file_t fd; ipbin_meta_t *ipbin = (ipbin_meta_t *)self.boot_sector; char result[1024]; - char text[24]; + char memory[24]; + char title[24]; int async = 0, type = 0, mode = 0; uint32 heap = HEAP_MODE_AUTO; uint32 cdda_mode = CDDA_MODE_DISABLED; + int vmu_num = 0; - if (!self.filename[0]) { + if(!self.filename[0]) { return 0; } @@ -1412,6 +1414,10 @@ int isoLoader_SavePreset() { return -1; } + memset(result, 0, sizeof(result)); + memset(title, 0, sizeof(title)); + memset(memory, 0, sizeof(memory)); + for(int i = 1; i < sizeof(self.async) >> 2; i++) { if(GUI_WidgetGetState(self.async[i])) { async = atoi(GUI_LabelGetText(GUI_ButtonGetCaption(self.async[i]))); @@ -1438,15 +1444,14 @@ int isoLoader_SavePreset() { if (i <= HEAP_MODE_MAPLE) { heap = i; } else { - char *tmpval = (char* )GUI_ObjectGetName((GUI_Object *)self.heap[i]); + char *tmpval = (char *)GUI_ObjectGetName((GUI_Object *)self.heap[i]); if(strlen(tmpval) < 8) { - memset(text, 0, sizeof(text)); - strncpy(text, tmpval, 10); - tmpval = strncat(text, GUI_TextEntryGetText(self.heap_memory_text), 10); + strncpy(memory, tmpval, 10); + tmpval = strncat(memory, GUI_TextEntryGetText(self.heap_memory_text), 10); } - heap = strtoul(tmpval, NULL, 16); + memset(memory, 0, sizeof(memory)); } break; } @@ -1460,23 +1465,19 @@ int isoLoader_SavePreset() { if(GUI_WidgetGetState(self.memory_chk[i])) { - memory = (char* )GUI_ObjectGetName((GUI_Object *)self.memory_chk[i]); + char *tmpval = (char *)GUI_ObjectGetName((GUI_Object *)self.memory_chk[i]); + strncpy(memory, tmpval, 10); - if(strlen(memory) < 8) { - memset(text, 0, sizeof(text)); - strncpy(text, memory, 10); - memory = strncat(text, GUI_TextEntryGetText(self.memory_text), 10); + if(strlen(tmpval) < 8) { + strncat(memory, GUI_TextEntryGetText(self.memory_text), 10); } break; } } - trim_spaces(ipbin->title, text, sizeof(ipbin->title)); - memset(result, 0, sizeof(result)); - - int vmu_num = 0; + trim_spaces(ipbin->title, title, sizeof(ipbin->title)); - if (GUI_WidgetGetState(self.vmu_disabled) == 0) { + if(GUI_WidgetGetState(self.vmu_disabled) == 0) { vmu_num = atoi(GUI_TextEntryGetText(self.vmu_number)); } @@ -1485,7 +1486,7 @@ int isoLoader_SavePreset() { "irq = %d\nlow = %d\nheap = %08lx\nfastboot = %d\ntype = %d\nmode = %d\nmemory = %s\n" "vmu = %d\nscrhotkey = %lx\n" "pa1 = %08lx\npv1 = %08lx\npa2 = %08lx\npv2 = %08lx\n", - text, GUI_TextEntryGetText(self.device), GUI_WidgetGetState(self.dma), async, + title, GUI_TextEntryGetText(self.device), GUI_WidgetGetState(self.dma), async, cdda_mode, GUI_WidgetGetState(self.irq), GUI_WidgetGetState(self.low), heap, GUI_WidgetGetState(self.fastboot), type, mode, memory, vmu_num, (uint32)(GUI_WidgetGetState(self.screenshot) ? SCREENSHOT_HOTKEY : 0), From 621cbfd000a827f87baf68999efa4ede1a7ef88f Mon Sep 17 00:00:00 2001 From: DC-SWAT Date: Wed, 6 Mar 2024 19:02:44 +0700 Subject: [PATCH 013/148] [fw-isoldr] Fixed exception init for all versions of WinCE --- firmware/isoldr/loader/main.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/firmware/isoldr/loader/main.c b/firmware/isoldr/loader/main.c index 9b33bf12..418bb998 100644 --- a/firmware/isoldr/loader/main.c +++ b/firmware/isoldr/loader/main.c @@ -130,14 +130,8 @@ int main(int argc, char *argv[]) { #ifdef HAVE_EXPT if(IsoInfo->exec.type == BIN_TYPE_WINCE && IsoInfo->use_irq) { - uint32 exec_addr = CACHED_ADDR(IsoInfo->exec.addr); - uint8 wince_version = *((uint8 *)NONCACHED_ADDR(IsoInfo->exec.addr + 0x0c)); - /* Check WinCE version and hack VBR before executing */ - if(wince_version == 0xe0) { - exception_init(exec_addr + 0x2110); - } else { - exception_init(exec_addr + 0x20f0); - } + uint32 vbr_offset = *((uint32 *)NONCACHED_ADDR(IsoInfo->exec.addr + 0x0c)) + 0x30; + exception_init(vbr_offset); } #endif From 0757bed6ea1a948edf3ca42f9f230b060a0e4a10 Mon Sep 17 00:00:00 2001 From: DC-SWAT Date: Tue, 12 Mar 2024 17:28:02 +0700 Subject: [PATCH 014/148] [fw-isoldr] Continued work on reading streams without pre read. Also fixed reader and prevent logging inside IRQ for WinCE. --- firmware/isoldr/loader/dev/ide/ide.c | 18 ++--- firmware/isoldr/loader/fs/fat/fs.c | 3 +- firmware/isoldr/loader/include/reader.h | 2 +- firmware/isoldr/loader/reader.c | 24 +++---- firmware/isoldr/loader/syscalls.c | 89 +++++++++++++++++++------ firmware/isoldr/loader/utils.c | 4 +- 6 files changed, 93 insertions(+), 47 deletions(-) diff --git a/firmware/isoldr/loader/dev/ide/ide.c b/firmware/isoldr/loader/dev/ide/ide.c index 08873f0e..569a2165 100644 --- a/firmware/isoldr/loader/dev/ide/ide.c +++ b/firmware/isoldr/loader/dev/ide/ide.c @@ -240,6 +240,7 @@ void *g1_dma_handler(void *passer, register_stack *stack, void *current_vector) // LOGF("G1_IRQ_VISIBLE: %03lx %03lx %08lx %08lx %08lx\n", // code, g1_dma_irq_code_game, status, statusExt, statusErr); // } + poll_all(0); return current_vector; } @@ -380,19 +381,18 @@ void g1_dma_set_irq_mask(s32 last_transfer) { } else if (dma_mode == FS_DMA_SHARED || dma_mode == FS_DMA_STREAM) { + if(!g1_dma_irq_code_game) { + g1_dma_irq_code_game = g1_dma_has_irq_mask(); + } + if (last_transfer && !g1_dma_irq_visible) { g1_dma_irq_restore(); - if (dma_mode == FS_DMA_SHARED) { - g1_ata_irq_enable(); - } + g1_ata_irq_enable(); } else if (!last_transfer && g1_dma_irq_visible) { g1_dma_irq_hide(); g1_ata_irq_disable(); } - else if(!g1_dma_irq_code_game) { - g1_dma_irq_code_game = g1_dma_has_irq_mask(); - } } irq_restore(old); @@ -1011,11 +1011,11 @@ s32 g1_ata_write_blocks(u64 block, size_t count, const u8 *buf, u8 wait_dma) { s32 g1_ata_read_lba_dma_part(u64 sector, size_t bytes, u8 *buf) { - LOGF("G1_ATA_PART: b=%d a=%d", bytes, g1_dma_part_avail); + DBGF("G1_ATA_PART: bytes=%d avail=%d", bytes, g1_dma_part_avail); if (g1_dma_part_avail > 0) { - LOGF(" continue\n"); g1_dma_part_avail -= bytes; + DBGF(" continue avail=%d\n", g1_dma_part_avail); g1_dma_start((u32)buf, bytes); return 0; } @@ -1036,7 +1036,7 @@ s32 g1_ata_read_lba_dma_part(u64 sector, size_t bytes, u8 *buf) { req.lba = sector; req.async = 1; - LOGF(" read c=%d a=%d\n", req.count, g1_dma_part_avail); + DBGF(" read count=%d avail=%d\n", req.count, g1_dma_part_avail); return g1_ata_access(&req); } diff --git a/firmware/isoldr/loader/fs/fat/fs.c b/firmware/isoldr/loader/fs/fat/fs.c index 82611cd6..2cf5c7f9 100644 --- a/firmware/isoldr/loader/fs/fat/fs.c +++ b/firmware/isoldr/loader/fs/fat/fs.c @@ -288,7 +288,8 @@ int read_async(int fd, void *ptr, unsigned int size, fs_callback_f *cb) { if(file->poll_cb) { LOGFF("WARNING, aborting async for fd %d\n", fd); - abort_async(fd); + // abort_async(fd); + file->state = FILE_STATE_USED; } if (fs_dma_enabled() == FS_DMA_DISABLED) { diff --git a/firmware/isoldr/loader/include/reader.h b/firmware/isoldr/loader/include/reader.h index 92aa0da2..5d843c5e 100644 --- a/firmware/isoldr/loader/include/reader.h +++ b/firmware/isoldr/loader/include/reader.h @@ -9,7 +9,7 @@ int InitReader(); int ReadSectors(uint8 *buf, int sec, int num, fs_callback_f *cb); -int PreReadSectors(int sec, int num); +int PreReadSectors(int sec, int num, int seek_only); void switch_gdi_data_track(uint32 lba, gd_state_t *GDS); diff --git a/firmware/isoldr/loader/reader.c b/firmware/isoldr/loader/reader.c index 81ead995..bec6651d 100644 --- a/firmware/isoldr/loader/reader.c +++ b/firmware/isoldr/loader/reader.c @@ -308,7 +308,7 @@ int ReadSectors(uint8 *buf, int sec, int num, fs_callback_f *cb) { } -int PreReadSectors(int sec, int num) { +int PreReadSectors(int sec, int num, int seek_only) { DBGFF("%d from %d\n", num, sec); @@ -324,8 +324,10 @@ int PreReadSectors(int sec, int num) { lseek(iso_fd, (sec - lba) * IsoInfo->sector_size, SEEK_SET); - if(pre_read(iso_fd, num * IsoInfo->sector_size) < 0) { - return FAILED; + if(seek_only == 0) { + if(pre_read(iso_fd, num * IsoInfo->sector_size) < 0) { + return FAILED; + } } return PROCESSING; } @@ -335,9 +337,8 @@ static int _read_sector_by_sector(uint8 *buff, uint cnt, int old_dma) { while(cnt-- > 0) { - if(b_seek) { - lseek(iso_fd, b_seek, SEEK_CUR); - } + lseek(iso_fd, b_seek, SEEK_CUR); + #if defined(DEV_TYPE_IDE) || defined(DEV_TYPE_GD) if(!cnt && old_dma) { fs_enable_dma(old_dma); @@ -364,9 +365,7 @@ static int read_data_sectors(uint8 *buff, uint sector, uint cnt, fs_callback_f * int old_dma = 0; uint8 *tmpb; - if(sector) { - lseek(iso_fd, IsoInfo->track_offset + (sector * IsoInfo->sector_size), SEEK_SET); - } + lseek(iso_fd, IsoInfo->track_offset + (sector * IsoInfo->sector_size), SEEK_SET); /* Reading normal data sectors */ if(IsoInfo->sector_size <= sec_size) { @@ -395,10 +394,9 @@ static int read_data_sectors(uint8 *buff, uint sector, uint cnt, fs_callback_f * if(old_dma) { fs_enable_dma(FS_DMA_HIDDEN); } - - // if(mmu_enabled()) { - // return _read_sector_by_sector(buff, cnt, sec_size, old_dma); - // } + if(old_dma == FS_DMA_STREAM) { + return _read_sector_by_sector(buff, cnt, old_dma); + } #endif while(cnt > 2) { diff --git a/firmware/isoldr/loader/syscalls.c b/firmware/isoldr/loader/syscalls.c index 430ecaa0..c9679161 100644 --- a/firmware/isoldr/loader/syscalls.c +++ b/firmware/isoldr/loader/syscalls.c @@ -386,6 +386,9 @@ static void abort_data_cmd() { gd_state_t *GDS = get_GDS(); LOGFF(NULL); + if(fs_dma_enabled() == FS_DMA_STREAM) { + fs_enable_dma(FS_DMA_SHARED); + } abort_async(iso_fd); GDS->ata_status = CMD_WAIT_IRQ; @@ -394,9 +397,12 @@ static void abort_data_cmd() { } pre_read_xfer_end(); - GDS->transfered = 0; - GDS->status = CMD_STAT_IDLE; - GDS->ata_status = CMD_WAIT_INTERNAL; + + if(GDS->cmd_abort) { + GDS->transfered = 0; + GDS->status = CMD_STAT_IDLE; + GDS->ata_status = CMD_WAIT_INTERNAL; + } } static void data_transfer_cb(size_t size) { @@ -583,9 +589,15 @@ void data_transfer() { static void data_transfer_dma_stream() { gd_state_t *GDS = get_GDS(); - fs_enable_dma(FS_DMA_SHARED); + const int without_pre_read = 0; // TODO - GDS->status = PreReadSectors(GDS->param[0], GDS->param[1]); + if(without_pre_read) { + fs_enable_dma(FS_DMA_STREAM); + } else { + fs_enable_dma(FS_DMA_SHARED); + } + + GDS->status = PreReadSectors(GDS->param[0], GDS->param[1], without_pre_read); if(GDS->status != CMD_STAT_PROCESSING) { GDS->drv_stat = CD_STATUS_PAUSED; @@ -599,17 +611,21 @@ static void data_transfer_dma_stream() { gdcExitToGame(); - if (pre_read_xfer_busy()) { + if(pre_read_xfer_busy()) { GDS->transfered = pre_read_xfer_size(); } + else if(pre_read_xfer_done() || without_pre_read) { - if(pre_read_xfer_done()) { - - pre_read_xfer_end(); + if(!without_pre_read) { + pre_read_xfer_end(); + } GDS->transfered = pre_read_xfer_size(); GDS->ata_status = CMD_WAIT_INTERNAL; if(GDS->requested == 0) { + if(without_pre_read) { + abort_data_cmd(); + } GDS->status = CMD_STAT_COMPLETED; break; } @@ -627,9 +643,10 @@ static void data_transfer_dma_stream() { static void data_transfer_pio_stream() { gd_state_t *GDS = get_GDS(); - fs_enable_dma(FS_DMA_DISABLED); + const int without_pre_read = 0; // TODO - GDS->status = PreReadSectors(GDS->param[0], GDS->param[1]); + fs_enable_dma(FS_DMA_DISABLED); + GDS->status = PreReadSectors(GDS->param[0], GDS->param[1], without_pre_read); if(GDS->status != CMD_STAT_PROCESSING) { GDS->drv_stat = CD_STATUS_PAUSED; @@ -643,7 +660,11 @@ static void data_transfer_pio_stream() { if(GDS->param[2] != 0) { - pre_read_xfer_start(GDS->param[2], GDS->param[1]); + if(without_pre_read) { + read(iso_fd, (uint8 *)GDS->param[2], GDS->param[1]); + } else { + pre_read_xfer_start(GDS->param[2], GDS->param[1]); + } GDS->ata_status = CMD_WAIT_IRQ; GDS->transfered += GDS->param[1]; @@ -656,11 +677,16 @@ static void data_transfer_pio_stream() { } } - if(pre_read_xfer_done()) { + if(pre_read_xfer_done() || without_pre_read) { - pre_read_xfer_end(); + if(!without_pre_read) { + pre_read_xfer_end(); + } if(GDS->requested == 0) { + if(without_pre_read) { + abort_data_cmd(); + } GDS->ata_status = CMD_WAIT_INTERNAL; GDS->status = CMD_STAT_COMPLETED; break; @@ -1213,9 +1239,25 @@ int gdcReqDmaTrans(int gd_chn, int *dmabuf) { stat_name[GDS->status + 1], GDS->requested, dmabuf[1]); return -1; } - GDS->requested -= dmabuf[1]; - pre_read_xfer_start(dmabuf[0], dmabuf[1]); + + if(fs_dma_enabled() == FS_DMA_STREAM) { +#ifdef _FS_ASYNC + if(read_async(iso_fd, (uint8 *)dmabuf[0], dmabuf[1], data_transfer_cb) < 0) { + return -1; + } + if(!exception_inited() && (dmabuf[1] % 512)) { + do {} while(pre_read_xfer_busy()); + poll(iso_fd); + } +#else + if(read(iso_fd, (uint8 *)dmabuf[0], dmabuf[1]) < 0) { + return -1; + } +#endif + } else { + pre_read_xfer_start(dmabuf[0], dmabuf[1]); + } return 0; } @@ -1240,7 +1282,11 @@ int gdcCheckDmaTrans(int gd_chn, int *size) { LOGF("ERROR: status = %s\n", stat_name[GDS->status + 1]); return -1; } - +#ifdef _FS_ASYNC + if(fs_dma_enabled() == FS_DMA_STREAM && !exception_inited()) { + poll(iso_fd); + } +#endif if(pre_read_xfer_busy()) { *size = pre_read_xfer_size(); return 1; @@ -1257,7 +1303,7 @@ int gdcCheckDmaTrans(int gd_chn, int *size) { void gdcG1DmaEnd(uint32 func, uint32 param) { #ifdef LOG - if (func) { + if(func) { LOGFF("%08lx %08lx\n", func, param); } #endif @@ -1460,18 +1506,17 @@ int flashrom_delete(int offset) { * Sysinfo syscalls */ int sys_misc_init(void) { - uint8 *src, *dst = (uint8 *)NONCACHED_ADDR(SYSCALLS_INFO_SYS_ID_ADDR); + uint8 *src, *dst = (uint8 *)CACHED_ADDR(SYSCALLS_INFO_SYS_ID_ADDR); LOGFF(NULL); memset(dst, 0, 32 - 8); src = (uint8 *)NONCACHED_ADDR(FLASH_ROM_SYS_ID_ADDR); - dst = (uint8 *)NONCACHED_ADDR(SYSCALLS_INFO_SYS_ID_ADDR); + dst = (uint8 *)CACHED_ADDR(SYSCALLS_INFO_SYS_ID_ADDR); rom_memcpy(dst, src, 8); setup_region(); - dst = (uint8 *)NONCACHED_ADDR(SYSCALLS_INFO_SYS_ID_ADDR - 8); - dcache_flush_range((uint32)dst, 32); + dcache_flush_range(CACHED_ADDR(SYSCALLS_INFO_SYS_ID_ADDR - 8), 32); return 0; } diff --git a/firmware/isoldr/loader/utils.c b/firmware/isoldr/loader/utils.c index 185852ed..469592f6 100644 --- a/firmware/isoldr/loader/utils.c +++ b/firmware/isoldr/loader/utils.c @@ -746,7 +746,9 @@ static int PutLog(char *buff) { #elif defined(DEV_TYPE_DCL) || defined(LOG_DCL) dcload_write_buffer((uint8 *)buff, len); #else - scif_write_buffer((uint8 *)buff, len, 1); + if(!exception_inside_int() || IsoInfo->exec.type != BIN_TYPE_WINCE) { + scif_write_buffer((uint8 *)buff, len, 1); + } #endif return len; } From a6dd64c3b864a31eae577f32104ee0f1fafc85f5 Mon Sep 17 00:00:00 2001 From: DC-SWAT Date: Wed, 13 Mar 2024 23:15:54 +0700 Subject: [PATCH 015/148] [fw-boot] Fixed binary name for CDI image. --- firmware/bootloader/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/bootloader/Makefile b/firmware/bootloader/Makefile index 92dbd946..4985735c 100644 --- a/firmware/bootloader/Makefile +++ b/firmware/bootloader/Makefile @@ -6,7 +6,7 @@ TARGET = bootloader VERSION = 2.6 TARGET_NAME = DreamShell_$(TARGET)_v$(VERSION) -TARGET_CD = cd/1DS_BOOT.BIN +TARGET_CD = cd/1DS_CORE.BIN KOS_ROMDISK_DIR = romdisk all: rm-elf $(TARGET).elf From 4cad738bcf77609fbf3f0d52d25355bfa9082510 Mon Sep 17 00:00:00 2001 From: DC-SWAT Date: Wed, 13 Mar 2024 23:17:29 +0700 Subject: [PATCH 016/148] [module-isoldr] Added new parameter - alternative reading. --- include/isoldr.h | 3 ++- modules/isoldr/module.c | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/include/isoldr.h b/include/isoldr.h index d8557b24..100354f6 100644 --- a/include/isoldr.h +++ b/include/isoldr.h @@ -169,8 +169,9 @@ typedef struct isoldr_info { uint32 syscalls; /* Memory address for syscalls binary or 1 for auto load. */ uint32 scr_hotkey; /* Creating screenshots by hotkey (zero for disabled). */ uint32 bleem; /* Memory address for Bleem! binary or 1 for auto load. */ + uint32 alt_read; /* Use alternative reading without aborting. */ - uint32 cdda_offset[44]; /* CDDA tracks offset, only for CDI images */ + uint32 cdda_offset[43]; /* CDDA tracks offset, only for CDI images */ } isoldr_info_t; diff --git a/modules/isoldr/module.c b/modules/isoldr/module.c index 9e55fd5a..dbb5b430 100644 --- a/modules/isoldr/module.c +++ b/modules/isoldr/module.c @@ -633,7 +633,7 @@ int builtin_isoldr_cmd(int argc, char *argv[]) { uint32 emu_async = 0, emu_cdda = 0, boot_mode = BOOT_MODE_DIRECT; uint32 bin_type = BIN_TYPE_AUTO, fast_boot = 0, verbose = 0; uint32 cdda_mode = CDDA_MODE_DISABLED, use_irq = 0, emu_vmu = 0; - uint32 low_level = 0, scr_hotkey = 0, bleem = 0; + uint32 low_level = 0, scr_hotkey = 0, bleem = 0, alt_read = 0; int fspart = -1; isoldr_info_t *info; @@ -659,6 +659,7 @@ int builtin_isoldr_cmd(int argc, char *argv[]) { {"low", 'l', NULL, CFG_BOOL, (void *) &low_level, 0}, {"scrhot", 'k', NULL, CFG_ULONG, (void *) &scr_hotkey, 0}, {"bleem", 'u', NULL, CFG_ULONG, (void *) &bleem, 0}, + {"altrd", 'y', NULL, CFG_BOOL, (void *) &alt_read, 0}, {"pa1", '\0', NULL, CFG_ULONG, (void *) &p_addr[0], 0}, {"pa2", '\0', NULL, CFG_ULONG, (void *) &p_addr[1], 0}, {"pv1", '\0', NULL, CFG_ULONG, (void *) &p_value[0], 0}, @@ -730,6 +731,7 @@ int builtin_isoldr_cmd(int argc, char *argv[]) { info->syscalls = low_level; info->scr_hotkey = scr_hotkey; info->bleem = bleem; + info->alt_read = alt_read; if (cdda_mode > CDDA_MODE_DISABLED) { info->emu_cdda = cdda_mode; From b9e89c7fd9aa3ec31946270eb3f2f29b5b5b2f9c Mon Sep 17 00:00:00 2001 From: DC-SWAT Date: Thu, 14 Mar 2024 15:34:48 +0700 Subject: [PATCH 017/148] [fw-isoldr] Fixed alternative reading for PIO streams. Also use new parameter. --- firmware/isoldr/loader/syscalls.c | 32 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/firmware/isoldr/loader/syscalls.c b/firmware/isoldr/loader/syscalls.c index c9679161..41d92dde 100644 --- a/firmware/isoldr/loader/syscalls.c +++ b/firmware/isoldr/loader/syscalls.c @@ -589,15 +589,15 @@ void data_transfer() { static void data_transfer_dma_stream() { gd_state_t *GDS = get_GDS(); - const int without_pre_read = 0; // TODO + const int alt_read = IsoInfo->alt_read; - if(without_pre_read) { + if(alt_read) { fs_enable_dma(FS_DMA_STREAM); } else { fs_enable_dma(FS_DMA_SHARED); } - GDS->status = PreReadSectors(GDS->param[0], GDS->param[1], without_pre_read); + GDS->status = PreReadSectors(GDS->param[0], GDS->param[1], alt_read); if(GDS->status != CMD_STAT_PROCESSING) { GDS->drv_stat = CD_STATUS_PAUSED; @@ -614,16 +614,16 @@ static void data_transfer_dma_stream() { if(pre_read_xfer_busy()) { GDS->transfered = pre_read_xfer_size(); } - else if(pre_read_xfer_done() || without_pre_read) { + else if(pre_read_xfer_done() || alt_read) { - if(!without_pre_read) { + if(!alt_read) { pre_read_xfer_end(); } GDS->transfered = pre_read_xfer_size(); GDS->ata_status = CMD_WAIT_INTERNAL; if(GDS->requested == 0) { - if(without_pre_read) { + if(alt_read) { abort_data_cmd(); } GDS->status = CMD_STAT_COMPLETED; @@ -643,10 +643,10 @@ static void data_transfer_dma_stream() { static void data_transfer_pio_stream() { gd_state_t *GDS = get_GDS(); - const int without_pre_read = 0; // TODO + const int alt_read = IsoInfo->alt_read; fs_enable_dma(FS_DMA_DISABLED); - GDS->status = PreReadSectors(GDS->param[0], GDS->param[1], without_pre_read); + GDS->status = PreReadSectors(GDS->param[0], GDS->param[1], alt_read); if(GDS->status != CMD_STAT_PROCESSING) { GDS->drv_stat = CD_STATUS_PAUSED; @@ -660,12 +660,15 @@ static void data_transfer_pio_stream() { if(GDS->param[2] != 0) { - if(without_pre_read) { + if(alt_read) { read(iso_fd, (uint8 *)GDS->param[2], GDS->param[1]); +#if defined(DEV_TYPE_IDE) || defined(DEV_TYPE_GD) + /* Just for ATA IRQ from NOP command. */ + g1_ata_abort(); +#endif } else { pre_read_xfer_start(GDS->param[2], GDS->param[1]); } - GDS->ata_status = CMD_WAIT_IRQ; GDS->transfered += GDS->param[1]; GDS->requested -= GDS->param[1]; @@ -677,16 +680,11 @@ static void data_transfer_pio_stream() { } } - if(pre_read_xfer_done() || without_pre_read) { + if(pre_read_xfer_done()) { - if(!without_pre_read) { - pre_read_xfer_end(); - } + pre_read_xfer_end(); if(GDS->requested == 0) { - if(without_pre_read) { - abort_data_cmd(); - } GDS->ata_status = CMD_WAIT_INTERNAL; GDS->status = CMD_STAT_COMPLETED; break; From c782588dffa590985580b0a1d219c208e568e4de Mon Sep 17 00:00:00 2001 From: DC-SWAT Date: Thu, 14 Mar 2024 18:16:55 +0700 Subject: [PATCH 018/148] [fw-boot] Separate IP.BIN for the bootloader CDI. --- firmware/bootloader/Makefile | 4 ++-- resources/IP_BOOT.BIN | Bin 0 -> 32768 bytes 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 resources/IP_BOOT.BIN diff --git a/firmware/bootloader/Makefile b/firmware/bootloader/Makefile index 4985735c..e3d6bca1 100644 --- a/firmware/bootloader/Makefile +++ b/firmware/bootloader/Makefile @@ -6,7 +6,7 @@ TARGET = bootloader VERSION = 2.6 TARGET_NAME = DreamShell_$(TARGET)_v$(VERSION) -TARGET_CD = cd/1DS_CORE.BIN +TARGET_CD = cd/1DS_BOOT.BIN KOS_ROMDISK_DIR = romdisk all: rm-elf $(TARGET).elf @@ -49,7 +49,7 @@ $(TARGET_CD): $(TARGET).bin cdi: $(TARGET_CD) @mkdir -p ./cd @$(DS_SDK)/bin/scramble $(TARGET).bin $(TARGET_CD) - @$(DS_SDK)/bin/mkisofs -V DreamShell -C 0,11702 -G $(DS_RES)/IP.BIN -joliet -rock -l -x .DS_Store -o $(TARGET).iso ./cd + @$(DS_SDK)/bin/mkisofs -V DreamShell -C 0,11702 -G $(DS_RES)/IP_BOOT.BIN -joliet -rock -l -x .DS_Store -o $(TARGET).iso ./cd @echo Convert ISO to CDI... @-rm -f $(TARGET).cdi @$(DS_SDK)/bin/cdi4dc $(TARGET).iso $(TARGET).cdi >/dev/null diff --git a/resources/IP_BOOT.BIN b/resources/IP_BOOT.BIN new file mode 100644 index 0000000000000000000000000000000000000000..f825ff2d52f1f29c07361e3b66d252389a66b66b GIT binary patch literal 32768 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 L<{0>|V&MM(TREgE literal 0 HcmV?d00001 From 3ead668d53e5dc49b74ccfbc912fa698da3ca0b2 Mon Sep 17 00:00:00 2001 From: DC-SWAT Date: Tue, 23 Apr 2024 09:34:55 +0700 Subject: [PATCH 019/148] [app-isoldr] Replaced one boot address. 0x8cfa0000 is useless, 0x8cef8000 is used for PSO. Also bump app version. --- applications/iso_loader/app.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/applications/iso_loader/app.xml b/applications/iso_loader/app.xml index 8920e888..94e335f6 100644 --- a/applications/iso_loader/app.xml +++ b/applications/iso_loader/app.xml @@ -1,5 +1,5 @@ - + @@ -366,7 +366,7 @@