Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- //
- //16bitの8080/z80用の乱数生成アセンブラの評価 (z88dk使用)
- //※SCREEN8出力機能を追加
- //
- //コンパイルコマンド
- // >zcc +msx -subtype=rom -o rndsnd2.rom rndsnd2.c
- //
- #include <graphics.h>
- #include <msx/gfx.h>
- //1bitの音を発生
- void snd1bit(unsigned char a){
- #asm
- ld a,l
- call 0x0135 ;BIOSコール
- #endasm
- }
- //画面モードをscreen8へ変更
- void set_scr8(){
- #asm
- ld a,8
- call 0x005f ;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;
- unsigned int i;
- r=123; //乱数初期値
- set_scr8(); //screen8へ画面変更
- while(1){
- for(i=0; i<16383; i++){
- r=rndtest(r); //乱数を得る
- vpoke(i,r/256); //乱数値を1/256してから画面へ描画
- }
- // r=rndtest(r);
- // bit1=r & 1; //1bit抽出
- // snd1bit(bit1); //biosの1bitサウンドで音を発生
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement