commit 3d8ec4d4adcbc559157067bee0eadf7114ec51f6 Author: Ian Burgmyer Date: Sat Aug 29 04:18:15 2020 -0400 Initial commit; vertical blank interrupt test. diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..37191e5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +bin/ +obj/ +*.sublime-workspace diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2143cad --- /dev/null +++ b/Makefile @@ -0,0 +1,33 @@ +AS = rgbasm +LD = rgblink +FIX = rgbfix -f hg + +BIN_DIR = bin +OBJ_DIR = obj + +MKDIR = mkdir + +.PHONY: dirs + +all: dirs video + +clean: + rm -r ${BIN_DIR}/ ${OBJ_DIR}/ + +dirs: + ${MKDIR} -p ${BIN_DIR} + ${MKDIR} -p ${OBJ_DIR} + +# +# Video +# +video: videoDirs vblankInt.gb + +videoDirs: + ${MKDIR} -p ${BIN_DIR}/video + ${MKDIR} -p ${OBJ_DIR}/video + +vblankInt.gb: dirs + ${AS} -o ${OBJ_DIR}/video/vblankInt.o video/vblankInt.s + ${LD} -l common.lnk -o ${BIN_DIR}/video/vblankInt.gb ${OBJ_DIR}/video/vblankInt.o + ${FIX} ${BIN_DIR}/video/vblankInt.gb diff --git a/PlipTestROMs.sublime-project b/PlipTestROMs.sublime-project new file mode 100644 index 0000000..0bc6510 --- /dev/null +++ b/PlipTestROMs.sublime-project @@ -0,0 +1,10 @@ +{ + "folders": + [ + { + "path": ".", + "file_exclude_patterns": [ "*.sublime-*" ], + "folder_exclude_patterns": [ "bin", "obj" ] + } + ] +} diff --git a/common.lnk b/common.lnk new file mode 100644 index 0000000..8e503a2 --- /dev/null +++ b/common.lnk @@ -0,0 +1,51 @@ +ROM0 + org $0000 + "rst00" + + org $0008 + "rst08" + + org $0010 + "rst10" + + org $0018 + "rst18" + + org $0020 + "rst20" + + org $0028 + "rst28" + + org $0030 + "rst30" + + org $0038 + "rst38" + + org $0040 + "intVblank" + + org $0048 + "intLcdc" + + org $0050 + "intTimer" + + org $0058 + "intSerial" + + org $0060 + "intJoypad" + + org $0068 + "preHeader" + + org $0100 + "headerJump" + + org $0104 + "header" + + org $0150 + "home" diff --git a/common/defines.inc b/common/defines.inc new file mode 100644 index 0000000..ea0544b --- /dev/null +++ b/common/defines.inc @@ -0,0 +1,121 @@ +; +; Overrides +; +OverrideRst00 SET 0 +OverrideRst08 SET 0 +OverrideRst10 SET 0 +OverrideRst18 SET 0 +OverrideRst20 SET 0 +OverrideRst28 SET 0 +OverrideRst30 SET 0 +OverrideRst38 SET 0 + +OverrideIntVblank SET 0 +OverrideIntLcdc SET 0 +OverrideIntTimer SET 0 +OverrideIntSerial SET 0 +OverrideIntJoypad SET 0 + +OverrideHeaderJump SET 0 + +; +; Memory Locations +; +HeaderEnd EQU $0150 + +; +; CGB Flag +; +CgbUnsupported EQU $00 +CgbCompatible EQU $80 +CgbOnly EQU $C00 + +HeaderCgbFlag SET CgbUnsupported + +; +; SGB Flag +; +SgbUnsupported EQU $00 +SgbSupported EQU $03 + +HeaderSgbFlag SET SgbUnsupported + +; +; Cartridge Type +; +CartRomOnly EQU $00 +CartMbc1 EQU $01 +CartMbc1Ram EQU $02 +CartMbc1Battery EQU $03 +CartMbc2 EQU $05 +CartMbc2Battery EQU $06 +CartRomRam EQU $08 +CartRomBattery EQU $09 +CartMmm01 EQU $0B +CartMmm01Ram EQU $0C +CartMmm01RamBattery EQU $0D +CartMbc3TimerBattery EQU $0F +CartMbc3TimerRamBattery EQU $10 +CartMbc3 EQU $11 +CartMbc3Ram EQU $12 +CartMbc3RamBattery EQU $13 +CartMbc4 EQU $15 +CartMbc4Ram EQU $16 +CartMbc4RamBattery EQU $17 +CartMbc5 EQU $19 +CartMbc5Ram EQU $1A +CartMbc5RamBattery EQU $1B +CartMbc5Rumble EQU $1C +CartMbc5RumbleRam EQU $1D +CartMbc5RumbleRamBattery EQU $1E +CartPocketCamera EQU $FC +CartBandaiTama5 EQU $FD +CartHuc3 EQU $FE +CartHuc1RamBattery EQU $ff + +HeaderCartType SET CartRomOnly + +; +; ROM Size +; +Rom32K EQU $00 +Rom64K EQU $01 +Rom128K EQU $02 +Rom256K EQU $03 +Rom512K EQU $04 +Rom1024K EQU $05 +Rom2048K EQU $06 +Rom4096K EQU $07 +Rom1152K EQU $52 +Rom1280K EQU $53 +Rom1536K EQU $54 + +HeaderRomSize SET Rom32K + +; +; RAM Size +; +RamNone EQU $00 +Ram2K EQU $01 +Ram8K EQU $02 +Ram32K EQU $02 + +HeaderRamSize SET RamNone + +; +; Destination Code +; +DestinationJapan EQU $00 +DestinationInternational EQU $01 + +HeaderDestinationCode SET DestinationInternational + +; +; Old Licensee Code +; +HeaderOldLicensee SET $33 + +; +; Mask ROM Version +; +HeaderMaskRomVersion SET $00 diff --git a/common/header.inc b/common/header.inc new file mode 100644 index 0000000..c5f27a9 --- /dev/null +++ b/common/header.inc @@ -0,0 +1,166 @@ +; 0000-003F : RST Handlers +IF OverrideRst00 == 0 + SECTION "rst00", ROM0 + ret + REPT 7 + nop + ENDR +ENDC + +IF OverrideRst08 == 0 + SECTION "rst08", ROM0 + ret + REPT 7 + nop + ENDR +ENDC + +IF OverrideRst10 == 0 + SECTION "rst10", ROM0 + ret + REPT 7 + nop + ENDR +ENDC + +IF OverrideRst18 == 0 + SECTION "rst18", ROM0 + ret + REPT 7 + nop + ENDR +ENDC + +IF OverrideRst20 == 0 + SECTION "rst20", ROM0 + ret + REPT 7 + nop + ENDR +ENDC + +IF OverrideRst28 == 0 + SECTION "rst28", ROM0 + ret + REPT 7 + nop + ENDR +ENDC + +IF OverrideRst30 == 0 + SECTION "rst30", ROM0 + ret + REPT 7 + nop + ENDR +ENDC + +IF OverrideRst38 == 0 + SECTION "rst38", ROM0 + ret + REPT 7 + nop + ENDR +ENDC + +; 0040-0067 : Interrupt Handlers +IF OverrideIntVblank == 0 + SECTION "intVblank", ROM0 + reti + REPT 7 + nop + ENDR +ENDC + +IF OverrideIntLcdc == 0 + SECTION "intLcdc", ROM0 + reti + REPT 7 + nop + ENDR +ENDC + +IF OverrideIntTimer == 0 + SECTION "intTimer", ROM0 + reti + REPT 7 + nop + ENDR +ENDC + +IF OverrideIntSerial == 0 + SECTION "intSerial", ROM0 + reti + REPT 7 + nop + ENDR +ENDC + +IF OverrideIntJoypad == 0 + SECTION "intJoypad", ROM0 + reti + REPT 7 + nop + ENDR +ENDC + +; 0068-00FF : Undefined +SECTION "preHeader", ROM0 + +; 0100-0103 : Jump Past Header +IF OverrideHeaderJump == 0 + SECTION "headerJump", ROM0 + nop + jp HeaderEnd +ENDC + +; ---------------------- +; 0104-014F : ROM Header +; ---------------------- + +SECTION "header", ROM0 + ; 0104-0133 : Nintendo Logo + DB $CE, $ED, $66, $66, $CC, $0D, $00, $0B, $03, $73, $00, $83, $00, $0C, $00, $0D + DB $00, $08, $11, $1F, $88, $89, $00, $0E, $DC, $CC, $6E, $E6, $DD, $DD, $D9, $99 + DB $BB, $BB, $67, $63, $6E, $0E, $EC, $CC, $DD, $DC, $99, $9F, $BB, $B9, $33, $3E + + ; 0134-013E : Title + STATIC_ASSERT STRLEN(HeaderTitle) <= 13, "Header title is too large!" ; 11 characters + 2 quotes + DB HeaderTitle + DS 11 - STRLEN(HeaderTitle) + + ; 013F-0142 : Manufacturer Code + DS 4 + + ; 0143 : CGB Flag + DB HeaderCgbFlag + + ; 0144-0145 : New Licensee Code + DB "HI" + + ; 0146 : SGB Flag + DB HeaderSgbFlag + + ; 0147 : Cartridge Type + DB HeaderCartType + + ; 0148 : ROM Size + DB HeaderRomSize + + ; 0149 : RAM Size + DB HeaderRamSize + + ; 014A : Destination Code + DB HeaderDestinationCode + + ; 014B : Old Licensee Code + DB HeaderOldLicensee + + ; 014C : Mask ROM Version Number + DB HeaderMaskRomVersion + + ; 014D : Header Checksum + DS 1 + + ; 014E-014F : Global Checksum + DS 2 diff --git a/video/vblankInt.s b/video/vblankInt.s new file mode 100644 index 0000000..7a1d783 --- /dev/null +++ b/video/vblankInt.s @@ -0,0 +1,32 @@ +HeaderTitle EQUS "\"BUILDTEST\"" + +include "common/defines.inc" + +OverrideIntVblank SET 1 +include "common/header.inc" + +SECTION "intVblank", ROM0 + ld a, [hl] + xor a, $ff + ld [hli], a + reti + +SECTION "home", ROM0 + ld a, %00011011 + ld [$ff47], a + + ei + ld a, %11100001 + ld [$ffff], a + + ld a, 127 + ld b, 0 +reset: + ld hl, $8010 + ld d, 48 * 4 + +loop: + halt + dec d + jr z, reset + jr loop