mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2025-04-09 05:44:44 -07:00
This commit is contained in:
commit
aec5a652c8
251
audio/engine.asm
251
audio/engine.asm
File diff suppressed because it is too large
Load Diff
220
battle/magikarp_length.asm
Normal file
220
battle/magikarp_length.asm
Normal file
@ -0,0 +1,220 @@
|
||||
CalcMagikarpLength: ; fbbfc
|
||||
; Return Magikarp's length (in mm) in MagikarpLength (big endian)
|
||||
;
|
||||
; input:
|
||||
; de: EnemyMonDVs
|
||||
; bc: PlayerID
|
||||
|
||||
; This function is needlessly convoluted, and poorly commented.
|
||||
; Reading is discouraged.
|
||||
|
||||
; In short, it generates a value between 190 and 1786 using
|
||||
; a Magikarp's DVs and its trainer ID. This value is further
|
||||
; scrutinized in GetEnemyMon to make longer Magikarp even rarer.
|
||||
|
||||
; This is done by calculating the value using operands from
|
||||
; a conversion lookup table.
|
||||
|
||||
; Our index is calculated by xoring DVs with the trainer ID:
|
||||
|
||||
; bc = rrc(rrc(dvs)) xor rrc(id)
|
||||
|
||||
; if bc < $a: MagikarpLength = c + 190
|
||||
; if bc >= $ff00: MagikarpLength = c + 1370
|
||||
; else: MagikarpLength = z*100 + (bc-x)/y
|
||||
|
||||
; X, Y, and Z depend on the value of b as follows:
|
||||
|
||||
; if b = 0: x = 310, y = 2, z = 3
|
||||
; if b = 1: x = 710, y = 4, z = 4
|
||||
; if b = 2-9: x = 2710, y = 20, z = 5
|
||||
; if b = 10-29: x = 7710, y = 50, z = 6
|
||||
; if b = 30-68: x = 17710, y = 100, z = 7
|
||||
; if b = 69-126: x = 32710, y = 150, z = 8
|
||||
; if b = 127-185: x = 47710, y = 150, z = 9
|
||||
; if b = 186-224: x = 57710, y = 100, z = 10
|
||||
; if b = 225-243: x = 62710, y = 50, z = 11
|
||||
; if b = 244-251: x = 64710, y = 20, z = 12
|
||||
; if b = 252-253: x = 65210, y = 5, z = 13
|
||||
; if b = 254: x = 65410, y = 2, z = 14
|
||||
|
||||
; These values represent arbitrary conversion points.
|
||||
|
||||
|
||||
; b = rrcrrc(atkdefdv) xor rrc(id[0])
|
||||
|
||||
; id
|
||||
ld h, b
|
||||
ld l, c
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
ld c, [hl]
|
||||
rrc b
|
||||
rrc c
|
||||
|
||||
; dvs
|
||||
ld a, [de]
|
||||
inc de
|
||||
rrca
|
||||
rrca
|
||||
xor b
|
||||
ld b, a
|
||||
|
||||
; c = rrcrrc(spdspcdv) xor rrc(id[1])
|
||||
|
||||
ld a, [de]
|
||||
rrca
|
||||
rrca
|
||||
xor c
|
||||
ld c, a
|
||||
|
||||
; if bc < $000a:
|
||||
ld a, b
|
||||
and a
|
||||
jr nz, .loadtable
|
||||
ld a, c
|
||||
cp a, $a
|
||||
jr nc, .loadtable
|
||||
|
||||
; de = hl = bc + $be
|
||||
ld hl, $be
|
||||
add hl, bc
|
||||
ld d, h
|
||||
ld e, l
|
||||
jr .endtable
|
||||
|
||||
.loadtable
|
||||
ld hl, .MagikarpLengthTable
|
||||
ld a, $02
|
||||
ld [$d265], a
|
||||
|
||||
.readtable
|
||||
ld a, [hli]
|
||||
ld e, a
|
||||
ld a, [hli]
|
||||
ld d, a
|
||||
call .BLessThanD
|
||||
jr nc, .advancetable
|
||||
|
||||
; c = bc / [hl]
|
||||
call .BCMinusDE
|
||||
ld a, b
|
||||
ld [$ffb3], a
|
||||
ld a, c
|
||||
ld [$ffb4], a
|
||||
ld a, [hl]
|
||||
ld [$ffb7], a
|
||||
ld b, $02
|
||||
call Divide
|
||||
ld a, [$ffb6]
|
||||
ld c, a
|
||||
|
||||
; de = c + 100 * (2 + number of rows down the table)
|
||||
xor a
|
||||
ld [$ffb4], a
|
||||
ld [$ffb5], a
|
||||
ld a, $64
|
||||
ld [$ffb6], a
|
||||
ld a, [$d265]
|
||||
ld [$ffb7], a
|
||||
call Multiply
|
||||
ld b, $00
|
||||
ld a, [$ffb6]
|
||||
add c
|
||||
ld e, a
|
||||
ld a, [$ffb5]
|
||||
adc b
|
||||
ld d, a
|
||||
jr .endtable
|
||||
|
||||
.advancetable
|
||||
inc hl ; align to next triplet
|
||||
ld a, [$d265]
|
||||
inc a
|
||||
ld [$d265], a
|
||||
cp a, $10
|
||||
jr c, .readtable
|
||||
|
||||
call .BCMinusDE
|
||||
ld hl, $0640
|
||||
add hl, bc
|
||||
ld d, h
|
||||
ld e, l
|
||||
|
||||
.endtable
|
||||
ld h, d
|
||||
ld l, e
|
||||
add hl, hl
|
||||
add hl, hl
|
||||
add hl, de
|
||||
add hl, hl ; hl = de * 10
|
||||
|
||||
ld de, $ff02
|
||||
ld a, $ff
|
||||
.loop
|
||||
inc a
|
||||
add hl, de ; - 254
|
||||
jr c, .loop
|
||||
|
||||
ld d, $00
|
||||
|
||||
; mod $0c
|
||||
.modloop
|
||||
cp a, $0c
|
||||
jr c, .done
|
||||
sub a, $0c
|
||||
inc d
|
||||
jr .modloop
|
||||
|
||||
.done
|
||||
ld e, a
|
||||
ld hl, MagikarpLength
|
||||
ld [hl], d
|
||||
inc hl
|
||||
ld [hl], e
|
||||
ret
|
||||
; fbc9a
|
||||
|
||||
.BLessThanD ; fbc9a
|
||||
; return carry if b < d
|
||||
ld a, b
|
||||
cp d
|
||||
ret c
|
||||
ret nc
|
||||
; fbc9e
|
||||
|
||||
.CLessThanE ; fbc9e
|
||||
; unused
|
||||
ld a, c
|
||||
cp e
|
||||
ret
|
||||
; fbca1
|
||||
|
||||
.BCMinusDE ; fbca1
|
||||
; bc -= de
|
||||
ld a, c
|
||||
sub e
|
||||
ld c, a
|
||||
ld a, b
|
||||
sbc d
|
||||
ld b, a
|
||||
ret
|
||||
; fbca8
|
||||
|
||||
.MagikarpLengthTable ; fbca8
|
||||
; ????, divisor
|
||||
dwb $006e, $01
|
||||
dwb $0136, $02
|
||||
dwb $02c6, $04
|
||||
dwb $0a96, $14
|
||||
dwb $1e1e, $32
|
||||
dwb $452e, $64
|
||||
dwb $7fc6, $96
|
||||
dwb $ba5e, $96
|
||||
dwb $e16e, $64
|
||||
dwb $f4f6, $32
|
||||
dwb $fcc6, $14
|
||||
dwb $feba, $05
|
||||
dwb $ff82, $02
|
||||
; fbccf
|
||||
|
@ -3417,15 +3417,20 @@ BATTLETYPE_SUICUNE EQU $0c
|
||||
|
||||
|
||||
; joypad
|
||||
NO_INPUT EQU %00000000
|
||||
BUTTON_A EQU %00000001
|
||||
BUTTON_B EQU %00000010
|
||||
SELECT EQU %00000100
|
||||
START EQU %00001000
|
||||
D_RIGHT EQU %00010000
|
||||
D_LEFT EQU %00100000
|
||||
D_UP EQU %01000000
|
||||
D_DOWN EQU %10000000
|
||||
BUTTONS EQU %00010000
|
||||
D_PAD EQU %00100000
|
||||
|
||||
AUTO_INPUT EQU $ff
|
||||
|
||||
NO_INPUT EQU %00000000
|
||||
BUTTON_A EQU %00000001
|
||||
BUTTON_B EQU %00000010
|
||||
SELECT EQU %00000100
|
||||
START EQU %00001000
|
||||
D_RIGHT EQU %00010000
|
||||
D_LEFT EQU %00100000
|
||||
D_UP EQU %01000000
|
||||
D_DOWN EQU %10000000
|
||||
|
||||
; mbc
|
||||
NUM_SRAM_BANKS EQU 4
|
||||
|
824
credits.asm
Normal file
824
credits.asm
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
151
extras/disassemble_map_scripts.py
Normal file
151
extras/disassemble_map_scripts.py
Normal file
@ -0,0 +1,151 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
"""
|
||||
Dump out asm for scripting things in bank $25. This script will modify main.asm
|
||||
and insert all scripting commands.
|
||||
"""
|
||||
|
||||
import crystal
|
||||
from gbz80disasm import output_bank_opcodes
|
||||
|
||||
rom = crystal.load_rom()
|
||||
roml = [ord(x) for x in rom]
|
||||
|
||||
script_command_table_address = 0x96cb1
|
||||
script_command_count = 170
|
||||
|
||||
# a list of addresses for each script command
|
||||
command_pointers = [crystal.calculate_pointer_from_bytes_at(script_command_table_address + (id * 2), bank=0x25) for id in range(0, 170)]
|
||||
|
||||
# a list of hex addresses for each script command in bank $25
|
||||
command_pointers_hex = ["$%.2x" % (x % 0x4000 + 0x4000) for x in command_pointers]
|
||||
|
||||
commands = {}
|
||||
|
||||
# force data into a more usable form
|
||||
for command in crystal.command_classes:
|
||||
name = "Script_" + command.macro_name
|
||||
id = command.id
|
||||
params = {}
|
||||
|
||||
for (id2, param_type) in command.param_types.items():
|
||||
param = {
|
||||
"name": param_type["name"],
|
||||
"type": param_type["class"].__name__,
|
||||
}
|
||||
params[id2] = param
|
||||
|
||||
if id <= 0xa9:
|
||||
commands[id] = {
|
||||
"name": name,
|
||||
"params": params,
|
||||
"address": command_pointers[id],
|
||||
}
|
||||
|
||||
avoid = [
|
||||
0x974b0,
|
||||
0x974be,
|
||||
0x9754b,
|
||||
0x97556,
|
||||
0x97562,
|
||||
0x9756e,
|
||||
0x97540,
|
||||
|
||||
0x96f8e, # verbosegiveitem2
|
||||
]
|
||||
|
||||
class DisassembledScriptCommand():
|
||||
"""
|
||||
Just a temporary object to store information about a script command's asm.
|
||||
This is used by some of the infrastructure in crystal.py to automatically
|
||||
insert asm into main.asm, rather than having someone do it manually.
|
||||
"""
|
||||
dependencies = None
|
||||
|
||||
def __init__(self, label=None, id=None, address=None, params=None):
|
||||
self.id = id
|
||||
self.label = crystal.Label(name=label, address=address, object=self)
|
||||
self.address = address
|
||||
self.params = params
|
||||
|
||||
max_byte_count = 0x4000
|
||||
|
||||
# Some of these scripts need to be truncated before insertion, because
|
||||
# output_bank_opcodes doesn't know anything about stopping if some of
|
||||
# the local labels are not resolved yet.
|
||||
|
||||
# Script_if_equal
|
||||
if address == 0x97540:
|
||||
max_byte_count = 86
|
||||
|
||||
# disassemble and laso get the last address
|
||||
(asm, last_address, last_hl_address, last_a_address, used_3d97) = output_bank_opcodes(address, max_byte_count=max_byte_count, stop_at=command_pointers, include_last_address=False)
|
||||
|
||||
# remove indentation
|
||||
asm = asm.replace("\n\t", "\n")
|
||||
if asm[0] == "\t":
|
||||
asm = asm[1:]
|
||||
|
||||
# remove the last two newlines
|
||||
while asm[-1] == "\n":
|
||||
asm = asm[:-1]
|
||||
|
||||
self.asm = asm
|
||||
self.last_address = last_address
|
||||
|
||||
# make sure this gets dumped into main.asm
|
||||
#if crystal.script_parse_table[self.address] == None and crystal.script_parse_table[self.last_address] == None:
|
||||
crystal.script_parse_table[self.address : self.last_address] = self
|
||||
#else:
|
||||
# print ".. hm, something is already at " + hex(self.address) + " for " + self.label.name
|
||||
|
||||
def to_asm(self):
|
||||
#output += self.label + ": ; " + hex(self.address) + "\n"
|
||||
output = "; script command " + hex(self.id) + "\n"
|
||||
if len(self.params) > 0:
|
||||
output += "; parameters:\n"
|
||||
for (id2, param) in self.params.items():
|
||||
output += "; " + param["name"] + " (" + param["type"] + ")\n"
|
||||
output += "\n"
|
||||
output += self.asm
|
||||
return output
|
||||
|
||||
def get_dependencies(*args, **kwargs):
|
||||
return []
|
||||
|
||||
# make instances of DisassembledScriptCommand
|
||||
for (id, command) in commands.items():
|
||||
name = command["name"]
|
||||
params = command["params"]
|
||||
address = command["address"]
|
||||
|
||||
script_asm = DisassembledScriptCommand(label=name, id=id, address=address, params=params)
|
||||
#print script_asm.to_asm()
|
||||
#print crystal.to_asm(script_asm, use_asm_rules=True)
|
||||
|
||||
class ScriptCommandTable():
|
||||
address = script_command_table_address
|
||||
last_address = script_command_table_address + (2 * 170)
|
||||
dependencies = None
|
||||
|
||||
def __init__(self):
|
||||
self.label = crystal.Label(name="ScriptCommandTable", address=self.address, object=self)
|
||||
|
||||
# make sure this gets dumped into main.asm
|
||||
crystal.script_parse_table[self.address : self.last_address] = self
|
||||
|
||||
def get_dependencies(*args, **kwargs):
|
||||
return []
|
||||
|
||||
def to_asm(self):
|
||||
output = ""
|
||||
for (id, command) in commands.items():
|
||||
output += "dw " + command["name"] + "; " + hex(command["address"]) + "\n"
|
||||
if output[-1] == "\n":
|
||||
output = output[:-1]
|
||||
return output
|
||||
script_command_table = ScriptCommandTable()
|
||||
#print crystal.to_asm(script_command_table, use_asm_rules=True)
|
||||
|
||||
# automatic asm insertion
|
||||
asm = crystal.Asm()
|
||||
asm.insert_and_dump(limit=500)
|
@ -592,7 +592,7 @@ def asm_label(address):
|
||||
# why using a random value when you can use the address?
|
||||
return ".ASM_" + hex(address)[2:]
|
||||
|
||||
def output_bank_opcodes(original_offset, max_byte_count=0x4000, debug = False):
|
||||
def output_bank_opcodes(original_offset, max_byte_count=0x4000, include_last_address=True, stop_at=[], debug = False):
|
||||
#fs = current_address
|
||||
#b = bank_byte
|
||||
#in = input_data -- rom
|
||||
@ -601,6 +601,10 @@ def output_bank_opcodes(original_offset, max_byte_count=0x4000, debug = False):
|
||||
#ad = end_address
|
||||
#a, oa = current_byte_number
|
||||
|
||||
# stop_at can be used to supply a list of addresses to not disassemble
|
||||
# over. This is useful if you know in advance that there are a lot of
|
||||
# fall-throughs.
|
||||
|
||||
load_labels()
|
||||
load_rom()
|
||||
|
||||
@ -622,6 +626,7 @@ def output_bank_opcodes(original_offset, max_byte_count=0x4000, debug = False):
|
||||
|
||||
byte_labels = {}
|
||||
|
||||
first_loop = True
|
||||
output = ""
|
||||
keep_reading = True
|
||||
while offset <= end_address and keep_reading:
|
||||
@ -629,6 +634,11 @@ def output_bank_opcodes(original_offset, max_byte_count=0x4000, debug = False):
|
||||
is_data = False
|
||||
maybe_byte = current_byte
|
||||
|
||||
# stop at any address
|
||||
if not first_loop and offset in stop_at:
|
||||
keep_reading = False
|
||||
break
|
||||
|
||||
#first check if this byte already has a label
|
||||
#if it does, use the label
|
||||
#if not, generate a new label
|
||||
@ -816,6 +826,8 @@ def output_bank_opcodes(original_offset, max_byte_count=0x4000, debug = False):
|
||||
#offset += 1
|
||||
#current_byte_number += 1
|
||||
|
||||
first_loop = False
|
||||
|
||||
#clean up unused labels
|
||||
for label_line in byte_labels.keys():
|
||||
address = label_line
|
||||
@ -824,7 +836,8 @@ def output_bank_opcodes(original_offset, max_byte_count=0x4000, debug = False):
|
||||
output = output.replace((label_line["name"] + "\n").lower(), "")
|
||||
|
||||
#add the offset of the final location
|
||||
output += "; " + hex(offset)
|
||||
if include_last_address:
|
||||
output += "; " + hex(offset)
|
||||
|
||||
return (output, offset, last_hl_address, last_a_address, used_3d97)
|
||||
|
||||
|
486
extras/map_names.py
Normal file
486
extras/map_names.py
Normal file
@ -0,0 +1,486 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
"""
|
||||
|
||||
# this is modified in crystal.py during run-time
|
||||
map_names = {
|
||||
1: {
|
||||
0x1: {"name": "Olivine Pokémon Center 1F",
|
||||
"label": "OlivinePokeCenter1F"},
|
||||
0x2: {"name": "Olivine Gym"},
|
||||
0x3: {"name": "Olivine Voltorb House"},
|
||||
0x4: {"name": "Olivine House Beta"},
|
||||
0x5: {"name": "Olivine Punishment Speech House"},
|
||||
0x6: {"name": "Olivine Good Rod House"},
|
||||
0x7: {"name": "Olivine Cafe"},
|
||||
0x8: {"name": "Olivine Mart"},
|
||||
0x9: {"name": "Route 38 Ecruteak Gate"},
|
||||
0xA: {"name": "Route 39 Barn"},
|
||||
0xB: {"name": "Route 39 Farmhouse"},
|
||||
0xC: {"name": "Route 38"},
|
||||
0xD: {"name": "Route 39"},
|
||||
0xE: {"name": "Olivine City"},
|
||||
},
|
||||
2: {
|
||||
0x1: {"name": "Mahogany Red Gyarados Speech House"},
|
||||
0x2: {"name": "Mahogany Gym"},
|
||||
0x3: {"name": "Mahogany Pokémon Center 1F",
|
||||
"label": "MahoganyPokeCenter1F"},
|
||||
0x4: {"name": "Route 42 Ecruteak Gate"},
|
||||
0x5: {"name": "Route 42"},
|
||||
0x6: {"name": "Route 44"},
|
||||
0x7: {"name": "Mahogany Town"},
|
||||
},
|
||||
3: {
|
||||
0x1: {"name": "Sprout Tower 1F"},
|
||||
0x2: {"name": "Sprout Tower 2F"},
|
||||
0x3: {"name": "Sprout Tower 3F"},
|
||||
0x4: {"name": "Tin Tower 1F"},
|
||||
0x5: {"name": "Tin Tower 2F"},
|
||||
0x6: {"name": "Tin Tower 3F"},
|
||||
0x7: {"name": "Tin Tower 4F"},
|
||||
0x8: {"name": "Tin Tower 5F"},
|
||||
0x9: {"name": "Tin Tower 6F"},
|
||||
0xA: {"name": "Tin Tower 7F"},
|
||||
0xB: {"name": "Tin Tower 8F"},
|
||||
0xC: {"name": "Tin Tower 9F"},
|
||||
0xD: {"name": "Burned Tower 1F"},
|
||||
0xE: {"name": "Burned Tower B1F"},
|
||||
0xF: {"name": "National Park"},
|
||||
0x10: {"name": "National Park Bug Contest"},
|
||||
0x11: {"name": "Radio Tower 1F"},
|
||||
0x12: {"name": "Radio Tower 2F"},
|
||||
0x13: {"name": "Radio Tower 3F"},
|
||||
0x14: {"name": "Radio Tower 4F"},
|
||||
0x15: {"name": "Radio Tower 5F"},
|
||||
0x16: {"name": "Ruins of Alph Outside"},
|
||||
0x17: {"name": "Ruins of Alph Ho-oh Chamber"},
|
||||
0x18: {"name": "Ruins of Alph Kabuto Chamber"},
|
||||
0x19: {"name": "Ruins of Alph Omanyte Chamber"},
|
||||
0x1A: {"name": "Ruins of Alph Aerodactyl Chamber"},
|
||||
0x1B: {"name": "Ruins of Alph Inner Chamber"},
|
||||
0x1C: {"name": "Ruins of Alph Research Center"},
|
||||
0x1D: {"name": "Ruins of Alph Ho-oh Item Room"},
|
||||
0x1E: {"name": "Ruins of Alph Kabuto Item Room"},
|
||||
0x1F: {"name": "Ruins of Alph Omanyte Item Room"},
|
||||
0x20: {"name": "Ruins of Alph Aerodactyl Item Room"},
|
||||
0x21: {"name": "Ruins of Alph Ho-Oh Word Room"},
|
||||
0x22: {"name": "Ruins of Alph Kabuto Word Room"},
|
||||
0x23: {"name": "Ruins of Alph Omanyte Word Room"},
|
||||
0x24: {"name": "Ruins of Alph Aerodactyl Word Room"},
|
||||
0x25: {"name": "Union Cave 1F"},
|
||||
0x26: {"name": "Union Cave B1F"},
|
||||
0x27: {"name": "Union Cave B2F"},
|
||||
0x28: {"name": "Slowpoke Well B1F"},
|
||||
0x29: {"name": "Slowpoke Well B2F"},
|
||||
0x2A: {"name": "Olivine Lighthouse 1F"},
|
||||
0x2B: {"name": "Olivine Lighthouse 2F"},
|
||||
0x2C: {"name": "Olivine Lighthouse 3F"},
|
||||
0x2D: {"name": "Olivine Lighthouse 4F"},
|
||||
0x2E: {"name": "Olivine Lighthouse 5F"},
|
||||
0x2F: {"name": "Olivine Lighthouse 6F"},
|
||||
0x30: {"name": "Mahogany Mart 1F"},
|
||||
0x31: {"name": "Team Rocket Base B1F"},
|
||||
0x32: {"name": "Team Rocket Base B2F"},
|
||||
0x33: {"name": "Team Rocket Base B3F"},
|
||||
0x34: {"name": "Ilex Forest"},
|
||||
0x35: {"name": "Warehouse Entrance"},
|
||||
0x36: {"name": "Underground Path Switch Room Entrances"},
|
||||
0x37: {"name": "Goldenrod Dept Store B1F"},
|
||||
0x38: {"name": "Underground Warehouse"},
|
||||
0x39: {"name": "Mount Mortar 1F Outside"},
|
||||
0x3A: {"name": "Mount Mortar 1F Inside"},
|
||||
0x3B: {"name": "Mount Mortar 2F Inside"},
|
||||
0x3C: {"name": "Mount Mortar B1F"},
|
||||
0x3D: {"name": "Ice Path 1F"},
|
||||
0x3E: {"name": "Ice Path B1F"},
|
||||
0x3F: {"name": "Ice Path B2F Mahogany Side"},
|
||||
0x40: {"name": "Ice Path B2F Blackthorn Side"},
|
||||
0x41: {"name": "Ice Path B3F"},
|
||||
0x42: {"name": "Whirl Island NW"},
|
||||
0x43: {"name": "Whirl Island NE"},
|
||||
0x44: {"name": "Whirl Island SW"},
|
||||
0x45: {"name": "Whirl Island Cave"},
|
||||
0x46: {"name": "Whirl Island SE"},
|
||||
0x47: {"name": "Whirl Island B1F"},
|
||||
0x48: {"name": "Whirl Island B2F"},
|
||||
0x49: {"name": "Whirl Island Lugia Chamber"},
|
||||
0x4A: {"name": "Silver Cave Room 1"},
|
||||
0x4B: {"name": "Silver Cave Room 2"},
|
||||
0x4C: {"name": "Silver Cave Room 3"},
|
||||
0x4D: {"name": "Silver Cave Item Rooms"},
|
||||
0x4E: {"name": "Dark Cave Violet Entrance"},
|
||||
0x4F: {"name": "Dark Cave Blackthorn Entrance"},
|
||||
0x50: {"name": "Dragon's Den 1F"},
|
||||
0x51: {"name": "Dragon's Den B1F"},
|
||||
0x52: {"name": "Dragon Shrine"},
|
||||
0x53: {"name": "Tohjo Falls"},
|
||||
0x54: {"name": "Diglett's Cave"},
|
||||
0x55: {"name": "Mount Moon"},
|
||||
0x56: {"name": "Underground"},
|
||||
0x57: {"name": "Rock Tunnel 1F"},
|
||||
0x58: {"name": "Rock Tunnel B1F"},
|
||||
0x59: {"name": "Safari Zone Fuchsia Gate Beta"},
|
||||
0x5A: {"name": "Safari Zone Beta"},
|
||||
0x5B: {"name": "Victory Road"},
|
||||
},
|
||||
4: {
|
||||
0x1: {"name": "Ecruteak House"}, # passage to Tin Tower
|
||||
0x2: {"name": "Wise Trio's Room"},
|
||||
0x3: {"name": "Ecruteak Pokémon Center 1F",
|
||||
"label": "EcruteakPokeCenter1F"},
|
||||
0x4: {"name": "Ecruteak Lugia Speech House"},
|
||||
0x5: {"name": "Dance Theatre"},
|
||||
0x6: {"name": "Ecruteak Mart"},
|
||||
0x7: {"name": "Ecruteak Gym"},
|
||||
0x8: {"name": "Ecruteak Itemfinder House"},
|
||||
0x9: {"name": "Ecruteak City"},
|
||||
},
|
||||
5: {
|
||||
0x1: {"name": "Blackthorn Gym 1F"},
|
||||
0x2: {"name": "Blackthorn Gym 2F"},
|
||||
0x3: {"name": "Blackthorn Dragon Speech House"},
|
||||
0x4: {"name": "Blackthorn Dodrio Trade House"},
|
||||
0x5: {"name": "Blackthorn Mart"},
|
||||
0x6: {"name": "Blackthorn Pokémon Center 1F",
|
||||
"label": "BlackthornPokeCenter1F"},
|
||||
0x7: {"name": "Move Deleter's House"},
|
||||
0x8: {"name": "Route 45"},
|
||||
0x9: {"name": "Route 46"},
|
||||
0xA: {"name": "Blackthorn City"},
|
||||
},
|
||||
6: {
|
||||
0x1: {"name": "Cinnabar Pokémon Center 1F",
|
||||
"label": "CinnabarPokeCenter1F"},
|
||||
0x2: {"name": "Cinnabar Pokémon Center 2F Beta",
|
||||
"label": "CinnabarPokeCenter2FBeta"},
|
||||
0x3: {"name": "Route 19 - Fuchsia Gate"},
|
||||
0x4: {"name": "Seafoam Gym"},
|
||||
0x5: {"name": "Route 19"},
|
||||
0x6: {"name": "Route 20"},
|
||||
0x7: {"name": "Route 21"},
|
||||
0x8: {"name": "Cinnabar Island"},
|
||||
},
|
||||
7: {
|
||||
0x1: {"name": "Cerulean Gym Badge Speech House"},
|
||||
0x2: {"name": "Cerulean Police Station"},
|
||||
0x3: {"name": "Cerulean Trade Speech House"},
|
||||
0x4: {"name": "Cerulean Pokémon Center 1F",
|
||||
"label": "CeruleanPokeCenter1F"},
|
||||
0x5: {"name": "Cerulean Pokémon Center 2F Beta",
|
||||
"label": "CeruleanPokeCenter2FBeta"},
|
||||
0x6: {"name": "Cerulean Gym"},
|
||||
0x7: {"name": "Cerulean Mart"},
|
||||
0x8: {"name": "Route 10 Pokémon Center 1F",
|
||||
"label": "Route10PokeCenter1F"},
|
||||
0x9: {"name": "Route 10 Pokémon Center 2F Beta",
|
||||
"label": "Route10PokeCenter2FBeta"},
|
||||
0xA: {"name": "Power Plant"},
|
||||
0xB: {"name": "Bill's House"},
|
||||
0xC: {"name": "Route 4"},
|
||||
0xD: {"name": "Route 9"},
|
||||
0xE: {"name": "Route 10 North"},
|
||||
0xF: {"name": "Route 24"},
|
||||
0x10: {"name": "Route 25"},
|
||||
0x11: {"name": "Cerulean City"},
|
||||
},
|
||||
8: {
|
||||
0x1: {"name": "Azalea Pokémon Center 1F",
|
||||
"label": "AzaleaPokeCenter1F"},
|
||||
0x2: {"name": "Charcoal Kiln"},
|
||||
0x3: {"name": "Azalea Mart"},
|
||||
0x4: {"name": "Kurt's House"},
|
||||
0x5: {"name": "Azalea Gym"},
|
||||
0x6: {"name": "Route 33"},
|
||||
0x7: {"name": "Azalea Town"},
|
||||
},
|
||||
9: {
|
||||
0x1: {"name": "Lake of Rage Hidden Power House"},
|
||||
0x2: {"name": "Lake of Rage Magikarp House"},
|
||||
0x3: {"name": "Route 43 Mahogany Gate"},
|
||||
0x4: {"name": "Route 43 Gate"},
|
||||
0x5: {"name": "Route 43"},
|
||||
0x6: {"name": "Lake of Rage"},
|
||||
},
|
||||
10: {
|
||||
0x1: {"name": "Route 32"},
|
||||
0x2: {"name": "Route 35"},
|
||||
0x3: {"name": "Route 36"},
|
||||
0x4: {"name": "Route 37"},
|
||||
0x5: {"name": "Violet City"},
|
||||
0x6: {"name": "Violet Mart"},
|
||||
0x7: {"name": "Violet Gym"},
|
||||
0x8: {"name": "Earl's Pokémon Academy",
|
||||
"label": "EarlsPokemonAcademy"},
|
||||
0x9: {"name": "Violet Nickname Speech House"},
|
||||
0xA: {"name": "Violet Pokémon Center 1F",
|
||||
"label": "VioletPokeCenter1F"},
|
||||
0xB: {"name": "Violet Onix Trade House"},
|
||||
0xC: {"name": "Route 32 Ruins of Alph Gate"},
|
||||
0xD: {"name": "Route 32 Pokémon Center 1F",
|
||||
"label": "Route32PokeCenter1F"},
|
||||
0xE: {"name": "Route 35 Goldenrod gate"},
|
||||
0xF: {"name": "Route 35 National Park gate"},
|
||||
0x10: {"name": "Route 36 Ruins of Alph gate"},
|
||||
0x11: {"name": "Route 36 National Park gate"},
|
||||
},
|
||||
11: {
|
||||
0x1: {"name": "Route 34"},
|
||||
0x2: {"name": "Goldenrod City"},
|
||||
0x3: {"name": "Goldenrod Gym"},
|
||||
0x4: {"name": "Goldenrod Bike Shop"},
|
||||
0x5: {"name": "Goldenrod Happiness Rater"},
|
||||
0x6: {"name": "Goldenrod Bill's House"},
|
||||
0x7: {"name": "Goldenrod Magnet Train Station"},
|
||||
0x8: {"name": "Goldenrod Flower Shop"},
|
||||
0x9: {"name": "Goldenrod PP Speech House"},
|
||||
0xA: {"name": "Goldenrod Name Rater's House"},
|
||||
0xB: {"name": "Goldenrod Dept Store 1F"},
|
||||
0xC: {"name": "Goldenrod Dept Store 2F"},
|
||||
0xD: {"name": "Goldenrod Dept Store 3F"},
|
||||
0xE: {"name": "Goldenrod Dept Store 4F"},
|
||||
0xF: {"name": "Goldenrod Dept Store 5F"},
|
||||
0x10: {"name": "Goldenrod Dept Store 6F"},
|
||||
0x11: {"name": "Goldenrod Dept Store Elevator"},
|
||||
0x12: {"name": "Goldenrod Dept Store Roof"},
|
||||
0x13: {"name": "Goldenrod Game Corner"},
|
||||
0x14: {"name": "Goldenrod Pokémon Center 1F",
|
||||
"label": "GoldenrodPokeCenter1F"},
|
||||
0x15: {"name": "Goldenrod PokéCom Center 2F Mobile",
|
||||
"label": "GoldenrodPokeComCenter2FMobile"},
|
||||
0x16: {"name": "Ilex Forest Azalea Gate"},
|
||||
0x17: {"name": "Route 34 Ilex Forest Gate"},
|
||||
0x18: {"name": "Day Care"},
|
||||
},
|
||||
12: {
|
||||
0x1: {"name": "Route 6"},
|
||||
0x2: {"name": "Route 11"},
|
||||
0x3: {"name": "Vermilion City"},
|
||||
0x4: {"name": "Vermilion House Fishing Speech House"},
|
||||
0x5: {"name": "Vermilion Pokémon Center 1F",
|
||||
"label": "VermilionPokeCenter1F"},
|
||||
0x6: {"name": "Vermilion Pokémon Center 2F Beta",
|
||||
"label": "VermilionPokeCenter2FBeta"},
|
||||
0x7: {"name": "Pokémon Fan Club"},
|
||||
0x8: {"name": "Vermilion Magnet Train Speech House"},
|
||||
0x9: {"name": "Vermilion Mart"},
|
||||
0xA: {"name": "Vermilion House Diglett's Cave Speech House"},
|
||||
0xB: {"name": "Vermilion Gym"},
|
||||
0xC: {"name": "Route 6 Saffron Gate"},
|
||||
0xD: {"name": "Route 6 Underground Entrance"},
|
||||
},
|
||||
13: {
|
||||
0x1: {"name": "Route 1"},
|
||||
0x2: {"name": "Pallet Town"},
|
||||
0x3: {"name": "Red's House 1F"},
|
||||
0x4: {"name": "Red's House 2F"},
|
||||
0x5: {"name": "Blue's House"},
|
||||
0x6: {"name": "Oak's Lab"},
|
||||
},
|
||||
14: {
|
||||
0x1: {"name": "Route 3"},
|
||||
0x2: {"name": "Pewter City"},
|
||||
0x3: {"name": "Pewter Nidoran Speech House"},
|
||||
0x4: {"name": "Pewter Gym"},
|
||||
0x5: {"name": "Pewter Mart"},
|
||||
0x6: {"name": "Pewter Pokémon Center 1F",
|
||||
"label": "PewterPokeCenter1F"},
|
||||
0x7: {"name": "Pewter Pokémon Center 2F Beta",
|
||||
"label": "PewterPokeCEnter2FBeta"},
|
||||
0x8: {"name": "Pewter Snooze Speech House"},
|
||||
},
|
||||
15: {
|
||||
0x1: {"name": "Olivine Port"},
|
||||
0x2: {"name": "Vermilion Port"},
|
||||
0x3: {"name": "Fast Ship 1F"},
|
||||
0x4: {"name": "Fast Ship Cabins NNW, NNE, NE",
|
||||
"label": "FastShipCabins_NNW_NNE_NE"},
|
||||
0x5: {"name": "Fast Ship Cabins SW, SSW, NW",
|
||||
"label": "FastShipCabins_SW_SSW_NW"},
|
||||
0x6: {"name": "Fast Ship Cabins SE, SSE, Captain's Cabin",
|
||||
"label": "FastShipCabins_SE_SSE_CaptainsCabin"},
|
||||
0x7: {"name": "Fast Ship B1F"},
|
||||
0x8: {"name": "Olivine Port Passage"},
|
||||
0x9: {"name": "Vermilion Port Passage"},
|
||||
0xA: {"name": "Mount Moon Square"},
|
||||
0xB: {"name": "Mount Moon Gift Shop"},
|
||||
0xC: {"name": "Tin Tower Roof"},
|
||||
},
|
||||
16: {
|
||||
0x1: {"name": "Route 23"},
|
||||
0x2: {"name": "Indigo Plateau Pokémon Center 1F",
|
||||
"label": "IndigoPlateauPokeCenter1F"},
|
||||
0x3: {"name": "Will's Room"},
|
||||
0x4: {"name": "Koga's Room"},
|
||||
0x5: {"name": "Bruno's Room"},
|
||||
0x6: {"name": "Karen's Room"},
|
||||
0x7: {"name": "Lance's Room"},
|
||||
0x8: {"name": "Hall of Fame",
|
||||
"label": "HallOfFame"},
|
||||
},
|
||||
17: {
|
||||
0x1: {"name": "Route 13"},
|
||||
0x2: {"name": "Route 14"},
|
||||
0x3: {"name": "Route 15"},
|
||||
0x4: {"name": "Route 18"},
|
||||
0x5: {"name": "Fuchsia City"},
|
||||
0x6: {"name": "Fuchsia Mart"},
|
||||
0x7: {"name": "Safari Zone Main Office"},
|
||||
0x8: {"name": "Fuchsia Gym"},
|
||||
0x9: {"name": "Fuchsia Bill Speech House"},
|
||||
0xA: {"name": "Fuchsia Pokémon Center 1F",
|
||||
"label": "FuchsiaPokeCenter1F"},
|
||||
0xB: {"name": "Fuchsia Pokémon Center 2F Beta",
|
||||
"label": "FuchsiaPokeCenter2FBeta"},
|
||||
0xC: {"name": "Safari Zone Warden's Home"},
|
||||
0xD: {"name": "Route 15 Fuchsia Gate"},
|
||||
},
|
||||
18: {
|
||||
0x1: {"name": "Route 8"},
|
||||
0x2: {"name": "Route 12"},
|
||||
0x3: {"name": "Route 10 South"},
|
||||
0x4: {"name": "Lavender Town"},
|
||||
0x5: {"name": "Lavender Pokémon Center 1F",
|
||||
"label": "LavenderPokeCenter1F"},
|
||||
0x6: {"name": "Lavender Pokémon Center 2F Beta",
|
||||
"label": "LavenderPokeCenter2FBeta"},
|
||||
0x7: {"name": "Mr. Fuji's House"},
|
||||
0x8: {"name": "Lavender Town Speech House"},
|
||||
0x9: {"name": "Lavender Name Rater"},
|
||||
0xA: {"name": "Lavender Mart"},
|
||||
0xB: {"name": "Soul House"},
|
||||
0xC: {"name": "Lav Radio Tower 1F"},
|
||||
0xD: {"name": "Route 8 Saffron Gate"},
|
||||
0xE: {"name": "Route 12 Super Rod House"},
|
||||
},
|
||||
19: {
|
||||
0x1: {"name": "Route 28"},
|
||||
0x2: {"name": "Silver Cave Outside"},
|
||||
0x3: {"name": "Silver Cave Pokémon Center 1F",
|
||||
"label": "SilverCavePokeCenter1F"},
|
||||
0x4: {"name": "Route 28 Famous Speech House"},
|
||||
},
|
||||
20: {
|
||||
0x1: {"name": "Pokémon Center 2F",
|
||||
"label": "PokeCenter2F"},
|
||||
0x2: {"name": "Trade Center"},
|
||||
0x3: {"name": "Colosseum"},
|
||||
0x4: {"name": "Time Capsule"},
|
||||
0x5: {"name": "Mobile Trade Room Mobile"},
|
||||
0x6: {"name": "Mobile Battle Room"},
|
||||
},
|
||||
21: {
|
||||
0x1: {"name": "Route 7"},
|
||||
0x2: {"name": "Route 16"},
|
||||
0x3: {"name": "Route 17"},
|
||||
0x4: {"name": "Celadon City"},
|
||||
0x5: {"name": "Celadon Dept Store 1F"},
|
||||
0x6: {"name": "Celadon Dept Store 2F"},
|
||||
0x7: {"name": "Celadon Dept Store 3F"},
|
||||
0x8: {"name": "Celadon Dept Store 4F"},
|
||||
0x9: {"name": "Celadon Dept Store 5F"},
|
||||
0xA: {"name": "Celadon Dept Store 6F"},
|
||||
0xB: {"name": "Celadon Dept Store Elevator"},
|
||||
0xC: {"name": "Celadon Mansion 1F"},
|
||||
0xD: {"name": "Celadon Mansion 2F"},
|
||||
0xE: {"name": "Celadon Mansion 3F"},
|
||||
0xF: {"name": "Celadon Mansion Roof"},
|
||||
0x10: {"name": "Celadon Mansion Roof House"},
|
||||
0x11: {"name": "Celadon Pokémon Center 1F",
|
||||
"label": "CeladonPokeCenter1F"},
|
||||
0x12: {"name": "Celadon Pokémon Center 2F Beta",
|
||||
"label": "CeladonPokeCenter2FBeta"},
|
||||
0x13: {"name": "Celadon Game Corner"},
|
||||
0x14: {"name": "Celadon Game Corner Prize Room"},
|
||||
0x15: {"name": "Celadon Gym"},
|
||||
0x16: {"name": "Celadon Cafe"},
|
||||
0x17: {"name": "Route 16 Fuchsia Speech House"},
|
||||
0x18: {"name": "Route 16 Gate"},
|
||||
0x19: {"name": "Route 7 Saffron Gate"},
|
||||
0x1A: {"name": "Route 17 18 Gate"},
|
||||
},
|
||||
22: {
|
||||
0x1: {"name": "Route 40"},
|
||||
0x2: {"name": "Route 41"},
|
||||
0x3: {"name": "Cianwood City"},
|
||||
0x4: {"name": "Mania's House"},
|
||||
0x5: {"name": "Cianwood Gym"},
|
||||
0x6: {"name": "Cianwood Pokémon Center 1F",
|
||||
"label": "CianwoodPokeCenter1F"},
|
||||
0x7: {"name": "Cianwood Pharmacy"},
|
||||
0x8: {"name": "Cianwood City Photo Studio"},
|
||||
0x9: {"name": "Cianwood Lugia Speech House"},
|
||||
0xA: {"name": "Poke Seer's House"},
|
||||
0xB: {"name": "Battle Tower 1F"},
|
||||
0xC: {"name": "Battle Tower Battle Room"},
|
||||
0xD: {"name": "Battle Tower Elevator"},
|
||||
0xE: {"name": "Battle Tower Hallway"},
|
||||
0xF: {"name": "Route 40 Battle Tower Gate"},
|
||||
0x10: {"name": "Battle Tower Outside"},
|
||||
},
|
||||
23: {
|
||||
0x1: {"name": "Route 2"},
|
||||
0x2: {"name": "Route 22"},
|
||||
0x3: {"name": "Viridian City"},
|
||||
0x4: {"name": "Viridian Gym"},
|
||||
0x5: {"name": "Viridian Nickname Speech House"},
|
||||
0x6: {"name": "Trainer House 1F"},
|
||||
0x7: {"name": "Trainer House B1F"},
|
||||
0x8: {"name": "Viridian Mart"},
|
||||
0x9: {"name": "Viridian Pokémon Center 1F",
|
||||
"label": "ViridianPokeCenter1F"},
|
||||
0xA: {"name": "Viridian Pokémon Center 2F Beta",
|
||||
"label": "ViridianPokeCenter2FBeta"},
|
||||
0xB: {"name": "Route 2 Nugget Speech House"},
|
||||
0xC: {"name": "Route 2 Gate"},
|
||||
0xD: {"name": "Victory Road Gate"},
|
||||
},
|
||||
24: {
|
||||
0x1: {"name": "Route 26"},
|
||||
0x2: {"name": "Route 27"},
|
||||
0x3: {"name": "Route 29"},
|
||||
0x4: {"name": "New Bark Town"},
|
||||
0x5: {"name": "Elm's Lab"},
|
||||
0x6: {"name": "Kris's House 1F"},
|
||||
0x7: {"name": "Kris's House 2F"},
|
||||
0x8: {"name": "Kris's Neighbor's House"},
|
||||
0x9: {"name": "Elm's House"},
|
||||
0xA: {"name": "Route 26 Heal Speech House"},
|
||||
0xB: {"name": "Route 26 Day of Week Siblings House"},
|
||||
0xC: {"name": "Route 27 Sandstorm House"},
|
||||
0xD: {"name": "Route 29 46 Gate"},
|
||||
},
|
||||
25: {
|
||||
0x1: {"name": "Route 5"},
|
||||
0x2: {"name": "Saffron City"},
|
||||
0x3: {"name": "Fighting Dojo"},
|
||||
0x4: {"name": "Saffron Gym"},
|
||||
0x5: {"name": "Saffron Mart"},
|
||||
0x6: {"name": "Saffron Pokémon Center 1F",
|
||||
"label": "SaffronPokeCenter1F"},
|
||||
0x7: {"name": "Saffron Pokémon Center 2F Beta",
|
||||
"label": "SaffronPokeCenter2FBeta"},
|
||||
0x8: {"name": "Mr. Psychic's House"},
|
||||
0x9: {"name": "Saffron Train Station"},
|
||||
0xA: {"name": "Silph Co. 1F"},
|
||||
0xB: {"name": "Copycat's House 1F"},
|
||||
0xC: {"name": "Copycat's House 2F"},
|
||||
0xD: {"name": "Route 5 Underground Entrance"},
|
||||
0xE: {"name": "Route 5 Saffron City Gate"},
|
||||
0xF: {"name": "Route 5 Cleanse Tag Speech House"},
|
||||
},
|
||||
26: {
|
||||
0x1: {"name": "Route 30"},
|
||||
0x2: {"name": "Route 31"},
|
||||
0x3: {"name": "Cherrygrove City"},
|
||||
0x4: {"name": "Cherrygrove Mart"},
|
||||
0x5: {"name": "Cherrygrove Pokémon Center 1F",
|
||||
"label": "CherrygrovePokeCenter1F"},
|
||||
0x6: {"name": "Cherrygrove Gym Speech House"},
|
||||
0x7: {"name": "Guide Gent's House"},
|
||||
0x8: {"name": "Cherrygrove Evolution Speech House"},
|
||||
0x9: {"name": "Route 30 Berry Speech House"},
|
||||
0xA: {"name": "Mr. Pokémon's House"},
|
||||
0xB: {"name": "Route 31 Violet Gate"},
|
||||
},
|
||||
}
|
@ -298,6 +298,7 @@ pksv_crystal_more_enders = [0x03, 0x04, 0x05, 0x0C, 0x51, 0x52,
|
||||
0x9B,
|
||||
0xB2, #maybe?
|
||||
0xCC, #maybe?
|
||||
0x9A, # describedecoration
|
||||
]
|
||||
|
||||
# these have no pksv names as of pksv 2.1.1
|
||||
|
841
extras/vba.py
Normal file
841
extras/vba.py
Normal file
File diff suppressed because it is too large
Load Diff
15
extras/vba_config.py
Normal file
15
extras/vba_config.py
Normal file
@ -0,0 +1,15 @@
|
||||
#!/usr/bin/jython
|
||||
# -*- encoding: utf-8 -*-
|
||||
import os
|
||||
|
||||
# by default we assume the user has things in their $HOME
|
||||
home = os.path.expanduser("~") # or System.getProperty("user.home")
|
||||
|
||||
# and that the pokecrystal project folder is in there somewhere
|
||||
project_path = os.path.join(home, os.path.join("code", "pokecrystal"))
|
||||
|
||||
# save states are in ~/code/pokecrystal/save-states/
|
||||
save_state_path = os.path.join(project_path, "save-states")
|
||||
|
||||
# where is your rom?
|
||||
rom_path = os.path.join(project_path, "baserom.gbc")
|
65
gbhw.asm
Normal file
65
gbhw.asm
Normal file
@ -0,0 +1,65 @@
|
||||
; Graciously aped from http://nocash.emubase.de/pandocs.htm .
|
||||
|
||||
rJOYP EQU $ff00 ; Joypad (R/W)
|
||||
rSB EQU $ff01 ; Serial transfer data (R/W)
|
||||
rSC EQU $ff02 ; Serial Transfer Control (R/W)
|
||||
rDIV EQU $ff04 ; Divider Register (R/W)
|
||||
rTIMA EQU $ff05 ; Timer counter (R/W)
|
||||
rTMA EQU $ff06 ; Timer Modulo (R/W)
|
||||
rTAC EQU $ff07 ; Timer Control (R/W)
|
||||
rIF EQU $ff0f ; Interrupt Flag (R/W)
|
||||
rNR10 EQU $ff10 ; Channel 1 Sweep register (R/W)
|
||||
rNR11 EQU $ff11 ; Channel 1 Sound length/Wave pattern duty (R/W)
|
||||
rNR12 EQU $ff12 ; Channel 1 Volume Envelope (R/W)
|
||||
rNR13 EQU $ff13 ; Channel 1 Frequency lo (Write Only)
|
||||
rNR14 EQU $ff14 ; Channel 1 Frequency hi (R/W)
|
||||
rNR21 EQU $ff16 ; Channel 2 Sound Length/Wave Pattern Duty (R/W)
|
||||
rNR22 EQU $ff17 ; Channel 2 Volume Envelope (R/W)
|
||||
rNR23 EQU $ff18 ; Channel 2 Frequency lo data (W)
|
||||
rNR24 EQU $ff19 ; Channel 2 Frequency hi data (R/W)
|
||||
rNR30 EQU $ff1a ; Channel 3 Sound on/off (R/W)
|
||||
rNR31 EQU $ff1b ; Channel 3 Sound Length
|
||||
rNR32 EQU $ff1c ; Channel 3 Select output level (R/W)
|
||||
rNR33 EQU $ff1d ; Channel 3 Frequency's lower data (W)
|
||||
rNR34 EQU $ff1e ; Channel 3 Frequency's higher data (R/W)
|
||||
rNR41 EQU $ff20 ; Channel 4 Sound Length (R/W)
|
||||
rNR42 EQU $ff21 ; Channel 4 Volume Envelope (R/W)
|
||||
rNR43 EQU $ff22 ; Channel 4 Polynomial Counter (R/W)
|
||||
rNR44 EQU $ff23 ; Channel 4 Counter/consecutive; Inital (R/W)
|
||||
rNR50 EQU $ff24 ; Channel control / ON-OFF / Volume (R/W)
|
||||
rNR51 EQU $ff25 ; Selection of Sound output terminal (R/W)
|
||||
rNR52 EQU $ff26 ; Sound on/off
|
||||
rLCDC EQU $ff40 ; LCD Control (R/W)
|
||||
rSTAT EQU $ff41 ; LCDC Status (R/W)
|
||||
rSCY EQU $ff42 ; Scroll Y (R/W)
|
||||
rSCX EQU $ff43 ; Scroll X (R/W)
|
||||
rLY EQU $ff44 ; LCDC Y-Coordinate (R)
|
||||
rLYC EQU $ff45 ; LY Compare (R/W)
|
||||
rDMA EQU $ff46 ; DMA Transfer and Start Address (W)
|
||||
rBGP EQU $ff47 ; BG Palette Data (R/W) - Non CGB Mode Only
|
||||
rOBP0 EQU $ff48 ; Object Palette 0 Data (R/W) - Non CGB Mode Only
|
||||
rOBP1 EQU $ff49 ; Object Palette 1 Data (R/W) - Non CGB Mode Only
|
||||
rWY EQU $ff4a ; Window Y Position (R/W)
|
||||
rWX EQU $ff4b ; Window X Position minus 7 (R/W)
|
||||
rKEY1 EQU $ff4d ; CGB Mode Only - Prepare Speed Switch
|
||||
rVBK EQU $ff4f ; CGB Mode Only - VRAM Bank
|
||||
rHDMA1 EQU $ff51 ; CGB Mode Only - New DMA Source, High
|
||||
rHDMA2 EQU $ff52 ; CGB Mode Only - New DMA Source, Low
|
||||
rHDMA3 EQU $ff53 ; CGB Mode Only - New DMA Destination, High
|
||||
rHDMA4 EQU $ff54 ; CGB Mode Only - New DMA Destination, Low
|
||||
rHDMA5 EQU $ff55 ; CGB Mode Only - New DMA Length/Mode/Start
|
||||
rRP EQU $ff56 ; CGB Mode Only - Infrared Communications Port
|
||||
rBGPI EQU $ff68 ; CGB Mode Only - Background Palette Index
|
||||
rBGPD EQU $ff69 ; CGB Mode Only - Background Palette Data
|
||||
rOBPI EQU $ff6a ; CGB Mode Only - Sprite Palette Index
|
||||
rOBPD EQU $ff6b ; CGB Mode Only - Sprite Palette Data
|
||||
rUNKNOWN1 EQU $ff6c ; (FEh) Bit 0 (Read/Write) - CGB Mode Only
|
||||
rSVBK EQU $ff70 ; CGB Mode Only - WRAM Bank
|
||||
rUNKNOWN2 EQU $ff72 ; (00h) - Bit 0-7 (Read/Write)
|
||||
rUNKNOWN3 EQU $ff73 ; (00h) - Bit 0-7 (Read/Write)
|
||||
rUNKNOWN4 EQU $ff74 ; (00h) - Bit 0-7 (Read/Write) - CGB Mode Only
|
||||
rUNKNOWN5 EQU $ff75 ; (8Fh) - Bit 4-6 (Read/Write)
|
||||
rUNKNOWN6 EQU $ff76 ; (00h) - Always 00h (Read Only)
|
||||
rUNKNOWN7 EQU $ff77 ; (00h) - Always 00h (Read Only)
|
||||
rIE EQU $ffff ; Interrupt Enable (R/W)
|
||||
|
BIN
gfx/debug/color_test.2bpp
Normal file
BIN
gfx/debug/color_test.2bpp
Normal file
Binary file not shown.
BIN
gfx/evo/bubble.2bpp
Normal file
BIN
gfx/evo/bubble.2bpp
Normal file
Binary file not shown.
BIN
gfx/evo/bubble_large.2bpp
Normal file
BIN
gfx/evo/bubble_large.2bpp
Normal file
Binary file not shown.
BIN
gfx/misc/pack_f.2bpp
Normal file
BIN
gfx/misc/pack_f.2bpp
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user