Last active
June 26, 2024 23:09
-
-
Save buhman/ee7b55291bf9e5898b455f4af36adadd to your computer and use it in GitHub Desktop.
minimal valid gameboy advance cartridge
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") | |
OUTPUT_ARCH(arm) | |
MEMORY | |
{ | |
gprom : ORIGIN = 0x8000000, LENGTH = 32M | |
} | |
SECTIONS | |
{ | |
.text : ALIGN(4) | |
{ | |
*(*.text) | |
} > gprom | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.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