コミックマーケット85


今年末、東京ビッグサイトにて行われるコミックマーケット85にサークル参加する事となりました。
頒布物は新刊と、夏に出した既刊になります。
今回も新刊で取り上げた製作例を展示してお待ちしておりますので、宜しければ是非お立ち寄りください。


コミックマーケット85



レトロゲーム活用研究同好会


日時: 2013/12/31(火)
場所: 東京ビッグサイト
スペース: 西地区“す”ブロック−27b


新刊:


誌名: レトロゲーム活用研究同好会会報 PART02 -GBAスロットはPIOの夢を見るか?-
表紙:


サイズ: B5
価格: 200円
内容:
ニンテンドーDSDS LiteにあるGBAスロットの制御方法について解説した本です。


既刊:


誌名: レトロゲーム活用研究同好会会報 PART01 -DSに自作ハードを繋ぐ試み-
表紙:


サイズ: B5 40p
価格: 300円
内容:
ニンテンドーDSに繋いだ自作ハードをプログラムから制御する方法について解説した本です。

原稿が進まない。


・表紙絵下書き


いくら頭で練ってても結果が得られてない状態だと文章にまとまらない。
理論とか回路図とかプログラムは大体整えたんだけど試作回路のハンダ付けに時間食ってる。


DS の GBA Slot は一般的なマイコンと違ってラッチ機構持たないから固定的な出力はそもそも出来なくて
74HC573とか74HC574等のラッチ回路咬ます必要があるのと、ポートがビット単位で指定出来ないってのは理解した。
AD0 〜 AD15 の unsigned short (u16) か A16 〜 A23 の unsigned char (u8) かでそれぞれ入出力選べるハズなので
全て実証すれば PIO 実験のレポとして体裁は保てる感じ。


この調子では今回もギリギリ展開な予感な悪寒。

コミックマーケット85 受かりました。


ちゅーことで本文書いたりテストプログラム作ったりしてます。


コミケウェブカタログって当落確定すると、全サークルの当・落・抽選漏れが全て調べられちゃうんですね。
冊子及びROM版出るまでの間サークル参加情報を隠蔽出来なくなってしまった訳ですか、そうですか。

WACOM SmartScroll と Logicool M570 のスイッチを交換した。


WACOM の左手デバイスはいくつかのボタンが潰れてしまい、
Logicool のワイヤレストラックボールはいい加減チャタリング我慢するのに疲れたから。



WACOM SmartScroll は ALPS の SKEGADA010 という型番のタクトスイッチを、
Logicool M570 は OMLON の D2F-01(D2F-01F でも可) という型番のマイクロスイッチを代替部品として用いた。

ISBN-13←→ISBN-10 変換プログラム。


サンプルその2。前回プログラムの応用編的な感じで。


ISBN1310.COB (ISBN-13→ISBN-10 変換)

       IDENTIFICATION DIVISION.
       PROGRAM-ID. ISBN1310-VER001.
       AUTHOR. DUMBO.
       DATE-WRITTEN. 11.11.2013.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 ISBN-IN PIC X(13).
       01 ISBN-TMP PIC X(9).
       01 ISBN-CNT PIC 99 VALUE 9.
       01 MOD-11 PIC 9(3) VALUE 11.
       01 WAIT-10-2 PIC 9(3) VALUE 10.
       01 TEMP PIC 9(3) VALUE ZEROS.
       01 TOTAL PIC 9(3) VALUE ZEROS.
       01 Q PIC 9(3).
       01 R PIC 9(3).
       01 CDTEMP PIC 9.
       01 CDIGIT PIC X.
       01 CNT PIC 99.
       01 FLG PIC 9 VALUE ZERO.
       PROCEDURE DIVISION.
       MAIN.
           DISPLAY "ISBN-13→ISBN-10 変換プログラム ver0.01"
             UPON CONSOLE.
           PERFORM UNTIL FLG >= 1
             DISPLAY "ISBN-13(13桁) を入力してください。" UPON CONSOLE
             ACCEPT ISBN-IN FROM CONSOLE
             DISPLAY "入力した ISBN-13 = " ISBN-IN UPON CONSOLE
             IF ISBN-IN IS NUMERIC
               THEN
      *          DISPLAY "入力は正しいです。" UPON CONSOLE
                 MOVE ISBN-IN(4:9) TO ISBN-TMP
                 MOVE 1 TO FLG
               ELSE
                 DISPLAY "入力に誤りがあります。" UPON CONSOLE
             END-IF
           END-PERFORM.
      *ISBN-TMPを左桁の数字から順に×10、×9…×2と乗算して、
      *その結果を合計する。
           PERFORM VARYING CNT FROM 1 BY 1 UNTIL CNT > ISBN-CNT
             COMPUTE TEMP = FUNCTION NUMVAL(ISBN-TMP(CNT:1))
             COMPUTE TOTAL = (WAIT-10-2 - CNT + 1) * TEMP + TOTAL
           END-PERFORM.
      *合計÷モジュラス11=余り
      *→モジュラス11−余り=チェックデジット を算出する。
      *結果が10ならX、11なら0、それ以外なら余り値がチェックディジット。
           DIVIDE MOD-11 INTO TOTAL GIVING Q REMAINDER R.
           COMPUTE TEMP = MOD-11 - R.
           MOVE TEMP TO CDTEMP.
           EVALUATE TEMP
             WHEN 10
               MOVE "X" TO CDIGIT
             WHEN 11
               MOVE 0 TO CDIGIT
             WHEN OTHER
               MOVE CDTEMP TO CDIGIT
           END-EVALUATE.
           DISPLAY "ISBN-10 は " ISBN-TMP CDIGIT " です。"
             UPON CONSOLE.
           STOP RUN.


ISBN1013.COB (ISBN-10→ISBN-13 変換)

       IDENTIFICATION DIVISION.
       PROGRAM-ID. ISBN1013-VER001.
       AUTHOR. DUMBO.
       DATE-WRITTEN. 11.11.2013.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 ISBN-IN PIC X(10).
       01 ISBN-TMP PIC X(12).
       01 ISBN-HD PIC X(3) VALUE "978".
       01 ISBN-CNT PIC 99 VALUE 12.
       01 MOD-10 PIC 9(3) VALUE 10.
       01 WAIT-3-1 PIC 9(3) VALUE 3.
       01 ODD PIC 9(3) VALUE ZEROS.
       01 EVEN PIC 9(3) VALUE ZEROS.
       01 TOTAL PIC 9(3) VALUE ZEROS.
       01 Q PIC 9(3).
       01 R PIC 9(3).
       01 CDIGIT PIC 9.
       01 CNT PIC 99.
       01 FLG PIC 9 VALUE ZERO.
       PROCEDURE DIVISION.
       MAIN.
           DISPLAY "ISBN-10→ISBN-13 変換プログラム ver0.01"
             UPON CONSOLE.
           PERFORM UNTIL FLG >= 1
             DISPLAY "ISBN-10(10桁) を入力してください。" UPON CONSOLE
             ACCEPT ISBN-IN FROM CONSOLE
             DISPLAY "入力した ISBN-10 = " ISBN-IN UPON CONSOLE
             IF ISBN-IN IS NUMERIC OR
               (ISBN-IN(1:9) IS NUMERIC AND ISBN-IN(10:1) = "X")
               THEN
      *          DISPLAY "入力は正しいです。" UPON CONSOLE
                 STRING
                   ISBN-HD DELIMITED BY SIZE
                   ISBN-IN(1:9) DELIMITED BY SIZE
                   INTO ISBN-TMP
                 END-STRING
                 MOVE 1 TO FLG
               ELSE
                 DISPLAY "入力に誤りがあります。" UPON CONSOLE
             END-IF
           END-PERFORM.
      *ISBN-TMPを左から奇数桁の数字を合計する。
           PERFORM VARYING CNT FROM 1 BY 2 UNTIL CNT > ISBN-CNT
             ADD FUNCTION NUMVAL(ISBN-TMP(CNT:1)) TO ODD
           END-PERFORM.
      *ISBN-TMPを左から偶数桁の数字を合計×3する。
           PERFORM VARYING CNT FROM 2 BY 2 UNTIL CNT > ISBN-CNT
             ADD FUNCTION NUMVAL(ISBN-TMP(CNT:1)) TO EVEN
           END-PERFORM.
           COMPUTE EVEN = EVEN * WAIT-3-1.
      *合計÷モジュラス10=余り
      *→モジュラス10−余り=チェックデジット を算出する。
      *結果が10なら0、それ以外なら余り値がチェックディジット。
           COMPUTE TOTAL = ODD + EVEN.
           DIVIDE MOD-10 INTO TOTAL GIVING Q REMAINDER R.
           COMPUTE CDIGIT = MOD-10 - R.
           DISPLAY "ISBN-13 は " ISBN-TMP CDIGIT " です。"
             UPON CONSOLE.
           STOP RUN.

ISBN チェックディジット算出サンプル。


プログラミング教える用で書いてみたやつなのでそのまま業務で使うにはベタ過ぎるかもです。
つか、COBOL 知らない俺が COBOL 説いてるってのがまず訳解らんのですがねぇ…。


ISBN13.COB

       IDENTIFICATION DIVISION.
       PROGRAM-ID. ISBN13-VER001.
       AUTHOR. DUMBO.
       DATE-WRITTEN. 11.09.2013.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 ISBN-IN PIC X(12).
       01 ISBN-CNT PIC 99 VALUE 12.
       01 MOD-10 PIC 9(3) VALUE 10.
       01 WAIT-3-1 PIC 9(3) VALUE 3.
       01 ODD PIC 9(3) VALUE ZEROS.
       01 EVEN PIC 9(3) VALUE ZEROS.
       01 TOTAL PIC 9(3) VALUE ZEROS.
       01 Q PIC 9(3).
       01 R PIC 9(3).
       01 CDIGIT PIC 9.
       01 CNT PIC 99.
       01 FLG PIC 9 VALUE ZERO.
       PROCEDURE DIVISION.
       MAIN.
           DISPLAY "ISBN13 チェックディジット算出プログラム ver0.01"
             UPON CONSOLE.
           PERFORM UNTIL FLG >= 1
             DISPLAY "チェックディジットを調べる ISBN(12桁) を"
      -        "入力してください。" UPON CONSOLE
             ACCEPT ISBN-IN FROM CONSOLE
             DISPLAY "入力した ISBN(12桁) = " ISBN-IN UPON CONSOLE
             IF ISBN-IN IS NUMERIC
               THEN
      *          DISPLAY "入力は正しいです。" UPON CONSOLE
                 MOVE 1 TO FLG
               ELSE
                 DISPLAY "入力に誤りがあります。" UPON CONSOLE
             END-IF
           END-PERFORM.
      *ISBN-INを左から奇数桁の数字を合計する。
           PERFORM VARYING CNT FROM 1 BY 2 UNTIL CNT > ISBN-CNT
             ADD FUNCTION NUMVAL(ISBN-IN(CNT:1)) TO ODD
           END-PERFORM.
      *ISBN-INを左から偶数桁の数字を合計×ウェイト3する。
           PERFORM VARYING CNT FROM 2 BY 2 UNTIL CNT > ISBN-CNT
             ADD FUNCTION NUMVAL(ISBN-IN(CNT:1)) TO EVEN
           END-PERFORM.
           COMPUTE EVEN = EVEN * WAIT-3-1.
      *合計÷モジュラス10=余り
      *→モジュラス10−余り=チェックデジット を算出する。
      *結果が10なら0、それ以外なら余り値がチェックディジット。
           COMPUTE TOTAL = ODD + EVEN.
           DIVIDE MOD-10 INTO TOTAL GIVING Q REMAINDER R.
           COMPUTE CDIGIT = MOD-10 - R.
           DISPLAY "チェックディジットは " CDIGIT " です。"
             UPON CONSOLE.
           STOP RUN.


ISBN10.COB

       IDENTIFICATION DIVISION.
       PROGRAM-ID. ISBN10-VER001.
       AUTHOR. DUMBO.
       DATE-WRITTEN. 11.09.2013.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 ISBN-IN PIC X(9).
       01 ISBN-CNT PIC 99 VALUE 9.
       01 MOD-11 PIC 9(3) VALUE 11.
       01 WAIT-10-2 PIC 9(3) VALUE 10.
       01 TEMP PIC 9(3) VALUE ZEROS.
       01 TOTAL PIC 9(3) VALUE ZEROS.
       01 Q PIC 9(3).
       01 R PIC 9(3).
       01 CDTEMP PIC 9.
       01 CDIGIT PIC X.
       01 CNT PIC 99.
       01 FLG PIC 9 VALUE ZERO.
       PROCEDURE DIVISION.
       MAIN.
           DISPLAY "ISBN10 チェックディジット算出プログラム ver0.01"
             UPON CONSOLE.
           PERFORM UNTIL FLG >= 1
             DISPLAY "チェックディジットを調べる ISBN(9桁) を"
      -        "入力してください。" UPON CONSOLE
             ACCEPT ISBN-IN FROM CONSOLE
             DISPLAY "入力した ISBN(9桁) = " ISBN-IN UPON CONSOLE
             IF ISBN-IN IS NUMERIC
               THEN
      *          DISPLAY "入力は正しいです。" UPON CONSOLE
                 MOVE 1 TO FLG
               ELSE
                 DISPLAY "入力に誤りがあります。" UPON CONSOLE
             END-IF
           END-PERFORM.
      *ISBN-INを左桁の数字から順に×10、×9…×2と乗算して、
      *その結果を合計する。
           PERFORM VARYING CNT FROM 1 BY 1 UNTIL CNT > ISBN-CNT
             COMPUTE TEMP = FUNCTION NUMVAL(ISBN-IN(CNT:1))
             COMPUTE TOTAL = (WAIT-10-2 - CNT + 1) * TEMP + TOTAL
           END-PERFORM.
      *合計÷モジュラス11=余り
      *→モジュラス11−余り=チェックデジット を算出する。
      *結果が10ならX、11なら0、それ以外なら余り値がチェックディジット。
           DIVIDE MOD-11 INTO TOTAL GIVING Q REMAINDER R.
           COMPUTE TEMP = MOD-11 - R.
           MOVE TEMP TO CDTEMP.
           EVALUATE TEMP
             WHEN 10
               MOVE "X" TO CDIGIT
             WHEN 11
               MOVE 0 TO CDIGIT
             WHEN OTHER
               MOVE CDTEMP TO CDIGIT
           END-EVALUATE.
           DISPLAY "チェックディジットは " CDIGIT " です。"
             UPON CONSOLE.
           STOP RUN.

COBOL でゲームプログラミングとか。


出向先で OpenCOBOL 入れてくれって頼まれついでに簡単なプログラム書いてみた。


変数の考え方にクセがあるとか1つの処理に機能盛り過ぎとか、
エクセルIF関数の如く入れ子しないと else if 相当のことが出来ないとか。
色々言いたいところもあるけれど、割と嫌いじゃない言語です。


KAZUATE.COB

       IDENTIFICATION DIVISION.
       PROGRAM-ID. KAZUATE-VER001.
       AUTHOR. DUMBO.
       DATE-WRITTEN. 11.07.2013.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 ANS PIC 99 VALUE ZEROS.
       01 USR PIC 99 VALUE ZEROS.
       01 FLG PIC 9 VALUE ZERO.
       PROCEDURE DIVISION.
       MAIN.
           ACCEPT ANS FROM TIME.
           DISPLAY "KAZUATE GAME" UPON CONSOLE.
           PERFORM UNTIL FLG >= 1
             DISPLAY "GUESS(0-99)?" UPON CONSOLE
             ACCEPT USR FROM CONSOLE
             IF USR = ANS
               THEN
                 DISPLAY "IT'S CORRECT!!" UPON CONSOLE
                 MOVE 1 TO FLG
               ELSE
                 IF USR = ANS - 1 OR USR = ANS + 1
                   THEN
                     DISPLAY "IT'S NEAR!" UPON CONSOLE
                   ELSE
                     IF USR > ANS
                       THEN
                         DISPLAY "IT'S SMALLER." UPON CONSOLE
                       ELSE
                         IF USR < ANS
                           THEN
                             DISPLAY "IT'S LARGER." UPON CONSOLE
                         END-IF
                     END-IF
                 END-IF
             END-IF
           END-PERFORM.
           STOP RUN.


JANKEN.COB

       IDENTIFICATION DIVISION.
       PROGRAM-ID. JANKEN-VER100.
       AUTHOR. DUMBO.
       DATE-WRITTEN. 11.07.2013.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 DSP.
           03 HND PIC N(3) OCCURS 3.
       01 USR PIC 99 VALUE ZEROS.
       01 USR2 PIC 99 VALUE ZEROS.
       01 COM PIC 99 VALUE ZEROS.
       01 TMP PIC 99 VALUE ZEROS.
      *ユーザーの勝ち数をカウントする変数を初期化する。
       01 WIN PIC 9 VALUE ZERO.
      *
       PROCEDURE DIVISION.
       MAIN.
      *手を表す変数を初期化する。
           MOVE "グー " TO HND(1)
           MOVE "チョキ" TO HND(2)
           MOVE "パー " TO HND(3)
      *起動メッセージを表示する。
           DISPLAY "じゃんけんゲーム Ver.1.00 by DumBo" UPON CONSOLE.
      *5回勝負する。
           PERFORM 5 TIMES
      *ユーザーの手を入力する。
             DISPLAY "0:グー、1:チョキ、2:パー" UPON CONSOLE
             ACCEPT USR FROM CONSOLE
      *コンピュータの手を現在時間うち1/10秒2桁を種として決める。
             ACCEPT COM FROM TIME
             DIVIDE 3 INTO COM GIVING TMP REMAINDER COM
      *出した手を表す文字列を作成する。
             DISPLAY "ユーザー:" HND(USR + 1)
               "、コンピュータ:" HND(COM + 1)
      *勝敗を判定し、結果を表示する。
             IF USR = COM
               THEN
                 DISPLAY "・・・あいこです!"
               ELSE
                 COMPUTE USR2 = USR + 1
                 DIVIDE 3 INTO USR2 GIVING TMP REMAINDER USR2
                 IF COM = USR2
                   THEN
                     DISPLAY "・・・ユーザーの勝ちです!"
                       UPON CONSOLE
                     ADD 1 TO WIN
                   ELSE
                     DISPLAY "・・・コンピュータの勝ちです!"
                       UPON CONSOLE
                 END-IF
             END-IF
           END-PERFORM.
      *ユーザーの勝ち数を表示する。
           DISPLAY "ユーザーの勝ち数:" WIN UPON CONSOLE.
           STOP RUN.

色々作ってる風味。


・大人の蔵書管理 V0.0A


レコード登録にばかりに気が向いててメイン画面作ってなかったので実装開始。
どうやって使いやすいものに仕上げようか手間取ってる最中。


・大人の蔵書管理 V0.09


 モードレス間同士でウィンドウを行き来した際フリーズバグが発生。
あれこれ試して解決方法探ったけど規模が大きくなり過ぎてて原因に当りをつけられず。
ウィンドウ間の移動時に現れるので、一先ずモードレスからモーダルに変更。
バグ発生動作を行えない仕様に変えて対処(バグ潰しではないので、解決したとは言えないが。)。


マルチウィンドウの操作感は失われたけど、ウィンドウが開かれる順序や閉じられるタイミング等見直してみた結果、
これはこれで悪くない操作性に落ち着いた感じ。


 とらのあなからの商品情報取得ルーチンとレコード登録ルーチンとを連結。
同人誌の自動登録が機能しだしたので使いながらバグ潰したり微妙な部分を直したりを現在進行形で実施中。


 バーコードリーダーでの登録機能も残した。
買って来て直ぐの状態のものとか、やっぱりあると便利なので。


・サークル参加スケジューラ Version 0.10


ウィンドウの半透明表示とか、プルダウンで頒布物一覧表示とか。欲しい機能は大体実装。
サークル参加情報だけはまだワークシートに手入力だけど。
使い方説明もないのでまだ非公開な状態。


・その他


サイトコンテンツの成果物増やしたり、同人誌の自炊したり。