週刊アスキー

  • Facebookアイコン
  • Xアイコン
  • RSSフィード

ChatGPTに書いてもらおうとしたがJavaScriptやPythonのようにはいかなかった

約40年前の世界初のPDAでインベーダー風(?)シューティングを作って動かす

「ChatGPT」ならぬ「ChatOGT」をお試しあれ

 さて、「PSION Organizer II」という約40年前の端末で、どんなプログラムを動かしてやろうか。幸いなことに、ネットのおかげで、PSION Organizer IIの使い方や、組み込まれたOPLというプログラミング言語の仕様を調べることができる。

 「Jaap's Psion II Page」というサイトは、この端末に関する情報の宝庫である。このサイトでは、PSION Organizer IIのJavaScriptによるエミュレーターを公開しており、誰でもブラウザ上で世界最初のPDAとされるこの端末の操作感を体験できる。

PSION Organizer IIのエミュレーターの画面。カバーをクリックするとスライドしてONで本体が起動するアニメーションに心癒される。スマホのブラウザからアクセスすると、Xiaomi 14 Ultraの画面に入れ子状のPSION Organizer IIの状態となる。

 私の場合は、本物のPSION Organizer IIの電卓的なボタンをポチポチと押してプログラムを入力することになる。自分でプログラムを書いてみたいと思って始めたのだが、いわゆる構造化プログラミングが可能で、文法エラーも的確に指摘してその行を表示してくれる。久しぶりにプログラミングを心から楽しませてもらった。

 今回、作ったプログラムのうち、まず「ChatGPT」時代にふさわしい会話ソフト「ChatOGT」(OGT=Organizer II)というプログラムを紹介しておくことにする。

スタートすると利用者の名前を聞いてくるので「SATOSHI」と入力する。

とりあえず「HELLO」と入力する。

ちゃんと返答してくれるではないか。

中二病プログラミング的に「DO YOU LOVE ME?」と入力しようとする。ただし、ボタンからは「?」が入力できないようだ。

実は入力に「LOVE」と入っていれば「I LOVE YOU」と返すようにプログラムされている。自分で書いたプログラムでも嬉しいかな?

テレてみる。

会話データはテーブルで持っているわけでもなく、日本の伝統である「人工無能」のように内容を覚えたりもしないので、すぐにこうなってしまう(正直者)。

 このように、自分でも楽しんでプログラムを作って、他人に触ってもらったりして遊んでいる。ポチポチと電卓風ボタンからコードを入れる前には、パソコン上でコードをいちど書いている。最新のAIコードエディタ「CURSOR」で編集してプログラムを作っていると、まるで時間がねじれたような気分になってくる。以下に、「ChatOGT」のコードだ。


CHATPSI:
  LOCAL NAME$(20), USER$(30), REPLY$(30)

  CLS
  PRINT "NAME, PLEASE"; CHR$(63)
  PRINT ": ";
  EDIT NAME$
  CLS
  PRINT "HELLO, "; NAME$; CHR$(33);
  GET

  DO
      CLS
      PRINT "YOU: ";
      USER$ = ""
      EDIT USER$
      CLS
      IF UPPER$(USER$)="HELLO"
          REPLY$="HI THERE!"
      ELSEIF LOC("HOW ARE YOU", UPPER$(USER$))>0
          REPLY$="I'M FINE, THANKS!"
      ELSEIF LOC("HOW ARE YOU", UPPER$(USER$))>0
          REPLY$="I'M FINE, THANKS!"
      ELSEIF LOC("LOVE", UPPER$(USER$))>0
          REPLY$="I LOVE YOU" + CHR$(33) + ", " + NAME$
      ELSEIF LOC("HAPPY", UPPER$(USER$))>0
          REPLY$="I AM HAPPY" + CHR$(33) + ", " + NAME$
      ELSEIF LOC("MAKE", UPPER$(USER$))>0
          REPLY$="MAKE LOVE" + CHR$(63)
      ELSEIF UPPER$(USER$)="BYE"
          PRINT "OGT: GOODBYE!"
          GET
          BREAK
      ELSE
          REPLY$="I DON'T UNDERSTAND."
      ENDIF
      PRINT "OGT: "; REPLY$
      GET
  UNTIL 0
  STOP

 ところで、ASCII.JPのK編集長から「ChatGPTにプログラムを書かせてみたのか?」と質問されたのだが、もちろん試してみた。というのも、ChatGPTが1960年代のDECのミニコン「PDP-8」のアセンブリ言語のコードを書き出せたという記事をどこかで読んだからだ。しかし、実際にやってみると一見それっぽいプログラムは書き出すものの文法エラーがでまくる。ほとんどBASICなんだから簡単だと思ったのだが、関数のパラメーターが違ったり、IF文の使い方を間違えていたり、FOR文などいくつかのOPLにはない文や関数を使っていたり、変数の定義の仕方すら間違っていた。

 PDP-8は、コンピューターサイエンスの分野で広く使われた一世を風靡したマシンである。そのため、ネット上には多くのコードが残されているのだろう。PSIONのOPLも、かなり限られるもののネット上にコードはあるはずではあるのだが。とはいえ、一度コードを書き出された以上は、動くところまで持っていかないと可哀想である。ChatGPTの吐いたコードのロジックは理解できるので、文法的な修正とそれにともなって必要となったアルゴリズムの一部変更をへて、インタラクティブなゲームを動かすことができた。

電卓インベーダーを世界初のPDAでふたたび!

 「NUMINVR」は、画面右からアルファベットの文字がランダムに出現し、左端に到達する前に撃ち落とすシューティングゲームである。インベーダーとなる文字を消すには、対応するキーを押せばよい。撃ち落とした文字の数に応じてスコアが加算される。以下の動画で、実際のプレイの様子とコードの修正過程を見て欲しい。

 要するに、スペースインベーダー気分で遊べるゲーム電卓があったのと思うのだが、あれに近い遊び方ができるゲームである。ちなみに、プログラミング言語OPLの仕様については、前述の「Jaap's Psion II Page」に詳しい解説がある。実際にこのプログラムを入力してプレイする人は多くないと思われるが、「NUMINVR」のコードは以下のようになっている。


NUMINVR:
  LOCAL MAXT%, ROWS%, COLS%, I%, KEYCODE%, SCORE%
  LOCAL X%(10), Y%(10), ACT%(10)
  LOCAL LETTER$(10,1), LETTERS$(26)

  MAXT%   = 10
  ROWS%   = 2
  COLS%   = 16
  LETTERS$= "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  SCORE%  = 0

  I% = 1
  WHILE I% <= MAXT%
      ACT%(I%) = 0
      I% = I% + 1
  ENDWH

MAINLOOP::
  IF RND < 0.4 THEN
      I% = 1
      WHILE I% <= MAXT%
          IF ACT%(I%) = 0
              ACT%(I%) = 1
              X%(I%)   = COLS%
              Y%(I%)   = INT(RND * ROWS%) + 1
              LETTER$(I%) = MID$(LETTERS$, INT(RND * LEN(LETTERS$)) + 1, 1)
              I% = MAXT%
          ENDIF
          I% = I% + 1
      ENDWH
  ENDIF

  CLS
  I% = 1
  WHILE I% <= MAXT%
      IF ACT%(I%)
          X%(I%) = X%(I%) - 1
          IF X%(I%) < 1
                GOTO GAMEOVER::
          ENDIF
          AT X%(I%),Y%(I%)
          PRINT LETTER$(I%)
      ENDIF
      I% = I% + 1
  ENDWH

  KEYCODE% = KEY
  IF KEYCODE% <> 0
      I% = 1
      WHILE I% <= MAXT%
          IF ACT%(I%) AND LETTER$(I%) = CHR$(KEYCODE%)
              ACT%(I%) = 0
              SCORE%   = SCORE% + 1
          ENDIF
          I% = I% + 1
      ENDWH
  ENDIF

  I% = 1
  WHILE I% <= 500
      I% = I% + 1
  ENDWH

  GOTO MAINLOOP::

GAMEOVER::
  CLS
  PRINT "GAME OVER"
  PRINT "SCORE:"; SCORE%
  GET
  STOP

 ところで、OPLの資料を見ていて興味深い発見があった。なんと、この1986年製の英国の情報端末の文字コード一覧に「カタカナ」が含まれているのだ。PSION Organizerは、英国をはじめ、イタリアやドイツなどヨーロッパ圏で使われた端末である。そんな遠い異国の地で、50文字のきれいに整列したカタカナたちと出会えるとは! 思わずほっこりとした気持ちになってしまう。

PSION Organizer IIの文字コード一覧。

 PSION Organizer IIは、日立のHD6301というCPU(モトローラのMC6800の改良版)を搭載していたようだ。カタカナ文字が入っているのも使われたデバイスの関係だろう。古いデジタル機器の世界は、いまや「デジタル考古学」ともいえるものとなってきている。そんなことを考えながらネットをさまよっていたら、凄いものを見つけてしてしまった。

 なんと、PISON Organizer用に漢字表示が可能な日本語エディタを作って公開していた人物がいたのである。作者は『PC WAVE』や『Mobile PRESS』で連載を持っていた波多利朗さんだ。そのエディタの名は「俳句PAD」。俳句PADという名前が付けられた理由は、メモリサイズの制限により全角50文字しか記録できないためらしい。

 PISON Organizerシリーズ自体が、コンピューターに少し詳しいくらいでは知る人もほとんどいない端末なのに、これは、凄すぎる。MSXは三つ子の魂みたいな話なのでわかるが、PISON Organizerのほうは人間の想像力の限界に挑戦するような世界である。「大人になった今ならわかる」というような甘酸っぱい話ではなく、うかつに手を出すとヤケドしそうである。

この記事をシェアしよう

週刊アスキーの最新情報を購読しよう

本記事はアフィリエイトプログラムによる収益を得ている場合があります

この連載の記事