レトロマイコン86ボードの構想(その13)自作スクリーンエディタ [8086]
前回の記事で書いたようにCP/M-86でWordStarが動くようになりました。
しかし、WordStarは起動の度にファイル内容の表示領域を広げるために操作が必要だったり、ディフォルトでページ境界線が表示されていたり、更には当時の基本的なエスケープシーケンスのみで制御していることもあり動作が重いです・・・
そこで「3チップ構成68Kマイコンの構想(その14)スクリーンエディタの開発」の記事で書いた自作のsked(Simple Kitten EDitor)をDRC(デジタルリサーチ社製C言語)環境を使ってCP/M-86に移植してみました。
skedのコマンド体系はWordStarライクの2ストロークにしているので私にとっては使い勝手がいいです。
実装機能は必要最小限(エディタの追加機能を考え出したら切りがない)ですがオンメモリ処理でBIOSを直にコール(BDOS経由でのBIOSコール機能しか提供していないCP/M-86ではあまり例がないと思う)しているのでWordStarと比較し動作がかなり速いです。
DRC(Ver 1.11)への移植作業について気が付いたこと等をメモしておきます。
★2019/09/30 追記
twitterにWordStarとの比較動画をアップしました。
★2019/10/13 追記
自作スクリーンエディタsked(CP/M-86版)は下記のリンクからダウンロードできます。(商用目的以外であれば自由に使用可能)
SKED_CPM86_V001f.zip
[TOP] [ 前へ ] 連載記事 [ 次へ ]
しかし、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)への移植作業について気が付いたこと等をメモしておきます。
- SIZE_T/size_tの定義
SIZE_Tの定義がDOS.Hのみにあり、今回はDOS.Hは使わないので自分でunsigned intとして定義しています。
- SIZE_T(unsigned int)の演算
SIZE_Tでキャストした0x8000の2除算が0xc000になってしまう。除算式に含まれる全ての数値をSIZE_Tでキャストしても変化ありませんでした。
- unsigned charが使えない
DRCのコンパイラが対応していないためunsigned charでエラーになります。
- 実行ファイルのサイズが大きい
"Hello!"表示のプログラムのサイズが28KBでAztecCの6KBと比較してかなり大きい。
- コンパイル時間
結構時間が掛かります。体感ではAztecCの5倍程度かかります。
但し、AztecCは大きめのソースをコンパイルしたところ、私の環境ではコンパイラがうまく動かなかったので今回はDRCを使っています。
★2019/10/24 追記 {
Pic24V20をプリント基板化したことで安定化できました。AztecCも問題なく動いています。AztecCの方がコンパイル&リンクの速度も速く、C言語自体もDRCより使い易いです。何より実行ファイルのサイズが小さい(というかDRCが大きすぎ)。
DRCはおそらくデジタルリサーチ社初のCコンパイラでこなれていない部分がある印象です。
}
- マニュアルの情報は多い
マニュアルの内容は充実しています。インラインアセンブル機能は無いようですがrasm86(リロケータブルアセンブラ)の処理と割合簡単にリンクできます。
- デバッガ
DRCには関係ないですがCP/M-86用のシンボリックディバッガを探したけれどまだ見つけられていないのでシンボルをマニュアルで参照する必要があり不便です。
★2019/10/01 追記 {
シンボリックディバッガ(SID86)はここからダウンロードできました。
}
★2019/09/30 追記
twitterにWordStarとの比較動画をアップしました。
V20(8088互換)とPIC24構成のボード上のCP/M-86に自作のスクリーンエディタskedをデジタルリサーチ社製C環境を使って移植した
— skyriver (@wcinp) September 30, 2019
単機能だけどオンメモリ処理でBIOSを直コールなので速い^^
WordStarとの比較動画です。#CPM86 #Pic24V20 #WordStar #skedhttps://t.co/IaNxDeQEXk pic.twitter.com/7Y3mYILXjn
★2019/10/13 追記
自作スクリーンエディタsked(CP/M-86版)は下記のリンクからダウンロードできます。(商用目的以外であれば自由に使用可能)
[TOP] [ 前へ ] 連載記事 [ 次へ ]
レトロマイコン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が使用しているエスケープシーケンスを確認し、次のエスケープシーケンスの変換処理を追加することで無事動くようになりました。
ネット情報ではTEDも人気が高かったようですが、起動するとトラップが発生し、動作しませんでした。
ソース付きだったので初期化部分の処理を見てみたら int 10h を使用していた・・・
WordStarの画面キャプチャを以下に貼っておきます。
「レトロマイコンZ80ボードの構想(その15)エスケープシーケンスの実験」の記事に貼ってあるCP/M-80のWordStarの画面と同じですね。
起動直後に表示される今で言うスプラッシュウィンド相当の画面です。
メニュー画面です。'F'コマンドでファイル一覧表示をON後の画面です。
ファイル編集画面です。
^JHコマンドでヘルプレベルを1にしてファイル内容の表示領域を広げています。
スクリーンエディタ操作のバイナリエディタであるFileViewも動かしてみたので画面を貼っておきます。
★2019/10/09 追記
WordStarのインストーラー(winstall.cmd)でターミナルタイプを「DEC VT-100」に設定したらなんなく動いた^^
ディフォルト設定のエスケープシーケンスに対応しなくてもよかったかも(でも対応した方が動くソフトが増えるのでいいと思う)
[TOP] [ 前へ ] 連載記事 [ 次へ ]
そこでまずはメジャーな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 VT-100」に設定したらなんなく動いた^^
ディフォルト設定のエスケープシーケンスに対応しなくてもよかったかも(でも対応した方が動くソフトが増えるのでいいと思う)
Opening screen of WordStar | Menu screnn of WordStar |
|
|
[TOP] [ 前へ ] 連載記事 [ 次へ ]
レトロマイコン86ボードの構想(その11)xmodemの移植 [8086]
CP/M-86の環境を整えるためにCP/M-80とCP/M-68Kで自作したxmodemをCP/M-86へ移植しました。
移植するまではパソコンでソース編集し、pipでpip xmodem.c=con:のコマンドでCP/M-86へ転送していて、TeraTermで1キャラクタ毎に10msのウェイトを入れているので転送に時間が掛かります。
コンパイラ環境が整ったので最初にxmodemの移植したいと思い、自作したソースなので簡単にいくだろうと思っていましたが、少し手こずりました・・
CP/M-86本体はTinyモデル(コードセグメントとデータセグメントが共通)なのでBIOSの各機能が RET命令でリターンするため別セグメントで動作するアプリケーションから直にコールする方法がありません。
DRC(デジタルリサーチ社製C言語)環境で調べてみるとBIOSコールはbios.hの中で次のように宣言されています。
BDOS経由では遅くなりそうだと予感しながら移植してみたところ、xmodemが動作しません・・・
コンソール送信データはPIC側の処理で当時のエスケープシーケンスをANSIのエスケープコードに変換しているのでバイナリデータの透過性を保証するために/pオプションでPUNCH/READERデバイス(コンソールと同じシリアル通信を使いますがコード変換処理無し)を指定できるようにしています。
READERではBIOSの仕様上、受信データの有無を確認できないのですが、受信データが無い場合には0xffffを返すようにBIOSを拡張実装しています。
しかし、上記の__BDOS処理部分でリターン値の上位バイトをマスクする実装になっているのでREADERの受信データ有無チェック機能が動作しません。
次のログがDDT86で確認した__BDOS部分のコードです("***"部分は追加コメント)。
"SUB AH,AH"部分をNOP(90H)に変更するパッチ当てて確認したところ、READERのデータ有無確認の機能は動作したのでハイバイトをマスクする前に保存している0x0FB4(シンボルファイルでは__cpmrvとなっている)を使い、xmodemのCソース内で__cpmrvを参照するようにして対処しました。
この対処でCP/M-86からファイル送信はできるようになりましたが、ファイル受信でエラーが発生します。
ロジアナで受信処理時の状況を確認した波形サンプルが下記で受信処理が間に合わず取りこぼしている状況でした。
シリアルの通信速度は38400bpsなので1バイト当たり0.26ms(=1000/38400*10)ですが、受信データのポーリング周期が0.34ms程度になってしまっています。
READY信号が一瞬 lowになっている部分がV20からPICへサービス要求している部分でBUSREQ信号がhighの部分はPIC側が処理している部分です。
上述したようにBDOS経由では遅そうなのでBIOSを直にコールすべく、BIOSの先頭の"JMP INIT"部分に一時的に4バイトのfar CALLされるコード(RETFで終わる)を書込みBIOSの機能をコールし、コール後元に戻すようにしました。
DRCのオブジェクトとリンクするためにリロケータブルアセンブラのRASM86を使い、セグメント名やCの引数の渡し方等を確認し、ソース作成したところ、最初はリンクできなかったのですが、RASM内のラベルは大文字変換されるようなので大文字に変更したらほぼ一発で動作しました^^
★2019/11/01 追記 {
最初に使ったBDOS経由でのBIOSコールはBDOSコールファクションNo.50の「DIRECT BIOS CALL」というBDOSコールですが逆アセンブルしてみると判るとおりBIOSに辿り着くまで多くのステップ数のマシン語を実行しています。
}
RASM86のサンプルソースはネット上で中々見つからなかったので、他の人の参考になるかも(ならないかも)と思いソースを貼っておきます。
BIOSコール用の橋渡し処理(アセンブラ)
安全を見て多くのレジスタを保存していますがそれでもBDOS経由よりはかなり早くなり、ファイル受信処理も問題なく動作するようになりました^^
受信データのポーリング周期は0.34msから0.23msに高速化され連続的なデータ受信時にも取りこぼしが発生しなくなりました。
メモとして、xmodemのコンパイル&リンク時の操作ログを貼っておきます。
最後に、今回作成したCP/M-86用のxmodemプログラムは下記のリンクからダウンロード可能です(商用目的以外であれば自由に使用可能)
XMODEM_CPM86_001a.zip
・2019/10/23 Ver0.01a
コンパイラをDRCからAztec Cに変更(サイズ:30KB->10KB)
・2019/10/09 Ver0.01
日付表示の誤記修正
★2019/11/05 追記
Aztec CでのBIOS直コール部のアセンブルリストを貼っておきます。
BIOSコール用の橋渡し処理(アセンブラ)
[TOP] [ 前へ ] 連載記事 [ 次へ ]
移植するまではパソコンでソース編集し、pipでpip xmodem.c=con:のコマンドでCP/M-86へ転送していて、TeraTermで1キャラクタ毎に10msのウェイトを入れているので転送に時間が掛かります。
コンパイラ環境が整ったので最初にxmodemの移植したいと思い、自作したソースなので簡単にいくだろうと思っていましたが、少し手こずりました・・
CP/M-86本体はTinyモデル(コードセグメントとデータセグメントが共通)なのでBIOSの各機能が RET命令でリターンするため別セグメントで動作するアプリケーションから直にコールする方法がありません。
DRC(デジタルリサーチ社製C言語)環境で調べてみるとBIOSコールはbios.hの中で次のように宣言されています。
/**************************************************************************** BIOS86.H - compatibilty header for CP/M-86 & the IBM-PC family (C)1999 Ken Mauro, All Rights Reserved. Free for non-commercial use. ****************************************************************************/ /* CP/M & IBMPC bios related stuff */ struct{ char fn; char cl,ch; char dl, dh; } pblk; bios(p) unsigned int *p; { return __BDOS(50,&pblk); } |
BDOS経由では遅くなりそうだと予感しながら移植してみたところ、xmodemが動作しません・・・
コンソール送信データはPIC側の処理で当時のエスケープシーケンスをANSIのエスケープコードに変換しているのでバイナリデータの透過性を保証するために/pオプションでPUNCH/READERデバイス(コンソールと同じシリアル通信を使いますがコード変換処理無し)を指定できるようにしています。
READERではBIOSの仕様上、受信データの有無を確認できないのですが、受信データが無い場合には0xffffを返すようにBIOSを拡張実装しています。
しかし、上記の__BDOS処理部分でリターン値の上位バイトをマスクする実装になっているのでREADERの受信データ有無チェック機能が動作しません。
次のログがDDT86で確認した__BDOS部分のコードです("***"部分は追加コメント)。
F>a:ddt86 xmodem.cmd DDT86 1.2 START END CS 662D:0000 662D:638F DS 6C66:0000 6C66:FFFF -l0d5 *** シンボルファイルから確認した__BDOSのアドレス 662D:00D5 PUSH BP 662D:00D6 MOV BP,SP 662D:00D8 PUSH DI 662D:00D9 PUSH SI 662D:00DA MOV DX,06[BP] 662D:00DD MOV CL,04[BP] 662D:00E0 PUSH ES 662D:00E1 INT E0 662D:00E3 POP ES 662D:00E4 MOV [0FB4],AX *** 0FB4 __cpmrv 662D:00E7 MOV [0FDE],CX 662D:00EB SUB AH,AH *** change 90H x 2 -l 662D:00ED POP SI 662D:00EE POP DI 662D:00EF POP BP 662D:00F0 RET 662D:00F1 MOV CL,0C 662D:00F3 PUSH ES 662D:00F4 INT E0 662D:00F6 POP ES 662D:00F7 CMP AH,11 662D:00FA JNZ 0100 662D:00FC INC BYTE [0050] 662D:0100 MOV AL,[0050] -^C F> |
"SUB AH,AH"部分をNOP(90H)に変更するパッチ当てて確認したところ、READERのデータ有無確認の機能は動作したのでハイバイトをマスクする前に保存している0x0FB4(シンボルファイルでは__cpmrvとなっている)を使い、xmodemのCソース内で__cpmrvを参照するようにして対処しました。
この対処でCP/M-86からファイル送信はできるようになりましたが、ファイル受信でエラーが発生します。
ロジアナで受信処理時の状況を確認した波形サンプルが下記で受信処理が間に合わず取りこぼしている状況でした。
シリアルの通信速度は38400bpsなので1バイト当たり0.26ms(=1000/38400*10)ですが、受信データのポーリング周期が0.34ms程度になってしまっています。
xmodemでのファイル受信時のロジアナ波形例(NGケース) |
|
READY信号が一瞬 lowになっている部分がV20からPICへサービス要求している部分でBUSREQ信号がhighの部分はPIC側が処理している部分です。
上述したようにBDOS経由では遅そうなのでBIOSを直にコールすべく、BIOSの先頭の"JMP INIT"部分に一時的に4バイトのfar CALLされるコード(RETFで終わる)を書込みBIOSの機能をコールし、コール後元に戻すようにしました。
DRCのオブジェクトとリンクするためにリロケータブルアセンブラのRASM86を使い、セグメント名やCの引数の渡し方等を確認し、ソース作成したところ、最初はリンクできなかったのですが、RASM内のラベルは大文字変換されるようなので大文字に変更したらほぼ一発で動作しました^^
★2019/11/01 追記 {
最初に使ったBDOS経由でのBIOSコールはBDOSコールファクションNo.50の「DIRECT BIOS CALL」というBDOSコールですが逆アセンブルしてみると判るとおりBIOSに辿り着くまで多くのステップ数のマシン語を実行しています。
}
RASM86のサンプルソースはネット上で中々見つからなかったので、他の人の参考になるかも(ならないかも)と思いソースを貼っておきます。
|
安全を見て多くのレジスタを保存していますがそれでもBDOS経由よりはかなり早くなり、ファイル受信処理も問題なく動作するようになりました^^
xmodemでのファイル受信時のロジアナ波形例(改善後) |
|
受信データのポーリング周期は0.34msから0.23msに高速化され連続的なデータ受信時にも取りこぼしが発生しなくなりました。
メモとして、xmodemのコンパイル&リンク時の操作ログを貼っておきます。
B>rasm86 callbios -------------------------------------------------- RASM-86 Relocating Assembler Version 1.2 Serial No. 3073-0000-001282 All Rights Reserved Copyright (C) 1982,1983 Digital Research, Inc. -------------------------------------------------- END OF PASS 1 END OF PASS 2 CODE 00048 END OF ASSEMBLY. NUMBER OF ERRORS: 0. USE FACTOR: 0% B>drc f:xmodem -------------------------------------------------- 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 f:xmodem.c: code: 1894 static: 320 extern: 335 B>link86 f:xmodem=xmodem,callbios -------------------------------------------------- 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 06366 DATA 01093 USE FACTOR: 19% B>a:stat f:xmodem.* Drive F: User : 0 Recs Bytes FCBs Attributes Name 58 8k 1 Dir RW F:XMODEM .C 234 30k 2 Dir RW F:XMODEM .CMD 6 2k 1 Dir RW F:XMODEM .SYM ---------------------------------------------- Total: 40k 4 F: RW, Free Space: 1,866k B>f: F>xmodem usage : xmodem [/s /r /p] FileName /s : send[default] /r : receive /p : use PUN/RDR device Ver0.01 2019/10/23 by skyriver F>xmodem xmodem.cmd /s /p xmodem.cmd (PUN/RDR) sent 234 block(s). F> |
最後に、今回作成したCP/M-86用のxmodemプログラムは下記のリンクからダウンロード可能です(商用目的以外であれば自由に使用可能)
・2019/10/23 Ver0.01a
コンパイラをDRCからAztec Cに変更(サイズ:30KB->10KB)
・2019/10/09 Ver0.01
日付表示の誤記修正
★2019/11/05 追記
Aztec CでのBIOS直コール部のアセンブルリストを貼っておきます。
|
[TOP] [ 前へ ] 連載記事 [ 次へ ]
レトロマイコン86ボードの構想(その10)回路図整理とパターン設計 [8086]
ブレッドボード上に作ったV20(8088互換)とPIC24を使ったPic24V20でCP/M-86が動いているようなので回路図を整理してパターン設計しました。
回路図はレトロマイコン86シリーズの最初の記事の「レトロマイコン86ボードの構想」の内容から大体想像が付いてしまいそうですが、下図になります。
8088はデータがアドレスに多重化されているので74HC573を2個使い、5チップ構成になります。
アドレスとデータが多重化されたことでPIC24の使用ピンに余裕ができたので、RTCC(リアルタイムクロックカレンダ)モジュール用に水晶の実装回路も付けてみました。
使用したCADはDesignSparkPCBです。
★2021/02/25
V20での16MHzクロック動作に対応した回路図をここにアップしました
従来通り、抵抗やコンデンサ等は表面実装部品を使いますが、ボトム面が割合空いているのでラッチ用のIC(74HC573)は5.2mm幅のSOPパッケージのものを使いボトム面に実装しました。
パターン図(グランドをベタパターン化前のもの)は下図になります。赤色がトップ面、水色がボトム面のパターンです。
細い線が何本かありますがこれらはグランドの接続線で、グランドをベタパターン化することで接続されます。
グランドをベタパターン化後のトップ面のパターンが下図です。
ボトム面は次のとおりです。
部品の3Dデータは作っていないので表示がイマイチですが3D表示が下図になります。
右端の黒いものはSDカードホルダーです。
ボトム面の3D表示は下図で、前述のようにラッチICを2個、ボトム面に実装しました。
右側の赤い大きなものはリアルタイムクロック用の電池(CR2032)ホルダです。
★2019/11/20 追記
完成したプリント基板の写真等を「レトロマイコン86ボードの構想(その16)プリント基板完成」に記載しました。
★2020/12/14 追記
V20の16MHzクロック対応のために改善した回路図及びパターン図を「レトロマイコン86ボードの構想(その25)回路図アップデート」の記事に記載しました。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
回路図はレトロマイコン86シリーズの最初の記事の「レトロマイコン86ボードの構想」の内容から大体想像が付いてしまいそうですが、下図になります。
8088はデータがアドレスに多重化されているので74HC573を2個使い、5チップ構成になります。
アドレスとデータが多重化されたことでPIC24の使用ピンに余裕ができたので、RTCC(リアルタイムクロックカレンダ)モジュール用に水晶の実装回路も付けてみました。
使用したCADはDesignSparkPCBです。
Pic24V20(8088ワンボードマイコン)の回路図 |
※2019/10/20 最新版に更新(下記のパターン図はアップデートしていません) |
V20での16MHzクロック動作に対応した回路図をここにアップしました
従来通り、抵抗やコンデンサ等は表面実装部品を使いますが、ボトム面が割合空いているのでラッチ用のIC(74HC573)は5.2mm幅のSOPパッケージのものを使いボトム面に実装しました。
パターン図(グランドをベタパターン化前のもの)は下図になります。赤色がトップ面、水色がボトム面のパターンです。
細い線が何本かありますがこれらはグランドの接続線で、グランドをベタパターン化することで接続されます。
Pic24V20パターン図 |
|
グランドをベタパターン化後のトップ面のパターンが下図です。
Pic24V20パターン図(トップ面) |
|
ボトム面は次のとおりです。
Pic24V20パターン図(ボトム面) |
|
部品の3Dデータは作っていないので表示がイマイチですが3D表示が下図になります。
右端の黒いものはSDカードホルダーです。
3D表示(トップ面) |
|
ボトム面の3D表示は下図で、前述のようにラッチICを2個、ボトム面に実装しました。
右側の赤い大きなものはリアルタイムクロック用の電池(CR2032)ホルダです。
3D表示(ボトム面) |
|
★2019/11/20 追記
完成したプリント基板の写真等を「レトロマイコン86ボードの構想(その16)プリント基板完成」に記載しました。
★2020/12/14 追記
V20の16MHzクロック対応のために改善した回路図及びパターン図を「レトロマイコン86ボードの構想(その25)回路図アップデート」の記事に記載しました。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
レトロマイコン86ボードの構想(その9)bootstrapでのCP/M-86の起動 [8086]
前回の記事でCP/M-86をCold Start Loaderで起動できたことを書きました。
今回はBootstrapを使ってCP/M-86を本来の起動方法で立ち上げます。
BootstrapはDiskAのシステム用トラック(今回は1トラックをシステム用に確保しています)からCold Start Loaderを読込んで起動するだけの機能なので作成は簡単なのですが、ブレッドボード上で回路を組んでいるため、ハードが不安定になることが度々あり、その都度、原因調査と対策をして時間が掛かりました(何度か安定化したといっているのでオオカミ少年状態です(少年ではないのですがw))
ブレッドボードで評価する時は、次回から新しいブレッドボードを使い、結線の線材も自作するなど、検討した方がいいかもしれません。
話をBootstrapに戻すとシステムトラック上のBootstrapとCold Boot Loaderの配置はSDカードのブロックサイズが512bytesであることを考慮してCold Boot Loaderのヘッダを除く、コード部を0200H(2ブロック目)から配置しました。
Bootstrapは先頭の128バイトに収めます。
Bootstrapのソースは短いので全リストを貼っておきます。
Pic24V20でのCP/M-86用Bootstrap(アセンブラ)
★2019/11/16 変更 Bootstrapリストを最新版に変更
ハードが安定している時には、CP/M-86の起動がメチャ楽になりました。
電源投入時からCP/M-86起動までのサンプルログを以下に示します。
下記のサンプルログでは手動でCP/M-86を起動していますが、picle言語で書いたCP/M-86booterを自動起動するように設定すれば電源オンでCP/M-86が起動するようになります。
BootstrapでのCP/M-86の起動
★2019/09/07 追記
CP/M-86用のデジタルリサーチ社製Cコンパイラでhello表示してみた。
stdio.hの67行目でエラーが発生しましたがリンク後起動したところ、hello表示できました。
DRCでhello
★2019/09/15 追記
デジタルリサーチ社の Personal Basic でASCIIARTを動かしてみました。
Personal Basicはプロンプト行がそのまま入力行になっているためかプログラムからの出力が80文字手前で次の行へ改行してしまうので冒頭にwidth命令を追加して80文字/行に設定しています。
実行時間は2分5秒でした(V20のクロックは8MHzです)
因みにマイクロソフトのMBASICでの実行時間は2分42秒でした。
CP/M-68Kではデジタルリサーチ社のCBASICはBCD演算のためかASCIIARTの実行時間がかなり遅かったのですがCP/M-86ではMSより速いですね。
Personal BasicでのASCIIART実行
★2019/09/22 追記
CP/M-86はネットから入手できるソフトが思ったより多くないですね^^;
デジタルリサーチ以外のCコンパイラを探したところ、Aztec Cを見つけました。
でもincludeでファイルが読めないとのエラーが出てコンパイルできない・・
CP/M-86が正常に動いていないのか・・
Aztec Cでのコンパイルエラー
★2019/09/22 追記
上に書いたAztec Cのコンパイルエラーですが、#includeで指定するファイルを<>ではなく""で囲むとエラーが出なくなりました。
下のログはDRC(デジタルリサーチ社製)とAztecCでのコンパイル状況と実行ファイルのサイズの比較です。
AztecCの方がかなりコンパクトな実行ファイルを作成してますね。
まぁもっと大きなプログラムの場合、どうなるかはやってみないと判らないですが・・
Aztec CとDRCとの比較
★2019/10/22 追記
Aztec Cのコンパイルオプションでインクルードドライブを標準ヘッダファイルのあるドライブ(今回の場合はCドライブ)に指定するとエラーが出なくなりました。
cc -ic: SrcFileName
★2019/09/23 追記
AztecCの著作権についてメモしておきます。
the official AZTEC C onlineのサイトでApple IIとCommondore 64用のAztec Cが公開されていて、このサイト内のLeap into a new dimension with Aztec Cのページで免責事項として次のように記載されています。
Apple IIとCommondore 64用のAztec Cに関してはfreeで使っていいようです。
google翻訳が下記で「所有権を一切主張せず」とあるので少なくともこのサイトで公開されているApple IIとCommondore 64用のコンパイラに関しては自由に使えるようです。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
今回はBootstrapを使ってCP/M-86を本来の起動方法で立ち上げます。
BootstrapはDiskAのシステム用トラック(今回は1トラックをシステム用に確保しています)からCold Start Loaderを読込んで起動するだけの機能なので作成は簡単なのですが、ブレッドボード上で回路を組んでいるため、ハードが不安定になることが度々あり、その都度、原因調査と対策をして時間が掛かりました(何度か安定化したといっているのでオオカミ少年状態です(少年ではないのですがw))
ブレッドボードで評価する時は、次回から新しいブレッドボードを使い、結線の線材も自作するなど、検討した方がいいかもしれません。
話をBootstrapに戻すとシステムトラック上のBootstrapとCold Boot Loaderの配置はSDカードのブロックサイズが512bytesであることを考慮してCold Boot Loaderのヘッダを除く、コード部を0200H(2ブロック目)から配置しました。
Bootstrapは先頭の128バイトに収めます。
; ++++ SD block assign ++++ ; ; blk No adr length content ; 0 0000H 80H Bootstrap ; 0 0080H 100H not use ; 0 0180H 80H ColdStartLoader's header ; 1 0200H nnnn code of ColdStartLoader ; ...
Bootstrapのソースは短いので全リストを貼っておきます。
|
★2019/11/16 変更 Bootstrapリストを最新版に変更
ハードが安定している時には、CP/M-86の起動がメチャ楽になりました。
電源投入時からCP/M-86起動までのサンプルログを以下に示します。
下記のサンプルログでは手動でCP/M-86を起動していますが、picle言語で書いたCP/M-86booterを自動起動するように設定すれば電源オンでCP/M-86が起動するようになります。
|
★2019/09/07 追記
CP/M-86用のデジタルリサーチ社製Cコンパイラでhello表示してみた。
stdio.hの67行目でエラーが発生しましたがリンク後起動したところ、hello表示できました。
|
★2019/09/15 追記
デジタルリサーチ社の Personal Basic でASCIIARTを動かしてみました。
Personal Basicはプロンプト行がそのまま入力行になっているためかプログラムからの出力が80文字手前で次の行へ改行してしまうので冒頭にwidth命令を追加して80文字/行に設定しています。
実行時間は2分5秒でした(V20のクロックは8MHzです)
因みにマイクロソフトのMBASICでの実行時間は2分42秒でした。
CP/M-68Kではデジタルリサーチ社のCBASICはBCD演算のためかASCIIARTの実行時間がかなり遅かったのですがCP/M-86ではMSより速いですね。
|
★2019/09/22 追記
CP/M-86はネットから入手できるソフトが思ったより多くないですね^^;
デジタルリサーチ以外のCコンパイラを探したところ、Aztec Cを見つけました。
でもincludeでファイルが読めないとのエラーが出てコンパイルできない・・
CP/M-86が正常に動いていないのか・・
|
★2019/09/22 追記
上に書いたAztec Cのコンパイルエラーですが、#includeで指定するファイルを<>ではなく""で囲むとエラーが出なくなりました。
下のログはDRC(デジタルリサーチ社製)とAztecCでのコンパイル状況と実行ファイルのサイズの比較です。
AztecCの方がかなりコンパクトな実行ファイルを作成してますね。
まぁもっと大きなプログラムの場合、どうなるかはやってみないと判らないですが・・
|
★2019/10/22 追記
Aztec Cのコンパイルオプションでインクルードドライブを標準ヘッダファイルのあるドライブ(今回の場合はCドライブ)に指定するとエラーが出なくなりました。
cc -ic: SrcFileName
★2019/09/23 追記
AztecCの著作権についてメモしておきます。
the official AZTEC C onlineのサイトでApple IIとCommondore 64用のAztec Cが公開されていて、このサイト内のLeap into a new dimension with Aztec Cのページで免責事項として次のように記載されています。
Apple IIとCommondore 64用のAztec Cに関してはfreeで使っていいようです。
Disclaimer This website and the content available from this website unless otherwise noted are original or derivative works and as such the licencing by the original authors applies insofar as legal Copyright ownership applies. Bill Buckels makes no claims of ownership whatsoever for the content available from this website unless otherwise noted, and further assumes no liability for the results of its use. You may use the content available from this website in any way you find useful (subject to all the aforestated conditions of use) and provided that you agree that Bill Buckels has no warranty obligations or liability resulting from said use in any way whatsoever. If you do not agree or if your use is not Fair then do not download from this website . |
google翻訳が下記で「所有権を一切主張せず」とあるので少なくともこのサイトで公開されているApple IIとCommondore 64用のコンパイラに関しては自由に使えるようです。
免責事項 このウェブサイトおよびこのウェブサイトから入手可能なコンテンツは、特に明記しない限り、オリジナルまたは二次的著作物であり、著作権の法的所有権が適用される限り、オリジナル著者によるライセンスが適用されます。ビル・バックルズは、特に明記しない限り、このウェブサイトから入手可能なコンテンツの所有権を一切主張せず、さらにその使用結果について責任を負いません。 このウェブサイトから入手できるコンテンツは、有用と思われる方法で使用することができます(すべての植林された使用条件に従うものとします)。また、Bill Buckelsが何らかの方法で上記の使用に起因する保証義務または責任を負わないことに同意するものとします。同意しない場合、または使用が公正でない場合は、このWebサイトからダウンロードしないでください 。 |
[TOP] [ 前へ ] 連載記事 [ 次へ ]