This commit is contained in:
2018-12-29 01:51:33 +01:00
parent cc2bf13512
commit 5d2fbf30a6

View File

@@ -54,27 +54,25 @@ Start:
; shut sound off
ld [rNR52], a
; set old pointer to buffer0
; set old and rendered pointers to buffer0
ld a, HIGH(Buffer0)
ldh [Old + 1], a
ldh [Rendered + 1], a
; set new pointer to buffer1
ld a, HIGH(Buffer1)
ldh [New + 1], a
; set rendered to buffer1 also
ldh [Rendered + 1], a
; set video pointer to second tilemap
ld a, HIGH(_SCRN1)
; set video pointer to first tilemap
ld a, HIGH(_SCRN0)
ldh [Video + 1], a
; set low byte of pointers to 0 (all buffers are aligned)
; reset low bytes of pointers (all buffers are aligned)
xor a
ldh [Old + 0], a
ldh [New + 0], a
ldh [Rendered + 0], a
ldh [Video + 0], a
ldh [New], a
ldh [Old], a
ldh [Rendered], a
ldh [Video], a
; enable v-blank interrupt
ld a, IEF_VBLANK
@@ -103,10 +101,9 @@ Start:
ld bc, TilesEnd - Tiles
call MemoryCopy
; set scrolling to (-16, -8)
ld a, -16
; set scrolling to (0, 0)
xor a
ld [rSCX], a
ld a, -8
ld [rSCY], a
; clear screen (both buffers)
@@ -115,6 +112,12 @@ Start:
ld bc, 32 * 32 * 2
call MemorySet
; clear screen (both buffers)
ld hl, _SCRN1
ld d, 0 ; empty tile
ld bc, 32 * 32
call MemorySet
; init buffer 0
ld hl, Buffer0
ld de, DefaultMap
@@ -149,7 +152,7 @@ Start:
inc [hl]
; handle all cells in top row except corners
ld a, 30
ld a, 18
.top
ld [XLoop], a
@@ -179,7 +182,7 @@ Start:
ld hl, Old
inc [hl]
ld a, 30
ld a, 16
.leftcolumn
ld [YLoop], a
@@ -193,7 +196,7 @@ Start:
ld hl, Old
inc [hl]
ld a, 30
ld a, 18
.inner
ld [XLoop], a
@@ -206,6 +209,12 @@ Start:
inc [hl]
ld hl, Old
inc [hl]
jr nz, .noCarry
inc hl ; old+1
inc [hl]
ld hl, New + 1
inc [hl]
.noCarry
; decrement x loop
ld a, [XLoop]
@@ -222,12 +231,6 @@ Start:
inc [hl]
ld hl, Old
inc [hl]
jr nz, .nocarry
inc hl ; old + 1
inc [hl]
ld hl, New + 1
inc [hl]
.nocarry
; decrement y loop
ld a, [YLoop]
@@ -246,7 +249,7 @@ Start:
inc [hl]
; handle all cells in bottom row except corners
ld a, 30
ld a, 18
.bottom
ld [XLoop], a
@@ -270,71 +273,84 @@ Start:
ld hl, BottomRightCorner
call ConwayGroup
; increment new pointer to first byte after buffer
ld hl, New
inc [hl]
inc hl
; increment old pointer to first byte after buffer
ld hl, Old
inc [hl]
; wait end of rendering
;.waitRender
; halt
; ; compare high byte of rendered and old pointers
; ldh a, [Rendered + 1]
; ld b, a
; ldh a, [Old + 1]
; cp a, b
; jr nz, .waitRender
; ; compare low byte of rendered and old pointers
; ldh a, [Rendered]
; ld b, a
; ldh a, [Old]
; cp a, b
; jr nz, .waitRender
; enable only v-blank interrupt
di
ld a, IEF_VBLANK
ld [rIE], a
ei
; wait end of rendering
.waitRender
; wait v-blank
halt
; compare high byte of rendered and new pointers
ldh a, [Rendered + 1]
ld b, a
ldh a, [New + 1]
cp a, b
jr nz, .waitRender
; compare low byte of rendered and new pointers
ldh a, [Rendered]
ld b, a
ldh a, [New]
cp a, b
jr nz, .waitRender
; swap pointers and display bg that has just been filled
ldh a, [New + 1]
; check which buffer has just been rendered
ldh a, [Old + 1]
cp a, HIGH(Buffer1)
jr z, .newToBuffer1
ld a, HIGH(Buffer0)
ldh [New + 1], a
ldh [Rendered + 1], a
jr nc, .newToBuffer1
.newToBuffer0
; set old and rendered pointers to buffer1
ld a, HIGH(Buffer1)
ldh [Old + 1], a
ld a, HIGH(_SCRN0)
ldh [Video + 1], a
; display bg 9C00
ld a, LCDCF_ON | LCDCF_BGON | LCDCF_BG9C00
ld [rLCDC], a
jr .resetlow
.newToBuffer1
ld a, HIGH(Buffer1)
ldh [New + 1], a
ldh [Rendered + 1], a
; set new pointer to buffer0
ld a, HIGH(Buffer0)
ldh [Old + 1], a
ldh [New + 1], a
; set video pointer to first tilemap
ld a, HIGH(_SCRN1)
ldh [Video + 1], a
; display bg 9800
; display bg 9800 that has just been filled
ld a, LCDCF_ON | LCDCF_BGON | LCDCF_BG9800
ld [rLCDC], a
.resetlow
; reset low bytes of pointers
jr .resetLowBytes
.newToBuffer1
; set old and rendered pointers to buffer0
ld a, HIGH(Buffer0)
ldh [Old + 1], a
ldh [Rendered + 1], a
; set new pointer to buffer1
ld a, HIGH(Buffer1)
ldh [New + 1], a
; set video pointer to second tilemap
ld a, HIGH(_SCRN0)
ldh [Video + 1], a
; display bg 9C00 that has just been filled
ld a, LCDCF_ON | LCDCF_BGON | LCDCF_BG9C00
ld [rLCDC], a
.resetLowBytes
xor a
ldh [New], a
ldh [Old], a
ldh [Video], a
ldh [Rendered], a
ldh [Video], a
jp .mainloop
@@ -681,8 +697,7 @@ Render:
SECTION "Automata buffer 0", WRAM0, ALIGN[9]
Buffer0: ds 20 * 18
SECTION "Automata buffer 0", WRAM0, ALIGN[9]
SECTION "Automata buffer 1", WRAM0, ALIGN[9]
Buffer1: ds 20 * 18
SECTION "Compute Memory", HRAM