Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- //16bitの8080/z80用の乱数生成アセンブラの評価 (z88dk使用)
- //コンパイルコマンド
- // >zcc +msx -subtype=rom -o rndsnd1.rom rndsnd1.c
- //1bitの音を発生
- void snd1bit(unsigned char a){
- #asm
- ld a,l
- call 0x0135 ;BIOSコール
- #endasm
- }
- //ネットの人が作成したコード。
- //HLが引数、DEが戻り値
- int rndtest(int c){
- #asm
- add hl,hl ;16bit 左shiftをaddで代用
- ld a,h ;判定作業用としてAにH(上位8-15bit)を代入
- jp nc,jump1 ;シフト後のキャリーが0ならばxorを迂回判定
- xor 2 ;Aレジスタをxor(16bit長の9bit位置)
- jump1:
- bit 1,a ;HLペアのH側のbit1(16bit長として9bit位置)の反転とゼロフラグへ反映
- jp nz,jump2 ;1ならばinc命令を迂回判定
- inc L ;0ならば+1(下位0bit処理)
- jump2:
- ld e,l ;次回以降の値を戻す
- ld d,h
- #endasm
- }
- void main(){
- unsigned int r;
- unsigned char bit1;
- r=123; //初期値
- while(1){
- r=rndtest(r);
- bit1=r & 1; //1bit抽出
- snd1bit(bit1); //biosの1bitサウンドで音を発生
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement