【 日寺言十 (土日に作成編) 】 |
---|
Home | PC-6001mkII | Program | etc |
動作モード |
MODE:1(N60-BASIC) PAGES:1 |
---|
更新日:2005/07/03 作成日:2005/06/26 P6月間記念 行き当たりばったり企画「土日中にプログラムを完成させよう」です。 前に作った「でか文字PUT」と TIME命令を使って時計もどきを作ろうと思います。さて、どうなることやら...。 現在、初代機で実行すると表示の文字列がおかしくなってます。直せる目処がつき次第直そうと思いますので、しばしお待ちを...。 |
このページの内容は、 |
---|
2005/06/25〜26に作成したときの内容のバックアップです。 この時点では、mkIIのROMでしか試していないので、肝心の初代機では正しく表示されません。 |
予定機能 |
---|
時計
|
でか文字PUTのプログラムを流用 |
---|
でか文字PUT のプログラムをコピーして、デモの部分を削除。 ちょっと手抜きだけど、これで でか文字を出すお膳立てが完了! |
時刻の表示 |
---|
とりあえず時刻の入力は置いておき、時刻を表示する部分を作成。 プログラム開始時を基準(00:00:00)にして、表示時点の TIMEとの差分から時分秒を割出してみる。 TIME命令は、2/975秒置きに+2されるので... こんな感じか。
デジタル時計と同様に、1桁の場合は10の位に「0」を入れる。STR$()で正の数を変換すると1文字目は空白になるので、これを除いて前に0をつけて2桁にして... S$ = RIGHT$("0" + MID$(STR$(S) , 2), 2)あとは、時,分も同様に変換して表示のテスト。 おぉ出た出た。始める前から後悔してたけど、ようやくやる気が出てきました。 |
時刻の修正 その1 |
---|
時刻の修正方法はどうしよう。 INPUT$で入力してチェックする方法もあるけど、ここは敢えてゲーム機のようにカーソルキーで変更することに(仮)決定。カーソルキーの左右で時分秒の選択,上下で値の変更 と言ったところか。 時は 00-23,分と秒は 00-59の範囲で設定するとして...できた。まだ見かけだけだけど。 あとは、これを TIMEとの差分用の変数に格納しなきゃ。 えーと。現在の TIMEから、設定した時分秒分を減らせば良いから... T0 = TIME - (H * 3600 + M * 60 + S) * 975ここでもう一度テスト。現在時刻(19:45)を入れて、 どうだ! あれれれれ。しかも秒がカウントダウンしてるし。 ...晩飯作ろ。 |
時刻の修正 その2 |
---|
秒がカウントダウンした時点で薄々感づいていたけど、案の定 時刻表示の計算式が間違えてた。 という事でさくっと修正。 あとは、日付またがりの処理。このままだと、23時の次が24時になってしまうので、時の数値を24の余りにする処理を追加する。MOD 命令なんてものはないのでこんな感じ。 H = H - INT(H / 24) * 24この処理を加えて完成!と思いきや、23:59:59の次が 00:40:00になってる...。 そうか、分を求めるまでは時の値は変えちゃダメか。ここは処理の順番を変えてあっさり解決。
|
ここらで一旦高速化 その1 | |
---|---|
最低限の機能が出来たところで、プログラムの高速化を試みる。 この時点でメイン部分のソースはこんな感じ。
1秒に3回しか更新されてない...。 まず遅そうな処理といえば、38〜40行の文字列に変換する処理だろう。 ここで発想の転換をする。時分秒にそれぞれ「100」を足して文字列にして下2桁を取ったらどうだろうか。試してみよう。こんな感じかな? S$ = RIGHT$(STR$(S + 100), 2)試してみると、100回で37秒。遅くなってるよ...却下。 次は、配列変数にあらかじめ「00」〜「59」の文字列を格納してみる。 ※ N$(0)〜N$(59)に「00」〜「59」を代入後100回で1分5秒?! メインはシンプルになったので速くなると思いきや、正反対の結果に...。文字変数が60個増えたようなものだから遅くなった?? それなら、配列変数じゃなくて変数1つならどうだろう。 ※ N$に「000102...5859」を代入後ビンゴ!100回で29秒に減った。もうちょっと縮まると思ったけどまずはこの辺りで。 |
ここらで一旦高速化 その2 |
---|
BASIC処理を高速化する際に私が使う常套手段の一つに「2桁以上の数値定数は16進表記に」というものがある。これを今回も試してみる。 メインの処理で使われている2桁以上の数値定数は、975, 3600, 60, 24 の4種類。 これを、975 → &H3CF, 3600 → &HE10, 60 → &H3C, 24 → &H18 にそれぞれ置きかえる。 結果は...100回で23秒! あとは何かないかな。多分割り算より掛け算が速いはずなので、割り算のところを逆数の掛け算にしてみるか。ここで小数点の定数だとかえって遅くなるので変数に入れて... Z1 = 1/&H3CF: Z2 = 1/&HE10: Z3 = 1/&H3C: Z4 = 1/&H18やった!20秒を切った! はじめが33秒だったので、速度もざっと65%増しだ。この辺りで満足しておこう。 |
操作まわり |
---|
ここまで、暫定的に時刻合わせモードにはスペースキーで入っていたが、ちゃんとキーを割り当てる事にする。 時刻合わせのキーは何にしよう。TIMEと言う事で「T」にするか。CAPSや かなになっている事も考えて、「t」「T」「か」「カ」の4種類に対応させる。 あとは、修正モードと分かるようにタイトルを書き画面下に操作キーのメニューを出す。 まあこんなもんか。 |
表示形式の変更 その1 |
---|
表示形式をいくつか考える。 すぐできそうなものといえばこんな所か。
できた。あとは設定画面を残すのみ。 |
表示形式の変更 その2 |
---|
今度は、表示形式の変更画面を作成する。 この画面に入るキーは、Viewと言う事で「V」にしよう。と言う事で先ほどと同様に「V」「v」「ひ」「ヒ」をキーとして割り当てる。 カーソルキーの上下で、選択した表示形式が分かるようにする。まてよカーソル左右が空いてるな。表示色変更でもつけてみるか。この辺りが、行き当たりばったりの醍醐味だ(多分)。 表示形式のほかに表示色の変数も追加して...こんな感じかな?
|
あとはこまごまと |
---|
最後に、REM分の追加や行番号の整列を行う。 行番号の整列は、一旦保存後にN60m-BASICからプログラムを読み込み、RENUMを実行。 あとは、これを圧縮して ダウンロードと余談をつけて...あ、readme.txtも作らなきゃ。...完成! |
ダウンロード |
---|
|
以下、余談 |
---|
|
− | 日寺言十 | − |