Skip to content

Commit a56697b

Browse files
committed
add HDD support
1 parent 3326149 commit a56697b

File tree

4 files changed

+70
-31
lines changed

4 files changed

+70
-31
lines changed

readme.txt

+18-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
ポータブルX68000エミュレータ
22
PX68K ( Portable (x)keropi PRO-68K )
3-
2014/04/05
3+
2014/04/09
44

55
いろいろなデバイスで X68000 エミュレータが動作したら楽しいな、
66
と思い立ち、この PX68K を作りはじめました。
@@ -81,6 +81,9 @@ PX68K は以下の成分からできています。
8181

8282
iplrom.dat, iplrom30.dat, iplromco.dat, iplromxv.dat
8383

84+
※特に理由がなければ、iplrom30.datの使用はお勧めしません。
85+
PSP で起動できない、HD イメージが読み込めない等の不具合報告があります。
86+
8487
・フォントファイルを用意してください。
8588
ファイル名は以下のいずれかで、小文字でも大文字でも構いません。
8689
(iOS 版の場合は、小文字にしてください)
@@ -122,7 +125,8 @@ PX68K は以下の成分からできています。
122125

123126
・読み込み対象となるファイルの拡張子は以下となります。
124127

125-
.D88 .88D .HDM .DUP .2HD .DIM .XDF .IMG
128+
.D88 .88D .HDM .DUP .2HD .DIM .XDF .IMG (FD イメージ)
129+
.HDF (HD イメージ)
126130

127131
・ ディレクトリを深く掘りすぎたり、長いファイル名の場合、UI 画面から
128132
はみ出すのは仕様です。
@@ -236,7 +240,8 @@ PX68K は以下の成分からできています。
236240

237241
・読み込み対象となるファイルの拡張子は以下となります。
238242

239-
.D88 .88D .HDM .DUP .2HD .DIM .XDF .IMG
243+
.D88 .88D .HDM .DUP .2HD .DIM .XDF .IMG (FD イメージ)
244+
.HDF (HD イメージ)
240245

241246
・ ディレクトリを深く掘りすぎたり、長いファイル名の場合、UI 画面から
242247
はみ出すのは仕様です。
@@ -308,7 +313,8 @@ PX68K は以下の成分からできています。
308313

309314
・読み込み対象となるファイルの拡張子は以下となります。
310315

311-
.D88 .88D .HDM .DUP .2HD .DIM .XDF .IMG
316+
.D88 .88D .HDM .DUP .2HD .DIM .XDF .IMG (FD イメージ)
317+
.HDF (HD イメージ)
312318

313319
・ ディレクトリを深く掘りすぎたり、長いファイル名の場合、UI 画面から
314320
はみ出すのは仕様です。
@@ -397,6 +403,11 @@ PX68K は以下の成分からできています。
397403
[FDD1] と同じです。
398404
ディスクドライブ2についての設定となります。
399405

406+
[HDD1]
407+
[FDD1] と同じです。
408+
SASI HDD についての設定となります。
409+
410+
400411
[Frame Skip]
401412
フレームスキップの設定をします。
402413
とりあえず Auto、とてつもなく早いマシンなら Full、
@@ -435,6 +446,8 @@ PX68K は以下の成分からできています。
435446
使用したいボタンを押してください
436447
表示されている数字は現在の設定値です。
437448

449+
※項目を表示させた後、さらに選択ボタンを押すと設定モードにはいります。
450+
438451
[No Wait Mode]
439452
[On] にすると同期をとらずに全速力で動きます。
440453
X68000実機よりも早く動作してしまう場合があります。
@@ -457,7 +470,6 @@ PX68K は以下の成分からできています。
457470

458471
・仮想/実マウス対応
459472
・グラフィック周りのバグ対応 (BG周りがおかしい?)
460-
・HDD対応
461473
・物理パッド対応 (SDL2の対応次第)
462474
・TDQ1のフリーズ対応
463475
・[done] 時刻情報の取得 (1か月ずれる?)
@@ -546,6 +558,7 @@ PX68K は以下の成分からできています。
546558
2014/04/05 不当命令の例外処理で、スタックに積む PC の値を該当命令ではなく
547559
該当命令の直後の値にしていたのを修正 (c68k MPU コア)
548560
これで、ソーサリアンが MPU を 68040 と誤認識する問題が直るはず
561+
2014/04/09 HDD イメージ (hdf) 対応
549562

550563
9. 免責
551564

x11/windraw.c

+10-5
Original file line numberDiff line numberDiff line change
@@ -1874,13 +1874,18 @@ void WinDraw_DrawMenu(int menu_state, int mkey_pos, int mkey_y, int *mval_y)
18741874
set_mlocateC(25, 5 + i);
18751875
}
18761876

1877-
drv = WinUI_get_fdd_num(i + mkey_pos);
1878-
if ((drv == 0 || drv == 1) && mval_y[i + mkey_pos] == 0) {
1879-
if (Config.FDDImage[drv][0] == '\0') {
1877+
drv = WinUI_get_drv_num(i + mkey_pos);
1878+
if (drv >= 0 && mval_y[i + mkey_pos] == 0) {
1879+
char *p;
1880+
if (drv < 2) {
1881+
p = Config.FDDImage[drv];
1882+
} else {
1883+
p = Config.HDImage[0];
1884+
}
1885+
1886+
if (p[0] == '\0') {
18801887
draw_str(" -- no disk --");
18811888
} else {
1882-
char *p;
1883-
p = Config.FDDImage[drv];
18841889
// 先頭のカレントディレクトリ名を表示しない
18851890
if (!strncmp(CUR_DIR_STR, p, CUR_DIR_SLEN)) {
18861891
draw_str(p + CUR_DIR_SLEN);

x11/winui.c

+40-19
Original file line numberDiff line numberDiff line change
@@ -97,15 +97,15 @@ struct menu_flist mfl;
9797

9898
/***** menu items *****/
9999

100-
#define MENU_NUM 10
100+
#define MENU_NUM 11
101101
#define MENU_WINDOW 7
102102

103-
int mval_y[] = {0, 0, 0, 0, 0, 2, 1, 0, 1, 1};
103+
int mval_y[] = {0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 1};
104104

105-
enum menu_id {M_SYS, M_JOM, M_FD1, M_FD2, M_FS, M_VKS, M_VBS, M_HJS, M_NW, M_JK};
105+
enum menu_id {M_SYS, M_JOM, M_FD1, M_FD2, M_HD1, M_FS, M_VKS, M_VBS, M_HJS, M_NW, M_JK};
106106

107107
// Max # of characters is 15.
108-
char menu_item_key[][15] = {"SYSTEM", "Joy/Mouse", "FDD1", "FDD2", "Frame Skip", "VKey Size", "VBtn Swap", "HwJoy Setting", "No Wait Mode", "JoyKey", "uhyo", ""};
108+
char menu_item_key[][15] = {"SYSTEM", "Joy/Mouse", "FDD1", "FDD2", "HDD1", "Frame Skip", "VKey Size", "VBtn Swap", "HwJoy Setting", "No Wait Mode", "JoyKey", "uhyo", ""};
109109

110110
// Max # of characters is 30.
111111
// Max # of items including terminater `""' in each line is 15.
@@ -114,6 +114,7 @@ char menu_items[][15][30] = {
114114
{"Joystick", "Mouse", ""},
115115
{"dummy", "EJECT", ""},
116116
{"dummy", "EJECT", ""},
117+
{"dummy", "EJECT", ""},
117118
{"Auto Frame Skip", "Full Frame", "1/2 Frame", "1/3 Frame", "1/4 Frame", "1/5 Frame", "1/6 Frame", "1/8 Frame", "1/16 Frame", "1/32 Frame", "1/60 Frame", ""},
118119
{"Ultra Huge", "Super Huge", "Huge", "Large", "Medium", "Small", ""},
119120
{"TRIG1 TRIG2", "TRIG2 TRIG1", ""},
@@ -142,6 +143,7 @@ struct _menu_func menu_func[] = {
142143
{menu_joy_or_mouse, 1},
143144
{menu_create_flist, 0},
144145
{menu_create_flist, 0},
146+
{menu_create_flist, 0},
145147
{menu_frame_skip, 1},
146148
{menu_vkey_size, 1},
147149
{menu_vbtn_swap, 1},
@@ -150,10 +152,16 @@ struct _menu_func menu_func[] = {
150152
{menu_joykey, 1}
151153
};
152154

153-
int WinUI_get_fdd_num(int key)
155+
int WinUI_get_drv_num(int key)
154156
{
155-
return strcmp("FDD1", menu_item_key[key])?
156-
(strcmp("FDD2", menu_item_key[key])? -1 : 1) : 0;
157+
char *s = menu_item_key[key];
158+
159+
if (!strncmp("FDD", s, 3)) {
160+
return strcmp("FDD1", s)?
161+
(strcmp("FDD2", s)? -1 : 1) : 0;
162+
} else {
163+
return strcmp("HDD1", s)? -1 : 2;
164+
}
157165
}
158166

159167
static void menu_hwjoy_print(int v)
@@ -204,8 +212,9 @@ WinUI_Init(void)
204212
mval_y[M_NW] = Config.NoWaitMode;
205213
mval_y[M_JK] = Config.JoyKey;
206214

207-
strcpy(mfl.dir[0], CUR_DIR_STR);
208-
strcpy(mfl.dir[1], CUR_DIR_STR);
215+
for (i = 0; i < 3; i++) {
216+
strcpy(mfl.dir[i], CUR_DIR_STR);
217+
}
209218
}
210219

211220
#if 0
@@ -314,29 +323,37 @@ static void upper(char *s)
314323
static void menu_create_flist(int v)
315324
{
316325
int drv;
326+
//file extension of FD image
327+
char support[] = "D8888DHDMDUP2HDDIMXDFIMG";
317328

318-
drv = WinUI_get_fdd_num(mkey_y);
329+
drv = WinUI_get_drv_num(mkey_y);
319330
printf("***** drv:%d *****\n", drv);
320331
if (drv < 0) {
321332
return;
322333
}
323334

324335
// set current directory when FDD is ejected
325336
if (v == 1) {
326-
FDD_EjectFD(drv);
327-
Config.FDDImage[drv][0] = '\0';
337+
if (drv < 2) {
338+
FDD_EjectFD(drv);
339+
Config.FDDImage[drv][0] = '\0';
340+
} else {
341+
Config.HDImage[0][0] = '\0';
342+
}
328343
strcpy(mfl.dir[drv], CUR_DIR_STR);
329344
return;
330345
}
331346

347+
if (drv >= 2) {
348+
strcpy(support, "HDF");
349+
}
350+
332351
// This routine gets file lists.
333352
DIR *dp;
334353
struct dirent *dent;
335354
struct stat buf;
336355
int i, len;
337356
char *n, ext[4], *p;
338-
//file extension of FD image
339-
char support[] = "D8888DHDMDUP2HDDIMXDFIMG";
340357
char ent_name[MAX_PATH];
341358

342359
dp = opendir(mfl.dir[drv]);
@@ -616,9 +633,9 @@ int WinUI_Menu(int first)
616633
menu_state = ms_key;
617634
menu_redraw = 1;
618635

619-
drv = WinUI_get_fdd_num(mkey_y);
636+
drv = WinUI_get_drv_num(mkey_y);
620637
printf("***** drv:%d *****\n", drv);
621-
if (drv == 0 || drv == 1) {
638+
if (drv >= 0) {
622639
if (mval_y[mkey_y] == 0) {
623640
// go file_mode
624641
printf("hoge:%d", mval_y[mkey_y]);
@@ -637,7 +654,7 @@ int WinUI_Menu(int first)
637654
}
638655
break;
639656
case ms_file:
640-
drv = WinUI_get_fdd_num(mkey_y);
657+
drv = WinUI_get_drv_num(mkey_y);
641658
printf("***** drv:%d *****\n", drv);
642659
if (drv < 0) {
643660
break;
@@ -659,8 +676,12 @@ int WinUI_Menu(int first)
659676
char tmpstr[MAX_PATH];
660677
strcpy(tmpstr, mfl.dir[drv]);
661678
strcat(tmpstr, mfl.name[y]);
662-
FDD_SetFD(drv, tmpstr, 0);
663-
strcpy(Config.FDDImage[drv], tmpstr);
679+
if (drv < 2) {
680+
FDD_SetFD(drv, tmpstr, 0);
681+
strcpy(Config.FDDImage[drv], tmpstr);
682+
} else {
683+
strcpy(Config.HDImage[0], tmpstr);
684+
}
664685
menu_state = ms_key;
665686
menu_redraw = 1;
666687
}

x11/winui.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ enum MenuState {ms_key, ms_value, ms_file, ms_hwjoy_set};
3030
struct menu_flist {
3131
char name[MFL_MAX][MAX_PATH];
3232
char type[MFL_MAX];
33-
char dir[2][MAX_PATH];
33+
char dir[3][MAX_PATH];
3434
int ptr;
3535
int num;
3636
int y;
@@ -39,7 +39,7 @@ struct menu_flist {
3939
extern char menu_item_key[][15];
4040
extern char menu_items[][15][30];
4141

42-
int WinUI_get_fdd_num(int key);
42+
int WinUI_get_drv_num(int key);
4343

4444
#ifndef _winx68k_gtkui_h
4545
#define _winx68k_gtkui_h

0 commit comments

Comments
 (0)