Example #1
0
void commandH() {
	int fig = sys_getc();
	int num = getCaliValue();
	char _work1[10], _work2[512];
	char *work1 = _work1, *work2 = _work2;
	int len;
	
	*work2 = 0;
	sprintf(work1, "%d", num);
	if (fig != 0) {
		len = strlen(work1);
		if (fig > len) {
			/* 空白でうめる */
			len = fig - len;
			while(len--) {
				strcat(work2, num2sjis(10));
			}
		} else {
			work1 += (len - fig);
		}
	}
	while(*work1) {
		strcat(work2, num2sjis((*work1) - '0')); work1++;
	}
	
	sys_addMsg(work2);
	DEBUG_COMMAND("H %d,%d:\n",fig,num);
}
Example #2
0
// Stores command in cmd_buffer and length in cmd_length
// Returns cmd_buffer
char *read_command(char *cmd_buffer, uint16_t *cmd_length) {
	char c;	
	*cmd_length = 0;

	puts(prompt);	// our prompt
	do {
		c = sys_getc();
		if (c == KEY_BACKSPACE) {
			// clear entered characters if possible
			if (*cmd_length > 0) {
				putc(c);
				cmd_buffer[*cmd_length-1] = 0;
				*cmd_length = *cmd_length - 1;
			}
		}

		else if (*cmd_length==512) continue;	// only allow 512 characters in a command

		else if (c != KEY_TAB && c != KEY_RETURN && // TODO: autocomplete on TAB
			c != KEY_UP && c != KEY_DOWN &&
			c != KEY_RIGHT && c != KEY_LEFT) { // TODO: command history using arrows	
			
			// display the character and store in buffer			
			putc(c);
			cmd_buffer[*cmd_length] = c;
			*cmd_length = *cmd_length + 1;
		}
	} while (c != KEY_RETURN);

	putc('\n');

	return cmd_buffer;
}
Example #3
0
void commandLHW() {
	// CDのデータをHDDへ登録/削除する
	int p1 = sys_getc();
	int no = getCaliValue();
	// X版では全てをHDDに置くのでサポートしない
	
	sysVar[0] = 255;
	DEBUG_COMMAND("LHW %d,%d:\n",p1,no);
}
Example #4
0
void commandLL() {
	int type = sys_getc();
	int link_no = getCaliValue();
	int *var, _var = 0;
	int num, i;
	dridata *dfile = ald_getdata(DRIFILE_DATA, link_no - 1);
	WORD *data;
	
	if (dfile == NULL) {
		getCaliValue();
		getCaliValue();
		sysVar[0] = 255;
		return;
	}
	
	data = (WORD *)dfile->data;
	
	switch(type) {
	case 0: /* T2 */
		var = getCaliVariable();
		num  = getCaliValue();

		DEBUG_COMMAND("LL %d,%d,%d,%d:\n",type, link_no, _var, num);
		
		if (dfile->size < num * sizeof(WORD)) {
			WARNING("data shortage (req = %d, result = %d)\n", num, dfile->size/ sizeof(WORD));
			/* sysVar[0] = 254; 大嘘*/
			/* return; */
			num = dfile->size / sizeof(WORD);
		}
		for (i = 0; i < num; i++) {
#ifdef WORDS_BIGENDIAN
			*var = swap16(*data); var++; data++;
#else
			*var = *data; var++; data++;
#endif
		}
		break;
		
	case 1:
		_var = getCaliValue();
		num  = getCaliValue();
		DEBUG_COMMAND_YET("LL1 not yet %d, %d\n", _var, num);
		sysVar[0] = 255;
		goto out;
		break;
		
	default:
		WARNING("Unknown LL command %d\n", type);
		goto out;
	}
	
	sysVar[0] = 0;

 out:
	ald_freedata(dfile);
}
Example #5
0
/*** Return the keyboard scan code and SHIFT/CAPSLOCK status ***/
void _0x94_getc(void) {
    char key;

    enable_interrupts(); // okay to have other interrupts while waiting for key entry
    key = sys_getc();
    disable_interrupts();

    // returned in EDX register
    current_process->cpu.edx = (uint32_t)key;
}
Example #6
0
void commandSX() {
	int device = sys_getc();
	int sw     = sys_getc();

	switch(sw) {
	case 1: {
		/* フェード */
		int time   = getCaliValue();
		int volume = getCaliValue();
		int stop   = getCaliValue();
		mus_mixer_fadeout_start(device, time, volume, stop);
		DEBUG_COMMAND("SX %d,%d,%d,%d,%d:\n", device, sw, time, volume, stop);
		break;
	}
	case 2: {
		/* フェード終了確認 */
		int *var   = getCaliVariable();
		boolean st;
		st = mus_mixer_fadeout_get_state(device);
		*var = (st ? 0 : 1);
		DEBUG_COMMAND("SX %d,%d:\n", device, sw);
		break;
	}
	case 3: {
		/*  フェード強制終了 */
		mus_mixer_fadeout_stop(device);
		DEBUG_COMMAND("SX %d,%d:\n", device, sw);
		break;
	}
	case 4: {
		/* ボリューム取得 */
		int *var   = getCaliVariable();
		*var = mus_mixer_get_level(device);
		DEBUG_COMMAND("SX %d,%d:\n", device, sw);
		break;
	}
	default:
		SYSERROR("Unknown SX command\n");
	}
}
Example #7
0
void commandSI() {
	/* 指定した音源の接続状態を var に取得 */
	int type = sys_getc();
	int *var = getCaliVariable();
	
	if (type == 0) {        /* MIDI */
		*var = mus_midi_get_state()  == TRUE ? 1 : 0;
	} else if (type == 1) { /* PCM */
		*var = mus_pcm_get_state()   == TRUE ? 1 : 0;
	} else if (type == 2) { /* CD */
		*var = mus_cdrom_get_state() == TRUE ? 1 : 0;
	}
	
	DEBUG_COMMAND("SI %d,%d:\n",type,*var);
}
Example #8
0
void commandHH(void) {
	int fig = sys_getc();
	int num = getCaliValue();
	char s[256];
	if( fig ) {
		char *ss="%%%dd";
		char sss[256];
		sprintf(sss,ss,fig);
		sprintf(s,sss,num);
	} else {
		sprintf(s,"%d",num);
	}
	sys_addMsg(s);
	DEBUG_COMMAND("HH %d,%d:\n",fig,num);
}
Example #9
0
void commandLE() {
	int type = sys_getc();
	char *filename = sys_getString(':');
	int *var, _var = 0;
	int num;
	
	switch(type) {
	case 0: /* T2 */
		var = getCaliVariable();
		num  = getCaliValue();
		sysVar[0] = save_load_var_with_file(filename, var, num);		
		break;
	case 1: /* 456 */
		_var = getCaliValue();
		num  = getCaliValue();
		sysVar[0] = save_load_str_with_file(filename, _var, num);
		break;
	default:
		WARNING("Unknown LE command %d\n", type); return;
	}
	
	DEBUG_COMMAND("LE %d,%s,%d,%d:\n",type, filename, _var, num);
}
Example #10
0
void commandQE() {
	int type       = sys_getc();
	char *filename = sys_getString(':');
	int *var, _var = 0, cnt;

	switch(type) {
	case 0:
		var = getCaliVariable();
		cnt = getCaliValue();
		sysVar[0] = save_save_var_with_file(filename, var, cnt);
		break;
	case 1:
		_var = getCaliValue();
		cnt  = getCaliValue();
		sysVar[0] = save_save_str_with_file(filename, _var, cnt);
		break;
	default:
		WARNING("Unknown QE command %d\n", type); return;
	}
	
	WARN_SAVEERR("QE", sysVar[0]);
	
	DEBUG_COMMAND("QE %d,%s,%d,%d:\n", type, filename, _var, cnt);
}
Example #11
0
void commandSG() {
	/* MIDI演奏 */
	static int loopcnt = 0;
	int sw  = sys_getc();
	int num, fnum, *var;
	midiplaystate st;
	
	switch(sw) {
	case 0:
		/* 演奏中のMIDIを停止する */
		num = getCaliValue();
		mus_midi_stop();
		DEBUG_COMMAND("SG0 %d:\n", num);
		break;
	case 1:
		/* MIDIを演奏する */
		num = getCaliValue();
		if (num == 0) {
			mus_midi_stop();
		} else {
			mus_midi_stop();
			mus_midi_start(num, loopcnt);
		}
		DEBUG_COMMAND("SG1 %d:\n", num);
		break;
	case 2:
		/* MIDI演奏位置を1/100秒単位で取得する */
		var = getCaliVariable();
		mus_midi_get_playposition(&st);
		*var = st.loc_ms / 10;
		DEBUG_COMMAND("SG2 %p:\n", var);
		break;
	case 3:
		num = getCaliValue();
		if (num == 0) {
			/* 演奏中のMIDIを一時停止する */
			mus_midi_pause();
		} else {
			/* 一時停止中のMIDIの一時停止を解除する */
			mus_midi_unpause();
		}
		DEBUG_COMMAND("SG3 %d:\n", num);
		break;
	case 4:
		num = getCaliValue();
		/* 次のSG1コマンドでのMIDI演奏の繰り返し回数指定 */
		loopcnt = num;
		DEBUG_COMMAND("SG4 %d:\n", num);
		break;
	case 5:
		fnum = getCaliValue() & 0x7f;
		num  = getCaliValue();
		mus_midi_set_flag(0, fnum, num);
		
		DEBUG_COMMAND("SG5 %d,%d:\n", fnum, num);
		break;
	case 6:
		fnum = getCaliValue() & 0x7f;
		num  = getCaliValue();
		mus_midi_set_flag(1, fnum, num);
		
		DEBUG_COMMAND("SG6 %d,%d:\n", fnum, num);
		break;
	case 7:
		fnum = getCaliValue() & 0x7f;
		var  = getCaliVariable();
		*var = mus_midi_get_flag(0, fnum);
		
		DEBUG_COMMAND("SG7 %d,%d:\n", fnum, *var);
		break;
	case 8: {
		fnum = getCaliValue() & 0x7f;
		var  = getCaliVariable();
		*var = mus_midi_get_flag(1, fnum);
		DEBUG_COMMAND("SG8 %d,%p:\n", fnum, var);
		break;
	}
	default:
		SYSERROR("Unknown SG command %d\n", sw);
		break;
	}
}
Example #12
0
int
main (int argc, char **argv)
{
	printf ("Welcome to the user process! (Ctrl - Z to exit)\n\n");

  unsigned int i;
  unsigned int addr = 0;
  unsigned int val;
  char c;
  printf ("Specify a virtual address to read from or write to.\n");
  printf("Enter the address: ");
	while (1)
	{
		i = sys_getc();

		if (i == 0)
			continue;
		else if (i == 0x1a) { // exit when Ctrl-Z is entered
      printf("\nExiting from the user process.\n");
			break;
    }
    else if (i == 0x0a || i == 0x0d) { // output new line
      printf("\n");
      printf("Address entered: %u\n", addr);
      printf("Specify the action: r for read, w for write.\n");
      while (1) {
        c = sys_getc();
        if (c == 0)
          continue;
        printf("%c\n", c);
        if (c == 'r') {
            val = *((unsigned int*)addr);
            printf("The value at virtual address %u is %d.\n", addr, val);
            break;
        }
        else if (c == 'w') {
            printf("Enter the value you want to write to the address.\n");
            printf("Value to write (from 0 to 9): ");
            while(1) {
              val = sys_getc();
              if (val == 0 || val < '0' || val > '9')
                  continue;
              printf("%c\n", val);
              *((unsigned int*)addr) = val - '0';
              printf("Successfully wrote the value to the virtual address. You can double check it with the read command.\n");
              break;
            }
            break;
        }
        else {
            printf("\nInvalid action.\n");
            printf("Specify the action: r for read, w for write.\n");
        }
      }
      addr = 0;
      printf ("\nSpecify a virtual address to read from or write to.\n");
      printf("Enter the address: ");
      continue;
    }
    else if (i < '0' || i > '9')
      continue;
    else if (addr >= 0xffffffff / 10) {
      printf("\nAddress out of range.\n");
      addr = 0;
      printf("Enter the address: ");
      continue;
    }

    addr = addr * 10 + i - '0';
		printf("%c", i);
	}

	return 0;
}