Skip to content

Instantly share code, notes, and snippets.

@buhman
Last active June 26, 2024 23:09
Show Gist options
  • Save buhman/ee7b55291bf9e5898b455f4af36adadd to your computer and use it in GitHub Desktop.
Save buhman/ee7b55291bf9e5898b455f4af36adadd to your computer and use it in GitHub Desktop.
minimal valid gameboy advance cartridge
arm-none-eabi-as game.s -o game.o
arm-none-eabi-ld -T game.lds game.o -o game.elf
arm-none-eabi-objcopy -O binary game.elf game.gba
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
MEMORY
{
gprom : ORIGIN = 0x8000000, LENGTH = 32M
}
SECTIONS
{
.text : ALIGN(4)
{
*(*.text)
} > gprom
}
.section .text
/* 18 "ROM Registration Data" */
b start
/* begin Nintendo™ logo */
.byte 0x24, 0xff, 0xae, 0x51, 0x69, 0x9a, 0xa2, 0x21
.byte 0x3d, 0x84, 0x82, 0x0a, 0x84, 0xe4, 0x09, 0xad
.byte 0x11, 0x24, 0x8b, 0x98, 0xc0, 0x81, 0x7f, 0x21
.byte 0xa3, 0x52, 0xbe, 0x19, 0x93, 0x09, 0xce, 0x20
.byte 0x10, 0x46, 0x4a, 0x4a, 0xf8, 0x27, 0x31, 0xec
.byte 0x58, 0xc7, 0xe8, 0x33, 0x82, 0xe3, 0xce, 0xbf
.byte 0x85, 0xf4, 0xdf, 0x94, 0xce, 0x4b, 0x09, 0xc1
.byte 0x94, 0x56, 0x8a, 0xc0, 0x13, 0x72, 0xa7, 0xfc
.byte 0x9f, 0x84, 0x4d, 0x73, 0xa3, 0xca, 0x9a, 0x61
.byte 0x58, 0x97, 0xa3, 0x27, 0xfc, 0x03, 0x98, 0x76
.byte 0x23, 0x1d, 0xc7, 0x61, 0x03, 0x04, 0xae, 0x56
.byte 0xbf, 0x38, 0x84, 0x00, 0x40, 0xa7, 0x0e, 0xfd
.byte 0xff, 0x52, 0xfe, 0x03, 0x6f, 0x95, 0x30, 0xf1
.byte 0x97, 0xfb, 0xc0, 0x85, 0x60, 0xd6, 0x80, 0x25
.byte 0xa9, 0x63, 0xbe, 0x03, 0x01, 0x4e, 0x38, 0xe2
.byte 0xf9, 0xa2, 0x34, 0xff, 0xbb, 0x3e, 0x03, 0x44
.byte 0x78, 0x00, 0x90, 0xcb, 0x88, 0x11, 0x3a, 0x94
.byte 0x65, 0xc0, 0x7c, 0x63, 0x87, 0xf0, 0x3c, 0xaf
.byte 0xd6, 0x25, 0xe4, 0x8b, 0x38, 0x0a, 0xac, 0x72
.byte 0x21, 0xd4, 0xf8, 0x07
/* end Nintendo™ logo */
.fill 12,1,0x0 /* Game Title */
.fill 4,1,0x0 /* Game Code */
.fill 2,1,0x0 /* Maker Code */
.byte 0x96
.byte 0x0 /* Main Unit Code */
.byte 0x0 /* Device Type */
.fill 7,1,0x0 /* Reserved Area */
.byte 0x0 /* Mask ROM Version Number */
.byte 0x51 /* Complement Check */
.fill 2,1,0x0 /* Reserved Area */
start:
/* 5 "Image System" */
mov r0, #0x4000000 /* IO_REG */
mov r1, #0x0
orr r1, r1, #(1 << 7) /* DISPCNT__FORCED_BLANK */
strh r1, [r0, #0x000] /* DISPCNT */
/*
comment or uncomment the `orr` instruction
to alternate between a black or a white
display
*/
loop_forever:
b loop_forever
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment