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カードが使用できるのはそれなりにお値打ち(!)なのではないでしょうか。



2023年3月16日木曜日

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

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

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

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


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


設置状態


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



SDカードの起動画面


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


SDHCカードの起動画面


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

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



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


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


ファイル番号入力待ち


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



FLEX9での動作の様子



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

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

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


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

0 error(s),  0 warning(s) is detected.

Label	address
ACMD41	67DD	AD1   	669C	AD2   	66AD	AD3   	66B7	AD4   	66BD
ADD42 	6696	ASC411	6169	ASCMD41	615C	BI21  	65FD	BI22  	6603
BUSY  	64FF	CALCH1	65CF	CALCHC	65C6	CALCSD	65BC	CKRS  	64F2
CL1   	6643	CLEND 	6653	CLLOP 	664E	CLOP  	6621	CLSTH 	6021
CLSTL 	6023	CMD0  	67B3	CMD1  	67B9	CMD17 	67BF	CMD24 	67C5
CMD55 	67D7	CMD58 	67D1	CMD8  	67CB	CMD9  	67E3	CPY1  	6516
CPY2  	64A9	CRLF  	6612	CVBEND	6690	CVBIN 	667E	CVERR 	6693
CVT1  	665C	DB2   	672C	DB2ASC	671D	DBLOP 	6723	DCLOP1	679A
DCLOP2	67A9	DSEND 	678C	DSLOP1	675C	DSLOP2	6771	DSPB1 	6552
DSPB2 	6554	DSPB3 	6565	DSPBIN	65E9	DSPBPB	634A	DSPBUF	6548
DSPC1 	63D6	DSPCLS	678E	DSPDIR	636E	DSPEND	63F3	DSPFAT	635C
DSPFL1	6382	DSPFL2	638F	DSPFL3	639A	DSPFL4	63A9	DSPMBR	62F0
DSPSIZ	6738	DSPYMD	66D7	DSS1  	6751	DSS12 	6765	DSS13 	676A
DSS14 	676F	DSS2  	677A	DSS3  	677F	DYMD1 	66E9	DYMD2 	66F8
EEND  	667D	EREND0	6676	EREND1	6678	GET1  	62FB	GET2  	62FD
GET8CH	661D	GETBPB	6331	GETD1 	6586	GETDAT	6582	GETMBR	630E
GETSD 	624F	GPLOP 	6314	GPLOP2	633C	GR00  	60D4	GR2580	6196
GR2581	61AD	GR2582	61AF	GR410 	6171	GR550 	6152	GR580 	6128
GR581 	6132	GR582 	6134	GR80  	60F8	GR81  	610A	GR90  	6262
GR91  	6271	ILOP1 	61D2	ILOP2 	61E5	ILOP3 	61FF	ILOP4 	622D
INCHA 	FBB8	INEND 	662F	INIT  	604D	INPBUF	6956	INSCT 	659C
ISTT  	60BA	LD1   	6412	LD2   	641A	LD3   	6432	LD4   	643D
LD5   	6449	LD51  	6457	LD52  	645F	LD53  	6467	LD6   	6473
LDFILE	63F4	LDLOP 	6407	MAIN  	6029	MCMD0 	67E9	MCMD41	6807
MCMD55	67FF	MCMD58	67F7	MCMD8 	67F0	MCMD9 	6810	MEN1  	6066
MEN2  	606E	MEN3  	6076	MEN4  	607E	MEN5  	6085	MEN6  	608D
MEN7  	6095	MEN8  	609D	MEN9  	60A5	MENU  	604F	MERR  	68DF
MSBPB 	6917	MSCL2 	6932	MSDIR 	6929	MSERR 	68F6	MSFAT 	6920
MSINFL	6942	MSINIT	68C3	MSMENU1	6817	MSMENU2	6859	MSOFS 	6905
MSSCT 	6895	MSSD0 	68A9	MSSD1 	68B5	MSWROK	689D	OKEND 	62DC
OUTCHA	FBBB	PBCTL 	FD9F	PBDAT 	FD9E	PSEND 	66D4	PSLOP 	66C9
PSTRNG	66C7	RD1   	6525	RD1SCT	650D	RD2   	652C	RD3   	653C
RESDAT	6007	RPT41 	613D	RWBUF 	6E00	SC01  	60CB	SC2581	618E
SC551 	614A	SC581 	6120	SC80  	60F0	SC91  	625A	SCLOP1	6291
SCLOP2	62A4	SCLOP3	62B7	SCLOP4	62CA	SCMD0 	60C3	SCMD258	6181
SCMD55	613D	SCMD58	6113	SCMD8 	60E3	SCTBPB	6009	SCTCLT	6015
SCTDIR	6011	SCTFAT	600D	SCTN0 	6003	SCTN1 	6004	SCTN2 	6005
SCTN3 	6006	SCTPCL	6019	SD1   	61C3	SDERR 	62D6	SDHC  	6008
SDINIT	60AD	SDRD  	62DD	SDW1  	64B8	SDW2  	64C3	SDWR1 	649A
SDWRT 	648A	SELOP 	6326	SETCKH	65E0	SETCKL	65D7	SETSCT	65A4
SETSNO	6320	SFLOP 	663C	SFT1  	65B2	SKP1  	6211	SKP2  	6246
SNDD1 	656D	SNDDAT	6566	SNDDT1	64E4	START 	6000	STTADR	6000
VN    	6002	WFSIZ 	601D	WK1   	6025	WK2   	6027	WMDY  	601A




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