k "bscuRP" hCo[}jA 
   iuPD1O ^ 2Łj


  "bscuRP" kŁAbs|RROPiyтbs|RROPqfaj
t[Oo[{[h𐧌䂷ׂ̃foCXhCo[łiKernel_version 
QDSDOȏœ삳ĉjB
{hCo[Ƃ̂h^éASāAk񋟂Ăhh֐ōs
܂BfoCX̎擾Acl`]pobt@̊mہiTM޲ājA摜]A
C^vgAyтh^n|[g̓o͂T|[g܂B{ŕ\郁
AhX́A(Physical)AhX̓n[hEGÃAhXłAvO
ň(߰ݸނꂽ)AhXz(Virtual)AhXƕ\AjAiLine
ar)AhXLinuxAhXA͘_AhXƓɈ܂B
{hCo[ɂ͐Ƃă\[XR[h"D"YtĂ܂B


<<ڎ >>                                                           Cm.
Pjku[g[_[ւ̐ݒ EEEEEEEEEEEEEEEEE	-- 47
1.1jڃeʂ̊mF@EEEEEEEEEEEEEEEEEEEEEE	-- 62
1.2jldlIvV̌@EEEEEEEEEEEEEEEEEEEEE	-- 68
1.3jhDht@Cւ̏	 EEEEEEEEEEEEEEE -- 81
2.) hCo[̓o^@@@@@@@@@@				--111
2.1jfBNg[yуhCo[R[h̐@EEEEEEEEEEEE --115
2.2jfoCXm[hiLN^[^j̓o^@EEEEEEEEEEEEE --128
2.3jhCo[W[̃[h@EEEEEEEEEEEEEEEEEE --139
2.4jRPDinsmod s̈iIvVj EEEEEEE --149
2.5jjQüႢ@EEEEEEEEEEEEEEE --162
2.6jhINSTALL.SHhXNvgt@CɂhCo̓o^@EEEEEE --169
2.7jhCõACXg[@EEEEEEEEEEEEEEEEEEE --175
3.) R}ḧꗗyѐ						--179
3.1) R}hꗗ@EEEEEEEEEEEEEEEEEEEEEEEEEE --181
3.2) eR}h̐@EEEEEEEEEEEEEEEEEEEEEEEE --203
S.) hCo[̎gp@@EEEEEEEEEEEEEEEEEEEEEE --321
4.1jfoCXt@CƃI[v@EEEEEEEEEEEEEEEEEE	--330
4.2) ɂeR}ȟĂяo@EEEEEEEEEEEEEE	--346
4.3) obt@̂kAhX̎擾Ɖ摜f[^̃ANZX@EEEE	--355
4.4) C^vg̏@EEEEEEEEEEEEEEEEEEEEEEE	--374
4.5) obhRtBM[VWX^[l̎擾@EEEEEEEEE	--381
4.6) Input/OutputR}h@EEEEEEEEEEEEEEEEEEEEEE	--388
4.7) hCo[̃N[Y@EEEEEEEEEEEEEEEEEEEEEE	--394
T.) obhoXXbgƃ{[hm@EEEEEEEEEEEEEEEEE	--399
U.) Tv\[XihDhjɂā@EEEEEEEEEE	--323
VDjhCo[ RpC̒Ӂ@EEEEEEEEEEEEEEEEE	--415
W.) (o[W)@EEEEEEEEEEEEEEEEEEEEEEEE	--421


Pjku[g[_[ւ̐ݒ
@bscuRPgp摜i]jobt@̈VXe̍ŏʃAh
ẌɊmۂׁAk̎gp̈𐧌܂iPQƁjB̐ݒs
ȂŖ{hCo𓮍삳邱Ƃ͂ł܂iŏʃAhX̓VXeŎgp
ׁA̐ݒsȂŎsƁAdȃVXeQNꍇ
܂jB

@DPj@zAhVOŊǗĂ郁́AʓIɎԂot
@Oe[Vi̒HԁjȂ܂BkzA
@hVO̗pĂAk̃hCoi[_uW[j̓J
@[l̋NƓɃ[hȂׁAÅmۂԂ̌o߂Ƌ
@Ȃ܂Bׁ̈Ak̃u[g[_[ɁhldllhIvV
@w肵Ăk̎gp̈𐧌Acl`KvƂAAh
@Ẍ̃AōʃAhXɊmɊmۂ܂B

1.1jڃeʂ̊mF
@}VNɕ\郁[JEEg̍őlA܂͋ÑVXei
bZ[WjÓhMemory: AAxxxk/BBxxxk available EEEEhCmF
܂B[JEEg̍őlA̓Ȍꍇ̒lloCgZ(BB)A
"Max_MemSize"Ƃ܂i̐ݒO̒lAȌ͂̒lω܂jB

1.2jldlIvV̌
@CT-3301{[h͂PTloCg̃obt@̈KvƂ܂B]āAu
[g[_[kernelɗ^IvVȉ̒lɐݒ肵AVXegpł
郁̏AhX肵܂B肳ꂽ̏́Agp鑤̐
Cɉă`FbNȊOɁAVXeɂĂ̓`FbN܂i܂ACT-
3301gp郁eʂsƁAnOAbvNꍇ܂j
̂ŁA肳ۂ͏\ӉB

@mݒlFccc(Mbytes)n@Max_MemSize@|@T(gp{[hj
L̒l"MEM=cccMhIvVcccɐݒ肵܂iႦ΁AUSMbyte
̃}VCT-3301P̂ݎgpꍇ́AhMEM=59M"ƂȂ܂jB܂A
̃IvV͂Q́hinsmod"̃IvVɂlɔf܂B

1.3jhDht@Cւ̏
@g̃fBXgr[VŎgpĂu[g[_[iNvO
jɏL̃IvVݒ肵܂ieLXgGfB^܂͒񋟂Ăc[
gp܂B̗ɂ̓^uXy[XĂ͂܂jBȉ́A"Turbo 
Linux""RedHat Linux"ł̐ݒ܂B̑̃fBXgr[Vł
A"man""info"ŐݒQƂB
@ݒ肵efꂽǂ́AN"cat /proc/cmdline"s"A
肵MEM=cccM"IvV܂܂ĂΑvłB

Ekhkn(Turbo LInux LOaderj̏ꍇ
@"/etc/lilo.conf"ݒt@Cɏ݂܂BĹAUSloCgڂ̃}V
łPCT-3301gpׂTXloCgɐimem=59mjꍇ̐ݒ
B
@t@C̍Ō̍s
@append="mem=59m"
@܂B
hu[g}l[W[iLILO)hŐݒ肷ꍇ́Aǉp[^ɁAmem=59m ^
܂B

Efqta(RedHat)̏ꍇ
@"/boot/grub/grub.conf"ݒt@Cɏ݂܂BĹAPQWloCg
̃}VłQCT-3301gpׂɁAPPWloCgimem=118mjݒ肵
Linuẍ̗𐧌łB

@@@E
@title Red Hat Linux (2.4.xx-xx)
@@@E
@@  kernel /vmlinuz-2.4.xx-xx ro root=LABEL=/ mem=118m
@@@E

Q) hCo[̓o^
  2.1)".tgz"t@C𕜌A2.2`2.3)s邩A2.6)̃XNvg
@t@CsĉB
@
2.1jfBNg[yуhCo[R[h̐
@@@ȉ̃R}hŃhCo[p̃fBNg[iuserdirFpath܂߂gp
@@@̃fBNg[j𐶐ĉB

@@@@userdir
@@@
@@@ɐfBNg[Jgɂ"RPDt"Rs[
      Aȉ̃R}hsB

@@ @@RPDt

2.2jfoCXm[hiLN^[^j̓o^
@@@ňȉ̃R}hsB

@@@@^^RPO@@WX@O@(Pځj

@@@Qȏgp̏ꍇ͕Kvȉ̃R}hsB
@@@@^^RP@@WX@@(n=2`j

@@@KvɉĈȉ̃R}hsB

@@@@"GROUP"@^^RP
@@@@{@^^RP

2.3jhCo[W[̃[h
@@@ȉ̃R}hsBinsmodɗ^͎ɐ܂B

@@@/sbin/insmod /userdir/ctdv31.o MAJOR=89 MEM=123 [LOG=1]

@@@LR}h͂ob̗グɕKvłB
@@@^^D^DXNvgt@CɏLR}h
@@@q2.6̃XNvgt@C̓eǉΈȌ̗グ̃R}h
@@@͕͂KvL܂Bȏœ̐ݒ͏IłB

2.4jRPDinsmod s̈iMAJORIvV͑Sđ啶j

@@@MAJORF@MAJOR͏Lmknodɗ^Major_No.łBȉMajor_No.w
@@@@@@@ 肵܂B̈w肵Ȃ́AMajor_No.͓IɊ蓖Ă
@@@@@@@ A̒l߂lƂċA܂B
@@@MEM:@@ MEM̓u[g[_[ɗ^IvVƓ̒lAloCgP
@@@         łPOî݂Ŏw肵܂BCT-3301𕡐gpꍇ͊e
@@@         {[h̐擪AhX́ÃAhXTloCgPʂŎI
@@@         ɊU܂B
@@@LOG:@@ "1"w肷ƃhCoI[vꂽAobt@̐擪A
@@@@@@@ hXVXeOɏo͂܂B"0"̎w܂͖{IvV
@@@@@@@ w肳Ȃ̓Oo͂܂B

2.5jjQüႢœ삵ȂꍇAȉ̃R}hŃRp
@@CAĹhfoCXm[hiLN^[^j̓o^hȍ~sB
    i" " łRPD폜AVQƂinclude
    fBNg̃V{bNN쐬ĂjB
     

2.6jhINSTALL.SHhXNvgt@CɂhCo̓o^
@@Major_No͓IɊāACT-3301őR܂Ŏgpł悤o^܂BO
@@q2.4̈insmodƓlɎw肵܂iMAJORjB

@@ ./install.sh MEM=ccc [LOG=1]

2.7jhCõACXg[
@@"UNINST.SH"XNvgt@CsĉB

@@@./uninst.sh

R.) R}ḧꗗyѐ
3.1) R}hꗗ
 ER}hꗗ
 @@eR}hɗ^́A֐̍Ō̈(parm)parm[1]
 @parm[3]ɑΉ܂iparm[0]͖߂ljB
===============================================================================
@No.|   R}h  @@@@ |  1    | 2   | 3     | ߂l(0)
-----+------------------------+-----------+---------+-----------+--------------
 0x00|CT_GetVersion           |    x      |    x    |     x     |VersionNo 
 0x01|CT_SetVideo_DmaRegister |Video_Mode | ALT     | H_ILEAVE  |   x
 0x02|CT_CaptureStart         |Start Value|    x    |     x     |I/O Status 
 0x04|CT_GetIntStatus         |    x      |    x    |     x     |INT Status
 0x05|CT_GetPCIConf           |Offset     |    x    |     x     |Register value
 0x08|CT_SetIntEnable         |En/Disl|    x    |     x     |Set Value
 0x09|CT_SleepOn              |    x      |    x    |     x     |Set Value
 0x0a|CT_SetTransferMemAddress|Mode       | Address |     x     |Trans ADRS
 0x10|CT_OUTDW                |I/OAddress | Data    |     x     |   x
 0x11|CT_OUTW                 |I/OAddress | Data    |     x     |   x
 0x12|CT_OUTB                 |I/OAddress | Data    |     x     |   x
 0x20|CT_INDW                 |I/OAddress |    x    |     x     |In Value
 0x21|CT_INW                  |I/OAddress |    x    |     x     |In Value
 0x22|CT_INB                  |I/OAddress |    x    |     x     |In Value
===============================================================================

3.2) eR}h̐
@̇@AB̋L͈No܂i1P݂̂̏ꍇ'E'̋Lj

CT_GETVERSION
  hCo[̃o[Wԍ擾܂B 16iŉʂS}Ci[o[WA
̏ʂQW[o[W܂i0x010000  Version1.00.00)B

CT_SetVideo_DmaRegister
  Lv`ɕKvȃWX^ݒ肵܂B摜TCY͂USOH X SWUVɐݒ
  ܂B640H x 486V(or243VjȊÕTCYł̓́A{R}hgpe
  WX^ʂɐݒ肵ĉB

  @rfI[h
  [ݒ]: [rfI[h]
@@O@F@~bNX[hAQSrbg
@@P@F@dudmPƁAQSrbg
@@Q@F@nccPƁAQSrbg
@@R@F@Zp[g[hAQSrbg
@@S@F@vOVuAQSrbgiCT-3301RGBł̂݋@\j
@@T@F@~bNX[hARQrbg
@@U@F@dudmPƁARQrbg
@@V@F@nccPƁARQrbg
@@W@F@Zp[g[hARQrbg
@@X@F@vOVuARQrbgiCT-3301RGBł̂݋@\j
@  
  A`ks
    Alternate BuffergpăLv`邩ۂhP^OhŎw肵܂B
    AlternategpꍇBuffer̋ÉAQl(0x20000)ɂȂ悤
    V_WORD_INTERLEAVEݒ肳܂BZp[g[h́ÂP^QÂ
    Even/OddO^㔼ɊeX]܂B
    tB[hPƎ͊eobt@̑Ô݂ɓ]܂B
    
  BgQhkd`udiHorizontal InterLeavej
    P̉fiQׂ̂拫Ejɍ킹ׂ̑sNZ
    PʂŎw肵܂iłH_WORD_COUNTɁA(H_SIZE+ݒl)*PIXELBYTESݒ
    ܂jB Ⴆ΁APOQSf^CɃACׂɂ́ARWS
    i1024-640)w肵܂B̑̃sNZ̓XLbvē]ׁA
    ̃[p^[̃f[^̂܂܂ɂȂ܂Bf[^l߂ē]ꍇ
    hOhw肵܂iPIXELBYTESPX32̎wɉāAS^RoCgjB
    
CT_CaptureStart
@Lv`̃X^[gw߂܂B{R}h̓Rg[WX^[0START
@(D0)TRIG_MODE(D3)ƗĐł闘_݂̂ŁAWX^𒼐ڑ삵Ă
@ʂ͓łB߂ĺÃ݂Rg[WX^[ÕXe[^Xǂݎ
@܂B

@EX^[gf[^
@@Rg[WX^[0START(D0)TRIG_MODE(D3)̂܂܂̃rbgʒu
@@ۂlZbg܂B
@@PFVbg捞AXFA捞AO:Xgbv

CT_GetIntStatus
@C^vg̃Xe[^Xǂݎ܂BXe[^XɁhOhǂݎ
@ꍇ͂ǂ̂hmsvĂȂƂ܂BǂݎɂČ݂
@C^vgXe[^X̓NA܂̂œǂݒƂ͂ł܂BC^
@vgXe[^X̃rbgATC͎̒ʂłB
@
@ޯĂOF Frame_CounterTerminate]IB
@    PF FIFO OverflowNB
@    QF ُ킪ד]A{[giMaster AbortjB
@    RF ]i؁j]A{[giTarget Abort)B
@@@S`F ɁhOhB

CT_GetPCIConf
@{[ĥobhRtBM[VWX^̒l܂̓oXmǂݎ
@BWX^[̏ڍׂ͂obh̃hLgQƂB

@EItZbg
@@ǂݎ郌WX^̃oCgItZbgw肵܂BoXḿAOPOÕI
@@tZbgw肷邱Ƃœǂݎ܂B

@@{[hI/Ox[XAhX擾ꍇ̃ItZbǵAOPSłB
@@
CT_SetIntEnable
@C^vgEnable/DisableyуCxg̔s^~𐧌䂵܂B߂l͐
@I̓ZbglACxg̔s̏Ɏśh|PhԂ܂B
@EZbgl
@@P F d hms
@@O F c hms

CT_SleepOn
@{R}h𔭍sXbh܂̓vZXX[vAʂ̃vZXɐ
@ڂ܂BL̃C^vgEnableɐݒ肳Ăꍇ́AC^vg
@󂯕tAWake_UpĎsĊJhOhԂ܂BC^vgDisable
@Ă鎞ɖ{R}h𔭍sƁAh|Ph̖߂lőɕԂ܂B

CT_SetTransferMemAddress
@hCopӂobt@ȊÕAhXɉ摜]ꍇɁA]Ah
@X𒼐ڎw肵܂B{R}h́At[obt@̂̊mȃȊO
@͎gpł܂Bi{R}hĎgpƃVXeɉ񕜕s\ȃ_[
@W^ꍇ܂jBZbgꂽAhX́AX^|g"START_ADDRE
@SS"WX^ɐݒ肳܂B߂ĺAۂ̓]AhX(AhX)Ԃ
@܂B
@@[h
@@O F hCopӂobt@ɓ]AhX߂܂B
@@P F PhysicalijAhXwB

@AAhX
@@PɁhPhw肵ꍇ̓]AhXw肵܂ihOh͖jB

CT_OUTDW
  I/O|[gɃ_u[hŏo͂܂B

CT_OUTW
  I/O|[gɃ[hŏo͂܂B

CT_OUTB
  I/O|[gɃoCgŏo͂܂B

CT_INDW
  I/O|[g_u[hœ͂܂B

CT_INW
  I/O|[g烏[hœ͂܂B

CT_INB
  I/O|[goCgœ͂܂B

S.) hCo[̎gp@
   hCo[̊eR}hĂяoꍇAR}hʂ鎯ʔԍ
(R}hNOA"dv31_ctl.h"ɒ`)Ƃ̈iőRjziP`RjɃZ
bgăhCo[Ăяo܂BR}hԂl͏ɈźmOnɖ߂
܂B֐̖߂l͐펞͂OAG[́ÕG[lԂ܂B
hCo[́A"open()" system֐ŃI[vĎgp܂B]ꂽ摜f[^
́A"mmap()"system֐ŗ̈̂PoCgڂ̃AhX擾ăANZX܂BA
vP[VÍA{[h̋@\~N[YKsĂB

4.1jfoCXt@CƃI[v
@open()ɗ^foCXt@CŕCT-3301ʂ܂Bt@C
́A"/dev/ctdv31" ̌ɍőQ̂POiłO`RP̃{[hw肵܂i
R[h̋Lq"/dev/ctdv310"`"/dev/ctdv3131"jB
L͂PڂCT-3301I[vR[h܂B

@#include@"dv31_ctl.h"

  int ghDriver;	// hCo[nh
  
  ghDriver = open("/dev/ctdv310",O_RDWR);

  ƁAghDriverɃhCo[(ctdv310)̃nhԂ܂BsƃG
  [l(-1)ԂAȍ~̃hCo[(ctdv310)R}ȟĂяo͂ł܂
@̂Ń{[h̏IsĂB

4.2) ɂeR}ȟĂяo
  hCo[(ctdv31)̊eR}h(ioctl)̎śAR}hʂ鐮l
(dv31_ctl.hɒ`)ƁÃR}hKvƂőR̈zɊi[A
̂|C^YāA"ioctl"֐Ăяo܂iz[0]͖߂lpŁAďo
̈[1]`[3]ɗ^܂jBSYNTAX͈ȉ̒ʂB

@@res = ioctl(ghDriver,R}h,parm);

4.3) obt@̂kAhX̎擾Ɖ摜f[^̃ANZX
@VXeɊmۂ]obt@iPDQƁĵkAhXizj
A[AhXj̎擾́Ahhsystem֐Ŏ擾܂Bȉ́A
vO~O܂B

 PUCHAR *pFrmMem;

 pFrmMem = mmap((caddr_t)0,CT_MEMORY_SIZE,PROT_READ | PROT_WRITE,MAP_SHARED,
    ghDriver,0);
     E		// CT_MEMORY_SIZE"dv31_ctl.h"ɒ`ꂽh0x5000000h
@@ E		// pFrmMem̓obt@̐擪AhX|Cg
@@ E
 munmap(pFrmMem,CT_MEMORY_SIZE);	// unmap mmaped memory

擾 pFrmMem SliTljoCg̃GÃ́Ał]ꂽ
ŐV摜ǂݎAt@Cɒڏ񂾂ł܂iS`TloCg̃G
ÁAMꂽꍇɊtB[h̔ʂłȂׂɁAI[o
[Nꍇ̕یpŁAʏ͉摜͓܂jB

4.4) C^vg̏
@CT_SetIntEnableR}hɂăC^vgCl[uĂ鎞A
CT_SleepOnR}h𔭍s邱ƂɂāAsXbhvZXX[v
邱Ƃł܂B̏Ԃ́A䉺CT-3301{[hhmsM𔭐
EGCNAbvsĊJ܂̂ŁÃXbhvZXݏp
gł܂BYt"sampl.c"ł́ȀsĂ܂̂ŎQƉB

4.5) obhRtBM[VWX^[l̎擾
@CT_GetPCIConfR}ḧPCIRtBM[VWX^[NõItZb
g^邱ƂɂāAWX^[l擾܂B
@h^nx[XAhX擾ꍇ́AOPS̃ItZbgw肵A擾l
AʂSrbgɃAhXȊÔobh̏񂪊܂܂ĂׁAAhXl𓾂
ɂ͉ʂSrbg}XNhOhɒuKvL܂B

4.6) Input/OutputR}h
@outb,outw,outl,inb,inw,inlo͖߂s܂Bɗ^I/O|[gAh
X̓{[h̊ꂩ̃AhXł͂ȂAbot̂hm^nts߂̂̂ɗ^
h^n|[gAhXłiL4.5Ŏ擾AhXjBNeBJȐ
Kvȏꍇ́AIOPL(3)߂OɎsAڂh^n߂s܂B

4.7) hCo[̃N[Y
  Linux close()֐gp܂BLɂ̃R[h܂B

  close(ghDriver);

T.) obhoXXbgƃ{[hm
@bs|RROP{[h𕡐ꍇAe{[h́AobhoX́AoX
mnAfoCXmn̎Ⴂ珇Ɋ蓖Ă܂B́AXbgł́AK
E̕e}Ṽ[J[ɂēꂳĂł͂܂
ŁAۂ̊蓖Ă͓삳ĊmFĉB
  
U.) Tv\[XihDhjɂ
@Yt̃Tv\[XhDh͈ȉ̃R}hŁAs`t@C
@hDh𐶐܂B
@@@|@@D
@DsƁAhCo[̃o[Wԍ\AC^vgK
vȐݒsāA͉摜R捞݁AŌɂf()Ql摜^[
~iɂUSHQSVŕ\܂i"1""*"ŕ\jB̂Ql̃XbV
hx̓R}hCォς邱Ƃł܂Bڂ́A"./a.out@
/?"Ńwv\ĊmFB

VDjhCo[ RpC̒
hlh"INCLUDEDIRh́^^^fBNg
gpĂ܂̂ŁAhCõRpC̑Oɂ̃fBNgɃ}V
fBNg̃Nȉ̃R}hCō쐬Kv܂B

ln -s /usr/src/linux-2.x.xx-xx /usr/src/linux

W.) (o[W)

2003 Sep.	o[W1.0:	(kernel_version2.4.20-8,Redhat9)B
2004 Jan.	o[W1.10: ]obt@̃LbV֎~B
