2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

某8ビット機と8ビット機のスレッド

1 :774ワット発電中さん:2021/11/17(水) 17:25:53.82 ID:AR6EmFJC2
某8〜「初代」「2」「2+」「tR」

8ビット機〜PC-8001・PC-8801シリーズ・PC-6001シリーズ・X1シリーズ・FM-7/77シリーズ

について

785 :99Basic:百人一首 下の句 シャッフル:2023/04/13(木) 19:32:55.26 ID:2bQlCbOeV
  100 DIM A$(100),R$(100)
  110 FOR I=1 TO 100:READ A$:A$(I)=RIGHT$(SPACE$(2)+STR$(I),3)+" 番:"+A$:NEXT
  120 FOR I=1 TO 100:R$(I)=A$(I):NEXT
  130 A$="":PRINT:INPUT "引数";A$:PRINT:PRINT
  140 IF A$="" THEN RANDOMIZE ELSE RANDOMIZE VAL(A$)
  150 '
  160 FOR I=1 TO 100
  170  A=RND(100):IF A=I THEN I=I-1 ELSE SWAP R$(I),R$(A)
  180 NEXT
  190 '
  200 FOR I=1 TO 100
  210  PRINT R$(I)
  220  IF I MOD 20=0 THEN GOSUB *ANYKEY
  230 NEXT
  240 END
  250 '
  260 *ANYKEY
  270 PRINT:PRINT "キーを押してください":PRINT
  280 FOR II=0 TO 0:II=(INKEY$=""):NEXT II
  290 RETURN
  300 '
10000 '***** 下の句 データ *****

【以下は >>774->>778 のDATA命令】

786 :99Basic:百人一首 下の句 引数123:2023/04/13(木) 19:35:45.48 ID:2bQlCbOeV
引数? 123


  8 番:よをうじやまと ひとはいうなり
 23 番:わがみひとつの あきにはあらねど
 51 番:さしもしらじな もゆるおもいを
 46 番:ゆくえもしらぬ こいのみちかな
 56 番:いまひとたびの あうこともがな
 40 番:ものやおもうと ひとのとうまで
  7 番:みかさのやまに いでしつきかも
  6 番:しろきをみれば よぞふけにける
 12 番:おとめのすがた しばしとどめん
 18 番:ゆめのかよいじ ひとめよくらん
 32 番:ながれもあえぬ もみじなりけり
 29 番:おきまどわせる しらぎくのはな
 65 番:こいにくちなん なこそおしけれ
 95 番:わがたつそまに すみぞめのそで
 36 番:くものいずこに つきやどるらん
 20 番:みをつくしても あわんとぞおもう
  2 番:ころもほすちょう あまのかぐやま
 38 番:ひとのいのちの おしくもあるかな
 98 番:みそぎぞなつの しるしなりける
 21 番:ありあけのつきを まちいでつるかな

787 :99Basic:百人一首 下の句 引数123:2023/04/13(木) 19:36:45.06 ID:2bQlCbOeV
 39 番:あまりてなどか ひとのこいしき
 85 番:ねやのひまさえ つれなかりけり
 67 番:かいなくたたん なこそおしけれ
 44 番:ひとをもみをも うらみざらまし
 25 番:ひとにしられで くるよしもがな
 82 番:うきにたえぬは なみだなりけり
 61 番:きょうここのえに においぬるかな
 30 番:あかつきばかり うきものはなし
 35 番:はなぞむかしの かににおいける
 28 番:ひとめもくさも かれぬとおもえば
 47 番:ひとこそみえね あきはきにけり
  5 番:こえきくときぞ あきはかなしき
 13 番:こいぞつもりて ふちとなりぬる
  9 番:わがみよにふる ながめせしまに
 27 番:いつみきとてか こいしかるらん
 79 番:もれいずるつきの かげのさやけさ
  4 番:ふじのたかねに ゆきはふりつつ
 75 番:あわれことしの あきもいぬめり
 81 番:ただありあけの つきぞのこれる
 10 番:しるもしらぬも おうさかのせき

788 :99Basic:百人一首 下の句 引数123:2023/04/13(木) 19:41:53.84 ID:2bQlCbOeV
 72 番:かけじやそでの ぬれもこそすれ
 45 番:みのいたずらに なりぬべきかな
 91 番:ころもかたしき ひとりかもねん
 94 番:ふるさとさむく ころもうつなり
 66 番:はなよりほかに しるひともなし
 48 番:くだけてものを おもうころかな
 37 番:つらぬきとめぬ たまぞちりける
 24 番:もみじのにしき かみのまにまに
 87 番:きりたちのぼる あきのゆうぐれ
 68 番:こいしかるべき よわのつきかな
 76 番:くもいにまごう おきつしらなみ
 57 番:くもがくれにし よはのつきかな
 71 番:あしのまろやに あきかぜぞふく
 34 番:まつもむかしの ともならなくに
 59 番:かたぶくまでの つきをみしかな
 19 番:あわでこのよを すぐしてよとや
100 番:なおあまりある むかしなりけり
 11 番:ひとにはつげよ あまのつりぶね
 74 番:はげしかれとは いのらぬものを
 58 番:いでそよひとを わすれやはする

789 :99Basic:百人一首 下の句 引数123:2023/04/13(木) 19:43:59.61 ID:2bQlCbOeV
 90 番:ぬれにぞぬれし いろはかわらず
 63 番:ひとずてならで いうよしもがな
 54 番:きょうをかぎりの いのちともがな
 60 番:まだふみもみず あまのはしだて
 49 番:ひるはきえつつ ものをこそおもえ
 62 番:よにおうさかの せきはゆるさじ
 93 番:あまのおぶねの つなでかなしも
 89 番:しのぶることの よわりもぞする
 77 番:われてもすえに あわんとぞおもう
 92 番:ひとこそしらね かわくまもなし
 78 番:いくよねざめぬ すまのせきもり
 69 番:たつたのかわの にしきなりけり
 16 番:まつとしきかば いまかえりこん
 83 番:やまのおくにも しかぞなくなる
 52 番:なおうらめしき あさぼらけかな
 31 番:よしののさとに ふれるしらゆき
 86 番:かこちがおなる わがなみだかな
 15 番:わがころもでに ゆきはふりつつ
 14 番:みだれそめにし われならなくに
 55 番:なこそながれて なおきこえけれ

790 :99Basic:百人一首 下の句 引数123:2023/04/13(木) 19:44:56.54 ID:2bQlCbOeV
 50 番:ながくもがなと おもいけるかな
 70 番:いずこもおなじ あきのゆうぐれ
 53 番:いかにひさしき ものとかはしる
 41 番:ひとしれずこそ おもいそめしか
 97 番:やくやもしおの みもこがれつつ
 99 番:よをおもうゆえに ものおもうみは
 80 番:みだれてけさは ものをこそおもえ
 33 番:しずこころなく はなのちるらん
 88 番:みをつくしてや こいわたるべき
 64 番:あらわれわたる せぜのあじろぎ
 96 番:ふりゆくものは わがみなりけり
 84 番:うしとみしよぞ いまはこいしき
 22 番:むべやまかぜを あらしというらん
 42 番:すえのまつやま なみこさじとは
  1 番:わがころもでは つゆにぬれつつ
  3 番:ながながしよを ひとりかもねん
 43 番:むかしはものを おもわざりけり
 17 番:からくれないに みずくくるとは
 26 番:いまひとたびの みゆきまたなん
 73 番:とやまのかすみ たたずもあらなん


OK

791 :99Basic:百人一首 下の句 【170行訂正】:2023/04/13(木) 20:03:46.86 ID:2bQlCbOeV
【170行】RND関数にミス、訂正後は……>>786-790とは違う結果になる

Aの範囲は1〜100、訂正前は100番目のデータのシャッフル回数が少なくなる

また、未使用のR$(0)にデータが入ってしまう


  100 DIM A$(100),R$(100)
  110 FOR I=1 TO 100:READ A$:A$(I)=RIGHT$(SPACE$(2)+STR$(I),3)+" 番:"+A$:NEXT
  120 FOR I=1 TO 100:R$(I)=A$(I):NEXT
  130 A$="":PRINT:INPUT "引数";A$:PRINT:PRINT
  140 IF A$="" THEN RANDOMIZE ELSE RANDOMIZE VAL(A$)
  150 '
  160 FOR I=1 TO 100
  170  A=RND(100)+1:IF A=I THEN I=I-1 ELSE SWAP R$(I),R$(A)
  180 NEXT
  190 '
  200 FOR I=1 TO 100
  210  PRINT R$(I)
  220  IF I MOD 20=0 THEN GOSUB *ANYKEY
  230 NEXT
  240 END
  250 '
  260 *ANYKEY
  270 PRINT:PRINT "キーを押してください":PRINT
  280 FOR II=0 TO 0:II=(INKEY$=""):NEXT II
  290 RETURN
  300 '
10000 '***** 下の句 データ *****
10001 DATA "わがころもでは つゆにぬれつつ"
10002 DATA "ころもほすちょう あまのかぐやま"
……
【略】
……
10099 DATA "よをおもうゆえに ものおもうみは"
10100 DATA "なおあまりある むかしなりけり"

792 :99Basic:百人一首 下の句 【修正後】引数123:2023/04/13(木) 20:15:25.81 ID:2bQlCbOeV
【修正後】引数123の結果


引数? 123


 59 番:かたぶくまでの つきをみしかな
 60 番:まだふみもみず あまのはしだて
 67 番:かいなくたたん なこそおしけれ
 10 番:しるもしらぬも おうさかのせき
 54 番:きょうをかぎりの いのちともがな
 28 番:ひとめもくさも かれぬとおもえば
 29 番:おきまどわせる しらぎくのはな
 25 番:ひとにしられで くるよしもがな
 38 番:ひとのいのちの おしくもあるかな
 35 番:はなぞむかしの かににおいける
  6 番:しろきをみれば よぞふけにける
  8 番:よをうじやまと ひとはいうなり
 66 番:はなよりほかに しるひともなし
 11 番:ひとにはつげよ あまのつりぶね
 96 番:ふりゆくものは わがみなりけり
 48 番:くだけてものを おもうころかな
 39 番:あまりてなどか ひとのこいしき
 53 番:いかにひさしき ものとかはしる
  1 番:わがころもでは つゆにぬれつつ
 99 番:よをおもうゆえに ものおもうみは


[40→86→68→95→15→83→81→85→12→36→74→47→13→98→27→80→9→76→2→21]

[61→72→92→32→55→33→30→31→24→89→19→5→57→71→18→7→79→73→75→94]

[91→64→49→45→42→63→52→90→100→51→34→46→69→84→23→62→93→87→43→14]


 65 番:こいにくちなん なこそおしけれ
 50 番:ながくもがなと おもいけるかな
 70 番:いずこもおなじ あきのゆうぐれ
 41 番:ひとしれずこそ おもいそめしか
 56 番:いまひとたびの あうこともがな
  3 番:ながながしよを ひとりかもねん
 97 番:やくやもしおの みもこがれつつ
 44 番:ひとをもみをも うらみざらまし
 16 番:まつとしきかば いまかえりこん
 77 番:われてもすえに あわんとぞおもう
 37 番:つらぬきとめぬ たまぞちりける
 88 番:みをつくしてや こいわたるべき
 20 番:みをつくしても あわんとぞおもう
 22 番:むべやまかぜを あらしというらん
  4 番:ふじのたかねに ゆきはふりつつ
 58 番:いでそよひとを わすれやはする
 26 番:いまひとたびの みゆきまたなん
 78 番:いくよねざめぬ すまのせきもり
 17 番:からくれないに みずくくるとは
 82 番:うきにたえぬは なみだなりけり


OK

793 :当スレッドは、99Basicと百人一首で終わり:2023/04/14(金) 20:02:15.54 ID:9JKkjx0Z6
当スレッドも容量の限界が近づいたので。

99Basicと百人一首で終わり、にするかな。


MSXの悪質連中を見た限りでは、99Basicに手を出した者は、まずいない。

99Basicの開発者様が、MSXのアマチュアユーザーとしては最も高度な方で、

99Basic自体もMSX BASICに酷似している、のに。

794 :当スレッドは、99Basicと百人一首で終わり:2023/04/14(金) 20:18:35.32 ID:9JKkjx0Z6
99Basicは、

「元MSX BASICユーザーが、ファイルコンバータを作る場合、最も適しているソフトウェア」

だと思う。


よほどの理由がない限り、OPEN "(ファイル名)" AS #1〜(※レコード長を1に設定)、

GET命令・PUT命令・LSET命令

……といった、ランダムファイル専用の命令は不要だと思う。


シーケンシャル用の命令でも、読み書き両用・任意の場所にアクセスが可能、

もちろんMSXのように「1Ahで終了」という制限もない

……から。


これは、99Basic・MSXのいずれでも使える方法。


1.OPEN "(ファイル名)" FOR INPUT AS #1

"(ファイル名)" の存在を確認できる。

必要に応じ、ON ERROR GOTO命令を併用する。


2.OPEN "(ファイル名)" FOR OUTPUT AS #1

"(ファイル名)"が既に存在する場合、問答無用で既存のファイルの中身を削除し、ファイルサイズが0のファイルを作る。

"(ファイル名)"がない場合は、新たに"(ファイル名)"のファイルを作る。

PRINT#命令などでファイル本体を書き込む。

バイナリファイルの場合、

PRINT #1,CHR$(xx);

のように、必ずセミコロンを付けること。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

PRINT #1,"これは文字列です"

の場合、最後にCRコード+LFコードが付加される。テキストファイル向け。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

795 :当スレッドは、99Basicと百人一首で終わり:2023/04/14(金) 20:30:48.29 ID:9JKkjx0Z6
百人一首について。


北海道の「下の句かるた」に特化したため、意味不明に見えるけど。

1番・2番……100番の番号には、意味がある。


百人一首 1番の場合。

>  1 番:わがころもでは つゆにぬれつつ

北海道の「下の句かるた」の取り札は、漢字+かな+変体仮名で書かれている。


百人一首の1番を調べたところ……

「秋の田のかりほの庵のとまをあらみ わが衣手は露に濡れつつ」

〜作者は天智天皇。

796 :当スレッドは、99Basicと百人一首で終わり:2023/04/14(金) 20:36:20.66 ID:9JKkjx0Z6
私個人の独断だけど……

「札幌・北海道の子供、特に小学生は、可能であれば『下の句かるた』に手を出さないほうがいい」

と思っている。


百人一首の意味を理解してから、でも遅くない。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


これは、百人一首のオンラインソフトの開発者様……にいえること。

北海道のユーザーの要望に応じ、北海道用の「下の句かるた」に対応された開発者様が多い。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

797 :当スレッドは、99Basicと百人一首で終わり:2023/04/14(金) 20:54:02.17 ID:9JKkjx0Z6
百人一首を検索すると……

必ずフィクション作品の『ち○○○る』が出てくる!


フィクション作品ではなく、真面目な書籍や資料で勉強することをおすすめします。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

798 :当スレッドは、99Basicと百人一首で終わり:2023/04/14(金) 21:00:24.19 ID:9JKkjx0Z6
百人一首を検索する場合は、


"百人一首" -"ち○○○る"
^^^^^^^^^^^^^^^^^^^^^^^^^

これで、真面目・まともなサイトが多くなる、と思います。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

799 :フィクション作品でも、児童文学は比較的まとも:2023/04/14(金) 21:44:05.09 ID:9JKkjx0Z6
フィクション作品では例外、について。

児童文学は、「比較的まともな作品が多い」と思う。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


北海道生まれ・札幌で一般公務員を務めた・晩年は小樽市に在住していた、

加藤先生(1934-2023、88歳没)について。

https://ja.wikipedia.org/wiki/%E5%8A%A0%E8%97%A4%E5%A4%9A%E4%B8%80


教育学部出身ではあるものの、札幌で一般公務員になり、

50代まで「二足のわらじ」を続けた。

50代後半で短大教員、以降は専業の児童文学作家として活動。


加藤先生の書籍(作品)〜小学生向け2冊・中高生向け1冊……を購入。

3冊とも、加藤先生ご本人が保護者・教師等・一般向けの解説文章を書いている。


加藤先生にとっては若い方……

札幌市厚別区在住の建築物研究家の先生は、加藤先生と交流があり、

加藤先生が一般公務員としての功績

〜「札幌市南区芸術の森に、有島武郎旧邸を移築・復元した」

を評価していた。


研究家の先生は、加藤先生を「加藤さん」と呼ぶことが許される若者、という立場。

現在は……立派なおじさんだけど。


本来の有島武郎邸跡地は……札幌市北区の北海道大学周辺にある。

私は、札幌市白石区にある最初の有島武郎邸の跡地を調べたことがある。

白石区時代の有島武郎邸は、厚別区の野外博物館に移築された……みたい。

800 :フィクション作品でも、児童文学は比較的まとも:2023/04/14(金) 22:08:28.27 ID:9JKkjx0Z6
広島出身で、山口県に在住していた、故・那須先生(1942-2021、79歳没)。

『ズッコケ三人組シリーズ』で評価された人物。

https://ja.wikipedia.org/wiki/%E9%82%A3%E9%A0%88%E6%AD%A3%E5%B9%B9



最初は自動車のセールスマンになったものの、

1970年代から児童文学作家としての活動を始めた。

サン=テグジュペリの『星の王子さま』、

宮沢賢治の『銀河鉄道の夜』『よだかの星』

……などの影響を受けたらしい。


私は、公共図書館へ行く度に那須先生の

『ズッコケ三人組シリーズ』の1冊を読むけど、

那須先生は、巻末の解説文章で

「この物語は、作者が広島で過ごした小学生時代をモデルにしています」

などと書いている。


30代後半から亡くなるまで、山口県在住。


山口県出身・明治大学出身の俳優である大さんとは、

「山口県関係者」同士が縁で、親友同士と呼べる関係になった。

没後1年になる2022年7月に、那須先生の「お別れの会」が開催され、

大さんが弔辞を務めた。



最後に。

山口県の那須先生と北海道の加藤先生の両者にいえること。

1970〜1990年代の書籍では、書籍に出版当時の自宅住所まで記載していた。

芸能人や有名小説家ではないうえ、

当時はコンピュータのネットが普及していなかったから……。

801 :99Basic:万年カレンダー:2023/04/14(金) 22:15:23.93 ID:9JKkjx0Z6
100 CLS
110 INPUT "Y,M ";Y,M:MM=M:D=1:U=Y MOD 4
120 IF U=0 THEN UU=1
130 IF U=0 AND (Y MOD 100)=0 AND (Y MOD 400)>0 THEN UU=0
140 IF M=1 OR M=2 THEN M=M+12:Y=Y-1
150 IF Y<0 OR Y>9999 OR MM<1 OR MM>12 THEN RUN
160 '
170 H=(Y+INT(Y/4)-INT(Y/100)+INT(Y/400)+INT((13*M+8)/5)+D) MOD 7
180 FOR I=1 TO 12
190 READ X
200 IF MM=I THEN D=X+28
210 IF MM=2 AND UU=1 THEN D=29
220 NEXT
230 PRINT:PRINT
240 FOR I=1 TO 7
250 READ A$:PRINT A$;" ";
260 NEXT
270 PRINT:PRINT:PRINT SPACE$(H*4);
280 FOR I=1 TO D
290 PRINT USING " ## ";I;:H=H+1
300 IF H=7 THEN H=0:PRINT:PRINT
310 NEXT
320 PRINT
330 IF H>0 THEN PRINT:PRINT
340 END
350 DATA 3,0,3,2,3,2,3,3,2,3,2,3
360 DATA "SUN","MON","TUE","WED","THU","FRI","SAT"

802 :99Basic:バイナリファイル→BASICのDATA命令に変換:2023/04/14(金) 22:17:46.16 ID:9JKkjx0Z6
BINBASIC.B99

  100 INPUT "BIN File";FB$:INPUT"DATA File";FD$
  110 IF FD$<>"" THEN 130
  120 A=INSTR(FB$,"."):IF A>1 THEN FD$=LEFT$(FB$,A)+"dat" ELSE FD$=FB$+".dat"
  130 PRINT "A:8バイト/行  B:16バイト/行 ";
  140 A$=INPUT$(1):IF INSTR("AaBb",A$)=0 THEN 140
  150 IF A$="A" OR A$="a" THEN RD=8 ELSE RD=16
  160 OPEN FB$ FOR INPUT AS #1:CLOSE #1
  170 OPEN FB$ AS #1:FIELD #1,STEP 1,1 AS D$:L=LOF(#1)
  180 OPEN FD$ FOR OUTPUT AS #2
  190 PRINT #2," 1000 '"+STR$(L)+"bytes"
  200 N=1010:PRINT #2," 1010 '";:C=0
  210 IF C=L THEN PRINT #2,:CLOSE #1:CLOSE #2:END
  220 IF C MOD RD=0 THEN N=N+10:PRINT #2,:PRINT #2,USING"##### DATA ";N;
  230 GET #1,C:DT$=RIGHT$("0"+HEX$(ASC(D$)),2)
  240 PRINT #2,DT$;:IF C<L-1 AND C MOD RD<RD-1 THEN PRINT #2,",";
  250 C=C+1:GOTO 210

803 :99Basic:バイナリファイル→MSXのREMマシン語:2023/04/14(金) 22:21:30.68 ID:9JKkjx0Z6
BINREM.B99

※徳間書店の雑誌「MSX FAN」で多用された形式ですが、危険なため、おすすめできません

  100 INPUT "BIN形式 ファイル名";FB$:INPUT"REM形式 ファイル名";FR$:INPUT"開始アドレス";AD$
  110 IF FR$<>"" THEN 130
  120 A=INSTR(FB$,"."):IF A>1 THEN FR$=LEFT$(FB$,A)+"dat" ELSE FR$=FB$+".dat"
  130 PRINT "A:16バイト/行  B:32バイト/行 ";
  140 A$=INPUT$(1):IF INSTR("AaBb",A$)=0 THEN 140
  150 IF A$="A" OR A$="a" THEN RD=16 ELSE RD=32
  160 PRINT:PRINT "リロケータブル対応にしますか (Y/N) ";
  170 A$=INPUT$(1):IF INSTR("YyNn",A$)=0 THEN 170
  180 IF A$="Y" OR A$="y" THEN RL=1 ELSE RL=0
  190 OPEN FB$ FOR INPUT AS #1:CLOSE #1
  200 OPEN FB$ AS #1:FIELD #1,STEP 1,1 AS D$:L=LOF(#1)
  210 OPEN FR$ FOR OUTPUT AS #2
  220 PRINT:PRINT STR$(L)+" bytes"
  230 N=90:C=0
  240 IF C=L THEN PRINT #2,"X":CLOSE #1:GOTO 290
  250 IF C MOD RD=0 THEN N=N+10:PRINT #2,USING"##### '";N;
  260 GET #1,C:DT$=RIGHT$("0"+HEX$(ASC(D$)),2)
  270 PRINT #2,DT$;:IF C MOD RD=RD-1 AND C<L-1 THEN PRINT #2,
  280 C=C+1:GOTO 240
  290 AD=VAL("&H"+AD$):AD$=RIGHT$("000"+HEX$(AD),4)
  300 N=N+10:PRINT #2,USING"##### ";N;
  310 IF RL=1 THEN PRINT #2,"AD%=&H"+AD$+":CLEAR 200,AD%:DEFINT A-Z:AD=PEEK(&HFC4A)+PEEK(&HFC4B)*256-65536!":GOTO 330
  320 PRINT #2,"CLEAR 200,&H"+AD$+":DEFINT A-Z"
  330 N=N+10:PRINT #2,USING"##### FOR I=0 TO 52:POKE &HF55E+I,VAL(";N;
  340 PRINT #2,CHR$(34)+"&H"+CHR$(34)+"+MID$("+CHR$(34);
  350 PRINT #2,"2A76F62BED5BF8F7D57EFE582826B720060108000918F2FE3A3802D607D6300707070747237EFE3A3802D607D6308012231318D5C9";
  360 PRINT #2,CHR$(34)+",I*2+1,2)):NEXT I"
  370 N=N+10:PRINT #2,USING"##### DEFUSR=&HF55E:A=USR";N;
  380 IF RL=1 THEN PRINT #2,"(AD)" ELSE PRINT #2,"(&H"+AD$+")"
  390 CLOSE #2:END

804 :99Basic:MSXのBSAVEヘッダチェック&書き換え:2023/04/14(金) 22:23:20.98 ID:9JKkjx0Z6
BSVHDCNG.B99

  100 DEFINT A-Z:DIM B(6)
  110 PRINT "1:BSAVEファイルのヘッダチェック"
  120 PRINT "2:BSAVEファイルのヘッダ書き換え"
  130 PRINT "3:終了":PRINT:PRINT "番号を入力してください > ";
  140 A$=INPUT$(1):IF A$<"1" OR A$>"3" THEN 140 ELSE PRINT A$:PRINT:PRINT
  150 IF A$="3" THEN 490
  160 INPUT "BSAVEファイル名";FL$:IF FL$="" THEN 480 ELSE PRINT:PRINT
  170 OPEN FL$ FOR INPUT AS #1:CLOSE #1
  180 OPEN FL$ AS #1
  190 FIELD #1,STEP 1,1 AS B$:SZ=LOF(#1)
  200 IF SZ<8 THEN PRINT "BSAVEファイルは 8バイト以上あります":GOTO 480
  210 FOR I=0 TO 6:GET #1,I:B(I)=ASC(B$):NEXT
  220 IF B(0)<>&HFE THEN PRINT "BSAVEファイルではありません":GOTO 480
  230 S=B(2)*256+B(1):E=B(4)*256+B(3):X=B(6)*256+B(5)
  240 PRINT "開始アドレス:";RIGHT$("000"+HEX$(S),4)
  250 PRINT "終了アドレス:";RIGHT$("000"+HEX$(E),4)
  260 PRINT "実行アドレス:";RIGHT$("000"+HEX$(X),4):PRINT
  270 PRINT "データサイズ:";RIGHT$("000"+HEX$(SZ-7),4);" (";STR$(SZ-7);"バイト)"
  280 PRINT:IF SZ=E-S+1+7 THEN PRINT "ヘッダは正常です":GOTO 350
  290 PRINT "ファイルサイズはヘッダと一致しません":PRINT
  300 PRINT "開始アドレス:0000 の場合"
  310 PRINT "終了アドレス:";RIGHT$("000"+HEX$(SZ-1-7),4);" になります":PRINT
  320 PRINT "BSAVEファイルは先頭に7バイトのヘッダ"
  330 PRINT "【 FE (開始2バイト) (終了2バイト) (実行2バイト) 】"
  340 PRINT "があります"
  350 IF A$="1" THEN 480
  360 PRINT:PRINT:PRINT "BSAVEファイルのヘッダを書き換えます"
  370 PRINT "開始アドレス/終了アドレスを省略した場合は元のアドレスを使用します"
  380 PRINT "実行アドレスを省略した場合は開始アドレスと同じアドレスになります":PRINT
  390 INPUT "開始アドレス(16進数 1-4桁)";S$:IF LEN(S$)>4 THEN 390
  400 IF S$<>"" THEN S=VAL("&H"+S$)
  410 INPUT "終了アドレス(16進数 1-4桁)";E$:IF LEN(E$)>4 THEN 410
  420 IF E$<>"" THEN E=VAL("&H"+E$)
  430 INPUT "実行アドレス(16進数 1-4桁)";X$:IF LEN(X$)>4 THEN 430
  440 IF X$="" THEN X=S ELSE X=VAL("&H"+X$)
  450 B(2)=S\256:B(1)=S MOD 256:B(4)=E\256:B(3)=E MOD 256:B(6)=X\256:B(5)=X MOD 256
  460 FOR I=1 TO 6:LSET B$=CHR$(B(I)):PUT #1,I:NEXT:CLOSE #1
  470 PRINT:PRINT:PRINT "BSAVEファイルのヘッダを書き換えました"
  480 PRINT:PRINT:CLOSE #1:GOTO 110
  490 END

805 :99Basic:HEXファイルをバイナリファイルに変換:2023/04/14(金) 22:28:35.11 ID:9JKkjx0Z6
HEXtoBIN.B99 【前半】

※220行は長すぎるため、分割

  100 DEFINT A-Z
  110 INPUT "HEXファイル名";FH$:TMP$="HEXtoBIN.___"
  120 OPEN FH$ FOR INPUT AS #1:OPEN TMP$ FOR OUTPUT AS #2:L=0:E$=""
  130 IF EOF(#1) THEN 360
  140 LINE INPUT #1,A$
  150 IF A$=":00000001FF" THEN PRINT #2,A$:GOTO 380
  160 IF A$="" OR LEFT$(A$,1)<>":" THEN 360
  170 IF LEN(A$)<11 THEN E$="11文字未満の行があります":GOTO 370
  180 B$=MID$(A$,4,2):C$=MID$(A$,6,2)
  190 BC=VAL("&H"+B$)*256+VAL("&H"+C$):IF L=0 THEN AD=BC:SA=AD
  200 B=VAL("&H"+MID$(A$,2,2))
  210 IF BC<AD THEN E$="アドレスが連続していません":GOTO 370
  220 IF BC>AD THEN B=BC-AD:ADH=AD\256:ADL=AD MOD 256:AA$=":"+RIGHT$("0"+HEX$(B),2)+RIGHT$("0"+HEX$(ADH),2)+RIGHT$("0"+HEX$(ADL),2)+"00"
:AA$=AA$+STRING$(B,"00"):C=(B+ADH+ADL) MOD 255:C=256-C:AA$=AA$+RIGHT$("0"+HEX$(C),2):PRINT #2,AA$:AD=AD+B:GOTO 180
  230 IF LEN(A$)<>11+B*2 THEN E$="文字の長さが違います":GOTO 370
  240 IF MID$(A$,8,2)<>"00" THEN E$="8〜9文字目が00以外のデータには対応していません":GOTO 370
  250 D$=MID$(A$,10,B*2):D=B*2:CS=VAL("&H"+RIGHT$(A$,2))
  260 FOR I=1 TO D:HX=0:FOR J=1 TO 22
  270 HX=HX+INSTR(D$,MID$("0123456789ABCDEFabcdef",J,1))
  280 NEXT J:IF HX=0 THEN I=255
  290 NEXT I:IF I>255 THEN E$="16進数以外の文字が含まれています":GOTO 370
  300 C=0:D$=MID$(A$,2,8)+D$
  310 FOR I=0 TO LEN(D$)\2-1:C=C+VAL("&H"+MID$(D$,I*2+1,2)):NEXT
  320 C=C MOD 256:C=256-C
  330 IF C<>CS THEN E$="チェックサムが違います":GOTO 370
  340 PRINT #2,A$
  350 L=L+1:AD=AD+B:GOTO 130
  360 IF L=0 THEN E$="データがありません"
  370 PRINT E$:GOTO 670
  380 CLOSE #1:CLOSE #2:EA=AD-1:B=EA-SA+1
  390 PRINT "開始アドレス:";RIGHT$("000"+HEX$(SA),4);"  終了アドレス:";RIGHT$("000"+HEX$(EA),4);"  バイト数:";STR$(B)
  400 PRINT

806 :99Basic:HEXファイルをバイナリファイルに変換:2023/04/14(金) 22:29:42.08 ID:9JKkjx0Z6
HEXtoBIN.B99 【後半】

  410 PRINT "1:BIN形式に変換  2:BSAVE形式に変換  3:終了  > ";
  420 A$=INPUT$(1):IF A$<"1" OR A$>"3" THEN 420 ELSE PRINT A$:MN=VAL(A$)
  430 IF MN=3 THEN 670
  440 IF MN=1 THEN FT$="BIN" ELSE FT$="BSAVE"
  450 A=INSTR(FH$,"."):IF A>1 THEN F$=LEFT$(FH$,A)+"bin" ELSE F$=FH$+".bin"
  460 PRINT FT$;"ファイル名(省略時:";F$;") ";:INPUT FB$
  470 IF FB$="" THEN FB$=F$
  480 IF MN=1 THEN 520
  490 XA=SA:PRINT "実行アドレス(省略時:";RIGHT$("000"+HEX$(XA),4);") ";
  500 INPUT XA$:IF XA$<>"" THEN XA=VAL("&H"+XA$)
  510 IF XA<SA OR XA>EA THEN 490
  520 OPEN TMP$ FOR INPUT AS #1:OPEN FB$ FOR OUTPUT AS #2:L=0
  530 IF MN=1 THEN 560
  540 SH=SA\256:SL=SA MOD 256:EH=EA\256:EL=EA MOD 256:XH=XA\256:XL=XA MOD 256
  550 PRINT #2,CHR$(&HFE);CHR$(SL);CHR$(SH);CHR$(EL);CHR$(EH);CHR$(XL);CHR$(XH);
  560 IF EOF(#1) THEN 640
  570 LINE INPUT #1,A$
  580 IF A$=":00000001FF" THEN 640
  590 IF A$="" OR LEFT$(A$,1)<>":" THEN 640
  600 IF L=0 THEN AD=SA
  610 B=VAL("&H"+MID$(A$,2,2)):D$=MID$(A$,10,B*2)
  620 FOR I=0 TO B-1:PRINT #2,CHR$(VAL("&H"+MID$(D$,I*2+1,2)));:NEXT
  630 L=L+1:AD=AD+B:GOTO 560
  640 CLOSE #1:CLOSE #2:EA=AD-1:B=EA-SA+1:IF MN=2 THEN B=B+7
  650 OPEN FB$ FOR INPUT AS #1
  660 IF LOF(#1)=B THEN PRINT "正常終了" ELSE PRINT "ファイルサイズが違います"
  670 CLOSE #1:CLOSE #2:OPEN TMP$ AS #1:CLOSE #1:KILL TMP$:END

807 :99Basic:英小文字→英大文字へ変換:2023/04/14(金) 22:31:48.44 ID:9JKkjx0Z6
LOWtoUPR.B99

100 PRINT "注意:「;」以降・「'」で囲まれた引用符の内部は変換しません。"
110 PRINT
120 INPUT "小文字のテキストファイル名";LF$
130 INPUT "変換後のテキストファイル名";UF$
140 IF UF$<>"" THEN 160
150 A=INSTR(LF$,"."):IF A>1 THEN UF$=LEFT$(LF$,A)+"upr" ELSE UF$=LF$+".upr"
160 OPEN LF$ FOR INPUT AS #1:OPEN UF$ FOR OUTPUT AS #2
170 IF EOF(#1) THEN 270
180 LINE INPUT #1,A$:L=LEN(A$):IF L=0 THEN PRINT #2,"":GOTO 170
190 FLAG=0:C$="":FOR I=1 TO L
200 B$=MID$(A$,I,1):B=ASC(B$)
210 IF FLAG=0 AND B$=";" THEN FLAG=255:GOTO 250
220 IF FLAG=0 AND B$="'" THEN FLAG=1:GOTO 250
230 IF FLAG=1 AND B$="'" THEN FLAG=0:GOTO 250
240 IF FLAG=0 AND B>&H60 AND B<&H7B THEN B=B-32:B$=CHR$(B)
250 C$=C$+B$:NEXT I
260 PRINT #2,C$:GOTO 170
270 PRINT "変換終了":CLOSE #1:CLOSE #2:END

808 :99Basic:フォント左右反転テーブル(マシン語書籍を参考):2023/04/14(金) 22:36:52.07 ID:9JKkjx0Z6
REVERSE.B99

  100 DIM A(255)
  110 FOR I=0 TO 255
  120 B$="":A$=RIGHT$("0000000"+BIN$(I),8)
  130 FOR J=0 TO 7
  140 B$=B$+MID$(A$,8-J,1)
  150 NEXT J
  160 A(I)=VAL("&B"+B$)
  170 NEXT I
  180 OPEN "REVERSE.DAT" FOR OUTPUT AS #1
  190 FOR I=0 TO 240 STEP 16
  200 PRINT #1,"DEFB ";
  210 FOR J=0 TO 15
  220 A$=RIGHT$("00"+HEX$(A(I+J)),3)+"H"
  230 IF MID$(A$,2,1)=<"9" THEN A$=RIGHT$(A$,3)
  240 PRINT #1,A$;
  250 IF J<15 THEN PRINT #1,",";
  260 NEXT J
  270 PRINT #1,
  280 NEXT I
  290 END


【出力ファイル】

DEFB 00H,80H,40H,0C0H,20H,0A0H,60H,0E0H,10H,90H,50H,0D0H,30H,0B0H,70H,0F0H
DEFB 08H,88H,48H,0C8H,28H,0A8H,68H,0E8H,18H,98H,58H,0D8H,38H,0B8H,78H,0F8H
DEFB 04H,84H,44H,0C4H,24H,0A4H,64H,0E4H,14H,94H,54H,0D4H,34H,0B4H,74H,0F4H
DEFB 0CH,8CH,4CH,0CCH,2CH,0ACH,6CH,0ECH,1CH,9CH,5CH,0DCH,3CH,0BCH,7CH,0FCH
DEFB 02H,82H,42H,0C2H,22H,0A2H,62H,0E2H,12H,92H,52H,0D2H,32H,0B2H,72H,0F2H
DEFB 0AH,8AH,4AH,0CAH,2AH,0AAH,6AH,0EAH,1AH,9AH,5AH,0DAH,3AH,0BAH,7AH,0FAH
DEFB 06H,86H,46H,0C6H,26H,0A6H,66H,0E6H,16H,96H,56H,0D6H,36H,0B6H,76H,0F6H
DEFB 0EH,8EH,4EH,0CEH,2EH,0AEH,6EH,0EEH,1EH,9EH,5EH,0DEH,3EH,0BEH,7EH,0FEH
DEFB 01H,81H,41H,0C1H,21H,0A1H,61H,0E1H,11H,91H,51H,0D1H,31H,0B1H,71H,0F1H
DEFB 09H,89H,49H,0C9H,29H,0A9H,69H,0E9H,19H,99H,59H,0D9H,39H,0B9H,79H,0F9H
DEFB 05H,85H,45H,0C5H,25H,0A5H,65H,0E5H,15H,95H,55H,0D5H,35H,0B5H,75H,0F5H
DEFB 0DH,8DH,4DH,0CDH,2DH,0ADH,6DH,0EDH,1DH,9DH,5DH,0DDH,3DH,0BDH,7DH,0FDH
DEFB 03H,83H,43H,0C3H,23H,0A3H,63H,0E3H,13H,93H,53H,0D3H,33H,0B3H,73H,0F3H
DEFB 0BH,8BH,4BH,0CBH,2BH,0ABH,6BH,0EBH,1BH,9BH,5BH,0DBH,3BH,0BBH,7BH,0FBH
DEFB 07H,87H,47H,0C7H,27H,0A7H,67H,0E7H,17H,97H,57H,0D7H,37H,0B7H,77H,0F7H
DEFB 0FH,8FH,4FH,0CFH,2FH,0AFH,6FH,0EFH,1FH,9FH,5FH,0DFH,3FH,0BFH,7FH,0FFH

809 :99Basic:数値並び替え(MSX書籍を参考):2023/04/14(金) 22:39:06.52 ID:9JKkjx0Z6
SORTING.B99

  100 '  ******* ソーティング シミュレーション *******
  110 '
  120 WIDTH 80,25:DEFINT A-Z:CLS:RANDOMIZE
  130 'データ数を求める
  140 INPUT"データ数";N
  150 DIM X(N)
  160 '最初のデータを画面に表示
  170 FOR I=1 TO N
  180  X(I)=INT(RND*1000)
  190  PRINT USING"####";X(I);
  200 NEXT I
  210 'ソート開始
  220 PRINT:PRINT:PRINT"スタート!":TIME=0
  230 'ソーティング ルーチン
  240 FL=0
  250 FOR I=1 TO N-1
  260  IF X(I)>=X(I+1) THEN 290
  270   SWAP X(I),X(I+1)
  280  FL=1
  290 NEXT
  300 IF FL=1 THEN 240
  310 T=TIME
  320 'ソート済みデータの表示
  330 FOR I=1 TO N
  340  PRINT USING"####";X(I);
  350 NEXT
  360 PRINT:PRINT:PRINT T;"秒 でした"
  370 END

810 :99Basic:バイナリファイル→DEFB形式:2023/04/14(金) 22:42:21.63 ID:9JKkjx0Z6
BINDEFB.B99

  100 INPUT "BIN File";FB$:INPUT"DEFB File";FD$
  110 IF FD$<>"" THEN 130
  120 A=INSTR(FB$,"."):IF A>1 THEN FD$=LEFT$(FB$,A)+"dat" ELSE FD$=FB$+".dat"
  130 PRINT "A:8バイト/行  B:16バイト/行 ";
  140 A$=INPUT$(1):IF INSTR("AaBb",A$)=0 THEN 140
  150 IF A$="A" OR A$="a" THEN RD=8 ELSE RD=16
  160 OPEN FB$ FOR INPUT AS #1:CLOSE #1
  170 OPEN FB$ AS #1:FIELD #1,STEP 1,1 AS D$:L=LOF(#1)
  180 OPEN FD$ FOR OUTPUT AS #2
  190 PRINT #2,";      "+STR$(L)+"bytes"
  200 N=1010:PRINT #2,";      ";:C=0
  210 IF C=L THEN PRINT #2,:CLOSE #1:CLOSE #2:END
  220 IF C MOD RD=0 THEN N=N+10:PRINT #2,:PRINT #2,CHR$(9)+"DEFB ";
  230 GET #1,C:DT$=RIGHT$("00"+HEX$(ASC(D$)),3)+"H"
  240 PRINT #2,DT$;:IF C<L-1 AND C MOD RD<RD-1 THEN PRINT #2,",";
  250 C=C+1:GOTO 210

811 :99Basic:CALLローダー+CALL本体の結合例:2023/04/14(金) 22:48:10.88 ID:9JKkjx0Z6
FOXBASIC.B99

※ローダーのファイルとCALL拡張命令の本体ファイルが必要です。
 これは参考資料です。実行しないよう、お願いします。

    1 'save"FOXBASIC.B99",A
  100 OPEN "FOXBASIC.BIN" FOR INPUT AS #1
  110 OPEN "FOXBASIC.400" FOR OUTPUT AS #2
  120 FOR I=0 TO &H3FFF
  130 A$=INPUT$(1,#1):PRINT #2,A$;
  140 NEXT I
  150 CLOSE
  160 COPY "FOXBASIC.400" TO "FOXBASIC.BIN"
  170 KILL "FOXBASIC.400"
  180 'FOXLOADER = 119Bytes
  190 OPEN "FOXLOADER.BSV" FOR INPUT AS #1
  200 OPEN "FOXBASIC.BSV" FOR OUTPUT AS #2
  210 FOR I=0 TO 118
  220 A$=INPUT$(1,#1):PRINT #2,A$;
  230 NEXT I
  240 CLOSE #1
  250 OPEN "FOXBASIC.BIN" FOR INPUT AS #1
  260 FOR I=0 TO &H3FFF
  270 A$=INPUT$(1,#1):PRINT #2,A$;
  280 NEXT I
  290 CLOSE:END

812 :99Basic:CALLローダー+CALL本体の結合例:2023/04/14(金) 22:51:22.72 ID:9JKkjx0Z6
FOXBASIC2.B99

※これも参考資料です。
 MSXのBSAVE形式の拡張子を "*.BSV" にしました。

    1 'save"FOXBASIC2.B99",A
  100 OPEN "FOXBASIC2.BIN" FOR INPUT AS #1
  110 OPEN "FOXBASIC2.400" FOR OUTPUT AS #2
  120 FOR I=0 TO &H3FFF
  130 A$=INPUT$(1,#1):PRINT #2,A$;
  140 NEXT I
  150 CLOSE
  160 COPY "FOXBASIC2.400" TO "FOXBASIC2.BIN"
  170 KILL "FOXBASIC2.400"
  180 'FOXLOADER = 119Bytes
  190 OPEN "FOXLOADER.BSV" FOR INPUT AS #1
  200 OPEN "FOXBAS_2.BSV" FOR OUTPUT AS #2
  210 FOR I=0 TO 118
  220 A$=INPUT$(1,#1):PRINT #2,A$;
  230 NEXT I
  240 CLOSE #1
  250 OPEN "FOXBASIC2.BIN" FOR INPUT AS #1
  260 FOR I=0 TO &H3FFF
  270 A$=INPUT$(1,#1):PRINT #2,A$;
  280 NEXT I
  290 CLOSE
  300 PRINT "MSXのファイル名は FOXBAS_2.BSVです"

813 :99Basic:CALLローダー+CALL本体の結合例:2023/04/14(金) 22:53:39.22 ID:9JKkjx0Z6
FOXBASIC3.B99

※これも参考資料です。
 FILES命令を付けました。

    1 'save"FOXBASIC3.B99",A
  100 OPEN "FOXBASIC3.BIN" FOR INPUT AS #1
  110 OPEN "FOXBASIC3.400" FOR OUTPUT AS #2
  120 FOR I=0 TO &H3FFF
  130 A$=INPUT$(1,#1):PRINT #2,A$;
  140 NEXT I
  150 CLOSE
  160 COPY "FOXBASIC3.400" TO "FOXBASIC3.BIN"
  170 KILL "FOXBASIC3.400"
  180 'FOXLOADER = 119Bytes
  190 OPEN "FOXLOADER.BSV" FOR INPUT AS #1
  200 OPEN "FOXBAS_3.BSV" FOR OUTPUT AS #2
  210 FOR I=0 TO 118
  220 A$=INPUT$(1,#1):PRINT #2,A$;
  230 NEXT I
  240 CLOSE #1
  250 OPEN "FOXBASIC3.BIN" FOR INPUT AS #1
  260 FOR I=0 TO &H3FFF
  270 A$=INPUT$(1,#1):PRINT #2,A$;
  280 NEXT I
  290 CLOSE
  300 PRINT "MSXのファイル名は FOXBAS_3.BSVです"
  310 PRINT:FILES "FOXBASIC3.*":PRINT:FILES "FOXBAS_3.BSV"
  320 END

814 :99Basic:自作イメージを除けば、この手は…危険!!:2023/04/14(金) 22:56:57.54 ID:9JKkjx0Z6
MSXROMDT.B99

100 INPUT "MSX ROMイメージのファイル名";ROMFL$
110 INPUT "終端アドレス(4000-BFFF,16進数4桁)";ENDAD$
120 ENDAD=VAL("&H"+ENDAD$)
130 IF ENDAD<&H4000 OR ENDAD>&HBFFF THEN 110
140 INPUT "DATA文のファイル名";DATFL$:L=1000
150 OPEN ROMFL$ FOR INPUT AS #1
160 OPEN DATFL$ FOR OUTPUT AS #2
170 PRINT #2," 1000 '"
180 FOR I=&H4000 TO ENDAD
190 IF I MOD 16=0 THEN L=L+10:PRINT #2,USING"##### DATA ";L;
200 IF EOF(#1) THEN PRINT "強制終了します":GOTO 250
210 A$=INPUT$(1,#1):B$=RIGHT$("0"+HEX$(ASC(A$)),2)
220 PRINT #2,B$;
230 IF I MOD 16<15 AND I<ENDAD THEN PRINT #2,","; ELSE PRINT #2,""
240 NEXT
250 CLOSE:END

815 :MSX BASIC:BASICテキスト→中間言語を表示:2023/04/14(金) 23:09:46.19 ID:9JKkjx0Z6
CHUUKAN.BAS

1 'save"CHUUKAN.BAS",A
100 CLEAR 1000,&HD800:CLS:DEFINT A-Z:AD=&HD800:BF=&HF55E
110 FOR I=0 TO 17:READ A$:POKE AD+I,VAL("&H"+A$):NEXT I
120 CLS:PRINT "BASIC TEXT : ":PRINT:LINE INPUT B$:IF B$="" THEN 120
130 PRINT:PRINT:B$=LEFT$(B$,253)+":"+CHR$(0)
140 FOR I=0 TO LEN(B$)-1:B=ASC(MID$(B$,I+1,1)):POKE BF+I,B:NEXT I
150 DEFUSR=AD:A#=USR(0):A$=""
160 FOR I=0 TO 254:A$=A$+CHR$(PEEK(BF+I)):NEXT I
170 A=INSTR(A$,":"+STRING$(3,0))-1:A$=LEFT$(A$,A)
180 L=LEN(A$):PRINT "Length :";L:PRINT:PRINT
190 SC=PEEK(&HFCAF):S0=PEEK(&HF3AE)
200 X=6:IF SC=0 AND S0>40 THEN X=12 ELSE IF SC=1 THEN X=5
210 FOR I=0 TO L-1
220 A=ASC(MID$(A$,I+1,1)):H$=RIGHT$("0"+HEX$(A),2)
230 GOSUB 270:PRINT H$;"(";C$;") ";
240 IF I MOD X=X-1 THEN PRINT
250 NEXT I
260 PRINT:PRINT:PRINT:END
270 C=A:IF C<32 OR C=127 THEN C=ASC(".")
280 C$=CHR$(C):RETURN
290 DATA 21,5E,F5,CD,B2,42,21,1F,F4,11,5E,F5,01,01,01,ED
300 DATA B0,C9

816 :MSX BASIC:PLAY命令 MML→SOUND命令用 PSG変換:2023/04/14(金) 23:13:59.87 ID:9JKkjx0Z6
PSGREAD.BAS

100 SCREEN 1:WIDTH 29:KEY OFF
110 CLEAR 300,&HD800:DEFINT A-Z:DEFUSR1=&H90:A=USR1(0)
120 ON ERROR GOTO 270
130 LINE INPUT "PLAY MML : ";M$
140 PLAY M$
150 AD=&HD800
160 FOR I=0 TO 16:READ A$:POKE AD+I,VAL("&H"+A$):NEXT I
170 DEFUSR=AD:A=USR(0)
180 DIM R(13):FOR I=0 TO 13:R(I)=PEEK(AD+&H11+I):NEXT I
190 PRINT:PRINT
200 FOR I=0 TO 13
210 PRINT USING " ## ";I;:PRINT ": ";
220 PRINT RIGHT$("0"+HEX$(R(I)),2)
230 NEXT I
240 PRINT:PRINT:PRINT "HIT ANY KEY"
250 A$=INKEY$:IF A$="" THEN 250 ELSE A=USR1(0)
260 FOR I=0 TO 13:SOUND I,R(I):NEXT I:END:A=USR1(0):END
270 IF ERL<>140 THEN ON ERROR GOTO 0
280 PRINT "MML ERROR!":BEEP:PRINT:RESUME 130
290 DATA 21,11,D8,AF,47,CD,96,00
300 DATA 77,78,3C,23,FE,0E,20,F4,C9

817 :MSX BASIC:SCREEN4に文字を拡大表示:2023/04/14(金) 23:18:29.24 ID:9JKkjx0Z6
SPRITEX4.BAS

100 SCREEN 1,3:WIDTH 29:KEY OFF:DEFINT A-Z
110 LINE INPUT "String(Length:1-8)? ";A$
120 IF A$="" THEN FOR I=1 TO 8:S$=S$+CHR$(I):NEXT I:GOTO 190
130 L=LEN(A$)
140 FOR I=1 TO L
150 B$=MID$(A$,I,1):B=ASC(B$)
160 IF B=1 THEN I=I+1:B$=MID$(A$,I,1):B=ASC(B$)-64
170 S$=S$+CHR$(B)
180 NEXT I
190 S$=LEFT$(S$,8):L=LEN(S$)
200 DEF FNW(A,B)=-((A AND 8*16^B)>0)*192-((A AND 4*16^B)>0)*48-((A AND 2*16^B)>0)*12-((A AND 1*16^B)>0)*3
210 FOR I=0 TO L-1:A=ASC(MID$(S$,I+1,1)):L$="":R$=""
220 FOR J=A*8 TO A*8+7
230 B=VPEEK(J):C$=CHR$(FNW(B,1)):D$=CHR$(FNW(B,0)):L$=L$+C$+C$:R$=R$+D$+D$
240 NEXT J
250 SPRITE$(I)=L$+R$:NEXT I
260 SCREEN 4:X=(256-L*32)\2:Y=(192-32)\2
270 FOR I=0 TO L-1
280 PUT SPRITE I,(X+2,Y-1):X=X+32
290 NEXT I
300 OPEN "GRP:" AS #1:PRESET((256-L*8)\2-3,40)
310 FOR I=1 TO L
320 A=ASC(MID$(S$,I,1))
330 IF A<32 THEN PRINT #1,CHR$(1)+CHR$(A+64); ELSE PRINT #1,CHR$(A);
340 NEXT I
350 DEFUSR=&H156:A=USR(0):BEEP:A$=INPUT$(1):A=USR(0)

818 :MSX BASIC:MAKEROM.BAS:2023/04/14(金) 23:25:18.29 ID:9JKkjx0Z6
MAKEROM.BAS 【その1】

【開発者様は、当プログラムの著作権を放棄する、と発言しました。】

100 DEFINT A-Z:AD=&HD000:SZ=&HD05A:RB=&HD05F
110 DEFUSR=AD:DEFUSR1=&HD030:DEFUSR2=&HD0D0:DEFUSR3=&HD100:DEFUSR4=&HD130
120 READ D$:IF D$<>"*" THEN POKE AD,VAL("&h"+D$):AD=AD+1:GOTO 120
130 FL$(0)="MSX     ROM":FL$(1)="MSX2    ROM":FL$(2)="MSX2P   ROM"
140 FL$(3)="MSX2EXT ROM":FL$(4)="MSX2PEXTROM":POKE SZ,&H40:POKE RB,0
150 PRINT:PRINT"--- makerom ver 4.0a ---":PRINT
160 PRINT"1: system"
180 PRINT"2: 32K ROM on slot 1"
190 PRINT"3: mega-ROM on slot 1"
200 PRINT"4: turbo R(unsupported)"
210 PRINT:PRINT"No. >";
220 A$=INPUT$(1):A=VAL(A$):IF A<1 OR A>4 THEN BEEP:GOTO 220
230 PRINT A$:ON A GOTO 250,440,520,670
240 '
250 print"System ROMs":PRINT"Main ROM(1)..";:A=USR(&H80)
260 V=PEEK(&H902D):if v>2 then beep:goto 670 else PRINT USR1(FL$(V))
270 PRINT"Main ROM(2)..";:A=USR(&H4080):POKE RB,1:PRINT USR1(FL$(V))
280 POKE RB,0:IF V=0 THEN 300
290 PRINT"Sub ROM..";:A=USR(PEEK(&HFAF8)):PRINT USR1(FL$(V+2))
300 PRINT"Disk ROM..";:A=USR(&H4000+PEEK(&HFFA8))
310 PRINT USR1("DISK    ROM"):A=USR2(0):IF PEEK(&H9000)=&HFF GOTO 370
320 PRINT"Kanji ROM(1)..";:FOR KC=0 TO 7:POKE RB,KC
330 A=USR2(KC*512):A$=USR1("KANJI   ROM"):NEXT:PRINT"KANJI   ROM"
340 POKE &HD0E5,&HDA:POKE &HD0EA,&HDB:POKE &HD0EF,&HDB
350 PRINT"Kanji ROM(2)..";:FOR KC=0 TO 7:POKE RB,KC+8
360 A=USR2(KC*512):A$=USR1("KANJI   ROM"):NEXT:PRINT"KANJI   ROM":POKE RB,0
370 A=USR(&H4087):IF PEEK(&H9000)=&HFF GOTO 400
380 PRINT"Kanji driver ROM..";:A$=USR1("KNJDRV  ROM")
390 A=USR(&H8087):POKE RB,1:PRINT USR1("KNJDRV  ROM"):POKE RB,0
400 A=USR(&H408F):IF PEEK(&H9000)=&HFF GOTO 420
410 PRINT"FM-BIOS ROM..";USR1("FMBIOS  ROM")
420 GOTO 720
430 '
440 PRINT"Checking ROM on slot 1...";:A=USR(&H4001)
450 IF PEEK(&H9000)<>&H41 THEN PRINT"Bad ROM !":BEEP:GOTO 130 ELSE PRINT
460 INPUT"the File name >";F$:F$=LEFT$(F$+"        ",8)+"ROM"
470 INPUT"the Size of the ROM size (ret:32K 1:16K)";SZ
480 PRINT"ROM on slot 1..";:POKE RB,0:A$=USR1(F$):IF SZ=1 GOTO 500
490 A=USR(&H8001):POKE RB,1:A$=USR1(F$):POKE RB,0
500 PRINT F$:GOTO 720

819 :MSX BASIC:MAKEROM.BAS:2023/04/14(金) 23:26:21.03 ID:9JKkjx0Z6
MAKEROM.BAS 【その2】

510 '
520 INPUT"File name:";F$:F$=LEFT$(F$+"        ",8)+"ROM"
530 print"Mega ROM type (0 or [RET]:KONAMI(SCC) 1:ASCII/8 2:ASCII/16"
535 print spc(15);:input"4:KONAMI 5:'R-TYPE') :";RT
540 INPUT"the Size of the Mega ROM (ret:1M):";SM:IF SM=0 THEN SM=1
550 IF SM*128>DSKF(1) THEN BEEP:PRINT"Not enough disk space!":GOTO 540
560 ON RT+1 GOTO 580,590,600,570,602,604
570 GOTO 530
580 AD=&H5000:BE=SM*16-1:POKE SZ,&H20:GOTO 610
590 AD=&H6000:BE=SM*16-1:POKE SZ,&H20:GOTO 610
600 AD=&H6000:BE=SM*8-1: POKE SZ,&H40:GOTO 610
602 AD=&H5000:BE=SM*16-1:POKE SZ,&H20:GOTO 610
604 AD=&H7000:BE=SM*8-1: POKE SZ,&H40:GOTO 610
610 BN=0:POKE RB,0:A=USR3(AD+BN)
620 IF PEEK(&H9000)<>&H41 THEN PRINT"Bad ROM !":BEEP:GOTO 130
630 PRINT"Now saving..";:POKE &H9000,&H41+RT:A$=USR1(F$)
640 FOR BN=1 TO BE:POKE RB,BN:A=USR3(AD+BN):A$=USR1(F$):NEXT
650 PRINT:GOTO 720
660 '
670 print"Turbo R"
671 POKE SZ,&H20:FOR I=0 TO 15:F$="turbor  00"+HEX$(I):PRINT F$:A$=INPUT$(1)
675 FOR J=0 TO 31:POKE RB,J:A=USR4(I*32+J):A$=USR1(F$):NEXT:NEXT
710 '
720 PRINT"complete!":GOTO 130

820 :MSX BASIC:MAKEROM.BAS:2023/04/14(金) 23:27:17.94 ID:9JKkjx0Z6
MAKEROM.BAS 【その3】

730 '
740 DATA fe,02,c0,23,23,f3,7e,23,66,2e,00,01,00,40,11,00
750 DATA 90,f5,d5,c5,cd,0c,00,c1,d1,12,23,13,0b,78,b1,28
760 DATA 03,f1,18,ed,f1,fb,af,c9,00,00,00,00,00,00,00,00
770 DATA fe,03,c0,13,1a,6f,13,1a,67,af,11,00,d2,12,13,01
780 DATA 0b,00,ed,b0,11,00,90,0e,1a,cd,7d,f3,11,00,d2,0e
790 DATA 16,cd,7d,f3,b7,c2,90,d0,21,00,40,22,0e,d2,21,00
800 DATA 00,22,21,d2,21,00,00,22,23,d2,21,01,00,11,00,d2
810 DATA 0e,26,cd,7d,f3,b7,c2,95,d0,11,00,d2,0e,10,cd,7d
820 DATA f3,b7,c2,9a,d0,11,a0,d0,0e,09,cd,7d,f3,c9,00,00
830 DATA 11,a4,d0,18,f3,11,af,d0,18,ee,11,bb,d0,18,e9,00
840 DATA 4f,4b,3a,24,07,4f,70,65,6e,20,65,72,72,3a,24,07
850 DATA 57,72,69,74,65,20,65,72,72,3a,24,07,43,6c,6f,73
860 DATA 65,20,65,72,72,3a,24,00,00,00,00,00,00,00,00,00
870 DATA fe,02,c0,23,23,7e,23,66,6f,11,00,90,e5,7d,e6,3f
880 DATA ed,6a,ed,6a,d3,d8,7c,e6,3f,d3,d9,e1,06,20,db,d9
890 DATA 12,13,10,fa,23,7a,fe,d0,20,e2,c9,00,00,00,00,00
900 DATA fe,02,c0,23,23,e5,7e,23,66,2e,00,f5,e5,3e,01,21
910 DATA 00,40,cd,24,00,e1,f1,77,21,00,40,11,00,90,01,00
920 DATA 40,ed,b0,af,21,00,40,cd,24,00,e1,c9,00,00,00,00
930 DATA fe,02,c0,23,23,7e,23,66,6f,e5,21,00,40,3e,8f,cd
940 DATA 24,00,e1,3e,ff,32,f9,7f,3a,f2,7f,5f,3a,f8,7f,57
950 DATA d5,7d,32,00,68,7c,b7,28,02,3e,04,32,f8,7f,21,00
960 DATA 40,11,00,90,01,00,20,ed,b0,d1,7b,32,00,68,7a,32
970 DATA f8,7f,21,00,40,3e,80,cd,24,00,c9,*

821 :MSX BASIC:ローテート&シフト CALL拡張命令:2023/04/14(金) 23:36:20.23 ID:9JKkjx0Z6
ROTATE_SHIFT_CMD.dsk

【ローテート&シフト CALL拡張命令】

https://xgf.nu/EVrtG

822 :MSX BASIC:ローテート&シフト CALL拡張命令:2023/04/14(金) 23:39:43.70 ID:9JKkjx0Z6
AUTOEXEC.BAS

1 BLOAD"R_SHIFT.BSV",R:NEW


CHUUKAN.BAS 【CALL拡張命令が必要です】

1 'save"CHUUKAN.BAS",A
100 CLS:DEFINT A-Z
110 PRINT "BASIC TEXT : ":PRINT:LINE INPUT B$:IF B$="" THEN 100
120 PRINT:PRINT
130 _CMDCODE(B$,A$)
140 L=LEN(A$):PRINT "Length :";L:PRINT:PRINT
150 SC=PEEK(&HFCAF):S0=PEEK(&HF3AE)
160 X=6:IF SC=0 AND S0>40 THEN X=12 ELSE IF SC=1 THEN X=5
170 FOR I=0 TO L-1
180 A=ASC(MID$(A$,I+1,1)):H$=RIGHT$("0"+HEX$(A),2)
190 GOSUB 230:PRINT H$;"(";C$;") ";
200 IF I MOD X=X-1 THEN PRINT
210 NEXT I
220 PRINT:PRINT:PRINT:END
230 C=A:IF C<32 OR C=127 THEN C=ASC(".")
240 C$=CHR$(C):RETURN

823 :MSX BASIC:ローテート&シフト CALL拡張命令:2023/04/14(金) 23:42:31.50 ID:9JKkjx0Z6
【ローテート/シフト命令】


[書式]
_SLA(数値,結果代入の変数[,Cy代入の変数])
  Cy代入の変数は省略可能です。


[Cyオフ]で実行

_RLC(A,B[,C])
_RL(A,B[,C])
_RRC(A,B[,C])
_RR(A,B[,C])
_SLA(A,B[,C])
_SRA(A,B[,C])
_SRL(A,B[,C])


[Cyオン]で実行

_RLC1(A,B[,C])
_RL1(A,B[,C])
_RRC1(A,B[,C])
_RR1(A,B[,C])
_SLA1(A,B[,C])
_SRA1(A,B[,C])
_SRL1(A,B[,C])


【中間コード関係命令】

00h,00hが連続している場合、命令の最後を誤認する可能性があるので、
対策をしました。
文末に「:」を追加してから、中間コード変換ルーチンを実行しています。

_CMD("BEEP") 〜 文字列のアスキーコードを中間コードに変換し、実行します。
                _CMD以降の命令は実行しません。

_CMDCODE("BEEP",A$) 〜 文字列のアスキーコードを中間コードに変換し、
                変数に代入します。_CMDCODE("BEEP",A$):?LEN(A$)を実行した場合、
                「1」と表示されます。

_RELOC       〜 本来は危険な命令ですが、暴走の対策をしました。
                BASICプログラムのエリアを再配置します。
                LOAD命令・CLOAD命令以外でロードした場合、
                モニタなどでBASICプログラムの領域を書き換えた場合、
                そのままRUN命令を実行すると暴走します。
                NEW命令の直後に実行すると、プログラムが復活します。
                (内部で、CLEAR命令を実行しています。
                内部で実行できるのは、CLEAR命令・RUN命令くらいでしょう。)


【ディスク/カセットテープ関係】

_DISABLE      〜Disk BASICを無効にします。
                メモリのDE00h以降が使用可能になります。
                カセットテープのゲームで遊ぶ場合も使用できます。

824 :MSX BASIC:ローテート&シフト CALL拡張命令:2023/04/14(金) 23:45:14.28 ID:9JKkjx0Z6
R_SHIFT.BAS

【サンプルプログラム1】

1 'save"R_SHIFT.bas",A
100 DEFINT A-Z:SCREEN 0:WIDTH 40
110 INPUT "A(BIN)";A$:A=VAL("&B"+A$):PRINT
120 _RLC(A,B,C):A$="RLC":GOSUB 290
130 _RL (A,B,C):A$="RL ":GOSUB 290
140 _RRC(A,B,C):A$="RRC":GOSUB 290
150 _RR (A,B,C):A$="RR ":GOSUB 290
160 _SLA(A,B,C):A$="SLA":GOSUB 290
170 _SRA(A,B,C):A$="SRA":GOSUB 290
180 _SRL(A,B,C):A$="SRL":GOSUB 290
190 PRINT:PRINT "[Cy:1]"
200 _RLC1(A,B,C):A$="RLC":GOSUB 290
210 _RL1 (A,B,C):A$="RL ":GOSUB 290
220 _RRC1(A,B,C):A$="RRC":GOSUB 290
230 _RR1 (A,B,C):A$="RR ":GOSUB 290
240 _SLA1(A,B,C):A$="SLA":GOSUB 290
250 _SRA1(A,B,C):A$="SRA":GOSUB 290
260 _SRL1(A,B,C):A$="SRL":GOSUB 290
270 PRINT:PRINT:_RLC(A,A)
280 A$=BIN$(A):GOTO 110
290 PRINT A$;" ---> ";RIGHT$("0000000"+BIN$(B),8);" ";
300 PRINT "Cy:";:IF C THEN PRINT "1" ELSE PRINT "0"
310 RETURN


SPRITE.BAS

【サンプルプログラム2】

1 'save"SPRITE.BAS",A
100 SCREEN 1,3:WIDTH 29:KEY OFF:DEFINT A-Z
110 INPUT "CHR";A$:IF A$="" THEN 110
120 C=ASC(A$):IF C=1 THEN A$=MID$(A$,2,1):C=ASC(A$)-64
130 CLS
140 FOR I=0 TO 7
150 A=VPEEK(C*8+I):GOSUB 260:VPOKE C*8+I,A
160 NEXT I
170 FOR I=0 TO 7
180 P=VPEEK(C*8+I):B=P\16
190 FOR J=0 TO 1
200 B=(B AND 8)*16+(B AND 4)*8+(B AND 2)*4+(B AND 1)*2:B=B OR B\2
210 V=&H3800+I*2+J*16:VPOKE V,B:VPOKE V+1,B:B=P
220 NEXT J,I
230 PUT SPRITE 0,(112-8,80):BEEP
240 A$=INKEY$:IF A$="" THEN 240
250 SCREEN 0:END
260 '
270 B1=8:C1=0
280 'LOOP:
290 _RRC(A,A,CR)
300 IF CR THEN _RL1(C1,C1) ELSE _RL(C1,C1)
310 B1=B1-1:IF B1 THEN 280
320 A=C1:RETURN

825 :MSX BASIC:CALLローダー:2023/04/14(金) 23:56:32.99 ID:9JKkjx0Z6
CALLLOADER.BAS

【使い方】

8F90h-8FFFh に CALL拡張命令の組み込み用ローダーを作りました。

このプログラムを実行し、8F90h-8FFFh に ローダーを書き込みます。

CALL拡張命令の本体を 9000h-CFFFh にロードしてください。


BSAVE"(ファイル名)",&H8F90,&HCFFF,&H8F90

で セーブします。


組み込みは、

BLOAD"(ファイル名)",R

を実行します。

これで、CALL拡張命令がページ1のRAMに組み込まれ、実行可能になります。


100 CLEAR 200,&H8F90:DEFINT A-Z:AD=&H8F90
110 FOR I=0 TO 111:READ A$:POKE AD+I,VAL("&H"+A$):NEXT I
120 DEFUSR=AD:DEFUSR1=&H8FE8:'A=USR1(&H9000):A=USR(0)
130 '
140 DATA 3A,09,FD,E6,40,B7,28,09,1E,05,DD,21,6F,40,CD,59
150 DATA 01,AF,21,00,90,77,23,77,3A,42,F3,26,40,CD,24,00
160 DATA 21,00,90,11,00,40,01,00,40,ED,B0,3A,C1,FC,26,40
170 DATA CD,24,00,FB,3A,42,F3,E6,03,07,07,07,07,5F,3A,42
180 DATA F3,E6,0C,83,3C,5F,16,00,21,C9,FC,19,36,20,21,09
190 DATA FD,7E,F6,20,77,C9,00,00,00,00,00,23,23,5E,23,56
200 DATA 21,FF,CF,B7,ED,52,E5,C1,D5,E1,13,AF,77,ED,B0,C9

826 :99Basic:OPEN(命令):2023/04/15(土) 00:40:30.08 ID:IAYTkrvAA
OPEN (命令)

================================================================================

ファイルをオープンする。

 書式: OPEN ファイル名 [FOR <INPUT‖OUTPUT‖APPEND‖INPUT,OUTPUT‖INPUT,APPEND‖OUTPUT,APPEND>] AS #ファイル番号

ファイル番号....1〜4 の数値

ファイルをオープンし、読み書きが出来ようにします。オープンしたファイルは、使い終わったら必ず CLOSE しなければなりません。一度にオープンできるのは、最大4ファイルまでです。

ファイルをオープンするとき、OPEN 命令の FOR の後ろに書かれたキーワードによって、オープンするファイルを今後どの様な形で扱うか指定できます。

  (無し) オープンされるファイルは、ランダムアクセスファイルとなります。したがって、LOC 関数や LOF 関数での戻り値は、レコード単位の数値となります。
ファイルが存在しない場合は、新規作成されます。
ファイルは読出、書込の両方が出来ます。
ただし、オープンされるのが通信ポートであった場合は INPUT,OUTPUT と同じ意味になり、LOC関数やLOF 関数で返される値はバイト単位となります。

  FOR INPUT オープンされるファイルは、読出専用シーケンシャルファイルとなります。したがって、LOC 関数や LOF 関数での戻り値は、バイト単位となります。

ファイルが存在しない場合は、File not found エラーとなります。
ファイルは、読出のみ可能で、書込は一切禁止されます。

  FOR OUTPUT オープンされるファイルは、書込専用シーケンシャルファイルとなります。したがって、LOC 関数や LOF 関数での戻り値は、バイト単位となります。
ファイルが存在しない場合は、新規作成されます。ファイルが存在する場合は、以前のファイル内容は破棄され、新規作成される時と同じ状態になります。
ファイルは書込のみ可能で、読出はできません。


  FOR APPEND オープンされるファイルは、追加書込専用シーケンシャルファイルとなります。したがって、LOC 関数や LOF 関数での戻り値は、バイト単位となります。
ファイルが存在しない場合は、File not found エラーとなります。
ファイルが存在する場合は、すでにあるファイル内容の部分はライトプロテクトされて書き込めません。追加書込のみ可能です。読出もできません。
オープンされるのが通信ポートであった場合は、APPEND 属性は使えません。

  FOR INPUT,OUTPUT
オープンされるファイルは、読み書き両用シーケンシャルファイルとなります。したがって、LOC 関数や LOF 関数での戻り値は、バイト単位となります。

ファイルが存在しない場合は、新規作成されます。ファイルが存在する場合は、すでにあるファイル内容についても読み書き自由です。

  FOR INPUT,APPEND
オープンされるファイルは、追加書込できるシーケンシャルファイルとなります。したがって、LOC 関数や LOF 関数での戻り値は、バイト単位となります。
ファイルが存在しない場合は、File not found エラーとなります。
ファイルが存在する場合は、すでにあるファイル内容の部分はライトプロテクトされて書込ませんが、読出は可能です。追加書込された部分は、読み書き自由です。

オープンされるのが通信ポートであった場合は、INPUT,APPEND 属性は使えません。

  FOR OUTPUT,APPEND
オープンされるファイルは、追加書込できるシーケンシャルファイルとなります。したがって、LOC 関数や LOF 関数での戻り値は、バイト単位となります。
ファイルが存在しない場合は、新規作成されます。
ファイルが存在する場合は、すでにあるファイル内容の部分はライトプロテクトされて書き込めません。追加書込のみ可能です。読出もできません。
オープンされるのが通信ポートであった場合は、OUTPUT,APPEND 属性は使えません。

  FOR INPUT,OUTPUT,APPEND
オープンされるファイルは、追加書込できるシーケンシャルファイルとなります。したがって、LOC 関数や LOF 関数での戻り値は、バイト単位となります。
ファイルが存在しない場合は、新規作成されます。
ファイルが存在する場合は、すでにあるファイル内容の部分は、読出可能ですが、ライトプロテクトされて書き込めません。追加書込された部分は読み書き自由です。
オープンされるのが通信ポートであった場合は、OUTPUT,APPEND 属性は使えません。

827 :99Basic:OPEN(命令):2023/04/15(土) 00:42:47.22 ID:IAYTkrvAA
通信ポートをオープンするときのファイル名は、以下の例の様に指定します。

"com1:n81nn9600" Comm-1 ポートを、9600bps、8bit パリティ無し、Stop 1 bit、フロー制御無しでオープンする。
"COM3:e83hh38400" Comm-3 ポートを、38400bps、8bit パリティEven、Stop 1 bit、入力も出力もハードウェア(RS/CS)フロー制御でオープンする。

ファイル名のコロンまでは、オープンする通信ポートの名前を指定します。
"COM1:"、"COMM2:"、"Com3:"、"Comm4:" などの書き方が有効で、
"COM"、"COMM" のどちらの書き方をしても OK です。
大文字小文字の区別もありません。ポート番号は、1〜4 のいずれかです。

コロンの直後からは、通信プロトコルを指定します。この文字列は、N88-BASIC(86)のそれとよく似ていますが、3文字目以降が異なります。
  1文字目.......パリティチェックを指定します。N はパリティを使いません。E はパリティ Even、O はパリティ Odd となります。
  2文字目......データ Bit 数を指定します。5〜8 です。
  3文字目......ストップ Bit 数を指定します。1〜3 で、1 は、1 Bit、2 は 1.5 Bit、3 は 2 Bit になります。
  4文字目......送信時フロー制御です。N は、フロー制御しません。X は Xon/Xoff フロー制御です。R あるいは H は、RS フロー制御、D は DSR フロー制御です。

  5文字目......受信時フロー制御です。N は、フロー制御しません。X は Xon/Xoff フロー制御です。C あるいは H は、CS フロー制御、D は DTR フロー制御です。
  6文字目以降..通信速度を指定します。300、600、1200、2400、4800、9600、14400、19200、28800、38400、57600、115200等の値を指定します。


参照:CLOSE(命令) LOC(関数) LOF(関数)

================================================================================

828 :99Basic:FIELD(命令):2023/04/15(土) 00:46:36.26 ID:IAYTkrvAA
FIELD (命令)

================================================================================

ファイルバッファ内に変数を割りつけます。


 書式: FIELD #ファイル番号[[,]<STEP レコード長‖CONT>],長さ AS 文字列変数[,長さ AS 文字列変数,...]


 FIELD 命令は、PUT 命令や GET 命令でランダムアクセスファイルをアクセスするときに使用される変数を、定義するための命令です。
FIELD 命令を実行すると、1レコードの長さ(省略した場合は 256 バイト)と、1レコードあるファイルバッファをどのように区切って文字変数に割りつけるかが設定されます。

 ここで設定した文字列変数に値を代入すると(LSET、RSET 命令を使います)、自動的にその文字列はファイルバッファに配置されます。
FIELD で設定した文字列変数に値をセットし終わったら(ファイルバッファにデータが出そろったら)、PUT 命令を使いファイルバッファの内容をファイルに書き出します。
 ファイルからデータを読み込む場合は、GET 命令を使います。GET 命令は、ファイルからファイルバッファに1レコード分のデータを読み出してきますが、
ファイルバッファはすなわち、FIELD 命令で設定した文字列変数の文字列領域となっていますから、GET した後、これらの変数の内容は、ファイルから読み出してきたデータそのものとなっています。

 この BASIC の FIELD 命令ではレコード長を設定することができます。レコード長を設定しなければ、レコード長は 256 バイトになります。
文字列変数の長さの合計が、レコード長より長くなってはいけません。短い場合は、単にレコードの中に未使用の部分ができるだけなので、だいじょうぶです。

 この BASIC の FIELD 命令は何行にも分割して定義を書くことができます。2行目以降の定義には、以前の FIELD 命令の続きの定義であることを明示するため、CONT を書きます。
CONT が無い場合、以前の定義は無視されて、新規の定義となります。

 FIELD で指定できるのは文字列変数だけです。数値変数をランダムアクセスファイルで扱うには、MKI$、MKS$、MKD$、CVI、CVS、CVD の各関数を使用して下さい。

 FIELD で指定する文字列への代入には、必ず LSET 命令か RSET 命令を使用しなくてはなりません。
もしふつうに代入すると、変数の参照する文字列が文字列領域内になってファイルバッファから外れます。
GET としても、その内容が反映されなくなってしまいます。SWAP も良くありません。一見うまく行くように見えますが、
FIELD #1,10 AS A$

SWAP A$,B$
の様なことをすると、A$ がふつうの文字列で、B$ がファイルバッファを指すようになってしまいます。混乱の元ですから、この様な使用方法はしないでください。


参照:OPEN(命令) GET(命令) PUT(命令) LSET(命令) RSET(命令) MKI$(関数) MKS$(関数) MKD$(関数) CVI(関数) CVS(関数) CVD(関数)

================================================================================

829 :99Basic:LSET(命令):2023/04/15(土) 00:51:27.03 ID:IAYTkrvAA
LSET (命令)

================================================================================

ランダムアクセスファイルのファイルバッファのフィールドにデータを代入します。


 書式: LSET 文字列変数=文字列

文字列変数......FIELD 命令で指定した文字列


FIELD で指定した文字列変数は、文字列領域ではなく、ファイルバッファに文字列が置かれる様に内部で設定されています。
LSET 命令や RSET 命令は、文字列がどこに置かれるのかという設定を変更しないように、変数に文字列を代入する命令です。

文字列そのものが置かれる場所を変更しないため、変数に代入される文字列の長さも変更されません。
FIELD 命令で 10 文字の文字数と設定されたら、LSET 命令や RSET 命令でどんな文字列を代入しようと、常に 10 文字の長さに保たれます。
長い文字列を代入しようとした時には、オーバーした部分は切り捨てられ、短い文字列を代入しようとした場合には、足りない部分が空白で埋められます。

LSET 命令は、文字列変数が持つ長さより短い文字列を代入しようとした場合、代入する文字列が左側に寄せられ、右側に空白が埋められます。この点が RSET 命令と異なる点です。

文字列変数に、LSET 命令や RSET 命令を使わずに、ふつうに代入すると、文字列変数はファイルバッファを指していたことを忘れ、文字列領域内に文字列を格納してしまいます。
すると、この文字列に何を代入しても、ファイルバッファには情報が届かなくなるので、ファイルへの出力ができなくなります。

LSET 命令・RSET 命令は、ランダムアクセスファイルでの FIELD 命令とともに使われるのが通例ですが、これらの命令を、一般の文字列変数に使用してもいっこうに構いません。
むしろ、文字列領域の再配置などが発生せず、ずっと同じ領域を使用するため、高速になるかもしれません。


参照:RSET(命令) FIELD(命令) OPEN(命令) MKI$(関数) MKS$(関数) MKD$(関数)

================================================================================

830 :99Basic:GET  ◆yxer3StD5w:2023/04/15(土) 00:53:59.37 ID:IAYTkrvAA
GET # (命令)

================================================================================

ランダムファイルから、ファイルバッファへ1レコード読み込みます。


 書式: GET #ファイル番号,レコード番号

 ファイル番号...1〜4 の数値
 レコード番号...0 以上の数値


ランダムアクセスファイルの、指定されたレコード番号の位置にあるデータを、ファイルバッファに読み出してきます。
現在の読み出し位置とは関係なく、指定されたレコード番号の位置から読み出してきます。
この命令の後、読み出し位置は、このレコード番号の次の位置となります。

レコード番号 0 が、ファイルの先頭となります。
レコードの長さは、通常 256 バイトですが、FIELD 命令で特に指定した場合は、その指定値となります。

ここでファイルバッファに読み込んだデータは、FIELD 命令で指定した文字列を参照することで、得ることが出来ます。

ファイルの終端より後ろのレコード番号を指定すると、エラーとなります。


参照:OPEN(命令) PUT #(命令) FIELD(命令) LOF(関数)

================================================================================

831 :99Basic:PUT  ◆yxer3StD5w:2023/04/15(土) 00:56:54.41 ID:IAYTkrvAA
PUT # (命令)

================================================================================

ファイルバッファの内容を、ファイルへ格納します。


 書式: PUT #ファイル番号,レコード番号


ファイルバッファに置かれているデータを、ランダムアクセスファイルの、指定されたレコード番号の位置に書き込みます。
現在のファイル読み書き位置とは関係なく、指定されたレコード番号の位置に書き込みます。
この命令の後、ファイル書き込み位置は、このレコード番号の次の位置となります。

レコード番号 0 が、ファイルの先頭となります。
レコードの長さは、通常 256 バイトですが、FIELD 命令で特に指定した場合は、その指定値となります。

ここでファイルバッファに置くデータは、FIELD 命令で文字列変数をファイルバッファに配置して、LSET 命令や RSET 命令で、データを置きます。

ファイルの終端より後ろのレコード番号を指定すると、エラーとなります。
ファイル終端そのものの番号なら、ファイルの長さが1レコード分追加されます。


参照:OPEN(命令) GET #(命令) FIELD(命令) LOF(関数) LSET(命令) RSET(命令)

================================================================================

832 :99Basic:LOF(関数):2023/04/15(土) 00:59:11.87 ID:IAYTkrvAA
LOF (関数)

================================================================================

ファイルの長さを取得します。


 書式: LOF([#]ファイル番号)

 ファイル番号 ‥‥ 1〜4の数値


# は省略可能です。ファイル番号で指定されたファイルの、ファイル長を返します。
もしファイルがシーケンシャルファイルとしてオープンされているならバイト数でファイル長が得られ、
ランダムアクセスファイルとしてオープンされているなら、レコード数としてファイル長が得られます。


参照:OPEN(命令) LOC(関数) EOF(関数) FSEEK(命令)

================================================================================

833 :99Basic:CLOSE(命令):2023/04/15(土) 01:01:26.82 ID:IAYTkrvAA
CLOSE (命令)

================================================================================

ファイルを閉じます。


 書式: CLOSE [#ファイル番号]

 ファイル番号.....1〜4 の数値


ファイル番号を省略すると、全てのファイルを閉じます。
ファイルがクローズされるのは、CLOSE 命令を使った時の他、以下の場合にも自動的に全ファイルクローズされます。

 ・ END 命令でプログラム実行を終了した時
 ・ SYSTEM 命令で 99 Basic Interpreter を終了する時
 ・ プログラムを書き換えた時
 ・ RUN 命令が実行された時


参照:OPEN(命令)

================================================================================

834 :99Basic:PRINT(命令):2023/04/15(土) 01:06:13.65 ID:IAYTkrvAA
PRINT (命令)

================================================================================

画面やファイルに数字や文字を表示します。


 書式: PRINT [<@画面番号‖#ファイル番号>,][<表示内容[<,‖;>表示内容<,‖;>...]][<,‖;>]


画面やシーケンシャルファイルに数値や文字列を表示・出力します。
画面番号もファイル番号も省略した場合は、SET PAGE で指定した画面番号(通常は1でテキスト画面を指す)の画面に表示します。

画面番号を指定した場合は、キャラクタ画面やグラフィック画面にも出力することができます。
キャラクタ画面に出力するときには関係有りませんが、テキスト画面やグラフィック画面に表示する場合は、COLOR 命令で指定した色で表示されます。
テキスト画面の場合は、COLOR 命令の第1パラメータの値、グラフィック画面ではCOLOR 命令の第2パラメータの値の色が選択されます。

ファイル番号を指定した場合は、そのファイルに数字や文字列を出力します。画面には表示されません。

表示される数値は、プラスの数値の場合は数字の手前に1個の空白、マイナスの場合はマイナスマークが付きます。そして数字の後ろには必ず1個の空白がくっ付きます。
文字列を表示する場合は、空白などがくっ付きません。

表示するものは、カンマかセミコロンで区切られ、いくつも記述できます。
セミコロンで区切られた場合は、表示されるが連続表示されますが、カンマで区切られた場合は次のタブ位置まで空白が置かれます。
タブ位置は、画面左端から 14 桁ごとの位置です。

ファイルに出力される場合は、タブ位置まで空白が埋められるわけではなく、代わりにタブコード CHR$(9) が挿入されます。

この命令の、もっとも最後にカンマかセミコロンが付いている場合は、改行されずに、次に実行される PRINT 命令の表示が続けられます。
どちらも付いていない場合は改行されます。

総レス数 834
1026 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★