123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- // Test image generator for more advanced color tests
- #define word char
- #include "LIB/MATH.C"
- #include "LIB/STDLIB.C"
- #include "LIB/SYS.C"
- #include "LIB/GFX.C"
- #include "DATA/TESTIMGD.C"
- #define DATA_OFFSET 3
- void testCard()
- {
- GFX_initVram(); // clear all VRAM
- GFX_copyPaletteTable((word)DATA_PALETTE_COLOR);
- GFX_copyPatternTable((word)DATA_PATTERN_COLOR);
- word y;
- for (y = 0; y < 25; y++)
- {
- GFX_printWindowColored(((word)tileColor0) + DATA_OFFSET, 5, GFX_WindowPosFromXY(0, y), 1);
- GFX_printWindowColored(((word)tileColor1) + DATA_OFFSET, 5, GFX_WindowPosFromXY(5, y), 1);
- GFX_printWindowColored(((word)tileColor2) + DATA_OFFSET, 5, GFX_WindowPosFromXY(10, y), 1);
- GFX_printWindowColored(((word)tileColor3) + DATA_OFFSET, 5, GFX_WindowPosFromXY(15, y), 1);
- GFX_printWindowColored(((word)tileColor0) + DATA_OFFSET, 5, GFX_WindowPosFromXY(20, y), 2);
- GFX_printWindowColored(((word)tileColor1) + DATA_OFFSET, 5, GFX_WindowPosFromXY(25, y), 2);
- GFX_printWindowColored(((word)tileColor2) + DATA_OFFSET, 5, GFX_WindowPosFromXY(30, y), 2);
- GFX_printWindowColored(((word)tileColor3) + DATA_OFFSET, 5, GFX_WindowPosFromXY(35, y), 2);
- }
- }
- void writePattern()
- {
- asm(
- "; backup registers\n"
- "push r1\n"
- "push r2\n"
- "push r3\n"
- "push r4\n"
- "push r5\n"
- "push r6\n"
- "push r7\n"
- "; 128 tiles in Window layer to id 252-255\n"
- "; vram address\n"
- "load32 0xC01420 r1 ; vram addr 1056+2048 0xC01420\n"
- "add r1 412 r1 ; add starting offset\n"
- "; loop variables\n"
- "load 0 r3 ; loopvar\n"
- "load 128 r4 ; loopmax\n"
- "or r1 r0 r5 ; vram addr with offset\n"
- "load 252 r1 ; initial tile ID\n"
- "load 0 r2 ; counter for next line\n"
- "load 15 r6 ; compare for next line (-1)\n"
- "; loop\n"
- "Test_colors_write_tile_id_loop:\n"
- "write 0 r5 r1 ; set tile\n"
- "; check if tile id is 255, then set back to 252, else increase by one\n"
- "load 255 r7\n"
- "bne r7 r1 2\n"
- "load 252 r1\n"
- "add r1 1 r1\n"
- "shiftr r3 2 r7 ; only increase color id every 4 tiles\n"
- "write 2048 r5 r7 ; set color (2048 offset, 0x800 in hex)\n"
- "; if drawn 16 tiles on this line\n"
- "bne r2 r6 4\n"
- "add r5 25 r5\n"
- "load 0 r2\n"
- "jumpo 3 ; skip the other clause\n"
- "; else\n"
- "add r2 1 r2\n"
- "add r5 1 r5 ; incr vram address\n"
- "add r3 1 r3 ; incr counter\n"
- "beq r3 r4 2 ; keep looping until all tiles are set\n"
- "jump Test_colors_write_tile_id_loop\n"
- "; restore registers\n"
- "pop r7\n"
- "pop r6\n"
- "pop r5\n"
- "pop r4\n"
- "pop r3\n"
- "pop r2\n"
- "pop r1\n"
- );
- }
- void testPalette1()
- {
- GFX_initVram(); // clear all VRAM
- GFX_copyPaletteTable((word)TEST_COLOR_PALETTETABLE_1);
- GFX_copyPatternTable((word)DATA_ASCII_DEFAULT);
- writePattern();
- }
- void testPalette2()
- {
- GFX_initVram(); // clear all VRAM
- GFX_copyPaletteTable((word)TEST_COLOR_PALETTETABLE_2);
- GFX_copyPatternTable((word)DATA_ASCII_DEFAULT);
- writePattern();
- }
- int main()
- {
- GFX_clearConsole();
- GFX_PrintConsole("Image test tool\n");
- GFX_PrintConsole("Press one of the following keys:\n");
- GFX_PrintConsole("q: quit\n");
- GFX_PrintConsole("1: test card\n");
- GFX_PrintConsole("2: color palette 1/2\n");
- GFX_PrintConsole("3: color palette 2/2\n");
- while (1)
- {
- if (HID_FifoAvailable())
- {
- word c = HID_FifoRead();
- if (c == 'q') // escape
- {
- return 'q';
- }
- if (c == '1')
- {
- testCard();
- }
- if (c == '2')
- {
- testPalette1();
- }
- if (c == '3')
- {
- testPalette2();
- }
- }
- }
- return 'q';
- }
- void interrupt()
- {
- // handle all interrupts
- word i = getIntID();
- switch(i)
- {
- case INTID_TIMER1:
- timer1Value = 1; // notify ending of timer1
- break;
- case INTID_TIMER2:
- break;
- case INTID_UART0:
- break;
- case INTID_GPU:
- break;
- case INTID_TIMER3:
- break;
- case INTID_PS2:
- break;
- case INTID_UART1:
- break;
- case INTID_UART2:
- break;
- }
- }
|