トップ 一覧 Farm 検索 ヘルプ RSS ログイン

Diary/2013-1-7の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!BrainF**k/FPGA
FPGA上にBrainF**kを書いてみました.
ソースコードは,↓な感じ.

 public class BF{
 
   private final int ARRAYSIZE = 10000;
   private final int CODESIZE  = 10000;
 
   private IO io = new IO();
   private byte[] prog = new byte[CODESIZE];
   private byte[] data = new byte[ARRAYSIZE];
   private int ptr, pc;
 
   private void prompt(){
     io.putchar((byte)'>');
     io.putchar((byte)' ');
     return;
   }
 
   public void read(){
     prompt();
     for(int i = 0 ; i < CODESIZE; i++){
       byte b;
       b = io.getchar();
       if(b == '\n' || b == '\r'){
 	prog[i] = (byte)0;
 	break;
       }else{
 	prog[i] = b;
       }
     }
   }
 
   public void init(){
     ptr = 0;
     pc = 0;
     for(int i = 0; i < ARRAYSIZE; i++){
       data[i] = 0;
     }
     return;
   }
 
   public boolean step(){
     byte cmd = prog[pc];
     switch(cmd){
     case 0: return false;
     case '>': ptr++; break;
     case '<': ptr--; break;
     case '+': data[ptr] = (byte)(data[ptr] + 1); break;
     case '-': data[ptr] = (byte)(data[ptr] - 1); break;
     case '.': io.putchar(data[ptr]); break;
     case ',': data[ptr] = io.getchar(); break;
     case '[':
       if(data[ptr] == (byte)0){
 	while(true){
 	  pc++;
 	  if(prog[pc] == ']'){
 	    break;
 	  }
 	}
       }
       break;
     case ']':
       if(data[ptr] != (byte)0){
 	while(true){
 	  pc--;
 	  if(prog[pc] == '['){
 	    break;
 	  }
 	}
       }
       break;
     default: break;
     }
     pc++;
     return true;
   }
 
 }