| Предыдущая тема :: Следующая тема   | 
	
	
	
		| Автор | 
		Сообщение | 
	
	
		Axel Советник
  
  Зарегистрирован: 14.11.2003 Сообщения: 680
 
  | 
		
			
				 Добавлено: Пт Ноя 21, 2003 1:07 pm    Заголовок сообщения: Функции разжатия данных в BIOS GBA | 
				     | 
			 
			
				
  | 
			 
			
				BIOS Decompression Functions
 
 
BitUnPack
 
Diff8bitUnFilterWram
 
Diff8bitUnFilterVram
 
Diff16bitUnFilter
 
HuffUnComp
 
LZ77UnCompWram
 
LZ77UnCompVram
 
RLUnCompVram
 
RLUnCompWram
 
 
SWI 16 (10h) - BitUnPack
 
Used to increase the color depth of bitmaps or tile data. For example, to convert a 1bit monochrome font into 4bit or 8bit GBA tiles. The Unpack Info is specified separately, allowing to convert the same source data into different formats.
 
  r0  Source Address      (no alignment required)
 
  r1  Destination Address (must be 32bit-word aligned)
 
  r2  Pointer to UnPack information:
 
       16bit  Length of Source Data in bytes     (0-FFFFh)
 
       8bit   Width of Source Units in bits      (only 1,2,4,8 supported)
 
       8bit   Width of Destination Units in bits (only 1,2,4,8,16,32 supported)
 
       32bit  Data Offset (Bit 0-30), and Zero Data Flag (Bit 31)
 
      The Data Offset is always added to all non-zero source units.
 
      If the Zero Data Flag was set, it is also added to zero units.
 
 
 
Data is written in 32bit units, Destination can be Wram or Vram. The size of unpacked data must be a multiple of 4 bytes. The width of source units (plus the offset) should not exceed the destination width.
 
Return: No return value, Data written to destination address.
 
 
SWI 22 (16h) - Diff8bitUnFilterWram
 
SWI 23 (17h) - Diff8bitUnFilterVram
 
SWI 24 (18h) - Diff16bitUnFilter
 
These aren't actually real decompression functions, destination data will have exactly the same size as source data. However, assume a bitmap or wave form to contain a stream of increasing numbers such like 10..19, the filtered/unfiltered data would be:
 
  unfiltered:   10  11  12  13  14  15  16  17  18  19
 
  filtered:     10  +1  +1  +1  +1  +1  +1  +1  +1  +1
 
 
 
 
In this case using filtered data (combined with actual compression algorhytms) will obviously produce better compression results.
 
Data units may be either 8bit or 16bit used with Diff8bit or Diff16bit functions respectively. The 8bitVram function allows to write to VRAM directly (which uses 16bit data bus) by writing two 8bit values at once, the downside is that it is eventually slower as the 8bitWram function.
 
  r0  Source address (must be aligned by 4) pointing to data as follows:
 
       Data Header (32bit)
 
         Bit 0-3   Data size (must be 1 for Diff8bit, 2 for Diff16bit)
 
         Bit 4-7   Type (must be 8 for DiffFiltered)
 
         Bit 8-31  24bit size after decompression
 
       Data Units (each 8bit or 16bit depending on used SWI function)
 
         Data0          ;original data
 
         Data1-Data0    ;difference data
 
         Data2-Data1    ;...
 
         Data3-Data2
 
         ...
 
  r1  Destination address
 
 
 
 
Return: No return value, Data written to destination address.
 
 
SWI 19 (13h) - HuffUnComp
 
Expands Huffman-compressed data and writes in units of 32bits.
 
If the size of the compressed data is not a multiple of 4, please adjust it as much as possible by padding with 0.
 
Align the source address to a 4Byte boundary.
 
  r0  Source Address, aligned by 4, pointing to:
 
       Data Header (32bit)
 
         Bit 0-3   Data size in bit units (normally 4 or  
 
         Bit 4-7   Compressed type (must be 2 for Huffman)
 
         Bit 8-31  24bit size of decompressed data in bytes
 
       Tree Table
 
        u8      tree table size/2-1
 
        Each of the nodes below defined as:
 
         u8
 
          6bit  offset to next node -1 (2 byte units)
 
          1bit  right node end flag (if set, data is in next node)
 
          1bit  left node end flag
 
        1 node  Root node
 
        2 nodes Left, and Right node
 
        4 nodes LeftLeft, LeftRight, RightLeft, and RightRight node
 
        ...
 
       Compressed data
 
        ...
 
  r1  Destination Address
 
 
 
 
Return: No return value, Data written to destination address.
 
 
SWI 17 (11h) - LZ77UnCompWram
 
SWI 18 (12h) - LZ77UnCompVram
 
Expands LZ77-compressed data. The Wram function is faster, and writes in units of 8bits. For the Vram function the destination must be halfword aligned, data is written in units of 16bits.
 
If the size of the compressed data is not a multiple of 4, please adjust it as much as possible by padding with 0. Align the source address to a 4-Byte boundary.
 
  r0   Source address, pointing to data as such:
 
        Data header (32bit)
 
          Bit 0-3   Reserved
 
          Bit 4-7   Compressed type (must be 1 for LZ77)
 
          Bit 8-31  Size of decompressed data
 
        Repeat below. Each Flag Byte followed by eight Blocks.
 
        Flag data (8bit)
 
          Bit 0-7   Type Flags for next 8 Blocks, MSB first
 
        Block Type 0 - Uncompressed - Copy 1 Byte from Source to Dest
 
          Bit 0-7   One data byte to be copied to dest
 
        Block Type 1 - Compressed - Copy N+3 Bytes from Dest-Disp-1 to Dest
 
          Bit 0-3   Disp MSBs
 
          Bit 4-7   Number of bytes to copy (minus 3)
 
          Bit 8-15  Disp LSBs
 
  r1   Destination address
 
 
 
 
Return: No return value.
 
 
SWI 21 (15h) - RLUnCompVram
 
SWI 20 (14h) - RLUnCompWram
 
Expands run-length compressed data. The Wram function is faster, and writes in units of 8bits. For the Vram function the destination must be halfword aligned, data is written in units of 16bits.
 
If the size of the compressed data is not a multiple of 4, please adjust it as much as possible by padding with 0. Align the source address to a 4Byte boundary.
 
  r0  Source Address, pointing to data as such:
 
       Data header (32bit)
 
         Bit 0-3   Reserved
 
         Bit 4-7   Compressed type (must be 3 for run-length)
 
         Bit 8-31  Size of decompressed data
 
       Repeat below. Each Flag Byte followed by one or more Data Bytes.
 
       Flag data (8bit)
 
         Bit 0-6   Expanded Data Length (uncompressed N-1, compressed N-3)
 
         Bit 7     Flag (0=uncompressed, 1=compressed)
 
       Data Byte(s) - N uncompressed bytes, or 1 byte repeated N times
 
  r1  Destination Address
 
 
 
Return: No return value, Data written to destination address. _________________ Всех их вместе переведём! | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Fish
 
  
  Зарегистрирован: 15.11.2003 Сообщения: 425 Откуда: издалека...
  | 
		
			
				 Добавлено: Вт Ноя 25, 2003 11:36 am    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Ух ты!... Круто. И всё же, откуда такая инфа? _________________
   Однажды знакомый спросил - <Ну ты как?> <Да я... всё нормально. Нормально, чувак...> | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Axel Советник
  
  Зарегистрирован: 14.11.2003 Сообщения: 680
 
  | 
		
			
				 Добавлено: Вт Ноя 25, 2003 12:24 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Fish писал(а): | 	 		  | Ух ты!... Круто. И всё же, откуда такая инфа? | 	  
 
 
газеты надо читать! ;)
 
 
http://www.work.de/nocash/gbatek.htm _________________ Всех их вместе переведём! | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Fish
 
  
  Зарегистрирован: 15.11.2003 Сообщения: 425 Откуда: издалека...
  | 
		
			
				 Добавлено: Вт Ноя 25, 2003 1:27 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Axel писал(а): | 	 		   	  | Fish писал(а): | 	 		  | [...]откуда такая инфа? | 	  газеты надо читать!   | 	  О, спасибочки!!! Бум изучать.
 
 
ЗЫ: Чукча не читатель, чукча - писатель! ;)
 
 
*часом позже*
 
 
Вах-вах-вах... $5000 за деглюкер...     Печально...
 
 
*шутя* Может скинемся всем "Шедевром" на дебагер?       _________________
   Однажды знакомый спросил - <Ну ты как?> <Да я... всё нормально. Нормально, чувак...> | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Axel Советник
  
  Зарегистрирован: 14.11.2003 Сообщения: 680
 
  | 
		
			
				 Добавлено: Ср Ноя 26, 2003 6:29 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Fish писал(а): | 	 		  Вах-вах-вах... $5000 за деглюкер...     Печально... | 	  
 
А чем тебя не устраивает встроенный в VBA ? _________________ Всех их вместе переведём! | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Fish
 
  
  Зарегистрирован: 15.11.2003 Сообщения: 425 Откуда: издалека...
  | 
		
			
				 Добавлено: Чт Ноя 27, 2003 4:34 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Axel писал(а): | 	 		   	  | Fish писал(а): | 	 		  Вах-вах-вах... $5000 за деглюкер...     Печально... | 	  А чем тебя не устраивает встроенный в VBA ? | 	  А где же это в VBA дебагер?!   
 
Дизассемблер - имеется, просмотрщик спрайтов - имеется, просмотрщик памяти - тоже.
 
Но! Брейк-поинт поставить нельзя (ихмо). Что-либо изменить в памяти - тоже нельзя (имхо).    | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		АнС RRC2008
  
  
  Зарегистрирован: 08.11.2003 Сообщения: 2818
 
  | 
		
			
				 Добавлено: Чт Ноя 27, 2003 5:47 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Fish писал(а): | 	 		  Но! Брейк-поинт поставить нельзя (ихмо). Что-либо изменить в памяти - тоже нельзя (имхо).    | 	  
 
 
   Имхо-не имхо, но бряки не предусмотрены, а память изменить можно. Но это и то лучше, чем в Gens. | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Fish
 
  
  Зарегистрирован: 15.11.2003 Сообщения: 425 Откуда: издалека...
  | 
		 | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Fish
 
  
  Зарегистрирован: 15.11.2003 Сообщения: 425 Откуда: издалека...
  | 
		
			
				 Добавлено: Чт Дек 11, 2003 11:47 am    Заголовок сообщения: Re: Функции разжатия данных в BIOS GBA | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Axel писал(а): | 	 		  | BIOS Decompression Functions[...] | 	  
 
У меня созрел один вопрос. Если есть стандартные функции декомпрессии данных, то, стало быть, должны быть и стандарные функции сжатия данных. Ну и где же они есть? В каком-то SDK, что ли? | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Axel Советник
  
  Зарегистрирован: 14.11.2003 Сообщения: 680
 
  | 
		
			
				 Добавлено: Чт Дек 11, 2003 1:01 pm    Заголовок сообщения: Re: Функции разжатия данных в BIOS GBA | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Fish писал(а): | 	 		  | Если есть стандартные функции декомпрессии данных, то, стало быть, должны быть и стандарные функции сжатия данных. Ну и где же они есть? В каком-то SDK, что ли? | 	  
 
конечно есть  ,
 
в SDK который получают "легальные" разработчики от Nintendo :)
 
 
впрочем, например LZ(77) используется в PNG/JPEG/GIF...
 
а скажем RLE в BMP/PNG...
 
 
а уж Huffman где только не используется...   _________________ Всех их вместе переведём! | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Fish
 
  
  Зарегистрирован: 15.11.2003 Сообщения: 425 Откуда: издалека...
  | 
		
			
				 Добавлено: Чт Дек 11, 2003 2:33 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Окей, практический вопрос.
 
 
Предположим, нашли вызов функции декомпрессии.
 
Вытащили ресурс, изменили, хотим засунуть его обратно.
 
И, чем его теперь сжать?    
 
 
Иными словами, этот SDK вообще кто-то видел? | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Axel Советник
  
  Зарегистрирован: 14.11.2003 Сообщения: 680
 
  | 
		
			
				 Добавлено: Чт Дек 11, 2003 2:38 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Fish писал(а): | 	 		  | Иными словами, этот SDK вообще кто-то видел? | 	  
 
MoonLight наверное видел  ... _________________ Всех их вместе переведём! | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		АнС RRC2008
  
  
  Зарегистрирован: 08.11.2003 Сообщения: 2818
 
  | 
		
			
				 Добавлено: Чт Дек 11, 2003 2:48 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				| Не знаю, зачем вам этот SDK, я сам сел и написал запаковщик/распаковщик и всё. | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Axel Советник
  
  Зарегистрирован: 14.11.2003 Сообщения: 680
 
  | 
		
			
				 Добавлено: Чт Дек 11, 2003 2:58 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | АнС писал(а): | 	 		  | Зачем вам этот SDK | 	  
 
мне не нужен...(я даже и не искал его нигде) _________________ Всех их вместе переведём! | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Fish
 
  
  Зарегистрирован: 15.11.2003 Сообщения: 425 Откуда: издалека...
  | 
		
			
				 Добавлено: Чт Дек 11, 2003 4:31 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | АнС писал(а): | 	 		  | Не знаю, зачем вам этот SDK, я сам сел и написал запаковщик/распаковщик и всё. | 	  В твоем случае игра, видимо, использовала относительно простой алгоритм.
 
А если бы попался этот самый, как его, Хафман? Как бы ты поступил? _________________
   Однажды знакомый спросил - <Ну ты как?> <Да я... всё нормально. Нормально, чувак...> | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		 |