[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[WitchTech 00798] [Q]64kbyte 以上の rom0 ファイル



しゅうです。はじめまして。

rom0上に65536byte以上のファイルを作成できずに困っています。
現象再現するソースファイルを文末に付けます。
関連の関数の使い方間違ってますか?
どなたかご指南ください。
よろしくお願いします。


■ソースファイルの動作
65664byteのファイルをcreat()で作成しておき、そこに1byteずつ
値を書き込みます。128byteまでは正常に書き込めるのですが
129byteめを書き込むとclose()から処理が帰ってきません。

wonderswan再起動して、出来上がったファイル情報を見てみると
使用量は65664byteですが、サイズは128byteまでしか増えてません。

雰囲気的に、65664-65536=128byteの、つまりintがオーバーフロー
した分しか書き込めないような感じです。

プログラムがどこまで進んだかを見る為に、232cから文字列を
出力しています。ハイパーターミナルとかで見ながら動作して
もらえると、うれしいです。

■環境
TurboCコンパイラ(witch付属のもの)
FreyaOS ver111

■ソースファイル
#include <stdio.h>
#include <stdlib.h>
#include <sys/bios.h>
#include <sys/comm.h>
#include <sys/key.h>
#include <sys/filesys.h>
#include <fcntl.h>

void
main(int argc, char near *argv[])
{
	void debug(void);
	
	/* 通信準備 */
	comm_set_baudrate(COMM_SPEED_38400);
	comm_open();
	comm_set_timeout(0, -1); 
	
	/* デバッグ関数 */
	debug();
	
	/* 通信解放処理 */
	comm_close();
}

/*
//
*/
void
debug(void)
{
	int count=0x0201;		/* 0x201*128byte=65664byteのファイルを作る */
	int i;
	FILE far* fp;
	
	unlink("/rom0/dust.dat");

	/* 2048byte以上のファイルを作成するために */
	if(creat("/rom0/dust.dat", 0x22 /*O_CREAT | O_RDWR*/, count)!=E_FS_SUCCESS){
		comm_send_string("Creat failed");
		return;
	}

	/* ファイルオープン */
	if((fp=fopen("/rom0/dust.dat", "w"))==NULL){
		comm_send_string("cant open");
		return;
	}
	
	comm_send_string("open");
	
	/* 書き込み(ここまでは正常) */
	for(i=0; i<128; i++)
		fputc(i, fp);
	comm_send_string("wr128byte");

	/* 書き込み(129byteめでおかしくなる?) */
	fputc('A', fp);
	comm_send_string("wr129byte");

	/* ファイルクローズ */
	fclose(fp);
	comm_send_string("close");
}




------------------------------------------------------------
shuuichiro matsuda / matsuda@koga.co.jp



ML Archives