2023年3月25日土曜日

FM-7にRTCとSDを接続する試み(SDカード編 その2)

SDカード中のBASICプログラムファイルと機械語ファイルを読み込んで実行することができました

SDカードへの書き込みはまだ実現していませんが、とりあえず、読み込みはできるようになりました。

F-BASICのコマンド(FILES, LOAD, LOADM)でフロッピィディスクと同様にSDカードを扱えるのが理想なのでしょうが、1セクタのサイズが512バイトであることもあり実現するのは私には難しいようです。

とりあえず、SDカードを用いてWindowsPCからFM-7へファイルを移動させるツールとして使用する前提で、常駐ソフトではなくその都度起動してSDカードを読むという形の専用プログラムにしました。

使用法のイメージは下図のようです。


使用イメージ

通常使用しているFT245高速通信カードでは、ディスクイメージを丸ごとコピーするのですが、このSDカード使用の場合は特定のファイルを選択してFM-7に移すことができます。

プログラムの起動画面です


起動画面

メニュー項目は

1.指定したセクタのリード
2.SDカードのデータ取得・表示
3.SDカードの初期化
4.MBR(Master Boot Record)内容の表示
5.BPB(Boot Parameter Block)内容の表示
6.FAT(File Allocation Table)内容の表示
7.DIR(Directory)内容の表示
8.指定ファイルの読み込み
で、前回との違いは、
・セクタへの書き込みを省いた。
・ディレクトリの表示形式を変更したことと、全ページを表示できるようにした。
・ファイルの読み込みを画面表示ではなく、メモリに展開してF-BASICと連携した。
の3つです。

その様子を下に示します。
ファイルのロードは前回のような番号ではなく、ファイル名の入力で選択します。


ディレクトリ表示とファイルのロード


メモリにロードしたBASICのプログラムは、下画面のように普通に表示できて実行もできます。


ロードしたBASICファイルをリスト表示

ここには示しませんでしたが、機械語ファイルも指定したアドレスに読み込まれます。


現在までに実現できた機能をまとめると

1.SDカードとSDHCカードに対応している。

2.普通にWindows上でSDカードに書き込んだファイルが読み込める。

3.F-BASICのプログラムファイルと機械語ファイルが扱える。


制限事項は

1.FM-7で使用することを前提としているので、32KBを超えるような大きなファイルには対応していない。

2.ファイル名には拡張子をつけてはいけない。(拡張子はチェックしていない)

3.ファイル名に小文字は使えない。(大文字に変換されてしまう)

4.F-BASICのプログラムファイルは中間言語に変換されたもののみで、アスキーセーブされたファイルは扱えない。(テキストエリアに直接書き込んでいるため)

5.機械語ファイルはF-BASICのディスク保存形式であること。


制約事項も多々ありますが、とりあえず、Windows上に保存してあったBASICプログラムファイルや機械語ファイルを、SDカードを介してFM-7に持ち込むツールとして使用できるのではと考えています。


さらに実現したいこと

残る課題は、当然、FM-7上でSDカードにプログラムなどを書き込んで、それをWindows上で読み込むという機能を実現することです。これができれば完成といえます。

しかし、これはFATを書き換えるということになりますので、FMS(ファイルマネージメントシステム)が絡んできますし、プログラムサイズも既に3KB近くになっていますので、さらに大きくなるとどこに配置するかも問題になってきます。

以上、6809のアセンブラでSDカードからのファイルの読み込みまで実現できたという報告でした。なお、使用しているFM-7本体のルーチンはINCHA, OUTCHA, CSRONの3つのみです。

作成したプログラムを下に示しておきます。



SDHC9FM
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
0001        *
0002        *  SDHC9.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  <-- --="" 0014="" 10="" hv2="" io3="" lv2="" pa7="">  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  <-- --="" 0025="" 20="" hv2="" lv2="" miso="" pb7="">  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  $6D00 - 6EFF
0035        *
0036        *    Load data to F-BASIC '2023.03.23
0037        *    Add command          '2023.03.14
0038        *    Change use Port B    '2023.03.07
0039        *    Original version     '2022.06.11
0040        *         Copyright by Y.Yamamoto
0041        *
0042  6000      STTADR  EQU     $6000      
0043       
0044  FBB8      INCHA   EQU     $FBB8      
0045  FBBB      OUTCHA  EQU     $FBBB      
0046  FBF7      CSRON   EQU     $FBF7      
0047       
0048  6D00      RWBUF   EQU     STTADR+$0D00   
0049       
0050  FD9E      PBDAT   EQU     $FD9E      
0051  FD9F      PBCTL   EQU     PBDAT+1    
0052  0033      BASADRP EQU     $33         pointer of adrs for F-BASIC
0053  2000      TXTADR  EQU     $2000       for TEXT
0054       
0055  6000              ORG     STTADR     
0056       
0057  6000  20  58  START   BRA     MAIN       
0058  6002  01    VN      FCB     1          
0059  6003  00    SCTN0   FCB     0           top adrs of sct
0060  6004  00    SCTN1   FCB     0          
0061  6005  00    SCTN2   FCB     0          
0062  6006  00    SCTN3   FCB     0          
0063  6007  00    RESDAT  FCB     0           response data
0064  6008  00    SDHC    FCB     0           sd:0,sdhc:1
0065       
0066  6009  0000    SCTBPB  FDB     00          sct no of BPB(4bytes)
0067  600B  0000            FDB     00         
0068  600D  0000    SCTFAT  FDB     00          sct no of FAT#1(4bytes)
0069  600F  0000            FDB     00         
0070  6011  0000    SCTDIR  FDB     00          sct no of DIR(4bytes)
0071  6013  0000            FDB     00         
0072  6015  0000    SCTDSV  FDB     00          save sct no of DIR
0073  6017  0000            FDB     00         
0074  6019  0000    SCTCLT  FDB     00          sct no of top CLUSTER(4bytes)
0075  601B  0000            FDB     00          if SD:#2, SDHC:#3
0076  601D  00    SCTPCL  FCB     0           sct per cluster
0077  601E  FF    DIRENT  RMB     32         
0078  603E  FF    WMDY    RMB     3          
0079  6041  FF    WFSIZ   RMB     4          
0080  6045  FF    FILSIZ  RMB     2          
0081  6047  0000    CLSTH   FDB     00         
0082  6049  0000    CLSTL   FDB     00         
0083  604B  00    CNT     FCB     0          
0084  604C  00    CNTSV   FCB     0          
0085  604D  00    MCFLG   FCB     0           1:machine code, 0:else
0086  604E  00    DPGFLG  FCB     0           1:1st page of DIR, 0:else
0087  604F  FF    FNAME   RMB     9          
0088  6058  0000    WK1     FDB     00         
0089       
0090  605A      MAIN    EQU     *          
0091        *=====reset pia=====
0092        *portB:output
0093  605A  86  30          LDA     #$30       
0094  605C  B7  FD9F          STA     PBCTL       select ddra, cb2:0
0095  605F  86  FD          LDA     #$FD        pb0,7:out,pb1:in
0096  6061  B7  FD9E          STA     PBDAT       set output mode
0097  6064  86  34          LDA     #$34       
0098  6066  B7  FD9F          STA     PBCTL       select peripheral,cb2:0
0099        
0100        *for pia exist check
0101  6069  86  55          LDA     #$55        test data
0102  606B  B7  FD9E          STA     PBDAT      
0103  606E  B6  FD9E          LDA     PBDAT      
0104  6071  84  FD          ANDA    #$FD        pb1=0
0105  6073  81  55          CMPA    #$55       
0106  6075  27  07          BEQ     INIT       
0107  6077  8E  6A30          LDX     #MERR      
0108  607A  17  075F          LBSR    PSTRNG     
0109  607D  39            RTS           return to BASIC
0110       
0111  607E      INIT    EQU     *          
0112  607E  8D  59          BSR     SDINIT     
0113       
0114        ****************************************
0115        * MAIN MENU
0116        ****************************************
0117  6080      MENU    EQU     *          
0118  6080  8E  6976          LDX     #MSMENU1   
0119  6083  17  0756          LBSR    PSTRNG     
0120  6086  8E  69B6          LDX     #MSMENU2   
0121  6089  17  0750          LBSR    PSTRNG     
0122  608C  17  9B68          LBSR    CSRON       cursor on
0123       
0124  608F  BD  690B          JSR     INOUTC     
0125  6092  80  30          SUBA    #$30       
0126  6094  26  04          BNE     MEN1        0?
0127  6096  17  068E          LBSR    CRLF       
0128  6099  39            RTS           return to BASIC
0129       
0130  609A  4A    MEN1    DECA          1?
0131  609B  26  05          BNE     MEN2       
0132  609D  17  0279          LBSR    SDRD       
0133  60A0  20  DE          BRA     MENU       
0134  60A2  4A    MEN2    DECA          2?
0135  60A3  26  05          BNE     MEN3       
0136  60A5  17  01E3          LBSR    GETSD      
0137  60A8  20  D6          BRA     MENU       
0138  60AA  4A    MEN3    DECA          3?
0139  60AB  26  04          BNE     MEN4       
0140  60AD  8D  2A          BSR     SDINIT     
0141  60AF  20  CF          BRA     MENU       
0142  60B1  4A    MEN4    DECA          4?
0143  60B2  26  05          BNE     MEN5       
0144  60B4  17  0275          LBSR    DSPMBR     
0145  60B7  20  C7          BRA     MENU       
0146  60B9  4A    MEN5    DECA          5?
0147  60BA  26  05          BNE     MEN6       
0148  60BC  17  02C7          LBSR    DSPBPB     
0149  60BF  20  BF          BRA     MENU       
0150  60C1  4A    MEN6    DECA          6?
0151  60C2  26  05          BNE     MEN7       
0152  60C4  17  02D1          LBSR    DSPFAT     
0153  60C7  20  B7          BRA     MENU       
0154  60C9  4A    MEN7    DECA          7?
0155  60CA  26  05          BNE     MEN8       
0156  60CC  17  02DB          LBSR    DSPDIR     
0157  60CF  20  AF          BRA     MENU       
0158  60D1  4A    MEN8    DECA          8?
0159  60D2  26  AC          BNE     MENU       
0160  60D4  17  0398          LBSR    LDFILE     
0161  60D7  20  A7          BRA     MENU       
0162        *
0163        ****************************************
0164        * SD Initialize routine
0165        ****************************************
0166  60D9      SDINIT  EQU     *          
0167        *---------- start ----------
0168  60D9  8E  6A14          LDX     #MSINIT    
0169  60DC  17  06FD          LBSR    PSTRNG     
0170        * cs:1,di:1,sck>74ms
0171  60DF  86  FF          LDA     #$FF        mosi:b7=H,miso:b1=H(for PIA),cs:b0=H
0172  60E1  B7  FD9E          STA     PBDAT      
0173  60E4  C6  50          LDB     #80         80times
0174  60E6  17  0603  ISTT    LBSR    SETCKL     
0175  60E9  17  0609          LBSR    SETCKH     
0176  60EC  5A            DECB         
0177  60ED  26  F7          BNE     ISTT       
0178        *
0179        *---------- cmd 0 ----------
0180  60EF      SCMD0   EQU     *          
0181        * LDX #MCMD0
0182        * LBSR PSTRNG
0183        
0184  60EF  17  05FA          LBSR    SETCKL     
0185  60F2  C6  06          LDB     #6         
0186  60F4  8E  6912          LDX     #CMD0      
0187  60F7  A6  80  SC01    LDA     ,X+        
0188  60F9  17  057B          LBSR    SNDDAT     
0189  60FC  5A            DECB         
0190  60FD  26  F8          BNE     SC01       
0191        *get response
0192  60FF  5F            CLRB         
0193  6100      GR00         
0194  6100  5A            DECB         
0195  6101  1027  020D          LBEQ    SDERR      
0196  6105  17  058B          LBSR    GETDAT     
0197  6108  B6  6007          LDA     RESDAT     
0198        * LBSR DSPBIN disp response
0199  610B  81  01          CMPA    #$01       
0200  610D  26  F1          BNE     GR00       
0201        * LBSR CRLF
0202        *
0203        *---------- cmd 8 ----------
0204  610F      SCMD8   EQU     *          
0205        * LDX #MCMD8
0206        * LBSR PSTRNG
0207        
0208  610F  17  05DA          LBSR    SETCKL     
0209  6112  86  FF          LDA     #$FF        dummy cmd
0210  6114  17  0560          LBSR    SNDDAT     
0211  6117  C6  06          LDB     #6         
0212  6119  8E  692A          LDX     #CMD8      
0213  611C  A6  80  SC80    LDA     ,X+        
0214  611E  17  0556          LBSR    SNDDAT     
0215  6121  5A            DECB         
0216  6122  26  F8          BNE     SC80       
0217        *get response
0218  6124      GR80         
0219  6124  17  056C          LBSR    GETDAT     
0220  6127  B6  6007          LDA     RESDAT     
0221        
0222  612A  17  0566          LBSR    GETDAT     
0223  612D  B6  6007          LDA     RESDAT     
0224        * LBSR DSPBIN disp response
0225  6130  81  01          CMPA    #$01       
0226  6132  26  F0          BNE     GR80       
0227  6134  C6  04          LDB     #4         
0228  6136  17  055A  GR81    LBSR    GETDAT     
0229  6139  B6  6007          LDA     RESDAT     
0230        * LBSR DSPBIN disp response
0231  613C  5A            DECB         
0232  613D  26  F7          BNE     GR81       
0233        * LBSR CRLF
0234        *
0235        *---------- cmd 58 ----------
0236  613F      SCMD58  EQU     *          
0237        * LDX #MCMD58
0238        * LBSR PSTRNG
0239        
0240  613F  17  05AA          LBSR    SETCKL     
0241  6142  86  FF          LDA     #$FF        dummy cmd
0242  6144  17  0530          LBSR    SNDDAT     
0243  6147  C6  06          LDB     #6         
0244  6149  8E  6930          LDX     #CMD58     
0245  614C  A6  80  SC581   LDA     ,X+        
0246  614E  17  0526          LBSR    SNDDAT     
0247  6151  5A            DECB         
0248  6152  26  F8          BNE     SC581      
0249        *get response
0250  6154      GR580        
0251  6154  17  053C          LBSR    GETDAT     
0252  6157  B6  6007          LDA     RESDAT     
0253        * LBSR DSPBIN disp response
0254  615A  81  01          CMPA    #$01       
0255  615C  26  F6          BNE     GR580      
0256  615E  C6  04  GR581   LDB     #4         
0257  6160  17  0530  GR582   LBSR    GETDAT     
0258  6163  B6  6007          LDA     RESDAT     
0259        * LBSR DSPBIN disp response
0260  6166  5A            DECB         
0261  6167  26  F7          BNE     GR582      
0262  6169      RPT41   EQU     *          
0263        *---------- cmd 55 ----------
0264  6169      SCMD55  EQU     *          
0265        * LDX #MCMD55
0266        * LBSR PSTRNG
0267        
0268  6169  17  0580          LBSR    SETCKL     
0269  616C  86  FF          LDA     #$FF        dummy cmd
0270  616E  17  0506          LBSR    SNDDAT     
0271  6171  C6  06          LDB     #6         
0272  6173  8E  6936          LDX     #CMD55     
0273  6176  A6  80  SC551   LDA     ,X+        
0274  6178  17  04FC          LBSR    SNDDAT     
0275  617B  5A            DECB         
0276  617C  26  F8          BNE     SC551      
0277        *get response
0278        * CLRB
0279  617E      GR550        
0280        * DECB
0281        * BEQ SDERR
0282  617E  17  0512          LBSR    GETDAT     
0283  6181  B6  6007          LDA     RESDAT     
0284        * LBSR DSPBIN disp response
0285  6184  81  01          CMPA    #$01       
0286  6186  26  F6          BNE     GR550      
0287        
0288        * LBSR CRLF
0289        *---------- acmd 41 ----------
0290  6188      ASCMD41 EQU     *          
0291        * LDX #MCMD41
0292        * LBSR PSTRNG
0293        
0294  6188  17  0561          LBSR    SETCKL     
0295  618B  86  FF          LDA     #$FF        dummy cmd
0296  618D  17  04E7          LBSR    SNDDAT     
0297  6190  C6  06          LDB     #6         
0298  6192  8E  693C          LDX     #ACMD41    
0299  6195  A6  80  ASC411  LDA     ,X+        
0300  6197  17  04DD          LBSR    SNDDAT     
0301  619A  5A            DECB         
0302  619B  26  F8          BNE     ASC411     
0303        *get response
0304  619D      GR410        
0305  619D  17  04F3          LBSR    GETDAT     
0306  61A0  B6  6007          LDA     RESDAT     
0307        * LBSR DSPBIN disp response
0308  61A3  17  04ED          LBSR    GETDAT     
0309  61A6  B6  6007          LDA     RESDAT     
0310        * LBSR DSPBIN disp response
0311  61A9  81  00          CMPA    #$00       
0312  61AB  26  BC          BNE     RPT41      
0313        * LBSR CRLF
0314        
0315        *---------- second cmd 58 ----------
0316  61AD      SCMD258 EQU     *          
0317        * LDX #MCMD58
0318        * LBSR PSTRNG
0319        
0320  61AD  17  053C          LBSR    SETCKL     
0321  61B0  86  FF          LDA     #$FF        dummy cmd
0322  61B2  17  04C2          LBSR    SNDDAT     
0323  61B5  C6  06          LDB     #6         
0324  61B7  8E  6930          LDX     #CMD58     
0325  61BA  A6  80  SC2581  LDA     ,X+        
0326  61BC  17  04B8          LBSR    SNDDAT     
0327  61BF  5A            DECB         
0328  61C0  26  F8          BNE     SC2581     
0329        *get response
0330  61C2      GR2580       
0331  61C2  17  04CE          LBSR    GETDAT     
0332  61C5  B6  6007          LDA     RESDAT     
0333        * LBSR DSPBIN disp response
0334  61C8  81  00          CMPA    #$00       
0335  61CA  26  F6          BNE     GR2580     
0336  61CC  17  04C4          LBSR    GETDAT     
0337  61CF  B6  6007          LDA     RESDAT     
0338        * LBSR DSPBIN disp response
0339  61D2  48            LSLA         
0340  61D3  48            LSLA         
0341  61D4  24  03          BCC     GR2581     
0342  61D6  7C  6008          INC     SDHC        if sdhc then 1
0343  61D9  C6  03  GR2581  LDB     #3         
0344  61DB  17  04B5  GR2582  LBSR    GETDAT     
0345  61DE  B6  6007          LDA     RESDAT     
0346        * LBSR DSPBIN disp response
0347  61E1  5A            DECB         
0348  61E2  26  F7          BNE     GR2582     
0349        
0350  61E4  8E  69FA          LDX     #MSSD0     
0351  61E7  B6  6008          LDA     SDHC       
0352  61EA  27  03          BEQ     SD1        
0353  61EC  8E  6A06          LDX     #MSSD1     
0354  61EF  17  05EA  SD1     LBSR    PSTRNG     
0355        *----------
0356        *set sct no of BPB
0357  61F2  17  0155          LBSR    GETMBR     
0358  61F5  8E  6ECA          LDX     #RWBUF+446+8+4   
0359  61F8  108E  6009          LDY     #SCTBPB    
0360  61FC  C6  04          LDB     #4         
0361  61FE  A6  82  ILOP1   LDA     ,-X        
0362  6200  A7  A0          STA     ,Y+        
0363  6202  5A            DECB         
0364  6203  26  F9          BNE     ILOP1      
0365        
0366        *set sct no of FAT#1
0367  6205  17  0165          LBSR    GETBPB     
0368  6208  8E  6009          LDX     #SCTBPB    
0369  620B  108E  600D          LDY     #SCTFAT    
0370  620F  C6  04          LDB     #4         
0371  6211  A6  80  ILOP2   LDA     ,X+        
0372  6213  A7  A0          STA     ,Y+        
0373  6215  5A            DECB         
0374  6216  26  F9          BNE     ILOP2      
0375        
0376  6218  8E  600D          LDX     #SCTFAT    
0377  621B  108E  6D0E          LDY     #RWBUF+$0E    for SD & SDHC
0378  621F  17  0589          LBSR    ADD42      
0379        
0380        *set sct no of DIR
0381  6222  8E  600D          LDX     #SCTFAT    
0382  6225  108E  6011          LDY     #SCTDIR    
0383  6229  C6  04          LDB     #4         
0384  622B  A6  80  ILOP3   LDA     ,X+        
0385  622D  A7  A0          STA     ,Y+        
0386  622F  5A            DECB         
0387  6230  26  F9          BNE     ILOP3      
0388        
0389  6232  8E  6D16          LDX     #RWBUF+$16    for SD
0390  6235  7D  6008          TST     SDHC       
0391  6238  27  03          BEQ     SKP1       
0392  623A  C6  0E          LDB     #$24-$16   
0393  623C  3A            ABX           for SDHC
0394  623D  1F  12  SKP1    TFR     X,Y        
0395  623F  8E  6011          LDX     #SCTDIR    
0396  6242  17  0566          LBSR    ADD42      
0397  6245  17  0563          LBSR    ADD42       skip for FAT#2
0398        
0399        *save no of directory
0400  6248  8E  6011          LDX     #SCTDIR    
0401  624B  108E  6015          LDY     #SCTDSV    
0402  624F  C6  04          LDB     #4         
0403  6251  A6  80  SCPY1   LDA     ,X+        
0404  6253  A7  A0          STA     ,Y+        
0405  6255  5A            DECB         
0406  6256  26  F9          BNE     SCPY1      
0407       
0408        *set sct per cluster
0409  6258  8E  6D0D          LDX     #RWBUF+$0D   
0410  625B  A6  84          LDA     ,X         
0411  625D  B7  601D          STA     SCTPCL     
0412        
0413        *set sct no of CLUSTER#2
0414  6260  8E  6011          LDX     #SCTDIR    
0415  6263  108E  6019          LDY     #SCTCLT    
0416  6267  C6  04          LDB     #4         
0417  6269  A6  80  ILOP4   LDA     ,X+        
0418  626B  A7  A0          STA     ,Y+        
0419  626D  5A            DECB         
0420  626E  26  F9          BNE     ILOP4      
0421        
0422  6270  108E  605A          LDY     #WK1+2     
0423  6274  86  00          LDA     #$00       
0424  6276  A7  A2          STA     ,-Y        
0425  6278  86  20          LDA     #$20        for SD
0426  627A  7D  6008          TST     SDHC       
0427  627D  27  03          BEQ     SKP2       
0428  627F  B6  601D          LDA     SCTPCL      for SDHC
0429  6282  A7  A2  SKP2    STA     ,-Y        
0430  6284  8E  6019          LDX     #SCTCLT    
0431  6287  17  0521          LBSR    ADD42      
0432        *----------
0433  628A  39            RTS          
0434       
0435        ****************************************
0436        * GET SD DATA ROUTINE
0437        * use CMD9
0438        ****************************************
0439  628B      GETSD   EQU     *          
0440  628B  17  0499          LBSR    CRLF       
0441  628E  17  045B          LBSR    SETCKL     
0442  6291  C6  06          LDB     #6         
0443  6293  8E  6942          LDX     #CMD9      
0444  6296  A6  80  SC91    LDA     ,X+        
0445  6298  17  03DC          LBSR    SNDDAT     
0446  629B  5A            DECB         
0447  629C  26  F8          BNE     SC91       
0448        * LBSR CRLF
0449        *get response
0450  629E      GR90         
0451  629E  17  03F2          LBSR    GETDAT     
0452  62A1  B6  6007          LDA     RESDAT     
0453        * LBSR DSPBIN disp response
0454  62A4  81  00          CMPA    #$00       
0455  62A6  26  F6          BNE     GR90       
0456        
0457        * LBSR CRLF
0458  62A8  17  047C          LBSR    CRLF       
0459  62AB  C6  14          LDB     #16+1+2+1   fe,crcH,crcL,ff
0460  62AD  17  03E3  GR91    LBSR    GETDAT     
0461  62B0  B6  6007          LDA     RESDAT     
0462  62B3  17  0448          LBSR    DSPBIN      disp response
0463  62B6  5A            DECB         
0464  62B7  26  F4          BNE     GR91       
0465  62B9  17  046B          LBSR    CRLF       
0466       
0467        *disp offset of MBR,FAT#1,DIR,CLUSTER#2
0468  62BC  8E  6A56          LDX     #MSOFS     
0469  62BF  17  051A          LBSR    PSTRNG     
0470  62C2  8E  6A66          LDX     #MSBPB     
0471  62C5  17  0514          LBSR    PSTRNG     
0472  62C8  8E  6009          LDX     #SCTBPB    
0473  62CB  C6  04          LDB     #4         
0474  62CD  A6  80  SCLOP1  LDA     ,X+        
0475  62CF  17  042C          LBSR    DSPBIN     
0476  62D2  5A            DECB         
0477  62D3  26  F8          BNE     SCLOP1     
0478       
0479  62D5  8E  6A6F          LDX     #MSFAT     
0480  62D8  17  0501          LBSR    PSTRNG     
0481  62DB  8E  600D          LDX     #SCTFAT    
0482  62DE  C6  04          LDB     #4         
0483  62E0  A6  80  SCLOP2  LDA     ,X+        
0484  62E2  17  0419          LBSR    DSPBIN     
0485  62E5  5A            DECB         
0486  62E6  26  F8          BNE     SCLOP2     
0487       
0488  62E8  8E  6A78          LDX     #MSDIR     
0489  62EB  17  04EE          LBSR    PSTRNG     
0490  62EE  8E  6011          LDX     #SCTDIR    
0491  62F1  C6  04          LDB     #4         
0492  62F3  A6  80  SCLOP3  LDA     ,X+        
0493  62F5  17  0406          LBSR    DSPBIN     
0494  62F8  5A            DECB         
0495  62F9  26  F8          BNE     SCLOP3     
0496       
0497  62FB  8E  6A81          LDX     #MSCL2     
0498  62FE  17  04DB          LBSR    PSTRNG     
0499  6301  8E  6019          LDX     #SCTCLT    
0500  6304  C6  04          LDB     #4         
0501  6306  A6  80  SCLOP4  LDA     ,X+        
0502  6308  17  03F3          LBSR    DSPBIN     
0503  630B  5A            DECB         
0504  630C  26  F8          BNE     SCLOP4     
0505  630E  17  0416          LBSR    CRLF       
0506  6311  39            RTS          
0507       
0508        *
0509  6312      SDERR   EQU     *          
0510  6312  8E  6A30          LDX     #MERR      
0511  6315  17  04C4          LBSR    PSTRNG     
0512  6318      OKEND        
0513  6318  39            RTS           return to BASIC
0514        *
0515        ****************************************
0516        * READ ROUTINE
0517        * use CMD17
0518        * set sctno to $6005,6006
0519        * read data set to $6800-69FF
0520        ****************************************
0521  6319      SDRD    EQU     *          
0522  6319  17  040B          LBSR    CRLF       
0523  631C  17  038E          LBSR    INSCT      
0524  631F  17  02FC          LBSR    RD1SCT      read 1 sct
0525       
0526        *disp data
0527  6322  17  0402          LBSR    CRLF       
0528  6325  17  0331          LBSR    DSPBUF     
0529  6328  17  03FC          LBSR    CRLF       
0530  632B  39            RTS          
0531       
0532        ****************************************
0533        * Read MBR & Disp parameter of BPB
0534        ****************************************
0535  632C      DSPMBR  EQU     *          
0536  632C  17  03F8          LBSR    CRLF       
0537  632F  8D  19          BSR     GETMBR     
0538       
0539        *disp BPB
0540  6331  17  03F3          LBSR    CRLF       
0541  6334  8E  6EBE          LDX     #RWBUF+446   
0542  6337  C6  10  GET1    LDB     #16        
0543  6339  A6  80  GET2    LDA     ,X+        
0544  633B  17  03C0          LBSR    DSPBIN      disp data
0545  633E  5A            DECB         
0546  633F  26  F8          BNE     GET2       
0547  6341  17  03E3          LBSR    CRLF       
0548  6344  8C  6EFE          CMPX    #RWBUF+510    446+16*4
0549  6347  25  EE          BLO     GET1       
0550  6349  39            RTS          
0551       
0552        *----------------------------------------
0553        *read MBR
0554  634A      GETMBR  EQU     *          
0555  634A  8E  6003          LDX     #SCTN0     
0556  634D  C6  04          LDB     #4         
0557  634F  4F            CLRA         
0558  6350  A7  80  GPLOP   STA     ,X+        
0559  6352  5A            DECB         
0560  6353  26  FB          BNE     GPLOP      
0561  6355  17  035D          LBSR    SETSCT     
0562        
0563  6358  17  02C3          LBSR    RD1SCT      read 1 sct
0564  635B  39            RTS          
0565       
0566        *----------------------------------------
0567        *set sector no to SCTN0
0568        *from X,X+1,X+2,X+3 to SCTN0-SCTN3
0569  635C      SETSNO  EQU     *          
0570  635C  108E  6003          LDY     #SCTN0     
0571  6360  C6  04          LDB     #4         
0572  6362  A6  80  SELOP   LDA     ,X+        
0573  6364  A7  A0          STA     ,Y+        
0574  6366  5A            DECB         
0575  6367  26  F9          BNE     SELOP      
0576  6369  17  0349          LBSR    SETSCT     
0577  636C  39            RTS          
0578       
0579        *----------------------------------------
0580        *read BPB
0581  636D      GETBPB  EQU     *          
0582  636D  8D  DB          BSR     GETMBR     
0583        *set sct no of BPB
0584  636F  8E  6ECA          LDX     #RWBUF+446+8+4   
0585  6372  108E  6003          LDY     #SCTN0     
0586  6376  C6  04          LDB     #4         
0587  6378  A6  82  GPLOP2  LDA     ,-X        
0588  637A  A7  A0          STA     ,Y+        
0589  637C  5A            DECB         
0590  637D  26  F9          BNE     GPLOP2     
0591  637F  17  0333          LBSR    SETSCT     
0592        
0593  6382  17  0299          LBSR    RD1SCT      read 1 sct
0594  6385  39            RTS          
0595       
0596        ****************************************
0597        * Disp BPB(Bios Parameter Block)
0598        ****************************************
0599  6386      DSPBPB  EQU     *          
0600  6386  8E  6009          LDX     #SCTBPB    
0601  6389  8D  D1          BSR     SETSNO     
0602  638B  17  0290          LBSR    RD1SCT      read 1 sct
0603        
0604        *disp BPB
0605  638E  17  0396          LBSR    CRLF       
0606  6391  17  02C5          LBSR    DSPBUF     
0607  6394  17  0390          LBSR    CRLF       
0608  6397  39            RTS          
0609       
0610        ****************************************
0611        * Disp FAT#1
0612        ****************************************
0613  6398      DSPFAT  EQU     *          
0614  6398  8E  600D          LDX     #SCTFAT    
0615  639B  8D  BF          BSR     SETSNO     
0616  639D  17  027E          LBSR    RD1SCT      read 1 sct
0617        
0618        *disp FAT
0619  63A0  17  0384          LBSR    CRLF       
0620  63A3  17  02B3          LBSR    DSPBUF     
0621  63A6  17  037E          LBSR    CRLF       
0622  63A9  39            RTS          
0623       
0624        ****************************************
0625        * Disp Directory
0626        ****************************************
0627  63AA      DSPDIR  EQU     *          
0628  63AA  7C  604E          INC     DPGFLG      set 1st page of DIR flag
0629        *return no of DIR
0630  63AD  108E  6019          LDY     #SCTDSV+4  
0631  63B1  8E  6015          LDX     #SCTDIR+4  
0632  63B4  C6  04          LDB     #4         
0633  63B6  A6  A2  DRET0   LDA     ,-Y        
0634  63B8  A7  82          STA     ,-X        
0635  63BA  5A            DECB         
0636  63BB  26  F9          BNE     DRET0      
0637        
0638  63BD  8E  6011  DSPFL0  LDX     #SCTDIR    
0639  63C0  8D  9A          BSR     SETSNO     
0640  63C2  17  0259          LBSR    RD1SCT      read 1 sct
0641        
0642        *disp FILE name
0643  63C5  17  035F          LBSR    CRLF       
0644  63C8  17  035C          LBSR    CRLF       
0645  63CB  8E  6D00          LDX     #RWBUF     
0646  63CE  7D  604E          TST     DPGFLG      1st page of DIR?
0647  63D1  27  03          BEQ     DSKP1      
0648  63D3  30  88 60         LEAX    96,X        skip top data
0649  63D6      DSKP1        
0650       
0651  63D6  A6  84  DSPFL1  LDA     ,X         
0652  63D8  1027  008F          LBEQ    DSPEND      if top of filename is 0 then end
0653  63DC  81  E5          CMPA    #$E5        delete mark?
0654  63DE  27  0A          BEQ     DSPCKE     
0655  63E0  A6  0B          LDA     11,X        attr
0656  63E2  81  0F          CMPA    #$0F        long file name?
0657  63E4  27  04          BEQ     DSPCKE     
0658  63E6  81  10          CMPA    #$10        directory?
0659  63E8  26  0A          BNE     DSPFL2     
0660  63EA  30  88 20 DSPCKE  LEAX    32,X        next directory entry
0661  63ED  8C  6EE0          CMPX    #RWBUF+512-32  
0662  63F0  24  60          BHS     DSPFL5     
0663  63F2  20  E2          BRA     DSPFL1     
0664        
0665  63F4      DSPFL2       
0666        *disp filename
0667  63F4  C6  08          LDB     #8         
0668  63F6  A6  80  DSPFL3  LDA     ,X+        
0669  63F8  BD  FBBB          JSR     OUTCHA     
0670  63FB  5A            DECB         
0671  63FC  26  F8          BNE     DSPFL3     
0672        *disp ext
0673  63FE  86  2E          LDA     #'.        
0674  6400  BD  FBBB          JSR     OUTCHA     
0675  6403  C6  03          LDB     #3         
0676  6405  A6  80  DSPFL4  LDA     ,X+        
0677  6407  BD  FBBB          JSR     OUTCHA     
0678  640A  5A            DECB         
0679  640B  26  F8          BNE     DSPFL4     
0680  640D  86  20          LDA     #'         
0681  640F  BD  FBBB          JSR     OUTCHA     
0682  6412  BD  FBBB          JSR     OUTCHA     
0683       
0684        *get FILE time data
0685  6415  30  07          LEAX    7,X        
0686  6417  EC  81          LDD     ,X++       
0687  6419  FD  6058          STD     WK1        
0688       
0689        *get CLUSTER(H) data
0690  641C  EC  81          LDD     ,X++       
0691  641E  1E  89          EXG     A,B        
0692  6420  FD  6047          STD     CLSTH      
0693  6423  30  04          LEAX    4,X        
0694  6425  EC  81          LDD     ,X++       
0695  6427  1E  89          EXG     A,B        
0696  6429  FD  6049          STD     CLSTL      
0697        
0698        *get FILE size data
0699  642C  108E  6045          LDY     #WFSIZ+4   
0700  6430  C6  04          LDB     #4         
0701  6432  A6  80  DSPC1   LDA     ,X+        
0702  6434  A7  A2          STA     ,-Y        
0703  6436  5A            DECB         
0704  6437  26  F9          BNE     DSPC1      
0705       
0706        *disp FILE size
0707  6439  86  20          LDA     #'         
0708  643B  BD  FBBB          JSR     OUTCHA     
0709  643E  17  040C          LBSR    DSPSIZ      disp FILE size
0710       
0711        *disp FILE time
0712  6441  FC  6058          LDD     WK1        
0713  6444  17  03A5          LBSR    DSPYMD      disp MM-DD-YY
0714       
0715        *disp CLUSTER(H,L)
0716  6447  17  0462          LBSR    DSPCLS     
0717  644A  17  02DA          LBSR    CRLF       
0718        
0719  644D  8C  6F00          CMPX    #RWBUF+512   
0720  6450  25  84          BLO     DSPFL1     
0721  6452  8E  6011  DSPFL5  LDX     #SCTDIR    
0722  6455  17  0192          LBSR    INCX4       sct no +1
0723  6458  7F  604E          CLR     DPGFLG      clear 1st page of DIR
0724  645B  8E  6AC1          LDX     #MSNXTP    
0725  645E  17  037B          LBSR    PSTRNG     
0726  6461  BD  690B          JSR     INOUTC     
0727  6464  81  20          CMPA    #'         
0728  6466  26  03          BNE     DSPEND     
0729  6468  16  FF52          LBRA    DSPFL0     
0730  646B  17  02B9  DSPEND  LBSR    CRLF       
0731  646E  39            RTS          
0732       
0733        ****************************************
0734        * Load FILE
0735        ****************************************
0736  646F      LDFILE  EQU     *          
0737        * LBSR DSPDIR
0738  646F  7C  604E          INC     DPGFLG      set 1st page of DIR flag
0739        *return no of DIR
0740  6472  108E  6019          LDY     #SCTDSV+4  
0741  6476  8E  6015          LDX     #SCTDIR+4  
0742  6479  C6  04          LDB     #4         
0743  647B  A6  A2  DRET1   LDA     ,-Y        
0744  647D  A7  82          STA     ,-X        
0745  647F  5A            DECB         
0746  6480  26  F9          BNE     DRET1      
0747        
0748  6482  8E  6A91          LDX     #MSINFN    
0749  6485  17  0354          LBSR    PSTRNG     
0750  6488  17  0467          LBSR    FNMIN      
0751        
0752  648B  8E  6011  LDFL0   LDX     #SCTDIR    
0753  648E  17  FECB          LBSR    SETSNO     
0754  6491  17  018A          LBSR    RD1SCT      read 1 sct
0755       
0756  6494  8E  6D00          LDX     #RWBUF     
0757  6497  7D  604E          TST     DPGFLG      1st page of DIR?
0758  649A  27  03          BEQ     LDFL1      
0759  649C  30  88 60         LEAX    96,X        skip top data
0760       
0761  649F  A6  84  LDFL1   LDA     ,X         
0762  64A1  1027  00FA          LBEQ    LDNEND      if top of filename is 0 then end
0763  64A5  81  E5          CMPA    #$E5        delete mark?
0764  64A7  26  0A          BNE     LD1        
0765  64A9  30  88 20         LEAX    32,X        next directory entry
0766  64AC  8C  6F00          CMPX    #RWBUF+512    over buf?
0767  64AF  24  0F          BHS     LDFL5      
0768  64B1  20  EC          BRA     LDFL1      
0769       
0770        *check file name
0771  64B3      LD1          
0772  64B3  17  041B          LBSR    CMPFN       C=1:match
0773  64B6  25  13          BCS     LD2        
0774  64B8  30  88 20         LEAX    32,X       
0775  64BB  8C  6F00          CMPX    #RWBUF+512   
0776  64BE  25  DF          BLO     LDFL1      
0777        
0778  64C0      LDFL5        
0779  64C0  8E  6011          LDX     #SCTDIR    
0780  64C3  17  0124          LBSR    INCX4       sct no +1
0781  64C6  7F  604E          CLR     DPGFLG      clear 1st page of DIR
0782  64C9  20  C0          BRA     LDFL0      
0783        
0784        *hit file, get dirctory entry
0785  64CB  C6  20  LD2     LDB     #32        
0786  64CD  108E  601E          LDY     #DIRENT    
0787  64D1  A6  80  DCPY    LDA     ,X+        
0788  64D3  A7  A0          STA     ,Y+        
0789  64D5  5A            DECB         
0790  64D6  26  F9          BNE     DCPY       
0791  64D8  8E  601E          LDX     #DIRENT    
0792        
0793        *get cluster no
0794  64DB  EC  88 14         LDD     $14,X      
0795  64DE  1E  89          EXG     A,B        
0796  64E0  FD  6047          STD     CLSTH       high cluster no
0797  64E3  EC  88 1A         LDD     $1A,X      
0798  64E6  1E  89          EXG     A,B        
0799  64E8  FD  6049          STD     CLSTL       low cluster no
0800        *sub start cluster no (SD:2,SDHC:3)
0801  64EB  83  0002          SUBD    #2         
0802  64EE  7D  6008          TST     SDHC        SD:0,SDHC:1
0803  64F1  27  03          BEQ     LD3        
0804  64F3  83  0001          SUBD    #1          D:cluster no (start 0)
0805        
0806  64F6  34  36  LD3     PSHS    A,B,X,Y    
0807  64F8  8E  6019          LDX     #SCTCLT    
0808  64FB  108E  6058          LDY     #WK1       
0809  64FF  C6  04          LDB     #4         
0810  6501  A6  80  LD4     LDA     ,X+        
0811  6503  A7  A0          STA     ,Y+        
0812  6505  5A            DECB         
0813  6506  26  F9          BNE     LD4        
0814  6508  35  36          PULS    A,B,X,Y    
0815       
0816        *(B)x40h
0817  650A  34  30          PSHS    X,Y        
0818  650C  8E  6058          LDX     #WK1       
0819  650F  17  00E7          LBSR    ADD40H     
0820  6512  35  30          PULS    X,Y        
0821        
0822        *get file size
0823  6514  34  30          PSHS    X,Y        
0824  6516  30  88 20         LEAX    32,X       
0825  6519  108E  6041          LDY     #WFSIZ     
0826  651D  C6  04          LDB     #4         
0827  651F  A6  82  LD41    LDA     ,-X        
0828  6521  A7  A0          STA     ,Y+        
0829  6523  5A            DECB         
0830  6524  26  F9          BNE     LD41       
0831  6526  35  30          PULS    X,Y        
0832        
0833  6528  EC  88 1D         LDD     $1D,X       upper of file size
0834  652B  1E  89          EXG     A,B        
0835  652D  44            LSRA          wfsiz/$200+1
0836  652E  56            RORB         
0837  652F  C3  0001          ADDD    #1         
0838        
0839  6532  C1  40          CMPB    #$40        40h page?
0840  6534  23  02          BLS     LD5        
0841  6536  C6  40          LDB     #$40       
0842  6538  F7  604B  LD5     STB     CNT         sct counter
0843  653B  F7  604C          STB     CNTSV      
0844        
0845        *set start sct no
0846  653E      LD6          
0847  653E  34  30          PSHS    X,Y        
0848  6540  8E  6058          LDX     #WK1       
0849  6543  108E  6003          LDY     #SCTN0     
0850  6547  C6  04          LDB     #4         
0851  6549  A6  80  LD7     LDA     ,X+        
0852  654B  A7  A0          STA     ,Y+        
0853  654D  5A            DECB         
0854  654E  26  F9          BNE     LD7        
0855  6550  35  30          PULS    X,Y        
0856        
0857  6552  17  0160          LBSR    SETSCT     
0858  6555  17  00C6          LBSR    RD1SCT      read 1 file data
0859        
0860  6558  7F  604D          CLR     MCFLG       set not machine code
0861  655B  B6  604C          LDA     CNTSV      
0862  655E  B1  604B          CMPA    CNT         top sector read?
0863  6561  26  1B          BNE     LD8        
0864        
0865        *at top sector, ini set
0866        *offset 00 data is
0867        *  $00    :machine code (MCFLG=0)
0868        *  $FF,$FE:BASIC PROGRAM (binary save) (MCFLG=$FF,$FE)
0869        *  else   :general text (MCFLG=1)
0870  6563  10BE  6043          LDY     WFSIZ+2    
0871  6567  10BF  6045          STY     FILSIZ      set file size
0872        
0873  656B  8E  6D00          LDX     #RWBUF     
0874  656E  A6  84          LDA     ,X          00?(machine code?)
0875  6570  B7  604D          STA     MCFLG      
0876  6573  26  09          BNE     LD8        
0877        *at machine code, read header
0878        * INC MCFLG set machine code
0879  6575  10AE  01          LDY     1,X         get file size
0880  6578  10BF  6045          STY     FILSIZ     
0881  657C  EE  03          LDU     3,X         get store addr
0882        
0883  657E  DE  33  LD8     LDU     BASADRP     get text buffer adr
0884  6580  4D            TSTA         
0885  6581  2B  03          BMI     LD9         $FFor$FE (basic code?)
0886  6583  CE  2000          LDU     #TXTADR     (else)
0887  6586      LD9          
0888  6586  8D  1F          BSR     MEMSET     
0889       
0890  6588  8E  6058          LDX     #WK1       
0891  658B  8D  5D          BSR     INCX4       sct no +1
0892  658D  7F  604E          CLR     DPGFLG      clear 1st page of DIR
0893  6590  7A  604B          DEC     CNT        
0894  6593  26  A9          BNE     LD6        
0895        
0896  6595  8E  6AA7  LDEND   LDX     #MSLDED    
0897  6598  17  0241          LBSR    PSTRNG     
0898  659B  17  0189  LDE1    LBSR    CRLF       
0899  659E  39            RTS          
0900  659F  8E  6AB3  LDNEND  LDX     #MSNOFL    
0901  65A2  17  0237          LBSR    PSTRNG     
0902  65A5  20  F4          BRA     LDE1       
0903       
0904        *
0905        *data to memory
0906        *U:memory adr
0907       
0908  65A7      MEMSET  EQU     *          
0909  65A7  34  30          PSHS    X,Y        
0910  65A9  8E  6D00          LDX     #RWBUF     
0911  65AC  B6  604D          LDA     MCFLG       0,1,$FF($FE)
0912  65AF  27  07          BEQ     MS1        
0913  65B1  2B  12          BMI     MS2        
0914        *text file
0915  65B3  CE  2000          LDU     #TXTADR     (else)
0916  65B6  20  1B          BRA     MSLOP0     
0917        *machine code
0918  65B8      MS1           
0919  65B8  10AE  01          LDY     1,X         get file size
0920  65BB  10BF  6045          STY     FILSIZ     
0921  65BF  EE  03          LDU     3,X         get store addr
0922  65C1  30  05          LEAX    5,X         skip header
0923  65C3  20  0E          BRA     MSLOP0     
0924        *basic program(binary save)
0925  65C5      MS2           
0926  65C5  30  03          LEAX    3,X         skip 3 $FFs
0927  65C7  10BE  6045          LDY     FILSIZ     
0928  65CB  31  3D          LEAY    -3,Y       
0929  65CD  10BF  6045          STY     FILSIZ     
0930  65D1  DE  33          LDU     BASADRP     get text buffer adrs
0931        
0932  65D3  10BE  6045  MSLOP0  LDY     FILSIZ     
0933  65D7  A6  80  MSLOP   LDA     ,X+        
0934  65D9  A7  C0          STA     ,U+        
0935  65DB  31  3F          LEAY    -1,Y       
0936  65DD  27  05          BEQ     MS3        
0937  65DF  8C  6F00          CMPX    #RWBUF+512   
0938  65E2  25  F3          BLO     MSLOP      
0939  65E4  10BF  6045  MS3     STY     FILSIZ     
0940  65E8  35  B0          PULS    X,Y,PC     
0941       
0942        *--------------------
0943        *(X)..(X+3)+1
0944  65EA      INCX4   EQU     *          
0945  65EA  6C  03  ADX0    INC     3,X        
0946  65EC  24  02          BCC     ADX1       
0947  65EE  6C  02          INC     2,X        
0948  65F0  24  02  ADX1    BCC     ADX2       
0949  65F2  6C  01          INC     1,X        
0950  65F4  24  02  ADX2    BCC     ADX3       
0951  65F6  6C  84          INC     ,X         
0952  65F8  39    ADX3    RTS          
0953        *
0954        *(X)..(X+3)+(B)x40h
0955  65F9      ADD40H  EQU     *          
0956  65F9  34  06          PSHS    A,B        
0957  65FB  A6  03  ADD0    LDA     3,X        
0958  65FD  8B  40          ADDA    #$40       
0959  65FF  A7  03          STA     3,X        
0960  6601  24  06          BCC     ADD1       
0961  6603  A6  02          LDA     2,X        
0962  6605  8B  01          ADDA    #1         
0963  6607  A7  02          STA     2,X        
0964  6609  24  06  ADD1    BCC     ADD2       
0965  660B  A6  01          LDA     1,X        
0966  660D  8B  01          ADDA    #1         
0967  660F  A7  01          STA     1,X        
0968  6611  24  06  ADD2    BCC     ADD3       
0969  6613  A6  84          LDA     ,X         
0970  6615  8B  01          ADDA    #1         
0971  6617  A7  84          STA     ,X         
0972  6619  5A    ADD3    DECB         
0973  661A  26  DF          BNE     ADD0       
0974  661C  35  86          PULS    A,B,PC     
0975       
0976        *
0977        *------------------------------
0978        *read 1 sct
0979        *------------------------------
0980  661E      RD1SCT  EQU     *          
0981        *copy sct no to cmd param
0982  661E  8E  6003          LDX     #SCTN0     
0983  6621  108E  691F          LDY     #CMD17+1   
0984  6625  C6  04          LDB     #4         
0985  6627  A6  80  CPY1    LDA     ,X+        
0986  6629  A7  A0          STA     ,Y+        
0987  662B  5A            DECB         
0988  662C  26  F9          BNE     CPY1       
0989        *send cmd
0990  662E  17  00BB          LBSR    SETCKL     
0991  6631  C6  06          LDB     #6         
0992  6633  8E  691E          LDX     #CMD17     
0993  6636  A6  80  RD1     LDA     ,X+        
0994  6638  8D  3D          BSR     SNDDAT     
0995  663A  5A            DECB         
0996  663B  26  F9          BNE     RD1        
0997        *get response
0998  663D      RD2          
0999  663D  8D  54          BSR     GETDAT     
1000  663F  B6  6007          LDA     RESDAT     
1001  6642  81  FE          CMPA    #$FE        token?
1002  6644  26  F7          BNE     RD2        
1003       
1004        *get data
1005        * LBSR CRLF
1006  6646  8E  6D00          LDX     #RWBUF      <-temp -1="" 0094="" 00b3="" 00cb="" 0200="" 02="" 06="" 08="" 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="" 108e="" 12="" 17="" 20="" 26="" 27="" 31="" 34="" 35="" 39="" 3f="" 44="" 48="" 53="" 57="" 5a="" 6007="" 63="" 6649="" 664d="" 664f="" 6652="" 6654="" 6656="" 6658="" 6659="" 665c="" 665f="" 6663="" 6665="" 6667="" 666a="" 666c="" 666e="" 666f="" 6671="" 6674="" 6676="" 6677="" 6679="" 667c="" 667e="" 6680="" 6682="" 6684="" 6687="" 6689="" 668b="" 668c="" 668e="" 668f="" 6691="" 6693="" 6695="" 6697="" 6699="" 669a="" 669b="" 669c="" 669e="" 66a1="" 66a2="" 67="" 6d00="" 7f="" 80="" 84="" 86="" 8a="" 8d="" 8e="" a6="" a7="" a="" anda="" b1-="" b6="" b7="" beq="" bne="" bra="" bsr="" buf="" c6="" clr="" crlf="" cs:b0="L" data="" decb="" disp="" dspb1="" dspb2="" dspb3="" dspbin="" dspbuf="" ed="" equ="" f4="" f5="" fc="" fd9e="" get="" getd1="" getdat="" lbsr="" lda="" ldb="" ldx="" ldy="" leay="" lsla="" lsra="" miso:b1="H(for" nop="" ora="" pbdat="" pia="" pshs="" puls="" rd3="" resdat="" response="" rts="" save="" send="" setckh="" setckl="" sndd1="" snddat="" sta="" temp="">C
1064  66A3  79  6007          ROL     RESDAT      C->b0
1065  66A6  5A            DECB         
1066  66A7  26  EE          BNE     GETD1      
1067  66A9  8D  41          BSR     SETCKL     
1068  66AB  35  86          PULS    A,B,PC     
1069        *
1070        *------------------------------
1071        *input SCT No
1072  66AD      INSCT   EQU     *          
1073  66AD  8E  69E6          LDX     #MSSCT     
1074  66B0  17  0129          LBSR    PSTRNG     
1075  66B3  8D  7D          BSR     GET8CH      get 8chr, convert 4bin
1076        
1077  66B5      SETSCT  EQU     *          
1078  66B5  34  32          PSHS    A,X,Y      
1079  66B7  7D  6008          TST     SDHC       
1080  66BA  26  1E          BNE     CALCHC     
1081        *SD card
1082  66BC  C6  03          LDB     #3         
1083  66BE  8E  6004          LDX     #SCTN1     
1084  66C1  108E  6003          LDY     #SCTN0     
1085  66C5  A6  80  SFT1    LDA     ,X+        
1086  66C7  A7  A0          STA     ,Y+        
1087  66C9  5A            DECB         
1088  66CA  26  F9          BNE     SFT1       
1089  66CC  7F  6006          CLR     SCTN3      
1090        *calc top adrs of sct
1091  66CF      CALCSD  EQU     *          
1092  66CF  78  6006          LSL     SCTN3      
1093  66D2  79  6005          ROL     SCTN2      
1094  66D5  79  6004          ROL     SCTN1      
1095  66D8  35  B2          PULS    A,X,Y,PC   
1096       
1097        *SDHC card
1098        *calc top adrs of sct
1099  66DA      CALCHC  EQU     *          
1100  66DA  8E  6003          LDX     #SCTN0     
1101  66DD  108E  691F          LDY     #CMD17+1   
1102  66E1  C6  04          LDB     #4         
1103  66E3  A6  80  CALCH1  LDA     ,X+        
1104  66E5  A7  A0          STA     ,Y+        
1105  66E7  5A            DECB         
1106  66E8  26  F9          BNE     CALCH1     
1107  66EA  35  B2          PULS    A,X,Y,PC   
1108       
1109        *
1110        *set sck:L
1111  66EC      SETCKL  EQU     *          
1112  66EC  34  02          PSHS    A          
1113  66EE  86  34          LDA     #$34        ca2=L
1114  66F0  B7  FD9F          STA     PBCTL      
1115  66F3  35  82          PULS    A,PC       
1116       
1117        *set sck:H
1118  66F5      SETCKH  EQU     *          
1119  66F5  34  02          PSHS    A          
1120  66F7  86  3C          LDA     #$3C        ca2=H
1121  66F9  B7  FD9F          STA     PBCTL      
1122  66FC  35  82          PULS    A,PC       
1123       
1124        *binary(A)->ascii(A)(B)
1125  66FE      DSPBIN  EQU     *          
1126  66FE  34  06          PSHS    A,B        
1127  6700  1F  89          TFR     A,B        
1128  6702  44            LSRA         
1129  6703  44            LSRA         
1130  6704  44            LSRA         
1131  6705  44            LSRA         
1132  6706  8A  30          ORA     #$30       
1133  6708  C4  0F          ANDB    #$0F       
1134  670A  CA  30          ORB     #$30       
1135  670C  81  39          CMPA    #$39       
1136  670E  23  02          BLS     BI21       
1137  6710  8B  07          ADDA    #$07       
1138  6712  C1  39  BI21    CMPB    #$39       
1139  6714  23  02          BLS     BI22       
1140  6716  CB  07          ADDB    #$07       
1141  6718  BD  FBBB  BI22    JSR     OUTCHA     
1142  671B  1F  98          TFR     B,A        
1143  671D  BD  FBBB          JSR     OUTCHA     
1144  6720  86  20          LDA     #$20       
1145  6722  BD  FBBB          JSR     OUTCHA     
1146  6725  35  86          PULS    A,B,PC     
1147       
1148        *crlf
1149  6727      CRLF    EQU     *          
1150  6727  86  0D          LDA     #$0D       
1151  6729  BD  FBBB          JSR     OUTCHA     
1152  672C  86  0A          LDA     #$0A       
1153  672E  BD  FBBB          JSR     OUTCHA     
1154  6731  39            RTS          
1155       
1156        *
1157  6732      GET8CH  EQU     *          
1158        *input chr
1159  6732  8E  6ADA          LDX     #INPBUF    
1160  6735  5F            CLRB         
1161  6736  BD  690B  CLOP    JSR     INOUTC     
1162  6739  81  0D          CMPA    #$0D       
1163  673B  27  07          BEQ     INEND      
1164  673D  A7  85          STA     B,X        
1165  673F  5C            INCB         
1166  6740  C1  08          CMPB    #8         
1167  6742  25  F2          BLO     CLOP       
1168       
1169  6744      INEND         
1170        *shift
1171  6744  5D            TSTB         
1172  6745  27  11          BEQ     CL1        
1173  6747  8E  6ADA          LDX     #INPBUF    
1174  674A  3A            ABX          
1175  674B  108E  6AE2          LDY     #INPBUF+8  
1176  674F  34  04          PSHS    B          
1177  6751  A6  82  SFLOP   LDA     ,-X        
1178  6753  A7  A2          STA     ,-Y        
1179  6755  5A            DECB         
1180  6756  26  F9          BNE     SFLOP      
1181        *clr
1182  6758  C6  08  CL1     LDB     #8         
1183  675A  E0  E0          SUBB    ,S+        
1184  675C  27  0A          BEQ     CLEND      
1185  675E  8E  6ADA          LDX     #INPBUF    
1186  6761  86  30          LDA     #'0        
1187  6763  A7  80  CLLOP   STA     ,X+        
1188  6765  5A            DECB         
1189  6766  26  FB          BNE     CLLOP      
1190  6768      CLEND        
1191       
1192        *convert to bin
1193  6768  C6  04          LDB     #4         
1194  676A  8E  6ADA          LDX     #INPBUF    
1195  676D  108E  6003          LDY     #SCTN0     
1196  6771      CVT1         
1197  6771  A6  80          LDA     ,X+        
1198  6773  8D  1E          BSR     CVBIN      
1199  6775  25  16          BCS     EREND1     
1200  6777  48            LSLA         
1201  6778  48            LSLA         
1202  6779  48            LSLA         
1203  677A  48            LSLA         
1204  677B  34  02          PSHS    A          
1205  677D  A6  80          LDA     ,X+        
1206  677F  8D  12          BSR     CVBIN      
1207  6781  25  08          BCS     EREND0     
1208  6783  AB  E0          ADDA    ,S+        
1209  6785  A7  A0          STA     ,Y+        
1210  6787  5A            DECB         
1211  6788  26  E7          BNE     CVT1       
1212  678A  39            RTS          
1213        
1214  678B  35  02  EREND0  PULS    A          
1215  678D  8E  6A47  EREND1  LDX     #MSERR     
1216  6790  8D  4A          BSR     PSTRNG     
1217  6792  39    EEND    RTS          
1218       
1219        *--------------------
1220        *ascii -> bin
1221  6793      CVBIN   EQU     *          
1222  6793  80  30          SUBA    #'0        
1223  6795  2B  11          BMI     CVERR      
1224  6797  81  09          CMPA    #9         
1225  6799  23  0A          BLS     CVBEND     
1226  679B  81  11          CMPA    #$11       
1227  679D  25  09          BLO     CVERR      
1228  679F  81  16          CMPA    #$16       
1229  67A1  22  05          BHI     CVERR      
1230  67A3  80  07          SUBA    #7         
1231  67A5      CVBEND       
1232  67A5  1C  FE          ANDCC   #$FE        reset C
1233  67A7  39            RTS          
1234  67A8  1A  01  CVERR   ORCC    #$01        set C
1235  67AA  39            RTS          
1236       
1237        *--------------------
1238        *add 2bytes to 4bytes
1239        * X,X+1,X+2,X+3 + Y,Y+1
1240        * data X is big endian
1241        * data Y is little endian
1242  67AB      ADD42   EQU     *          
1243  67AB  34  36          PSHS    A,B,X,Y    
1244  67AD  32  7C          LEAS    -4,S       
1245  67AF  C6  04          LDB     #4         
1246  67B1  A6  80  AD1     LDA     ,X+        
1247  67B3  A7  E0          STA     ,S+        
1248  67B5  5A            DECB         
1249  67B6  26  F9          BNE     AD1        
1250        
1251        *add (lower)
1252  67B8  A6  A0          LDA     ,Y+        
1253  67BA  AB  E2          ADDA    ,-S        
1254  67BC  A7  E4          STA     ,S         
1255  67BE  24  02          BCC     AD2        
1256  67C0  6C  7F          INC     -1,S       
1257        *add (upper)
1258  67C2  A6  A4  AD2     LDA     ,Y         
1259  67C4  AB  E2          ADDA    ,-S        
1260  67C6  A7  E4          STA     ,S         
1261  67C8  24  02          BCC     AD3        
1262  67CA  6C  7F          INC     -1,S       
1263  67CC  30  1C  AD3     LEAX    -4,X       
1264  67CE  32  7E          LEAS    -2,S       
1265  67D0  C6  04          LDB     #4         
1266  67D2  A6  E0  AD4     LDA     ,S+        
1267  67D4  A7  80          STA     ,X+        
1268  67D6  5A            DECB         
1269  67D7  26  F9          BNE     AD4        
1270  67D9  35  36          PULS    A,B,X,Y    
1271  67DB  39            RTS          
1272       
1273        *--------------------
1274        * pstring
1275  67DC      PSTRNG  EQU     *          
1276  67DC  34  02          PSHS    A          
1277  67DE  A6  80  PSLOP   LDA     ,X+        
1278  67E0  81  04          CMPA    #4         
1279  67E2  27  05          BEQ     PSEND      
1280  67E4  BD  FBBB          JSR     OUTCHA     
1281  67E7  20  F5          BRA     PSLOP      
1282  67E9  35  02  PSEND   PULS    A          
1283  67EB  39            RTS          
1284       
1285        *--------------------
1286        *disp MM-DD-YY
1287        *indata A(Low),B(High)
1288  67EC      DSPYMD  EQU     *          
1289  67EC  1E  89          EXG     A,B        
1290  67EE  34  10          PSHS    X          
1291  67F0  34  06          PSHS    A,B        
1292  67F2  C4  E0          ANDB    #$E0       
1293  67F4  54            LSRB         
1294  67F5  54            LSRB         
1295  67F6  54            LSRB         
1296  67F7  54            LSRB         
1297  67F8  54            LSRB         
1298  67F9  47            ASRA         
1299  67FA  24  02          BCC     DYMD1      
1300  67FC  CB  08          ADDB    #8         
1301  67FE  F7  603E  DYMD1   STB     WMDY        MM
1302  6801  35  06          PULS    A,B        
1303  6803  34  04          PSHS    B          
1304  6805  C4  1F          ANDB    #$1F       
1305  6807  F7  603F          STB     WMDY+1      DD
1306  680A  35  04          PULS    B          
1307        
1308  680C  44            LSRA         
1309        * ASLB
1310        * BCC DYMD2
1311        * INCA
1312  680D      DYMD2        
1313  680D  80  14          SUBA    #20         A+1980-2000
1314  680F  B7  6040          STA     WMDY+2      YY
1315        
1316        *disp MM-DD-YY
1317  6812  86  20          LDA     #'         
1318  6814  BD  FBBB          JSR     OUTCHA     
1319  6817  8E  603E          LDX     #WMDY      
1320  681A  A6  80          LDA     ,X+        
1321  681C  8D  14          BSR     DB2ASC      MM
1322  681E  86  2D          LDA     #'-        
1323  6820  BD  FBBB          JSR     OUTCHA     
1324  6823  A6  80          LDA     ,X+        
1325  6825  8D  0B          BSR     DB2ASC      DD
1326  6827  86  2D          LDA     #'-        
1327  6829  BD  FBBB          JSR     OUTCHA     
1328  682C  A6  80          LDA     ,X+        
1329  682E  8D  02          BSR     DB2ASC      YY
1330  6830  35  90          PULS    X,PC       
1331        *
1332        *----------
1333        *(A:BIN)->ASCII
1334  6832      DB2ASC  EQU     *          
1335  6832  34  06          PSHS    A,B        
1336  6834  1F  89          TFR     A,B        
1337  6836  86  30          LDA     #$30       
1338  6838  C1  0A  DBLOP   CMPB    #10        
1339  683A  25  05          BLO     DB2        
1340  683C  C0  0A          SUBB    #10        
1341  683E  4C            INCA         
1342  683F  20  F7          BRA     DBLOP      
1343  6841  BD  FBBB  DB2     JSR     OUTCHA     
1344  6844  1F  98          TFR     B,A        
1345  6846  8B  30          ADDA    #$30       
1346  6848  BD  FBBB          JSR     OUTCHA     
1347  684B  35  86          PULS    A,B,PC     
1348       
1349        *disp FILE size
1350  684D      DSPSIZ  EQU     *          
1351  684D  34  10          PSHS    X          
1352  684F  BE  6041          LDX     WFSIZ      
1353  6852  27  16          BEQ     DSS1        if 64k over?
1354  6854  86  3E          LDA     #'>       
1355  6856  BD  FBBB          JSR     OUTCHA     
1356  6859  86  36          LDA     #'6        
1357  685B  BD  FBBB          JSR     OUTCHA     
1358  685E  86  34          LDA     #'4        
1359  6860  BD  FBBB          JSR     OUTCHA     
1360  6863  86  6B          LDA     #'k        
1361  6865  BD  FBBB          JSR     OUTCHA     
1362  6868  20  3B          BRA     DSEND      
1363  686A  86  20  DSS1    LDA     #'         
1364  686C  BD  FBBB          JSR     OUTCHA     
1365  686F  B6  6043          LDA     WFSIZ+2     under 64k
1366        *disp dec
1367  6872  81  64          CMPA    #100       
1368  6874  23  12          BLS     DSS13      
1369  6876  1F  89          TFR     A,B        
1370  6878  86  30          LDA     #$30       
1371  687A  C1  64  DSLOP1  CMPB    #100       
1372  687C  25  05          BLO     DSS12      
1373  687E  C0  64          SUBB    #100       
1374  6880  4C            INCA         
1375  6881  20  F7          BRA     DSLOP1     
1376  6883  BD  FBBB  DSS12   JSR     OUTCHA     
1377  6886  20  05          BRA     DSS14      
1378        *under 100
1379  6888  86  20  DSS13   LDA     #'         
1380  688A  BD  FBBB          JSR     OUTCHA     
1381  688D  86  30  DSS14   LDA     #$30       
1382  688F  C1  0A  DSLOP2  CMPB    #10        
1383  6891  25  05          BLO     DSS2       
1384  6893  C0  0A          SUBB    #10        
1385  6895  4C            INCA         
1386  6896  20  F7          BRA     DSLOP2     
1387  6898  81  30  DSS2    CMPA    #$30       
1388  689A  26  01          BNE     DSS3       
1389  689C  4C            INCA         
1390  689D  BD  FBBB  DSS3    JSR     OUTCHA     
1391  68A0  86  6B          LDA     #'k        
1392  68A2  BD  FBBB          JSR     OUTCHA     
1393  68A5  86  20  DSEND   LDA     #'         
1394  68A7  BD  FBBB          JSR     OUTCHA     
1395  68AA  35  90          PULS    X,PC       
1396       
1397        *----------
1398  68AC      DSPCLS  EQU     *          
1399  68AC  34  10          PSHS    X          
1400  68AE  86  20          LDA     #'         
1401  68B0  BD  FBBB          JSR     OUTCHA     
1402  68B3  8E  6047          LDX     #CLSTH     
1403  68B6  C6  02          LDB     #2         
1404  68B8  A6  80  DCLOP1  LDA     ,X+        
1405  68BA  17  FF75          LBSR    DB2ASC     
1406  68BD  5A            DECB         
1407  68BE  26  F8          BNE     DCLOP1     
1408  68C0  86  20          LDA     #'         
1409  68C2  BD  FBBB          JSR     OUTCHA     
1410  68C5  C6  02          LDB     #2         
1411  68C7  A6  80  DCLOP2  LDA     ,X+        
1412  68C9  17  FF66          LBSR    DB2ASC     
1413  68CC  5A            DECB         
1414  68CD  26  F8          BNE     DCLOP2     
1415  68CF  35  90          PULS    X,PC       
1416       
1417        *----------
1418        *X:top of FILE NAME
1419        *return C=1:match,C=0:not match
1420  68D1      CMPFN   EQU     *          
1421  68D1  34  10          PSHS    X          
1422  68D3  108E  604F          LDY     #FNAME     
1423  68D7  C6  08          LDB     #8         
1424  68D9  A6  80  CMPLOP  LDA     ,X+        
1425  68DB  81  E5          CMPA    #$E5        delete mark?
1426  68DD  27  0F          BEQ     NOTM       
1427  68DF  81  20          CMPA    #'         
1428  68E1  27  07          BEQ     MATCH      
1429  68E3  A1  A0          CMPA    ,Y+        
1430  68E5  26  07          BNE     NOTM       
1431  68E7  5A            DECB         
1432  68E8  26  EF          BNE     CMPLOP     
1433  68EA  1A  01  MATCH   ORCC    #$01        C=1
1434  68EC  20  02          BRA     CMPEND     
1435  68EE  1C  FE  NOTM    ANDCC   #$FE        C=0
1436  68F0  35  90  CMPEND  PULS    X,PC       
1437       
1438        *----------
1439  68F2      FNMIN   EQU     *          
1440        *clr buf
1441  68F2  8E  605A          LDX     #FNAME+11  
1442  68F5  C6  0B          LDB     #8+3       
1443  68F7  86  20          LDA     #'         
1444  68F9  A7  82  FNIN0   STA     ,-X        
1445  68FB  5A            DECB         
1446  68FC  26  FB          BNE     FNIN0      
1447        *fname in
1448  68FE  BD  690B  FNIN1   JSR     INOUTC     
1449  6901  A7  80          STA     ,X+        
1450  6903  81  0D          CMPA    #$0D       
1451  6905  27  03          BEQ     FNIEND     
1452  6907  5A            DECB         
1453  6908  26  F4          BNE     FNIN1      
1454  690A  39    FNIEND  RTS          
1455       
1456  690B  BD  FBB8  INOUTC  JSR     INCHA      
1457  690E  BD  FBBB          JSR     OUTCHA     
1458  6911  39            RTS          
1459       
1460        **************************************************
1461        *========== parameter ==========
1462  6912  40    CMD0    FCB     $40,$00,$00,$00,$00,$95 '@   
1463  6918  41    CMD1    FCB     $41,$00,$00,$00,$00,$FF 'A   
1464  691E  51    CMD17   FCB     $51,$00,$00,$00,$00,$FF 'Q   
1465  6924  58    CMD24   FCB     $58,$00,$00,$00,$00,$FF 'X   
1466  692A  48    CMD8    FCB     $48,$00,$00,$01,$AA,$87 'H   
1467  6930  7A    CMD58   FCB     $7A,$00,$00,$00,$00,$FF 'z   
1468  6936  77    CMD55   FCB     $77,$00,$00,$00,$00,$FF 'w   
1469  693C  69    ACMD41  FCB     $69,$40,$FF,$80,$00,$FF 'i   
1470  6942  49    CMD9    FCB     $49,$00,$00,$00,$00,$FF 'I   
1471        *
1472  6948  43      MCMD0   FCC     /CMD0/,$D,$A   
1473  694E  04            FCB     4          
1474  694F  43      MCMD8   FCC     /CMD8/,$D,$A   
1475  6955  04            FCB     4          
1476  6956  43      MCMD58  FCC     /CMD58/,$D,$A  
1477  695D  04            FCB     4          
1478  695E  43      MCMD55  FCC     /CMD55/,$D,$A  
1479  6965  04            FCB     4          
1480  6966  41      MCMD41  FCC     /ACMD41/,$D,$A   
1481  696E  04            FCB     4          
1482  696F  43      MCMD9   FCC     /CMD9/,$D,$A   
1483  6975  04            FCB     4          
1484        *
1485  6976  0D      MSMENU1 FCC     $0D,$0A,/1:Read Sct, 2:Get SD data, 3:SD Init, 4:Disp MBR, 5:Disp BPB,/  
1486  69B5  04            FCB     4          
1487  69B6  0D      MSMENU2 FCC     $0D,$0A,/6:Disp FAT, 7:Disp DIR, 8:Load FILE, 0:End : /  
1488  69E5  04            FCB     4          
1489  69E6  53      MSSCT   FCC     /SctNo: /  
1490  69ED  04            FCB     4          
1491  69EE  57      MSWROK  FCC     /Write OK?: /  
1492  69F9  04            FCB     4          
1493  69FA  0D      MSSD0   FCC     $0D,$0A,/SD Card/,$0D,$0A  
1494  6A05  04            FCB     4          
1495  6A06  0D      MSSD1   FCC     $0D,$0A,/SDHC Card/,$0D,$0A  
1496  6A13  04            FCB     4          
1497  6A14  0D      MSINIT  FCC     $0D,$0A,$0D,$0A,/SD Card initializing.../  
1498  6A2F  04            FCB     4          
1499  6A30  53      MERR    FCC     /SD Initialize error!/,$0D,$0A   
1500  6A46  04            FCB     4          
1501  6A47  49      MSERR   FCC     /Input error!/,$0D,$0A   
1502  6A55  04            FCB     4          
1503  6A56  0D      MSOFS   FCC     $0D,$0A,/Sector no is:/  
1504  6A65  04            FCB     4          
1505  6A66  0D      MSBPB   FCC     $0D,$0A,/ BPB: /   
1506  6A6E  04            FCB     4          
1507  6A6F  0D      MSFAT   FCC     $0D,$0A,/ FAT: /   
1508  6A77  04            FCB     4          
1509  6A78  0D      MSDIR   FCC     $0D,$0A,/ DIR: /   
1510  6A80  04            FCB     4          
1511  6A81  0D      MSCL2   FCC     $0D,$0A,/ 1stCLUSTER: /  
1512  6A90  04            FCB     4          
1513  6A91  0D      MSINFN  FCC     $0D,$0A,$0D,$0A,/Input File Name: /  
1514  6AA6  04            FCB     4          
1515  6AA7  0D      MSLDED  FCC     $0D,$0A,/ Load end/  
1516  6AB2  04            FCB     4          
1517  6AB3  0D      MSNOFL  FCC     $0D,$0A,/ Not exist!/  
1518  6AC0  04            FCB     4          
1519  6AC1  0D      MSNXTP  FCC     $0D,$0A,"Next page (SPC/else): "   
1520  6AD9  04            FCB     4          
1521       
1522        **************************************************
1523  6ADA  FF    INPBUF  RMB     8          
1524       
1525          END     START      
 
0 error(s),  0 warning(s) is detected.
 
Label address
ACMD41  693C  AD1     67B1  AD2     67C2  AD3     67CC  AD4     67D2
ADD0    65FB  ADD1    6609  ADD2    6611  ADD3    6619  ADD40H  65F9
ADD42   67AB  ADX0    65EA  ADX1    65F0  ADX2    65F4  ADX3    65F8
ASC411  6195  ASCMD41 6188  BASADRP 0033  BI21    6712  BI22    6718
CALCH1  66E3  CALCHC  66DA  CALCSD  66CF  CL1     6758  CLEND   6768
CLLOP   6763  CLOP    6736  CLSTH   6047  CLSTL   6049  CMD0    6912
CMD1    6918  CMD17   691E  CMD24   6924  CMD55   6936  CMD58   6930
CMD8    692A  CMD9    6942  CMPEND  68F0  CMPFN   68D1  CMPLOP  68D9
CNT     604B  CNTSV   604C  CPY1    6627  CRLF    6727  CSRON   FBF7
CVBEND  67A5  CVBIN   6793  CVERR   67A8  CVT1    6771  DB2     6841
DB2ASC  6832  DBLOP   6838  DCLOP1  68B8  DCLOP2  68C7  DCPY    64D1
DIRENT  601E  DPGFLG  604E  DRET0   63B6  DRET1   647B  DSEND   68A5
DSKP1   63D6  DSLOP1  687A  DSLOP2  688F  DSPB1   6663  DSPB2   6665
DSPB3   6676  DSPBIN  66FE  DSPBPB  6386  DSPBUF  6659  DSPC1   6432
DSPCKE  63EA  DSPCLS  68AC  DSPDIR  63AA  DSPEND  646B  DSPFAT  6398
DSPFL0  63BD  DSPFL1  63D6  DSPFL2  63F4  DSPFL3  63F6  DSPFL4  6405
DSPFL5  6452  DSPMBR  632C  DSPSIZ  684D  DSPYMD  67EC  DSS1    686A
DSS12   6883  DSS13   6888  DSS14   688D  DSS2    6898  DSS3    689D
DYMD1   67FE  DYMD2   680D  EEND    6792  EREND0  678B  EREND1  678D
FILSIZ  6045  FNAME   604F  FNIEND  690A  FNIN0   68F9  FNIN1   68FE
FNMIN   68F2  GET1    6337  GET2    6339  GET8CH  6732  GETBPB  636D
GETD1   6697  GETDAT  6693  GETMBR  634A  GETSD   628B  GPLOP   6350
GPLOP2  6378  GR00    6100  GR2580  61C2  GR2581  61D9  GR2582  61DB
GR410   619D  GR550   617E  GR580   6154  GR581   615E  GR582   6160
GR80    6124  GR81    6136  GR90    629E  GR91    62AD  ILOP1   61FE
ILOP2   6211  ILOP3   622B  ILOP4   6269  INCHA   FBB8  INCX4   65EA
INEND   6744  INIT    607E  INOUTC  690B  INPBUF  6ADA  INSCT   66AD
ISTT    60E6  LD1     64B3  LD2     64CB  LD3     64F6  LD4     6501
LD41    651F  LD5     6538  LD6     653E  LD7     6549  LD8     657E
LD9     6586  LDE1    659B  LDEND   6595  LDFILE  646F  LDFL0   648B
LDFL1   649F  LDFL5   64C0  LDNEND  659F  MAIN    605A  MATCH   68EA
MCFLG   604D  MCMD0   6948  MCMD41  6966  MCMD55  695E  MCMD58  6956
MCMD8   694F  MCMD9   696F  MEMSET  65A7  MEN1    609A  MEN2    60A2
MEN3    60AA  MEN4    60B1  MEN5    60B9  MEN6    60C1  MEN7    60C9
MEN8    60D1  MENU    6080  MERR    6A30  MS1     65B8  MS2     65C5
MS3     65E4  MSBPB   6A66  MSCL2   6A81  MSDIR   6A78  MSERR   6A47
MSFAT   6A6F  MSINFN  6A91  MSINIT  6A14  MSLDED  6AA7  MSLOP   65D7
MSLOP0  65D3  MSMENU1 6976  MSMENU2 69B6  MSNOFL  6AB3  MSNXTP  6AC1
MSOFS   6A56  MSSCT   69E6  MSSD0   69FA  MSSD1   6A06  MSWROK  69EE
NOTM    68EE  OKEND   6318  OUTCHA  FBBB  PBCTL   FD9F  PBDAT   FD9E
PSEND   67E9  PSLOP   67DE  PSTRNG  67DC  RD1     6636  RD1SCT  661E
RD2     663D  RD3     664D  RESDAT  6007  RPT41   6169  RWBUF   6D00
SC01    60F7  SC2581  61BA  SC551   6176  SC581   614C  SC80    611C
SC91    6296  SCLOP1  62CD  SCLOP2  62E0  SCLOP3  62F3  SCLOP4  6306
SCMD0   60EF  SCMD258 61AD  SCMD55  6169  SCMD58  613F  SCMD8   610F
SCPY1   6251  SCTBPB  6009  SCTCLT  6019  SCTDIR  6011  SCTDSV  6015
SCTFAT  600D  SCTN0   6003  SCTN1   6004  SCTN2   6005  SCTN3   6006
SCTPCL  601D  SD1     61EF  SDERR   6312  SDHC    6008  SDINIT  60D9
SDRD    6319  SELOP   6362  SETCKH  66F5  SETCKL  66EC  SETSCT  66B5
SETSNO  635C  SFLOP   6751  SFT1    66C5  SKP1    623D  SKP2    6282
SNDD1   667E  SNDDAT  6677  START   6000  STTADR  6000  TXTADR  2000
VN      6002  WFSIZ   6041  WK1     6058  WMDY    603E 
 
 
<!---temp--><!------><!------><!------><!------>


前々回の報告「FM-7にRTCとSDを接続する試み(RTC編)(2023年3月9日)」で回路図も公開してありますが、FM-7に6821PIAを1個追加するだけでRTCやSDカードが使用できるのはそれなりにお値打ち(!)なのではないでしょうか。



2023年3月16日木曜日

FM-7にRTCとSDを接続する試み(SDカード編 その1)

ようやくSDカード(SDHCカードも)のセクタの読み書きができました

まだ完成途上なのですが、一応、必要なセクタを読み書きできるようになりました。

任意のセクタの読み書きに加えて、MBR(マスタブートレコード)、BPB(ブートパラメータブロック)、FAT(ファイルアロケーションテーブル)、DIR(ディレクトリ)と指定したファイルの最初のセクタを読むことができます。もちろん、SDカードのみでなくSDHCカードもOKです。


まずはFM-7との接続の様子です。前回の報告ではFM-7本体に装着していましたが、今回は拡張基板上に装着しています。後ろにFDCカードとFT245カードが並んでおり、50Pフラットケーブルで本体の拡張コネクタに接続しています。


設置状態


SDカードでの起動画面です。
SDカードの初期化とカード種別の判別の終了後にメニューが表示されます。



SDカードの起動画面


SDHCカードでの起動画面です。


SDHCカードの起動画面


メニュー項目は
1.指定したセクタのリード
2.指定したセクタのライト
3.SDカードのデータ取得・表示
4.SDカードの初期化
5.MBR(Master Boot Record)内容の表示
6.BPB(Boot Parameter Block)内容の表示
7.FAT(File Allocation Table)内容の表示
8.DIR(Directory)内容の表示...(先頭セクタのみです)
9.ファイル内容の表示...(先頭セクタのみです)
です。

メニュー実行の例として、DIR内容を表示させてみます。
ファイル名、サイズ、作成日、クラスタ上位、クラスタ下位を表示させています。
先頭の番号は、9.ファイル内容の表示で使用します。



SDカードのディレクトリ表示


メニュー9です。
ファイル番号を入力するとそのファイルの内容が表示されます。(現在はテストプログラムですので、先頭セクタのみの表示です。)
この画面はSDHCカードの場合で、3行目のような意味不明の表示がありますが、これは4行目のファイル名中に小文字が使用されているためです。(拡張子が.Lstでした)
ということで、FAT32も使用できますが、ファイル名に小文字は使用できないという制限があります。


ファイル番号入力待ち


FM-7では一行が80文字までという制限があるために1セクタのデータの512バイトがうまく一画面に収まらないので、表示結果の画像はありません。代わりに、開発に使用しているFLEX9上での画面を示します。



FLEX9での動作の様子



以上、現在実現できていることのうち、読み込み機能について紹介しました。
ファイル名に小文字が使えませんし、もちろんフォルダも使用できませんが、目的がFM-7への実装ですので、どちらも問題にはなりません。
問題は、WindowsPC等でSDカードに保存したテキスト等のデータをFM-7で読み出せたとして、それをFM-7のシステムでどのようにして利用するかです。
最も簡単な方法としては、読み込んだデータをメモリ上に展開しておいてF-BASICからそれを読み込んでファイル化するという方法が考えられます。小さなデータならこれでも間に合いそうですが...

SDカードをドライブ2に割り付けることができて、FILES, LOAD, SAVEなどが使用できればベストなのですが、実現するにはなかなか敷居が高そうです...
また、プログラムサイズも結構大きくなりそうですので、どう組み込むかも課題です。

まだまだ完成には遠いですが、今回作成したサブルーチン等をベースにして仕上げていくことになると思いますので、雑な作りのものですが、作成したプログラムを紹介しておきます。


SDHC8FM
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
0001        *
0002        *  SDHC8FM.TXT
0003        *
0004        *  SD Read/Write on SBC 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  $6E00 - 6FFF
0035        *
0036        *    Add command        '2023.03.14
0037        *    Change use Port B  '2023.03.07
0038        *    Original version   '2022.06.11
0039        *         Copyright by Y.Yamamoto
0040        *
0041  6000      STTADR  EQU     $6000      
0042  FBB8      INCHA   EQU     $FBB8      
0043  FBBB      OUTCHA  EQU     $FBBB      
0044       
0045  6E00      RWBUF   EQU     STTADR+$E00  
0046       
0047  FD9E      PBDAT   EQU     $FD9E      
0048  FD9F      PBCTL   EQU     PBDAT+1    
0049       
0050  6000              ORG     STTADR     
0051       
0052  6000  20  27  START   BRA     MAIN       
0053  6002  01    VN      FCB     1          
0054  6003  00    SCTN0   FCB     0           top adrs of sct
0055  6004  00    SCTN1   FCB     0          
0056  6005  00    SCTN2   FCB     0          
0057  6006  00    SCTN3   FCB     0          
0058  6007  00    RESDAT  FCB     0           response data
0059  6008  00    SDHC    FCB     0           sd:0,sdhc:1
0060       
0061  6009  0000    SCTBPB  FDB     00          sct no of BPB(4bytes)
0062  600B  0000            FDB     00         
0063  600D  0000    SCTFAT  FDB     00          sct no of FAT#1(4bytes)
0064  600F  0000            FDB     00         
0065  6011  0000    SCTDIR  FDB     00          sct no of DIR(4bytes)
0066  6013  0000            FDB     00         
0067  6015  0000    SCTCLT  FDB     00          sct no of top CLUSTER(4bytes)
0068  6017  0000            FDB     00          if SD:#2, SDHC:#3
0069  6019  00    SCTPCL  FCB     0           sct per cluster
0070  601A  FF    WMDY    RMB     3          
0071  601D  FF    WFSIZ   RMB     4          
0072  6021  0000    CLSTH   FDB     00         
0073  6023  0000    CLSTL   FDB     00         
0074  6025  0000    WK1     FDB     00         
0075  6027  0000    WK2     FDB     00         
0076       
0077  6029      MAIN    EQU     *          
0078        *=====reset pia=====
0079        *portB:output
0080  6029  86  30          LDA     #$30       
0081  602B  B7  FD9F          STA     PBCTL       select ddra, cb2:0
0082  602E  86  FD          LDA     #$FD        pb0,7:out,pb1:in
0083  6030  B7  FD9E          STA     PBDAT       set output mode
0084  6033  86  34          LDA     #$34       
0085  6035  B7  FD9F          STA     PBCTL       select peripheral,cb2:0
0086        
0087        *for pia exist check
0088  6038  86  55          LDA     #$55        test data
0089  603A  B7  FD9E          STA     PBDAT      
0090  603D  B6  FD9E          LDA     PBDAT      
0091  6040  84  FD          ANDA    #$FD        pb1=0
0092  6042  81  55          CMPA    #$55       
0093  6044  27  07          BEQ     INIT       
0094  6046  8E  68DF          LDX     #MERR      
0095  6049  17  067B          LBSR    PSTRNG     
0096  604C  39            RTS           return FM-7
0097       
0098  604D      INIT    EQU     *          
0099  604D  8D  5E          BSR     SDINIT     
0100       
0101        ****************************************
0102        * MAIN MENU
0103        ****************************************
0104  604F      MENU    EQU     *          
0105  604F  8E  6817          LDX     #MSMENU1   
0106  6052  17  0672          LBSR    PSTRNG     
0107  6055  8E  6859          LDX     #MSMENU2   
0108  6058  17  066C          LBSR    PSTRNG     
0109       
0110  605B  BD  FBB8          JSR     INCHA      
0111  605E  80  30          SUBA    #$30       
0112  6060  26  04          BNE     MEN1        0?
0113  6062  BD  6612          JSR     CRLF       
0114  6065  39            RTS           return FM-7
0115  6066  4A    MEN1    DECA         
0116  6067  26  05          BNE     MEN2        1?
0117  6069  17  0271          LBSR    SDRD       
0118  606C  20  E1          BRA     MENU       
0119  606E  4A    MEN2    DECA         
0120  606F  26  05          BNE     MEN3        2?
0121  6071  17  0416          LBSR    SDWRT      
0122  6074  20  D9          BRA     MENU       
0123  6076  4A    MEN3    DECA         
0124  6077  26  05          BNE     MEN4        3?
0125  6079  17  01D3          LBSR    GETSD      
0126  607C  20  D1          BRA     MENU       
0127  607E  4A    MEN4    DECA         
0128  607F  26  04          BNE     MEN5        4?
0129  6081  8D  2A          BSR     SDINIT     
0130  6083  20  CA          BRA     MENU       
0131  6085  4A    MEN5    DECA          5?
0132  6086  26  05          BNE     MEN6       
0133  6088  17  0265          LBSR    DSPMBR     
0134  608B  20  C2          BRA     MENU       
0135  608D  4A    MEN6    DECA          6?
0136  608E  26  05          BNE     MEN7       
0137  6090  17  02B7          LBSR    DSPBPB     
0138  6093  20  BA          BRA     MENU       
0139  6095  4A    MEN7    DECA          7?
0140  6096  26  05          BNE     MEN8       
0141  6098  17  02C1          LBSR    DSPFAT     
0142  609B  20  B2          BRA     MENU       
0143  609D  4A    MEN8    DECA          8?
0144  609E  26  05          BNE     MEN9       
0145  60A0  17  02CB          LBSR    DSPDIR     
0146  60A3  20  AA          BRA     MENU       
0147  60A5  4A    MEN9    DECA          9?
0148  60A6  26  A7          BNE     MENU       
0149  60A8  17  0349          LBSR    LDFILE     
0150  60AB  20  A2          BRA     MENU       
0151        *
0152        ****************************************
0153        * SD Initialize routine
0154        ****************************************
0155  60AD      SDINIT  EQU     *          
0156        *---------- start ----------
0157  60AD  8E  68C3          LDX     #MSINIT    
0158  60B0  BD  66C7          JSR     PSTRNG     
0159        * cs:1,di:1,sck-74ms
0160  60B3  86  FF          LDA     #$FF        mosi:b7=H,miso:b1=H(for PIA),cs:b0=H
0161  60B5  B7  FD9E          STA     PBDAT      
0162  60B8  C6  50          LDB     #80         80times
0163  60BA  17  051A  ISTT    LBSR    SETCKL     
0164  60BD  17  0520          LBSR    SETCKH     
0165  60C0  5A            DECB         
0166  60C1  26  F7          BNE     ISTT       
0167        *
0168        *---------- cmd 0 ----------
0169  60C3      SCMD0   EQU     *          
0170        * LDX #MCMD0
0171        * LBSR PSTRNG
0172        
0173  60C3  17  0511          LBSR    SETCKL     
0174  60C6  C6  06          LDB     #6         
0175  60C8  8E  67B3          LDX     #CMD0      
0176  60CB  A6  80  SC01    LDA     ,X+        
0177  60CD  17  0496          LBSR    SNDDAT     
0178  60D0  5A            DECB         
0179  60D1  26  F8          BNE     SC01       
0180        *get response
0181  60D3  5F            CLRB         
0182  60D4      GR00         
0183  60D4  5A            DECB         
0184  60D5  1027  01FD          LBEQ    SDERR      
0185  60D9  17  04A6          LBSR    GETDAT     
0186  60DC  B6  6007          LDA     RESDAT     
0187        * LBSR DSPBIN disp response
0188  60DF  81  01          CMPA    #$01       
0189  60E1  26  F1          BNE     GR00       
0190        * JSR CRLF
0191        *
0192        *---------- cmd 8 ----------
0193  60E3      SCMD8   EQU     *          
0194        * LDX #MCMD8
0195        * LBSR PSTRNG
0196        
0197  60E3  17  04F1          LBSR    SETCKL     
0198  60E6  86  FF          LDA     #$FF        dummy cmd
0199  60E8  17  047B          LBSR    SNDDAT     
0200  60EB  C6  06          LDB     #6         
0201  60ED  8E  67CB          LDX     #CMD8      
0202  60F0  A6  80  SC80    LDA     ,X+        
0203  60F2  17  0471          LBSR    SNDDAT     
0204  60F5  5A            DECB         
0205  60F6  26  F8          BNE     SC80       
0206        *get response
0207  60F8      GR80         
0208  60F8  17  0487          LBSR    GETDAT     
0209  60FB  B6  6007          LDA     RESDAT     
0210        
0211  60FE  17  0481          LBSR    GETDAT     
0212  6101  B6  6007          LDA     RESDAT     
0213        * LBSR DSPBIN disp response
0214  6104  81  01          CMPA    #$01       
0215  6106  26  F0          BNE     GR80       
0216  6108  C6  04          LDB     #4         
0217  610A  17  0475  GR81    LBSR    GETDAT     
0218  610D  B6  6007          LDA     RESDAT     
0219        * LBSR DSPBIN disp response
0220  6110  5A            DECB         
0221  6111  26  F7          BNE     GR81       
0222        * JSR CRLF
0223        *
0224        *---------- cmd 58 ----------
0225  6113      SCMD58  EQU     *          
0226        * LDX #MCMD58
0227        * LBSR PSTRNG
0228        
0229  6113  17  04C1          LBSR    SETCKL     
0230  6116  86  FF          LDA     #$FF        dummy cmd
0231  6118  17  044B          LBSR    SNDDAT     
0232  611B  C6  06          LDB     #6         
0233  611D  8E  67D1          LDX     #CMD58     
0234  6120  A6  80  SC581   LDA     ,X+        
0235  6122  17  0441          LBSR    SNDDAT     
0236  6125  5A            DECB         
0237  6126  26  F8          BNE     SC581      
0238        *get response
0239  6128      GR580        
0240  6128  17  0457          LBSR    GETDAT     
0241  612B  B6  6007          LDA     RESDAT     
0242        * LBSR DSPBIN disp response
0243  612E  81  01          CMPA    #$01       
0244  6130  26  F6          BNE     GR580      
0245  6132  C6  04  GR581   LDB     #4         
0246  6134  17  044B  GR582   LBSR    GETDAT     
0247  6137  B6  6007          LDA     RESDAT     
0248        * LBSR DSPBIN disp response
0249  613A  5A            DECB         
0250  613B  26  F7          BNE     GR582      
0251  613D      RPT41   EQU     *          
0252        *---------- cmd 55 ----------
0253  613D      SCMD55  EQU     *          
0254        * LDX #MCMD55
0255        * LBSR PSTRNG
0256        
0257  613D  17  0497          LBSR    SETCKL     
0258  6140  86  FF          LDA     #$FF        dummy cmd
0259  6142  17  0421          LBSR    SNDDAT     
0260  6145  C6  06          LDB     #6         
0261  6147  8E  67D7          LDX     #CMD55     
0262  614A  A6  80  SC551   LDA     ,X+        
0263  614C  17  0417          LBSR    SNDDAT     
0264  614F  5A            DECB         
0265  6150  26  F8          BNE     SC551      
0266        *get response
0267        * CLRB
0268  6152      GR550        
0269        * DECB
0270        * BEQ SDERR
0271  6152  17  042D          LBSR    GETDAT     
0272  6155  B6  6007          LDA     RESDAT     
0273        * LBSR DSPBIN disp response
0274  6158  81  01          CMPA    #$01       
0275  615A  26  F6          BNE     GR550      
0276        
0277        * JSR CRLF
0278        *---------- acmd 41 ----------
0279  615C      ASCMD41 EQU     *          
0280        * LDX #MCMD41
0281        * LBSR PSTRNG
0282        
0283  615C  17  0478          LBSR    SETCKL     
0284  615F  86  FF          LDA     #$FF        dummy cmd
0285  6161  17  0402          LBSR    SNDDAT     
0286  6164  C6  06          LDB     #6         
0287  6166  8E  67DD          LDX     #ACMD41    
0288  6169  A6  80  ASC411  LDA     ,X+        
0289  616B  17  03F8          LBSR    SNDDAT     
0290  616E  5A            DECB         
0291  616F  26  F8          BNE     ASC411     
0292        *get response
0293  6171      GR410        
0294  6171  17  040E          LBSR    GETDAT     
0295  6174  B6  6007          LDA     RESDAT     
0296        * LBSR DSPBIN disp response
0297  6177  17  0408          LBSR    GETDAT     
0298  617A  B6  6007          LDA     RESDAT     
0299        * LBSR DSPBIN disp response
0300  617D  81  00          CMPA    #$00       
0301  617F  26  BC          BNE     RPT41      
0302        * JSR CRLF
0303        
0304        *---------- second cmd 58 ----------
0305  6181      SCMD258 EQU     *          
0306        * LDX #MCMD58
0307        * LBSR PSTRNG
0308        
0309  6181  17  0453          LBSR    SETCKL     
0310  6184  86  FF          LDA     #$FF        dummy cmd
0311  6186  17  03DD          LBSR    SNDDAT     
0312  6189  C6  06          LDB     #6         
0313  618B  8E  67D1          LDX     #CMD58     
0314  618E  A6  80  SC2581  LDA     ,X+        
0315  6190  17  03D3          LBSR    SNDDAT     
0316  6193  5A            DECB         
0317  6194  26  F8          BNE     SC2581     
0318        *get response
0319  6196      GR2580       
0320  6196  17  03E9          LBSR    GETDAT     
0321  6199  B6  6007          LDA     RESDAT     
0322        * LBSR DSPBIN disp response
0323  619C  81  00          CMPA    #$00       
0324  619E  26  F6          BNE     GR2580     
0325  61A0  17  03DF          LBSR    GETDAT     
0326  61A3  B6  6007          LDA     RESDAT     
0327        * LBSR DSPBIN disp response
0328  61A6  48            LSLA         
0329  61A7  48            LSLA         
0330  61A8  24  03          BCC     GR2581     
0331  61AA  7C  6008          INC     SDHC        if sdhc then 1
0332  61AD  C6  03  GR2581  LDB     #3         
0333  61AF  17  03D0  GR2582  LBSR    GETDAT     
0334  61B2  B6  6007          LDA     RESDAT     
0335        * LBSR DSPBIN disp response
0336  61B5  5A            DECB         
0337  61B6  26  F7          BNE     GR2582     
0338        
0339  61B8  8E  68A9          LDX     #MSSD0     
0340  61BB  B6  6008          LDA     SDHC       
0341  61BE  27  03          BEQ     SD1        
0342  61C0  8E  68B5          LDX     #MSSD1     
0343  61C3  17  0501  SD1     LBSR    PSTRNG     
0344        
0345        *----------
0346        *set sct no of BPB
0347  61C6  17  0145          LBSR    GETMBR     
0348  61C9  8E  6FCA          LDX     #RWBUF+446+8+4   
0349  61CC  108E  6009          LDY     #SCTBPB    
0350  61D0  C6  04          LDB     #4         
0351  61D2  A6  82  ILOP1   LDA     ,-X        
0352  61D4  A7  A0          STA     ,Y+        
0353  61D6  5A            DECB         
0354  61D7  26  F9          BNE     ILOP1      
0355        
0356        *set sct no of FAT#1
0357  61D9  17  0155          LBSR    GETBPB     
0358  61DC  8E  6009          LDX     #SCTBPB    
0359  61DF  108E  600D          LDY     #SCTFAT    
0360  61E3  C6  04          LDB     #4         
0361  61E5  A6  80  ILOP2   LDA     ,X+        
0362  61E7  A7  A0          STA     ,Y+        
0363  61E9  5A            DECB         
0364  61EA  26  F9          BNE     ILOP2      
0365        
0366  61EC  8E  600D          LDX     #SCTFAT    
0367  61EF  108E  6E0E          LDY     #RWBUF+$0E    for SD & SDHC
0368  61F3  17  04A0          LBSR    ADD42      
0369        
0370        *set sct no of DIR
0371  61F6  8E  600D          LDX     #SCTFAT    
0372  61F9  108E  6011          LDY     #SCTDIR    
0373  61FD  C6  04          LDB     #4         
0374  61FF  A6  80  ILOP3   LDA     ,X+        
0375  6201  A7  A0          STA     ,Y+        
0376  6203  5A            DECB         
0377  6204  26  F9          BNE     ILOP3      
0378        
0379  6206  8E  6E16          LDX     #RWBUF+$16    for SD
0380  6209  7D  6008          TST     SDHC       
0381  620C  27  03          BEQ     SKP1       
0382  620E  C6  0E          LDB     #$24-$16   
0383  6210  3A            ABX           for SDHC
0384  6211  1F  12  SKP1    TFR     X,Y        
0385  6213  8E  6011          LDX     #SCTDIR    
0386  6216  17  047D          LBSR    ADD42      
0387  6219  17  047A          LBSR    ADD42       skip for FAT#2
0388       
0389        *set sct per cluster
0390  621C  8E  6E0D          LDX     #RWBUF+$0D   
0391  621F  A6  84          LDA     ,X         
0392  6221  B7  6019          STA     SCTPCL     
0393        
0394        *set sct no of CLUSTER#2
0395  6224  8E  6011          LDX     #SCTDIR    
0396  6227  108E  6015          LDY     #SCTCLT    
0397  622B  C6  04          LDB     #4         
0398  622D  A6  80  ILOP4   LDA     ,X+        
0399  622F  A7  A0          STA     ,Y+        
0400  6231  5A            DECB         
0401  6232  26  F9          BNE     ILOP4      
0402        
0403  6234  108E  6027          LDY     #WK1+2     
0404  6238  86  00          LDA     #$00       
0405  623A  A7  A2          STA     ,-Y        
0406  623C  86  20          LDA     #$20        for SD
0407  623E  7D  6008          TST     SDHC       
0408  6241  27  03          BEQ     SKP2       
0409  6243  B6  6019          LDA     SCTPCL      for SDHC
0410  6246  A7  A2  SKP2    STA     ,-Y        
0411  6248  8E  6015          LDX     #SCTCLT    
0412  624B  17  0448          LBSR    ADD42      
0413        *----------
0414  624E  39            RTS          
0415       
0416        ****************************************
0417        * GET SD DATA ROUTINE
0418        * use CMD9
0419        ****************************************
0420  624F      GETSD   EQU     *          
0421  624F  BD  6612          JSR     CRLF       
0422  6252  17  0382          LBSR    SETCKL     
0423  6255  C6  06          LDB     #6         
0424  6257  8E  67E3          LDX     #CMD9      
0425  625A  A6  80  SC91    LDA     ,X+        
0426  625C  17  0307          LBSR    SNDDAT     
0427  625F  5A            DECB         
0428  6260  26  F8          BNE     SC91       
0429        * JSR CRLF
0430        *get response
0431  6262      GR90         
0432  6262  17  031D          LBSR    GETDAT     
0433  6265  B6  6007          LDA     RESDAT     
0434        * LBSR DSPBIN disp response
0435  6268  81  00          CMPA    #$00       
0436  626A  26  F6          BNE     GR90       
0437        
0438        * JSR CRLF
0439  626C  BD  6612          JSR     CRLF       
0440  626F  C6  14          LDB     #16+1+2+1   fe,crcH,crcL,ff
0441  6271  17  030E  GR91    LBSR    GETDAT     
0442  6274  B6  6007          LDA     RESDAT     
0443  6277  17  036F          LBSR    DSPBIN      disp response
0444  627A  5A            DECB         
0445  627B  26  F4          BNE     GR91       
0446  627D  BD  6612          JSR     CRLF       
0447       
0448        *disp offset of MBR,FAT#1,DIR,CLUSTER#2
0449  6280  8E  6905          LDX     #MSOFS     
0450  6283  BD  66C7          JSR     PSTRNG     
0451  6286  8E  6917          LDX     #MSBPB     
0452  6289  BD  66C7          JSR     PSTRNG     
0453  628C  8E  6009          LDX     #SCTBPB    
0454  628F  C6  04          LDB     #4         
0455  6291  A6  80  SCLOP1  LDA     ,X+        
0456  6293  17  0353          LBSR    DSPBIN     
0457  6296  5A            DECB         
0458  6297  26  F8          BNE     SCLOP1     
0459       
0460  6299  8E  6920          LDX     #MSFAT     
0461  629C  BD  66C7          JSR     PSTRNG     
0462  629F  8E  600D          LDX     #SCTFAT    
0463  62A2  C6  04          LDB     #4         
0464  62A4  A6  80  SCLOP2  LDA     ,X+        
0465  62A6  17  0340          LBSR    DSPBIN     
0466  62A9  5A            DECB         
0467  62AA  26  F8          BNE     SCLOP2     
0468       
0469  62AC  8E  6929          LDX     #MSDIR     
0470  62AF  BD  66C7          JSR     PSTRNG     
0471  62B2  8E  6011          LDX     #SCTDIR    
0472  62B5  C6  04          LDB     #4         
0473  62B7  A6  80  SCLOP3  LDA     ,X+        
0474  62B9  17  032D          LBSR    DSPBIN     
0475  62BC  5A            DECB         
0476  62BD  26  F8          BNE     SCLOP3     
0477       
0478  62BF  8E  6932          LDX     #MSCL2     
0479  62C2  BD  66C7          JSR     PSTRNG     
0480  62C5  8E  6015          LDX     #SCTCLT    
0481  62C8  C6  04          LDB     #4         
0482  62CA  A6  80  SCLOP4  LDA     ,X+        
0483  62CC  17  031A          LBSR    DSPBIN     
0484  62CF  5A            DECB         
0485  62D0  26  F8          BNE     SCLOP4     
0486  62D2  BD  6612          JSR     CRLF       
0487  62D5  39            RTS          
0488       
0489        *
0490  62D6      SDERR   EQU     *          
0491  62D6  8E  68DF          LDX     #MERR      
0492  62D9  17  03EB          LBSR    PSTRNG     
0493  62DC      OKEND        
0494  62DC  39            RTS           return FM-7
0495        *
0496        ****************************************
0497        * READ ROUTINE
0498        * use CMD17
0499        * set sctno to $6005,6006
0500        * read data set to $6800-69FF
0501        ****************************************
0502  62DD      SDRD    EQU     *          
0503  62DD  BD  6612          JSR     CRLF       
0504  62E0  17  02B9          LBSR    INSCT      
0505  62E3  17  0227          LBSR    RD1SCT      read 1 sct
0506       
0507        *disp data
0508  62E6  BD  6612          JSR     CRLF       
0509  62E9  17  025C          LBSR    DSPBUF     
0510  62EC  BD  6612          JSR     CRLF       
0511  62EF  39            RTS          
0512       
0513        ****************************************
0514        * Read MBR & Disp parameter of BPB
0515        ****************************************
0516  62F0      DSPMBR  EQU     *          
0517  62F0  BD  6612          JSR     CRLF       
0518  62F3  8D  19          BSR     GETMBR     
0519       
0520        *disp BPB
0521  62F5  BD  6612          JSR     CRLF       
0522  62F8  8E  6FBE          LDX     #RWBUF+446   
0523  62FB  C6  10  GET1    LDB     #16        
0524  62FD  A6  80  GET2    LDA     ,X+        
0525  62FF  17  02E7          LBSR    DSPBIN      disp data
0526  6302  5A            DECB         
0527  6303  26  F8          BNE     GET2       
0528  6305  BD  6612          JSR     CRLF       
0529  6308  8C  6FFE          CMPX    #RWBUF+510    446+16*4
0530  630B  25  EE          BLO     GET1       
0531  630D  39            RTS          
0532       
0533        *----------------------------------------
0534        *read MBR
0535  630E      GETMBR  EQU     *          
0536  630E  8E  6003          LDX     #SCTN0     
0537  6311  C6  04          LDB     #4         
0538  6313  4F            CLRA         
0539  6314  A7  80  GPLOP   STA     ,X+        
0540  6316  5A            DECB         
0541  6317  26  FB          BNE     GPLOP      
0542  6319  17  0288          LBSR    SETSCT     
0543        
0544  631C  17  01EE          LBSR    RD1SCT      read 1 sct
0545  631F  39            RTS          
0546       
0547        *----------------------------------------
0548        *set sector no to SCTN0
0549        *from X,X+1,X+2,X+3 to SCTN0-SCTN3
0550  6320      SETSNO  EQU     *          
0551  6320  108E  6003          LDY     #SCTN0     
0552  6324  C6  04          LDB     #4         
0553  6326  A6  80  SELOP   LDA     ,X+        
0554  6328  A7  A0          STA     ,Y+        
0555  632A  5A            DECB         
0556  632B  26  F9          BNE     SELOP      
0557  632D  17  0274          LBSR    SETSCT     
0558  6330  39            RTS          
0559       
0560        *----------------------------------------
0561        *read BPB
0562  6331      GETBPB  EQU     *          
0563  6331  8D  DB          BSR     GETMBR     
0564        *set sct no of BPB
0565  6333  8E  6FCA          LDX     #RWBUF+446+8+4   
0566  6336  108E  6003          LDY     #SCTN0     
0567  633A  C6  04          LDB     #4         
0568  633C  A6  82  GPLOP2  LDA     ,-X        
0569  633E  A7  A0          STA     ,Y+        
0570  6340  5A            DECB         
0571  6341  26  F9          BNE     GPLOP2     
0572  6343  17  025E          LBSR    SETSCT     
0573        
0574  6346  17  01C4          LBSR    RD1SCT      read 1 sct
0575  6349  39            RTS          
0576       
0577        ****************************************
0578        * Disp BPB(Bios Parameter Block)
0579        ****************************************
0580  634A      DSPBPB  EQU     *          
0581  634A  8E  6009          LDX     #SCTBPB    
0582  634D  8D  D1          BSR     SETSNO     
0583  634F  17  01BB          LBSR    RD1SCT      read 1 sct
0584        
0585        *disp BPB
0586  6352  BD  6612          JSR     CRLF       
0587  6355  17  01F0          LBSR    DSPBUF     
0588  6358  BD  6612          JSR     CRLF       
0589  635B  39            RTS          
0590       
0591        ****************************************
0592        * Disp FAT#1
0593        ****************************************
0594  635C      DSPFAT  EQU     *          
0595  635C  8E  600D          LDX     #SCTFAT    
0596  635F  8D  BF          BSR     SETSNO     
0597  6361  17  01A9          LBSR    RD1SCT      read 1 sct
0598        
0599        *disp FAT
0600  6364  BD  6612          JSR     CRLF       
0601  6367  17  01DE          LBSR    DSPBUF     
0602  636A  BD  6612          JSR     CRLF       
0603  636D  39            RTS          
0604       
0605        ****************************************
0606        * Disp Directory
0607        ****************************************
0608  636E      DSPDIR  EQU     *          
0609  636E  8E  6011          LDX     #SCTDIR    
0610  6371  8D  AD          BSR     SETSNO     
0611  6373  17  0197          LBSR    RD1SCT      read 1 sct
0612        
0613        **disp DIR
0614        * JSR CRLF
0615        * LBSR DSPBUF
0616        * JSR CRLF
0617        *
0618        *disp FILE name
0619  6376  BD  6612          JSR     CRLF       
0620  6379  BD  6612          JSR     CRLF       
0621  637C  8E  6E60          LDX     #RWBUF+96   skip top data
0622  637F  7F  6027          CLR     WK2         counter
0623  6382  A6  84  DSPFL1  LDA     ,X         
0624  6384  27  6D          BEQ     DSPEND     
0625  6386  81  E5          CMPA    #$E5        delete mark?
0626  6388  26  05          BNE     DSPFL2     
0627  638A  30  88 20         LEAX    32,X       
0628  638D  20  F3          BRA     DSPFL1     
0629        
0630  638F  7C  6027  DSPFL2  INC     WK2        
0631  6392  B6  6027          LDA     WK2        
0632  6395  17  0251          LBSR    DSPBIN      disp counter
0633  6398  C6  08          LDB     #8         
0634  639A  A6  80  DSPFL3  LDA     ,X+        
0635  639C  BD  FBBB          JSR     OUTCHA     
0636  639F  5A            DECB         
0637  63A0  26  F8          BNE     DSPFL3     
0638  63A2  86  2E          LDA     #'.        
0639  63A4  BD  FBBB          JSR     OUTCHA     
0640  63A7  C6  03          LDB     #3         
0641  63A9  A6  80  DSPFL4  LDA     ,X+        
0642  63AB  BD  FBBB          JSR     OUTCHA     
0643  63AE  5A            DECB         
0644  63AF  26  F8          BNE     DSPFL4     
0645  63B1  86  20          LDA     #'         
0646  63B3  BD  FBBB          JSR     OUTCHA     
0647  63B6  BD  FBBB          JSR     OUTCHA     
0648       
0649        *get FILE time data
0650  63B9  30  07          LEAX    7,X        
0651  63BB  EC  81          LDD     ,X++       
0652  63BD  FD  6025          STD     WK1        
0653       
0654        *get CLUSTER(H) data
0655  63C0  EC  81          LDD     ,X++       
0656  63C2  1E  89          EXG     A,B        
0657  63C4  FD  6021          STD     CLSTH      
0658  63C7  30  04          LEAX    4,X        
0659  63C9  EC  81          LDD     ,X++       
0660  63CB  1E  89          EXG     A,B        
0661  63CD  FD  6023          STD     CLSTL      
0662        
0663        *get FILE size data
0664  63D0  108E  6021          LDY     #WFSIZ+4   
0665  63D4  C6  04          LDB     #4         
0666  63D6  A6  80  DSPC1   LDA     ,X+        
0667  63D8  A7  A2          STA     ,-Y        
0668  63DA  5A            DECB         
0669  63DB  26  F9          BNE     DSPC1      
0670       
0671        *disp FILE size
0672  63DD  86  20          LDA     #'         
0673  63DF  BD  FBBB          JSR     OUTCHA     
0674  63E2  17  0353          LBSR    DSPSIZ      disp FILE size
0675       
0676       
0677        *disp FILE time
0678  63E5  FC  6025          LDD     WK1        
0679  63E8  17  02EC          LBSR    DSPYMD      disp MM-DD-YY
0680       
0681        *disp CLUSTER(H,L)
0682  63EB  17  03A0          LBSR    DSPCLS     
0683       
0684  63EE  BD  6612          JSR     CRLF       
0685  63F1  20  8F          BRA     DSPFL1     
0686        *
0687  63F3  39    DSPEND  RTS          
0688       
0689        ****************************************
0690        * Load FILE
0691        ****************************************
0692  63F4      LDFILE  EQU     *          
0693  63F4  17  FF77          LBSR    DSPDIR     
0694  63F7  8E  6942          LDX     #MSINFL    
0695  63FA  BD  66C7          JSR     PSTRNG     
0696  63FD  BD  FBB8          JSR     INCHA       file no
0697  6400  80  30          SUBA    #$30        to binary
0698        
0699  6402  8E  6E60          LDX     #RWBUF+96   skip top data
0700  6405  1F  89          TFR     A,B        
0701        
0702  6407  A6  84  LDLOP   LDA     ,X         
0703  6409  81  E5          CMPA    #$E5        delete mark?
0704  640B  26  05          BNE     LD1        
0705  640D  30  88 20         LEAX    32,X        skip
0706  6410  20  F5          BRA     LDLOP      
0707  6412  5A    LD1     DECB         
0708  6413  27  05          BEQ     LD2        
0709  6415  30  88 20         LEAX    32,X       
0710  6418  20  ED          BRA     LDLOP      
0711        *hit file, get cluster no
0712  641A  EC  88 14 LD2     LDD     $14,X      
0713  641D  1E  89          EXG     A,B        
0714  641F  FD  6021          STD     CLSTH      
0715  6422  EC  88 1A         LDD     $1A,X      
0716  6425  1E  89          EXG     A,B        
0717  6427  FD  6023          STD     CLSTL      
0718        *get sct no
0719  642A  C0  02          SUBB    #2          sub top cluseter no
0720  642C  7D  6008          TST     SDHC        SD:0,SDHC:1
0721  642F  27  01          BEQ     LD3        
0722  6431  5A            DECB         
0723        
0724  6432  34  04  LD3     PSHS    B          
0725  6434  8E  6015          LDX     #SCTCLT    
0726  6437  108E  6025          LDY     #WK1       
0727  643B  C6  04          LDB     #4         
0728  643D  A6  80  LD4     LDA     ,X+        
0729  643F  A7  A0          STA     ,Y+        
0730  6441  5A            DECB         
0731  6442  26  F9          BNE     LD4        
0732  6444  35  04          PULS    B          
0733        
0734  6446  8E  6025          LDX     #WK1       
0735  6449  A6  03  LD5     LDA     3,X        
0736  644B  8B  40          ADDA    #$40       
0737  644D  A7  03          STA     3,X        
0738  644F  24  06          BCC     LD51       
0739  6451  A6  02          LDA     2,X        
0740  6453  8B  01          ADDA    #1         
0741  6455  A7  02          STA     2,X        
0742  6457  24  06  LD51    BCC     LD52       
0743  6459  A6  01          LDA     1,X        
0744  645B  8B  01          ADDA    #1         
0745  645D  A7  01          STA     1,X        
0746  645F  24  06  LD52    BCC     LD53       
0747  6461  A6  84          LDA     ,X         
0748  6463  8B  01          ADDA    #1         
0749  6465  A7  84          STA     ,X         
0750  6467  5A    LD53    DECB         
0751  6468  26  DF          BNE     LD5        
0752        
0753  646A  8E  6025          LDX     #WK1       
0754  646D  108E  6003          LDY     #SCTN0     
0755  6471  C6  04          LDB     #4         
0756  6473  A6  80  LD6     LDA     ,X+        
0757  6475  A7  A0          STA     ,Y+        
0758  6477  5A            DECB         
0759  6478  26  F9          BNE     LD6        
0760  647A  17  0127          LBSR    SETSCT     
0761  647D  17  008D          LBSR    RD1SCT      read 1 sct
0762       
0763        * LDX #SCTCLT
0764        * LBSR SETSNO
0765        * LBSR RD1SCT read 1 sct
0766        *
0767        **disp CLUSTER#2
0768  6480  BD  6612          JSR     CRLF       
0769  6483  17  00C2          LBSR    DSPBUF     
0770  6486  BD  6612          JSR     CRLF       
0771  6489  39            RTS          
0772       
0773        ****************************************
0774        * WRITE ROUTINE
0775        * use CMD24
0776        * set sctno to $6005,6006
0777        * write data from $6A00-6BFF
0778        ****************************************
0779  648A      SDWRT   EQU     *          
0780  648A  8E  689D          LDX     #MSWROK    
0781  648D  17  0237          LBSR    PSTRNG     
0782  6490  BD  FBB8          JSR     INCHA      
0783  6493  84  DF          ANDA    #$DF       
0784  6495  81  59          CMPA    #'Y        
0785  6497  27  01          BEQ     SDWR1      
0786  6499  39            RTS          
0787  649A  BD  6612  SDWR1   JSR     CRLF       
0788  649D  17  00FC          LBSR    INSCT       *input SCT No
0789        *copy sct no to cmd param
0790  64A0  8E  6003          LDX     #SCTN0     
0791  64A3  108E  67C6          LDY     #CMD24+1   
0792  64A7  C6  04          LDB     #4         
0793  64A9  A6  80  CPY2    LDA     ,X+        
0794  64AB  A7  A0          STA     ,Y+        
0795  64AD  5A            DECB         
0796  64AE  26  F9          BNE     CPY2       
0797        *send cmd
0798  64B0  17  0124          LBSR    SETCKL     
0799  64B3  C6  06          LDB     #6         
0800  64B5  8E  67C5          LDX     #CMD24     
0801  64B8  A6  80  SDW1    LDA     ,X+        
0802  64BA  17  012C          LBSR    DSPBIN      disp response
0803  64BD  17  00A6          LBSR    SNDDAT     
0804  64C0  5A            DECB         
0805  64C1  26  F5          BNE     SDW1       
0806        *get cmd response
0807  64C3      SDW2         
0808  64C3  17  00BC          LBSR    GETDAT     
0809  64C6  B6  6007          LDA     RESDAT     
0810  64C9  17  011D          LBSR    DSPBIN      disp response
0811  64CC  81  00          CMPA    #$00       
0812  64CE  26  F3          BNE     SDW2       
0813        *1byte skip
0814  64D0  86  FF          LDA     #$FF       
0815  64D2  17  0091          LBSR    SNDDAT      1byte skip
0816  64D5  BD  6612          JSR     CRLF       
0817        
0818        *send data packet
0819  64D8  8E  6E00          LDX     #RWBUF      --temp buf
0820  64DB  108E  0200          LDY     #512       
0821        *send data token
0822  64DF  86  FE          LDA     #$FE       
0823  64E1  17  0082          LBSR    SNDDAT      data token
0824  64E4  A6  80  SNDDT1  LDA     ,X+        
0825  64E6  8D  7E          BSR     SNDDAT     
0826  64E8  31  3F          LEAY    -1,Y       
0827  64EA  26  F8          BNE     SNDDT1     
0828        
0829  64EC  86  FF          LDA     #$FF       
0830  64EE  8D  76          BSR     SNDDAT      crcH
0831  64F0  8D  74          BSR     SNDDAT      crcL
0832        *get data response
0833  64F2      CKRS         
0834  64F2  17  008D          LBSR    GETDAT     
0835  64F5  B6  6007          LDA     RESDAT     
0836  64F8  17  00EE          LBSR    DSPBIN      disp response
0837  64FB  81  E5          CMPA    #$E5        data response?
0838  64FD  26  F3          BNE     CKRS       
0839        *wait until busy
0840  64FF      BUSY         
0841  64FF  17  0080          LBSR    GETDAT     
0842  6502  B6  6007          LDA     RESDAT     
0843  6505  17  00E1          LBSR    DSPBIN      disp response
0844  6508  81  FF          CMPA    #$FF       
0845  650A  26  F3          BNE     BUSY       
0846  650C  39            RTS          
0847       
0848        *------------------------------
0849        *read 1 sct
0850        *------------------------------
0851  650D      RD1SCT  EQU     *          
0852        *copy sct no to cmd param
0853  650D  8E  6003          LDX     #SCTN0     
0854  6510  108E  67C0          LDY     #CMD17+1   
0855  6514  C6  04          LDB     #4         
0856  6516  A6  80  CPY1    LDA     ,X+        
0857  6518  A7  A0          STA     ,Y+        
0858  651A  5A            DECB         
0859  651B  26  F9          BNE     CPY1       
0860        *send cmd
0861  651D  17  00B7          LBSR    SETCKL     
0862  6520  C6  06          LDB     #6         
0863  6522  8E  67BF          LDX     #CMD17     
0864  6525  A6  80  RD1     LDA     ,X+        
0865  6527  8D  3D          BSR     SNDDAT     
0866  6529  5A            DECB         
0867  652A  26  F9          BNE     RD1        
0868        *get response
0869  652C      RD2          
0870  652C  8D  54          BSR     GETDAT     
0871  652E  B6  6007          LDA     RESDAT     
0872  6531  81  FE          CMPA    #$FE        token?
0873  6533  26  F7          BNE     RD2        
0874       
0875        *get data
0876        * JSR CRLF
0877  6535  8E  6E00          LDX     #RWBUF      --temp buf
0878  6538  108E  0200          LDY     #512       
0879  653C      RD3          
0880  653C  8D  44          BSR     GETDAT     
0881  653E  B6  6007          LDA     RESDAT     
0882  6541  A7  80          STA     ,X+         save buf
0883  6543  31  3F          LEAY    -1,Y       
0884  6545  26  F5          BNE     RD3        
0885  6547  39            RTS          
0886       
0887        *------------------------------
0888        *disp data
0889  6548      DSPBUF  EQU     *          
0890  6548  BD  6612          JSR     CRLF       
0891  654B  8E  6E00          LDX     #RWBUF      --temp buf
0892  654E  108E  0200          LDY     #512       
0893  6552  C6  20  DSPB1   LDB     #32        
0894  6554      DSPB2        
0895  6554  A6  80          LDA     ,X+         save buf
0896  6556  17  0090          LBSR    DSPBIN      disp data
0897  6559  31  3F          LEAY    -1,Y       
0898  655B  27  08          BEQ     DSPB3      
0899  655D  5A            DECB         
0900  655E  26  F4          BNE     DSPB2      
0901  6560  BD  6612          JSR     CRLF       
0902  6563  20  ED          BRA     DSPB1      
0903  6565  39    DSPB3   RTS          
0904       
0905        *------------------------------
0906        *send data
0907  6566      SNDDAT  EQU     *          
0908  6566  34  06          PSHS    A,B        
0909  6568  7F  6007          CLR     RESDAT     
0910  656B  C6  08          LDB     #8         
0911  656D  34  02  SNDD1   PSHS    A          
0912  656F  84  FC          ANDA    #$FC       
0913  6571  8A  02          ORA     #$02        miso:b1=H(for PIA),cs:b0=L
0914  6573  B7  FD9E          STA     PBDAT       send data
0915  6576  8D  5F          BSR     SETCKL     
0916  6578  35  02          PULS    A          
0917  657A  48            LSLA         
0918  657B  8D  63          BSR     SETCKH     
0919  657D  5A            DECB         
0920  657E  26  ED          BNE     SNDD1      
0921  6580  35  86          PULS    A,B,PC     
0922       
0923        *get data
0924  6582      GETDAT  EQU     *          
0925  6582  34  06          PSHS    A,B        
0926  6584  C6  08          LDB     #8         
0927  6586  8D  4F  GETD1   BSR     SETCKL     
0928  6588  12            NOP          
0929  6589  12            NOP          
0930  658A  12            NOP          
0931  658B  8D  53          BSR     SETCKH     
0932  658D  B6  FD9E          LDA     PBDAT       get response
0933  6590  44            LSRA         
0934  6591  44            LSRA          b1--C
0935  6592  79  6007          ROL     RESDAT      C--b0
0936  6595  5A            DECB         
0937  6596  26  EE          BNE     GETD1      
0938  6598  8D  3D          BSR     SETCKL     
0939  659A  35  86          PULS    A,B,PC     
0940        *
0941        *------------------------------
0942        *input SCT No
0943  659C      INSCT   EQU     *          
0944  659C  8E  6895          LDX     #MSSCT     
0945  659F  17  0125          LBSR    PSTRNG     
0946  65A2  8D  79          BSR     GET8CH      get 8chr, convert 4bin
0947        
0948  65A4      SETSCT  EQU     *          
0949  65A4  7D  6008          TST     SDHC       
0950  65A7  26  1D          BNE     CALCHC     
0951        *SD card
0952  65A9  C6  03          LDB     #3         
0953  65AB  8E  6004          LDX     #SCTN1     
0954  65AE  108E  6003          LDY     #SCTN0     
0955  65B2  A6  80  SFT1    LDA     ,X+        
0956  65B4  A7  A0          STA     ,Y+        
0957  65B6  5A            DECB         
0958  65B7  26  F9          BNE     SFT1       
0959  65B9  7F  6006          CLR     SCTN3      
0960        *calc top adrs of sct
0961  65BC      CALCSD  EQU     *          
0962  65BC  78  6006          LSL     SCTN3      
0963  65BF  79  6005          ROL     SCTN2      
0964  65C2  79  6004          ROL     SCTN1      
0965  65C5  39            RTS          
0966       
0967        *SDHC card
0968        *calc top adrs of sct
0969  65C6      CALCHC  EQU     *          
0970  65C6  8E  6003          LDX     #SCTN0     
0971  65C9  108E  67C0          LDY     #CMD17+1   
0972  65CD  C6  04          LDB     #4         
0973  65CF  A6  80  CALCH1  LDA     ,X+        
0974  65D1  A7  A0          STA     ,Y+        
0975  65D3  5A            DECB         
0976  65D4  26  F9          BNE     CALCH1     
0977  65D6  39            RTS          
0978       
0979        *
0980        *set sck:L
0981  65D7      SETCKL  EQU     *          
0982  65D7  34  02          PSHS    A          
0983  65D9  86  34          LDA     #$34        ca2=L
0984  65DB  B7  FD9F          STA     PBCTL      
0985  65DE  35  82          PULS    A,PC       
0986       
0987        *set sck:H
0988  65E0      SETCKH  EQU     *          
0989  65E0  34  02          PSHS    A          
0990  65E2  86  3C          LDA     #$3C        ca2=H
0991  65E4  B7  FD9F          STA     PBCTL      
0992  65E7  35  82          PULS    A,PC       
0993       
0994        *binary(A)--ascii(A)(B)
0995  65E9      DSPBIN  EQU     *          
0996  65E9  34  06          PSHS    A,B        
0997  65EB  1F  89          TFR     A,B        
0998  65ED  44            LSRA         
0999  65EE  44            LSRA         
1000  65EF  44            LSRA         
1001  65F0  44            LSRA         
1002  65F1  8A  30          ORA     #$30       
1003  65F3  C4  0F          ANDB    #$0F       
1004  65F5  CA  30          ORB     #$30       
1005  65F7  81  39          CMPA    #$39       
1006  65F9  23  02          BLS     BI21       
1007  65FB  8B  07          ADDA    #$07       
1008  65FD  C1  39  BI21    CMPB    #$39       
1009  65FF  23  02          BLS     BI22       
1010  6601  CB  07          ADDB    #$07       
1011  6603  BD  FBBB  BI22    JSR     OUTCHA     
1012  6606  1F  98          TFR     B,A        
1013  6608  BD  FBBB          JSR     OUTCHA     
1014  660B  86  20          LDA     #$20       
1015  660D  BD  FBBB          JSR     OUTCHA     
1016  6610  35  86          PULS    A,B,PC     
1017       
1018        *crlf
1019  6612      CRLF    EQU     *          
1020  6612  86  0D          LDA     #$0D       
1021  6614  BD  FBBB          JSR     OUTCHA     
1022  6617  86  0A          LDA     #$0A       
1023  6619  BD  FBBB          JSR     OUTCHA     
1024  661C  39            RTS          
1025       
1026        *
1027  661D      GET8CH  EQU     *          
1028        *input chr
1029  661D  8E  6956          LDX     #INPBUF    
1030  6620  5F            CLRB         
1031  6621  BD  FBB8  CLOP    JSR     INCHA      
1032  6624  81  0D          CMPA    #$0D       
1033  6626  27  07          BEQ     INEND      
1034  6628  A7  85          STA     B,X        
1035  662A  5C            INCB         
1036  662B  C1  08          CMPB    #8         
1037  662D  25  F2          BLO     CLOP       
1038       
1039  662F      INEND         
1040        *shift
1041  662F  5D            TSTB         
1042  6630  27  11          BEQ     CL1        
1043  6632  8E  6956          LDX     #INPBUF    
1044  6635  3A            ABX          
1045  6636  108E  695E          LDY     #INPBUF+8  
1046  663A  34  04          PSHS    B          
1047  663C  A6  82  SFLOP   LDA     ,-X        
1048  663E  A7  A2          STA     ,-Y        
1049  6640  5A            DECB         
1050  6641  26  F9          BNE     SFLOP      
1051        *clr
1052  6643  C6  08  CL1     LDB     #8         
1053  6645  E0  E0          SUBB    ,S+        
1054  6647  27  0A          BEQ     CLEND      
1055  6649  8E  6956          LDX     #INPBUF    
1056  664C  86  30          LDA     #'0        
1057  664E  A7  80  CLLOP   STA     ,X+        
1058  6650  5A            DECB         
1059  6651  26  FB          BNE     CLLOP      
1060  6653      CLEND        
1061       
1062        *convert to bin
1063  6653  C6  04          LDB     #4         
1064  6655  8E  6956          LDX     #INPBUF    
1065  6658  108E  6003          LDY     #SCTN0     
1066  665C      CVT1         
1067  665C  A6  80          LDA     ,X+        
1068  665E  8D  1E          BSR     CVBIN      
1069  6660  25  16          BCS     EREND1     
1070  6662  48            LSLA         
1071  6663  48            LSLA         
1072  6664  48            LSLA         
1073  6665  48            LSLA         
1074  6666  34  02          PSHS    A          
1075  6668  A6  80          LDA     ,X+        
1076  666A  8D  12          BSR     CVBIN      
1077  666C  25  08          BCS     EREND0     
1078  666E  AB  E0          ADDA    ,S+        
1079  6670  A7  A0          STA     ,Y+        
1080  6672  5A            DECB         
1081  6673  26  E7          BNE     CVT1       
1082  6675  39            RTS          
1083        
1084  6676  35  02  EREND0  PULS    A          
1085  6678  8E  68F6  EREND1  LDX     #MSERR     
1086  667B  8D  4A          BSR     PSTRNG     
1087  667D  39    EEND    RTS          
1088       
1089        *--------------------
1090        *ascii -- bin
1091  667E      CVBIN   EQU     *          
1092  667E  80  30          SUBA    #'0        
1093  6680  2B  11          BMI     CVERR      
1094  6682  81  09          CMPA    #9         
1095  6684  23  0A          BLS     CVBEND     
1096  6686  81  11          CMPA    #$11       
1097  6688  25  09          BLO     CVERR      
1098  668A  81  16          CMPA    #$16       
1099  668C  22  05          BHI     CVERR      
1100  668E  80  07          SUBA    #7         
1101  6690      CVBEND       
1102  6690  1C  FE          ANDCC   #$FE        reset C
1103  6692  39            RTS          
1104  6693  1A  01  CVERR   ORCC    #$01        set C
1105  6695  39            RTS          
1106       
1107        *--------------------
1108        *add 2bytes to 4bytes
1109        * X,X+1,X+2,X+3 + Y,Y+1
1110        * data X is big endian
1111        * data Y is little endian
1112  6696      ADD42   EQU     *          
1113  6696  34  36          PSHS    A,B,X,Y    
1114  6698  32  7C          LEAS    -4,S       
1115  669A  C6  04          LDB     #4         
1116  669C  A6  80  AD1     LDA     ,X+        
1117  669E  A7  E0          STA     ,S+        
1118  66A0  5A            DECB         
1119  66A1  26  F9          BNE     AD1        
1120        
1121        *add (lower)
1122  66A3  A6  A0          LDA     ,Y+        
1123  66A5  AB  E2          ADDA    ,-S        
1124  66A7  A7  E4          STA     ,S         
1125  66A9  24  02          BCC     AD2        
1126  66AB  6C  7F          INC     -1,S       
1127        *add (upper)
1128  66AD  A6  A4  AD2     LDA     ,Y         
1129  66AF  AB  E2          ADDA    ,-S        
1130  66B1  A7  E4          STA     ,S         
1131  66B3  24  02          BCC     AD3        
1132  66B5  6C  7F          INC     -1,S       
1133  66B7  30  1C  AD3     LEAX    -4,X       
1134  66B9  32  7E          LEAS    -2,S       
1135  66BB  C6  04          LDB     #4         
1136  66BD  A6  E0  AD4     LDA     ,S+        
1137  66BF  A7  80          STA     ,X+        
1138  66C1  5A            DECB         
1139  66C2  26  F9          BNE     AD4        
1140  66C4  35  36          PULS    A,B,X,Y    
1141  66C6  39            RTS          
1142       
1143        *--------------------
1144        * pstring
1145  66C7      PSTRNG  EQU     *          
1146  66C7  34  02          PSHS    A          
1147  66C9  A6  80  PSLOP   LDA     ,X+        
1148  66CB  81  04          CMPA    #4         
1149  66CD  27  05          BEQ     PSEND      
1150  66CF  BD  FBBB          JSR     OUTCHA     
1151  66D2  20  F5          BRA     PSLOP      
1152  66D4  35  02  PSEND   PULS    A          
1153  66D6  39            RTS          
1154       
1155        *--------------------
1156        *disp MM-DD-YY
1157        *indata A(Low),B(High)
1158  66D7      DSPYMD  EQU     *          
1159  66D7  1E  89          EXG     A,B        
1160  66D9  34  10          PSHS    X          
1161  66DB  34  06          PSHS    A,B        
1162  66DD  C4  E0          ANDB    #$E0       
1163  66DF  54            LSRB         
1164  66E0  54            LSRB         
1165  66E1  54            LSRB         
1166  66E2  54            LSRB         
1167  66E3  54            LSRB         
1168  66E4  47            ASRA         
1169  66E5  24  02          BCC     DYMD1      
1170  66E7  CB  08          ADDB    #8         
1171  66E9  F7  601A  DYMD1   STB     WMDY        MM
1172  66EC  35  06          PULS    A,B        
1173  66EE  34  04          PSHS    B          
1174  66F0  C4  1F          ANDB    #$1F       
1175  66F2  F7  601B          STB     WMDY+1      DD
1176  66F5  35  04          PULS    B          
1177        
1178  66F7  44            LSRA         
1179        * ASLB
1180        * BCC DYMD2
1181        * INCA
1182  66F8      DYMD2        
1183  66F8  80  14          SUBA    #20         A+1980-2000
1184  66FA  B7  601C          STA     WMDY+2      YY
1185        
1186        *disp MM-DD-YY
1187  66FD  86  20          LDA     #'         
1188  66FF  BD  FBBB          JSR     OUTCHA     
1189  6702  8E  601A          LDX     #WMDY      
1190  6705  A6  80          LDA     ,X+        
1191  6707  8D  14          BSR     DB2ASC      MM
1192  6709  86  2D          LDA     #'-        
1193  670B  BD  FBBB          JSR     OUTCHA     
1194  670E  A6  80          LDA     ,X+        
1195  6710  8D  0B          BSR     DB2ASC      DD
1196  6712  86  2D          LDA     #'-        
1197  6714  BD  FBBB          JSR     OUTCHA     
1198  6717  A6  80          LDA     ,X+        
1199  6719  8D  02          BSR     DB2ASC      YY
1200  671B  35  90          PULS    X,PC       
1201       
1202        *
1203        *----------
1204        *(A:BIN)--ASCII
1205  671D      DB2ASC  EQU     *          
1206  671D  34  06          PSHS    A,B        
1207  671F  1F  89          TFR     A,B        
1208  6721  86  30          LDA     #$30       
1209  6723  C1  0A  DBLOP   CMPB    #10        
1210  6725  25  05          BLO     DB2        
1211  6727  C0  0A          SUBB    #10        
1212  6729  4C            INCA         
1213  672A  20  F7          BRA     DBLOP      
1214  672C  BD  FBBB  DB2     JSR     OUTCHA     
1215  672F  1F  98          TFR     B,A        
1216  6731  8B  30          ADDA    #$30       
1217  6733  BD  FBBB          JSR     OUTCHA     
1218  6736  35  86          PULS    A,B,PC     
1219       
1220        *disp FILE size
1221  6738      DSPSIZ  EQU     *          
1222  6738  34  10          PSHS    X          
1223  673A  BE  601D          LDX     WFSIZ      
1224  673D  27  12          BEQ     DSS1        if 64k over?
1225  673F  86  2D          LDA     #'-        
1226  6741  BD  FBBB          JSR     OUTCHA     
1227  6744  BD  FBBB          JSR     OUTCHA     
1228  6747  BD  FBBB          JSR     OUTCHA     
1229  674A  86  6B          LDA     #'k        
1230  674C  BD  FBBB          JSR     OUTCHA     
1231  674F  20  3B          BRA     DSEND      
1232  6751      DSS1          
1233  6751  B6  601F          LDA     WFSIZ+2    
1234  6754  81  64          CMPA    #100       
1235  6756  23  12          BLS     DSS13      
1236  6758  1F  89          TFR     A,B        
1237  675A  86  30          LDA     #$30       
1238  675C  C1  64  DSLOP1  CMPB    #100       
1239  675E  25  05          BLO     DSS12      
1240  6760  C0  64          SUBB    #100       
1241  6762  4C            INCA         
1242  6763  20  F7          BRA     DSLOP1     
1243  6765  BD  FBBB  DSS12   JSR     OUTCHA     
1244  6768  20  05          BRA     DSS14      
1245       
1246  676A  86  20  DSS13   LDA     #'         
1247  676C  BD  FBBB          JSR     OUTCHA     
1248  676F  86  30  DSS14   LDA     #$30       
1249  6771  C1  0A  DSLOP2  CMPB    #10        
1250  6773  25  05          BLO     DSS2       
1251  6775  C0  0A          SUBB    #10        
1252  6777  4C            INCA         
1253  6778  20  F7          BRA     DSLOP2     
1254  677A  81  30  DSS2    CMPA    #$30       
1255  677C  26  01          BNE     DSS3       
1256  677E  4C            INCA         
1257  677F  BD  FBBB  DSS3    JSR     OUTCHA     
1258  6782  86  6B          LDA     #'k        
1259  6784  BD  FBBB          JSR     OUTCHA     
1260  6787  86  20          LDA     #'         
1261  6789  BD  FBBB          JSR     OUTCHA     
1262  678C  35  90  DSEND   PULS    X,PC       
1263       
1264        *----------
1265  678E      DSPCLS  EQU     *          
1266  678E  34  10          PSHS    X          
1267  6790  86  20          LDA     #'         
1268  6792  BD  FBBB          JSR     OUTCHA     
1269  6795  8E  6021          LDX     #CLSTH     
1270  6798  C6  02          LDB     #2         
1271  679A  A6  80  DCLOP1  LDA     ,X+        
1272  679C  17  FF7E          LBSR    DB2ASC     
1273  679F  5A            DECB         
1274  67A0  26  F8          BNE     DCLOP1     
1275  67A2  86  20          LDA     #'         
1276  67A4  BD  FBBB          JSR     OUTCHA     
1277  67A7  C6  02          LDB     #2         
1278  67A9  A6  80  DCLOP2  LDA     ,X+        
1279  67AB  17  FF6F          LBSR    DB2ASC     
1280  67AE  5A            DECB         
1281  67AF  26  F8          BNE     DCLOP2     
1282  67B1  35  90          PULS    X,PC       
1283       
1284        **************************************************
1285        *========== parameter ==========
1286  67B3  40    CMD0    FCB     $40,$00,$00,$00,$00,$95 '@   
1287  67B9  41    CMD1    FCB     $41,$00,$00,$00,$00,$FF 'A   
1288  67BF  51    CMD17   FCB     $51,$00,$00,$00,$00,$FF 'Q   
1289  67C5  58    CMD24   FCB     $58,$00,$00,$00,$00,$FF 'X   
1290  67CB  48    CMD8    FCB     $48,$00,$00,$01,$AA,$87 'H   
1291  67D1  7A    CMD58   FCB     $7A,$00,$00,$00,$00,$FF 'z   
1292  67D7  77    CMD55   FCB     $77,$00,$00,$00,$00,$FF 'w   
1293  67DD  69    ACMD41  FCB     $69,$40,$FF,$80,$00,$FF 'i   
1294  67E3  49    CMD9    FCB     $49,$00,$00,$00,$00,$FF 'I   
1295        *
1296  67E9  43      MCMD0   FCC     /CMD0/,$D,$A   
1297  67EF  04            FCB     4          
1298  67F0  43      MCMD8   FCC     /CMD8/,$D,$A   
1299  67F6  04            FCB     4          
1300  67F7  43      MCMD58  FCC     /CMD58/,$D,$A  
1301  67FE  04            FCB     4          
1302  67FF  43      MCMD55  FCC     /CMD55/,$D,$A  
1303  6806  04            FCB     4          
1304  6807  41      MCMD41  FCC     /ACMD41/,$D,$A   
1305  680F  04            FCB     4          
1306  6810  43      MCMD9   FCC     /CMD9/,$D,$A   
1307  6816  04            FCB     4          
1308        *
1309  6817  0D      MSMENU1 FCC     $0D,$0A,/1:Read Sct, 2:Write Sct, 3:Get SD data, 4:SD Init, 5:Disp MBR, /  
1310  6858  04            FCB     4          
1311  6859  0D      MSMENU2 FCC     $0D,$0A,/6:Disp BPB, 7:Disp FAT, 8:Disp DIR, 9:Load FILE, 0:End : /  
1312  6894  04            FCB     4          
1313  6895  53      MSSCT   FCC     /SctNo: /  
1314  689C  04            FCB     4          
1315  689D  57      MSWROK  FCC     /Write OK?: /  
1316  68A8  04            FCB     4          
1317  68A9  0D      MSSD0   FCC     $0D,$0A,/SD Card/,$0D,$0A  
1318  68B4  04            FCB     4          
1319  68B5  0D      MSSD1   FCC     $0D,$0A,/SDHC Card/,$0D,$0A  
1320  68C2  04            FCB     4          
1321  68C3  0D      MSINIT  FCC     $0D,$0A,$0D,$0A,/SD Card initializing.../  
1322  68DE  04            FCB     4          
1323  68DF  53      MERR    FCC     /SD Initialize error!/,$0D,$0A   
1324  68F5  04            FCB     4          
1325  68F6  49      MSERR   FCC     /Input error!/,$0D,$0A   
1326  6904  04            FCB     4          
1327  6905  0D      MSOFS   FCC     $0D,$0A,/Sector no is:/,$0D,$0A  
1328  6916  04            FCB     4          
1329  6917  0D      MSBPB   FCC     $0D,$0A,/ BPB: /   
1330  691F  04            FCB     4          
1331  6920  0D      MSFAT   FCC     $0D,$0A,/ FAT: /   
1332  6928  04            FCB     4          
1333  6929  0D      MSDIR   FCC     $0D,$0A,/ DIR: /   
1334  6931  04            FCB     4          
1335  6932  0D      MSCL2   FCC     $0D,$0A,/ 1stCLUSTER: /  
1336  6941  04            FCB     4          
1337  6942  0D      MSINFL  FCC     $0D,$0A,/Select File No : /  
1338  6955  04            FCB     4          
1339       
1340        **************************************************
1341  6956  FF    INPBUF  RMB     8          
1342       
1343          END     START      
 
0 error(s),  0 warning(s) is detected.
 
Label address
ACMD41  67DD  AD1     669C  AD2     66AD  AD3     66B7  AD4     66BD
ADD42   6696  ASC411  6169  ASCMD41 615C  BI21    65FD  BI22    6603
BUSY    64FF  CALCH1  65CF  CALCHC  65C6  CALCSD  65BC  CKRS    64F2
CL1     6643  CLEND   6653  CLLOP   664E  CLOP    6621  CLSTH   6021
CLSTL   6023  CMD0    67B3  CMD1    67B9  CMD17   67BF  CMD24   67C5
CMD55   67D7  CMD58   67D1  CMD8    67CB  CMD9    67E3  CPY1    6516
CPY2    64A9  CRLF    6612  CVBEND  6690  CVBIN   667E  CVERR   6693
CVT1    665C  DB2     672C  DB2ASC  671D  DBLOP   6723  DCLOP1  679A
DCLOP2  67A9  DSEND   678C  DSLOP1  675C  DSLOP2  6771  DSPB1   6552
DSPB2   6554  DSPB3   6565  DSPBIN  65E9  DSPBPB  634A  DSPBUF  6548
DSPC1   63D6  DSPCLS  678E  DSPDIR  636E  DSPEND  63F3  DSPFAT  635C
DSPFL1  6382  DSPFL2  638F  DSPFL3  639A  DSPFL4  63A9  DSPMBR  62F0
DSPSIZ  6738  DSPYMD  66D7  DSS1    6751  DSS12   6765  DSS13   676A
DSS14   676F  DSS2    677A  DSS3    677F  DYMD1   66E9  DYMD2   66F8
EEND    667D  EREND0  6676  EREND1  6678  GET1    62FB  GET2    62FD
GET8CH  661D  GETBPB  6331  GETD1   6586  GETDAT  6582  GETMBR  630E
GETSD   624F  GPLOP   6314  GPLOP2  633C  GR00    60D4  GR2580  6196
GR2581  61AD  GR2582  61AF  GR410   6171  GR550   6152  GR580   6128
GR581   6132  GR582   6134  GR80    60F8  GR81    610A  GR90    6262
GR91    6271  ILOP1   61D2  ILOP2   61E5  ILOP3   61FF  ILOP4   622D
INCHA   FBB8  INEND   662F  INIT    604D  INPBUF  6956  INSCT   659C
ISTT    60BA  LD1     6412  LD2     641A  LD3     6432  LD4     643D
LD5     6449  LD51    6457  LD52    645F  LD53    6467  LD6     6473
LDFILE  63F4  LDLOP   6407  MAIN    6029  MCMD0   67E9  MCMD41  6807
MCMD55  67FF  MCMD58  67F7  MCMD8   67F0  MCMD9   6810  MEN1    6066
MEN2    606E  MEN3    6076  MEN4    607E  MEN5    6085  MEN6    608D
MEN7    6095  MEN8    609D  MEN9    60A5  MENU    604F  MERR    68DF
MSBPB   6917  MSCL2   6932  MSDIR   6929  MSERR   68F6  MSFAT   6920
MSINFL  6942  MSINIT  68C3  MSMENU1 6817  MSMENU2 6859  MSOFS   6905
MSSCT   6895  MSSD0   68A9  MSSD1   68B5  MSWROK  689D  OKEND   62DC
OUTCHA  FBBB  PBCTL   FD9F  PBDAT   FD9E  PSEND   66D4  PSLOP   66C9
PSTRNG  66C7  RD1     6525  RD1SCT  650D  RD2     652C  RD3     653C
RESDAT  6007  RPT41   613D  RWBUF   6E00  SC01    60CB  SC2581  618E
SC551   614A  SC581   6120  SC80    60F0  SC91    625A  SCLOP1  6291
SCLOP2  62A4  SCLOP3  62B7  SCLOP4  62CA  SCMD0   60C3  SCMD258 6181
SCMD55  613D  SCMD58  6113  SCMD8   60E3  SCTBPB  6009  SCTCLT  6015
SCTDIR  6011  SCTFAT  600D  SCTN0   6003  SCTN1   6004  SCTN2   6005
SCTN3   6006  SCTPCL  6019  SD1     61C3  SDERR   62D6  SDHC    6008
SDINIT  60AD  SDRD    62DD  SDW1    64B8  SDW2    64C3  SDWR1   649A
SDWRT   648A  SELOP   6326  SETCKH  65E0  SETCKL  65D7  SETSCT  65A4
SETSNO  6320  SFLOP   663C  SFT1    65B2  SKP1    6211  SKP2    6246
SNDD1   656D  SNDDAT  6566  SNDDT1  64E4  START   6000  STTADR  6000
VN      6002  WFSIZ   601D  WK1     6025  WK2     6027  WMDY    601A


リストが長いので今回は縦スクロール付きにしてみました。「全選択」ボタンがありませんが、リスト中でダブルクリックしておいてCtrl-Cでコピーできます。