SSブログ
English Version

レトロマイコン86ボードの構想(その20)ケース作成2 [8086]

 「レトロマイコン86ボードの構想(その19)ケース作成」で書いた下図のケースのパネルについて「光造形式3Dプリンタの購入(その6)Pic24V20のパネル作成」で書いたように光造形式3Dプリンタを使って試験的に透明レジンで作成しました。

Pic24V20ケース(レジン製パネル)


 しかし、レジンは氷河のように長時間掛けて変形してしまいます(硬化時間が足りなかった可能性もありますが)。
 ドライヤーで温めて修正することも可能なようですがその分、手間がかかります。

 そこで適材適所ということで久々にCNCで切削しました。
 材料は百均で購入したスチロール製のディスプレイスタンド(実際に使用したのは倍の長さのもの)から平板を切出して使用しています。

 作成手順の概要は以下の通りです。
  1. 3DCAD(DesignSparkMechanical)で設計
     3DCADで設計し、パネルの部分をDXFファイルで吐き出します。

  2. Estlcamで設定&NCファイル作成
     EstlcamでDXFファイルを読込み、ネジ穴、文字、アウトライン等の切削条件を設定します。文字自体はDXF化せずにEstlcamの文字描画機能で作成しています。
     全てのパーツの設定が完了したらNCファイルとしてセーブします。

    Estlcamでの設定画面例

  3. NCVCでNCファイルの確認
     生成されたNCファイルをNCVCを使って確認します。再生機能や早送り機能があるので確認が楽です。

    NCVCの画面例

  4. CNCルーターで切削
     確認したNCファイルをgrblControlで読込んでディスプレイスタンドから切り出した平板を切削します。
     切削中はエンドミルに適宜潤滑オイルを供給し、パネルが溶けてエンドミルに絡みつかないようにします。

    grblControl画面例



 手順は以上の通りですが、今回はCNC用のACアダプタが故障していたり、スピンドルモーターのサポート部が破損し、3Dプリンタでサポート補助パーツを作ったりで色々手間がかかりました。

 FDM方式や光造形式の3Dプリンタは夜中でも造形できるのですが、このCNCだけは音が大きくて日中しか動かせません。

 今回はケース側面部分もPETG(グレー)で再作成して見ました。
 出来上がったケースが下の写真です。やはりCNCで作成したパネルはいいですね^^

Pic24V20の新ケース



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

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

レトロマイコン86ボードの構想(その19)ケース作成 [8086]

 「光造形式3Dプリンタの購入(その4)造形状況」の記事で書いたように自作したV20(i8088互換)のマイコンボード(Pic24V20)のケースを光造形式3Dプリンタで作ろうとしましたが造形物の板厚が一定しないという問題が発生し、ケース作成は保留状態になっていました。

 そこでFDM方式の3Dプリンタでケースを作成してみることにしました。
 「3チップ構成68Kマイコンの構想(その15)ケース」の記事で書いたPic24CPM68K基板のケースではトップパネルに百均で購入したスチロール製のディスプレイスタンドから平板を切出して CNC で加工し、側面はABSフィラメントを使いFDM方式の3Dプリンタで作成しました。
 今回はFDM方式の3Dプリンタだけを使いPLAフィラメントでトップパネルも出力してみる試みを行いました(単なる手抜きかもw)

 光造形式プリンタ用に設計したものをFDM方式3Dプリンタ用に少しアレンジしてみました。

Pic24V20基板のケース(CAD)


 下の写真がPLAフィラメントで作成したケースの部品です。FDM方式の3Dプリンタは出力するのに手間がかからなくていいですねぇ。
 側面の厚さは3mmなので中空になっていてフィラメントの色がトランスレートグリーンのため、いい具合に透き通って見えます。
 パネルは2mmの厚さでInfill Densityを100%にしているので中空にはなっていません。
 トップパネルの裏側には"Pic24V20"の文字を窪ませて書込んだのですがフィラメントの透明度が低いので見えにくいですね^^;

Pic24V20基板ケースの部品


 側面の部品を取り付けた状態が下の写真です。

側面部品取り付け(トップビュー)


 下の写真は裏側から見たものです。

側面部品取り付け(ボトムビュー)


 パネルを取り付けた全体の外観が下の写真です。
 スケルトン色のフィラメントを使いましたがやはりトップパネルは透明な素材の方が格調高く仕上がりますね。
 トップパネルの透明度不足で裏面に書いた文字が見えにくいので黒のマジックで塗ったところ手作り感が増しましたw
 今回のケースは冒頭で書いたPic24CPM68Kのものと比べると圧倒的に手作り感がにじみ出ていますね。

 気が向いたらCNCルータを使って透明なパネルも作ってみます。

Pic24V20ケース外観


★2020/05/28 追記
 LCD方式の光造形式3Dプリンタを使って透明レジンでパネルを作ってみました。
光造形式3Dプリンタの購入(その6)Pic24V20のパネル作成


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

レトロマイコン86ボードの構想(その18)asciiartの高速化 [8086]

 V20(8088互換)を使った自作ボードで動作しているCP/M-86上でMBASICを使ってasciiartを動かしてみると3分18秒2分43秒(V20は8MHzで動作)で、Z-80でのASCIIARTの実行速度と比べてそれほど速いという感じはありませんでした(FPUを付ければ速くなるのだろうけど)

★2019/12/21 asciiart実行時間を修正(3分18秒はCP/M-80エミュでの時間でした^^;)

 コンパイルすることである程度は高速化できるでしょうがどれだけ高速になるかはコンパイラに依存する部分が多々あります。
 近年のコンパイラではコンパイル時の最適化として定数畳み込みループ展開等の手法により、例えば最適化の結果、1~10の総和を求めるループ処理自体が単なる定数値になってしまうケースもあります。

 それならば・・・と言うことでハンド最適化してみました(うそ)。
 まず、asciiartの元ソースは下記でマンデルブロ集合での発散までの回数により表示コードを決定しています。

asciiart BASIC ソース
10 FOR Y=-12 TO 12
20 FOR X=-39 TO 39
30 CA=X*.0458
40 CB= Y*.08333
50 A=CA
60 B=CB
70 FOR I=0 TO 15
80 T=A*A-B*B+CA
90 B=2*A*B+CB
100 A=T
110 IF (A*A+B*B)>4 THEN GOTO 200
120 NEXT I
130 PRINT " ";
140 GOTO 210
200 IF I>9 THEN I=I+7
205 PRINT CHR$(48+I);
210 NEXT X
220 PRINT
230 NEXT Y


 定数畳み込みとループ展開を手動で適用した結果、事前に計算できる結果を埋め込むことでV20の8MHz動作でasciiartの実行時間が33秒になりましたww

 Twitterにポストした動画を貼っておきます。



 種明かしは・・・

asciiart ニセ高速化BASIC ソース
10 DIM D$(20)
20 IDX=-1
30  IDX=IDX+1
40  READ D$(IDX)
50  IF D$(IDX)<>"" THEN 30
60 IDX=IDX-1
70 ST=0:EN=IDX:STP=1:GOSUB 500
80 ST=IDX-1:EN=0:STP=-1:GOSUB 500
90 END
500 FOR I=ST TO EN STEP STP
510  DSP$=D$(I):GOSUB 600
520 NEXT I
530 RETURN
600 L=LEN(DSP$)
610 FOR J=1 TO L
620  FOR T=0 TO ((L/2-ABS(J-L/2))/20)^5:NEXT T
630  PRINT MID$(DSP$,J,1);
640 NEXT J
650 PRINT
660 RETURN
1000 DATA "000000011111111111111111122222233347E7AB322222111100000000000000000000000000000"
1010 DATA "000001111111111111111122222222333557BF75433222211111000000000000000000000000000"
1020 DATA "000111111111111111112222222233445C      643332222111110000000000000000000000000"
1030 DATA "011111111111111111222222233444556C      654433332211111100000000000000000000000"
1040 DATA "11111111111111112222233346 D978 BCF    DF9 6556F4221111110000000000000000000000"
1050 DATA "111111111111122223333334469                 D   6322111111000000000000000000000"
1060 DATA "1111111111222333333334457DB                    85332111111100000000000000000000"
1070 DATA "11111122234B744444455556A                      96532211111110000000000000000000"
1080 DATA "122222233347BAA7AB776679                         A32211111110000000000000000000"
1090 DATA "2222233334567        9A                         A532221111111000000000000000000"
1100 DATA "222333346679                                    9432221111111000000000000000000"
1110 DATA "234445568  F                                   B5432221111111000000000000000000"
1120 DATA "                                              864332221111111000000000000000000"
1130 DATA ""



★追記 2023/01/24
 「GAME言語での ASCIIART の高速化」の記事にアセンブラで書いた固定小数点を使い、asciiartを実際に高速化した内容を書きました。


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

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

レトロマイコン86ボードの構想(その17)vfilerへのパッチ [8086]

 自作のV20(C8088互換)とPIC24構成のPic24V20でCP/M-86のアプリを試しています。
 ネット上のCP/M-86のアプリはIBM用のものが多く、画面表示のエスケープシーケンス程度であれば対応は簡単なのですが、独自のキャラクタコードやINT 16H内部処理を使っているものが多くうまく動かないケースが多々あります。

 今回、「CP/M-86 FILE DOWNLOADS」からダウンロードできる86FILUTL.ZIPの中にあるVFILERを動かしてみました。

 VFILERMS-DOS時代に良く使われていたFDFMのようなファイラソフトです。

 下記の2カ所を変更することで素のCP/M-86で動作できました。
 アセンブラのソースも付いていましたが、何故かアセンブル&gencmdではうまく動かなかったのでWindows上のバイナリエディタでパッチを当てましたw

 1点目の変更は選択中のファイルを示すマーカ文字で、標準のキャラクタコードに変更しました(下記リストでは'#'になっていますが、20Hより小さいIBM独自キャラでした)。

                        ; position cursor at CURAT
                        SETCUR:
 236C 8B1E1127             MOV     BX,Word Ptr CURAT

                           IF      ENH@VID
                           ADD     BX,4                 ;advance 4 spaces
                           CALL    GOTOXY
                           ENDIF
                           IF  NOT ENH@VID
 2370 E8BADD       012D    CALL    GOTOXY
 2373 E880FA       1DF6    CALL    ILPRT
                        ;   DB      '--# ',0
 2376 2D2D3E2000           DB      '--> ',0             ; 2019/11/08 by skyriver
                           ENDIF

 237B 8B1E6727             MOV     BX,Word Ptr RINGPOS  ;pt to current file name
 237F 43                   INC     BX                   ;pt to first char
 2380 E8E9FB       1F6C    CALL    AC@PRFN
 2383 C3                   RET


 2つ目の変更は最大ディスク数で下記のように3固定(A-Cドライブを許容)になっていたので今回動かしているCP/M-86に合わせてPドライブまで許容するように10hに変更しました。
 ソース変更で動かせるならもっと汎用的な方法に変更したいところですが・・

                   ;
                   ;  DISK/USER LIMITS
                   ;
 0117              MDISK   RS      0
 0117 03                   DB      3           ; MAXIMUM NUMBER OF DISKS
 0118              MDRIVE  RS      0
 0118 0D                   DB      13          ; MEM DRIVE, = 0FFH IF NONE
 0119              MUSER   RS      0
 0119 0F                   DB      15          ; MAXIMUM USER NUMBER


 上記の変更により、CP/M-86のファイラが動くようになりました。
 先に書いたMS-DOS用のFDFMよりは機能は低いですが、これらのご先祖様的な存在であり、自作のCP/M-86ボード上で現在、こうして動いているというのは感慨深いですね。

CP/M-86のファイラ(vfiler)画面


★2019/11/09 追記
 初期化処理部でIBM用に割り込みベクタを設定している部分があったのでスキップするようにddt86でパッチを入れました。

A>sid
SID86 1.01   1/4/83
#rvfiler.cmd
  START      END
78ED:0000 78ED:27FF
#l180
  78ED:0180 JMP    01D2
  78ED:0183 ADD    CDE1[BP+SI],CL
  78ED:0187 LOOPNE 0119
  78ED:0189 NOP
  78ED:018A NOP
  78ED:018B RET
  78ED:018C ADD    AX,[BX+SI]
  78ED:018E ADD    BP,[BP+SI]
  78ED:0190 ADD    [BX+SI],AL
  78ED:0192 ADD    [BX+SI],AL
  78ED:0194 ADD    [BX+SI],AL
  78ED:0196 ADD    [BX+SI],DL
#l1d2
  78ED:01D2 MOV    CL,09
  78ED:01D4 MOV    DX,26E8
  78ED:01D7 INT    E0
  78ED:01D9 MOV    CL,09
  78ED:01DB MOV    DX,26EE
  78ED:01DE INT    E0
  78ED:01E0 MOV    CL,09
  78ED:01E2 MOV    DX,26F4
  78ED:01E5 INT    E0
  78ED:01E7 MOV    CL,09
  78ED:01E9 MOV    DX,26FA
  78ED:01EC INT    E0
#l
  78ED:01EE MOV    CL,09
  78ED:01F0 MOV    DX,2700
  78ED:01F3 INT    E0
  78ED:01F5 MOV    CL,09
  78ED:01F7 MOV    DX,2706
  78ED:01FA INT    E0
  78ED:01FC MOV    AX,DS
  78ED:01FE MOV    SS,AX
  78ED:0200 MOV    SP,24D8
  78ED:0203 MOV    [279A],AX
  78ED:0206 CS:    TEST   BYTE [0103],FF
  78ED:020C JZ     0213
#a180
78ED:0180 jmp 1fc
78ED:0183 .
#wvf.cmd
#^C
A>


★2019/11/09 追記
 ソースを見ていたらアセンブル結果のhexファイルをコマンドに変換するGENCMDコマンドのパラメータが書いてありました^^;
 ソース変更してコマンド生成できるようになったので変更後のソースと実行ファイルをアップしておきます。(予測需要数はゼロですがw)

 変更内容は下記項目です。
; DATE 2019/11/08 modyfied by skyriver
; 1.add IBMPC switch which is setted when use IBM.
; 2.auto check max disk in startup.
; 3.When quit, change to alocate cursor at screen end from clear screen.

VFILER_20191108.zip



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

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

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

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

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

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


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

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


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

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

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


 下の写真がボトム面です。上記のように基板製造会社に手配後に変更が発生したので抵抗を1本追加しています。
★2019/10/28 追記 {
 他の変更点として、R16をショットキーに変更、D4の極性反転の2点です。
}
 左側の大きな白い線はリアルタイムクロックのためのバックアップ用CR2032電池のホルダで未実装です。

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


★2019/10/27 追記
 今までブレッドボード上ではたまにCP/M-86が起動しなくなったりして、その都度対処していましたが、プリント基板化することでCP/M-86が安定して動作するようになりました^^
 リセット後のCP/M-86の起動メッセージを貼っておきます。
 「loading ...」はブートストラップが表示、「Last Offset」までがCP/Mのコールドスタートローダー(バージョン行はコールドスタートローダー内のBIOSが表示)、「System Genelated」行をCPM.SYS内のBIOSが表示しています。

picle compiler CP/M-86 Ver0.01 2019/07/03 by skyriver

loading ... ok
Pic24V20 ver0.02 CP/M-86 Version 1.1
Segment Address = 0040
    Last Offset = 31FF
  System Generated by skyriver 2019/10/07

A>■

★2019/11/14 変更 ブート時のメッセージを若干変更

★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) 
共通テーマ:趣味・カルチャー