Skip to content

Commit 1c90053

Browse files
committed
Initial commit.
0 parents  commit 1c90053

16 files changed

+1219
-0
lines changed

.gitignore

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
*~
2+
*.o
3+
*.gb
4+
*.2bpp

include/common.sh

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
if [ "${INCLUDE_COMMON_SH+is_defined}" ]; then
2+
return
3+
fi
4+
INCLUDE_COMMON_SH=true
5+
6+
echo_2bytes() {
7+
local val=$1
8+
local top_half=$(echo $val | cut -c-2)
9+
local bottom_half=$(echo $val | cut -c3-4)
10+
echo -en "\x${bottom_half}\x${top_half}"
11+
}
12+
13+
two_comp() {
14+
local val=$1
15+
local val_up=$(echo $val | tr [:lower:] [:upper:])
16+
echo "obase=16;ibase=16;100-${val_up}" | bc
17+
}

include/gb.sh

+99
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
if [ "${INCLUDE_GB_SH+is_defined}" ]; then
2+
return
3+
fi
4+
INCLUDE_GB_SH=true
5+
6+
. include/lr35902.sh
7+
8+
GB_CART_ROM_SIZE=32432
9+
GB_ROM_START_ADDR=0150
10+
11+
# I/O Ports
12+
GB_IO_JOYP=00
13+
GB_IO_LCDC=40
14+
GB_IO_STAT=41
15+
GB_IO_SCY=42
16+
GB_IO_SCX=43
17+
GB_IO_LY=44
18+
GB_IO_LYC=45
19+
GB_IO_BGP=47
20+
GB_IO_IE=ff
21+
22+
GB_GBP_DEFAULT=e4 # %11100100
23+
24+
# Nintendoロゴデータ
25+
gb_nintendo_logo() {
26+
echo -en '\xce\xed\x66\x66\xcc\x0d\x00\x0b'
27+
echo -en '\x03\x73\x00\x83\x00\x0c\x00\x0d'
28+
echo -en '\x00\x08\x11\x1f\x88\x89\x00\x0e'
29+
echo -en '\xdc\xcc\x6e\xe6\xdd\xdd\xd9\x99'
30+
echo -en '\xbb\xbb\x67\x63\x6e\x0e\xec\xcc'
31+
echo -en '\xdd\xdc\x99\x9f\xbb\xb9\x33\x3e'
32+
}
33+
34+
# タイトル文字列無しのヘッダ
35+
gb_cart_header_no_title() {
36+
local entry_addr=$1
37+
38+
# エントリアドレスへジャンプ
39+
echo -en '\x00\xc3'
40+
echo_2bytes $entry_addr
41+
42+
# Nintendoロゴデータ
43+
gb_nintendo_logo
44+
45+
# アドレス0x0134-0x014c(25バイト)のヘッダ情報はすべて0にする
46+
dd if=/dev/zero bs=1 count=25 2>/dev/null
47+
48+
# ヘッダのチェックサム
49+
echo -en '\xe7'
50+
51+
# グローバルチェックサム
52+
# (実機では見ない情報だし設定しない)
53+
echo -en '\x00\x00'
54+
}
55+
56+
gb_all_nop_vector_table() {
57+
dd if=/dev/zero bs=1 count=256 2>/dev/null
58+
}
59+
60+
# 割り込みは全てretiで返すベクタテーブル
61+
gb_all_intr_reti_vector_table() {
62+
dd if=/dev/zero bs=1 count=64 2>/dev/null
63+
lr35902_ei_and_ret
64+
dd if=/dev/zero bs=1 count=7 2>/dev/null
65+
lr35902_ei_and_ret
66+
dd if=/dev/zero bs=1 count=7 2>/dev/null
67+
lr35902_ei_and_ret
68+
dd if=/dev/zero bs=1 count=7 2>/dev/null
69+
lr35902_ei_and_ret
70+
dd if=/dev/zero bs=1 count=7 2>/dev/null
71+
lr35902_ei_and_ret
72+
dd if=/dev/zero bs=1 count=159 2>/dev/null
73+
}
74+
75+
gb_reset_scroll_pos() {
76+
# スクロールレジスタクリア
77+
lr35902_clear_reg regA
78+
lr35902_copy_to_ioport_from_regA $GB_IO_SCY
79+
lr35902_copy_to_ioport_from_regA $GB_IO_SCX
80+
}
81+
82+
gb_set_palette_to_default() {
83+
# パレット初期化
84+
lr35902_set_reg regA $GB_GBP_DEFAULT
85+
lr35902_copy_to_ioport_from_regA $GB_IO_BGP
86+
}
87+
88+
gb_wait_for_vblank_to_start() {
89+
# vblankの開始の瞬間(LY=147)を待つ
90+
lr35902_copy_to_regA_from_ioport $GB_IO_LY
91+
lr35902_compare_regA_and 93
92+
lr35902_rel_jump_with_cond NZ $(two_comp 06)
93+
}
94+
95+
gb_infinity_halt() {
96+
# 無限ループで止める
97+
lr35902_halt
98+
lr35902_rel_jump $(two_comp 04)
99+
}

0 commit comments

Comments
 (0)