├── Credits ├── Bin │ ├── Credits.bin │ ├── Credits.dol │ ├── Credits.elf │ └── Credits.map ├── boot.s ├── debug.c ├── first.lds ├── make.bat ├── old_unused │ ├── gcc-ppcopt.rtf │ └── old │ │ ├── boot.s │ │ ├── debug.c │ │ ├── debug.dol │ │ ├── debug.elf │ │ ├── debug2.dol │ │ ├── first.lds │ │ ├── make.bat │ │ └── ray.c ├── ray.c └── ray.h ├── Drivecode ├── Source │ ├── MN10200.h │ ├── PPC.h │ ├── QLite Main.asm.c │ ├── QLite.h │ ├── QLiteApploader.asm.c │ ├── QLiteBreakpoints.asm.c │ ├── QLiteDbg.asm.c │ ├── QLiteIPL.asm.c │ ├── QLiteIPLDbg.asm.c │ ├── QliteGlobal.h │ ├── old_unused │ │ └── 1.03a │ │ │ ├── MN10200.h │ │ │ ├── PPC.h │ │ │ ├── QLite Main.asm.c │ │ │ ├── QLite.h │ │ │ ├── QLiteBreakpoints.asm.c │ │ │ ├── QLiteDbg.asm.c │ │ │ ├── QLiteIPL.asm.c │ │ │ ├── QLiteIPLDbg.asm.c │ │ │ ├── QliteGlobal.h │ │ │ ├── XenoAT.bin │ │ │ ├── XenoAT.hex │ │ │ └── xdump.asm.c │ └── xdump.asm.c ├── bin │ ├── Credits.dol │ ├── Disasm │ │ ├── IPLBoot.bin │ │ ├── QLiteApploader.bin │ │ ├── disasm1.bat │ │ ├── disasm1.cmd │ │ ├── disasm2.bat │ │ ├── disasm2.cmd │ │ ├── disasm3.bat │ │ ├── disasm3.cmd │ │ ├── qcode.bin │ │ └── qcode.bin.txt │ ├── IPLBoot.bin │ ├── IPLBoot.elf │ ├── QLiteApploader.bin │ ├── QLiteApploader.dol │ ├── QLiteApploader.elf │ ├── disasm.bat │ └── qcode.bin.txt └── make.bat ├── DvdTest ├── Bin │ ├── 2dol_8130.txt │ ├── 2dol_8170.txt │ ├── DvdTest.bin │ ├── DvdTest.dol │ ├── DvdTest.elf │ ├── DvdTest.map │ ├── README.TXT │ ├── SDLOADER.BIN │ ├── SDloadLoader.dol.bak │ ├── disasm.bat │ ├── dvdtest.bin.dec.gcb │ ├── gcos.dol.lnk │ ├── go.bat │ ├── iplkey.xor │ └── stacktest.rtf ├── Drivecode.s ├── Flash.cpp ├── GCOS 1.5.patched.dol ├── GCOS_Boot.dol ├── Makefile ├── XenoGC 1.03.bin ├── XenoShell.bin ├── buttons.txt ├── card.h ├── credits.bin ├── gcos.dol ├── gctypes.h ├── main.cpp ├── make.bat ├── old_unused │ ├── main.bak │ ├── makefile.bat │ ├── mkgcos.bat │ └── old │ │ ├── main.bak │ │ ├── main.c │ │ ├── mainX.c │ │ ├── mainbak1.c │ │ └── mainbak2.c ├── qcode.bin ├── qoobDump.dol ├── sdload.dol └── xdump.cpp ├── Makefile ├── Makefile-avrdude ├── Makefile-help ├── README.md ├── XenoAT 1.05.bin ├── XenoAT.1.05.hex ├── XenoAT ├── Bin │ ├── XenoAT.1.03.v1.bin │ ├── XenoAT.1.03.v1.hex │ ├── XenoAT.1.03a.v1.bin │ ├── XenoAT.1.03a.v1.hex │ ├── XenoAT.1.03a.v2.bin │ ├── XenoAT.1.03a.v2.hex │ ├── XenoAT.bin │ ├── XenoAT.hex │ ├── XenoGC 1.01.V1.bin │ ├── XenoGC 1.01.V1.hex │ ├── XenoGC 1.01.V2.bin │ ├── XenoGC 1.01.V2.hex │ └── XenoGC 1.04.hex ├── Makefile-LINUX ├── Makefile-WIN ├── old_unused │ ├── Bin │ │ ├── XenoAT.1.03.v1.bin │ │ ├── XenoAT.1.03.v1.hex │ │ ├── XenoAT.1.03a.v2.bin │ │ ├── XenoAT.1.03a.v2.hex │ │ ├── XenoGC 1.01.V1.bin │ │ └── XenoGC 1.01.V1.hex │ ├── XenoAT.map │ ├── mkupload.bat │ ├── upload.bin.txt │ └── xxdump.c └── source │ ├── NoCredits.bin │ ├── XenoAT.c │ ├── XenoShell.bin │ ├── credits.bin │ ├── qCode.h │ ├── qcode.S │ ├── qcode.bin │ ├── sdload.bin │ ├── upload.S │ └── upload.bin ├── XenoFlash ├── Makefile ├── data │ ├── XenoAT.bin │ ├── confirmed_working_bins │ │ ├── XenoAT.1.03a.v1.bin │ │ └── XenoGC 1.01.V2.bin │ └── flashloader.bin ├── flashloader │ ├── Makefile │ ├── QLite.h │ ├── QliteGlobal.h │ ├── flashloader.S │ ├── flashloader.bin │ └── mn10200.h └── source │ ├── dvd.c │ ├── dvd.h │ ├── main.cpp │ ├── old_unused │ ├── Makefile-gekko │ └── first.lds │ ├── title.bmp │ └── title_bmp.h ├── XenoGlobal.h ├── XenoShell ├── Makefile-LINUX ├── Makefile-WIN ├── old_unused │ └── xxdump.c └── source │ ├── boot.s │ ├── first.lds │ ├── main.c │ └── main.h └── xenoflash.1.05.dol /Credits/Bin/Credits.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/Credits/Bin/Credits.bin -------------------------------------------------------------------------------- /Credits/Bin/Credits.dol: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/Credits/Bin/Credits.dol -------------------------------------------------------------------------------- /Credits/Bin/Credits.elf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/Credits/Bin/Credits.elf -------------------------------------------------------------------------------- /Credits/Bin/Credits.map: -------------------------------------------------------------------------------- 1 | 2 | Allocating common symbols 3 | Common symbol size file 4 | 5 | planedyn 0x48 d:\temp/ccC6aaaa.o 6 | font_size 0x400 d:\temp/ccQzbaaa.o 7 | font_height 0x4 d:\temp/ccQzbaaa.o 8 | font_offset 0x400 d:\temp/ccQzbaaa.o 9 | 10 | Memory Configuration 11 | 12 | Name Origin Length Attributes 13 | *default* 0x00000000 0xffffffff 14 | 15 | Linker script and memory map 16 | 17 | 0x81700000 . = 0x81700000 18 | 19 | .text 0x81700000 0x1038 20 | *(.text) 21 | .text 0x81700000 0x16 d:\temp/ccoDaaaa.o 22 | 0x81700004 szDriveVer 23 | 0x81700000 _start 24 | *fill* 0x81700016 0x2 00 25 | .text 0x81700018 0x864 d:\temp/ccC6aaaa.o 26 | 0x81700698 tracePixel 27 | 0x81700834 cross 28 | .text 0x8170087c 0x7bc d:\temp/ccQzbaaa.o 29 | 0x81700a54 main 30 | 31 | .data 0x81701038 0x84 32 | *(.data) 33 | .data 0x81701038 0x84 d:\temp/ccC6aaaa.o 34 | 0x81701038 vCamPos 35 | 0x81701044 plane 36 | 0x8170108c sphere 37 | 38 | .sdata 0x817010bc 0x14 39 | *(.sdata) 40 | .sdata 0x817010bc 0x8 d:\temp/ccC6aaaa.o 41 | 0x817010bc planes 42 | 0x817010c0 spheres 43 | .sdata 0x817010c4 0xc d:\temp/ccQzbaaa.o 44 | 0x817010c4 fb 45 | 0x817010c8 bg 46 | 0x817010cc ebase 47 | 48 | .rodata 0x817010d0 0x48 49 | *(.rodata) 50 | .rodata 0x817010d0 0x48 d:\temp/ccQzbaaa.o 51 | 0x817010d0 szCredits1 52 | 0x817010f4 szXeno 53 | 0x81701104 szNTSC10 54 | 55 | .rodata.cst4 0x81701118 0x40 56 | .rodata.cst4 0x81701118 0x38 d:\temp/ccC6aaaa.o 57 | 0x4c (size before relaxing) 58 | .rodata.cst4 0x81701150 0x8 d:\temp/ccQzbaaa.o 59 | 60 | .rodata.cst8 0x81701158 0x28 61 | .rodata.cst8 0x81701158 0x20 d:\temp/ccC6aaaa.o 62 | 0x30 (size before relaxing) 63 | .rodata.cst8 0x81701178 0x8 d:\temp/ccQzbaaa.o 64 | 0x10 (size before relaxing) 65 | 0x81701180 __bss_start = . 66 | 67 | .bss 0x81701180 0x848 68 | *(.bss) 69 | COMMON 0x81701180 0x48 d:\temp/ccC6aaaa.o 70 | 0x0 (size before relaxing) 71 | 0x81701180 planedyn 72 | COMMON 0x817011c8 0x800 d:\temp/ccQzbaaa.o 73 | 0x0 (size before relaxing) 74 | 0x817011c8 font_size 75 | 0x817015c8 font_offset 76 | 77 | .sbss 0x817019c8 0x4 78 | *(.sbss) 79 | .sbss 0x817019c8 0x4 d:\temp/ccQzbaaa.o 80 | 0x0 (size before relaxing) 81 | 0x817019c8 font_height 82 | 83 | .rela.dyn 84 | 0x817019cc __bss_end = . 85 | 0x817019cc _end = . 86 | LOAD d:\temp/ccoDaaaa.o 87 | LOAD d:\temp/ccC6aaaa.o 88 | LOAD d:\temp/ccQzbaaa.o 89 | OUTPUT(Bin/Credits.elf elf32-powerpc) 90 | -------------------------------------------------------------------------------- /Credits/boot.s: -------------------------------------------------------------------------------- 1 | 2 | 3 | .global _start 4 | .global main 5 | 6 | .global szDriveVer 7 | 8 | .global szIPL 9 | .global szNTSC10 10 | .global szXeno 11 | 12 | _start: 13 | 14 | b main 15 | szDriveVer: .string " Drive Version X"; 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /Credits/debug.c: -------------------------------------------------------------------------------- 1 | 2 | #include "Ray.h" 3 | 4 | 5 | 6 | int font_offset[256], font_size[256], font_height; 7 | 8 | volatile u32* ebase = (u32*) 0xCC006800; 9 | 10 | u8 *bg = (u8*) (MEM_BACKGROUND); 11 | u32 *fb = (u32*) (MEM_FB2 + YBORDEROFFSET); 12 | 13 | 14 | 15 | static inline void exi_select(void) 16 | { 17 | EXI_SR |= 0x150; 18 | } 19 | 20 | static inline void exi_deselect(void) 21 | { 22 | EXI_SR &= ~0x100; 23 | } 24 | 25 | static inline void exi_write_word(unsigned long word) 26 | { 27 | EXI_DATA = word; 28 | EXI_CR = 0x35; 29 | EXI_WAIT_EOT; 30 | } 31 | 32 | static inline void exi_read(unsigned char *dst, int len) 33 | { 34 | while (len) 35 | { 36 | int l = len; 37 | if (l > 4) 38 | l = 4; 39 | EXI_DATA = 0; 40 | EXI_CR = 0x31; 41 | EXI_WAIT_EOT; 42 | *(unsigned long*)dst = EXI_DATA; 43 | dst += 4; 44 | len -= l; 45 | } 46 | } 47 | 48 | 49 | static void ipl_read(unsigned char *dst, int address, int len) 50 | { 51 | while (len) { 52 | exi_select(); 53 | exi_write_word(address << 6); 54 | exi_read(dst, 0x100); 55 | exi_deselect(); 56 | dst += 0x100; 57 | address += 0x100; 58 | len -= 0x100; 59 | } 60 | } 61 | 62 | static void ipl_set_config(void) 63 | { 64 | exi_select(); 65 | exi_write_word(0xc0000000); 66 | exi_write_word(2 << 24); 67 | exi_deselect(); 68 | } 69 | 70 | 71 | static inline void untile(unsigned char *dst, unsigned char *src, int xres, int yres) 72 | { 73 | // 8x8 tiles 74 | int x, y; 75 | int t=0; 76 | for (y = 0; y < yres; y += 8) 77 | for (x = 0; x < xres; x += 8) 78 | { 79 | t = !t; 80 | int iy, ix; 81 | for (iy = 0; iy < 8; ++iy, src+=2) 82 | { 83 | unsigned char *d = dst + (y + iy) * xres + x; 84 | for (ix = 0; ix < 2; ++ix) 85 | { 86 | int v = src[ix]; 87 | *d++ = ((v>>6)&3); 88 | *d++ = ((v>>4)&3); 89 | *d++ = ((v>>2)&3); 90 | *d++ = ((v)&3); 91 | } 92 | } 93 | } 94 | } 95 | 96 | 97 | /* Yay0 decompression */ 98 | static void yay0_decode(void *s, void *d) 99 | { 100 | int i, j, k, p, q, cnt; 101 | 102 | i = *(unsigned long *)(s + 4); // size of decoded data 103 | j = *(unsigned long *)(s + 8); // link table 104 | k = *(unsigned long *)(s + 12); // byte chunks and count modifiers 105 | 106 | q = 0; // current offset in dest buffer 107 | cnt = 0; // mask bit counter 108 | p = 16; // current offset in mask table 109 | 110 | unsigned long r22 = 0, r5; 111 | 112 | do 113 | { 114 | // if all bits are done, get next mask 115 | if(cnt == 0) 116 | { 117 | // read word from mask data block 118 | r22 = *(unsigned long *)(s + p); 119 | p += 4; 120 | cnt = 32; // bit counter 121 | } 122 | // if next bit is set, chunk is non-linked 123 | if(r22 & 0x80000000) 124 | { 125 | // get next byte 126 | *(unsigned char *)(d + q) = *(unsigned char *)(s + k); 127 | k++, q++; 128 | } 129 | // do copy, otherwise 130 | else 131 | { 132 | // read 16-bit from link table 133 | int r26 = *(unsigned short *)(s + j); 134 | j += 2; 135 | // 'offset' 136 | int r25 = q - (r26 & 0xfff); 137 | // 'count' 138 | int r30 = r26 >> 12; 139 | if(r30 == 0) 140 | { 141 | // get 'count' modifier 142 | r5 = *(unsigned char *)(s + k); 143 | k++; 144 | r30 = r5 + 18; 145 | } 146 | else r30 += 2; 147 | // do block copy 148 | unsigned char *pt = ((unsigned char*)d) + r25; 149 | int i; 150 | for(i=0; ioffset_tile), fnt->texture_width, fnt->texture_height); 184 | 185 | int i; 186 | for (i=0; i<256; ++i) { 187 | int c = i; 188 | if ((c < fnt->first_char) || (c > fnt->last_char)) { 189 | c = fnt->subst_char; 190 | } 191 | // else { 192 | c -= fnt->first_char; 193 | // } 194 | font_size[i] = ((unsigned char*)fnt)[fnt->offset_charwidth + c]; 195 | 196 | int r = c / fnt->texture_columns; 197 | c %= fnt->texture_columns; 198 | 199 | font_offset[i] = (r * fnt->cell_height) * fnt->texture_width + (c * fnt->cell_width); 200 | } 201 | 202 | font_height = fnt->cell_height; 203 | } 204 | 205 | static void blit_char(u8 x, u8 y, unsigned char c) 206 | { 207 | unsigned char *fnt = ((unsigned char*)MEM_FONT) + font_offset[c]; 208 | int ay, ax; 209 | for (ay=0; ay VIDFRAMES) { 370 | 371 | nMove = -nMove; 372 | 373 | if(nMove < 0) { 374 | fSpherePos = SPHERE_XRIGHT; 375 | } 376 | else { 377 | fSpherePos = SPHERE_XLEFT; 378 | u16* pVideoBuffer = (u16*) (MEM_VIDEO - CAPSIZE*2); 379 | } 380 | 381 | for(nPlayFrame = 0; nPlayFrame < VIDFRAMES; nPlayFrame++) { 382 | pVideoBuffer += nMove; 383 | memcpy32(fb + (CAPSTART/2), (u32*) pVideoBuffer , CAPSIZE*2); 384 | u32 dwDelay = 0x1000000; 385 | while(dwDelay--); 386 | } 387 | } 388 | 389 | szCredits = (char*) szXeno; 390 | break; 391 | case 1: 392 | szCredits = (char*) szIPLRevString; 393 | break; 394 | case 2: 395 | szCredits = (char*) szDriveVer; 396 | break; 397 | case 3: 398 | szCredits = (char*) szCredits1; 399 | break; 400 | } 401 | 402 | nCredits++; 403 | nCredits &= 3; 404 | 405 | printplane(szCredits); 406 | 407 | // reset to visible pos 408 | sphere[0].center.x = fSpherePos; 409 | 410 | for (r=0; r < 0x40000; ++r) { 411 | int ax = dwLFSR % 320; 412 | int ay = ((dwLFSR / 320) % 512); 413 | fb[(ay * 320) + ax] = (tracePixel(ax*2, ay, ANTIALIAS) << 16) | tracePixel(ax*2 + 1, ay, ANTIALIAS); 414 | 415 | dwLFSR <<= 1; 416 | dwLFSR |= (!!(dwLFSR & (1<<11))) ^ (!!(dwLFSR & (1<<18))); 417 | dwLFSR &= (1<<18)-1; 418 | } 419 | } 420 | 421 | if(nFrame <= VIDFRAMES) { 422 | //--------------------------------------------- 423 | // precalculate one animation frame 424 | //--------------------------------------------- 425 | clearBG(); 426 | printplane(szCredits1); 427 | 428 | sphere[0].center.x = SPHERE_XRIGHT - ((float) nFrame * (float) SPHERE_XSPEED); 429 | 430 | pVideoBuffer += CAPSIZE; 431 | 432 | for (nY = 0; nY < CAPSIZEY; nY++) { 433 | for (nX = 0; nX < 640; nX++) { 434 | pVideoBuffer[(nY * 640) + nX] = tracePixel(nX, nY + CAPSTARTY, ANTIALIAS); 435 | } 436 | } 437 | } 438 | 439 | nFrame++; 440 | 441 | #ifdef DBGKEY 442 | asm("lis 3, 0xCC00"); 443 | asm("lhz 4, 0x6404(3)"); 444 | asm("lwz 5, 0x6408(3)"); 445 | 446 | asm("andi. 5, 4, 0xf7f"); 447 | asm("beq 1f"); 448 | asm("lis 4, 0x8140"); 449 | asm("mtlr 4"); 450 | asm("blrl"); 451 | asm("1:"); 452 | #endif 453 | } 454 | } 455 | 456 | 457 | #else 458 | int main(void) 459 | { 460 | return 0; 461 | } 462 | #endif 463 | 464 | 465 | -------------------------------------------------------------------------------- /Credits/first.lds: -------------------------------------------------------------------------------- 1 | 2 | 3 | ENTRY(_start) 4 | SECTIONS 5 | { 6 | . = 0x81700000; 7 | .text : { *(.text) } 8 | .data : { *(.data) } 9 | .sdata : { *(.sdata) } 10 | .rodata : { *(.rodata)} 11 | __bss_start = .; 12 | .bss : { *(.bss) } 13 | .sbss : { *(.sbss) } 14 | __bss_end = .; 15 | _end = .; 16 | } 17 | 18 | -------------------------------------------------------------------------------- /Credits/make.bat: -------------------------------------------------------------------------------- 1 | cls 2 | @ECHO OFF 3 | call gctools.bat 4 | 5 | SETLOCAL 6 | 7 | ::======================================== 8 | :: Setup devkitcube Variables 9 | ::======================================== 10 | SET DEVKITCUBE=%GCTOOLSDIR%\dev\DevkitCube 11 | SET PATH=%DEVKITCUBE%\bin;%PATH%; 12 | 13 | ::======================================== 14 | :: Setup GcLib Variables 15 | ::======================================== 16 | SET GCLIBDIR=%GCTOOLSDIR%\dev\source\GcLib 17 | SET PROGNAME=Credits 18 | SET BINDIR=Bin 19 | 20 | 21 | ::======================================== 22 | :: del temp files 23 | ::======================================== 24 | 25 | ::======================================== 26 | :: compile 27 | ::======================================== 28 | 29 | echo. 30 | echo Compiling... 31 | echo . 32 | echo . 33 | echo . 34 | 35 | SET GC_IMAGEBASE=0x81200000 36 | :: SET GC_IMAGEBASE=0x81300000 37 | 38 | 39 | powerpc-gekko-gcc-3.4.4 -nostdlib -pipe -Wl,-s,-x,--gc-sections -fno-exceptions -mhard-float -Os -Wl,-T,first.lds -Wl,-Map,Bin/%PROGNAME%.map boot.s ray.c debug.c -o %BINDIR%/%PROGNAME%.elf 40 | if ERRORLEVEL==1 goto Error 41 | powerpc-gekko-objcopy -O binary %BINDIR%/%PROGNAME%.elf %BINDIR%/%PROGNAME%.bin 42 | if ERRORLEVEL==1 goto Error 43 | 44 | echo . 45 | echo . 46 | echo . 47 | echo Success ! 48 | 49 | :: -Wl,--strip-all -Wl,--gc-sections -Wl,--discard-all 50 | 51 | ::======================================== 52 | :: DOL from ELF 53 | ::======================================== 54 | echo. 55 | 56 | cd %BINDIR% 57 | :: ngc_objcopy -O binary %PROGNAME%.elf %PROGNAME%.bin 58 | :: if ERRORLEVEL==1 goto Error 59 | 60 | doltool -d %PROGNAME%.elf 61 | if ERRORLEVEL==1 goto Error 62 | 63 | @copy credits.bin ..\..\DvdTest\credits.bin 64 | @copy credits.bin ..\..\XenoAT\credits.bin 65 | @size %PROGNAME%.elf 66 | :: dir /s /b credits.bin > dir.txt 67 | :: type dir.txt 68 | 69 | cd.. 70 | goto End 71 | 72 | ::======================================== 73 | :: Error -> delete previous DOL file 74 | ::======================================== 75 | :Error 76 | echo. 77 | echo. 78 | echo [ERROR] 79 | :: del /Q %PROGNAME%.dol 80 | goto ErrorEnd 81 | 82 | 83 | :End 84 | 85 | ::======================================== 86 | :: Delete tmp files 87 | ::======================================== 88 | cd %BINDIR% 89 | :: del /Q %PROGNAME%.elf 90 | :: del /Q %PROGNAME%.bin 91 | cd.. 92 | 93 | ENDLOCAL 94 | :ErrorEnd 95 | 96 | -------------------------------------------------------------------------------- /Credits/old_unused/gcc-ppcopt.rtf: -------------------------------------------------------------------------------- 1 | 2 | Target specific options: 3 | -mnewlib no description yet 4 | -m32 Generate 32-bit code 5 | -m64 Generate 64-bit code 6 | -mshlib no description yet 7 | -mwindiss Use the WindISS simulator 8 | -memb Set the PPC_EMB bit in the ELF flags header 9 | -mmvme Link with libmvme.a, libc.a and crt0.o 10 | -myellowknife Link with libyk.a, libc.a and crt0.o 11 | -mads Link with libads.a, libc.a and crt0.o 12 | -msim Link with libsim.a, libc.a and sim-crt0.o 13 | -mno-sdata no description yet 14 | -msdata no description yet 15 | -mno-regnames Don't use alternate register names 16 | -mregnames Use alternate register names 17 | -mno-bit-word Do not allow bit-fields to cross word boundaries 18 | -mno-eabi Don't use EABI 19 | -meabi Use EABI 20 | -mno-traceback no description yet 21 | -mno-prototype no description yet 22 | -mprototype no description yet 23 | -mfull-toc no description yet 24 | -mtoc no description yet 25 | -mno-toc no description yet 26 | -mbig Produce big endian code 27 | -mbig-endian Produce big endian code 28 | -mlittle Produce little endian code 29 | -mlittle-endian Produce little endian code 30 | -mno-relocatable-lib Don't produce code relocatable at runtime 31 | -mrelocatable-lib Produce code relocatable at runtime 32 | -mno-relocatable Don't produce code relocatable at runtime 33 | -mrelocatable Produce code relocatable at runtime 34 | -mno-strict-align Assume that unaligned accesses are handled by the system 35 | -mstrict-align Don't assume that unaligned accesses are handled by the system 36 | -mno-bit-align Don't align to the base type of the bit-field 37 | -mbit-align Align to the base type of the bit-field 38 | -mno-mfcrf Do not generate single field mfcr instruction 39 | -mmfcrf Generate single field mfcr instruction 40 | -msvr4-struct-return Return small structures in registers (SVR4 default) 41 | -maix-struct-return Return all structures in memory (AIX default) 42 | -mno-sched-prolog Do not schedule the start and end of the procedure 43 | -mno-fused-madd Do not generate fused multiply/add instructions 44 | -mfused-madd Generate fused multiply/add instructions 45 | -mno-update Do not generate load/store with update instructions 46 | -mupdate Generate load/store with update instructions 47 | -mno-string Do not generate string instructions for block moves 48 | -mstring Generate string instructions for block moves 49 | -mno-multiple Do not generate load/store multiple instructions 50 | -mmultiple Generate load/store multiple instructions 51 | -msoft-float Do not use hardware floating point 52 | -mhard-float Use hardware floating point 53 | -mno-minimal-toc Place variable addresses in the regular TOC 54 | -mminimal-toc Use only one TOC entry per procedure 55 | -mno-sum-in-toc Do not place symbol+offset constants in TOC 56 | -msum-in-toc Place symbol+offset constants in TOC 57 | -mno-fp-in-toc Do not place floating point constants in TOC 58 | -mfp-in-toc Place floating point constants in TOC 59 | -mfull-toc Put everything in the regular TOC 60 | -mold-mnemonics Use old mnemonics for PowerPC architecture 61 | -mnew-mnemonics Use new mnemonics for PowerPC architecture 62 | -mno-altivec Do not use AltiVec instructions 63 | -maltivec Use AltiVec instructions 64 | -mno-powerpc64 Do not use PowerPC-64 instruction set 65 | -mpowerpc64 Use PowerPC-64 instruction set 66 | -mno-powerpc-gfxopt Do not use PowerPC Graphics group optional instructions 67 | -mpowerpc-gfxopt Use PowerPC Graphics group optional instructions 68 | -mno-powerpc-gpopt Do not use PowerPC General Purpose group optional instructions 69 | -mpowerpc-gpopt Use PowerPC General Purpose group optional instructions 70 | -mno-powerpc Do not use PowerPC instruction set 71 | -mpowerpc Use PowerPC instruction set 72 | -mno-power Do not use POWER instruction set 73 | -mno-power2 Do not use POWER2 instruction set 74 | -mpower2 Use POWER2 instruction set 75 | -mpower Use POWER instruction set 76 | -mtls-size= Specify bit size of immediate TLS offsets 77 | -msdata= Select method for sdata handling 78 | -mcall- Select ABI calling convention 79 | -mprioritize-restricted-insns= Specify scheduling priority for dispatch slot restricted insns 80 | -malign- Specify alignment of structure fields default/natural 81 | -minsert-sched-nops= Specify which post scheduling nop insertion scheme to apply 82 | -msched-costly-dep= Determine which dependences between insns are considered costly 83 | -mwarn-altivec-long Warn about deprecated 'vector long ...' AltiVec type usage 84 | -mlongcall Avoid all range limits on call instructions 85 | -mvrsave= Specify yes/no if VRSAVE instructions should be generated for AltiVec 86 | -mfloat-gprs= Specify yes/no if using floating point in the GPRs 87 | -mspe= Specify yes/no if SPE SIMD instructions should be generated 88 | -misel= Specify yes/no if isel instructions should be generated 89 | -mlong-double- Specify size of long double (64 or 128 bits) 90 | -mabi= Specify ABI to use 91 | -mtraceback= Select full, part, or no traceback table 92 | -mdebug= Enable debug output 93 | -mtune= Schedule code for given CPU 94 | -mcpu= Use features of and schedule code for given CPU 95 | PowerPC options: 96 | -a32 generate ELF32/XCOFF32 97 | -a64 generate ELF64/XCOFF64 98 | -u ignored 99 | -mpwrx, -mpwr2 generate code for POWER/2 (RIOS2) 100 | -mpwr generate code for POWER (RIOS1) 101 | -m601 generate code for PowerPC 601 102 | -mppc, -mppc32, -m603, -m604 103 | generate code for PowerPC 603/604 104 | -m403, -m405 generate code for PowerPC 403/405 105 | -m440 generate code for PowerPC 440 106 | -m7400, -m7410, -m7450, -m7455 107 | generate code For PowerPC 7400/7410/7450/7455 108 | -mppc64, -m620 generate code for PowerPC 620/625/630 109 | -mppc64bridge generate code for PowerPC 64, including bridge insns 110 | -mbooke64 generate code for 64-bit PowerPC BookE 111 | -mbooke, mbooke32 generate code for 32-bit PowerPC BookE 112 | -mpower4 generate code for Power4 architecture 113 | -mcom generate code Power/PowerPC common instructions 114 | -many generate code for any architecture (PWR/PWRX/PPC) 115 | -maltivec generate code for AltiVec 116 | -me500, -me500x2 generate code for Motorola e500 core complex 117 | -mspe generate code for Motorola SPE instructions 118 | -mregnames Allow symbolic names for registers 119 | -mno-regnames Do not allow symbolic names for registers 120 | -mspe generate code for Motorola SPE instructions 121 | -mgekko generate code for PowerPC Gekko 122 | -mrelocatable support for GCC's -mrelocatble option 123 | -mrelocatable-lib support for GCC's -mrelocatble-lib option 124 | -memb set PPC_EMB bit in ELF flags 125 | -mlittle, -mlittle-endian, -l, -le 126 | generate code for a little endian machine 127 | -mbig, -mbig-endian, -b, -be 128 | generate code for a big endian machine 129 | -msolaris generate code for Solaris 130 | -mno-solaris do not generate code for Solaris 131 | -V print assembler version number 132 | -Qy, -Qn ignored 133 | -------------------------------------------------------------------------------- /Credits/old_unused/old/boot.s: -------------------------------------------------------------------------------- 1 | .global _start 2 | .global main 3 | 4 | _start: 5 | b main 6 | -------------------------------------------------------------------------------- /Credits/old_unused/old/debug.dol: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/Credits/old_unused/old/debug.dol -------------------------------------------------------------------------------- /Credits/old_unused/old/debug.elf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/Credits/old_unused/old/debug.elf -------------------------------------------------------------------------------- /Credits/old_unused/old/debug2.dol: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/Credits/old_unused/old/debug2.dol -------------------------------------------------------------------------------- /Credits/old_unused/old/first.lds: -------------------------------------------------------------------------------- 1 | 2 | 3 | ENTRY(_start) 4 | SECTIONS 5 | { 6 | . = 0x80010000; 7 | .text : { *(.text) } 8 | .data : { *(.data) } 9 | .sdata : { *(.sdata) } 10 | .rodata : { *(.rodata)} 11 | __bss_start = .; 12 | .bss : { *(.bss) } 13 | .sbss : { *(.sbss) } 14 | __bss_end = .; 15 | _end = .; 16 | } 17 | 18 | -------------------------------------------------------------------------------- /Credits/old_unused/old/make.bat: -------------------------------------------------------------------------------- 1 | cls 2 | @ECHO OFF 3 | call gctools.bat 4 | 5 | SETLOCAL 6 | 7 | REM ********************************************* 8 | REM Setup devkitcube Variables 9 | REM ********************************************* 10 | SET DEVKITCUBE=%GCTOOLSDIR%\dev\DevkitCube 11 | SET PATH=%DEVKITCUBE%\bin;%PATH%; 12 | 13 | 14 | REM ********************************************* 15 | REM Setup GcLib Variables 16 | REM ********************************************* 17 | SET GCLIBDIR=%GCTOOLSDIR%\dev\source\GcLib 18 | SET PROGNAME=Credits 19 | SET BINDIR=Bin 20 | 21 | 22 | REM ********************************************* 23 | REM Delete temporary files 24 | REM ********************************************* 25 | 26 | REM ********************************************* 27 | REM Compile ! 28 | REM ********************************************* 29 | 30 | echo. 31 | echo Compiling... 32 | echo . 33 | echo . 34 | echo . 35 | 36 | SET GC_IMAGEBASE=0x81200000 37 | @REM SET GC_IMAGEBASE=0x81300000 38 | 39 | 40 | powerpc-gekko-gcc-3.4.4 -nostdlib -fno-exceptions -Os -mhard-float -Wl,--gc-sections -Wl,-T -Wl,first.lds -Wl,-Map,Bin/%PROGNAME%.map boot.s ray.c debug.c -o %BINDIR%/%PROGNAME%.elf 41 | powerpc-gekko-objcopy -O binary %BINDIR%/%PROGNAME%.elf %BINDIR%/%PROGNAME%.bin 42 | 43 | @rem bin2dol %BINDIR%/%PROGNAME%.bin %BINDIR%/%PROGNAME%2.dol >> NUL -maltivec 44 | 45 | 46 | rem powerpc-gekko-gcc -ffreestanding -Wl,--omagic -Os -nostdlib %GCLIBDIR%\crt0.s debug.c ray.c -o %BINDIR%/%PROGNAME%.elf -Wl,-T -Wl,first.lds 47 | rem powerpc-gekko-gcc -nostdlib -O2 -ffreestanding %GCLIBDIR%/crt0.sdebug.c ray.c -o %BINDIR%/%PROGNAME%.elf -Wl,-T -Wl,first.lds 48 | rem ngc_gcc -nostdlib -ffreestanding -Os debug.c ray.c -o %BINDIR%/%PROGNAME%.elf -Wl,first.lds 49 | rem -Wl,--omagic -Wl,-Ttext,0x8000 50 | rem powerpc-gekko-gcc-3.4.4 powerpc-gekko-gcc.exe powerpc-gekko-gcc.exe ngc_gcc -Wl,--omagic -ffreestanding -nostdlib -O2 -Wl,-Ttext,%GC_IMAGEBASE% -Wl,-Map,Bin/%PROGNAME%.map -I %GCLIBDIR% -o %BINDIR%/%PROGNAME%.elf ray.c debug.c 51 | rem ngc_gcc -Os -fno-exceptions -Wa,-mregnames -ffreestanding -Wl,-Ttext,%GC_IMAGEBASE% -Wl,-Map,Bin/%PROGNAME%.map -Wl,--omagic -I %GCLIBDIR% -o %BINDIR%/%PROGNAME%.elf ray.c debug.c 52 | rem ngc_gcc -O2 -fno-exceptions -ffreestanding -Wa,-mregnames -Wl,-Ttext,%GC_IMAGEBASE% -Wl,-Map,Bin/%PROGNAME%.map -Wl,--omagic -I %GCLIBDIR% -o %BINDIR%/%PROGNAME%.elf %GCLIBDIR%/cache.s %GCLIBDIR%/GC_Debug.cpp %GCLIBDIR%/GC_Video.cpp %GCLIBDIR%/GC_String.cpp %GCLIBDIR%/GC_Random.cpp %GCLIBDIR%/GC_Pad.cpp %GCLIBDIR%/GC_Dvd.cpp %GCLIBDIR%/GC_Memory.cpp %GCLIBDIR%/GC_Time.cpp %GCLIBDIR%/GC_vsprintf.cpp ray.c 53 | 54 | 55 | echo . 56 | echo . 57 | echo . 58 | 59 | REM -Wl,--strip-all -Wl,--gc-sections -Wl,--discard-all 60 | 61 | if ERRORLEVEL==1 goto Error 62 | 63 | echo Success ! 64 | 65 | REM ********************************************* 66 | REM Create DOL from ELF 67 | REM ********************************************* 68 | echo. 69 | 70 | cd %BINDIR% 71 | @REM ngc_objcopy -O binary %PROGNAME%.elf %PROGNAME%.bin 72 | @REM if ERRORLEVEL==1 goto Error 73 | 74 | 75 | doltool -d %PROGNAME%.elf 76 | if ERRORLEVEL==1 goto Error 77 | 78 | @copy credits.bin ..\..\DvdTest\credits.bin 79 | @copy credits.bin ..\..\XenoAT\credits.bin 80 | size %PROGNAME%.elf 81 | 82 | 83 | cd.. 84 | 85 | REM ********************************************* 86 | REM Done ! 87 | REM ********************************************* 88 | 89 | goto End 90 | 91 | 92 | 93 | REM ********************************************* 94 | REM Error -> delete previous DOL file 95 | REM ********************************************* 96 | :Error 97 | echo. 98 | echo. 99 | echo [ERROR] 100 | REM del /Q %PROGNAME%.dol 101 | goto ErrorEnd 102 | 103 | 104 | :End 105 | 106 | REM ********************************************* 107 | REM Delete temporary files 108 | REM ********************************************* 109 | cd %BINDIR% 110 | rem del /Q %PROGNAME%.elf 111 | rem del /Q %PROGNAME%.bin 112 | cd.. 113 | 114 | ENDLOCAL 115 | :ErrorEnd 116 | @rem pause 117 | -------------------------------------------------------------------------------- /Credits/old_unused/old/ray.c: -------------------------------------------------------------------------------- 1 | 2 | 3 | typedef unsigned long u32; 4 | typedef unsigned short u16; 5 | typedef unsigned char u8; 6 | 7 | 8 | #define XRES (640) 9 | #define YRES (576) 10 | 11 | 12 | #define INFINITE 2000 // 9999999 13 | 14 | 15 | enum eTexture { 16 | TEX_FLOOR = 0, 17 | TEX_CEILING = 1, 18 | TEX_TRANS = 3 19 | }; 20 | 21 | extern unsigned char *bg; 22 | 23 | static float inline isqrtf(float __x) 24 | { 25 | float __z; 26 | __asm __volatile ( 27 | " frsqrte %0,%1\n" 28 | : "=f" (__z) 29 | : "f" (__x)); 30 | return __z; 31 | } 32 | 33 | /* 34 | static float inline sin(float __x) 35 | { 36 | float __z; 37 | __asm __volatile ( 38 | " sine %0,%1\n" 39 | : "=f" (__z) 40 | : "f" (__x)); 41 | return __z; 42 | }*/ 43 | 44 | struct vec 45 | { 46 | float x, y, z; 47 | }; 48 | 49 | 50 | typedef struct tsphere_t 51 | { 52 | struct vec center; 53 | float r; 54 | int texture; 55 | float reflect; 56 | }sphere_t; 57 | 58 | sphere_t sphere[]={{{-5, 8, 9}, 10, 2, .92}}; 59 | //sphere_t sphere[]={{{-5, 8, 9}, 10, 2, .92}}; 60 | 61 | const u32 spheres=sizeof(sphere)/sizeof(*sphere); 62 | 63 | typedef struct tplane_t { 64 | struct vec a; 65 | int d; 66 | int texture; 67 | float reflect; 68 | // float x0, x1, y0, y1; 69 | }plane_t; 70 | 71 | const plane_t plane[]={ {{ 0, 1, 0.0}, 10, TEX_FLOOR, 0.1 }, // floor 72 | {{ 0, 1, 0.00}, 150, TEX_CEILING, 0 }, // ceiling 73 | {{ 0,-0.4, 1}, 200, TEX_FLOOR, 0 }, // back plane 74 | {{.1 , 0.4, 1}, 20, TEX_TRANS, 0 } // transparent plane 75 | }; 76 | 77 | #define TRANSPLANE_X0 -13 78 | #define TRANSPLANE_X1 12 79 | #define TRANSPLANE_Y0 -13 80 | #define TRANSPLANE_Y1 -5 81 | 82 | /* 83 | const struct plane_t 84 | { 85 | struct vec a; 86 | int d; 87 | int texture; 88 | float reflect; 89 | float x0, x1, y0, y1; 90 | } plane[]={ {{0,1,0}, 10, 1, .1}, 91 | {{0,1,0}, 150, 1, 0}, 92 | {{0,-.4,1}, 200, 0, 0}, 93 | {{.1,.4,1}, 20, 3, 0, -15, 10, -13, -5}}; 94 | 95 | */ 96 | 97 | struct plane_t_dyn 98 | { 99 | struct vec m1, m2; 100 | } planedyn[sizeof(plane)/sizeof(*plane)]; 101 | 102 | const u32 planes=sizeof(plane)/sizeof(*plane); 103 | 104 | static float MapTexture(int text, const struct vec *v); 105 | 106 | static inline void Normalize(struct vec *v) 107 | { 108 | float ilen=isqrtf(v->x*v->x+v->y*v->y+v->z*v->z); 109 | v->x*=ilen; 110 | v->y*=ilen; 111 | v->z*=ilen; 112 | } 113 | 114 | static float RayTrace(const struct vec *src, const struct vec *dst, int depth); 115 | static struct vec CalcMirror(const struct vec *nor, const struct vec *v); 116 | 117 | static void GenerateSpheres(); 118 | 119 | // float textmap[32*32]; 120 | static void GenerateTextures(); 121 | 122 | static float trace(float x, float y) 123 | { 124 | struct vec src={0, 15, -15}; 125 | struct vec v; 126 | v.x=(x)/(XRES/2); 127 | v.y=-(y)/(YRES/2); // *220.0/200.0; 128 | v.z=1; 129 | Normalize(&v); 130 | return RayTrace(&src, &v, 0); 131 | } 132 | 133 | u16 tracePixel(int x, int y, int aa) 134 | { 135 | float col = 0; 136 | int ax, ay; 137 | for (ay=0; ayx-center->x; 155 | float dy=src->y-center->y; 156 | float dz=src->z-center->z; 157 | float b=(dx*dst->x+dy*dst->y+dz*dst->z); 158 | float c=dx*dx+dy*dy+dz*dz-radrad; 159 | float dis=b*b-c; 160 | if (dis>0) 161 | return -(b)-1/isqrtf(dis); 162 | else 163 | return INFINITE; 164 | } 165 | 166 | static float tracePlane(const struct vec *src, const struct vec *dst, int yp) 167 | { 168 | return 169 | (+plane[yp].d 170 | - src->x * plane[yp].a.x - src->y * plane[yp].a.y - src->z * plane[yp].a.z 171 | ) / (dst->x * plane[yp].a.x + dst->y * plane[yp].a.y + dst->z * plane[yp].a.z); 172 | } 173 | 174 | static float RayTrace(const struct vec *src, const struct vec *dst, int depth) 175 | { 176 | if (depth>20) 177 | return 0; 178 | 179 | /* the incredible hit2 hack saves not only the first, but also the second 180 | object, allowing exactly ONE transparent object. yey. 181 | and it's buggy. wow. */ 182 | enum obj { objNone, objSphere, objPlane } hit=objNone, hit2=objNone; 183 | int hito=0, hito2; 184 | float mint=INFINITE, mint2; 185 | u32 i; 186 | for (i=0; i.01) && (t0.1) && (tx+dst->x*mint; 226 | tar.y=src->y+dst->y*mint; 227 | tar.z=src->z+dst->z*mint; 228 | 229 | 230 | switch (hit) 231 | { 232 | case objSphere: 233 | { 234 | struct vec nor; 235 | nor.x=(tar.x-sphere[hito].center.x)/sphere[hito].r; 236 | nor.y=(tar.y-sphere[hito].center.y)/sphere[hito].r; 237 | nor.z=(tar.z-sphere[hito].center.z)/sphere[hito].r; 238 | col=MapTexture(sphere[hito].texture, &nor); 239 | if (sphere[hito].reflect) 240 | { 241 | struct vec ndst=CalcMirror(&nor, dst); 242 | col=col*(1-sphere[hito].reflect)+RayTrace(&tar, &ndst, depth+1)*sphere[hito].reflect; 243 | } 244 | break; 245 | } 246 | case objPlane: 247 | { 248 | struct vec res; 249 | res.x = tar.x * planedyn[hito].m1.x + tar.y * planedyn[hito].m1.y + tar.z * planedyn[hito].m1.z; 250 | res.z = tar.x * planedyn[hito].m2.x + tar.y * planedyn[hito].m2.y + tar.z * planedyn[hito].m2.z; 251 | res.y = 1; 252 | 253 | col=MapTexture(plane[hito].texture, &res); 254 | 255 | if (plane[hito].reflect>0) 256 | { 257 | struct vec nor = plane[hito].a; 258 | struct vec ndst=CalcMirror(&nor, dst); 259 | col=col*(1-plane[hito].reflect)+RayTrace(&tar, &ndst, depth+1)*plane[hito].reflect; 260 | } 261 | 262 | if (plane[hito].texture == 3) 263 | { 264 | if ((res.x < TRANSPLANE_X0) || (res.x > TRANSPLANE_X1) || (res.z < TRANSPLANE_Y0) || (res.z > TRANSPLANE_Y1)) 265 | alphaCol = 0; 266 | else 267 | { 268 | alphaCol = .7; 269 | col2 = col; 270 | } 271 | hito = hito2; 272 | hit = hit2; 273 | mint = mint2; 274 | hito2 = objNone; 275 | goto a; 276 | } 277 | 278 | break; 279 | } 280 | default: 281 | case objNone: 282 | return 128; 283 | } 284 | 285 | return col + (col2-col) * alphaCol; 286 | } 287 | 288 | #define ABS(x) ((x < 0) ? (-x):(x)) 289 | 290 | static float MapTexture(int text, const struct vec *v) 291 | { 292 | float nZ; 293 | u8* pText1 = bg; 294 | 295 | 296 | 297 | switch (text) { 298 | case TEX_CEILING: 299 | // nZ = ABS(v->z*v->x*v->y); 300 | // return(((int) (10/isqrtf(nZ)))); 301 | // return ((bCheck * 40) +5.8 / isqrtf(nZ)) * 2; //255 - (((int) (0.68 / isqrtf(nZ*nZ*100) )) & 255); 302 | 303 | case TEX_FLOOR: 304 | return ((((int)((v->x+100)/10))&1)^(((int)((v->z+100)/10))&1)) ? 0xc0 : 0x20; 305 | } 306 | 307 | int x = (int)((v->x+15)*10)&255; 308 | int y = (int)((v->z+13)*10)&255; 309 | 310 | return pText1[y * 256 + x]; 311 | } 312 | 313 | static struct vec CalcMirror(const struct vec *nor, const struct vec *v) 314 | { 315 | float sk=-v->x*nor->x -v->y*nor->y -v->z*nor->z; 316 | struct vec l; 317 | l.x=2*(nor->x*sk)+v->x; 318 | l.y=2*(nor->y*sk)+v->y; 319 | l.z=2*(nor->z*sk)+v->z; 320 | return l; 321 | } 322 | 323 | static void cross(struct vec *v1, const struct vec *v2, const struct vec *v3) 324 | { 325 | v1->x = v2->y * v3->z - v2->z * v3->y; 326 | v1->y = v2->z * v3->x - v2->x * v3->z; 327 | v1->z = v2->x * v3->y - v2->y * v3->x; 328 | } 329 | 330 | 331 | void rayInit(void) 332 | { 333 | u32 i; 334 | for (i=0; ix*v->x+v->y*v->y+v->z*v->z); 50 | v->x*=ilen; 51 | v->y*=ilen; 52 | v->z*=ilen; 53 | } 54 | 55 | 56 | vec vCamPos = {0, 8.01, -15}; 57 | 58 | static float trace(float x, float y) 59 | { 60 | vec v; 61 | v.x = (x) / (XRES / 2); 62 | v.y = -(y) / (YRES / 2); // *220.0/200.0; 63 | v.z = 1; 64 | 65 | Normalize(&v); 66 | return RayTrace(&vCamPos, &v, 0); 67 | } 68 | 69 | u16 tracePixel(int x, int y, int aa) 70 | { 71 | float col = 0; 72 | int ax, ay; 73 | for (ay=0; ayx-center->x; 95 | float dy=src->y-center->y; 96 | float dz=src->z-center->z; 97 | float b=(dx*dst->x+dy*dst->y+dz*dst->z); 98 | float c=dx*dx+dy*dy+dz*dz-radrad; 99 | float dis=b*b-c; 100 | if (dis>0) 101 | return -(b)-1/isqrtf(dis); 102 | else 103 | return INFINITE; 104 | } 105 | 106 | static float tracePlane(const vec *src, const vec *dst, int yp) 107 | { 108 | return 109 | (+plane[yp].d 110 | - src->x * plane[yp].a.x - src->y * plane[yp].a.y - src->z * plane[yp].a.z 111 | ) / (dst->x * plane[yp].a.x + dst->y * plane[yp].a.y + dst->z * plane[yp].a.z); 112 | } 113 | 114 | static float RayTrace(const vec *src, const vec *dst, int depth) 115 | { 116 | if (depth>50) 117 | return 0; 118 | 119 | /* the incredible hit2 hack saves not only the first, but also the second 120 | object, allowing exactly ONE transparent object. yey. 121 | and it's buggy. wow. */ 122 | enum obj { objNone, objSphere, objPlane } hit=objNone, hit2=objNone; 123 | int hito=0, hito2; 124 | float mint=INFINITE, mint2; 125 | 126 | u32 i; 127 | for (i=0; i.01) && (t0.1) && (tx+dst->x*mint; 167 | tar.y=src->y+dst->y*mint; 168 | tar.z=src->z+dst->z*mint; 169 | 170 | 171 | switch (hit) 172 | { 173 | case objSphere: 174 | { 175 | vec nor; 176 | nor.x=(tar.x-sphere[hito].center.x)/sphere[hito].r; 177 | nor.y=(tar.y-sphere[hito].center.y)/sphere[hito].r; 178 | nor.z=(tar.z-sphere[hito].center.z)/sphere[hito].r; 179 | col=MapTexture(sphere[hito].texture, &nor); 180 | if (sphere[hito].reflect) 181 | { 182 | vec ndst=CalcMirror(&nor, dst); 183 | col=col*(1-sphere[hito].reflect)+RayTrace(&tar, &ndst, depth+1)*sphere[hito].reflect; 184 | } 185 | break; 186 | } 187 | case objPlane: 188 | { 189 | vec res; 190 | res.x = tar.x * planedyn[hito].m1.x + tar.y * planedyn[hito].m1.y + tar.z * planedyn[hito].m1.z; 191 | res.z = tar.x * planedyn[hito].m2.x + tar.y * planedyn[hito].m2.y + tar.z * planedyn[hito].m2.z; 192 | res.y = 1; 193 | 194 | col=MapTexture(plane[hito].texture, &res); 195 | 196 | if (plane[hito].reflect>0) 197 | { 198 | vec nor = plane[hito].a; 199 | vec ndst=CalcMirror(&nor, dst); 200 | col=col*(1-plane[hito].reflect)+RayTrace(&tar, &ndst, depth+1)*plane[hito].reflect; 201 | } 202 | 203 | if (plane[hito].texture == 3) 204 | { 205 | if ((res.x < TRANSPLANE_X0) || (res.x > TRANSPLANE_X1) || (res.z < TRANSPLANE_Y0) || (res.z > TRANSPLANE_Y1)) { 206 | alphaCol = 0; 207 | } 208 | else { 209 | alphaCol = 0.8;//((res.x*res.x) / 210)+0.7; 210 | col2 = col; 211 | } 212 | hito = hito2; 213 | hit = hit2; 214 | mint = mint2; 215 | hito2 = objNone; 216 | goto a; 217 | } 218 | 219 | break; 220 | } 221 | 222 | default: 223 | case objNone: 224 | return 128; 225 | } 226 | 227 | return col + (col2-col) * alphaCol; 228 | } 229 | 230 | 231 | static float MapTexture(int text, const vec *v) 232 | { 233 | u8 bShade; 234 | u8 bCheck = ((((int)((v->x+100)/10))&1) ^ (((int)((v->z+100)/10))&1)); 235 | 236 | switch (text) { 237 | 238 | case TEX_FLOOR: 239 | return bCheck ? 0xd0:0x10; 240 | 241 | case TEX_CEILING: 242 | bShade = (((v->z * v->z + v->x * v->x)) / 2000); 243 | return 255 - bShade; 244 | //return 255 - ATMOST((0.0005f * (v->z*v->z + v->x*v->x)), 255); 245 | //return (220 - (( (0.04 / isqrtf(ABS(v->z*v->z*v->x)))))); 246 | //return ((0.5 / isqrtf(v->z*v->z))); 247 | //return bCheck ? 0xc0 : 0x40; 248 | //return ((bCheck * 40) +5.8 / isqrtf(nZ)) * 2; //255 - (((int) (0.68 / isqrtf(nZ*nZ*100) )) & 255); 249 | } 250 | 251 | u8 x = (u8) (((TRANSPLANE_X1)- v->x)*16); 252 | u8 y = (u8) (((TRANSPLANE_Y1)- v->z)*16); 253 | 254 | return bg[(y * 256) + x]; 255 | } 256 | 257 | static vec CalcMirror(const vec *nor, const vec *v) 258 | { 259 | float sk=-v->x*nor->x -v->y*nor->y -v->z*nor->z; 260 | vec l; 261 | l.x=2*(nor->x*sk)+v->x; 262 | l.y=2*(nor->y*sk)+v->y; 263 | l.z=2*(nor->z*sk)+v->z; 264 | return l; 265 | } 266 | 267 | void cross(vec *v1, const vec *v2, const vec *v3) 268 | { 269 | v1->x = v2->y * v3->z - v2->z * v3->y; 270 | v1->y = v2->z * v3->x - v2->x * v3->z; 271 | v1->z = v2->x * v3->y - v2->y * v3->x; 272 | } 273 | 274 | -------------------------------------------------------------------------------- /Credits/ray.h: -------------------------------------------------------------------------------- 1 | 2 | typedef unsigned long u32; 3 | typedef unsigned short u16; 4 | typedef unsigned char u8; 5 | 6 | 7 | //#define DBGSAVEMEM 8 | //#define DBGKEY 9 | 10 | /* raytrace/animation settings */ 11 | #define ANTIALIAS 2 12 | 13 | #define PRECALCFRAMES 8 14 | #define VIDFRAMES 67 15 | 16 | #define CAPSTARTY 232 17 | #define CAPSIZEY 240 // 4B000 18 | 19 | #define CAPSTART 640 * CAPSTARTY 20 | #define CAPSIZE 640 * CAPSIZEY 21 | 22 | #define SPHERE_XLEFT -25.0 23 | #define SPHERE_XRIGHT 35.6 24 | #define SPHERE_XMOVE (SPHERE_XRIGHT-SPHERE_XLEFT) 25 | #define SPHERE_XSPEED (SPHERE_XMOVE/VIDFRAMES) 26 | 27 | /* memory layout */ 28 | #define MEM_WORK 0x80010000 29 | #define MEM_FONT 0x80020000 30 | #define MEM_BACKGROUND 0x80000000 31 | 32 | #define MEM_FB ((0x80070000) | 0xC0000000) // 80080000 33 | #define MEM_VIDEO ((MEM_FB & 0xBFFFFFFF) + 0xC0000) // 0x170000) // 80130000 801F0000 size: 14D0000 34 | #define MEM_FB2 ((MEM_FB + 0x500)) 35 | 36 | 37 | /* video stuff */ 38 | #define R_VIDEO_FRAMEBUFFER_1 *(unsigned long*)0xCC00201C 39 | #define R_VIDEO_FRAMEBUFFER_2 *(unsigned long*)0xCC002024 40 | 41 | #define YBORDEROFFSET (640*2 * 32) 42 | #define CLAMP(x,l,h) ((x > h) ? h : ((x < l) ? l : x)) 43 | #define TENT(a, b, c) (0.25 * (a) + 0.5 * (b) + 0.25 * (c)) 44 | #define RGB2YCBR(r,g,b) ((u32)(((u8)CLAMP((0.257 * (float)r + 0.504 * (float)g + 0.098 * (float)b + 16.0 + 0.5) , 16, 235) << 24) | ((u8)CLAMP((-0.148 * (float)r - 0.291 * (float)g + 0.439 * (float)b + 128.0 + 0.5), 16, 240) << 16) | ((u8)(0.257 * (float)r + 0.504 * (float)g + 0.098 * (float)b + 16.0 + 0.5) << 8) | (u8)CLAMP((0.439 * (float)r - 0.368 * (float)g - 0.071 * (float)b + 128.0 + 0.5), 16, 240))) 45 | 46 | 47 | /* exi */ 48 | #define EXI_SR ebase[0] 49 | #define EXI_DMA_MEM ebase[1] 50 | #define EXI_DMA_LEN ebase[2] 51 | #define EXI_CR ebase[3] 52 | #define EXI_DATA ebase[4] 53 | #define EXI_WAIT_EOT while((EXI_CR)&1); 54 | 55 | 56 | 57 | typedef struct tvec { 58 | float x, y, z; 59 | } vec; 60 | 61 | typedef struct tsphere_t { 62 | vec center; 63 | float r; 64 | u8 texture; 65 | float reflect; 66 | } sphere_t; 67 | 68 | typedef struct tplane_t { 69 | vec a; 70 | int d; 71 | u8 texture; 72 | float reflect; 73 | } plane_t; 74 | 75 | typedef struct tplane_t_dyn 76 | { 77 | vec m1, m2; 78 | } plane_t_dyn; 79 | 80 | enum eTexture { 81 | TEX_FLOOR = 0, 82 | TEX_CEILING = 1, 83 | TEX_TRANS = 3 84 | }; 85 | 86 | 87 | extern u8 *bg; 88 | extern sphere_t sphere[]; 89 | extern plane_t plane[]; 90 | extern const u32 planes; 91 | extern plane_t_dyn planedyn[]; 92 | 93 | u16 tracePixel(int x, int y, int aa); 94 | static float RayTrace(const vec *src, const vec *dst, int depth); 95 | static vec CalcMirror(const vec *nor, const vec *v); 96 | static float MapTexture(int text, const vec *v); 97 | void cross(vec *v1, const vec *v2, const vec *v3); 98 | -------------------------------------------------------------------------------- /Drivecode/Source/MN10200.h: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | /*##############################################################################*/ 5 | /* Variables address defines */ 6 | /*##############################################################################*/ 7 | .set DbgWritePtr, 0x8004 8 | .set DbgReadPtr, 0x8006 9 | .set DbgDump, 0x40d800 10 | .set DbgDumpStart, 0x40d800 11 | .set DbgDumpSize, 0x40d800 12 | 13 | /*##############################################################################*/ 14 | /* Register address defines */ 15 | /*##############################################################################*/ 16 | .set P0OUT, 0xffc0 ## PortXOutputRegister 17 | .set P1OUT, 0xffc1 18 | .set P2OUT, 0xffc2 19 | .set P3OUT, 0xffc3 20 | .set P4OUT, 0xffc4 21 | .set P5OUT, 0xffc5 22 | .set P6OUT, 0xffc6 23 | .set P7OUT, 0xffc7 24 | .set P8OUT, 0xffC8 25 | .set P9OUT, 0xffC9 26 | .set P0IN, 0xffd0 ## PortXInputRegister 27 | .set P1IN, 0xffd1 28 | .set P2IN, 0xffd2 29 | .set P3IN, 0xffd3 30 | .set P4IN, 0xffd4 31 | .set P5IN, 0xffd5 32 | .set P6IN, 0xffd6 33 | .set P7IN, 0xffd7 34 | .set P8IN, 0xffd8 35 | .set P9IN, 0xffd9 36 | .set P1DIR, 0xffe1 ## PortXInput/Output Dir Register 37 | .set P2DIR, 0xffe2 38 | .set P3DIR, 0xffe3 39 | .set P4DIR, 0xffe4 40 | .set P5DIR, 0xffe5 41 | .set P6DIR, 0xffe6 42 | .set P7DIR, 0xffe7 43 | .set P8DIR, 0xffe8 44 | .set P9DIR, 0xffe9 45 | 46 | .set P8PLU, 0xffb8 ## Port8Pull-upControlRegister 47 | .set P8LMD, 0xfffc ## Port8ModeRegister 48 | .set P8MMD, 0xfffd ## Port8ModeRegister 49 | .set P8HMD, 0xfffe ## Port8ModeRegister 50 | 51 | 52 | .set REG_IAGR, 0xfc0e 53 | .set REG_UNICR, 0xfc44 54 | .set UNID, (1<<0) 55 | 56 | .set REG_ADB0, 0xfcd2 57 | .set REG_ADB1, 0xfcd6 58 | .set REG_ADBCTRL, 0xfcda 59 | 60 | .set ADB0ACK, (0x01) 61 | .set ADB1ACK, (0x02) 62 | .set ADB0_ON, (0x04) 63 | .set ADB1_ON, (0x08) 64 | .set ADB01_ON, (ADB0_ON | ADB1_ON) 65 | 66 | 67 | .set NMICR, 0xfc40 68 | 69 | .set REG_BSWAPL, 0xFFCC 70 | .set REG_BSWAPH, 0xFFCE 71 | 72 | .set SC0CTR, 0xfd80 73 | .set SC0TRB, 0xfd82 74 | 75 | 76 | .set SC3CTR, 0xfd98 77 | .set SC3TRB, 0xfd9a 78 | 79 | 80 | /*##############################################################################*/ 81 | /* Macros */ 82 | /*##############################################################################*/ 83 | 84 | .macro CLI 85 | and 0xf7ff, psw 86 | nop 87 | nop 88 | .endm 89 | 90 | .macro STI 91 | or 0x800, psw 92 | .endm 93 | 94 | 95 | /* helper macro for correct absolute 24bit jumps */ 96 | .macro jmpabsOrg addr 97 | jmp \addr-.+\addr 98 | .endm 99 | 100 | .macro jmpabs addr 101 | mov a0, (-8, a3) 102 | mov \addr, a0 103 | mov a0, (-4, a3) 104 | mov (-8, a3), a0 105 | add -4, a3 106 | rts 107 | .endm 108 | 109 | .macro jsrabs addr # damn 0x14 bytes... help :s 110 | add -8, a3 # 111 | mov a0, (-4, a3) # save a0 112 | mov .+0x11, a0 # push return address (here) 113 | mov a0, (4, a3) 114 | mov \addr, a0 # push return address (jsr dest) 115 | mov a0, (a3) 116 | mov (-4, a3), a0 # restore a0 117 | rts 118 | .endm 119 | 120 | 121 | /* helper macro for correct absolute 24bit jsrs */ 122 | .macro jsrabsOrg addr 123 | jsr \addr-.+\addr 124 | .endm 125 | 126 | /* jumps to Addr by using the stack, without modifying registers */ 127 | .macro JmpSaveReg Addr 128 | sub 8, a3 129 | mov a1, (a3) 130 | mov \Addr, a1 131 | mov a1, (4, a3) 132 | mov (a3), a1 133 | add 4, a3 134 | rts 135 | .endm 136 | 137 | .macro IMM24Bit Addr 138 | .byte ((\Addr) & 0xFF) 139 | .byte (((\Addr) >> 8) & 0xFF) 140 | .byte ((\Addr) >> 16) & 0xFF) 141 | .endm 142 | 143 | .macro bitset Addr bit 144 | .byte 0xF3, 0xFE, 0xD0 + \bit 145 | .long (\Addr) + 0xF6000000 # ohne worte :p 146 | .endm 147 | 148 | .macro bitset16 address bit 149 | .byte 0xF5, 0xD0 + \bit 150 | .word \address 151 | .endm 152 | 153 | .macro bitclr address bit 154 | .byte 0xF5, 0xD8 + \bit 155 | .word \address 156 | .endm 157 | 158 | .macro tbzAbs addr, bit, label 159 | .byte 0xF3, 0xFE, (0xC0 + \bit) 160 | .set O\addr\bit\label, (\label-.)-4 161 | .long \addr + (O\addr\bit\label << 24) 162 | .endm 163 | 164 | .macro tbnzAbs addr, bit, label 165 | .byte 0xF3, 0xFE, (0xC8 + \bit) 166 | .set O\addr\bit\label, (\label-.)-4 167 | .long \addr + (O\addr\bit\label << 24) 168 | .endm 169 | 170 | 171 | .macro CallDCCommand CmdNum 172 | jsr \CmdNum * 4 + 0x40d000 - 4 -.+\CmdNum * 4 + 0x40d000 - 4 173 | .endm 174 | 175 | 176 | .macro DBGOut8 Value 177 | mov \Value, a0 178 | mov 1, d0 179 | jsr SUB_DbgOutBuffer 180 | .endm 181 | 182 | .macro DBGOutReg8 Reg 183 | mov \Reg, d0 184 | jsr SUB_DbgOutByte 185 | .endm 186 | 187 | .macro DBGOutReg16 Reg 188 | movb \Reg, d0 189 | jsr SUB_DbgOutByte 190 | ror d0 191 | ror d0 192 | ror d0 193 | ror d0 194 | ror d0 195 | ror d0 196 | ror d0 197 | ror d0 198 | jsr SUB_DbgOutByte 199 | .endm 200 | 201 | 202 | 203 | /*##############################################################################*/ 204 | /* P80, P81 serial transfer macros */ 205 | /*##############################################################################*/ 206 | 207 | 208 | .macro P4IN_SET5 209 | .byte 0xF5, 0xD5, 0xD4, 0xFF 210 | .endm 211 | 212 | .macro P4IN_CLR5 213 | .byte 0xF5, 0xDD, 0xD4, 0xFF 214 | .endm 215 | 216 | .macro P80_HI 217 | .byte 0xF5, 0xD0, 0xC8 ,0xFF # P80_HI 218 | .endm 219 | 220 | .macro P80_LO 221 | .byte 0xF5, 0xD8, 0xC8 ,0xFF # P80_LO 222 | .endm 223 | 224 | .macro P81_HI 225 | .byte 0xF5, 0xD1, 0xC8 ,0xFF # P81_HI 226 | .endm 227 | 228 | .macro P81_LO 229 | .byte 0xF5, 0xD9, 0xC8 ,0xFF # P81_LO 230 | .endm 231 | 232 | .macro P82_HI 233 | .byte 0xF5, 0xD2, 0xC8 ,0xFF 234 | .endm 235 | 236 | .macro P82_LO 237 | .byte 0xF5, 0xDa, 0xC8 ,0xFF 238 | .endm 239 | 240 | .macro P83_HI 241 | .byte 0xF5, 0xD3, 0xC8 ,0xFF 242 | .endm 243 | 244 | .macro P83_LO 245 | .byte 0xF5, 0xDB, 0xC8 ,0xFF 246 | .endm 247 | 248 | .macro P84_HI 249 | .byte 0xF5, 0xD4, 0xC8 ,0xFF 250 | .endm 251 | 252 | .macro P84_LO 253 | .byte 0xF5, 0xDC, 0xC8 ,0xFF 254 | .endm 255 | 256 | 257 | 258 | 259 | 260 | 261 | /* TBZ(ADDR_24)BIT, DEST: 262 | f3 fe c0 + bit addr_l addr_m addr_h reloffset 263 | 264 | 265 | .macro m_tbz addr bit dest 266 | .byte 0xF3, 0xFE 267 | .byte 0xC0 + \bit 268 | .word \addr 269 | .byte 0x00 270 | .byte 0xfd 271 | .byte \dest-. 272 | .endm 273 | 274 | m_tbz 0x1234 5 drivecode_init 275 | m_tbz 0x1234 5 drivecode_init 276 | 277 | */ -------------------------------------------------------------------------------- /Drivecode/Source/PPC.h: -------------------------------------------------------------------------------- 1 | 2 | 3 | #======================================================================= 4 | # Constants 5 | #======================================================================= 6 | .equ PAD_LEFT, 0x0001 7 | .equ PAD_RIGHT, 0x0002 8 | .equ PAD_DOWN, 0x0004 9 | .equ PAD_UP, 0x0008 10 | .equ PAD_Z, 0x0010 11 | .equ PAD_R, 0x0020 12 | .equ PAD_L, 0x0040 13 | .equ PAD_A, 0x0100 14 | .equ PAD_B, 0x0200 15 | .equ PAD_X, 0x0400 16 | .equ PAD_Y, 0x0800 17 | .equ PAD_START, 0x1000 18 | .equ PAD_CLEFT, 0x2000 19 | .equ PAD_CRIGHT, 0x4000 20 | .equ PAD_CDOWN, 0x8000 21 | .equ PAD_CUP, 0x10000 22 | 23 | 24 | .equ DVD0, 0x6000 25 | .equ DVD1, 0x6004 26 | .equ DVD2, 0x6008 27 | .equ DVD3, 0x600c 28 | .equ DVD4, 0x6010 29 | .equ DVD5, 0x6014 30 | .equ DVD6, 0x6018 31 | .equ DVD7, 0x601c 32 | .equ DVD8, 0x6020 33 | 34 | 35 | #======================================================================= 36 | # General PPC macros 37 | #======================================================================= 38 | 39 | .macro babs addr 40 | b \addr-.+\addr 41 | .endm 42 | 43 | .macro li32 reg, imm32 44 | lis \reg, (\imm32 >> 16) 45 | ori \reg, \reg, (\imm32 & 0xFFFF) 46 | .endm 47 | 48 | .macro GetRelocAddr reg, label 49 | bcl 20,31,$+4 50 | mflr \reg 51 | addi \reg, \reg, (\label)-.+4 52 | .endm 53 | 54 | 55 | #======================================================================= 56 | # Log to DVD Memory macros 57 | #======================================================================= 58 | 59 | #--------------------------------------------- 60 | # Logs a single 32bit value or Register 61 | #--------------------------------------------- 62 | .macro DVDMemLogImm ImmReg, DvdMemAddress = 0x40d800 63 | mr r2, \ImmReg 64 | stwu r2, -4(sp) 65 | DVDMemLogRegPtr sp, 4, \DvdMemAddress 66 | addi sp, sp, 4 67 | .endm 68 | 69 | #------------------------------------------------- 70 | # Logs a number of bytes at given address 71 | #------------------------------------------------- 72 | .macro DVDMemLog Address, Size, DvdMemAddress = 0x40d800 73 | lis r2,(\Address >> 16) # GCMem read address 74 | ori r2, r2, (\Address & 0xFFFF) 75 | DVDMemLogRegPtr r2, \Size, \DvdMemAddress 76 | .endm 77 | 78 | #---------------------------------------------- 79 | # Logs a number of bytes at register address 80 | #---------------------------------------------- 81 | .macro DVDMemLogRegPtr Reg, Size, DvdMemAddress = 0x40d800 82 | li r5, (\Size / 4) 83 | mtctr r5 84 | mr r2, \Reg # Source Address 85 | lis r5,(\DvdMemAddress >> 16) # DVDMem dest address 86 | ori r5, r5, (\DvdMemAddress & 0xFFFF) 87 | lwzu r9, 0(r2) 88 | 89 | DumpMemLoop\DvdMemAddress: 90 | 91 | bl SUB_WriteDriveMem 92 | addi r5, r5, 4 # next address 93 | lwzu r9, 4(r2) # read next dword 94 | bdnz DumpMemLoop\DvdMemAddress # write to drive 95 | .endm 96 | 97 | 98 | 99 | -------------------------------------------------------------------------------- /Drivecode/Source/QLite Main.asm.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/Drivecode/Source/QLite Main.asm.c -------------------------------------------------------------------------------- /Drivecode/Source/QLite.h: -------------------------------------------------------------------------------- 1 | 2 | 3 | .global QCODEImageBase 4 | 5 | 6 | .section absolute 7 | .include "source/mn10200.h" 8 | 9 | 10 | .org 0xfcda 11 | ADBCTRL: 12 | 13 | .org 0xFD83 14 | SC0STR: 15 | 16 | .org 0xffd8 17 | _P8IN: 18 | 19 | 20 | /* 21 | .org 0x40c5f0 22 | bMBOffsetEnable: 23 | 24 | .org 0x40c5f4 25 | dwLBAOffset: 26 | */ 27 | 28 | #------------------------------------------------------------------------------------------ 29 | # Read ahead dma buffer addresses 30 | #------------------------------------------------------------------------------------------ 31 | .equ LBA_READAHEAD_BUFFER, 0x417100 32 | .equ LBA0, LBA_READAHEAD_BUFFER + (0x810 * 0) 33 | .equ LBATMP, 0x40F100 34 | .equ LBA10, LBA_READAHEAD_BUFFER + (0x810 * 0x10) 35 | .equ LBA4, LBA_READAHEAD_BUFFER + (0x810 * 0x04) 36 | .equ LBA7, LBA_READAHEAD_BUFFER + (0x810 * 7) 37 | .equ LBA_APPL, LBA4 + 0x440 38 | .equ LBA_APPL_EPVEC, LBA_APPL + 0x12 39 | .equ LBA_APPL_SIZE, LBA_APPL + 0x16 40 | .equ LBA_APPL_REGION, LBA0 + 0x440 + 0x1b 41 | 42 | 43 | #------------------------------------------------------------------------------------------ 44 | # firmware fixed addresses 45 | #------------------------------------------------------------------------------------------ 46 | .equ FwIrqVec, 0x804c 47 | .equ FwIrqDepth, 0x805b 48 | .equ FwData1, 0x008000 49 | .equ FwData1_Size, 0x6e 50 | .equ FwBSS, 0x00806e 51 | .equ FwInitDrive, 0x0808aa 52 | .equ FwIntHandler, 0x80a74 53 | .equ FwHLECmdBuffer, 0x40ebe6 54 | 55 | #------------------------------------------------------------------------------------------ 56 | # firmware version addresses 57 | #------------------------------------------------------------------------------------------ 58 | 59 | .macro IMM24Bit Addr 60 | .byte (\Addr & 0xFF) 61 | .byte (\Addr >> 8 & 0xFF) 62 | .byte (\Addr >> 16 & 0xFF) 63 | .endm 64 | 65 | .macro FwAddrImp16 Name P1, P2, P3 66 | X\Name: 67 | IMM24Bit \P1 68 | IMM24Bit \P2 69 | IMM24Bit \P3 70 | .set \Name, 0x003333 + (FWIMPORTS << 16) 71 | .set FWIMPORTS, FWIMPORTS+1 72 | .endm 73 | 74 | .macro FwAddrImp24 Name P1, P2, P3 75 | X\Name: 76 | IMM24Bit \P1 77 | IMM24Bit \P2 78 | IMM24Bit \P3 79 | .set \Name, 0x003333 + (FWIMPORTS << 16) 80 | .set FWIMPORTS, FWIMPORTS+1 81 | .endm 82 | 83 | 84 | /* .macro FwAddrImp16 Name P1, P2, P3 85 | X\Name: 86 | IMM24Bit \P1 87 | .word (\P1)-(\P2) 88 | .word (\P1)-(\P3) 89 | .set \Name, 0x003333 + (FWIMPORTS << 16) 90 | .set FWIMPORTS, FWIMPORTS+1 91 | .endm 92 | 93 | .macro FwAddrImp24 Name P1, P2, P3 94 | FwAddrImp16 \Name \P1, \P2, \P3 95 | .endm 96 | */ 97 | 98 | .set FWIMPORTS, 0x01; 99 | 100 | 101 | 102 | /* 103 | FwAddrImp16 FwInitState1 0x807D, 0x8071, 0x8079 104 | FwAddrImp16 FwInitState2 0x8082, 0x8076, 0x807e 105 | FwAddrImp16 FwLastHLECmd 0x80f4, 0x80e8, 0x80f0 106 | FwAddrImp24 FwInitDriveLow 0x08aed8, 0x08b1f5, 0x08af25 107 | FwAddrImp24 FwInitSpinup 0x083bad, 0x083ba5, 0x083bad 108 | FwAddrImp24 FwStartDrive 0x0878f8, 0x0878f0, 0x0878f8 109 | FwAddrImp24 FwSetInitState 0x08aee8, 0x08b205, 0x08af35 110 | FwAddrImp24 FwContinueReset 0x08d9b6, 0x08d956, 0x08da11 111 | FwAddrImp24 FwInitThread 0x08dd0d, 0x08dcad, 0x08dd68 112 | FwAddrImp24 FwThreadSetup 0x08ea03, 0x08e9a1, 0x08ea55 113 | */ 114 | -------------------------------------------------------------------------------- /Drivecode/Source/QLiteApploader.asm.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/Drivecode/Source/QLiteApploader.asm.c -------------------------------------------------------------------------------- /Drivecode/Source/QLiteBreakpoints.asm.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/Drivecode/Source/QLiteBreakpoints.asm.c -------------------------------------------------------------------------------- /Drivecode/Source/QLiteDbg.asm.c: -------------------------------------------------------------------------------- 1 | 2 | 3 | .equ DELAY_BIT, 5 4 | .equ DELAY_BYTE, 30 5 | 6 | #==================================================================================# 7 | # Local adresses # 8 | #==================================================================================# 9 | .equ FwCurrentLoginState, 0x40ead2 10 | 11 | #==================================================================================# 12 | # Pinout toggling # 13 | #==================================================================================# 14 | .equ PINOUT, 1 15 | 16 | .if PINOUT == 1 17 | .macro CLOCK_LO 18 | P84_LO 19 | .endm 20 | .macro CLOCK_HI 21 | P84_HI 22 | .endm 23 | .macro DATA_LO 24 | P82_LO 25 | .endm 26 | .macro DATA_HI 27 | P82_HI 28 | .endm 29 | .else 30 | .macro CLOCK_LO 31 | P82_LO 32 | .endm 33 | .macro CLOCK_HI 34 | P82_HI 35 | .endm 36 | .macro DATA_LO 37 | P84_LO 38 | .endm 39 | .macro DATA_HI 40 | P84_HI 41 | .endm 42 | .endif 43 | 44 | #==========================================================# 45 | # Macros # 46 | #==========================================================# 47 | .macro Sleep ms 48 | .if \ms > 0 49 | mov \ms, d0 50 | jsr SUB_Sleep 51 | .endif 52 | .endm 53 | 54 | 55 | #==============================================# 56 | # Debug data # 57 | #==============================================# 58 | bLastTime: .byte 0x00 59 | bLastLoginByte: .byte 0xff 60 | 61 | #==========================================================# 62 | # Debug init # 63 | #==========================================================# 64 | DBGInit: 65 | # enable dbgcommands 66 | mov 0x01, d0 67 | movb d0, (FwDbgstate) 68 | jsr Sub_FlashInitPorts 69 | rts 70 | 71 | #==================================================================================# 72 | # Cyclic Debug update function # 73 | #==================================================================================# 74 | DBGUpdate: 75 | # jsr SUB_LogDiscCheckState 76 | # jsr SUB_DbgUpdateTimer 77 | jsr SUB_UpdateSerialOut 78 | rts 79 | 80 | #==================================================================================# 81 | # called every 8th timer2 tick # 82 | #==================================================================================# 83 | DbgTimerSlowCallback: 84 | mov 0x99, d0 85 | jsr FwCLI 86 | jsr Sub_SendByteSerial 87 | jsr FwSTI 88 | 89 | /* jsr SUB_LogDiscCheckState 90 | movbu (0x40ead2), d0 91 | cmp 0x50, d0 92 | bne noLS 93 | noLS: 94 | */ 95 | rts 96 | 97 | /***********************************************************************/ 98 | SUB_LogDiscCheckState: 99 | /***********************************************************************/ 100 | jsr FwCLI 101 | movbu (bLastLoginByte), d1 102 | movbu (0x40ead2), d0 # 0x8069 103 | movb d0, (bLastLoginByte) 104 | cmp d0, d1 105 | beq noLoginByte 106 | 107 | mov 0x21, d0 108 | jsr SUB_DbgOutByte 109 | # jsr Sub_SendByteSerial 110 | 111 | noLoginByte: 112 | jsr FwSTI 113 | rts 114 | 115 | #END 116 | 117 | /***********************************************************************/ 118 | SUB_DbgUpdateTimer: 119 | /***********************************************************************/ 120 | mov FwTimer2, a0 121 | movbu (0, a0), d1 122 | and 0xFE, d1 123 | 124 | movbu (bLastTime), d0 125 | sub d1, d0 126 | movb d1, (bLastTime) 127 | cmp 0, d0 128 | beq noTick 129 | jsr DbgTimerSlowCallback 130 | noTick: 131 | rts 132 | 133 | 134 | /***********************************************************************/ 135 | # Safe CLI/STI routines 136 | /***********************************************************************/ 137 | FwCLI: 138 | and 0xf7ff, psw 139 | rts 140 | 141 | FwSTI: 142 | mov 0xa3,d0 143 | mov d0, (0x806c) 144 | movbu (0x805b), d0 145 | cmp 0,d0 146 | beq 1f 147 | mov 0x01,d0 148 | rts 149 | 1: sub d0, d0 150 | rts 151 | 152 | #==========================================================# 153 | Sub_FlashInitPorts: # 154 | #==========================================================# 155 | mov 0x1F, d0 # set P80-84 as outputs 156 | movb d0,(P8DIR) 157 | 158 | mov 0x00, d0 # set P80-82 as ports 159 | movb d0, (P8LMD) 160 | 161 | mov 0x20, d0 # P83: Port (org SBI) 162 | movb d0, (P8MMD) # P84: Port (org SBO) 0x2d 163 | 164 | P82_LO # SBT0 (clock) (was both hi) 165 | P83_HI # SBI0 (signal) 166 | P84_LO # SBO0 (data) 167 | 168 | mov 0x0, d1 # disable serial port 169 | mov d1, (SC0CTR) 170 | mov 0x00, d0 # set both data and clock pins low 171 | movb d0, (P8OUT) 172 | 173 | sub d0, d0 174 | mov d0, (0x40ec60) # disable HLELog buffer 175 | rts 176 | 177 | /***********************************************************************/ 178 | Sub_SendByteSerial: # (d0 = byte) 179 | /***********************************************************************/ 180 | .if DBGOUTPUT == 1 181 | P83_LO # set signal bit 182 | mov d0, d3 183 | mov 8, d2 # loop 8 times 184 | bitloop: 185 | mov d3, d0 # get next databit 186 | and 0x80, d0 # set it to P84 187 | beq 1f 188 | DATA_HI 189 | bra 2f 190 | 1: DATA_LO 191 | 2: CLOCK_HI # set clock 192 | Sleep DELAY_BIT # take a nap :p 193 | CLOCK_LO # clear clock 194 | 195 | rol d3 # rotate input bits 196 | sub 01, d2 197 | bne bitloop 198 | .endif 199 | # DATA_LO 200 | Sleep DELAY_BYTE # take a nap :p 201 | P83_HI # clear signal bit 202 | rts 203 | #END 204 | 205 | 206 | /***********************************************************************/ 207 | SUB_DbgOutByte: # (d0: byte) 208 | /***********************************************************************/ 209 | sub 0x0a, a3 # push used regs 210 | mov d1, (0x00,a3) 211 | mov d2, (0x02,a3) 212 | mov d0, (0x04,a3) 213 | mov a0, (0x06,a3) 214 | 215 | # jsr FwCLI 216 | xor 0x49, d0 217 | 218 | mov DbgDumpStart, a0 # point a0 to ringbuffer write offset 219 | movb (DbgWritePtr), d1 220 | add d1, a0 221 | 222 | movb (DbgReadPtr), d2 223 | add 1, d1 224 | and 0xff, d1 225 | 226 | cmp d2, d1 # write ptr +1 = read ptr ? 227 | bne NoDbgBufferFull 228 | 229 | mov 0x44, d0 # write DD as buffer full sign 230 | movb d0, (a0) # and dont log the byte 231 | bra DbgOutEnd 232 | 233 | NoDbgBufferFull: 234 | movb d0, (a0) # write byte 235 | movb d1, (DbgWritePtr) # inc write ptr 236 | 237 | DbgOutEnd: 238 | # jsr FwSTI 239 | mov (0x00,a3), d1 # pop used regs 240 | mov (0x02,a3), d2 241 | mov (0x04,a3), d0 242 | mov (0x06,a3), a0 243 | add 0x0a, a3 244 | rts 245 | 246 | 247 | /***********************************************************************/ 248 | SUB_DbgOutBuffer: # (a0: address d0: bytes) 249 | /***********************************************************************/ 250 | .if DBGOUTPUT == 1 251 | sub 0x06, a3 # push used regs 252 | mov a0, (0x00,a3) 253 | mov d1, (0x04,a3) 254 | mov d0, d1 # d1 - counter 255 | 256 | jsr FwCLI 257 | # mov 0xaa, d0 258 | # jsr SUB_DbgOutByte 259 | 260 | DbgOutBufferLoop: 261 | 262 | movbu (a0), d0 263 | jsr SUB_DbgOutByte 264 | 265 | add 1, a0 266 | sub 1, d1 267 | cmp 0, d1 268 | bne DbgOutBufferLoop 269 | 270 | mov 0xba, d0 271 | jsr SUB_DbgOutByte 272 | 273 | jsr FwSTI 274 | mov (0x00,a3), a0 # pop used regs 275 | mov (0x04,a3), d1 276 | add 0x06, a3 277 | .endif 278 | rts 279 | #END 280 | 281 | 282 | /***********************************************************************/ 283 | SUB_UpdateSerialOut: 284 | /***********************************************************************/ 285 | 286 | jsr FwCLI 287 | movb (DbgReadPtr), d1 # get read and write ptrs 288 | movb (DbgWritePtr), d2 289 | mov DbgDumpStart, a0 # point a0 to ringbuffer read offset 290 | 291 | add d1, a0 292 | cmp d1, d2 # has data ? 293 | beq NoSendData 294 | 295 | # jsr FwCLI 296 | nop 297 | nop 298 | 299 | add 1, d1 # inc read ptr 300 | movb d1, (DbgReadPtr) 301 | movbu (a0), d0 # send data byte 302 | jsr Sub_SendByteSerial 303 | 304 | /* movb (DbgReadPtr), d1 # get read and write ptrs 305 | movb (DbgWritePtr), d2 306 | cmp d1, d2 307 | bne noSleep 308 | Sleep 50 309 | */ 310 | noSleep: 311 | # jsr FwSTI 312 | 313 | NoSendData: 314 | jsr FwSTI 315 | rts 316 | #END 317 | 318 | /***********************************************************************/ 319 | SUB_Sleep: # (dO = DELAY in ~ msec) 320 | /***********************************************************************/ 321 | delayLoop1: 322 | mov 0x10, d1 323 | delayLoop2: 324 | sub 1, d1 325 | bne delayLoop2 326 | sub 1, d0 327 | bne delayLoop1 328 | rts 329 | #END 330 | 331 | 332 | 333 | /***********************************************************************/ 334 | SUB_DbgTest: 335 | /***********************************************************************/ 336 | 337 | /* jsrabsOrg FwCLI 338 | 339 | jsr Sub_FlashInitPorts 340 | Sleep 100 341 | jsr SUB_FlashEnable 342 | jsr SUB_FlashErase 343 | 344 | sub 4, a3 345 | mov 0x0000, a2 346 | flashloop: 347 | mov a2, d1 348 | mov d1, d0 349 | 350 | mov 0x2BAD, d0 351 | 352 | mov d1, (a3) # address (sp) 353 | mov d0, (2, a3) # data (sp+2) 354 | 355 | jsr SUB_WriteFlashWord 356 | add 1, a2 357 | cmp 0x200, a2 358 | bne flashloop 359 | 360 | add 4, a3 361 | jsrabsOrg FwSTI 362 | rts 363 | */ 364 | /***********************************************************************/ 365 | SUB_WaitForP80Low: 366 | /***********************************************************************/ 367 | /* and 0xf7ff,psw 368 | nop 369 | nop 370 | mov 1, d0 371 | movb d0, (P8OUT) 372 | 373 | waitForPort: 374 | movb (P8IN), d0 375 | and 1, d0 376 | bne waitForPort 377 | mov 1, d0 378 | movb d0, (P8OUT) 379 | or 0x0800, psw 380 | rts 381 | #END 382 | */ 383 | 384 | /***********************************************************************/ 385 | Sub_FlashLED_P80: /* blue */ # 386 | /***********************************************************************/ 387 | /* sub 0x08, a3 # push regs 388 | mov d0, (0x00,a3) 389 | mov d1, (0x04,a3) 390 | and 0xf7ff, psw 391 | nop 392 | nop 393 | 394 | P80_HI 395 | mov 0x100, d0 396 | jsr SUB_Sleep 397 | P80_LO 398 | 399 | or 0x0800, psw # pop regs 400 | mov (0x00,a3), d0 401 | mov (0x04,a3), d1 402 | add 0x08, a3 403 | rts 404 | #END 405 | */ 406 | /***********************************************************************/ 407 | Sub_FlashLED_P81: /* red */ # 408 | /***********************************************************************/ 409 | /* and 0xf7ff, psw 410 | 411 | P81_HI 412 | mov 0x90, d0 413 | jsr SUB_Sleep 414 | P81_LO 415 | 416 | or 0x0800, psw 417 | rts 418 | #END 419 | */ 420 | 421 | /***********************************************************************/ 422 | Sub_FlashCover: /* red */ # 423 | /***********************************************************************/ 424 | # and 0xf7ff, psw 425 | 426 | mov 0x20, d0 427 | movb d0, (P4OUT) 428 | Sleep 0x90 429 | 430 | sub d0, d0 431 | movb d0, (P4OUT) 432 | 433 | # or 0x0800, psw 434 | rts 435 | #END 436 | 437 | -------------------------------------------------------------------------------- /Drivecode/Source/QLiteIPL.asm.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/Drivecode/Source/QLiteIPL.asm.c -------------------------------------------------------------------------------- /Drivecode/Source/QLiteIPLDbg.asm.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/Drivecode/Source/QLiteIPLDbg.asm.c -------------------------------------------------------------------------------- /Drivecode/Source/QliteGlobal.h: -------------------------------------------------------------------------------- 1 | 2 | /* global settings header used by various sub-projetcs */ 3 | .include "../XenoGlobal.h" 4 | 5 | 6 | #------------------------------------------------------------------------------------------ 7 | # Drivecode main configuration 8 | #------------------------------------------------------------------------------------------ 9 | .set DREFIX, 1 /* fix some read errors (1:on 2: switchable) */ 10 | .set DREFIXCFG, 0 /* dre fix is switchable */ 11 | .set READOPTS, 1 /* adjust read options */ 12 | .set FASTBOOT, 1 /* do fast login */ 13 | .set AUTHPLUSR, 1 /* enable login of dvd+rw */ 14 | .set AUTHDMI, 1 /* patch dmicheck for dvd-+rw */ 15 | .equ READ_ECMADVDS, 1 /* enable reading of dvd+-rw */ 16 | .set DOREGIONPATCH, 1 /* enable PAL<->NTSC patching */ 17 | .set RELEASEBUILD, 1 /* dont do fancy nonsense :) */ 18 | .set BYPASS, 1 /* enable unload command */ 19 | .set AUTOBYPASS, 1 /* unload automatically on memwrite */ 20 | .set STANDBYMODE, 0 /* unload automatically on memwrite */ 21 | 22 | 23 | #------------------------------------------------------------------------------------------ 24 | # Debug Config 25 | #------------------------------------------------------------------------------------------ 26 | .set DBGMODE, 0 /* enable various dbg functions */ 27 | .set DBGOUTPUT, 0 /* enableDEBUG OUTPUT via serial if */ 28 | .set USEDBGBP, 0 /* gp debug breakpoint */ 29 | -------------------------------------------------------------------------------- /Drivecode/Source/old_unused/1.03a/MN10200.h: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | /*##############################################################################*/ 5 | /* Variables address defines */ 6 | /*##############################################################################*/ 7 | .set DbgWritePtr, 0x8004 8 | .set DbgReadPtr, 0x8006 9 | .set DbgDump, 0x40d800 10 | .set DbgDumpStart, 0x40d800 11 | .set DbgDumpSize, 0x40d800 12 | 13 | /*##############################################################################*/ 14 | /* Register address defines */ 15 | /*##############################################################################*/ 16 | .set P0OUT, 0xffc0 ## PortXOutputRegister 17 | .set P1OUT, 0xffc1 18 | .set P2OUT, 0xffc2 19 | .set P3OUT, 0xffc3 20 | .set P4OUT, 0xffc4 21 | .set P5OUT, 0xffc5 22 | .set P6OUT, 0xffc6 23 | .set P7OUT, 0xffc7 24 | .set P8OUT, 0xffC8 25 | .set P9OUT, 0xffC9 26 | .set P0IN, 0xffd0 ## PortXInputRegister 27 | .set P1IN, 0xffd1 28 | .set P2IN, 0xffd2 29 | .set P3IN, 0xffd3 30 | .set P4IN, 0xffd4 31 | .set P5IN, 0xffd5 32 | .set P6IN, 0xffd6 33 | .set P7IN, 0xffd7 34 | .set P8IN, 0xffd8 35 | .set P9IN, 0xffd9 36 | .set P1DIR, 0xffe1 ## PortXInput/Output Dir Register 37 | .set P2DIR, 0xffe2 38 | .set P3DIR, 0xffe3 39 | .set P4DIR, 0xffe4 40 | .set P5DIR, 0xffe5 41 | .set P6DIR, 0xffe6 42 | .set P7DIR, 0xffe7 43 | .set P8DIR, 0xffe8 44 | .set P9DIR, 0xffe9 45 | 46 | .set P8PLU, 0xffb8 ## Port8Pull-upControlRegister 47 | .set P8LMD, 0xfffc ## Port8ModeRegister 48 | .set P8MMD, 0xfffd ## Port8ModeRegister 49 | .set P8HMD, 0xfffe ## Port8ModeRegister 50 | 51 | 52 | .set REG_IAGR, 0xfc0e 53 | .set REG_UNICR, 0xfc44 54 | .set UNID, (1<<0) 55 | 56 | .set REG_ADB0, 0xfcd2 57 | .set REG_ADB1, 0xfcd6 58 | .set REG_ADBCTRL, 0xfcda 59 | 60 | .set ADB0ACK, (0x01) 61 | .set ADB1ACK, (0x02) 62 | .set ADB0_ON, (0x04) 63 | .set ADB1_ON, (0x08) 64 | .set ADB01_ON, (ADB0_ON | ADB1_ON) 65 | 66 | 67 | .set NMICR, 0xfc40 68 | 69 | .set REG_BSWAPL, 0xFFCC 70 | .set REG_BSWAPH, 0xFFCE 71 | 72 | .set SC0CTR, 0xfd80 73 | .set SC0TRB, 0xfd82 74 | 75 | 76 | /*##############################################################################*/ 77 | /* Macros */ 78 | /*##############################################################################*/ 79 | 80 | .macro CLI 81 | and 0xf7ff, psw 82 | nop 83 | nop 84 | .endm 85 | 86 | .macro STI 87 | or 0x800, psw 88 | .endm 89 | 90 | 91 | /* helper macro for correct absolute 24bit jumps */ 92 | .macro jmpabsOrg addr 93 | jmp \addr-.+\addr 94 | .endm 95 | 96 | .macro jmpabs addr 97 | mov a0, (-8, a3) 98 | mov \addr, a0 99 | mov a0, (-4, a3) 100 | mov (-8, a3), a0 101 | add -4, a3 102 | rts 103 | .endm 104 | 105 | .macro jsrabs addr # damn 0x14 bytes... help :s 106 | add -8, a3 # 107 | mov a0, (-4, a3) # save a0 108 | mov .+0x11, a0 # push return address (here) 109 | mov a0, (4, a3) 110 | mov \addr, a0 # push return address (jsr dest) 111 | mov a0, (a3) 112 | mov (-4, a3), a0 # restore a0 113 | rts 114 | .endm 115 | 116 | 117 | /* helper macro for correct absolute 24bit jsrs */ 118 | .macro jsrabsOrg addr 119 | jsr \addr-.+\addr 120 | .endm 121 | 122 | /* jumps to Addr by using the stack, without modifying registers */ 123 | .macro JmpSaveReg Addr 124 | sub 8, a3 125 | mov a1, (a3) 126 | mov \Addr, a1 127 | mov a1, (4, a3) 128 | mov (a3), a1 129 | add 4, a3 130 | rts 131 | .endm 132 | 133 | .macro IMM24Bit Addr 134 | .byte ((\Addr) & 0xFF) 135 | .byte (((\Addr) >> 8) & 0xFF) 136 | .byte ((\Addr) >> 16) & 0xFF) 137 | .endm 138 | 139 | .macro bitset Addr bit 140 | .byte 0xF3, 0xFE, 0xD0 + \bit 141 | .long (\Addr) + 0xF6000000 # ohne worte :p 142 | .endm 143 | 144 | .macro bitset16 address bit 145 | .byte 0xF5, 0xD0 + \bit 146 | .word \address 147 | .endm 148 | 149 | .macro bitclr address bit 150 | .byte 0xF5, 0xD8 + \bit 151 | .word \address 152 | .endm 153 | 154 | .macro tbzAbs addr, bit, label 155 | .byte 0xF3, 0xFE, (0xC0 + \bit) 156 | .set O\addr\bit\label, (\label-.)-4 157 | .long \addr + (O\addr\bit\label << 24) 158 | .endm 159 | 160 | .macro tbnzAbs addr, bit, label 161 | .byte 0xF3, 0xFE, (0xC8 + \bit) 162 | .set O\addr\bit\label, (\label-.)-4 163 | .long \addr + (O\addr\bit\label << 24) 164 | .endm 165 | 166 | 167 | .macro CallDCCommand CmdNum 168 | jsr \CmdNum * 4 + 0x40d000 - 4 -.+\CmdNum * 4 + 0x40d000 - 4 169 | .endm 170 | 171 | 172 | .macro DBGOut8 Value 173 | mov \Value, a0 174 | mov 1, d0 175 | jsr SUB_DbgOutBuffer 176 | .endm 177 | 178 | .macro DBGOutReg8 Reg 179 | mov \Reg, d0 180 | jsr SUB_DbgOutByte 181 | .endm 182 | 183 | .macro DBGOutReg16 Reg 184 | movb \Reg, d0 185 | jsr SUB_DbgOutByte 186 | ror d0 187 | ror d0 188 | ror d0 189 | ror d0 190 | ror d0 191 | ror d0 192 | ror d0 193 | ror d0 194 | jsr SUB_DbgOutByte 195 | .endm 196 | 197 | 198 | 199 | /*##############################################################################*/ 200 | /* P80, P81 serial transfer macros */ 201 | /*##############################################################################*/ 202 | .macro PDATA_HI 203 | .byte 0xF5, 0xD0, 0xC8 ,0xFF # P80_HI 204 | .endm 205 | 206 | .macro PDATA_LO 207 | .byte 0xF5, 0xD8, 0xC8 ,0xFF # P80_LO 208 | .endm 209 | 210 | .macro PCLOCK_HI 211 | .byte 0xF5, 0xD1, 0xC8 ,0xFF # P81_HI 212 | .endm 213 | 214 | .macro PCLOCK_LO 215 | .byte 0xF5, 0xD9, 0xC8 ,0xFF # P81_LO 216 | .endm 217 | 218 | .macro P4IN_SET5 219 | .byte 0xF5, 0xD5, 0xD4, 0xFF 220 | .endm 221 | 222 | .macro P4IN_CLR5 223 | .byte 0xF5, 0xDD, 0xD4, 0xFF 224 | .endm 225 | 226 | .macro P80_HI 227 | PDATA_HI 228 | .endm 229 | 230 | .macro P80_LO 231 | PDATA_LO 232 | .endm 233 | 234 | .macro P81_HI 235 | PCLOCK_HI 236 | .endm 237 | 238 | .macro P81_LO 239 | PCLOCK_LO 240 | .endm 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | /* TBZ(ADDR_24)BIT, DEST: 253 | f3 fe c0 + bit addr_l addr_m addr_h reloffset 254 | 255 | 256 | .macro m_tbz addr bit dest 257 | .byte 0xF3, 0xFE 258 | .byte 0xC0 + \bit 259 | .word \addr 260 | .byte 0x00 261 | .byte 0xfd 262 | .byte \dest-. 263 | .endm 264 | 265 | m_tbz 0x1234 5 drivecode_init 266 | m_tbz 0x1234 5 drivecode_init 267 | 268 | */ -------------------------------------------------------------------------------- /Drivecode/Source/old_unused/1.03a/PPC.h: -------------------------------------------------------------------------------- 1 | 2 | 3 | #======================================================================= 4 | # Constants 5 | #======================================================================= 6 | .equ PAD_LEFT, 0x0001 7 | .equ PAD_RIGHT, 0x0002 8 | .equ PAD_DOWN, 0x0004 9 | .equ PAD_UP, 0x0008 10 | .equ PAD_Z, 0x0010 11 | .equ PAD_R, 0x0020 12 | .equ PAD_L, 0x0040 13 | .equ PAD_A, 0x0100 14 | .equ PAD_B, 0x0200 15 | .equ PAD_X, 0x0400 16 | .equ PAD_Y, 0x0800 17 | .equ PAD_START, 0x1000 18 | .equ PAD_CLEFT, 0x2000 19 | .equ PAD_CRIGHT, 0x4000 20 | .equ PAD_CDOWN, 0x8000 21 | .equ PAD_CUP, 0x10000 22 | 23 | 24 | .equ DVD0, 0x6000 25 | .equ DVD1, 0x6004 26 | .equ DVD2, 0x6008 27 | .equ DVD3, 0x600c 28 | .equ DVD4, 0x6010 29 | .equ DVD5, 0x6014 30 | .equ DVD6, 0x6018 31 | .equ DVD7, 0x601c 32 | .equ DVD8, 0x6020 33 | 34 | 35 | #======================================================================= 36 | # General PPC macros 37 | #======================================================================= 38 | 39 | .macro babs addr 40 | b \addr-.+\addr 41 | .endm 42 | 43 | .macro li32 reg, imm32 44 | lis \reg, (\imm32 >> 16) 45 | ori \reg, \reg, (\imm32 & 0xFFFF) 46 | .endm 47 | 48 | .macro GetRelocAddr reg, label 49 | bcl 20,31,$+4 50 | mflr \reg 51 | addi \reg, \reg, (\label)-.+4 52 | .endm 53 | 54 | 55 | #======================================================================= 56 | # Log to DVD Memory macros 57 | #======================================================================= 58 | 59 | #--------------------------------------------- 60 | # Logs a single 32bit value or Register 61 | #--------------------------------------------- 62 | .macro DVDMemLogImm ImmReg, DvdMemAddress = 0x40d800 63 | mr r2, \ImmReg 64 | stwu r2, -4(sp) 65 | DVDMemLogRegPtr sp, 4, \DvdMemAddress 66 | addi sp, sp, 4 67 | .endm 68 | 69 | #------------------------------------------------- 70 | # Logs a number of bytes at given address 71 | #------------------------------------------------- 72 | .macro DVDMemLog Address, Size, DvdMemAddress = 0x40d800 73 | lis r2,(\Address >> 16) # GCMem read address 74 | ori r2, r2, (\Address & 0xFFFF) 75 | DVDMemLogRegPtr r2, \Size, \DvdMemAddress 76 | .endm 77 | 78 | #---------------------------------------------- 79 | # Logs a number of bytes at register address 80 | #---------------------------------------------- 81 | .macro DVDMemLogRegPtr Reg, Size, DvdMemAddress = 0x40d800 82 | li r5, (\Size / 4) 83 | mtctr r5 84 | mr r2, \Reg # Source Address 85 | lis r5,(\DvdMemAddress >> 16) # DVDMem dest address 86 | ori r5, r5, (\DvdMemAddress & 0xFFFF) 87 | lwzu r9, 0(r2) 88 | 89 | DumpMemLoop\DvdMemAddress: 90 | 91 | bl SUB_WriteDriveMem 92 | addi r5, r5, 4 # next address 93 | lwzu r9, 4(r2) # read next dword 94 | bdnz DumpMemLoop\DvdMemAddress # write to drive 95 | .endm 96 | 97 | 98 | 99 | -------------------------------------------------------------------------------- /Drivecode/Source/old_unused/1.03a/QLite Main.asm.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/Drivecode/Source/old_unused/1.03a/QLite Main.asm.c -------------------------------------------------------------------------------- /Drivecode/Source/old_unused/1.03a/QLite.h: -------------------------------------------------------------------------------- 1 | 2 | 3 | .global QCODEImageBase 4 | 5 | 6 | .section absolute 7 | .include "source/mn10200.h" 8 | 9 | 10 | .org 0xfcda 11 | ADBCTRL: 12 | 13 | .org 0xFD83 14 | SC0STR: 15 | 16 | #------------------------------------------------------------------------------------------ 17 | # Read ahead dma buffer addresses 18 | #------------------------------------------------------------------------------------------ 19 | .equ LBA_READAHEAD_BUFFER, 0x417100 20 | .equ LBA0, LBA_READAHEAD_BUFFER + (0x810 * 0) 21 | .equ LBA4, LBA_READAHEAD_BUFFER + (0x810 * 4) 22 | .equ LBA7, LBA_READAHEAD_BUFFER + (0x810 * 7) 23 | .equ LBA_APPL, LBA4 + 0x440 24 | .equ LBA_APPL_EPVEC, LBA_APPL + 0x12 25 | .equ LBA_APPL_SIZE, LBA_APPL + 0x16 26 | .equ LBA_APPL_CODE, LBA_APPL + 0x20 27 | 28 | 29 | #------------------------------------------------------------------------------------------ 30 | # firmware fixed addresses 31 | #------------------------------------------------------------------------------------------ 32 | .equ FwIrqVec, 0x804c 33 | .equ FwIrqDepth, 0x805b 34 | .equ FwData1, 0x008000 35 | .equ FwData1_Size, 0x6e 36 | .equ FwBSS, 0x00806e 37 | .equ FwInitDrive, 0x0808aa 38 | .equ FwIntHandler, 0x80a74 39 | .equ FwHLECmdBuffer, 0x40ebe6 40 | 41 | #------------------------------------------------------------------------------------------ 42 | # firmware version addresses 43 | #------------------------------------------------------------------------------------------ 44 | 45 | .macro IMM24Bit Addr 46 | .byte (\Addr & 0xFF) 47 | .byte (\Addr >> 8 & 0xFF) 48 | .byte (\Addr >> 16 & 0xFF) 49 | .endm 50 | 51 | .macro FwAddrImp16 Name P1, P2, P3 52 | X\Name: 53 | IMM24Bit \P1 54 | IMM24Bit \P2 55 | IMM24Bit \P3 56 | .set \Name, 0x003333 + (FWIMPORTS << 16) 57 | .set FWIMPORTS, FWIMPORTS+1 58 | .endm 59 | 60 | .macro FwAddrImp24 Name P1, P2, P3 61 | X\Name: 62 | IMM24Bit \P1 63 | IMM24Bit \P2 64 | IMM24Bit \P3 65 | .set \Name, 0x003333 + (FWIMPORTS << 16) 66 | .set FWIMPORTS, FWIMPORTS+1 67 | .endm 68 | 69 | 70 | /* .macro FwAddrImp16 Name P1, P2, P3 71 | X\Name: 72 | IMM24Bit \P1 73 | .word (\P1)-(\P2) 74 | .word (\P1)-(\P3) 75 | .set \Name, 0x003333 + (FWIMPORTS << 16) 76 | .set FWIMPORTS, FWIMPORTS+1 77 | .endm 78 | 79 | .macro FwAddrImp24 Name P1, P2, P3 80 | FwAddrImp16 \Name \P1, \P2, \P3 81 | .endm 82 | */ 83 | 84 | .set FWIMPORTS, 0x01; 85 | 86 | 87 | 88 | /* 89 | FwAddrImp16 FwInitState1 0x807D, 0x8071, 0x8079 90 | FwAddrImp16 FwInitState2 0x8082, 0x8076, 0x807e 91 | FwAddrImp16 FwLastHLECmd 0x80f4, 0x80e8, 0x80f0 92 | FwAddrImp24 FwInitDriveLow 0x08aed8, 0x08b1f5, 0x08af25 93 | FwAddrImp24 FwInitSpinup 0x083bad, 0x083ba5, 0x083bad 94 | FwAddrImp24 FwStartDrive 0x0878f8, 0x0878f0, 0x0878f8 95 | FwAddrImp24 FwSetInitState 0x08aee8, 0x08b205, 0x08af35 96 | FwAddrImp24 FwContinueReset 0x08d9b6, 0x08d956, 0x08da11 97 | FwAddrImp24 FwInitThread 0x08dd0d, 0x08dcad, 0x08dd68 98 | FwAddrImp24 FwThreadSetup 0x08ea03, 0x08e9a1, 0x08ea55 99 | */ 100 | -------------------------------------------------------------------------------- /Drivecode/Source/old_unused/1.03a/QLiteBreakpoints.asm.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/Drivecode/Source/old_unused/1.03a/QLiteBreakpoints.asm.c -------------------------------------------------------------------------------- /Drivecode/Source/old_unused/1.03a/QLiteDbg.asm.c: -------------------------------------------------------------------------------- 1 | 2 | 3 | #==============================================# 4 | # Debug data # 5 | #==============================================# 6 | bLastTime: .byte 0x00 7 | bLastLoginByte: .byte 0x99 8 | 9 | 10 | #==========================================================# 11 | # Debug init # 12 | #==========================================================# 13 | DBGInit: 14 | 15 | # enable dbgcommands 16 | mov 0x01, d0 17 | movb d0, (FwDbgstate) 18 | 19 | # enable rx and tx 20 | mov 0x8080, d1 21 | mov d1, (SC0CTR) 22 | rts 23 | 24 | #==================================================================================# 25 | # Cyclic Debug update function # 26 | #==================================================================================# 27 | DBGUpdate: 28 | 29 | mov 0x01, d0 30 | movb d0, (FwDbgstate) # enable dbgcommands 31 | jsr SUB_LogDiscCheckState 32 | rts 33 | 34 | 35 | /***********************************************************************/ 36 | SUB_DbgOnTimerSlow: 37 | /***********************************************************************/ 38 | rts 39 | 40 | /***********************************************************************/ 41 | SUB_LogDiscCheckState: 42 | /***********************************************************************/ 43 | 44 | CLI 45 | movbu (bLastLoginByte), d1 46 | movbu (0x40ead2), d0 # 0x8069 47 | movb d0, (bLastLoginByte) 48 | STI 49 | 50 | cmp d0, d1 51 | beq noLoginByte 52 | jsr Sub_SendByteSerial 53 | 54 | /* movbu (bLastLoginByte), d0 55 | add 1, d0 56 | movb d0, (bLastLoginByte) 57 | */ 58 | 59 | noLoginByte: 60 | rts 61 | 62 | #END 63 | 64 | 65 | /***********************************************************************/ 66 | Sub_SendByteSerial: # (d0 = byte) 67 | /***********************************************************************/ 68 | CLI 69 | # enable rx and tx 70 | mov 0x8080, d1 71 | mov d1, (SC0CTR) 72 | # P80_HI # request to send 73 | #1: tbnzAbs SC0STR, 7, 1b # wait until ready for send 74 | movb d0, (SC0TRB) # send 75 | # P80_LO 76 | STI 77 | 78 | mov 10, d0 79 | jsr SUB_Sleep 80 | 81 | rts 82 | 83 | 84 | /***********************************************************************/ 85 | SUB_WaitForP80Low: 86 | /***********************************************************************/ 87 | and 0xf7ff,psw 88 | nop 89 | nop 90 | mov 1, d0 91 | movb d0, (P8OUT) 92 | 93 | waitForPort: 94 | movb (P8IN), d0 95 | and 1, d0 96 | bne waitForPort 97 | mov 1, d0 98 | movb d0, (P8OUT) 99 | or 0x0800, psw 100 | rts 101 | #END 102 | 103 | /***********************************************************************/ 104 | SUB_UpdateSerialOut: 105 | /***********************************************************************/ 106 | movb (DbgReadPtr), d1 # get read and write ptrs 107 | movb (DbgWritePtr), d2 108 | mov DbgDumpStart, a0 # point a0 to ringbuffer read offset 109 | 110 | add d1, a0 111 | cmp d1, d2 # has data ? 112 | beq NoSendData 113 | 114 | and 0xf7ff,psw 115 | nop 116 | nop 117 | 118 | add 1, d1 # inc read ptr 119 | movb d1, (DbgReadPtr) 120 | movbu (a0), d0 # send data byte 121 | 122 | jsr Sub_SendByteSerial 123 | or 0x0800, psw 124 | 125 | NoSendData: 126 | rts 127 | #END 128 | 129 | /***********************************************************************/ 130 | SUB_Sleep: # (dO = DELAY in ~ msec) 131 | /***********************************************************************/ 132 | delayLoop1: 133 | mov 0x10,d1 134 | delayLoop2: 135 | sub 1, d1 136 | bne delayLoop2 137 | sub 1, d0 138 | bne delayLoop1 139 | rts 140 | #END 141 | 142 | /***********************************************************************/ 143 | Sub_FlashLED_P80: /* blue */ # 144 | /***********************************************************************/ 145 | sub 0x08, a3 # push regs 146 | mov d0, (0x00,a3) 147 | mov d1, (0x04,a3) 148 | and 0xf7ff, psw 149 | nop 150 | nop 151 | 152 | P80_HI 153 | mov 0x100, d0 154 | jsr SUB_Sleep 155 | P80_LO 156 | 157 | or 0x0800, psw # pop regs 158 | mov (0x00,a3), d0 159 | mov (0x04,a3), d1 160 | add 0x08, a3 161 | rts 162 | #END 163 | 164 | /***********************************************************************/ 165 | Sub_FlashLED_P81: /* red */ # 166 | /***********************************************************************/ 167 | and 0xf7ff, psw 168 | 169 | P81_HI 170 | mov 0x90, d0 171 | jsr SUB_Sleep 172 | P81_LO 173 | 174 | or 0x0800, psw 175 | rts 176 | #END 177 | 178 | 179 | /***********************************************************************/ 180 | SUB_DbgOutByte: # (d0: byte) 181 | /***********************************************************************/ 182 | sub 0x0a, a3 # push used regs 183 | mov d1, (0x00,a3) 184 | mov d2, (0x02,a3) 185 | mov d0, (0x04,a3) 186 | mov a0, (0x06,a3) 187 | 188 | and 0xf7ff, psw 189 | nop 190 | nop 191 | 192 | mov DbgDumpStart, a0 # point a0 to ringbuffer write offset 193 | movb (DbgWritePtr), d1 194 | add d1, a0 195 | 196 | movb (DbgReadPtr), d2 197 | add 1, d1 198 | and 0xff, d1 199 | 200 | cmp d2, d1 # write ptr +1 = read ptr ? 201 | bne NoDbgBufferFull 202 | 203 | mov 0x44, d0 # write DD as buffer full sign 204 | movb d0, (a0) # and dont log the byte 205 | bra DbgOutEnd 206 | 207 | NoDbgBufferFull: 208 | movb d0, (a0) # write byte 209 | movb d1, (DbgWritePtr) # inc write ptr 210 | 211 | DbgOutEnd: 212 | 213 | or 0x0800, psw 214 | mov (0x00,a3), d1 # pop used regs 215 | mov (0x02,a3), d2 216 | mov (0x04,a3), d0 217 | mov (0x06,a3), a0 218 | add 0x0a, a3 219 | rts 220 | 221 | 222 | /***********************************************************************/ 223 | SUB_DbgOutBuffer: # (a0: address d0: bytes) 224 | /***********************************************************************/ 225 | .if DBGOUTPUT == 1 226 | sub 0x06, a3 # push used regs 227 | mov a0, (0x00,a3) 228 | mov d1, (0x04,a3) 229 | mov d0, d1 # d1 - counter 230 | 231 | mov 0xEF, d0 232 | jsr SUB_DbgOutByte 233 | 234 | DbgOutBufferLoop: 235 | 236 | movbu (a0), d0 237 | jsr SUB_DbgOutByte 238 | 239 | add 1, a0 240 | sub 1, d1 241 | cmp 0, d1 242 | bne DbgOutBufferLoop 243 | 244 | mov (0x00,a3), a0 # pop used regs 245 | mov (0x04,a3), d1 246 | add 0x06, a3 247 | .endif 248 | rts 249 | #END 250 | 251 | -------------------------------------------------------------------------------- /Drivecode/Source/old_unused/1.03a/QLiteIPL.asm.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/Drivecode/Source/old_unused/1.03a/QLiteIPL.asm.c -------------------------------------------------------------------------------- /Drivecode/Source/old_unused/1.03a/QLiteIPLDbg.asm.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/Drivecode/Source/old_unused/1.03a/QLiteIPLDbg.asm.c -------------------------------------------------------------------------------- /Drivecode/Source/old_unused/1.03a/QliteGlobal.h: -------------------------------------------------------------------------------- 1 | 2 | 3 | #------------------------------------------------------------------------------------------ 4 | # Main Config 5 | #------------------------------------------------------------------------------------------ 6 | .set DREFIX, 1 /* fix some read errors (1:on 2: switchable) */ 7 | .set DREFIXCFG, 0 /* dre fix is switchable */ 8 | .set FASTBOOT, 1 /* do fast login */ 9 | .set AUTHPLUSR, 1 /* enable login of dvd+rw */ 10 | .set AUTHDMI, 1 /* patch dmicheck for dvd-+rw */ 11 | .equ READ_ECMADVDS, 1 /* enable reading of dvd+-rw */ 12 | .set DOREGIONPATCH, 1 /* enable PAL<->NTSC patching */ 13 | .set RELEASEBUILD, 1 /* dont do fancy nonsense :) */ 14 | .set CREDITS, 1 /* <-insert-> */ 15 | .set BYPASS, 1 /* enable unload command */ 16 | .set AUTOBYPASS, 1 /* unload automatically on memwrite */ 17 | 18 | #------------------------------------------------------------------------------------------ 19 | # Debug Config 20 | #------------------------------------------------------------------------------------------ 21 | .set DBGMODE, 0 /* enable various dbg functions */ 22 | .set DBGOUTPUT, 0 /* enableDEBUG OUTPUT via serial if */ 23 | .set USEDBGBP, 0 /* gp debug breakpoint */ 24 | -------------------------------------------------------------------------------- /Drivecode/Source/old_unused/1.03a/XenoAT.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/Drivecode/Source/old_unused/1.03a/XenoAT.bin -------------------------------------------------------------------------------- /Drivecode/bin/Credits.dol: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Drivecode/bin/Disasm/IPLBoot.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/Drivecode/bin/Disasm/IPLBoot.bin -------------------------------------------------------------------------------- /Drivecode/bin/Disasm/QLiteApploader.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/Drivecode/bin/Disasm/QLiteApploader.bin -------------------------------------------------------------------------------- /Drivecode/bin/Disasm/disasm1.bat: -------------------------------------------------------------------------------- 1 | @call delfile qcode_lo.bin.txt 2 | dis10200 disasm3.cmd 3 | @echo 40C600>> disasm3.cmd 4 | @dis10200 DvdTest.rtf -------------------------------------------------------------------------------- /DvdTest/Bin/dvdtest.bin.dec.gcb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/DvdTest/Bin/dvdtest.bin.dec.gcb -------------------------------------------------------------------------------- /DvdTest/Bin/gcos.dol.lnk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/DvdTest/Bin/gcos.dol.lnk -------------------------------------------------------------------------------- /DvdTest/Bin/go.bat: -------------------------------------------------------------------------------- 1 | cmd -------------------------------------------------------------------------------- /DvdTest/Bin/iplkey.xor: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/DvdTest/Bin/iplkey.xor -------------------------------------------------------------------------------- /DvdTest/Bin/stacktest.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fswiss\fprq2\fcharset0 FixedSys;}{\f1\fnil\fcharset0 Courier New;}} 2 | {\colortbl ;\red0\green128\blue0;\red0\green0\blue255;\red128\green0\blue0;\red255\green0\blue0;} 3 | {\*\generator Msftedit 5.41.15.1503;}\viewkind4\uc1\pard\lang1031\f0\fs18\par 4 | \cf1\b\f1\fs20 8003d530 <_Z6TestXYPmS_>:\par 5 | \cf0\b0 8003d530:\tab 81 23 00 00 \tab lwz r9,0(\cf2\b r3\cf0\b0 )\par 6 | 8003d534:\tab 39 29 00 80 \tab addi r9,r9,\b 128\b0\par 7 | 8003d538:\tab 91 23 00 00 \tab stw r9,0(\cf2\b r3\cf0\b0 )\par 8 | \par 9 | 8003d53c:\tab 81 24 00 00 \tab lwz r9,0(\cf3\b r4\cf0\b0 )\par 10 | 8003d540:\tab 39 29 00 64 \tab addi r9,r9,\b 100\b0\par 11 | 8003d544:\tab 91 24 00 00 \tab stw r9,0(\cf3\b r4\cf0\b0 )\par 12 | \par 13 | 8003d548:\tab 81 23 00 00 \tab lwz r9,0(\cf2\b r3\cf0\b0 )\par 14 | 8003d54c:\tab 39 29 00 2b \tab addi r9,r9,\b 43\b0\par 15 | 8003d550:\tab 91 23 00 00 \tab stw r9,0(\cf2\b r3\cf0\b0 )\par 16 | 8003d554:\tab 4e 80 00 20 \tab blr\par 17 | \par 18 | \cf1\b 8003d558
:\cf0\b0\par 19 | 8003d558:\tab 94 21 ff e0 \tab stwu \b sp\b0 ,-32(\b sp\b0 )\par 20 | 8003d55c:\tab 7c 08 02 a6 \tab mflr r0\par 21 | 8003d560:\tab 90 01 00 24 \tab stw r0,36(\b sp\b0 )\par 22 | 8003d564:\tab 38 61 00 08 \tab addi \cf2\b r3\cf0\b0 ,\b sp\b0 ,8\tab\tab\tab\tab\cf4\b // r3 = sp+8\cf0\b0\par 23 | 8003d568:\tab 38 00 00 15 \tab li r0,\cf4\b 21\cf0\b0\par 24 | 8003d56c:\tab 38 81 00 0c \tab addi \cf3\b r4\cf0\b0 ,\b sp\b0 ,12\tab\tab\tab\tab\cf4\b // r4 = sp+12\cf0\b0\par 25 | 8003d570:\tab 90 01 00 08 \tab stw r0,8(\b sp\b0 )\par 26 | 8003d574:\tab bf 81 00 10 \tab stmw r28,16(\b sp\b0 )\par 27 | 8003d578:\tab 38 00 00 17 \tab li r0,\cf4\b 23\cf0\b0\par 28 | 8003d57c:\tab 90 01 00 0c \tab stw r0,12(\b sp\b0 )\par 29 | 8003d580:\tab 4b ff ff b1 \tab bl 8003d530 <_\cf1\b Z6TestXYPmS\cf0\b0 _>\par 30 | \par 31 | \par 32 | \par 33 | \f0\fs18\par 34 | \par 35 | \cf1\b\f1\fs20 8003d530 <_Z6TestXYPmS_>:\cf0\b0\par 36 | 8003d530:\tab 81 23 00 00 \tab lwz r9,0(r3)\par 37 | 8003d534:\tab 39 29 00 80 \tab addi r9,r9,128\par 38 | 8003d538:\tab 91 23 00 00 \tab stw r9,0(r3)\par 39 | 8003d53c:\tab 81 24 00 00 \tab lwz r9,0(r4)\par 40 | 8003d540:\tab 39 29 00 64 \tab addi r9,r9,100\par 41 | 8003d544:\tab 91 24 00 00 \tab stw r9,0(r4)\par 42 | 8003d548:\tab 4e 80 00 20 \tab blr\f0\fs18\par 43 | \par 44 | \par 45 | \cf1\b\f1\fs20 8003d54c
:\par 46 | \cf0\b0 8003d54c:\tab 94 21 ff e0 \tab stwu \b sp\b0 ,-32(\b sp\b0 )\par 47 | 8003d550:\tab 7c 08 02 a6 \tab mflr r0\par 48 | 8003d554:\tab 90 01 00 24 \tab stw r0,36(\b sp\b0 )\par 49 | 8003d558:\tab 38 61 00 08 \tab addi r3,sp,8\par 50 | 8003d55c:\tab 38 00 00 15 \tab li r0,\cf4\b 21\cf0\b0\par 51 | 8003d560:\tab 38 81 00 0c \tab addi r4,\b sp\b0 ,12\par 52 | 8003d564:\tab 90 01 00 08 \tab stw r0,\tab 8(\b sp\b0 )\tab\b sp+8 21\b0\par 53 | 8003d568:\tab bf 81 00 10 \tab stmw r28,16(\b sp\b0 )\tab\b sp+16 - sp+26\b0\par 54 | 8003d56c:\tab 38 00 00 17 \tab li r0,\cf4\b 23\cf0\b0\par 55 | 8003d570:\tab 90 01 00 0c \tab stw r0,12(\b sp\b0 )\tab\tab\b sp+8 21\b0\par 56 | 8003d574:\tab 4b ff ff bd \tab bl 8003d530 <_Z6TestXYPmS_>\f0\fs18\par 57 | \fs20\par 58 | } 59 | -------------------------------------------------------------------------------- /DvdTest/Drivecode.s: -------------------------------------------------------------------------------- 1 | 2 | 3 | .globl SUB_BootXenoShell 4 | 5 | 6 | .equ DVD0, 0x6000 7 | .equ DVD1, 0x6004 8 | .equ DVD2, 0x6008 9 | .equ DVD3, 0x600c 10 | .equ DVD4, 0x6010 11 | .equ DVD5, 0x6014 12 | .equ DVD6, 0x6018 13 | .equ DVD7, 0x601c 14 | .equ DVD8, 0x6020 15 | 16 | 17 | .macro li32 reg, imm32 18 | lis \reg, (\imm32 >> 16) 19 | ori \reg, \reg, (\imm32 & 0xFFFF) 20 | .endm 21 | 22 | .macro GetRelocAddr reg, label 23 | bcl 20,31,$+4 24 | mflr \reg 25 | addi \reg, \reg, (\label)-.+4 26 | .endm 27 | 28 | .equ CREDITS_SIZE, 4056+4 29 | .equ CMD_REQUESTCREDITS, 0x2700 30 | 31 | #======================================================================= 32 | SUB_BootXenoShell: 33 | #======================================================================= 34 | 35 | mflr r30 36 | subi sp, sp, 0x78 # push all gp registers 37 | stmw r2, 0(sp) 38 | 39 | 40 | XenoShellBootMC: 41 | # lis r3, 0x8000 42 | # li32 r4, 0x2badc0de 43 | # stw r4, 0(r3) 44 | 45 | doCredits: 46 | #===============================================================# 47 | # retrieve Credits binary and execute instead of game # 48 | #===============================================================# 49 | lis r0, 0xE300 50 | bl SUB_SendCustomCommand 51 | 52 | lis r0, CMD_REQUESTCREDITS 53 | bl SUB_SendCustomCommand 54 | 55 | readBuffer: 56 | li32 r3, 3000 57 | bl SUB_Delay 58 | bl SUB_DVDReadMemBlock 59 | 60 | lis r3, 0x8170 61 | lwz r3, -4(r3) 62 | li32 r4, 0x2bad2bad 63 | sub r3, r3, r4 64 | cmpwi r3, 0 65 | bne readBuffer 66 | 67 | bl SUB_DVDReset 68 | 69 | lmw r2, 0(sp) # pop all gp registers & lr 70 | addi sp, sp, 0x78 71 | mtlr r30 # exit 72 | blr 73 | 74 | 75 | #======================================================================= 76 | SUB_SendCustomCommand: # R0: Command Byte 77 | #======================================================================= 78 | lis r9 , 0xCC00 # r3 = DVD[0] 79 | stw r0 , 0x6008(r9) # dvd[2] = Command 80 | li r0 , 0x2e # dvd[0] = 0x2e 81 | stw r0 , 0x6000(r9) 82 | li r0 , 1 83 | stw r0 , 0x601C(r9) # dvd[7] = 1 84 | 85 | SendCmd_Loop: 86 | lwz r0 , 0x601C(r9) 87 | andi. r0 , r0 , 0x01 88 | cmpwi r0 , 0 89 | bne SendCmd_Loop 90 | blr 91 | 92 | 93 | #======================================================================= 94 | SUB_DVDReadMemBlock: # R0: DVD-Address 95 | #======================================================================= 96 | mflr r31 97 | lis r9, 0xCC00 98 | li32 r3, (0x40D800-4) # R3: DVD Address 99 | li32 r4, (0x81700000-8) # R4: GC Dest mem address 100 | li r5, CREDITS_SIZE # R5: bytes to read 101 | 102 | ReadBlockLoop: 103 | stw r3, DVD3(r9) # dvd[3] = DVD-Address 104 | lis r0, 0x0001 # dvd[4] = 0x00010000 105 | stw r0, DVD4(r9) 106 | 107 | lis r0, 0xFE01 # dvd[2] = 0x0xFE010000 108 | bl SUB_SendCustomCommand 109 | 110 | lwz r0, DVD8(r9) # get read dword 111 | stwu r0, 4(r4) # store in mem 112 | 113 | addi r3, r3, 4 114 | subi r5, r5, 4 115 | cmpwi r5, 0 116 | bne ReadBlockLoop 117 | mtlr r31 118 | blr 119 | 120 | #======================================================================= 121 | SUB_Delay: # R3: Delay 122 | #======================================================================= 123 | Delay: 124 | lis r4, 0x0003 125 | DelayLoopInner: 126 | subi r4 , r4 , 1 127 | cmpwi r4 , 0 128 | bne DelayLoopInner 129 | subi r3 , r3 , 1 130 | cmpwi r3 , 0 131 | bne Delay 132 | blr 133 | 134 | #======================================================================= 135 | SUB_DVDReset: 136 | #======================================================================= 137 | lis r4 , 0xcc00 138 | ori r4 , r4 , 0x3024 139 | lwz r5 , 0(r4) 140 | rlwinm r5 , r5 , 0 , 30 , 28 141 | ori r5 , r5 , 1 142 | stw r5 , 0(r4) 143 | lwz r5 , 0(r4) 144 | ori r5 , r5 , 4 145 | ori r5 , r5 , 1 146 | stw r5 , 0(r4) 147 | blr 148 | 149 | /* 150 | .global _g_pQCode 151 | .global _g_pQCode_End 152 | 153 | .global _g_pQCode_Lo 154 | .global _g_pQCode_Lo_End 155 | 156 | .global _g_pQCode_Hi 157 | .global _g_pQCode_Hi_End 158 | 159 | 160 | 161 | .global _g_pDolImage2 162 | .global _g_pDolImage_End2 163 | 164 | 165 | .align 5 166 | _g_pQCode: 167 | #------------------------------------- 168 | #.incbin "qcode.bin" 169 | #------------------------------------- 170 | _g_pQCode_End: 171 | 172 | 173 | .global _g_pDolImage 174 | .global _g_pDolImage_End 175 | 176 | .align 5 177 | _g_pDolImage: 178 | #------------------------------------- 179 | #.incbin "IPL_PAL.dol" 180 | #.incbin "gcos.dol" 181 | #.incbin "credits.bin" 182 | #.incbin "sdload.dol" 183 | #------------------------------------- 184 | _g_pDolImage_End: 185 | 186 | .align 5 187 | _g_pDolImage2: 188 | #------------------------------------- 189 | #.incbin "credits.bin" 190 | #.incbin "sdload.dol" 191 | #------------------------------------- 192 | _g_pDolImage_End2: 193 | 194 | .align 5 195 | _g_pQCode_Lo: 196 | #------------------------------------- 197 | #.incbin "qcode_lo.bin" 198 | #------------------------------------- 199 | _g_pQCode_Lo_End: 200 | 201 | .align 5 202 | _g_pQCode_Hi: 203 | #------------------------------------- 204 | #.incbin "qcode_hi.bin" 205 | #------------------------------------- 206 | _g_pQCode_Hi_End: 207 | */ 208 | 209 | 210 | 211 | -------------------------------------------------------------------------------- /DvdTest/Flash.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/DvdTest/Flash.cpp -------------------------------------------------------------------------------- /DvdTest/GCOS 1.5.patched.dol: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/DvdTest/GCOS 1.5.patched.dol -------------------------------------------------------------------------------- /DvdTest/GCOS_Boot.dol: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/DvdTest/GCOS_Boot.dol -------------------------------------------------------------------------------- /DvdTest/Makefile: -------------------------------------------------------------------------------- 1 | 2 | #---------------------------------------------------------------------------------------------- 3 | # Attempted kinda generic gc makefile 4 | #---------------------------------------------------------------------------------------------- 5 | 6 | 7 | #-------------------------- 8 | # Platform configuration 9 | #-------------------------- 10 | CROSS = powerpc-gekko- 11 | APP_IMAGEBASE = 0x80003100 12 | 13 | #-------------------------- 14 | # Custom configuration 15 | #-------------------------- 16 | POSTBUILD = doltool 17 | 18 | 19 | #-------------------------- 20 | # Generic configuration 21 | #-------------------------- 22 | CC = $(CROSS)gcc 23 | CXX = $(CROSS)g++ 24 | AR = $(CROSS)ar 25 | OBJCOPY = $(CROSS)objcopy 26 | AS = $(CROSS)as 27 | LD = $(CXX) 28 | 29 | #---------------------------------- 30 | # C configuration 31 | #---------------------------------- 32 | CFLAGS = -O2 -fno-exceptions -Wa,-mregnames -Wl,-Ttext, $(APP_IMAGEBASE) -nostdinc 33 | e 34 | #---------------------------------- 35 | # Asm configuration 36 | #---------------------------------- 37 | AFLAGS = -Iinclude 38 | 39 | #---------------------------------- 40 | # Linker configuration 41 | #---------------------------------- 42 | LDFLAGS = -nostdlib 43 | 44 | 45 | 46 | 47 | # Files 48 | MAIN_OBJS = \ 49 | main.o dvdboot.o drivecode.o 50 | 51 | 52 | GCLIB_OBJS 53 | 54 | ngc_gcc -O2 -fno-exceptions -Wa,-mregnames -Wl,-Ttext,%GC_IMAGEBASE% -Wl,-Map,Bin/DvdTest.map -Wl,--omagic 55 | 56 | 57 | -I %GCLIBDIR% -o %BINDIR%/%PROGNAME%.elf %GCLIBDIR%/crt0.s drivecode.s %GCLIBDIR%/cache.s %GCLIBDIR%/GC_Debug.cpp %GCLIBDIR%/GC_Video.cpp %GCLIBDIR%/GC_String.cpp %GCLIBDIR%/GC_Random.cpp %GCLIBDIR%/GC_Pad.cpp %GCLIBDIR%/GC_Dvd.cpp %GCLIBDIR%/GC_Memory.cpp %GCLIBDIR%/GC_Time.cpp main.cpp 58 | 59 | 60 | IO_OBJS = \ 61 | io/video.o io/console.o io/console_font.o io/vsprintf.o \ 62 | io/exi.o io/dvd.o io/GC_Dvd.o io/network.o io/sram.o 63 | # ../GcLib/GC_Dvd.o 64 | 65 | LIBRARIES = 66 | # gdbstub/libgdbstub.a 67 | 68 | 69 | OBJS = lowlevel/crt0.o $(MAIN_OBJS) $(IPL_OBJS) $(LIBRARIES) 70 | 71 | 72 | # Build rules 73 | all: gcos.dol gcos.bin 74 | 75 | clean: 76 | rm -rf $(OBJS) 77 | 78 | realclean: 79 | find -name '*.o' | xargs -r rm 80 | find -name '*.a' | xargs -r rm 81 | find -name '*~' | xargs -r rm 82 | find -name '*.bin' | xargs -r rm 83 | find -name '*.dol' | xargs -r rm 84 | find -name '*.elf' | xargs -r rm 85 | find -name '*.map' | xargs -r rm 86 | find -name '*.tmp' | xargs -r rm 87 | 88 | .c.o: 89 | $(CC) $(CFLAGS) -c -o $@ $*.c 90 | 91 | .cpp.o: 92 | $(CXX) $(CFLAGS) -c -o $@ $*.cpp 93 | 94 | .s.o: 95 | $(CC) $(AFLAGS) -c -o $@ $*.s 96 | 97 | .S.o: 98 | $(CC) $(AFLAGS) -c -o $@ $*.S 99 | 100 | 101 | ################################################### 102 | # GcOs.dol .bin .elf @ 0x81700000 103 | ################################################### 104 | gcos.elf : main_tmp.elf 105 | $(OBJCOPY) -R .comment $< $@ 106 | 107 | gcos.bin: gcos.elf 108 | $(OBJCOPY) -O binary $< $@ 109 | 110 | gcos.dol: gcos.elf 111 | $(POSTBUILD) -d gcos.elf 112 | 113 | main_tmp.elf: $(OBJS) 114 | # $(CC) $(LDFLAGS) -Wl,-n -o main_high.elf -Wl,-Ttext=0x81700000 $(OBJS) -Wl,-Map -Wl,main_high.map 115 | # $(CC) $(LDFLAGS) -Wl,-n -o $@ -Wl,-Ttext=0x80D00000 $(OBJS) -Wl,-Map -Wl,main.map 116 | $(CXX) $(LDFLAGS) -Wl,-n -o $@ -Wl,-Ttext=0x81300000 $(OBJS) -Wl,-Map -Wl,gcos.map 117 | 118 | 119 | gdbstub/libgdbstub.a: 120 | $(MAKE) -C gdbstub 121 | 122 | # TODO: dependencies 123 | -------------------------------------------------------------------------------- /DvdTest/XenoGC 1.03.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/DvdTest/XenoGC 1.03.bin -------------------------------------------------------------------------------- /DvdTest/XenoShell.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/DvdTest/XenoShell.bin -------------------------------------------------------------------------------- /DvdTest/buttons.txt: -------------------------------------------------------------------------------- 1 | ok quick button specs: 2 | 3 | 4 | NORMAL MODE: 5 | A - read sector 6 | X / Y - sector +/- 0x800 7 | DPAD left right - sector +/- 8 | DPAD up down - scroll sector dump 9 | L - do a DVDReset() 10 | START - does the std anaconda swap 11 | Z - jumps to 0x8070000 12 | 13 | HAX0R MODE (hold R): 14 | L - do DVDReadId() 15 | Y - send anaconda unlock commands 16 | X - send custom drivecode 17 | DPAD up down - select drivecode command 18 | A - execute drivecode command 19 | 20 | 21 | LBA shows the sector number, below that is the current error code. 22 | if a command fails, the hexdump gets filled with 0xBB 23 | 24 | if you loose sync you just do a DVDReset and a DVDReadId() ( L , R+L) 25 | 26 | have fun, 27 | 28 | bc 29 | -------------------------------------------------------------------------------- /DvdTest/card.h: -------------------------------------------------------------------------------- 1 | #ifndef __CARD_H__ 2 | #define __CARD_H__ 3 | 4 | //#include "gctypes.h" 5 | 6 | /* slots */ 7 | #define CARD_SLOTA 0 8 | #define CARD_SLOTB 1 9 | 10 | #define CARD_WORKAREA (5*8*1024) 11 | #define CARD_READSIZE 512 12 | #define CARD_FILENAMELEN 32 13 | #define CARD_MAXFILES 128 14 | 15 | /* Errors */ 16 | #define CARD_ERROR_UNLOCKED 1 17 | #define CARD_ERROR_READY 0 18 | #define CARD_ERROR_BUSY -1 19 | #define CARD_ERROR_WRONGDEVICE -2 20 | #define CARD_ERROR_NOCARD -3 21 | #define CARD_ERROR_NOFILE -4 22 | #define CARD_ERROR_IOERROR -5 23 | #define CARD_ERROR_BROKEN -6 24 | #define CARD_ERROR_EXIST -7 25 | #define CARD_ERROR_NOENT -8 26 | #define CARD_ERROR_INSSPACE -9 27 | #define CARD_ERROR_NOPERM -10 28 | #define CARD_ERROR_LIMIT -11 29 | #define CARD_ERROR_NAMETOOLONG -12 30 | #define CARD_ERROR_ENCODING -13 31 | #define CARD_ERROR_CANCELED -14 32 | #define CARD_ERROR_FATAL_ERROR -128 33 | 34 | 35 | /* File attribute defines */ 36 | #define CARD_ATTRIB_PUBLIC 0x04 37 | #define CARD_ATTRIB_NOCOPY 0x08 38 | #define CARD_ATTRIB_NOMOVE 0x10 39 | 40 | /* Banner & Icon Attributes */ 41 | #define CARD_BANNER_W 96 42 | #define CARD_BANNER_H 32 43 | 44 | #define CARD_BANNER_NONE 0x00 45 | #define CARD_BANNER_CI 0x01 46 | #define CARD_BANNER_RGB 0x02 47 | #define CARD_BANNER_MASK 0x03 48 | 49 | #define CARD_MAXICONS 8 50 | #define CARD_ICON_W 32 51 | #define CARD_ICON_H 32 52 | 53 | #define CARD_ICON_NONE 0x00 54 | #define CARD_ICON_CI 0x01 55 | #define CARD_ICON_RGB 0x02 56 | #define CARD_ICON_MASK 0x03 57 | 58 | #define CARD_ANIM_LOOP 0x00 59 | #define CARD_ANIM_BOUNCE 0x04 60 | #define CARD_ANIM_MASK 0x04 61 | 62 | #define CARD_SPEED_END 0x00 63 | #define CARD_SPEED_FAST 0x01 64 | #define CARD_SPEED_MIDDLE 0x02 65 | #define CARD_SPEED_SLOW 0x03 66 | #define CARD_SPEED_MASK 0x03 67 | 68 | #ifdef __cplusplus 69 | extern "C" { 70 | #endif /* __cplusplus */ 71 | 72 | typedef struct _card_file { 73 | s32 chn; 74 | s32 filenum; 75 | s32 offset; 76 | s32 len; 77 | u16 iblock; 78 | } card_file; 79 | 80 | typedef struct _card_dir { 81 | s32 chn; 82 | u32 fileno; 83 | u8 filename[CARD_FILENAMELEN+1]; 84 | u8 gamecode[5]; 85 | u8 company[3]; 86 | bool showall; 87 | } card_dir; 88 | 89 | typedef struct _card_stat { 90 | u8 filename[CARD_FILENAMELEN]; 91 | u32 len; 92 | u32 time; //time since 1970 in seconds 93 | u8 gamecode[4]; 94 | u8 company[2]; 95 | u8 banner_fmt; 96 | u32 icon_addr; 97 | u16 icon_fmt; 98 | u16 icon_speed; 99 | u32 comment_addr; 100 | u32 offset_banner; 101 | u32 offset_banner_tlut; 102 | u32 offset_icon[CARD_MAXICONS]; 103 | u32 offset_icon_tlut; 104 | u32 offset_data; 105 | } card_stat; 106 | 107 | #define CARD_GetBannerFmt(stat) (((stat)->banner_fmt)&CARD_BANNER_MASK) 108 | #define CARD_SetBannerFmt(stat,fmt) ((stat)->banner_fmt = (u8)(((stat)->banner_fmt&~CARD_BANNER_MASK)|(fmt))) 109 | #define CARD_GetIconFmt(stat,n) (((stat)->icon_fmt>>(2*(n)))&CARD_ICON_MASK) 110 | #define CARD_SetIconFmt(stat,n,fmt) ((stat)->icon_fmt = (u16)(((stat)->icon_fmt&~(CARD_ICON_MASK<<(2*(n))))|((fmt)<<(2*(n))))) 111 | #define CARD_GetIconSpeed(stat,n) (((stat)->icon_speed>>(2*(n)))&~CARD_SPEED_MASK); 112 | #define CARD_SetIconSpeed(stat,n,speed) ((stat)->icon_speed = (u16)(((stat)->icon_fmt&~(CARD_SPEED_MASK<<(2*(n))))|((speed)<<(2*(n))))) 113 | #define CARD_SetIconAddr(stat,addr) ((stat)->icon_addr = (u32)(addr)) 114 | #define CARD_SetCommentAddr(stat,addr) ((stat)->comment_addr = (u32)(addr)) 115 | 116 | typedef void (*cardcallback)(s32 chan,s32 result); 117 | 118 | /*new api*/ 119 | s32 CARD_Init(const char *gamecode,const char *company); 120 | s32 CARD_Mount(s32 chn,void *workarea,cardcallback detach_cb); 121 | s32 CARD_MountAsync(s32 chn,void *workarea,cardcallback detach_cb,cardcallback attach_cb); 122 | s32 CARD_Unmount(s32 chn); 123 | s32 CARD_Read(card_file *file,void *buffer,u32 len,u32 offset); 124 | s32 CARD_ReadAsync(card_file *file,void *buffer,u32 len,u32 offset,cardcallback callback); 125 | s32 CARD_Open(s32 chn,const char *filename,card_file *file); 126 | s32 CARD_Close(card_file *file); 127 | s32 CARD_Create(s32 chn,const char *filename,u32 size,card_file *file); 128 | s32 CARD_CreateAsync(s32 chn,const char *filename,u32 size,card_file *file,cardcallback callback); 129 | s32 CARD_Delete(s32 chn,const char *filename); 130 | s32 CARD_DeleteAsync(s32 chn,const char *filename,cardcallback callback); 131 | s32 CARD_Write(card_file *file,void *buffer,u32 len,u32 offset); 132 | s32 CARD_WriteAsync(card_file *file,void *buffer,u32 len,u32 offset,cardcallback callback); 133 | s32 CARD_Format(s32 chn); 134 | s32 CARD_FormatAsync(s32 chn,cardcallback callback); 135 | s32 CARD_GetErrorCode(s32 chn); 136 | s32 CARD_FindFirst(s32 chn, card_dir *dir, bool ShowAllFlag); 137 | s32 CARD_FindNext(card_dir *dir); 138 | s32 CARD_GetSectorSize(s32 chn,u32 *sector_size); 139 | s32 CARD_GetStatus(s32 chn,s32 fileno,card_stat *stats); 140 | s32 CARD_SetStatus(s32 chn,s32 fileno,card_stat *stats); 141 | s32 CARD_SetStatusAsync(s32 chn,s32 fileno,card_stat *stats,cardcallback callback); 142 | s32 CARD_GetAttributes(s32 chn,s32 fileno,u8 *attr); 143 | s32 CARD_SetAttributes(s32 chn,s32 fileno,u8 attr); 144 | s32 CARD_SetAttributesAsync(s32 chn,s32 fileno,u8 attr,cardcallback callback); 145 | 146 | #ifdef __cplusplus 147 | } 148 | #endif /* __cplusplus */ 149 | 150 | #endif 151 | -------------------------------------------------------------------------------- /DvdTest/credits.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/DvdTest/credits.bin -------------------------------------------------------------------------------- /DvdTest/gcos.dol: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/DvdTest/gcos.dol -------------------------------------------------------------------------------- /DvdTest/gctypes.h: -------------------------------------------------------------------------------- 1 | #ifndef __GCTYPES_H__ 2 | #define __GCTYPES_H__ 3 | /*+----------------------------------------------------------------------------------------------+*/ 4 | // typedef's borrowed from the HAM development kit for Gameboy Advance 5 | // See www.ngine.de for information about this fantastic devkit! 6 | /*+----------------------------------------------------------------------------------------------+*/ 7 | 8 | #ifdef __cplusplus 9 | extern "C" { 10 | #endif /* __cplusplus */ 11 | 12 | // bool is a standard type in cplusplus, but not in c. 13 | #ifndef __cplusplus 14 | typedef unsigned char bool; ///< For c++ compatibility 15 | #endif 16 | /*+----------------------------------------------------------------------------------------------+*/ 17 | typedef unsigned char u8; ///< 8bit unsigned integer 18 | typedef unsigned short u16; ///< 16bit unsigned integer 19 | typedef unsigned int u32; ///< 32bit unsigned integer 20 | typedef unsigned long long u64; ///< 64bit unsigned integer 21 | /*+----------------------------------------------------------------------------------------------+*/ 22 | typedef signed char s8; ///< 8bit signed integer 23 | typedef signed short s16; ///< 16bit signed integer 24 | typedef signed int s32; ///< 32bit signed integer 25 | typedef signed long long s64; ///< 64bit signed integer 26 | /*+----------------------------------------------------------------------------------------------+*/ 27 | typedef volatile unsigned char vu8; ///< 8bit unsigned volatile't integer 28 | typedef volatile unsigned short vu16; ///< 16bit unsigned volatile't integer 29 | typedef volatile unsigned int vu32; ///< 32bit unsigned volatile't integer 30 | typedef volatile unsigned long long vu64; ///< 64bit unsigned volatile't integer 31 | /*+----------------------------------------------------------------------------------------------+*/ 32 | typedef volatile signed char vs8; ///< 8bit signed volatile't integer 33 | typedef volatile signed short vs16; ///< 16bit signed volatile't integer 34 | typedef volatile signed int vs32; ///< 32bit signed volatile't integer 35 | typedef volatile signed long long vs64; ///< 64bit signed volatile't integer 36 | /*+----------------------------------------------------------------------------------------------+*/ 37 | // fixed point math typedefs 38 | typedef s16 sfp16; ///< 1:7:8 fixed point 39 | typedef s32 sfp32; ///< 1:19:8 fixed point 40 | typedef u16 ufp16; ///< 8:8 fixed point 41 | typedef u32 ufp32; ///< 24:8 fixed point 42 | /*+----------------------------------------------------------------------------------------------+*/ 43 | typedef float f32; 44 | typedef double f64; 45 | /*+----------------------------------------------------------------------------------------------+*/ 46 | typedef volatile float vf32; 47 | typedef volatile double vf64; 48 | /*+----------------------------------------------------------------------------------------------+*/ 49 | typedef unsigned int BOOL; 50 | /*+----------------------------------------------------------------------------------------------+*/ 51 | // alias type typedefs 52 | #define FIXED s32 ///< Alias type for sfp32 53 | /*+----------------------------------------------------------------------------------------------+*/ 54 | // boolean defines 55 | #ifndef boolean 56 | #define boolean u8 57 | #endif 58 | /*+----------------------------------------------------------------------------------------------+*/ 59 | #ifndef TRUE 60 | #define TRUE 1 ///< True 61 | #endif 62 | /*+----------------------------------------------------------------------------------------------+*/ 63 | #ifndef FALSE 64 | #define FALSE 0 ///< False 65 | #endif 66 | /*+----------------------------------------------------------------------------------------------+*/ 67 | #ifndef __cplusplus 68 | #define true TRUE ///< For c++ compatibility 69 | #define false FALSE ///< For c++ compatibility 70 | #endif 71 | /*+----------------------------------------------------------------------------------------------+*/ 72 | #ifndef NULL 73 | #define NULL 0 ///< Pointer to 0 74 | #endif 75 | /*+----------------------------------------------------------------------------------------------+*/ 76 | 77 | #ifdef __cplusplus 78 | } 79 | #endif /* __cplusplus */ 80 | 81 | #endif /* TYPES_H */ 82 | 83 | 84 | /* END OF FILE */ 85 | -------------------------------------------------------------------------------- /DvdTest/main.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/DvdTest/main.cpp -------------------------------------------------------------------------------- /DvdTest/make.bat: -------------------------------------------------------------------------------- 1 | @cls 2 | @ECHO OFF 3 | @call gctools.bat 4 | 5 | @SETLOCAL 6 | 7 | REM ********************************************* 8 | REM Setup devkitcube Variables 9 | REM ********************************************* 10 | SET DEVKITCUBE=%GCTOOLSDIR%\dev\DevkitCube 11 | SET PATH=%DEVKITCUBE%\bin;%PATH%; 12 | 13 | 14 | REM ********************************************* 15 | REM Setup GcLib Variables 16 | REM ********************************************* 17 | SET GCLIBDIR=%GCTOOLSDIR%\dev\source\GcLib 18 | SET PROGNAME=DvdTest 19 | SET BINDIR=Bin 20 | 21 | 22 | REM ********************************************* 23 | REM Delete temporary files 24 | REM ********************************************* 25 | 26 | REM ********************************************* 27 | REM Compile ! 28 | REM ********************************************* 29 | 30 | @rem echo. 31 | @rem echo Compiling... 32 | @rem echo . 33 | @rem echo . 34 | @rem echo . 35 | 36 | SET GC_IMAGEBASE=0x80003100 37 | @REM SET GC_IMAGEBASE=0x81300000 38 | @REM SET GC_IMAGEBASE=0x81700000 39 | 40 | @ngc_gcc -O2 -fno-exceptions -Wa,-mregnames -Wl,-Ttext,%GC_IMAGEBASE% -Wl,-Map,Bin/DvdTest.map -Wl,--omagic -I %GCLIBDIR% -o %BINDIR%/%PROGNAME%.elf %GCLIBDIR%/crt0.s drivecode.s %GCLIBDIR%/cache.s %GCLIBDIR%/GC_Debug.cpp %GCLIBDIR%/GC_Video.cpp %GCLIBDIR%/GC_String.cpp %GCLIBDIR%/GC_Random.cpp %GCLIBDIR%/GC_Pad.cpp %GCLIBDIR%/GC_Dvd.cpp %GCLIBDIR%/GC_Memory.cpp %GCLIBDIR%/GC_Time.cpp %GCLIBDIR%/GC_vsprintf.cpp %GCLIBDIR%/GC_EXI.cpp main.cpp Flash.cpp libogc.a 41 | @REM ngc_gcc -O2 -fno-exceptions -Wa,-mregnames -Wl,-Ttext,%GC_IMAGEBASE% -Wl,-Map,Bin/DvdTest.map -Wl,--omagic -I %GCLIBDIR% -o %BINDIR%/%PROGNAME%.elf %GCLIBDIR%/crt0.s drivecode.s %GCLIBDIR%/cache.s %GCLIBDIR%/GC_Memory.cpp main.cpp 42 | 43 | @rem echo . 44 | @rem echo . 45 | @rem echo . 46 | 47 | REM -Wl,--strip-all -Wl,--gc-sections -Wl,--discard-all 48 | 49 | if ERRORLEVEL==1 goto Error 50 | 51 | @echo Success ! 52 | 53 | REM ********************************************* 54 | REM Create DOL from ELF 55 | REM ********************************************* 56 | @rem echo. 57 | 58 | cd %BINDIR% 59 | @ngc_objcopy -O binary %PROGNAME%.elf %PROGNAME%.bin 60 | if ERRORLEVEL==1 goto Error 61 | 62 | rem @doltool -d %PROGNAME%.elf 63 | @bin2dol %PROGNAME%.bin %PROGNAME%.dol >> NUL 64 | rem @doltool -c %PROGNAME%.bin < 2dol_8130.txt 65 | rem @doltool -c %PROGNAME%.bin < 2dol_8170.txt 66 | 67 | if ERRORLEVEL==1 goto Error 68 | cd.. 69 | 70 | REM ********************************************* 71 | REM Done ! 72 | REM ********************************************* 73 | 74 | goto End 75 | 76 | 77 | 78 | REM ********************************************* 79 | REM Error -> delete previous DOL file 80 | REM ********************************************* 81 | :Error 82 | echo. 83 | echo. 84 | echo [ERROR] 85 | REM del /Q %PROGNAME%.dol 86 | goto ErrorEnd 87 | 88 | 89 | :End 90 | 91 | REM ********************************************* 92 | REM Delete temporary files 93 | REM ********************************************* 94 | cd %BINDIR% 95 | rem del /Q %PROGNAME%.elf 96 | rem del /Q %PROGNAME%.bin 97 | cd.. 98 | 99 | ENDLOCAL 100 | :ErrorEnd 101 | @rem pause 102 | -------------------------------------------------------------------------------- /DvdTest/old_unused/main.bak: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/DvdTest/old_unused/main.bak -------------------------------------------------------------------------------- /DvdTest/old_unused/makefile.bat: -------------------------------------------------------------------------------- 1 | write makefile -------------------------------------------------------------------------------- /DvdTest/old_unused/mkgcos.bat: -------------------------------------------------------------------------------- 1 | call gctools.bat 2 | @make %1 3 | -------------------------------------------------------------------------------- /DvdTest/old_unused/old/main.bak: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/DvdTest/old_unused/old/main.bak -------------------------------------------------------------------------------- /DvdTest/old_unused/old/main.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/DvdTest/old_unused/old/main.c -------------------------------------------------------------------------------- /DvdTest/old_unused/old/mainX.c: -------------------------------------------------------------------------------- 1 | 2 | //#include 3 | 4 | extern void dcache_inv(void *, int); 5 | extern volatile long *dvd; 6 | 7 | 8 | 9 | int main() 10 | { 11 | 12 | 13 | return 0; 14 | } 15 | 16 | 17 | // else if(bDoRandomSeeks) { 18 | // u32 dwRandSector = RAND(0xa05ff); 19 | // DEBUG_ShowValueU32(350, 60, dwRandSector); 20 | // DVD_Read(pBuffer, 512, dwRandSector * 2048); 21 | // DVD_RequestError(); 22 | // } 23 | 24 | 25 | // if(nKey & PAD_CRIGHT) { 26 | // dwCmd += 0x01000000; 27 | // } 28 | // else if(nKey & PAD_CLEFT) { 29 | // dwCmd -= 0x01000000; 30 | // } 31 | // else if(nKey & PAD_CUP) { 32 | // dwCmd = ++dwCmd & 0xFF0000FF; 33 | // } 34 | // else if(nKey & PAD_CDOWN) { 35 | // dwCmd = --dwCmd & 0xFF0000FF; 36 | // } 37 | 38 | 39 | // if(nKey & PAD_START) { 40 | // DEBUG_Print(50, 440, "** SENDING DBGMODE COMMAND... **"); 41 | // DVD_SetDebugMode(); 42 | // DEBUG_Print(100, 440, "** DISABLING DVD DESCRAMBLE... **"); 43 | // DVD_DisableDescrambling(); 44 | // } 45 | 46 | // DEBUG_Print(100, 440, "sending custom command..."); 47 | // GC_Memory_memset((void*)pBuffer, 0xCC, 2048); 48 | // dcache_flush((void*)pBuffer, 2048); 49 | // DVD_CustomCommand(dwCmd, pBuffer); 50 | // DVD_RequestError(); 51 | 52 | 53 | 54 | 55 | // DEBUG_Print(100, 440, "Resetting dvd drive..."); 56 | // DVD_Reset(); 57 | // DEBUG_Print(100, 440, "Reading id..."); 58 | // DVD_ReadId((void*) 0x80000000); 59 | // DVD_RequestError(); 60 | // DEBUG_Print(100, 440, "done."); 61 | 62 | // DEBUG_Print(100, 440, "dumping leadout...."); 63 | // 64 | // int nSec = 0xa0000; 65 | // u8* pDest = (u8*) (0x80040000); 66 | // 67 | // for( ;nSec < 0xa0600; nSec++) { 68 | // DVD_Read(pDest, 2048, nSec * 2048); 69 | // pDest += 2048; 70 | // } 71 | // DEBUG_Print(100, 440, "done!"); 72 | 73 | // else if(nKey & PAD_B) { 74 | // DEBUG_Print(100, 440, "sending custom command..."); 75 | // GC_Memory_memset((void*)pBuffer, 0xCC, 2048); 76 | // dcache_flush((void*)pBuffer, 2048); 77 | // DVD_CustomCommand(dwCmd, pBuffer); 78 | // DVD_RequestError(); 79 | // } 80 | 81 | 82 | 83 | 84 | 85 | // DEBUG_Print(100, 220, "Open and close drive..."); 86 | // while(!DVD_IsCoverOpen()) { 87 | // } 88 | // while(DVD_IsCoverOpen()) { 89 | // } 90 | 91 | 92 | 93 | // GC_PAD_Read(&sPad1, GC_PAD1); 94 | // if(sPad1.button & PAD_START) { 95 | // asm("lis 3, 0x8030"); 96 | // asm("ori 3, 3, 0x0100"); 97 | // asm("mtlr 3"); 98 | // asm("blrl"); 99 | // } 100 | 101 | 102 | 103 | //hotreset: 104 | //lis r3,0 105 | //lis r9,0xCC00 106 | //sth r3, 0x2000(r9) 107 | //li r4, 3 108 | //stw r4, 0x3024(r9) 109 | //stw r3, 0x3024(r9) 110 | //nop 111 | //loop__: b loop__ 112 | -------------------------------------------------------------------------------- /DvdTest/old_unused/old/mainbak1.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/DvdTest/old_unused/old/mainbak1.c -------------------------------------------------------------------------------- /DvdTest/old_unused/old/mainbak2.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/DvdTest/old_unused/old/mainbak2.c -------------------------------------------------------------------------------- /DvdTest/qcode.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/DvdTest/qcode.bin -------------------------------------------------------------------------------- /DvdTest/qoobDump.dol: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/DvdTest/qoobDump.dol -------------------------------------------------------------------------------- /DvdTest/sdload.dol: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/DvdTest/sdload.dol -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | ########################################################################################### 2 | ########################################################################################### 3 | # MASTER MAKEFILE 4 | ########################################################################################### 5 | ########################################################################################### 6 | 7 | include Makefile-help 8 | include Makefile-avrdude 9 | 10 | all: help 11 | linux-all: linux-shell linux-hex 12 | windows-all: windows-shell windows-hex 13 | 14 | ########################################################################################### 15 | ########################################################################################### 16 | # LINUX 17 | linux-shell: 18 | make -f XenoShell/Makefile-LINUX 19 | 20 | linux-hex: 21 | make -f XenoAT/Makefile-LINUX 22 | 23 | linux-extra: 24 | make -f XenoShell/Makefile-LINUX 25 | make extra -f XenoAT/Makefile-LINUX 26 | 27 | ########################################################################################### 28 | ########################################################################################### 29 | # WINDOWS 30 | windows-shell: 31 | $(MAKE) -f XenoShell/Makefile-WIN 32 | 33 | windows-hex: 34 | $(MAKE) -f XenoAT/Makefile-WIN 35 | 36 | windows-extra: 37 | $(MAKE) -f XenoShell/Makefile-WIN 38 | $(MAKE) extra -f XenoAT/Makefile-WIN 39 | 40 | ########################################################################################### 41 | ########################################################################################### 42 | # Clean WINDOWS / LINUX 43 | clean: 44 | make clean -f XenoAT/Makefile-LINUX 45 | make clean -f XenoShell/Makefile-LINUX 46 | 47 | ########################################################################################### 48 | ########################################################################################### 49 | # AVRDUDE 50 | flash: 51 | $(AVRDUDE) $(FLAGS) -v -U flash:w:$(TARGET)/$(TARGET).hex 52 | 53 | readfuse: 54 | uisp -dprog=dasa2 -dserial=$(PORT) --rd_fuses 55 | 56 | writefuse: 57 | $(AVRDUDE) $(FLAGS) -v -U lfuse:w:0xC4:m -U hfuse:w:0xD9:m 58 | 59 | ########################################################################################### 60 | ########################################################################################### 61 | # HELP 62 | help: 63 | -------------------------------------------------------------------------------- /Makefile-avrdude: -------------------------------------------------------------------------------- 1 | ########################################################################################### 2 | ########################################################################################### 3 | # Makefile AVRDUDE 4 | ########################################################################################### 5 | ########################################################################################### 6 | # USER DEFINE VARIABLES 7 | # 8 | # AVR = Target AVR type < M8 = Atmega8 > 9 | # TARGET = Target File 10 | # AVRDUDE = Path to AVRDUDE 11 | # DEVICE = Programmer Type < stk500, ponyser, avrisp2, etc, etc > 12 | # PORT = Programmer Port < /dev/ttyS0, com1, LPT1 > 13 | # 14 | # 15 | AVR = m8 16 | TARGET = XenoAT 17 | AVRDUDE = /usr/bin/avrdude 18 | DEVICE = ponyser 19 | PORT = /dev/ttyS0 20 | FLAGS = -p $(AVR) -c $(DEVICE) -P $(PORT) 21 | ########################################################################################### 22 | ########################################################################################### 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /Makefile-help: -------------------------------------------------------------------------------- 1 | ########################################################################################### 2 | ########################################################################################### 3 | # Makefile Help 4 | ########################################################################################### 5 | ########################################################################################### 6 | 7 | LINE = echo -------------------------------------------- 8 | INTRO = @echo;$(LINE);echo XenoGC Makefile Help;$(LINE);echo 9 | USE = @echo Compile Usage: make [ platform ][ options ] 10 | PLATFORM = @echo PLATFORM:;$(LIN);$(WIN) 11 | OPTIONS = @echo OPTIONS:;$(XALL);$(XTRA);$(XSHELL);$(XHEX) 12 | LIN = echo ' linux Linux operating system' 13 | WIN = echo ' windows Windows operating system' 14 | XALL = echo ' -all Make entire source' 15 | XTRA = echo ' -extra Make ALL plus Extra files' 16 | XSHELL = echo ' -shell Make XenoShell only' 17 | XHEX = echo ' -hex Make XenoAT Hex only' 18 | 19 | 20 | 21 | AUSE = @echo;echo;echo;echo AVR Usage: make [ options ] 22 | AOPTIONS = @echo OPTIONS:;$(FLASH);$(READ);$(WRITE) 23 | FLASH = echo ' flash Write Hex to Flash' 24 | READ = echo ' readfuse Read Fuse Settings' 25 | WRITE = echo ' writefuse Write Fuse Settings' 26 | 27 | EX = @echo;echo;echo;$(ELIN);$(EWIN);$(EAVR);echo;echo;echo; 28 | ELIN = echo Example: make linux-all 29 | EWIN = echo Example: make windows-hex 30 | EAVR = echo Example: make flash 31 | 32 | all: main 33 | 34 | main: 35 | $(INTRO) 36 | $(USE) 37 | $(PLATFORM) 38 | $(OPTIONS) 39 | $(AUSE) 40 | $(AOPTIONS) 41 | $(EX) 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # xenogcfork 2 | This is the only known fork of the official XenoGC firmware. 3 | 4 | It runs on the Matshita MN10200 CPU found on the DVD drive of a GameCube. 5 | 6 | Additions provided by this fork: 7 | * Added proper PAL/NTSC console detection for the MultiGame shell menu 8 | * Added support to boot a DOL from memory card (WIP) 9 | * Code tidy up and support to compile with devkitPPC 10 | * Attempt at rewriting the GC side flash upgrader 11 | -------------------------------------------------------------------------------- /XenoAT 1.05.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/XenoAT 1.05.bin -------------------------------------------------------------------------------- /XenoAT/Bin/XenoAT.1.03.v1.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/XenoAT/Bin/XenoAT.1.03.v1.bin -------------------------------------------------------------------------------- /XenoAT/Bin/XenoAT.1.03a.v1.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/XenoAT/Bin/XenoAT.1.03a.v1.bin -------------------------------------------------------------------------------- /XenoAT/Bin/XenoAT.1.03a.v2.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/XenoAT/Bin/XenoAT.1.03a.v2.bin -------------------------------------------------------------------------------- /XenoAT/Bin/XenoAT.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/XenoAT/Bin/XenoAT.bin -------------------------------------------------------------------------------- /XenoAT/Bin/XenoGC 1.01.V1.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/XenoAT/Bin/XenoGC 1.01.V1.bin -------------------------------------------------------------------------------- /XenoAT/Bin/XenoGC 1.01.V2.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/XenoAT/Bin/XenoGC 1.01.V2.bin -------------------------------------------------------------------------------- /XenoAT/Makefile-LINUX: -------------------------------------------------------------------------------- 1 | ########################################################################################### 2 | ########################################################################################### 3 | # Makefile - XenoAT LINUX 4 | ########################################################################################### 5 | ########################################################################################### 6 | # USER DEFINE VARIABLES 7 | # 8 | # MCU = Target AVR < atmega8 > 9 | # TARGET = Target File to Compile 10 | # AVRDIR = Path to avr-gcc 3.4 11 | # MNDIR = Path to MN10200 Binutils 12 | # MNDIR1 = Path to MN10200 ELF GCC < NOTE: NOT COMPATIBLE with MN10200 included in DEVKITPRO> 13 | # 14 | # 15 | MCU = atmega8 16 | AVRDIR = /opt/XenoTools/bin 17 | MNDIR = /opt/XenoTools/mn10200_binutils/bin 18 | MNDIR1 = /opt/XenoTools/mn10200/bin 19 | ########################################################################################### 20 | ########################################################################################### 21 | ########################################################################################### 22 | ########################################################################################### 23 | TARGET = XenoAT 24 | CC = $(AVRDIR)/avr-gcc 25 | OBJCOPY = $(AVRDIR)/avr-objcopy 26 | OBJDUMP = $(AVRDIR)/avr-objdump 27 | SIZE = $(AVRDIR)/avr-size 28 | MNAS = $(MNDIR)/mn10200-as 29 | MNLD = $(MNDIR)/mn10200-ld 30 | MNELF = $(MNDIR1)/mn10200-elf-gcc 31 | SOURCES = $(TARGET)/source 32 | SRC = $(SOURCES)/$(TARGET) 33 | ASRC = $(SOURCES)/qcode 34 | CFLAGS = -mmcu=$(MCU) -I. -g -Os -funsigned-char -funsigned-bitfields \ 35 | -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms 36 | ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp -Wa,-ahlms 37 | LDFLAGS = -Wl,-Map=$(SRC).map,--cref -lm 38 | ELFSIZE = $(SIZE) -A $(SRC).elf 39 | MOVE = mv $(SOURCES)/$(TARGET).hex $(TARGET) 40 | # 41 | LINE = echo -------------------------------------------- 42 | BLD = @echo;$(LINE);echo BUILDING: XENO HEX;$(LINE) 43 | BLDELF = @echo;$(LINE);echo CREATING: ELF;$(LINE) 44 | BLDHEX = @echo;$(LINE);echo CREATING: HEX;$(LINE) 45 | BLDSIZE = @echo;$(LINE);echo AVR Memory Usage;$(LINE);$(ELFSIZE) 46 | MD5 = @echo;$(LINE);echo MD5SUM:; $(LINE);md5sum $(TARGET)/$(TARGET).hex 47 | END = @echo;$(LINE);echo BUILDING: XENO HEX...DONE!!;$(LINE) 48 | DUMP = @echo;$(LINE);echo DUMPING EXTENDED DATA;$(LINE) 49 | DUMPEND = @echo;$(LINE);echo DUMPING EXTENDED DATA...DONE!!;$(LINE) 50 | ########################################################################################### 51 | ########################################################################################### 52 | 53 | all: clean build 54 | 55 | build: 56 | $(BLD) 57 | $(CC) -c $(CFLAGS)=$(SRC).lst $(SRC).c -o $(SRC).o 58 | $(MNAS) -L $(SOURCES)/upload.S -o $(SOURCES)/upload.o 59 | $(MNLD) -Ttext 0x40d000 -O $(MNELF) $(SOURCES)/upload.o -o $(SOURCES)/upload.elf 60 | $(CC) -c $(ASFLAGS)=$(ASRC).lst,-gstabs $(ASRC).S -o $(ASRC).o 61 | $(BLDELF) 62 | $(CC) $(CFLAGS)=$(SRC).o $(SRC).o $(ASRC).o --output $(SRC).elf $(LDFLAGS) 63 | $(BLDHEX) 64 | $(OBJCOPY) -O ihex -R .eeprom $(SRC).elf $(SRC).hex 65 | $(MOVE) 66 | $(BLDSIZE) 67 | $(MD5) 68 | $(END) 69 | 70 | extra: all 71 | $(DUMP) 72 | $(OBJCOPY) -j .text -j .data -O binary $(SOURCES)/$(TARGET).elf $(SOURCES)/$(TARGET).bin 73 | $(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ 74 | --change-section-lma .eeprom=0 -O ihex $(SOURCES)/$(TARGET).elf $(SOURCES)/$(TARGET).eep 75 | $(OBJDUMP) -h -S $(SOURCES)/$(TARGET).elf > $(SOURCES)/$(TARGET).lss 76 | $(DUMPEND) 77 | 78 | ########################################################################################### 79 | ########################################################################################### 80 | # Target: clean project. 81 | clean: 82 | rm -f $(TARGET)/$(TARGET).hex 83 | rm -f $(SOURCES)/$(TARGET).bin 84 | rm -f $(SOURCES)/*.eep 85 | rm -f $(SOURCES)/*.lss 86 | rm -f $(SOURCES)/*.map 87 | rm -f $(SOURCES)/*.elf 88 | rm -f $(SOURCES)/*.lst 89 | rm -f $(SOURCES)/*.o 90 | -------------------------------------------------------------------------------- /XenoAT/Makefile-WIN: -------------------------------------------------------------------------------- 1 | ########################################################################################### 2 | ########################################################################################### 3 | # Makefile - XenoAT WINDOWS 4 | ########################################################################################### 5 | ########################################################################################### 6 | # USER DEFINE VARIABLES 7 | # NOTE: MAY NOT BE REQUIRED 8 | # 9 | # MCU = Target AVR < atmega8 > 10 | # 11 | # 12 | MCU = atmega8 13 | ########################################################################################### 14 | ########################################################################################### 15 | TARGET = XenoAT 16 | CC = avr-gcc 17 | OBJCOPY = avr-objcopy 18 | OBJDUMP = avr-objdump 19 | SIZE = avr-size 20 | REMOVE = rm -f 21 | DIR = . 22 | SOURCES = $(TARGET)/source 23 | SRC = $(SOURCES)/$(TARGET).c 24 | ASRC = $(SOURCES)/qcode.S 25 | CFLAGS = -mmcu=$(MCU) -I. -g -Os \ 26 | -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \ 27 | -Wall -Wstrict-prototypes \ 28 | -Wa,-ahlms=$(<:.c=.lst) 29 | ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp -Wa,-ahlms=$(<:.S=.lst),-gstabs 30 | LDFLAGS = -Wl,-Map=$(SOURCES)/$(TARGET).map,--cref 31 | LDFLAGS += -lm 32 | OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 33 | ELFSIZE = $(SIZE) -A $(SOURCES)/$(TARGET).elf 34 | MOVE = @mv $(SOURCES)/$(TARGET).hex $(TARGET) 35 | # 36 | LINE = echo -------------------------------------------- 37 | BLD = @echo;$(LINE);echo BUILDING: XENO HEX;$(LINE) 38 | BLDELF = @echo;$(LINE);echo CREATING: ELF;$(LINE) 39 | BLDHEX = @echo;$(LINE);echo CREATING: HEX;$(LINE) 40 | BLDSIZE = @echo;$(LINE);echo AVR Memory Usage;$(LINE);$(ELFSIZE) 41 | MD5 = @echo;$(LINE);echo MD5SUM:; $(LINE);md5sum $(TARGET)/$(TARGET).hex 42 | END = @echo;$(LINE);echo BUILDING: XENO HEX...DONE!!;$(LINE) 43 | DUMP = @echo;$(LINE);echo DUMPING EXTENDED DATA;$(LINE) 44 | DUMPEND = @echo;$(LINE);echo DUMPING EXTENDED DATA...DONE!!;$(LINE) 45 | ########################################################################################### 46 | 47 | # Default target. 48 | all: clean $(SOURCES)/$(TARGET).elf $(SOURCES)/$(TARGET).hex end 49 | 50 | end: 51 | $(MOVE) 52 | $(BLDSIZE) 53 | $(MD5) 54 | $(END) 55 | 56 | extra: all 57 | $(DUMP) 58 | $(OBJCOPY) -j .text -j .data -O binary $(SOURCES)/$(TARGET).elf $(SOURCES)/$(TARGET).bin 59 | $(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ 60 | --change-section-lma .eeprom=0 -O ihex $(SOURCES)/$(TARGET).elf $(SOURCES)/$(TARGET).eep 61 | $(OBJDUMP) -h -S $(SOURCES)/$(TARGET).elf > $(SOURCES)/$(TARGET).lss 62 | $(DUMPEND) 63 | 64 | ########################################################################################### 65 | 66 | # Assemble: create object files from assembler source files. 67 | %.o : %.S 68 | $(BLD) 69 | $(CC) -c $(ASFLAGS) $< -o $@ 70 | 71 | 72 | # Compile: create object files from C source files. 73 | %.o : %.c 74 | $(CC) -c $(CFLAGS) $< -o $@ 75 | 76 | 77 | # Link: create ELF output file from object files. 78 | %.elf: $(OBJ) 79 | $(BLDELF) 80 | $(CC) $(CFLAGS) $(OBJ) --output $@ $(LDFLAGS) 81 | 82 | 83 | # Create final output files (.hex, .eep) from ELF output file. 84 | %.hex: %.elf 85 | $(BLDHEX) 86 | $(OBJCOPY) -O ihex -R .eeprom $< $(DIR)/$@ 87 | 88 | 89 | $(SOURCES)/upload.bin: $(SOURCES)/upload.S 90 | @as_mn10200 -L $(SOURCES)/upload.S -o $(SOURCES)/upload.o 91 | @ld-mn10200 -Ttext 0x40d000 -O mn10200-elf $(SOURCES)/upload.o -o $(SOURCES)/upload.elf 92 | @objcopy-all -O $(SOURCES)/binary $(SOURCES)/upload.elf $(SOURCES)/upload.bin 93 | $(SOURCES)/qcode.o: $(SOURCES)/upload.bin 94 | 95 | ########################################################################################### 96 | # Target: clean project. 97 | clean: 98 | $(REMOVE) $(TARGET)/$(TARGET).hex 99 | $(REMOVE) $(SOURCES)/$(TARGET).bin 100 | $(REMOVE) $(SOURCES)/*.eep 101 | $(REMOVE) $(SOURCES)/*.lss 102 | $(REMOVE) $(SOURCES)/*.map 103 | $(REMOVE) $(SOURCES)/*.elf 104 | $(REMOVE) $(SOURCES)/*.lst 105 | $(REMOVE) $(SOURCES)/*.o 106 | -------------------------------------------------------------------------------- /XenoAT/old_unused/Bin/XenoAT.1.03.v1.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/XenoAT/old_unused/Bin/XenoAT.1.03.v1.bin -------------------------------------------------------------------------------- /XenoAT/old_unused/Bin/XenoAT.1.03a.v2.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/XenoAT/old_unused/Bin/XenoAT.1.03a.v2.bin -------------------------------------------------------------------------------- /XenoAT/old_unused/Bin/XenoGC 1.01.V1.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/XenoAT/old_unused/Bin/XenoGC 1.01.V1.bin -------------------------------------------------------------------------------- /XenoAT/old_unused/mkupload.bat: -------------------------------------------------------------------------------- 1 | @call gctools.bat 2 | 3 | @REM *********************************************************************** 4 | @SET QCODE_IMGBASE=0x0040C600 5 | @SET COMPILE_QCODE=1 6 | @REM *********************************************************************** 7 | 8 | 9 | @echo off 10 | @cls 11 | @PROMPT [.] 12 | 13 | @del upload.bin 14 | 15 | @SETLOCAL 16 | @SET PATH=%PATH%;%CYGPUB%; 17 | 18 | @echo ************************* 19 | @echo * Assembling... * 20 | @echo ************************* 21 | @echo . 22 | @echo . 23 | 24 | @as_mn10200 -L upload.S -o upload.o 25 | 26 | @echo . 27 | @echo . 28 | @echo ************************* 29 | @echo * Linking... * 30 | @echo ************************* 31 | @echo . 32 | @echo . 33 | 34 | @ld-mn10200 -Ttext 0x8674 -O mn10200-elf upload.o -o upload.elf 35 | @objcopy-all -O binary upload.elf upload.bin 36 | 37 | @call delfile upload.o 38 | @call delfile upload.elf 39 | 40 | @ENDLOCAL 41 | -------------------------------------------------------------------------------- /XenoAT/old_unused/upload.bin.txt: -------------------------------------------------------------------------------- 1 | 0040D000 F710FFF7 ???? AND $F7FF,PSW 2 | 0040D004 F5D9C8FF ???? BCLR ($FFC8)1 3 | 0040D008 F88020 ?? MOV $2080,D0 4 | 0040D00B C080FD ??? MOV D0,($FD80) 5 | 0040D00E F47080C000 ?p??? MOV $00C080,D0 6 | 0040D013 C080FD ??? MOV D0,($FD80) 7 | 0040D016 F47400D840 ?t??@ MOV $40D800,A0 8 | 0040D01B F82121 ?!! MOV $2121,D0 9 | 0040D01E 00 ? MOV D0,(A0) 10 | 0040D01F 4002 @? MOV D0,($02,A0) 11 | 0040D021 A0 ? SUB D0,D0 12 | 0040D022 F4E1502A08 ??P*? JSR $0048FA77 13 | 0040D027 F4C4F18100 ????? MOVB ($0081F1),D0 14 | 0040D02C F700FEFF ???? AND $FFFE,D0 15 | 0040D030 C4F181 ??? MOVB D0,($81F1) 16 | 0040D033 8051 ?Q MOV $51,D0 ;'Q' 17 | 0040D035 FD5500 ?U? JSR $0040D08D 18 | 0040D038 FD7200 ?r? JSR $0040D0AD 19 | 0040D03B 81 ? MOV D0,D1 20 | 0040D03C 95 ? ADD D1,D1 21 | 0040D03D 95 ? ADD D1,D1 22 | 0040D03E 95 ? ADD D1,D1 23 | 0040D03F 95 ? ADD D1,D1 24 | 0040D040 95 ? ADD D1,D1 25 | 0040D041 95 ? ADD D1,D1 26 | 0040D042 95 ? ADD D1,D1 27 | 0040D043 95 ? ADD D1,D1 28 | 0040D044 8043 ?C MOV $43,D0 ;'C' 29 | 0040D046 FD4400 ?D? JSR $0040D08D 30 | 0040D049 FD6100 ?a? JSR $0040D0AD 31 | 0040D04C 91 ? ADD D0,D1 32 | 0040D04D 804F ?O MOV $4F,D0 ;'O' 33 | 0040D04F FD3B00 ?;? JSR $0040D08D 34 | 0040D052 FD5800 ?X? JSR $0040D0AD 35 | 0040D055 8044 ?D MOV $44,D0 ;'D' 36 | 0040D057 FD3300 ?3? JSR $0040D08D 37 | 0040D05A FD5000 ?P? JSR $0040D0AD 38 | 0040D05D 84 ? MOV D1,D0 39 | 0040D05E FD2C00 ?,? JSR $0040D08D 40 | 0040D061 F47400C640 ?t??@ MOV $40C600,A0 41 | 0040D066 8A00 ?? MOV $00,D2 ;'?' 42 | 0040D068 FD4200 ?B? JSR $0040D0AD 43 | 0040D06B FD1F00 ??? JSR $0040D08D 44 | 0040D06E 10 ? MOVB D0,(A0) 45 | 0040D06F 92 ? ADD D0,D2 46 | 0040D070 FD3A00 ?:? JSR $0040D0AD 47 | 0040D073 FD1700 ??? JSR $0040D08D 48 | 0040D076 F51001 ??? MOVB D0,($01,A0) 49 | 0040D079 92 ? ADD D0,D2 50 | 0040D07A D002 ?? ADD $02,A0 51 | 0040D07C F71D0100 ???? SUB $0001,D1 52 | 0040D080 E9E6 ?? BNE $0040D068 53 | 0040D082 F5D9C8FF ???? BCLR ($FFC8)1 54 | 0040D086 F47400C640 ?t??@ MOV $40C600,A0 55 | 0040D08B F001 ?? JSR (A0) 56 | 0040D08D F25A ?Z SUB A2,A2 57 | 0040D08F F4C783FD00 ????? MOVB ($00FD83),D3 58 | 0040D094 F50380 ??? AND $80,D3 59 | 0040D097 E810 ?? BEQ $0040D0A9 60 | 0040D099 D201 ?? ADD $01,A2 61 | 0040D09B F47E80841E ?~??? CMP $1E8480,A2 62 | 0040D0A0 E9ED ?? BNE $0040D08F 63 | 0040D0A2 F3FECF83FD00 ??????? TBNZ ($00FD83)7,$0040D0A2 64 | 0040D0A9 C482FD ??? MOVB D0,($FD82) 65 | 0040D0AC FE ? RTS 66 | --------------------------- 67 | 68 | 0040D0AD F25A ?Z SUB A2,A2 69 | 0040D0AF F4C783FD00 ????? MOVB ($00FD83),D3 70 | 0040D0B4 F50340 ??@ AND $40,D3 71 | 0040D0B7 E810 ?? BEQ $0040D0C9 72 | 0040D0B9 D201 ?? ADD $01,A2 73 | 0040D0BB F47E80841E ?~??? CMP $1E8480,A2 74 | 0040D0C0 E9ED ?? BNE $0040D0AF 75 | 0040D0C2 F3FEC483FD00 ??????? TBZ ($00FD83)4,$0040D0C2 76 | 0040D0C9 CC82FD ??? MOVBU ($FD82),D0 77 | 0040D0CC FE ? RTS 78 | --------------------------- 79 | 80 | 0040D0CD D3FC ?? ADD $FC,A3 81 | 0040D0CF 0C ? MOV D0,(A3) 82 | 0040D0D0 F4C000D840 ????@ MOV ($40D800),D0 83 | 0040D0D5 D401 ?? ADD $01,D0 ;'?' 84 | 0040D0D7 F44000D840 ?@??@ MOV D0,($40D800) 85 | 0040D0DC F44703D840 ?G??@ MOVB D3,($40D803) 86 | 0040D0E1 2C , MOV (A3),D0 87 | 0040D0E2 D304 ?? ADD $04,A3 88 | 0040D0E4 FE ? RTS 89 | --------------------------- 90 | 91 | 0040D0E5 F5D1C8FF ???? BSET ($FFC8)1 92 | 0040D0E9 F474100808 ?t??? MOV $080810,A0 93 | 0040D0EE F000 ?? JMP (A0) 94 | 95 | -------------------------------------------------------------------------------- /XenoAT/old_unused/xxdump.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/XenoAT/old_unused/xxdump.c -------------------------------------------------------------------------------- /XenoAT/source/NoCredits.bin: -------------------------------------------------------------------------------- 1 | U -------------------------------------------------------------------------------- /XenoAT/source/XenoAT.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | #include "qCode.h" 9 | 10 | 11 | typedef unsigned long u32; 12 | typedef unsigned short u16; 13 | typedef unsigned char u8; 14 | 15 | #define RELEASE 16 | #define LOADER_ADDR 0x40D000 17 | 18 | #define VER2 // VER1 VER2 19 | 20 | 21 | 22 | /* NOTE: OUT,CLK,IN must be on the same port. */ 23 | #ifdef VER1 24 | #define X_OUT 0x10 25 | #define X_OUT_PORT PORTB 26 | #define X_OUT_PIN PINB 27 | #define X_OUT_DDR DDRB 28 | #define X_CLK 0x08 29 | #define X_CLK_PORT PORTB 30 | #define X_CLK_PIN PINB 31 | #define X_CLK_DDR DDRB 32 | #define X_IN 0x20 33 | #define X_IN_PORT PORTB 34 | #define X_IN_PIN PINB 35 | #define X_IN_DDR DDRB 36 | #define X_STR 0x08 37 | #define X_STR_PORT PORTD 38 | #define X_STR_PIN PIND 39 | #define X_STR_DDR DDRD 40 | 41 | // green 42 | #define LED1_ON PORTB &=~0x80 43 | #define LED1_OFF PORTB |= 0x80 44 | // red 45 | #define LED2_ON PORTC &=~0x01 46 | #define LED2_OFF PORTC |= 0x01 47 | #define LED_INIT DDRB = 0x80; DDRC = 1; 48 | 49 | 50 | #else 51 | #define X_OUT 0x10 52 | #define X_OUT_PORT PORTB 53 | #define X_OUT_PIN PINB 54 | #define X_OUT_DDR DDRB 55 | #define X_CLK 0x20 56 | #define X_CLK_PORT PORTB 57 | #define X_CLK_PIN PINB 58 | #define X_CLK_DDR DDRB 59 | #define X_IN 0x08 60 | #define X_IN_PORT PORTB 61 | #define X_IN_PIN PINB 62 | #define X_IN_DDR DDRB 63 | #define X_STR 0x02 64 | #define X_STR_PORT PORTB 65 | #define X_STR_PIN PINB 66 | #define X_STR_DDR DDRB 67 | 68 | // green 69 | #define LED1_ON PORTD &=~0x04 70 | #define LED1_OFF PORTD |= 0x04 71 | // red 72 | #define LED2_ON PORTD &=~0x08 73 | #define LED2_OFF PORTD |= 0x08 74 | #define LED_INIT DDRD = 0x0C; 75 | 76 | #endif 77 | 78 | extern const u8 qcode[]; 79 | extern const u8* qcode_end; 80 | extern const u8 upload[]; 81 | extern const u8* upload_end; 82 | extern const u8 credits[]; 83 | extern const u8* credits_end; 84 | 85 | 86 | 87 | void reset(void); 88 | void ldelay(volatile int i); 89 | 90 | 91 | inline void delay(void) 92 | { 93 | int i = 200; 94 | while (i--); 95 | } 96 | 97 | #ifndef RELEASE 98 | 99 | void USART_Init( unsigned int baud ) 100 | { 101 | UCSRA = 2; 102 | /* Set baud rate */ 103 | UBRRH = (unsigned char)(baud>>8); 104 | UBRRL = (unsigned char)baud; 105 | /* Enable Receiver and Transmitter */ 106 | UCSRB = /* (1<>(12-(i*4)))&0xF]); 137 | } 138 | 139 | void sputhex8(short c) 140 | { 141 | char i; 142 | for (i=0; i<2; ++i) 143 | USART_Transmit("0123456789ABCDEF"[(c>>(4-(i*4)))&0xF]); 144 | 145 | USART_Transmit(' '); 146 | } 147 | #else 148 | #define sputhex16(x) x; 149 | #define sputhex8(x) x; 150 | #endif 151 | 152 | //// xxx stuff 153 | 154 | int ndelay = 0; 155 | 156 | 157 | int io(char i) 158 | { 159 | char res = 0; 160 | 161 | if (i) 162 | X_OUT_PORT |= X_OUT; 163 | else 164 | X_OUT_PORT &=~X_OUT; 165 | 166 | X_CLK_PORT &=~X_CLK; if (!ndelay) delay(); 167 | res = X_IN_PIN & X_IN; 168 | X_CLK_PORT |= X_CLK; if (!ndelay) delay(); 169 | 170 | return !!res; 171 | } 172 | 173 | void send8(unsigned char c) 174 | { 175 | int i = 0; 176 | 177 | while (X_STR_PIN & X_STR) if (i++ > 10000) reset(); 178 | for (i=0; i<8; ++i) 179 | { 180 | if (X_STR_PIN & X_STR) 181 | reset(); 182 | io(c & (1< 10000) reset(); 191 | for (i=0; i<8; ++i) 192 | { 193 | if (!(X_STR_PIN & X_STR)) 194 | reset(); 195 | x |= io(0) << i; 196 | } 197 | return x; 198 | } 199 | 200 | unsigned char io8(unsigned char c) 201 | { 202 | unsigned char x = 0; 203 | int i; 204 | for (i=0; i<8; ++i) 205 | x |= io(c & (1<> 8); 225 | send8(addr); 226 | send8(0); 227 | send8(addr >> 16); // high 228 | send8(0); 229 | send8(0); 230 | 231 | send8(len); 232 | send8(0); 233 | 234 | int err = recv8(); 235 | err |= recv8() << 8; 236 | 237 | if (err) 238 | { 239 | sputs("error: "); 240 | sputhex16(err); 241 | sputs("\n"); 242 | return err; 243 | } 244 | 245 | while (len--) 246 | *dst++ = recv8(); 247 | 248 | return 0; 249 | } 250 | 251 | void write_word(long address, unsigned short data) 252 | { 253 | send8(0xfe); 254 | send8(0x00); 255 | send8(address >> 8); 256 | send8(address); 257 | 258 | send8(data); 259 | send8(address >> 16); 260 | send8(data >> 8); 261 | send8(0); 262 | 263 | send8(2); 264 | send8(0); 265 | 266 | recv8(); recv8(); recv8(); recv8(); 267 | } 268 | 269 | void write_word_norecv(long address, unsigned short data) 270 | { 271 | send8(0xfe); 272 | send8(0x00); 273 | send8(address >> 8); 274 | send8(address); 275 | 276 | send8(data); 277 | send8(address >> 16); 278 | send8(data >> 8); 279 | send8(0); 280 | 281 | send8(2); 282 | send8(0); 283 | } 284 | 285 | void write_block(long address, unsigned char *source, int len) 286 | { 287 | while (len >= 1) { 288 | write_word(address, pgm_read_byte(source) | (pgm_read_byte(source+1) << 8)); 289 | address += 2; 290 | len -= 2; 291 | source += 2; 292 | } 293 | } 294 | 295 | void reset() 296 | { 297 | sputs("RESET!\n"); 298 | WDTCR = 8; 299 | while (1); 300 | } 301 | 302 | void ldelay(volatile int i) 303 | { 304 | while (i--) { 305 | // if (X_STR_PIN & X_STR) 306 | // reset(); 307 | } 308 | } 309 | 310 | 311 | /* 312 | void sleep(int nMs) 313 | { 314 | while(--nMs != 0) { 315 | ldelay(250); 316 | if (X_STR_PIN & X_STR) 317 | reset(); 318 | } 319 | } 320 | 321 | #define BLUE 0 322 | #define RED 1 323 | 324 | void sleepOrg(int nMs) 325 | { 326 | while(--nMs != 0) { 327 | ldelay(250); 328 | } 329 | } 330 | 331 | void FlashLED(u8 bLed, int nTimes) 332 | { 333 | while(nTimes-->0) { 334 | if(bLed == 0) LED1_ON; 335 | else LED2_ON; 336 | sleep(10); 337 | if(bLed == 0) LED1_OFF; 338 | else LED2_OFF; 339 | sleep(10); 340 | } 341 | } 342 | */ 343 | 344 | int main(void) 345 | { 346 | const unsigned int qcodesize = ((((const unsigned int) &qcode_end) - ((const unsigned int) &qcode)) & 0xFFFE) + 2; 347 | const unsigned int uploadsize = ((((const unsigned int) &upload_end) - ((const unsigned int) &upload)) & 0xFFFE) + 2; 348 | // const unsigned int creditssize = ((((const unsigned int) &credits_end) - ((const unsigned int) &credits)) & 0xFFFC) + 4; 349 | const unsigned int creditssize = ((((const unsigned int) &credits_end) - ((const unsigned int) &credits)) & 0xFFFE) + 2; 350 | 351 | unsigned short last_recv=0; 352 | 353 | LED_INIT; 354 | #ifndef RELEASE 355 | USART_Init(103); 356 | #endif 357 | 358 | int i; 359 | X_OUT_PORT &= ~(X_CLK|X_OUT|X_IN); 360 | X_STR_PORT |= X_STR; 361 | X_OUT_DDR = 2 | X_CLK | X_OUT | 0x80; 362 | X_STR_DDR &= ~X_STR; 363 | 364 | // VCC/GND not present: no leds 365 | // CLK missing: will be kept in first stage 366 | // DIN missing: will be kept in second stage 367 | // DOUT missing: will always reset 368 | // 1 0 369 | // 1 1 370 | // 0 0 371 | // 0 1 372 | LED2_ON; LED1_OFF; // -> red 373 | 374 | sputs("syncing..\n"); 375 | while (1) { 376 | last_recv >>= 1; 377 | last_recv |= io(1) ? 0x8000 : 0; 378 | // sputhex16(last_recv); sputs("\n"); 379 | if (last_recv == 0xeeee) 380 | break; 381 | } 382 | sputs("sync ok.\n"); 383 | 384 | // stack-friendly loading :p 385 | static u8 PROGMEM pLoaderCode[] = { 0x80, 0x00, // 8000 MOV $00,D0 386 | 0xC4, 0xDA, 0xFC, // C4DAFC MOVB D0,($FCDA) # disable breakpoints 387 | 388 | 0xF4,0x74,0x74,0x0a,0x08, // F47474A708 MOV $080a74,a0 # restore original 389 | 0xF7,0x20,0x4C,0x80, // F7204C80 MOV a0,($804c) # inthandler 390 | 0xF4,0x74, // F47400D040 MOV QCODEIMGBASE,a0 # jump to drivecode init 391 | (LOADER_ADDR & 0xFF), 392 | (LOADER_ADDR >> 8 & 0xFF), 393 | (LOADER_ADDR >> 16 & 0xFF), 394 | 0xF0,0x00 // F000 JMP (a0) 395 | }; 396 | 397 | u8* pUpload = qcode; 398 | u16 wUploadSize = qcodesize; 399 | 400 | u16 wTest = 0; 401 | read_mem(&wTest, 0x40D100, 2); 402 | 403 | if(wTest == 0x4444) { 404 | pUpload = credits; 405 | wUploadSize = creditssize; 406 | } 407 | 408 | write_block(LOADER_ADDR, upload, uploadsize); 409 | write_block(0x8674, pLoaderCode, sizeof(pLoaderCode)); 410 | write_word_norecv(0x804d, 0x0086); 411 | 412 | 413 | char u8Ret = io8(0x00); 414 | ndelay = 1; 415 | 416 | ldelay(100); 417 | u8Ret |= io8(0x00); 418 | 419 | ldelay(100); 420 | io8((wUploadSize >> 9)&0xFF); 421 | ldelay(100); 422 | io8((wUploadSize >> 1)&0xFF); 423 | ldelay(100); 424 | io8(0); 425 | 426 | LED2_OFF; 427 | unsigned char r, e = (wUploadSize >> 1) & 0xFF, n, csum = 0; 428 | 429 | for (i=0; i < wUploadSize; ++i) { 430 | ldelay(100); 431 | r = io8(n = pgm_read_byte(pUpload + i)); 432 | csum += n; 433 | 434 | if (r != e) { 435 | reset(); 436 | } 437 | 438 | e = n; 439 | } 440 | 441 | ldelay(100); 442 | pgm_read_byte(pUpload + i); 443 | 444 | // if(bUploadAgain) { 445 | // io8(0x99); 446 | // goto uploadAgain; 447 | // } 448 | // else 449 | { 450 | io8(0x21); 451 | } 452 | 453 | io8(0); 454 | io8(0); 455 | 456 | /* if(pUpload == credits) { 457 | LED1_ON; 458 | LED2_ON; 459 | X_STR_PORT |= X_STR; 460 | while(1); 461 | } 462 | */ 463 | // SUCCESS (BLUE) 464 | LED1_ON; 465 | X_STR_PORT |= X_STR; 466 | 467 | // if(pUpload == credits) { 468 | // LED1_ON; 469 | // LED2_ON; 470 | // sleepOrg(3000); 471 | // } 472 | 473 | while (!(X_STR_PIN & X_STR)) { 474 | } 475 | 476 | reset(); 477 | return 0; 478 | } 479 | 480 | 481 | -------------------------------------------------------------------------------- /XenoAT/source/XenoShell.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/XenoAT/source/XenoShell.bin -------------------------------------------------------------------------------- /XenoAT/source/credits.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/XenoAT/source/credits.bin -------------------------------------------------------------------------------- /XenoAT/source/qcode.S: -------------------------------------------------------------------------------- 1 | 2 | /* global settings header used by various sub-projetcs */ 3 | .include "XenoGlobal.h" 4 | 5 | .text 6 | 7 | .global qcode 8 | .global qcode_end 9 | .global upload 10 | .global upload_end 11 | .global credits 12 | .global credits_end 13 | 14 | 15 | .align 2 16 | #-------------------------------------- 17 | qcode: 18 | #-------------------------------------- 19 | .incbin "XenoAT/source/qcode.bin" 20 | qcode_end: 21 | 22 | .align 2 23 | #-------------------------------------- 24 | upload: 25 | #-------------------------------------- 26 | .incbin "XenoAT/source/upload.bin" 27 | upload_end: 28 | 29 | .align 2 30 | #-------------------------------------- 31 | credits: 32 | #-------------------------------------- 33 | .if CREDITS == 1 34 | # .incbin "XenoAT/source/credits.bin" 35 | # .incbin "XenoAT/source/sdload.bin" 36 | .incbin "XenoAT/source/XenoShell.bin" 37 | .else 38 | .incbin "XenoAT/source/NoCredits.bin" 39 | .endif 40 | 41 | credits_end: 42 | 43 | 44 | -------------------------------------------------------------------------------- /XenoAT/source/qcode.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/XenoAT/source/qcode.bin -------------------------------------------------------------------------------- /XenoAT/source/sdload.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/XenoAT/source/sdload.bin -------------------------------------------------------------------------------- /XenoAT/source/upload.S: -------------------------------------------------------------------------------- 1 | .text 2 | 3 | .equ SC0CTR, 0xfd80 4 | .equ SC0TRB, 0xfd82 5 | .equ SC0STR, 0xfd83 6 | .equ P8OUT, 0xffc8 7 | .equ ENTRY, 0x40c600 8 | 9 | /* helper macro for correct absolute 24bit jsrs */ 10 | .macro jsrabsOrg addr 11 | jsr \addr-.+\addr 12 | .endm 13 | 14 | .macro P81_HI 15 | .byte 0xF5, 0xD1, 0xC8 ,0xFF 16 | .endm 17 | .macro P81_LO 18 | .byte 0xF5, 0xD9, 0xC8 ,0xFF 19 | .endm 20 | 21 | #======================================= 22 | do_upload: 23 | #======================================= 24 | and 0xf7ff, psw 25 | P81_LO # avoid reset detection 26 | 27 | sub d0, d0 28 | mov d0, (0x40ec60) # disable HLELog buffer 29 | 30 | mov (0x40D100), d0 # check upload request tag 31 | cmp 0x4444, d0 32 | bne uploadDrivecode 33 | 34 | mov 0x40D800, a0 # one up ? 35 | jsr SUB_DownloadCode # download credits binary 36 | 37 | mov 0x40D100, a0 38 | sub d0, d0 # clear upload request tag 39 | mov d0, (a0) 40 | 41 | # mov 0xad2b, d0 42 | # mov 0x40D7FC, a0 # set upload done tag 43 | # mov d0, (a0) 44 | # mov d0, (2, a0) 45 | 46 | mov 0x80a74, a0 # restore org inthandler 47 | mov a0, (0x804c) 48 | jmp (a0) 49 | 50 | #============================ 51 | uploadDrivecode: 52 | #============================ 53 | mov ENTRY, a0 54 | jsr SUB_DownloadCode 55 | 56 | toEntry: 57 | jsrabsOrg ENTRY # jmp to drivecode 58 | 59 | #======================================= 60 | SUB_DownloadCode: 61 | #======================================= 62 | mov 0xc080, d0 63 | mov d0, (SC0CTR) 64 | 65 | mov 'Q', d0 66 | jsr SUB_SendByte 67 | jsr SUB_GetByte 68 | 69 | mov 'C', d0 70 | jsr SUB_SendByte 71 | jsr SUB_GetByte 72 | 73 | mov 256, d1 74 | mul d0, d1 75 | 76 | mov 'O', d0 77 | jsr SUB_SendByte 78 | jsr SUB_GetByte 79 | add d0, d1 80 | mov 'D', d0 81 | jsr SUB_SendByte 82 | jsr SUB_GetByte 83 | 84 | mov d1, d0 85 | jsr SUB_SendByte 86 | sub d2, d2 87 | 88 | download_loop: 89 | jsr SUB_GetByte 90 | jsr SUB_SendByte 91 | movb d0, (a0) 92 | add d0, d2 93 | jsr SUB_GetByte 94 | jsr SUB_SendByte 95 | movb d0, (1, a0) 96 | add d0, d2 97 | add 2, a0 98 | sub 1, d1 99 | bne download_loop 100 | 101 | mov d2, d0 102 | jsr SUB_GetByte 103 | jsr SUB_SendByte 104 | 105 | cmp 0x21, d0 106 | bne Reset 107 | 108 | exit: 109 | P81_LO 110 | rts 111 | 112 | #======================================= 113 | SUB_SendByte: 114 | #======================================= 115 | sub a2, a2 116 | waitsend: 117 | movb (0xFD83), d3 118 | and 0x80, d3 119 | beq 1f 120 | add 1, a2 121 | cmp 2000, a2 122 | beq Reset 123 | bra waitsend 124 | 125 | 1: movb d0, (SC0TRB) 126 | rts 127 | 128 | #======================================= 129 | SUB_GetByte: 130 | #=======================================: 131 | sub a2, a2 132 | waitrecv: 133 | movb (0xFD83), d3 134 | and 0x10, d3 135 | bne 1f 136 | add 1, a2 137 | cmp 2000, a2 138 | beq Reset 139 | bra waitrecv 140 | 141 | 1: movbu (SC0TRB), d0 142 | rts 143 | 144 | #======================================= 145 | Reset: 146 | #======================================= 147 | # or 0x800, psw 148 | # P81_HI 149 | 150 | mov 0x80a74, a0 # restore org inthandler 151 | mov a0, (0x804c) 152 | 153 | mov 0x80000, a0 154 | jmp (a0) 155 | 156 | 157 | -------------------------------------------------------------------------------- /XenoAT/source/upload.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/XenoAT/source/upload.bin -------------------------------------------------------------------------------- /XenoFlash/Makefile: -------------------------------------------------------------------------------- 1 | #--------------------------------------------------------------------------------- 2 | # Clear the implicit built in rules 3 | #--------------------------------------------------------------------------------- 4 | .SUFFIXES: 5 | #--------------------------------------------------------------------------------- 6 | ifeq ($(strip $(DEVKITPPC)),) 7 | $(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") 8 | endif 9 | 10 | include $(DEVKITPPC)/gamecube_rules 11 | 12 | #--------------------------------------------------------------------------------- 13 | # TARGET is the name of the output 14 | # BUILD is the directory where object files & intermediate files will be placed 15 | # SOURCES is a list of directories containing source code 16 | # INCLUDES is a list of directories containing extra header files 17 | #--------------------------------------------------------------------------------- 18 | TARGET := $(notdir $(CURDIR)) 19 | BUILD := build 20 | SOURCES := source 21 | DATA := data 22 | INCLUDES := 23 | 24 | #--------------------------------------------------------------------------------- 25 | # options for code generation 26 | #--------------------------------------------------------------------------------- 27 | 28 | CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) 29 | CXXFLAGS = $(CFLAGS) 30 | 31 | LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map 32 | 33 | #--------------------------------------------------------------------------------- 34 | # any extra libraries we wish to link with the project 35 | #--------------------------------------------------------------------------------- 36 | LIBS := -logc -lm -lz 37 | 38 | #--------------------------------------------------------------------------------- 39 | # list of directories containing libraries, this must be the top level containing 40 | # include and lib 41 | #--------------------------------------------------------------------------------- 42 | LIBDIRS := $(PORTLIBS) 43 | 44 | #--------------------------------------------------------------------------------- 45 | # no real need to edit anything past this point unless you need to add additional 46 | # rules for different file extensions 47 | #--------------------------------------------------------------------------------- 48 | ifneq ($(BUILD),$(notdir $(CURDIR))) 49 | #--------------------------------------------------------------------------------- 50 | 51 | export OUTPUT := $(CURDIR)/$(TARGET) 52 | 53 | export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ 54 | $(foreach dir,$(DATA),$(CURDIR)/$(dir)) 55 | 56 | export DEPSDIR := $(CURDIR)/$(BUILD) 57 | 58 | #--------------------------------------------------------------------------------- 59 | # automatically build a list of object files for our project 60 | #--------------------------------------------------------------------------------- 61 | CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) 62 | CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) 63 | sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) 64 | SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) 65 | BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) 66 | 67 | #--------------------------------------------------------------------------------- 68 | # use CXX for linking C++ projects, CC for standard C 69 | #--------------------------------------------------------------------------------- 70 | ifeq ($(strip $(CPPFILES)),) 71 | export LD := $(CC) 72 | else 73 | export LD := $(CXX) 74 | endif 75 | 76 | export OFILES := $(addsuffix .o,$(BINFILES)) \ 77 | $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ 78 | $(sFILES:.s=.o) $(SFILES:.S=.o) 79 | 80 | #--------------------------------------------------------------------------------- 81 | # build a list of include paths 82 | #--------------------------------------------------------------------------------- 83 | export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ 84 | $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ 85 | -I$(CURDIR)/$(BUILD) -I$(LIBOGC_INC) 86 | 87 | #--------------------------------------------------------------------------------- 88 | # build a list of library paths 89 | #--------------------------------------------------------------------------------- 90 | export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) -L$(LIBOGC_LIB) 91 | 92 | export OUTPUT := $(CURDIR)/$(TARGET) 93 | .PHONY: $(BUILD) clean 94 | 95 | #--------------------------------------------------------------------------------- 96 | $(BUILD): 97 | @[ -d $@ ] || mkdir -p $@ 98 | @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile 99 | 100 | #--------------------------------------------------------------------------------- 101 | clean: 102 | @echo clean ... 103 | @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol 104 | 105 | #--------------------------------------------------------------------------------- 106 | else 107 | 108 | DEPENDS := $(OFILES:.o=.d) 109 | 110 | #--------------------------------------------------------------------------------- 111 | # main targets 112 | #--------------------------------------------------------------------------------- 113 | $(OUTPUT).dol: $(OUTPUT).elf 114 | $(OUTPUT).elf: $(OFILES) 115 | 116 | #--------------------------------------------------------------------------------- 117 | # This rule links in binary data 118 | #--------------------------------------------------------------------------------- 119 | %.bin.o : %.bin 120 | #--------------------------------------------------------------------------------- 121 | @echo $(notdir $<) 122 | $(bin2o) 123 | 124 | -include $(DEPENDS) 125 | 126 | #--------------------------------------------------------------------------------- 127 | endif 128 | #--------------------------------------------------------------------------------- 129 | -------------------------------------------------------------------------------- /XenoFlash/data/XenoAT.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/XenoFlash/data/XenoAT.bin -------------------------------------------------------------------------------- /XenoFlash/data/confirmed_working_bins/XenoAT.1.03a.v1.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/XenoFlash/data/confirmed_working_bins/XenoAT.1.03a.v1.bin -------------------------------------------------------------------------------- /XenoFlash/data/confirmed_working_bins/XenoGC 1.01.V2.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/XenoFlash/data/confirmed_working_bins/XenoGC 1.01.V2.bin -------------------------------------------------------------------------------- /XenoFlash/data/flashloader.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/XenoFlash/data/flashloader.bin -------------------------------------------------------------------------------- /XenoFlash/flashloader/Makefile: -------------------------------------------------------------------------------- 1 | ############################################################################################################ 2 | ############################################################################################################ 3 | # Makefile - Flashloader.bin LINUX 4 | ############################################################################################################ 5 | ############################################################################################################ 6 | 7 | # TARGET = Target File to Compile 8 | # MNDIR = Path to MN10200 ELF 9 | # MNDIR1 = Path to MN10200 Binutils 10 | # MNDIR2 = Path to MN10200 Binutils ELF 11 | 12 | 13 | TARGET = flashloader 14 | 15 | MNDIR = /opt/XenoTools/mn10200/bin 16 | MNDIR1 = /opt/XenoTools/mn10200_binutils/bin 17 | MNDIR2 = /opt/XenoTools/mn10200_binutils-elf/bin 18 | 19 | GCC = $(MNDIR)/mn10200-elf-gcc 20 | AS = $(MNDIR1)/mn10200-as 21 | LD = $(MNDIR1)/mn10200-ld 22 | OBJCOPY = $(MNDIR2)/mn10200-elf-objcopy 23 | 24 | ############################################################################################################ 25 | # Build rules 26 | all: clean $(TARGET).bin move 27 | 28 | move: 29 | cp flashloader.bin ../data/flashloader.bin 30 | 31 | clean: 32 | rm -rf ../data/flashloader.bin 33 | rm -rf flashloader.bin 34 | rm -rf flashloader.elf 35 | rm -rf flashloader.o 36 | 37 | flashloader.o: flashloader.S 38 | $(AS) -L flashloader.S -o flashloader.o 39 | 40 | flashloader.elf: flashloader.o 41 | $(LD) -Ttext 0x40D000 --section-start absolute=0x00 -O $(GCC) flashloader.o -o flashloader.elf 42 | 43 | flashloader.bin: flashloader.elf 44 | $(OBJCOPY) -O binary flashloader.elf flashloader.bin 45 | 46 | -------------------------------------------------------------------------------- /XenoFlash/flashloader/QLite.h: -------------------------------------------------------------------------------- 1 | 2 | 3 | .global QCODEImageBase 4 | 5 | 6 | .section absolute 7 | .include "mn10200.h" 8 | 9 | 10 | .org 0xfcda 11 | ADBCTRL: 12 | 13 | .org 0xFD83 14 | SC0STR: 15 | 16 | #------------------------------------------------------------------------------------------ 17 | # Read ahead dma buffer addresses 18 | #------------------------------------------------------------------------------------------ 19 | .equ LBA_READAHEAD_BUFFER, 0x417100 20 | .equ LBA0, LBA_READAHEAD_BUFFER + (0x810 * 0) 21 | .equ LBA4, LBA_READAHEAD_BUFFER + (0x810 * 4) 22 | .equ LBA7, LBA_READAHEAD_BUFFER + (0x810 * 7) 23 | .equ LBA_APPL, LBA4 + 0x440 24 | .equ LBA_APPL_EPVEC, LBA_APPL + 0x12 25 | .equ LBA_APPL_SIZE, LBA_APPL + 0x16 26 | .equ LBA_APPL_CODE, LBA_APPL + 0x20 27 | 28 | 29 | #------------------------------------------------------------------------------------------ 30 | # firmware fixed addresses 31 | #------------------------------------------------------------------------------------------ 32 | .equ FwIrqVec, 0x804c 33 | .equ FwIrqDepth, 0x805b 34 | .equ FwData1, 0x008000 35 | .equ FwData1_Size, 0x6e 36 | .equ FwBSS, 0x00806e 37 | .equ FwInitDrive, 0x0808aa 38 | .equ FwIntHandler, 0x80a74 39 | .equ FwHLECmdBuffer, 0x40ebe6 40 | 41 | #------------------------------------------------------------------------------------------ 42 | # firmware version addresses 43 | #------------------------------------------------------------------------------------------ 44 | 45 | .macro IMM24Bit Addr 46 | .byte (\Addr & 0xFF) 47 | .byte (\Addr >> 8 & 0xFF) 48 | .byte (\Addr >> 16 & 0xFF) 49 | .endm 50 | 51 | .macro FwAddrImp16 Name P1, P2, P3 52 | X\Name: 53 | IMM24Bit \P1 54 | IMM24Bit \P2 55 | IMM24Bit \P3 56 | .set \Name, 0x003333 + (FWIMPORTS << 16) 57 | .set FWIMPORTS, FWIMPORTS+1 58 | .endm 59 | 60 | .macro FwAddrImp24 Name P1, P2, P3 61 | X\Name: 62 | IMM24Bit \P1 63 | IMM24Bit \P2 64 | IMM24Bit \P3 65 | .set \Name, 0x003333 + (FWIMPORTS << 16) 66 | .set FWIMPORTS, FWIMPORTS+1 67 | .endm 68 | 69 | .set FWIMPORTS, 0x01; 70 | -------------------------------------------------------------------------------- /XenoFlash/flashloader/QliteGlobal.h: -------------------------------------------------------------------------------- 1 | 2 | /* global settings header used by various sub-projetcs */ 3 | .include "../../XenoGlobal.h" 4 | 5 | 6 | #------------------------------------------------------------------------------------------ 7 | # Drivecode main configuration 8 | #------------------------------------------------------------------------------------------ 9 | .set DREFIX, 1 /* fix some read errors (1:on 2: switchable) */ 10 | .set DREFIXCFG, 0 /* dre fix is switchable */ 11 | .set READOPTS, 1 /* adjust read options */ 12 | .set FASTBOOT, 0 /* do fast login */ 13 | .set AUTHPLUSR, 1 /* enable login of dvd+rw */ 14 | .set AUTHDMI, 1 /* patch dmicheck for dvd-+rw */ 15 | .equ READ_ECMADVDS, 1 /* enable reading of dvd+-rw */ 16 | .set DOREGIONPATCH, 1 /* enable PAL<->NTSC patching */ 17 | .set RELEASEBUILD, 1 /* dont do fancy nonsense :) */ 18 | .set BYPASS, 1 /* enable unload command */ 19 | .set AUTOBYPASS, 1 /* unload automatically on memwrite */ 20 | 21 | 22 | #------------------------------------------------------------------------------------------ 23 | # Debug Config 24 | #------------------------------------------------------------------------------------------ 25 | .set DBGMODE, 1 /* enable various dbg functions */ 26 | .set DBGOUTPUT, 1 /* enableDEBUG OUTPUT via serial if */ 27 | .set USEDBGBP, 0 /* gp debug breakpoint */ 28 | -------------------------------------------------------------------------------- /XenoFlash/flashloader/flashloader.S: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/XenoFlash/flashloader/flashloader.S -------------------------------------------------------------------------------- /XenoFlash/flashloader/flashloader.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/XenoFlash/flashloader/flashloader.bin -------------------------------------------------------------------------------- /XenoFlash/flashloader/mn10200.h: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | /*##############################################################################*/ 5 | /* Variables address defines */ 6 | /*##############################################################################*/ 7 | .set DbgWritePtr, 0x8004 8 | .set DbgReadPtr, 0x8006 9 | .set DbgDump, 0x40d800 10 | .set DbgDumpStart, 0x40d800 11 | .set DbgDumpSize, 0x40d800 12 | 13 | /*##############################################################################*/ 14 | /* Register address defines */ 15 | /*##############################################################################*/ 16 | .set P0OUT, 0xffc0 ## PortXOutputRegister 17 | .set P1OUT, 0xffc1 18 | .set P2OUT, 0xffc2 19 | .set P3OUT, 0xffc3 20 | .set P4OUT, 0xffc4 21 | .set P5OUT, 0xffc5 22 | .set P6OUT, 0xffc6 23 | .set P7OUT, 0xffc7 24 | .set P8OUT, 0xffC8 25 | .set P9OUT, 0xffC9 26 | .set P0IN, 0xffd0 ## PortXInputRegister 27 | .set P1IN, 0xffd1 28 | .set P2IN, 0xffd2 29 | .set P3IN, 0xffd3 30 | .set P4IN, 0xffd4 31 | .set P5IN, 0xffd5 32 | .set P6IN, 0xffd6 33 | .set P7IN, 0xffd7 34 | .set P8IN, 0xffd8 35 | .set P9IN, 0xffd9 36 | .set P1DIR, 0xffe1 ## PortXInput/Output Dir Register 37 | .set P2DIR, 0xffe2 38 | .set P3DIR, 0xffe3 39 | .set P4DIR, 0xffe4 40 | .set P5DIR, 0xffe5 41 | .set P6DIR, 0xffe6 42 | .set P7DIR, 0xffe7 43 | .set P8DIR, 0xffe8 44 | .set P9DIR, 0xffe9 45 | 46 | .set P8PLU, 0xffb8 ## Port8Pull-upControlRegister 47 | .set P8LMD, 0xfffc ## Port8ModeRegister 48 | .set P8MMD, 0xfffd ## Port8ModeRegister 49 | .set P8HMD, 0xfffe ## Port8ModeRegister 50 | 51 | 52 | .set REG_IAGR, 0xfc0e 53 | .set REG_UNICR, 0xfc44 54 | .set UNID, (1<<0) 55 | 56 | .set REG_ADB0, 0xfcd2 57 | .set REG_ADB1, 0xfcd6 58 | .set REG_ADBCTRL, 0xfcda 59 | 60 | .set ADB0ACK, (0x01) 61 | .set ADB1ACK, (0x02) 62 | .set ADB0_ON, (0x04) 63 | .set ADB1_ON, (0x08) 64 | .set ADB01_ON, (ADB0_ON | ADB1_ON) 65 | 66 | 67 | .set NMICR, 0xfc40 68 | 69 | .set REG_BSWAPL, 0xFFCC 70 | .set REG_BSWAPH, 0xFFCE 71 | 72 | .set REG_SWAP16READ, 0xFFCC 73 | .set REG_SWAP16WRITE,0xFFCE 74 | 75 | .set SC0CTR, 0xfd80 76 | .set SC0TRB, 0xfd82 77 | 78 | 79 | .set SC3CTR, 0xfd98 80 | .set SC3TRB, 0xfd9a 81 | 82 | 83 | /*##############################################################################*/ 84 | /* Macros */ 85 | /*##############################################################################*/ 86 | 87 | .macro CLI 88 | and 0xf7ff, psw 89 | nop 90 | nop 91 | .endm 92 | 93 | .macro STI 94 | or 0x800, psw 95 | .endm 96 | 97 | 98 | /* helper macro for correct absolute 24bit jumps */ 99 | .macro jmpabsOrg addr 100 | jmp \addr-.+\addr 101 | .endm 102 | 103 | .macro jmpabs addr 104 | mov a0, (-8, a3) 105 | mov \addr, a0 106 | mov a0, (-4, a3) 107 | mov (-8, a3), a0 108 | add -4, a3 109 | rts 110 | .endm 111 | 112 | .macro jsrabs addr # damn 0x14 bytes... help :s 113 | add -8, a3 # 114 | mov a0, (-4, a3) # save a0 115 | mov .+0x11, a0 # push return address (here) 116 | mov a0, (4, a3) 117 | mov \addr, a0 # push return address (jsr dest) 118 | mov a0, (a3) 119 | mov (-4, a3), a0 # restore a0 120 | rts 121 | .endm 122 | 123 | 124 | /* helper macro for correct absolute 24bit jsrs */ 125 | .macro jsrabsOrg addr 126 | jsr \addr-.+\addr 127 | .endm 128 | 129 | /* jumps to Addr by using the stack, without modifying registers */ 130 | .macro JmpSaveReg Addr 131 | sub 8, a3 132 | mov a1, (a3) 133 | mov \Addr, a1 134 | mov a1, (4, a3) 135 | mov (a3), a1 136 | add 4, a3 137 | rts 138 | .endm 139 | 140 | .macro IMM24Bit Addr 141 | .byte ((\Addr) & 0xFF) 142 | .byte (((\Addr) >> 8) & 0xFF) 143 | .byte ((\Addr) >> 16) & 0xFF) 144 | .endm 145 | 146 | .macro bitset Addr bit 147 | .byte 0xF3, 0xFE, 0xD0 + \bit 148 | .long (\Addr) + 0xF6000000 # ohne worte :p 149 | .endm 150 | 151 | .macro bitset16 address bit 152 | .byte 0xF5, 0xD0 + \bit 153 | .word \address 154 | .endm 155 | 156 | .macro bitclr address bit 157 | .byte 0xF5, 0xD8 + \bit 158 | .word \address 159 | .endm 160 | 161 | .macro tbzAbs addr, bit, label 162 | .byte 0xF3, 0xFE, (0xC0 + \bit) 163 | .set O\addr\bit\label, (\label-.)-4 164 | .long \addr + (O\addr\bit\label << 24) 165 | .endm 166 | 167 | .macro tbnzAbs addr, bit, label 168 | .byte 0xF3, 0xFE, (0xC8 + \bit) 169 | .set O\addr\bit\label, (\label-.)-4 170 | .long \addr + (O\addr\bit\label << 24) 171 | .endm 172 | 173 | 174 | .macro CallDCCommand CmdNum 175 | jsr \CmdNum * 4 + 0x40d000 - 4 -.+\CmdNum * 4 + 0x40d000 - 4 176 | .endm 177 | 178 | 179 | .macro DBGOut8 Value 180 | mov \Value, a0 181 | mov 1, d0 182 | jsr SUB_DbgOutBuffer 183 | .endm 184 | 185 | .macro DBGOutReg8 Reg 186 | mov \Reg, d0 187 | jsr SUB_DbgOutByte 188 | .endm 189 | 190 | .macro DBGOutReg16 Reg 191 | movb \Reg, d0 192 | jsr SUB_DbgOutByte 193 | ror d0 194 | ror d0 195 | ror d0 196 | ror d0 197 | ror d0 198 | ror d0 199 | ror d0 200 | ror d0 201 | jsr SUB_DbgOutByte 202 | .endm 203 | 204 | 205 | /*##############################################################################*/ 206 | /* P80, P81 serial transfer macros */ 207 | /*##############################################################################*/ 208 | 209 | 210 | .macro P4IN_SET5 211 | .byte 0xF5, 0xD5, 0xD4, 0xFF 212 | .endm 213 | 214 | .macro P4IN_CLR5 215 | .byte 0xF5, 0xDD, 0xD4, 0xFF 216 | .endm 217 | 218 | .macro P80_HI 219 | .byte 0xF5, 0xD0, 0xC8 ,0xFF # P80_HI 220 | .endm 221 | 222 | .macro P80_LO 223 | .byte 0xF5, 0xD8, 0xC8 ,0xFF # P80_LO 224 | .endm 225 | 226 | .macro P81_HI 227 | .byte 0xF5, 0xD1, 0xC8 ,0xFF # P81_HI 228 | .endm 229 | 230 | .macro P81_LO 231 | .byte 0xF5, 0xD9, 0xC8 ,0xFF # P81_LO 232 | .endm 233 | 234 | .macro P82_HI 235 | .byte 0xF5, 0xD2, 0xC8 ,0xFF 236 | .endm 237 | 238 | .macro P82_LO 239 | .byte 0xF5, 0xDa, 0xC8 ,0xFF 240 | .endm 241 | 242 | .macro P83_HI 243 | .byte 0xF5, 0xD3, 0xC8 ,0xFF 244 | .endm 245 | 246 | .macro P83_LO 247 | .byte 0xF5, 0xDB, 0xC8 ,0xFF 248 | .endm 249 | 250 | .macro P84_HI 251 | .byte 0xF5, 0xD4, 0xC8 ,0xFF 252 | .endm 253 | 254 | .macro P84_LO 255 | .byte 0xF5, 0xDC, 0xC8 ,0xFF 256 | .endm 257 | 258 | -------------------------------------------------------------------------------- /XenoFlash/source/dvd.c: -------------------------------------------------------------------------------- 1 | #include "dvd.h" 2 | 3 | volatile long *dvd = (volatile long *) 0xCC006000; 4 | 5 | void DVD_CallFunc(u32 fnAddress) 6 | { 7 | dvd[0] = 0x14; //DEINT clr, TCINT clr 8 | // dvd[0] = 0x2e; 9 | dvd[1] = 0; 10 | dvd[2] = 0xFE120000; 11 | dvd[3] = fnAddress; 12 | dvd[4] = 0x66756e63; 13 | dvd[8] = 0; 14 | dvd[7] = 1; 15 | 16 | } 17 | 18 | int DVD_WaitImmediate() 19 | { 20 | u32 nCount = 0; 21 | 22 | while ((dvd[7] & 1)) { 23 | if(++nCount > 0xFFFFFF) { 24 | return 0; 25 | } 26 | } 27 | 28 | return 1; 29 | } 30 | 31 | int DVD_CustomDbgCommand(u32 dwCommand, u32 dwOffset, u32 dwLength, u32* pBuffer) 32 | { 33 | dvd[0] = 0x10;//2e; 34 | dvd[1] = 0; 35 | dvd[2] = dwCommand; 36 | dvd[3] = dwOffset; 37 | dvd[4] = dwLength; 38 | dvd[5] = (u32) pBuffer; 39 | dvd[6] = dwLength; 40 | dvd[7] = 1; 41 | 42 | DVD_WaitImmediate(); 43 | 44 | if (dvd[0] & 0x04) { 45 | return 1; 46 | } 47 | 48 | return 0; 49 | } 50 | 51 | u32 DVD_ReadDriveMemDword(u32 dwAddress) 52 | { 53 | dvd[0] = 0x14; 54 | // dvd[0] = 0x2e; 55 | dvd[1] = 0; 56 | dvd[2] = 0xFE010000; 57 | dvd[3] = dwAddress; 58 | dvd[4] = 0x00010000; 59 | dvd[8] = 0; 60 | dvd[7] = 1; 61 | 62 | if (DVD_WaitImmediate() == 1) 63 | { 64 | return dvd[8]; 65 | } 66 | return 0xDDDDDDDD; 67 | } 68 | 69 | u32 DVD_RequestError() { 70 | 71 | dvd[2] = 0xe0000000; 72 | dvd[7] = 1; 73 | 74 | return dvd[8]; 75 | } 76 | 77 | int DVD_SetDebugMode1() 78 | { 79 | dvd[0] = 0x10; 80 | dvd[1] = 0; 81 | dvd[2] = 0xff014d41; 82 | dvd[3] = 0x54534849; 83 | dvd[4] = 0x54410200; 84 | dvd[7] = 1; 85 | 86 | DVD_WaitImmediate(); 87 | 88 | if (dvd[0] & 0x04) { 89 | return 1; 90 | } 91 | 92 | return 0; 93 | } 94 | 95 | 96 | 97 | int DVD_SetDebugMode2() 98 | { 99 | dvd[0] = 0x10; 100 | dvd[1] = 0; 101 | dvd[2] = 0xff004456; 102 | dvd[3] = 0x442d4741; 103 | dvd[4] = 0x4d450300; 104 | dvd[7] = 1; 105 | 106 | DVD_WaitImmediate(); 107 | 108 | if (dvd[0] & 0x04) { 109 | return 1; 110 | } 111 | 112 | return 0; 113 | } 114 | 115 | 116 | void dvd_unlock() 117 | { 118 | 119 | dvd[0] |= 0x00000014; 120 | dvd[1] = 0; 121 | dvd[2] = 0xFF014D41; 122 | dvd[3] = 0x54534849; 123 | dvd[4] = 0x54410200; 124 | dvd[7] = 1; 125 | while ((dvd[0] & 0x14) == 0) { } 126 | dvd[0] |= 0x00000014; 127 | dvd[1] = 0; 128 | dvd[2] = 0xFF004456; 129 | dvd[3] = 0x442D4741; 130 | dvd[4] = 0x4D450300; 131 | dvd[7] = 1; 132 | while ((dvd[0] & 0x14) == 0) { } 133 | } 134 | 135 | int DVD_SetDebugMode() 136 | { 137 | DVD_SetDebugMode1(); 138 | DVD_SetDebugMode2(); 139 | //dvd_unlock(); 140 | 141 | return 0; 142 | } 143 | 144 | int DVD_WriteDriveMemDword(u32 dwAddress, u32 dwData) 145 | { 146 | int nCount = 0; 147 | 148 | dvd[0] = 0x2e; 149 | dvd[1] = 0; 150 | dvd[2] = 0xFE010100; 151 | 152 | dvd[3] = dwAddress; 153 | dvd[4] = 0x00040000; 154 | dvd[5] = 0; 155 | dvd[6] = 0; 156 | dvd[7] = 3; 157 | 158 | DVD_WaitImmediate(); 159 | 160 | 161 | dvd[0] = 0x2e; 162 | dvd[1] = 0; 163 | dvd[2] = dwData; 164 | dvd[7] = 1; 165 | 166 | DVD_WaitImmediate(); 167 | 168 | return 0; 169 | } 170 | 171 | 172 | int DVD_WriteDriveMemBlock(u32 dwAddress, void* pData, u32 dwSize) 173 | { 174 | u32* pSource = (u32*)pData; 175 | u32 dwDest = dwAddress; 176 | int nLeft = dwSize; 177 | 178 | while (nLeft > 0) 179 | { 180 | DVD_WriteDriveMemDword(dwDest, *pSource++);//(dwAddress, *pSource++); 181 | dwDest += 4; 182 | nLeft -= 4; 183 | } 184 | return 0; 185 | } 186 | 187 | int DVD_ReadDriveMemBlock(u32 dwAddress, void* pData, u32 dwSize) 188 | { 189 | u32* pSource = (u32 *) pData; 190 | u32 dwDest = dwAddress; 191 | int nLeft = dwSize; 192 | 193 | while(nLeft > 0) { 194 | *pSource++ = DVD_ReadDriveMemDword(dwDest);//(dwAddress); 195 | // dwAddress += 4; 196 | dwDest += 4; 197 | nLeft -= 4; 198 | } 199 | return 0; 200 | } -------------------------------------------------------------------------------- /XenoFlash/source/dvd.h: -------------------------------------------------------------------------------- 1 | #define RW 2 2 | #define DMA 1 3 | #define TSTART 0 4 | 5 | #define DICMDBUF0 *0xCC006008 6 | #define DICMDBUF1 *0xCC00600c 7 | #define DICMDBUF2 *0xCC006010 8 | #define DIIMMBUF *(u32*)0xCC006020 9 | #define DICR *0xCC00601c 10 | 11 | /* 12 | * A lot of these Functions were found in Emu_Kidid's GCOS Source code 13 | * as libOGC does not have DVD Debug commands built in. 14 | * 15 | * 16 | * 17 | * 18 | */ 19 | #define u32 unsigned long 20 | 21 | /* 22 | According to YAGCD 5.7.2: Drive Debug Commands 23 | This function uses DICMBUF0 = 0xfe120000 to jsr the MN102 24 | to a particular internal memory address. This is useful because, 25 | by this time, the program will have already loaded its own code to the MN102. 26 | */ 27 | extern void DVD_CallFunc(u32 fnAddress); 28 | 29 | int DVD_CustomDbgCommand(u32 dwCommand, u32 dwOffset, u32 dwLength, u32* pBuffer); 30 | 31 | u32 DVD_ReadDriveMemDword(u32 dwAddress); 32 | 33 | u32 DVD_RequestError(); 34 | 35 | int DVD_SetDebugMode(); 36 | 37 | int DVD_SetDebugMode1(); 38 | 39 | int DVD_SetDebugMode2(); 40 | 41 | int DVD_WaitImmediate(); 42 | 43 | int DVD_WriteDriveMemBlock(u32 dwAddress, void* pData, u32 dwSize); 44 | 45 | int DVD_WriteDriveMemDword(u32 dwAddress, u32 dwData); 46 | 47 | int DVD_ReadDriveMemBlock(u32 dwAddress, void* pData, u32 dwSize); 48 | 49 | void dvd_unlock(); -------------------------------------------------------------------------------- /XenoFlash/source/old_unused/Makefile-gekko: -------------------------------------------------------------------------------- 1 | # 2 | # Main makefile 3 | # 4 | 5 | # I hope this doesn't break your build, but I've got different names for the tools. The contents 6 | # of Makefile.local on my machine are: 7 | # BINPATH=$(HOME)/gc/bin 8 | # CROSS=powerpc-eabi-elf 9 | # CC=$(BINPATH)/$(CROSS)-gcc 10 | # OBJCOPY=$(BINPATH)/$(CROSS)-objcopy 11 | # LD=$(BINPATH)/$(CROSS)-ld 12 | # AS=$(BINPATH)/$(CROSS)-as 13 | # 14 | # CFLAGS_LOCAL=-DSAMSON=1 15 | # it is excluded from CVS, to not conflict with your settings. 16 | 17 | APPNAME = XenoFlash 18 | 19 | ############################################################################################################ 20 | 21 | #INIT = call gctools.bat 22 | 23 | CROSS = @powerpc-eabi- 24 | CC = $(CROSS)gcc 25 | CXX = $(CROSS)g++ 26 | AR = $(CROSS)ar 27 | OBJCOPY = $(CROSS)objcopy 28 | AS = $(CROSS)as 29 | LD = $(CXX) 30 | 31 | DOLTOOL = @doltool 32 | 33 | 34 | # Configuration 35 | CFLAGS = $(CFLAGS_LOCAL) -fno-exceptions -Wa,-mregnames \ 36 | -I$(GCLIBDIR) -Iinclude -o2 37 | 38 | AFLAGS = -Iinclude 39 | LDFLAGS = --gc-sections --omagic -T first.lds 40 | #-Ttext=0x81400000 41 | 42 | 43 | # Files 44 | MAIN_OBJS = main.o title.raw.o 45 | BOOT_OBJS = $(GCLIBDIR)/crt0.o 46 | GCLIB_OBJS = $(GCLIBDIR)/cache.o $(GCLIBDIR)/GC_Debug.o $(GCLIBDIR)/GC_Video.o $(GCLIBDIR)/GC_String.o $(GCLIBDIR)/GC_Random.o $(GCLIBDIR)/GC_PAD.o $(GCLIBDIR)/GC_Dvd.o $(GCLIBDIR)/GC_Memory.o $(GCLIBDIR)/GC_Time.o $(GCLIBDIR)/GC_vsprintf.o $(GCLIBDIR)/GC_EXI.o 47 | 48 | LIBRARIES = 49 | # gdbstub/libgdbstub.a 50 | # ./lwip/core/dhcp.o 51 | 52 | OBJS = $(BOOT_OBJS) $(GCLIB_OBJS) $(LIBRARIES) $(MAIN_OBJS) 53 | 54 | # Build rules 55 | all: $(APPNAME).dol 56 | 57 | clean: 58 | rm -rf $(OBJS) 59 | 60 | cleanx: 61 | find -name '*.o' | xargs -r rm 62 | find -name '*.a' | xargs -r rm 63 | find -name '*~' | xargs -r rm 64 | find -name '*.bin' | xargs -r rm 65 | find -name '*.dol' | xargs -r rm 66 | find -name '*.elf' | xargs -r rm 67 | find -name '*.map' | xargs -r rm 68 | find -name '*.tmp' | xargs -r rm 69 | 70 | .c.o: 71 | $(CC) $(CFLAGS) -c -o $@ $*.c 72 | 73 | .cpp.o: 74 | $(CXX) $(CFLAGS) -c -o $@ $*.cpp 75 | 76 | .s.o: 77 | $(CC) $(AFLAGS) -c -o $@ $*.s 78 | 79 | .S.o: 80 | $(CC) $(AFLAGS) -c -o $@ $*.S 81 | 82 | ################################################### 83 | # 84 | ################################################### 85 | main.o: flashloader.bin 86 | main.o: ../XenoAT/bin/XenoAT.bin 87 | 88 | $(APPNAME).elf: $(APPNAME)_tmp.elf 89 | $(OBJCOPY) -R .comment $< $@ 90 | 91 | $(APPNAME).bin: $(APPNAME).elf 92 | $(OBJCOPY) -O binary $< $@ 93 | 94 | $(APPNAME).dol: $(APPNAME).elf 95 | $(DOLTOOL) -d $(APPNAME).elf 96 | 97 | $(APPNAME)_tmp.elf: $(OBJS) 98 | $(CXX) $(LDFLAGS) -Wl,-n -o $@ $(OBJS) -Wl,-Map -Wl,$(APPNAME).map 99 | 100 | flashloader.o: flashloader.S 101 | @as_mn10200 -L flashloader.S -o flashloader.o 102 | 103 | flashloader.elf: flashloader.o 104 | @ld-mn10200 -Ttext 0x40D000 --section-start absolute=0x00 -O mn10200-elf flashloader.o -o flashloader.elf 105 | 106 | flashloader.bin: flashloader.elf 107 | @objcopy-all -O binary flashloader.elf flashloader.bin 108 | 109 | -------------------------------------------------------------------------------- /XenoFlash/source/old_unused/first.lds: -------------------------------------------------------------------------------- 1 | 2 | 3 | ENTRY(_start) 4 | SECTIONS 5 | { 6 | . = 0x80003100; 7 | .text : { *(.text) } 8 | .data : { *(.data) } 9 | .sdata : { *(.sdata) } 10 | .rodata : { *(.rodata)} 11 | __bss_start = .; 12 | .bss : { *(.bss) } 13 | .sbss : { *(.sbss) } 14 | __bss_end = .; 15 | _end = .; 16 | } 17 | 18 | -------------------------------------------------------------------------------- /XenoFlash/source/title.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/XenoFlash/source/title.bmp -------------------------------------------------------------------------------- /XenoGlobal.h: -------------------------------------------------------------------------------- 1 | 2 | 3 | /*---------------------------------------------------------------------\ 4 | XenoGC Global Settings Header 5 | \---------------------------------------------------------------------*/ 6 | .set ENABLE_CREDITS, 1 7 | 8 | 9 | 10 | 11 | /*------------------------------------------\ 12 | mapping to internal flags (c/asm) 13 | \------------------------------------------*/ 14 | .if ENABLE_CREDITS == 0 15 | .set CREDITS, 0 16 | #define CREDITS 0 17 | .else 18 | .set CREDITS, 1 19 | #define CREDITS 1 20 | .endif 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /XenoShell/Makefile-LINUX: -------------------------------------------------------------------------------- 1 | ########################################################################################### 2 | ########################################################################################### 3 | # Makefile - XenoShell LINUX 4 | ########################################################################################### 5 | ########################################################################################### 6 | 7 | TARGET = XenoShell 8 | SOURCES = $(TARGET)/source 9 | DIR = $(DEVKITPPC)/bin 10 | CC = $(DIR)/powerpc-eabi-gcc 11 | OBJCOPY = $(DIR)/powerpc-eabi-objcopy 12 | FLAGS = -nostdlib -Wall -Os -pipe -Wl,-s,-x,--gc-sections -Wa,-mregnames -fno-exceptions\ 13 | -mhard-float -Wl,-T,$(SOURCES)/first.lds -Wl,-Map=$(SOURCES)/$(TARGET).map 14 | LINE = echo -------------------------------------------- 15 | BLD = @echo;$(LINE);echo BUILDING: XENO SHELL;$(LINE) 16 | END = @echo;$(LINE);echo BUILDING: XENO SHELL...DONE!!;$(LINE) 17 | MOVE = mv $(SOURCES)/$(TARGET).bin $(TARGET) 18 | 19 | all: clean build move 20 | 21 | build: 22 | $(BLD) 23 | $(CC) $(FLAGS) $(SOURCES)/boot.s $(SOURCES)/main.c -lgcc -o $(SOURCES)/$(TARGET).elf 24 | $(OBJCOPY) -O binary $(SOURCES)/$(TARGET).elf $(SOURCES)/$(TARGET).bin 25 | 26 | move: 27 | $(MOVE) 28 | $(END) 29 | 30 | clean: 31 | rm -f $(TARGET)/$(TARGET).bin 32 | rm -f $(SOURCES)/$(TARGET).elf 33 | rm -f $(SOURCES)/$(TARGET).map -------------------------------------------------------------------------------- /XenoShell/Makefile-WIN: -------------------------------------------------------------------------------- 1 | ########################################################################################### 2 | ########################################################################################### 3 | # Makefile - XenoShell WINDOWS 4 | ############################################################################################ 5 | ########################################################################################### 6 | # USER DEFINE VARIABLES 7 | # DEVKITPPC = Path to \devkitPro\devkitPPC 8 | # 9 | # 10 | DEVKITPPC = 'C:\devkitPro\devkitPPC' 11 | ########################################################################################### 12 | ########################################################################################### 13 | TARGET = XenoShell 14 | SOURCES = $(TARGET)/source 15 | DIR = $(DEVKITPPC)/bin 16 | CC = $(DIR)/powerpc-eabi-gcc 17 | OBJCOPY = $(DIR)/powerpc-eabi-objcopy 18 | FLAGS = -nostdlib -Wall -Os -pipe -Wl,-s,-x,--gc-sections -Wa,-mregnames -fno-exceptions\ 19 | -mhard-float -Wl,-T,$(SOURCES)/first.lds -Wl,-Map=$(SOURCES)/$(TARGET).map 20 | REMOVE = rm -f 21 | LINE = echo -------------------------------------------- 22 | BLD = @echo;$(LINE);echo BUILDING: XENO SHELL;$(LINE) 23 | END = @echo;$(LINE);echo BUILDING: XENO SHELL...DONE!!;$(LINE) 24 | MOVE = mv $(SOURCES)/$(TARGET).bin $(TARGET) 25 | 26 | all: clean build move 27 | 28 | build: 29 | $(BLD) 30 | $(CC) $(FLAGS) $(SOURCES)/boot.s $(SOURCES)/main.c -lgcc -o $(SOURCES)/$(TARGET).elf 31 | $(OBJCOPY) -O binary $(SOURCES)/$(TARGET).elf $(SOURCES)/$(TARGET).bin 32 | 33 | move: 34 | $(MOVE) 35 | $(END) 36 | 37 | clean: 38 | $(REMOVE) $(TARGET)/$(TARGET).bin 39 | $(REMOVE) $(SOURCES)/$(TARGET).elf 40 | $(REMOVE) $(SOURCES)/$(TARGET).map 41 | 42 | -------------------------------------------------------------------------------- /XenoShell/source/boot.s: -------------------------------------------------------------------------------- 1 | 2 | 3 | .global _start 4 | .global main 5 | 6 | .global szDriveVer 7 | 8 | .global szIPL 9 | .global szNTSC10 10 | .global szXeno 11 | 12 | _start: 13 | lis 1, 0x817F 14 | b main 15 | 16 | .global __eabi 17 | __eabi: 18 | blr 19 | 20 | .globl GetMSR 21 | GetMSR: 22 | mfmsr 3 23 | blr 24 | 25 | .globl SetMSR 26 | SetMSR: 27 | mtmsr 3 28 | blr 29 | 30 | .globl dcache_flush_icache_inv 31 | dcache_flush_icache_inv: 32 | clrlwi. 5, 3, 27 # check for lower bits set in address 33 | beq 1f 34 | addi 4, 4, 0x20 35 | 1: 36 | addi 4, 4, 0x1f 37 | srwi 4, 4, 5 38 | mtctr 4 39 | 2: 40 | dcbf 0, 3 41 | icbi 0, 3 42 | addi 3, 3, 0x20 43 | bdnz 2b 44 | sc 45 | sync 46 | isync 47 | blr 48 | 49 | szDriveVer: .string " Drive Version X"; 50 | -------------------------------------------------------------------------------- /XenoShell/source/first.lds: -------------------------------------------------------------------------------- 1 | 2 | 3 | ENTRY(_start) 4 | SECTIONS 5 | { 6 | . = 0x81700000; 7 | .text : { *(.text) } 8 | .data : { *(.data) } 9 | .sdata : { *(.sdata) } 10 | .rodata : { *(.rodata)} 11 | __bss_start = .; 12 | .bss : { *(.bss) } 13 | .sbss : { *(.sbss) } 14 | __bss_end = .; 15 | _end = .; 16 | } 17 | 18 | -------------------------------------------------------------------------------- /XenoShell/source/main.h: -------------------------------------------------------------------------------- 1 | 2 | typedef unsigned long u32; 3 | typedef unsigned short u16; 4 | typedef unsigned char u8; 5 | 6 | typedef volatile u8 vu8; 7 | typedef volatile u16 vu16; 8 | typedef volatile u32 vu32; 9 | 10 | /*** memory layout ***/ 11 | #define MEM_TEMP 0x81000000 12 | #define MEM_WORK 0x81010000 13 | #define MEM_FONT 0x81020000 14 | #define MEM_FB ((0xC0F00000)) // 80080000 15 | #define MEM_FB2 ((MEM_FB + 0x500)) 16 | 17 | #define GC_INIT_BASE (0x80000020) 18 | #define GC_INIT_BASE_PTR (u32*)GC_INIT_BASE 19 | 20 | /*** video stuff ***/ 21 | #define VI_BASE (u32*) 0xCC002000 22 | #define VI_BASE2 (u32*) 0xCC002040 23 | #define MBLIST_Y (3 * 24) 24 | 25 | #define R_VIDEO_FRAMEBUFFER_1 *(unsigned long*)0xCC00201C 26 | #define R_VIDEO_FRAMEBUFFER_2 *(unsigned long*)0xCC002024 27 | 28 | #define YBORDEROFFSET (640*2 * 32) 29 | #define CLAMP(x,l,h) ((x > h) ? h : ((x < l) ? l : x)) 30 | #define TENT(a, b, c) (0.25 * (a) + 0.5 * (b) + 0.25 * (c)) 31 | #define RGB2YCBR(r,g,b) ((u32)(((u8)CLAMP((0.257 * (float)r + 0.504 * (float)g + 0.098 * (float)b + 16.0 + 0.5) , 16, 235) << 24) | ((u8)CLAMP((-0.148 * (float)r - 0.291 * (float)g + 0.439 * (float)b + 128.0 + 0.5), 16, 240) << 16) | ((u8)(0.257 * (float)r + 0.504 * (float)g + 0.098 * (float)b + 16.0 + 0.5) << 8) | (u8)CLAMP((0.439 * (float)r - 0.368 * (float)g - 0.071 * (float)b + 128.0 + 0.5), 16, 240))) 32 | 33 | /*** exi definitions ***/ 34 | #define EXI_SR ebase[0] 35 | #define EXI_DMA_MEM ebase[1] 36 | #define EXI_DMA_LEN ebase[2] 37 | #define EXI_CR ebase[3] 38 | #define EXI_DATA ebase[4] 39 | #define EXI_WAIT_EOT while((EXI_CR)&1); 40 | 41 | /*** controller definitions ***/ 42 | #define PAD_LEFT 0x0001 43 | #define PAD_RIGHT 0x0002 44 | #define PAD_DOWN 0x0004 45 | #define PAD_UP 0x0008 46 | #define PAD_Z 0x0010 47 | #define PAD_R 0x0020 48 | #define PAD_L 0x0040 49 | #define PAD_A 0x0100 50 | #define PAD_B 0x0200 51 | #define PAD_X 0x0400 52 | #define PAD_Y 0x0800 53 | #define PAD_START 0x1000 54 | #define PAD_CLEFT 0x2000 55 | #define PAD_CRIGHT 0x4000 56 | #define PAD_CDOWN 0x8000 57 | #define PAD_CUP 0x10000 58 | 59 | /* time */ 60 | #define TB_CLOCK 40500000 61 | #define mftb(rval) ({unsigned long u; do { \ 62 | asm volatile ("mftbu %0" : "=r" (u)); \ 63 | asm volatile ("mftb %0" : "=r" ((rval)->l)); \ 64 | asm volatile ("mftbu %0" : "=r" ((rval)->u)); \ 65 | } while(u != ((rval)->u)); }) 66 | 67 | typedef struct { 68 | unsigned long l, u; 69 | } tb_t; 70 | 71 | /*** memcard stuff ***/ 72 | #define BLOCK_SIZE 512 73 | #define DOLSIZE (500 * 1024) // 512kb DOL 74 | #define DOLSEARCH_RANGE 0x1000000 // (16Mb Card MAX) 75 | 76 | /*** dvd stuff ***/ 77 | #define MEM32(_x) *(u32*)_x //--------------------------------------------------------------------------------------------------- 78 | #define DVD_DISR MEM32( 0xcc006000 ) // DI Status Register 79 | #define DVD_DISR_TCINT (1 << 4) // TCINT - Transfer Complete Interrupt Status 80 | // read : 0 Interrupt has not been requested / 1 Interrupt has been requested 81 | // write: write 0 no effect / 1 clear Interrupt 82 | #define DVD_DISR_DEINT (1 << 2) // DEINT - Device Error Interrupt Status 83 | // read : 0 Interrupt has not been requested / 1 Interrupt has been requested 84 | // write: write 0 no effect / 1 clear Interrupt 85 | #define DVD_DICR_DMA (1 << 1) // DMA - 0: immediate mode, 1: DMA mode (*1) 86 | #define DVD_DICR_TSTART (1 << 0) // TSTART - transfer start. 87 | // write 1: start transfer, read 1: transfer pendin 88 | //--------------------------------------------------------------------------------------------------- 89 | #define DVD_CLEARSTATUS() DVD_DISR |= ( DVD_DISR_DEINT | DVD_DISR_TCINT ); 90 | #define DVD_WAIT_STATUS() while( ! ( DVD_DISR & ( DVD_DISR_DEINT | DVD_DISR_TCINT))) 91 | 92 | /*** function prototypes ***/ 93 | static void load_apploader(); 94 | /* unused 95 | static void memcpy32(u32* pDest, u32* pSrc, u32 dwSize); 96 | */ 97 | static void memset32(u32* pDest, u32 dwVal, u32 dwSize); 98 | void InitSystem( unsigned long VidMode ); 99 | -------------------------------------------------------------------------------- /xenoflash.1.05.dol: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emukidid/xenogcfork/3d3f33faac51d799221ded9ca55eb581f0955ad7/xenoflash.1.05.dol --------------------------------------------------------------------------------