From 85e6c3417e78cea25b92b94146a21e8f473ca6f1 Mon Sep 17 00:00:00 2001 From: Ian Burgmyer Date: Mon, 7 Sep 2020 19:57:13 -0400 Subject: [PATCH] Added call/ret CPU test. --- Makefile | 21 ++++++-- cpu/callRet.asm | 148 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 166 insertions(+), 3 deletions(-) create mode 100644 cpu/callRet.asm diff --git a/Makefile b/Makefile index bfcb439..2af3e9f 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,7 @@ MKDIR = mkdir .PHONY: dirs -all: dirs video +all: dirs cpu video clean: rm -r ${BIN_DIR}/ ${OBJ_DIR}/ @@ -18,12 +18,27 @@ dirs: ${MKDIR} -p ${BIN_DIR} ${MKDIR} -p ${OBJ_DIR} +# +# CPU +# +cpu: cpuDirs \ + ${BIN_DIR}/cpu/callRet.gb + +cpuDirs: + ${MKDIR} -p ${OBJ_DIR}/cpu + ${MKDIR} -p ${BIN_DIR}/cpu + +${BIN_DIR}/cpu/callRet.gb: dirs cpu/callRet.asm + ${AS} -o ${OBJ_DIR}/cpu/callRet.o cpu/callRet.asm + ${LD} -o ${BIN_DIR}/cpu/callRet.gb ${OBJ_DIR}/cpu/callRet.o + ${FIX} ${BIN_DIR}/cpu/callRet.gb + # # Video # video: videoDirs \ - ${BIN_DIR}/video/lcdToggle.gb \ - ${BIN_DIR}/video/vblankInt.gb + ${BIN_DIR}/video/lcdToggle.gb \ + ${BIN_DIR}/video/vblankInt.gb videoDirs: ${MKDIR} -p ${BIN_DIR}/video diff --git a/cpu/callRet.asm b/cpu/callRet.asm new file mode 100644 index 0000000..dae1abf --- /dev/null +++ b/cpu/callRet.asm @@ -0,0 +1,148 @@ +HeaderTitle EQUS "\"CALLRET\"" + +include "common/defines.inc" +include "common/header.inc" + +; 1: call / ret +; 2: call / ret nz +; 3: call / ret z +; 4: call / ret nc +; 5: call / ret c +; 6: call nz / ret +; 7: call z / ret +; 8: call nc / ret +; 9: call c / ret + +SECTION "home", ROM0 +ProgramStart: + call waitVBlank + + ; disable the LCD while we clear the logo + ld hl, $ff40 + ld a, [hl] + res 7, a + ld [hl], a + call clearLogo + + ; enable the LCD + ld hl, $ff40 + ld a, [hl] + set 7, a + ld [hl], a + + call waitVBlank + ld hl, $8010 + call drawRect + + call waitVBlank + call retNz + ld hl, $8040 + call drawRect + + call waitVBlank + call retZ + ld hl, $8060 + call drawRect + + call waitVBlank + call retNc + ld hl, $8080 + call drawRect + + call waitVBlank + call retC + ld hl, $80a0 + call drawRect + + call waitVBlank + ld a, 2 + dec a + ld hl, $8110 + call nz, drawRect + + call waitVBlank + ld a, 1 + dec a + ld hl, $8130 + call z, drawRect + + call waitVBlank + ld a, 2 + dec a + ld hl, $8150 + call nc, drawRect + + call waitVBlank + ld a, 255 + add a, 1 + ld hl, $8170 + call c, drawRect + +loop: + jr loop + + +SECTION "waitVBlank", ROM0[$200] +waitVBlank: + ldh a, [$ff44] + cp $90 + jr nz, waitVBlank + ret + + +SECTION "clearLogo", ROM0[$220] +clearLogo: + ld hl, $81A0 +.clearLoop: + ld a, $0 + ld [hld], a + ld a, h + cp $80 + jr nz, .clearLoop + ld a, l + cp $10 + jr nz, .clearLoop + ret + + +SECTION "drawRect", ROM0[$240] +drawRect: + push af + push de + ld d, 16 + ld a, $ff +.logoDraw: + ld [hli], a + dec d + jr nz, .logoDraw + pop de + pop af + ret + +SECTION "ret", ROM0[$300] +retError: + jr retError + +retNz: + ld a, 2 + dec a + ret nz + jr retError + +retZ: + ld a, 1 + dec a + ret z + jr retError + +retNc: + ld a, 2 + dec a + ret nc + jr retError + +retC: + ld a, 255 + add a, 1 + ret c + jr retError