You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							196 lines
						
					
					
						
							5.0 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							196 lines
						
					
					
						
							5.0 KiB
						
					
					
				| #include <stdio.h> | |
|  | |
| // Final buffer goes at 3:A100 of the save file | |
|  | |
| char buf[0x1b0]; | |
| 
 | |
| int s02_ADB1; | |
| 
 | |
| char s02_ADB1_b; | |
| char s02_ADB2; | |
| char s02_ADB3; | |
| char s02_ADB4; | |
| 
 | |
| char sSaveBlockChecksum; | |
| 
 | |
| char func() | |
| { | |
|     s02_ADB1_b = (s02_ADB1 >> 0) & 0xFF; | |
|     s02_ADB2 = (s02_ADB1 >> 8) & 0xFF; | |
|     s02_ADB3 = (s02_ADB1 >> 16) & 0xFF; | |
|     s02_ADB4 = (s02_ADB1 >> 24) & 0xFF; | |
| 
 | |
|     s02_ADB2 ^= (s02_ADB1_b + 1) ^ s02_ADB4; | |
|     s02_ADB3 += s02_ADB2; | |
|     s02_ADB4 = s02_ADB2 ^ (s02_ADB4 + (s02_ADB3 / 2)); | |
| 
 | |
|     s02_ADB1 = (s02_ADB4 << 24) | (s02_ADB3 << 16) | (s02_ADB2 << 8) | s02_ADB1_b; | |
| 
 | |
|     return s02_ADB4; | |
| } | |
| 
 | |
| int main() | |
| { | |
|     int bufi = 0; | |
| 
 | |
|     // sSaveSource = $FCDF; | |
|     sSaveBlockChecksum = 0x7F; | |
|     s02_ADB1 = 0x8C10E62F; | |
|     for (int i = 0; i < 0x48; i++) { | |
|         buf[bufi] = (char)(bufi & 0xFF); | |
|         buf[bufi] ^= func(); | |
|         sSaveBlockChecksum += buf[bufi]; | |
|         bufi++; | |
| 
 | |
|         buf[bufi] = (char)(bufi & 0xFF); | |
|         sSaveBlockChecksum ^= buf[bufi]; | |
|         buf[bufi] ^= func(); | |
|         bufi++; | |
|     } | |
|     buf[bufi] = sSaveBlockChecksum; | |
|     bufi++; | |
| 
 | |
|     // sSaveSource = $FA7A; | |
|     sSaveBlockChecksum = 0xC2; | |
|     s02_ADB1 = 0x6AF528C2; | |
|     for (int i = 0; i < 0x14; i++) { | |
|         buf[bufi] = (char)(bufi & 0xFF); | |
|         buf[bufi] ^= func(); | |
|         sSaveBlockChecksum ^= buf[bufi]; | |
|         bufi++; | |
|     } | |
|     buf[bufi] = sSaveBlockChecksum; | |
|     bufi++; | |
| 
 | |
|     // sSaveSource = $F84E; | |
|     for (int i = 0; i < 0x03; i++) { | |
|          buf[bufi] = (char)(bufi & 0xFF); | |
|          bufi++; | |
|     } | |
| 
 | |
|     // sSaveSource = $F859; | |
|     sSaveBlockChecksum = 0x06; | |
|     s02_ADB1 = 0xEF7305A6; | |
|     for (int i = 0; i < 0x4C; i++) { | |
|         buf[bufi] = (char)(bufi & 0xFF); | |
|         buf[bufi] ^= func(); | |
|         sSaveBlockChecksum ^= buf[bufi]; | |
|         bufi++; | |
| 
 | |
|         buf[bufi] = (char)(bufi & 0xFF); | |
|         buf[bufi] ^= func(); | |
|         sSaveBlockChecksum += buf[bufi]; | |
|         bufi++; | |
|     } | |
|     buf[bufi] = sSaveBlockChecksum; | |
|     bufi++; | |
| 
 | |
|     // sSaveSource = $DE41; | |
|     s02_ADB1 = 0x2A7FEC38; | |
|     sSaveBlockChecksum = 0x3C; | |
|     for (int i = 0; i < 0x21; i++) { | |
|         buf[bufi] = (char)(bufi & 0xFF); | |
|         sSaveBlockChecksum += buf[bufi]; | |
|         buf[bufi] ^= func(); | |
|         bufi++; | |
|     } | |
|     buf[bufi] = sSaveBlockChecksum; | |
|     bufi++; | |
| 
 | |
|     // sSaveSource = $DE99; | |
|     sSaveBlockChecksum = 0xE2; | |
|     s02_ADB1 = 0x4BFC1115; | |
|     for (int i = 0 ; i < 0x40; i++) { | |
|         buf[bufi] = (char)(bufi & 0xFF); | |
|         buf[bufi] ^= func(); | |
|         sSaveBlockChecksum += buf[bufi]; | |
|         bufi++; | |
|     } | |
|     buf[bufi] = sSaveBlockChecksum; | |
|     bufi++; | |
| 
 | |
|     s02_ADB1 = 0xA23F387C; | |
|     sSaveBlockChecksum = 0x16; | |
|     // sSaveSource = $A003; | |
|     for (int i = 0; i < 0x04; i++) { | |
|         buf[bufi] = (char)(bufi & 0xFF); | |
|         buf[bufi] ^= func(); | |
|         sSaveBlockChecksum ^= buf[bufi]; | |
|         sSaveBlockChecksum += buf[bufi]; | |
|         bufi++; | |
|     } | |
|     buf[bufi] = sSaveBlockChecksum; | |
|     bufi++; | |
| 
 | |
|     sSaveBlockChecksum = 0x00; | |
| 
 | |
|     // sSaveSource = $FFE1; | |
|     buf[bufi] = (char)(bufi & 0xFF); | |
|     sSaveBlockChecksum += buf[bufi]; | |
|     sSaveSource = 0xB16B; | |
|     *(sSaveSource++) = sSaveBlockChecksum; | |
|     bufi++; | |
| 
 | |
|     // sSaveSource = $FFE2; | |
|     // buf[bufi] = *(sSaveSource++); | |
|     // sSaveBlockChecksum ^= buf[bufi]; | |
|     // buf[bufi] = sSaveBlockChecksum; | |
|     // sSaveSource = $B16C; | |
|     // *(sSaveSource++) = sSaveBlockChecksum; | |
|     // bufi++; | |
|  | |
|     // sSaveSource = $FF04; | |
|     // buf[bufi] = *(sSaveSource++); | |
|     // sSaveBlockChecksum += buf[bufi]; | |
|     // buf[bufi] = sSaveBlockChecksum; | |
|     // sSaveSource = $B16D; | |
|     // *(sSaveSource++) = sSaveBlockChecksum; | |
|     // bufi++; | |
|     // sSaveSource = $FF05; | |
|     // buf[bufi] = *(sSaveSource++); | |
|     // sSaveBlockChecksum ^= buf[bufi]; | |
|     // buf[bufi] = sSaveBlockChecksum; | |
|     // sSaveSource = $B16E; | |
|     // *(sSaveSource++) = sSaveBlockChecksum; | |
|     // bufi++; | |
|     // s02_ADB1 = $EFBEADDE; | |
|     // bufi++; | |
|     // bufi++; | |
|     // sSaveBlockChecksum = $55; | |
|     // sSaveSource = $F350; | |
|     // *(sSaveSource++) = sSaveBlockChecksum; | |
|     // *(sSaveSource++) = sSaveBlockChecksum; | |
|     // rept ($1AB) {; | |
|         // sSaveSource = $F350; | |
|         // sSaveBlockChecksum = *sSaveSource; | |
|         // sSaveBlockChecksum += buf[bufi]; | |
|         // *(sSaveSource++) = sSaveBlockChecksum; | |
|         // sSaveBlockChecksum = *sSaveSource; | |
|         // sSaveBlockChecksum ^= buf[bufi]; | |
|         // *(sSaveSource++) = sSaveBlockChecksum; | |
|         // buf[bufi] ^= func(s02_ADB1); | |
|         // bufi++; | |
|     // }; | |
|  | |
|     // sSaveBlockChecksum = $CC; | |
|     // sSaveSource = $ADB1; | |
|     // sSaveBlockChecksum ^= buf[bufi]; | |
|     // *(sSaveSource++) = sSaveBlockChecksum; | |
|     // bufi++; | |
|     // sSaveBlockChecksum ^= buf[bufi]; | |
|     // *(sSaveSource++) = sSaveBlockChecksum; | |
|     // bufi++; | |
|     // sSaveBlockChecksum ^= buf[bufi]; | |
|     // *(sSaveSource++) = sSaveBlockChecksum; | |
|     // bufi++; | |
|     // sSaveBlockChecksum ^= buf[bufi]; | |
|     // *(sSaveSource++) = sSaveBlockChecksum; | |
|     // bufi++; | |
|     // sSaveSource = $F350; | |
|     // buf[bufi] = *(sSaveSource++); | |
|     // buf[bufi] ^= func(s02_ADB1); | |
|     // bufi++; | |
|     // buf[bufi] = *(sSaveSource++); | |
|     // buf[bufi] ^= func(s02_ADB1); | |
|     // bufi++; | |
| }
 | |
| 
 |