2023年5月20日土曜日

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



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

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

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


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


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

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

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

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

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

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




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


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

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

vardec関数の仕様

function関数の仕様

statement関数の仕様


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


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

/***********************************************************************
 ****																****
 ****	c_dec.c	Micro C Compiler declaration procedure file	    ****
 ****																****
 ***********************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "c_mcc.h"

/***************************************************************
 *		vardec()		変数宣言の処理
 *			戻り値:	なし
 *			引数:		なし
 ***************************************************************/
void vardec(void)
{
	do {
		getsym();
		if (sym != IDENT)
			puterr("Variable ID expected.");
		getsym();
		if (sym != LBRCKT) {	/* 単純変数 */
			enter(VAR_SMPL);
			gen(VAR_SMPL, lblcnt++);
		}
		else {					/* 配列変数 */
			getsym();
			if (isdigit(sym) != 0)
				puterr("Number expected.");
			enter(VAR_ARY);
			gen(VAR_ARY, lblcnt++);
			
			getsym();
			if (sym != RBRCKT)
				puterr("']' expected.");
			getsym();
		}
	} while(sym == COMMA);
	
	if (sym != SEMICOL)
		puterr("';' expected.");
	getsym();
}

/***************************************************************
 *		function()		関数処理
 *			戻り値:	なし
 *			引数:		なし
 ***************************************************************/
void function(void)
{
	int i, mflag;
	int j;
	
	source_f();
	if ((i = position()) < 0) {
		label(lblcnt++, fp);
//		enter(FUNCID);
		enter(UNDEFID);
	}
	else {
		if (strcmp(id, "main") == 0) {		/* if "main" */
			j = 0;
			while (strcmp(idtbl[j].name, id) != 0 && j <= idcnt) {
				j++;
			}
			if (j < idcnt) {				/* already exist */
				if (idtbl[j].kind != UNDEFID) {
					puterr("Symbol redeclarated.");
				}
				else {
					mflag = ON;
					label(0, fp);
//					enter(BLTFUNC);
					idtbl[j].kind = BLTFUNC;
					idtbl[j].addr = j;
				}
			}
		}
		else if (idtbl[i].kind == UNDEFID) {
			label(idtbl[i].addr, fp);
//			enter(FUNCID);
			idtbl[i].kind = FUNCID;
//			idtbl[i].addr = lblcnt;
		}
		else
			puterr("Symbol redeclarated.");
	}
	
	getsym();
	if (sym == LBRACE) {
//		i = 0;
//		while (strcmp(id, idtbl[i].name) != 0 && i < idcnt)
//			i++;
//		label(idtbl[i].addr, fp);
		getsym();
		while (sym != RBRACE) {
			statement();
			if (sym == EOFSYM)
				puterr("'}' expected.");
		}
//			if (strcmp(id, "main") == 0 && mflag == ON) {	/* if "main" */
			if (mflag == ON) {	/* if "main" */
				gen(JUMP, 1);
				mflag = OFF;
			} else
				gen(RET, DUMY);
//		}
	}
	else
		puterr("'{' expected.");
	
	getsym();
}

/***************************************************************
 *		statement()		文処理
 *			戻り値:	なし
 *			引数:		なし
 ***************************************************************/
void statement(void)
{
	switch (sym) {
		case IDENT:
					assign();
					break;
		case IFSYM:
					if_proc();
					break;
		case WHILESYM:
					while_proc();
					break;
		case DOSYM:
					do_while();
					break;
		case CALLSYM:
					call_proc();
					break;
		case INPUTSYM:
					input_proc();
					break;
		case PRINTSYM:
					print_proc();
					break;
		case PRTLNSYM:
					print_proc();
					gen(NEW_LINE, 0);
					break;
		case LBRACE:
					lbrace();
					break;
		case SEMICOL:
					getsym();
					break;
		default:
			puterr("statement expected.");
	}
}



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

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

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

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

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

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

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

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

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

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




2023年5月19日金曜日

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

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


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


前回と同じ画像です

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


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

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


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

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

Label	address
ABLOP 	69D3	ACMD41	6F56	AD1   	6DF8	AD2   	6E09	AD3   	6E13
AD4   	6E19	ADD0  	6C3E	ADD1  	6C4C	ADD2  	6C54	ADD3  	6C5C
ADD40H	6C3C	ADD42 	6DF2	ADX0  	6C2D	ADX1  	6C33	ADX2  	6C37
ADX3  	6C3B	APLUSB	6A07	ASC2BIN	6896	ASC411	6218	ASCMD41	620B
BASADP	0033	BASAEP	0035	BASEXP	605D	BI21  	6D4F	BI22  	6D55
BUSY  	6BA5	CALCHC	6D15	CALCSD	6D0A	CALLOP	6A3D	CEND  	66D0
CKRS  	6B9B	CL1   	6D9F	CLEND 	6DAF	CLLOP 	6DAA	CLOP  	6D7D
CLRDIR	6821	CLSTH 	6048	CLSTL 	604A	CMD0  	6F2C	CMD1  	6F32
CMD17 	6F38	CMD24 	6F3E	CMD55 	6F50	CMD58 	6F4A	CMD8  	6F44
CMD9  	6F5C	CMPEND	66EC	CMPFN 	66D1	CMPLOP	66D9	CNT   	604C
CNV1  	68E6	CNV2  	68F2	CNVBUF	607F	CNVINT	6631	CNVLOP	6631
CNVSUB	68DE	CR    	000D	CSRON 	FBF7	CVBEND	6DEC	CVBIN 	6DDA
CVERR 	6DEF	CVT1  	6DB8	CVTLEN	6067	DB2   	6E86	DB2ASC	6E77
DBLOP 	6E7D	DCLOP1	6EED	DELMK 	00E5	DIRENT	601F	DIRGET	698A
DIROFS	605B	DLOP1 	696C	DPGNO 	605A	DSEND 	6EDE	DSLOP1	6EAD
DSLOP2	6EC6	DSPB1 	6CA1	DSPB2 	6CA3	DSPB3 	6CB4	DSPBI0	6D3B
DSPBI2	6D5F	DSPBIN	6D35	DSPBPB	63E2	DSPBUF	6C97	DSPC1 	6473
DSPCKE	6433	DSPCLS	6EE3	DSPDIR	6406	DSPED 	6989	DSPEND	64A9
DSPFAT	63F4	DSPFL0	6412	DSPFL1	6423	DSPFL2	643D	DSPFL3	643F
DSPFL4	644E	DSPFL5	6491	DSPFL6	649D	DSPMBR	638E	DSPSDDAT	62FE
DSPSIZ	6E92	DSPYMD	6E33	DSS1  	6EA0	DSS12 	6EB6	DSS13 	6EBB
DSS14 	6EC4	DSS2  	6ECF	DSS21 	6ED2	DSS3  	6ED6	DYMD1 	6E45
DYMD2 	6E54	EEND  	6DD9	EREND0	6DD2	EREND1	6DD4	ESC   	001B
EXIST 	694B	EXSTFL	6065	FILBUF	6083	FILL  	6C24	FILOP 	6C26
FILSIZ	6046	FIXPTR	C730	FMDAT 	02FA	FNAME 	604F	FNIN0 	6EFD
FNMIN 	6EF6	GET1  	6399	GET2  	639B	GET8CH	6D79	GETBPB	63C9
GETD1 	6CD5	GETDAT	6CD1	GETFDT	66EE	GETMBR	63AC	GR00  	6185
GR2580	6245	GR2581	625C	GR2582	625E	GR410 	6220	GR550 	6201
GR580 	61D7	GR581 	61E1	GR582 	61E3	GR80  	61A7	GR81  	61B9
GR90  	6311	GR91  	631D	GTBLOP	63D4	GTF1  	670D	GTF2  	6710
ILOP1 	6281	INCHA 	FBB8	INCX4 	6C2D	INEND 	6D8B	INIT  	60C7
INL10 	6647	INL11 	666B	INL12 	66B2	INL2  	6677	INLOP 	6638
INOUTC	6F12	INPBUF	6077	INPFLDAT	687C	INSCT 	6CEB	ISTT  	616B
KILEND	67B8	KILFILE	6764	KILSUB	677D	KL1   	67A2	KL2   	67B0
LD1   	6740	LD10  	65AC	LD2   	6754	LD3   	64CF	LD41  	64F4
LD5   	650D	LD8   	654F	LD80  	6594	LD81  	6598	LD82  	65A1
LD9   	65AA	LDE0  	65CF	LDE1  	65D5	LDEND 	65BC	LDFILE	64AA
LDFL0 	671C	LDFL1 	6728	LDFL5 	674C	LDFLE 	6763	LDLOP 	651D
LDNEND	65D9	LEND  	6F2B	LF    	000A	LINBUF	043D	LININ 	6F19
LININP	D807	LININT	FBF1	LINLOP	6F21	LINO1 	004B	LINO2 	033A
MAIN  	60A3	MATCH 	66E6	MCADP 	605F	MCAEP 	6061	MCEXP 	6063
MCFLG 	604D	MCMD0 	6F62	MCMD41	6F80	MCMD55	6F78	MCMD58	6F70
MCMD8 	6F69	MCMD9 	6F89	MEM2ED	6626	MEMSET	65E1	MEMSET2	6611
MENU  	60CA	MENU1 	60E4	MENU2 	60ED	MENU3 	60F6	MENU4 	60FF
MENU5 	6108	MENU6 	6110	MENU7 	6118	MERR  	707B	MKF1  	69A9
MKF2  	69AD	MKFLDT	6990	MM21  	6621	MS0   	65F8	MS1   	65FC
MS3   	660B	MSBPB 	70AB	MSCL2 	70C6	MSDIR 	70BD	MSERR 	708C
MSEXST	716F	MSFAT 	70B4	MSINFN	70D6	MSINIT	7064	MSKILL	715C
MSLDED	7116	MSLDNG	70FE	MSLOP 	65FE	MSMCAS	71A5	MSMCOF	718C
MSMENU1	6F90	MSMENU2	6FE9	MSMSV 	70E6	MSNOFL	7131	MSNXTP	713F
MSOFS 	709B	MSOVR 	7157	MSSCT 	7046	MSSD0 	704E	MSSD1 	7058
MSWTED	7123	MSWTNG	710A	NOEXST	694E	NOFEND	67C6	NOTM  	66EA
OPMEN10	614F	OPMEN6	612F	OPMEN7	6137	OPMEN8	613F	OPMEN9	6147
OPMENU	6120	OUTCHA	FBBB	OUTSPC	6D73	PBCTL 	FD9F	PBDAT 	FD9E
PCRLF 	6D68	PSEND 	6E30	PSLOP 	6E25	PSTRNG	6E23	RD1   	6C74
RD1SCT	6C61	RD2   	6C7B	RD3   	6C8B	RDLINO	9162	RDSCT 	637B
RDTOP 	6069	RESDAT	6008	RPT41 	61EC	RWBUF 	5E00	SC01  	617C
SC2581	623D	SC551 	61F9	SC581 	61CF	SC80  	619F	SC91  	6309
SCMD0 	6174	SCMD258	6230	SCMD55	61EC	SCMD58	61C2	SCMD8 	6192
SCTBPB	600A	SCTCLT	601A	SCTDIR	6012	SCTDSV	6016	SCTFAT	600E
SCTN0 	6004	SCTN1 	6005	SCTN2 	6006	SCTN3 	6007	SCTPCL	601E
SD1   	6272	SDERR 	6157	SDHC  	6009	SDINIT	615E	SDW1  	6B67
SDW2  	6B6F	SETCKH	6D2C	SETCKL	6D23	SETCL 	6936	SETFNM	6805
SETSCT	6CF4	SETSNO	63BC	SETX  	6925	SFATED	6941	SFLOP 	6D98
SKP1  	62B8	SKP2  	62F5	SNDD1 	6CBC	SNDDAT	6CB5	SNDDT1	6B8A
SPC   	0020	SRC0  	6905	SRC00 	6942	SRCDIR	6951	SRCDLM	6889
SRCFAT	68F9	SRCFL0	6960	SRCFL1	6963	SRCFL5	697E	SRCLOP	690E
SRDLM1	688B	SRLOP1	68A7	SRLOP2	68BF	START 	6000	STDATE	69CA
STTADR	6000	SVTOP 	606B	TPGFLG	604E	TRANS 	6C19	TRLOP 	6C1B
TXTADR	2000	TXTBUF	033C	VN    	6003	WFSIZ 	6042	WK0   	6075
WK1   	606D	WK2   	606F	WK3   	6071	WK4   	6073	WMDY  	603F
WR2   	6A78	WR3   	6AA2	WR4   	6AD8	WR5   	6ADA	WR6   	6ADC
WRB0  	67CD	WRB1  	67EB	WRBEND	6804	WRBFILE	67B9	WRDLOP	6BC3
WRDSET	6B47	WRDSKP	6BC8	WREND 	6AE7	WRF1  	6BFC	WRF2  	6BFF
WRF3  	6C15	WRFL1 	6812	WRFL11	681C	WRFL2 	6820	WRFLP2	680D
WRLOP 	6A88	WRM1  	6849	WRMEND	687B	WRMFILE	682F	WRS01 	6B1E
WRS1  	6B3F	WRS2  	6B27	WRS21 	6B30	WRS211	6B30	WRS3  	6B3E
WRSUB 	6AEE	WRTDIR	6BB0	WRTF0 	6A25	WRTF1 	6A2A	WRTF2 	6A2D
WRTF3 	6A54	WRTF4 	6A56	WRTFAT	6BDD	WRTFIL	6A19	WRTSD 	6B50
WRTSD1	6B53	WSPFL0	6BBB	WWCLOP	6AF8	

<-temp -1="" 008d="" 0093="" 00b4="" 00b6="" 00ce="" 011a="" 011d="" 0126="" 0129="" 012b="" 0133="" 01="" 0200="" 02="" 03="" 04="" 05="" 06="" 08="" 0:sd="" 0f="" 108e="" 10be="" 12="" 16="" 1774="" 1775="" 1776="" 1777="" 1778="" 1779="" 1780="" 1781="" 1782="" 1783="" 1784="" 1785="" 1786="" 1787="" 1788="" 1789="" 1790="" 1791="" 1792="" 1793="" 1794="" 1795="" 1796="" 1797="" 1798="" 1799="" 17="" 1800="" 1801="" 1802="" 1803="" 1804="" 1805="" 1806="" 1807="" 1808="" 1809="" 1810="" 1811="" 1812="" 1813="" 1814="" 1815="" 1816="" 1817="" 1818="" 1819="" 1820="" 1821="" 1822="" 1823="" 1824="" 1825="" 1826="" 1827="" 1828="" 1829="" 1830="" 1831="" 1832="" 1833="" 1834="" 1835="" 1836="" 1837="" 1838="" 1839="" 1840="" 1841="" 1842="" 1843="" 1844="" 1845="" 1846="" 1847="" 1848="" 1849="" 1850="" 1851="" 1852="" 1853="" 1854="" 1855="" 1856="" 1857="" 1858="" 1859="" 1860="" 1861="" 1862="" 1863="" 1864="" 1865="" 1866="" 1867="" 1868="" 1869="" 1870="" 1871="" 1872="" 1873="" 1874="" 1875="" 1876="" 1877="" 1878="" 1879="" 1880="" 1881="" 1882="" 1883="" 1884="" 1885="" 1886="" 1887="" 1888="" 1889="" 1890="" 1891="" 1892="" 1893="" 1894="" 1895="" 1896="" 1897="" 1898="" 1899="" 1900="" 1901="" 1902="" 1903="" 1904="" 1905="" 1906="" 1907="" 1908="" 1909="" 1910="" 1911="" 1912="" 1913="" 1914="" 1915="" 1916="" 1917="" 1918="" 1919="" 1920="" 1921="" 1922="" 1923="" 1924="" 1925="" 1926="" 1927="" 1928="" 1929="" 1930="" 1931="" 1932="" 1933="" 1934="" 1935="" 1936="" 1937="" 1938="" 1939="" 1940="" 1941="" 1942="" 1943="" 1944="" 1945="" 1946="" 1947="" 1948="" 1949="" 1950="" 1951="" 1952="" 1953="" 1954="" 1955="" 1956="" 1957="" 1958="" 1959="" 1960="" 1961="" 1962="" 1963="" 1964="" 1965="" 1966="" 1967="" 1968="" 1969="" 1970="" 1971="" 1972="" 1973="" 1974="" 1975="" 1976="" 1977="" 1978="" 1979="" 1980="" 1981="" 1982="" 1983="" 1984="" 1985="" 1986="" 1987="" 1988="" 1989="" 1990="" 1991="" 1992="" 1993="" 1994="" 1995="" 1996="" 1997="" 1998="" 1="" 1a="" 1e="" 1f="" 20="" 24="" 26="" 27="" 2="" 31="" 34="" 35="" 36="" 39="" 3="" 3a="" 3d="" 3f="" 40="" 44="" 48="" 4c="" 50="" 54="" 5a="" 5c="" 5e00="" 5e="" 6004="" 6008="" 6009="" 600e="" 6012="" 6016="" 601f="" 605a="" 605b="" 60="" 68="" 6b81="" 6b85="" 6b87="" 6b8a="" 6b8c="" 6b8f="" 6b91="" 6b93="" 6b95="" 6b98="" 6b9b="" 6b9e="" 6ba1="" 6ba3="" 6ba5="" 6ba8="" 6bab="" 6bad="" 6baf="" 6bb0="" 6bb3="" 6bb7="" 6bb9="" 6bbb="" 6bbe="" 6bc1="" 6bc3="" 6bc5="" 6bc6="" 6bc8="" 6bcb="" 6bce="" 6bd1="" 6bd5="" 6bd7="" 6bd9="" 6bdc="" 6bdd="" 6be0="" 6be3="" 6be5="" 6be7="" 6be9="" 6bec="" 6bef="" 6bf1="" 6bf3="" 6bf5="" 6bf8="" 6bfa="" 6bfc="" 6bff="" 6c00="" 6c02="" 6c04="" 6c06="" 6c08="" 6c0a="" 6c0d="" 6c0f="" 6c11="" 6c13="" 6c15="" 6c18="" 6c19="" 6c1b="" 6c1d="" 6c1f="" 6c20="" 6c22="" 6c24="" 6c26="" 6c28="" 6c29="" 6c2b="" 6c2d="" 6c2f="" 6c31="" 6c33="" 6c35="" 6c37="" 6c39="" 6c3b="" 6c3c="" 6c3e="" 6c40="" 6c42="" 6c44="" 6c46="" 6c48="" 6c4a="" 6c4c="" 6c4e="" 6c50="" 6c52="" 6c54="" 6c56="" 6c58="" 6c5a="" 6c5c="" 6c5d="" 6c5f="" 6c61="" 6c64="" 6c68="" 6c6a="" 6c6c="" 6c6f="" 6c71="" 6c74="" 6c76="" 6c78="" 6c79="" 6c7b="" 6c7d="" 6c80="" 6c82="" 6c84="" 6c87="" 6c8b="" 6c8d="" 6c90="" 6c92="" 6c94="" 6c96="" 6c97="" 6c9a="" 6c9d="" 6c="" 6ca1="" 6ca3="" 6ca5="" 6ca8="" 6caa="" 6cac="" 6cad="" 6caf="" 6cb2="" 6cb4="" 6cb5="" 6cb7="" 6cba="" 6cbc="" 6cbe="" 6cc0="" 6cc2="" 6cc5="" 6cc7="" 6cc9="" 6cca="" 6ccc="" 6ccd="" 6ccf="" 6cd1="" 6cd3="" 6cd5="" 6cd7="" 6cd8="" 6cd9="" 6cda="" 6cdc="" 6cdf="" 6ce0="" 6f38="" 6f39="" 70="" 7d="" 7f="" 80="" 81="" 84="" 86="" 88="" 89="" 8a="" 8b="" 8d="" 8e="" 96="" a0="" a6="" a7="" a:fill="" a="" abx="" ad="" add0="" add1="" add2="" add3="" add40h="" adda="" addb="" adr="" adx0="" adx1="" adx2="" adx3="" anda="" b1-="" b6="" b7="" b:cnt="" bcc="" beq="" bne="" bra="" bsr="" buf="" busy="" c6="" cb="" ckrs="" clr="" cluster="" cmd="" cmpa="" copy="" crch="" crcl="" cs:b0="L" d="" data="" decb="" df="" dir="" dirofs="" disp="" dpgno="" dspb1="" dspb2="" dspb3="" dspbin="" dspbuf="" e5="" ec="" ed="" equ="" exg="" f4="" f5="" f6="" f7="" f7cd="" f7f1="" f9="" fb="" fc="" fd9e="" fe="" ff3b="" ff77="" ff="" fill="" filop="" get="" getd1="" getdat="" inc="" incx4="" lbsr="" lda="" ldb="" ldd="" ldx="" ldy="" leay="" lsla="" lsra="" miso:b1="H(for" no="" nop="" of="" ora="" param="" pbdat="" pcrlf="" pia="" pshs="" puls="" rd1="" rd1sct="" rd2="" rd3="" read="" resdat="" response="" return="" rts="" save="" sct="" sd:2="" sdhc:4="" sdhc="" send="" setckh="" setckl="" setsno="" sndd1="" snddat="" snddt1="" src="" sta="" temp="" tfr="" to="" token="" trans="" trlop="" tst="" until="" wait="" wrdlop="" wrdskp="" wrf1="" wrf2="" wrf3="" wrtdir="" wrtfat="" wrtsd1="" wspfl0="" x40h="" y:dst="" y="">


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

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