Browse Source

Added LCD toggle test, modified headers.

* Changed REPT blocks to simple DS declarations.
    * Removed common link layout file. The only reason it was there is because
      my local install of RGBDS was off kilter.
    * The common header now jumps to a label instead of a static address.
    * Switched to using local labels. That was another thing that was weirdly
      broken in my previous RGBDS build.
master
Ian Burgmyer 4 years ago
parent
commit
a11241d799
  1. 13
      Makefile
  2. 51
      common.lnk
  3. 99
      common/header.inc
  4. 60
      video/lcdToggle.s
  5. 11
      video/vblankInt.s

13
Makefile

@ -21,13 +21,20 @@ dirs:
#
# Video
#
video: videoDirs vblankInt.gb
video: videoDirs \
${BIN_DIR}/video/lcdToggle.gb \
${BIN_DIR}/video/vblankInt.gb
videoDirs:
${MKDIR} -p ${BIN_DIR}/video
${MKDIR} -p ${OBJ_DIR}/video
vblankInt.gb: dirs
${BIN_DIR}/video/lcdToggle.gb: dirs video/lcdToggle.s
${AS} -o ${OBJ_DIR}/video/lcdToggle.o video/lcdToggle.s
${LD} -o ${BIN_DIR}/video/lcdToggle.gb ${OBJ_DIR}/video/lcdToggle.o
${FIX} ${BIN_DIR}/video/lcdToggle.gb
${BIN_DIR}/video/vblankInt.gb: dirs video/vblankInt.s
${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
${LD} -o ${BIN_DIR}/video/vblankInt.gb ${OBJ_DIR}/video/vblankInt.o
${FIX} ${BIN_DIR}/video/vblankInt.gb

51
common.lnk

@ -1,51 +0,0 @@
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"

99
common/header.inc

@ -1,87 +1,67 @@
; 0000-003F : RST Handlers
IF OverrideRst00 == 0
SECTION "rst00", ROM0
SECTION "rst00", ROM0[$0000]
ret
REPT 7
nop
ENDR
DS 7
ENDC
IF OverrideRst08 == 0
SECTION "rst08", ROM0
SECTION "rst08", ROM0[$0008]
ret
REPT 7
nop
ENDR
DS 7
ENDC
IF OverrideRst10 == 0
SECTION "rst10", ROM0
SECTION "rst10", ROM0[$0010]
ret
REPT 7
nop
ENDR
DS 7
ENDC
IF OverrideRst18 == 0
SECTION "rst18", ROM0
SECTION "rst18", ROM0[$0018]
ret
REPT 7
nop
ENDR
DS 7
ENDC
IF OverrideRst20 == 0
SECTION "rst20", ROM0
SECTION "rst20", ROM0[$0020]
ret
REPT 7
nop
ENDR
DS 7
ENDC
IF OverrideRst28 == 0
SECTION "rst28", ROM0
SECTION "rst28", ROM0[$0028]
ret
REPT 7
nop
ENDR
DS 7
ENDC
IF OverrideRst30 == 0
SECTION "rst30", ROM0
SECTION "rst30", ROM0[$0030]
ret
REPT 7
nop
ENDR
DS 7
ENDC
IF OverrideRst38 == 0
SECTION "rst38", ROM0
SECTION "rst38", ROM0[$0038]
ret
REPT 7
nop
ENDR
DS 7
ENDC
; 0040-0067 : Interrupt Handlers
IF OverrideIntVblank == 0
SECTION "intVblank", ROM0
SECTION "intVblank", ROM0[$0040]
reti
REPT 7
nop
ENDR
DS 7
ENDC
IF OverrideIntLcdc == 0
SECTION "intLcdc", ROM0
SECTION "intLcdc", ROM0[$0048]
reti
REPT 7
nop
ENDR
DS 7
ENDC
IF OverrideIntTimer == 0
SECTION "intTimer", ROM0
SECTION "intTimer", ROM0[$0050]
reti
REPT 7
nop
@ -89,40 +69,33 @@ IF OverrideIntTimer == 0
ENDC
IF OverrideIntSerial == 0
SECTION "intSerial", ROM0
SECTION "intSerial", ROM0[$0058]
reti
REPT 7
nop
ENDR
DS 7
ENDC
IF OverrideIntJoypad == 0
SECTION "intJoypad", ROM0
SECTION "intJoypad", ROM0[$0060]
reti
REPT 7
nop
ENDR
DS 7
ENDC
; 0068-00FF : Undefined
SECTION "preHeader", ROM0
; 0100-0103 : Jump Past Header
IF OverrideHeaderJump == 0
SECTION "headerJump", ROM0
nop
jp HeaderEnd
ENDC
SECTION "preHeader", ROM0[$0068]
DS $98
; ----------------------
; 0104-014F : ROM Header
; ----------------------
SECTION "header", ROM0[$0100]
; 0100-0103 : Jump Past Header
nop
jp ProgramStart
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
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
@ -160,7 +133,7 @@ SECTION "header", ROM0
DB HeaderMaskRomVersion
; 014D : Header Checksum
DS 1
DB $ff
; 014E-014F : Global Checksum
DS 2
DW $ffff

60
video/lcdToggle.s

@ -0,0 +1,60 @@
HeaderTitle EQUS "\"LCDTOGGLE\""
include "common/defines.inc"
include "common/header.inc"
SECTION "home", ROM0
vblankWait:
; Wait for vblank without interrupts.
ldh a, [$ff44]
cp $90
jr nz, vblankWait
ret
wait:
call vblankWait
dec d
jr nz, wait
ret
ProgramStart:
ld b, $00
reset:
ld hl, $8010
ld a, b
xor $ff
ld b, a
.loop:
; Disable the LCD
call vblankWait
ldh a, [$ff40]
res 7, a
ldh [$ff40], a
; Mess with the logo, as we often do.
ld d, 16
ld a, b
.logoDraw:
ld [hli], a
dec d
jr nz, .logoDraw
; Enable the LCD
ldh a, [$ff40]
set 7, a
ldh [$ff40], a
; Wait for a few frames.
ld d, 8
call wait
; Check to see if we need to reset hl, then rinse and repeat.
ld a, h
cp $81
jr nz, .loop
ld a, l
cp $90
jr nz, .loop
jr reset

11
video/vblankInt.s

@ -1,4 +1,4 @@
HeaderTitle EQUS "\"BUILDTEST\""
HeaderTitle EQUS "\"VBLANKINT\""
include "common/defines.inc"
@ -12,6 +12,7 @@ SECTION "intVblank", ROM0
reti
SECTION "home", ROM0
ProgramStart:
ld a, %00011011
ld [$ff47], a
@ -21,12 +22,12 @@ SECTION "home", ROM0
ld a, 127
ld b, 0
reset:
.reset:
ld hl, $8010
ld d, 48 * 4
loop:
.loop:
halt
dec d
jr z, reset
jr loop
jr z, .reset
jr .loop

Loading…
Cancel
Save