140 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			140 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | from ..assembler import ASM | ||
|  | import os | ||
|  | 
 | ||
|  | 
 | ||
|  | def updateEndScreen(rom): | ||
|  |     # Call our custom data loader in bank 3F | ||
|  |     rom.patch(0x00, 0x391D, ASM("""
 | ||
|  |         ld   a, $20 | ||
|  |         ld   [$2100], a | ||
|  |         jp   $7de6 | ||
|  |     """), ASM(""" | ||
|  |         ld   a, $3F | ||
|  |         ld   [$2100], a | ||
|  |         jp   $4200 | ||
|  |     """))
 | ||
|  |     rom.patch(0x17, 0x2FCE, "B170", "D070") # Ignore the final tile data load | ||
|  |      | ||
|  |     rom.patch(0x3F, 0x0200, None, ASM("""
 | ||
|  |     ; Disable LCD | ||
|  |     xor a | ||
|  |     ldh  [$40], a | ||
|  |      | ||
|  |     ld  hl, $8000 | ||
|  |     ld  de, $5000 | ||
|  | copyLoop: | ||
|  |     ld  a, [de] | ||
|  |     inc de | ||
|  |     ldi [hl], a | ||
|  |     bit 4, h | ||
|  |     jr  z, copyLoop | ||
|  | 
 | ||
|  |     ld  a, $01 | ||
|  |     ldh [$4F], a | ||
|  | 
 | ||
|  |     ld  hl, $8000 | ||
|  |     ld  de, $6000 | ||
|  | copyLoop2: | ||
|  |     ld  a, [de] | ||
|  |     inc de | ||
|  |     ldi [hl], a | ||
|  |     bit 4, h | ||
|  |     jr  z, copyLoop2 | ||
|  | 
 | ||
|  |     ld  hl, $9800 | ||
|  |     ld  de, $0190 | ||
|  | clearLoop1: | ||
|  |     xor a | ||
|  |     ldi [hl], a | ||
|  |     dec de | ||
|  |     ld  a, d | ||
|  |     or  e | ||
|  |     jr  nz, clearLoop1 | ||
|  | 
 | ||
|  |     ld  de, $0190 | ||
|  | clearLoop2: | ||
|  |     ld  a, $08 | ||
|  |     ldi [hl], a | ||
|  |     dec de | ||
|  |     ld  a, d | ||
|  |     or  e | ||
|  |     jr  nz, clearLoop2 | ||
|  | 
 | ||
|  |     xor  a | ||
|  |     ldh  [$4F], a | ||
|  | 
 | ||
|  | 
 | ||
|  |     ld  hl, $9800 | ||
|  |     ld  de, $000C | ||
|  |     xor  a | ||
|  | loadLoop1: | ||
|  |     ldi  [hl], a | ||
|  |     ld   b, a | ||
|  |     ld   a, l | ||
|  |     and  $1F | ||
|  |     cp   $14 | ||
|  |     jr   c, .noLineSkip | ||
|  |     add  hl, de | ||
|  | .noLineSkip: | ||
|  |     ld   a, b | ||
|  |     inc  a | ||
|  |     jr   nz, loadLoop1 | ||
|  | 
 | ||
|  | loadLoop2: | ||
|  |     ldi  [hl], a | ||
|  |     ld   b, a | ||
|  |     ld   a, l | ||
|  |     and  $1F | ||
|  |     cp   $14 | ||
|  |     jr   c, .noLineSkip | ||
|  |     add  hl, de | ||
|  | .noLineSkip: | ||
|  |     ld   a, b | ||
|  |     inc  a | ||
|  |     jr   nz, loadLoop2 | ||
|  | 
 | ||
|  |     ; Load palette | ||
|  |     ld   hl, $DC10 | ||
|  |     ld   a, $00 | ||
|  |     ldi  [hl], a | ||
|  |     ld   a, $00 | ||
|  |     ldi  [hl], a | ||
|  | 
 | ||
|  |     ld   a, $ad | ||
|  |     ldi  [hl], a | ||
|  |     ld   a, $35 | ||
|  |     ldi  [hl], a | ||
|  | 
 | ||
|  |     ld   a, $94 | ||
|  |     ldi  [hl], a | ||
|  |     ld   a, $52 | ||
|  |     ldi  [hl], a | ||
|  | 
 | ||
|  |     ld   a, $FF | ||
|  |     ldi  [hl], a | ||
|  |     ld   a, $7F | ||
|  |     ldi  [hl], a | ||
|  | 
 | ||
|  |     ld   a, $00 | ||
|  |     ld   [$DDD3], a | ||
|  |     ld   a, $04 | ||
|  |     ld   [$DDD4], a | ||
|  |     ld   a, $81 | ||
|  |     ld   [$DDD1], a | ||
|  | 
 | ||
|  |     ; Enable LCD | ||
|  |     ld  a, $91 | ||
|  |     ldh [$40], a | ||
|  |     ld  [$d6fd], a | ||
|  |      | ||
|  |     xor a | ||
|  |     ldh [$96], a | ||
|  |     ldh [$97], a | ||
|  |     ret | ||
|  |     """))
 | ||
|  |      | ||
|  |     addr = 0x1000 | ||
|  |     for c in open(os.path.join(os.path.dirname(__file__), "nyan.bin"), "rb").read(): | ||
|  |         rom.banks[0x3F][addr] = c | ||
|  |         addr += 1 |