어셈블리 언어로 GAMEBOY 개발(배경 표시)
소스 코드는 여기.입니다.
GB 화면 표시 구조
평평하게 펴다
배경 화면의 구성
프로세스 초기화
팔레트와 스크롤 레지스터를 설정합니다.
bg.asm ld a, %11100100 ; パレット(パレットごとに2bitで白さを指定。MSBがパット番号0番)
ld [rBGP], a ; BGPレジスタにパレットを設定
ld a,0 ; スクロールレジスタを設定し、画面を左上に固定
ld [rSCX], a ; SCXレジスタ
ld [rSCY], a ; SCYレジスタ
화면 그리기 중에 VRAM을 쓸 수 없으며 화면 표시를 일시적으로 끕니다.
bg.asm.waitVBlank: ; 画面描画を止めるため、まず現在の描画が終るのを待つ
ld a, [rLY]
cp 145 ; 画面描画が終った=描画位置がY=145であるか?
jr nz, .waitVBlank ; 違ったらまだ待つ(jrは相対ジャンプで、命令長が短くなる)
ld a, [rLCDC]
res 7, a
ld [rLCDC], a ; VRAMに書き込むため、画面描画を止める
타일을 VRAM에 로드합니다.
bg.asm ld hl, Tile ; vramcpy コピー元 (ハードコードしたタイルの画像のアドレス)
ld bc, _VRAM ; vramcpy コピー先 ($8000)
ld de, TileEnd-Tile ; vramcpy コピー長さ
call vramcpy ; VRAMに値をコピーするするサブルーチン
VRAM에서 와트 번호를 설정합니다.
bg.asm ld b, $0 ; vramset 設定値
ld hl, _SCRN0 ; vramset コピー先
ld de, 32*32 ; vramset コピー長さ
call vramset ; サブルーチン。画面全域にタイル番号0番を設定
화면을 다시 그립니다.GB는 두 개의 배경화면이 있는데 이번에는'BG8000'을 사용했기 때문에 LCDC 레지스터에'LCDCT BG8000'을 설치했다.또 타일도 VRAM 2세트가 가능하며 이번에는'BG9800'을 사용했다.스프라이트를 사용하지 않으므로 LCDCT OBJOFF를 통해 디스플레이가 닫힙니다.
bg.asm ld a, LCDCF_ON|LCDCF_BG8000|LCDCF_BG9800|LCDCF_BGON|LCDCF_OBJ16|LCDCF_OBJOFF
ld [rLCDC], a ; 画面ON
주 순환 시작
bg.asmmainloop:
halt
nop
jr mainloop
캡처
기왓장 격식
기와 조각의 데이터 형식은 상당히 복잡하다.이번에 사용한 타일(트레이 번호 0은 흰색, 1은 밝은 회색, 2는 어두운 회색, 3은 검은색) 시
각 픽셀에 대한 팔레트 번호를 다음과 같이 지정합니다.
bg.asm;タイル用画像
;2バイトで1ラインを表し、各バイトの各ビットが1ピクセルに対応する。
;偶数バイトが、パレット番号の下位ビットを表し、奇数バイトが上位ビットを表す
Tile:
;1行目8ピクセルのパレット番号は, 0,3,3,3, 3,3,3,3
db %01111111 ;1行目, パレット番号下位ビット
db %01111111 ;1行目, パレット番号上位ビット
;2行目8ピクセルのパレット番号は, 2,2,2,2, 2,2,2,2
db %00000000 ;2行目, パレット番号下位ビット
db %11111111 ;2行目, パレット番号上位ビット
db %11111111 ;3行目
db %00000000
db %00000000 ;4
db %00000000
db %11111111 ;5
db %00000000
db %00000000 ;6
db %11111111
db %11111111 ;7
db %11111111
db %00000000 ;8
db %00000000
TileEnd:
손으로 쓰는 것은 매우 고생스럽기 때문에 아래의 공구가 있다.어셈블리 원본에 직접 포함될 수 있는 코드를 출력하는 우수한 것이다.
http://www.devrs.com/gb/hmgd/gbtd.html
Reference
이 문제에 관하여(어셈블리 언어로 GAMEBOY 개발(배경 표시)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/toh4649/items/48997c0e2e5acc7c24a6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
ld a, %11100100 ; パレット(パレットごとに2bitで白さを指定。MSBがパット番号0番)
ld [rBGP], a ; BGPレジスタにパレットを設定
ld a,0 ; スクロールレジスタを設定し、画面を左上に固定
ld [rSCX], a ; SCXレジスタ
ld [rSCY], a ; SCYレジスタ
.waitVBlank: ; 画面描画を止めるため、まず現在の描画が終るのを待つ
ld a, [rLY]
cp 145 ; 画面描画が終った=描画位置がY=145であるか?
jr nz, .waitVBlank ; 違ったらまだ待つ(jrは相対ジャンプで、命令長が短くなる)
ld a, [rLCDC]
res 7, a
ld [rLCDC], a ; VRAMに書き込むため、画面描画を止める
ld hl, Tile ; vramcpy コピー元 (ハードコードしたタイルの画像のアドレス)
ld bc, _VRAM ; vramcpy コピー先 ($8000)
ld de, TileEnd-Tile ; vramcpy コピー長さ
call vramcpy ; VRAMに値をコピーするするサブルーチン
ld b, $0 ; vramset 設定値
ld hl, _SCRN0 ; vramset コピー先
ld de, 32*32 ; vramset コピー長さ
call vramset ; サブルーチン。画面全域にタイル番号0番を設定
ld a, LCDCF_ON|LCDCF_BG8000|LCDCF_BG9800|LCDCF_BGON|LCDCF_OBJ16|LCDCF_OBJOFF
ld [rLCDC], a ; 画面ON
mainloop:
halt
nop
jr mainloop
기왓장 격식
기와 조각의 데이터 형식은 상당히 복잡하다.이번에 사용한 타일(트레이 번호 0은 흰색, 1은 밝은 회색, 2는 어두운 회색, 3은 검은색) 시
각 픽셀에 대한 팔레트 번호를 다음과 같이 지정합니다.
bg.asm;タイル用画像
;2バイトで1ラインを表し、各バイトの各ビットが1ピクセルに対応する。
;偶数バイトが、パレット番号の下位ビットを表し、奇数バイトが上位ビットを表す
Tile:
;1行目8ピクセルのパレット番号は, 0,3,3,3, 3,3,3,3
db %01111111 ;1行目, パレット番号下位ビット
db %01111111 ;1行目, パレット番号上位ビット
;2行目8ピクセルのパレット番号は, 2,2,2,2, 2,2,2,2
db %00000000 ;2行目, パレット番号下位ビット
db %11111111 ;2行目, パレット番号上位ビット
db %11111111 ;3行目
db %00000000
db %00000000 ;4
db %00000000
db %11111111 ;5
db %00000000
db %00000000 ;6
db %11111111
db %11111111 ;7
db %11111111
db %00000000 ;8
db %00000000
TileEnd:
손으로 쓰는 것은 매우 고생스럽기 때문에 아래의 공구가 있다.어셈블리 원본에 직접 포함될 수 있는 코드를 출력하는 우수한 것이다.
http://www.devrs.com/gb/hmgd/gbtd.html
Reference
이 문제에 관하여(어셈블리 언어로 GAMEBOY 개발(배경 표시)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/toh4649/items/48997c0e2e5acc7c24a6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
;タイル用画像
;2バイトで1ラインを表し、各バイトの各ビットが1ピクセルに対応する。
;偶数バイトが、パレット番号の下位ビットを表し、奇数バイトが上位ビットを表す
Tile:
;1行目8ピクセルのパレット番号は, 0,3,3,3, 3,3,3,3
db %01111111 ;1行目, パレット番号下位ビット
db %01111111 ;1行目, パレット番号上位ビット
;2行目8ピクセルのパレット番号は, 2,2,2,2, 2,2,2,2
db %00000000 ;2行目, パレット番号下位ビット
db %11111111 ;2行目, パレット番号上位ビット
db %11111111 ;3行目
db %00000000
db %00000000 ;4
db %00000000
db %11111111 ;5
db %00000000
db %00000000 ;6
db %11111111
db %11111111 ;7
db %11111111
db %00000000 ;8
db %00000000
TileEnd:
Reference
이 문제에 관하여(어셈블리 언어로 GAMEBOY 개발(배경 표시)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/toh4649/items/48997c0e2e5acc7c24a6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)