アカウント名:
パスワード:
今や組込みすらRTOSが必要なレベルだと32bit系だし、今でも8bit使ってるようなものって、リソース厳しくてRTOSなしだよねぇ。
OS-9/6809 Level1 [roug.org]とか、実メモリが64KBなくても結構動いたようですし。実際、メインRAM領域が62KB程度の富士通 FM-7 [fm-7.com]でも、使おうと思えば結構使えたんですよね。マルチユーザ・マルチタスクで。
しかも、アプリをPascalっぽい構造化BASIC(実際、UCSD-Pのように独自中間コードに変換してて、ネィティブなマシン語にはコンパイルしていなかった)のBASIC09 [syakazuka.com]コンパイラで書いたりとかも出来た。# MMUが使えると、より大きなメモリ空間と、ハードウェアでのプロセス保護が出来るLevel2と言うのもあって、確か768KBの拡張メモリとかも売りだされてた。
こう考えると、カーネルの設計さえコンパクト化できれば、そこそこ使えるものが出来るんじゃないですかね。今時ならばFPGA上にZ80や6809をいれ込んだりも出来るでしょうし、キーボードやディスプレイはUSBでつなげば良いですし。# USBコントローラが別に必要で、FPGAの制御コアが32bit ARMだからそちらを使うと言うのはいかがなものか。と言う展開もありえますが(^_^;
Z80でPIC(position-independent code)で、リエントラントなコードを書くのって難しくない?
# とは云え、PICでリエントラントである事が、OS-9/6809のフットプリントを小さくするのに、どれ位寄与したかは謎。
>Z80でPIC(position-independent code)で、リエントラントなコードを書くのって難しくない?
非常に難しいと思います。出来なくはないでしょうが。githubのZX SpectrumやFPGA上でのZ80を想定したマシン依存部分のコード(の中の定義ファイル)を斜め読みしてると、ユーザ領域は、プロセスごとに1バンク持たせて、CPU側からは固定アドレスにアサインされてるかのように見せようとしてるのではないか?と言う感じがしますよ。プロセスの数が多くなったらスワップアウト/スワップインを行うとか。
#あくまで、十分一寸斜め読みしただけなので外してるかもしれませんが。
># とは云え、PICでリエントラントである事が、OS-9/6809のフットプリントを小さくするのに、どれ位寄与したかは謎。
まぁ、そこは64KBのバンク切り替えのない領域にプロセスを詰め込むには必須だったと思います。(あの時代なら256KBのバンク切り替え可能なメモリがあればお大尽だったので)カーネルも相当モジュール化されてましたし、そこら辺の含めてリエントラントにしておかないとスタックやらデータ領域やら再配置するのが難しかったですから。そうしないと、マルチユーザやマルチタスクを実現しつつメモリを節約するのは困難になりますし。
>>Z80でPIC(position-independent code)で、リエントラントなコードを書くのって難しくない?
> 非常に難しいと思います。出来なくはないでしょうが。
難しいってのは確かだけど、非常にってほどではないかと。PC相対アドレッシングがないってのが最大の問題だけど、固定番地の手続きを呼び出して、スタック上の戻りアドレスすなわち呼び出し側のPCを使うってのが定番テクニックだったと思います。(OSのエントリーポイントとして固定番地の手続きは必須なので、それが若干増えること自体は問題なし)
>Z80でPIC(position-independent code)で、リエントラントなコードを書くのって難しくない?8個あるRST命令の一つを強制すればできなくも無いんじゃないかとRST XXDW $ - JUMP_LABELとかRST XXDB CONDITION_JP_INSTRUCTIONDW $-JUMP_LABELとか前者でRST XXの先でRST命令をJPへ書き換えてスタックの戻りアドレスを一つ前に書き換えでRST命令のアドレスに差し戻すか後者でアドレス計算してからRST XXをNOPに書き換えてから戻れば継続処理できる。初回実行だけど遅いけど(キャッシュが無いCPUだから問題無い)
#これ書いてあったの月刊ASCIIかBit別冊のどれかだけどうろ覚えだなぁ
具体的なことを何一つ書けない間抜けな人は黙ってて
知らないというのは幸せだなあ。
#2714128とは別人だが、知ってるしFM-7の前機種Micro-8使っててマルチタスクでちゃんと使えてたぞ。マルチユーザの方は普通はやらなかったけど、シリアルで端末繋いで動かしてみたことはある。あまり問題なかった。(メモリ内でいろいろやってる分には速度的にも気にならなかった。ふたり同時にディスクにアクセスに行くとちょっと遅かった)知らないのはどっちだ。
「結構動いた」「結構使えた」ってレベルからは遠かったと思うが。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
皆さんもソースを読むときに、行と行の間を読むような気持ちで見てほしい -- あるハッカー
しかし何に使うんだろう (スコア:0)
今や組込みすらRTOSが必要なレベルだと32bit系だし、今でも8bit使ってるようなものって、リソース厳しくてRTOSなしだよねぇ。
つ【OS-9】(Re:しかし何に使うんだろう (スコア:1)
OS-9/6809 Level1 [roug.org]とか、実メモリが64KBなくても結構動いたようですし。
実際、メインRAM領域が62KB程度の富士通 FM-7 [fm-7.com]でも、使おうと思えば結構使えたんですよね。マルチユーザ・マルチタスクで。
しかも、アプリをPascalっぽい構造化BASIC(実際、UCSD-Pのように独自中間コードに変換してて、ネィティブなマシン語にはコンパイルしていなかった)のBASIC09 [syakazuka.com]コンパイラで書いたりとかも出来た。
# MMUが使えると、より大きなメモリ空間と、ハードウェアでのプロセス保護が出来るLevel2と言うのもあって、確か768KBの拡張メモリとかも売りだされてた。
こう考えると、カーネルの設計さえコンパクト化できれば、そこそこ使えるものが出来るんじゃないですかね。
今時ならばFPGA上にZ80や6809をいれ込んだりも出来るでしょうし、キーボードやディスプレイはUSBでつなげば良いですし。
# USBコントローラが別に必要で、FPGAの制御コアが32bit ARMだからそちらを使うと言うのはいかがなものか。と言う展開もありえますが(^_^;
Re: (スコア:0)
Z80でPIC(position-independent code)で、リエントラントなコードを書くのって難しくない?
# とは云え、PICでリエントラントである事が、OS-9/6809のフットプリントを小さくするのに、どれ位寄与したかは謎。
Re:つ【OS-9】(Re:しかし何に使うんだろう (スコア:1)
>Z80でPIC(position-independent code)で、リエントラントなコードを書くのって難しくない?
非常に難しいと思います。出来なくはないでしょうが。
githubのZX SpectrumやFPGA上でのZ80を想定したマシン依存部分のコード(の中の定義ファイル)を斜め読みしてると、ユーザ領域は、プロセスごとに1バンク持たせて、CPU側からは固定アドレスにアサインされてるかのように見せようとしてるのではないか?と言う感じがしますよ。プロセスの数が多くなったらスワップアウト/スワップインを行うとか。
#あくまで、十分一寸斜め読みしただけなので外してるかもしれませんが。
># とは云え、PICでリエントラントである事が、OS-9/6809のフットプリントを小さくするのに、どれ位寄与したかは謎。
まぁ、そこは64KBのバンク切り替えのない領域にプロセスを詰め込むには必須だったと思います。(あの時代なら256KBのバンク切り替え可能なメモリがあればお大尽だったので)
カーネルも相当モジュール化されてましたし、そこら辺の含めてリエントラントにしておかないとスタックやらデータ領域やら再配置するのが難しかったですから。
そうしないと、マルチユーザやマルチタスクを実現しつつメモリを節約するのは困難になりますし。
Re: (スコア:0)
>>Z80でPIC(position-independent code)で、リエントラントなコードを書くのって難しくない?
> 非常に難しいと思います。出来なくはないでしょうが。
難しいってのは確かだけど、非常にってほどではないかと。
PC相対アドレッシングがないってのが最大の問題だけど、固定番地の手続きを呼び出して、
スタック上の戻りアドレスすなわち呼び出し側のPCを使うってのが定番テクニックだったと思います。
(OSのエントリーポイントとして固定番地の手続きは必須なので、それが若干増えること自体は問題なし)
Re: (スコア:0)
>Z80でPIC(position-independent code)で、リエントラントなコードを書くのって難しくない?
8個あるRST命令の一つを強制すればできなくも無いんじゃないかと
RST XX
DW $ - JUMP_LABEL
とか
RST XX
DB CONDITION_JP_INSTRUCTION
DW $-JUMP_LABEL
とか
前者でRST XXの先でRST命令をJPへ書き換えてスタックの戻りアドレスを一つ前に書き換えでRST命令のアドレスに差し戻すか
後者でアドレス計算してからRST XXをNOPに書き換えてから戻れば継続処理できる。
初回実行だけど遅いけど(キャッシュが無いCPUだから問題無い)
#これ書いてあったの月刊ASCIIかBit別冊のどれかだけどうろ覚えだなぁ
Re:つ【OS-9】(Re:しかし何に使うんだろう (スコア:1)
具体的なことを何一つ書けない間抜けな人は黙ってて
Re: (スコア:0)
知らないというのは幸せだなあ。
#2714128とは別人だが、知ってるしFM-7の前機種Micro-8使っててマルチタスクでちゃんと使えてたぞ。
マルチユーザの方は普通はやらなかったけど、シリアルで端末繋いで動かしてみたことはある。あまり問題なかった。
(メモリ内でいろいろやってる分には速度的にも気にならなかった。ふたり同時にディスクにアクセスに行くとちょっと遅かった)
知らないのはどっちだ。
Re: (スコア:0)
「結構動いた」「結構使えた」ってレベルからは遠かったと思うが。