WonX - WonderWitch on X.

 ۤä

ո˾ʤɴޤޤɤɤ󤻤
Х䥢ɥХСԤκ湰μޤǡɤɤ᡼뤯
ɥ쥹ϡ
sakai@seki.ee.kagu.sut.ac.jp
hsakai@pfu.co.jp
Ǥ
(ֻ񤯤Ȥϸ¤ʤ˾ȿǤȤ¤ޤΤ
 ϤƼϤ)
ޤε¤ꡤåץǡȤϿԤäƤޤ
http://www.seki.ee.kagu.sut.ac.jp/~sakai/WonderWitch/index.html
ǡƤޤ

 Ϥ

WonX ϡWonderWitch ѤΥץ X ץꥱȤƥѥ뤹
Ρ饤֥Ǥʲħޤ

C٥ǸߴǽäƤΤǡWonderWitch ѤΥץ
  UNIXǤΤޤޥѥǤ롥(-lwonx ǥѥ뤹)
UNIXǥǥХåѤƥǥХåǤ褦ˤʤ롥(!)
饯ǡѥåȥǡΥ׵ǽ롥
ʰͤ䡤ѥåȤ䥭饯ʤǻѤʤɤ
  å顼Ϥ(褦ˤ)顼å롥
ѤǤʤǽ(ؿѰդƤ뤬ޤƤʤäꡤ
  äꤷơȤΤ)Ϥ󤢤롥
  ɲäƤĤꡥ
β̼̿ñ˻롥(ǥǻäꡤѤ
  ץȤäꤹɬפ̵ʤ) ϤȤ٤ꡥ
ߥ졼Ǥʤ饤֥ǤꡤɸƤΤǡ
  ͳ˥ޥǽ
®٤٤ǥХåŪΤʤΤǡ®٤®뤳Ȥ
  ޤͤƤʤ(嵭ΥǥХåͥ褹)
WonderWitch ѤΥץXǳڤिΤΤǤϤʤ
  ޤߥ졼ŪʤΤǤϤʤ
  ޤǥǥХåŪΤΡ(ݥꥷǳȯʤ)
  äơWonderWitch Ǥư魯뤳Ȥ⡤ǥХå
  Ϥ뤳Ȥ¤Τ䤹ͥ褷褦ʼ򤹤礬롥

 ɬפʤ

WonX ǤϡʲΤΤѤƤޤ

perl
  (WonderWitchѥ  WonXѥɤѴ perl ץȤ
   źդƤΤǡWonderWitchѥɤ˴äƤΤʤС
   ܸ perl ˾ޤ)
  źդ perl ץȤϡ٤ #!/usr/local/bin/perl ˤʤäƤΤǡ
  ܸ perl ̤ΤȤˤФˤϡƤѤƤ
  ܸ perl ̵СޤդĤ perl Ǥ⤿֤פǤ礦
qkc
  ѴԥѴɬס
  (nkf Ǥ٤Ĥˤɡqkc ȲԥɤѴƤΤǡ
   ʸǤ qkc ѤƤޤ)
  qkc ϡʲΥȤǤޤ
  http://hp.vector.co.jp/authors/VA000501/index.html
  qkc ˤϡMS-DOS ǡWindows ǡUNIX ǤʤɤޤΤǡ
  UNIX (qkcc100.zip)ꤷƤ
  ѥϡmake ʤΤǤȤäƤñǤ
unzip
  źդ smac-b02.zip, wwterm-b05.zip हΤɬס

Υޥ˥奢ϡʾΤΤ٤ƥ󥹥ȡ뤵Ƥ뤳ȤȤ
ʤޤɬפʤХ󥹥ȡ뤹뤫¾Υץꥱ
ѤƤ

 3ʬWonX

ȤꤢɤʤΤƤߤȤǤ礦ʿͤϡ
ץץ򥳥ѥ롦¹ԤƤߤޤ礦
ʲΤ褦ˤƤߤƤ

~>% tar xvzf wonx-x.x.tar.gz
(ά)
~>% cd wonx

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

ɥơɸϤ˥åϤޤ
ڡС򲡤ȡλޤ

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

륭ξ岼ǡ饯ưޤ
ڡС򲡤ȡλޤ

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

ǡץץΥꥹȤ򸫤Ƥߤޤ礦

ˡWonderWitch ѤΥࡤ"SpeedMac" 򥳥ѥ롦¹ԤƤߤޤ

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

ɥơɸϤ˥åϤޤ
ä F10 򲡤Ʋ OFF ˤޤФ餯
(åƤѤä) F10 򲡤ƺƤӲɽ ON ˤȡ
smac Υȥ̤ɽޤ
ǥڡ򲡤ơˤޤ F10 ǲɽ OFF ˤơ
Ф餯(åƤѤä) F10 ǲɽ ON ˤޤ
ɤǤ SpeedMac Υ̤ɽƤǤ礦
륭ǰưڡǼͷǤ
ϤϥѴؿƤФ줿ȤͭǤϤʤΤǡ
ȿޤĹ˲Ƥ
F10 򲡤ˤ ON, OFF ؤΤϡ褬٤ᡤ
ONΤޤޤȲ̥ꥢȤ˰۾˻֤뤫Ǥ

ǸˡWonderWitch Ѥüߥ졼 "WWTerm" 򥳥ѥ롦¹
Ƥߤޤ

~/wonx>% make wwterm
(ά)
~/wonx>% cd wwterm
~/wonx/wwterm>% ./terminal

 10ʬWonX

ˡʤˤʤä WonderWitch ѤΥץ WonX Ȥä
ѥ롦󥯤ơX Window System ư褦ʼ¹Է
äƤߤޤ礦

ޤWonX Ÿơmake Ƥlibwonx.a Ǥޤ

~>% tar xvzf wonx-x.x.tar.gz
(ά)
~>% cd wonx
~/wonx>% make
(ά)
~/wonx>% ls libwonx.a
libwonx.a
~/wonx>% 

ˡlibwonx.a ȡwonx_include ǥ쥯ȥȡ
challsrc.sh, filters.pl, sys2wonx.pl, int2sint.pl 򤢤ʤκäץ
ǥ쥯ȥ(ǤȤơyoursample Ȥޤ)˥ԡޤ

~/wonx>% cp -R libwonx.a wonx_include ../yoursample
~/wonx>% cp challsrc.sh filters.pl sys2wonx.pl int2sint.pl ../yoursample
~/wonx>% cd ../yoursample
~/yoursample>% 

*.C Ȥե̾Υե뤬ä顤*.c ѹޤ
(*.C  C++ ΥץȻפƤޤΤ)

~/yoursample>% mv SAMPLE2.C sample2.c

ʤκäץΤ٤ƤΥեФơʲΤȤԤޤ
MS-DOS ƥȷ UNIX ΥƥȷѴ롥
  (Ĥޤꡤԥɤ \r\n  \n Ѵơɤ SJIS 
   EUC Ѵޤ)
ץ #include <sys/disp.h> Τ褦ʤΤ
  #include "wonx_include/disp.h" ѹ롥(sys2wonx.pl ̤)
ǥեȤ int short int Ѵ롥(int2sint.pl ̤)
Υե륿ޤȤ̤Ƥ filters.pl ȤץȤ
źդƤΤǡʲΤ褦ˤơ٤ƤΥեФơ
ɬפʥե륿̤Ƥ

~/yoursample>% ./filters.pl "qkc -e -u" ./sys2wonx.pl ./int2sint.pl -f *.[ch] [Mm]akefile* MAKEFILE*

⤷ϡʲΤ褦ˤƤ褤Ǥ

~/yoursample>% ./challsrc.sh *.[ch] [Mm]akefile* MAKEFILE*

(! filters.pl  challsrc.sh ϡեΤ񤭴ƤޤΤǡ
 ѹȺ褦ʥեɬХååפƤ)

makefile ʲΤ褦˽롥
ѥˤ gcc Ѥ롥
֥ȥե *.obj  *.o ѹ
ѥե饰 -I. -L. -L/usr/X11R6/lib -lwonx -lX11 -lXt ɲá
mkfent ʤɤˤ *.fx եκʤɤä顤ȥȤ롥

~/yoursample>% emacs makefile

餯makefile νܤݤǤ(ݤʤΤϡWonX ޤ
ŬѤǤʤäȤΥνǤ)
źդ makefile_for_smac  makefile_for_wwterm 򻲹ͤˤơmakefile 
Ƥ

Ǹˡmake 򤷤ޤ

~/yoursample>% make

ޤСǥѥ뤬̤äơ¹ԤǤޤ

~/yoursample>% ./sample

 WonX 

WonX ϡWonderWitch  display_control() Ȥ display_status() Ȥä
ؿ(BIOS Ф륷ƥॳ)ؤδؿäƤޤ
δؿϡX˥ɥ򳫤ơ WonderWitch ȸߴư
褦˽񤤤Ƥޤ

WonX  make ȡlibwonx.a Ȥ饤֥꤬Ǥޤ
ǡWonderWitch ѤΥץUNIX  -lwonx ƥѥ뤷ƤС
WonderWitch  display_control() ȤΤˡWonX  display_control() 
󥯤졤X ư褦ˤʤ롤ȤȤߤǤ

 إåեˤĤ

WonX ϡUNIXƥˤ libc ѤޤĤޤꡤ/usr/include 
 include ޤ
ޤWonderWitch ˤϡsys/types.h ʤɤȤäإåե뤬ޤ
äơWonderWitch Υإåե빽򤽤Τޤ WonX ˰Ѥȡ
WonX Υإåե UNIX Υإåե뤬եꥯȤ
ǽФƤޤ
(ȤСWonderWitch  sys/types.h  /usr/include/sys/types 
 եꥯȤ롤ʤɤǤ)
ϡWonderWitchѤΥץꥱ򥳥ѥ뤹ȤˡդǤ
ѥ뤬ޤȤʤȤ㳲θϡۤȤɤΤ褦ʡ
֥إåեΥեꥯȤ⤷ϸǧפ˵Ƥޤ

кȤơWonX Ǥ wonx_include Ȥǥ쥯ȥβ˥إåե
ǼƤޤ( sys Ȥǥ쥯ȥˤä
嵭кΤᡤΤ褦ˤ)
WonderWitch ѥץΡ
#include <sys/types.h>
Τ褦ʬϡ٤ơ
#include <wonx_include/types.h>
Τ褦˽ɬפޤ
(stdio.h  stdlib.h ϡUNIX ƥ°ΤΤѤΤǡ
 ΤޤޤǤޤޤ)
(եꥯȤʤȤФμʤ顤θ¤ǤϤޤ)
WonderWitch ΥץΡ#include <sys/*.h> ϡ٤
#include <wonx_include/*.h> ˽ɬפ롤ȤȤǤ
(ޤȤƹԤ sys2wonx.pl Ȥ perl ץȤźդ
 ޤ./filters.pl ./sys2wonx.pl -f *.[ch] ¹Ԥȡä
 񤭴Ƥޤ)

ޤUNIXƥˤäƤϡ/usr/include/sys/types.h  ushort, ulong 
ƤΤȤʤΤޤäơѥ
ulong ƤȤ礬ޤ
ΤĴˤϡwonx_include ʲΥեľܽ
ĴƤwonx_include/system_configure.h 뤳Ȥˤꡤ
ĴǤ褦ˤʤäƤޤ

 WonX Υѥ

ޤ WonX 򥳥ѥ뤷ơlibwonx.a ɬפޤ
WonX ΥѥϡʲμǹԤޤ

1. WonX Ÿ롥

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

2. WonX  make 롥

~/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>% 

ޤǤǡ饤֥κϽǤ

 WonderWitch ѥץꥱΥѥ

ˡWonX ѤȤơۺ SpeedMac Ȥ WonderWitch Ѥ
򥳥ѥ뤷Ƥߤޤ
(SpeedMac ϥץץȤơWonX ɸźդƤޤ)
SpeedMac  WonderWitch ѤΥץǤ WonderWitch 
Ѥƥѥ뤷WonderSwan ǥڤिΤΤǤ
ȤơSpeedMac  WonX 󥯤ơX ư SpeedMac 
¹ԷƤߤޤ

1. Ÿ롥

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

2. إåե libwonx.a 򥳥ԡ롥

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

3. 롥

~/wonx/smac-b02>% emacs chara.c
~/wonx/smac-b02>% emacs dsp.c
... (եҤȤĤҤȤĽ)

MS-DOS ΥեˤʤäƤեϡUNIXΥƥȷ
ѴޤŪˤϡʲѴ򤷤ޤ
ԥɤ \r\n  \n ˤ롥
ɤ SJIS  EUC ˤ롥
qkc Ȥץꥱǡ嵭ΤȤ٤˹ԤȤǤޤ
ݤʤϡʲΤ褦ˤСޤȤѴޤ
~/wonx/smac-b02>% ./filters.pl "qkc -e -u" -f *.[ch]
qkc ̵ͤ... nkf ȤƤȤ˻ȤäѴƤ

ޤΡ
#include <sys/disp.h>
#include <sys/key.h>
Τ褦ʬ
#include "wonx_include/disp.h"
#include "wonx_include/key.h"
Τ褦˽ޤ

ޤȤƤ뤿 perl ץ (sys2wonx.pl) źդƤΤǡ
ݤʤϡ
~/wonx/smac-b02>% cp ../filters.pl ../sys2wonx.pl .
~/wonx/smac-b02>% ./filters.pl ./sys2wonx.pl -f *.[ch]
Τ褦ˤƤ
(filters.pl ϡǻꤷե뼫Τ񤭴ƤޤΤ)

ˡWonderWitch Ǥ sizeof(int) == sizeof(short int) Ǥ
UNIX ǤϤդĤ sizeof(int) == sizeof(long int) ʤΤǡ
饯Υӥåȥޥåפʤɡint ΥХȥ˰¸ʬ
int ѤƤˤϡshort int ʤɤޤ

ޤȤƤ뤿 perl ץ (int2sint.pl) źդƤΤǡ
ݤʤϡ
~/wonx/smac-b02>% cp ../int2sint.pl .
~/wonx/smac-b02>% ./filters.pl ./int2sint.pl -f *.[ch]
Τ褦ˤƤ
(filters.pl ϡǻꤷե뼫Τ񤭴ƤޤΤ)

ܸ perl  EUC ɤǤʤưʤΤǡ
sys2wonx.pl  int2sint.pl Ѥˤϡޤ qkc Ǵɤ
EUC ѴƤ顤sys2wonx.pl  int2sint.pl ѤƤ

4. makefile 롥

~/wonx/smac-b02>% emacs makefile

ʲΤ褦˽ޤ

ɤ EUC ˡԥɤ \r\n  \n Ѵ롥
  (ԥɤѴʤ make ưޤqkc ̤
   Ǥ礦)
gcc ǥѥ򤹤褦˽롥ΤȤˡѥ륪ץˡ
  -I. -L. -L/usr/X11R6/lib -lwonx -lX11 -lXt
  ɲä롥
  (ɬפʤ顤-g ɲä)
mkfent ˤեΥСȤʤɤä顤롥

 makefile źդƤΤǡݤʤϼԽ뤫ˡ

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

Τ褦ˤƥԡƤ

5. make 롥

~/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 ư롥

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

ȡޤǤäݤǤ¤ϡ

~/wonx>% make smac

ȡκȤäƤ褦ˤʤäƤޤ

 

smac ưȡɥޤޤߥʥˤϡ
ʲΥǥХåѤξɽޤ

WonderWitch شؿƤФȡͤɽޤ

ޤǤϡʲԤޤ

륭WonderSwan X1X4ܥбƤ롥
i,j,k,l WonderSwan Y1Y4ܥбƤ롥
ڡСȺեȥA,BܥбƤ롥
sSTARTܥбƤ롥
F1 򲡤ȡLCD顼ޥåפΥǡ׽Ϥ롥
F2 򲡤ȡѥåȤΥǡ׽Ϥ롥
F3 򲡤ȡ饯Υǡ׽Ϥ롥
F4 򲡤ȡץ饤ȤΥǡ׽Ϥ롥
F10 򲡤ȡɽ/ɽ⡼ɤؤ롥
  (ɽȲ̤ؤԤʤ®)
F11 10ôߡ(̼̿ȤȤʤɤѤǤ)
  (F11û˲ƤĹ˲ȡʤʤ褦Ǥ)
q ⤷ Ctrl-c ⤷ F12 Ƕλ
Ctrl-i ǥ󲽡

ǥեȤǤϤʤˤؿƤФ뤿Ӥ˲̤κԤᡤ
®Ǥ
ȤСʲΤ褦ʤȤäƤȡ®ˤʤޤ

/* ̤Υꥢ */
for (y = 0; y < 32; y++)
  for (x = 0; x < 32; x++) {
    screen_fill_char(0, x, y, 1, 1, 0); /* 褵 */
  }
}

Τ褦ʾϡF10 򲡤ɽ⡼ɤˤơ롼׽ä
Ƥ F10 򲡤ɽ⡼ɤᤷƤ

F1  F2 򲡤ȡǡ׽ϤΤǤɸǤϤ¾ˤ
å̤˽ϤƤΤǡդĤ F1 򲡤Ǥϡ
äȤޤ̤ΥåήƤޤȤޤ
Τ褦ʤȤϡʲΤ褦ˤƵưޤȤХѥ뤷
smac Ȥ¹ԷǤƤΤʤ顤

> smac | grep -v call

⤷⥭饯ֹ10֤Υ饯Υǡˤϡ
ʲΤ褦˼¹ԤƤ顤F3 򲡤ɤǤ礦

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

WonX ϡåϤݤˡgrep ǥե륿󥰤Ǥ褦ˡ
ʤ餺ϥåƬˡΤʸɲäƤޤ
ȤСؿƤӽФɽåˤϡƬɬ
"call" ȤʸɲäƤޤäơgrep -v call ̤С
ؿƤӽФΥåäФʤʤ롤Ȥ褦ˤʤäƤޤ

ɸǤ̤ΥåФƤΤǡgrep 򤦤ޤȤ褦ˤƤ
⤷ϡ

> smac | grep call > function_call.log

Τ褦ˤơȤΤͭǤ礦

> smac > /dev/null

ȡʸ kterm ʤɤɽʤ֤󡤹®ˤʤޤ

 ­ʤ

ʲΤΤˤϤޤбƤޤ󡥤äơ㤨ХɴϢ
ؿƤӽФƤ⡤ⵯޤ(δؿˤʤäƤ)


ץ
쥯ȥ饤֥

 դʤФʤʤ

WonX ϡ WonderWitch ѤȤƽ񤫤줿(⤷ϡ񤫤)ץ
UNIX ǥѥ롦󥯤뤿Υ饤֥Ǥꡤϡɥ
ߥ졼ȤΤǤϤޤ
Ǥ顤WonderWitch  UNIX CΥåפΤᡤĤʤ
ʤʤȤĤޤ WonX 塤̵ȤǤ

ʲΤȤϡռ뤳Ȥȡ줤ʥץ񤯤Ȥǡ
ʤǤȻפޤ(ӥåȥޥåʤɤǡshort int ˤ٤
ȤǤϡάˤ short int Ȥ)

ޤWonX ŪŪʥХᤤʳ̵Ȥȡ
ŪХȥϡɤߤΥХڤΥƸ򶹤뤳Ȥȡ
椬ż֤Ǥ WonderWitch Υץ񤱤褦ˤ뤳ȤˤΤǡ
ΤؤϤΤȳڤäƻȤäƤ
WonX Ȥ¤ꡤʤ٤¸̵褦˿ޤ礦
(Ȥ int Υˤޤ¸ʤ褦ˤޤ礦)

[ѥ]

ˤ񤭤ޤѥǤʤȤ㳲Ф顤ϤƤ
إåեΥեꥯȤǤȤˡWonderWitch  sys ʲ
ե򥤥󥯥롼ɤƤդƤ
ushort, ulong ʤɤϡsys/types.h Ƥ륷ƥ⤢뤷
Ǥʤƥ⤢ޤΤؤϡwonx_include/system_configure.h 
ĴƤ
(FreeBSD Ǥ ushort ΤƤ뤬RedHat Linux Ǥϡ
 uchort, ulong ȤƤΤǡΤޤޤȥѥ
 Υ˥󥰤Фޤ)

[int ΰ]

WonderWitch Ǥ sizeof(short int) == sizeof(int) < sizeof(long int) Ǥ
UNIX ǤϤդĤ sizeof(short int) < sizeof(int) == sizeof(long int) Ǥ
ΤȤϡint ñʤ륫󥿤ȤƻѤ褦ʾˤ
ʤޤ󤬡ӥåȥޥåפγǼȤƻѤ褦ʤȤˤϡ
ˤʤޤ
ˤʤ䤹Τϡ饯Υӥåȥޥåפ򰷤Ǥ
(bmpcnv ѤơӥåȥޥåץǡνϤ unsigned int bitmap = {
 Τ褦ˤʤäƤʤ)
font_set_colordata()ʤɤϡ16*8 ХȤΥ饯ǡ
short int Ȥư˻ޤWonderWitch Ǥ
sizeof(short int) == sizeof(int) ʤΤǡWonderWitch ѤΥץǤϡ
饯ǡ short int Ȥˡint ȤƤޤ
Ȥͤޤ( WonderWitch ʤ̵UNIX 
¹Ԥ顤饯̯ʼʡȻפ)
Τ褦ʾˤϡUNIX ǥѥ뤹Ȥˤϡѥ饪ץ
ǥեȤ int  short int ˤʤ褦˻ꤹ뤫⤷ϥ
int  short int ˤ˽ɬפޤi386  gcc Ѥ
ˤϡΤ褦ʥѥ饪ץ̵Τǡ˥
Ȥˤʤޤ
int2sint.pl ̤ȡƤʤ int Ϥ٤ short int Ѵޤ
⤷⤢ʤ int2sint.pl ѤǤʤСǽƤդĤ
饯ΥӥåȥޥåץǡȤ򰷤ʬΤߤнʬǤ礦

ѥΥ˥󥰤ȳǧƤޤѥˤ
-Wall ץĤޤ礦
wonx-2.1 ϡ饯ΥӥåȥޥåϢ(font_set_colordata()ʤ)
δؿΰϡŬڤʷΥݥ󥿤˽Τǡѥ餬˥󥰤
ФƤ顤ӥåȥޥåץǡη⤷ޤ

ñʤ륫󥿤ե饰ȤƻѤƤ褦 int ϡ¿ξ
short int Ǥ long int ǤưѤޤ󤬡ȤȤƤ⡤
WonX Ѥơgcc  -Wall ץĤƥѥ뤹ȡ
WonderWitch ưȤŪʥХ(short int ξ岼¤ˤޤĤ
Хʤ)ȯǤ뤳ȤΤǡʤ٤ʤ int2sint.pl  int 
ä short int ˤƤޤȤ򤪤ᤷޤ

[ǥ]

WonderWitch  CPU  x86ϤǤSPARC ʤɤǻѤˤϡ
ǥդɬפޤ
font_set_colordata()ʤɤϡshort int ǥ饯ǡ
Τǡunsigned char * 饯ǡ short int * ˥㥹Ȥ
font_set_colordata()ϤʤɤΤȤ򤷤ƤȡҤä֤
Ȥͤޤ
i386 ϤΤ PC-UNIX ʤС餯̵Ǥ礦
WonX-2.1 顤饯ǡ˴ؤƤϡϥǥ˰¸ʤ褦
ޤi386  SPARC ǥǥ˰¸ʤȤưǧ
ƤޤǤ⡤饯ǡ unsigned char * ơ
ӥåȥޥåɤ߹Ѥδؿ˥饯ǡϤȤ short int * 
㥹ȤϤ褦ʽ򤷤Ƥȡ¸Ƥޤޤ

饯ǡΥӥåȥޥåɤ߹ѤδؿˤϡŬڤʷΥǡ
Ϥ褦ˤƤshort int * Ϥ٤Ȥˡunsigned char * 
ϤꤹȡΤ褦ʥХθˤʤǽޤŬڤ
ݥ󥿤ϤƤˤϡѥ餬˥󥰤ФΤǡ
ѥΥ˥󥰤˽ʬդƤ

[޳ߤ]

WonderWitch ˤϥ޳ߤޤWonX ư٤ᡤ
WonderWitch λñ̤򤽤Τޤ UNIX ˻äƤ顤ߤ
äѤʤˤʤäƤޤޤäƥ޳ߤλñ̤ϡ
WonderWitch ⤫ʤ礭ˤƤޤ
ϡwonx_configure.h ĴǤޤ
ߥϥɥǡ˻֤Τʤɤ򤷤Ƥ
ˤϡߤλñ̤礭ƤǤʤȡϥɥ餫
äִ֤ˤޤϥɥ餬ƤФơ¹Ԥ˿ʤޤʤȤȤ
ʤޤ

[ϳߡꥢߤ]

(ޤ뤳ȤϤʤȻפޤ)ϳߤȥϸѴؿ
Ʊ롼ʻѤȡߤΤȤꤳܤ䤹ʤǽ
ޤ
ĤޤꡤʲΤ褦ʥץ񤯤ȤˤդƤ

void far key_handler()
{
  /* Ϥν */
}

static intvector_t key_intvector;
static intvector_t key_last_intvector;

main()
{
  key_intvector.callback = (void (near *)())FP_OFF(key_handler);
  key_intvector.cs = _asm_inline("\tmov\tax,cs");
  key_intvector.ds = _asm_inline("\tmov\tax,ds");

  sys_interrupt_set_hook(SYS_INT_KEY, &key_intvector, &key_last_intvector);

  while (1) {
    /*
     * ϳԤξ֤ʤΤˡkey_press_check() ǥϾ֤
     * Ԥ
     */
    key = key_press_check();
    /* ʤŬʽ򤳤ΤؤǹԤäꤹ */
  }
}

ϳߤԤʤ顤key_press_check() ǥϾ֤
̸Ĥ˸롤ȤȤȡߤΤȤꤳܤǽ
ޤ
(ϳߤˤäƸƤӽФߥϥɥ
 key_press_check() Ѥ뤳Ȥꤢޤ(Ǥʤȳߤ
 ̵̣ʤäƤޤ) ޤǡƱ롼ʻѤ꤬
 ȯǽ롤ȤȤǤ)

Ǥ⡤ʤؤʥץढޤ񤯤̵ʤȻפäƤޤ
(ľȤȡȤƤ⤿ؤʤΤ)
ΤȤϡꥢߤ˴ؤƤ⡤ƱͤǤ

[ϤˤĤ]

ϤϡѴؿƤФ줿ȤΤߴΤΤǡĹ˲Ƥʤ
ȿʤȤޤ
ȿʤȤäƤʤɤⲡΤǤʤĹμ¤˲褦
Ƥ

[MS-DOS եΰ]

MS-DOS եϡβԥɤ UNIX Υƥȥե
ۤʤΤǡդƤ*.[ch] եξ̵ΤǤ
makefile դƤ
(UNIX ΥƥȥեǤϡԤ \n ǤMS-DOS Ǥ \r\n Ǥ)
㤨Сmakefile ˡ

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

Τ褦ʹԤäȤơ줬 MS-DOS ΥƥȷΥեȡ
-lXt ΤȤ;ʬʲԥ(\r)ղäƤޤᡤUNIX  make
Ƥ⡤-lXt 饤̵֥꤬פܤƤޤޤ
(ºݤˤϥѥϡ-lXt\r ȻפäƤޤäơlibXt\r.a Ȥ饤֥
 õƤޤΤǤ)
(⡤ե emacs  less ʤɤǻȤƤ⡤ԥɤɽʤ
 ᡤ狼ˤ)
ޤ

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

Τ褦ˤƤȡ/usr/X11R6/lib ꤷĤʤΤˡºݤˤ
/usr/X11R6/lib\r Ȥǥ쥯ȥ꤬ꤵ줿ȤˤʤäƤޤ
-lX11, -lXt θ˼Ԥޤ

ɤ˴ؤƤ⡤ƱȤޤUNIX Ǥδɤ EUC ʤΤǡ
 SJIS δäƤȡޤѥǤʤäꡤ
make ޤưʤäꡤѥǤƤץ༫Τ
ưƤޤ⸶˵ŤˤʤäƤޤǽޤ
makefile 䥽ɤɬ
> cat makefile | qkc -e -u > makefile.tmp
> mv makefile.tmp makefile
ʤɤ̤ơUNIXΥƥȥեѴޤ礦

[ե̾]

MS-DOS Ǥϥե̾Ϥ٤ʸǤgcc Ǥ *.C Τ褦
ե̾Υե C++ ǽ񤫤ƤȽǤ뤿ᡤ
SAMPLE.C Τ褦̾Υե򥳥ѥ뤹ȡޤ󥯤Ǥʤ
Ȥޤ
Τ褦ʾϡsample.c ˥͡षƥѥ뤷Ƥ

[ꥢ̿ˤĤ]

ꥢ̿μѴؿ(comm_receive_char())ϡfgetc(stdin) 
ʸơ\n  \r Ѵ֤ޤϡŪ̿
ü򥨥ߥ졼Ȥ뤿Ǥ

ޤcomm_send_char() ϤʸϡɸϤ˽Ϥޤ
֤ԥɤϡ"\t" "\n" Τ褦ʸѴƽϤޤ
źդ sout2str.pl ̤Ȥˤꡤꥢ̿ؤνϤΤФơ
üؤνϤΥ᡼ɽ뤳ȤǤޤ

 ߤˤĤ

ϳߤ䥷ꥢߤʤɤϡUNIXΥ顼ॷʥ
ѤƼƤޤ(֤˥ݡ󥰤Ƥ)
äơʲΤ褦ʥץ⥳ѥ뤷ư
ȤǤޤ

void far key_handler()
{
  int key;
  key = key_press_check();
  /* Ϥν */
}

/* ꥢγߥϥɥ */
void far com_handler()
{
  int c;
  c = comm_receive_char();
  /* ꥢν */
}

static intvector_t key_intvector;
static intvector_t key_last_intvector;
static intvector_t com_intvector;
static intvector_t com_last_intvector;

main()
{
  key_intvector.callback = (void (near *)())FP_OFF(key_handler);
  com_intvector.callback = (void (near *)())FP_OFF(com_handler);
  key_intvector.cs = _asm_inline("\tmov\tax,cs");
  key_intvector.ds = _asm_inline("\tmov\tax,ds");
  com_intvector.cs = _asm_inline("\tmov\tax,cs");
  com_intvector.ds = _asm_inline("\tmov\tax,ds");

  sys_interrupt_set_hook(SYS_INT_KEY,
                         &key_intvector, &key_last_intvector);
  sys_interrupt_set_hook(SYS_INT_RECEIVEREADY,
                         &com_intvector, &com_last_intvector);

  while (1) {
    /* ̵¥롼סߤä顤Υϥɥ */
  }
}

_asm_inline() Ͼ0֤ߡؿȤƤޤ
ޤFP_OFF(), FP_SEG() ϡ
#define FP_OFF(p) (p)
#define FP_SEG(p) (0)
Τ褦Ƥޤäơ嵭Τ褦ʥץ WonX 
ѥ뤷Ƽ¹Ԥ뤳ȤǤޤ

Τ褦ˡwhile (1) {} ̵¥롼פ󤷤ơߤäȤ
褦ʥץ񤤤Ƥ⡤ưޤ
Ϥϥݡ󥰤ƤȤΤʤΤǡ
ϳߤ򤫤ˤϡĹ˥򲡤Ƥɬפޤ
(ϴŪߤΤǡȿޤĹ˲Ƥ)

  WonX ¸ʬΤ꤫

WonderWitch ѤΥץȯƤݤˡWonX ξΤȤ߹ߤơ
WonderSwan Ǽ¹ԤȤˤϼɤäȤޤ
(㤨СǥХåνϤΤ printf() ʤ)
Τ褦ʤȤΤˡwonx_include/types.h 
#define _WONX_
ƤΤǡΤ褦ʾ #ifdef _WONX_ ǤäƤ

 ץǡμ꤫

ˡ

#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);

Τ褦ʥɤ뤳ȤˤꡤǤդξǥ饯ѥåȤ
ץǡϤ뤳ȤǤޤ

ץˡ԰¤ʾ꤬ä顤

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

/* ˥ץ饤ȤˤĤƤ԰¤ʥɤ */

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

Τ褦ˤ԰¤ʥɤǥץǡȡǥХå
ΩĤǤ礦

 źդΥġˤĤ

[sys2wonx.pl]

#include <sys/disp.h>

#include "wonx_include/disp.h"
Τ褦Ѵե륿Ǥ

[int2sint.pl]

short  long Ƥʤ int short int Ѵޤ
sizeof(int)  uint* ⡤sizeof(short int), unsigned short int* 
Ѵޤ
ҤäȤ餪Ѵ򤷤Ƥޤ... Ǥ⤿֤󤽤ΤȤˤ
ѥ˥顼Ф顤
perl Ϲñ̤˽Τǡ
long
int a;
Ȥ
void func(long
          int a)
Τ褦Ѥʽ򤷤Ƥȡ
long
short int a;
Ȥ
void func(long
          short int a)
ѴƤޤäơäȥ顼ˤʤ뤳ȤǤ礦ĤƤ

[filters.pl]

ʣΥե륿ޤȤ̤ perl ץȤǤ
񼰤ϡ
filters.pl [filters...] -f [files...]
Ǥ㤨С
> filters.pl sort head -f file1 file2 file3
ϡ
> cat file1 | sort | head > file1.tmp
> mv file1.tmp file1
> cat file2 | sort | head > file2.tmp
> mv file2.tmp file2
> cat file3 | sort | head > file3.tmp
> mv file3.tmp file3
򤹤뤳ȤǤ

[challsrc.sh]

WonderWitchѥ  wonxѥ ؤѴ򤹤뤿Υ륹ץȤǤ
Ƥϡñˡ
./filters.pl "qkc -e -u" ./sys2wonx.pl ./int2sint.pl -f [files]
Ǥ
ܸ perl Ѥˤϡɤ EUC ǤʤưʤΤǡ
"qkc -e -u" ̤Ƥ ./sys2wonx.pl  ./int2sint.pl 
̤褦ʽ֤ˤʤäƤޤ

[sout2str.pl]

wonx ϡꥢݡȤؤνϤϡ
output to serial port : "A"
Ȥ
output to serial port : "\n"
Τ褦ˡɸϤ˽Ϥޤsout2str.pl ϡ "" Ǥ줿ʬ
ΤߤФơ\n  \t ŬڤʥɤѴƽϤե륿Ǥ
ꥢݡȤѤץ(: wwterm)ưȤˤϡ
> wwterm | ./sout2str.pl
Τ褦ˤơsout2str.pl ̤Ƶư뤳ȤˤꡤºݤΥꥢݡ
ؤνϤ˥뤳ȤǤޤ

 

WonX ϡ湰μʬ̶֤ż֤ Libretto ǽ񤤤
ż֥եȥפǤGPLۤޤ
ԤˤĤƤϡźդ OMAKE.jpn 򻲾ȤƤ

湰μϢΥ᡼륢ɥ쥹ϡ
sakai@seki.ee.kagu.sut.ac.jp
hsakai@pfu.co.jp
ǤޤܥեȥκǿǤ
http://www.seki.ee.kagu.sut.ac.jp/~sakai/WonderWitch/index.html
ۤƤޤ
ʲϥߥ顼ȤǤ
http://hp.vector.co.jp/authors/VA014157/index.html
http://www.people.or.jp/~hsakai/index.html
ߥ顼Ȥϡ椬Ȥ˥åץǡȤΤǡ˺ǿ
Ȥ櫓ǤϤޤ󡥤ޤǥХååѤǤ

 ΥեϤޤ
