Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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, я сам сел и написал запаковщик/распаковщик и всё. | В твоем случае игра, видимо, использовала относительно простой алгоритм.
А если бы попался этот самый, как его, Хафман? Как бы ты поступил? _________________ Однажды знакомый спросил - <Ну ты как?> <Да я... всё нормально. Нормально, чувак...> |
|
Вернуться к началу |
|
|
|