So-net無料ブログ作成
English Version

レトロマイコン86ボードの構想(その16)プリント基板完成 [8086]

 「レトロマイコン86ボードの構想(その10)回路図整理とパターン設計」の記事で書いたV20(8088互換)とPIC24で構成されるPic24V20基板のプリント基板はSEEDさんからとっくに届いていたのですが、74HC573の5.2mm幅のSOPパッケージを手配するのが遅れため、到着待ち状態でした。
 漸く、HC573が届いたのでプリント基板に部品を実装しました。

 まずは出来上がったプリント基板のトップ面です。

Pic24V20プリント基板(トップ面)


 ボトム面は割合空いているので74HC573のチップを載せました。

Pic24V20プリント基板(ボトム面)


 しかし、その後ブレッドボード上で動かしていると不安定なので573のアドレスラッチのストローブ部分を少し変更しました。
 上記の回路図の記事に載せた回路図も変更済みです。

 下の写真が部品実装後のトップ面です。PIC24FJ64GA004が実装しているリアルタイムクロック用のクリスタル実装パターン(PICの上の部分)も付けていますがまだ未実装です。

V20ワンボード基板(トップ面)


 下の写真がボトム面です。上記のように基板製造会社に手配後に変更が発生したので抵抗を追加しています。
 左側の大きな白い線はリアルタイムクロックのためのバックアップ用CR2032電池のホルダで未実装です。

V20ワンボード基板(ボトム面)


★2019/10/20 追記
 今回の基板作成で気が付いた事などメモしておきます。
  • 74HC573のSOPパッケージの入手性
     5.2mm幅のSOPパッケージの入手性はあまりよくない。eBayでポチったがshipされるまで3日間くらい掛かったのでAliExpressでもポチっておいたら、AliExpressの方が早く着いた(業者にもよるだろうけど)。
     そもそも幅の狭いSOPパッケージは373はよく見かけるけど573はあまり見かけない(幅広のものは結構見かけるし所有している)。

  • 表面実装方法
     PIC24FJの44ピンのTQFPを今回、初めてYouTubeで見かけるような半田ごてを使った半田付けにトライした。
     当然ステンシルは作っていないのでクリーム半田をピン毎に塗る手間を考えたら、半田ごての方が作業効率が良さそう。

  • 半田付け用フラックスの除去
     ティッシュにメチルアルコールを含ませて除去したらティッシュの繊維があちこちに残った^^;;
     古い歯ブラシで可能な限り除去したけど、ルーペで見るとイマイチきれいではない。
     その点、クリーム半田はフラックス入りで周りを汚さないし、表面張力で部品の位置もいい感じで収まる。

  • 部品の固定治具
     「表面実装部品固定冶具」の記事で書いた固定治具を今回初めて使ってみた。
     基板に傷が付きそうだったのでカプトンテープで巻いて使ったが、半田ごてでの半田付けや追い半田する際に中々便利だった。

  • ショットキーバリアダイオード
     何種類か準備してあったが丁度いい大きさのものが無かった(eBayでも見つからず)。結局かなり小さいものを使用したがマイナス側のマークはルーペで確認しながら半田付けした。私の使っているルーペは上下左右逆に見えるので注意が必要w

  • 512Kx8Bit SRAM
     SAMSUNG製のK6T4008C1B-DB70が以前より値上がりしてきた(5百円弱程度)ように感じる。AliExpressでピンコンパチの日立製HM628512が5個で千円弱(久々にAliExpressに行ったら100円クーポンが入手できたので更に100円引き)で売っていたのでポチっておいた。
     但し、写真はDIPだけど説明の部分にはDIP型番に併記してフラットパッケージの型番も書いてあったので少し不安ですが・・



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

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

レトロマイコン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) 
共通テーマ:趣味・カルチャー

レトロマイコン86ボードの構想(その14)untarの製作 [8086]

 今日(2019/10/12 土曜日)の夕方から明日にかけて関東を直撃するおそれがある過去最強クラスとも言われている台風19号のため、JRは全面運休を予定していて、昨日夕方に近くのスーパーマーケットに行ったらレジが長蛇の行列でパンやカップ麺類が殆ど無い状態でした。
 危険なので緊急以外の外出をしないように政府見解もでているので今日はパソコンの前に座っています(いつものことだけどw)

 「レトロマイコン86ボードの構想(その11)xmodemの移植」の記事で書いたように自作のV20ボードで動くCP/M-86上でxmodemが動くようになり、パソコンとのファイル送受信が簡単にできるようになりました。

 kuninetさんが書かれた「KZ80シリーズ、SBC8080 8085でCP M」の最後の方で拙作のxmodemを紹介して頂いていて、ここでは同時にCP/M-80用のunzipも紹介されています。パソコン側のGUI操作で複数ファイルのアーカイブを作り、xmodemでCP/Mへ転送する環境は確かに便利です。

 そこでCP/M-86用のunzipを探してみましたが見つかりませんでした・・・
 パソコンで使用している圧縮/解凍ソフトである7-zipの圧縮ファイル作成時の設定ウィンドを見ていたらなんとtarに対応していました^^

7-zipの圧縮ファイル作成時の設定ウィンド


 そこでCP/M-86用のtarファイルを解凍するuntarを作ってみました。
 tarは古くからあるツールで、tarファイルの構造は単純なので解凍ツールの作成は割合簡単です。

 tarファイルのフォーマットについてはネット上に豊富に情報があり「tar の構造」等を参考にさせて頂きました。

 制作したuntarの操作ログのサンプルを貼っておきます。

untar操作ログ
J>a:xmodem aztec.tar /r /p aztec.tar (PUN/RDR) received 60 block(s). J>a:stat *.* Drive J: User : 0 Recs Bytes FCBs Attributes Name 60 8k 1 Dir RW J:AZTEC .TAR ---------------------------------------------- Total: 8k 1 J: RW, Free Space: 1,936k J>a:untar usage : untar [/l /e] FileName /l : display file list /e : extract all files Ver 0.01 2019/10/11 by skyriver J>a:untar /l aztec aztec.tar CTYPE.H 638 bytes FCNTL.H 211 bytes LIBC.H 1222 bytes STDIO.H 1306 bytes J>a:untar /e aztec aztec.tar CTYPE.H 638 bytes created FCNTL.H 211 bytes created LIBC.H 1222 bytes created STDIO.H 1306 bytes created J>a:stat *.* Drive J: User : 0 Recs Bytes FCBs Attributes Name 60 8k 1 Dir RW J:AZTEC .TAR 5 2k 1 Dir RW J:CTYPE .H 2 2k 1 Dir RW J:FCNTL .H 10 2k 1 Dir RW J:LIBC .H 11 2k 1 Dir RW J:STDIO .H ---------------------------------------------- Total: 16k 5 J: RW, Free Space: 1,928k J>


 コンパイル時のログも貼っておきます。"-a"オプションで自動的にリンクまで行うようにしています。

B>drc -a untar
--------------------------------------------------
Digital Research C       04/17/84     Version 1.11
Serial No. 3073-0000-001282    All Rights Reserved
Copyright (c) 1983,1984     Digital Research, Inc.
--------------------------------------------------

Digital Research C  Version 1.11 -- Preprocessor

Digital Research C  Version 1.11 -- Code Gen
untar.c:         code:  1541 static:   235 extern:   694

--------------------------------------------------
LINK-86 Linkage Editor  19 March 1984  Version 1.4
Serial No. 3073-0000-001282    All Rights Reserved
Copyright (C) 1982-1984     Digital Research, Inc.
--------------------------------------------------

CODE    06186
DATA    011A1

USE FACTOR:  18%

B>


 最後に、今回作成したuntarプログラムは下記のリンクからダウンロードできます。
 ※商用目的以外であれば自由に使用可能

UNTAR_CPM86_V003a.zip

・2019/10/18 Ver0.03a
 Aztec C 8086 Ver3.20d でコンパイル(File size was turned to 10KB from 30KB)
・2019/10/16 Ver0.03
 ファイルリスト表示を高速化
・2019/10/13 Ver0.02
 "/l"オプションを廃止し、リスト表示をディフォルトとした
・2019/10/12 Ver0.01a
 ファイルサイズが128の倍数の場合の処理を改善


[TOP] [ 前へ ] 連載記事 [ 次へ ]
nice!(0)  コメント(1) 
共通テーマ:趣味・カルチャー

レトロマイコン86ボードの構想(その13)自作スクリーンエディタ [8086]

 前回の記事で書いたようにCP/M-86でWordStarが動くようになりました。
 しかし、WordStarは起動の度にファイル内容の表示領域を広げるために操作が必要だったり、ディフォルトでページ境界線が表示されていたり、更には当時の基本的なエスケープシーケンスのみで制御していることもあり動作が重いです・・・

 そこで「3チップ構成68Kマイコンの構想(その14)スクリーンエディタの開発」の記事で書いた自作のsked(Simple Kitten EDitor)をDRC(デジタルリサーチ社製C言語)環境を使ってCP/M-86に移植してみました。

 skedのコマンド体系はWordStarライクの2ストロークにしているので私にとっては使い勝手がいいです。

help表示状態の画面


 実装機能は必要最小限(エディタの追加機能を考え出したら切りがない)ですがオンメモリ処理でBIOSを直にコール(BDOS経由でのBIOSコール機能しか提供していないCP/M-86ではあまり例がないと思う)しているのでWordStarと比較し動作がかなり速いです。

 DRC(Ver 1.11)への移植作業について気が付いたこと等をメモしておきます。

  1. SIZE_T/size_tの定義
    SIZE_Tの定義がDOS.Hのみにあり、今回はDOS.Hは使わないので自分でunsigned intとして定義しています。

  2. SIZE_T(unsigned int)の演算
    SIZE_Tでキャストした0x8000の2除算が0xc000になってしまう。除算式に含まれる全ての数値をSIZE_Tでキャストしても変化ありませんでした。

  3. unsigned charが使えない
    DRCのコンパイラが対応していないためunsigned charでエラーになります。

  4. 実行ファイルのサイズが大きい
    "Hello!"表示のプログラムのサイズが28KBでAztecCの6KBと比較してかなり大きい。

  5. コンパイル時間
    結構時間が掛かります。体感ではAztecCの5倍程度かかります。
    但し、AztecCは大きめのソースをコンパイルしたところ、私の環境ではコンパイラがうまく動かなかったので今回はDRCを使っています。

  6. マニュアルの情報は多い
    マニュアルの内容は充実しています。インラインアセンブル機能は無いようですがrasm86(リロケータブルアセンブラ)の処理と割合簡単にリンクできます。

  7. デバッガ
    DRCには関係ないですがCP/M-86用のシンボリックディバッガを探したけれどまだ見つけられていないのでシンボルをマニュアルで参照する必要があり不便です。
    ★2019/10/01 追記 {
     シンボリックディバッガ(SID86)はここからダウンロードできました。
    }

★2019/09/30 追記
twitterにWordStarとの比較動画をアップしました。

https://twitter.com/wcinp/status/1178679748584624131


★2019/10/13 追記
 自作スクリーンエディタsked(CP/M-86版)は下記のリンクからダウンロードできます。(商用目的以外であれば自由に使用可能)

SKED_CPM86_V001f.zip



[TOP] [ 前へ ] 連載記事 [ 次へ ]
nice!(1)  コメント(0) 
共通テーマ:趣味・カルチャー

レトロマイコン86ボードの構想(その12)CP/M-86でWordStar [8086]

 前回の記事で書いたようにCP/M-86で自作のxmodemが動くようになったので、次にエディタが欲しいところです。

 そこでまずはメジャーなWordStarを動かしてみました。

 「レトロマイコンZ80ボードの構想(その15)エスケープシーケンスの実験」の記事で書いたようにCP/M-80ではPIC24側で当時のエスケープシーケンスをANSIエスケープコードに変換してWordStarを動かしていて、この変換処理は今回のCP/M-86でも入れているのですが、CP/M-86のWordStarはうまく動きませんでした。

 TeraTermのログ機能を使ってCP/M-86版WordStarが使用しているエスケープシーケンスを確認し、次のエスケープシーケンスの変換処理を追加することで無事動くようになりました。
  • ESC 'E'
    画面消去

  • ESC 'Y' (y+' ') (x+' ')
    カーソル移動。()は1キャラクタコードで移動先カーソル位置(x,y)にスペースコードを加算したキャラクタコード。

  • ESC 'b' 0x0e
    強調文字属性に変更。今回はTeraTermで太文字黄色になるようにしました。

  • ESC 'b' 0x03
    強調文字属性の解除

 ネット情報ではTEDも人気が高かったようですが、起動するとトラップが発生し、動作しませんでした。
 ソース付きだったので初期化部分の処理を見てみたら int 10h を使用していた・・・

;
; We start by initializing the display, then allocate memory for the
; file and paste segments.  Parse the command line for a filename , if
; one was input, read in the file.  Finally set the INT 23 and 24 vectors.
cseg

start:
       mov      cl,9
       mov      dx,offset cls
       int      224

       push     ds 
             xor      ax,ax
             mov      ds,ax
             mov      ah,12h
             mov      bl,10h
             int      10h
             cmp      bl,10h
             je       not_ega


 WordStarの画面キャプチャを以下に貼っておきます。
 「レトロマイコンZ80ボードの構想(その15)エスケープシーケンスの実験」の記事に貼ってあるCP/M-80のWordStarの画面と同じですね。

 起動直後に表示される今で言うスプラッシュウィンド相当の画面です。

CP/M-86版WordStarの起動画面


 メニュー画面です。'F'コマンドでファイル一覧表示をON後の画面です。

CP/M-86版WordStarのメニュー画面


 ファイル編集画面です。

CP/M-86版WordStarの編集画面1


 ^JHコマンドでヘルプレベルを1にしてファイル内容の表示領域を広げています。

CP/M-86版WordStarの編集画面2


 スクリーンエディタ操作のバイナリエディタであるFileViewも動かしてみたので画面を貼っておきます。

FileView画面



★2019/10/09 追記
 WordStarのインストーラー(winstall.cmd)でターミナルタイプを「DEC V-T100」に設定したらなんなく動いた^^
 ディフォルト設定のエスケープシーケンスに対応しなくてもよかったかも(でも対応した方が動くソフトが増えるのでいいと思う)

Opening screen of WordStar Menu screnn of WordStar



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

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