プチコンmkII

  1. ’
  2. ’■BGMPRGヨウ ハケイサクセイツ-ル v1.1
  3. ’───────────────────────────
  4. ’(c)SmileBoom
  5. ’・64/128コノ ウェ-フ゛テ゛-タヲツクル
  6. ’・MEM$テ゛ホソ゛ン
  7. ’・ファィルカ゛ナイトキノエラ-タイサク
  8. ’
  9. ACLS
  10. ’---カンキョウショキカ
  11. CLEAR:MAX=32
  12. DIM W(MAX,128),ADSR$(MAX)
  13. DIM EG(4),EGN$(4)
  14. EGN$(0)=”A:”:EGN$(1)=”D:”
  15. EGN$(2)=”S:”:EGN$(3)=”R:”
  16. PNLTYPE”OFF”
  17. FOR I=0 TO 3
  18.  ICONCLR I
  19. NEXT
  20. PG=1:OY=16:TC=0
  21. OLDBN=-1:BW=0
  22. GOSUB @DSPINIT
  23. ’---
  24. WS=0:GOSUB @SIZE
  25. FOR NO=0 TO MAX-1
  26.  GOSUB @MKSIN
  27.  ADSR$(NO)=”7F3F0F3F”
  28. NEXT
  29. ’---
  30. NO=0:GOSUB @WAVSET
  31. ’---メインル-フ゜
  32. @MLOOP
  33. B=BTRIG():BN=BUTTON()
  34. SPOFS 0,TCHX,TCHY
  35. GOSUB @FILESUB
  36. GOSUB @SELNO
  37. GOSUB @EDIT
  38. VSYNC 1
  39. IF B!=1024 THEN @MLOOP
  40. ’---アトシマツ
  41. CHRINIT ”BGU0”
  42. END
  43. ’---ファィルカンケイ
  44. @FILESUB
  45. IF B==64 THEN @FSAVE
  46. IF B!=128 THEN RETURN
  47. ’---ヨミコミ
  48. @FLOAD
  49. GOSUB @MKFNAME
  50. LOAD NE$
  51. IF RESULT==FALSE THEN RETURN
  52. WS=VAL(”&H”+MID$(MEM$,0,2))
  53. GOSUB @SIZECNG
  54. ADSR$(NO)=MID$(MEM$,2,8)
  55. PRINT ”  WS:”;WS
  56. PRINT ”ADSR:”;ADSR$(NO)
  57. LOAD NW$
  58. IF RESULT==FALSE THEN RETURN
  59. FOR I=0 TO WS-1
  60.  W$=MID$(MEM$,I*2,2)
  61.  V=VAL(”&H”+W$)
  62.  IF V>127 THEN V=(256-V)*-1
  63.  W(NO,I)=V
  64. NEXT
  65. GOSUB @WAVSET
  66. GOSUB @GRPDRAW
  67. RETURN
  68. ’---カキコミ
  69. @FSAVE
  70. GOSUB @MKFNAME
  71. GOSUB @MKWAVE
  72. MEM$=M$
  73. SAVE NW$
  74. MEM$=HEX$(WS,2)+ADSR$(NO)
  75. SAVE NE$
  76. RETURN
  77. ’---
  78. @MKFNAME
  79. NW$=”MEM:WAVE”+STR$(NO+224)
  80. NE$=”MEM:EG”+STR$(NO+224)
  81. RETURN
  82. ’---タイショウキリカエ
  83. @SELNO
  84. V=0
  85. IF B==1 THEN V=1
  86. IF B==2 THEN V=-1
  87. IF V==0 THEN RETURN
  88. NO=NO+V
  89. IF NO<0 THEN NO=MAX-1
  90. IF NO>MAX-1 THEN NO=0
  91. GOSUB @WAVSET
  92. GOSUB @GRPDRAW
  93. RETURN
  94. ’---ヘンシュウ
  95. @EDIT
  96. IF B==16 THEN @PLAY
  97. IF B==32 THEN @SIZESET
  98. GOSUB @BTCHECK
  99. ’---
  100. IF TC THEN @TCGET
  101. IF !TCHST THEN RETURN
  102. ’---
  103. @TCGET
  104. IF TCHST THEN @TCCNT
  105. ’---
  106. GOSUB @GRPDRAW
  107. TC=0
  108. RETURN
  109. ’---
  110. @TCCNT
  111. X=TCHX:Y=TCHY-16
  112. IF Y<0 THEN Y=0
  113. IF Y>144 THEN RETURN
  114. IF Y>127 THEN Y=127
  115. ’---
  116. X=FLOOR(X/ST):L=BN AND 256
  117. IF L THEN X=FLOOR(X/2)*2+1
  118. W(NO,X)=((127-Y)-64)*2
  119. EX=X*ST:EY=Y+OY
  120. IF TC==0 THEN TX=EX:TY=EY
  121. GLINE TX,TY,EX,EY,2
  122. TX=EX:TY=EY:TC=1
  123. RETURN
  124. ’---ハケイサイス゛キリカエ
  125. @SIZESET
  126. GOSUB @SIZE
  127. GOSUB @MKSIN
  128. GOTO @GRPDRAW
  129. ’---
  130. @SIZE
  131. WS=WS+64
  132. IF WS>128 THEN WS=64
  133. ’
  134. @SIZECNG
  135. ST=FLOOR(256/WS)
  136. PNLSTR 28,1,STR$(WS)+” ”
  137. RETURN
  138. ’---カンイエンソウ
  139. @PLAY
  140. PRINT ”О:@”;NO+224;
  141. PRINT ”CDEFGAB<C”
  142. GOSUB @MKWAVE
  143. VC=NO+224
  144. BGMPRG VC,EG(0),EG(1),EG(2),EG(3),M$
  145. M$=”@”+STR$(VC)
  146. BGMPLAY M$+”CDEFGAB<C”
  147. RETURN
  148. ’
  149. @MKWAVE
  150. COLOR 5:M$=””
  151. FOR I=0 TO WS-1
  152.  C$=HEX$(W(NO,I),2)
  153.  M$=M$+C$:PRINT C$;
  154. NEXT
  155. COLOR 0
  156. RETURN
  157. ’---カ゛メンショキカ
  158. ’CON:モシ゛
  159. ’ SP:カ-ソル
  160. ’BG0:ラインカ-ソル
  161. ’GRP:ク゛ラフ
  162. ’BG1:ハイケイク゛リット゛
  163. ’
  164. @DSPINIT
  165. BGPAGE PG:BGCLR
  166. SPPAGE PG:SPCLR
  167. GCLS:GPAGE PG:GPRIO 2
  168. H$=”D1D1D1D1”
  169. C$=H$+”00001111”*7
  170. CHRSET ”BGU0”,1,C$
  171. C$=H$+”00110011”*7
  172. CHRSET ”BGU0”,2,C$
  173. C$=H$+”0”*56
  174. CHRSET ”BGU0”,3,C$
  175. ’---
  176. SPSET 0,110,0,0,0,0
  177. SPCOL 0,0,0,1,1,FALSE
  178. FOR N=0 TO 3
  179.  X=N*40:Y=176
  180.  GOSUB @BTOPEN
  181. NEXT
  182. ’---
  183. C$=”WAVE EDITOR v1.1”
  184. PNLSTR 0,0,C$
  185. C$=”А=PLAY Ф=SAVE Х=LOAD ”
  186. C$=C$+”Б=SIZE:”
  187. PNLSTR 0,1,C$,7
  188. RETURN
  189. ’---ハケイショキカ
  190. @MKSIN
  191. S=360/WS
  192. FOR I=0 TO WS-1
  193.  A=SIN(RAD(S*I))
  194.  W(NO,I)=FLOOR(A*128)
  195. NEXT
  196. RETURN
  197. ’---ハケイキリカエ
  198. @WAVSET
  199. FOR N=0 TO 3
  200.  C$=MID$(ADSR$(NO),N*2,2)
  201.  EG(N)=VAL(”&H”+C$)
  202.  GOSUB @BTNUM
  203. NEXT
  204. ’---ク゛ラフノヒョウシ゛
  205. @GRPDRAW
  206. C$=”П↑↓=WAVE:”
  207. PNLSTR 0,19,”П↑↓=WAVE:”,7
  208. C$=STR$(NO+224)
  209. PNLSTR 9,19,C$
  210. ’---
  211. C=WS/64:Y=OY/8
  212. BGFILL 1,0,Y,31,Y+15,C
  213. BGFILL 1,0,Y+16,31,Y+16,3
  214. ’---
  215. GCLS 0
  216. FOR I=0 TO WS-1
  217.  X=I*ST
  218.  Y=FLOOR((W(NO,I)+128)/2)
  219.  Y=OY+128-Y
  220.  GFILL X,Y,X+ST-1,OY+64,15
  221. NEXT
  222. RETURN
  223. ’---スフ゜ライト+-ホ゛タン
  224. @BTOPEN
  225. SPSET N*2+1,92,0,0,0,1
  226. SPOFS N*2+1,X,Y
  227. SPSET N*2+2,93,0,0,0,1
  228. SPOFS N*2+2,X+16,Y
  229. PNLSTR X/8,(Y-8)/8,EGN$(N),4
  230. ’---
  231. @BTNUM
  232. C$=HEX$(EG(N),2)
  233. PNLSTR N*5+2,(Y-8)/8,C$
  234. RETURN
  235. ’---
  236. @BTCHECK
  237. IF TCHST THEN @BTCGO
  238. ’---ハナシタ
  239. FOR N=1 TO 8
  240.  GOSUB @BTCOFF
  241. NEXT
  242. OLDBN=-1
  243. RETURN
  244. ’---
  245. @BTCOFF
  246. SPREAD(N),X,Y
  247. X=X AND &HF8:Y=Y AND &HF8
  248. SPOFS N,X,Y
  249. RETURN
  250. ’---
  251. @BTCGO
  252. X=TCHX:Y=TCHY
  253. I=SPHIT(0)
  254. IF !I THEN RETURN
  255. ’
  256. N=SPHITNO
  257. IF N!=OLDBN THEN @BTC1ST
  258. ’---キ-リヒ゜-ト
  259. IF BW<15 THEN BW=BW+1:GOTO @BTCOFF
  260. BC=BC+1:IF BC<2 THEN @BTCOFF
  261. GOTO @BTCGET
  262. ’---オシタ
  263. @BTC1ST
  264. OLDBN=N:BW=0
  265. ’---
  266. @BTCGET
  267. BC=0
  268. SPREAD(N),X,Y
  269. X=X AND &HF8:Y=Y AND &HF8
  270. SPOFS N,X+1,Y+1
  271. ’
  272. N=N-1
  273. V=-1:IF N AND 1 THEN V=1
  274. N=FLOOR(N/2):V=EG(N)+V
  275. IF V<0 THEN V=0
  276. IF V>127 THEN V=127
  277. EG(N)=V
  278. GOTO @BTNUM