mov dx,offset msg
mov ah,9
int 21h
mov ax,4c00h
int 21h
msg db '懐かしのDOS時代のプログラミングについて語ろうぜ',0dh,0ah,'$'
DOS2.11の頃はDOS自体にmasmが付いていた。
Microsoft Cは98,000円もした。
29,800円で発売されたTurbo-Cにみんな飛びついた。
無料で配布されたLSI C-86試食版が大活躍してくれた。
code segment
mov dx,offset AI_chan
mov ah,9
int 21h
mov ax 4c00h
int 21h
AI_chan:
msg db 'このスレッドは天才チンパンジーアイちゃんが立てたものといわれています。",10,13,'$'
msg db '関係者以外のカキコはご遠慮ください',10,13,'$'
code ends
4 :
デフォルトの名無しさん:2010/04/21(水) 14:08:56
2パスか3パスのコンパイラで
Phoenix Cとかなかったっけ?
>>2 家にMSC/C++あるけどマニュアルとリファレンスが何冊も入っていて吹いた
箱でかすぎw CDもネットもない時代は大変だったんだなぁと
MS-DOSプログラミング、って言うぐらいならDEBUGコマンドでやろうぜ
今でも何気に搭載されてるし
今でもsymdebは手放せない
DOSプログラミングは青春の思い出だな
>>6 edlinも今も残ってるんだよね。
DOSの生みの親Tim Paterson氏への敬意なのかな。
うちはQuickCだったな。
これでCをある程度覚えた。MS-Cと互換性が高かったのも良かった。
日本語コメント付きのサンプルソースは実に役立った。
DOSの時代にCを覚えておいて正解だったと思う。
今のWindowsプログラムは複雑で何が何だか分からない。
SYMDEBは便利だったなー。
これを弄り回して8086の機械語を覚えた。
なるほど8086は2つの数値を組み合わせたアドレスでMBをアクセスするのか、とか。
11 :
訂正:2010/04/21(水) 22:44:18
誤) MB
正) 1MB
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
int 21h
の代わりに
call psp:50h
でもDOSを呼べたよね。
>>2 LSI-C86試食版が安定してきたのはDOS3.1の時代以降だね。
初期は特に、sscanf()のバグが多くて指摘するのも大変だったw
Cから覚えたんだけど、アセンブラのことがちょっと分かってくると、
ライブラリ関数が既に用意されてるものであっても、
わざわざintdosとかで得意げにCからDOSファンクションを呼んだりしたもんだ。
Cの標準ライブラリを使わずに
敢えて似たようなものをアセンブラで自作して
それだけ作ってプログラムしたりな
プログラムの終了はINT 20HでもOK。
今ならDOSBOXとかあるから、趣味ならあえて時代に逆行してもいいと思う。
どの環境でも動くからね。
ファンクション31hで常駐終了するけど、
常駐させたプログラムを開放するファンクションがないので
あれこれ探したもんだ。
今のWindowsプログラムより、DOS時代の方が難しく感じるものの代表だな。
>TSR
LSI-C86はコメントが標準のしか使えないのが今にしてみるとめんどい
その代わりネストが可能だけど
>>20 常駐するだけなら難しくないだろ。Biosフックも今で言うAPIフックみたいなもんだし。
そんなことよりも、常駐アプリでどうやってメモリを確保するかの方がw
PC-98限定で、裏VRAMをバッファに使う猫なんて常駐物があったけど、
同じく裏VRAMをバッファに使う一太郎とバッティングするもんだから
「ウイルスだ」なんて騒ぐマスコミまで出てくるなんて楽しい時代だったね。
常駐開放=ベクタ復帰とメモリ開放
あの時代は、どうやれば1byteでも減らせるかを考えてた。
CP/M互換のシステムコール方法もあったよな。
CL=ファンクション番号でcall 0005hだったかな。
CodeViewなんてのもあったね。
持ってたけどPC-98用なので今では使えない。
結局LSI-C + symdebの世話になってる。
Programer's workbench
DOS時代は (今も?) 統合環境なんて使わないのが常識でした。
VzがあればIDEなんて不要
俺はmifes派
Ezカスタマイズ版やNitEmacsカスタマイズ版を使っていたのはいい思い出。
EMSとかXMSとかの規格が出て来て、DOSプログラムのキャパが増えた時期が楽しかった。
32bit DOS Extenderを使ったら、セグメントの呪縛から解放されて、天国にたどり着いたかのような気がした
メモリモデルなんて言葉が懐かしい。
スモールでもかなりのことが出来たな。
しかしスモールモデルのみとは言え、他に何の制約もないコンパイラを無償配布した
LSIジャパンの功績は大きかったと思う。
LSI-C試食版に付いていたcppとmakeとlccのソースは何度も読み返した。
やはりプログラミングを覚えるには、他人の書いたある程度の規模のソースを読むのが一番。
37 :
デフォルトの名無しさん:2010/05/04(火) 23:26:25
TURBO C Ver1.5つかってたときは、テキスト表示に
cprintf()やら、gotoxy()やら使って
ドラクエのメニューごときみたいなん作ってたなぁ
TCのconio.hって思いっきり98依存の関数が多かったな。
text何たらとか。
symdebよりdebugの方が使い出がある。
バッチコマンドからバイナリ作るとか。
ハードディスクのダイレクトアクセスとか。
< バイナリ
---
> バイナリファイル
>>35 βテストさせられたとも言える。標準ライブラリの出来が今ひとつだったからね。
>>38 IBM-PC依存の関数も山ほどあったような。
>>39 なんと言っても圧巻はX-ISH。
バイナリファイルのエンコーダ/デコーダであるISHの初期バージョンはバッチファイルによる実行モジュール作成方式で配布された。
# 今と違って、標準では転送ツールもデコーダがないから先ず最初にデコーダを作る必要があった。
# 今ならWebブラウザがバイナリファイルを受信できるしメールクライアントも添付ファイルのデコードはできて当然だけど。
>>39 symdebで W100 2 0 1 やリダイレクトもできるぞ
(でも意味判らず試すなよ)
>>41 DOS/V用Turbo-Cはお目に掛かったことがないな。日本でも売られてたの?
>>43 DOS/V用じゃなくて、IBM-PC/AT互換機用だよ。DOS/V用は記憶にないけれど、あったとすれば日本専用でしょ。
# DOS/V自体が(事実上)日本専用なんだから。
失礼。当時はAT互換機=DOS/V機だったから。
で、ということは英語版?
マニュアルが日本語になっていて一部メッセージが日本語になっただけの翻訳版だったかな?
もう忘れたよ……
Turbo-CのAX版かもね
TCのマニュアルは物凄く親切な記述だったように覚えてる
あの頃のBolandはよかったな
ライブラリのバグも少なかった気がする
パソ通の時代から、こういう「おやじ御用達スレ」はなくならんなw
98用のTurbo-Cに入っていたpc98mouseという関数。
「Microsoft形式のマウスドライバには対応していません」
アンチMSぶりが良く現れてたな。
98用DOS5.0が出たとき、NEC自身も、mouse.comはDOSシェル専用だから、
市販アプリでは使えないと明記していた。
でも実際にはMS形式のマウスに対応したアプリも多かった。
NEC版、MS版マウスドライバの見分け方
マウス初期化 (int 33h ax=0) のbxの値で見分けられる。
MS版はbxにボタンの個数が帰ってくるが、NEC版は何も返さない。
予めbx=0としておけば、コール後bx==0がNEC版ドライバ。
マウス使うのってドライバ経由が普通だっけ?
俺はなんかI/O叩いて使ってたような気がするが
さすがに記憶が曖昧すぎて覚えていない
マウスドライバやEMSドライバは、一見風変わりなドライバだ。
組み込み後はDOSを経由せずにアプリから直接ドライバとやり取りする。
多分、普通のデバイスだと
アプリ -(int 21h)- DOS -(デバイス呼び出し)- デバドラ
だけど、マウスやEMSは
アプリ -(int xxh)- デバドラ
でアプリとデバドラが直接やりとりすることを挙げてるのだと思う。
TCのインラインアセンブリは擬似命令だろうが何でも使えるので
おおっと思ったが、実はアセンブリソースを吐き出して
コンパイラはノータッチ、後はアセンブラ任せだった。
つまり、インラインアセンブリを使う場合アセンブラが別途必要。
(廉価版のTurboCには付いてなかったんだよ)
58 :
デフォルトの名無しさん:2010/05/25(火) 23:01:03
xor ax,ax
>>58 はるか大昔、それを得意気に使いまくってた上司に sub ax,ax を見せたら、
「そんな分かりにくいコーディングする奴があるかバカヤロォ」と怒られますたw
>>59 得意も何も、今でも使われている常套手段じゃないか。
怒るのは問題かもしれないが、フラグに影響を与えまくる減算を使うのは間抜けだろう。
はじめはxor使ってたが、ほとんどのCコンパイラがsub使ってたので途中からsubに変えた。
xorでもフラグは動くんじゃね?
>>61 「ほとんど」をkwsk。
このスレなんだから、まさかとは思うがx86用じゃないなんて言わないよね。
>>60 今でこそ常套手段だが、大昔のヘボPGには思いも及ばぬテクだったんだよ。
年代を言うとまた馬鹿が荒らすから言わんが。
そもそも、これを使う文脈でフラグに影響がどうたら言う時点で(ry
DOS時代からMSCはSUBだったのは覚えている。
アセンブラのソースではよくゼロクリアにXORが使われてたが
8086だったらクロックや命令長で有利とかは無いはずだから、
Z80とか8080時代に何かあったのだろうか。
>>64 8080/Z80だと命令長はXORもSUBも1バイトだし、クロックも最小だった。
でもなぜか、周りではみんなSUBじゃなくXORを使ってた。
もちろん、
>>60の言うようなフラグどうたらの問題ではない。
(フラグを変えたくないようなレアケースではMOV命令を使ったから)
多分…小学校低学年で習うSUBに比べてXORはずっと高度な概念だから、
それを使う方が何となく「カッコ良かった」のかも知れないね。
一応、理屈の上ではxorの方が
各bitの出力が他のbitに影響を与えない分
回路的には簡単になるはず。
だからといってクロックや消費電力に差がつくかというと
うーんという感じなのだけど。
ゼロクリアに xor 使うのは、決まり文句みたいなものだからね
subより分かりやすい
subの方がxorより複雑そうなイメージだから
何となくxorの方を使ってしまう
まあ実際速度的に差はないんだろうが
lsic86試食版はマニュアルがコンパクトにまとまっててよかったな。
標準ライブラリとかあのテキストファイル一枚でそうとう勉強になった。
x86系なのに、引数渡しにレジスタを使うのは止めて欲しかった
影の薄かった命令・・・LEA
アセンブリプログラマにはたいへん有難い命令だが
8086には、独立したNOP命令がない。(8080にはる)
NOPニモニックは、単にXCHG AX,AXの別名。
まぁ、実用上それで別に問題ないわけだが…
他にも、こういうCPUはたくさんあるんだろうね?
jmp $+2がnop代わりとか。
mov ax,axとかcmp bx,bxとか、使い道のない命令がいくつかあるね。
Z80だとLD (HL),(HL)はHLTに割り当てられていた。
LEAは頻出じゃね?
jmp short $+2で時間稼ぎ良くやったな
NOPは3クロック、ショートJMPは11クロックくらいあったっけ確か。
影の薄かった命令・・・LDS、LES
おまいの頭皮のようにな
どうせ面の皮は厚いんだろうけどねw
Win95の頃になっても、config.sysにfcbsなんてパラメータがあるのに驚いた。
その時代までFCBファンクションなんか使っていたソフトあったのかな。
84 :
デフォルトの名無しさん:2010/06/30(水) 22:25:20
int 29hって何だろう・・・
int 2ehって何だろう・・・
DOSの非公開機能って結構あったよね。
ウイルスにフックされたのか?
((((;゚Д゚))))ガクガクブルブル
と思ったら簡単に情報が見つかった(汗)
INT 29h 1文字出力
INT 2Eh DOSコマンド実行
MIFES
俺はVz+VJE(or WXP)派
Vz+WXII
DOSエクステンダー(苦笑)
emm386.sys
HIMEM.SYS
93 :
1:2010/07/02(金) 22:48:06
mifes派
emm386はexe
.sysの頃もあった。
デバドラとしても、TSRとしても、外部コマンドとしても使える。
そんな器用なプログラムが流行ったな。
kwsk
Vz Editor のことか!!
WinXPだが、Vzは今でも時々使ってるよ。
あの軽さと独特の使い心地は、そう簡単に手放せるもんじゃない。
なぜ時々?
いつも使えよ
TSRでありながらブロックデバイスとして登録される
smartdrv.exeも変わったプログラムだった。
102 :
訂正:2010/07/05(月) 09:35:10
>>100 いや普段はViだからな。
あれとVzは用途がまるで違う。どっちか一つだけにはできない。
>103
どんなとき、viよりvzが便利なの?
俺もviユーザなので、ちょっと気になった
俺はDOS付属のedit派。
Windowsメモ帳とほぼ同じメニューだからとっつきやすい。
男ならedlin
真の男ならsymdeb
と思ったら最近のOSには含まれてなかった(汗)
かわりにdebugを実行してみたら16ビットモードで起動した
viユーザにとってはedlinの方がeditより使いやすい
110 :
デフォルトの名無しさん:2010/07/08(木) 21:36:39
>>105 editって中身はQuickBASICから言語機能を外したやつだったっけ確か。
edit.comから起動される本体がqbasic.exeとかなってたような気がす。
にしてもedlinってのはなあ。。。
お前のeditだと、起動してから使えるようになるまで約10秒。
ところがedlinだと起動から「ファイル名を指定してください.」まで
約0.1秒。こいつは速い!
114 :
デフォルトの名無しさん:2010/07/09(金) 09:45:10
男なら type con > main.c
緊急時の
copy con autoexec.bat
や
copy con config.sys
は
ときどきやった
ま、一度はやるわな
暇だからDOS用の超軽量エディタでも作るか…
edlinが14KBか…
>117
10KBで頼む
メルコのMelwareとかに付いてた簡易エディタがあったよな
と思って調べたら36kBもあった。
中身を覗いたらMetaWare Cという余り聞きなれない処理系が使われてた。
120 :
デフォルトの名無しさん:2010/07/23(金) 22:32:20
Z80から8086に入ってきたとき、86には条件リターンがないのに驚いた。
movでフラグが変わらないとか
>>120 いやむしろ俺は、8080/Z80系をはじめて触ったとき
条件Jump/条件Call/条件Returnと揃ってることの方に驚いたが…
123 :
デフォルトの名無しさん:2010/08/01(日) 22:40:21
124 :
デフォルトの名無しさん:2010/08/25(水) 18:59:52
保守
Z80ではIX、IYを使うと笑われたから、
86でもSI、DIはストリング命令以外では使わなかったな。
IXやIYを使うだけで嗤う香具師はおらん
IXやIYをアキュムレータのごとく使う香具師が嗤われる
IX や IY はクロックをおもいくそ食うと思っていたが、HD64180 なんかでは状況はかわったのかなあ?
127 :
訂正:2010/08/25(水) 22:50:37
8086系のCでも、SIとDIはレジスタ変数として使われる程度だね。
ぷげら
ストリングス転送命令は途中からあまり使われなくなったような気がする。
UNICODEが流行ってASCIIZじゃなくなったからだろ
ブロック転送命令は8/16/32bit長のどれも使えるぞ
Pentium以降、単純機能の命令が非常に高速化されたので
ストリング転送命令のような複合命令を使う理由がなくなった。
VC++のmemcpyの実装を見ると使用可能ならxmmレジスタを使ってる。
CTSって何する命令?
symdebで逆アセンブルすると時々出てくるんだけど。
>>134 ClearToSend……ってギャグはさておき。
コードは幾つよ。CTSなんて記憶にないわさ。
>>134 STC(SeT Carry flag) じゃなくて?
>>135 0fh。
symdebのアセンブラで
db 0fh
db 00h
とやって逆アセンブルすると
0F00 CTS 00
と出てくる。
>>137 そこには 386以降の命令が詰まっているような気が。
たしかにCTS ってなんのつもりだったんだろう?
>>137 symdebの時代なら8086を想定しているだろうから、0fは未定義だね。
8086って、未定義命令割り込みってあったっけ? あればAPIでも用意されているとか。
ない。
286以降でなかったかのう。
0fhって8086ではpop csだったような気がす。
86だと実際にpopが行われるから、予めpush csしておくようにと
CPU判定方法に書いてあった。
pop cs は、F0じゃないか?
286以降ではプリフィックスとして使われて
いわゆるF0バグを招いたやつ。
0F0Hは8086もlock prefix
push cs 0eh
push ds 1eh
push es 06h
push ss 16h
pop ds 1fh
pop es 07h
pop ss 17h
なので、pop csは0fhだったと思う。
8086:
AX:汎用加減乗除計算用
BX:準汎用加減乗除計算/アドレッシング補助
CX:準汎用加減乗除計算/カウンタ(条件分岐命令、ループ命令で使用)
DX:汎用加減乗除計算用
SI:メモリ転送元インデクサ
DI:メモリ転送先インデクサ
BP:スタックフレーム用
SP:スタックポインタ
それぞれけっこうギチギチに役割がふられており実は自由度は少ない。
但し多少の加算減算程度は16ビットレジスタには許可されてた
程度。よって完全にコンパイラ向け。経験知でオプティマイズできる
余地は余り無い。
しかし当時はアセンブリ職人と自称する人は会社に一人や二人は居て
腫れ物に触るように扱われてたっけW
>>145 >但し多少の加算減算程度は16ビットレジスタには許可されてた
>程度。
AL/AHとかの8ビットレジスタにも加減乗除演算が定義されてた(る)件
>よって完全にコンパイラ向け。
コンパイラ作成者泣かせなプロセッサと聞きました。(オプティマイズ
が難しい)
レジスタ割り当ては面倒だから、使い方が固定されているなら
むやみに凝るのをやめて機械的にやるのも手だと思う
148 :
デフォルトの名無しさん:2010/10/12(火) 23:11:58
保守
大阪地検のFD書き換え事件って、笑っちゃうよね。
件(くだん)の検事も上司も、パソコンのことをなんにも知らないんだからね。
ミスであんな書き換えが起こることなんて100%あり得ないのにね。
>>149 言い訳としてはアホだけど
嘘も吐き通せば無罪だからな
戦略的には勝利だろ
152 :
デフォルトの名無しさん:2010/10/16(土) 23:48:21
INT 21hの内容ってどこにあるんだ?
あとINT 21hでググると変なページが出るんだが
>>153 そのページ
OllyDbgの画面に似てるしアクセスカウンターみたいなのもついてる
>>153,154
INT 21hの動作じゃなくて
DOSのなかにある機械語のこと
新しい概念: DOSのなかにある機械語
INT 21hってカーネルとかプログラムの中にあるんじゃないの
floppy disk の中にある
159 :
デフォルトの名無しさん:2010/10/17(日) 11:48:14
INT 21hがどのファイルのどこからどこまでがah=??のファンクションかを知りたい
>>156 155じゃないけど、割り込みベクターも知らないなら黙ってりゃいいのに。
馬鹿丸出しだな
debug使え
いい年こいて説明の下手な奴が怒ってるな
なんかトンデモ本作者と同じ論理だな。
相対性理論は俺に理解できないから間違ってる!、って奴だけどw
いや、機械語ってのはDOSの中にあるとかないとかってもんじゃないだろ。
それとも何か? お前等の中には日本語が入っているのか?
ベクタテーブル知ってるならそのアドレスからメモリダンプすれば
きっとDOSのなかにある機械語取れるよ
漏れの中の人はきっと日本語よりも細かいマイクロコードで動いてる希ガス
intはBIOS Interrupt Callsの略。実装は基本的にBIOSの中にある。
21HはDOSへ制御を移す、いわばスーパーバーザコールやAPIコールに相当する。
今はFreeBIOSなんてのもあるから、気になる人はソース見るとよろし。
そのコード量の多さに驚くと思う。
intに「BIOSの」なんて意味はねーよ。
intはただの割り込み。
ハードウェア割り込みの処理先として想定されていたものを
ソフト的に呼び出すことも可能にした、というだけ。
もちろん、Z80のRSTなんかもそうだが
それをソフト的に呼び出して特殊機能を実現する、というのは
かなり以前から行われていて
8086のintもその用途に使われることを前提に
割り込み番号の予約等を行っているのは確か。
でっていう
intに「BIOSの」なんて意味はねーよ。
FreeDOSのソースとか見ればわかるの?
MS-DOS ver6 のソースが流出した、
って本当なの?
暇なときはdebugでDOSの内部を探検したもんだ。
最新のMASMってDOSに対応してるのかな
VC++ expressについてるmlでコンパイルできるが、linkが対応してない。
dos用のlinkを用意するとこんな感じでコンパイルできる。
ml /c /omf hello.asm
link /tiny hello.obj, hello.com;
NASMは直接COMファイルを吐けるよね。
でもDOSで動かせないの
178 :
デフォルトの名無しさん:2010/10/20(水) 06:37:44
リンカってLNK562かLNK563ってどっちを使えばいいの
stubを抜くんだ
>>152 これで何を知りたいのか分かる奴がいたらどうかしているぜw
>>160 怒ってないでdebug使え
com作るのにexe2binはいらなくなったのか・・・
え、普通にtinyモデルで作ればcomじゃない
B社のコンパイラしか使ったことないひとは
そういう認識でいればいいんじゃない
まあ、B社はある意味偉大だからな。
少なくともL社よりはw
BCやTCは癖があったからMS系の俺は馴染めなかった。
VCの方がもっと癖あったけどな
最近C#に凝り始めたんだけど、
beepというメソッドも用意されていて、本体のスピーカーを直接鳴らせたりする。
低レベルな操作に、ちょっぴりDOS時代を思い出したのであった。
print '\a'
>>189 音の高さや長さを自由に制御できるの?
ただ決まった音でピッと鳴るだけ?
194 :
デフォルトの名無しさん:2011/01/10(月) 22:32:46
保守
CDからDOS起動したいんだけど、ブータブルCDの作成がうまくいかん
FDの起動イメージ作成してそれをISOに変換して焼いても起動しない。
どうすりゃいいんだああああああああ
古いふる〜い ms-dos のプログラムが置いてあるところって、vector 以外にないですかね。
昔お世話になった ftp サイト(kuis とか)も、archie サーバーとかも、みんな逝ってしまった‥‥‥。
neko.com がほしいのですが。
197 :
196:2011/01/19(水) 01:32:48
ああ
ねこじゃらしもあったぬ
大切なものは失ってから気付く
でもMDには保存しないほうが
PACK13000でも探したら?
うちにくればpack13000があるのに、残念
neko.comって何のプログラムだっけ?
nekoなつかしす
TSR
全サーバ全板10ms単位の表示になったな。
PC-98では1/100秒の計測ができなかったっけ。
後の方のmateとかになってようやく。
それまではタイマ割り込みで辛うじて計測した。
207 :
デフォルトの名無しさん:2011/03/09(水) 22:37:32.79
ある昔の本を読んでいて出くわしたのだが、PLink86って何だ?
BIOSで有名なPhoenix社の製品らしいが、
ぐぐってもオーバーレイリンカくらいにしか書かれてないし、
MS-Linkと具体的にどう違ったの?
オーバーレイモジュールと言う過去の技術が使えたのです。
210 :
デフォルトの名無しさん:2011/03/11(金) 09:08:02.60
.OVL
mslinkはオーバーレイ使ってもファイルは1つなんだよな。
1つのファイルの中に複数のexeが入ってる。
阪神大震災の頃はまだDOSが主流だったぬ
213 :
デフォルトの名無しさん:2011/03/11(金) 23:24:33.12
win95が出たのは何月だっけ?
win3.1のマシンを買って、使いにくかったから
DOSマシンとして使ってた。
インターネットにつなげるときだけwinを立ち上げてたよ。
11月くらいでなかったかのう
DOSだと、TEENっていうTCP stackがあったね。
216 :
デフォルトの名無しさん:2011/03/15(火) 18:41:29.10
へえ
NE2000とNOVELLのコンボ
あとカメレオンくらい
PACK13000の後に
PACK19000goldなんてのが出てたんだな。
そういえば買ったような覚えがあるよ。
219 :
デフォルトの名無しさん:2011/04/11(月) 22:52:54.14
保守
Windows SDK使えばコマンドラインソフト簡単に作れるぞ
MASMも付属(コマンドはml.exe)
cl.exeに/FAオプション与えればアセンブラソースを出力してくれる
デバッガはWinDBGというデバッガが付属している
MS-DOSに戻らなくてもWindows上で似たようなプログラミングは可能
Windowsのコマンドプロンプトソフトは
MS-DOSと違い32bitコードになるので64KBのセグメントの壁も気にしなくてよい
空気が読めないひと
ここ見て懐かしくてまたやりたくなる人もいるだろうと思ってね
#include <stdio.h>
void main(int argc, char ** argv){
printf("Hellow World\n");
}
こんなCのソースをcl.exeでコンパイルしてそのままコマンドラインで実行できるしね
ここの住人には常識かもしれないけど
お客さん、お部屋をお間違えでは?
224 :
デフォルトの名無しさん:2011/04/13(水) 05:49:42.56
戻り値voidにしてるくらいだからネタだろ
UNIXだと戻り値intが必要だがMS-DOSやWindowsならvoidでOK
Windowsのコマンドプロンプトって
昔のTSRみたいなこと出来ないの?
>>225 >UNIXだと戻り値intが必要だがMS-DOSやWindowsならvoidでOK
いや、その理屈はおかしい。
厳密にはコンパイラの仕様なんだがMS-DOSやWindowsでよく使われる
コンパイラではvoidでも問題ないものが多くMS-DOSの解説では
mainをvoidにしてるケースは多い
GCCはintにしてないとたしか怒られたはず
MS-DOS は void だと AX が戻り値になるんだろ
exit(n)を使ってれば、voidだろうが問題なし。
gccだとexit(n)使っていようが警告出るけどな
C言語の仕様ではintが正しいらしいがMS-DOSならどっちでもいいのでは?
「void main MS-DOS」で検索したら2番目にこんなページが出てきた
http://homepage3.nifty.com/aokura/phoebe/minitips.html > 3. void main() と int main()
>
> 古い参考書では void main() が多く、新しいものでは int main() が多いようです。
> 個人で学習する範囲においては、return する値に特に意味を持たせる
> (他のプログラムやバッチ処理で利用する)つもりがなく、
> コンパイラがエラーにならないのであれば、別にどっちでもよいように思います。
> ただし、void main() にしたときは値を返さず、int main() にしたときは必ず値(0でよい)を
> 返しましょう。それが理解できていれば支障はないでしょう
> (ちなみに、私は int main() を使っています)。
exit(n)なりmainのreturn値なりがどういう意味を持つのか
分かってない奴が、混じってるように見える。
>>232 そのへんはコンパイラが吐き出すコード見れば問題ないことがわかる
voidを指定あってもコンパイラはちゃんと0を返すコードを吐き出してる
OSの違いとコンパイラの違いの区別がつかないのもいるな
つまりこういうことですねわかります
#include <stdio.h>
int main(int, char **){
return printf("Hello Work!\n");
}
「void main MS-DOS」の検索でこんなページも出てきた
http://www.asahi-net.or.jp/~yf8k-kbys/int2.html > 私の知る限りではMS-DOSとUNIXがプログラムの戻り値を
> バッチやシェルスクリプトで利用することができます。
> ちなみにMS-DOSやUNIXでvoid main()とすると、
> まともなCコンパイラなら自動的にMS-DOSやUNIXに終了コードとして
> 0を返すコードを生成してくれます。
> つまりint main(){ return 0; }と同じことです。
> でも、ANSIに極力準拠するよう作られているGCCなどはvoid main()にすると
> コンパイル時に警告エラーが表示されるはずです。
>
> もともとC言語はUNIX環境での利用を非常に意識して作られた言語なので
> 戻り値がintである必然性もうなずけます。
> 何せUNIXのシェルスクリプトが強力なので複数のプログラム
> (ツール的なものが多いです。ファイルをソートしてマージして加工して...など)を
> 一括処理させることが多いのです。この様なシェルスクリプトにおいて、
> あるプログラム処理中にエラーが発生したときは、シェルの処理を中断したいことがあります。
> このトリガがmain()関数の戻り値と言うわけです。
>
> そういえば、「main()関数の戻り値はintじゃなきゃ駄目だ!」と断言する方の多くは
> UNIX(Linux)ユーザですね。
> そして「別にvoidでもいいでしょ」と言う方の多くはWindowsのC++ユーザです。(^^;
>>234 小学生みたいで微笑ましいが、まさか突っ込んだつもり?
DOS3.1時代FDD環境でお世話になったLattice C パーソナル。
int mainのreturnでなにを返してもリターンコードは0になってたな。
>>226 OSにメモリ割り当てを任せた上で割込駆動するようなのは行えない。
>>236 ahに4cでalに戻り値だね。
ERRORLEVEL
comファイルならバイナリエディタでも作れるね
DOSプログラムを終了させる方法を4つまで覚えてるけど、
まだ他にあったかな。もう思い出せない。
int 21h ah=4ch al=(ExitCode)
int 21h ah=00h
jmp 0
ret
int 20h
csはpspを指していること。
psp:0にあるのはcdh, 20h。つまりint 20h。
ret命令やjmp 0はint 20hを実行して終わる。
psp:0へのfar jmpなら、exeファイルであっても
csはpspを指さなければならないという制約をクリアできる。
jmp farよりも、xor ax,ax; int 21Hの方が短い気がするする。
comファイルなら。
exeでもコードセグメントが64kB 1つしかないスモールかコンパクトなら可能
スモールやコンパクトモデルでもCSはコードセグメントを指してる。
初期値がPSPなのはDS。
とりあえずこういうことか。CP/M臭い・・
.MODEL SMALL,STDCALL,NEARSTACK
.DATA
PEXIT dd 00000000h
BDOS dd 00000050h
msg db 'hello world !', 0dh, 0ah, '$'
.STACK
.CODE
.STARTUP
mov ax, es
mov word ptr PEXIT[2], ax
mov word ptr BDOS[2], ax
mov dx, offset msg
mov ah, 09h
call BDOS
jmp PEXIT
END
BDOSエントリは0005hでなかったか?
CPM-80ではそうだな。
こっちのはDOS独自のCPM互換機能で0x0050で正解。
CP/M-86には無い。
int 21, retfがあるだけ。
>>251 あー、そうか。
Cの場合pspを指してるのはdsか。
お前ら何語を話してるんだ?w
爺共が久々に活性化w
システムコール呼び出しでcall 50hなんて使ったことないな。
親プロセス環境へのポインタ(非公開)がpsp:16h辺りにあったような気がする
親プロセスのPSPのセグメントかな。
PSP:16-17hだったと思う。
>>218 cd8枚組だっけか
買ったよ
次はDVDで出るかもなんて冊子に書かれてた
262 :
デフォルトの名無しさん:2011/06/20(月) 22:08:52.71
LSI C-86は俺の青春。
何万円もしたCコンパイラが無料で手に入るなんて夢のようだった。
でもパラメータのレジスタ受け渡しとかやってるのに
吐き出したコードの速度は遅いんだよな。
同じソースで吐き出したコードを比べると
Turbo-C > MS-C >> LSI-C
な感じ。
LSI-Cの出力したアセンブリリストを加工するsedスクリプトを書いたなぁ。
それだけで数%は速くなった記憶が。
265 :
デフォルトの名無しさん:2011/06/22(水) 21:09:03.72
この時代は何でも出来そうな気がしていた
問題
Turbo-C 2.0のメモリモデルの特徴を表にしてまとめなさい
MS-Cとほぼ同じだけど、ラージだとスタックはDGROUPの外なのが目立ったな。
ヒュージだとDGROUPそのものが存在しない。
その時代のMS-Cには、タイニーモデルはまだ存在してなかったね。
270 :
デフォルトの名無しさん:2011/07/30(土) 13:03:37.64
もう30年も経つんだな。
QDOSとかSCPとか懐かしい言葉だ。
DOS誕生の経緯は「MS-DOSエンサイクロペディア」に詳しく書かれてたけど、今でも持ってる。
ぐぐっても見かけないからここにこっそり書き残しておこう
tasm32のparity?の生成コードはmasm等の逆
ボーランドはアンチMSだったからな。
Turbo-Cのマウス制御関数の説明に、
「Microsoft形式のマウスには対応しておりません」
とキッパリ書いてある、なんてこともあった。
そりゃマウスドライバの話だべ
mouse.comとmouse.sysか
mouse.comのほうが見た目良かったんだが、再配布禁止だったからなあ…
ソフト側ではどちらでも動くように作れてたような気がするし
ADDDEVなどで切り替えたりしてたような気もするし
今となってはどうでもいい小手先か
>>276 基本同じなんだが、困ったことに微妙に違う所があったりした
俺はそのへんめんどいので自前ドライバを使ってたが
>>195 IBM-DOS2000買うとか?(CDで売ってた)
多分まだ売ってるはず
power.exeってMS-DOSの処理が空いている時にhalt命令で消費電力を
下げるらしいですが、ユーザープログラムでこの「空いてる状態」を
作り出すにはどうしたらよいでしょうか?
(C言語ならgetch()すればいい?)
>>279 haltからの復帰には例外が必要。
自動的に復帰させるためには、haltさせる前に、復帰させるための例外を用意してやる必要がある。
タイマなんかを使うんでは無いかな。
>>280 例外じゃなくて割り込みじゃないのか?
リアルモードで例外は扱えなかったと思ったけど。
>>281 x86の場合には例外と割り込みを区別していたんだね。
知らなかった。
で、
>>279が聞きたかったことって、power.exeを常駐させた上での話だったのかな?
なら、getch関数でDOSに制御が移るので空き時間作れると思う。
ATならタイマIRQ0、9821ならカレンダIRQ15(初期の9821はよく知らん)が常時ぶん回ってるから
通常、hltで止まることはないよ(どのみちキー入力IRQ1で復帰するけど)
DOSに制御が移る→暇そうならint 28h→power.exe
なんで、暇なら直接int 28hぶん回すのが手っ取り早いんじゃね
285 :
279:2011/10/10(月) 00:33:50.30
回答ありがとうございます。
>>283 直接コードにhalt命令を埋め込んでも常に何かしら割り込みが
発生しているので問題ないと言うことですね。
>>284 探していたのはそれだと思います。
int28hをググってみましたがint28hをフックするコードしか
みつけられず、int28hを呼び出す側はどのような値をレジスタに
セットしてcallすれば良いかわかりませんでした…。
int28hは呼び出し側で特定のレジスタ値をセットする必要はないはずだよ
int28hは「DOSが暇な時に動いて欲しい複数の常駐物のチェーンの入り口」なんで
それぞれの常駐物が勝手に何とかしてるはず、ただ、スタック少なすぎるのはまずいかも
C言語とかで普通に作ったプログラムならスタックは十分だと思うけど
破壊されちゃまずいレジスタはint28h前後で念のため退避復元するか、呼び出し後に再設定だね
古い記憶なんで間違ってたらスマソ
>>285直接コードにhalt命令を埋め込んでも・・・
>>283にも書いたけど9801(初期の9821はよく知らん)はカレンダIRQ15が無いんでまずいかもね
あと、hlt命令は仮想86モードだと一般保護例外になるんで
実際に実行されるhlt命令は仮想86モニタ(EMM386等)の例外処理内部のhlt命令になるよ
288 :
279:2011/10/10(月) 10:40:18.65
>>286 int28hを試してみたいと思います。
>>287 開発はOpenWatcomのDOSエクステンダなので確か特権0で
動作していたハズですからhalt埋め込みも可能かも。と思っています。
対象CPUをPentium以降にしていますのでPC-9801はほとんどが外れます。
(ODP,CPUアクセラレータ機種は微妙ですが…)
そういう動作環境なら特に問題ないかもね
まあ、DOSやBIOSを介してキー入力してるならpower.exeがうまいことhlt実行してくれるだろうから
標準ライブラリのgetch()等を使ってる限りは独自にint28h呼び出さなくても平気かもだけど
98だとそもそもINT18 AH=0のキー入力BIOSが「キー入力バッファ監視無限ループ」なんだけど
power.exeがトラップしてpower.exe内部でループさせるようにしてhlt実行されとるね
290 :
279:2011/10/10(月) 19:06:22.80
空ループの中でint28hを呼ぶ版と呼ばない版を用意して実験した結果、
呼ぶ版ではpower.exeのアイドル率が上昇しているのが確認できました。
仮想86環境+DOSエクステンダでhlt命令の埋め込みも実験してみましたが
一瞬で制御が戻って来ましたのでループの中で呼んでも問題なさそうです。
有用な情報ありがとうございました。
ハードを骨までしゃぶれたDOS時代は楽しかったな〜
なんとなくBIOSを使わずにCTRCを直接制御して480ラインにしたいと思って
// Text GDC 30(16*30=480) line
outp( 0x62,0x0e ); // Sync command
outp( 0x60,0x4e ); // C/R (80-2 = 78)
outp( 0x60,(0x08<<5)|0x07 ); // VS(l) | HS
outp( 0x60,(0x09<<2)|(0x08
>>3) ); // HFP | VS(h)
outp( 0x60,0x07 ); // HBP
outp( 0x60,0x07 ); // HFP
outp( 0x60,0x480 & 0xff ); // L/F(l)
outp( 0x60,(0x19<<2)|(0x480
>>8) ); // VBP | LFh(h)
outp( 0x62,0x47 ); // Pitch command
outp( 0x60,0x50 ); // 80
// Graphics GDC 480 line
outp( 0xa2,0x0e ); // Sync command
outp( 0xa0,0x4e ); // C/R (80-2 = 78)
outp( 0xa0,(0x08<<5)|0x07 ); // VS(l) | HS
outp( 0xa0,(0x09<<2)|(0x08
>>3) ); // HFP | VS(h)
outp( 0xa0,0x07 ); // HBP
outp( 0xa0,0x07 ); // HFP
outp( 0xa0,0x480 & 0xff ); // L/F(l)
outp( 0xa0,(0x19<<2)|(0x480
>>8) ); // VBP | LFh(h)
outp( 0xa2,0x47 ); // Pitch command
outp( 0xa0,0x50 ); // 80
という風に作ってみたけど画面が映らなくなってしまいます。
CRTCの直接制御で9821の画面モードに変更するという事自体が間違っているのでしょうか?
それだけで解像度まで変わったか?
変わらなかった。
/(^o^)\
>>292のようなGDCの設定に加えて、outp(0x9a8, 0x01);が要る気がしてきた。
映らなくなったって事は何か足りないよりもパラメータ間違ってんじゃね?
GDC 5MHz,HS 31KHz を対象にしているので 0x9a8 は関係ないと考えています。
>>292 ・SYNCコマンドのパラメータ先頭1個が抜けてる、よって後続の設定値全部間違ってる。
・SYNCコマンド0x0Eを使えば表示はどのみち消える、STARTコマンド発行するか、SYNCコマンド0x0Fを使う。
・480ラインなのに16進数の0x480で設定してるから1152ラインとか無茶振りすぎる。
・480ラインに設定出来てもSCROLLコマンド設定しなきゃ見えない(はず)。
・上記修正してもBIOS AX=300Ch BH=32h INT18hの表示と違い、画面全体が水平方向にずれて何か変。
・ちなみにBIOSでも画面表示とカーソル表示は消えるので自前で再設定する。
BIOS解析してどういうパラメータ設定してるか見た方が早い気がする
まあそうだねー
>>292の質問は画面映らなくて困ってるって話なんで、それは何とかなるやろ
>>298 SYNCコマンドが1つ不足していたのと0x480を修正したら
テキストは左寄り&グラフィックは乱れていますが画面には映るようになりました。
ありがとうございます。
30行系ソフトのソースを見たのですがBIOSが対応していない26〜29行は
CRTCを制御して、25,30行はBIOSを使うようになっていたので
パラメータがわからなかったので…
パラメータはもうちょっと調べて見ます。
DOSの環境変数ってメモリのどこに記憶されているのでしょうか?
最初はDOSファンクションにあるのかと思っていましたがそれらしいのがなく、
CRT(getenv)のソースを見たらグローバル変数のポインタを参照して
その中から該当する文字列を返しているようでした。
たぶん、グローバル変数はStartupで設定されていると思うのですが…
DOS(コマンドプロンプトではない)なら
PSPのどっかに、環境変数を示すセグメントが書いてあるよ。
>>303 ありがとうございます。
やっぱりPSPですか…。
ds:2c
>>302 MS-Cならgetenv関数が用意してあるが
既にgetenvのソースを読んだ人に向かって
getenvでできるよ(キリッ とか言われても・・・
質問。DOS(16Bit)上からのCONFIG.SYSで読込む、デバイスドライバーの*.SYSや*.EXEのHEADER情報と、
実行(起動?)手順が知りたいのですが、ググッたが参考になる所が見つけられませんでした。
コマンドライン(又は、AUTOEXEC.BATからの実行)での*.EXEのHEADER情報は、色々と見つかり参考にさせて頂きました。
デバイスドライバー又はコマンドラインで実行できる形式の物を作りたいと思っています。
お指導・ご指南を、お願いいたします。
emm386とかのUMB領域の検出ってどうやってるんだろう?
4kBごとにメモリを読んで調べてたような・・・
怪しそうな領域はMSDで調べると「恐らく使用可」なんて曖昧な答えが出たりした。
>>311-312 該当アドレスにRAMを自作メモリーボードで繋げたら見つけてくれるんかな?
315 :
デフォルトの名無しさん:2011/12/08(木) 22:23:44.01
メガデモを98のDOSに移植したいんだけど、Milleniumを使う方法はないかね?
シーラスロジックにしとけ。16ビットカラーも使える。
I/Oとメモリを見えるようにしてやれば使えるだろうけど、何かと手間
PCIは起動時にI/Oとメモリを割り当ててるから普通に見えるだろ。
(9821ではブリッヂを経由すると割り当てられないらしいが。)
PCI BIOSを使えばデバイス検索、リソース検索はできるから
1M以上のメモリアクセスをどうするかだ。
320 :
デフォルトの名無しさん:2012/01/10(火) 09:21:55.94
321 :
デフォルトの名無しさん:2012/02/25(土) 21:41:54.99
保守
昔は1バイトでも節約するのに苦労してたのに、
今はアプリ1つ起動しただけで数100MB食う有様。
メモリがいくら安くなったとはいえ、食い過ぎじゃないかと。
くたばれよジジイ
MS-DOSなら16[Byte]単位での節約だよねー。
くたばれよジジイ
16 bits
325 :
デフォルトの名無しさん:2012/02/27(月) 14:35:58.53
OpenWatcom 1.9でnearポインタをunsigned longにキャストしたら
セグメント:オフセット形式になったんだけど、他のコンパイラもこんなだったっけ?
>>325 C はよくわからないけれども、アセンブラですら、4バイト確保してseg:off だから、多分そうじゃないかな。
328 :
デフォルトの名無しさん:2012/02/27(月) 23:11:26.15
プログラミングはUNIX(SunOS)から入ったから、ポインタのNEARとかFAR
とかはハァ?って感じだった。
>>325 そこはFP_SEG, FP_OF, MK_FPを使おうか...。
>>327 X64なWindowsだと自由とはいかないんだけどね。
nearなら無関係だったか。
MK_FPとかあったなー
今の今まで忘れてた
Turbo C++でやってみたけどsmall/large/huge共にセグメントアドレスは入らなかった
333
334 :
デフォルトの名無しさん:2012/04/27(金) 01:08:04.98
シフトキー
capsロック
numlock等
実際にはキー入力されないキーを利用して
バッチファイルを条件分岐したい
適当なdosプログラムが探せないので
作りたい
バッチファイルで返り血を読む方法も
よくわからないです
そいつはDOSの守備範囲外だ。
どの機種かはしらんがキーボードBIOSをつかうか、
あるいはキーボードI/Oを直接叩くしかないぞ。
>>334 こんなもんだろう
org 100h
mov ah,02h
int 16h
mov ah,4ch
int 21h
んでERRORLEVELで結果を見ればよろし
昔ならBUで一発だったのにな
>>336 それでできました
ありがとう
>>337 バッチユーティリティ落としました
いいですねこれ
アセンブラでexe形式のソフトを作っているのですが
コマンドラインからの引数はどのようにすると参照できますか?
341 :
339:2012/04/29(日) 21:49:32.99
exe形式ならES:0000hのPSPを参照すれば引数がわかるんですね。
psp:80hにコマンドラインの文字列が置かれ、同時にデフォルトDTAでもあった。
懐かしいねぇ。
過去形じゃなくて今でもそうだけどな
64bitOSの普及で過去形になりつつある。
仮想86モードがあっさり切られるとはね。
ロングモードから仮想86モードに移行できないだけで
仮想86モードが切られたわけじゃないと思うが。
逆アセンブラは何を使ってますか?
symdeb
xda
350 :
デフォルトの名無しさん:2012/06/10(日) 21:10:04.11
int 20
Linuxよこんにちは
#include <stdlib.h>
#include <time.h>
#include <conio.h>
main()
{
srand((int)time(0));
while(1)
outp(rand(), rand()%256);
}
を実行したら、青画面が出てパソコンが死んだよ (HDDクラッシュ)。w
秘孔を突いてしまったのですね
まぁ、実験用のマシンだから別に壊れても構わない
Cを覚え始めて楽しくなってきた頃、
>>352なことは誰もがやるよねw
既にPC-8001でさんざんやった後だから、Cではポート叩くのはやってないなぁ。
精々RAMDISKのドライバ作ったくらい。
>>357 探究心のないやつだなぁ。乱数を使うのは間抜けかもしれないが。
>>356 RAMDISKが動いたことで嬉しくなって、しかも速いもんだからそのRAMDISK上で作業を続けて、
リセット掛かってなくなって我に返るのも、割りと誰もが通る途だよねw
RAMDISK は cache にするべきだったな
>>358 小学校低学年レベルの探究心の話をしてたのか
それは失礼w
debugで適当なアドレスからトレス始めてPC内部を探検とかもやったなw
ラムディスクでクラッシュはやった
PC98用のハード叩きまくりプログラムをPC/ATのWin95DOS窓でうっかり動かしたら
いきなり沈黙して再起不能になったことが…
修理に出したらメイン基板交換で返ってきた
昔、Libretto50をsymdebでROMをトレスしてたら
HDDクラッシュしたことがあったな。
Cyrix 5x86のキャッシュON/OFF制御コード解析してるんだが
write_cyrix_reg(u_char reg, u_char data)
{
outb(0x22, reg);
outb(0x23, data);
}
これだと0x23のDMAと競合しないのかね?
98でも動くara5x86.exeを逆汗しても同じようなコードが存在するから
間違ってはいないと思うのだが。
>>365 regの値を見てキャッシュ制御とDMACアクセスを切り替えるという
涙ぐましい努力をしとるのです
おお、ご存知の方がいるとは。
DMAバンクレジスタ(ch2)だから競合しても問題ないだろ。
@wktk.c
#include <stdio.h>
void main()
{
puts("+ +");
puts(" _∧_∧_ +");
puts(" (0゚・∀・) ワクワクテカテカ");
puts(" (0゚∪ ∪ +");
puts(" と__)__) +");
}
フロッピーディスクをフォーマットしたときに書き込まれるタイムスタンプと
現在のハードディスクにフォーマット時に書き込まれるタイムスタンプは
同じフォーマットですか?
いいえちがいます
372 :
デフォルトの名無しさん:2012/10/08(月) 02:05:40.26
プログラムのテスト/編集ツールであるデバッガを起動します.
DEBUG [[ドライブ:][パス]ファイル名 [テストファイル-パラメータ]]
[ドライブ:][パス]ファイル名
テストするファイルを指定します.
テストファイル-パラメータ テストするファイルが必要とするコマンドライン情報を
指定します.
DEBUG 起動後に, ? を入力するとデバッガのコマンド一覧が表示されます.
debug.exe って XP (Vista ?) までは動いてたけど
Windows 7 だと入ってなかった orz
NOP
LOADALL
そんな命令はない
という事になっているんだっけ?
隠し命令だからね
しかも286と386で異なる
ありがとうございます!
13:40頃、ヘリがヘリとしてはかなり高いところ(2000mくらい?)を2機東へ@川越
382 :
381:2012/11/26(月) 22:27:09.61
誤爆失礼
まちBBSか
384 :
デフォルトの名無しさん:2013/01/01(火) 21:10:12.82
あけおめ です
日本語MS-DOSのエミュレータがないかな?
386 :
デフォルトの名無しさん:2013/10/31(木) 13:21:39.00
あるんじゃね
387 :
デフォルトの名無しさん:2013/11/07(木) 02:21:16.24
age
389 :
デフォルトの名無しさん:2013/11/08(金) 15:19:24.67
え、自己レス?
C言語と、どう違うん?
DOSはへっぽこOSやがな
核ミサイル制御はDOSがいい
>>392 8ビットでまともなOSを作ろうとすると、失敗に終わったM-DOSみたいな結果になる。
CP/Mは必要最小限とはいえ8ビット環境に合致してたと思う。
何を持って失敗と言ってるんだ?
396 :
デフォルトの名無しさん:2013/11/10(日) 01:53:00.66
CP/M-86 は失敗だったな
PC98用のWizardlyがなぜかCP/M-86だったのは覚えてる。
CCP/Mは少なくともMS-DOSなんかよりはOSとしての機能を満たしてたな
メモリ64KB、CPU8bit、CPUに仮想メモリ機能なし、
CPUにI/O保護機能なし、CPUにマルチタスク機能機能なし
そんなコンピュータがやっと個人で使えるようになった時代のOSに
何を求めてるんだよ?
その時代だと逆になにもしないほうが優れたOSだよ。
>なにもしないほうが優れたOSだよ。
リソース管理というOSの仕事の根本が理解できないバカ
いや、だからね。
その時代はそれすらもコストの高い処理で
ほとんど一つのアプリが専有状態になるんだよ。
知らないなら口開くなよ。
402 :
デフォルトの名無しさん:2013/11/10(日) 03:18:57.52
管理するリソースは、ファイルシステムがメインで他はおまけ
そうそう、メモリ保護機能もないから
OS含めてシステム全部、
BIOSなんかにも、普通にアクセスし放題だしね。
言っとくけど、メモリ保護機能がないのは
OSではなくてCPUだからね。
CPUにその機能、つまり特定の参照してはいけない
メモリになんかにアクセスした時に処理を奪う機能が
ないから実装しようと思っても不可能。
405 :
デフォルトの名無しさん:2013/11/10(日) 07:34:40.67
CP/MってFATだったっけ
メモリ,I/O保護やマルチタスクがOSの必須条件時ではないでしょう。
OSの必須条件とは、
「そのOSが動作する機器が何であろうと、OSが用意したシステムコールを使えば
どこでも同じに使えるよう抽象化すること」
でしょう。
必須条件
OS?
BASICの間違いでしょう
昔は言語がOSそのものだったよな。
Smalltalkも似たような感じ。
言語の環境がOSになってた。
BIOS = BASIC Interpreter Operating System
>OSの必須条件とは、
>「そのOSが動作する機器が何であろうと、OSが用意したシステムコールを使えば
> どこでも同じに使えるよう抽象化すること」
>でしょう。
珍説発見
OSの定義はあるが、さすがにMS-DOSの時代は
パソコンが高価過ぎて完全な形で実装するのが不可能だった。
パソコンというのは、そもそもパーソナルなコンピュータ。
つまり、パーソルではないコンピュータというものがあり、
昔は、そっちがメインだった。
大企業や政府や軍や大学の、個人では買えない高価なコンピュータ。
そこで作られたコンピュータが、徐々に個人向けに転用されてきたというのが
パソコンの歴史なんだよ。
だから昔の(個人向け)OSが、本来の(非個人向け)OSと大きく劣るのは
それがパソコンの歴史なんだから当たり前のこと。
OSの問題というよりも、そもそもCPUやその他のハードに
コンピュータの機能が不足していた。
OSとモニターの区別も付かない馬鹿がなんか言ってるw
N-BASIC にはあったねmon コマンドとかBASICコードの最初10行程度の行番号を全部 0 にしてみたりとかさ
ディスクBASICってのもあったね。
あれ、ディスクを読み書きできるわけだけど、
ディスクを読み書きしている部分はOS?
でもBASIC環境なんだよね。
不思議な世界だ。
MZ-80 シリーズなんかインタープリタをわざわざテープにロードしていたくらいだし、そうそう SWORD とかあったね、不思議な世界だね
その頃からダイナブックってあるんだな。
東芝がぱくってノーパソの商標にした
dynabook ss001の頃はパーソナルワークステーションだった
F1の鈴木亜久里ちゃんがモデルだったのよね
懐かしいわ
DOS窓からcalc.exeとか起動したときに
今起動したcalc.exeのプロセスIDを知る手段ってある?
このスレ的にはそのcalc.exeは当然DOSプログラムだよね?
そうなるとntvdm.exeにしかプロセスIDは付かない。
「DOS窓」なんだからWin9xだろ
cmd.exeは32ビットコンソールだけど、
仮想86マシンの方は俺は今でもDOS窓って呼んでるな。
もうすぐ7/64へ行くから会えなくなるけど。
cmd.exe
command.exe
COMMAND.COM
MSX-DOS は大盛況のうちに幕を閉じた。
dosプログラムの特徴といえば煩雑なメモリモデルだよね
Win32になってメモリモデルが単純になってよかった
>>432 >dosプログラムの特徴といえば煩雑なメモリモデルだよね
8086のコンパイラによる事情であって、DOS固有のことではない。
CPUが16ビットだったからね。
一つのレジスタで64KBまでしか参照できないのに
それを二つ使って1MBを超えるようなメモリを使うには
どうしても複雑にならざるを得ない。
それを補うのが当時のコンパイラの仕事の一つで
殆どの場合、複雑なメモリモデルは隠蔽されてる。
>それを二つ使って1MBを超えるようなメモリを使うには
>殆どの場合、複雑なメモリモデルは隠蔽されてる。
何か勘違いされてますね
>>435 ほう。それであんた、説明は?
それが言えなければ、ただの難癖。
>それが言えなければ、ただの難癖。
そう思いたいんだろうね
はいはい
セグメントレジスタとオフセットは大部分重なってるのでレジスタ2個使っても1M超えてはアクセス出来ない
>それを二つ使って1MBを超えるようなメモリを使うには
「1MBを超える」って、EMSかなんかを勘違いしてるのかな?
>>434 >それを補うのが当時のコンパイラの仕事の一つで
コンパイラが頑張っても1MBは超えられないよ。
>>434 MS-CのHugeモデルでも1MBは超えられませんよ。
つかメモリモデルってプログラマが指定してたけど隠蔽されてるってどゆこと?
へぇ、なんで1MB超えられないの?
それはMS-DOSが原因なの?
理由言える?
知ったか同士で仲良くお喋りなさい
>へぇ、なんで1MB超えられないの?
8086/88のアドレス空間が1MBしかないから。
そういや64ビットになってメモリモデル復活してるんだよな
意識しないといけないのは、2GBを超えるexe作るなら、だけど
>>444 つまりCPUが原因ってこと?
OSを変えれば直る問題に思えないんだけど?
>OSを変えれば直る問題
馬鹿キター!(AA略
286以降ならA20ラインで1M+64kまでOKだな
HIMEMやVCPI/DPMIといった286/386向けの機能を
DOSに含むかどうかだよな
「CPUが16ビットだったからね。
一つのレジスタで64KBまでしか参照できないのに
それを二つ使って1MBを超えるようなメモリを使うには
どうしても複雑にならざるを得ない。」
という話とはとりあえず関係ない。
パソ通時代にこの手の奴居たよな
まだやってんのか
EMM386.SYS と EMM386.EXE の違いが判らんかった当時
よく知らないけど、なんか下位互換にこだわってあんなセグメントなんて概念になったんだっけ?
PC-E500 シリーズの CPU なんか 8 bit でありながら 20 bit のレジスタ持ってて
1 MByte リニアにアクセスできるのに。
454 :
デフォルトの名無しさん:2013/11/27(水) 13:07:29.06
8088 の悪口はそこまでだ
アドレス専用のレジスタを強いるかどうかじゃねーの
386以降のメモリモデルも
セグメントレジスタで保護モードとか設定できるのに
全部の空間を読み書きできるように反故にしてるOSがあるのは秘密
>>453 >よく知らないけど、なんか下位互換にこだわってあんなセグメントなんて概念になったんだっけ?
想定してたのは64KB以下のコードで64KB以下のデータのタスクを複数動作させるコントローラだろ。
458 :
デフォルトの名無しさん:2013/11/27(水) 14:27:05.80
そうだ!16bitずらしたセグメントレジスタ使えば
64KB以内のアプリは全部リロケータブルに出来るOSが作れるぞ!
俺って天才!
↓
Windows98/2000/XP でも 64KB の壁は残りました
32bitアーキテクチャはiAPX432を準備してたし、8086/88はあくまでコントローラ
良いアーキテクチャと売れるアーキテクチャは違うということだね
286なんて中途半端なものが何であんなに売れたんだ
>>458 NT系ではエミュレータで16bitアプリ動かしてるだけじゃねーの
クロック数の多い方が勝つわ
ずれは16bitじゃなく4bit
>>458 2000 / XP の 64KB の壁って何?
東ドイツのベルリンにあっただろ
>>464 IE4とか5とか6でドロップダウンのリストボックスとかに
選択肢がいっぱいあると64KBで切れてた
>>458 >そうだ!16bitずらしたセグメントレジスタ使えば
プロテクトモードでのセグメントレジスタはそういう機能じゃないよ。
それは単にGUIレベルの設計の問題だろう
1000件でも多すぎるわ→16bitにしとこ
ワードパッドが完全無視されててカワイソス
475 :
デフォルトの名無しさん:2013/11/27(水) 17:46:18.76
なんだ?まだ昔のコンピュータ稼働させてるとこがあるのけ?
今はオトナの時間だ
あめだまはお子さまでもしゃぶってろ
チュパチュパ…
ウッ…ドピュッ!
えらい伸びてるとおもったら。
君ら、若くても30後半だろw。もちつけ
480 :
デフォルトの名無しさん:2013/11/27(水) 18:37:49.05
DOS時代が青春時代だったのはアラフォーか
あらそう。
中高生の頃Windows 95時代なのにDOSばっかいじってたぞ・・・
>>473 そうだ。
WinMeまでの「メモ帳」って64kB以上のテキスト開くと落ちるんだっけ。。
Win95ですら64KB超えた場合はワードパッドで開くか聞かれたんだが
Meは知らんが
っていうか、Windowsにプリインストールされてるものは
昔からデモ版か技術プレビュー用と決まってるんだが。
DirectXやOpenGLのデモだったり、
ネット対応になったり、今はストア対応だろ?
全部デモが目的だからさ。
486 :
i486:2013/11/27(水) 22:15:58.95
3.1の頃からの利用者には、むしろメモ帳の容量制限がなくなっていたことに驚く
2000以降(NT)は全く別のOSですしおすし
パイプで一時ファイル作らなくなったのって
どこから?
DOS/9x系は作る
NT系は3.1からずっと作らない
490 :
デフォルトの名無しさん:2013/11/28(木) 10:10:55.53
DOS窓からcalc.exeとか起動したときに
今起動したcalc.exeのプロセスIDを知る手段ってある?
タスクマネージャで見る一覧みたいなのでよければ
tasklistというコマンドがあるらしい
どこかでみたコピペだな
あっちではDOS窓はcommand.comであって
cmd.exeじゃねーとか
493 :
デフォルトの名無しさん:2013/11/28(木) 11:57:17.66
そうか
ここだったか
いつになくスレ伸び過ぎてマジで判らんかった
>>490 C#だけどAPIでも同じような感じで取れる。
DOSやWin16の場合はntvdmの起動を伴う場合だけIDが返るな。
Win9x系の場合はわからないが確か取れなかったように記憶している。
using(var p = Process.Start(
new ProcessStartInfo(args[0]) { UseShellExecute = false } )) {
Console.WriteLine(p.Id);
p.WaitForExit();
}
496 :
デフォルトの名無しさん:2013/11/28(木) 14:55:03.79
サイズ1byteのちゃんと動作するCOMプログラム作ったよ
RET(C3) いっぱつか
CP/M(8080/Z80)のプログラムを
jp main
ではじめていた場合、
先頭はC3なので間違ってDOSで動かしても暴走しなかった。
76がnop
76はHLT
How many files(0-15)?
英語版のみだったがQuick C And Assemblerを使ってた。.asmを統合環境でコンパイル出来た環境てのはそれまで見たことが無かった。
でも割り込みハンドラーはデバッグ出来なかったような
>>452 80286以上の人はhimem.sysてのもあった
Peter NortonのIBM-PC PS/2向けDOSプログラミング本がバイブルだった当時
専ブラ使ってないひとって50個前のレスにレスする傾向があるよね
>>503 >asmを統合環境でコンパイル出来た環境てのはそれまで見たことが無かった。
TURBO Cでできたよ
統合環境の定義に入るかどうかは知らんが、
スタンダロンのICEなら普通にアセンブルもコンパイルもできたと思うが。
Cならどれでもインラインアセンブラくらい付けてるだろ
そんなことないぞ
>Cならどれでもインラインアセンブラくらい付けてるだろ
ばかじゃねーの?
TURBO Cでは別売りのTASMがあること前提だったかな
>>511 昔を知らない子供なんだから仕方ないよw
PascalといえばTurbo Pascalだが、Microsoft Quick Pascalというのを持っていたな。PC互換機向けのみで日本では発売されなかった。まあ、言語的にはオブジェクト指向のTurboには劣っていたが。
LSI-Cのインラインアセンブラは妙に書きにくかったな。
_asm_c("mov\tax,bx\n");とか。
インラインアセンブラと.asmソースをコンパイル出来ることは違うんだけど
MSのCにはインラインアセンブラ無しの頃もあってだな・・・
>>516 >インラインアセンブラと.asmソースをコンパイル出来ることは違うんだけど
誰かそんな話してるかな?
>>518 統合環境アセンブラであるQuickC & QuickAssember 2.5に対して、インラインアセンブラなら普通にあるだろ的なツッコミがあったので
>>517 MS-C 4.xの頃までかな、5からインラインアセンブラ付いたような。時を同じくして最適化をチョロくしたQuickC 2.0が出た。コンパイラの言語仕様が同じだったとおもう。
その当時のQuickとかTurboはRAMコンパイルが大流行りだった。まだHDDが高価でFDDのみのマシンが多かった時代、
523 :
デフォルトの名無しさん:2013/11/29(金) 23:10:31.25
なんで昔話で議論できるんだろうね
すごいや
スレタイが懐かしのってなってるやん
525 :
デフォルトの名無しさん:2013/11/29(金) 23:14:37.46
今更実機も何もなくて確認しようもないことで議論になるのが滑稽だねって
昔話のスレだから生暖かい目で見てやれよ
>>521 QC2.0にはインラインアセンブラ有ったんだよなw
>>525 ソフトの話題なら実行環境だけじゃん。実機は必須ではないよ。
MSDNでは今でもDOS6.22落とせるはずだからVirtual PCに仕込めば実機の出来上がり。QuickBASICやTurbo C++とかは当時のバックアップがないと厳しいか。
NEC 9801の再現はリアルマシンじゃないと無理か。
>>528 有ったよ
ただし.asmファイルの扱いはQuickAssemberがセットになった2.5のほうだけ
533 :
デフォルトの名無しさん:2013/11/29(金) 23:37:35.51
日本語DOSが欲しい
円馬鹿出ろ流石だな
これ当時のDOS版みたいだな
リリースがそれぞれ89年、91年か
>>533 DOS6.2/VもMSDNでは提供してるとおもう、NECとかIBMとかDR/Novellとか無理かもな
Turbo PascalってCP/Mの頃からあったんだよな。ちょっと驚き。
>>536 Turbo Visionの使える6.0ではない所が微妙に憎たらしいなw
プログラミングではないが、随分前にMicrosoft Word 5.0(DOS版)をMSが無料開放してたことがあるが、もう無いのかな
>>537 CP-M/86とかDOS1.0とかから弄ってた人ってここのスレに居るの?
一時期DOS/OS2 dual 対応時代のコンパイラで遊んでたな。
Win2000のOS/2 subsystemでコンパイラも、
作ったプログラムもちゃんと動く。
DOSが好きどすえ〜
DOS5に付属のQ-BasicなんてのもあったQuickBASIC4.5使ってた俺にはゴミツールでしか無かったが
ベーマガには無料で使えるプログラミング言語として紹介されてたぞQBASIC
>>545 言語仕様はQuickBASICなんだけど、EXE作れないとか、CやMasmで作る自作のQuickLibraryと連携出来ないとか、制約大杉だった
GW-Basicがビルゲイツの頭文字から命名されたってのは本当なのかね
QBasicはWin95の頃まで有ったような気がする、多分、少なくともEditコマンドは有ったから
そういやMS-DOSはver2までは開発環境(アセンブラ等)同梱だったけどver3以降それらが省かれたんだよな…
DEBUG.EXEひとつあれば十分開発可能
>>551 ハンドアセンブルは出来るけど、実用にならんだろ
>>552 Aコマンドがあるのにハンドアセンブルなんかすんの?
QuickBASICから言語機能を取り除いたものがMS-DOS Editorだったな。
edit.comだけで起動しようとしたらqbasic.exeが見つかりませんとか言われた。
MS-DOS EditorとQbasicの導入で、Edlinは無くなったんだっけどうだっけ
>>550 その後Windows時代になるとSDKかDDKの一部として無料配布されたような。masmの386版とか。更にその後はSDK/DDKがMSDN会員限定になったと思う。
エクテンダーはスレチですか
未来戦士エクステンダー
DOS Extender時代の香り漂うOpenWatcom C++
あの時代のクロスコンパイラが動態保存されてるような感じ
>>556 edlin、XPには入ってるよ。
7はうちのは64だから知らないけど、32には付いてるんじゃね?
Windows7 x64 Ultimateにはeditもないな。x64環境でWin16アプリ起動しないのは知ってたけどDOSアプリも窓で起動しないんだっけ?
しないよ
x64のlongモードが仮想86モードをサポートしてない
DOSBoxが必要
>>562 Vistaにはedlinもeditもあるな
使い道ないけど
そうかedlinが付いてたのはVistaまでか
Edlinとか、ある意味拷問みたいなエディタだわな、DOS全盛期でさえconfig.sysの編集程度にか使えなかった
cp/mのedと比べると使いやすかった(笑
CP/Mのは知らんわ、そんなに酷いのか
バッチファイルから呼び出して自動で編集させたり便利な使い方ができた
昔使っていたDOS開発ツールが多分どっかのCD-Rにまとめてコピーして保管してあると思うから引っ張り出してみるかな
>>569 ラインエディタはカーソル移動しなくて良いから慣れれば悪くは無いな
edlinの行編集は今のコマンドプロンプト以下だけどね
>>571 sedの1行づつしか実行できないやつだと思えば
ああ知ってるよ
昔はedとviを選べたた時期があったね
今でも選べるだろ、つーかexと勘違いしてね?
>>574 そのコマンドプロンプトに編集機能がついたのはDOS5付属の常駐プログラムDoskeyが最初か
edit/Qbasicの登場もDOS5の時だな
doskey以前はhistoryとかki-shellとか使ってたな。
MSDN会員ダウンロードにはWin3.1系統とDOS6がまだ有った。QB45もVB2も3も有った。しかしVB For DOSが見当たらない。QC20も25もC6も無い。
>>580 それフリーウェアだっけ、雑誌付録のフロッピーとかに入ってる
MS-DOS 4.01にはdosshellっていうマルチタスクもどきのGUI(アプリケーションローン茶みたいなの)がついてた。
実行中のDOSアプリを終了せずに別アプリに切り替えが可能だったんたけど、邪魔ですぐ外したのを覚えてる。
PC-DOS4のほうにはなかったかも知れない。
>>581 PWBとMicrosoft BASICはないのか、あとフォートラン
NEC PC9801用のハード固有のことやBIOSプログラムの扱い方を解説した分厚い通称青本てやつを持ってたひと挙手!
>>586 Programmers Works Benchという、Quick系列とは微妙に違うエディタ
インタプリタ機能のないMS-CとかMS-BASICに付いてた。
>>587 思い出した!あったあった。
でも周りはみなコマンドラインでコンパイルしてた。おれはその頃MSの最適化コンパイラ使ってなかった。
MS-C ver.6.0a PC-98用が手元にあるけど、readme.docの制限事項で
CodeView:
「PRINT.EXE を常駐した状態では, マウスのダブルクリックは, 利用できなくなります」
Programmers Works Bench:
「MS-DOSシステムディスクに含まれる PRINT.EXE を常駐させた状態でPWB を利用することはできません」
と書かれてる。print.exeって相当悪いことしてるんだな・・・と思った。
で、print.exeって何者?NEC MS-DOSの付属物?
常駐プログラムの悪い見本
そのPWBをXPのDOSプロンプトで走らせようとすると・・・
WARNING: This Microsoft product has been tested and certified
for use only with the MS-DOS and PC-DOS operating systems.
Your use of this product with another operating system may
void valuable warranty protection provided by Microsoft on
this product.
<press any key to continue>
と言われる
MSDNサブスクライバーにあるDOS関連は、DOSとQB45、masm 6.11
これで全てのようだ
DOSアプリから見ると、NT5.1や5.2のDOSもどきはバージョン幾つに見えるんだろうか
XP(NT5.1)ではDOS5.5、見せ掛けで5.0だな
そう
そしたら何とUpgrade版との事で、元DOSがないとダメとか
なので一旦F3で抜けて、手作業でfdiskとformatしてみる。俺の記憶では確かこれでアップグレードを騙せたはず
Format c: /s
そういえば、MS-DOS 6.xは、upgrade版しか、市販されていなかったような。
でも一旦Cドライブを起動可能にしてしまえば自分自身を同じバージョンでインストールできるという裏技
今のマシンでは耳かきのような200MBディスクを充てたがDOSには広すぎる
しまった、VMWareとはいえ、CD-R読ますのにmscdexとか組まないといけないんだ。その前にCDROMドライブのデバドラどうすんだっけ
DOS CD-ROMで、検索すると幸せになれるかもしれません。
CDは手持ちのドライバMitsumiもGoldstarもだめで、後のWin95のMS-DOSモードで使われてたOAKっていう汎用ドライバで動いた。久しぶりに真面目にeditコマンド使ったわw
ちなみにDOS6.22の日付は、94/5/31。Win95の前の年なんだね
ネットから入手した単品ファイルをどうやってDOSの中の人に伝えるか、という試練もあった。仮想フロッピーのイメージ作るソフトが無いと何も出来ない。
WFW3.11インストールしたら一分と掛からなかった、軽過ぎ
けどTCP/IPプロトコルは何処から入手すればいいのかもう覚えてない
英語?
608 :
デフォルトの名無しさん:2013/12/05(木) 08:26:54.99
仮想マシンでのDOS運用はファイルの持ち込みが不便だな、USBも無いし、VMware Toolsも適用除外だし。昔はフロッピーがその役目をしてたけど今はそんな物もないし。仮想フロッピー必須だな
あとは
VHDで数十MBのHDD作ってやりとりとか
Win3世代以降なら、さらっとiso作ってCD-ROM扱いとか
Win/Vなんて捨てちゃったな
もったいない(w
Win/VはWFWを日本語化できる点では素晴らしかったが、JPモードでのフォントがしょぼくて嫌だった。
MS-DOS/Vのフォントよりも酷かったからな
せめてPC-DOS/Vくらいの綺麗なフォントじゃないと
JS上のx86エミュって1年くらい前にも話題になってなかったっけ?
Javascriptで書いてもCやその他の言語で書いても労力的に大きな違いがあるとは思えないし、
x86のエミュレータなんて珍しいものではないし、Javascriptで書いてるのに意外と実用的な
速度で動いてるみたいな話であれば偉いのは実行環境のほうだし、何がスゴイんだかマジわからん。
618 :
デフォルトの名無しさん:2013/12/05(木) 16:48:24.65
v8で動かしたら速いんかな
そんなことするなら普通にVMでいいし
JSがインフラとして一歩ぬけ出た
パフォーマンスは後々改善していけばよい
>>617 >何がスゴイんだかマジわからん。
無意味なことへの労力がすごいんじゃね
スゴイと思う奴がいるなら無意味なことではない
「すごい」ってのは個人的感想なんだから
他人が感じた「すごい」をいちいち理解してやる必要はない
記事中で「スゴイ」と言っているのは以下の二点
・OS単体をエミュレートするものでなくx86をエミュレートするものなので、いろんなOSを動かせる
ところがスゴイです。
・JavaScriptでなんでもできるスゴイ時代になってきましたね。
x86エミュレーション自体は目新しいものではないし、この例をもって「JavaScriptでなんでもできる」は
言い過ぎだと思う。
結論としては、この記事の「スゴイ」に私は同意することができません。
XMLみたいな立ち位置に持って行くんじゃないかな
せめてWindows7でも稼働させたならすごいがDOSとか簡易なCUIを動作させるくらいなあ
>>625 そこまでできたらインテルに潰されるじゃねw
DOS用のLINK.EXE(ver 5.10)を引っ張り出したんだが、
起動するといちいちフロッピーを確認に行くようなんだけど対処法ある?
昔なんかやって止めた記憶があるんだけど思い出せない。
なにかする、といえば
98で使えるようにint24だかの致命的エラーハンドラがどうのとか
PATHにA:が含まれてないかとか、そのくらいしか知らん
それこそWin95以降のRecentとかの話じゃないだろうし
command.com=C:
みたいな環境変数なかったかな
>>629 config.sysに書くcomspecとかだったような
アプリがメモリ食い過ぎてコマンドシェル領域潰してしまった場合に、アプリ終了後にどこからcommand.comリロードするか、みたいな指定だとおもう
link.exeを起動するとなのか終了した時なのかで違ってくるかもな
起動するとです。
>Object Modules [.OBJ]:
これが出た時点で空のフロッピーユニットからガッと音がする。
link /? でhelp出してもやっぱりでる。
OS/2とデュアルサポート時代のバージョンなのでその辺が影響してるのかな。
ちなみにWindows2000のOS/2サブシステムで動かすと音は出ません。
rmdrive a:
>ガッと音がする。
どこかでぬるぽしているに違いない
win32で動くdos用link.exe(Lnk563.exe)が見つかったのでそっち使います。
お騒がせしました。
スレ的にはDOS版使わないとw
昼休みの話し相手が居て良かったぬ
超省メモリ設計を認証かなにかと勘違いするお子さまはお呼びじゃない
Lnk563.exeはDOSエクステンダー対応のようでDOSXNT.EXEがあればDOSでも動きまする。
まあ、386以降とか制限は付きそうだけど。
Win3.1用のリンカーとDOS用のリンカーって互換性有るんだっけ?どっちもMZ形式のEXE吐くんだよね
Win3.1のexeは、MZヘッダーからはじまるDOSから起動された時用とNEヘッダーからはじまるWindows用の
二本立てだったと思う
ああ、This program requires Microsoft Windowsってスタブの部分か
仮想デバイスドライバのLEフォーマットは、.386も動的ロードが可能な.vxdも一緒なんだっけ?この当時の仮想デバイスドライバは片手間に練習した程度なので良く分かってないんだけど。
>>640 .defの有無でDOS(MZ)用かWin3.x/OS2用かが決まる
.defの記述でWin3xかOS2かSTUBに何を使うかとか指定できる
MS版OS/2がまだ残ってた時代か
今思えばWindows MeやVistaどころではない恥部みたいなもんだな
90年頃のlink.exeだと、/QオプションでQB45用のライブラリ生成するオプションがあったな。なんでlib.exeではなくlinkの仕事なのか不思議てはあったが
だってあれ、インタプリタでイメージ読み込んで実行できるんだからDLLみたいなもんでしょ>QLB
そうだ、そう言えばQLBはインタプリタ環境の物だった。EXE生成時は使わないのか。
QB45の当時はWin3の前夜でまだDLLみたいな知識は無かったしな
所でQBはPC互換機版には1~3も有ったんだけど、使ったことある人居るのかな
最初はQLBも無かったらしいから、行番のないGW-Basic程度だったのかな
P-CODEを生成するオプションがあったよね
QBやVB、C++でも作れてたみたいだけど用途や仕組みが良くわからなかった
QBは後に登場するVB以上に革命的だった
GWBasicのマシン語プログラムロードよりもクロス言語開発が楽になったし。事実上、使えるステートメントを無限に拡張できる最初のBasicだと思う。
テキスト座標指定するQBのlocate文て、GW-Basicと同じrow, col指定だけど、これって9801版のQBも同じ仕様だっけ?
だとするとN88とは順番逆ってことになるけど、9801のN88ソース移植する時どうしてたっけ
N88とはそもそも基本的なところで互換性のない文法が多すぎて、フツーに全面書き換えだった
そのうちめんどくさくなってdeclare sub N88LOCALE(x%, y%)とか作ったな
中学生の頃
NEC版QBはMSの標準Basic仕様とN88との板挟みだったわけか。
確かQB自体はGW-Basicを行番付きのまま読み込んで実行できるのも謳い文句になってたしな。
>>650 QBって、ネイティブコード吐かずに常にP-Codeかと思ってたけど違うの?
ネイティブコードを吐けるBasicは32bit版のみになったVB5からじゃないのかなあ。
>>655 QBはネイティブコンパイラとインタプリタのデュアル環境で
MS-BASICはネイティブコンパイラ専用。
VB for MS-DOSもネイティブコンパイルできたぞ。
MS-Basic7.1ってのを数回触った事があったけど、使い道が全然思いつかなかった。GWやQBみたいなテキスト画面制御程度のステートメントさえ全滅だったような。
何か自前のライブラリを当てないと画面もうごかせないのかな、それともまさかのAnsiエスケープシーケンス使え、だったのか、どこかにちゃんとMS謹製ライブラリが居たのか。
そうか?QBの上位互換だった気がする
int 21hができたり、テキストベースのGUIライブラリやTrueTypeフォントの描画ルーチンが付いてきた記憶がある
くっそ遅かったがw
MS Basic Compiler 7は劣化Cに成り下がって面白みがなかった
開発環境も使いにくいPWBになってしまったし
QBまではありだな
QB > 僕と契約して・・・
VB For DOSは出た時話題になったが、既にWin3.0メインで使ってたからスルーしたな
Basicはお手軽に使えるから良いのであって、大掛かりなアプリ開発するのにBasicわざわざ使うアホは居ないということだ
PWB付き大型のBasic7て、どういう層をターゲットにした製品だったんだろ
お手軽Basic派はQB45、大型案件はC/C++だろうし、位置づけ微妙
その中間層をねらってたりして?
# MSは、いろんな意味で、BASICには力を入れているから、売れる可能性にかけているだけかも。
今のVisual Basic.NETはBasicたる劣勢要素が殆ど無いいわばC#の双子兄弟みたいになったけど、当時のBasic7は性能的にはどうだったんだろう。Cと変わらない、なら価値はあったのかも知れないけど
もっともC#/VB勢は、MFCより遅いんだけどねw
DOSの頃のBASICにはON EVENT GOSUBやON ERROR GOTOというステートメントがあってだな
(例外処理っぽいのがintしか無い環境で、各ソフトが勝手に割り込みハンドラを書き換えるわけにもいかないから)
全部のステートメントの間にトラップのためのチェックコードが生成されてた
なので何も考えないとCの倍遅い
でも、OFFると、C並の速度は出てた筈
Cコンパイラの方も相応にしょぼかったし
というかだ、16ビット環境はセグメントがあるせいでポインタ演算は効率悪かったんで
C言語というのはそんな速い言語じゃなかったw
スピードが欲しければアセンブラ一択ですよ
>というかだ、16ビット環境はセグメントがあるせいでポインタ演算は効率悪かったんで
>C言語というのはそんな速い言語じゃなかったw
プw
文系は所詮こんな程度w
ラージポインタは使ってもヒュージポインタを
ぶん回すようなまねはあまりしなかったな
BC7の頃は既に386が流通してて、
巨大なデータ配列をいじりたいならDOS/Extenderだった
VCPIとか使うとI/O遅そうなイメージ
当時のPCの場合プロテクトモードの
オーバーヘッドはそれなりにあったのだが、
ソフトEMS使ってるなら普通にDOS使ってるつもりでも仮想86の配下
エクステンダーってint21h DOS APIは一瞬リアルに切り替えるとかして互換性保ってたとおもうけど、他のbios APIていうか汎用的なint86コールもフックとかしててそのまま使えたの?
むしろ問題はEMS用にISAやCバスに遅いメモリをつんでた場合で、
これをメインメモリで使い出すとスピードががた落ちしていた
メモリカードバスのメモリなんてもう最悪
>>672 DPMIしかしらないけど、BIOS系の代表的なのはフックしてたよ
それ以外は一度仮想86に変移してから呼び出すことになる
>>674 フックしてプロテクトモードのまま動いてたの?もっともDPMIだと割込ベクターだけフックすれば、リアル前提のBIOSルーチンそのまま動いちゃったりする気もするけど
むしろ、ほぼ全て(EMS関連とint2F関連以外)は
割り込みでプロテクトモードになったら、すぐにスタックを書き換えて
リアルモードでの割り込みハンドラの指すアドレスに戻るようにして
すぐに仮想86に戻るようにしていた
特別な処理が必要になるのは、これらの他はDMA関連のI/Oポートくらい
こいつらはUMBやHMA(FFFF:部)も含め、物理アドレスとは一致しなくなるので
外に出すアドレスを細工する必要があった
あ、あとA20のON/OFFも対応する必要があった
VCPIやDPMIでも微妙なところはカバーできないので、
結局DOSエクステンダーのランタイムはなくならなかった
いとしの仮想86
なぜにx64のlong modeからなくなっちゃったの
>>677 そもそも、それらは仮想86ドライバ上でDOSエクステンダを動作させるための規格
なくなるわけないだろ
VCPIなんか、「LDTやるからてめーでやれ」だし
DOSって、レトロを楽しむ以外に今は何かに使われてるの
機械制御とかで使われてるんじゃないの?
ああいうのって画面いらないし、ネットワークもいらないし、
単に機械を制御できればいいだけだからシンプルなOSでいいんだよね。
マイコンでもいいぐらいだけどさすがに少しきついだろうということで
DOSぐらいでちょうどいい。
未だにPC-9801使ってるとこもあるんだろうな
俺の通ってた大学では実験室でPC9801使ってたよ
実験用の装置の動かすプログラムがBASICで組まれてた
マルチスレッドに対応したDOSってあるの
アプリが独力でマルチスレッドしてた
DOSじゃないけど同時代だと、
コンカレントCP/MやOS/9-68000とか対応してたな
マルチスレッドはないけど、マルチタスクはできた
ユーザーが明示的に切り替えないといけなくて裏で勝手に動けたりはしない
>>687 このソース、どう読めばマルチスレッドになるの
f_1(); // 温度センサ値取得/表示
がいっぺんに
[温度センサの値取得]→[値表示]→[ウェイト]
をせずに小さい処理単位で返ってきて、次の
f_2(); // 圧力センサ 〃
に処理を渡せるから、人間からは
f_1(); // 温度センサ値取得/表示
f_2(); // 圧力センサ 〃
f_3(); // 加速度 〃
が同時に動作しているように見える。
マルチスレッドではなくマルチタスクだな。
俺には単なるサブルーチンの逐次処理に見える
まるちさぶるーちん
これはMS-DOS時代の組み込みでよく使われた手法。
MS-DOSの常駐プログラムとかはもっとマシな方法だと思う。
マルチスレッドのない環境で、処理を小分けにするっていう実装テクニックか。それなら分かる。
タイマー割り込みでバックグランド処理を実装してたな。
InDOSフラグ見てファンクションリクエストを呼び出し中なら
次の割り込みを待ってたけど、
逆にバックグランドがファンクションリクエストを呼び出し中なら
処理を譲れないから、フォアグランドの処理がカクカクになる。
DOSのPRINTコマンドの使えなさを覚えているなら
どんなものかわかるだろう。
print.sys と置き換えて使ってた気がする
Undocumented DOSっていう洋書には随分世話になったな
Interrupt Listもな
Undocumented DOSはもうずいぶん前に売ってしまったが、
Interrupt Listは場所も取らないことだし、今でも記念に取ってある。
あと、「MS-DOS完全活用法」とか「IBM PC & 80286のすべて」なんかも
ついつい捨てられなくて今でも目の前にあるよ。
DOS時代、テキスト画面制御するのにテキストVRAM直接アクセスは常識だった。
負け組Ansiエスケープシーケンスは論外として、画面BIOSでは4.7MHzの初代機でモッサリだったので。
テキストVRAMは、初代機MDAのVRAMアドレスと属性がCGA以降と違ってたので、実行時判断も必要だった。
同じ要領でNEC-9801にも応用出来た。
DOSコールによる文字出力だと、2バイト半角文字が二重に出されたりしたのを覚えてる。
SJISと被る1バイト記号を出そうとしたら、まとめて出力すると漢字になるけど1バイトずつ出すといけたり。
703 :
【大吉】 :2014/01/01(水) 09:15:04.39
DOSプログラミングの運勢。
704 :
【吉】 :2014/01/01(水) 09:27:46.76
>>703の運勢
我が家のPCの消費電力
以前X86のLDSやLES命令をあまり見かけないという話が出てたが、
制御系の命令を除いたら、ENTERじゃないかと思う。
元々はPASCALの様な関数のネストが出来る言語向けの機能なのだが、
Delphiでも使ってくれてない。
enterは第2オペランドの意味がよく分からん。保護が効くわけじゃないのに。
こんなふうにLevel2FuncはLevel1Funcの変数にアクセスできる。
Level1Funcのスタックフレームのベースポインタを
Level2Funcに渡しているのでそれが可能になる。
procedure Level1Func(x : Integer);
var
z : Integer;
procedure Level2Func(y : Integer);
begin
writeln(x, y, z)
end;
begin
z := 222;
Level2Func 999;
end.
<ローカル変数>
<level 2 bp>
<level 1 bp>
<bp 復元用> .. Level2FuncでBPの指す位置
[return address]
[y 引数]
<z ローカル変数>
<level 1 bp>
<bp 復元用> .. Level1FuncでBPの指す位置
[return address]
[x 引数]
スタックはこんな感じになるので、Level2Funcでは
mov bx, [bp-2]
mov ax, ss:[bx-4]
でaxにzの値を取得でき、
mov ax, ss:[bx+4]
でaxにxの値を取得できる。
enter ローカル変数サイズ, 2
いっぱつで
<ローカル変数>
<level 2 bp>
<level 1 bp>
<bp 復元用> .. Level2FuncでBPの指す位置
の処理をやってくれる。
2番目のパラメータが0の場合は
push bp
mov bp, sp
sub sp, ローカル変数サイズ
の処理だけになるのだが、
この場合、push, movで処理したほうが速い。
詳しい説明さんくす
delphiは素直に関数の最後の引数で1レベル上のebp引き渡してるね
LEAはx64から急に使い出した
MOV RBX, offset LABEL なんてやったら
64bitの即値を代入することになって大変だ
使わなかった命令No1はBOUNDだろ
登場したときはすでにINT5が使用済みだったという
nop
in/outのお供でnopは結構使ったかな
途中からjmp short $+2になって、
その次はなにやらどっかのI/O portにダミー出力してた記憶が
fwait
masmは全部の8087命令の前にfwaitを勝手につけてたけど、
いつの間にか付かなくなったな。いつからだろう。
マルチプロセス?
>>714 bound使うとプリンターからハードコピーが
>>714 boundはwin9xで大活躍してるぞ
64bit modeでは廃止になってるしなぁ
fwaitは .8086指定で付く
8087はCPUから独立して直接バスとつながってた文字通りのコプロセッサだった
最近のMASMは .386がミニマムでデフォルトだからダメだな
そういえば8086は微妙に動作が違ってたよね
cxがゼロのとき、loop や rep は 0xffff回ループしてたし
>cxがゼロのとき、loop や rep は 0xffff回ループしてたし
CXが0のときと65535のときでループ回数が同じ? んなわけないと思うがなあ。
ああごめん、0x1000回だな
もいっこたりない、0x10000だ
DOS時代はCPUの差し替えとかやりまくってたなぁ
CPUの判定はこんな感じだったっけ?
8086 push sp; pop ax; sp != ax
186 flags bit 15 == 1
286 MSW 4-15 bit == all 1
386 eflags bit 18 が書き換え不可
486 eflags bit 21 が書き換え不可
cpuid世代 eflags bit 21 が書き換え可能
9801スーパーテクニックに詳しい判別法が載ってたね。
8086と186はpop csで見分けてたような。
>>728 >8086 push sp; pop ax; sp != ax
!!!!なんでだ?
sp+=2される前にスタックに入れられるかされた後に入れられるかの違い
なんで sp+=2 されるんだ
popの動作も sp <- [sp], sp += 2だから
push sp, pop spをペアで使えば大丈夫だ問題ない
ああ、push時は-2だったな
CPUID以前の互換CPUの見分け方は何かありましたっけ?
AMDとかCYLIXとか
>8086 push sp; pop ax; sp != ax
これって万が一、同じ数値がスタックに入っていたって事は無いの?
SP「俺の名前を言ってみろ」
スペシャルスタックポインタ
すっぽん
DOS用のForthおしえて
Delphi始めたんですけど、複雑でわからないんで、Quickbasicに戻りたいんですけど、
もうないんですかねぇ。
Win32で動く互換品でよければ、
QB64(32bit版もある)でいいんとちゃう
>>744 ありがとうございます。
便利なものがあるんですねー。
>>744さんと制作者さんに感謝^^
Cコンパイラを初めて使ったとき、その吐き出したコードの大きさに驚いた。
Hello, worldが2kBくらいになって出てきたから。
アセンブラなら
mov dx,label
mov ah,9
int 21h
ret
label:
db 'hello, world.',13,10,'$'
たった24バイトで作れるのに。
当時まだFDD2台だったが、こりゃHDDが必要だなと感じたよ。
スモールモデル: コード64kB データ64kB
(8bit環境から見ると)全然スモールじゃないやん・・・
8080でもコードとデータでそれぞれ64KBのメモリ空間持てるし大したことではない
>>748 8080 はコード・データ他スタックもみな共用での 64KB だ
>>751 8080にMMUのようなものは内蔵されていないからね
IOポート番号を16bit とれるようになったは Z80 からだね
スモールにしろタイニーにしろ
それを超える範囲のメモリにアクセス出来ない訳じゃない
単にセグメントディスクリプタのデフォを適当に初期化してくれるだけ
>>754 それでどうやって
>>748 のコードセグメントとデータセグメントをそれぞれ別に64KB確保できるようになるのか?
スタックセグメントもデータセグメントとは別に64KB確保できるな
8080にセグメントの概念などない
アクセスの種別によってメモリ空間を分けることは可能だし、それをセグメントと呼んでも差し支えない。
後期のZ80 BASICマシンのメモリレイアウトなんて
ほとんど曲芸状態だったよな
いや全然
>>758 理屈じゃなく過去の具体的な実装事例は?
>過去の具体的な実装事例は?
そんな話誰もしてないだろ
Z80で64kbite BASIC-ROM、64kbite RAM、64kbite VRAMなパソコンだと
コードとデータの分離や切り替えが効かないとはじまらんだろ
データバスをチェックとかわけわからんがな、all 0 だったらどうするつもり?
>アクセスの種別によってメモリ空間を分けることは可能だし、
おいおい、データがきてからアドレスバスを変えるのかよ?なんのためにあんだけのマージンとってんだ?
>データバスをチェックとかわけわからんがな、all 0 だったらどうするつもり?
>おいおい、データがきてからアドレスバスを変えるのかよ?なんのためにあんだけのマージンとってんだ?
なんだ、タイミングチャートも見れない素人かw
>>763 >Z80で64kbite BASIC-ROM、64kbite RAM、64kbite VRAMなパソコンだと
>コードとデータの分離や切り替えが効かないとはじまらんだろ
バンク切り替えやI/OにVRAM置いたり色々実装はあったが、コードとデータの分離をやった例って聞いたことないわ。
Z80は命令も多いし外部回路でM1サイクル監視するにしてもコードの4バイト目まで判定するのは骨だろう。
コードとデータが分離できてりゃ
バッファオーバーフロー脆弱性なんか
起こらないだろうね。
そんなもんあんの?
>>767 意味知らないで「バッファオーバーフロー」とかって恥ずかしくない?
石頭ハード屋の妄想はつまらんわ
>>768 意味なら調べればよかろう?
http://www.ipa.go.jp/security/awareness/vendor/programmingv1/b06_01.html > バッファオーバーラン(注1)
> バッファオーバーラン問題は,C 言語やC++ で書かれたパッケージソフトウェアが
> 抱えるセキュリティ脆弱性の中で最も頻繁に報告されるものの一つである。
>
> バッファオーバーランとは元々,コンピュータのメモリ上の領域(バッファ)よりも
> 大きなデータが渡されているのにプログラムがそれを見逃して領域あふれ(オーバーラン)が
> 起きてしまうことを指す。ところが,こうした欠陥を《うまく》悪用すると,
> そのプログラムのメモリ上に任意のマシン語プログラムを送り込み実行させることが可能になる場合がある。
> 標的プログラムが高い権限で動作するものだった場合,その権限を乗っ取って対象コンピュータを意のままに操ることができてしまう。
>
> (注1・「バッファオーバーフロー」とも言う。本稿では「停まるべき箇所で停止できなかった」
> というニュアンスが強い「オーバーラン」の語を主に用いている。)
それで君はなにがいいたいのだ?
>>770 >> バッファオーバーランとは元々,コンピュータのメモリ上の領域(バッファ)よりも
>> 大きなデータが渡されているのにプログラムがそれを見逃して領域あふれ(オーバーラン)が
>> 起きてしまうことを指す。
自分で引用してて↑の内容がコードとデータの分離とは関係ないって理解できないのかw
馬鹿には無理
「ハードに比べたらプログラミングなんて子供の遊びレベル」と
うそぶく老害は昔からどこにでもいるが、こいつもその一人だろう。
生半可な断片知識で専門外の領域にしゃしゃり出てきて大恥かくのも毎度のこと。
>「ハードに比べたらプログラミングなんて子供の遊びレベル」と
>うそぶく老害は昔からどこにでもいるが、こいつもその一人だろう。
よほどのコンプレックスがあるらしい
普段誰からも相手にされず、寂しさと承認欲求のあまり
ここに来てみたんだろうが… 哀れなもんだなw
>>774 で、773の最後の行は否定しないのな(笑
>>773 よくわからんのだけど「生半可な断片知識で専門外の領域にしゃしゃり出てきて大恥」って
>>767=
>>770 のこと? どうみてもハードもソフトも分かってない風だけど。
>>777 必ずしも 専門=エキスパート じゃないけどな
どんなに落ちこぼれであっても、ある分野で飯食ってりゃ一応専門家
>>767 6809
スタックを分離するだけでわりと十分
バッファオーバーフローとスタックは直接関係ないので間違い
理屈も語れない馬鹿がなんか言ってるなw
>>771 コードとデータの分離は関係あるよ。
データ部分の実行を制限するのがNXビット
もちろんこれは比較的最近作られたもの
http://ja.wikipedia.org/wiki/NX%E3%83%93%E3%83%83%E3%83%88 NXビットは、端的に言えば「データの誤実行」を防ぐために用いられる。
そのしくみは、メモリをコード(プロセッサ命令)領域とデータ領域とに分離し、
データを配置したメモリ領域にあらかじめ特別な印(属性)を付与することで、
この領域のデータを実行しないようにする(実行を試みた際に例外=エラーを発行する)ものである。
典型的には、バッファオーバーラン攻撃(後述)等に代表される、ヒープやスタック領域等に
置かれたデータを破壊ないしは書き換えて任意のコードを挿入し実行を誘う攻撃を、
オペレーティングシステムとCPUの協調により保護するために用いられる機能である。
その機能自体は、汎用機やワークステーション等の分野では既に特に目新しいものではなかったが、
パーソナルコンピュータ用に最も普及したIA-32/AMD64アーキテクチャにおける実装は比較的最近の出来事であり、
最初に実装したAMD64系列が搭載したものを"NXbit"と呼称したため、一般にはこの名称が普及した。
ノイマン型アーキテクチャのコンピュータでは、プログラムをメモリ上にデータとして読み込み、逐次実行する。
メモリを読み取った際それがデータであるかプログラムであるのかを、単にメモリ上のデータのみをもって判断することは、
ノイマン型では本質的に不可能である。バッファオーバーラン(バッファーオーバーフロー)等と呼ばれる攻撃は、
ノイマン型コンピュータのこのような性質を悪用して行われる。
>>783 バッファオーバーラン攻撃って目的が任意のコード実行とは限らないんでトンチンカンなこと言ってますよ
>>784 え? だからなに?
バッファオーバーラン攻撃の目的が任意のコード実行だ。とは
ひとことも言ってないけど? そんな話してないけど?
コードとデータの分離の話。
コードとデータの分離なんてされてないのが普通。
>コードとデータの分離なんてされてないのが普通。
ハーバードアーキテクチャも知らない人か…
>>785 > え? だからなに?
> バッファオーバーラン攻撃の目的が任意のコード実行だ。とは
> ひとことも言ってないけど? そんな話してないけど?
↓を引用しててよく言うww
> 典型的には、バッファオーバーラン攻撃(後述)等に代表される、ヒープやスタック領域等に
> 置かれたデータを破壊ないしは書き換えて任意のコードを挿入し実行を誘う攻撃を、
> オペレーティングシステムとCPUの協調により保護するために用いられる機能である。
>>786 今のパソコンはハーバードアーキテクチャではなくて
ノイマン型アーキテクチャですよ。
なにみんなと違うコンピュータの話してるのさ?
お前の話はみんなと違うコンピュータの話だったんだな。
通りでずれてるはずだ。
>>787 引用した先が言っていることは、
俺が言っていることじゃないし。
>>788 > 今のパソコンはハーバードアーキテクチャではなくて
> ノイマン型アーキテクチャですよ。
いつからパソコン限定の話になったの??
>>789 お前が引用したこと。
関係ないなら引用しなければ良かっただけ。
>>790 じゃあ現在使われている
ハーバードアーキテクチャを使った
ものを言ってみて。
それwikipediaじゃんw
知らないから調べましたってか?w
>>792 Wikiも確認しないで言ってんだ?
「じゃあ現在使われている
ハーバードアーキテクチャを使った
ものを言ってみて(キリッ」
笑w
wikipediaをwikiって略す人は無知を晒してるようなものなので恥ずかしくないのならwikiと言い続けたらいい
「wikipediaをwikiって略す人は無知を晒してるようなもの」と言って満足してる人は本質が見えない人。
>>796 >wikipediaをwikiって略す人
って誰のこと? 世の中に存在する wiki ってwikipedia だけだとでも思ってるのかな??
>>795 いいから、お前がなんのコンピュータの話を
していたのか書けよw
こっちはZ80やx86などのありふれたフォン・ノイマン型コンピュータの
話をしている。お前は違うんだろう?
当然そのコンピュータの話を続けられるんだろうな?
まあ無理だろう。
ということで当時はコードとデータは分離されていないのが一般的。
>>763 > Z80で64kbite BASIC-ROM、64kbite RAM、64kbite VRAMなパソコンだと
> コードとデータの分離や切り替えが効かないとはじまらんだろ
ということで当時はコードとデータは分離されていないのが一般的。
※ レスを返すまでの時間が短い=必死でリロード
レスを返すまでの時間が長い=他にやることがあって見てない。
>>799 > いいから、お前がなんの
> 現在使われている
> ハーバードアーキテクチャを使った
> コンピュータの話を
> していたのか書けよw
聞かれるまでもない話だし、具体例なら沢山ありますよ。 >Wikipedia
> こっちはZ80やx86などのありふれたフォン・ノイマン型コンピュータの
> 話をしている。お前は違うんだろう?
お前は狭い範囲の話をしてるつもりなのね、了解。
> ということで当時はコードとデータは分離されていないのが一般的。
お前の狭い範囲での知識ではそういうことですね、了解、了解。
>> Z80で64kbite BASIC-ROM、64kbite RAM、64kbite VRAMなパソコンだと
>> コードとデータの分離や切り替えが効かないとはじまらんだろ
>
>ということで当時はコードとデータは分離されていないのが一般的。
SMC-70やX1では分離してたけど?
> 800 :デフォルトの名無しさん:2014/02/23(日) 05:14:55.03
> 801 :デフォルトの名無しさん:2014/02/23(日) 05:16:05.66
> ※ レスを返すまでの時間が短い=必死でリロード
> レスを返すまでの時間が長い=他にやることがあって見てない。
ああ、成る程。
知識自慢爺、引っ込みがつかなくなって徹夜かw
>>802 > SMC-70やX1では分離してたけど?
分離されてないよ。
だいたい、ハーバードアーキテクチャじゃないじゃんw
http://weblearningplaza.jst.go.jp/taikei/620/faq/naiyou.html#q1-01 Q1-1
フォン・ノイマン方式とはどのようなものですか?
A1-1
フォン・ノイマンが発表した論文に基づいたストアードプログラム方式のコンピュータアーキテクチャを、
便宜上フォン・ノイマン方式と呼びます。今日のコンピュータには画像処理などの特別な場合を除いて
フォン・ノイマン方式が採用されています。一般的に以下に当てはまるものがフォン・ノイマン方式だとされています。
(1)プログラム内蔵方式であること
命令とデータを同一の主記憶装置内に置く。
(2)線形主記憶装置を持つこと
主記憶装置のアドレスを指定して、その場所に情報を読み出し、書き込む。
(3)命令は逐次実行方式であること
プログラムカウンタに指定される主記憶装置上のアドレスにある命令を読み出して実行し、
終了後にプログラムカウンタに命令語長分を加え次のアドレスの命令を読み出す。
(4)低機能命令を持つこと
加減算などの演算命令や、ロードストア命令などの簡単な動作を行う命令を持つ。
(5)プログラムの流れを変更できること
命令の一部により作られた主記憶装置のアドレスをプログラムカウンタにセットする分岐命令を持ち、プログラムの流れを変更できる。
(6)入出力装置の制御を行うこと
入出力装置を制御して情報を送受できる。
>>805 分離されてるよ。つか、
> だいたい、ハーバードアーキテクチャじゃないじゃんw
データとコードの分離がハーバードアーキテクチャの条件じゃないけど?
>>804 知識ない奴は関係ないところで揚げ足取ろうと必死だなww
>>807 じゃあなんでハーバードアーキテクチャの話したの?w
>>786 コードとデータの分離なんてされてないのが普通だよね
>>808 おうおう熱いこと
まあ血圧測りながら頑張れや、脳出血で逝くぞ
コードとデータの分離なんてされてない
↓
ハーバードアーキテクチでは分離されてる!
↓
データとコードの分離がハーバードアーキテクチャの条件じゃないけど?
面白いなこの流れw
>>813が面白いのは、
「ハーバードアーキテクチでは分離されてる! 」
と言った人と
「データとコードの分離がハーバードアーキテクチャの条件じゃないけど? 」
が同じ人なんだ。
ハーバードアーキテクチャを理解してない馬鹿が面白がってるみたいね。
コードとデータの分離なんて実装のひとつに過ぎないんだけど。
ここまでの話で出たように
ハーバードアーキテクチャだからといって
データとコードは分離されてるとは限らないわけで、
ハーバードアーキテクチャを含めて
ほとんどのコンピュータでは、コードとデータは分離されていません。
分離されてるというのならそのCPUを具体的に言ってみろよ
マイナーか今は使われていないかのどっちかだろうが?
最初からそんなCPUの話はしてないんだよ。
818 :
デフォルトの名無しさん:2014/02/23(日) 06:15:57.54
>>817 > ハーバードアーキテクチャを含めて
> ほとんどのコンピュータでは、コードとデータは分離されていません。
コードとデータで内部バスがキャッシュ含めて分けられてるアーキテクチャなんていまどきのPCのプロセッサ含めて全然珍しくないけどな??
> 分離されてるというのならそのCPUを具体的に言ってみろよ
> マイナーか今は使われていないかのどっちかだろうが?
> 最初からそんなCPUの話はしてないんだよ。
まあ、お前が特殊な話をしてるというのは分かった。
819 :
デフォルトの名無しさん:2014/02/23(日) 06:21:31.74
>>817 >ハーバードアーキテクチャを含めて
>ほとんどのコンピュータでは、コードとデータは分離されていません。
>>793は都合が悪いか英語が読めないかで無視ですね?ww
PICは80年代からあったな
今も使われてるけど
ただしPICで動いてるDOSは見覚えが無い
>PICは80年代からあったな
70年代からあったよ
なら
80年代にはあったな
>>820 >ただしPICで動いてるDOSは見覚えが無い
なら
今までには見たことがないということね
スレタイ嫁
プロセッサコアとキャッシュメモリ
~~~~~~~~~~~~~~~~~~~~~
なるほど、”キャッシュメモリ" の場合はってだけで
メインメモリの話をしていたわけだから
関係ないってことかw
>メインメモリの話をしていたわけだから
ハーバードアーキテクチャ分かってないの丸判りw
>>827 見てる方が恥ずかしくなるからもうやめとけ、爺さん
理屈で反論できないからレッテル貼りで罵倒ww
>>829 どうした? いつも同じ返しじゃつまらんぞ爺
お前が顔真っ赤で草生やし始めた時点で、もう議論とやらは終わっとる
>>825 出典を追加して記事の信頼性向上にご協力ください
要するにMSXにROMカートリッジを差してゲームできるのがハーバードアーキテクチャってヤツだろ
そのROMにコードとデータが混じってたら違う。
で、実際に混じってるので、違う。
・MSXはハーバードアーキテクチャではない
・ハーバードアーキテクチャはコード領域にデータが含まれることを否定しない
元々は、コードとデータが分離しているのか?って
話だったよね。
どっちみち分離してないのか。
>>836 >>747は8bitの話もしてるからおかしな流れではないな
>(8bit環境から見ると)全然スモールじゃないやん・・・
>(8bit環境から見ると)全然スモールじゃないやん・・・
知りもしない8bitの話持ち出した
>>747が馬鹿ってことだね
老害老害と火病ってるのが747かw
ほらもう草生やしやがった
実に分かり易い奴だ
w
ω
ドスコイ
女子相撲部屋の日常を舞台にラブコメ
どす☆こい
848 :
デフォルトの名無しさん:2014/02/28(金) 01:09:36.61
>>847 女子相撲部屋の住人が、MS-DOS(PC-DOS、FreeDOS、、、、etc)プログラミング技術をもって、恋をしようと?
(無理やりすぎるか)
>>848 書き始めてみたものの無理だった
クオリティ高い時のVIPPERならなんとかしたんだろうが
久々にここのぞいたら・・・
>>767 > コードとデータが分離できてりゃ
> バッファオーバーフロー脆弱性なんか
> 起こらないだろうね。
www
スレ違いの話題を数日経ってから蒸し返すキチガイ
DOSファイラーで画像をひらいてるときの夢をみた。 …ああ「FD」…
今でもWinFD使ってる
出射さんのPCにはWinFDがインストールされてたとか
>>851 だって、、
解決してないじゃんwwww
カーソルとショートカットキーだけでファイル、ディレクトリを動かせるから、マウス不要で今でも便利だよなぁ。FD。
DOS時代は、プロンプトが表示されたらfd<return>と打つのが癖だった
Filerは使わずにvzエディタを常駐させてたな
>>857 Linuxでログイン後プロンプトでstartx打つのが
MS-DOSからWin3.1を起動するのを彷彿とさせる
Win7を使ってる今でも、スタートアップにはコマンドプロンプトを入れてる
何と言っても、一日のうちで一番使う道具だからな
もちろん、doskeyや様々な自作ツールがあればこその話だが…
>>860 もっと良いツールに変えたほうがいいよw
明らかに古いじゃんか。
バッチじゃね
コマンドプロンプト(w2k以降のcmd.exe)は、、
例えば3ファイル 001, 002, 003 とあるとして
ren 0* 1*
とすれば 101, 102, 103 にリネームしてくれるが
Linuxのbashでは
mv 0* 1*
としても
> mv: 宛先の `1*' はディレクトリではありません
と返ってきてリネーム出来ない…
864 :
863:2014/03/01(土) 15:39:19.42
ああ、
rename 's/0/1/' 0*
でイケた
>>865 仮想マシンでLinuxを起動して
puttyでつなげるのがいいよ。
>>865 期待するだけ無駄。どうせ
861:「あっdoskey…俺も知ってる昔からある奴じゃんププ、よーし煽ってやろw」
答えた後にレスしてもなぁw
タイプミスばかりする人ならともかく、シェルだけ強化しても
基本的にはあまり意味はない。
例えばワイルドカードの考え方ひとつにしても、
シェルと各アプリが同じ思想で統一されてないとダメだからな。
話はなにがダメかという説明を
>>869がした後だな。
できないようじゃ、ダメダメ言っているだけの無能になっちゃうし。
そりゃ、揚げ足取りに専念するなら楽だもんなw
ドヤ顔で「アイツはダメだな」って言っていれば、
反論した気になれるやつっているみたいだしなぁ。
意見に反論できない時、意見への反論以外の言って(例 お前何中だよ?」
それで反論したつもりになる人とかもね。
つか、そもそも仮想マシンなんて持ち出してくる時点で
本物のDOS使いじゃないのが丸見えだし
>>870 罵倒して煽れば相手がムキになって(本当は自分の知らないことを)
詳しく教えてくれると思うのは小学生の発想だが…
いえ別に教えなくていいと思います。
教えることはないんだな(苦笑)という
流れになることが私の望む結果ですから。
> 教えることはないんだな(苦笑)
すなわち
「教えられることはあるが教えることはない」(=教える必要なし・教えても無駄)
その通りだと思う
教えられることはあるが・・・そのことは証明できない!
くそ、あるんだ! あるんだよ!
信じてくれ!
子供ってつくづくヒマなのね
羨ましいわ
ncurses
struct SREGS segregs;
union REGS regs;
みたいなのって今でも使えるの?
今でもMS-DOSとコンパイラが使えるなら使える
882 :
デフォルトの名無しさん:2014/03/21(金) 03:30:38.13 ID:GtGmhcv1
DOS BASICにはMOUSE命令があるのだが、資料が見つからんかったので、
Disk Basickのmouse.codをコピーして使っていました。
BASICのmouse.codって100hを呼んで初期化するから、何だcomファイルかと思って
ファイルコンバータでDOSへ持ってって拡張子を.comにして実行したら
思い切り固まったっけw
早速ソース見てみた。あの当時の雰囲気が伝わってくる。
「MS-DOSエンサイクロペディア」のDOS開発史と合わせて読むとしみじみ。
びっくりする発見とかは特にないの?
MS-DOSの方は全部アセンブラでよく分からなかったけどWordの方はC。
Wordの方を見た感想としては、ソースが綺麗。俺のレベルではその程度だ…
OOoがパクったりしてなw
ぱくるところなんてもうないだろ。
バグも仕様だったっけ
あれはBIOSの方か、うろ覚え
大文字で書かれてるソースに時代を感じる
いまどきのプロセッサでもマニュアルにはニモニックコードは大文字で書いてるのが普通だと思うし
asmのソースでを大文字で書くのは時代とかあんま関係ないんじゃね
BASICソースがバイナリなのが残念。
このソース読むには当時のIBMPCのBASICが必要だよね・・・
ちょっと頑張りゃデコーダくらいすぐ書けるだろ
デコーダはどこーだ?
GJ
898 :
デフォルトの名無しさん:2014/05/08(木) 23:55:41.41 ID:9ESzLvKO
ディレクトリの区切り文字が '\' なのに Shift-JIS なファイル名とか
正気の沙汰じゃないと思ってましたが、その記事でも
「このような実装をする人の苦労が忍ばれる」
と書かれてますね。
そんなことしなきゃよかったのに。
>ディレクトリの区切り文字が '\' なのに Shift-JIS なファイル名とか
>正気の沙汰じゃないと思ってましたが、
何の問題もないが
使うだけの人には関係ないことですから
Shift JISは頭からデコードしなきゃいけないルールをいまごろになって何か言ってる人?
何故そうなったのかとか一切考えたこともないくせに
自分の方が頭がいいと思い込んでるんでしょ
なんのこといってるのか、さっぱり
シフトJIS自体はそれほど問題でもないんだよな。
問題は、マルチバイトなんてシラネーヨってコードばかり量産しては日本人に押しつけてきた1バイト圏の連中。
受け入れなければガラパゴスなオレオレ規格で終わる訳だが
携帯専用文字がどうたらこうたらといってるのに