懐かしのMS-DOSプログラミング [sc](★0)
-
- 1
- 2010/04/21(水) 12:42:23
-
mov dx,offset msg
mov ah,9
int 21h
mov ax,4c00h
int 21h
msg db '懐かしのDOS時代のプログラミングについて語ろうぜ',0dh,0ah,'$'
-
- 645
- 2013/12/07(土) 12:39:54.39
-
MS版OS/2がまだ残ってた時代か
今思えばWindows MeやVistaどころではない恥部みたいなもんだな
-
- 646
- 2013/12/07(土) 12:42:34.23
-
90年頃のlink.exeだと、/QオプションでQB45用のライブラリ生成するオプションがあったな。なんでlib.exeではなくlinkの仕事なのか不思議てはあったが
-
- 647
- 2013/12/07(土) 12:52:53.91
-
だってあれ、インタプリタでイメージ読み込んで実行できるんだからDLLみたいなもんでしょ>QLB
-
- 648
- 2013/12/07(土) 12:54:52.40
-
そうだ、そう言えばQLBはインタプリタ環境の物だった。EXE生成時は使わないのか。
-
- 649
- 2013/12/07(土) 13:03:27.18
-
QB45の当時はWin3の前夜でまだDLLみたいな知識は無かったしな
所でQBはPC互換機版には1~3も有ったんだけど、使ったことある人居るのかな
最初はQLBも無かったらしいから、行番のないGW-Basic程度だったのかな
-
- 650
- 2013/12/07(土) 13:43:48.21
-
P-CODEを生成するオプションがあったよね
QBやVB、C++でも作れてたみたいだけど用途や仕組みが良くわからなかった
-
- 651
- 2013/12/07(土) 13:54:37.07
-
QBは後に登場するVB以上に革命的だった
GWBasicのマシン語プログラムロードよりもクロス言語開発が楽になったし。事実上、使えるステートメントを無限に拡張できる最初のBasicだと思う。
-
- 652
- 2013/12/07(土) 13:58:33.93
-
テキスト座標指定するQBのlocate文て、GW-Basicと同じrow, col指定だけど、これって9801版のQBも同じ仕様だっけ?
だとするとN88とは順番逆ってことになるけど、9801のN88ソース移植する時どうしてたっけ
-
- 653
- 2013/12/07(土) 17:05:00.86
-
N88とはそもそも基本的なところで互換性のない文法が多すぎて、フツーに全面書き換えだった
そのうちめんどくさくなってdeclare sub N88LOCALE(x%, y%)とか作ったな
中学生の頃
-
- 654
- 2013/12/07(土) 17:40:31.08
-
NEC版QBはMSの標準Basic仕様とN88との板挟みだったわけか。
確かQB自体はGW-Basicを行番付きのまま読み込んで実行できるのも謳い文句になってたしな。
-
- 655
- 2013/12/08(日) 00:15:45.37
-
>>650
QBって、ネイティブコード吐かずに常にP-Codeかと思ってたけど違うの?
ネイティブコードを吐けるBasicは32bit版のみになったVB5からじゃないのかなあ。
-
- 656
- 2013/12/08(日) 00:20:55.64
-
>>655
QBはネイティブコンパイラとインタプリタのデュアル環境で
MS-BASICはネイティブコンパイラ専用。
VB for MS-DOSもネイティブコンパイルできたぞ。
-
- 657
- 2013/12/08(日) 00:31:58.04
-
MS-Basic7.1ってのを数回触った事があったけど、使い道が全然思いつかなかった。GWやQBみたいなテキスト画面制御程度のステートメントさえ全滅だったような。
何か自前のライブラリを当てないと画面もうごかせないのかな、それともまさかのAnsiエスケープシーケンス使え、だったのか、どこかにちゃんとMS謹製ライブラリが居たのか。
-
- 658
- 2013/12/08(日) 00:42:49.58
-
そうか?QBの上位互換だった気がする
int 21hができたり、テキストベースのGUIライブラリやTrueTypeフォントの描画ルーチンが付いてきた記憶がある
くっそ遅かったがw
-
- 659
- 2013/12/08(日) 11:21:18.80
-
MS Basic Compiler 7は劣化Cに成り下がって面白みがなかった
開発環境も使いにくいPWBになってしまったし
QBまではありだな
QB > 僕と契約して・・・
-
- 660
- 2013/12/08(日) 11:57:46.43
-
VB For DOSは出た時話題になったが、既にWin3.0メインで使ってたからスルーしたな
-
- 661
- 2013/12/08(日) 12:09:16.18
-
Basicはお手軽に使えるから良いのであって、大掛かりなアプリ開発するのにBasicわざわざ使うアホは居ないということだ
-
- 662
- 2013/12/11(水) 08:23:06.19
-
PWB付き大型のBasic7て、どういう層をターゲットにした製品だったんだろ
お手軽Basic派はQB45、大型案件はC/C++だろうし、位置づけ微妙
-
- 663
- 2013/12/11(水) 08:27:26.69
-
その中間層をねらってたりして?
# MSは、いろんな意味で、BASICには力を入れているから、売れる可能性にかけているだけかも。
-
- 664
- 2013/12/11(水) 08:40:01.19
-
今のVisual Basic.NETはBasicたる劣勢要素が殆ど無いいわばC#の双子兄弟みたいになったけど、当時のBasic7は性能的にはどうだったんだろう。Cと変わらない、なら価値はあったのかも知れないけど
もっともC#/VB勢は、MFCより遅いんだけどねw
-
- 665
- 2013/12/11(水) 09:04:23.91
-
DOSの頃のBASICにはON EVENT GOSUBやON ERROR GOTOというステートメントがあってだな
(例外処理っぽいのがintしか無い環境で、各ソフトが勝手に割り込みハンドラを書き換えるわけにもいかないから)
全部のステートメントの間にトラップのためのチェックコードが生成されてた
なので何も考えないとCの倍遅い
でも、OFFると、C並の速度は出てた筈
Cコンパイラの方も相応にしょぼかったし
-
- 666
- 2013/12/11(水) 09:09:30.57
-
というかだ、16ビット環境はセグメントがあるせいでポインタ演算は効率悪かったんで
C言語というのはそんな速い言語じゃなかったw
スピードが欲しければアセンブラ一択ですよ
-
- 667
- 2013/12/11(水) 09:22:20.63
-
>というかだ、16ビット環境はセグメントがあるせいでポインタ演算は効率悪かったんで
>C言語というのはそんな速い言語じゃなかったw
プw
-
- 668
- 2013/12/11(水) 09:37:15.65
-
文系は所詮こんな程度w
-
- 669
- 2013/12/11(水) 11:15:12.87
-
ラージポインタは使ってもヒュージポインタを
ぶん回すようなまねはあまりしなかったな
BC7の頃は既に386が流通してて、
巨大なデータ配列をいじりたいならDOS/Extenderだった
-
- 670
- 2013/12/11(水) 11:44:00.83
-
VCPIとか使うとI/O遅そうなイメージ
-
- 671
- 2013/12/11(水) 12:02:48.85
-
当時のPCの場合プロテクトモードの
オーバーヘッドはそれなりにあったのだが、
ソフトEMS使ってるなら普通にDOS使ってるつもりでも仮想86の配下
-
- 672
- 2013/12/11(水) 12:07:20.41
-
エクステンダーってint21h DOS APIは一瞬リアルに切り替えるとかして互換性保ってたとおもうけど、他のbios APIていうか汎用的なint86コールもフックとかしててそのまま使えたの?
-
- 673
- 2013/12/11(水) 12:08:48.24
-
むしろ問題はEMS用にISAやCバスに遅いメモリをつんでた場合で、
これをメインメモリで使い出すとスピードががた落ちしていた
メモリカードバスのメモリなんてもう最悪
-
- 674
- 2013/12/11(水) 12:13:30.73
-
>>672
DPMIしかしらないけど、BIOS系の代表的なのはフックしてたよ
それ以外は一度仮想86に変移してから呼び出すことになる
-
- 675
- 2013/12/11(水) 12:22:46.39
-
>>674
フックしてプロテクトモードのまま動いてたの?もっともDPMIだと割込ベクターだけフックすれば、リアル前提のBIOSルーチンそのまま動いちゃったりする気もするけど
-
- 676
- 2013/12/11(水) 12:32:10.09
-
むしろ、ほぼ全て(EMS関連とint2F関連以外)は
割り込みでプロテクトモードになったら、すぐにスタックを書き換えて
リアルモードでの割り込みハンドラの指すアドレスに戻るようにして
すぐに仮想86に戻るようにしていた
特別な処理が必要になるのは、これらの他はDMA関連のI/Oポートくらい
こいつらはUMBやHMA(FFFF:部)も含め、物理アドレスとは一致しなくなるので
外に出すアドレスを細工する必要があった
あ、あとA20のON/OFFも対応する必要があった
-
- 677
- 2013/12/11(水) 12:38:40.10
-
VCPIやDPMIでも微妙なところはカバーできないので、
結局DOSエクステンダーのランタイムはなくならなかった
-
- 678
- 2013/12/11(水) 12:48:52.30
-
いとしの仮想86
なぜにx64のlong modeからなくなっちゃったの
-
- 679
- 2013/12/11(水) 13:03:37.51
-
>>677
そもそも、それらは仮想86ドライバ上でDOSエクステンダを動作させるための規格
なくなるわけないだろ
VCPIなんか、「LDTやるからてめーでやれ」だし
-
- 680
- 2013/12/12(木) 21:15:36.34
-
DOSって、レトロを楽しむ以外に今は何かに使われてるの
-
- 681
- 2013/12/12(木) 22:13:02.96
-
機械制御とかで使われてるんじゃないの?
ああいうのって画面いらないし、ネットワークもいらないし、
単に機械を制御できればいいだけだからシンプルなOSでいいんだよね。
マイコンでもいいぐらいだけどさすがに少しきついだろうということで
DOSぐらいでちょうどいい。
-
- 682
- 2013/12/12(木) 22:22:57.46
-
未だにPC-9801使ってるとこもあるんだろうな
-
- 683
- 2013/12/12(木) 22:55:53.79
-
俺の通ってた大学では実験室でPC9801使ってたよ
実験用の装置の動かすプログラムがBASICで組まれてた
-
- 684
- 2013/12/13(金) 04:28:58.24
-
マルチスレッドに対応したDOSってあるの
-
- 685
- 2013/12/13(金) 04:44:10.74
-
アプリが独力でマルチスレッドしてた
DOSじゃないけど同時代だと、
コンカレントCP/MやOS/9-68000とか対応してたな
-
- 686
- 2013/12/13(金) 05:06:43.70
-
マルチスレッドはないけど、マルチタスクはできた
ユーザーが明示的に切り替えないといけなくて裏で勝手に動けたりはしない
-
- 687
- 2013/12/13(金) 05:48:28.43
-
http://ideone.com/2Tx0rw
こんな感じ
-
- 688
- 2013/12/13(金) 08:37:09.05
-
>>687
このソース、どう読めばマルチスレッドになるの
-
- 689
- 2013/12/13(金) 09:17:29.82
-
f_1(); // 温度センサ値取得/表示
がいっぺんに
[温度センサの値取得]→[値表示]→[ウェイト]
をせずに小さい処理単位で返ってきて、次の
f_2(); // 圧力センサ 〃
に処理を渡せるから、人間からは
f_1(); // 温度センサ値取得/表示
f_2(); // 圧力センサ 〃
f_3(); // 加速度 〃
が同時に動作しているように見える。
マルチスレッドではなくマルチタスクだな。
-
- 690
- 2013/12/13(金) 09:19:28.48
-
俺には単なるサブルーチンの逐次処理に見える
-
- 691
- 2013/12/13(金) 09:26:07.13
-
まるちさぶるーちん
-
- 692
- 2013/12/13(金) 10:15:19.75
-
これはMS-DOS時代の組み込みでよく使われた手法。
MS-DOSの常駐プログラムとかはもっとマシな方法だと思う。
-
- 693
- 2013/12/13(金) 10:28:48.03
-
マルチスレッドのない環境で、処理を小分けにするっていう実装テクニックか。それなら分かる。
-
- 694
- 2013/12/13(金) 15:26:30.61
-
タイマー割り込みでバックグランド処理を実装してたな。
InDOSフラグ見てファンクションリクエストを呼び出し中なら
次の割り込みを待ってたけど、
逆にバックグランドがファンクションリクエストを呼び出し中なら
処理を譲れないから、フォアグランドの処理がカクカクになる。
DOSのPRINTコマンドの使えなさを覚えているなら
どんなものかわかるだろう。
このページを共有する