2023年5月20日土曜日

コンパイラ作成の試み その1「ハイクラスC言語」のリストを入力



 コンパイラを作ってみたくて「ハイクラスC言語」のリストを入力してみました

昔からコンパイラの自作に憧れていまして、入手した書籍は十数冊になると思いますが、本をいくら読んでも(もちろん、完全に理解できるまで読み込めていないのですが)、コンパイラ(あるいはインタプリタ)の構造についてはおぼろげには理解できたような気がしても、実際のプログラムをどのように構成すればよいのかが良く分かりませんでした。

目標は6809用の整数型のコンパイラの自作なので、特に具体的なコード生成手法を知りたいのですが、何しろコンパイラの本というのは理論的な本が多くて、、、


今までに読んだ本で印象に残っている本を挙げると、


・明解入門 コンパイラ・インタプリタ開発 (林晴比古 SoftBank社)
 分かりやすかったのですが、変数の使える電卓プログラムまででめげました。

・Go言語でつくるインタプリタ (Thorsten Ball著、設楽洋爾訳 技術評論社)
 段階ごとにテストで確認しながら進む手法に感心しましたが、使ったことがないGo言語に戸惑いながらでしたので、途中で力尽きました。

・コンパイラ 作りながら学ぶ (中田育男 オーム社)
 言わずと知れた中田先生の本です。この本で扱われているPL/0をFLEX9上のMicroCコンパイラを使用して6809に移植しようと試みたのですが、私には無理でした。

・Z80CPU対応 新言語作成の技法 (大貫広幸著 MIA社)
 ほとんど使用経験のないZ80の本ですが、この本で初めてコード生成の具体的手法を知りました。後半はPC-8801とCP/M-80で動作するコンパイラ言語Stellarのアセンブルリストが掲載されています。(いつかCP/M-80版を入力してみたいです。120ページ以上ありますが

・ハイクラスC言語 (末石吾朗、小林優 技術評論社)
 具体的なコード生成に重点を置いているので読みやすいです。仮想マシンの命令コードを設定して、それに対応するコンパイラと、生成された仮想コードを解釈・実行するインタプリタのソースリストが掲載されています。

何冊読んでもなかなか進めないので、思い切って作り始めようと考えたのですが、実は今までにも始めながら途中で投げ出したことが数回ありますので、ゼロから作り始めるのは無理だと考えて、大昔に購入して本棚に入れたままになっていた「ハイクラスC言語」中のリストをまず入力して、その仮想マシンの部分を6809に置き換えるという方針で始めることにしました。




何とプログラムリストの一部が欠落していた


コンパイラプログラムmccとインタプリタプログラムmaiを入力してみました。
入力してみて初めて分かったのですが、何とmccの8個のファイルのうちの c_dec.c のリストが抜け落ちているのです。。。(誤植にしてはヒドイ...)
ただ、その中に3つの関数があることは分かっていて、それらの処理内容も本文中に書かれているので、既に他のファイルは入力してしまったこともあり、何とか自分で記述するしかないと覚悟をしました。
(ちなみに、所有しているのは平成5年の初版で誤植が非常に多いのですが、30年前のものなので、出版社のサイトを見ても関連する資料が見つかりません...)

作成しなければならない関数は、変数宣言を処理する vardec()、関数を処理する function()、文をコンパイルする statement()の3つです。
その仕様についての解説です。

vardec関数の仕様

function関数の仕様

statement関数の仕様


四苦八苦しながら2週間近くかかって何とかエラーが出ない状態にすることができましたが、その過程でプログラムの構造について結構理解が進んだような気がしますので、結果的には良かったと考えることにします。


30年も前の書籍ですし、今更リストを入力しようとする方もおられないとは思いますが、私が書いた c_dec.c を下に示しておきます。(書籍中のリストにこれを追加することで、一応、正常に動作すると思います。)

c_dec.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
/***********************************************************************
 ****                               ****
 **** c_dec.c Micro C Compiler declaration procedure file <span>    </span>****
 ****                               ****
 ***********************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "c_mcc.h"
 
/***************************************************************
 *    vardec()    変数宣言の処理
 *      戻り値:  なし
 *      引数:   なし
 ***************************************************************/
void vardec(void)
{
  do {
    getsym();
    if (sym != IDENT)
      puterr("Variable ID expected.");
    getsym();
    if (sym != LBRCKT) {  /* 単純変数 */
      enter(VAR_SMPL);
      gen(VAR_SMPL, lblcnt++);
    }
    else {          /* 配列変数 */
      getsym();
      if (isdigit(sym) != 0)
        puterr("Number expected.");
      enter(VAR_ARY);
      gen(VAR_ARY, lblcnt++);
       
      getsym();
      if (sym != RBRCKT)
        puterr("']' expected.");
      getsym();
    }
  } while(sym == COMMA);
   
  if (sym != SEMICOL)
    puterr("';' expected.");
  getsym();
}
 
/***************************************************************
 *    function()    関数処理
 *      戻り値:  なし
 *      引数:   なし
 ***************************************************************/
void function(void)
{
  int i, mflag;
  int j;
   
  source_f();
  if ((i = position()) < 0) {
    label(lblcnt++, fp);
//    enter(FUNCID);
    enter(UNDEFID);
  }
  else {
    if (strcmp(id, "main") == 0) {    /* if "main" */
      j = 0;
      while (strcmp(idtbl[j].name, id) != 0 && j <= idcnt) {
        j++;
      }
      if (j < idcnt) {       /* already exist */
        if (idtbl[j].kind != UNDEFID) {
          puterr("Symbol redeclarated.");
        }
        else {
          mflag = ON;
          label(0, fp);
//          enter(BLTFUNC);
          idtbl[j].kind = BLTFUNC;
          idtbl[j].addr = j;
        }
      }
    }
    else if (idtbl[i].kind == UNDEFID) {
      label(idtbl[i].addr, fp);
//      enter(FUNCID);
      idtbl[i].kind = FUNCID;
//      idtbl[i].addr = lblcnt;
    }
    else
      puterr("Symbol redeclarated.");
  }
   
  getsym();
  if (sym == LBRACE) {
//    i = 0;
//    while (strcmp(id, idtbl[i].name) != 0 && i < idcnt)
//      i++;
//    label(idtbl[i].addr, fp);
    getsym();
    while (sym != RBRACE) {
      statement();
      if (sym == EOFSYM)
        puterr("'}' expected.");
    }
//      if (strcmp(id, "main") == 0 && mflag == ON) { /* if "main" */
      if (mflag == ON) {  /* if "main" */
        gen(JUMP, 1);
        mflag = OFF;
      } else
        gen(RET, DUMY);
//    }
  }
  else
    puterr("'{' expected.");
   
  getsym();
}
 
/***************************************************************
 *    statement()   文処理
 *      戻り値:  なし
 *      引数:   なし
 ***************************************************************/
void statement(void)
{
  switch (sym) {
    case IDENT:
          assign();
          break;
    case IFSYM:
          if_proc();
          break;
    case WHILESYM:
          while_proc();
          break;
    case DOSYM:
          do_while();
          break;
    case CALLSYM:
          call_proc();
          break;
    case INPUTSYM:
          input_proc();
          break;
    case PRINTSYM:
          print_proc();
          break;
    case PRTLNSYM:
          print_proc();
          gen(NEW_LINE, 0);
          break;
    case LBRACE:
          lbrace();
          break;
    case SEMICOL:
          getsym();
          break;
    default:
      puterr("statement expected.");
  }
}

わずか160行ほどのプログラムの作成に2週間もかかってしまって情けないですが、他の関数の動作を推測・確認しながらでしたので、こんなものかなと、、、

入力して出来上がった言語mcコンパイラ・アセンブラの仕様ですが、2バイトの整数型のもので、次に示したhit & blowの例で大体の雰囲気が分かってもらえるかと思います。

var i, j, inp, cnt;
var ans[4], in[4];
var hit, blow;
var flag[10], endflag, once_more;

main
{
println "*** Hit & Blow ***";
println "Guess 4 digit number (Miunus to abort)";
do {
call game;
print "Once more ( YES: 1, NO: other ) ? ";
input once_more;
} while (once_more == 1);
println "See you again !";
}

game
{
call init;
cnt = 1;
endflag = 0;
do {
call inpnum;
if (inp < 0)
endflag = 1;
else
call compare;
cnt = cnt + 1;
} while (endflag == 0);
}

init
{
i = 0;
while (i < 10) {
flag[i] = 0;
i = i + 1;
}
i = 0;
while (i < 4) {
ans[i] = rnd % 10;
while (flag[ans[i]] != 0)
ans[i] = rnd % 10;
flag[ans[i]] = 1;
i = i + 1;
}
}

inpnum
{
do {
print "Guess ? ";
input inp;
if (inp >= 10000)
println "Too Big. Re-enter!";
} while (inp >= 10000);
in[0] = inp / 1000;
in[1] = (inp % 1000) / 100;
in[2] = (inp % 100) / 10;
in[3] = inp % 10;
}

compare
{
hit = 0;
blow = 0;
i = 0;
while (i < 4) {
j = 0;
while (j < 4) {
if (ans[j] == in[i]) blow = blow + 1;
if (j == 1) if (ans[j] == in[i]) hit = hit + 1;
j = j + 1;
}
i = i + 1;
}
blow = blow - hit;
print cnt, " times.  ";
if (hit == 4) {
println "Match !!";
endflag = 1;
}
else println "Hit=", hit, " Blow=", blow;
}

このコンパイラの拡張例として、言語仕様の拡張(関数の引数、戻り値、ローカル変数の追加)や、特定CPUのコードを生成するための手順が解説されていますので、これをベースにして、仮想マシンのコードを生成している部分を6809の命令に置き換えることができれば6809のコンパイラができるはずですので、ぜひ実現させたいと思っています。

以上、書籍「ハイクラスC言語」中のコンパイラ・インタプリタのリストを入力してみたという紹介でした。




2023年5月19日金曜日

FM-7にRTCとSDを接続する試み(SDカード編 その5 修正版です)

SDRWFMが完成したつもりでしたが、不具合がいくつか見つかりましたので修正しました。


自分で使用する場合には無意識のうちに不具合が出ないような使い方をしてしまいますので、知人に使用していただいて不具合などのチェックをしていただきました。


前回と同じ画像です

(前回と同じ画像を貼ってありますが、画像がないとアイコンが表示されないようなので、それを避けるためです。)


修正点は以下の3点です。
(1)ファイル名に「-」(ハイフン)を使えるようにしました。
 パラメータ取得時に、入力文字列を区切るための文字を0x30未満の文字すべてとしていたので、ハイフンも区切り文字として扱われてしまっていました。F-BASICではファイル名にハイフンも含まれますので、区切り文字から外すように修正しました。
(2)Windows上のXM7などでバイナリ保存したファイルをSDにコピーして、それをFM-7で読み出すと正常に読み込めない場合がある点を修正しました。
 バイナリ保存されたBASICプログラム中には、リンクポインタとして保存アドレスが直接書き込まれているので、同じFM-7であっても機器の条件によってBASICプログラムの保存アドレスが異なることがあるために、そのまま読み込んだのでは正常な範囲に保存されないことがあり得ます。これを解決するために、F-BASICに用意されているリンクポインタの修正をするルーチンを使用して、リンクポインタを変換しながら読み込むことにしました。
(3)FM-7上で機械語ファイルを保存する場合に、末尾の5バイトのフッタを付加していませんでした。実用上の不便はありませんが、互換性を考慮してフッタを付加することにしました。

その他、修正点ではありませんが、使用するSD(SDHCも)カードを初期化する際にはアロケーションサイズを32KBにする必要があることも指摘していただきました。


SDRWFM
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
0001        *
0002        *  SDRWFM.TXT
0003        *
0004        *  SD Read/Write for FM-7
0005        *
0006        *    use RTC & SD Card
0007        *
0008        *    6821(PIA) Port A -- RTC (I2C Mode)
0009        *
0010        *        SBC     RTC                 Ext IO
0011        *    CA2  2  --       --  HV4 LV4 --   IO1
0012        *    PA0  3  --  SCL  --  HV1 LV1 --   IO4
0013        *    PA1  4  --       --  HV2 LV2 --   IO3
0014        *    PA7 10  --  SDA  --  HV3 LV3 --   IO2
0015        *    GND     --       --          --   GND
0016        *            --       --          --   3V3
0017        *
0018        *                    
0019        *    6821(PIA) Port B -- SD (SPI Mode)
0020        *
0021        *        SBC                  SD
0022        *    CB2 12  --  HV4 LV4 --   SCK
0023        *    PB0 13  --  HV1 LV1 --   CS
0024        *    PB1 14  --  HV2 LV2 --   MISO
0025        *    PB7 20  --  HV3 LV3 --   MOSI
0026        *    GND 31  --          --   GND
0027        *    VCC 33  --          --   VCC
0028        *
0029        *    cf. all data line use level converter
0030        *
0031        *    PB  output mode
0032        *    CB2 1bit output
0033        *
0034        *    READ/WRITE BUFFER  $5E00 - 5FFF
0035        *
0036        *    Ascii program readable '2023.04.18
0037        *    Fix date routine       '2023.04.12
0038        *    Implement write cmd    '2023.04.07
0039        *    Add command            '2023.03.14
0040        *    Change use Port B      '2023.03.07
0041        *    Original version       '2022.06.11
0042        *         Copyright by Y.Yamamoto
0043        *
0044  6000      STTADR  EQU     $6000      
0045       
0046  FBB8      INCHA   EQU     $FBB8       for FM-7
0047  FBBB      OUTCHA  EQU     $FBBB       for FM-7
0048  FBF7      CSRON   EQU     $FBF7       for FM-7
0049  D807      LININP  EQU     $D807       for FM-7 (to $043D- )
0050        *DEVNO EQU $BF for FM-7
0051  043D      LINBUF  EQU     $043D       1 line input buffer for F-BASIC
0052  033C      TXTBUF  EQU     $033C       text buffer after conversion for F-BASIC
0053  9162      RDLINO  EQU     $9162       read line number for F-BASIC
0054  FBF1      LININT  EQU     $FBF1       (=C28C) one line translation for F-BASIC
0055  C730      FIXPTR  EQU     $C730       fix link pointer of binary saved file for F-BASIC
0056  004B      LINO1   EQU     $4B        
0057  033A      LINO2   EQU     $33A       
0058  000D      CR      EQU     $0D        
0059  000A      LF      EQU     $0A        
0060  0020      SPC     EQU     $20        
0061  001B      ESC     EQU     $1B        
0062       
0063  5E00      RWBUF   EQU     STTADR-$200  
0064       
0065  02FA      FMDAT   EQU     $02FA       date of FM-7
0066  FD9E      PBDAT   EQU     $FD9E       for FM-7
0067  FD9F      PBCTL   EQU     PBDAT+1    
0068  0033      BASADP  EQU     $33         (33,34) pointer for F-BASIC
0069  0035      BASAEP  EQU     $35         (35,36) pointer for F-BASIC
0070  2000      TXTADR  EQU     $2000       load adr for TEXT
0071  00E5      DELMK   EQU     $E5         delete mark
0072       
0073  6000              ORG     STTADR     
0074       
0075  6000  16  00A0  START   LBRA    MAIN       
0076  6003  01    VN      FCB     1           version no
0077  6004  00    SCTN0   FCB     0           top adrs of sct
0078  6005  00    SCTN1   FCB     0          
0079  6006  00    SCTN2   FCB     0          
0080  6007  00    SCTN3   FCB     0          
0081  6008  00    RESDAT  FCB     0           response data
0082  6009  00    SDHC    FCB     0           sd:0,sdhc:1
0083       
0084  600A  0000    SCTBPB  FDB     00          sct no of BPB(4bytes)
0085  600C  0000            FDB     00         
0086  600E  0000    SCTFAT  FDB     00          sct no of FAT#1(4bytes)
0087  6010  0000            FDB     00         
0088  6012  0000    SCTDIR  FDB     00          sct no of DIR(4bytes)
0089  6014  0000            FDB     00         
0090  6016  0000    SCTDSV  FDB     00          save sct no of DIR(4bytes)
0091  6018  0000            FDB     00         
0092  601A  0000    SCTCLT  FDB     00          sct no of top CLUSTER(4bytes)
0093  601C  0000            FDB     00          if SD:#2, SDHC:#3
0094  601E  00    SCTPCL  FCB     0           sct per cluster
0095  601F  FF    DIRENT  RMB     32          directory entry
0096  603F  FF    WMDY    RMB     3           mon,day,year
0097  6042  FF    WFSIZ   RMB     4           file size(4bytes)
0098  6046  FF    FILSIZ  RMB     2           file size
0099  6048  0000    CLSTH   FDB     00          cluster High
0100  604A  0000    CLSTL   FDB     00          cluster Low
0101  604C  00    CNT     FCB     0          
0102  604D  00    MCFLG   FCB     0           0:machine code, $FF,$FE:binary save 1:else
0103  604E  00    TPGFLG  FCB     0           1:top page 0:else
0104  604F  FF    FNAME   RMB     11          file name(8+3)
0105  605A  00    DPGNO   FCB     0           page no of empty dir entry
0106  605B  0000    DIROFS  FDB     00          offset of empty dir entry
0107  605D  0000    BASEXP  FDB     00          basic exe adr
0108  605F  0000    MCADP   FDB     00          machine code start adr
0109  6061  0000    MCAEP   FDB     00          machine code end adr
0110  6063  0000    MCEXP   FDB     00          machine dode exec adr
0111  6065  0000    EXSTFL  FDB     00          ofset of exist dir entry
0112  6067  0000    CVTLEN  FDB     00          length of converted text
0113  6069  0000    RDTOP   FDB     00          adr of read point
0114  606B  0000    SVTOP   FDB     00          adr of saved point
0115  606D  0000    WK1     FDB     00         
0116  606F  0000    WK2     FDB     00         
0117  6071  0000    WK3     FDB     00         
0118  6073  0000    WK4     FDB     00         
0119  6075  0000    WK0     FDB     00         
0120       
0121  6077  FF    INPBUF  RMB     8          
0122  607F  FF    CNVBUF  RMB     4          
0123  6083  FF    FILBUF  RMB     32         
0124       
0125  60A3      MAIN    EQU     *          
0126        *=====reset pia=====
0127        *portB:output
0128  60A3  86  30          LDA     #$30       
0129  60A5  B7  FD9F          STA     PBCTL       select ddra, cb2:0
0130  60A8  86  FD          LDA     #$FD        pb0,7:out,pb1:in
0131  60AA  B7  FD9E          STA     PBDAT       set output mode
0132  60AD  86  34          LDA     #$34       
0133  60AF  B7  FD9F          STA     PBCTL       select peripheral,cb2:0
0134        
0135        *for pia exist check
0136  60B2  86  55          LDA     #$55        test data
0137  60B4  B7  FD9E          STA     PBDAT      
0138  60B7  B6  FD9E          LDA     PBDAT      
0139  60BA  84  FD          ANDA    #$FD        pb1=0
0140  60BC  81  55          CMPA    #$55       
0141  60BE  27  07          BEQ     INIT       
0142  60C0  8E  707B          LDX     #MERR      
0143  60C3  17  0D5D          LBSR    PSTRNG     
0144  60C6  39            RTS           Return F-BASIC
0145       
0146  60C7      INIT    EQU     *          
0147  60C7  17  0094          LBSR    SDINIT     
0148       
0149        ****************************************
0150        * MAIN MENU
0151        ****************************************
0152  60CA      MENU    EQU     *          
0153  60CA  4F            CLRA         
0154  60CB  1F  8B          TFR     A,DP       
0155  60CD  8E  6F90          LDX     #MSMENU1   
0156  60D0  17  0D50          LBSR    PSTRNG     
0157  60D3  BD  FBF7          JSR     CSRON       cursor on
0158  60D6  BD  6F12          JSR     INOUTC     
0159  60D9  84  DF          ANDA    #$DF        to upper
0160       
0161  60DB  81  46          CMPA    #'F        
0162  60DD  26  05          BNE     MENU1      
0163  60DF  17  0324          LBSR    DSPDIR     
0164  60E2  20  E6          BRA     MENU       
0165  60E4  81  4C  MENU1   CMPA    #'L        
0166  60E6  26  05          BNE     MENU2      
0167  60E8  17  03BF          LBSR    LDFILE     
0168  60EB  20  DD          BRA     MENU       
0169  60ED  81  42  MENU2   CMPA    #'B        
0170  60EF  26  05          BNE     MENU3      
0171  60F1  17  06C5          LBSR    WRBFILE    
0172  60F4  20  D4          BRA     MENU       
0173  60F6  81  4D  MENU3   CMPA    #'M        
0174  60F8  26  05          BNE     MENU4      
0175  60FA  17  0732          LBSR    WRMFILE    
0176  60FD  20  CB          BRA     MENU       
0177  60FF  81  4B  MENU4   CMPA    #'K        
0178  6101  26  05          BNE     MENU5      
0179  6103  17  065E          LBSR    KILFILE    
0180  6106  20  C2          BRA     MENU       
0181  6108  81  53  MENU5   CMPA    #'S        
0182  610A  26  04          BNE     MENU6      
0183  610C  8D  50          BSR     SDINIT     
0184  610E  20  BA          BRA     MENU       
0185  6110  81  4F  MENU6   CMPA    #'O        
0186  6112  26  04          BNE     MENU7      
0187  6114  20  0A          BRA     OPMENU     
0188  6116  20  B2          BRA     MENU       
0189  6118  81  51  MENU7   CMPA    #'Q        
0190  611A  26  AE          BNE     MENU       
0191  611C  17  0C49          LBSR    PCRLF      
0192  611F  39            RTS           Return F-BASIC
0193       
0194        *
0195  6120      OPMENU  EQU     *          
0196  6120  8E  6FE9          LDX     #MSMENU2   
0197  6123  17  0CFD          LBSR    PSTRNG     
0198  6126  BD  6F12          JSR     INOUTC     
0199  6129  80  30          SUBA    #$30       
0200  612B  26  02          BNE     OPMEN6      0?
0201  612D  20  9B          BRA     MENU       
0202       
0203  612F  4A    OPMEN6  DECA          1?
0204  6130  26  05          BNE     OPMEN7     
0205  6132  17  0246          LBSR    RDSCT      
0206  6135  20  E9          BRA     OPMENU     
0207  6137  4A    OPMEN7  DECA          2?
0208  6138  26  05          BNE     OPMEN8     
0209  613A  17  01C1          LBSR    DSPSDDAT   
0210  613D  20  E1          BRA     OPMENU     
0211  613F  4A    OPMEN8  DECA          3?
0212  6140  26  05          BNE     OPMEN9     
0213  6142  17  0249          LBSR    DSPMBR     
0214  6145  20  D9          BRA     OPMENU     
0215  6147  4A    OPMEN9  DECA          4?
0216  6148  26  05          BNE     OPMEN10    
0217  614A  17  0295          LBSR    DSPBPB     
0218  614D  20  D1          BRA     OPMENU     
0219  614F  4A    OPMEN10 DECA          5?
0220  6150  26  CE          BNE     OPMENU     
0221  6152  17  029F          LBSR    DSPFAT     
0222  6155  20  C9          BRA     OPMENU     
0223       
0224        *
0225  6157      SDERR   EQU     *          
0226  6157  8E  707B          LDX     #MERR      
0227  615A  17  0CC6          LBSR    PSTRNG     
0228  615D  39            RTS           Return F-BASIC
0229       
0230        ****************************************
0231        * SD Initialize routine
0232        ****************************************
0233  615E      SDINIT  EQU     *          
0234        *---------- start ----------
0235  615E  8E  7064          LDX     #MSINIT    
0236  6161  17  0CBF          LBSR    PSTRNG     
0237        * cs:1,di:1,sck>74ms
0238  6164  86  FF          LDA     #$FF        mosi:b7=H,miso:b1=H(for PIA),cs:b0=H
0239  6166  B7  FD9E          STA     PBDAT      
0240  6169  C6  50          LDB     #80         80times
0241  616B  17  0BB5  ISTT    LBSR    SETCKL     
0242  616E  17  0BBB          LBSR    SETCKH     
0243  6171  5A            DECB         
0244  6172  26  F7          BNE     ISTT       
0245        *
0246        *---------- cmd 0 ----------
0247  6174      SCMD0   EQU     *          
0248  6174  17  0BAC          LBSR    SETCKL     
0249  6177  C6  06          LDB     #6         
0250  6179  8E  6F2C          LDX     #CMD0      
0251  617C  A6  80  SC01    LDA     ,X+        
0252  617E  17  0B34          LBSR    SNDDAT     
0253  6181  5A            DECB         
0254  6182  26  F8          BNE     SC01       
0255        *get response
0256  6184  5F            CLRB         
0257  6185      GR00         
0258  6185  5A            DECB         
0259  6186  27  CF          BEQ     SDERR      
0260  6188  17  0B46          LBSR    GETDAT     
0261  618B  B6  6008          LDA     RESDAT     
0262  618E  81  01          CMPA    #$01       
0263  6190  26  F3          BNE     GR00       
0264        *
0265        *---------- cmd 8 ----------
0266  6192      SCMD8   EQU     *          
0267  6192  17  0B8E          LBSR    SETCKL     
0268  6195  86  FF          LDA     #$FF        dummy cmd
0269  6197  17  0B1B          LBSR    SNDDAT     
0270  619A  C6  06          LDB     #6         
0271  619C  8E  6F44          LDX     #CMD8      
0272  619F  A6  80  SC80    LDA     ,X+        
0273  61A1  17  0B11          LBSR    SNDDAT     
0274  61A4  5A            DECB         
0275  61A5  26  F8          BNE     SC80       
0276        *get response
0277  61A7      GR80         
0278  61A7  17  0B27          LBSR    GETDAT     
0279  61AA  B6  6008          LDA     RESDAT     
0280        
0281  61AD  17  0B21          LBSR    GETDAT     
0282  61B0  B6  6008          LDA     RESDAT     
0283  61B3  81  01          CMPA    #$01       
0284  61B5  26  F0          BNE     GR80       
0285  61B7  C6  04          LDB     #4         
0286  61B9  17  0B15  GR81    LBSR    GETDAT     
0287  61BC  B6  6008          LDA     RESDAT     
0288  61BF  5A            DECB         
0289  61C0  26  F7          BNE     GR81       
0290        *
0291        *---------- cmd 58 ----------
0292  61C2      SCMD58  EQU     *          
0293  61C2  17  0B5E          LBSR    SETCKL     
0294  61C5  86  FF          LDA     #$FF        dummy cmd
0295  61C7  17  0AEB          LBSR    SNDDAT     
0296  61CA  C6  06          LDB     #6         
0297  61CC  8E  6F4A          LDX     #CMD58     
0298  61CF  A6  80  SC581   LDA     ,X+        
0299  61D1  17  0AE1          LBSR    SNDDAT     
0300  61D4  5A            DECB         
0301  61D5  26  F8          BNE     SC581      
0302        *get response
0303  61D7      GR580        
0304  61D7  17  0AF7          LBSR    GETDAT     
0305  61DA  B6  6008          LDA     RESDAT     
0306  61DD  81  01          CMPA    #$01       
0307  61DF  26  F6          BNE     GR580      
0308  61E1  C6  04  GR581   LDB     #4         
0309  61E3  17  0AEB  GR582   LBSR    GETDAT     
0310  61E6  B6  6008          LDA     RESDAT     
0311  61E9  5A            DECB         
0312  61EA  26  F7          BNE     GR582      
0313  61EC      RPT41   EQU     *          
0314        *---------- cmd 55 ----------
0315  61EC      SCMD55  EQU     *          
0316  61EC  17  0B34          LBSR    SETCKL     
0317  61EF  86  FF          LDA     #$FF        dummy cmd
0318  61F1  17  0AC1          LBSR    SNDDAT     
0319  61F4  C6  06          LDB     #6         
0320  61F6  8E  6F50          LDX     #CMD55     
0321  61F9  A6  80  SC551   LDA     ,X+        
0322  61FB  17  0AB7          LBSR    SNDDAT     
0323  61FE  5A            DECB         
0324  61FF  26  F8          BNE     SC551      
0325        *get response
0326        * CLRB
0327  6201      GR550        
0328  6201  17  0ACD          LBSR    GETDAT     
0329  6204  B6  6008          LDA     RESDAT     
0330  6207  81  01          CMPA    #$01       
0331  6209  26  F6          BNE     GR550      
0332        
0333        *---------- acmd 41 ----------
0334  620B      ASCMD41 EQU     *          
0335  620B  17  0B15          LBSR    SETCKL     
0336  620E  86  FF          LDA     #$FF        dummy cmd
0337  6210  17  0AA2          LBSR    SNDDAT     
0338  6213  C6  06          LDB     #6         
0339  6215  8E  6F56          LDX     #ACMD41    
0340  6218  A6  80  ASC411  LDA     ,X+        
0341  621A  17  0A98          LBSR    SNDDAT     
0342  621D  5A            DECB         
0343  621E  26  F8          BNE     ASC411     
0344        *get response
0345  6220      GR410        
0346  6220  17  0AAE          LBSR    GETDAT     
0347  6223  B6  6008          LDA     RESDAT     
0348  6226  17  0AA8          LBSR    GETDAT     
0349  6229  B6  6008          LDA     RESDAT     
0350  622C  81  00          CMPA    #$00       
0351  622E  26  BC          BNE     RPT41      
0352        
0353        *---------- second cmd 58 ----------
0354  6230      SCMD258 EQU     *          
0355  6230  17  0AF0          LBSR    SETCKL     
0356  6233  86  FF          LDA     #$FF        dummy cmd
0357  6235  17  0A7D          LBSR    SNDDAT     
0358  6238  C6  06          LDB     #6         
0359  623A  8E  6F4A          LDX     #CMD58     
0360  623D  A6  80  SC2581  LDA     ,X+        
0361  623F  17  0A73          LBSR    SNDDAT     
0362  6242  5A            DECB         
0363  6243  26  F8          BNE     SC2581     
0364        *get response
0365  6245      GR2580       
0366  6245  17  0A89          LBSR    GETDAT     
0367  6248  B6  6008          LDA     RESDAT     
0368  624B  81  00          CMPA    #$00       
0369  624D  26  F6          BNE     GR2580     
0370  624F  17  0A7F          LBSR    GETDAT     
0371  6252  B6  6008          LDA     RESDAT     
0372  6255  48            LSLA         
0373  6256  48            LSLA         
0374  6257  24  03          BCC     GR2581     
0375  6259  7C  6009          INC     SDHC        if sdhc then 1
0376  625C  C6  03  GR2581  LDB     #3         
0377  625E  17  0A70  GR2582  LBSR    GETDAT     
0378  6261  B6  6008          LDA     RESDAT     
0379  6264  5A            DECB         
0380  6265  26  F7          BNE     GR2582     
0381        
0382  6267  8E  704E          LDX     #MSSD0     
0383  626A  B6  6009          LDA     SDHC       
0384  626D  27  03          BEQ     SD1        
0385  626F  8E  7058          LDX     #MSSD1     
0386  6272  17  0BAE  SD1     LBSR    PSTRNG     
0387        *
0388        *set sct no of BPB
0389  6275  17  0134          LBSR    GETMBR     
0390  6278  8E  5FCA          LDX     #RWBUF+446+8+4   
0391  627B  108E  600A          LDY     #SCTBPB    
0392  627F  C6  04          LDB     #4         
0393  6281  A6  82  ILOP1   LDA     ,-X        
0394  6283  A7  A0          STA     ,Y+        
0395  6285  5A            DECB         
0396  6286  26  F9          BNE     ILOP1      
0397        
0398        *set sct no of FAT#1
0399  6288  17  013E          LBSR    GETBPB     
0400  628B  8E  600A          LDX     #SCTBPB    
0401  628E  108E  600E          LDY     #SCTFAT    
0402  6292  C6  04          LDB     #4         
0403  6294  17  0982          LBSR    TRANS      
0404  6297  8E  600E          LDX     #SCTFAT    
0405  629A  108E  5E0E          LDY     #RWBUF+$0E    for SD & SDHC
0406  629E  17  0B51          LBSR    ADD42      
0407        
0408        *set sct no of DIR
0409  62A1  8E  600E          LDX     #SCTFAT    
0410  62A4  108E  6012          LDY     #SCTDIR    
0411  62A8  C6  04          LDB     #4         
0412  62AA  17  096C          LBSR    TRANS      
0413  62AD  8E  5E16          LDX     #RWBUF+$16    for SD
0414  62B0  7D  6009          TST     SDHC        0:SD,1:SDHC
0415  62B3  27  03          BEQ     SKP1       
0416  62B5  C6  0E          LDB     #$24-$16   
0417  62B7  3A            ABX           for SDHC
0418  62B8  1F  12  SKP1    TFR     X,Y        
0419  62BA  8E  6012          LDX     #SCTDIR    
0420  62BD  17  0B32          LBSR    ADD42      
0421  62C0  17  0B2F          LBSR    ADD42       skip for FAT#2
0422        
0423        *save no of directory
0424  62C3  8E  6012          LDX     #SCTDIR    
0425  62C6  108E  6016          LDY     #SCTDSV    
0426  62CA  C6  04          LDB     #4         
0427  62CC  17  094A          LBSR    TRANS      
0428       
0429        *set sct per cluster
0430  62CF  8E  5E0D          LDX     #RWBUF+$0D   
0431  62D2  A6  84          LDA     ,X         
0432  62D4  B7  601E          STA     SCTPCL     
0433        
0434        *set sct no of CLUSTER#2
0435  62D7  8E  6012          LDX     #SCTDIR    
0436  62DA  108E  601A          LDY     #SCTCLT    
0437  62DE  C6  04          LDB     #4         
0438  62E0  17  0936          LBSR    TRANS      
0439        
0440  62E3  108E  606F          LDY     #WK1+2     
0441  62E7  86  00          LDA     #$00       
0442  62E9  A7  A2          STA     ,-Y        
0443  62EB  86  20          LDA     #$20        for SD
0444  62ED  7D  6009          TST     SDHC       
0445  62F0  27  03          BEQ     SKP2       
0446  62F2  B6  601E          LDA     SCTPCL      for SDHC
0447  62F5  A7  A2  SKP2    STA     ,-Y        
0448  62F7  8E  601A          LDX     #SCTCLT    
0449  62FA  17  0AF5          LBSR    ADD42      
0450  62FD  39            RTS          
0451       
0452        ****************************************
0453        * GET SD DATA ROUTINE
0454        * use CMD9
0455        ****************************************
0456  62FE      DSPSDDAT  EQU     *          
0457  62FE  17  0A67          LBSR    PCRLF      
0458  6301  17  0A1F          LBSR    SETCKL     
0459  6304  C6  06          LDB     #6         
0460  6306  8E  6F5C          LDX     #CMD9      
0461  6309  A6  80  SC91    LDA     ,X+        
0462  630B  17  09A7          LBSR    SNDDAT     
0463  630E  5A            DECB         
0464  630F  26  F8          BNE     SC91       
0465        *get response
0466  6311      GR90         
0467  6311  17  09BD          LBSR    GETDAT     
0468  6314  B6  6008          LDA     RESDAT     
0469  6317  81  00          CMPA    #$00       
0470  6319  26  F6          BNE     GR90       
0471        
0472  631B  C6  14          LDB     #16+1+2+1   fe,crcH,crcL,ff
0473  631D  17  09B1  GR91    LBSR    GETDAT     
0474  6320  B6  6008          LDA     RESDAT     
0475  6323  5A            DECB         
0476  6324  26  F7          BNE     GR91       
0477  6326  17  0A3F          LBSR    PCRLF      
0478       
0479        *disp offset of MBR,FAT#1,DIR,CLUSTER#2
0480  6329  8E  709B          LDX     #MSOFS     
0481  632C  17  0AF4          LBSR    PSTRNG     
0482  632F  8E  70AB          LDX     #MSBPB     
0483  6332  17  0AEE          LBSR    PSTRNG     
0484  6335  8E  600A          LDX     #SCTBPB    
0485  6338  17  0A24          LBSR    DSPBI2     
0486  633B  17  0A35          LBSR    OUTSPC     
0487  633E  17  0A1E          LBSR    DSPBI2     
0488       
0489  6341  8E  70B4          LDX     #MSFAT     
0490  6344  17  0ADC          LBSR    PSTRNG     
0491  6347  8E  600E          LDX     #SCTFAT    
0492  634A  17  0A12          LBSR    DSPBI2     
0493  634D  17  0A23          LBSR    OUTSPC     
0494  6350  17  0A0C          LBSR    DSPBI2     
0495       
0496  6353  8E  70BD          LDX     #MSDIR     
0497  6356  17  0ACA          LBSR    PSTRNG     
0498  6359  8E  6012          LDX     #SCTDIR    
0499  635C  17  0A00          LBSR    DSPBI2     
0500  635F  17  0A11          LBSR    OUTSPC     
0501  6362  17  09FA          LBSR    DSPBI2     
0502       
0503  6365  8E  70C6          LDX     #MSCL2     
0504  6368  17  0AB8          LBSR    PSTRNG     
0505  636B  8E  601A          LDX     #SCTCLT    
0506  636E  17  09EE          LBSR    DSPBI2     
0507  6371  17  09FF          LBSR    OUTSPC     
0508  6374  17  09E8          LBSR    DSPBI2     
0509  6377  17  09EE          LBSR    PCRLF      
0510  637A  39            RTS          
0511       
0512        *
0513        ****************************************
0514        * READ ROUTINE
0515        * use CMD17
0516        * set sctno to SCTN2,SCTN3
0517        * read data set to RWBUF
0518        ****************************************
0519  637B      RDSCT   EQU     *          
0520  637B  17  09EA          LBSR    PCRLF      
0521  637E  17  096A          LBSR    INSCT       input sct no
0522  6381  17  08DD          LBSR    RD1SCT      read 1 sct
0523       
0524        *disp data
0525  6384  17  09E1          LBSR    PCRLF      
0526  6387  17  090D          LBSR    DSPBUF     
0527  638A  17  09DB          LBSR    PCRLF      
0528  638D  39            RTS          
0529       
0530        ****************************************
0531        * Read MBR & Disp parameter of BPB
0532        ****************************************
0533  638E      DSPMBR  EQU     *          
0534  638E  17  09D7          LBSR    PCRLF      
0535  6391  8D  19          BSR     GETMBR     
0536       
0537        *disp BPB
0538  6393  17  09D2          LBSR    PCRLF      
0539  6396  8E  5FBE          LDX     #RWBUF+446    1st BPB point
0540  6399  C6  10  GET1    LDB     #16        
0541  639B  A6  80  GET2    LDA     ,X+        
0542  639D  17  0995          LBSR    DSPBIN      disp data
0543  63A0  5A            DECB         
0544  63A1  26  F8          BNE     GET2       
0545  63A3  17  09C2          LBSR    PCRLF      
0546  63A6  8C  5FFE          CMPX    #RWBUF+510    446+16*4
0547  63A9  25  EE          BLO     GET1       
0548  63AB  39            RTS          
0549       
0550        *----------------------------------------
0551        *read MBR
0552  63AC      GETMBR  EQU     *          
0553  63AC  8E  6004          LDX     #SCTN0     
0554  63AF  C6  04          LDB     #4         
0555  63B1  4F            CLRA         
0556  63B2  17  086F          LBSR    FILL        set sct no is 0
0557  63B5  17  093C          LBSR    SETSCT     
0558  63B8  17  08A6          LBSR    RD1SCT      read 1 sct
0559  63BB  39            RTS          
0560       
0561        *----------------------------------------
0562        *set sector no to SCTN0
0563        *from X,X+1,X+2,X+3 to SCTN0-SCTN3
0564  63BC      SETSNO  EQU     *          
0565  63BC  108E  6004          LDY     #SCTN0     
0566  63C0  C6  04          LDB     #4         
0567  63C2  17  0854          LBSR    TRANS      
0568  63C5  17  092C          LBSR    SETSCT     
0569  63C8  39            RTS          
0570       
0571        *----------------------------------------
0572        *read BPB
0573  63C9      GETBPB  EQU     *          
0574  63C9  8D  E1          BSR     GETMBR     
0575        *set sct no of BPB
0576  63CB  8E  5FCA          LDX     #RWBUF+446+8+4   
0577  63CE  108E  6004          LDY     #SCTN0     
0578  63D2  C6  04          LDB     #4         
0579  63D4  A6  82  GTBLOP  LDA     ,-X        
0580  63D6  A7  A0          STA     ,Y+        
0581  63D8  5A            DECB         
0582  63D9  26  F9          BNE     GTBLOP     
0583  63DB  17  0916          LBSR    SETSCT     
0584  63DE  17  0880          LBSR    RD1SCT      read 1 sct
0585  63E1  39            RTS          
0586       
0587        ****************************************
0588        * Disp BPB(Bios Parameter Block)
0589        ****************************************
0590  63E2      DSPBPB  EQU     *          
0591  63E2  8E  600A          LDX     #SCTBPB    
0592  63E5  8D  D5          BSR     SETSNO     
0593  63E7  17  0877          LBSR    RD1SCT      read 1 sct
0594        
0595        *disp BPB
0596  63EA  17  097B          LBSR    PCRLF      
0597  63ED  17  08A7          LBSR    DSPBUF     
0598  63F0  17  0975          LBSR    PCRLF      
0599  63F3  39            RTS          
0600       
0601        ****************************************
0602        * Disp FAT#1
0603        ****************************************
0604  63F4      DSPFAT  EQU     *          
0605  63F4  8E  600E          LDX     #SCTFAT    
0606  63F7  8D  C3          BSR     SETSNO     
0607  63F9  17  0865          LBSR    RD1SCT      read 1 sct
0608        
0609        *disp FAT
0610  63FC  17  0969          LBSR    PCRLF      
0611  63FF  17  0895          LBSR    DSPBUF     
0612  6402  17  0963          LBSR    PCRLF      
0613  6405  39            RTS          
0614       
0615        ****************************************
0616        * Disp Directory
0617        ****************************************
0618  6406      DSPDIR  EQU     *          
0619        *return no of DIR
0620  6406  8E  6016          LDX     #SCTDSV    
0621  6409  108E  6012          LDY     #SCTDIR    
0622  640D  C6  04          LDB     #4         
0623  640F  17  0807          LBSR    TRANS      
0624  6412  8E  6012  DSPFL0  LDX     #SCTDIR    
0625  6415  8D  A5          BSR     SETSNO     
0626  6417  17  0847          LBSR    RD1SCT      read 1 sct
0627        
0628        *disp FILE name
0629  641A  17  094B          LBSR    PCRLF      
0630  641D  17  0948          LBSR    PCRLF      
0631  6420  8E  5E00          LDX     #RWBUF     
0632       
0633  6423  A6  84  DSPFL1  LDA     ,X         
0634  6425  1027  0080          LBEQ    DSPEND      if top of filename is 0 then end
0635  6429  81  E5          CMPA    #$E5        delete mark?
0636  642B  27  06          BEQ     DSPCKE     
0637  642D  A6  0B          LDA     11,X        attr
0638        * CMPA #$0F long file name?
0639        * BEQ DSPCKE
0640        * CMPA #$10 directory?
0641        * BEQ DSPCKE
0642  642F  81  20          CMPA    #$20       
0643  6431  27  0A          BEQ     DSPFL2      archive file only
0644  6433  30  88 20 DSPCKE  LEAX    32,X        next directory entry
0645  6436  8C  6000          CMPX    #RWBUF+512    over buf?
0646  6439  24  56          BHS     DSPFL5     
0647  643B  20  E6          BRA     DSPFL1     
0648        
0649  643D      DSPFL2       
0650        *disp filename
0651  643D  C6  08          LDB     #8         
0652  643F  A6  80  DSPFL3  LDA     ,X+        
0653  6441  BD  FBBB          JSR     OUTCHA     
0654  6444  5A            DECB         
0655  6445  26  F8          BNE     DSPFL3     
0656        *disp ext
0657  6447  86  2E          LDA     #'.        
0658  6449  BD  FBBB          JSR     OUTCHA     
0659  644C  C6  03          LDB     #3         
0660  644E  A6  80  DSPFL4  LDA     ,X+        
0661  6450  BD  FBBB          JSR     OUTCHA     
0662  6453  5A            DECB         
0663  6454  26  F8          BNE     DSPFL4     
0664       
0665        *get FILE time data
0666  6456  30  07          LEAX    7,X        
0667  6458  EC  81          LDD     ,X++       
0668  645A  FD  606D          STD     WK1        
0669       
0670        *get CLUSTER(H) data
0671  645D  EC  81          LDD     ,X++       
0672  645F  1E  89          EXG     A,B        
0673  6461  FD  6048          STD     CLSTH      
0674  6464  30  04          LEAX    4,X        
0675  6466  EC  81          LDD     ,X++       
0676  6468  1E  89          EXG     A,B        
0677  646A  FD  604A          STD     CLSTL      
0678        
0679        *get FILE size data
0680  646D  108E  6046          LDY     #WFSIZ+4   
0681  6471  C6  04          LDB     #4         
0682  6473  A6  80  DSPC1   LDA     ,X+        
0683  6475  A7  A2          STA     ,-Y        
0684  6477  5A            DECB         
0685  6478  26  F9          BNE     DSPC1      
0686       
0687        *disp FILE size
0688  647A  BD  6D73          JSR     OUTSPC     
0689  647D  17  0A12          LBSR    DSPSIZ      disp FILE size
0690       
0691        *disp FILE time
0692  6480  FC  606D          LDD     WK1        
0693  6483  17  09AD          LBSR    DSPYMD      disp MM-DD-YY
0694       
0695        *disp CLUSTER(Lonly)
0696  6486  17  0A5A          LBSR    DSPCLS     
0697  6489  17  08DC          LBSR    PCRLF      
0698        
0699  648C  8C  6000          CMPX    #RWBUF+512   
0700  648F  25  92          BLO     DSPFL1     
0701  6491  8E  6012  DSPFL5  LDX     #SCTDIR    
0702  6494  17  0796          LBSR    INCX4       sct no +1
0703  6497  8E  713F          LDX     #MSNXTP    
0704  649A  17  0986          LBSR    PSTRNG     
0705  649D  BD  FBB8  DSPFL6  JSR     INCHA      
0706  64A0  81  20          CMPA    #SPC       
0707  64A2  1027  FF6C          LBEQ    DSPFL0     
0708  64A6  BD  6D68          JSR     PCRLF      
0709  64A9  39    DSPEND  RTS          
0710       
0711        ****************************************
0712        * Load FILE
0713        ****************************************
0714  64AA      LDFILE  EQU     *          
0715  64AA  17  0241          LBSR    GETFDT     
0716  64AD  BE  6065          LDX     EXSTFL      if 0 not exist
0717  64B0  1027  0125          LBEQ    LDNEND     
0718        
0719        *get cluster no
0720  64B4  EC  88 14         LDD     $14,X      
0721  64B7  1E  89          EXG     A,B        
0722  64B9  FD  6048          STD     CLSTH       high cluster no
0723  64BC  EC  88 1A         LDD     $1A,X      
0724  64BF  1E  89          EXG     A,B        
0725  64C1  FD  604A          STD     CLSTL       low cluster no
0726        *sub start cluster no (SD:2,SDHC:3)
0727  64C4  83  0002          SUBD    #2         
0728  64C7  7D  6009          TST     SDHC        SD:0,SDHC:1
0729  64CA  27  03          BEQ     LD3        
0730  64CC  83  0001          SUBD    #1          D:cluster no (start 0)
0731        *       (A=0,cluster no is only B)
0732       
0733  64CF  34  36  LD3     PSHS    A,B,X,Y    
0734  64D1  8E  601A          LDX     #SCTCLT     top of cluster no
0735  64D4  108E  606D          LDY     #WK1       
0736  64D8  C6  04          LDB     #4         
0737  64DA  17  073C          LBSR    TRANS      
0738  64DD  35  36          PULS    A,B,X,Y    
0739        
0740        *calc start cluster no of file
0741        *(B)x40h
0742  64DF  34  30          PSHS    X,Y        
0743  64E1  8E  606D          LDX     #WK1       
0744  64E4  17  0755          LBSR    ADD40H     
0745  64E7  35  30          PULS    X,Y        
0746       
0747        *get file size
0748  64E9  34  30          PSHS    X,Y        
0749  64EB  30  88 20         LEAX    32,X       
0750  64EE  108E  6042          LDY     #WFSIZ     
0751  64F2  C6  04          LDB     #4         
0752  64F4  A6  82  LD41    LDA     ,-X        
0753  64F6  A7  A0          STA     ,Y+        
0754  64F8  5A            DECB         
0755  64F9  26  F9          BNE     LD41       
0756  64FB  35  30          PULS    X,Y        
0757        
0758  64FD  EC  88 1D         LDD     $1D,X       upper of file size
0759  6500  1E  89          EXG     A,B        
0760  6502  44            LSRA         
0761  6503  56            RORB         
0762  6504  C3  0001          ADDD    #1          wfsiz/$200+1
0763        
0764        *limited to 1 cluster(40h sct)
0765  6507  C1  40          CMPB    #$40        40h sct?
0766  6509  23  02          BLS     LD5        
0767  650B  C6  40          LDB     #$40       
0768  650D  F7  604C  LD5     STB     CNT         sct counter
0769  6510  F7  604E          STB     TPGFLG      set top page
0770        
0771        *set start sct no of file
0772  6513  34  12          PSHS    A,X        
0773  6515  8E  70FE          LDX     #MSLDNG    
0774  6518  17  0908          LBSR    PSTRNG     
0775  651B  35  12          PULS    A,X        
0776  651D      LDLOP        
0777  651D  86  2E          LDA     #'.        
0778  651F  BD  FBBB          JSR     OUTCHA     
0779  6522  8E  606D          LDX     #WK1       
0780  6525  108E  6004          LDY     #SCTN0     
0781  6529  C6  04          LDB     #4         
0782  652B  17  06EB          LBSR    TRANS      
0783  652E  17  07C3          LBSR    SETSCT     
0784  6531  17  072D          LBSR    RD1SCT      read 1 file data
0785        
0786  6534  7D  604E          TST     TPGFLG      top sector page?
0787  6537  27  71          BEQ     LD9        
0788        
0789        *at top sector, ini set
0790        *offset 00 data is
0791        *  $00    :machine code
0792        *  $0D    :BASIC PROGRAM (ascii save)
0793        *  $FF,$FE:BASIC PROGRAM (binary save)
0794        *  else   :general text
0795  6539  10BE  6044          LDY     WFSIZ+2    
0796  653D  10BF  6046          STY     FILSIZ      set file size
0797        
0798  6541  8E  5E00          LDX     #RWBUF     
0799  6544  A6  84          LDA     ,X         
0800  6546  B7  604D          STA     MCFLG      
0801  6549  27  04          BEQ     LD8         machine code
0802  654B  2A  4B          BPL     LD81        ascii saved basic or else
0803  654D  2B  45          BMI     LD80        binary saved basic
0804        *at machine code, read header
0805  654F  10AE  01  LD8     LDY     1,X         get file size
0806  6552  10BF  6046          STY     FILSIZ     
0807  6556  EE  03          LDU     3,X         get store addr
0808        *disp store adr, size
0809  6558  8E  71A5          LDX     #MSMCAS    
0810  655B  17  08C5          LBSR    PSTRNG     
0811  655E  1F  30          TFR     U,D        
0812  6560  34  04          PSHS    B          
0813  6562  17  07D6          LBSR    DSPBI0     
0814  6565  35  04          PULS    B          
0815  6567  1F  98          TFR     B,A        
0816  6569  17  07CF          LBSR    DSPBI0     
0817  656C  86  2C          LDA     #',        
0818  656E  BD  FBBB          JSR     OUTCHA     
0819  6571  1F  20          TFR     Y,D        
0820  6573  34  04          PSHS    B          
0821  6575  17  07C3          LBSR    DSPBI0     
0822  6578  35  04          PULS    B          
0823  657A  1F  98          TFR     B,A        
0824  657C  BD  6D3B          JSR     DSPBI0     
0825       
0826        *offset?
0827  657F  8E  718C          LDX     #MSMCOF    
0828  6582  17  089E          LBSR    PSTRNG     
0829  6585  BD  6F12          JSR     INOUTC     
0830  6588  84  DF          ANDA    #$DF       
0831  658A  81  59          CMPA    #'Y        
0832  658C  26  1C          BNE     LD9        
0833  658E  33C9  E000          LEAU    -$2000,U    -$2000 offset
0834  6592  20  16          BRA     LD9        
0835        
0836  6594  DE  33  LD80    LDU     BASADP      basic file
0837  6596  20  12          BRA     LD9        
0838        
0839  6598      LD81         
0840  6598  81  0D          CMPA    #$0D        ascii saved BASIC?
0841  659A  27  05          BEQ     LD82       
0842  659C  CE  2000          LDU     #TXTADR     (else) not basic file
0843  659F  20  09          BRA     LD9        
0844        
0845  65A1      LD82         
0846  65A1  DE  33          LDU     BASADP     
0847  65A3  FF  606B          STU     SVTOP       set save adr
0848  65A6  8D  69          BSR     MEMSET2     for ascii saved BASIC
0849  65A8  20  02          BRA     LD10       
0850        
0851  65AA      LD9          
0852  65AA  8D  35          BSR     MEMSET      expand memory from rwbuf
0853        
0854  65AC      LD10         
0855  65AC  7F  604E          CLR     TPGFLG      end of top page
0856  65AF  8E  606D          LDX     #WK1       
0857  65B2  17  0678          LBSR    INCX4       sct no +1
0858  65B5  7A  604C          DEC     CNT        
0859  65B8  1026  FF61          LBNE    LDLOP      
0860        
0861  65BC      LDEND        
0862  65BC  7D  604D          TST     MCFLG      
0863  65BF  27  0E          BEQ     LDE0       
0864  65C1  2A  0C          BPL     LDE0       
0865        *fix link pointer
0866  65C3  9E  33          LDX     BASADP     
0867  65C5  BD  C730          JSR     FIXPTR     
0868        
0869  65C8  FC  6044          LDD     WFSIZ+2    
0870  65CB  D3  33          ADDD    BASADP     
0871  65CD  DD  35          STD     BASAEP      end adrs
0872  65CF  8E  7116  LDE0    LDX     #MSLDED    
0873  65D2  17  084E          LBSR    PSTRNG     
0874  65D5  17  0790  LDE1    LBSR    PCRLF      
0875  65D8  39            RTS          
0876        
0877  65D9  8E  7131  LDNEND  LDX     #MSNOFL    
0878  65DC  17  0844          LBSR    PSTRNG     
0879  65DF  20  F4          BRA     LDE1       
0880       
0881        *expand in memory from rwbuf
0882        *X:rwbuf, U:memory adr, Y:filesize
0883  65E1      MEMSET  EQU     *          
0884  65E1  34  30          PSHS    X,Y        
0885  65E3  8E  5E00          LDX     #RWBUF     
0886  65E6  10BE  6046          LDY     FILSIZ     
0887  65EA  7D  604E          TST     TPGFLG      top page?
0888  65ED  27  0F          BEQ     MSLOP      
0889  65EF  7D  604D          TST     MCFLG       0,$FF($FE),etc
0890  65F2  27  04          BEQ     MS0        
0891  65F4  2A  08          BPL     MSLOP       etc
0892  65F6  2B  04          BMI     MS1         basic file
0893        * machine code
0894  65F8  30  05  MS0     LEAX    5,X         skip header
0895  65FA  20  02          BRA     MSLOP      
0896  65FC  30  03  MS1     LEAX    3,X         skip 3 FFs
0897       
0898  65FE  A6  80  MSLOP   LDA     ,X+        
0899  6600  A7  C0          STA     ,U+        
0900  6602  31  3F          LEAY    -1,Y       
0901  6604  27  05          BEQ     MS3        
0902  6606  8C  6000          CMPX    #RWBUF+512   
0903  6609  25  F3          BLO     MSLOP      
0904  660B  10BF  6046  MS3     STY     FILSIZ     
0905  660F  35  B0          PULS    X,Y,PC     
0906        *
0907        *----------
0908        *after conversion, expand in memory from rwbuf
0909        *X:rwbuf, U:memory adr, Y:filesize
0910  6611      MEMSET2 EQU     *          
0911  6611  34  30          PSHS    X,Y        
0912  6613  A6  80          LDA     ,X+        
0913  6615  81  0D          CMPA    #$0D        skip top CR
0914  6617  26  0D          BNE     MEM2ED     
0915  6619  A6  84          LDA     ,X         
0916  661B  81  0A          CMPA    #$0A        skip top LF
0917  661D  26  02          BNE     MM21       
0918  661F  30  01          LEAX    1,X        
0919  6621      MM21         
0920  6621  BF  6069          STX     RDTOP       start rwbuf+2
0921  6624  8D  0B          BSR     CNVINT     
0922  6626      MEM2ED       
0923  6626  BE  606B          LDX     SVTOP      
0924  6629  6F  80          CLR     ,X+        
0925  662B  6F  80          CLR     ,X+        
0926  662D  9F  35          STX     BASAEP     
0927  662F  35  B0          PULS    X,Y,PC     
0928       
0929        *
0930  6631      CNVINT  EQU     *          
0931        *trans to LINBUF with change CR,LF to 00
0932        *X:rdtop
0933  6631      CNVLOP       
0934  6631  BE  6069          LDX     RDTOP      
0935  6634  108E  043D          LDY     #LINBUF    
0936        
0937  6638      INLOP        
0938  6638  A6  80          LDA     ,X+        
0939  663A  A7  A0          STA     ,Y+        
0940        *----------------------------
0941  663C  8C  6000          CMPX    #RWBUF+512   
0942  663F  25  2A          BLO     INL11      
0943        
0944  6641  7A  604C          DEC     CNT        
0945  6644  26  01          BNE     INL10      
0946  6646  39            RTS          
0947        
0948  6647      INL10        
0949  6647  34  70          PSHS    X,Y,U      
0950  6649  86  2E          LDA     #'.        
0951  664B  BD  FBBB          JSR     OUTCHA     
0952        
0953  664E  8E  606D          LDX     #WK1       
0954  6651  17  05D9          LBSR    INCX4       sct no +1
0955  6654  108E  6004          LDY     #SCTN0     
0956  6658  C6  04          LDB     #4         
0957  665A  17  05BC          LBSR    TRANS      
0958  665D  17  0694          LBSR    SETSCT     
0959  6660  17  05FE          LBSR    RD1SCT      read 1 file data
0960  6663  35  70          PULS    X,Y,U      
0961        
0962  6665  8E  5E00          LDX     #RWBUF     
0963  6668  BF  6069          STX     RDTOP      
0964        *----------------------------
0965  666B  81  0D  INL11   CMPA    #$0D       
0966  666D  26  C9          BNE     INLOP      
0967  666F  A6  80          LDA     ,X+        
0968  6671  81  0A          CMPA    #$0A       
0969  6673  27  02          BEQ     INL2       
0970  6675  30  1F          LEAX    -1,X       
0971  6677  BF  6069  INL2    STX     RDTOP       next read point
0972  667A  6F  3F          CLR     -1,Y        set terminate 00
0973  667C  6F  A4          CLR     ,Y         
0974  667E  6F  21          CLR     1,Y        
0975       
0976        *convert
0977  6680  DE  D9          LDU     $D9        
0978  6682  34  40          PSHS    U          
0979  6684  8E  043D          LDX     #LINBUF    
0980  6687  9F  D9          STX     $D9        
0981  6689  A6  84          LDA     ,X         
0982  668B  1A  01          ORCC    #$01       
0983  668D  BD  9162          JSR     RDLINO      read line number
0984  6690  9E  4B          LDX     $4B        
0985  6692  BF  033A          STX     $33A       
0986  6695  0F  BF          CLR     $BF         assume keyin
0987  6697  BD  FBF1          JSR     LININT      (=C28C) one line translation
0988  669A  35  40          PULS    U          
0989  669C  DF  D9          STU     $D9        
0990        
0991  669E  FD  6067          STD     CVTLEN      store len+1
0992  66A1  10BE  6067          LDY     CVTLEN     
0993        
0994        *trans from TXTBUF to BASIC PROGRAM
0995  66A5  FE  606B          LDU     SVTOP      
0996  66A8  33  42          LEAU    2,U        
0997  66AA  BE  033A          LDX     $33A       
0998  66AD  AF  C1          STX     ,U++       
0999  66AF  8E  033C          LDX     #TXTBUF    
1000        
1001        *save to bas buf
1002  66B2  A6  80  INL12   LDA     ,X+        
1003  66B4  A7  C0          STA     ,U+        
1004  66B6  31  3F          LEAY    -1,Y       
1005  66B8  26  F8          BNE     INL12      
1006        
1007  66BA  BE  606B          LDX     SVTOP      
1008  66BD  1F  10          TFR     X,D        
1009  66BF  F3  6067          ADDD    CVTLEN     
1010  66C2  ED  84          STD     ,X          store next pointer
1011  66C4  FD  606B          STD     SVTOP       save next point
1012        
1013  66C7  BE  6069          LDX     RDTOP      
1014  66CA  A6  84          LDA     ,X         
1015  66CC  1026  FF61          LBNE    CNVLOP     
1016  66D0  39    CEND    RTS          
1017       
1018        *----------
1019        *X:top of FILE NAME
1020        *return C=1:match,C=0:not match
1021  66D1      CMPFN   EQU     *          
1022  66D1  34  10          PSHS    X          
1023  66D3  108E  604F          LDY     #FNAME     
1024  66D7  C6  08          LDB     #8         
1025  66D9  A6  80  CMPLOP  LDA     ,X+        
1026  66DB  81  E5          CMPA    #$E5        delete mark?
1027  66DD  27  0B          BEQ     NOTM       
1028  66DF  A1  A0          CMPA    ,Y+        
1029  66E1  26  07          BNE     NOTM       
1030  66E3  5A            DECB         
1031  66E4  26  F3          BNE     CMPLOP     
1032  66E6  1A  01  MATCH   ORCC    #$01        C=1
1033  66E8  20  02          BRA     CMPEND     
1034  66EA  1C  FE  NOTM    ANDCC   #$FE        C=0
1035  66EC  35  90  CMPEND  PULS    X,PC       
1036       
1037        *------------------------------
1038        *input filename
1039        *output:
1040        * if exist EXSTFL(directory entry)
1041        *    not exist EXSTFL(=0)
1042  66EE      GETFDT  EQU     *          
1043  66EE  34  02          PSHS    A          
1044  66F0  8E  0000          LDX     #0         
1045  66F3  BF  6065          STX     EXSTFL     
1046        *return no of DIR
1047  66F6  8E  6016          LDX     #SCTDSV    
1048  66F9  108E  6012          LDY     #SCTDIR    
1049  66FD  C6  04          LDB     #4         
1050  66FF  17  0517          LBSR    TRANS      
1051        
1052  6702  35  02          PULS    A          
1053  6704  81  4D          CMPA    #'M        
1054  6706  26  05          BNE     GTF1       
1055  6708  8E  70E6          LDX     #MSMSV     
1056  670B  20  03          BRA     GTF2       
1057  670D  8E  70D6  GTF1    LDX     #MSINFN    
1058  6710  17  0710  GTF2    LBSR    PSTRNG     
1059  6713  17  0166          LBSR    INPFLDAT    input file name
1060        
1061        *set filename
1062  6716  8E  6083          LDX     #FILBUF    
1063  6719  17  00E9          LBSR    SETFNM     
1064        
1065  671C  8E  6012  LDFL0   LDX     #SCTDIR    
1066  671F  17  FC9A          LBSR    SETSNO     
1067  6722  17  053C          LBSR    RD1SCT      read 1 sct
1068        
1069  6725  8E  5E00          LDX     #RWBUF     
1070  6728  A6  84  LDFL1   LDA     ,X         
1071  672A  27  37          BEQ     LDFLE       if top of filename is 0 then end
1072  672C  81  E5          CMPA    #$E5        delete mark?
1073  672E  26  10          BNE     LD1        
1074  6730  A6  0B          LDA     11,X        attr
1075  6732  81  20          CMPA    #$20        archive file only
1076  6734  27  0A          BEQ     LD1        
1077  6736  30  88 20         LEAX    32,X        next directory entry
1078  6739  8C  6000          CMPX    #RWBUF+512    over buf?
1079  673C  24  0E          BHS     LDFL5      
1080  673E  20  E8          BRA     LDFL1      
1081       
1082        *check file name
1083  6740      LD1          
1084  6740  8D  8F          BSR     CMPFN       C=1:match
1085  6742  25  10          BCS     LD2        
1086  6744  30  88 20         LEAX    32,X       
1087  6747  8C  6000          CMPX    #RWBUF+512   
1088  674A  25  DC          BLO     LDFL1      
1089        
1090  674C      LDFL5        
1091  674C  8E  6012          LDX     #SCTDIR    
1092  674F  17  04DB          LBSR    INCX4       sct no +1
1093  6752  20  C8          BRA     LDFL0      
1094        
1095        *hit file, get dirctory entry
1096  6754  BF  6065  LD2     STX     EXSTFL      adr of dir entry
1097  6757  108E  601F          LDY     #DIRENT    
1098  675B  C6  20          LDB     #32        
1099  675D  17  04B9          LBSR    TRANS      
1100  6760  8E  601F          LDX     #DIRENT    
1101  6763  39    LDFLE   RTS          
1102       
1103        *
1104        ****************************************
1105        * KILL FILE
1106        ****************************************
1107  6764      KILFILE EQU     *          
1108  6764  8D  88          BSR     GETFDT     
1109  6766  BE  6065          LDX     EXSTFL      if 0 not exist
1110  6769  27  5B          BEQ     NOFEND     
1111        
1112  676B  8E  715C          LDX     #MSKILL    
1113  676E  17  06B2          LBSR    PSTRNG     
1114  6771  BD  6F12          JSR     INOUTC     
1115  6774  84  DF          ANDA    #$DF       
1116  6776  81  59          CMPA    #'Y        
1117  6778  26  3E          BNE     KILEND     
1118  677A  8D  01          BSR     KILSUB     
1119  677C  39            RTS          
1120       
1121        *----------
1122  677D      KILSUB  EQU     *          
1123        *write dir
1124  677D  BE  6065          LDX     EXSTFL      top adr of dir entry
1125  6780  EC  88 1A         LDD     $1A,X       get clstlD
1126  6783  1E  89          EXG     A,B         B:cluster
1127  6785  FD  604A          STD     CLSTL      
1128  6788  86  E5          LDA     #$E5        delete mark
1129  678A  A7  84          STA     ,X         
1130  678C  17  03C4          LBSR    WRTSD1     
1131        
1132        *get fat sct & write
1133  678F  8E  600E          LDX     #SCTFAT    
1134  6792  17  FC27          LBSR    SETSNO     
1135  6795  17  04C9          LBSR    RD1SCT      read 1 sct
1136        
1137  6798  FC  604A          LDD     CLSTL       B:cluster
1138  679B  58            LSLB         
1139  679C  7D  6009          TST     SDHC        sd:0,sdhc:1
1140  679F  27  01          BEQ     KL1        
1141  67A1  58            LSLB         
1142  67A2  8E  5E00  KL1     LDX     #RWBUF     
1143  67A5  30  85          LEAX    B,X        
1144  67A7  C6  02          LDB     #2         
1145  67A9  7D  6009          TST     SDHC        sd:0,sdhc:1
1146  67AC  27  02          BEQ     KL2        
1147  67AE  C6  04          LDB     #4         
1148  67B0  6F  80  KL2     CLR     ,X+        
1149  67B2  5A            DECB         
1150  67B3  26  FB          BNE     KL2        
1151  67B5  17  039B          LBSR    WRTSD1     
1152  67B8      KILEND       
1153  67B8  39            RTS          
1154       
1155        *
1156        ****************************************
1157        * Write BASIC FILE
1158        ****************************************
1159  67B9      WRBFILE EQU     *          
1160        *basic file exist check
1161  67B9  DC  35          LDD     BASAEP     
1162  67BB  93  33          SUBD    BASADP     
1163  67BD  1083  0002          CMPD    #2         
1164  67C1  22  0A          BHI     WRB0        exist
1165  67C3  17  05A2          LBSR    PCRLF      
1166  67C6  8E  7131  NOFEND  LDX     #MSNOFL    
1167  67C9  17  0657          LBSR    PSTRNG     
1168  67CC  39            RTS          
1169       
1170        *save BASIC program file(binary saved)
1171  67CD  86  FF  WRB0    LDA     #$FF       
1172  67CF  B7  604D          STA     MCFLG       set basic file
1173        *input file name
1174  67D2  17  FF19          LBSR    GETFDT     
1175  67D5  BE  6065          LDX     EXSTFL      if 0 not exist
1176  67D8  27  11          BEQ     WRB1       
1177       
1178        *confirm over write
1179  67DA  8E  716F          LDX     #MSEXST    
1180  67DD  17  0643          LBSR    PSTRNG     
1181  67E0  BD  6F12          JSR     INOUTC     
1182  67E3  84  DF          ANDA    #$DF       
1183  67E5  81  59          CMPA    #'Y        
1184  67E7  26  1B          BNE     WRBEND     
1185        *delete exist file
1186  67E9  8D  92          BSR     KILSUB     
1187       
1188  67EB      WRB1         
1189        *set filename
1190  67EB  8E  6083          LDX     #FILBUF    
1191  67EE  8D  15          BSR     SETFNM     
1192        
1193        *adrs
1194        * BASADP start adr
1195        * BASAEP end adr
1196        * BASEXP exec adr
1197       
1198        *main of write routine
1199        *clear dir entry
1200  67F0  8D  2F          BSR     CLRDIR     
1201       
1202  67F2  17  0104          LBSR    SRCFAT      search empty cluster on FAT
1203  67F5  17  0159          LBSR    SRCDIR      search empty DIR entry
1204  67F8  17  0195          LBSR    MKFLDT      make file data
1205  67FB  17  021B          LBSR    WRTFIL      write file
1206  67FE  17  03AF          LBSR    WRTDIR      write DIR entry
1207  6801  17  03D9          LBSR    WRTFAT      set FAT
1208  6804      WRBEND       
1209  6804  39            RTS          
1210       
1211        *------------------------------
1212        *set filename
1213  6805      SETFNM  EQU     *          
1214        *clear buf
1215  6805  108E  605A          LDY     #FNAME+11  
1216  6809  C6  0B          LDB     #11        
1217  680B  86  20          LDA     #$20       
1218  680D  A7  A2  WRFLP2  STA     ,-Y        
1219  680F  5A            DECB         
1220  6810  26  FB          BNE     WRFLP2     
1221        
1222        *store filename
1223  6812  A6  80  WRFL1   LDA     ,X+        
1224  6814  81  2D          CMPA    #'-        
1225  6816  27  04          BEQ     WRFL11     
1226  6818  81  30          CMPA    #$30       
1227  681A  25  04          BLO     WRFL2       until delimiter
1228  681C  A7  A0  WRFL11  STA     ,Y+        
1229  681E  20  F2          BRA     WRFL1      
1230  6820      WRFL2        
1231  6820  39            RTS          
1232       
1233        *------------------------------
1234        *clear dir entry
1235  6821      CLRDIR  EQU     *          
1236  6821  8E  601F          LDX     #DIRENT    
1237  6824  C6  20          LDB     #32        
1238  6826  4F            CLRA         
1239  6827  17  03FA          LBSR    FILL       
1240  682A  86  20          LDA     #$20        set attr
1241  682C  A7  0B          STA     $0B,X      
1242  682E  39            RTS          
1243       
1244        *
1245        ****************************************
1246        * Write MACHINE FILE
1247        ****************************************
1248  682F      WRMFILE EQU     *          
1249        *save machine code
1250        *filename,topadr,endadr,exeadr ...machine file
1251  682F  17  FEBC          LBSR    GETFDT     
1252  6832  BE  6065          LDX     EXSTFL      if 0 not exist
1253  6835  27  12          BEQ     WRM1       
1254        
1255        *confirm over write
1256  6837  8E  716F          LDX     #MSEXST    
1257  683A  17  05E6          LBSR    PSTRNG     
1258  683D  BD  6F12          JSR     INOUTC     
1259  6840  84  DF          ANDA    #$DF       
1260  6842  81  59          CMPA    #'Y        
1261  6844  26  35          BNE     WRMEND     
1262        *delete exist file
1263  6846  17  FF34          LBSR    KILSUB     
1264        
1265  6849      WRM1         
1266  6849  7F  604D          CLR     MCFLG       set machine code(set 0)
1267        
1268        *set filename
1269  684C  8E  6083          LDX     #FILBUF    
1270  684F  8D  B4          BSR     SETFNM     
1271        
1272        *set top adr
1273  6851  8D  43          BSR     ASC2BIN    
1274  6853  10BF  605F          STY     MCADP       start adr
1275  6857  8D  30          BSR     SRCDLM     
1276  6859  8D  3B          BSR     ASC2BIN    
1277  685B  10BF  6061          STY     MCAEP       end adr
1278  685F  8D  28          BSR     SRCDLM     
1279  6861  8D  33          BSR     ASC2BIN    
1280  6863  10BF  6063          STY     MCEXP       exec adr
1281        
1282        *main of write routine
1283        *clear dir entry
1284  6867  8D  B8          BSR     CLRDIR     
1285       
1286  6869  17  008D          LBSR    SRCFAT      search empty cluster on FAT
1287  686C  17  00E2          LBSR    SRCDIR      search empty DIR entry
1288  686F  17  011E          LBSR    MKFLDT      make file data
1289  6872  17  01A4          LBSR    WRTFIL      write file
1290  6875  17  0338          LBSR    WRTDIR      write DIR entry
1291  6878  17  0362          LBSR    WRTFAT      set FAT
1292  687B      WRMEND       
1293  687B  39            RTS          
1294       
1295        *--------------------
1296        *input filename & parameter to filbuf
1297  687C      INPFLDAT  EQU     *          
1298  687C  34  24          PSHS    B,Y        
1299  687E  108E  6083          LDY     #FILBUF    
1300  6882  C6  1E          LDB     #30        
1301  6884  17  0692          LBSR    LININ      
1302  6887  35  A4          PULS    B,Y,PC     
1303        
1304        *--------------------
1305        *search delimiter
1306        *delimiter:less than $30, excluding '-'($2D)
1307        *return X:point next char of delimiter
1308  6889      SRCDLM  EQU     *          
1309  6889  30  1F          LEAX    -1,X       
1310  688B  A6  80  SRDLM1  LDA     ,X+        
1311  688D  81  2D          CMPA    #'-        
1312  688F  27  FA          BEQ     SRDLM1     
1313  6891  81  30          CMPA    #$30       
1314  6893  24  F6          BHS     SRDLM1     
1315  6895  39            RTS          
1316       
1317        *--------------------
1318        *X - X+3, return Y
1319  6896      ASC2BIN EQU     *          
1320        *clr buf
1321  6896  34  10          PSHS    X          
1322  6898  8E  607F          LDX     #CNVBUF    
1323  689B  86  30          LDA     #$30       
1324  689D  C6  04          LDB     #4         
1325  689F  17  0382          LBSR    FILL       
1326  68A2  35  10          PULS    X          
1327        
1328        *search next delimiter
1329        *return B:char count
1330  68A4  34  10          PSHS    X          
1331  68A6  5F            CLRB         
1332  68A7  5C    SRLOP1  INCB         
1333  68A8  A6  80          LDA     ,X+        
1334  68AA  81  30          CMPA    #$30        count over $30
1335  68AC  24  F9          BHS     SRLOP1     
1336  68AE  5A            DECB         
1337  68AF  35  10          PULS    X          
1338        
1339        *trans
1340  68B1  108E  607F          LDY     #CNVBUF    
1341  68B5  34  04          PSHS    B          
1342  68B7  C6  04          LDB     #4         
1343  68B9  E0  E4          SUBB    ,S         
1344  68BB  31  A5          LEAY    B,Y        
1345  68BD  35  04          PULS    B          
1346  68BF  A6  80  SRLOP2  LDA     ,X+        
1347  68C1  A7  A0          STA     ,Y+        
1348  68C3  5A            DECB         
1349  68C4  26  F9          BNE     SRLOP2     
1350        
1351        *convert to bin
1352  68C6  34  10          PSHS    X          
1353  68C8  8E  607F          LDX     #CNVBUF    
1354  68CB  EC  81          LDD     ,X++       
1355  68CD  8D  0F          BSR     CNVSUB     
1356  68CF  34  02          PSHS    A          
1357  68D1  EC  81          LDD     ,X++       
1358  68D3  8D  09          BSR     CNVSUB     
1359  68D5  1F  89          TFR     A,B        
1360  68D7  35  02          PULS    A          
1361  68D9  1F  02          TFR     D,Y        
1362  68DB  35  10          PULS    X          
1363  68DD  39            RTS          
1364        
1365        *cnv sub
1366        *return A
1367  68DE      CNVSUB  EQU     *          
1368  68DE  80  30          SUBA    #$30       
1369  68E0  81  11          CMPA    #$11       
1370  68E2  25  02          BLO     CNV1       
1371  68E4  80  07          SUBA    #7         
1372  68E6  48    CNV1    LSLA         
1373  68E7  48            LSLA         
1374  68E8  48            LSLA         
1375  68E9  48            LSLA         
1376  68EA  C0  30          SUBB    #$30       
1377  68EC  C1  11          CMPB    #$11       
1378  68EE  25  02          BLO     CNV2       
1379  68F0  C0  07          SUBB    #7         
1380  68F2  C4  0F  CNV2    ANDB    #$0F       
1381  68F4  34  04          PSHS    B          
1382  68F6  AB  E0          ADDA    ,S+        
1383  68F8  39            RTS          
1384        
1385        *--------------------
1386        * search empty area in FAT
1387  68F9      SRCFAT  EQU     *          
1388  68F9  8E  600E          LDX     #SCTFAT    
1389  68FC  17  FABD          LBSR    SETSNO     
1390  68FF  17  035F          LBSR    RD1SCT      read 1 sct
1391        
1392  6902  8E  5E00          LDX     #RWBUF     
1393        *search $00
1394  6905      SRC0         
1395  6905  C6  02          LDB     #2          SD
1396  6907  7D  6009          TST     SDHC        0:SD,1:SDHC
1397  690A  27  02          BEQ     SRCLOP     
1398  690C  C6  04          LDB     #4          SDHC
1399  690E  8D  32  SRCLOP  BSR     SRC00       search 1st 00 ...1st 00
1400  6910  24  2F          BCC     SFATED      not exist empty area
1401  6912  A6  80          LDA     ,X+         next is 00? ..2nd 00
1402  6914  26  EF          BNE     SRC0        restart
1403  6916  7D  6009          TST     SDHC        0:SD,1:SDHC
1404  6919  27  0A          BEQ     SETX       
1405  691B  A6  80          LDA     ,X+         next is 00? ..3rd 00
1406  691D  26  E6          BNE     SRC0        restart
1407  691F  A6  80          LDA     ,X+         next is 00? ..4th 00
1408  6921  26  E2          BNE     SRC0        restart
1409  6923  30  1E          LEAX    -2,X       
1410  6925      SETX         
1411  6925  30  1E          LEAX    -2,X        pos in RWBUF
1412  6927  3089  A200          LEAX    -RWBUF,X    relative pos
1413  692B  1F  10          TFR     X,D        
1414  692D  44            LSRA         
1415  692E  56            RORB          1/2
1416  692F  7D  6009          TST     SDHC        0:SD,1:SDHC
1417  6932  27  02          BEQ     SETCL      
1418  6934  44            LSRA         
1419  6935  56            RORB          1/2
1420  6936  FD  604A  SETCL   STD     CLSTL      
1421  6939  1E  89          EXG     A,B        
1422  693B  8E  601F          LDX     #DIRENT    
1423  693E  ED  88 1A         STD     $1A,X       set cluster L to dirent
1424  6941  39    SFATED  RTS          
1425        
1426        *search 00 in FAT
1427  6942  8C  6000  SRC00   CMPX    #RWBUF+512   
1428  6945  24  07          BHS     NOEXST     
1429  6947  A6  80          LDA     ,X+        
1430  6949  26  F7          BNE     SRC00      
1431  694B  1A  01  EXIST   ORCC    #$01        set C
1432  694D  39            RTS          
1433  694E  1C  FE  NOEXST  ANDCC   #$FE        reset C
1434  6950  39            RTS          
1435       
1436        *--------------------
1437        * search empty DIR entry
1438        * return:DPGNO,DIROFS
1439  6951      SRCDIR  EQU     *          
1440  6951  7F  605A          CLR     DPGNO      
1441        *return no of DIR
1442  6954  8E  6016          LDX     #SCTDSV    
1443  6957  108E  6012          LDY     #SCTDIR    
1444  695B  C6  04          LDB     #4         
1445  695D  17  02B9          LBSR    TRANS      
1446  6960  8E  6012  SRCFL0  LDX     #SCTDIR    
1447  6963  17  FA56  SRCFL1  LBSR    SETSNO     
1448  6966  17  02F8          LBSR    RD1SCT      read 1 sct
1449        
1450  6969  8E  5E00          LDX     #RWBUF     
1451  696C  8C  6000  DLOP1   CMPX    #RWBUF+512   
1452  696F  24  0D          BHS     SRCFL5     
1453  6971  A6  80          LDA     ,X+        
1454  6973  27  15          BEQ     DIRGET     
1455  6975  81  E5          CMPA    #$E5        delete mark?
1456  6977  27  11          BEQ     DIRGET     
1457  6979  30  88 1F         LEAX    32-1,X     
1458  697C  20  EE          BRA     DLOP1      
1459       
1460  697E  7C  605A  SRCFL5  INC     DPGNO      
1461  6981  8E  6012          LDX     #SCTDIR    
1462  6984  17  02A6          LBSR    INCX4       sct no +1
1463  6987  20  DA          BRA     SRCFL1     
1464  6989      DSPED        
1465  6989  39            RTS          
1466       
1467  698A  30  1F  DIRGET  LEAX    -1,X       
1468  698C  BF  605B          STX     DIROFS     
1469  698F  39            RTS          
1470       
1471        *--------------------
1472  6990      MKFLDT  EQU     *          
1473        *cluster no & attr already set
1474        *file name input&set
1475  6990  8E  604F          LDX     #FNAME     
1476  6993  108E  601F          LDY     #DIRENT    
1477  6997  C6  0B          LDB     #11        
1478  6999  17  027D          LBSR    TRANS       set file name
1479        
1480        *cal file size
1481  699C  7D  604D          TST     MCFLG       00,FF(FE),else
1482  699F  2B  08          BMI     MKF1       
1483  69A1  FC  6061          LDD     MCAEP      
1484  69A4  B3  605F          SUBD    MCADP      
1485  69A7  20  04          BRA     MKF2       
1486  69A9      MKF1         
1487  69A9  DC  35          LDD     BASAEP     
1488  69AB  93  33          SUBD    BASADP     
1489  69AD      MKF2         
1490  69AD  C3  0001          ADDD    #1         
1491  69B0  FD  6046          STD     FILSIZ     
1492  69B3  FD  6075          STD     WK0        
1493        * EXG A,B
1494        * LDX #DIRENT
1495        * STD $1C,X
1496       
1497        *set date (for FM-7)
1498  69B6  8D  12          BSR     STDATE     
1499  69B8  FC  603F          LDD     WMDY       
1500  69BB  1E  89          EXG     A,B        
1501        
1502        *year,month,day
1503  69BD  8E  601F          LDX     #DIRENT    
1504  69C0  ED  88 18         STD     $18,X      
1505  69C3  ED  88 10         STD     $10,X      
1506  69C6  ED  88 12         STD     $12,X      
1507  69C9  39            RTS          
1508       
1509        *----------
1510        *FM day to SD
1511        *retuen WMDY,WMDY+1
1512  69CA      STDATE  EQU     *          
1513  69CA  8E  02FA          LDX     #FMDAT      date of FM-7
1514  69CD  108E  603F          LDY     #WMDY      
1515  69D1  C6  03          LDB     #3         
1516  69D3  34  04  ABLOP   PSHS    B          
1517  69D5  EC  81          LDD     ,X++       
1518  69D7  8D  2E          BSR     APLUSB     
1519  69D9  A7  A0          STA     ,Y+        
1520  69DB  35  04          PULS    B          
1521  69DD  26  F4          BNE     ABLOP      
1522        *year
1523  69DF  B6  603F          LDA     WMDY       
1524  69E2  8B  14          ADDA    #20         ---2000-1980
1525  69E4  48            LSLA         
1526  69E5  B7  603F          STA     WMDY       
1527        *month
1528  69E8  B6  6040          LDA     WMDY+1     
1529  69EB  48            LSLA         
1530  69EC  48            LSLA         
1531  69ED  48            LSLA         
1532  69EE  48            LSLA         
1533  69EF  48            ASLA         
1534  69F0  B7  6040          STA     WMDY+1     
1535  69F3  F6  603F          LDB     WMDY       
1536  69F6  C9  00          ADCB    #0          plus C
1537  69F8  F7  603F          STB     WMDY       
1538        *day
1539  69FB  B6  6041          LDA     WMDY+2     
1540  69FE  84  1F          ANDA    #$1F       
1541  6A00  BB  6040          ADDA    WMDY+1     
1542  6A03  B7  6040          STA     WMDY+1     
1543  6A06  39            RTS          
1544       
1545        *lower nibble of A,B to A+B
1546  6A07      APLUSB  EQU     *          
1547  6A07  34  10          PSHS    X          
1548  6A09  34  04          PSHS    B          
1549  6A0B  C6  0A          LDB     #10        
1550  6A0D  3D            MUL          
1551  6A0E  1F  01          TFR     D,X        
1552  6A10  35  04          PULS    B          
1553  6A12  3A            ABX          
1554  6A13  1F  10          TFR     X,D        
1555  6A15  1E  89          EXG     A,B         A:data
1556  6A17  35  90          PULS    X,PC       
1557        *
1558        *--------------------
1559  6A19      WRTFIL  EQU     *          
1560        *calc file size for write to sd
1561  6A19  FC  6075          LDD     WK0        
1562  6A1C  7D  604D          TST     MCFLG       0,FF(FE),else
1563  6A1F  27  04          BEQ     WRTF0       machine code
1564  6A21  2B  07          BMI     WRTF1       basic(binary)
1565  6A23  2A  08          BPL     WRTF2       else
1566  6A25  C3  000A  WRTF0   ADDD    #10         add header(&footer)
1567  6A28  20  03          BRA     WRTF2      
1568  6A2A  C3  0003  WRTF1   ADDD    #3          add header
1569  6A2D      WRTF2        
1570  6A2D  FD  6075          STD     WK0         number of bytes actually written
1571  6A30  1E  89          EXG     A,B        
1572  6A32  8E  601F          LDX     #DIRENT    
1573  6A35  ED  88 1C         STD     $1C,X      
1574  6A38  1E  89          EXG     A,B        
1575        *calc counter (CNT:512byte units)
1576  6A3A  7F  604C          CLR     CNT        
1577  6A3D  7C  604C  CALLOP  INC     CNT        
1578  6A40  83  0200          SUBD    #512       
1579  6A43  24  F8          BHS     CALLOP     
1580        
1581  6A45  86  01          LDA     #1         
1582  6A47  B7  604E          STA     TPGFLG      set top page
1583       
1584  6A4A  7D  604D          TST     MCFLG       0,FF(FE),else
1585  6A4D  2B  05          BMI     WRTF3      
1586  6A4F  BE  605F          LDX     MCADP       saved top adr
1587  6A52  20  02          BRA     WRTF4      
1588  6A54  9E  33  WRTF3   LDX     BASADP      saved top adr
1589  6A56  BF  606D  WRTF4   STX     WK1         src topadr
1590  6A59  CE  5E00          LDU     #RWBUF     
1591        
1592        *get clusterL
1593  6A5C  8E  601F          LDX     #DIRENT    
1594  6A5F  EC  88 1A         LDD     $1A,X      
1595  6A62  1E  89          EXG     A,B         B:clusterL
1596        
1597  6A64  BE  601A          LDX     SCTCLT      sct no of top cluster
1598  6A67  BF  606F          STX     WK2        
1599  6A6A  BE  601C          LDX     SCTCLT+2   
1600  6A6D  BF  6071          STX     WK2+2      
1601        
1602  6A70  C0  02          SUBB    #2          for SD
1603  6A72  7D  6009          TST     SDHC        0:SD,1:SDHC
1604  6A75  27  01          BEQ     WR2        
1605  6A77  5A            DECB         
1606  6A78      WR2          
1607       
1608        *(X)..(X+3)+(B)x40h
1609  6A78  8E  606F          LDX     #WK2       
1610  6A7B  17  01BE          LBSR    ADD40H      cal of sct no
1611        
1612        *set start sct no of file
1613  6A7E  34  10          PSHS    X          
1614  6A80  8E  710A          LDX     #MSWTNG    
1615  6A83  17  039D          LBSR    PSTRNG     
1616  6A86  35  10          PULS    X          
1617        
1618  6A88      WRLOP        
1619  6A88  86  2E          LDA     #'.        
1620  6A8A  BD  FBBB          JSR     OUTCHA     
1621  6A8D  FC  6075          LDD     WK0        
1622  6A90  1F  02          TFR     D,Y        
1623  6A92  1083  0200          CMPD    #512       
1624  6A96  23  0A          BLS     WR3        
1625  6A98  83  0200          SUBD    #512       
1626  6A9B  FD  6075          STD     WK0        
1627  6A9E  108E  0200          LDY     #512       
1628  6AA2      WR3          
1629        
1630        *write data to rwbuf
1631        * (X)->(U:RWBUF)
1632        * (Y):SIZE 512bytes or Less
1633  6AA2  BE  606D          LDX     WK1        
1634  6AA5  CE  5E00          LDU     #RWBUF     
1635  6AA8  8D  44          BSR     WRSUB      
1636        
1637        *set to sctn0-3
1638  6AAA  34  30          PSHS    X,Y        
1639  6AAC  8E  606F          LDX     #WK2       
1640  6AAF  108E  6004          LDY     #SCTN0     
1641  6AB3  C6  04          LDB     #4         
1642  6AB5  17  0161          LBSR    TRANS      
1643  6AB8  35  30          PULS    X,Y        
1644        
1645        *write data to sd
1646  6ABA  17  0093          LBSR    WRTSD       ...not wrtsd1
1647       
1648        *inc sctn0-3
1649  6ABD  8E  606F          LDX     #WK2       
1650  6AC0  17  016A          LBSR    INCX4      
1651  6AC3  BE  606D          LDX     WK1         src topadr
1652  6AC6  3089  0200          LEAX    512,X      
1653        *check top page
1654  6ACA  7D  604E          TST     TPGFLG      top page?
1655  6ACD  27  0D          BEQ     WR6         no
1656  6ACF  7D  604D          TST     MCFLG      
1657  6AD2  27  04          BEQ     WR4         machine code
1658  6AD4  2B  04          BMI     WR5         basic(binary)
1659  6AD6  2A  04          BPL     WR6        
1660  6AD8  30  1E  WR4     LEAX    -2,X        rewind 3or5
1661  6ADA  30  1D  WR5     LEAX    -3,X       
1662  6ADC      WR6           
1663  6ADC  7F  604E          CLR     TPGFLG     
1664  6ADF  BF  606D          STX     WK1        
1665  6AE2  7A  604C          DEC     CNT        
1666  6AE5  26  A1          BNE     WRLOP      
1667        
1668  6AE7  8E  7123  WREND   LDX     #MSWTED    
1669  6AEA  17  0336          LBSR    PSTRNG     
1670  6AED  39            RTS          
1671       
1672        *----------
1673        *write data to rwbuf
1674        * (X)->(U:RWBUF)
1675        * (Y):SIZE 512bytes or Less
1676        *clear rwbuf
1677  6AEE      WRSUB   EQU     *          
1678  6AEE  34  30          PSHS    X,Y        
1679  6AF0  4F            CLRA         
1680  6AF1  8E  5E00          LDX     #RWBUF     
1681  6AF4  108E  0200          LDY     #512       
1682  6AF8  A7  80  WWCLOP  STA     ,X+        
1683  6AFA  31  3F          LEAY    -1,Y       
1684  6AFC  26  FA          BNE     WWCLOP     
1685  6AFE  35  30          PULS    X,Y        
1686        
1687        *set data to rwbuf
1688  6B00  CE  5E00          LDU     #RWBUF     
1689        
1690  6B03  7D  604E          TST     TPGFLG      1:top page,0:else
1691  6B06  27  16          BEQ     WRS01       no
1692  6B08  7D  604D          TST     MCFLG       0,$FF($FE),etc
1693  6B0B  2B  32          BMI     WRS1       
1694       
1695        *add header of machine code
1696  6B0D  34  10          PSHS    X          
1697  6B0F  4F            CLRA         
1698  6B10  A7  C0          STA     ,U+         $00
1699  6B12  BE  6046          LDX     FILSIZ     
1700  6B15  AF  C1          STX     ,U++        file size
1701  6B17  BE  605F          LDX     MCADP      
1702  6B1A  AF  C1          STX     ,U++        save adr
1703  6B1C  35  10          PULS    X          
1704       
1705  6B1E      WRS01        
1706        *check last page
1707  6B1E  B6  604C          LDA     CNT        
1708  6B21  81  01          CMPA    #1         
1709  6B23  26  02          BNE     WRS2       
1710  6B25  31  3B          LEAY    -5,Y       
1711        *set write data
1712  6B27  8D  1E  WRS2    BSR     WRDSET     
1713        *check last page
1714  6B29  B6  604C          LDA     CNT        
1715  6B2C  81  01          CMPA    #1         
1716  6B2E  26  0E          BNE     WRS3       
1717       
1718        *add footer
1719  6B30      WRS211       
1720        * CMPU #RWBUF+512-5
1721        * BLS WRS21
1722        * RTS
1723  6B30  86  FF  WRS21   LDA     #$FF       
1724  6B32  A7  C0          STA     ,U+        
1725  6B34  4F            CLRA         
1726  6B35  A7  C0          STA     ,U+        
1727  6B37  A7  C0          STA     ,U+        
1728  6B39  BE  6063          LDX     MCEXP      
1729  6B3C  AF  C1          STX     ,U++       
1730  6B3E  39    WRS3    RTS          
1731        
1732  6B3F      WRS1         
1733        *add header of basic file
1734  6B3F  86  FF          LDA     #$FF       
1735  6B41  A7  C0          STA     ,U+        
1736  6B43  A7  C0          STA     ,U+        
1737  6B45  A7  C0          STA     ,U+        
1738        
1739        *data set
1740  6B47  A6  80  WRDSET  LDA     ,X+        
1741  6B49  A7  C0          STA     ,U+        
1742  6B4B  31  3F          LEAY    -1,Y       
1743  6B4D  26  F8          BNE     WRDSET     
1744  6B4F  39            RTS          
1745       
1746        *write data to sd
1747  6B50      WRTSD   EQU     *          
1748  6B50  17  01A1          LBSR    SETSCT      *set SCT No
1749        *copy sct no to cmd param
1750  6B53  8E  6004  WRTSD1  LDX     #SCTN0     
1751  6B56  108E  6F3F          LDY     #CMD24+1   
1752  6B5A  C6  04          LDB     #4         
1753  6B5C  17  00BA          LBSR    TRANS      
1754        *send cmd
1755  6B5F  17  01C1          LBSR    SETCKL     
1756  6B62  C6  06          LDB     #6         
1757  6B64  8E  6F3E          LDX     #CMD24     
1758  6B67  A6  80  SDW1    LDA     ,X+        
1759  6B69  17  0149          LBSR    SNDDAT     
1760  6B6C  5A            DECB         
1761  6B6D  26  F8          BNE     SDW1       
1762        *get cmd response
1763  6B6F      SDW2         
1764  6B6F  17  015F          LBSR    GETDAT     
1765  6B72  B6  6008          LDA     RESDAT     
1766  6B75  81  00          CMPA    #$00       
1767  6B77  26  F6          BNE     SDW2       
1768        *1byte skip
1769  6B79  86  FF          LDA     #$FF       
1770  6B7B  17  0137          LBSR    SNDDAT      1byte skip
1771        
1772        *send data packet
1773  6B7E  8E  5E00          LDX     #RWBUF      <-temp -1="" 008d="" 0093="" 00b4="" 00b6="" 00ce="" 011a="" 011d="" 0126="" 0129="" 012b="" 0133="" 01="" 0200="" 02="" 03="" 04="" 05="" 06="" 08="" 0:sd="" 0f="" 108e="" 10be="" 12="" 16="" 1774="" 1775="" 1776="" 1777="" 1778="" 1779="" 1780="" 1781="" 1782="" 1783="" 1784="" 1785="" 1786="" 1787="" 1788="" 1789="" 1790="" 1791="" 1792="" 1793="" 1794="" 1795="" 1796="" 1797="" 1798="" 1799="" 17="" 1800="" 1801="" 1802="" 1803="" 1804="" 1805="" 1806="" 1807="" 1808="" 1809="" 1810="" 1811="" 1812="" 1813="" 1814="" 1815="" 1816="" 1817="" 1818="" 1819="" 1820="" 1821="" 1822="" 1823="" 1824="" 1825="" 1826="" 1827="" 1828="" 1829="" 1830="" 1831="" 1832="" 1833="" 1834="" 1835="" 1836="" 1837="" 1838="" 1839="" 1840="" 1841="" 1842="" 1843="" 1844="" 1845="" 1846="" 1847="" 1848="" 1849="" 1850="" 1851="" 1852="" 1853="" 1854="" 1855="" 1856="" 1857="" 1858="" 1859="" 1860="" 1861="" 1862="" 1863="" 1864="" 1865="" 1866="" 1867="" 1868="" 1869="" 1870="" 1871="" 1872="" 1873="" 1874="" 1875="" 1876="" 1877="" 1878="" 1879="" 1880="" 1881="" 1882="" 1883="" 1884="" 1885="" 1886="" 1887="" 1888="" 1889="" 1890="" 1891="" 1892="" 1893="" 1894="" 1895="" 1896="" 1897="" 1898="" 1899="" 1900="" 1901="" 1902="" 1903="" 1904="" 1905="" 1906="" 1907="" 1908="" 1909="" 1910="" 1911="" 1912="" 1913="" 1914="" 1915="" 1916="" 1917="" 1918="" 1919="" 1920="" 1921="" 1922="" 1923="" 1924="" 1925="" 1926="" 1927="" 1928="" 1929="" 1930="" 1931="" 1932="" 1933="" 1934="" 1935="" 1936="" 1937="" 1938="" 1939="" 1940="" 1941="" 1942="" 1943="" 1944="" 1945="" 1946="" 1947="" 1948="" 1949="" 1950="" 1951="" 1952="" 1953="" 1954="" 1955="" 1956="" 1957="" 1958="" 1959="" 1960="" 1961="" 1962="" 1963="" 1964="" 1965="" 1966="" 1967="" 1968="" 1969="" 1970="" 1971="" 1972="" 1973="" 1974="" 1975="" 1976="" 1977="" 1978="" 1979="" 1980="" 1981="" 1982="" 1983="" 1984="" 1985="" 1986="" 1987="" 1988="" 1989="" 1990="" 1991="" 1992="" 1993="" 1994="" 1995="" 1996="" 1997="" 1998="" 1="" 1a="" 1e="" 1f="" 20="" 24="" 26="" 27="" 2="" 31="" 34="" 35="" 36="" 39="" 3="" 3a="" 3d="" 3f="" 40="" 44="" 48="" 4c="" 50="" 54="" 5a="" 5c="" 5e00="" 5e="" 6004="" 6008="" 6009="" 600e="" 6012="" 6016="" 601f="" 605a="" 605b="" 60="" 68="" 6b81="" 6b85="" 6b87="" 6b8a="" 6b8c="" 6b8f="" 6b91="" 6b93="" 6b95="" 6b98="" 6b9b="" 6b9e="" 6ba1="" 6ba3="" 6ba5="" 6ba8="" 6bab="" 6bad="" 6baf="" 6bb0="" 6bb3="" 6bb7="" 6bb9="" 6bbb="" 6bbe="" 6bc1="" 6bc3="" 6bc5="" 6bc6="" 6bc8="" 6bcb="" 6bce="" 6bd1="" 6bd5="" 6bd7="" 6bd9="" 6bdc="" 6bdd="" 6be0="" 6be3="" 6be5="" 6be7="" 6be9="" 6bec="" 6bef="" 6bf1="" 6bf3="" 6bf5="" 6bf8="" 6bfa="" 6bfc="" 6bff="" 6c00="" 6c02="" 6c04="" 6c06="" 6c08="" 6c0a="" 6c0d="" 6c0f="" 6c11="" 6c13="" 6c15="" 6c18="" 6c19="" 6c1b="" 6c1d="" 6c1f="" 6c20="" 6c22="" 6c24="" 6c26="" 6c28="" 6c29="" 6c2b="" 6c2d="" 6c2f="" 6c31="" 6c33="" 6c35="" 6c37="" 6c39="" 6c3b="" 6c3c="" 6c3e="" 6c40="" 6c42="" 6c44="" 6c46="" 6c48="" 6c4a="" 6c4c="" 6c4e="" 6c50="" 6c52="" 6c54="" 6c56="" 6c58="" 6c5a="" 6c5c="" 6c5d="" 6c5f="" 6c61="" 6c64="" 6c68="" 6c6a="" 6c6c="" 6c6f="" 6c71="" 6c74="" 6c76="" 6c78="" 6c79="" 6c7b="" 6c7d="" 6c80="" 6c82="" 6c84="" 6c87="" 6c8b="" 6c8d="" 6c90="" 6c92="" 6c94="" 6c96="" 6c97="" 6c9a="" 6c9d="" 6c="" 6ca1="" 6ca3="" 6ca5="" 6ca8="" 6caa="" 6cac="" 6cad="" 6caf="" 6cb2="" 6cb4="" 6cb5="" 6cb7="" 6cba="" 6cbc="" 6cbe="" 6cc0="" 6cc2="" 6cc5="" 6cc7="" 6cc9="" 6cca="" 6ccc="" 6ccd="" 6ccf="" 6cd1="" 6cd3="" 6cd5="" 6cd7="" 6cd8="" 6cd9="" 6cda="" 6cdc="" 6cdf="" 6ce0="" 6f38="" 6f39="" 70="" 7d="" 7f="" 80="" 81="" 84="" 86="" 88="" 89="" 8a="" 8b="" 8d="" 8e="" 96="" a0="" a6="" a7="" a:fill="" a="" abx="" ad="" add0="" add1="" add2="" add3="" add40h="" adda="" addb="" adr="" adx0="" adx1="" adx2="" adx3="" anda="" b1-="" b6="" b7="" b:cnt="" bcc="" beq="" bne="" bra="" bsr="" buf="" busy="" c6="" cb="" ckrs="" clr="" cluster="" cmd="" cmpa="" copy="" crch="" crcl="" cs:b0="L" d="" data="" decb="" df="" dir="" dirofs="" disp="" dpgno="" dspb1="" dspb2="" dspb3="" dspbin="" dspbuf="" e5="" ec="" ed="" equ="" exg="" f4="" f5="" f6="" f7="" f7cd="" f7f1="" f9="" fb="" fc="" fd9e="" fe="" ff3b="" ff77="" ff="" fill="" filop="" get="" getd1="" getdat="" inc="" incx4="" lbsr="" lda="" ldb="" ldd="" ldx="" ldy="" leay="" lsla="" lsra="" miso:b1="H(for" no="" nop="" of="" ora="" param="" pbdat="" pcrlf="" pia="" pshs="" puls="" rd1="" rd1sct="" rd2="" rd3="" read="" resdat="" response="" return="" rts="" save="" sct="" sd:2="" sdhc:4="" sdhc="" send="" setckh="" setckl="" setsno="" sndd1="" snddat="" snddt1="" src="" sta="" temp="" tfr="" to="" token="" trans="" trlop="" tst="" until="" wait="" wrdlop="" wrdskp="" wrf1="" wrf2="" wrf3="" wrtdir="" wrtfat="" wrtsd1="" wspfl0="" x40h="" y:dst="" y="">C
1999  6CE1  79  6008          ROL     RESDAT      C->b0
2000  6CE4  5A            DECB         
2001  6CE5  26  EE          BNE     GETD1      
2002  6CE7  8D  3A          BSR     SETCKL     
2003  6CE9  35  86          PULS    A,B,PC     
2004        *
2005        *------------------------------
2006        *input SCT No
2007  6CEB      INSCT   EQU     *          
2008  6CEB  8E  7046          LDX     #MSSCT     
2009  6CEE  17  0132          LBSR    PSTRNG     
2010  6CF1  17  0085          LBSR    GET8CH      get 8chr, convert 4bin
2011        
2012  6CF4      SETSCT  EQU     *          
2013  6CF4  34  32          PSHS    A,X,Y      
2014  6CF6  7D  6009          TST     SDHC        0:SD,1:SDHC
2015  6CF9  26  1A          BNE     CALCHC     
2016        *SD card
2017  6CFB  8E  6005          LDX     #SCTN1     
2018  6CFE  108E  6004          LDY     #SCTN0     
2019  6D02  C6  03          LDB     #3         
2020  6D04  17  FF12          LBSR    TRANS      
2021  6D07  7F  6007          CLR     SCTN3      
2022        *calc top adrs of sct
2023  6D0A      CALCSD  EQU     *          
2024  6D0A  78  6007          LSL     SCTN3      
2025  6D0D  79  6006          ROL     SCTN2      
2026  6D10  79  6005          ROL     SCTN1      
2027  6D13  35  B2          PULS    A,X,Y,PC   
2028       
2029        *SDHC card
2030        *calc top adrs of sct
2031  6D15      CALCHC  EQU     *          
2032  6D15  8E  6004          LDX     #SCTN0     
2033  6D18  108E  6F39          LDY     #CMD17+1   
2034  6D1C  C6  04          LDB     #4         
2035  6D1E  17  FEF8          LBSR    TRANS      
2036  6D21  35  B2          PULS    A,X,Y,PC   
2037       
2038        *
2039        *set sck:L
2040  6D23      SETCKL  EQU     *          
2041  6D23  34  02          PSHS    A          
2042  6D25  86  34          LDA     #$34        ca2=L
2043  6D27  B7  FD9F          STA     PBCTL      
2044  6D2A  35  82          PULS    A,PC       
2045       
2046        *set sck:H
2047  6D2C      SETCKH  EQU     *          
2048  6D2C  34  02          PSHS    A          
2049  6D2E  86  3C          LDA     #$3C        ca2=H
2050  6D30  B7  FD9F          STA     PBCTL      
2051  6D33  35  82          PULS    A,PC       
2052       
2053        *binary(A)->ascii(A)(B)
2054  6D35      DSPBIN  EQU     *          
2055  6D35  8D  04          BSR     DSPBI0     
2056  6D37  BD  6D73          JSR     OUTSPC     
2057  6D3A  39            RTS          
2058        *
2059  6D3B      DSPBI0  EQU     *          
2060  6D3B  34  06          PSHS    A,B        
2061  6D3D  1F  89          TFR     A,B        
2062  6D3F  44            LSRA         
2063  6D40  44            LSRA         
2064  6D41  44            LSRA         
2065  6D42  44            LSRA         
2066  6D43  8A  30          ORA     #$30       
2067  6D45  C4  0F          ANDB    #$0F       
2068  6D47  CA  30          ORB     #$30       
2069  6D49  81  39          CMPA    #$39       
2070  6D4B  23  02          BLS     BI21       
2071  6D4D  8B  07          ADDA    #$07       
2072  6D4F  C1  39  BI21    CMPB    #$39       
2073  6D51  23  02          BLS     BI22       
2074  6D53  CB  07          ADDB    #$07       
2075  6D55  BD  FBBB  BI22    JSR     OUTCHA     
2076  6D58  1F  98          TFR     B,A        
2077  6D5A  BD  FBBB          JSR     OUTCHA     
2078  6D5D  35  86          PULS    A,B,PC     
2079       
2080        *
2081  6D5F      DSPBI2  EQU     *          
2082  6D5F  A6  80          LDA     ,X+        
2083  6D61  8D  D8          BSR     DSPBI0     
2084  6D63  A6  80          LDA     ,X+        
2085  6D65  8D  D4          BSR     DSPBI0     
2086  6D67  39            RTS          
2087       
2088        *
2089        *crlf
2090  6D68      PCRLF   EQU     *          
2091  6D68  86  0D          LDA     #CR        
2092  6D6A  BD  FBBB          JSR     OUTCHA     
2093  6D6D  86  0A          LDA     #LF        
2094  6D6F  BD  FBBB          JSR     OUTCHA     
2095  6D72  39            RTS          
2096       
2097        *out spc
2098  6D73      OUTSPC  EQU     *          
2099  6D73  86  20          LDA     #SPC       
2100  6D75  BD  FBBB          JSR     OUTCHA     
2101  6D78  39            RTS          
2102       
2103        *
2104  6D79      GET8CH  EQU     *          
2105        *input chr
2106  6D79  8E  6077          LDX     #INPBUF    
2107  6D7C  5F            CLRB         
2108  6D7D  BD  6F12  CLOP    JSR     INOUTC     
2109  6D80  81  0D          CMPA    #CR        
2110  6D82  27  07          BEQ     INEND      
2111  6D84  A7  85          STA     B,X        
2112  6D86  5C            INCB         
2113  6D87  C1  08          CMPB    #8         
2114  6D89  25  F2          BLO     CLOP       
2115       
2116  6D8B      INEND        
2117        *shift
2118  6D8B  5D            TSTB         
2119  6D8C  27  21          BEQ     CLEND      
2120  6D8E  8E  6077          LDX     #INPBUF    
2121  6D91  3A            ABX          
2122  6D92  108E  607F          LDY     #INPBUF+8  
2123  6D96  34  04          PSHS    B          
2124  6D98  A6  82  SFLOP   LDA     ,-X        
2125  6D9A  A7  A2          STA     ,-Y        
2126  6D9C  5A            DECB         
2127  6D9D  26  F9          BNE     SFLOP      
2128        *clr
2129  6D9F  C6  08  CL1     LDB     #8         
2130  6DA1  E0  E0          SUBB    ,S+        
2131  6DA3  27  0A          BEQ     CLEND      
2132  6DA5  8E  6077          LDX     #INPBUF    
2133  6DA8  86  30          LDA     #'0        
2134  6DAA  A7  80  CLLOP   STA     ,X+        
2135  6DAC  5A            DECB         
2136  6DAD  26  FB          BNE     CLLOP      
2137  6DAF      CLEND        
2138       
2139        *convert to bin
2140  6DAF  C6  04          LDB     #4         
2141  6DB1  8E  6077          LDX     #INPBUF    
2142  6DB4  108E  6004          LDY     #SCTN0     
2143  6DB8      CVT1         
2144  6DB8  A6  80          LDA     ,X+        
2145  6DBA  8D  1E          BSR     CVBIN      
2146  6DBC  25  16          BCS     EREND1     
2147  6DBE  48            LSLA         
2148  6DBF  48            LSLA         
2149  6DC0  48            LSLA         
2150  6DC1  48            LSLA         
2151  6DC2  34  02          PSHS    A          
2152  6DC4  A6  80          LDA     ,X+        
2153  6DC6  8D  12          BSR     CVBIN      
2154  6DC8  25  08          BCS     EREND0     
2155  6DCA  AB  E0          ADDA    ,S+        
2156  6DCC  A7  A0          STA     ,Y+        
2157  6DCE  5A            DECB         
2158  6DCF  26  E7          BNE     CVT1       
2159  6DD1  39            RTS          
2160        
2161  6DD2  35  02  EREND0  PULS    A          
2162  6DD4  8E  708C  EREND1  LDX     #MSERR     
2163  6DD7  8D  4A          BSR     PSTRNG     
2164  6DD9  39    EEND    RTS          
2165       
2166        *--------------------
2167        *ascii -> bin
2168  6DDA      CVBIN   EQU     *          
2169  6DDA  80  30          SUBA    #'0        
2170  6DDC  2B  11          BMI     CVERR      
2171  6DDE  81  09          CMPA    #9         
2172  6DE0  23  0A          BLS     CVBEND     
2173  6DE2  81  11          CMPA    #$11       
2174  6DE4  25  09          BLO     CVERR      
2175  6DE6  81  16          CMPA    #$16       
2176  6DE8  22  05          BHI     CVERR      
2177  6DEA  80  07          SUBA    #7         
2178  6DEC      CVBEND       
2179  6DEC  1C  FE          ANDCC   #$FE        reset C
2180  6DEE  39            RTS          
2181  6DEF  1A  01  CVERR   ORCC    #$01        set C
2182  6DF1  39            RTS          
2183       
2184        *--------------------
2185        *add 2bytes to 4bytes
2186        * X,X+1,X+2,X+3 + Y,Y+1
2187        * data X is big endian
2188        * data Y is little endian
2189  6DF2      ADD42   EQU     *          
2190  6DF2  34  36          PSHS    A,B,X,Y    
2191  6DF4  32  7C          LEAS    -4,S       
2192  6DF6  C6  04          LDB     #4         
2193  6DF8  A6  80  AD1     LDA     ,X+        
2194  6DFA  A7  E0          STA     ,S+        
2195  6DFC  5A            DECB         
2196  6DFD  26  F9          BNE     AD1        
2197        
2198        *add (lower)
2199  6DFF  A6  A0          LDA     ,Y+        
2200  6E01  AB  E2          ADDA    ,-S        
2201  6E03  A7  E4          STA     ,S         
2202  6E05  24  02          BCC     AD2        
2203  6E07  6C  7F          INC     -1,S       
2204        *add (upper)
2205  6E09  A6  A4  AD2     LDA     ,Y         
2206  6E0B  AB  E2          ADDA    ,-S        
2207  6E0D  A7  E4          STA     ,S         
2208  6E0F  24  02          BCC     AD3        
2209  6E11  6C  7F          INC     -1,S       
2210  6E13  30  1C  AD3     LEAX    -4,X       
2211  6E15  32  7E          LEAS    -2,S       
2212  6E17  C6  04          LDB     #4         
2213  6E19  A6  E0  AD4     LDA     ,S+        
2214  6E1B  A7  80          STA     ,X+        
2215  6E1D  5A            DECB         
2216  6E1E  26  F9          BNE     AD4        
2217  6E20  35  36          PULS    A,B,X,Y    
2218  6E22  39            RTS          
2219       
2220        *--------------------
2221        * pstring
2222  6E23      PSTRNG  EQU     *          
2223  6E23  34  02          PSHS    A          
2224  6E25  A6  80  PSLOP   LDA     ,X+        
2225  6E27  81  04          CMPA    #4         
2226  6E29  27  05          BEQ     PSEND      
2227  6E2B  BD  FBBB          JSR     OUTCHA     
2228  6E2E  20  F5          BRA     PSLOP      
2229  6E30  35  02  PSEND   PULS    A          
2230  6E32  39            RTS          
2231       
2232        *--------------------
2233        *disp MM-DD-YY
2234        *indata A(Low),B(High)
2235  6E33      DSPYMD  EQU     *          
2236  6E33  1E  89          EXG     A,B        
2237  6E35  34  10          PSHS    X          
2238  6E37  34  06          PSHS    A,B        
2239  6E39  C4  E0          ANDB    #$E0       
2240  6E3B  54            LSRB         
2241  6E3C  54            LSRB         
2242  6E3D  54            LSRB         
2243  6E3E  54            LSRB         
2244  6E3F  54            LSRB         
2245  6E40  47            ASRA         
2246  6E41  24  02          BCC     DYMD1      
2247  6E43  CB  08          ADDB    #8         
2248  6E45  F7  603F  DYMD1   STB     WMDY        MM
2249  6E48  35  06          PULS    A,B        
2250  6E4A  34  04          PSHS    B          
2251  6E4C  C4  1F          ANDB    #$1F       
2252  6E4E  F7  6040          STB     WMDY+1      DD
2253  6E51  35  04          PULS    B          
2254        
2255  6E53  44            LSRA         
2256        * ASLB
2257        * BCC DYMD2
2258        * INCA
2259  6E54      DYMD2        
2260  6E54  80  14          SUBA    #20         A+1980-2000
2261  6E56  B7  6041          STA     WMDY+2      YY
2262        
2263        *disp MM-DD-YY
2264  6E59  BD  6D73          JSR     OUTSPC     
2265  6E5C  8E  603F          LDX     #WMDY      
2266  6E5F  A6  80          LDA     ,X+        
2267  6E61  8D  14          BSR     DB2ASC      MM
2268  6E63  86  2D          LDA     #'-        
2269  6E65  BD  FBBB          JSR     OUTCHA     
2270  6E68  A6  80          LDA     ,X+        
2271  6E6A  8D  0B          BSR     DB2ASC      DD
2272  6E6C  86  2D          LDA     #'-        
2273  6E6E  BD  FBBB          JSR     OUTCHA     
2274  6E71  A6  80          LDA     ,X+        
2275  6E73  8D  02          BSR     DB2ASC      YY
2276  6E75  35  90          PULS    X,PC       
2277        *
2278        *----------
2279        *convert decimal value to ascii code
2280        *(A:BIN)->ASCII
2281  6E77      DB2ASC  EQU     *          
2282  6E77  34  06          PSHS    A,B        
2283  6E79  1F  89          TFR     A,B        
2284  6E7B  86  30          LDA     #$30       
2285  6E7D  C1  0A  DBLOP   CMPB    #10        
2286  6E7F  25  05          BLO     DB2        
2287  6E81  C0  0A          SUBB    #10        
2288  6E83  4C            INCA         
2289  6E84  20  F7          BRA     DBLOP      
2290  6E86  BD  FBBB  DB2     JSR     OUTCHA     
2291  6E89  1F  98          TFR     B,A        
2292  6E8B  8B  30          ADDA    #$30       
2293  6E8D  BD  FBBB          JSR     OUTCHA     
2294  6E90  35  86          PULS    A,B,PC     
2295       
2296        *disp FILE size
2297  6E92      DSPSIZ  EQU     *          
2298  6E92  34  10          PSHS    X          
2299  6E94  BE  6042          LDX     WFSIZ      
2300  6E97  27  07          BEQ     DSS1        if 64k over?
2301  6E99  8E  7157          LDX     #MSOVR     
2302  6E9C  8D  85          BSR     PSTRNG     
2303  6E9E  20  3E          BRA     DSEND      
2304        
2305  6EA0      DSS1         
2306        * /1024(400h)
2307  6EA0  B6  6044          LDA     WFSIZ+2     under 64k
2308  6EA3  44            LSRA         
2309  6EA4  44            LSRA         
2310        *disp dec
2311  6EA5  1F  89          TFR     A,B        
2312  6EA7  81  64          CMPA    #100       
2313  6EA9  23  10          BLS     DSS13      
2314  6EAB  86  30          LDA     #'0        
2315  6EAD  C1  64  DSLOP1  CMPB    #100       
2316  6EAF  25  05          BLO     DSS12      
2317  6EB1  C0  64          SUBB    #100       
2318  6EB3  4C            INCA         
2319  6EB4  20  F7          BRA     DSLOP1     
2320  6EB6  BD  FBBB  DSS12   JSR     OUTCHA     
2321  6EB9  20  09          BRA     DSS14      
2322        
2323        *under 100
2324  6EBB  BD  6D73  DSS13   JSR     OUTSPC     
2325  6EBE  86  20          LDA     #SPC       
2326  6EC0  C1  0A          CMPB    #10        
2327  6EC2  25  0B          BLO     DSS2       
2328        
2329  6EC4  86  30  DSS14   LDA     #'0        
2330  6EC6  C1  0A  DSLOP2  CMPB    #10        
2331  6EC8  25  05          BLO     DSS2       
2332  6ECA  C0  0A          SUBB    #10        
2333  6ECC  4C            INCA         
2334  6ECD  20  F7          BRA     DSLOP2     
2335        
2336  6ECF  BD  FBBB  DSS2    JSR     OUTCHA      10's place
2337        *under 10
2338  6ED2  1F  98  DSS21   TFR     B,A        
2339  6ED4  8B  31          ADDA    #$31        '1
2340  6ED6  BD  FBBB  DSS3    JSR     OUTCHA      1's place
2341  6ED9  86  6B          LDA     #'k        
2342  6EDB  BD  FBBB          JSR     OUTCHA     
2343  6EDE  BD  6D73  DSEND   JSR     OUTSPC     
2344  6EE1  35  90          PULS    X,PC       
2345       
2346        *----------
2347        *disp cluster
2348        *return:clusterL
2349  6EE3      DSPCLS  EQU     *          
2350  6EE3  34  10          PSHS    X          
2351  6EE5  BD  6D73          JSR     OUTSPC     
2352  6EE8  8E  604A          LDX     #CLSTL     
2353  6EEB  C6  02          LDB     #2         
2354  6EED  A6  80  DCLOP1  LDA     ,X+        
2355  6EEF  8D  86          BSR     DB2ASC     
2356  6EF1  5A            DECB         
2357  6EF2  26  F9          BNE     DCLOP1     
2358  6EF4  35  90          PULS    X,PC       
2359       
2360        *----------
2361  6EF6      FNMIN   EQU     *          
2362        *clr buf
2363  6EF6  8E  605A          LDX     #FNAME+11  
2364  6EF9  C6  0B          LDB     #8+3       
2365  6EFB  86  20          LDA     #SPC       
2366  6EFD  A7  82  FNIN0   STA     ,-X        
2367  6EFF  5A            DECB         
2368  6F00  26  FB          BNE     FNIN0      
2369       
2370        *fname in
2371  6F02  34  24          PSHS    B,Y        
2372  6F04  108E  604F          LDY     #FNAME     
2373  6F08  C6  08          LDB     #8         
2374  6F0A  8D  0D          BSR     LININ      
2375  6F0C  86  20          LDA     #$20       
2376  6F0E  A7  3F          STA     -1,Y       
2377  6F10  35  A4          PULS    B,Y,PC     
2378        *
2379        *--------------------
2380        *
2381  6F12  BD  FBB8  INOUTC  JSR     INCHA      
2382  6F15  BD  FBBB          JSR     OUTCHA     
2383  6F18  39            RTS          
2384        *
2385        *--------------------
2386        * line input
2387        * input: B:count, Y:buf
2388        * output: FILBUF (terminate $00)
2389        * temp buf $043D - $053C
2390  6F19      LININ   EQU     *          
2391  6F19  0F  BF          CLR     $BF        
2392  6F1B  BD  D807          JSR     LININP     
2393        
2394  6F1E  8E  043D          LDX     #$043D     
2395  6F21  A6  80  LINLOP  LDA     ,X+        
2396  6F23  A7  A0          STA     ,Y+        
2397  6F25  5A            DECB         
2398  6F26  27  03          BEQ     LEND       
2399  6F28  4D            TSTA         
2400  6F29  26  F6          BNE     LINLOP     
2401  6F2B  39    LEND    RTS          
2402       
2403        *
2404        **************************************************
2405        *========== parameter ==========
2406  6F2C  40    CMD0    FCB     $40,$00,$00,$00,$00,$95 '@   
2407  6F32  41    CMD1    FCB     $41,$00,$00,$00,$00,$FF 'A   
2408  6F38  51    CMD17   FCB     $51,$00,$00,$00,$00,$FF 'Q   
2409  6F3E  58    CMD24   FCB     $58,$00,$00,$00,$00,$FF 'X   
2410  6F44  48    CMD8    FCB     $48,$00,$00,$01,$AA,$87 'H   
2411  6F4A  7A    CMD58   FCB     $7A,$00,$00,$00,$00,$FF 'z   
2412  6F50  77    CMD55   FCB     $77,$00,$00,$00,$00,$FF 'w   
2413  6F56  69    ACMD41  FCB     $69,$40,$FF,$80,$00,$FF 'i   
2414  6F5C  49    CMD9    FCB     $49,$00,$00,$00,$00,$FF 'I   
2415        *
2416  6F62  43      MCMD0   FCC     /CMD0/,CR,LF   
2417  6F68  04            FCB     4          
2418  6F69  43      MCMD8   FCC     /CMD8/,CR,LF   
2419  6F6F  04            FCB     4          
2420  6F70  43      MCMD58  FCC     /CMD58/,CR,LF  
2421  6F77  04            FCB     4          
2422  6F78  43      MCMD55  FCC     /CMD55/,CR,LF  
2423  6F7F  04            FCB     4          
2424  6F80  41      MCMD41  FCC     /ACMD41/,CR,LF   
2425  6F88  04            FCB     4          
2426  6F89  43      MCMD9   FCC     /CMD9/,CR,LF   
2427  6F8F  04            FCB     4          
2428        *
2429  6F90  0D      MSMENU1 FCC     CR,LF,CR,LF,/Main MENU/  
2430  6F9D  0D              FCC     CR,LF,/F)iles, L)oad, saveB)asic, saveM)code,  K)ill, reS)etSD, O)ption, Q)uit: /  
2431  6FE8  04            FCB     4          
2432  6FE9  0D      MSMENU2 FCC     CR,LF,CR,LF,/Option  MENU/   
2433  6FF9  0D              FCC     CR,LF,/1:Read Sct, 2:Disp SD data, 3:Disp MBR, 4:Disp BPB, 5:Disp FAT, 0:Return: /   
2434  7045  04            FCB     4          
2435  7046  53      MSSCT   FCC     /SctNo: /  
2436  704D  04            FCB     4          
2437  704E  0D      MSSD0   FCC     CR,LF,/SD Card/  
2438  7057  04            FCB     4          
2439  7058  0D      MSSD1   FCC     CR,LF,/SDHC Card/  
2440  7063  04            FCB     4          
2441  7064  0D      MSINIT  FCC     CR,LF,CR,LF,/SD Card setting.../   
2442  707A  04            FCB     4          
2443  707B  53      MERR    FCC     /Setting error!/,CR,LF   
2444  708B  04            FCB     4          
2445  708C  49      MSERR   FCC     /Input error!/,CR,LF   
2446  709A  04            FCB     4          
2447  709B  0D      MSOFS   FCC     CR,LF,/Sector no is:/  
2448  70AA  04            FCB     4          
2449  70AB  0D      MSBPB   FCC     CR,LF,/ BPB: /   
2450  70B3  04            FCB     4          
2451  70B4  0D      MSFAT   FCC     CR,LF,/ FAT: /   
2452  70BC  04            FCB     4          
2453  70BD  0D      MSDIR   FCC     CR,LF,/ DIR: /   
2454  70C5  04            FCB     4          
2455  70C6  0D      MSCL2   FCC     CR,LF,/ 1stCLUSTER: /  
2456  70D5  04            FCB     4          
2457  70D6  0D      MSINFN  FCC     CR,LF,CR,LF,/ FileName: /  
2458  70E5  04            FCB     4          
2459  70E6  0D      MSMSV   FCC     CR,LF,CR,LF,/ FileName & Param: /  
2460  70FD  04            FCB     4          
2461  70FE  0D      MSLDNG  FCC     CR,LF,/ Loading /  
2462  7109  04            FCB     4          
2463  710A  0D      MSWTNG  FCC     CR,LF,/ Writing /  
2464  7115  04            FCB     4          
2465  7116  0D      MSLDED  FCC     CR,LF,/ Load end./   
2466  7122  04            FCB     4          
2467  7123  0D      MSWTED  FCC     CR,LF,/ Write end./  
2468  7130  04            FCB     4          
2469  7131  0D      MSNOFL  FCC     CR,LF,/ Not exist!/  
2470  713E  04            FCB     4          
2471  713F  0D      MSNXTP  FCC     CR,LF,"Next page (SP:Next): "  
2472  7156  04            FCB     4          
2473  7157  3E      MSOVR   FCC     />64k/    
2474  715B  04            FCB     4          
2475  715C  0D      MSKILL  FCC     CR,LF," Kill OK?(Y/N): "   
2476  716E  04            FCB     4          
2477  716F  0D      MSEXST  FCC     CR,LF," Exist! Over Write?(Y/N): "   
2478  718B  04            FCB     4          
2479  718C  0D      MSMCOF  FCC     CR,LF," Offset -$2000?(Y/N): "   
2480  71A4  04            FCB     4          
2481  71A5  0D      MSMCAS  FCC     CR,LF," Store ADR,SIZE: "  
2482  71B8  04            FCB     4          
2483        **************************************************
2484       
2485          END     START      
 
0 error(s),  0 warning(s) is detected.
 
Label address
ABLOP   69D3  ACMD41  6F56  AD1     6DF8  AD2     6E09  AD3     6E13
AD4     6E19  ADD0    6C3E  ADD1    6C4C  ADD2    6C54  ADD3    6C5C
ADD40H  6C3C  ADD42   6DF2  ADX0    6C2D  ADX1    6C33  ADX2    6C37
ADX3    6C3B  APLUSB  6A07  ASC2BIN 6896  ASC411  6218  ASCMD41 620B
BASADP  0033  BASAEP  0035  BASEXP  605D  BI21    6D4F  BI22    6D55
BUSY    6BA5  CALCHC  6D15  CALCSD  6D0A  CALLOP  6A3D  CEND    66D0
CKRS    6B9B  CL1     6D9F  CLEND   6DAF  CLLOP   6DAA  CLOP    6D7D
CLRDIR  6821  CLSTH   6048  CLSTL   604A  CMD0    6F2C  CMD1    6F32
CMD17   6F38  CMD24   6F3E  CMD55   6F50  CMD58   6F4A  CMD8    6F44
CMD9    6F5C  CMPEND  66EC  CMPFN   66D1  CMPLOP  66D9  CNT     604C
CNV1    68E6  CNV2    68F2  CNVBUF  607F  CNVINT  6631  CNVLOP  6631
CNVSUB  68DE  CR      000D  CSRON   FBF7  CVBEND  6DEC  CVBIN   6DDA
CVERR   6DEF  CVT1    6DB8  CVTLEN  6067  DB2     6E86  DB2ASC  6E77
DBLOP   6E7D  DCLOP1  6EED  DELMK   00E5  DIRENT  601F  DIRGET  698A
DIROFS  605B  DLOP1   696C  DPGNO   605A  DSEND   6EDE  DSLOP1  6EAD
DSLOP2  6EC6  DSPB1   6CA1  DSPB2   6CA3  DSPB3   6CB4  DSPBI0  6D3B
DSPBI2  6D5F  DSPBIN  6D35  DSPBPB  63E2  DSPBUF  6C97  DSPC1   6473
DSPCKE  6433  DSPCLS  6EE3  DSPDIR  6406  DSPED   6989  DSPEND  64A9
DSPFAT  63F4  DSPFL0  6412  DSPFL1  6423  DSPFL2  643D  DSPFL3  643F
DSPFL4  644E  DSPFL5  6491  DSPFL6  649D  DSPMBR  638E  DSPSDDAT  62FE
DSPSIZ  6E92  DSPYMD  6E33  DSS1    6EA0  DSS12   6EB6  DSS13   6EBB
DSS14   6EC4  DSS2    6ECF  DSS21   6ED2  DSS3    6ED6  DYMD1   6E45
DYMD2   6E54  EEND    6DD9  EREND0  6DD2  EREND1  6DD4  ESC     001B
EXIST   694B  EXSTFL  6065  FILBUF  6083  FILL    6C24  FILOP   6C26
FILSIZ  6046  FIXPTR  C730  FMDAT   02FA  FNAME   604F  FNIN0   6EFD
FNMIN   6EF6  GET1    6399  GET2    639B  GET8CH  6D79  GETBPB  63C9
GETD1   6CD5  GETDAT  6CD1  GETFDT  66EE  GETMBR  63AC  GR00    6185
GR2580  6245  GR2581  625C  GR2582  625E  GR410   6220  GR550   6201
GR580   61D7  GR581   61E1  GR582   61E3  GR80    61A7  GR81    61B9
GR90    6311  GR91    631D  GTBLOP  63D4  GTF1    670D  GTF2    6710
ILOP1   6281  INCHA   FBB8  INCX4   6C2D  INEND   6D8B  INIT    60C7
INL10   6647  INL11   666B  INL12   66B2  INL2    6677  INLOP   6638
INOUTC  6F12  INPBUF  6077  INPFLDAT  687C  INSCT   6CEB  ISTT    616B
KILEND  67B8  KILFILE 6764  KILSUB  677D  KL1     67A2  KL2     67B0
LD1     6740  LD10    65AC  LD2     6754  LD3     64CF  LD41    64F4
LD5     650D  LD8     654F  LD80    6594  LD81    6598  LD82    65A1
LD9     65AA  LDE0    65CF  LDE1    65D5  LDEND   65BC  LDFILE  64AA
LDFL0   671C  LDFL1   6728  LDFL5   674C  LDFLE   6763  LDLOP   651D
LDNEND  65D9  LEND    6F2B  LF      000A  LINBUF  043D  LININ   6F19
LININP  D807  LININT  FBF1  LINLOP  6F21  LINO1   004B  LINO2   033A
MAIN    60A3  MATCH   66E6  MCADP   605F  MCAEP   6061  MCEXP   6063
MCFLG   604D  MCMD0   6F62  MCMD41  6F80  MCMD55  6F78  MCMD58  6F70
MCMD8   6F69  MCMD9   6F89  MEM2ED  6626  MEMSET  65E1  MEMSET2 6611
MENU    60CA  MENU1   60E4  MENU2   60ED  MENU3   60F6  MENU4   60FF
MENU5   6108  MENU6   6110  MENU7   6118  MERR    707B  MKF1    69A9
MKF2    69AD  MKFLDT  6990  MM21    6621  MS0     65F8  MS1     65FC
MS3     660B  MSBPB   70AB  MSCL2   70C6  MSDIR   70BD  MSERR   708C
MSEXST  716F  MSFAT   70B4  MSINFN  70D6  MSINIT  7064  MSKILL  715C
MSLDED  7116  MSLDNG  70FE  MSLOP   65FE  MSMCAS  71A5  MSMCOF  718C
MSMENU1 6F90  MSMENU2 6FE9  MSMSV   70E6  MSNOFL  7131  MSNXTP  713F
MSOFS   709B  MSOVR   7157  MSSCT   7046  MSSD0   704E  MSSD1   7058
MSWTED  7123  MSWTNG  710A  NOEXST  694E  NOFEND  67C6  NOTM    66EA
OPMEN10 614F  OPMEN6  612F  OPMEN7  6137  OPMEN8  613F  OPMEN9  6147
OPMENU  6120  OUTCHA  FBBB  OUTSPC  6D73  PBCTL   FD9F  PBDAT   FD9E
PCRLF   6D68  PSEND   6E30  PSLOP   6E25  PSTRNG  6E23  RD1     6C74
RD1SCT  6C61  RD2     6C7B  RD3     6C8B  RDLINO  9162  RDSCT   637B
RDTOP   6069  RESDAT  6008  RPT41   61EC  RWBUF   5E00  SC01    617C
SC2581  623D  SC551   61F9  SC581   61CF  SC80    619F  SC91    6309
SCMD0   6174  SCMD258 6230  SCMD55  61EC  SCMD58  61C2  SCMD8   6192
SCTBPB  600A  SCTCLT  601A  SCTDIR  6012  SCTDSV  6016  SCTFAT  600E
SCTN0   6004  SCTN1   6005  SCTN2   6006  SCTN3   6007  SCTPCL  601E
SD1     6272  SDERR   6157  SDHC    6009  SDINIT  615E  SDW1    6B67
SDW2    6B6F  SETCKH  6D2C  SETCKL  6D23  SETCL   6936  SETFNM  6805
SETSCT  6CF4  SETSNO  63BC  SETX    6925  SFATED  6941  SFLOP   6D98
SKP1    62B8  SKP2    62F5  SNDD1   6CBC  SNDDAT  6CB5  SNDDT1  6B8A
SPC     0020  SRC0    6905  SRC00   6942  SRCDIR  6951  SRCDLM  6889
SRCFAT  68F9  SRCFL0  6960  SRCFL1  6963  SRCFL5  697E  SRCLOP  690E
SRDLM1  688B  SRLOP1  68A7  SRLOP2  68BF  START   6000  STDATE  69CA
STTADR  6000  SVTOP   606B  TPGFLG  604E  TRANS   6C19  TRLOP   6C1B
TXTADR  2000  TXTBUF  033C  VN      6003  WFSIZ   6042  WK0     6075
WK1     606D  WK2     606F  WK3     6071  WK4     6073  WMDY    603F
WR2     6A78  WR3     6AA2  WR4     6AD8  WR5     6ADA  WR6     6ADC
WRB0    67CD  WRB1    67EB  WRBEND  6804  WRBFILE 67B9  WRDLOP  6BC3
WRDSET  6B47  WRDSKP  6BC8  WREND   6AE7  WRF1    6BFC  WRF2    6BFF
WRF3    6C15  WRFL1   6812  WRFL11  681C  WRFL2   6820  WRFLP2  680D
WRLOP   6A88  WRM1    6849  WRMEND  687B  WRMFILE 682F  WRS01   6B1E
WRS1    6B3F  WRS2    6B27  WRS21   6B30  WRS211  6B30  WRS3    6B3E
WRSUB   6AEE  WRTDIR  6BB0  WRTF0   6A25  WRTF1   6A2A  WRTF2   6A2D
WRTF3   6A54  WRTF4   6A56  WRTFAT  6BDD  WRTFIL  6A19  WRTSD   6B50
WRTSD1  6B53  WSPFL0  6BBB  WWCLOP  6AF8 
 
<!---temp--><-temp -1="" 008d="" 0093="" 00b4="" 00b6="" 00ce="" 011a="" 011d="" 0126="" 0129="" 012b="" 0133="" 01="" 0200="" 02="" 03="" 04="" 05="" 06="" 08="" 0:sd="" 0f="" 108e="" 10be="" 12="" 16="" 1774="" 1775="" 1776="" 1777="" 1778="" 1779="" 1780="" 1781="" 1782="" 1783="" 1784="" 1785="" 1786="" 1787="" 1788="" 1789="" 1790="" 1791="" 1792="" 1793="" 1794="" 1795="" 1796="" 1797="" 1798="" 1799="" 17="" 1800="" 1801="" 1802="" 1803="" 1804="" 1805="" 1806="" 1807="" 1808="" 1809="" 1810="" 1811="" 1812="" 1813="" 1814="" 1815="" 1816="" 1817="" 1818="" 1819="" 1820="" 1821="" 1822="" 1823="" 1824="" 1825="" 1826="" 1827="" 1828="" 1829="" 1830="" 1831="" 1832="" 1833="" 1834="" 1835="" 1836="" 1837="" 1838="" 1839="" 1840="" 1841="" 1842="" 1843="" 1844="" 1845="" 1846="" 1847="" 1848="" 1849="" 1850="" 1851="" 1852="" 1853="" 1854="" 1855="" 1856="" 1857="" 1858="" 1859="" 1860="" 1861="" 1862="" 1863="" 1864="" 1865="" 1866="" 1867="" 1868="" 1869="" 1870="" 1871="" 1872="" 1873="" 1874="" 1875="" 1876="" 1877="" 1878="" 1879="" 1880="" 1881="" 1882="" 1883="" 1884="" 1885="" 1886="" 1887="" 1888="" 1889="" 1890="" 1891="" 1892="" 1893="" 1894="" 1895="" 1896="" 1897="" 1898="" 1899="" 1900="" 1901="" 1902="" 1903="" 1904="" 1905="" 1906="" 1907="" 1908="" 1909="" 1910="" 1911="" 1912="" 1913="" 1914="" 1915="" 1916="" 1917="" 1918="" 1919="" 1920="" 1921="" 1922="" 1923="" 1924="" 1925="" 1926="" 1927="" 1928="" 1929="" 1930="" 1931="" 1932="" 1933="" 1934="" 1935="" 1936="" 1937="" 1938="" 1939="" 1940="" 1941="" 1942="" 1943="" 1944="" 1945="" 1946="" 1947="" 1948="" 1949="" 1950="" 1951="" 1952="" 1953="" 1954="" 1955="" 1956="" 1957="" 1958="" 1959="" 1960="" 1961="" 1962="" 1963="" 1964="" 1965="" 1966="" 1967="" 1968="" 1969="" 1970="" 1971="" 1972="" 1973="" 1974="" 1975="" 1976="" 1977="" 1978="" 1979="" 1980="" 1981="" 1982="" 1983="" 1984="" 1985="" 1986="" 1987="" 1988="" 1989="" 1990="" 1991="" 1992="" 1993="" 1994="" 1995="" 1996="" 1997="" 1998="" 1="" 1a="" 1e="" 1f="" 20="" 24="" 26="" 27="" 2="" 31="" 34="" 35="" 36="" 39="" 3="" 3a="" 3d="" 3f="" 40="" 44="" 48="" 4c="" 50="" 54="" 5a="" 5c="" 5e00="" 5e="" 6004="" 6008="" 6009="" 600e="" 6012="" 6016="" 601f="" 605a="" 605b="" 60="" 68="" 6b81="" 6b85="" 6b87="" 6b8a="" 6b8c="" 6b8f="" 6b91="" 6b93="" 6b95="" 6b98="" 6b9b="" 6b9e="" 6ba1="" 6ba3="" 6ba5="" 6ba8="" 6bab="" 6bad="" 6baf="" 6bb0="" 6bb3="" 6bb7="" 6bb9="" 6bbb="" 6bbe="" 6bc1="" 6bc3="" 6bc5="" 6bc6="" 6bc8="" 6bcb="" 6bce="" 6bd1="" 6bd5="" 6bd7="" 6bd9="" 6bdc="" 6bdd="" 6be0="" 6be3="" 6be5="" 6be7="" 6be9="" 6bec="" 6bef="" 6bf1="" 6bf3="" 6bf5="" 6bf8="" 6bfa="" 6bfc="" 6bff="" 6c00="" 6c02="" 6c04="" 6c06="" 6c08="" 6c0a="" 6c0d="" 6c0f="" 6c11="" 6c13="" 6c15="" 6c18="" 6c19="" 6c1b="" 6c1d="" 6c1f="" 6c20="" 6c22="" 6c24="" 6c26="" 6c28="" 6c29="" 6c2b="" 6c2d="" 6c2f="" 6c31="" 6c33="" 6c35="" 6c37="" 6c39="" 6c3b="" 6c3c="" 6c3e="" 6c40="" 6c42="" 6c44="" 6c46="" 6c48="" 6c4a="" 6c4c="" 6c4e="" 6c50="" 6c52="" 6c54="" 6c56="" 6c58="" 6c5a="" 6c5c="" 6c5d="" 6c5f="" 6c61="" 6c64="" 6c68="" 6c6a="" 6c6c="" 6c6f="" 6c71="" 6c74="" 6c76="" 6c78="" 6c79="" 6c7b="" 6c7d="" 6c80="" 6c82="" 6c84="" 6c87="" 6c8b="" 6c8d="" 6c90="" 6c92="" 6c94="" 6c96="" 6c97="" 6c9a="" 6c9d="" 6c="" 6ca1="" 6ca3="" 6ca5="" 6ca8="" 6caa="" 6cac="" 6cad="" 6caf="" 6cb2="" 6cb4="" 6cb5="" 6cb7="" 6cba="" 6cbc="" 6cbe="" 6cc0="" 6cc2="" 6cc5="" 6cc7="" 6cc9="" 6cca="" 6ccc="" 6ccd="" 6ccf="" 6cd1="" 6cd3="" 6cd5="" 6cd7="" 6cd8="" 6cd9="" 6cda="" 6cdc="" 6cdf="" 6ce0="" 6f38="" 6f39="" 70="" 7d="" 7f="" 80="" 81="" 84="" 86="" 88="" 89="" 8a="" 8b="" 8d="" 8e="" 96="" a0="" a6="" a7="" a:fill="" a="" abx="" ad="" add0="" add1="" add2="" add3="" add40h="" adda="" addb="" adr="" adx0="" adx1="" adx2="" adx3="" anda="" b1-="" b6="" b7="" b:cnt="" bcc="" beq="" bne="" bra="" bsr="" buf="" busy="" c6="" cb="" ckrs="" clr="" cluster="" cmd="" cmpa="" copy="" crch="" crcl="" cs:b0="L" d="" data="" decb="" df="" dir="" dirofs="" disp="" dpgno="" dspb1="" dspb2="" dspb3="" dspbin="" dspbuf="" e5="" ec="" ed="" equ="" exg="" f4="" f5="" f6="" f7="" f7cd="" f7f1="" f9="" fb="" fc="" fd9e="" fe="" ff3b="" ff77="" ff="" fill="" filop="" get="" getd1="" getdat="" inc="" incx4="" lbsr="" lda="" ldb="" ldd="" ldx="" ldy="" leay="" lsla="" lsra="" miso:b1="H(for" no="" nop="" of="" ora="" param="" pbdat="" pcrlf="" pia="" pshs="" puls="" rd1="" rd1sct="" rd2="" rd3="" read="" resdat="" response="" return="" rts="" save="" sct="" sd:2="" sdhc:4="" sdhc="" send="" setckh="" setckl="" setsno="" sndd1="" snddat="" snddt1="" src="" sta="" temp="" tfr="" to="" token="" trans="" trlop="" tst="" until="" wait="" wrdlop="" wrdskp="" wrf1="" wrf2="" wrf3="" wrtdir="" wrtfat="" wrtsd1="" wspfl0="" x40h="" y:dst="" y="">
<!---temp-->


私はこのカードを、FM-7用のプログラムを使い慣れたWindowsPC上のエディタで作成してFM-7に転送したり、逆に、FM-7上で動作しているプログラムをWindowsPCに保存したりするのに利用していますが、それなりに使えるツールではないかと感じています。
また、テストしてくださった知人のアイディアですが、SD上にフォルダがあってもFM-7では見えないのですが、逆にそれを利用して、フォルダ中にFM-7用のファイルを複数入れて(隠して)おき、必要な時にその中から必要なフィルをフォルダの外に出してFM-7で使用するという使い方も便利そうです。

使用法についての文章も修正しましたので、それらをまとめてOneDriveに上げておきます。