wire [11:0] tileaddr_in = vraminuse ? tileaddr : addr[12:1];
always @(negedge clk)
- if ((vraminuse && ((posx == 1) || ((posx > 2) && (vxpos[2:0] == 3'b110)))) || decode_bgmap1) begin
+ if ((vraminuse && ((posx == 1) || (vxpos[2:0] == 3'b110))) || decode_bgmap1) begin
tileno <= bgmap1[bgmapaddr_in];
if (wr && decode_bgmap1 && ~vraminuse)
bgmap1[bgmapaddr_in] <= data;
end
always @(negedge clk)
- if ((vraminuse && ((posx == 2) || ((posx > 2) && (vxpos[2:0] == 3'b111)))) || decode_tiledata) begin
+ if ((vraminuse && ((posx == 2) || (vxpos[2:0] == 3'b111))) || decode_tiledata) begin
tilehigh <= tiledatahigh[tileaddr_in];
tilelow <= tiledatalow[tileaddr_in];
if (wr && addr[0] && decode_tiledata && ~vraminuse)
signon:
db $0D,$0A,$1B,"[1mFPGABoy Diagnostic ROM",$1B,"[0m",$0D,$0A,0
+tiles:
+ db %11111111
+ db %11111111
+ db %11000011
+ db %11000011
+ db %11000011
+ db %11000011
+ db %11111111
+ db %11111111
+
+ db %00000000
+ db %00000000
+ db %00000000
+ db %00000000
+ db %00000000
+ db %00000000
+ db %00000000
+ db %00000000
+
putscreen:
; Wait for vblank
call .vblwait
ld hl, $8000 ; Copy two tiles.
- ld a, $AA
- ld [hli], a
- ld [hli], a
- ld a, $55
- ld [hli], a
- ld [hli], a
- ld a, $AA
- ld [hli], a
- ld [hli], a
- ld a, $55
- ld [hli], a
- ld [hli], a
- ld a, $AA
- ld [hli], a
- ld [hli], a
- ld a, $55
- ld [hli], a
- ld [hli], a
- ld a, $AA
- ld [hli], a
- ld [hli], a
- ld a, $55
+ ld de, tiles
+ ld c, $10
+.cloop: push hl
+ ld h, d
+ ld l, e
+ ld a, [hl]
+ inc de
+ pop hl
ld [hli], a
ld [hli], a
+ dec c
xor a
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hli], a
+ cp c
+ jr nz, .cloop
ld hl, $9800
.vloop: call .vblwait
ld c, $40
-.loop: ld a, $01
- ld [hli], a
- xor a
+ ld b, 0
+.loop: inc b
+ ld a, b
+ and $01
ld [hli], a
ld a, h
cp $9C