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つのみです。

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



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	




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



0 件のコメント:

コメントを投稿