Merge commit 'c678407d1eae9fec625a644506b3cd66654d9b1a'
This commit is contained in:
commit
a956d58ea1
Binary file not shown.
@ -57,11 +57,10 @@ Start:
|
|||||||
.loadLogoLoop
|
.loadLogoLoop
|
||||||
ld a, [de] ; Read 2 rows
|
ld a, [de] ; Read 2 rows
|
||||||
ld b, a
|
ld b, a
|
||||||
call DoubleBitsAndWriteRow
|
call DoubleBitsAndWriteRowTwice
|
||||||
call DoubleBitsAndWriteRow
|
|
||||||
inc de
|
inc de
|
||||||
ld a, e
|
ld a, e
|
||||||
xor $34 ; End of logo
|
cp $34 ; End of logo
|
||||||
jr nz, .loadLogoLoop
|
jr nz, .loadLogoLoop
|
||||||
call ReadTrademarkSymbol
|
call ReadTrademarkSymbol
|
||||||
|
|
||||||
@ -71,79 +70,54 @@ Start:
|
|||||||
xor a
|
xor a
|
||||||
ld hl, $8000
|
ld hl, $8000
|
||||||
call ClearMemoryPage
|
call ClearMemoryPage
|
||||||
|
call LoadTileset
|
||||||
|
|
||||||
; Copy SameBoy Logo
|
|
||||||
ld de, SameboyLogo
|
|
||||||
ld hl, $8080
|
|
||||||
ld c, (SameboyLogoEnd - SameboyLogo) / 2
|
|
||||||
.sameboyLogoLoop
|
|
||||||
ld a, [de]
|
|
||||||
ldi [hl], a
|
|
||||||
inc hl
|
|
||||||
inc de
|
|
||||||
ld a, [de]
|
|
||||||
ldi [hl], a
|
|
||||||
inc hl
|
|
||||||
inc de
|
|
||||||
dec c
|
|
||||||
jr nz, .sameboyLogoLoop
|
|
||||||
|
|
||||||
; Copy (unresized) ROM logo
|
|
||||||
ld de, $104
|
|
||||||
ld c, 6
|
|
||||||
.CGBROMLogoLoop
|
|
||||||
push bc
|
|
||||||
call ReadCGBLogoTile
|
|
||||||
pop bc
|
|
||||||
dec c
|
|
||||||
jr nz, .CGBROMLogoLoop
|
|
||||||
inc hl
|
|
||||||
call ReadTrademarkSymbol
|
|
||||||
|
|
||||||
; Load Tilemap
|
|
||||||
ld hl, $98C2
|
|
||||||
ld b, 3
|
ld b, 3
|
||||||
ld a, 8
|
|
||||||
IF DEF(FAST)
|
IF DEF(FAST)
|
||||||
xor a
|
xor a
|
||||||
ldh [$4F], a
|
ldh [$4F], a
|
||||||
ENDC
|
ELSE
|
||||||
|
; Load Tilemap
|
||||||
|
ld hl, $98C2
|
||||||
|
ld d, 3
|
||||||
|
ld a, 8
|
||||||
|
|
||||||
.tilemapLoop
|
.tilemapLoop
|
||||||
ld c, $10
|
ld c, $10
|
||||||
|
|
||||||
.tilemapRowLoop
|
.tilemapRowLoop
|
||||||
|
|
||||||
ld [hl], a
|
|
||||||
push af
|
push af
|
||||||
IF !DEF(FAST)
|
|
||||||
; Switch to second VRAM Bank
|
; Switch to second VRAM Bank
|
||||||
ld a, 1
|
ld a, 1
|
||||||
ldh [$4F], a
|
ldh [$4F], a
|
||||||
ld a, 8
|
ld [hl], 8
|
||||||
ld [hl], a
|
|
||||||
; Switch to back first VRAM Bank
|
; Switch to back first VRAM Bank
|
||||||
xor a
|
xor a
|
||||||
ldh [$4F], a
|
ldh [$4F], a
|
||||||
ENDC
|
|
||||||
pop af
|
pop af
|
||||||
ldi [hl], a
|
ldi [hl], a
|
||||||
inc a
|
add d
|
||||||
dec c
|
dec c
|
||||||
jr nz, .tilemapRowLoop
|
jr nz, .tilemapRowLoop
|
||||||
|
sub 47
|
||||||
|
push de
|
||||||
ld de, $10
|
ld de, $10
|
||||||
add hl, de
|
add hl, de
|
||||||
|
pop de
|
||||||
dec b
|
dec b
|
||||||
jr nz, .tilemapLoop
|
jr nz, .tilemapLoop
|
||||||
|
|
||||||
cp $38
|
dec d
|
||||||
jr nz, .doneTilemap
|
jr z, .endTilemap
|
||||||
|
dec d
|
||||||
|
|
||||||
ld hl, $99a7
|
ld a, $38
|
||||||
ld b, 1
|
ld l, $a7
|
||||||
ld c, 7
|
ld bc, $0107
|
||||||
jr .tilemapRowLoop
|
jr .tilemapRowLoop
|
||||||
.doneTilemap
|
.endTilemap
|
||||||
|
ENDC
|
||||||
|
|
||||||
; Expand Palettes
|
; Expand Palettes
|
||||||
ld de, AnimationColors
|
ld de, AnimationColors
|
||||||
@ -187,9 +161,7 @@ ENDC
|
|||||||
jr nz, .expandPalettesLoop
|
jr nz, .expandPalettesLoop
|
||||||
|
|
||||||
ld hl, BgPalettes
|
ld hl, BgPalettes
|
||||||
ld d, 64 ; Length of write
|
call LoadBGPalettes64
|
||||||
ld e, c ; Index of write (C=0)
|
|
||||||
call LoadBGPalettes
|
|
||||||
|
|
||||||
; Turn on LCD
|
; Turn on LCD
|
||||||
ld a, $91
|
ld a, $91
|
||||||
@ -560,8 +532,7 @@ TrademarkSymbol:
|
|||||||
db $3c,$42,$b9,$a5,$b9,$a5,$42,$3c
|
db $3c,$42,$b9,$a5,$b9,$a5,$42,$3c
|
||||||
|
|
||||||
SameboyLogo:
|
SameboyLogo:
|
||||||
incbin "SameboyLogo.1bpp"
|
incbin "SameboyLogo.rle"
|
||||||
SameboyLogoEnd:
|
|
||||||
|
|
||||||
AnimationColors:
|
AnimationColors:
|
||||||
dw $7FFF ; White
|
dw $7FFF ; White
|
||||||
@ -578,7 +549,9 @@ DMGPalettes:
|
|||||||
dw $7FFF, $32BF, $00D0, $0000
|
dw $7FFF, $32BF, $00D0, $0000
|
||||||
|
|
||||||
; Helper Functions
|
; Helper Functions
|
||||||
DoubleBitsAndWriteRow:
|
DoubleBitsAndWriteRowTwice:
|
||||||
|
call .twice
|
||||||
|
.twice
|
||||||
; Double the most significant 4 bits, b is shifted by 4
|
; Double the most significant 4 bits, b is shifted by 4
|
||||||
ld a, 4
|
ld a, 4
|
||||||
ld c, 0
|
ld c, 0
|
||||||
@ -628,6 +601,8 @@ ClearMemoryPage:
|
|||||||
jr z, ClearMemoryPage
|
jr z, ClearMemoryPage
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
ReadTwoTileLines:
|
||||||
|
call ReadTileLine
|
||||||
; c = $f0 for even lines, $f for odd lines.
|
; c = $f0 for even lines, $f for odd lines.
|
||||||
ReadTileLine:
|
ReadTileLine:
|
||||||
ld a, [de]
|
ld a, [de]
|
||||||
@ -647,34 +622,69 @@ ReadTileLine:
|
|||||||
.dontSwap
|
.dontSwap
|
||||||
inc hl
|
inc hl
|
||||||
ldi [hl], a
|
ldi [hl], a
|
||||||
|
swap c
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
ReadCGBLogoHalfTile:
|
ReadCGBLogoHalfTile:
|
||||||
ld c, $f0
|
call .do_twice
|
||||||
call ReadTileLine
|
.do_twice
|
||||||
ld c, $f
|
call ReadTwoTileLines
|
||||||
call ReadTileLine
|
|
||||||
inc e
|
|
||||||
ld c, $f0
|
|
||||||
call ReadTileLine
|
|
||||||
ld c, $f
|
|
||||||
call ReadTileLine
|
|
||||||
inc e
|
inc e
|
||||||
|
ld a, e
|
||||||
ret
|
ret
|
||||||
|
|
||||||
ReadCGBLogoTile:
|
LoadTileset:
|
||||||
|
; Copy SameBoy Logo
|
||||||
|
ld de, SameboyLogo
|
||||||
|
ld hl, $8080
|
||||||
|
.sameboyLogoLoop
|
||||||
|
ld a, [de]
|
||||||
|
inc de
|
||||||
|
|
||||||
|
ld b, a
|
||||||
|
and $0f
|
||||||
|
jr z, .skipLiteral
|
||||||
|
ld c, a
|
||||||
|
|
||||||
|
.literalLoop
|
||||||
|
ld a, [de]
|
||||||
|
ldi [hl], a
|
||||||
|
inc hl
|
||||||
|
inc de
|
||||||
|
dec c
|
||||||
|
jr nz, .literalLoop
|
||||||
|
.skipLiteral
|
||||||
|
swap b
|
||||||
|
ld a, b
|
||||||
|
and $0f
|
||||||
|
jr z, .sameboyLogoEnd
|
||||||
|
ld c, a
|
||||||
|
ld a, [de]
|
||||||
|
inc de
|
||||||
|
|
||||||
|
.repeatLoop
|
||||||
|
ldi [hl], a
|
||||||
|
inc hl
|
||||||
|
dec c
|
||||||
|
jr nz, .repeatLoop
|
||||||
|
jr .sameboyLogoLoop
|
||||||
|
|
||||||
|
.sameboyLogoEnd
|
||||||
|
; Copy (unresized) ROM logo
|
||||||
|
ld de, $104
|
||||||
|
.CGBROMLogoLoop
|
||||||
|
ld c, $f0
|
||||||
call ReadCGBLogoHalfTile
|
call ReadCGBLogoHalfTile
|
||||||
ld a, e
|
|
||||||
add a, 22
|
add a, 22
|
||||||
ld e, a
|
ld e, a
|
||||||
call ReadCGBLogoHalfTile
|
call ReadCGBLogoHalfTile
|
||||||
ld a, e
|
|
||||||
sub a, 22
|
sub a, 22
|
||||||
ld e, a
|
ld e, a
|
||||||
ret
|
cp $1c
|
||||||
|
jr nz, .CGBROMLogoLoop
|
||||||
|
inc hl
|
||||||
|
; fallthrough
|
||||||
ReadTrademarkSymbol:
|
ReadTrademarkSymbol:
|
||||||
ld de, TrademarkSymbol
|
ld de, TrademarkSymbol
|
||||||
ld c,$08
|
ld c,$08
|
||||||
@ -691,7 +701,11 @@ LoadObjPalettes:
|
|||||||
ld c, $6A
|
ld c, $6A
|
||||||
jr LoadPalettes
|
jr LoadPalettes
|
||||||
|
|
||||||
|
LoadBGPalettes64:
|
||||||
|
ld d, 64
|
||||||
|
|
||||||
LoadBGPalettes:
|
LoadBGPalettes:
|
||||||
|
ld e, 0
|
||||||
ld c, $68
|
ld c, $68
|
||||||
|
|
||||||
LoadPalettes:
|
LoadPalettes:
|
||||||
@ -706,19 +720,23 @@ LoadPalettes:
|
|||||||
jr nz, .loop
|
jr nz, .loop
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
DoIntroAnimation:
|
||||||
AdvanceIntroAnimation:
|
; Animate the intro
|
||||||
|
ld a, 1
|
||||||
|
ldh [$4F], a
|
||||||
|
ld d, 26
|
||||||
|
.animationLoop
|
||||||
|
ld b, 2
|
||||||
|
call WaitBFrames
|
||||||
ld hl, $98C0
|
ld hl, $98C0
|
||||||
ld c, 3 ; Row count
|
ld c, 3 ; Row count
|
||||||
.loop
|
.loop
|
||||||
ld a, [hl]
|
ld a, [hl]
|
||||||
cp $F ; Already blue
|
cp $F ; Already blue
|
||||||
jr z, .nextTile
|
jr z, .nextTile
|
||||||
inc a
|
inc [hl]
|
||||||
ld [hl], a
|
|
||||||
and $7
|
and $7
|
||||||
cp $1 ; Changed a white tile, go to next line
|
jr z, .nextLine ; Changed a white tile, go to next line
|
||||||
jr z, .nextLine
|
|
||||||
.nextTile
|
.nextTile
|
||||||
inc hl
|
inc hl
|
||||||
jr .loop
|
jr .loop
|
||||||
@ -728,25 +746,30 @@ AdvanceIntroAnimation:
|
|||||||
ld l, a
|
ld l, a
|
||||||
inc hl
|
inc hl
|
||||||
dec c
|
dec c
|
||||||
ret z
|
jr nz, .loop
|
||||||
jr .loop
|
|
||||||
|
|
||||||
DoIntroAnimation:
|
|
||||||
; Animate the intro
|
|
||||||
ld a, 1
|
|
||||||
ldh [$4F], a
|
|
||||||
ld d, 26
|
|
||||||
.animationLoop
|
|
||||||
ld b, 2
|
|
||||||
call WaitBFrames
|
|
||||||
call AdvanceIntroAnimation
|
|
||||||
dec d
|
dec d
|
||||||
jr nz, .animationLoop
|
jr nz, .animationLoop
|
||||||
ret
|
ret
|
||||||
|
|
||||||
Preboot:
|
Preboot:
|
||||||
IF !DEF(FAST)
|
IF !DEF(FAST)
|
||||||
call FadeOut
|
ld b, 32 ; 32 times to fade
|
||||||
|
.fadeLoop
|
||||||
|
ld c, 32 ; 32 colors to fade
|
||||||
|
ld hl, BgPalettes
|
||||||
|
.frameLoop
|
||||||
|
push bc
|
||||||
|
call BrightenColor
|
||||||
|
pop bc
|
||||||
|
dec c
|
||||||
|
jr nz, .frameLoop
|
||||||
|
|
||||||
|
call WaitFrame
|
||||||
|
call WaitFrame
|
||||||
|
ld hl, BgPalettes
|
||||||
|
call LoadBGPalettes64
|
||||||
|
dec b
|
||||||
|
jr nz, .fadeLoop
|
||||||
ENDC
|
ENDC
|
||||||
call ClearVRAMViaHDMA
|
call ClearVRAMViaHDMA
|
||||||
; Select the first bank
|
; Select the first bank
|
||||||
@ -796,7 +819,7 @@ ENDC
|
|||||||
.emulateDMGForCGBGame
|
.emulateDMGForCGBGame
|
||||||
call EmulateDMG
|
call EmulateDMG
|
||||||
ldh [$4C], a
|
ldh [$4C], a
|
||||||
ld a, $1;
|
ld a, $1
|
||||||
ret
|
ret
|
||||||
|
|
||||||
EmulateDMG:
|
EmulateDMG:
|
||||||
@ -833,7 +856,7 @@ GetPaletteIndex:
|
|||||||
ld a, [hl] ; Old Licensee
|
ld a, [hl] ; Old Licensee
|
||||||
cp $33
|
cp $33
|
||||||
jr z, .newLicensee
|
jr z, .newLicensee
|
||||||
cp 1 ; Nintendo
|
dec a ; 1 = Nintendo
|
||||||
jr nz, .notNintendo
|
jr nz, .notNintendo
|
||||||
jr .doChecksum
|
jr .doChecksum
|
||||||
.newLicensee
|
.newLicensee
|
||||||
@ -848,22 +871,22 @@ GetPaletteIndex:
|
|||||||
.doChecksum
|
.doChecksum
|
||||||
ld l, $34
|
ld l, $34
|
||||||
ld c, $10
|
ld c, $10
|
||||||
ld b, 0
|
xor a
|
||||||
|
|
||||||
.checksumLoop
|
.checksumLoop
|
||||||
ld a, [hli]
|
add [hl]
|
||||||
add b
|
inc l
|
||||||
ld b, a
|
|
||||||
dec c
|
dec c
|
||||||
jr nz, .checksumLoop
|
jr nz, .checksumLoop
|
||||||
|
ld b, a
|
||||||
|
|
||||||
; c = 0
|
; c = 0
|
||||||
ld hl, TitleChecksums
|
ld hl, TitleChecksums
|
||||||
|
|
||||||
.searchLoop
|
.searchLoop
|
||||||
ld a, l
|
ld a, l
|
||||||
cp ChecksumsEnd & $FF
|
sub LOW(ChecksumsEnd) ; use sub to zero out a
|
||||||
jr z, .notNintendo
|
ret z
|
||||||
ld a, [hli]
|
ld a, [hli]
|
||||||
cp b
|
cp b
|
||||||
jr nz, .searchLoop
|
jr nz, .searchLoop
|
||||||
@ -932,9 +955,7 @@ LoadPalettesFromIndex: ; a = index of combination
|
|||||||
ld c, a
|
ld c, a
|
||||||
add hl, bc
|
add hl, bc
|
||||||
ld d, 8
|
ld d, 8
|
||||||
ld e, 0
|
jp LoadBGPalettes
|
||||||
call LoadBGPalettes
|
|
||||||
ret
|
|
||||||
|
|
||||||
BrightenColor:
|
BrightenColor:
|
||||||
ld a, [hli]
|
ld a, [hli]
|
||||||
@ -987,28 +1008,6 @@ BrightenColor:
|
|||||||
ld [hli], a
|
ld [hli], a
|
||||||
ret
|
ret
|
||||||
|
|
||||||
FadeOut:
|
|
||||||
ld b, 32 ; 32 times to fade
|
|
||||||
.fadeLoop
|
|
||||||
ld c, 32 ; 32 colors to fade
|
|
||||||
ld hl, BgPalettes
|
|
||||||
.frameLoop
|
|
||||||
push bc
|
|
||||||
call BrightenColor
|
|
||||||
pop bc
|
|
||||||
dec c
|
|
||||||
jr nz, .frameLoop
|
|
||||||
|
|
||||||
call WaitFrame
|
|
||||||
call WaitFrame
|
|
||||||
ld hl, BgPalettes
|
|
||||||
ld d, 64 ; Length of write
|
|
||||||
ld e, 0 ; Index of write
|
|
||||||
call LoadBGPalettes
|
|
||||||
dec b
|
|
||||||
ret z
|
|
||||||
jr .fadeLoop
|
|
||||||
|
|
||||||
ClearVRAMViaHDMA:
|
ClearVRAMViaHDMA:
|
||||||
ld hl, $FF51
|
ld hl, $FF51
|
||||||
|
|
||||||
@ -1025,8 +1024,7 @@ ClearVRAMViaHDMA:
|
|||||||
ld [hli], a
|
ld [hli], a
|
||||||
|
|
||||||
; Do it
|
; Do it
|
||||||
ld a, $12
|
ld [hl], $12
|
||||||
ld [hl], a
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
GetInputPaletteIndex:
|
GetInputPaletteIndex:
|
||||||
@ -1124,9 +1122,7 @@ ChangeAnimationPalette:
|
|||||||
|
|
||||||
call WaitFrame
|
call WaitFrame
|
||||||
ld hl, BgPalettes
|
ld hl, BgPalettes
|
||||||
ld d, 64 ; Length of write
|
call LoadBGPalettes64
|
||||||
ld e, 0 ; Index of write
|
|
||||||
call LoadBGPalettes
|
|
||||||
; Delay the wait loop while the user is selecting a palette
|
; Delay the wait loop while the user is selecting a palette
|
||||||
ld a, 30
|
ld a, 30
|
||||||
ldh [WaitLoopCounter], a
|
ldh [WaitLoopCounter], a
|
||||||
|
48
BootROMs/logo-compress.c
Normal file
48
BootROMs/logo-compress.c
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
#include <assert.h>
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
void pair(size_t count, uint8_t byte) {
|
||||||
|
static size_t unique_count = 0;
|
||||||
|
static uint8_t unique_data[15];
|
||||||
|
if (count == 1) {
|
||||||
|
unique_data[unique_count++] = byte;
|
||||||
|
assert(unique_count <= 15);
|
||||||
|
} else {
|
||||||
|
assert(count <= 15);
|
||||||
|
uint8_t control = (count << 4) | unique_count;
|
||||||
|
putchar(control);
|
||||||
|
|
||||||
|
for (size_t i = 0; i < unique_count; i++) {
|
||||||
|
putchar(unique_data[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count != 0) {
|
||||||
|
putchar(byte);
|
||||||
|
} else {
|
||||||
|
assert(control == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
unique_count = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
size_t count = 1;
|
||||||
|
uint8_t byte = getchar();
|
||||||
|
int new;
|
||||||
|
size_t position = 0;
|
||||||
|
|
||||||
|
while ((new = getchar()) != EOF) {
|
||||||
|
if (byte == new) {
|
||||||
|
count++;
|
||||||
|
} else {
|
||||||
|
pair(count, byte);
|
||||||
|
byte = new;
|
||||||
|
count = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pair(count, byte);
|
||||||
|
pair(0, 0);
|
||||||
|
}
|
14
Makefile
14
Makefile
@ -322,13 +322,23 @@ $(BIN)/SDL/Shaders: Shaders
|
|||||||
|
|
||||||
# Boot ROMs
|
# Boot ROMs
|
||||||
|
|
||||||
|
$(OBJ)/%.1bpp: %.png
|
||||||
|
-@$(MKDIR) -p $(dir $@)
|
||||||
|
rgbgfx -d 1 -h -o $@ $<
|
||||||
|
|
||||||
|
$(OBJ)/BootROMs/SameboyLogo.rle: $(OBJ)/BootROMs/SameboyLogo.1bpp build/logo-compress
|
||||||
|
build/logo-compress < $< > $@
|
||||||
|
|
||||||
|
build/logo-compress: BootROMs/logo-compress.c
|
||||||
|
$(CC) $< -o $@
|
||||||
|
|
||||||
$(BIN)/BootROMs/agb_boot.bin: BootROMs/cgb_boot.asm
|
$(BIN)/BootROMs/agb_boot.bin: BootROMs/cgb_boot.asm
|
||||||
$(BIN)/BootROMs/cgb_boot_fast.bin: BootROMs/cgb_boot.asm
|
$(BIN)/BootROMs/cgb_boot_fast.bin: BootROMs/cgb_boot.asm
|
||||||
$(BIN)/BootROMs/sgb2_boot: BootROMs/sgb_boot.asm
|
$(BIN)/BootROMs/sgb2_boot: BootROMs/sgb_boot.asm
|
||||||
|
|
||||||
$(BIN)/BootROMs/%.bin: BootROMs/%.asm
|
$(BIN)/BootROMs/%.bin: BootROMs/%.asm $(OBJ)/BootROMs/SameboyLogo.rle
|
||||||
-@$(MKDIR) -p $(dir $@)
|
-@$(MKDIR) -p $(dir $@)
|
||||||
cd BootROMs && rgbasm -o ../$@.tmp ../$<
|
rgbasm -i $(OBJ)/BootROMs/ -i BootROMs/ -o $@.tmp $<
|
||||||
rgblink -o $@.tmp2 $@.tmp
|
rgblink -o $@.tmp2 $@.tmp
|
||||||
dd if=$@.tmp2 of=$@ count=1 bs=$(if $(findstring dmg,$@)$(findstring sgb,$@),256,2304)
|
dd if=$@.tmp2 of=$@ count=1 bs=$(if $(findstring dmg,$@)$(findstring sgb,$@),256,2304)
|
||||||
@rm $@.tmp $@.tmp2
|
@rm $@.tmp $@.tmp2
|
||||||
|
Loading…
Reference in New Issue
Block a user