2015年4月14日火曜日

アルフォスをJoystickで

XPAC2を使うと、STICKやSTRIG命令などT-BASIC7で用意されているジョイスティック命令を利用することができます。

I/Oポートから直性データを取得する場合、以下のアドレスから操作します。
I/Oポートアドレス内容
19hジョイスティックアダプタ入力ポートA
1Ahジョイスティックアダプタ入力ポートB
I/Oポートを直接叩くのは、初代パソピアでも使えます。

リードするデータ内容は、デフォルト0xFFで、各ボタンが押されると、以下のビットがLowになります
bit7bit6bit5bit4bit3bit2bit1bit0
--トリガーBトリガーA右ボタン左ボタン下ボタン上ボタン

せっかくなので、Alphosでジョイスティックを利用できるようにしてみました。
以前紹介したパッチでは、純正のJOY PAC2でも動作しなかったので、全面見直し。
見直したパッチはこちら(277行目以降が、ジョイスティックのパッチ)
271 INPUT"Mnemonic? (1-255)",B:IF (B>0) AND (B<256) THEN POKE &HC80A,B-1
272 INPUT"Ground Attack? (Y/N)",C$:IF C$="N" OR C$="n" THEN POKE &HE587,0:POKE &HE588,0:POKE &HE589,0
273 INPUT"Interceptor? (Y/N)",C$:IF C$="N" OR C$="n" THEN POKE &HE590,0:POKE &HE591,0:POKE &HE592,0
274 INPUT"Sound? (Y/N)",C$:IF C$="N" OR C$="n" THEN POKE &HE596,0:POKE &HE597,0:POKE &HE598,0
275 INPUT"Endress? (Y/N)",C$:IF C$="Y" OR C$="y" THEN POKE &HE607,0
276 INPUT"High Speed? (Y/N)",C$:IF C$="Y" OR C$="y" THEN POKE &HD12D,&HC9
277 FOR I=1 TO 6:READ A$,B$:A=VAL("&H"+A$):POKE A-1,&HC3:POKE A,VAL("&H"+B$):POKE A+1,&HF1:NEXT
278 FOR A=&HF100 TO &HF1AA:READ B$:POKE A,VAL("&H"+B$):NEXT
279 OUT &H1B,1

390 DATA D2BA,56,E4AA,00,E54B,09,E5A5,12,E8F5,33,E920,46
400 DATA E5,21,AD,E4,22,31,F1,18,10,E5,21,4E,E5,22,31,F1
410 DATA 18,07,E5,21,A8,E5,22,31,F1,D3,30,DB,31,6F,DB,19
420 DATA 67,E6,03,20,02,CB,BD,7C,E6,0C,20,02,CB,BD,7D,E1
430 DATA C3,00,00,DB,31,C5,4F,DB,19,F6,F3,07,07,47,07,A0
440 DATA A1,C1,2F,C3,F7,E8,DB,31,C5,4F,DB,19,0F,0F,0F,0F
450 DATA A1,C1,2F,C3,22,E9,E5,4F,DB,19,2F,E6,3F,21,6B,F1
460 DATA 85,6F,7E,A1,32,26,EC,E1,C3,BC,D2,5F,5E,5B,5A,4F
470 DATA 4E,4B,4A,1F,1E,1B,1A,0F,0E,0B,0A,57,56,53,52,47
480 DATA 46,43,42,17,16,13,12,07,06,03,02,5D,5C,59,58,4D
490 DATA 4C,49,48,1D,1C,19,18,0D,0C,09,09,55,54,51,50,45
500 DATA 44,41,40,15,14,11,10,05,04,01,00

XPAC2の場合、Joystick1(SDカードの隣)の方にジョイスティックを接続してください。

上記のパッチを当てたALPHOSを起動。自分の好みに応じて、オプションを入力

オープニングが表示された後に、


ジョイスティックの
「SELECT」 (0bit[上]と1bit[下]が同時にLow)、
「RUN」 (2bit[左]と3bit[右]が同時にLow)
を押すと、ゲームスタートです。

ゲーム中の画面

十字キーで上下左右に移動、2ボタン対応のジョイスティックの場合、ボタンの配置は
Aボタン=Zキー(BOMB)
Bボタン=Xキー(MISSILE)
ジョイスティックもテンキーも、どちらも使えるようにしました。

ハイスコアの入力画面では

左右キーで文字選択、A or Bボタンで決定になります。

MRAMは64KBあるので、Alphosの場合、全てのプログラムを保存できます。
マシン語の保存先アドレスと、サイズは以下の通りです。
alpdat &H0000, &H6800
alpmap &H9000, &H2A00
alpobj &HC800, &H2200
Joystickパッチと合わせて、MRAMから起動できるように保存しておくと快適です。

3 件のコメント:

  1. ご無沙汰しております。

    やっとALPHOSとXPAC2の両方が手に入ったので、こちらの記事を元にMRAM起動を試みてみました。

    BASICプログラムの"ALPHOS"で、
    BLOAD #-1,"alpdat"
    BLOAD #-1,"alpmap"
    BLOAD #-1,"alpobj"
    の後で、一旦停止して
    BSAVE"alpdat",&H0000,&H6800
    BSAVE"alpmap",&H9000,&H2A00
    BSAVE"alpobj",&HC800,&H2200
    でMRAMに保存したのですが、これを使って起動するとキャラクターや
    マップのパターン等が全て化ける状態で起動します。(動作はしている?)

    全範囲(&H0000-&HEA00)を一括保存して起動しても同様です。
    MRAMも2箇所両方で試しても同じ結果でした。

    何か原因が分かれば教えて下さると幸いです。
    宜しくお願いします。

    返信削除
    返信
    1. "alpdat"は裏RAM領域(&H0000-&H7FFF)にロードされています。
      一旦別領域にロードしてから保存するのが良いと思います。
      BLOAD#-1,"alpdat",&H9000
      BSAVE"alpdat",&H9000,&H6800
      XPAC2から読み込む際は、裏RAMの番地「0」を指定してLOADします
      BLOAD"alpdat",0
      違っていたらすいません・・・

      削除
    2. ありがとうございます!!
      &H9000や&H8000にロードだと何故か暴走したので、&H8800にロードして成功しました。
      パッチの方に挑戦したいと思います。
      引き続き宜しくお願いします。

      削除