超ミニBASIC for H8/SH 改版履歴
・H8版
ver.1.01 まではあまり詳しく書いていなかったのですが、ver1.02 以降はどこがどう変わったのか、なるべく詳しく書いていきます。
2002/11/21 初版
2003/01/12 ver1.01
PRINT文キャストLSET、RSET、USGNのバグ取り
LPRINT文のバグとり
BSET文の仕様変更
2003/05/25 ver1.02
・改善点
文、関数、内蔵I/Oアドレス定数などのハッシュテ−ブルのエントリを増やし、検索が高速になった。
ラベルの個数制限を無くした。また、頻繁に呼び出されるラベルほど速く検索できるようになった。
シリアルポートの文字送信ルーチンの中で並行して文字受信も行うようにし、文字とりこぼしの可能性がかなり低くなった。(シリアル通信ソフトの文字ディレイの設定を0msにしても大丈夫)
・バグ取り
EXTS関数が使えない(ネ−ムテ−ブルのリンク漏れ)という情けないバグを直した。
LCLEAR文でパラメ−タをつけずに実行するとハングするバグを直した。
(問題はINITLCD文にあった)
H8/3052 25MHz版で、キャラクタ液晶モジュール用のディレイがH8/3048 16MHz版と同じクロック数しかなかったのをクロック相応に直した。
・仕様変更
LISTコマンドやDUMPコマンドで実行を中断できなかったのを、CTRL−Cで中断できるようにした。また、CTRL−Sで一時停止できるようにした。
NEWコマンドでBASICテキストの開始番地に奇数番地を指定できないようにした。
(以前のバージョンでは奇数番地を指定できたが、指定すると異常動作した)
割り込みジャンプテーブルの初期化をリセット後一度だけ行うように変更した。
(以前のバージョンではリセット後とスタートアップスクリプト実行後の2度行っていたが、それだとスタートアップスクリプトで割り込みジャンプテーブルを設定しても無効になってしまう)
2003/06/23 ver1.02a
変数B、BTST関数を使おうとするとハングするバグを修正。(関数ネームテーブルのリンクが異常だった)
また、 cmb2mot.exe を3664版と共通にした。
特に機能Upはしておらず、バグを取っただけなのでバージョンは 1.03 ではなく 1.02a です。
バグの指摘をしてくださった内藤さん、ありがとうございます。
2003/06/30 ver1.02a'
BASICインタプリタ自体に変更はなし。
添付の変換ソフト cmb2mot.exe のバグを修正(一行の長さが約30文字を越えると出力するmotファイルがおかしくなる)
またまたバグの指摘をしてくださった内藤さん、ありがとうございます。
2003/09/14 ver1.02b
REPEAT〜UNTILループ中、構造化IF構文でBREAKするとエラーになるバグを修正
Ver1.02a では以下のプログラムはエラーになりました
10 I=0
20 REPEAT
30 PRINT I
40 IF(I=5) {BREAK} ' 1行IF文なら大丈夫
50 I=I+1
60 UNTIL I=10
|
LISTコマンド、DUMP文等の実行中、Ctrl−S、Ctrl−Cキーの利きが悪いという問題点を改善
その他、害は無いものの無意味なコードを取り除いた
これらは、H8からSHに移植する際自分で気づきました。
2004/02/22 ver1.02c
キャリーフラグをクリヤする際、割り込み禁止フラグまでクリヤするという大ボケなことをやっていた箇所が2箇所あったので直した
誤)ANDC #H'7E,CCR
正)ANDC #H'FE,CCR
実は、いま一部のキーワードを中間言語化する実験を行っているのですが、その過程でソースを見ていて自分で気付きました。
SHは、CCRに該当するSRの構造、操作方法がH8とは全く異なっており、SH版にはH8版と同種のバグはありません。
2004/09/07 ver1.03
連続する空白を圧縮する。ただし、クオーテーションで囲まれている範囲は圧縮しない
いろいろ中間言語化の実験をやっていたのですが、ちょっといろいろマズイ点があることがわかり、今回のバージョンアップでは空白圧縮だけ取り入れて他は見送りました。
内蔵I/Oアドレス定数のハッシュテーブルが208エントリになり、内蔵I/Oアドレス定数の検索が早くなった
ベンチマーク(実行環境はH8/3048 16MHz)
ベンチマークプログラム
|
実行時間
|
ver1.02c
|
ver1.03
|
10 FOR I=1 TO 100000
20 A=&P1DR
30 B=&P2DR
40 C=&P3DR
50 D=&P4DR
60 E=&PADR
70 F=&PBDR
80 NEXT
90 PRINT "END"
|
75秒
|
62秒
|
割り算で、割る数、割られる数が共に32ビット数値で同じ数の場合結果が0になるというマヌケなバグを直した
Ver 1.02c: PRINT 12345678/12345678 → 0
Ver 1.03: PRINT 12345678/12345678 → 1
SH版
SH版はまだキャラクタ液晶サポートがないので(いずれやる予定ですが)、H8版とは違うバージョン番号です。
2002/11/21 ver0.10(SH版初版)
2004/10/24 ver0.11(SH7050版、SH7047版)
連続する空白を圧縮する。ただし、クオーテーションで囲まれている範囲は圧縮しない
内蔵I/Oアドレス定数のハッシュテーブルが208エントリになり、内蔵I/Oアドレス定数の検索が早くなった
REG関数で、パラメータが0以外だと正しい値を返さず、あまつさえアドレスエラーを起こすという、情けないにも程があるバグを修正(レジスタ番号からアドレスを計算する際、4をかけるのを忘れてました)
2005/01/08 ver0.11(SH7046版)
SH7047版をベースに、SH7046版を作成。SH7047版とは内蔵I/Oアドレス定数が異なる。
すみません、まだキャラクタ液晶モジュール対応はやっていません