Автор: Ash-Ketchum Воскресенье, 08 августа 2010, 08:44
Доброго времени суток, может кто подскажет как конвертировать образ GB в образ GBC без нарушения контрольных сумм?
Автор: Wowik Воскресенье, 08 августа 2010, 09:29
А смысл? Это же по сути разные вещи! ГБ - чёрно-белые игры, а ГБЦ - цветные.
Автор: Ash-Ketchum Воскресенье, 08 августа 2010, 12:43
QUOTE (Wowik @ Воскресенье, 08 августа 2010, 09:29)
А смысл? Это же по сути разные вещи! ГБ - чёрно-белые игры, а ГБЦ - цветные.
Для разработки под GB я использую GbAssemblerStudio, для рисования графики там используются матрицы из чисел, каждая цифра соответствует определенному цвету, но из-за того что после компиляции на выходе получается файл *.gb, эмулятор не может отобразить цвета...Должен же быть какой-то способ преобразовать *.gb в *.gbc без повреждения cheksumm...
Автор: Тэйлс Воскресенье, 08 августа 2010, 13:49
Правая кнопка>Переименовать.
Всегда ваш капитан!
Автор: Ash-Ketchum Воскресенье, 08 августа 2010, 13:57
QUOTE (Тэйлс @ Воскресенье, 08 августа 2010, 13:49)
Правая кнопка>Переименовать.
Всегда ваш капитан!
Логично.... но если бы всё было так просто..... Ромы отличаются по заголовку... (под спойлером выделено жирным) но при изменении этого значения нарушается контрольная сумма
» Нажмите, для открытия спойлера «
User I/O
--------
There are no empty spaces in the memory map for
implementing input ports except the switchable RAM bank
area (not an option on the Super Smart Card since it's
RAM bank is always enabled).
An output only port may be implemented anywhere between
A000-FDFF. If implemented in a RAM area care should be
taken to use an area of RAM not used for anything else.
(FE00 and above can't be used because the CPU doesn't
generate an external /WR for these locations.)
If you have a cart with an MBC1, a ROM 4Mbit or smaller,
and a RAM 8Kbyte or smaller (or no RAM) then you can use
pins 6 & 7 of the MBC1 for 2 digital output pins for
whatever purpose you wish. To use them you must first
put the MBC1 into 4MbitROM/32KbyteRAM mode by writing
01 to 6000. The two least significant bits you write
to 4000 will then be output to these pins.
Reserved Memory Locations
-------------------------
0000 Restart $00 Address (RST $00 calls this address.)
0008 Restart $08 Address (RST $08 calls this address.)
0010 Restart $10 Address (RST $10 calls this address.)
0018 Restart $18 Address (RST $18 calls this address.)
0020 Restart $20 Address (RST $20 calls this address.)
0028 Restart $28 Address (RST $28 calls this address.)
0030 Restart $30 Address (RST $30 calls this address.)
0038 Restart $38 Address (RST $38 calls this address.)
0040 Vertical Blank Interrupt Start Address
0048 LCDC Status Interrupt Start Address
0050 Timer Overflow Interrupt Start Address
0058 Serial Transfer Completion Interrupt Start Address
0060 High-to-Low of P10-P13 Interrupt Start Address
An internal information area is located at 0100-014F in
each cartridge. It contains the following values:
0100-0103 This is the begin code execution point in a
cart. Usually there is a NOP and a JP
instruction here but not always.
0104-0133 Scrolling Nintendo graphic:
CE ED 66 66 CC 0D 00 0B 03 73 00 83 00 0C 00 0D
00 08 11 1F 88 89 00 0E DC CC 6E E6 DD DD D9 99
BB BB 67 63 6E 0E EC CC DD DC 99 9F BB B9 33 3E
( PROGRAM WON'T RUN IF CHANGED!!!)
0134-0142 Title of the game in UPPER CASE ASCII. If it
is less than 16 characters then the remaining
bytes are filled with 00's.
0143 $80 = Color GB, $00 or other = not Color GB
0144 Ascii hex digit, high nibble of licensee code (new).
0145 Ascii hex digit, low nibble of licensee code (new).
(These are normally $00 if [$014B] <> $33.)
0146 GB/SGB Indicator (00 = GameBoy, 03 = Super GameBoy functions)
(Super GameBoy functions won't work if <> $03.)
0147 Cartridge type:
0 - ROM ONLY 12 - ROM+MBC3+RAM
1 - ROM+MBC1 13 - ROM+MBC3+RAM+BATT
2 - ROM+MBC1+RAM 19 - ROM+MBC5
3 - ROM+MBC1+RAM+BATT 1A - ROM+MBC5+RAM
5 - ROM+MBC2 1B - ROM+MBC5+RAM+BATT
6 - ROM+MBC2+BATTERY 1C - ROM+MBC5+RUMBLE
8 - ROM+RAM 1D - ROM+MBC5+RUMBLE+SRAM
9 - ROM+RAM+BATTERY 1E - ROM+MBC5+RUMBLE+SRAM+BATT
B - ROM+MMM01 1F - Pocket Camera
C - ROM+MMM01+SRAM FD - Bandai TAMA5
D - ROM+MMM01+SRAM+BATT FE - Hudson HuC-3
F - ROM+MBC3+TIMER+BATT FF - Hudson HuC-1
10 - ROM+MBC3+TIMER+RAM+BATT
11 - ROM+MBC3
0148 ROM size:
0 - 256Kbit = 32KByte = 2 banks
1 - 512Kbit = 64KByte = 4 banks
2 - 1Mbit = 128KByte = 8 banks
3 - 2Mbit = 256KByte = 16 banks
4 - 4Mbit = 512KByte = 32 banks
5 - 8Mbit = 1MByte = 64 banks
6 - 16Mbit = 2MByte = 128 banks
$52 - 9Mbit = 1.1MByte = 72 banks
$53 - 10Mbit = 1.2MByte = 80 banks
$54 - 12Mbit = 1.5MByte = 96 banks
0149 RAM size:
0 - None
1 - 16kBit = 2kB = 1 bank
2 - 64kBit = 8kB = 1 bank
3 - 256kBit = 32kB = 4 banks
4 - 1MBit =128kB =16 banks
014A Destination code:
0 - Japanese
1 - Non-Japanese
014B Licensee code (old):
33 - Check 0144/0145 for Licensee code.
79 - Accolade
A4 - Konami
(Super GameBoy function won't work if <> $33.)
014C Mask ROM Version number (Usually $00)
014D Complement check
(PROGRAM WON'T RUN ON GB IF NOT CORRECT!!!)
(It will run on Super GB, however, if incorrect.)
014E-014F Checksum (higher byte first) produced by
adding all bytes of a cartridge except for two
checksum bytes and taking two lower bytes of
the result. (GameBoy ignores this value.)
Автор: Тэйлс Воскресенье, 08 августа 2010, 13:58
Ash-Ketchum, теперь-то понял. Ок, я не прав был значит.
Автор: УльтраБлокС Понедельник, 16 августа 2010, 21:11
Хм. Я не думал что РОМы GB от GBC отличаются заголовком...
Как я понимаю, заголовок не принадлежит РОМу, а содержится и в оригинальном картридже. В таком случаи есть вариант "Изменить значение и пересчитать чексумму, после чего записать изменённую чексумму?" Алгоритм достаточно примитивный.
QUOTE
014E-014F Checksum (higher byte first) produced by
adding all bytes of a cartridge except for two
checksum bytes and taking two lower bytes of
the result. (GameBoy ignores this value.)
Пройтись по всему файлу. Сложить все байты кроме 014E-014F. Взять два младших байта и записать их в 014E-014F.
Как взять младшие байты я не знаю, а так мог бы накодить тулзу для исправления чексуммы.
Автор: lps Понедельник, 16 августа 2010, 21:56
случайно нее в этом кроется проблема того, что после gbcolorizer'а ром не везде работает?
Автор: Ash-Ketchum Вторник, 17 августа 2010, 13:30
QUOTE (УльтраБлокС @ Понедельник, 16 августа 2010, 21:11)
Хм. Я не думал что РОМы GB от GBC отличаются заголовком...
Как я понимаю, заголовок не принадлежит РОМу, а содержится и в оригинальном картридже. В таком случаи есть вариант "Изменить значение и пересчитать чексумму, после чего записать изменённую чексумму?" Алгоритм достаточно примитивный.
Пройтись по всему файлу. Сложить все байты кроме 014E-014F. Взять два младших байта и записать их в 014E-014F.
Как взять младшие байты я не знаю, а так мог бы накодить тулзу для исправления чексуммы.
Есть готовая тулза, но все равно почему-то эмули ругаются на это
Автор: Ash-Ketchum Вторник, 17 августа 2010, 13:32
QUOTE (lps @ Понедельник, 16 августа 2010, 21:56)
случайно нее в этом кроется проблема того, что после gbcolorizer'а ром не везде работает?
Сравни оригинальный ром и ром после колоризера, посмотри что поменялось