プログラムリスト
SYS/EX8TECDEMO

トップメニュー「SmileBASICでプログラムを作る」から、LOAD"SYS/EX8TECDEMO"↵でプログラムが読み込まれます。
キーボードの「EDIT」キーを押すと、このプログラムが自由に編集できます。
'
' EXAMPLE8
' テクニカルデモ
'
SELMAX=12
DIM MENU$[SELMAX]
DIM SUBTI$[SELMAX]
GOSUB @SWINIT
XMODE=0
GOSUB @SCRNINIT
'--- MAIN
MSEL=0
WHILE 1
SEL=MSEL
RESTORE @MENUMAIN
GOSUB @SELECT
IF SEL<0 THEN CONTINUE
MSEL=SEL 'BACK UP
ON SEL GOSUB @TESTCNSL,@TESTGRP,@TESTBG,@TESTSP,@TESTSND,@TESTSTR,@TESTCALC,@TESTTRY,@TESTFILE,@TESTPRG,@TESTOTHER,@MINIDEMO
WEND
'--- CONSOLE
@TESTCNSL
WHILE 1
RESTORE @MENUCNSL
GOSUB @SELECT
IF SEL<0 THEN BREAK
A$=MENU$[SEL]
IF A$=="EXIT" THEN BREAK
PY=0
GOSUB @BGPRTCTR
ON SEL GOSUB @TESTXSCR2,@TESTXSCR4,@TESTCOLOR,@TESTLOCATE,@TESTATTR,@TESTSCROLL,@TESTFONTDEF,@TESTVISIBLE
GOSUB @HITANYBTN
GOSUB @SCRNINIT
WEND
RETURN
'--- SPRITE
@TESTSP
SEL=0
WHILE 1
RESTORE @MENUSP
GOSUB @SELECT
IF SEL<0 THEN BREAK
A$=MENU$[SEL]
IF A$=="EXIT" THEN BREAK
PY=0
GOSUB @BGPRTCTR
ON SEL GOSUB @TESTSPOFS,@TESTSPCLIP,@TESTSPROT,@TESTSPSCALE,@TESTSPCOLOR,@TESTSPCHR,@TESTSPANIM,@TESTSPCOL,@TESTSPLINK
GOSUB @HITANYBTN
GOSUB @SCRNINIT
WEND
RETURN
'--- GRAPHICS
@TESTGRP
SEL=0
WHILE 1
RESTORE @MENUGRP
GOSUB @SELECT
IF SEL<0 THEN BREAK
A$=MENU$[SEL]
IF A$=="EXIT" THEN BREAK
PY=0
GOSUB @BGPRTCTR
ON SEL GOSUB @TESTGPAGE,@TESTGCLIP,@TESTRGB,@TESTCIRCLE,@TESTFILL,@TESTPAINT,@TESTGCOPY,@TESTGPRIO,@TESTGSAVE
GOSUB @HITANYBTN
GOSUB @SCRNINIT
WEND
RETURN
'--- BG
@TESTBG
SEL=0
WHILE 1
RESTORE @MENUBG
GOSUB @SELECT
IF SEL<0 THEN BREAK
A$=MENU$[SEL]
IF A$=="EXIT" THEN BREAK
PY=0
GOSUB @BGPRTCTR
ON SEL GOSUB @TESTBGPUT,@TESTBGOFS,@TESTBGCLIP,@TESTBGROT,@TESTBGSCALE,@TESTBGANIM,@TESTBGSAVE
GOSUB @HITANYBTN
GOSUB @SCRNINIT
WEND
RETURN
'--- STRINGS
@TESTSTR
SEL=0
WHILE 1
RESTORE @MENUSTR
GOSUB @SELECT
IF SEL<0 THEN BREAK
A$=MENU$[SEL]
IF A$=="EXIT" THEN BREAK
PY=0
GOSUB @BGPRTCTR
ON SEL GOSUB @TESTCHR,@TESTVAL,@TESTHEX,@TESTFORMAT,@TESTLEN,@TESTINSTR,@TESTMID,@TESTSUBST
GOSUB @HITANYBTN
WEND
RETURN
'--- CALC
@TESTCALC
SEL=0
WHILE 1
RESTORE @MENUCALC
GOSUB @SELECT
IF SEL<0 THEN BREAK
A$=MENU$[SEL]
IF A$=="EXIT" THEN BREAK
PY=0
GOSUB @BGPRTCTR
ON SEL GOSUB @TESTFLOOR,@TESTABS,@TESTSGN,@TESTMIN,@TESTRND,@TESTSQR,@TESTEXP,@TESTSORT,@TESTSHIFT
GOSUB @HITANYBTN
WEND
RETURN
'--- FILE
@TESTFILE
SEL=0
WHILE 1
RESTORE @MENUFILE
GOSUB @SELECT
IF SEL<0 THEN BREAK
A$=MENU$[SEL]
IF A$=="EXIT" THEN BREAK
PY=0
GOSUB @BGPRTCTR
ON SEL GOSUB @TESTCHKF,@TESTFILES,@TESTSAVE
GOSUB @HITANYBTN
WEND
RETURN
'--- PROGRAM
@TESTPRG
SEL=0
WHILE 1
RESTORE @MENUPRG
GOSUB @SELECT
IF SEL<0 THEN BREAK
A$=MENU$[SEL]
IF A$=="EXIT" THEN BREAK
PY=0
GOSUB @BGPRTCTR
ON SEL GOSUB @TESTPGET,@TESTPSET,@TESTINS,@TESTDEL
GOSUB @HITANYBTN
WEND
RETURN
'--- SIN/COS
@TESTTRY
SEL=0
WHILE 1
RESTORE @MENUSIN
GOSUB @SELECT
IF SEL<0 THEN BREAK
A$=MENU$[SEL]
IF A$=="EXIT" THEN BREAK
PY=0
GOSUB @BGPRTCTR
ON SEL GOSUB @TESTRAD,@TESTSIN,@TESTTAN,@TESTATAN,@TESTASIN,@TESTSINH
GOSUB @HITANYBTN
GOSUB @SCRNINIT
WEND
RETURN
'--- SOUND
@TESTSND
SEL=0
WHILE 1
RESTORE @MENUSND
GOSUB @SELECT
IF SEL<0 THEN BREAK
A$=MENU$[SEL]
IF A$=="EXIT" THEN BREAK
PY=0
GOSUB @BGPRTCTR
ON SEL GOSUB @TESTBEEP,@TESTBGMPLAY,@TESTBGMSTOP,@TESTWAVSET,@TESTBGMSET,@TESTBGMVOL,@TESTTALK,@TESTEFC,@TESTEFC2
GOSUB @HITANYBTN
GOSUB @SCRNINIT
WEND
RETURN
'--- OTHER
@TESTOTHER
SEL=0
WHILE 1
RESTORE @MENUOTHER
GOSUB @SELECT
IF SEL<0 THEN BREAK
A$=MENU$[SEL]
IF A$=="EXIT" THEN BREAK
PY=0
GOSUB @BGPRTCTR
ON SEL GOSUB @TESTGYRO,@ACCEL,@EXPAD,@TESTMIC,@TESTDLG,@MPTEST,@SPEEDTEST,@TESTSYSTEM
GOSUB @HITANYBTN
GOSUB @SCRNINIT
WEND
RETURN
'--- MINI DEMO
@MINIDEMO
SEL=0
WHILE 1
RESTORE @MENUDEMO
GOSUB @SELECT
IF SEL<0 THEN BREAK
A$=MENU$[SEL]
IF A$=="EXIT" THEN BREAK
PY=0
GOSUB @BGPRTCTR
ON SEL GOSUB @DEMO1,@DEMO2,@DEMO3
' GOSUB @HITANYBTN
GOSUB @SCRNINIT
WEND
RETURN
'--------------
'0 うえがめん(3D) & したがめん ミシヨウ
'1 うえがめん(2D) & したがめん ミシヨウ
'2 うえがめん(3D) & したがめん シヨウ
'3 うえがめん(2D) & したがめん シヨウ
'4 うえがめん(2D)+したがめん ケツゴウ
'
@TESTXSCR2
XMODE=2
GOSUB @SCRNINIT
GOSUB @BSKIPON
PY=1
A$="XSCREEN 2"
GOSUB @BGPRTCTR
PY=12
A$="3D MODE"
GOSUB @BGPRTCTR
DISP=0 'うえがめん
SPMAX=64
GOSUB @SPINITMAX
GOSUB @BGDUMMY1
GOSUB @GRPINIT
FOR SPN=0 TO SPMAX-1
X=RND(GRW)
Y=RND(GRH)
Z=RND(1024+256)-256
U=RND(32)*16
V=RND(14)*16+32
W=16
H=16
SPCHR SPN,U,V,W,H
SPOFS SPN,X,Y,Z
NEXT
DISP=1 'したがめん
SPMAX=64
GOSUB @SPINITMAX
GOSUB @SPINIT0
GOSUB @BGDUMMY1
GOSUB @GRPINIT
FOR SPN=0 TO SPMAX-1
X=RND(GRW)
Y=RND(GRH)
Z=RND(1024+256)-256
U=RND(32)*16
V=RND(14)*16+32
W=16
H=16
SPCHR SPN,U,V,W,H
SPOFS SPN,X,Y,Z
NEXT
X=200
X2=160
Y=120
Y2=120
Z=0
FOR I=0 TO 800
X=X+SGN(400-I)/2
X2=X2-SGN(400-I)/2
DISPLAY 0 'うえがめん
SCL=COS(RAD(I*2))+1 '0-2
Z=1024-(SCL*1280/2)
BGOFS BGN,X,Y,Z
BGROT BGN,I MOD 360
BGSCALE BGN,SCL,SCL
GOSUB @PRTBGXYZ
DISPLAY 1 'したがめん
BGOFS BGN,X2,Y2,Z
BGROT BGN,I MOD 360
SCL=COS(RAD(I*2))+1
BGSCALE BGN,SCL,SCL
BT=STKANDBTN()
IF BT AND 32 THEN BREAK
VSYNC 1
NEXT
WAIT 60
XMODE=0
GOSUB @SCRNINIT
PY=1
A$="XSCREEN 0"
GOSUB @BGPRTCTR
CLS
RETURN
'---
@TESTXSCR4
XMODE=4
GOSUB @SCRNINIT
GOSUB @BSKIPON
PY=1
A$="XSCREEN 4"
GOSUB @BGPRTCTR
PY=12
A$="2D MODE"
GOSUB @BGPRTCTR
SPMAX=128
GOSUB @SPINITMAX
GOSUB @BGDUMMY1
FOR SPN=0 TO SPMAX-1
X=RND(GRW)
Y=RND(GRH)
Z=RND(1024+256)-256
U=RND(32)*16
V=RND(14)*16+32
W=16
H=16
SPCHR SPN,U,V,W,H
SPOFS SPN,X,Y,Z
NEXT
X=160
Y=120
FOR I=0 TO 800
BGROT BGN,I MOD 360
SCL=COS(RAD(I*2))+1 '0-2
Z=1024-(SCL*1280/2)
Y=Y+SGN(400-I)
BGOFS BGN,X,Y,Z
BGSCALE BGN,SCL,SCL
GOSUB @PRTBGXYZ
BT=STKANDBTN()
IF BT AND 32 THEN BREAK
VSYNC 1
NEXT
WAIT 60
XMODE=0
GOSUB @SCRNINIT
PY=1
A$="XSCREEN 0"
GOSUB @BGPRTCTR
CLS
RETURN
'------------
@PRTBGXYZ
LOCATE 0,10,-100
PRINT " BG X=";FORMAT$("%4D",X)
PRINT " BG Y=";FORMAT$("%4D",Y)
PRINT " BG Z=";FORMAT$("%4D",Z)
RETURN
'----------
@SCRNINIT
XSCREEN XMODE
VISIBLE 1,1,1,1
GPAGE 0,0
BGMSTOP
DISP=0
GOSUB @GRPINIT
GOSUB @BGINITMSG
RETURN
'------------
@BGDUMMY1
BGN=1
@BGDUMMY
IF XMODE==4 THEN
BGW=320/16
BGH=480/16
ELSE
IF DISP==0 THEN
BGW=400/16 'うえ がめん
ELSE
BGW=320/16 'した がめん
ENDIF
BGH=240/16
ENDIF
DISPLAY DISP
BGSCREEN BGN,BGW,BGH
BGHOME BGN,BGW*16/2,BGH*16/2
BGOFS BGN,BGW*16/2,BGH*16/2
FOR Y=0 TO BGH-1
FOR X=0 TO BGW-1
C=99+RND(3)
BGPUT BGN,X,Y,C
NEXT
NEXT
RETURN
'---
@TESTCOLOR
FOR I=0 TO 15
COLOR 15
LOCATE 5,I+5,0
PRINT "COLOR ";FORMAT$("%2D",I);
GOSUB @ARROW
COLOR I
PRINT "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
NEXT
RETURN
'---
@TESTATTR
RESTORE @ATTRTABLE
I=0
LOCATE 0,6,0
WHILE 1
READ ATR
IF ATR<0 THEN BREAK
ATTR 0
PRINT " ";
PRINT "ATTR ";ATR;
GOSUB @ARROW
ATTR ATR
PRINT "R"
PRINT ""
ATTR 0
WEND
RETURN
@ATTRTABLE
DATA 0 'TURN 0
DATA 1 'TURN 90
DATA 2 'TURN 180
DATA 3 'TURN 270
DATA 4 'FRIP H
DATA 8 'FRIP V
DATA -1
'---
@TESTSCROLL
RESTORE @SCRLTABLE
WHILE 1
READ X1,Y1
IF X1==0 AND Y1==0 THEN BREAK
READ NUM
A$="SCROLL "
A$=A$+FORMAT$("%2D",X1)+","
A$=A$+FORMAT$("%2D",Y1)
PY=2
GOSUB @BGPRTCTR
FOR I=0 TO 500
LOCATE RND(50),RND(30),0
PRINT CHR$(&H41+RND(26));
NEXT
WAIT 30
FOR I=1 TO NUM
SCROLL X1,Y1
VSYNC 3
BT=STKANDBTN()
IF BT AND 32 THEN BREAK
NEXT
IF BT AND 32 THEN BREAK
WEND
CLS
RETURN
@SCRLTABLE
DATA 0, 1,30
DATA 0,-1,30
DATA 1, 0,50
DATA -1, 0,50
DATA 0, 0,0
'--------------
@TESTFONTDEF
C=58090 'CHR CODE
RESTORE @FONTDATA
A$=""
FOR Y=0 TO 7
READ D$
FOR X=0 TO 7
IF MID$(D$,X,1)!=" " THEN
A$=A$+"FFFF"
ELSE
A$=A$+"0000"
ENDIF
NEXT
NEXT
LOCATE 0,5,0
PRINT "A$=";CHR$(34);A$;CHR$(34)
PRINT ""
PRINT "FONTDEF ";C;",A$"
FONTDEF C,A$
PRINT ""
PRINT "PRINT CHR$(";C;")";
GOSUB @ARROW
PRINT CHR$(C)
RETURN
@FONTDATA
DATA " "
DATA " 1 1 "
DATA " "
DATA " "
DATA "1 1 "
DATA " 1 1 "
DATA " 111 "
DATA " "
'--- LOCATE
@TESTLOCATE
FOR I=0 TO 20
X=250/8
Y=I+3
Z=1024-(I*(1024+256)/20)
LOCATE X-20,Y,Z
COLOR 7
PRINT "LOCATE ";
PRINT FORMAT$("%2D",X);",";
PRINT FORMAT$("%2D",Y);",";
PRINT FORMAT$("%4D",Z);
GOSUB @ARROW
LOCATE X,Y,Z
COLOR 15
PRINT "A";
NEXT
RETURN
'--- VISIBLE
@TESTVISIBLE
SPN=0
SPSET SPN,0,144
SPSCALE SPN,3,3
SPHOME SPN,8,8
SPOFS SPN,200,120,-100
BGN=1
BGFILL BGN,3,4,400/16-4,240/16-4,99
BGOFS BGN,0,0,300
LOCATE 3,12,0
PRINT "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
GOSUB @BSKIPON
RESTORE @VSBLDATA
WHILE 1
READ P1,P2,P3,P4
IF P1==-1 THEN BREAK
LOCATE 0,4,0
PRINT " VISIBLE ";
PRINT P1;",";P2;",";P3;",";P4
GOSUB @ARROW2
VISIBLE P1,P2,P3,P4 'TEXT,GRP,BG,SP
FOR I=1 TO 90
BT=STKANDBTN()
IF BT AND 32 THEN BREAK
VSYNC 1
NEXT
IF BT AND 32 THEN BREAK
WEND
VISIBLE 1,1,1,1
GOSUB @BSKIPOFF
RETURN
@VSBLDATA
DATA 1,1,1,1
DATA 1,0,0,0
DATA 1,0,0,1
DATA 1,0,1,0
DATA 1,1,0,0
DATA 1,1,1,1
DATA -1,-1,-1,-1
'--- CHR$
@TESTCHR
FOR I=0 TO 255
X=(I MOD 16)+30
Y=FLOOR(I/16)+7
Z=0
LOCATE X,Y,Z
PRINT CHR$(I)
NEXT
COLOR 13
FOR I=0 TO 15
LOCATE 28-3,I+7,Z
PRINT "&H";HEX$(I);"0:"
LOCATE I+30,5,Z
PRINT HEX$(I)
NEXT
COLOR 15
LOCATE 0,6,Z
RESTORE @CHRTABLE
WHILE 1
READ X
IF X<0 THEN BREAK
PRINT " ";
PRINT "CHR$(&H";FORMAT$("%-4X",X);")";
GOSUB @ARROW
PRINT CHR$(X)
WEND
RETURN
@CHRTABLE
DATA 33
DATA 64
DATA 65
DATA 97
DATA 12354
DATA 12355
DATA 12356
DATA 12357
DATA 12450
DATA 12451
DATA 12452
DATA 12453
DATA 8657
DATA 8658
DATA 58007
DATA 58111
DATA 57860
DATA 57861
DATA -1
'--- GPAGE
@TESTGPAGE
RESTORE @GPAGETABLE
WHILE 1
READ X
IF X<0 THEN BREAK
PY=1
A$=" "*20
GOSUB @BGPRTCTR
READ A$
A$="PAGE "+STR$(X)+":"+A$
GOSUB @BGPRTCTR
GCLIP 0,0,16*2,399,239
GPAGE X,X
FOR I=1 TO 120
BT=STKANDBTN()
IF BT AND 32 THEN BREAK
VSYNC 1
NEXT
IF BT AND 32 THEN BREAK
WEND
RETURN
@GPAGETABLE
DATA 0,"DEFAULT PAGE"
DATA 4,"SPRITE DATA"
DATA 5,"BG DATA"
DATA 0,"DEFAULT PAGE"
DATA -1
'--- GCLIP
@TESTGCLIP
I=96
X1=(GRW/2)-I
X2=(GRW/2)+I
Y1=(GRH/2)-I
Y2=(GRH/2)+I
GCLIP 0,X1,Y1,X2,Y2
FOR I=1 TO 50
GOSUB @RNDCOLOR
X1=RND(240)
Y1=RND(240)
X2=RND(400)
Y2=RND(240)
GLINE X1,Y1,X2,Y2,C
NEXT
RETURN
'--- RGB
@TESTRGB
PY=2
A$="RGB(R,G,B)"
GOSUB @BGPRTCTR
FOR I=1 TO 8
X=3
Y=5+I
Z=0
GOSUB @RNDCOLOR
LOCATE X,Y,Z
PRINT "RGB(";
PRINT FORMAT$("%3D",R);",";
PRINT FORMAT$("%3D",G);",";
PRINT FORMAT$("%3D",B);")";
GOSUB @ARROW
PRINT "&H";HEX$(C)
GFILL 260,Y*8,360,Y*8+7,C
NEXT
RETURN
'-----------
@RNDCOLOR
R=RND(256)
G=RND(256)
B=RND(256)
C=RGB(R,G,B)
RETURN
'--- GCIRCLE
@TESTCIRCLE
FOR I=1 TO 50
GOSUB @RNDCOLOR
X=RND(200)+100
Y=RND(100)+60
R=RND(50)+10
GCIRCLE X,Y,R,C
NEXT
RETURN
'--- GFILL
@TESTFILL
PY=2
A$="GFILL GBOX"
GOSUB @BGPRTCTR
FOR I=1 TO 50
GOSUB @RNDCOLOR
X1=RND(100)+50
Y1=RND(150)+60
X2=RND(100)+50
Y2=RND(150)+60
GFILL X1,Y1,X2,Y2,C
GBOX X1+200,Y1,X2+200,Y2,C
NEXT
RETURN
'--- GPAINT
@TESTPAINT
GCLS
FOR I=1 TO 25
GOSUB @RNDCOLOR
X1=RND(360)+32
Y1=RND(170)+48
X2=RND(360)+32
Y2=RND(170)+48
GBOX X1,Y1,X2,Y2,C
NEXT
FOR I=1 TO 100
GOSUB @RNDCOLOR
X=RND(300)+48
Y=RND(170)+48
GPAINT X,Y,C
NEXT
RETURN
'--- GCOPY
@TESTGCOPY
X=20:Y=80
W=100:H=100
GOSUB @GRPRNDFILL
X1=X:Y1=Y:X2=X+W-1:Y2=Y+H-1
LOCATE X1/8,Y1/8-2
PRINT "コピー モト"
WAIT 30
X3=150:Y3=Y1
GCOPY 0,X1, Y1, X2,Y2, X3, Y3, 0
LOCATE X3/8,Y3/8-2
PRINT "コピー サキ MODE 0"
X3=280:Y3=Y1
GCOPY 0,X1, Y1, X2,Y2, X3, Y3, 1
LOCATE X3/8,Y3/8-2
PRINT "コピー サキ MODE 1"
RETURN
'--- GFILL
@GRPRNDFILL
X1=X:Y1=Y
X2=X+W-1:Y2=Y+H-1
GFILL X1,Y1,X2,Y2,0
FOR I=0 TO 10
GOSUB @RNDCOLOR
X1=RND(W)+X
Y1=RND(H)+Y
X2=RND(W)+X
Y2=RND(H)+Y
GFILL X1,Y1,X2,Y2,C
NEXT
RETURN
'--- GSAVE
@TESTGSAVE
X=20:Y=80
W=100:H=100
GOSUB @GRPRNDFILL
DIM GBUFF[W*H]
PG=0 'G PAGE
FLAG=1 'へんかん あり
'FLAG=0 'へんかん なし
X=20
Y=80
W=100
H=100
'ハイレツ ニ ホゾン
GSAVE PG,X,Y,W,H,GBUFF,FLAG
GFILL 200,0,399,239,RGB(128,128,128)
FLAG=1 'ろんりしょく
'FLAG=0 'ぶつりしょく
MODE=0 'トウメイ
'MODE=1 'くろ コピー
X=250
GLOAD X,Y,W,H,GBUFF,FLAG,MODE
RETURN
'----------
@TESTBGSAVE
GOSUB @BGDUMMY1
C=0
BGFILL BGN,13,0,BGW-1,BGH-1,C
X=0
Y=0
W=8
H=8
DIM BGBUFF[W*H]
BGSAVE BGN,X,Y,W,H,BGBUFF
WAIT 120
X=250/16
Y=3
BGLOAD BGN,X,Y,W,H,BGBUFF
RETURN
'--- GPRIO
@TESTGPRIO
SPMAX=21
GOSUB @SPINITMAX
LOCATE 0,4,-255
FOR I=0 TO SPMAX-1
X=200
Y=I*8+32
Z=1024-(I*(1024+256)/20)
IF Z>1023 THEN Z=1023
SPOFS I,X,Y,Z
NEXT
LOCATE 0,3,-256
FOR I=0 TO SPMAX-1
Z=1024-(I*(1024+256)/20)
PRINT " GPRIO ";Z
GPRIO Z
FOR J=1 TO 60
BT=STKANDBTN()
IF BT AND 32 THEN BREAK
VSYNC 1
NEXT
IF BT AND 32 THEN BREAK
NEXT
WAIT 60
PRINT " GPRIO 1024"
GPRIO 1024
RETURN
'---- SPRITE INIT
@SPINITMAX
FOR SPN=0 TO SPMAX-1
GOSUB @SPINIT
NEXT
RETURN
@SPINIT0
SPN=0
@SPINIT
DISPLAY DISP
U=0
V=144
SPW=16
SPH=16
IF XMODE==4 THEN
GRW=320 'WIDTH
GRH=480 'HEIGHT
ELSE
IF DISP==0 THEN
GRW=400 'WIDTH
ELSE
GRW=320 'WIDTH
ENDIF
GRH=240 'HEIGHT
ENDIF
SPSET SPN,U,V,SPW,SPH
SPHOME SPN,SPW/2,SPH/2
SPOFS SPN,GRW/2,GRH/2,-100
RETURN
'-----------
@TESTBGPUT
GOSUB @BGDUMMY1
BGCLR BGN
C=96
FOR Y=0 TO 5
FOR X=0 TO 11
BGPUT BGN,X*2+1,Y*2+2,C
LOCATE X*4+2,Y*4+6
PRINT C
C=C+1
NEXT
NEXT
RETURN
'--------------
@TESTBGOFS
DIM BZ[4]
DIM BX[4]
FOR BGN=0 TO 3
BGW = (400*2)/16
BGH = 240/16
BGSCREEN BGN,BGW,BGH
BGHOME BGN,0,0
NEXT
FOR BGN=0 TO 3
FOR X=0 TO BGW-1
Y=11-(BGN*2)
FOR I=Y TO 14
C=609+(BGN MOD 2)*3
IF I>Y THEN C=C+32
BGPUT BGN,X,I,C
NEXT
NEXT
MSG=BGN
PY=BGN+1
A$="BG LAYER "+STR$(BGN)
GOSUB @BGPRTCTR
NEXT
GOSUB @BSKIPON
BX[0]=0
BX[1]=0
BX[2]=0
BX[3]=0
BZ[0]=-256
BZ[1]=-192
BZ[2]=0
BZ[3]=768
X1=0.5
FOR I=0 TO 10*60
FOR BGN=0 TO 3
X=BX[BGN]
X=X+(4-BGN)*X1
IF X>=400 OR X<=0 THEN X1=-X1
BX[BGN]=X
Y=0
Z=BZ[BGN]
BGOFS BGN,X,Y,Z
NEXT
BT=STKANDBTN()
IF BT AND 32 THEN BREAK
VSYNC 1
NEXT
MSG=0
FOR BGN=0 TO 3
BGOFS BGN,0,0
NEXT
GOSUB @BSKIPOFF
RETURN
'--------------
@TESTBGCLIP
GOSUB @BGDUMMY1
I=96
X1=(BGW*16/2)-I
X2=(BGW*16/2)+I
Y1=(BGH*16/2)-I
Y2=(BGH*16/2)+I
BGCLIP BGN,X1,Y1,X2,Y2
X=200
Y=120
TM=120
BGANIM BGN,"XY",1,X,Y,-TM,X-200,Y,-TM,X,Y,0
RETURN
'-------------
@TESTBGSCALE
GOSUB @BGDUMMY1
GOSUB @BSKIPON
X=200
Y=120
Z=0
BGOFS BGN,X,Y,Z
X=1
X1=-0.002
WHILE X<2
X=X+X1
IF X<0.2 THEN X1=-X1
BGSCALE BGN,X,X
PY=2
A$="SCALE:"+FORMAT$("%.3F",X)
GOSUB @BGPRTCTR
BT=STKANDBTN()
IF BT AND 32 THEN BREAK
VSYNC 1
WEND
WAIT 15
GOSUB @BSKIPOFF
RETURN
'--- BGROT
@TESTBGROT
GOSUB @BGDUMMY1
GOSUB @BSKIPON
X=200
Y=120
Z=0
BGOFS BGN,X,Y,Z
FOR ANG=0 TO 360
BGROT BGN, (ANG MOD 360)
PY=2
A$="ANGLE:"+STR$(ANG)+" DEG."
GOSUB @BGPRTCTR
BT=STKANDBTN()
IF BT AND 32 THEN BREAK
VSYNC 1
NEXT
WAIT 15
GOSUB @BSKIPOFF
RETURN
'--- BGANIM
@TESTBGANIM
GOSUB @BGDUMMY1
TM=120
X=200
Y=120
BGN=1
BGANIM BGN,"XY",TM,X,Y,-TM,400,240,-TM,X,Y,999
RETURN
'--- SPOFS
@TESTSPOFS
SPMAX=21
GOSUB @SPINITMAX
FOR I=0 TO 20
X=200
Y=I*8+40-16
Z=1024-(I*(1024+256)/20)
SPOFS I,X,Y,Z
LOCATE X/8-10,Y/8,Z
COLOR 7
PRINT "Z=";
PRINT FORMAT$("%4D",Z);
GOSUB @ARROW
NEXT
RETURN
'--- SPCLIP
@TESTSPCLIP
GOSUB @SPINIT0
I=96
X1=(GRW/2)-I
X2=(GRW/2)+I
Y1=(GRH/2)-I
Y2=(GRH/2)+I
SPCLIP X1,Y1,X2,Y2
SCL=2 'SCALE
SPSCALE SPN,SCL,SCL
TM=60 'TIME
X=200
Y=120
LPCNT=0
SPANIM SPN,"XY",TM,X,Y,-TM,X1,Y1,-TM,X2,Y2,-TM,X,Y,LPCNT
RETURN
'--- SPROT
@TESTSPROT
SPMAX=3
GOSUB @SPINITMAX
GOSUB @BSKIPON
FOR SPN=0 TO SPMAX-1
X=SPN*120+80
Y=120
SPOFS SPN,X,Y
GLINE X-32,Y,X+32,Y,RGB(255,255,0)
GLINE X,Y-32,X,Y+32,RGB(255,255,0)
Z=0
SPHOME SPN,SPN*8,SPN*8
LOCATE X/8-2,Y/8+5,Z
PRINT "SPHOME"
LOCATE X/8-2,Y/8+6,Z
PRINT "X:";SPN*8
LOCATE X/8-2,Y/8+7,Z
PRINT "Y:";SPN*8
NEXT
FOR ANG=0 TO 360
FOR SPN=0 TO SPMAX-1
SCL=2
SPSCALE SPN,SCL,SCL
SPROT SPN,ANG
NEXT
PY=2
A$="ANGLE:"+FORMAT$("%3D",ANG)+" DEG."
GOSUB @BGPRTCTR
BT=STKANDBTN()
IF BT AND 32 THEN BREAK
VSYNC 1
NEXT
GOSUB @BSKIPOFF
RETURN
'--- SPSCALE
@TESTSPSCALE
SPMAX=3
GOSUB @SPINITMAX
GOSUB @BSKIPON
FOR SPN=0 TO SPMAX-1
X=SPN*120+80
Y=120
SPOFS SPN,X,Y
GLINE X-32,Y,X+32,Y,RGB(255,255,0)
GLINE X,Y-32,X,Y+32,RGB(255,255,0)
Z=0
SPHOME SPN,SPN*8,SPN*8
LOCATE X/8-2,Y/8+5,Z
PRINT "SPHOME"
LOCATE X/8-2,Y/8+6,Z
PRINT "X:";SPN*8
LOCATE X/8-2,Y/8+7,Z
PRINT "Y:";SPN*8
NEXT
SCL=1
X1=-0.004
WHILE SCL<3
SCL = SCL+X1
IF SCL<0.5 THEN X1=-X1
FOR SPN=0 TO SPMAX-1
SPSCALE SPN,SCL,SCL
NEXT
PY=2
A$="SCALE:"+FORMAT$("%.3F",SCL)
GOSUB @BGPRTCTR
BT=STKANDBTN()
IF BT AND 32 THEN BREAK
VSYNC 1
WEND
GOSUB @BSKIPOFF
RETURN
'--------------
@SPCLRMAX
FOR SPN=0 TO SPMAX
SPCLR SPN
NEXT
RETURN
'--------------
@TESTSPCOLOR
SPMAX=6
GOSUB @SPINITMAX
RESTORE @SPCOLORTABLE
FOR SPN=0 TO SPMAX-1
READ ALPHA,R,G,B
IF ALPHA<0 THEN BREAK
IF ALPHA==255 THEN
C=RGB(R,G,B)
ELSE
C=RGB(ALPHA,R,G,B)
ENDIF
X=100
Y=SPN*32+40
SCL=2 'SCALE
SPOFS SPN,X,Y
SPSCALE SPN,SCL,SCL
SPCOLOR SPN,C
LOCATE X/8+3,Y/8,0
PRINT "RGB(";
IF ALPHA!=255 THEN
PRINT FORMAT$("%3D",ALPHA);",";
ENDIF
PRINT FORMAT$("%3D",R);",";
PRINT FORMAT$("%3D",G);",";
PRINT FORMAT$("%3D",B);")";
NEXT
RETURN
@SPCOLORTABLE
DATA 255,255, 0, 0
DATA 255, 0,255, 0
DATA 255, 0, 0,255
DATA 64,255,255,255
DATA 128,255,255,255
DATA 255,255,255,255
DATA -1,-1,-1,-1
RETURN
'--------------
@TESTSPCHR
SPMAX=6*3
GOSUB @SPINITMAX
FOR SPN=0 TO SPMAX-1
SCL=2 'SCALE
SPSCALE SPN,SCL,SCL
NEXT
FOR NUM=0 TO 2
RESTORE @SPCHRTABLE
FOR I=0 TO 5
READ ATR
IF ATR<0 THEN BREAK
ATR=ATR OR 1 'VISIBLE
SPN=(NUM*6)+I
X=32+(I*64)
Y=NUM*72+32
U=0
V=NUM*16+144
Z=0
SPOFS SPN,X,Y
SPCHR SPN,U,V,SPW,SPH,ATR
LOCATE X/8-3,Y/8+2,Z
PRINT "U=";U
LOCATE X/8-3,Y/8+3,Z
PRINT "V=";V
LOCATE X/8-3,Y/8+4,Z
PRINT "ATTR=";ATR
X=X+64
NEXT
NEXT
RETURN
@SPCHRTABLE
DATA 0 'TURN0
DATA 2 'TURN90
DATA 4 'TURN180
DATA 6 'TURN270
DATA 8 'FRIP H
DATA 16 'FRIP V
DATA -1
'--------------
@TESTSPCOL
SPMAX=8
GOSUB @SPINITMAX
GOSUB @BSKIPON
FOR SPN=0 TO SPMAX-1
SPCOL SPN,-SPW/2,-SPH/2,SPW,SPH,1
X=SPN*32+64
Y=120
Z=0
SPOFS SPN,X,Y
SCL=2
SPSCALE SPN,SCL,SCL
IF SPN THEN LOCATE X/8,Y/8+2,Z:PRINT SPN
NEXT
ANG=0
SPN=0
FOR I=0 TO 15*60
X=COS(RAD(ANG))*96+200
Y=SIN(RAD(ANG*4))*48+120
Z=0
SPOFS SPN,X,Y,Z
ANG=ANG+0.4
IF ANG>=360 THEN ANG=ANG-360
A$="SPHITSP:"
A$=A$+FORMAT$("%3D",SPHITSP(SPN))
PY=2
GOSUB @BGPRTCTR
BT=STKANDBTN()
IF BT AND 32 THEN BREAK
VSYNC 1
NEXT
CLS
RETURN
'--------------
@TESTSPANIM
SPMAX=4
GOSUB @SPINITMAX
SCL=2 'SCALE
FOR SPN=0 TO SPMAX-1
SPSCALE SPN,SCL,SCL
NEXT
TM=120 'TIME
X=100
Y=48
Z=0
LPCNT=0 'LOOP COUNT
SPN=0
SPANIM SPN,"XY",TM,X,Y,TM,X+200,Y,LPCNT
LOCATE X/8,Y/8+2,Z
PRINT "XY ホカン ナシ"
Y=Y+48
SPN=SPN+1
SPANIM SPN,"XY",TM,X,Y,-TM,X+200,Y,LPCNT
LOCATE X/8,Y/8+2,Z
PRINT "XY ホカン アリ"
Y=Y+48
SPN=SPN+1
SPANIM SPN,"XY",TM,X,Y,-TM,X+200,Y,LPCNT
SPANIM SPN,"UV",8,U,V,8,U+16,V,8,U+32,V,LPCNT
LOCATE X/8,Y/8+2,Z
PRINT "XY ホカン アリ + UV"
Y=Y+48
SPN=SPN+1
SPANIM SPN,"XY",TM,X,Y,-TM,X+200,Y,LPCNT
SPANIM SPN,"R",TM,0,-TM,360,LPCNT
SPANIM SPN,"UV",8,U,V,8,U+16,V,8,U+32,V,LPCNT
LOCATE X/8,Y/8+2,Z
PRINT "XY ホカン アリ + UV + R ホカン アリ"
RETURN
'---------------
@TESTSPLINK
SPMAX=5
GOSUB @SPINITMAX
GOSUB @BSKIPON
FOR SPN=1 TO SPMAX-1
X=0
Y=16
Z=0
SPOFS SPN,X,Y,Z
NEXT
LOCATE 0,6,0
FOR SPN=1 TO SPMAX-1
SPLINK SPN,SPN-1
PRINT " SPLINK ";SPN;",";SPN-1
NEXT
FOR SPN=0 TO SPMAX-1
FOR I=0 TO 360 STEP 4
SPOFS SPN OUT X,Y
X=X+COS(RAD(I))*3
SPOFS SPN,X,Y
LOCATE 0,SPN*2+15,0
PRINT " SPOFS ";SPN;
PRINT ",";
PRINT FORMAT$("%3D",X);
PRINT ",";
PRINT FORMAT$("%3D",Y);
BT=STKANDBTN()
IF BT AND 32 THEN BREAK
VSYNC 1
NEXT
IF BT AND 32 THEN BREAK
NEXT
GOSUB @BSKIPOFF
RETURN
'--- VAL
@TESTVAL
RESTORE @VALTABLE
LOCATE 0,6,0
WHILE 1
READ A$
IF A$=="" THEN BREAK
PRINT " ";
PRINT "VAL(";CHR$(34);A$;CHR$(34);")";
GOSUB @ARROW
PRINT VAL(A$)
WEND
RETURN
@VALTABLE
DATA "1"
DATA "123456"
DATA "&H12"
DATA "&HFF"
DATA "ABC"
DATA "ア"
DATA ""
'--- HEX$
@TESTHEX
LOCATE 0,4
FOR I=-1 TO 20
PRINT " ";
PRINT "HEX$(";FORMAT$("%2D",I);")";
GOSUB @ARROW
PRINT HEX$(I)
NEXT
RETURN
'--- FORMAT$
@TESTFORMAT
RESTORE @FORMATTABLE
FOR I=0 TO 99
READ A$
IF A$=="" THEN BREAK
READ NUM
Y=4+I*2
LOCATE 4,Y
PRINT "FORMAT$(";
PRINT CHR$(34);A$;CHR$(34);
PRINT ",";NUM;")";
LOCATE 30,Y
GOSUB @ARROW
PRINT FORMAT$(A$,NUM)
NEXT
RETURN
@FORMATTABLE
DATA "%D",1234
DATA "%X",1234
DATA "%8D",1234
DATA "%8X",1234
DATA "%08D",1234
DATA "%-8D",1234
DATA "%+8D",1234
DATA "% 8D",1234
DATA "%F",1234.5678
DATA "%.2F",1234.5678
DATA "%6.2F",1234.5678
DATA ""
'------------------
@TESTLEN
RESTORE @LENTABLE
FOR I=0 TO 99
READ A$
IF A$=="" THEN BREAK
LOCATE 5,6+I*2
PRINT "LEN(";
PRINT CHR$(34);A$;CHR$(34);
PRINT ")";
LOCATE 30,6+I*2
GOSUB @ARROW
PRINT LEN(A$)
NEXT
RETURN
@LENTABLE
DATA "A"
DATA "ABC"
DATA "ABCDEF"
DATA "ABCDEFGHI"
DATA ""
'------------------
@TESTINSTR
RESTORE @INSTRTABLE
LOCATE 0,6
WHILE 1
READ A$
IF A$=="" THEN BREAK
READ B$
PRINT " INSTR(";
PRINT CHR$(34);A$;CHR$(34);",";
PRINT CHR$(34);B$;CHR$(34);
PRINT ")";
GOSUB @ARROW
PRINT INSTR(A$,B$)
PRINT ""
WEND
RETURN
@INSTRTABLE
DATA "ABCDEF","A"
DATA "ABCDEF","ABC"
DATA "ABCDEF","CDE"
DATA "ABCDEF","XYZ"
DATA ""
'---LEFT$/RIGHT$/MID$
@TESTMID
LOCATE 0,2
A$="ABCDE"
NUM=3
FOR I=0 TO 5
PRINT " MID$(";
PRINT CHR$(34);A$;CHR$(34);",";
PRINT I;",";NUM;")";
GOSUB @ARROW
PRINT MID$(A$,I,NUM)
NEXT
A$="LEFT$"
PY=5
GOSUB @BGPRTCTR
LOCATE 0,PY*2+2
FOR I=0 TO 5
PRINT " LEFT$(";
PRINT CHR$(34);A$;CHR$(34);",";
PRINT I;")";
GOSUB @ARROW
PRINT LEFT$(A$,I)
NEXT
A$="RIGHT$"
PY=10
GOSUB @BGPRTCTR
LOCATE 0,PY*2+2
FOR I=0 TO 5
PRINT " RIGHT$(";
PRINT CHR$(34);A$;CHR$(34);",";
PRINT I;")";
GOSUB @ARROW
PRINT RIGHT$(A$,I)
NEXT
RETURN
'--- SUBST
@TESTSUBST
A$="ABCDEFGHI"
LOCATE 0,6
RESTORE @SUBSTTABLE
WHILE 1
READ I
IF I<0 THEN BREAK
READ NUM
READ B$
PRINT " SUBST$(";
PRINT CHR$(34);A$;CHR$(34);
PRINT ",";I;",";NUM;",";
PRINT CHR$(34);B$;CHR$(34);
PRINT ")";
GOSUB @ARROW
PRINT SUBST$(A$,I,NUM,B$)
PRINT ""
WEND
RETURN
@SUBSTTABLE
DATA 0,3,"XYZ"
DATA 3,3,"XYZ"
DATA 3,3,"X"
DATA 3,3,"UVWXYZ"
DATA 6,3,"XYZ"
DATA 9,3,"XYZ"
DATA -1
'--- FLOOR
@TESTFLOOR
A$="FLOOR ROUND CEIL"
PY=2
GOSUB @BGPRTCTR
LOCATE 0,6
FOR I=0 TO 20
X=I/10
PRINT " FLOOR(";
PRINT FORMAT$("%1.1F",X);")";
GOSUB @ARROW
PRINT FLOOR(X);
PRINT " ROUND(";
PRINT FORMAT$("%1.1F",X);")";
GOSUB @ARROW
PRINT ROUND(X);
PRINT " CEIL(";
PRINT FORMAT$("%1.1F",X);")";
GOSUB @ARROW
PRINT CEIL(X)
NEXT
RETURN
'---ABS
@TESTABS
LOCATE 0,5
FOR I=-10 TO 10
PRINT " ABS(";
PRINT FORMAT$("%2D",I);
PRINT ")";
GOSUB @ARROW
PRINT ABS(I)
NEXT
RETURN
'---SGN
@TESTSGN
LOCATE 0,5
FOR I=-10 TO 10
PRINT " SGN(";
PRINT FORMAT$("%2D",I);
PRINT ")";
GOSUB @ARROW
PRINT SGN(I)
NEXT
RETURN
'---MIN
@TESTMIN
NUM=16
DIM ARRAY[NUM]
LOCATE 0,6
FOR I=0 TO NUM-1
X=RND(1000)
PRINT " ARRAY[";
PRINT FORMAT$("%2D",I);
PRINT "] = ";
PRINT FORMAT$("%3D",X)
ARRAY[I]=X
NEXT
PRINT ""
PRINT " MIN(ARRAY)";
GOSUB @ARROW
PRINT MIN(ARRAY)
PRINT ""
PRINT " MAX(ARRAY)";
GOSUB @ARROW
PRINT MAX(ARRAY)
RETURN
'--- SORT/RSORT
@TESTSORT
NUM=16
DIM ARRAY2[NUM]
A$=" SORT RSORT"
PY=2
GOSUB @BGPRTCTR
FOR I=0 TO NUM-1
LOCATE 4,I+6
X=RND(1000)
PRINT "A[";
PRINT FORMAT$("%2D",I);
PRINT "] = ";
PRINT FORMAT$("%3D",X)
ARRAY2[I]=X
NEXT
SORT ARRAY2
FOR I=0 TO NUM-1
LOCATE 20,I+6
PRINT "A[";
PRINT FORMAT$("%2D",I);
PRINT "] : ";
PRINT FORMAT$("%3D",ARRAY2[I])
NEXT
RSORT ARRAY2
FOR I=0 TO NUM-1
LOCATE 35,I+6
X=RND(1000)
PRINT "A[";
PRINT FORMAT$("%2D",I);
PRINT "] : ";
PRINT FORMAT$("%3D",ARRAY2[I])
NEXT
RETURN
'--- RND/RNDF
@TESTRND
A$="RND RNDF"
PY=2
GOSUB @BGPRTCTR
LOCATE 0,6
NUM=16
FOR I=0 TO NUM-1
PRINT " RND(1000)";
GOSUB @ARROW
PRINT FORMAT$("%3D",RND(1000));
PRINT " RNDF()";
GOSUB @ARROW
PRINT FORMAT$("%.8F",RNDF())
NEXT
RETURN
'--- SQR/POW
@TESTSQR
A$="SQR POW"
PY=2
GOSUB @BGPRTCTR
LOCATE 0,6
FOR I=1 TO 10
PRINT " ";
PRINT "SQR(";
PRINT FORMAT$("%2D",I);
PRINT ")";
GOSUB @ARROW
T=SQR(I)
PRINT FORMAT$("%.8F",T);
PRINT " ";
PRINT "POW(";
PRINT FORMAT$("%.8F",T);
PRINT ",2)";
GOSUB @ARROW
PRINT POW(T,2)
NEXT
RETURN
'--- EXP/LOG
@TESTEXP
A$="EXP LOG"
PY=2
GOSUB @BGPRTCTR
LOCATE 0,6
FOR I=0 TO 2
PRINT " ";
PRINT "EXP(";
PRINT FORMAT$("%1D",I);
PRINT ")";
GOSUB @ARROW
T=EXP(I)
PRINT FORMAT$("%.8F",T);
PRINT " ";
PRINT "LOG(";
PRINT FORMAT$("%.8F",T);
PRINT ")";
GOSUB @ARROW
PRINT LOG(T)
NEXT
'ネイピアすうE
RETURN
'--- RAD/DEG
@TESTRAD
A$="RAD DEG"
PY=2
GOSUB @BGPRTCTR
LOCATE 0,6
FOR I=0 TO 360 STEP 30
PRINT " ";
PRINT "RAD(";
PRINT FORMAT$("%3D",I);")";
GOSUB @ARROW
T=RAD(I)
PRINT FORMAT$("%1.8F",T);
PRINT " ";
PRINT "DEG(";
PRINT FORMAT$("%1.8F",T);
PRINT ")";
GOSUB @ARROW
PRINT DEG(T)
NEXT
RETURN
'--- SIN/COS
@TESTSIN
SPMAX=72
GOSUB @SPINITMAX
GOSUB @BSKIPON
FOR SPN=0 TO SPMAX-1
U=0
V=144
SPCHR SPN,U,V,SPW,SPH
NEXT
SPD=0.5
R=60
FOR ISO=0 TO 360 STEP SPD
BT=STKANDBTN()
IF BT AND 32 THEN BREAK
Y1=0
FOR SPN=0 TO SPMAX-1
ANG=(SPN*5)+ISO
IF SPN MOD 2 THEN ANG=ANG+180
ANG=ANG MOD 360
T=RAD(ANG)
X=COS(T)*R+200
Y=SIN(T)*(R/5)+32
Z=POW((SIN(T)+1)*16,2)-256
SPOFS SPN,X,Y+Y1,Z
Y1=Y1+2.5
NEXT
VSYNC 1
NEXT
CLS
RETURN
'--- TAN
@TESTTAN
CX=GRW/2
CY=GRH/2
C=RGB(255,255,255)
FOR X=-90 TO 90 STEP 30
GLINE (X*1.6)+CX,CY-8,(X*1.6)+CX,CY+8,C
LOCATE X/5+25,15-1:PRINT X
NEXT
FOR Y=-3 TO 3
GLINE CX-8,CY-Y*32,CX+8,CY-Y*32,C
LOCATE 25+1,15-Y*4:PRINT Y
NEXT
GLINE 0,CY,399,CY,C
GLINE CX,0,CX,239,C
FOR X=-89 TO 89 STEP 0.1
Y=TAN(RAD(X))
GPSET CX+X*1.6,CY-Y*32,RGB(0,0,255)
NEXT
COLOR 9
LOCATE 25+9,15-4:PRINT "Y=TAN(RAD(X))"
RETURN
'--- ATAN
@TESTATAN
SPMAX=2
GOSUB @SPINITMAX
SPN=0
X1=200
Y1=64
SPOFS SPN,X1,Y1
SPN=1
X2=200
Y2=160
FOR X2=100 TO 300
ANG=DEG(ATAN(Y2-Y1,X2-X1))
IF ANG<0 THEN ANG=ANG+360
LOCATE 0,19
PRINT " X1:";
PRINT FORMAT$("%3D",X1)
PRINT " Y1:";
PRINT FORMAT$("%3D",Y1)
PRINT " X2:";
PRINT FORMAT$("%3D",X2)
PRINT " Y2:";
PRINT FORMAT$("%3D",Y2)
PRINT ""
PRINT " DEG(ATAN(Y2-Y1,X2-X1))";
GOSUB @ARROW
PRINT FORMAT$("%3.8F",ANG);
SPOFS SPN,X2,Y2
PY=2
A$="ANGLE:"+FORMAT$("%3D",ANG)+" DEG."
GOSUB @BGPRTCTR
VSYNC 1
NEXT
R=300
GLINE X1,Y1,X1+R,Y1,RGB(255,255,0)
X3=X1+COS(RAD(ANG))*R
Y3=Y1+SIN(RAD(ANG))*R
GLINE X1,Y1,X3,Y3,RGB(255,255,0)
RETURN
'--- ASIN/ACOS
@TESTASIN
CX=GRW/2
CY=GRH/2
C=RGB(255,255,255)
FOR X=-1 TO 1
GLINE X*80+CX,CY-8,X*80+CX,CY+8,C
LOCATE X*10+25,15-1:PRINT X
NEXT
FOR Y=-3 TO 3
GLINE CX-8,CY-Y*32,CX+8,CY-Y*32,C
LOCATE 25+1,15-Y*4:PRINT Y
NEXT
GLINE 0,CY,399,CY,C
GLINE CX,0,CX,239,C
FOR X=-1 TO 1 STEP 0.01
Y=ASIN(X)
GPSET CX+X*80,CY-Y*32,RGB(255,0,0)
Y=ACOS(X)
GPSET CX+X*80,CY-Y*32,RGB(0,255,0)
NEXT
COLOR 3
LOCATE 25+9,15-9:PRINT "Y=ASIN(X)"
COLOR 5
LOCATE 25-9,15-9:PRINT "Y=ACOS(X)"
RETURN
'--- SINH/COSH
@TESTSINH
CX=GRW/2
CY=GRH/2
C=RGB(255,255,255)
FOR X=-2 TO 2
GLINE X*32+CX,CY-8,X*32+CX,CY+8,C
LOCATE X*4+25,15-1:PRINT X
NEXT
FOR Y=-3 TO 3
GLINE CX-8,CY-Y*32,CX+8,CY-Y*32,C
LOCATE 25+1,15-Y*4:PRINT Y
NEXT
GLINE 0,CY,399,CY,C
GLINE CX,0,CX,239,C
FOR X=-2 TO 2 STEP 0.01
Y=SINH(X)
GPSET CX+X*32,CY-Y*32,RGB(255,0,0)
Y=COSH(X)
GPSET CX+X*32,CY-Y*32,RGB(0,255,0)
Y=TANH(X)
GPSET CX+X*32,CY-Y*32,RGB(0,0,255)
NEXT
COLOR 3
LOCATE 25+9,15-9:PRINT "Y=SINH(X)"
COLOR 5
LOCATE 25-4,15-9:PRINT "Y=COSH(X)"
COLOR 9
LOCATE 25+9,15-4:PRINT "Y=TANH(X)"
RETURN
'------------
@TESTSHIFT
DIM ARRAY3[6]
FOR I=0 TO LEN(ARRAY3)-1
ARRAY3[I]=I
NEXT
A$="----------"
GOSUB @PRTDIM
A$="UNSHIFT A,99"
UNSHIFT ARRAY3,99
GOSUB @PRTDIM
A$="R=SHIFT(A)"
RET=SHIFT(ARRAY3)
GOSUB @PRTDIM
A$="PUSH A,99"
PUSH ARRAY3,99
GOSUB @PRTDIM
A$="R=POP(A)"
RET=POP(ARRAY3)
GOSUB @PRTDIM
RETURN
'-----------------
@PRTDIM
CLS
LOCATE 5,8
PRINT A$
GOSUB @ARROW2
FOR I=0 TO LEN(ARRAY3)-1
PRINT " "*5;
PRINT "A[";I;"] : ";ARRAY3[I]
NEXT
WAIT 120
RETURN
'------------
@TESTCHKF
N$="TXT:TEMPTXT"
T$=""
FOR I=1 TO 512
T$=T$+CHR$((I MOD &H40)+&H20)
NEXT
RET=CHKFILE(N$)
LOCATE 0,5
PRINT "CHKFILE(";CHR$(34);N$;CHR$(34);")";
GOSUB @ARROW
PRINT RET
RETURN
'---
@TESTFILES
DIM NAME$[20]
LOCATE 0,4
FILES NAME$
PRINT " FILES NAME$"
GOSUB @ARROW2
FOR I=0 TO LEN(NAME$)-1
COLOR 7
IF I>17 THEN
PRINT " AND MORE..."
BREAK
ENDIF
PRINT " NAME$[";I;"]:";
COLOR 15
PRINT NAME$[I]
NEXT
RETURN
'------------
@TESTSAVE
N$="TXT:TEMPTXT"
T$=""
FOR I=1 TO 512
T$=T$+CHR$((I MOD &H40)+&H20)
NEXT
LOCATE 0,5
PRINT "SAVE ";CHR$(34);N$;CHR$(34)
SAVE N$,T$
PRINT "LOAD ";CHR$(34);N$;CHR$(34)
T$=""
LOAD N$ OUT T$
PRINT T$
RETURN
'--- BG PRINT SUB
@BGPRTCTR
PX=((GRW/2)/16)-(LEN(A$)/2)
@BGPRT
FOR IDX=0 TO LEN(A$)-1
C=ASC(MID$(A$,IDX,1))
IF C<0 THEN C=0
IF C>=32*3 THEN C=0
BGPUT MSG,PX+IDX,PY,C
NEXT
RETURN
'-------------
@TESTBEEP
GOSUB @BSKIPON
'TONE=0 'TONE NO. PRESET 0〜133
'PITCH=0 '-200 〜 200
'VOL=127 '0 〜 127
'PAN=0 '0:LEFT/64:CENTER/127:RIGHT
'BEEP TONE,PITCH,VOL,PAN
LOCATE 0,6,0
PRINT " こうかおんばんごう0〜133の はんいで ランダムさいせい
PRINT ""
FOR J=0 TO 10
TONE = RND(134) 'TONE NUMBER
PRINT " BEEP ";TONE
BEEP TONE
FOR I=1 TO 60
BT=STKANDBTN()
IF BT AND 32 THEN BREAK
VSYNC 1
NEXT
IF BT AND 32 THEN BREAK
NEXT
GOSUB @BSKIPOFF
RETURN
'--- BGMPLAY
@TESTBGMPLAY
TRK=0 'TRACK NUM.0〜7
NUM=RND(43) 'BGM NO.PRESET 0〜42/USER 128〜255
MML$=""
LOCATE 0,6,0
PRINT " おんがくばんごう0〜42の はんいで ランダムさいせい
PRINT ""
PRINT " BGMPLAY ";NUM
BGMPLAY NUM
RETURN
'--- BGMSTOP
@TESTBGMSTOP
LOCATE 0,6,0
PRINT " BGMSTOP "
BGMSTOP
RETURN
'---
@TESTWAVSET
TONE=224 'TONE NO. 224〜255
A=40 'ATTACK 0〜127
D=40 'DECAY 0〜127
S=80 'SUSTAIN 0〜127
R=60 'RELEASE 0〜127
WAV$=""
FOR I=1 TO 64
V=SIN(RAD(I*360/16))*120
WAV$=WAV$+RIGHT$("00"+HEX$(V),2)
X=240+I*2
Y=120
GLINE X,Y,X,Y-V,RGB(0,255,0)
NEXT
GLINE 240,Y,X,Y,RGB(255,0,0)
WAVSET TONE,A,D,S,R,WAV$
LOCATE 0,8,0
PRINT "TONE NUMBER:";TONE
PRINT ""
PRINT "ATTACK :";A
PRINT "DECAY :";D
PRINT "SUSTAIN:";S
PRINT "RELEASE:";R
X=16
Y=120
C=RGB(255,255,0)
W=50
GLINE X,Y,X+A,Y-120,C
GLINE X+A,Y-120,X+A+D,Y-S,C
GLINE X+A+D,Y-S,X+A+D+W,Y-S,C
GLINE X+A+D+W,Y-S,X+A+D+W+R,Y,C
GLINE X,Y,X+A+D+W+R,Y,RGB(255,0,0)
LOCATE 0,20
PRINT " WAVSET ";
PRINT TONE;",";A;",";D;",";S;",";R;",";
PRINT CHR$(34);WAV$;CHR$(34)
MML$="@"+STR$(TONE)+"O4CDEFGABO5C"
BGMPLAY MML$
PRINT ""
PRINT " BGMPLAY ";CHR$(34);MML$;CHR$(34);
RETURN
'--- BGMSET
@TESTBGMSET
NUM=128 'BGM NO. 128〜255
MML$="O4CDEFGABO5C"
LOCATE 0,6,0
PRINT " BGMSET ";
PRINT NUM;",";CHR$(34);MML$;CHR$(34)
BGMSET NUM,MML$
PRINT ""
NUM=128
PRINT " BGMPLAY ";NUM
BGMPLAY NUM
RETURN
'--- BGMVOL
@TESTBGMVOL
BGMPLAY 1
FOR I=0 TO 8
VOL=127-((8-I)*16)
IF VOL<0 THEN VOL=0
PY=3+I
A$="BGMVOL "+STR$(VOL)
GOSUB @BGPRTCTR
BGMVOL VOL
WAIT 60
NEXT
WAIT 120
BGMSTOP
RETURN
'--- TALK
@TESTTALK
A$="アカサタナ ハマヤラワ"
TALK A$
LOCATE 5,6,0
PRINT "TALK ";
PRINT CHR$(34);A$;CHR$(34)
RETURN
'--- EFCSET
@TESTEFC
LOCATE 0,6,0
COLOR 7
PRINT " エフェクターをせってい"
MML$="@1O4CDEFGABO5C"
EFCON 'エフェクターON
TYPE=0 'エフェクターのプリセットせってい
COLOR 7
PRINT " (1)エフェクターを つかわずに BGMさいせい"
PRINT ""
COLOR 15
PRINT " EFCSET ";TYPE
EFCSET TYPE
'エフェクターの プリセットせってい
'0 = なし
'1 = リバーブ(BATHROOM)
'2 = リバーブ(CAVE)
'3 = リバーブ(SPACE)
BGMPLAY MML$
GOSUB @BGMWAIT
PRINT ""
TYPE=RND(3)+1 'エフェクターのプリセットせってい
COLOR 7
PRINT " (2)エフェクターを プリセットで せっていして BGMさいせい"
PRINT ""
COLOR 15
PRINT " EFCSET ";TYPE
EFCSET TYPE
BGMPLAY MML$
GOSUB @BGMWAIT
PRINT ""
T1=RND(2001) 'しょきはんしゃじかん(0〜2000 MSEC)
T2=RND(2001) 'ざんきょうおんディレイじかん(0〜2000 MSEC)
T3=RND(10000)+1 'ざんきょうおんげんすいじかん(1〜10000 MSEC)
F1=RND(11)/10 'ざんきょうおんフィルタけいすう1( 0.0〜1.0)
F2=RND(11)/10 'ざんきょうおんフィルタけいすう2( 0.0〜1.0)
G1=RND(11)/10 'しょきはんしゃおんゲイン( 0.0〜1.0)
G2=RND(11)/10 'ざんきょうおんゲイン( 0.0〜1.0)
COLOR 7
PRINT " (3)エフェクターをしょうさいに せっていして BGMさいせい"
PRINT " (エフェクターのパラメータは ランダム)"
PRINT " しょきはんしゃ じかん :";T1;" MSEC"
PRINT " ざんきょうおん ディレイ じかん :";T2;" MSEC"
PRINT " ざんきょうおん げんすい じかん :";T3;" MSEC"
PRINT " ざんきょうおん フィルタ けいすう1:";F1
PRINT " ざんきょうおん フィルタ けいすう2:";F2
PRINT " しょきはんしゃおん ゲイン :";G1
PRINT " ざんきょうおん ゲイン :";G2
PRINT ""
COLOR 15
EFCSET T1,T2,T3,F1,F2,G1,G2
PRINT " EFCSET ";T1;",";T2;",";T3;",";F1;",";F2;",";G1;",";G2
BGMPLAY MML$
GOSUB @BGMWAIT
PRINT ""
EFCOFF 'エフェクターOFF
RETURN
'--- EFCWET
@TESTEFC2
LOCATE 0,6,0
COLOR 7
PRINT " エフェクターの ウェットちを せってい"
PRINT ""
MML$="@1O4CDEFGABO5C"
EFCON 'エフェクターON
TYPE=1 'エフェクターのプリセットせってい
EFCSET TYPE
FOR I=0 TO 128 STEP 32
W=I
IF W>127 THEN W=127
COLOR 15
PRINT " EFCWET ";W;",";W;",";W
EFCWET W,W,W
'BEEPウエットち 0〜127
'BGMウエットち 0〜127
'TALKウェットち 0〜127(64いじょうでON)
BGMPLAY MML$
GOSUB @BGMWAIT
BEEP 6
WAIT 30
TALK "アイウエオ"
WHILE TALKCHK()==TRUE
WEND
PRINT ""
NEXT
EFCOFF 'エフェクターOFF
RETURN
'---
@BGMWAIT
WHILE BGMCHK()==TRUE
VSYNC 1
WEND
RETURN
'-------------
@GRPINIT
DISPLAY DISP
GPRIO 1024 '
GCLS
IF XMODE==4 THEN
GRW=320 'WIDTH
GRH=480 'HEIGHT
ELSE
IF DISP==0 THEN
GRW=400 'WIDTH
ELSE
GRW=320 'WIDTH
ENDIF
GRH=240 'HEIGHT
ENDIF
FOR I=0 TO GRW-1 STEP 8
C=128
IF (I MOD 16) THEN C=C/2
GLINE I,0,I,GRH-1,RGB(0,0,C)
NEXT
FOR I=0 TO GRH-1 STEP 8
C=128
IF (I MOD 16) THEN C=C/2
GLINE 0,I,GRW-1,I,RGB(0,0,C)
NEXT
RETURN
'--- PRGGET$
@TESTPGET
LOCATE 0,3,0
PRINT "PRGGET$をつかうと プログラムを よみとることができます"
PRINT
@PRGLIST
PRGNUM=1
PRGEDIT PRGNUM,1
COLOR 13
PRINT
PRINT " "
PRINT
COLOR 7
PRINT "SLOT ";PRGNUM;" PROGRAM LIST"
FOR I=1 TO PRGSIZE(PRGNUM)
A$=PRGGET$()
COLOR 11
PRINT " (";I;"ぎょうめ) ";
COLOR 15
PRINT A$;
NEXT
RETURN
'--- PRGSET
@TESTPSET
LOCATE 0,3
PRINT "PRGSETをつかうと プログラムを いれかえることができます"
PRINT
PRGNUM=1
PRGEDIT PRGNUM
A$="PRINT 1"
PRGSET A$
PRINT "PRGSET ";CHR$(34);A$;CHR$(34)
A$="PRINT 2"
PRGSET A$
PRINT "PRGSET ";CHR$(34);A$;CHR$(34)
A$="PRINT 3"
PRGSET A$
PRINT "PRGSET ";CHR$(34);A$;CHR$(34)
GOSUB @PRGLIST
RETURN
'--- PRGINS
@TESTINS
LOCATE 0,3
PRINT "PRGINSをつかうと プログラムを そうにゅうすることができます"
PRINT
PRGNUM=1
PRGEDIT PRGNUM
A$="PRINT "+STR$(RND(100))
PRGINS A$
PRINT "PRGINS ";CHR$(34);A$;CHR$(34)
GOSUB @PRGLIST
RETURN
'--- PRGDEL
@TESTDEL
LOCATE 0,3
PRINT "PRGDELをつかうと プログラムを さくじょすることができます"
PRINT
PRGNUM=1
PRGEDIT PRGNUM
PRGDEL
PRINT "PRGDEL"
GOSUB @PRGLIST
RETURN
'-------------
@TESTSYSTEM
LOCATE 0,5
PRINT " SYSTEM VARIABLES"
PRINT " FREEMEM:";FREEMEM
PRINT " VERSION:&H";HEX$(VERSION)
PRINT " TABSTEP:";TABSTEP
PRINT " SYSBEEP:";SYSBEEP
PRINT " ERRNUM :";ERRNUM
PRINT " ERRLINE:";ERRLINE
PRINT " ERRPRG :";ERRPRG
PRINT " MAINCNT:";MAINCNT
PRINT " TRUE :";TRUE
PRINT " FALSE :";FALSE
PRINT " TIME$ :";TIME$
PRINT " DATE$ :";DATE$
RETURN
'---------
@ARROW
COLOR 13
PRINT " ";CHR$(57884);" ";
COLOR 15
RETURN
'---------
@ARROW2
COLOR 13
PRINT ""
PRINT " ";CHR$(57887)
PRINT ""
COLOR 15
RETURN
'----- BG INIT MSG
@BGINITMSG
BGCLR 0
BGCLR 1
IF XMODE==0 THEN
BGCLR 2
BGCLR 3
ENDIF
MSG=0
BSX=0
BSY=0
BSZ=-128
IF XMODE==4 THEN
GRW=320 'WIDTH
ELSE
GRW=400 'WIDTH
ENDIF
BGW=GRW/16 'WIDTH
BGH=GRH/16 'HEIGHT
BGSCREEN MSG,BGW,BGH
BGCLR MSG
BGOFS MSG,BSX,BSY,BSZ
IF XMODE==4 THEN RETURN
BGCLIP 0,0,0,GRW-1,BGH*16-1
BGCLIP 1,0,0,GRW-1,BGH*16-1
IF XMODE==0 THEN
BGCLIP 2,0,0,GRW-1,BGH*16-1
BGCLIP 3,0,0,GRW-1,BGH*16-1
ENDIF
RETURN
'--- GYROA
@TESTGYRO
SPMAX=3
GOSUB @SPINITMAX
FOR I=0 TO 2
X1=200
Y1=60+(60*I)
W=25
C=RGB(255,255,255)
GLINE X1,Y1-W,X1,Y1+W,C
GLINE X1-W,Y1,X1+W,Y1,C
SPOFS I,X1,Y1,0
SPSCALE I,2,2
NEXT
XON MOTION
PY=29
A$="[B]BUTTON : EXIT"
GOSUB @TXTPRTCTR
WHILE 1
LOCATE 0,5
GYROA OUT Y, P, R
SPROT 0, DEG(Y)
SPROT 1, DEG(P)
SPROT 2, DEG(R)
LOCATE 3,(60+0)/8
PRINT "YAW =";FORMAT$("%4D",DEG(Y))
LOCATE 3,(60+60)/8
PRINT "PITCH=";FORMAT$("%4D",DEG(P))
LOCATE 3,(60+120)/8
PRINT "ROLL =";FORMAT$("%4D",DEG(R))
BT=STKANDBTN()
IF BT AND 32 THEN BREAK
VSYNC 1
WEND
XOFF MOTION
CLS
RETURN
'--- ACCEL
@ACCEL
SPMAX=1
GOSUB @SPINITMAX
X1=200
Y1=120
W=100
C=RGB(255,255,255)
GLINE X1,Y1-W,X1,Y1+W,C
GLINE X1-W,Y1,X1+W,Y1,C
SPSCALE 0,3,3
XON MOTION
PY=29
A$="[B]BUTTON : EXIT"
GOSUB @TXTPRTCTR
WHILE 1
ACCEL OUT AX,AY,AZ
LOCATE 0,5
PRINT " ACCEL X=";FORMAT$("%06.3F",AX)
PRINT " ACCEL Y=";FORMAT$("%06.3F",AY)
PRINT " ACCEL Z=";FORMAT$("%06.3F",AZ)
X1=200
Y1=120
X2=X1+(AX*100)
Y2=Y1+(AY*100)
SPOFS 0, X2,Y2
BT=STKANDBTN()
IF BT AND 32 THEN BREAK
VSYNC 1
WEND
XOFF MOTION
CLS
RETURN
'--- MIC
@TESTMIC
XON MIC
LOCATE 0,5
PRINT "XON MIC"
PRINT "READY...";
WAIT 120
PRINT "START"
'0:8BIT
'1:16BIT
BIT=0
SEC=1
'0:8180HZ
'1:10190HZ
'2:16360HZ
'3:32730HZ
MODE=1
MICSTART MODE,BIT,SEC
FOR I=1 TO 60
LOCATE 0,8
PRINT FLOOR(100*I/60);"%"
' PRINT MICPOS
' PRINT MICSIZE
VSYNC 1
NEXT
MICSTOP
SZ=MICSIZE
PRINT "STOP"
PRINT "MICSIZE=";SZ
DIM ARRAY4[SZ]
MICSAVE ARRAY4
XOFF MIC
FOR I=0 TO SZ-1
X=400*I/SZ
Y=120+(ARRAY4[I]-128)
GPSET X,Y,RGB(0,255,0)
NEXT
RETURN
'--- EXPAD
@EXPAD
SPMAX=1
GOSUB @SPINITMAX
X1=200
Y1=120
W=100
C=RGB(255,255,255)
GLINE X1,Y1-W,X1,Y1+W,C
GLINE X1-W,Y1,X1+W,Y1,C
SPSCALE 0,3,3
XON EXPAD
IF RESULT==FALSE THEN RETURN
PY=29
A$="[B]BUTTON : EXIT"
GOSUB @TXTPRTCTR
WHILE 1
STICKEX OUT X,Y
LOCATE 0,5,0
PRINT " X=";
PRINT FORMAT$("%06.3F",X)
PRINT " Y=";
PRINT FORMAT$("%06.3F",Y)
X2=X1+X*100
Y2=Y1-Y*100
SPOFS 0,X2,Y2,-100
BT=STKANDBTN()
IF BT AND 32 THEN BREAK
VSYNC 1
WEND
XOFF EXPAD
RETURN
'--- DIALOG
@TESTDLG
A$="DIALOG で ダイアログ を ひょうじします"
TYPE=RND(6)
' 0=りょうしょう
' 1=いいえ/はい
' 2=もどる/つぎへ
' 3=ちゅうし/けってい
' 4=ちゅうし/じっこう
' 5=つぎへ
LOCATE 0,6
PRINT " DIALOG(";
PRINT CHR$(34);A$;CHR$(34);
PRINT ",";TYPE;")"
COLOR 7
PRINT ""
PRINT " (けっかを したがめんに ひょうじ)"
RET=DIALOG(A$,TYPE)
GOSUB @ARROW2
PRINT " もどりち = ";RET
'RET: -1:NO / 1:YES
RETURN
'----- MP TEST
@MPTEST
LOCATE 0,2
PRINT " ローカルつうしんテスト(ほんたいが 2だいいじょう ひつようです)"
MPMAX=4 'PLAYERS
TAG$="COM"
LOCATE 0,3
PRINT " MPSTART";
MPSTART MPMAX,TAG$
PRINT " RESULT:";RESULT;
IF RESULT==-1 THEN
RETURN
ENDIF
PRINT " / MPLOCAL:";MPLOCAL;
IF MPHOST<0 THEN
RETURN
ENDIF
PY=29
A$="[B]BUTTON : EXIT"
GOSUB @TXTPRTCTR
WHILE 1
COLOR 7
LOCATE 0,4
PRINT " MPCOUNT:";MPCOUNT
IF MPCOUNT<2 THEN
BREAK
ENDIF
FOR ID=0 TO 3
GOSUB @MPSUB
VSYNC 1
NEXT
BT=STKANDBTN()
IF BT AND 32 THEN BREAK
WEND
GOSUB @BSKIPOFF
MPEND
RETURN
'---
@MPSUB
X=0
Y=ID*6+5
COLOR 15
LOCATE X,Y+0
PRINT "[ID:";ID;"]";
PRINT "-"*44
IF ID>=MPCOUNT THEN RETURN
IF ID==MPLOCAL THEN
COLOR 5
PRINT "(YOU)";
ELSE
COLOR 13
PRINT " ";
ENDIF
PRINT " / ";
IF ID==MPHOST THEN
PRINT "おやき";
ELSE
PRINT "こき ";
ENDIF
PRINT " / なまえ:";MPNAME$(ID);
PRINT " / MPSTAT:";MPSTAT(ID)
BT=BUTTON(0,ID)
PRINT " BUTTON:";HEX$(BT,4);
STICK ID OUT SX,SY
A$=FORMAT$("%6.3F",SX)
A$=A$+","
A$=A$+FORMAT$("%6.3F",SY)
PRINT " / STICK:(";A$;")"
TOUCH ID OUT TS,TX,TY
A$=FORMAT$("%03D",TS)
A$=A$+":"
A$=A$+FORMAT$("%03D",TX)
A$=A$+","
A$=A$+FORMAT$("%03D",TY)
PRINT " TOUCH:(";A$;")"
PRINT " DATA:";
FOR J=0 TO 8
RET=MPGET(ID,J)
IF J>0 THEN PRINT ",";
PRINT HEX$(RET,4);
NEXT
RETURN
'-------
@SPEEDTEST
LOCATE 0,6
PRINT " ないよう : スコア(はやいほど かずが おおきい)"
PRINT " ----------:----------------------"
PRINT " たしざん : ";
SCORE=0
CNT=MAINCNT
I=0
WHILE ((MAINCNT-CNT)<60)
I=I+1
SCORE=SCORE+1
WEND
PRINT SCORE
PRINT " PRINTぶん : ";
X=CSRX
Y=CSRY
SCORE=0
CNT=MAINCNT
WHILE ((MAINCNT-CNT)<60)
C=&H41-(SCORE MOD 26)
LOCATE X,Y:PRINT CHR$(C)
SCORE=SCORE+1
WEND
LOCATE X,Y
PRINT SCORE
PRINT " スプライトいどう : ";
SPSET 0,2544
SCORE=0
CNT=MAINCNT
WHILE ((MAINCNT-CNT)<60)
SPOFS 0,(SCORE MOD 400),120
SCORE=SCORE+1
WEND
PRINT SCORE
PRINT " ラインびょうが : ";
SCORE=0
CNT=MAINCNT
WHILE ((MAINCNT-CNT)<60)
GLINE RND(400),RND(240),RND(400),RND(240),RGB(0,0,128)
SCORE=SCORE+1
WEND
PRINT SCORE
RETURN
'-------
@DEMO1
XSCREEN 0,512,4
PY=29
A$="[LEFT][RIGHT]:MOVE / [B]BUTTON:EXIT"
PX=25-(LEN(A$)/2)
LOCATE PX,PY,-250
PRINT A$;
FOR I=0 TO 240-1
U=0
V=I
W=400
H=1
SPSET I,U,V,W,H,1
SPHOME I,W/2,H
NEXT
L=32
ANG=0
WHILE 1
BT=STKANDBTN()
IF BT AND 32 THEN BREAK
IF BTN AND 4 THEN L=L-1
IF BTN AND 8 THEN L=L+1
IF L<1 THEN L=1
IF L>200 THEN L=200
ANG=(ANG+1) MOD 360
A=ANG
FOR I=0 TO 240-1
X=SIN(RAD(A))*L
Y=I
Z=-I
SPOFS I,X+200,Y,Z
SPSCALE I,(I/120),4
SPROT I,ANG
A=A+1
NEXT
VSYNC 1
WEND
CLS
XMODE=0
GOSUB @SCRNINIT
RETURN
'-------
@DEMO2
XSCREEN 0,512,2
GCLS:CLS:SPCLR:BGCLR
SPDEF
EFCON 'エフェクターON
EFCSET 1
BGMPLAY 41
'---
GPRIO 1024
GLINE 0,240,400,0,RGB(64,64,64)
GPAINT 0,0,RGB(96,96,96)
GPAINT 399,239,RGB(160,160,160)
GLINE 0,0,400,240,RGB(64,64,64)
SX=40*4
SY=24*4
GFILL SX,SY,400-SX,240-SY,RGB(128,128,128)
GBOX SX,SY,400-SX,240-SY,RGB(64,64,64)
'---
CMAX=5
DIM SPC[CMAX]
COPY SPC,"@CHRDATA"
@CHRDATA
DATA 1432,1435,1438,1441,1444
'---
HIS=40
ZMAX=1000+200
DIM HD[CMAX],TL[CMAX]
DIM SPX[CMAX],SPY[CMAX],SPZ[CMAX]
DIM VX[CMAX],VY[CMAX],VZ[CMAX]
DIM HX[CMAX,HIS],HY[CMAX,HIS],HZ[CMAX,HIS]
DIM STX[CMAX],STY[CMAX],STZ[CMAX]
PY=29
A$="[B]BUTTON : EXIT"
PX=25-(LEN(A$)/2)
LOCATE PX,PY,-250
PRINT A$;
'---
IX=0
FOR CI=0 TO CMAX-1
SPX[CI]=RND(400):STX[CI]=SPX[CI]
SPY[CI]=RND(240):STY[CI]=SPY[CI]
SPZ[CI]=RND(200):STZ[CI]=SPZ[CI]
SPSET IX,SPC[CI]
SPOFS IX,SPX[CI],SPY[CI],SPZ[CI]
SPHOME IX,16,16
IX=IX+1
'
SPSET IX,0
SPCOLOR IX,RGB(255,255,255,255)
IX=IX+1
'
FOR I=0 TO HIS-1
SPSET IX,SPC[CI]
SPHOME IX,16,16
IX=IX+1
NEXT
HD[CI]=0:TL[CI]=0
VX[CI]=0:VY[CI]=0:VZ[CI]=0
'
NEXT
'---
M=510-IX
IF M>20 THEN M=20
FOR I=0 TO M-1
SPSET IX,242
OX=((RND(400) DIV 32)*32)+32
OY=((RND(192) DIV 32)*32)+32
OZ=RND(ZMAX)-200
SPOFS IX,OX,OY,OZ
SPHOME IX,8,8
GOSUB @CALCSC
SPSCALE IX,SC,SC
C=128
SPCOLOR IX,RGB(C,255,255,255)
IX=IX+1
NEXT
'---
WHILE 1
BT=STKANDBTN()
IF BT AND 32 THEN BREAK
FOR CI=0 TO CMAX-1
IX=CI*(HIS+2)
T=STX[CI]:P=SPX[CI]:V=VX[CI]
GOSUB @GETVEC
SPX[CI]=P+V:VX[CI]=V:X=SPX[CI]
T=STY[CI]:P=SPY[CI]:V=VY[CI]
GOSUB @GETVEC
SPY[CI]=P+V:VY[CI]=V:Y=SPY[CI]
Z=SPZ[CI]:V=STZ[CI]-Z
IF V<-8 THEN V=-8
IF V> 8 THEN V=8
Z=Z+V
IF Z<-256 THEN Z=-256
IF Z>1000 THEN Z=1000
SPZ[CI]=Z
'
SPOFS IX,X,Y,Z
OZ=Z:GOSUB @CALCSC
SPSCALE IX,SC,SC
C=255
SPCOLOR IX,RGB(C,255,255,255)
IX=IX+1
'---
IF ABS(STX[CI]-X)<16 THEN
IF ABS(STY[CI]-Y)<16 THEN
IF ABS(STZ[CI]-Z)<32 THEN
STX[CI]=RND(400)
STY[CI]=RND(240)
STZ[CI]=RND(ZMAX)-200
SPCHR IX,RND(32)
SPHOME IX,8,8
ENDIF
ENDIF
ENDIF
'---
SPOFS IX,STX[CI],STY[CI],STZ[CI]
SPROT IX,ANGLE
ANGLE=(ANGLE+1) MOD 360
OZ=STZ[CI]:GOSUB @CALCSC
SPSCALE IX,SC,SC
IX=IX+1
'---
H=HD[CI]
T=TL[CI]
HX[CI,H]=X
HY[CI,H]=Y
HZ[CI,H]=Z
H=(H+1) MOD HIS
HD[CI]=H
FOR I=0 TO HIS-1
N=(T+I) MOD HIS
SPOFS IX,HX[CI,N],HY[CI,N],HZ[CI,N]
C=(255/HIS)*I
SPCOLOR IX,RGB(C,C,C,C)
OZ=HZ[CI,N]:GOSUB @CALCSC
SC=((1/HIS)*I)*SC
SPSCALE IX,SC,SC
IX=IX+1
NEXT
T=(T+1) MOD HIS
TL[CI]=T
'
NEXT
'---
VSYNC 1
WEND
EFCOFF 'エフェクターOFF
BGMSTOP
CLS
XMODE=0
GOSUB @SCRNINIT
RETURN
'---
@CALCSC
SC=0.25+(4/ZMAX)*(ZMAX-(OZ+200))
RETURN
'---
@GETVEC
S=SGN(T-P):V=V+(S*1)
IF V<-4 THEN V=-4
IF V>4 THEN V=4
RETURN
'-------
@TXTPRTCTR
PX=((GRW/2)/8)-(LEN(A$)/2)
LOCATE PX,PY,0
PRINT A$;
RETURN
'-----
@BSKIPON
PX=25-(16/2)
PY=29
LOCATE PX,PY,-256
PRINT "[B]BUTTON : SKIP";
RETURN
'--------
@BSKIPOFF
PX=25-(40/2)
PY=29
LOCATE PX,PY,-250
PRINT " "*40;
RETURN
'-------------SELECT MENU
@SELECT
LOGOSP=0
SPSET LOGOSP,4095
SPHIDE LOGOSP
SPOFS LOGOSP,348,16,-256
SPSHOW LOGOSP
CLS
BGCLR MSG
COLOR 7
PY=4
READ A$
PY=0
GOSUB @BGPRTCTR
IMAX=0
WHILE (1)
READ A$,B$
IF A$=="" THEN BREAK
MENU$[IMAX]=A$
SUBTI$[IMAX]=B$
IMAX=IMAX+1
WEND
CX=0:CY=2
FOR I=0 TO IMAX-1
PX=CX+1
PY=CY+I
A$=MENU$[I]
GOSUB @BGPRT
A$=SUBTI$[I]
COLOR 13
LOCATE 25,PY*2+1,128
PRINT A$
NEXT
COLOR 15
A$="[UP][DOWN]:せんたく / [A]:けってい"
PY=29
GOSUB @TXTPRTCTR
WHILE(1)
PX=CX*2:PY=(CY+SEL)*2
COLOR 7
LOCATE PX+1,PY,128
PRINT CHR$(58111)*23
LOCATE PX+1,PY+1,128
PRINT CHR$(58111)*23
COLOR 15
LOCATE PX+25,PY+1,-128
PRINT SUBTI$[SEL]
GOSUB @SWOFF
GOSUB @SWON
LOCATE PX+1,PY,800
PRINT " "*23
LOCATE PX+1,PY+1,800
PRINT " "*23
COLOR 13
LOCATE PX+25,PY+1,128
PRINT SUBTI$[SEL]
IF BT AND 2+8 THEN SEL=SEL+1
IF BT AND 1+4 THEN SEL=SEL-1
IF BT AND 16 THEN BREAK
IF BT AND 32 THEN SEL=-1:BREAK
IF SEL<0 THEN SEL=IMAX-1
IF SEL>=IMAX THEN SEL=0
WEND
BGCLR MSG
CLS
COLOR 15
SPHIDE LOGOSP
RETURN
'----------
@SWINIT
BTBAK=0 'BACKUP(GLOBAL)
BTCNT=0 'COUNT(GLOBAL)
RETURN
'---
DEF STKANDBTN()
' BTBAK=0 'BACKUP(GLOBAL)
' BTCNT=0 'COUNT(GLOBAL)
SLV=0.2 'THRESHOLD
BTN=BUTTON()
STICK OUT SX,SY
IF (SY>SLV) THEN BTN=BTN OR 1
IF (SY<-SLV) THEN BTN=BTN OR 2
IF (SX<-SLV) THEN BTN=BTN OR 4
IF (SX>SLV) THEN BTN=BTN OR 8
IF BTBAK!=BTN THEN BTCNT=0
BTBAK=BTN
BTCNT=BTCNT+1
IF BTCNT==1 THEN RETURN BTN
IF BTCNT>20 THEN BTCNT=BTCNT-3:RETURN BTN
RETURN 0
END
'----------
@SWOFF
WHILE 1
VSYNC 1
IF STKANDBTN()==0 THEN BREAK
WEND
RETURN
'----------
@SWON
WHILE 1
VSYNC 1
BT=STKANDBTN()
IF BT!=0 THEN BREAK
WEND
RETURN
'-------------HIT ANY BUTTON
@HITANYBTN
A$="PUSH ANY BUTTON"
PY=14
GOSUB @BGPRTCTR
VSYNC 20
GOSUB @SWOFF
GOSUB @SWON
A$=" "
PY=14
GOSUB @BGPRTCTR
RETURN
'----------
@MENUMAIN
DATA "MAIN MENU"
DATA "CONSOLE","コンソール/スクリーン めいれい"
DATA "GRAPHICS","グラフィック の めいれい"
DATA "BG","BG の めいれい"
DATA "SPRITE","スプライト の めいれい"
DATA "SOUND","サウンド の めいれい"
DATA "STRINGS","もじれつ の めいれい"
DATA "MATHEMATICS","すうがく の めいれい"
DATA "SIN/COS","さんかく かんすう"
DATA "FILE","ファイル の めいれい"
DATA "PROGRAM","プログラムせいぎょ の めいれい"
DATA "OTHER","そのた の きのう"
DATA "DEMO","ちょっとした デモ"
DATA "",""
@MENUCNSL
DATA "CONSOLE"
DATA "XSCREEN 2","がめんモード2 デモンストレーション"
DATA "XSCREEN 4","がめんモード4 デモンストレーション"
DATA "COLOR","テキスト の いろ を せってい"
DATA "LOCATE","ひょうじざひょう を せってい"
DATA "ATTR","テキスト の アトリビュート"
DATA "SCROLL","テキスト の スクロール"
DATA "FONTDEF","オリジナル の フォントていぎ"
DATA "VISIBLE","ひょうじ を ゆうこう/むこう"
DATA "EXIT","もどる"
DATA "",""
@MENUGRP
DATA "GRAPHICS"
DATA "GPAGE","グラフィック の ページ を せってい"
DATA "GCLIP","グラフィックの クリッピングりょういき せってい"
DATA "RGB","ろんり いろコード を けいさん"
DATA "GCIRCLE","えん を えがく"
DATA "GFILL","ちょうほうけい/さんかくけい を えがく"
DATA "GPAINT","りょういき を ぬりつぶす"
DATA "GCOPY","りょういき を コピー"
DATA "GPRIO","グラフィック の プライオリティ"
DATA "GSAVE","グラフィック を はいれつ に コピー"
DATA "EXIT","もどる"
DATA "",""
@MENUBG
DATA "BG"
DATA "BGPUT","BG の ひょうじ"
DATA "BGOFS","BG の ひょうじいち を せってい"
DATA "BGCLIP","BG の クリッピングりょういき せってい"
DATA "BGROT","BG の かいてん"
DATA "BGSCALE","BG の かくだいりつ/しゅくしょう"
DATA "BGANIM","BG の アニメーション"
DATA "BGSAVE","BG を はいれつ に コピー"
DATA "EXIT","もどる"
DATA "",""
@MENUSP
DATA "SPRITE"
DATA "SPOFS","スプライト の ひょうじ ざひょう"
DATA "SPCLIP","スプライト の クリッピングりょういき せってい"
DATA "SPROT","スプライト の かいてん"
DATA "SPSCALE","スプライト の かくだい/しゅくしょう"
DATA "SPCOLOR","スプライト の いろ"
DATA "SPCHR","スプライト の キャラ/サイズ/アトリビュート"
DATA "SPANIM","スプライト の アニメーション"
DATA "SPCOL","スプライト の しょうとつ はんてい"
DATA "SPLINK","スプライト を べつのスプライト に リンク"
DATA "EXIT","もどる"
DATA "",""
@MENUSND
DATA "SOUND"
DATA "BEEP","こうかおん さいせい"
DATA "BGMPLAY","BGM の さいせい"
DATA "BGMSTOP","BGM の ていし"
DATA "WAVSET","はけい の ていぎ"
DATA "BGMSET","BGM の ていぎ"
DATA "BGMVOL","BGM の おんりょう せってい"
DATA "TALK","おんせい の さいせい"
DATA "EFCSET","エフェクターを せってい"
DATA "EFCWET","エフェクターのウェットち せってい"
DATA "EXIT","もどる"
DATA "",""
@MENUSTR
DATA "STRINGS"
DATA "CHR$","キャラクターコード を もじに"
DATA "VAL","もじ を すうち に"
DATA "HEX$","すうち を 16しんすうもじ に"
DATA "FORMAT$","もじれつ フォーマット"
DATA "LEN","もじれつ の ながさ"
DATA "INSTR","もじれつ の なか を けんさく"
DATA "MID$","もじれつ を ぬきだす"
DATA "SUBST$","もじれつ の さしかえ"
DATA "EXIT","もどる"
DATA "",""
@MENUCALC
DATA "MATHMATICS"
DATA "FLOOR","きりすて/ししゃごにゅう/きりあげ"
DATA "ABS","ぜったいち"
DATA "SGN","ふごう"
DATA "MIN/MAX","さいだい/さいしょう"
DATA "RND/RNDF","らんすう"
DATA "SQR/POW","へいほうこん/べきじょう"
DATA "EXP/LOG","Eの べきじょう/しぜんたいすう"
DATA "SORT","ならべかえ"
DATA "SHIFT","はいれつの ようそをシフト"
DATA "EXIT","もどる"
DATA "",""
@MENUSIN
DATA "SIN/COS"
DATA "RAD/DEG","ラジアン/どすう"
DATA "SIN/COS","サイン/コサイン"
DATA "TAN","タンジェント"
DATA "ATAN","アークタンジェント"
DATA "ASIN/ACOS","アークサイン/アークコサイン"
DATA "SINH/COSH","そうきょくせん かんすう"
DATA "EXIT","もどる"
DATA "",""
@MENUFILE
DATA "FILE CONTROL"
DATA "CHKFILE","ファイルの そんざいをかくにん"
DATA "FILES","ファイルの いちらん"
DATA "SAVE/LOAD","ファイルのセーブロード"
DATA "EXIT","もどる"
DATA "",""
@MENUPRG
DATA "PROGRAM"
DATA "PRGGET$","プログラムを よみとる"
DATA "PRGSET","プログラムを いれかえる"
DATA "PRGINS","プログラムを そうにゅう"
DATA "PRGDEL","プログラムを さくじょ"
DATA "EXIT","もどる"
DATA "",""
@MENUOTHER
DATA "OTHER"
DATA "GYRO","ジャイロセンサーの テスト"
DATA "ACCEL","かそくどセンサーの テスト"
DATA "EXPAD","かくちょうスライドパッドの テスト"
DATA "MIC TEST","マイク にゅうりょくの テスト"
DATA "DIALOG","ダイアログを ひょうじ"
DATA "MP TEST","ローカルつうしんの テスト"
DATA "SPEED TEST","じっこうそくど テスト"
DATA "SYSTEM VAR","システムへんすう"
DATA "EXIT","もどる"
DATA "",""
@MENUDEMO
DATA "DEMO"
DATA "NAMI","スプライト を つかったデモ1"
DATA "SNAKE-DR.","スプライト を つかったデモ2"
'DATA "DEMO3",""
DATA "EXIT","もどる"
DATA "",""