Today アクセスカウンター Yesterday アクセスカウンター

ホワット・ア・ワンダフル・ワールド

私は知識に何ものかを付け加え,また他の人々がより多くのものを付け加える手助けをした --- G.H.ハーディ

全記事一覧 << 2008/07 12345678910111213141516171819202122232425262728293031 2008/09 >>

プロフィール

あろは (alohakun)

  • Author:あろは (alohakun)
  • 若槻俊宏 (WAKATSUKI toshihiro)

    連絡先 : alohakun ___at___ gmail.com
    mixi : http://mixi.jp/show_friend.pl?id=182927
    twitter : http://twitter.com/alohakun

    abstract

    プログラミングという人間の知的行為を体系化し,単なる職人芸ではなく,サイエンスにするための研究をしています.

    具体的には,等価変換計算モデルに基づいた,仕様記述からのプログラム合成の研究をしています.

    もっと噛み砕くと,プログラムの正しさをどのように定式化し,どのような枠組みで,どのように変換を進めていけば,正しさを保証したまま,効率的なプログラムを手に入れることができるのか,ということについて研究しています.

    キーワード : equivalent transformation, computation model, programming paradigm, formal specification, program synthesis













    あわせて読みたい


    この日記のはてなブックマーク数


    スカウター : ホワット・ア・ワンダフル・ワールド


    Map









    FC2 BLOG RANKING

FC2カウンター

ブロとも申請フォーム

この人とブロともになる

ホーム

CHR エディタが欲しい

2008/03/04(火) 15:49:56

Windows だと YY-CHR が決定版みたいな感じなんですが,Linux だと,そもそも 2BPP というファミコンの独自規格のグラフィックリソースを見ることすらできない.wine でも動かないので,もうどうしようもない.

まぁ,単純なフォーマットらしいので,キャラクタエディタから作るかなぁ… しょうがない.

とりあえず,CHR フォーマットの解析を,ここらへんを参考に



#include<stdio.h>



void print_pixel(unsigned char b) {

  switch(b) {

    case 0 : printf("  "); break;

    case 1 : printf("\033[1;40m  \033[0m"); break;

    case 2 : printf("\033[1;41m  \033[0m"); break;

    case 3 : printf("\033[1;42m  \033[0m"); break;

    default : printf("%d", b);

  }

}



int main(int argc, char* argv[]) {

  FILE *fp;

  int i, j, k;

  unsigned char tile[16];

  if(argc < 2)

    return 1;

  if(!(fp = fopen(argv[1], "r")))

    return 1;

  fread(tile, 1, 16, fp);

  for(i = 0, j = 8; i < 8; i++, j++) {

    for(k = 7; k >= 0; k--)

      print_pixel(((((tile[i] >> k) & 1) << 1) | ((tile[j] >> k) & 1)));

    putchar('\n');

  }

  fclose(fp);

  return 0;

}



ギコ猫さんのやつを見てみる.
chr20080304.png
NESTB:0CM:1 このエントリーを含むはてなブックマーク | livedoorクリップ livedoorクリップ BuzzurlにブックマークBuzzurlにブックマーク newsing it!

とりあえず,ファミコンで hello, world!

2008/03/04(火) 10:50:19

参考サイト :

「NES 研究室」 sample1
ギコ猫でもわかるファミコンプログラミング 第5章 スプライト

フォントデータ character.chr を 「NES 研究室」 からダウンロードしておいてください.



;;; hello, nes!



;; 「NES 研究室」の sample1 を NESASM 向けに書き直したもの

;; http://hp.vector.co.jp/authors/VA042397/nes/sample.html



  .inesprg 1 ; プログラムに使うバンクの数

  .ineschr 1 ; CHR データに使うバンクの数

  .inesmir 0 ; 水平ミラーリング

  .inesmap 0 ; マッパー



; CHAR データバンク

  .bank 2

  .org $0000

; フォントデータのパターンテーブルを埋め込む

  .incbin  "character.chr" ; 「NES研究室」より



; プログラムバンク  

  .bank 0

  .org $8000



start:  

  lda $2002  ; VBlankが発生し,$2002の7ビット目が1になるまで待機

  bpl start



; PPU 初期化

  lda  #%00001000

  sta  $2000

  lda #%00000110 ; スプライトと BG の表示を OFF にしておく

  sta  $2001



; VRAM 初期化レジスタ($2006)にパレットテーブルのロード先アドレスを指定($3f00)

  lda  #$3f

  sta  $2006

  lda  #$00

  sta  $2006



; パレットをロード

  ldx  #$00

  ldy  #$10

copypal:

  lda  palettes, x

  sta  $2007

  inx

  dey

  bne  copypal



; VRAM の真ん中あたりに書き込み位置を指定

  lda  #$21

  sta  $2006

  lda  #$c9

  sta  $2006



; $2007 経由で $2006 に指定した位置に BG としてフォントを書き込む

  ldx  #$00

  ldy  #$0b   ; strlen("HELLO, NES!")

copymap:

  lda  string, x

  sta  $2007

  inx

  dey  ; y をデクリメント

  bne  copymap



; スクロール設定

  lda  #$00

  sta  $2005

  sta  $2005



  lda  #%00011110 ; スプライトと BG の表示を ON

  sta  $2001



; 終了

main:

  jmp  main



; パレットテーブル

palettes:

  .byte  $0f, $00, $10, $20

  .byte  $0f, $06, $16, $26

  .byte  $0f, $08, $18, $28

  .byte  $0f, $0a, $1a, $2a



; 表示文字列

string:

  .byte  "HELLO, NES!"



; 割り込みハンドラバンク

  .bank 1

  .org $FFFA



  .dw 0        ; VBlank割り込みハンドラ

  .dw start    ; リセット割り込みハンドラ

  .dw 0        ; ハードウェア/ソフトウェア割り込みハンドラ






~/work/nes/hello$ ../BIN/NESASM hello.asm

NES Assembler (v2.51)

pass 1
pass 2

~/work/nes/hello$ fceu hello.nes

Starting FCE Ultra 0.98.12...
Loading hello.nes...

PRG ROM: 1 x 16KiB
CHR ROM: 1 x 8KiB
ROM CRC32: 0xef24342b
ROM MD5: 0x7dcb0331241a31cb379c0dcabca077f2
Mapper: 0
Mirroring: Horizontal

Initializing video...
Initializing with OpenGL(Use "-opengl 0" to disable).
Video Mode: 640 x 448 x 32 bpp
Paletted texture extension not found. Using slower texture format...
Initializing sound...
Bits: 16
Rate: 48000
Channels: 1
Byte order: CPU Native
Buffer size: 1152 sample frames(24.000000 ms)


hello20080304.png
NESTB:0CM:0 このエントリーを含むはてなブックマーク | livedoorクリップ livedoorクリップ BuzzurlにブックマークBuzzurlにブックマーク newsing it!

最近のコメント

リンク

このブログをリンクに追加する

最近のトラックバック

人生の残り日数

日本人男性の平均寿命は 28700日.

RSSフィード

カテゴリー