Advertisement
Guest User

thread211_modify01

a guest
Aug 2nd, 2022
2,318
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.54 KB | None | 0 0
  1. //
  2. //
  3. //16bitの8080/z80用の乱数生成アセンブラの評価 (z88dk使用)
  4. //※SCREEN8出力機能を追加
  5. //
  6. //コンパイルコマンド
  7. //  >zcc +msx -subtype=rom -o rndsnd2.rom rndsnd2.c
  8. //
  9.  
  10.  
  11. #include <graphics.h>
  12. #include <msx/gfx.h>
  13.  
  14. //1bitの音を発生
  15. void snd1bit(unsigned char a){
  16.     #asm
  17.         ld          a,l
  18.         call        0x0135              ;BIOSコール
  19.     #endasm
  20. }
  21.  
  22. //画面モードをscreen8へ変更
  23. void set_scr8(){
  24.     #asm
  25.         ld  a,8
  26.         call    0x005f              ;BIOSコール
  27.     #endasm
  28. }
  29.  
  30. //ネットの人が作成したコード。
  31. //HLが引数、DEが戻り値
  32. int rndtest(int c){
  33.     #asm
  34.         add hl,hl       ;16bit 左shiftをaddで代用
  35.         ld  a,h         ;判定作業用としてAにH(上位8-15bit)を代入
  36.         jp  nc,jump1    ;シフト後のキャリーが0ならばxorを迂回判定
  37.         xor 2           ;Aレジスタをxor(16bit長の9bit位置)
  38. jump1:
  39.         bit 1,a         ;HLペアのH側のbit1(16bit長として9bit位置)を反転しゼロフラグへ反映
  40.         jp  nz,jump2    ;1ならばinc命令を迂回判定
  41.         inc L           ;0ならば+1(下位0bit処理)
  42. jump2:
  43.         ld  e,l             ;次回以降の値を戻す
  44.         ld  d,h
  45.     #endasm
  46. }
  47.  
  48.  
  49. void main(){
  50.     unsigned int r;
  51.     unsigned char bit1;
  52.     unsigned int i;
  53.    
  54.     r=123;                              //乱数初期値
  55.    
  56.     set_scr8();                     //screen8へ画面変更
  57.    
  58.     while(1){
  59.         for(i=0; i<16383; i++){
  60.             r=rndtest(r);                   //乱数を得る
  61.             vpoke(i,r/256);             //乱数値を1/256してから画面へ描画
  62.         }
  63.  
  64. //      r=rndtest(r);
  65. //      bit1=r & 1;                 //1bit抽出
  66. //      snd1bit(bit1);                  //biosの1bitサウンドで音を発生
  67.     }
  68.    
  69. }
  70.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement