しばしば話題になるHSPOSCMPですけれども、
ちょっと命令一覧をしみじみ眺めてみた感じ、
「データの読み書きに関する命令が無いに等しい」
「できることと言えば、計算の他は簡単な描画や乱数の取得、
キー入力やマウス入力の検出と、あとは一応文字列が使えるぐらい」
「gotoやgosubすら無い。returnが存在しないということは、
おそらくユーザ定義命令やユーザ定義関数も使えない」
「inputは存在しない」「配列も存在しない」
「onclickやonkeyはあっても、returnが存在しないあたりからして、
onclick gosubやonkey gosubは不可」
…正直な話、「これで何をどうしろっていうんだ」という感想しか出ないですね。
質問者さんが言うところの「OS」というのがどういったものを指しているのか
いまいち見えてきませんが、この仕様では「ちょっとした簡単なプログラム」ですら
満足に作れるかどうか怪しいレベルですし、
果たしてOSと呼べるようなものを作れるのかどうか…。
ちょっと縛りプレイのつもりで占いプログラムを作ってみましたが、
非効率の極みみたいなコードしか書けず、
もうあまりやりたくはありませんね。
//HSPOSCMPで使える(らしき)命令だけでバイオリズム占い。
//実際に試す気はないので、動かなくてもたぶん対応はできません。
*phase1
//フェイズ1、誕生日の入力
color 0,0,0 : boxf : color 255,255,255
pos 0,0 : mes "誕生日をYYYYMMDDの形で入力してください"
x=0 : birth=0 //xは何桁入力したか
onkey *p1_key
stop
*p1_key
f=0
if (wparam>=48)&(wparam<=57) {
t=wparam-48 : f=1
}
if (wparam>=96)&(wparam<=105) {
t=wparam-96 : f=1
}
if f {
birth=birth*10+t
pos x*10,20 : mes t
x++
if x=7 : onkey *p1_fin
}
stop
*p1_fin
f=0
if (wparam>=48)&(wparam<=57) {
t=wparam-48 : f=1
}
if (wparam>=96)&(wparam<=105) {
t=wparam-96 : f=1
}
if f {
birth=birth*10+t
pos x*10,20 : mes t
//誕生日の修正ユリウス日を取得
y=birth/10000 : m=birth/100\100-2 : d=birth\100 //mは月から2を引いたもの
if m<=0 : y-- : m+=12
mjd1=365*y + y/4 + y/400 - y/100 + 30*m + 59*m/100 + d - 678912
//ここからフェイズ2、占いたい日を入力
pos 0,40 : mes "占いたい日をYYYYMMDDの形で入力してください"
x=0 : tgtday=0
onkey *p2_key
}
stop
*p2_key
f=0
if (wparam>=48)&(wparam<=57) {
t=wparam-48 : f=1
}
if (wparam>=96)&(wparam<=105) {
t=wparam-96 : f=1
}
if f {
tgtday=tgtday*10+t
pos x*10,60 : mes t
x++
if x=7 : onkey *p2_fin
}
stop
*p2_fin
f=0
if (wparam>=48)&(wparam<=57) {
t=wparam-48 : f=1
}
if (wparam>=96)&(wparam<=105) {
t=wparam-96 : f=1
}
if f {
tgtday=tgtday*10+t
pos x*10,60 : mes t
//占いたい日の修正ユリウス日を取得
y=tgtday/10000 : m=tgtday/100\100-2 : d=tgtday\100 //mは月から2を引いたもの
if m<=0 : y-- : m+=12
mjd2=365*y + y/4 + y/400 - y/100 + 30*m + 59*m/100 + d - 678912
//ここからフェイズ2、占いたい日を入力
prm=mjd2-mjd1 //誕生日から占いたい日までの経過日数
//占い開始 sinは使えないので値の範囲からおおまかに判断
//身体値
pos 0,80
mes "身体:"
x=prm\23
if (x=0)|(x=11) : mes "調子を崩すかもしれません。要注意です。"
if ((x>=1)&(x<=1)) | ((x>=10)&(x<=10)) : mes "やや好調です。"
if ((x>=2)&(x<=3)) | ((x>=8)&(x<=9)) : mes "好調です。"
if ((x>=4)&(x<=7)) : mes "非常に好調です。"
if ((x>=12)&(x<=13)) | ((x>=22)&(x<=22)) : mes "やや低調です。"
if ((x>=14)&(x<=15)) | ((x>=20)&(x<=21)) : mes "低調です。"
if ((x>=16)&(x<=19)) : mes "かなり低調です。無理は禁物です。"
//感情値
mes "感情・感性:"
x=prm\28
if (x=0)|(x=14) : mes "調子を崩すかもしれません。要注意です。"
if ((x>=1)&(x<=2)) | ((x>=12)&(x<=13)) : mes "やや好調です。"
if ((x>=3)&(x<=4)) | ((x>=10)&(x<=11)) : mes "好調です。"
if ((x>=5)&(x<=9)) : mes "非常に好調です。"
if ((x>=15)&(x<=16)) | ((x>=26)&(x<=27)) : mes "やや低調です。"
if ((x>=17)&(x<=18)) | ((x>=24)&(x<=25)) : mes "低調です。"
if ((x>=19)&(x<=23)) : mes "かなり低調です。無理は禁物です。"
//知性値
mes "知性:"
x=prm\33
if (x=0)|(x=16) : mes "調子を崩すかもしれません。要注意です。"
if ((x>=1)&(x<=2)) | ((x>=14)&(x<=15)) : mes "やや好調です。"
if ((x>=3)&(x<=5)) | ((x>=12)&(x<=13)) : mes "好調です。"
if ((x>=6)&(x<=11)) : mes "非常に好調です。"
if ((x>=17)&(x<=19)) | ((x>=31)&(x<=32)) : mes "やや低調です。"
if ((x>=20)&(x<=21)) | ((x>=28)&(x<=30)) : mes "低調です。"
if ((x>=22)&(x<=27)) : mes "かなり低調です。無理は禁物です。"
mes
mes "同じ誕生日で占いを続けますか?[Y/N]"
onkey *yn
}
stop
*yn
if wparam=89 {
color 0,0,0 : boxf 0,40,639,479 : color 255,255,255
pos 0,40 : mes "占いたい日をYYYYMMDDの形で入力してください"
x=0 : tgtday=0
onkey *p2_key
}
if wparam=78 {
mes "何かキーを押してください"
onkey *phase1
}
stop