X



トップページ昔のPC
233コメント76KB
OSと言えばコレでしょ!CP/Mスレ ver.4
0183ナイコンさん
垢版 |
2021/09/27(月) 23:41:41.68
CP/M86やCP/M68Kでもテキストファイル末尾に0x1aは必要だったんですか?
0184ナイコンさん
垢版 |
2021/09/30(木) 07:06:19.30
http://www.brackeen.com/vga/
ここにVGAの320x200の256色表示のC言語でのプログラミングの方法が載ってるね
CP/M-86版のAztec C 3.2d用にとりあえず、pixel.cを移植してみました
CP/M-86版のAztec C 3.2dはメモリモデルにsmallモデルしか使えないようなので
VGAのメモリアクセスにはAztec C 3.2dの組み込み関数のpokebを使ってます

CP/M-86 Aztec C 3.2d VGA TEST pixel.c
https://pastebin.com/iNnP3t6P

コンパイル方法は
cc pixel.c
ln pixel.o m.lib c.lib
です
Bドライブをカレントディレクトリにしてコンパイルする時に
インクルードファイルがBドライブにある場合は
cc -ib: pixel.c
ln pixel.o m.lib c.lib
になります
0185ナイコンさん
垢版 |
2021/09/30(木) 22:33:39.13
>>184にアップしたプログラムで時間計測の部分にミスがありました
修正版をアップします

CP/M-86 Aztec C 3.2d VGA TEST pixel.c
https://pastebin.com/JV0sDqR2



また、lines.cも移植してみました

CP/M-86 Aztec C 3.2d VGA TEST lines.c
https://pastebin.com/ShmSSnec

コンパイル方法は
cc lines.c
ln lines.o m.lib c.lib
です
Bドライブをカレントディレクトリにしてコンパイルする時に
インクルードファイルがBドライブにある場合は
cc -ib: lines.c
ln lines.o m.lib c.lib
になります
0186ナイコンさん
垢版 |
2021/10/01(金) 07:50:00.65
上のCP/M-86でAztec C Ver 3.2dを使う方法がわかりにくいと思われるので
CP/M-86でAztec C Ver 3.2dを使う方法をまとめてみました

VMware PlayerのCP/M-86上でAztec C Ver3.2dを使う方法
https://pastebin.com/0zpmybh7
0187ナイコンさん
垢版 |
2021/10/02(土) 12:23:35.35
こちらのVGAの320x200の256色画面のC言語によるプログラミングのサンプルプログラムを
CP/M-86のAztec C 3.2dに移植してみました

256-Color VGA Programming in C
http://www.brackeen.com/vga/

ここのこれらのプログラムを移植しました
pixel.c lines.c rect.c circle.c bitmap.c palette.c unchain.c modes.c
mouse.cはマウスが使えないので移植してません

5chはたくさんのURLを一度に貼れないのでこちらに各ソースコードのURLを貼ってあります
https://pastebin.com/tGGgYmGQ
0188ナイコンさん
垢版 |
2021/10/02(土) 12:40:42.01
続き
コンパイル方法は8つのプログラムどれも一緒です

コンパイル方法は
cc pixel.c
ln pixel.o m.lib c.lib
です
Bドライブをカレントディレクトリにしてコンパイルする時に
インクルードファイルがBドライブにある場合はccで-iオプションで-ib:のように指定します
cc -ib: pixel.c
ln pixel.o m.lib c.lib
になります
0189ナイコンさん
垢版 |
2021/10/04(月) 21:05:44.10
PC-9801Fを買ったとき、N88diskBASIC環境でアセンブラがなかったから
CP/M86のディスクだけ買ってきた。
(ディスク1万円、マニュアル1.5万円でNECは売ってたんだよね)

で、CP/M86のアセンブラ使ってプログラム作っては、DiskBasic側で読み込んで
BASIC+機械語の形で動かしてた。
0190ナイコンさん
垢版 |
2022/05/14(土) 10:57:13.77
ロマンティックが止まらない?
0191ナイコンさん
垢版 |
2023/01/04(水) 00:52:10.32
CP/M86が動くx86系CPUって、どれが最後なんだろ?
0192ナイコンさん
垢版 |
2023/01/04(水) 19:51:19.59
リアルモードがある奴ならCP/M86は動きそうな気はするけどFD付かないマザボでも動くんだろうか?
0193ナイコンさん
垢版 |
2023/01/05(木) 07:23:18.56
vmware上でなら、ryzenでも動いた。実機では試してないけど。
0196ナイコンさん
垢版 |
2023/01/10(火) 11:10:40.21
uefiのみになってBIOS互換モード廃止されたM/BならCPU自体は対応できても起動できなくなるのでは?
0197ナイコンさん
垢版 |
2023/01/10(火) 15:50:35.72
いちおうBIOS対応してても動作が酷くて実用にならないようなのもあるしな
0198ナイコンさん
垢版 |
2023/01/11(水) 10:37:50.21
MS-DOSにはさすがに自己書き換えコードは入ってないかな?
0199ナイコンさん
垢版 |
2023/01/11(水) 13:44:24.90
どうだろうね。masmの教科書で、任意のソフト割り込みをかけるマクロがint21→バイナリでcd 21だけど、この21を書き換えることで任意の割り込みをかけるようなマクロの記載があったから、そのまま使っていれば自己書き換えするはず
0200ナイコンさん
垢版 |
2023/05/09(火) 12:04:54.52
ひさびさage
0202199
垢版 |
2023/05/11(木) 12:49:48.03
Cのマクロならね。
masmだからそのまま展開されます。
0203ナイコンさん
垢版 |
2023/05/11(木) 13:44:07.26
ソースを書き換えるマクロじゃなくてコードを書き換えるマクロが展開されるならCでもアセンブラでもコード書き換えは出来るか
0204ナイコンさん
垢版 |
2023/05/11(木) 21:27:51.90
コードセグメントのアドレスさえ手に入れられる言語で、8086のようにコードセグメントでも書き込みができるCPUなら
0205ナイコンさん
垢版 |
2023/05/12(金) 10:30:50.83
ジャンプテーブルとか動的に生成したりしたよな
0206ナイコンさん
垢版 |
2023/10/18(水) 13:11:29.02
わかんねぇわかんねぇって思いながら、ずっと俺のこと考えてな
0207ナイコンさん
垢版 |
2023/10/19(木) 10:35:26.01
5年で206書き込みか。
0208ナイコンさん
垢版 |
2023/11/14(火) 20:19:14.86
・CP/M68Kを98に移植する。I/O雑誌 工学社 1986年8月号 (234ページ参照)
------------------------------------------------------------------
https://archive.org/details/Io19868/page/n235/mode/2up
------------------------------------------------------------------

ハード構成: PC-9801本体 + PC-9801-16(68000ポード) + PC-9801-17(68000専用メモリポード)
ソフト構成: CP/M-86(OS) + CPM400.SR など

・CP/M-68K バージョン 1.2 バイナリファイル
------------------------------------------------------------------
http://www.cpm.z80.de/download/68kv1_2.zip
------------------------------------------------------------------

「68kv1_2.zip」を解凍し、「DISK」フォルダの中にある「CPM400.SR」「CPMLIB」「LO68.REL」
「RELOC.REL」ファイルが既に入っています。
0209ナイコンさん
垢版 |
2023/11/14(火) 20:21:18.68
バイナリエディタで「SREAD.CMD」「L68K.CMD」「HI68.CMD」バイナリファイルを編集しますが、
そのまま実行できないので、以下のようにCMDベッターを作成する必要があります。

[1]「SREAD.CMD」CMDベッターファイル内容は次のとおり。
------------------------------------------------------------------
0000 01 27 00 00 00 27 00 00 ・・・・・・・・・00
0010 00 00 00 00 00 00 00 00 ・・・・・・・・・00

0180 B8 00 00 2E A3 3C 02 B8 ・・・・・・・・・BA
------------------------------------------------------------------

※ PC-9801-16(68000ポード)が無くても「CPM400.SRO」ファイル出力可能です。

[2]「L68K.CMD」CMDベッターファイル内容は次のとおり。
------------------------------------------------------------------
0000 01 31 00 00 00 31 00 00 ・・・・・・・・・00
0010 00 00 00 00 00 00 00 00 ・・・・・・・・・00

0180 BB CA 02 E8 1F 00 B8 00 ・・・・・・・・・41
------------------------------------------------------------------

[3]「HI68.CMD」CMDベッターファイル内容は次のとおり。
------------------------------------------------------------------
0000 01 34 00 00 00 34 00 00 ・・・・・・・・・00
0010 00 00 00 00 00 00 00 00 ・・・・・・・・・00

0180 BB E5 02 E8 0E 00 B8 00 ・・・・・・・・・30
------------------------------------------------------------------
0210ナイコンさん
垢版 |
2023/11/14(火) 20:24:48.14
「SREAD.CMD」「L68K.CMD」「HI68.CMD」バイナリファイルを編集した後、
できれば、MS-DOS上で逆アセンブルして、「CSEG」「ORG 100H」を追加し、
プログラムを編集してからCP/M-86上でASM86コマンドでアセンブルして、
GENCMDコマンドで「CMD」実行形式ブログラムを出力しておけば良いです。

「SREAD.CMD」バイナリファイルの中に一部の逆アセンブルできない部分がありますが、
しかたなく、DW命令でバイナリデータ([例] DW 2EA3H)を直接編集しておくと良いです。

GENCMDコマンドで「CMD」実行形式ブログラムを出力した後、ちょっと面倒ですが、
バイナリエディタで「A3 2E」<->「2E A3」を逆変換して修正する必要があります。
それは2バイトのチェックサム値っぽいではないか?と推測されますが。

・バイナリエディタ MEDIT
------------------------------------------------------------------
https://www.vector.co.jp/soft/dos/util/se020725.html
------------------------------------------------------------------

・マルチプル機械語エディター EDIX (チェックサム機能付き)
------------------------------------------------------------------
https://www.vector.co.jp/soft/dos/util/se000796.html
------------------------------------------------------------------
0212ナイコンさん
垢版 |
2023/11/15(水) 03:10:49.88
PC-9801用で68000ボードっていうと勝山システムのKSB-2が圧倒的に
安かったからな
 CPU乗っ取り形じゃなくてI/Oや表示は本体のCPUにやらせてCP/M-86と
CP/M-68Kが98側とボード側で同時に動く変態ボードだった。
0213ナイコンさん
垢版 |
2023/11/15(水) 20:08:18.81
L68K.CMD からL68D.CMD(デバッグ用)にコピーして、
0239アドレスに下記の5バイト分を書き換える。
------------------------------
0239 F4 E9 FC FF FA
0239 B1 00 CD E0 00
------------------------------

HI68.CMDからHI68D.CMD(デバッグ用)にコピーして、
0254アドレスに下記の5バイト分を書き換える。
------------------------------
0254 F4 E9 FC FF FA
0254 B1 00 CD E0 00
------------------------------

CP/M-68Kが起動できない場合、上記のデバッグプログラムを作成しておけば、
デバッグプログラムを実行後、DDT86コマンドでメモリダンプを参照できます。

A>DDT86
-D1000:0400 (CPM400.SROメモリダンプが表示されるはず)
-D1000:6000 (BIOS68Kメモリダンプが表示されるはず)
0214ナイコンさん
垢版 |
2023/11/18(土) 16:12:28.05
68000ボードの0番地のアドレス設定値(スイッチ2G2)と
クロック周波数(スイッチ2G3)を取得するプログラムを
作成してみました。
------------------------------------------
BDOS EQU 0E0h
CR EQU 0DH
LF EQU 0AH

cseg
org 100h
in al,9Fh
and ax,0Fh
cmp al,0Ch
jnz LBL1
mov cl,9
mov dx,offset OK1
int BDOS
jmp LBL5
LBL1:
cmp al,0Dh
jnz LBL2
mov cl,9
mov dx,offset OK2
int BDOS
jmp LBL5
0215ナイコンさん
垢版 |
2023/11/18(土) 16:13:36.28
LBL2:
cmp al,0Eh
jnz LBL3
mov cl,9
mov dx,offset OK3
int BDOS
jmp LBL5
LBL3:
cmp al,0Fh
jnz LBL4
mov cl,9
mov dx,offset OK4
int BDOS
jmp LBL5
LBL4:
mov cl,9
mov dx,offset NG
int BDOS
LBL5:
mov cl,00h
int BDOS
0216ナイコンさん
垢版 |
2023/11/18(土) 16:14:32.49
dseg
org 100h
OK1 db CR,LF
db 'PC-9801-16 Board 5MHz + 10000h SET OK!!'
db CR,LF,'$'
OK2 db CR,LF
db 'PC-9801-16 Board 5MHz + 20000h SET OK!!'
db CR,LF,'$'
OK3 db CR,LF
db 'PC-9801-16 Board 8MHz + 10000h SET OK!!'
db CR,LF,'$'
OK4 db CR,LF
db 'PC-9801-16 Board 8MHz + 20000h SET OK!!'
db CR,LF,'$'
NG db CR,LF
db 'PC-9801-16 Board no Found!!'
db CR,LF,'$'
end
------------------------------------------
0217ナイコンさん
垢版 |
2023/11/19(日) 14:05:25.33
現時点では、CP/M-68Kが起動できない原因はまだわかりませんが、
下記のように、スタートアドレス設定が必要とか、スタックをセットし、
INITへジャンプする必要があると思いますけど。

L68K,HI68プログラム(後半)にスタックプログラム(PUSH,POP,IRETなど)が既に入っていますが、
何も実行されない状態で、CP/M-68Kが起動できないみたいですが。

例えば、L68KのCMDベッターにスタートアドレスとか、04のスタックアドレスをセットするとか。
もしくはSR400.MAPファイルを正しく編集するとか。

逆アセンブラで(L68K),HI68プログラムに6F01,(6F06)アドレスが記載されてあり、
INITへジャンプするための作業領域?とか、チェックサム値?をセットするとか?

●SREAD
「スタートアドレスとチェックサムはすべて省略しています」と記載されてありますけど、
スタートアドレスをどのように設定するのがよくわからず、
CMDベッターにスタートアドレスを入れるとか、まだ不明ですが。
0218ナイコンさん
垢版 |
2023/11/19(日) 14:06:57.44
[参考文献]

https://archive.org/details/Io19837/page/n321/mode/2up

[表1 CP/M-68K 移植手順] (I/O雑誌 1983年7月号 319ページ参照)
--------------------------------------------------------------------------------
@他のシステムもしくは68KモニタなどでBIOSを作成する。
ASフォーマット・ローダーを作成し、SR400.SYSまたはSR128K.SYSファイルを
メモリにロードする(BDOSとCCPのみのファイル)。
B@で作成したBIOSをロードする。
CAでロードしたプログラムの頭($400,$15000)から実行する(スタックをセットし、INITへジャンプする)。

注)BIOS作成時のCP/Mのエントリ・ポイントの変更点
-------------------------------------------------
INIT:SR400 $5F96 ,SR128K $19B96
SR400 $4F4 ,SR128K $150F4
-------------------------------------------------

●CCP,BDOS,BIOSはどこにあってもかまいません。
--------------------------------------------------------------------------------
0219ナイコンさん
垢版 |
2023/11/19(日) 17:52:47.65
[参考文献]

プロセッサ 1985年11月号 技術評論社(54〜64ページ参照)
https://www.suruga-ya.jp/product/detail/ZSARU6973

その内容にPC-9801-16 ボードの機能概要とMS-DOS上で動作する
サポートソフト(NEC製)の概要が記載されてあります。

PC-9801-16 メモリマップとメモリ動作概要とIN,OUT命令(I/Oポート)しかなく、
サポートソフトの概要を読んでも使いものになりません。
0220ナイコンさん
垢版 |
2023/11/19(日) 19:36:33.88
おう、阪神が西武をこてんぱんにして日本一になった年だな
0221ナイコンさん
垢版 |
2023/11/20(月) 08:05:52.44
-----------
 :
 :
 CALL SUBR
 RET
----↓-----
 :
 :
 JMP SUBR
----↓-----
 :
 :
SUBR:
-----------
0222ナイコンさん
垢版 |
2023/11/20(月) 20:42:20.37
-----------
 :
 :
 CALL SUBR
 RET
----↓-----
 :
 :
SUBR:
----↓-----
 :
 :
 JMP SUBR
0223ナイコンさん
垢版 |
2023/11/25(土) 20:59:01.64
・・・BIOSをCCPとBDOSに接ぎますが、このとき_ccpと_initの2つの
アドレスだけはリンクしなければなりません。
リンカならすぐにできる、この作業も手で書き加えなければなりません。
SR400.SYSの$4F96は、4EF900000000になっています。
4EF9は絶対アドレス・ジャンプで、この次の部分を
_initのアドレスに改めることによりリンクできます。
_ccpは$4F9Cなので、BIOS中の_ccpをこのアドレスにします。

BIOSとのリンクが終わったシステムは、CCPとBDOSの先頭アドレスから
実行を開始することにより、CP/M68Kが走り始めます。
このとき、ディスクが少し動いて何もメッセージもなく、
いきなり、A>のプロンプトが表われ、CP/M68Kが動きます。
このときからCP/M68Kの全ての機能が働きます。
とマイコンピュータNO.12 (徹底特殊 MC68000とCP/M68K)雑誌
(135ページ)に記載してありました。

CPM400.MAPの中身を覗いてみたら、
_ccp(4B8)と_init(6000)アドレスが入っていました。
-----------------------------------------------
_ccp 4B8 global text
cpm 400 global text
_bdos 4C6 global text
_init 6000 equ global abs
-----------------------------------------------
0224ナイコンさん
垢版 |
2023/11/25(土) 21:01:43.45
DDT.68Kを起動してから「-R BIOS68K」を入力し、
BIOS68Kプログラムを逆アセンブラで覗いてみました。
-----------------------------------------------
movea.l #6F01,A1
   :
jmp $4B8
:
movea.l #6F06,A0
:
movea.l #6F80,A1
:
movea.l #6F80,A2
-----------------------------------------------
上記の6F01と6F06と4B8アドレスが見つかっており、
BIOS68Kプログラムを書き換える必要はないですが、
CP/M86のCMDヘッダ側(04)でスタック領域を確保しておかないと
CP/M68Kが起動できないのではないかと思うけど?
0225ナイコンさん
垢版 |
2023/11/26(日) 15:59:42.03
例外(動作保証なし)ですが、「SREAD」CMDベッターを編集してみて、
それを実行してみたら、SR400.SROが勝手に出力されました。
------------------------------------------------------------------
0000 01 18 40 00 00 18 40 00 00 02 C0 0B 00 00 C0 0B
0010 00 00 00 00 00 00 00 00 ・・・・・・・・・・・00

0080 B8 00 00 2E A3 3C 02 B8 ・・・・・・・・・・・BA
------------------------------------------------------------------
上記のアドレス0180ではなく、0080でした。半年前だけど、
DSEGセグメント(02)を用いて、プログラム実行を試してみました。
0226ナイコンさん
垢版 |
2023/11/26(日) 21:03:14.76
再度、BIOS68Kプログラムを逆アセンブラで覗いてみたら、
なぜ、stop命令が入っていたかわからないですが。
----------------------------
move.b D0,$600000
stop #$2000
clr.l D0
----------------------------
0227ナイコンさん
垢版 |
2023/11/28(火) 21:53:53.94
BDOS機能の呼出しには68000の例外処理命令Trapを使用する。

68000は0番地から3FFFHまでの各4バイトには
255個の例外ベクターを持つ必要があります。

やはり、例外ベクター領域が何も入ってないと
CP/M68Kが起動できないのではないかと思うけど。

https://ipsj.ixsq.nii.ac.jp/ej/index.php?action=pages_view_main&active_action=repository_action_common_download&item_id=25038&item_no=1&attribute_id=1&file_no=1&page_id=13&block_id=8
0229ナイコンさん
垢版 |
2023/11/29(水) 20:34:16.82
>>228
ありがとうございます。_intが既にわかっていたけど、
CP/M68K(英語版)の68ページを参照し、
_ccpが記載してあるけど、_intが見つからなかった。
http://www.bitsavers.org/pdf/digitalResearch/cpm-68k/CPM-68K_System_Guide_Jan83.pdf

166ページに前回(NO.11)の訂正と補足が記載してありますけど、
次回NO.13に訂正箇所が記載してあるかどうか確認すると良いですが。
0230ナイコンさん
垢版 |
2023/11/30(木) 21:29:49.63
マイコンピュータNO.14 入門特集8086
アセンブリ・プログラミング103ページを参照し、
プログラム本体はコード領域に、メモリはデータ領域に
指定して用いましたが、さらにスタックを用いるときは、
それをスタック領域に、また繰り返し転送、比較を行うときには、
予備領域を用います。これらのいくつかの領域を用いるときは、
それぞれの区分名がどの領域に属するものであるかを、
すべてASSUME命令で指定しておきます。
例えば、CSEG、DSEG、SSEGをそれぞれコード、データ、
スタック領域に指定するには、
ASSUME CS:CSEG
ASSUME DS:DSEG
ASSUME SS:SSEG
ASSUME ES:NOTHING
のように書きます。
0231ナイコンさん
垢版 |
2023/11/30(木) 21:36:39.99
1つのASSUME命令の処理対象に、いくつかの領域指定を
同時に行うことができます。このときはそれらを ,(カンマ)で
区切って並べておきます。例えば、
上の例は、
ASSUME CS:CSEG , ASSUME DS:DSEG
ASSUME SS:SSEG , ASSUME ES:NOTHING
と書きます。
0232ナイコンさん
垢版 |
2024/01/21(日) 19:38:09.52
>>212
あぁ勝山さん元気かなぁ?独特の雰囲気のエンジニアだった
0233ナイコンさん
垢版 |
2024/05/02(木) 02:42:18.31
最近になってPlus初めて使った。
リブートなしってこんなに快適だったのかと
レスを投稿する


ニューススポーツなんでも実況