Advertisement
Guest User

exsample1

a guest
Jul 31st, 2022
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.11 KB | None | 0 0
  1. //
  2. //16bitの8080/z80用の乱数生成アセンブラの評価 (z88dk使用)
  3. //コンパイルコマンド
  4. //  >zcc +msx -subtype=rom -o rndsnd1.rom rndsnd1.c
  5.  
  6. //1bitの音を発生
  7. void snd1bit(unsigned char a){
  8.     #asm
  9.         ld          a,l
  10.         call        0x0135              ;BIOSコール
  11.     #endasm
  12. }
  13.  
  14. //ネットの人が作成したコード。
  15. //HLが引数、DEが戻り値
  16. int rndtest(int c){
  17.     #asm
  18.         add hl,hl       ;16bit 左shiftをaddで代用
  19.         ld  a,h         ;判定作業用としてAにH(上位8-15bit)を代入
  20.         jp  nc,jump1    ;シフト後のキャリーが0ならばxorを迂回判定
  21.         xor 2           ;Aレジスタをxor(16bit長の9bit位置)
  22. jump1:
  23.         bit 1,a         ;HLペアのH側のbit1(16bit長として9bit位置)の反転とゼロフラグへ反映
  24.         jp  nz,jump2    ;1ならばinc命令を迂回判定
  25.         inc L           ;0ならば+1(下位0bit処理)
  26. jump2:
  27.         ld  e,l             ;次回以降の値を戻す
  28.         ld  d,h
  29.     #endasm
  30. }
  31.  
  32.  
  33. void main(){
  34.     unsigned int r;
  35.     unsigned char bit1;
  36.    
  37.     r=123;                              //初期値
  38.    
  39.     while(1){
  40.         r=rndtest(r);
  41.         bit1=r & 1;                 //1bit抽出
  42.         snd1bit(bit1);                  //biosの1bitサウンドで音を発生
  43.     }
  44.    
  45. }
  46.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement