プチコンまとめWiki (初代/mkII)

投稿プログラム : RLE Sample

パンくずリスト

2013年01月04日投稿 / 投稿者 : uniskie / タグ : 投稿プログラム 実用ツール QRコード mkII専用

2013/1/7 コード修正&QRコード差し替えしました。

概要

ランレングスエンコード形式の圧縮・解凍サンプルです。
圧縮元、展開先はCHRリソースで、圧縮データはGRPに格納します。
圧縮と展開のサンプルですので、適当に参考にしてください。

  • ランレングスとは 連続した色が並んでいる部分を圧縮するものです。
    ※同じ色が並んでいる部分が少ない場合、圧縮前よりも大きくなってしまう場合もあります。
  • 動作
    • BGとSPリソースをGRPリソース2枚に圧縮し、 圧縮したデータが正常かどうかの検査だけをする状態になっています。
      必要な動作に応じて、AVERIFY、APREVIEWを設定してください。
    • 大体半分以下になりますので、DS本体のストレージを節約したい場合、 GRPリソース一杯詰め込めば効果が出るかもしれません。
    • 表示確認(プレビュー)用に、処理中のCHRデータをGRPへ表示していますが、
      実際に使用する場合には、プレビュー処理は不要です。
  • BGPAGEやSPPAGEについて、特にいじっていないので必要なら指定してください。

圧縮展開処理の本体

  • 011行 … 圧縮・展開時にGRPに処理中のキャラをプレビュー表示するかどうかの設定です。
  • 012行 … 展開時に検査をするのか通常書き込みするかどうかの設定です。
  • 176行〜187行 @PINIT … 圧縮・展開処理で使う定数を宣言しています。
  • 189行〜197行 @ADDPTR … 圧縮・展開処理で使う処理です。GRP書き込み位置をひとつ加算します。
  • 199行〜378行 @ARCHIVE … 圧縮処理の本体
  • 380行〜573行 @EXPAND … 圧縮処理の本体

デバッグ向け特殊設定(009行〜012行)

AVERIFY … 展開処理の設定

AVERIFY=1 … 検査(書き込みをしない/検査をする)
AVERIFY=0 … 通常(書き込みをする/検査をしない)

APREVIEW … プレビュー表示設定

APREVIEW=1 … プレビュー表示する
APREVIEW=0 … 通常(プレビュー表示をしない)
  • プレビュー処理(272行〜280行、532行〜539行)
    • APREVIEW==1の時、 表示確認する為にGRPへ描画します。
DP=0          ′プレビュー表示:GRPページ番号
DW=256:DH=128 ′プレビュー表示:表示エリアサイズ
DX=0  :DY=0   ′プレビュー表示:表示エリア左上位置
DPL=8         ′プレビュー表示:パレット番号
※ 展開するだけであれば不要です。
DX、DY、DP、DPL、DW、DH はプレビューでのみ使用する変数です。
  • ベリファイ処理(418行〜420行、474行〜476行、521行〜528行、546行〜573行)
    • AVERIFY==1の時、 展開したデータが元のデータと正しく一致するか調べます。
※ 検査が不要ならこれらの処理はいりません。
CHK$はベリファイでのみ使用する変数です。

圧縮手順

  • 圧縮処理の本体は 199行〜378行です

圧縮呼び出し準備

  • 圧縮元データ指定
    RES$="BGU" ′圧縮元 キャラクタ名(リソース名)
    CI=0       ′圧縮元 キャラクタ番号
    ※ 圧縮元 キャラクタ名(リソース名)とキャラクタ番号は圧縮データに埋め込みます。
  • 圧縮データ書き出し指定
    GP=1       ′圧縮データ格納先 GRPページ番号
    GX=0:GY=0  ′圧縮データ格納先 GRP座標

圧縮の実行

GOSUB @ARCHIVE

圧縮実行後に更新される変数

  • 圧縮元データの指定
    CI → 次の圧縮元キャラクタ番号
  • 圧縮データ書き出し位置の指定
    GP,GX,GY → 次の書き出し位置

他の処理

GOSUB @REPORTA ′圧縮レポートを表示開始する
GOSUB @REPORTB ′圧縮結果レポートを表示する

展開手順

  • 展開処理の本体は 380行〜573行です

展開呼び出し準備

  • 展開プレビュー用指定
    DP=0          ′プレビュー表示:GRPページ番号
    DW=256:DH=128 ′プレビュー表示:表示エリアサイズ
    DX=0  :DY=0   ′プレビュー表示:表示エリア左上位置
    DPL=8         ′プレビュー表示:パレット番号
  • 展開データの指定
    GP=1       ′解凍元データ GRPページ番号
    GX=0:GY=0  ′解凍元データ GRP座標
    ※ 解凍先 キャラクタ名(リソース名)とキャラクタ番号は圧縮データに埋め込まれています。

展開の実行

GOSUB @EXPAND

展開実行後に更新される変数

  • 展開プレビュー用指定
    DX,DY   → 次の描きこみ位置
    (※DPは変化しません)
  • 展開データの指定
    GP,GX,GY → 次の展開データ位置
    CI → 次の展開先キャラクタ番号

他の処理

GOSUB @CLRSD ′プレビューエリアをクリアする
GOSUB @WAITD ′プレビュー後にキー入力待ちをする

圧縮データ概要

  • BGやSPRITEやFONTは4ビット(16色)データですが、このプログラムは8ビット(256色相当)単位で圧縮・展開します。
    • 8ビット単位だと処理が簡単になります。
    • 8ビット単位だと2ピクセルずつ圧縮するので、タイリングデータも圧縮できます。

圧縮展開で使う定数(176行〜187行)

(定数=途中で変更しない値)

@PINIT
  • IMAX=127ブロックヘッダ:ブロックの最大長マスク
  • ABIT=128ブロックヘッダ:ブロックのモード
    • ABITがONの場合同じ値が連続
    • ABITがOFFの場合違う値のデータが後に続く
  • ANONE=0 … 圧縮展開時の処理MODE:モードが確定していない初期状態(サンプル1個目)
  • A2ND =1 … 圧縮展開時の処理MODE:どちらのモードにするか検査する(サンプル2個目)
  • ASAME=2 … 圧縮展開時の処理MODE:同じ値が並んでいる状態
  • ADIFF=3 … 圧縮展開時の処理MODE:違う値が並んでいる状態
RES$に指定できる値
  • "BGU" ... BG
  • "SPU" ... スプライト
  • "BGF" ... フォント
    など、CHRREAD、CHRSET、CHRINITに指定できるキャラクタ名

全体イメージ

  • (データ先頭から)
    +00 RES$(0)    展開先(圧縮元)キャラクタリソース名(1文字目)
    +01 RES$(1)    展開先(圧縮元)キャラクタリソース名(2文字目)
    +02 RES$(2)    展開先(圧縮元)キャラクタリソース名(3文字目)
    +03 CIL        展開先(圧縮元)キャラクタ番号(下位8ビット)
    +04 CIH        展開先(圧縮元)キャラクタ番号(上位8ビット)
    	※ キャラクタ番号 CI=CIL+CIH*256
    +05 BLOCKSIZEL データブロックのサイズ(下位8ビット)
    +06 BLOCKSIZEH データブロックのサイズ(上位8ビット)
    	※ データブロックのサイズ BLOCKSIZE=BLOCKSIZEL+BLOCKSIZEH*256
    +07〜 データブロック

データブロック

  • (データブロック先頭から)
    +00 BLOCKHEAD ブロックのモード指定+展開バイト数(0〜127)
    +01〜 データ部
BLOCKHEADの意味
  • 展開サイズ AL=(BLOCKHEAD AND 127)
  • モード指定 BH=(BLOCKHEAD AND 128)
    • BH!=0:連続値展開モード
    • BH!=1:絶対値モード
展開モード別のデータブロック解説
  1. 連続値展開モード
    +00 BLOCKHEAD 128+展開サイズ AL(0〜127)
    +01 DATA(0)  データ(1個)
    	展開バイト数(AL)回、DATA(0)を書き出す
    	
  2. 絶対値モード
    +00   BLOCKHEAD 0+展開サイズ AL(0〜127)
    +01   DATA(0)  データ(AL個)
      |
    +AL+1 DATA(AL)
    	展開バイト数(AL)個分、DATAが並んでいるので
    	DATA(0)〜DATA(AL)までを順番に書き出す
    	 
  3. 各モードでAL個のデータを書き出し終わったら
  • 続くアドレスが次のデータブロックなのでブロックの展開を繰り返す

QR コード

プチコンmkII 向けの QR コードです。 コメントを追加したら2倍になってしまいました。

PRG:RLEBG2
1/32/33/3
v2_qr0.pngv2_qr1.pngv2_qr2.png
v2_qr3.pngv2_qr4.pngv2_qr5.png

プログラムリスト

  1. ′┰┥┰┥┰┥┰┥┰┥┰┥┰┥┰┥┰┥┰┥┰┥┰┥┰┥Л
  2. ′Л
  3. ′  RUN LENGTH ENCODE DEMOЛ
  4. ′Л
  5. ′┰┥┰┥┰┥┰┥┰┥┰┥┰┥┰┥┰┥┰┥┰┥┰┥┰┥Л
  6. Л
  7. CLEARЛ
  8. ′Л
  9. ′┸ テ゛ハ゛ック゛ セッテイ ┝Л
  10. Л
  11. APREVIEW=1 ′フ゜レヒ゛ュ−スル(DEBUG)Л
  12. AVERIFY=1  ′ケンサ スル(DEBUG)Л
  13. Л
  14. ′┸ ショキカ ┝Л
  15. Л
  16. GOSUB @SINIT ′カ゛メン クリアЛ
  17. GOSUB @PINIT ′テイスウ ショキカЛ
  18. GPAGE 0,0,0:GCLS 4Л
  19. Л
  20. ′ GOTO@DECOMAIN ′テ゛コ−ト゛ニ トフ゛Л
  21. Л
  22. GOSUB @GACLS ′GRP ALL ショキカЛ
  23. GPAGE 0,0,0:GCLS 4Л
  24. Л
  25. ′┿┿┸ エンコ−ト゛(アッシュク) ┝┿┿Л
  26. Л
  27. GP=1       ′ヘンカン サキ GRPヘ゜−シ゛Л
  28. GX=0:GY=0  ′ヘンカン サキ GRPサ゛ヒョウЛ
  29. Л
  30. DP=0          ′DISP GRPヘ゜−シ゛Л
  31. DX=0  :DY=0   ′DISP イチЛ
  32. DW=256:DH=128 ′DISP サイス゛Л
  33. DPL=0         ′DISP ハ゜レットЛ
  34. Л
  35. ′┸ エンコ−ト゛ FONT ┝Л
  36. Л
  37. DMAX=256*64−1 ′サイス゛(ヒ゜クセルスウ)Л
  38. RES$=”BGF” ′ヘンカン モト リソ−ス メイЛ
  39. CI=0       ′ヘンカン モト CHR No.Л
  40.  GOSUB @REPORTAЛ
  41.  GOSUB @ARCHIVEЛ
  42.  GOSUB @REPORTBЛ
  43. Л
  44. ′┸ エンコ−ト゛ BGU0〜3 ┝Л
  45. Л
  46. DMAX=256*128−1 ′サイス゛(ヒ゜クセルスウ)Л
  47. RES$=”BGU” ′ヘンカン モト リソ−ス メイЛ
  48. CI=0       ′ヘンカン モト CHR No.Л
  49. FOR BGBK=0 TO 1Л
  50.  GOSUB @REPORTAЛ
  51.  GOSUB @ARCHIVEЛ
  52.  GOSUB @REPORTBЛ
  53. NEXTЛ
  54. Л
  55. ′┸ エンコ−ト゛ SPU0〜7 ┝Л
  56. Л
  57. DMAX=256*128−1 ′サイス゛(ヒ゜クセルスウ)Л
  58. RES$=”SPU” ′ヘンカン モト リソ−ス メイЛ
  59. CI=0       ′ヘンカン モト CHR No.Л
  60. FOR SPBK=0 TO 3Л
  61.  GOSUB @REPORTAЛ
  62.  GOSUB @ARCHIVEЛ
  63.  GOSUB @REPORTBЛ
  64. NEXTЛ
  65. ′Л
  66. @DECOMAINЛ
  67. Л
  68. ′┿┿┸ テ゛コ−ト゛(テンカイ) ┝┿┿Л
  69. Л
  70. GP=1       ′カイトウ モト GRPヘ゜−シ゛Л
  71. GX=0:GY=0  ′カイトウ モト GRPサ゛ヒョウЛ
  72. Л
  73. DP=0          ′DISP GRPヘ゜−シ゛Л
  74. DW=256:DH=128 ′DISP サイス゛Л
  75. DX=0  :DY=0   ′DISP イチЛ
  76. DPL=8         ′DISP ハ゜レットЛ
  77. Л
  78. ′ Йテンカイサキ キャラクタ ハЛ
  79. ′  GRP ニ キロク サレテ イル ノテ゛Л
  80. ′  ・ヨミコミモト セッテイЛ
  81. ′  ・フ゜レヒ゛ュ− ヒョウシ゛ セッテイЛ
  82. ′  タ゛ケЛ
  83. Л
  84. ′┸ フ゜レヒ゛ュ−サイス゛ ハイレツ ┝Л
  85. @DWDATA    Л
  86. ′     DW, DH,DPLЛ
  87. DATA 256, 64,0Л
  88. DATA 256,128,8Л
  89. DATA 256,128,8Л
  90. DATA 256,128,0Л
  91. DATA 256,128,4Л
  92. DATA 256,128,12Л
  93. DATA 256,128,12Л
  94. RESTORE @DWDATAЛ
  95. Л
  96. ′┸ テ゛コ−ト゛ クリカエシ ┝Л
  97. @DECLOOPЛ
  98.  READ DW,DH,DPLЛ
  99.  GPAGE 0,0,0:GCLS 4Л
  100.  GOSUB @CLRSDЛ
  101.  GOSUB @EXPANDЛ
  102.  GOSUB @WAITDЛ
  103.  DX=0  :DY=0   ′DISP イチЛ
  104. Л
  105.  ′ ツキ゛ ノ テ゛−タ カ゛ アルカ?Л
  106.  ′ アル ナラ、クリカエシЛ
  107.  GPAGE 1,GP,GPЛ
  108.  C=GSPOIT(GX,GY)Л
  109. IF C GOTO@DECLOOPЛ
  110. Л
  111. GPAGE 0,0,0Л
  112. Л
  113. ENDЛ
  114. Л
  115. ′┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸Л
  116. Л
  117. ′╂┿┸ アッシュク レホ゜−ト ┝┿╂╂╂╂╂╂╂╂╂Л
  118. @REPORTAЛ
  119.  ?” ”;RES$;Л
  120.  ?RIGHT$(” ”*3+STR$(CI),4);Л
  121.  ?”〜”;Л
  122. RETURNЛ
  123. @REPORTBЛ
  124.  ?RIGHT$(” ”*3+STR$(CI−1),4);Л
  125.  ?”:”;SMAX+1;”/”;DMAX+1;Л
  126.  ?”=”;Л
  127.  ?FLOOR((SMAX+1)/(DMAX+1)*1000)/10;”%”Л
  128. RETURNЛ
  129. Л
  130. ′╂┿┸ フ゜レヒ゛ュ−イチ ヲ クリア ┝┿╂╂╂╂╂Л
  131. @CLRSDЛ
  132.  GPAGE 0,DP,0Л
  133.  GFILL DX,DY,DX+DW−1,DY+DH−1,0Л
  134. RETURNЛ
  135. Л
  136. ′╂┿┸ フ゜レヒ゛ュ− → キ− マチ ┝┿╂╂╂╂╂Л
  137. @WAITDЛ
  138.  ′LOCATE 0,23Л
  139.  FOR WI=0 TO 1Л
  140.   COLOR MAINCNTL%13+3Л
  141.   LOCATE 8,CSRYЛ
  142.   ?”PRESS ANY KEY”;Л
  143.   WAIT 1Л
  144.   WI=BUTTON()+LEN(INKEY$())Л
  145.  NEXTЛ
  146.  LOCATE 0,CSRYЛ
  147.  ?CHR$(0)*31;Л
  148.  LOCATE 0,CSRYЛ
  149.  COLOR 0,0Л
  150. RETURNЛ
  151. Л
  152. ′┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸Л
  153. ′┌─────────────────────────┐Л
  154. ′│   CLEAR SCREEN SAMPLE   │Л
  155. ′└─────────────────────────┘Л
  156. @SINITЛ
  157.  CLSЛ
  158.  GPAGE 0,0,0:GCLSЛ
  159.  GPRIO 3Л
  160.  COLOR 0,0Л
  161.  LOCATE 0,16Л
  162.  PNLTYPE ”OFF”Л
  163. RETURNЛ
  164. Л
  165. ′┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸Л
  166. ′┌─────────────────────────┐Л
  167. ′│   CLEAR ALL GRP PAGE    │Л
  168. ′└─────────────────────────┘Л
  169. @GACLSЛ
  170.  GPAGE 1,3,3:GCLSЛ
  171.  GPAGE 0,2,2:GCLSЛ
  172.  GPAGE 1,1,1:GCLSЛ
  173.  GPAGE 0,0,0:GCLSЛ
  174. RETURNЛ
  175. Л
  176. ′┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸Л
  177. ′┌─────────────────────────┐Л
  178. ′│ アッシュク・テンカイ ノ テイスウ センケ゛ン │Л
  179. ′└─────────────────────────┘Л
  180. @PINITЛ
  181.  IMAX=127′HEADER:サイタ゛イチョウ−1Л
  182.  ABIT=128′HEADER:レンソ゛クモ−ト゛Л
  183.  A1ST =0 ′MODE:ヒトツメЛ
  184.  A2ND =1 ′MODE:フタツメЛ
  185.  ASAME=2 ′MODE:オナシ゛アタイЛ
  186.  ADIFF=3 ′MODE:チカ゛ウアタイЛ
  187. RETURNЛ
  188. Л
  189. ′┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸Л
  190. ′┌─────────────────────────┐Л
  191. ′│       GRP イチ +1         │Л
  192. ′└─────────────────────────┘Л
  193. @AADDPTRЛ
  194.  X=X+1:Y=Y+(X>255):X=X%256Л
  195.  ′IF Y>191 THEN ?”Й OVER”Л
  196.  P=P+(Y>191):Y=Y%192Л
  197. RETURNЛ
  198. Л
  199. ′┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸Л
  200. ′┌─────────────────────────┐Л
  201. ′│   Encode (アッシュク ショリ)    │Л
  202. ′┌───────┐─────────────────┘Л
  203. ′│ INPUT ├─────────────────┐Л
  204. ′└───────┘                 │Л
  205. ′│ИGP  :カキコミ サキ GRP ヘ゜−シ゛  │Л
  206. ′│ИGX  :カキコミ サキ GRP X サ゛ヒョウ│Л
  207. ′│ИGY  :カキコミ サキ GRP Y サ゛ヒョウ│Л
  208. ′│ RES$:ヨミコミ モト キャラ メイ     │Л
  209. ′│ИCI  :ヨミコミ モト キャラ No.    │Л
  210. ′│ DMAX:ヨミコミ モト キャラ ノ カス゛−1│Л
  211. ′│┌─────────────────┐      │Л
  212. ′│┘(フ゜レヒ゛ュ−ヒョウシ゛ ヨウ)└──────│Л
  213. ′│ APREVIEW :フ゜レヒ゛ュ−(DEBUG)│Л
  214. ′│ DP  :テストヒョウシ゛GRP ヘ゜−シ゛  │Л
  215. ′│ DX  :テストヒョウシ゛GRP X サ゛ヒョウ│Л
  216. ′│ DY  :テストヒョウシ゛GRP Y サ゛ヒョウ│Л
  217. ′│ DPL :テストヒョウシ゛ ハ゜レット No. │Л
  218. ′│ DW  :テストヒョウシ゛GRP X サイス゛ │Л
  219. ′│ DH  :テストヒョウシ゛GRP H サイス゛ │Л
  220. ′┌────────┐────────────────┘Л
  221. ′│ OUTPUT ├────────────────┐Л
  222. ′└────────┘                │Л
  223. ′│ SMAX:アッシュク コ゛ サイス゛      │Л
  224. ′│ ТТТТТТТТТТТТТТТТТТТТТТТ │Л
  225. ′│ Й INPUT ノ、И カ゛ ツイタ モノ。  │Л
  226. ′│   アタイ ハ、ツキ゛ ノ イチ ヲ シメス。 │Л
  227. ′┌──────────┐──────────────┘Л
  228. ′│ ナイフ゛ シヨウ ├──────────────┐Л
  229. ′└──────────┘              │Л
  230. ′│ AL,B,BP,I,J,P,R,X,Y     │Л
  231. ′│ C$,R$,HP,HX,HY,MODE     │Л
  232. ′└─────────────────────────┘Л
  233. @ARCHIVEЛ
  234.  GOSUB @PINIT ′テイスウ セットЛ
  235. Л
  236. ′┿┰ write HEADER:RES$ ┥Л
  237. Л
  238. P=GP:X=GX:Y=GY:R$=RES$Л
  239. FOR I=0 TO 2Л
  240.  GPAGE 1,P,PЛ
  241.  GPSET X,Y,ASC(MID$(R$,I,1))Л
  242.  GOSUB @AADDPTRЛ
  243. NEXTЛ
  244. Л
  245. ′┿┰ write HEADER:CHR No.┥Л
  246. Л
  247. GPAGE 1,P,P:GPSET X,Y,CI%256Л
  248. GOSUB @AADDPTRЛ
  249. GPAGE 1,P,P:GPSET X,Y,CI/256Л
  250. GOSUB @AADDPTRЛ
  251. Л
  252. ′┿┰ reserve HEADER:SIZE ┥Л
  253. Л
  254. GP=P:GX=X:GY=YЛ
  255. GOSUB @AADDPTRЛ
  256. GOSUB @AADDPTRЛ
  257. HP=P:HX=X:HY=YЛ
  258. Л
  259. ′┿┰ ENCODE ┥Л
  260. Л
  261. MODE = A1ST ′ ショリ モ−ト゛Л
  262. B  = 0      ′ ケ゛ンサ゛イチ ノ イロЛ
  263. BP = 0      ′ セ゛ンカイイチ ノ イロЛ
  264. AL = 0      ′ テ゛−タ スウ(レンソ゛クスウ)Л
  265. Л
  266. FOR I=0 TO DMAX STEP 2Л
  267.  J=I%64Л
  268.  IF J THEN @SKIPRDCHЛ
  269.   R=CI%256Л
  270.   R$=RES$+HEX$(CI/256)Л
  271.   CHRREAD(R$,R),C$Л
  272.   ′┌──────for PREVIEW───────┐Л
  273.    IF!APREVIEW GOTO @APREVWEDЛ
  274.     GPAGE 0,DP,DPЛ
  275.     GFILL DX,DY,DX+7,DY+7,0Л
  276.     GPUTCHR DX,DY,R$,R,DPL,1Л
  277.     DX=DX+8:DY=DY+8*(DX>=DW)Л
  278.     DX=DX%DW:DY=DY%DHЛ
  279.    @APREVWEDЛ
  280.   ′└──────for PREVIEW───────┘Л
  281.   CI=CI+1Л
  282.  @SKIPRDCHЛ
  283.  BP=BЛ
  284.  B=VAL(”&H”+MID$(C$,J,2))Л
  285.  ON MODE GOSUB @A1ST,@A2ND,@ASAME,@ADIFFЛ
  286. NEXTЛ
  287. GOSUB @AADDPTRЛ
  288. HP=P:HX=X:HY=Y  ′ ツキ゛ノ イチЛ
  289. Л
  290. ′┿┰ calculate SIZE ┥Л
  291. ′  Й SIZE=data_count−1Л
  292. ′         (== max index)Л
  293. Л
  294. I=X+Y*256−GX−GY*256−2−1Л
  295. I=I+(P−GP)*192*256Л
  296. SMAX=IЛ
  297. Л
  298. ′┿┰ write HEADER:SIZE ┥Л
  299. Л
  300. X=GX:Y=GY:P=GPЛ
  301. GPAGE 1,P,P:GPSET X,Y,I%256Л
  302. GOSUB @AADDPTRЛ
  303. GPAGE 1,P,P:GPSET X,Y,I/256Л
  304. Л
  305. ′┿┰ ツキ゛ ノ イチ ヲ セット ┥Л
  306. Л
  307. GP=HP:GX=HX:GY=HYЛ
  308. GPAGE 0,0,0Л
  309. Л
  310. RETURNЛ
  311. Л
  312. ′│    Encode sub rutines   │Л
  313. Л
  314. ′╂┿┰ MODE:ヒトツメ ┥┿╂╂╂╂╂╂╂╂╂╂╂Л
  315. ′У→ カキタ゛シЛ
  316. ′УЙ イッタン カキタ゛ス カ゛Л
  317. ′У  MODE ハ シ゛カイ ニ キメルЛ
  318. ′У  (イチシ゛テキ ニ チカ゛ウイロ アツカイ)Л
  319. @A1STЛ
  320.  AL=0           ′HEADERリセットЛ
  321.  HP=P:HX=X:HY=Y ′HEADERイチЛ
  322.  GOSUB @AADDPTR ′DATAカキタ゛シイチЛ
  323.  GOSUB @AWRITEЛ
  324.  MODE=A2NDЛ
  325. RETURN ′ツキ゛ ヘЛ
  326. Л
  327. ′╂┿┰ MODE:フタツメ ┥┿╂╂╂╂╂╂╂╂╂╂╂Л
  328. ′У→ スク゛ ASAME カ ADIFF ニ ヘンカЛ
  329. ′У( マエ ノ イロ ト コンカイ ノ イロ カ゛Л
  330. ′У  Й オナシ゛ → ASAME ヘ トフ゛Л
  331. ′У  Й チカ゛ウ → ADIFF ヘ トフ゛ )Л
  332. @A2NDЛ
  333.  MODE=ASAME+(BP!=B)Л
  334. ON(BP!=B)GOTO @ASAME,@ADIFFЛ
  335. Л
  336. ′╂┿┰ MODE:レンソ゛ク ┥┿╂╂╂╂╂╂╂╂╂╂Л
  337. ′УЙ チカ゛ウ イロ → スク゛ A1ST ヘ トフ゛Л
  338. ′УЙ オナシ゛ イロ → レンソ゛ク スウ ヲ +1Л
  339. ′У          → カキタ゛シЛ
  340. @ASAMEЛ
  341.  AL=AL+(BP==B)Л
  342.  IF BP==B GOTO @AFLUSHЛ
  343.  GOSUB  @AADDPTRЛ
  344. GOTO @A1STЛ
  345. Л
  346. ′╂┿┰ MODE:チカ゛ウイロ ┥┿╂╂╂╂╂╂╂╂╂Л
  347. ′УЙ オナシ゛ イロ → スク゛ A1ST ヘ トフ゛Л
  348. ′УЙ チカ゛ウ イロ → イロ ヲ ツイカЛ
  349. ′У           ( テ゛−タスウ モ +1 )Л
  350. ′У          → カキタ゛シЛ
  351. @ADIFFЛ
  352.  AL=AL+(BP!=B)Л
  353.  GOSUB @AADDPTRЛ
  354.  IF BP!=B GOTO @AFLUSHЛ
  355. GOTO @A1STЛ
  356. Л
  357. ′╂┿┰ フ゛ロック カキタ゛シ + ケンサ ┥┿╂╂╂Л
  358. ′У→ カキタ゛シタ アト、Л
  359. ′У  サイタ゛イ ニ タッシタラ、モ−ト゛リセットЛ
  360. ′У  (フ゛ロック ヲ クキ゛ル)Л
  361. ′УЙ シ゛カイ ハ A1STЛ
  362. @AFLUSHЛ
  363.  GOSUB@AWRITEЛ
  364.  IF AL<IMAX THEN RETURNЛ
  365.  GOSUB@AADDPTRЛ
  366.  MODE=A1STЛ
  367. RETURN ′ツキ゛ ヘЛ
  368. Л
  369. ′╂┿┰ カキコミ シ゛ッコウ ┥┿╂╂╂╂╂╂╂╂╂╂Л
  370. ′У→ HEADER イチ ニ MODE+ナカ゛サЛ
  371. ′У→ DATA イチ ニ イロЛ
  372. ′У Й MODE==A1ST ノ ハ゛アイЛ
  373. ′У   イッタン ADIFF アツカイ ニ スルЛ
  374. @AWRITEЛ
  375.  H=AL+(MODE==ASAME)*ABITЛ
  376.  GPAGE 1,HP,HP:GPSET HX,HY,HЛ
  377.  GPAGE 1,P,P:GPSET X,Y,BЛ
  378. RETURNЛ
  379. Л
  380. ′┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸Л
  381. ′┌─────────────────────────┐Л
  382. ′│   Decode (テンカイ ショリ)     │Л
  383. ′┌───────┐─────────────────┘Л
  384. ′│ INPUT ├─────────────────┐Л
  385. ′└───────┘                 │Л
  386. ′│ИGP  :カキコミ サキ GRP ヘ゜−シ゛  │Л
  387. ′│ИGX  :カキコミ サキ GRP X サ゛ヒョウ│Л
  388. ′│ИGY  :カキコミ サキ GRP Y サ゛ヒョウ│Л
  389. ′│ AVERIFY :ケンサ スル(DEBUG)  │Л
  390. ′│┌─────────────────┐      │Л
  391. ′│┘(フ゜レヒ゛ュ−ヒョウシ゛ ヨウ)└──────│Л
  392. ′│ APREVIEW :フ゜レヒ゛ュ−(DEBUG)│Л
  393. ′│ИDP  :テストヒョウシ゛GRP ヘ゜−シ゛  │Л
  394. ′│ИDX  :テストヒョウシ゛GRP X サ゛ヒョウ│Л
  395. ′│ИDY  :テストヒョウシ゛GRP Y サ゛ヒョウ│Л
  396. ′│ DW  :テストヒョウシ゛GRP X サイス゛ │Л
  397. ′│ DH  :テストヒョウシ゛GRP Y サイス゛ │Л
  398. ′│ DPL :テストヒョウシ゛ ハ゜レット No. │Л
  399. ′┌────────┐────────────────┘Л
  400. ′│ OUTPUT ├────────────────┐Л
  401. ′└────────┘                │Л
  402. ′│ Й INPUT ノ、И カ゛ ツイタ モノ。  │Л
  403. ′│   アタイ ハ、ツキ゛ ノ イチ ヲ シメス。 │Л
  404. ′┌──────────┐──────────────┘Л
  405. ′│ ナイフ゛ シヨウ ├──────────────┐Л
  406. ′└──────────┘              │Л
  407. ′│ RES$:ヨミコミ モト キャラ メイ     │Л
  408. ′│ CI  :ヨミコミ モト キャラ No.    │Л
  409. ′│ SMAX:ヨミコミ モト サイス゛−1     │Л
  410. ′│ ─────────────────────── │Л
  411. ′│ AL,B,BG$,MODE           │Л
  412. ′│ HP,HX,HY,I,J,P,R,X,Y,R$ │Л
  413. ′│ CHK$                    │Л
  414. ′└─────────────────────────┘Л
  415. @EXPANDЛ
  416.  GOSUB @PINIT ′テイスウ セットЛ
  417. Л
  418.  ′┌───────for VERIFY────────┐Л
  419.   GOSUB @DTMPUSHЛ
  420.  ′└───────for VERIFY────────┘Л
  421. Л
  422. MODE = A1ST ′ ショリ モ−ト゛Л
  423. B  =0       ′ ヒ゜クセル テ゛−タЛ
  424. AL =0       ′ テンカイ ヒ゜クセル スウЛ
  425. BG$=””      ′ キャラ ハ゜タ−ンЛ
  426. RES$=””     ′ CHR キャラ メイЛ
  427. CI=0        ′ CHR キャラ No.Л
  428. SMAX=0      ′ アッシュクテ゛−タ サイス゛Л
  429. Л
  430. ′┿┸ read RES$ ┝Л
  431. Л
  432. P=GP:X=GX:Y=GYЛ
  433. FOR I=0 TO 2Л
  434.  GPAGE 1,P,PЛ
  435.  RES$=RES$+CHR$(GSPOIT(X,Y))Л
  436.  GOSUB @AADDPTRЛ
  437. NEXTЛ
  438. Л
  439. ′┿┸ read CHARA No.┝Л
  440. Л
  441. GPAGE 1,P,P:I=GSPOIT(X,Y)Л
  442. GOSUB @AADDPTRЛ
  443. GPAGE 1,P,P:J=GSPOIT(X,Y)Л
  444. GOSUB @AADDPTRЛ
  445. CI=I+256*JЛ
  446. Л
  447. ′┿┸ read SIZE ┝Л
  448. Л
  449. GPAGE 1,P,P:I=GSPOIT(X,Y)Л
  450. GOSUB @AADDPTRЛ
  451. GPAGE 1,P,P:J=GSPOIT(X,Y)Л
  452. GOSUB @AADDPTRЛ
  453. SMAX=I+256*JЛ
  454. Л
  455. ′┿┸ decode ┝Л
  456. Л
  457. FOR I=0 TO SMAXЛ
  458.  GPAGE 1,P,P:B=GSPOIT(X,Y)Л
  459.  GOSUB @AADDPTRЛ
  460.  ON MODE GOSUB @DHEAD,@DHEAD,@DSAME,@DDIFFЛ
  461. NEXTЛ
  462. Л
  463. ′┿┸ ツキ゛ ノ イチ ヲ セット ┝Л
  464. Л
  465. GP=P:GX=X:GY=YЛ
  466. Л
  467. ′┿┸ アマリ カ゛ アレハ゛ カキタ゛シ ┝Л
  468. Л
  469. L=LEN(BG$):IF !L THEN @DENDЛ
  470.  BG$=BG$+”0”*(64−L)Л
  471.  GOSUB@DWRITEЛ
  472. @DENDЛ
  473. Л
  474.  ′┌───────for VERIFY────────┐Л
  475.    GOSUB@DTMPOPЛ
  476.  ′└───────for VERIFY────────┘Л
  477. Л
  478. GPAGE 0,0,0Л
  479. Л
  480. RETURNЛ
  481. Л
  482. ′│ Decode sub rutines │Л
  483. Л
  484. ′╂┿┰ MODE:A1ST ┥┿╂╂╂╂╂╂╂╂╂╂╂Л
  485. ′У  Й フ゛ロック ヘッタ゛ ヨミコミЛ
  486. @DHEADЛ
  487.  MODE=ASAME+!(B AND ABIT)Л
  488.  AL=B AND IMAXЛ
  489. RETURNЛ
  490. Л
  491. ′╂┿┰ MODE:ASAME ┥┿╂╂╂╂╂╂╂╂╂╂Л
  492. ′У  Й オナシ゛ アタイ カキコミЛ
  493. @DSAMEЛ
  494.  FOR J=0 TO ALЛ
  495.   GOSUB@DPUSHDЛ
  496.  NEXTЛ
  497.  MODE=A1STЛ
  498. RETURNЛ
  499. Л
  500. ′╂┿┰ MODE:ADIFF  ┥┿╂╂╂╂╂╂╂╂╂Л
  501. ′У  Й チカ゛ウ アタイ カキコミЛ
  502. @DDIFFЛ
  503.  GOSUB@DPUSHDЛ
  504.  IF AL==0 THEN MODE=A1STЛ
  505.  AL=AL−1Л
  506. RETURNЛ
  507. Л
  508. ′╂┿┰ テ゛−タ ツイカ ┥┿╂╂╂╂╂╂╂╂╂╂╂╂Л
  509. ′У  Й キャラ ハ゜タ−ン ニ 2モシ゛ ツイカЛ
  510. @DPUSHDЛ
  511.  BG$=BG$+HEX$(B,2)Л
  512.  IF LEN(BG$)<64 THEN RETURNЛ
  513.  ′GOTO @DWRITEЛ
  514. Л
  515. ′╂┿┰ カキコミ ┥┿╂╂╂╂╂╂╂╂╂╂╂╂╂╂╂╂Л
  516. ′У  Й キャラ セットЛ
  517. @DWRITEЛ
  518.  R$=RES$+HEX$(CI/256)Л
  519.  R=CI%256Л
  520. Л
  521.  ′┌──────for VERIFY─────────┐Л
  522.   IF!AVERIFY GOTO @VERIFYEDЛ
  523.    IF(R$==”BGU0”)AND(R==33)THEN CHK$=BKBG$:GOTO@VERIFY0Л
  524.     CHRREAD(R$,R),CHK$Л
  525.    @VERIFY0Л
  526.    IF CHK$!=BG$ THEN GOSUB @AVRERRЛ
  527.   @VERIFYEDЛ
  528.  ′└──────for VERIFY─────────┘Л
  529. Л
  530.  CHRSET R$,R,BG$Л
  531. Л
  532.  ′┌──────for PREVIEW────────┐Л
  533.   IF!APREVIEW GOTO@PREVIEWEDЛ
  534.    GPAGE 0,DP,0Л
  535.    GPUTCHR DX,DY,R$,R,DPL,1Л
  536.    DX=DX+8:DY=DY+8*(DX>=DW)Л
  537.    DX=DX%DW:DY=DY%DHЛ
  538.   @PREVIEWEDЛ
  539.  ′└──────for PREVIEW────────┘Л
  540. Л
  541.  BG$=””Л
  542.  CI=CI+1Л
  543. Л
  544. RETURNЛ
  545. Л
  546. ′┌───────for VERIFY─────────┐Л
  547.  ′╂┿┰ イチシ゛ ハ゛ッファ ホソ゛ン ┥┿╂╂╂╂Л
  548.  @DTMPUSHЛ
  549.   IF!AVERIFY THEN RETURNЛ
  550.    CHRREAD(”BGU0”,33),BKBG$Л
  551.  RETURNЛ
  552. Л
  553.  ′╂┿┰ イチシ゛ ハ゛ッファ フッキ ┥┿╂╂╂╂╂Л
  554.  @DTMPOPЛ
  555.   IF!AVERIFY THEN RETURNЛ
  556.    CHRSET ”BGU0”,33,BKBG$Л
  557.  RETURNЛ
  558. Л
  559.  ′╂┿┰ キ− ニュウリョク マチ ┥┿╂╂╂╂╂╂╂Л
  560.  @KWAITЛ
  561.   WAIT 1Л
  562.   IF BUTTON() THEN RETURNЛ
  563.   IF INKEY$()==”” THEN @KWAITЛ
  564.  RETURNЛ
  565. Л
  566.  ′╂┿┰ エラ− ヒョウシ゛ ┥┿╂╂╂╂╂╂╂╂╂╂Л
  567.  @AVRERRЛ
  568.   ?”ERR IN ”RES$;”:”;CIЛ
  569.   ?CHK$Л
  570.   ?BG$Л
  571.   BEEP 2Л
  572.  GOTO@KWAITЛ
  573. ′└───────for VERIFY─────────┘Л
  574. Л
  575. ′┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸┝┸Л
  576. ′(EOF)Л

CHECKER FLAG (ひとことコメント)

この作品に対するコメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は掲示板へ)

  • 名無しさん : スゴイナーーー (2013/01/04 (金) 10:24:09)
  • 天郷思音 : プログラムリストの行番号が重複してるようです。#basic{{を使うと自動的に行番号かつきます。 (2013/01/04 (金) 13:16:13)
  • RND128 : 上の指摘を勝手に修正しました。スイマセン (2013/01/04 (金) 15:32:34)
  • uniskie : ほーそんなことがあるんですね。修正有難うございます。>行番号 (2013/01/04 (金) 16:02:50)
  • 名無しさん : おつです! (2013/01/05 (土) 16:37:18)
  • 名無しさん : http://wiki.hosiken.jp/petc/?cmd=read&page=Toukou%2F%A5%A2%A5%CB%A5%E1%A1%BC%A5%B7%A5%E7%A5%F3%BA%EE%C0%AEにもある (2013/01/06 (日) 12:15:04)
  • uniskie : http://wiki.hosiken.jp/petc/?cmd=read&page=Toukou%2F%A5%A2%A5%CB%A5%E1%A1%BC%A5%B7%A5%E7%A5%F3%BA%EE%C0%AE はGRPに全部まとめる所が同じですが、(ランレングス)圧縮ではないと思いますよ。 複数のデータをまとめる処理はそれ自体をなんでもアーカイブと表現しますが、アーカイブ=圧縮というわけでもありません。 (2013/01/06 (日) 17:42:44)
  • Rzlszggd : ebDCxDVFn (2014/03/10 (月) 19:48:34)

表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.155 秒 | このページの最終更新 : 2022/09/20 (火) 12:44:09 (565d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30