SDカード中のBASICプログラムファイルと機械語ファイルを読み込んで実行することができました
SDカードへの書き込みはまだ実現していませんが、とりあえず、読み込みはできるようになりました。
F-BASICのコマンド(FILES, LOAD, LOADM)でフロッピィディスクと同様にSDカードを扱えるのが理想なのでしょうが、1セクタのサイズが512バイトであることもあり実現するのは私には難しいようです。
とりあえず、SDカードを用いてWindowsPCからFM-7へファイルを移動させるツールとして使用する前提で、常駐ソフトではなくその都度起動してSDカードを読むという形の専用プログラムにしました。
使用法のイメージは下図のようです。
使用イメージ |
通常使用しているFT245高速通信カードでは、ディスクイメージを丸ごとコピーするのですが、このSDカード使用の場合は特定のファイルを選択してFM-7に移すことができます。
プログラムの起動画面です
起動画面 |
メニュー項目は
で、前回との違いは、
ロードした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つのみです。
作成したプログラムを下に示しておきます。
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カードが使用できるのはそれなりにお値打ち(!)なのではないでしょうか。