WonX - WonderWitch on X.

 zzɓ

WonX ͂܂sSłDĂȂ@\CsSȋ@\C
镔Ȃǂς܂D
oOAhoCX΁C҂̍O܂ŁCǂǂ񃁁[D
AhX́C
sakai@seki.ee.kagu.sut.ac.jp
hsakai@pfu.co.jp
łD
܂C̋CCAbvf[g͐sĂ܂D
http://www.seki.ee.kagu.sut.ac.jp/~sakai/WonderWitch/index.html
ŁCJĂ܂D

݂͍䂪lŐ삵Ă܂CЂƂłׂ͍_̐
(Ȃꍇ̓̈ႢȂǁDWonderWitch  WonX ł
 ɈقȂĂ)ǂȂ̂łD
ƂɃ}jAɏĂȂɊւẮCWonderWitch ł͂ǂ̂悤
삷̂CЂƂł̓`FbN܂D(Ăʓ|)
҂(Ă)Ă܂D
ɏCSȂ̂ɎdグĂ܂傤D

ӌCv]Ȃǂ}܂Dǂǂ񂹂D
(CԎƂ͌ȂCv]𔽉fƂ܂̂
 ̓_͂e͂)

 ͂߂

WonX ́CWonderWitch p̃vO X AvP[VƂăRpC
߂́CCułDȉ̓܂D

ECꃌxŌ݊@\Ă̂ŁCWonderWitch p̃vO
  UNIXł̂܂܃RpCłD(-lwonx ŃRpC)
EUNIXŃfobKgpăfobOł悤ɂȂD(!)
ELN^f[^pbgf[^̃_v@\D
EsȈ̒lCpbgLN^ȂŎgpȂǂ
  `FbNCG[o͂(悤ɂ)DG[`FbND
EgpłȂ@\(֐͗pӂĂ邪C܂ĂȂC
  肵āCĝ)͂񂠂D
  XɒǉĂD
EQ[̉ʎʐ^ȒPɎBD(fWJŎBC摜荞ݗp
  vOg肷KvȂ) ͂ƂׂD
EG~[^łȂCułC\[XR[hJĂ̂ŁC
  RɃJX^}CY\D
E`摬x͒xCfobOړÎ߂Ȃ̂ŁCx𑬂邱Ƃ
  ܂lĂȂD(L̃fobOD悷)
EWonderWitch p̃vOCXŊyނ߂̂̂ł͂ȂD
  ܂CG~[VړIȂ̂ł͂ȂD
  ܂ŃfobOړÎ́D(|V[ŊJi߂)
  ]āCWonderWitch ł͕̓킷邱ƂCfobO
  o͂邱Ƃ̂₷D悵悤ȎꍇD

 3WonX

Ƃ肠CǂȂ̂Ă݂Ƃł傤DȐĺC
TvvORpCEsĂ݂܂傤D
ȉ̂悤ɂĂ݂ĂD

~>% tar xvzf wonx.tgz
()
~>% cd wonx

~/wonx>% make sample1
()
~/wonx>% ./sample1

EChEJāCWo͂ɃbZ[Wo͂܂D
Xy[XEo[ƁCI܂D

~/wonx>% make sample2
()
~/wonx>% ./sample2

J[\L[̏㉺ŁCLN^ړ܂D
Xy[XEo[ƁCI܂D

~/wonx>% more sample1.c
~/wonx>% more sample2.c

ŁCTvvÕXgĂ݂܂傤D

ɁCWonderWitch p̃Q[C"SpeedMac" RpCEsĂ݂܂D

~/wonx>% make smac
()
~/wonx>% cd smac
~/wonx/smac>% ./smac

EChEJāCWo͂ɃbZ[Wo͂܂D
 p ĉʕ` OFF ɂ܂D΂炭
(bZ[W̓eς) p čĂщʕ\ ON ɂƁC
smac ̃^Cgʂ\܂D
ŃXy[XāCɂ܂ p ŉʕ\ OFF ɂāC
΂炭(bZ[W̓eς) p ŉʕ\ ON ɂ܂D
ǂłH SpeedMac ̃Q[ʂ\Ăł傤H
J[\L[ňړCXy[XL[ŎˌłD
CL[͂̓L[͗p֐Ă΂ꂽƂLł͂Ȃ̂ŁC
L[͔܂Œ߂ɉĂD
p ĕpɂɕ` ON, OFF ؑւ̂́C`悪ɒx߁C
ON̂܂܂ƉʃNAƂɈُɎԂ邩łD

 WonX Tv

WonX ́CWonderWitch  display_control() Ƃ display_status() Ƃ
֐(BIOS ɑ΂VXeR[)Ƒւ̊֐Ă܂D
̊֐́CXɃEChEJāC WonderWitch ƌ݊̓
悤ɏĂ܂D

WonX  make ƁClibwonx.a ƂCuł܂D
ŁCWonderWitch p̃vOCUNIX  -lwonx ăRpCĂ΁C
WonderWitch  display_control() Ƃ̂ɁCWonX  display_control() 
NCX œ삷悤ɂȂCƂdg݂łD

 wb_t@Cɂ

WonX ́CUNIXVXeɂ libc gp܂D܂C/usr/include 
 include ܂D
܂CWonderWitch ɂ́Csys/types.h ȂǂƂwb_t@C܂D
āCWonderWitch ̃wb_t@C\̂܂ WonX ɈpƁC
WonX ̃wb_t@C UNIX ̃wb_t@CRtNg
\oĂ܂D
(Ƃ΁CWonderWitch  sys/types.h  /usr/include/sys/types 
 RtNgCȂǂł)
́CWonderWitchp̃AvP[VRpCƂɁCvӂłD
RpC܂ƂȂƂQ̌́CقƂǂ̂悤ȁC
uwb_t@C̃RtNg͌FvɋNĂ܂D

΍ƂāCWonX ł wonx_include ƂfBNg̉Ƀwb_t@C
i[Ă܂D({ sys ƂfBNgɂC
L̑΍̂߁Ĉ悤ɂ)
WonderWitch pvÓC
#include <sys/types.h>
̂悤ȕ́CׂāC
#include <wonx_include/types.h>
̂悤ɏCKv܂D
(stdio.h  stdlib.h ́CUNIX VXet̂̂gp̂ŁC
 ̂܂܂ł܂܂)
(CRtNgȂƂ΂̎MȂČł͂܂)
WonderWitch ̃vÓC#include <sys/*.h> ́Cׂ
#include <wonx_include/*.h> ɏCKvCƂƂłD
(܂Ƃ߂čs߂ perl XNvgYtĂ܂D
 sys2wonx.pl *.[ch] sƁCƏĂ܂)

܂CUNIXVXeɂẮC/usr/include/sys/types.h  ushort, ulong 
`Ă̂ƂȂ̂܂DāCRpC
ulong Qd`ĂƂꍇ܂D
̂̔ɂ́Cwonx_include ȉ̃t@C𒼐ڏC
ĂDwonx_include/system_configure.h C邱ƂɂC
ł悤ɂȂĂ܂D

 WonX ̃RpC

܂ WonX RpCāClibwonx.a 쐬Kv܂D
WonX ̃RpĆCȉ̎菇ōs܂D

1. WonX WJD

~>% tar xvzf wonx.tar.gz
~>% cd wonx
~/wonx>% 

2. WonX  make D

~/wonx>% make
gcc -c WWCharacter.c -O -I. -I/usr/X11R6/include
gcc -c WWColorMap.c -O -I. -I/usr/X11R6/include
...()...
gcc -c wonx.c -O -I. -I/usr/X11R6/include
ar ruc libwonx.a WWCharacter.o WWColorMap.o WWDisplay.o WWLCDPanel.o WWPalette.o WWScreen.o WWSprite.o WonXDisplay.o XDisplay.o disp.o text.o key.o system.o timer.o etc.o wonx.o
~/wonx>% ls lib*
libwonx.a
~/wonx>% 

܂łŁCCu̍쐬͏IłD

 WonderWitch pAvP[ṼRpC

ɁCWonX ̗p̗ƂāCٍ SpeedMac Ƃ WonderWitch p
Q[RpCĂ݂܂D
(SpeedMac ̓TvvOƂāCWonX ɕWYtĂ܂)
SpeedMac  WonderWitch p̃Q[vOłD{ WonderWitch 
gpăRpCCWonderSwan ŃQ[yނ߂̂̂łD
͗ƂāCSpeedMac  WonX NāCX œ삷 SpeedMac 
s`쐬Ă݂܂D

1. WJD

~/wonx>% unzip smac-b02.zip
...()...
~/wonx>% cd smac-b02
~/wonx/smac-b02>% 

2. wb_t@C libwonx.a Rs[D

~/wonx/smac-b02>% cp -R ../wonx_include .
~/wonx/smac-b02>% cp ../libwonx.a .
~/wonx/smac-b02>% 

3. makefile CD

~/wonx/smac-b02>% emacs makefile

ȉ̂悤ɏC܂D

Egcc ŃRpC悤ɏCD̂ƂɁCRpCIvVɁC
  -I. -L. -L/usr/X11R6/lib -lwonx -lX11 -lXt
  ǉD
  (KvȂC-g ǉ)
Emkfent ɂt@C̃Ro[gȂǂC폜D

C makefile YtĂ̂ŁCʓ|Ȃ͎ŕҏW邩ɁC

~/wonx/smac-b02>% mv makefile makefile.orig
~/wonx/smac-b02>% cp ../makefile_for_smac ./makefile

̂悤ɂăRs[ĂD

4. \[XCD

~/wonx/smac-b02>% emacs chara.c
~/wonx/smac-b02>% emacs dsp.c
... (t@CЂƂЂƂC)

\[X́C
#include <sys/disp.h>
#include <sys/key.h>
̂悤ȕC
#include "wonx_include/disp.h"
#include "wonx_include/key.h"
̂悤ɏC܂D

܂Ƃ߂Ă邽߂ perl XNvg (sys2wonx.pl) YtĂ̂ŁC
ʓ|Ȃ́C
~/wonx/smac-b02>% cp ../sys2wonx.pl .
~/wonx/smac-b02>% ./sys2wonx.pl *.[ch]
̂悤ɂĂD
(sys2wonx.pl ́CŎw肵t@ĈĂ܂̂Œ)

5. make D

~/wonx/smac-b02>% make
gcc -c chara.c -g -I.
gcc -c game.c -g -I.
...()...
gcc -c main.c -g -I.
gcc -g -o smac chara.o game.o man.o mansub.o mansub2.o map.o mapsub.o menu.o monster.o picture.o player.o smac.o stage.o dsp.o etc.o main.o -lwonx -lX11 -lXt -L. -L/usr/X11R6/lib
~/wonx/smac-b02>% ls smac
smac
~/wonx/smac-b02>% 

6. smac ND

~/wonx/smac-b02>% ./smac

ƁC܂łʓ|łĆC

~/wonx>% make smac

ƁC̍ƂSĂ悤ɂȂĂ܂D

 

smac NƁCEChEJ܂D܂C^[~iɂ́C
ȉ̃fobOp̏񂪕\܂D

EWonderWitch ̑֊֐Ă΂ƁCƖ߂l\܂D

܂ł́Cȉ̑삪s܂D

EJ[\L[CWonderSwan X1`X4{^ɑΉĂD
Ei,j,k,l L[CWonderSwan Y1`Y4{^ɑΉĂD
EXy[Xo[ƍVtgL[CA,B{^ɑΉĂD
EsL[CSTART{^ɑΉĂD
Ep ƁC\/\[hؑւD
  (\Ɖʂւ̕`sȂ)
EF1 ƁCLCDJ[}bṽf[^_vo͂D
EF2 ƁCpbg̃f[^_vo͂D
EF3 ƁCLN^[̃f[^_vo͂D
EF4 ƁCXvCg̃f[^_vo͂D

ftHgł͂Ȃɂ֐Ă΂邽тɉʂ̍ĕ`s߁C
ɒᑬłD
Ƃ΁Cȉ̂悤ȂƂĂƁCɒᑬɂȂ܂D

/* ʂ̃NA */
for (y = 0; y < 32; y++)
  for (x = 0; x < 32; x++) {
    screen_fill_char(0, x, y, 1, 1, 0x0000); /* Ŗĕ`悳 */
  }
}

̂悤ȏꍇ́Cp Ĕ\[hɂāC[vI
Ă p ĕ\[hɖ߂ĂD

F1  F2 ƁCf[^_vo͂̂łCWł͂̑ɂ
bZ[Wʂɏo͂Ă̂ŁCӂ F1 ł́C
Ƃ܂ɑʂ̃bZ[WɗĂ܂Ƃ܂D
̂悤ȂƂ́Cȉ̂悤ɂċN܂DƂ΃RpC
smac Ƃs`łĂ̂ȂC

> smac | grep -v call

LN^ԍ10Ԃ̃LN^̃f[^ꍇɂ́C
ȉ̂悤ɎsĂCF3 L[Ηǂł傤D

> smac | grep "character\[10\]"

WonX ́CbZ[Wo͂ۂɁCgrep ŃtB^Oł悤ɁC
Ȃ炸o̓bZ[W̐擪ɁCꐫ̂镶ǉĂ܂D
Ƃ΁C֐Ăяoɕ\郁bZ[Wɂ́C擪ɕK
"call" Ƃ񂪒ǉĂ܂DāCgrep -v call ʂ΁C
֐ĂяõbZ[WoȂȂCƂ悤ɂȂĂ܂D

Wł͑ʂ̃bZ[WoĂ̂ŁCgrep ܂g悤ɂĂD
́C

> smac | grep call > function_call.log

̂悤ɂāCOƂ̂Lł傤D

> smac > /dev/null

ƁC kterm Ȃǂɕ\ȂԂCɂȂ܂D

 Ȃ

ȉ̂̂ɂ͂܂ΉĂ܂DāCႦ΃TEh֘A
֐ĂяoĂCN܂D(̊֐ɂȂĂ)

ETEh
EJ[\\
Ȇς

 ӂȂ΂ȂȂ

WonX ́C{ WonderWitch pƂďꂽ(́C)vOC
UNIX ŃRpCEN邽߂̃CułCn[hEGA
G~[ĝł͂܂D
łCWonderWitch  UNIX C̃Mbv̂߁CCȂ
ȂȂƂ܂D WonX ̐Cd̖ƂłD

ȉ̂Ƃ́Cӎ邱ƂƁCꂢȃvOƂŁC
ȂłƎv܂D(rbg}bvȂǂŁCshort int ɂׂ
Ƃł́Cȗɂ short int ƖƂ)

܂CWonX ̖ړI͘_IȃoO𑁂iKŖƂɂ̂ŁĈւ
̂Ɗ؂ĎgĂD
WonX gCȂׂ@ˑ𖳂悤ɐS܂傤D
(Ƃ int ̃TCYɂ܂ˑȂ悤ɂ܂傤)

[RpC̖]

ɂ܂CRpCłȂƂQoC͂Ă
wb_t@C̃RtNgłDƂɁCWonderWitch  sys ȉ
t@CCN[hĂꍇ͒ӂĂD
ushort, ulong Ȃǂ́Csys/types.h Œ`ĂVXe邵C
łȂVXe܂D̂ւ́Cwonx_include/system_configure.h 
ĂD
(FreeBSD ł ushort ̂ݒ`Ă邪CRedHat Linux ł́C
 uchort, ulong Ƃɒ`Ă̂ŁĈ܂܂ƃRpC
 Qd`̃[jOo܂)

[int ^̈]

WonderWitch ł sizeof(short int) == sizeof(int) < sizeof(long int) łC
UNIX ł͂ӂ sizeof(short int) < sizeof(int) == sizeof(long int) łD
̂Ƃ́Cint ^PȂJE^ƂĎgp悤ȏꍇɂ͖
Ȃ܂񂪁Crbg}bv̊i[ꏊƂĎgp悤ȂƂɂ́C
ɂȂ܂D
ԖɂȂ₷̂́CLN^̃rbg}bvꍇłD
font_set_colordata()Ȃǂ́C16*8 oCg̃LN^f[^
short int ^̔zƂĈɎ܂DWonderWitch ł
sizeof(short int) == sizeof(int) Ȃ̂ŁCWonderWitch p̃vOł́C
LN^f[^ short int ƂɁCint ^̔zƂĒ`Ă܂
Ƃl܂D(R WonderWitch ȂΖ͖CUNIX 
sCLN^ɖȎȁX邾낤Ǝv)
̂悤ȏꍇɂ́CUNIX ŃRpCƂɂ́Cshort int 
CKv܂D

[GfBA̖]

WonderWitch  CPU  x86nłDSPARC ȂǂŎgpꍇɂ́C
GfBAɒӂKv܂D
font_set_colordata()Ȃǂ́Cshort int ^̔zŃLN^f[^󂯎
̂ŁCchar * Œ`LN^f[^ short int * ɃLXg
font_set_colordata()ɓnȂǂ̂ƂĂƁC摜ЂԂ
Ƃl܂D
i386 n PC-UNIX Ȃ΁C炭͖ł傤D

[荞݂̖]

WonderWitch ɂ̓^C}荞݂܂CWonX ͔̓ɒx߁C
WonderWitch ̎ԒPʂ̂܂ UNIX ɎĂC荞݂
ςȂɂȂĂ܂܂Dă^C}荞݂̎ԒPʂ́C
WonderWitch Ȃ傫߂ɂĂ܂D
́Cwonx_configure.h Œł܂D
荞݃nh̒ŁCɎԂ̂ʕ`ȂǂĂ
ꍇɂ́C荞݂̎ԒPʂ傫ĂDłȂƁCnh
߂uԂɂ܂nhĂ΂āCSRsɐi܂ȂCƂƂ
Ȃ蓾܂D

[L[͂ɂ]

L[͂́CL[͗p֐Ă΂ꂽƂ̂݊m̂ŁC߂ɉĂȂ
ȂƂ܂D
ȂƂĂȂǂ̂łȂCP𒷂mɉ悤
ĂD

[MS-DOS `t@C̈]

MS-DOS `t@ĆCs̉sR[h UNIX ̃eLXgt@C
قȂ̂ŁCӂĂD*.[ch] t@C̏ꍇ͖薳̂łC
makefile ͒ӂĂD
(UNIX ̃eLXgt@Cł́Cs \n łCMS-DOS ł \r\n ł)
Ⴆ΁Cmakefile ɁC

gcc -g -o smac $(OBJS) -L. -L/usr/X11R6/lib -lwonx -lX11 -lXt

̂悤ȍsƂāCꂪ MS-DOS ̃eLXg`̃t@CƁC
-lXt ̂Ƃɗ]ȉsR[h(\r)tĂ܂߁CUNIX  make
ĂCu-lXt ɑ郉CuvƓ{Ă܂܂D
(Ct@C emacs  less ȂǂŎQƂĂCsR[h͕\Ȃ
 ߁C킩ɂ)
܂C

gcc -g -o smac $(OBJS) -lwonx -lX11 -lXt -L. -L/usr/X11R6/lib

̂悤ɂĂƁC/usr/X11R6/lib w肵Ȃ̂ɁCۂɂ
/usr/X11R6/lib\r ƂfBNgw肳ꂽƂɂȂĂ܂C
-lX11, -lXt ̌Ɏs܂D

R[hɊւĂCƂ܂DUNIX ł̊R[h EUC Ȃ̂ŁC
\[XR[h SJIS ̊ĂƁC܂RpCłȂC
make ܂삵ȂCRpCłĂvÔ
듮삵Ă܂CɋCÂɂȂĂ܂\܂D
makefile \[XR[h͕KC
> cat makefile | qkc -I -O -e -u > makefile.tmp
> mv makefile.tmp makefile
ȂǂʂāCUNIX̃eLXgt@Cɕϊ܂傤D

[t@C̖]

MS-DOS ł̓t@Cׂ͂đ啶łCgcc ł *.C ̂悤
t@C̃t@C C++ ŏĂƔf邽߁C
SAMPLE.C ̂悤ȖÕt@CRpCƁC܂NłȂ
Ƃ܂D
̂悤ȏꍇ́Csample.c Ƀl[ăRpCĂD

[VAʐMɂ]

VAʐM̎Mp֐(comm_receive_char())́Cfgetc(stdin) 
͕擾āC\n  \r ɕϊĕԂ܂D́CʓIȒʐM
[G~[g邽߂łD

܂Ccomm_send_char() ɓńCWo͂ɏo͂܂C
^usR[h́C"\t" "\n" ̂悤ȕɕϊďo͂܂D
Yt sout2str.pl ʂƂɂCVAʐMւ̏o͂̂ݒoāC
[ւ̏o͂̃C[Wŕ\邱Ƃł܂D

[\[X WonX ˑ̂肩]

WonderWitch p̃vOJĂۂɁCWonX ̏ꍇ̂ݑgݍ݂āC
WonderSwan ŎsƂɂ͎菜R[hƂ܂D
(Ⴆ΁CfobȌo͂̂߂ printf() ꍇȂ)
̂悤ȂƂ̂߂ɁCwonx_include/types.h 
#define _WONX_
Ă̂ŁĈ悤ȏꏊ #ifdef _WONX_ łĂD

[_vf[^̎肩]

\[XɁC

#include "WonX.h"
#include "WonXDisplay.h"
#include "WWDisplay.h"
#include "WWColorMap.h"
#include "WWPalette.h"
#include "WWCharacter.h"
#include "WWSprite.h"

int i;
WWDisplay ww_display;

ww_display = WonXDisplay_GetWWDisplay(WonX_GetWonXDisplay());

WWColorMap_PrintData(WWDisplay_GetColorMap(ww_display), stdout);

for (i = 0; i < 16; i++)
  WWPalette_PrintData(WWDisplay_GetPalette(ww_display, i), stdout);

for (i = 0; i < 512; i++)
  WWCharacter_PrintData(WWDisplay_GetCharacter(ww_display, i), stdout);

for (i = 0; i < 128; i++)
  WWSprite_PrintData(WWDisplay_GetSprite(ww_display, i), stdout);

̂悤ȃR[h}邱ƂɂCCӂ̏ꏊŃLN^pbg
_vf[^o͂邱Ƃł܂D

vOɁCsȏꏊC

#ifdef _WONX_
ww_display = WonXDisplay_GetWWDisplay(WonX_GetWonXDisplay());
printf("Before setting:\n");
WWSprite_PrintData(WWDisplay_GetSprite(ww_display, 0), stdout);
#endif /* _WONX_ */

/* ɃXvCg̐ݒɂĂ̕sȃR[h */

#ifdef _WONX_
printf("After setting:\n");
WWSprite_PrintData(WWDisplay_GetSprite(ww_display, 0), stdout);
#endif /* _WONX_ */

̂悤ɂĕsȃR[h̑OŃ_vf[^ƁCfobO
𗧂ł傤D

 

WonX ́CȎ啔RԂ̒ʋΓdԂ̒ Libretto ŏC
udԃ\tgEGAvłDGPLŔzz܂D
҂ɂẮCYt OMAKE.jpn QƂĂD

O̘Ã[AhX́C
sakai@seki.ee.kagu.sut.ac.jp
hsakai@pfu.co.jp
łD܂C{\tgEGA̍ŐVłC
http://www.seki.ee.kagu.sut.ac.jp/~sakai/WonderWitch/index.html
ŔzzĂ܂D
ȉ̓~[TCgłD
http://hp.vector.co.jp/authors/VA014157/index.html
http://www.people.or.jp/~hsakai/index.html
~[TCǵC䂪CƂɃAbvf[ĝŁCɍŐVC
Ƃ킯ł͂܂D܂ŃobNAbvpłD

 ̃t@C͂܂
