正直日記



2007/05/15

_ fizzbuzz問題
流行ってるからやってみたけど10分じゃ無理だったよ。
  .text
  .align 2
  .global _start
_start:
  b  main
  .fill 0xc0-4, 1, 0
main:
  mov  r5, #100
1:
  mov  r7, #0
  ldr  r0, cr0
  swi  0xff0000

  add  r8, r8, #1
  mov  r0, r8
  mov  r1, #3
  ldr  r6, fizz0
  bl   mod_print

  mov  r0, r8
  mov  r1, #5
  ldr  r6, buzz0
  bl   mod_print

  cmp  r7, #0
  bne  2f

  mov  r0, r8
  bl   print_digit
2:
  cmp  r8, r5
  bmi  1b
  sub  pc, pc, #8

mod_print:
  swi  0x60000
  cmp  r1, #0
  bne  1f
  mov  r0, r6
  swi  0xff0000
  add  r7, r7, #1
1:
  mov  pc, lr

print_digit:
  mov  r10, #0
  mov  r11, #0
1:
  mov  r1, #10
  swi  0x60000
  mov  r10, r10, LSL #4
  add  r10, r10, r1
  add  r11, r11, #1
  cmp  r0, #0
  bne  1b
2:
  ldr  r0, wram0
  cmp  r11, #0
  beq  3f
  and  r1, r10, #15
  add  r1, r1, #48
  str  r1, [r0, #0]
  mov  r10, r10, LSR #4
  swi  0xff0000
  sub  r11, r11, #1
  b    2b
3:
  mov  pc, lr

wram0: .word 0x02000000
fizz0: .word fizz+0x07ff8000
buzz0: .word buzz+0x07ff8000
cr0:   .word cr  +0x07ff8000

fizz:  .ascii "fizz\0"
buzz:  .ascii "buzz\0"
cr:    .ascii "\n\0"
最初、WRAMを使わずにやろうと思ったんだけど、BCD(風の何か)を出力するのに使わ ざるを得なかった。後で気づいたけど"0\01\02\0...9\0"みたいな文字定数を用意すれ ば良かったのかも分からんね。 バイナリの生成はこう。
arm-elf-as crt0.s -o fizzbuzz.o
arm-elf-ld fizzbuzz.o -o fizzbuzz.elf
arm-elf-objcopy -O binary fizzbuzz.elf fizzbuzz.gba
で、こうなる、と。

2007/05/07

_ 地デジをアナログで録ってる
撮りためたTV番組をXvidでエンコしてDVDに焼き、DV501XDRで観ている。

デコーダチップがしょぼいのか、ビットレートを高くすると再生が間に合わなくなるの
が難点だが、500kbpsくらいまでなら再生出来るようだ。安い割りには結構使えるよー
な気がする。でもよく考えたら液晶テレビにD-SubのRGB入力がついてるので、ノートPC
から直接出力しちゃえばいいんだよなーー。
_ 量子化ノイズ萌え
ここのところヘビーローテで世界樹の迷宮サントラを聴いてる。88版の方が人気高そう
(実際こっちだけあればCD2枚も要らないという意見を何度か目にした)だけど、個人
的には量子化ノイズを隠そうともしてないDS版が萌える。エイリアシングノイズが頻繁
に発生している点も萌えどころだ。適度なlo-bit / lo-rate感がレトロっぽさっつーか
空気を生み出していると思う。あぁこれがDS実機で鳴っているんだなーというか、そう
いえば俺はDSを持っていないのだった。未だにPSPとNDSのどちらを選択するかで揺れて
いるというか、PSPなら384x256が丸々収まっちゃうんだよなー。機能を絞ればX68000も
エミュレート出来ちゃいそうな気がしてきたしかなりPSP側に天秤が傾いている。GEを
弄るのも面白そうだ。

SaTa. > NDSはGBAのテクがほぼそのまま通じるので楽っちゃ楽なんだけどね。  (2007/05/17 07:57:17)
> 引きとめようとしても無駄だ!ていうか多分どっちにも転ばない気がします……。  (2007/05/19 00:49:21)

2007/05/03

_ Brookun Sandaa発売記念
というわけで、むっか〜しコピったThunderForceV Legendary Wingsをアップしました。

 Thunder Force V - Legendary wings

確かPMDPPZだったと思うんですが、録音したものしか残ってないので演奏データはあり
ません。

以下、うんちくなので読まなくていいよ。


p(^-^)q
_ PSPSDKをmingw+msysで構築する
巷で解説されている構築手順だとまずcygwinを入れるのが鉄板らしいが、msysが安定
してるので今更cygwinを入れたくはなかった。でも、構築中にやたらと引っかかった
ので、最初から素直にcygwinを入れればよかったと反省した。

以下手順。

msys 1.0.10 / gcc 4.1.2 / binutils 2.17 / w32api 3.6 が既に導入済み。
更に msysDTK 1.0.1 / svn / wget をそれぞれ入れる。
GNU M4 1.4.9をビルド。
msys-autoconf-2.59 と msys-automake-1.8.2 を上書きで / に入れる。

/bin/autom4teにパッチを当てる。
--- /bin/autom4te.org        Wed May  2 12:16:16 2007
+++ /bin/autom4te    Wed May  2 12:17:06 2007
@@ -87,7 +87,7 @@
 my $freeze = 0;

 # $M4.
-my $m4 = $ENV{"M4"} || '/bin/m4';
+my $m4 = $ENV{"M4"} || '/usr/local/bin/m4';
 # Some non-GNU m4's don't reject the --help option, so give them /dev/null.
 fatal "need GNU m4 1.4 or later: $m4"
   if system "$m4 --help </dev/null 2>&amp;amp;1 | grep reload-state >/dev/null";
/mingw/include/sys/time.hにパッチを当てる。
--- /mingw/include/sys/time.h.orig      Thu May  3 07:36:41 2007
+++ /mingw/include/sys/time.h   Thu May  3 07:36:58 2007
@@ -36,7 +36,7 @@
 
    The timezone pointer arg is ignored.  Errors are ignored.
 */ 
-int __cdecl gettimeofday(struct timeval *__restrict__,
+int gettimeofday(struct timeval *__restrict__,
                         void *__restrict__  /* tzp (unused) */);
 
 #ifdef __cplusplus
ようやく構築準備が整った。
$ svn checkout svn://svn.pspdev.org/psp/trunk/psptoolchain
$ ./toolchain.sh -d
ダウンロードされたパッチの改行コードがCR+LFになっているのでLFで保存しなおす。 あとは
$ ./toolchain.sh
を最後まで放置する。これで /usr/local/pspdev/ に環境が構築されるはず。 一応確認。
$ /usr/local/pspdev/bin/psp-gcc --version
psp-gcc (GCC) 4.0.2 (PSPDEV 20051022)
後で気づいたんだけどdevkitPSPってPSPSDKそのまんまなのね。toolchainが最新のもの になってるし、実行ファイルはあらかじめ全てstripしてあるので、こっちを入れる方 が色々と精神的だったかも。時間も掛からず経済的だし。
$ /usr/local/devkitPSP/bin/psp-gcc --version
gcc version 4.1.2 devkitPSP release 11 (PSPDEV 20060507)
コンパイルしたhello worldがPSPEで動くのを確認したところで満足して消した。
_ "ブロガーの嵐" の検索結果 1 件中 1 - 1 件目 (0.27 秒)
意外だった。

最新
2010 | 01 04
2009 | 01 02 03 04 05 06 07 09 10 11 12
2008 | 01 02 03 04 05 06 07 08 09 10 11 12
2007 | 02 03 04 05 06 07 08 10 11 12
2006 | 01 02 03 04 05 06 07 08 09 10 11 12
2005 | 01 02 03 04 05 06 07 08 09 10 11 12