SSブログ
English Version

レトロマイコン86ボードの構想(その15)DDT86でパッチ [8086]

 CP/M-86の頃にはパソコンがグラフィック表示対応もして来たり、CP/M-86自体もパーソナルCP/Mとして機種毎に販売されたこと等もあり、TeraTerm接続環境でうまく動かないソフトが結構あります。

 今回はgulperというパックマンライクのゲームにDDT86でパッチをあてて動かしてみたのでメモとして書いておきます。

 最初にダウンロードしたままの状態で起動すると

GULPER実行画面(対処前)


 Pascalのソースも添付されていたので確認してみると

GULPERのソース(抜粋)
PROCEDURE assign_values; { If your computer's character set is different from the IBM PC's you may } { have to assign other characters to these variables } BEGIN normal_gulper := chr (2); { face } super_gulper := chr (234); { square: ~ } ghost := chr (1); { inverse-video face } wall := chr (219); { solidly coloured rectangle: / } den := chr (176); { half-tone rectangle: 0 } bonus := chr (3); { heart shape } power_pill := chr (4); { lozenge } blank := ' '; dot := '.'; terminal := '$' END; { assign_values } PROCEDURE title_page; VAR row: 1..24; PROCEDURE sidescroll (slice: charstring); VAR i, j: 1..24; BEGIN FOR i :=1 TO 16 DO BEGIN GotoXY (1, row); FOR j:= 1 TO i DO write (' '); write (slice) END; row := row + 1 END; { sidescroll }


 機種依存のキャラクタコードの設定は一カ所で行っています。また、ソース内の先頭で設定しているので探し易そうです。

 今回は次のようにキャラクタコードを変更することにしました。
  • 02 -> 4f O
  • EA -> 23 #
  • 01 -> 40 @
  • DB -> 48 H
  • B0 -> 5a Z
  • 03 -> 56 V
  • 04 -> 2A *

 DDT86でパッチを当てる場合、ddt86 gulper.cmdで読込んでパッチを当ててもwコマンドでセーブできないのでrコマンドで読込んでパッチ適用後にwコマンドでセーブしています。
 最初に0080hから逆アセンブルしているのはヘッダ分を飛ばしてコードの先頭から見るためです。
 コードの先頭でスタートアップ処理にジャンプし、スタートアップ処理の直後に上述のキャラクタコード設定処理がありました。

DDT86でのパッチ操作
J>dir J: AZTEC TAR : CTYPE H : FCNTL H : LIBC H J: STDIO H : GULPER CMD J>a:ddt86 DDT86 1.2 -rgulper.cmd START END 77BE:0000 77BE:4A7F -l80 77BE:0080 JMP 2800 77BE:0083 NOP 77BE:0084 NOP 77BE:0085 INT AB 77BE:0087 INC BX 77BE:0088 ??= 6F 77BE:0089 JO 0104 77BE:008B JB 00F6 77BE:008D ??= 67 77BE:008E ??= 68 77BE:008F JZ 00B1 77BE:0091 SUB 29[BP+DI],AL -l2800 77BE:2800 CALL 0741 77BE:2803 ADD AL,[BX+SI] 77BE:2805 DAA 77BE:2806 OR 11[BX+SI],AL 77BE:2809 MOV BP,SP 77BE:280B CALL 23CF 77BE:280E DEC DI 77BE:280F AND DL,E927[BP+SI] 77BE:2813 ??= 0F 77BE:2814 PUSH DS 77BE:2815 PUSH BP 77BE:2816 MOV BP,SP -l 77BE:2818 PUSH BP 77BE:2819 JMP 281C 77BE:281C MOV AX,0002 77BE:281F MOV [02CC],AL 77BE:2822 MOV AX,00EA 77BE:2825 MOV [02CD],AL 77BE:2828 MOV AX,0001 77BE:282B MOV [02CE],AL 77BE:282E MOV AX,00DB 77BE:2831 MOV [02CF],AL 77BE:2834 MOV AX,00B0 77BE:2837 MOV [02D0],AL -s281c 77BE:281C B8 77BE:281D 02 4f 77BE:281E 00 77BE:281F A2 77BE:2820 CC 77BE:2821 02 77BE:2822 B8 77BE:2823 EA 23 77BE:2824 00 77BE:2825 A2 77BE:2826 CD 77BE:2827 02 77BE:2828 B8 77BE:2829 01 40 77BE:282A 00 77BE:282B A2 77BE:282C CE 77BE:282D 02 77BE:282E B8 77BE:282F DB 48 77BE:2830 00 77BE:2831 A2 77BE:2832 CF 77BE:2833 02 77BE:2834 B8 77BE:2835 B0 5a 77BE:2836 00 77BE:2837 A2 77BE:2838 D0 77BE:2839 02 77BE:283A B8 77BE:283B 03 56 77BE:283C 00 77BE:283D A2 77BE:283E D1 77BE:283F 02 77BE:2840 B8 77BE:2841 04 2a 77BE:2842 00 . -wgulper2.cmd -^C J>


 パッチ適用により、下記の画面のように標準のアスキーコードを使った画面にすることができました。

GULPER実行画面(対処後)


★2019/10/14 追記
 twitterに動画付きでコメントをポストしました。
https://twitter.com/wcinp/status/1183623815596634112



[TOP] [ 前へ ] 連載記事 [ 次へ ]

nice!(1)  コメント(0) 
共通テーマ:趣味・カルチャー