#define EXTIO_PRINT_STROKE (*(volatile unsigned int *) 0x0300)
#define EXTIO_PRINT_ASCII  (*(volatile unsigned int *) 0x0304)
void my_print();
main()
{
  unsigned int string[64];
  string[0] = 'H';
  string[1] = 'E';
  string[2] = 'L';
  string[3] = 'L';
  string[4] = 'O';
  string[5] = '!';
  string[6] = '!';
  string[7] = '\0';
  my_print(string);
  string[0] = 'B';
  string[1] = '\0';
}
void my_print(str)
     unsigned int *str;
{
  while (*str != '\0') {
    EXTIO_PRINT_STROKE = (unsigned int)0x00000000;
    if ((*str >= 'A') && (*str <= 'Z')) {
      EXTIO_PRINT_ASCII = *str - 'A' + 1;
    } else if ((*str >= 'a') && (*str <= 'z')) {
      EXTIO_PRINT_ASCII = *str - 'a' + 1;
    } else if ((*str >= '0') && (*str <= '9')) {
      EXTIO_PRINT_ASCII = *str - '0' + 48;
    } else {
      if (*str == '@') {
	EXTIO_PRINT_ASCII = (unsigned int)0;
      } else if (*str == '[') {
	EXTIO_PRINT_ASCII = (unsigned int)27;
      } else if (*str == ']') {
	EXTIO_PRINT_ASCII = (unsigned int)29;
      } else if ((*str >= ' ') && (*str <= '/')) {
	EXTIO_PRINT_ASCII = *str - ' ' + 32;
      } else if (*str == '?') {
	EXTIO_PRINT_ASCII = (unsigned int)58;
      } else if (*str == '=') {
	EXTIO_PRINT_ASCII = (unsigned int)59;
      } else if (*str == ';') {
	EXTIO_PRINT_ASCII = (unsigned int)60;
      } else if (*str == ':') {
	EXTIO_PRINT_ASCII = (unsigned int)61;
      } else {
	EXTIO_PRINT_ASCII = (unsigned int)0x00000000;
      }
    }
    EXTIO_PRINT_STROKE = (unsigned int)0x00000001;
    str++;
  }
}
           | 
        
            cross_compile.sh my_print.c  | 
        
            bin2v my_print.bin  | 
        
| 
	<省略>  case (word_addr) <省略> 10'h00b: data = 32'h03a0f021; // 0040002c: ADDU, REG[30]<=REG[29]+REG[0]; ここが PC=0x002c の命令 10'h00c: data = 32'h24020048; // 00400030: ADDIU, REG[2]<=REG[0]+72(=0x00000048); 10'h00d: data = 32'hafc20010; // 00400034: SW, RAM[REG[30]+16]<=REG[2]; 10'h00e: data = 32'h24020045; // 00400038: ADDIU, REG[2]<=REG[0]+69(=0x00000045); 10'h00f: data = 32'hafc20014; // 0040003c: SW, RAM[REG[30]+20]<=REG[2]; 10'h010: data = 32'h2402004c; // 00400040: ADDIU, REG[2]<=REG[0]+76(=0x0000004c); 10'h011: data = 32'hafc20018; // 00400044: SW, RAM[REG[30]+24]<=REG[2]; 10'h012: data = 32'h2402004c; // 00400048: ADDIU, REG[2]<=REG[0]+76(=0x0000004c); 10'h013: data = 32'hafc2001c; // 0040004c: SW, RAM[REG[30]+28]<=REG[2]; 10'h014: data = 32'h2402004f; // 00400050: ADDIU, REG[2]<=REG[0]+79(=0x0000004f); 10'h015: data = 32'hafc20020; // 00400054: SW, RAM[REG[30]+32]<=REG[2]; 10'h016: data = 32'h24020021; // 00400058: ADDIU, REG[2]<=REG[0]+33(=0x00000021); 10'h017: data = 32'hafc20024; // 0040005c: SW, RAM[REG[30]+36]<=REG[2]; 10'h018: data = 32'h24020021; // 00400060: ADDIU, REG[2]<=REG[0]+33(=0x00000021); 10'h019: data = 32'hafc20028; // 00400064: SW, RAM[REG[30]+40]<=REG[2]; 10'h01a: data = 32'hafc0002c; // 00400068: SW, RAM[REG[30]+44]<=REG[0]; 10'h01b: data = 32'h27c20010; // 0040006c: ADDIU, REG[2]<=REG[30]+16(=0x00000010); 10'h01c: data = 32'h00402021; // 00400070: ADDU, REG[4]<=REG[2]+REG[0]; 10'h01d: data = 32'h0c100028; // 00400074: JAL, PC<=0x00100028*4(=0x004000a0); REG[31]<=PC+4 ここが 命令メモリ 0x01d の命令 <省略> endcase <省略>  | 
        
            quartus_sh --flow compile DE2_115_Default  | 
        
参考書