表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
28/37

補足 MZ80のBASIC言語(SP5030)の処理


 ***


 補足 MZ80のBASIC言語(SP5030)の処理


 ***


 第二部で解読した情報を整理しました。


 ですが読まないで次エピに進んで問題ないです。と言うか第二部を読まないでこいつを読んでも意味不明だと思います。


 第二部を読んでいて(感謝です)...、この番地は何だったかな? と思った時に参照して下さいな。


 なお本編は予告も報告もなく更新されますョ。ご承知おきを。


 ***

 **

 *


 * * * * * * * * * * * * * * * *

 * 処理

 * * * * * * * * * * * * * * * *


 :::::::::::::::::::::::::::::::

 1200 〜 124C : 初期化処理(エピ5で解説)


 124D 〜 12DF : メインループ(エピ6とエピ7で解説)

  ・124D 〜 1258 : (M1)「READY」を表示

  ・1259 〜 1277 : (M2) 4565hが00hならスタックポインタを復旧, 47FFh〜4800h(実行中の文番号)が 0000h以外なら47FDh〜4802hの6バイトを退避

  ・1278 〜 1290 : (M3) 47FDh〜4800hの4バイトをゼロクリア, 改行して入力待ち。入力を調べて文番号があれば4457h〜4458hに格納, 命令文は中間コードに変換して4459h〜に格納, 文番号の有無により(M4)または(M5)に進む

  ・1291 〜 129E : (M4) 文番号無しなら直接実行命令文として実行, (M3)に戻る

  ・129F 〜 12DF : (M5) 文番号付きなら4577hと4565hを00h, プログラムとして記憶, (M2)に戻る


 :::::::::::::::::::::::::::::::

 12E0 〜 13BB : エラーメッセージの処理(エピ5で解説)

  ・12E0 〜 1354 : メッセージ文字列。0Dhで終端

    ・12E0 〜 : " * SHARP_BASIC_SP-5030",0Dh

    ・12F7 〜 : "READY",0Dh

    ・12FD 〜 : " ERROR",0Dh

    ・1304 〜 : " IN",0Dh

    ・1308 〜 : "SYNTAX",0Dh

    ・130F 〜 : "MEMORY",0Dh

    ・1316 〜 : "DATA",0Dh

    ・131B 〜 : "MISMATCH",0Dh

    ・1324 〜 : " BYTES",0Dh

    ・132B 〜 : "BREAK",0Dh

    ・1331 〜 : "16FOR",0Dh

    ・1337 〜 : "16GOSUB",0Dh

    ・133F 〜 : "6FN",0Dh

    ・1343 〜 : "CONT",0Dh

    ・1348 〜 : "FILE",0Dh

    ・134D 〜 : "OVERLAY",0Dh

  ・1355 〜 135A : 画面表示(ROM:0009hと0015hをコール)

  ・135B 〜 1381 : 表示処理

  ・1382 〜 13BB : メッセージ毎のエントリー

    ・1382 〜 : BREAK

    ・138A 〜 : SYNTAX ERROR

    ・138F 〜 : MEMORY ERROR

    ・1394 〜 : DATA ERROR

    ・1399 〜 : MISMATCH ERROR

    ・139E 〜 : 16FOR ERROR

    ・13A3 〜 : 16GOSUB ERROR

    ・13A8 〜 : 6FN ERROR

    ・13AD 〜 : FILE ERROR

    ・13B2 〜 : OVERLAY ERROR

    ・13B7 〜 : CONT ERROR


 :::::::::::::::::::::::::::::::

 13BC 〜 13C8 : 4565h に 00h, 01h, 02h をセット(エピ6で解説)

  ・13BC 〜 : [4565h] = 00h; プログラムの変更有

  ・13BF 〜 : [4565h] = 01h; STOP,ENDで停止

  ・13C3 〜 : [4565h] = 02h; BREAKで停止


 13C9 〜 1614 : 入力文を中間コードに変換(エピ6で解説)

  ・13C9 〜 143C : 変換1

  ・143D 〜 148C : 変換2

  ・148D 〜 14D3 :(13C9h,143Dhのサブルーチン)

    ・148D, 14C1, 14A1, 14B6, 14AD

  ・14D4 〜 1614 : 中間コードのリスト(80h〜DBh)。MSB==1で終端


 1615 〜 1628 :(定数データ; 5バイトx4個); 各所から参照

  ・1615: C1 00 00 00 80 = 1.0

  ・161A: 80 00 00 00 00 = 0.0

  ・161F: 41 00 00 00 80 = -1.0

  ・1624: C2 A1 DA 0F C9 = 3.14159265 ; PI


 :::::::::::::::::::::::::::::::


 ::::::::::::命令文のスキャン

 1629 〜 : HL=[4801h], HL--; 次に続く; 呼び出し元が不明

 162D 〜 : HL++; 次に続く

 162E 〜 1633 : while([HL]==0x20){HL++}

 1634 〜 163C : 次の文字列を探す; A=0Dh, while([HL]!=0Dh){HL++}; AF保存

 163D 〜 : HL++; 次に続く

 163E 〜 1651 :(REM,DATAからコール)HLを0Dh,":"まで進める("〜"の処置含)

 1652 〜 1659 : BC = 1-BC; BCを反転してINC

 165A 〜 1662 :(16C9h のサブルーチン)文番号の有無の判定に利用; [HL]>=3Ahを判定, A=[HL]; RUNからコール

 1663 〜 1668 :(179Bh のサブルーチン)HL?=DEを判定

 1669 〜 166F : HL=DE-HL

 1670 〜 : pop HL; 次に続く★

 1671 〜 : ex (SP),HL; 次に続く★

 1672 〜 1679 :(168Chからジャンプ)d0,d1にジャンプ★

 167A 〜 : pop HL; 次に続く★

 167B 〜 167F : (SP)を +2 して RET(リターン番地を2進める)★

 1680 〜 1688 :(175Eh,1773h のサブルーチン);HL := [4644h] + 5

 1689 〜 : HL = [4801h]; 次に続く★

 168C 〜 1696 : (M4) からコール; [HL]!=d0ならd1,d2にジャンプ; 19CBhに飛ぶ★

 1697 〜 : HL = [4801h]; 次に続く★

 169A 〜 : 162Ehをコール, [HL]!=d0 なら SYNTAX ERR; 次に続く★

 16A2 〜 16A5 :(168Chのジャンプ先)[SP]を+1, 162Dh にジャンプ


 ::::::::::::基数の変換

 16A6 〜 16C2 : DEをHL倍する; if(H!=00h and D!=00h){jp d0,d1}★

 16C3 〜 16C8 : call 16A6h(d0,d1=1394h), ret

 16C9 〜 16E8 : DEに文番号をセット(10進を16進に)★

 16E9 〜 16EE : call 16C9h(d0,d1=138Ah), ret

 16EF 〜 : C=00h; 次に続く

 16F1 〜 1719 : 16進数を10進文字列に変換(HLを変換して[DE]にセット)

 171A 〜 1733 : (16F1hのサブルーチン)


 ::::::::::::メモリのチェック

 1734 〜 : BC=0000h; 次に続く

 1737 〜 1749 : メモリサイズのチェック

 174A 〜 1751 : 1737hをコール(メモリサイズのチェック);DE,HL保存


 ::::::::::::プログラム編集用か?

 1752 〜 175D : HLからの4バイトをHL(番地),DE(文番号)にロード。HLの0判定

 175E 〜 1772 : 削除する文の次文から最後の文までをDEに移動; DE,HL,BC保存

 1773 〜 178C : LDDRを実行

 178D 〜 : 1773hをコール(挿入先以降をLDDR); 次に続く

 1790 〜 179A : 挿入元から挿入先にLDIR, DE,HL,BC保存

 179B 〜 : HLを[462Eh]に保存; 次に続く★

 179E 〜 17B8 : [462Eh]と同じ文番号を探す; jp d0,d1有; call 1752h, 1663h★

 17B9 〜 17CC : [HL]==0000hならjp d0,d1; 1663hをコール★

 17CD 〜 17DB : 次文への番地ポインタを修正。

  ・17D4h 〜 :(同上のエントリー)

 17DC 〜 17E6 : HL番地の文のバイト数をBCに格納(番地と文番号の4バイトを含)


 ::::::::::::数値ワークと文字ワーク

 17E7 〜 : BC = 0000h; 次に続く

 17EA 〜 17F4 :(17DCh のサブルーチン)while([HL]!=0Dh){HL++, BC++}; BC--; HL保存

 17F5 〜 1802 : 文字ワーク[4642]の末尾をDEに; 1634hをコールして0DhをE個スキップ

 1803 〜 1807 : 値や変数の型をチェック; err-msg MISMATCH, if D==00h

 1808 〜 180D : 値や変数の型をチェック; err-msg MISMATCH, if D!=00h

 180E 〜 1817 : HL=DE, DE=[4644h](=数値ワーク), BC=0005h, LDIR, ret

 1818 〜 181C : HL=[4644h](=数値ワーク), (DEはそのまま), BC=0005h, LDIR, ret


 181D 〜 1825 : 162Ehコール, [HL]を0Dh,3Ah(":") と比較


 :::::::::::初期化1〜3(エピ11で解説)

 1826 〜 1849 : 初期化1; ..., 13BCh,184Ah,186Fhをコール

  ・1842 〜 1849 :(上の一部; 1889hをコール)

 184A 〜 186E : 初期化2(1826h のサブルーチン); ...

  ・1865 〜 186E :(上の一部; HL=[4642h]で1889hをコール, [4644]=HL)

 186F 〜 1888 : 初期化3(1826h のサブルーチン); [464Ah]=47F0h, [4648h]=4787h, [4646h]=476Ah, HL=4803hで1889hをコール, [HL]=A

 1889 〜 188E :(184Ah,186Fh のサブルーチン; LISTからコール)A=0, [HL]=A, [HL+1]=A, HL+=2

  ・188A 〜 : (同上; A=0しない; LISTからコール)[HL]=A, [HL+1]=A, HL+=2


 ::::::::::::

 188F 〜 18B2 : 変数領域の更新; [4644h]〜DEにBCを加算(INC/DEC)

 18B3 〜 18FB : DATA文のデータを文字ワーク[4642]にLDIR, [4644]+=BC,

  ・18B6 〜 : ?

  ・18CE 〜 :

 18FC 〜 192B : d0,d1; jp 1671h or 167Bh★

 192C 〜 193B : 0-9,".","-","+" と比較; 1917h,236Bhからコール

 193C 〜 1961 : 数値ワークにある配列の添字をチェック

 1962 〜 : 数値の処理; HL=456Ch, 196Ah へ

 1967 〜 : 変数の処理; HL=4570h, 196Ah へ

 196A 〜 1972 : BC,DEを[HL]〜にセット

 1973 〜 1977 : A=00h,[4577h]=00h,ret; 4577hはREADしたデータ数, RESTORE命令からコール

 1978 〜 1994 : 配列の添字を評価; 数値ワークを +5, 2551hをコール, 193Chをコール, 数値ワークを -5

  ・198C 〜 1994 : 数値ワーク[4644h] にBCを加算

 1995 〜 199D : 配列の添字の処理; 1978hをコール, D!=00hならDATAエラー


 :::::::::::::::::::::::::::::::

 199E 〜 1A5F : 直接実行可能な中間コードの分岐処理(エピ7で解説)

  ・199E 〜 : HL = [4801h]

  ・19A1 〜 : 162Ehをコール

  ・19A4 〜 : [HL]==0Dhなら19B1hへ

  ・19A8 〜 : [HL]==3Ah(':')なら[4801h]=HLして19CBhへ(':'でなければ SYNTAX ERROR)

  ・19B1 〜 : [47FDh]==00hなら124Dhへ

  ・19B9 〜 : [HL]から47FDh〜に4バイト転送(HL+=4), [4801h]=HL, [47FEh]==00hなら"END"へ

  ・19CB 〜 1A0D : 中間コードの分岐処理(A=[[4801h]], DE=1A0Eh)

    ・1A01 〜 :(同上; A,DEはそのまま)

  ・1A0E 〜 1A5F : ジャンプテーブル(直接実行可能な中間コード 80h〜A8h の分岐先)


 :::::::::::::::::::::::::::::::

 1A60 〜 1A65 : "NEW" 命令; 1826hコール, 124Dhにジャンプ

(1A66 : LIST用データ; 00h=通常, 01h=LIST/Pの場合)

 1A67 〜 1ACF : "LIST" 命令

  ・1AD0 〜 1AE2 : LIST nn-mm の処理 (1A8Fhからジャンプで来て1A95hに戻る)

  ・1AE3 〜 1AEF : LIST nn-mm の処理 (ジャンプで来て)

  ・1AF0 〜 1AF8 : 改行

  ・1AF9 〜 1B09 : 1行表示

 1B0A 〜 1B0C : "RESTORE" 命令; 1973hコール

 1B0D 〜 1B12 : "REM" 命令, "DATA" 命令; 163Ehコール, 19A4hにジャンプ

 1B13 〜 1B1B : "END" 命令

 1B1C 〜 1B24 : "STOP" 命令

 1B25 〜 1B4F : "LET" 命令;

 1B50 〜 1C0E :(LETからコール); d0,d1付き★

 1C0F 〜 1CA4 : "PRINT" 命令

 1CA5 〜 1CCC : "RUN" 命令

  ・1CB4〜1CB1 : "GOTO" 命令

 1CCD 〜 1CFE : "GOSUB" 命令

 1CFF 〜 1D2E : "RETURN" 命令

 1D2F 〜 1DBA : "FOR" 命令

 1DBB 〜 1DC3 :(FORからコール);

 1DC4 〜 1E40 : "NEXT" 命令

 1E41 〜 1E45 :(NEXTからコール);

 1E46 〜 : "INPUT" 命令

 1F6C 〜 : "READ" 命令

 1FB0 〜 2004 : "ON" 命令


 2005 〜 2084 : "DIM" 命令

(2085 〜 2086 : 番地?; 配列の処理で参照)

(2087 : 00h=1次元配列, 01h=2次元配列)

(2088 〜 2089 : 配列で)

 208A 〜 20EF :(DIMからコール, 配列処理からコール)

 20F0 〜 20F1 : xor A,ret

 20F2 〜 2106 :(DIMからコール)

 2107 〜 2112 :(DIMからコール)2次元配列の2つ目の添字を評価; 1995hコール


 2113 〜 2123 : "POKE" 命令;

 2124 〜 212D : "CLR" 命令; 184Ah,1865hコール, 19A1hへ

 212E 〜 215B : "IF" 命令; IF-GOTO, IF-GOSUB, IF-THEN-999, IF-THEN-etc

 215C 〜 21CE : "DEF FN" 命令;

 21ED 〜 21FD : "TEMPO" 命令; 1995hコール, ROM:XTEMPコール, 1B0Dhヘ


 :::::::::::::::::::::::::::::::

 21FE 〜 224F : 数式処理ルーチン達の★1(エピ14で解説)

  ・21FE: inc HL

  ・21FF: 2251hをコール

  ・2202: A<B0h('><')ならRET, A>=BCh('+')ならRET

  ・2208: A=[B0h..BBh]の場合; ><, =<, =, >, <, AND, OR, NOT

       D==00hなら 22D4hへジャンプ; BC=2202h,DE=2250h

       D!=00hなら 2218hへ続く

  ・2218: ?(文字列 = 文字列) ...の評価?

 2250 〜 22B0 : 数式処理ルーチン達の★2

  ・2250: inc HL

  ・2251: A=[HL], 20hならスキップ

  ・2256: A=BCh('+')なら 2266hへ

      A=BDh('-')なら 225Ehへ

      それ以外なら 2267hへ

  ・225E: 22B1hをコール, 232Bhをコール, 226Ahへ

  ・2266: inc HL

  ・2267: 22B2hをコール

  ・226A: A<BCh('+')ならRET, A>=BEh('*')ならRET

  ・2270: A=[BCh..BDh]の場合; +, -

       D==00hなら 22D4hへジャンプ; BC=226Ah,DE=22B1h

       D!=00hなら 227Fhへ続く

  ・227F: ?文字列 + 文字列 ????

 22B1 〜 22C3 : 数式処理ルーチン達の★3

  ・22B1: inc HL

  ・22B2: 22C5hをコール

  ・22B5: A<BE(*)ならRET, A>=C0(LEFTS)ならRET

  ・22BB: A=[BE..BF]の場合; *, /,

       22D4へジャンプ; BC=22B5h,DE=22C4h

 22C4 〜 22D3 : 数式処理ルーチン達の★4

  ・22C4: inc HL

  ・22C5: 231Dをコール

  ・22C8: A!=CF(^)ならRET

  ・22C8: A==CFの場合

       22D4へ続く; A=C0h,BC=22C8,DE=231C

 ::::::::::::

 22D4 〜 22F6 : TBL1の分岐処理; 数値ワークを+5, 分岐先と22F7hをPUSH, [DE]へ

 22F7 〜 2310 : TBL1のジャンプ; 数値ワークを-5, 2314hをPUSHして分岐

 2311 〜 : 180Ehコール(数値ワークにDEから5バイト転送); 次に続く

 2314 〜 : 分岐処理の後処理; pop HL; 次に続く

 2315 〜 231B : BC=0005h, DE=0000h, A=[HL], RET


 ::::::::::::

 231C 〜 233F : 値の処理(変数・関数・数値・文字列・・・)

  231C: inc HL

  231D: 162Eをコール

  2320: A=BC(+)なら 2340hへジャンプ

  2324: A!=BD(-)なら 2341hへジャンプ

  2328: 2340hをコール

  232B: ?


 2340 〜 2361 : 値の処理の本体

  2340: inc HL

  2341: 2556hをコール(変数名のチェック) [A-Z][A-Z,0-9]

  2344: NCなら 2362hへジャンプ(A-Z以外の場合) 数値,記号,中間コード

  234E: DE='FN'なら 2405hへジャンプ(関数定義)

  2351: 23C7hをコール(変数)

  2357: B=00なら 2311hへジャンプ(数値ワークに転送してRET)

  235C: 18CEhをコール(文字ワークに転送)

  235F: pop HL, A=[HL], RET


 2362 〜 2391 : 文字以外の場合 (数値,記号,中間コード,FFh)

  2362: 28h'(', 22h'"' と比較; 括弧は2384h, 文字列は18B3hへジャンプ

  236B: 192Chをコール(数値か判定)

  236E: NCなら 2377hへジャンプ(中間コードかFFh)

  2374: 2F75hへジャンプ ★★★(数値の場合)


 2377: A!=FFなら 2392hへジャンプ(中間コード)

 237B: FFなら パイを設定


 2384 : 括弧の場合

  2384: BC = 0000h

  2387: 174Ahをコール ; メモリサイズのチェック

  238A: 21FEhをコール ; +++++++++++ ルーチン★1★

  238D: 169Ah(29h)をコール ; 29h=')'

  2391: ret


 ::::::::::::

 2392 〜 23C6 : 中間コードの処理; C0h〜CEhはTBL2で分岐, D0h〜DEhはTBL3で分岐(スタックフレーム注意; PUSH HL,PUSH 2314h)

 ::::::::::::

 23C7 〜 23D1 : 変数の処理; 文字変数は2486h, 配列は2511hへ

 23D2 〜 2404 : 数値変数の処理; DEと同じ名前の変数を探索, 無ければ追加

 2405 〜 2485 : 関数定義の処理; Eと同じ名前の関数定義を探索, 無ければSYNTAX ERRORへ

 2486 〜 24C4 : 文字変数の処理(文字配列は250Chへ)

 24C5 〜 24EA : TI$の処理

 24EB 〜 24EB : A=00h, 24EChへ

 24EC 〜 24F4 : HL+=DEしてカウント?, 24F5hへ

 24F5 〜 250B: [HL] に何かをセット; [HL]=0Dh

 250C 〜 2510 : 文字配列変数の処理; BC=0100h, 2514hへ

 2511 〜 2513 : 数値配列変数の処理; BC=0000h, 2514hへ

 2514 〜 2554 : 配列変数の共通の処理

 2555 〜 : inc HL, 次へ続く

 2556 〜 259A : 変数名をチェック; 結果はCfにセット

 259B 〜 25AC : (LETから)2556hコール, DE="FN"ならSYNTAX ERROR


 ::::::::::::

 25AD 〜 25CE : ジャンプテーブル1(B0h 〜 BFh, CFh)

 25CF 〜 25E6 : ジャンプテーブル2(C0h 〜 CBh)

 25E7 〜 25FE : ジャンプテーブル3(D0h 〜 DBh)


 ::::::::::::

 25FF 〜 262F : C0 "LEFT$(" 関数;

 2630 〜 2651 : C1 "RIGHT$(" 関数;

 2652 〜 2689 : C2 "MID$(" 関数;

 268A 〜 268C : B9 "AND"

 268D 〜 268E : BA "OR"

 268F 〜 2690 : BB "NOT"

 269F 〜 26B7 : C4 "CHR$(" 関数;

 26B8 〜 26D3 : C5 "STR$(" 関数;

 26D4 〜 26F0 : C7 "VAL(" 関数;

 26F1 〜 2720 : C6 "ASC("

 2721 〜 2730 :(2709hからコール)

(2731 : 00 ; PEEK用データ; 00h=PEEK範囲を制限, 00h以外=制限なし)

 2732 〜 274E : C8 "PEEK("

 2750 〜 2775 : C9 "TAB(" 関数;

 2776 〜 2799 : CA "SPC(" 関数; 4400hを使用

 279A 〜 27AB : CB "SIZE" 関数;

 27AC 〜 27B0 : D9 "ABS(" 関数; A=[DE], A|=80h, [DE]=A, ret

 27B1 〜 27C5 : DA "SGN(" 関数;


 :::::::::::::::::::::::::::::::

 27C6 〜 27C8 : "BYE" 命令; 0000hへ

 27C9 〜 : "CURSOR" 命令

 27FC 〜 : "GET" 命令

 2852 〜 : "USR(" 命令

 2875 〜 : "LIMIT" 命令

 28AE 〜 : (POKEからコール)

 28DD 〜 290A : "CONT" 命令

 290B 〜 290D : "SET" 命令; A=01hで2910hへ

 290F 〜 290F : "RESET" 命令; A=00hで次ぎに続く

 2910 〜 296F : SET,RESETの共通の処理


 ::::::::::::

 2970 〜 : "VERIFY" 命令

(2995-2997 : "OK",0Dh)

(2998 : 00h ; 00h以外ならLIST禁止, SAVE禁止)

(2999 : 00h ; SAVE命令で参照; 1108hに転送)

(299A : 00h )

 299B 〜 2A14 : "SAVE" 命令

 2A15 〜 : "LOAD" 命令

 2ADE 〜 2AF6 : msg + FileName

(2AF7: "FOUND",0Dh)

(2AFE: "LOADING",0Dh)

(2B07: "VERIFYING",0Dh)

 2B12 〜 2B1D : 1826hコール; DATA ERRかBREAKを表示

 2B1E 〜 2B34 : SAVE前; プログラム領域の番地をバイト数に変換

 2B35 〜 2B47 : LOAD後; プログラム領域のバイト数を番地に変換

 :

 2B79 〜 : "WOPEN" 命令

 2B98 〜 2BA8 :(SAVEからコール); ROM:save1をコール

 2BA9 〜 : "ROPEN" 命令

 2BBB 〜 :

 2BD5 〜 2C04 : "CLOSE" 命令

 2C05 〜 2C19 :(INPUTから)

 2C1A 〜 : PRINT ?


 ::::::::::::

 2C9D 〜 : INP#

 2CF0 〜 2D07 : OUT#


 :::::::::::::::::::::::::::::::

(2D08 : 00h)

(2D09 : 00h)

(2D0A : 00h)

 2D0B 〜 : '-': BD

 2D0E 〜 : '+': BC

 2D97 〜 2DA4 : 35E1hコール, [HL]以降にA,E,D,C,Bをセット; ex. HL=4818, AEDCB=数値

 2DC0 〜 : (実質コール) 2D97にジャンプ, RETでPUSHされている番地にリターン?

 2E08 〜 : '*': BE

 2E1B 〜 : (実質コール)

 2ED6 〜 : '/': BF


 ::::::::::::

(2F72 : 00 > 1D ;@3005 )

(2F73,2F74 : 0000 > 4818 ;@2F7D )

 2F75 〜 305F : 数値の場合の処理

  2F90: 3075hをコール

  2F93: 306Bhをコール

  3026: 2DC0hへジャンプ(実質コール)

  ・3029 〜 :

  3055: 2E1Bhへジャンプ(実質コール)

  ・3058 〜 305F : pop HL, BC=0005h, DE=0000h, A=[HL], ret

  305F: RET

 3060 〜 306A :


 306B 〜 3074 : IX++, A=[IX], while(A!=20h){IX++, A=[IX]}; ret

 3075 〜 :


(30B1-31A5 : DATA, 5*49?)

(3146 : )

(31A6-31BD : 00h * 24)


 31BE 〜 : (STR$()からコール)


 3366 〜 : BC=0005h,次に続く

 3369 〜 : [DE]〜と[HL]〜とをBCバイト分比較する

 3389 〜 : D6 INT(

 345F 〜 :

 3465 〜 : >< B0; <> B1

 348A 〜 : =< B2; <= B3

 348E 〜 : => B4; >= B5

 3482 〜 : = B6

 3476 〜 : > B7

 347A 〜 : < B8

 349B 〜 : D0 RND( 

(34E7-34F0 : DATA, 5*2)

(34F1-3504 : DATA, nop 5*4)

 3505 〜 :

 350B 〜 :

 3511 〜 :

(3517-3518 : DATA, 2バイト)

 3519 〜 : D1 SIN(

 35C8 〜 35E9 :

  ・35E1 〜 35E9 : BC=0000h, DE=0000h, A=80h をセット

 3608 〜 3616 : D2 COS(

 3617 〜 : D3 TAN(

 3642 〜 : DB SQR(

(36EF-3702 : DATA, 5バイト4個)

(3703-3704 : DATA, 2バイト)

 3705 〜 3805 : D5 EXP(

 37BC

 37ED

 37FB

(3806-3832 : DATA, 5バイト9個)

(3803-3835 : DATA, 3バイト)

 3836 〜 3941 : JMP-TBL 3: D8 LN(

(3942-3964 : DATA, 5バイト7個)

 3965 〜 396F : JMP-TBL 3: D7 LOG(

(3970-3975 : DATA; = BF A9 D8 5B DE)

(3975-3976 : DATA)

 3977 〜 : JMP-TBL 3: D4 ATN(

 3A22-3A4E : DATA; 45バイト

 3A4F-3A59 : DATA; 00h * 11

 ・3A4F,3A50

 ・3A53

 ・3A54 : =80h

 ・3A55 : A

 ・3A56 : E

 ・3A57 : D

 ・3A58 : C

 ・3A59 : B

 3A5A 〜 3AA4 : JMP-TBL : ^ C0 (was CF)

 3AA5 〜 3AEC :(べき乗 '^' からコール)



 ::::::::::::プリンタ出力の処理

 3AED 〜 : LIST/P

 3AF2 〜 : PRINT/P

 3B02 〜 : PRINT ?

 3B1E

 3B4B 〜 : LIST/P

 3B8B 〜 : PRINT/P, /T ?

 3BA5 〜 :

 3BB6

 3BC3 〜 : LIST/P

 3BCA 〜 :

 3BE0

 3BF2

 3C06

(3C2F-3C52 : "NO POWER OR NO CONNECTION (PRINTER)",0Dh)

(3C53-3C58 : "ALARM",0Dh)

(3C59-3C64 : "PAPER EMPTY",0Dh)

(3C65 : 文字列のワーク用)


 ::::::::::::

(3C66-3C8D : ワーク用?, 40文字分)

 3C8E 〜 3CCA :(PRINT命令の1C89hからジャンプ)

 3CCB 〜 3D23 :


 ::::::::::::

(3D24 : リピート中のキーコード)

(3D25 : オートリピート; 00h=オン, 01h=オフ)

 3D26 〜 3E40 : 1行入力([3D25h]!=0ならROM:0003hをコール)

 3E41 〜 3E77 : 1文字入力/オートリピート用

 3E78 〜 3E8C : ピポ音出

 3E8D 〜 3ED5 : 1文字入力


 :::::::::::: I/O; コール元が不明

(3ED6-3EF0 : DATA)


 3EF1 〜 3F06 :

 3F07 〜 3F37 :

(3F38 〜 3F43 : DATA )

 3F44 〜 3F5C :

(3F5D-3F64 : "J,$13A8",0Dh)

 3F65 〜 3F7E :

 3F7F 〜 3F81 : A=00h, jr 3F76h

 3F82 〜 3FA3 :(3F6Ehからコール) JP (IX)

 3FA4 〜 3FB4 :(3F85hからコール)

 3FB5 〜 3FD3 : I/O

(3FD4-3FDB : "J,$0048",0Dh)

 3FDC 〜 4006 :(3F0Chからコール) I/O

 4007 〜 4048 : I/O


 ::::::::::::(エピ10で解説)

 4049 〜 4068 : LOAD 処理1(ファイル名等の128バイト)

 4069 〜 4080 : LOAD 処理2(データ本体)

 4081 〜 40FB : 3)データの取得(BCバイトを[HL]番地に格納)

 40FC 〜 4121 : 0連続待ち

 4122 〜 4127 : 2)40FChコール, 065Ehコール(1連続0連続待ち)

 4128 〜 413F : 1)06B2hコール(テープ・スタート待ち), 20000hループ


 ***


 間違いの指摘とか疑問とか、ご意見・ご感想とかありましたら、どうぞ感想欄に!


 ***

2026.3.31 推敲

2026.4.2 微推敲

2026.4.3 推敲

2026.4.18 エピを入れ換え(初出: 2026/02/03 21:58)

評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

↑ページトップへ