0; $b-- ) { $tiles[$t][$ix+2] = $tiles[$t][$ix+0] ^ $tiles[$t][$ix+2]; $tiles[$t][$ix+3] = $tiles[$t][$ix+1] ^ $tiles[$t][$ix+3]; $tiles[$t][$ix+18] = $tiles[$t][$ix+16] ^ $tiles[$t][$ix+18]; $tiles[$t][$ix+19] = $tiles[$t][$ix+17] ^ $tiles[$t][$ix+19]; $ix += 2; } } } // Loading tile blocks for( $b = 0; $b < 256; $b++) { $blocks[$b] = array(); fseek( $rom, $block_address + 2*$b ); $loc = ord(fread($rom,1)) + ord(fread($rom,1))*256; fseek( $rom, $block_bank * 0x4000 - 0x8000 + $loc ); for( $i = 0; $i < 16; $i++) { $t = ord( fread( $rom, 1 ) ); $d = ord( fread( $rom, 1 ) ); $blocks[$b][$i] = $d * 256 + $t; } } // Caching the blocks in a second image for( $b = 0; $b < 256; $b++ ) { createBlock( $blockimage, $b, $b*32,0); } if( $_GET['blocks'] == 1 ) { // Show blocks $b = 0; for( $c = 0; $c < 16; $c++ ) for( $r = 0; $r < 16; $r++ ) { displayBlock( $image, $b, $c*64,$r*32); imagestring( $image, 1, $c*64+36, $r*32+14, dechex($b), $colors[15] ); $b++; } } elseif( isset( $_GET['tiles'] ) ) { // Show tiles $t = 192; for( $i=0; $i<8; $i++ ) for( $j=0; $j<8; $j++ ) { imagestring( $image, 1, $j*100 + 20, $i*24, ($tilelocs[$t]), $colors[15] ); imagestring( $image, 1, $j*100 + 20, $i*24 + 10, ($tilelocs[$t+1]), $colors[15] ); imagestring( $image, 1, $j*100 + 60, $i*24, ($tilelocs[$t+2]), $colors[15] ); imagestring( $image, 1, $j*100 + 60, $i*24 + 10, ($tilelocs[$t+3]), $colors[15] ); displayTile( $image, $tiles[$t+0], 0, $j*100+0, $i*24 ); displayTile( $image, $tiles[$t+1], 0, $j*100+0, $i*24 +8 ); displayTile( $image, $tiles[$t+2], 0, $j*100+8, $i*24 ); displayTile( $image, $tiles[$t+3], 0, $j*100+8, $i*24 +8 ); $t += 4; } } else { // Show map $m = 0; for( $r = 0; $r < $level_height; $r++ ) for( $c = 0; $c < $level_width; $c++ ) { displayBlock( $image, $map[$m++], $c*32,$r*32); } } // Output header('Content-type: image/png'); imagepng($image); //////////////////////////////////////////////////////// // Functions function decodeTile( &$data_address ) { global $rom; fseek( $rom, $data_address ); $dataflags = fread( $rom, 4 ); $data_address += 4; $data = ''; for( $i=0; $i<32; $i++ ) { $b = $i % 8; $c = (int) ($i/8); if( ord($dataflags[$c]) & pow(2,$b) ) { $data .= fread( $rom, 1 ); $data_address++; } else { $data .= chr(0); } } return $data; } function binhex( $data ) { $str = ''; for( $i=0; $i0; $i-- ) { $map[$m++] = $map[$m2++]; } } } } } function getByte( &$source ) { return ord( fread( $source,1 ) ); } function getWord( &$source ) { return getByte( $source ) + getByte( $source ) * 0x100; } ?>