;:ts=8
	far	code
	far	data
;/*  TT8 specific includes  */
;
;#include        <TT8.h>                 /* Tattletale Model 8 Definitions */
;#include        <tat332.h>              /* 68332 Tattletale (7,8) Hardware Definitions */
;#include        <sim332.h>              /* 68332 System Integration Module Definitions */
;#include        <qsm332.h>              /* 68332 Queued Serial Module Definitions */
;#include        <tpu332.h>              /* 68332 Time Processing Unit Definitions */
;#include        <dio332.h>              /* 68332 Digital I/O Port Pin Definitions */
;#include        <tt8pic.h>              /* Model 8 PIC Parallel Slave Port Definitions */
;#include        <tt8lib.h>              /* definitions and prototypes for Model 8 library */
;
;/*  general C includes  */
;#include        <stdio.h>
;#include        <stdlib.h>
;#include		<userio.h>
;#include		<string.h>
;#include        <ctype.h>
;#include		<time.h>
;
;//  includes for the disk routines
;#include		<pcdisk.h>
;#include		"logtime.h"
	dseg
	ds	0
_LATEST_LOGGER_TIME:
	ds.b	0
	dc.l	$ffffffff
	dc.l	$0000
	cseg
	dseg
	ds	0
_EARLIEST_LOGGER_TIME:
	ds.b	0
	dc.l	$0000
	dc.l	$0000
	cseg
;#include		"commands.h"
;#include		"text_log.h"
;#include		"misc.h"
;#include		"memcheck.h"
;
;int dos_show_directory (char* args);
;void all_done (void);
;int pc_seedir (char *path);
;
;const long DISK_FREQ = (long)8e6;
	ds	0
	xdef	_DISK_FREQ
_DISK_FREQ:
	dc.l	$7a1200
	cseg
;char wd[32];
;
;int main (void)  {
# 35 'dformat.c' 677097256
| .2
	xdef	_main
_main:
	link	a6,#.3
	movem.l	d2/d3/d4/d5/d6/d7/a3,-(sp)
;	char drive, answer, path[3], dir_path[12];
;	int delay, result, fd;
;	long free;
;
;	InitTT8(NO_WATCHDOG, TT8_TPU);  //  setup Model 8 for running C programs
~ drive d4 "c"
~ answer d5 "c"
~ path -3 "[3c"
~ dir_path -15 "[12c"
~ delay d6 "i"
~ result d7 "i"
~ fd a3 "i"
^^^^^	move.w	#-1,-(sp)
	move.w	#-1,-(sp)
	jsr	_InitTT8
;	SimSetFSys(8e6);				//  currently run at 6 MHz
^	pea	8000000
	jsr	_SimSetFSys
;	SerSetBaud(9600,0);				//  reset baud after every clock change
^	clr.l	-(sp)
	pea	9600
	jsr	_SerSetBaud
;
;	//  go through the inits so that the time will be correct
;	log_power_on_init ();           //  inits the general text logging routines
^^^	jsr	_log_power_on_init
;	init_IDE ();					//  inits hardware for the IDE disk access
^	jsr	_init_IDE
;	logger_time_power_on_init ();	//  inits the logger time keeping routines
^	jsr	_logger_time_power_on_init
;
;	do  {
^^	lea	16(sp),sp
.10003
;		//  don't confuse accidentally queued characters with the answer
;		while (SerByteAvail())
^^.10004
	jsr	_SerByteAvail
	tst.w	d0
	beq	.10005
;			SerGetByte ();
^	jsr	_SerGetByte
	bra	.10004
.10005
;		printf ("Which drive are you considering formatting? ");
^	pea	.1+0
	jsr	_printf
;		fflush (stdout);
^	pea	__iob+22
	jsr	_fflush
;		drive = SerGetByte ();
^	jsr	_SerGetByte
	move.b	d0,d4
;		drive = toupper (drive);
^	move.b	d4,d0
	ext.w	d0
	move.w	d0,-(sp)
	jsr	_toupper
	move.b	d0,d4
;		printf ("%c\n", drive);
^	move.b	d4,d0
	ext.w	d0
	move.w	d0,-(sp)
	pea	.1+45
	jsr	_printf
;	}  while ((drive != 'A') && (drive != 'B') && (drive != 'C') && (drive != 'D'));
^	lea	16(sp),sp
.10001
	cmp.b	#65,d4
	beq	.4
	cmp.b	#66,d4
	beq	.4
	cmp.b	#67,d4
	beq	.4
	cmp.b	#68,d4
	bne	.10003
.4
.10002
;	path[0] = drive;
^	move.b	d4,-3(a6)
;	path[1] = ':';
^	move.b	#58,-2(a6)
;	path[2] = '\0';
^	clr.b	-1(a6)
;	sprintf (dir_path, "%s\\*", path);
^	pea	-3(a6)
	pea	.1+49
	pea	-15(a6)
	jsr	_sprintf
;	
;	disk_power_on (path);
^^	pea	-3(a6)
	jsr	_disk_power_on
;	if (!pc_setdfltdrvno((int)(path[0]-'A')))  {
^	move.b	-3(a6),d0
	ext.w	d0
	sub.w	#65,d0
	move.w	d0,-(sp)
	jsr	_pc_setdfltdrvno
	tst.w	d0
	lea	18(sp),sp
	bne	.10006
;		printf("Unable to select drive '%s'\n", path);
^	pea	-3(a6)
	pea	.1+54
	jsr	_printf
;        return(0);
^	move.l	#0,d0
	add.w	#8,sp
.5
	movem.l	(sp)+,d2/d3/d4/d5/d6/d7/a3
	unlk	a6
	rts
;    }
^;	printf ("This program will format drive '%s'.\n", path);
.10006
^	pea	-3(a6)
	pea	.1+83
	jsr	_printf
;	printf ("The root directory for '%s' currently holds the folowing files:\n", path);
^	pea	-3(a6)
	pea	.1+121
	jsr	_printf
;	dos_show_directory (dir_path);
^	pea	-15(a6)
	jsr	_dos_show_directory
;	
;	//  don't confuse accidentally queued characters with the answer
;	while (SerByteAvail())
^^^	lea	20(sp),sp
.10007
	jsr	_SerByteAvail
	tst.w	d0
	beq	.10008
;		SerGetByte ();
^	jsr	_SerGetByte
	bra	.10007
.10008
;	printf ("Do you still want to format this drive? ");
^	pea	.1+186
	jsr	_printf
;	fflush (stdout);
^	pea	__iob+22
	jsr	_fflush
;	answer = SerGetByte ();
^	jsr	_SerGetByte
	move.b	d0,d5
;	printf ("%c\n", answer);
^	move.b	d5,d0
	ext.w	d0
	move.w	d0,-(sp)
	pea	.1+227
	jsr	_printf
;	if ((answer != 'Y') && (answer != 'y'))  {
^	cmp.b	#89,d5
	lea	14(sp),sp
	beq	.10009
	cmp.b	#121,d5
	beq	.10009
;		printf ("Aborting program.\n");
^	pea	.1+231
	jsr	_printf
;		//  never returns
;		all_done ();
^^	jsr	_all_done
;	}
^;	
;	//  don't confuse accidentally queued characters with the answer
;	while (SerByteAvail())
	add.w	#4,sp
.10009
^^^.10010
	jsr	_SerByteAvail
	tst.w	d0
	beq	.10011
;		SerGetByte ();
^	jsr	_SerGetByte
	bra	.10010
.10011
;	printf ("No, really, are you sure you want to format drive '%s'? ", path);
^	pea	-3(a6)
	pea	.1+250
	jsr	_printf
;	fflush (stdout);
^	pea	__iob+22
	jsr	_fflush
;	answer = SerGetByte ();
^	jsr	_SerGetByte
	move.b	d0,d5
;	if ((answer != 'Y') && (answer != 'y'))  {
^	cmp.b	#89,d5
	lea	12(sp),sp
	beq	.10012
	cmp.b	#121,d5
	beq	.10012
;		printf ("Aborting program.\n");
^	pea	.1+307
	jsr	_printf
;		//  never returns
;		all_done ();
^^	jsr	_all_done
;	}
^;	printf ("%c\n", answer);
	add.w	#4,sp
.10012
^	move.b	d5,d0
	ext.w	d0
	move.w	d0,-(sp)
	pea	.1+326
	jsr	_printf
;	
;	//  don't confuse accidentally queued characters with the answer
;	while (SerByteAvail())
^^^	add.w	#6,sp
.10013
	jsr	_SerByteAvail
	tst.w	d0
	beq	.10014
;		SerGetByte ();
^	jsr	_SerGetByte
	bra	.10013
.10014
;	delay = 10;
^	move.l	#10,d6
;	printf ("Unless you hit a key, ");
^	pea	.1+330
	jsr	_printf
;	printf ("drive '%s' will be formated in %d seconds.", path, delay);
^	move.w	d6,-(sp)
	pea	-3(a6)
	pea	.1+353
	jsr	_printf
;	fflush (stdout);
^	pea	__iob+22
	jsr	_fflush
;	StopWatchStart ();
^	jsr	_StopWatchStart
;	while (delay > 0)  {
^	lea	18(sp),sp
.10015
	tst.w	d6
	ble	.10016
;		while (StopWatchTime () < 1e6)
^.10017
	jsr	_StopWatchTime
	jsr	.Pflu#
	move.l	#$00000000,d3
	move.l	#$412e8480,d2
	jsr	.Pcmp#
	bge	.10018
;			{;}
^	bra	.10017
.10018
;		StopWatchStart ();
^	jsr	_StopWatchStart
;		delay--;
^	sub.w	#1,d6
;		printf (".");
^	pea	.1+396
	jsr	_printf
;		fflush (stdout);
^	pea	__iob+22
	jsr	_fflush
;		if (SerByteAvail())
^;			break;
	jsr	_SerByteAvail
	tst.w	d0
	add.w	#8,sp
	bne	.10016
;	}
^^	bra	.10015
.10016
;	printf ("\n");
^	pea	.1+398
	jsr	_printf
;	fflush (stdout);
^	pea	__iob+22
	jsr	_fflush
;	if (SerByteAvail())  {
^	jsr	_SerByteAvail
	tst.w	d0
	add.w	#8,sp
	beq	.10019
;		printf ("Aborting program.  Drive not formatted.\n");
^	pea	.1+400
	jsr	_printf
;		//  never returns
;		all_done ();
^^	jsr	_all_done
;	}
^;
;	printf ("Formatting drive '%s'\n", path);
	add.w	#4,sp
.10019
^^	pea	-3(a6)
	pea	.1+441
	jsr	_printf
;	result = pc_format (path);
^	pea	-3(a6)
	jsr	_pc_format
	move.w	d0,d7
;	if (result == 0)  {
^	tst.w	d7
	lea	12(sp),sp
	bne	.10020
;		printf ("Format of drive '%s' failed.\n", path);
^	pea	-3(a6)
	pea	.1+464
	jsr	_printf
;		printf ("The error number was %i => %s\n", get_errno (), get_errno_string (-1));
^	move.w	#-1,-(sp)
	jsr	_get_errno_string
	add.w	#2,sp
	move.l	d0,-(sp)
	jsr	_get_errno
	move.w	d0,-(sp)
	pea	.1+494
	jsr	_printf
;		disk_power_off (path);
^	pea	-3(a6)
	jsr	_disk_power_off
;		all_done ();
^	jsr	_all_done
;	}
^;	
;	//  format doesn't work correctly, and we need to do a dir to set known_free_blocks and
;	//  the create a delete a file to force a write to the disk
;	dos_show_directory (dir_path);
	lea	22(sp),sp
.10020
^^^^	pea	-15(a6)
	jsr	_dos_show_directory
;
;	fd = po_open ("test", (PO_BINARY|PO_CREAT|PO_WRONLY), PS_IWRITE);
^^	move.w	#256,-(sp)
	move.w	#33025,-(sp)
	pea	.1+525
	jsr	_po_open
	move.w	d0,a3
;	if (fd < 0)  {
^	move.w	a3,d0
	lea	12(sp),sp
	bge	.10021
;		printf ("Format appeared to work, but the file create failed.\n");
^	pea	.1+530
	jsr	_printf
;		printf ("The error number was %i => %s\n", get_errno (), get_errno_string (-1));
^	move.w	#-1,-(sp)
	jsr	_get_errno_string
	add.w	#2,sp
	move.l	d0,-(sp)
	jsr	_get_errno
	move.w	d0,-(sp)
	pea	.1+584
	jsr	_printf
;		disk_power_off (path);
^	pea	-3(a6)
	jsr	_disk_power_off
;		all_done ();
^	jsr	_all_done
;	}
^;
;	if ((int)po_write (fd, (byte*)path, sizeof(path)) != sizeof (path))  {
	lea	18(sp),sp
.10021
^^	move.w	#3,-(sp)
	pea	-3(a6)
	move.w	a3,-(sp)
	jsr	_po_write
	cmp.w	#3,d0
	add.w	#8,sp
	beq	.10022
;		printf ("Format appeared to work, but could not write to test file.\n");
^	pea	.1+615
	jsr	_printf
;		printf ("The error number was %i => %s\n", get_errno (), get_errno_string (-1));
^	move.w	#-1,-(sp)
	jsr	_get_errno_string
	add.w	#2,sp
	move.l	d0,-(sp)
	jsr	_get_errno
	move.w	d0,-(sp)
	pea	.1+675
	jsr	_printf
;		disk_power_off (path);
^	pea	-3(a6)
	jsr	_disk_power_off
;		all_done ();
^	jsr	_all_done
;	}	
^;	po_close (fd);
	lea	18(sp),sp
.10022
^	move.w	a3,-(sp)
	jsr	_po_close
;
;	result = pc_unlink ("test");
^^	pea	.1+706
	jsr	_pc_unlink
	move.w	d0,d7
;	if (!result)  {
^	tst.w	d7
	add.w	#6,sp
	bne	.10023
;		printf ("Format appeared to work, but could not delete test file.\n");
^	pea	.1+711
	jsr	_printf
;		printf ("The error number was %i => %s\n", get_errno (), get_errno_string (-1));
^	move.w	#-1,-(sp)
	jsr	_get_errno_string
	add.w	#2,sp
	move.l	d0,-(sp)
	jsr	_get_errno
	move.w	d0,-(sp)
	pea	.1+769
	jsr	_printf
;		disk_power_off (path);
^	pea	-3(a6)
	jsr	_disk_power_off
;		all_done ();
^	jsr	_all_done
;	}	
^;		
;	printf ("Drive '%s' has now been formatted.\n", path);	
	lea	18(sp),sp
.10023
^^	pea	-3(a6)
	pea	.1+800
	jsr	_printf
;	disk_power_off (path);
^	pea	-3(a6)
	jsr	_disk_power_off
;	all_done ();	
^	jsr	_all_done
;}
^	lea	12(sp),sp
	bra	.5
.2
.3	equ	-16
.1
	dc.b	87,104,105,99,104,32,100,114,105,118,101,32,97,114,101
	dc.b	32,121,111,117,32,99,111,110,115,105,100,101,114,105,110
	dc.b	103,32,102,111,114,109,97,116,116,105,110,103,63,32,0
	dc.b	37,99,10,0,37,115,92,42,0,85,110,97,98,108,101
	dc.b	32,116,111,32,115,101,108,101,99,116,32,100,114,105,118
	dc.b	101,32,39,37,115,39,10,0,84,104,105,115,32,112,114
	dc.b	111,103,114,97,109,32,119,105,108,108,32,102,111,114,109
	dc.b	97,116,32,100,114,105,118,101,32,39,37,115,39,46,10
	dc.b	0,84,104,101,32,114,111,111,116,32,100,105,114,101,99
	dc.b	116,111,114,121,32,102,111,114,32,39,37,115,39,32,99
	dc.b	117,114,114,101,110,116,108,121,32,104,111,108,100,115,32
	dc.b	116,104,101,32,102,111,108,111,119,105,110,103,32,102,105
	dc.b	108,101,115,58,10,0,68,111,32,121,111,117,32,115,116
	dc.b	105,108,108,32,119,97,110,116,32,116,111,32,102,111,114
	dc.b	109,97,116,32,116,104,105,115,32,100,114,105,118,101,63
	dc.b	32,0,37,99,10,0,65,98,111,114,116,105,110,103,32
	dc.b	112,114,111,103,114,97,109,46,10,0,78,111,44,32,114
	dc.b	101,97,108,108,121,44,32,97,114,101,32,121,111,117,32
	dc.b	115,117,114,101,32,121,111,117,32,119,97,110,116,32,116
	dc.b	111,32,102,111,114,109,97,116,32,100,114,105,118,101,32
	dc.b	39,37,115,39,63,32,0,65,98,111,114,116,105,110,103
	dc.b	32,112,114,111,103,114,97,109,46,10,0,37,99,10,0
	dc.b	85,110,108,101,115,115,32,121,111,117,32,104,105,116,32
	dc.b	97,32,107,101,121,44,32,0,100,114,105,118,101,32,39
	dc.b	37,115,39,32,119,105,108,108,32,98,101,32,102,111,114
	dc.b	109,97,116,101,100,32,105,110,32,37,100,32,115,101,99
	dc.b	111,110,100,115,46,0,46,0,10,0,65,98,111,114,116
	dc.b	105,110,103,32,112,114,111,103,114,97,109,46,32,32,68
	dc.b	114,105,118,101,32,110,111,116,32,102,111,114,109,97,116
	dc.b	116,101,100,46,10,0,70,111,114,109,97,116,116,105,110
	dc.b	103,32,100,114,105,118,101,32,39,37,115,39,10,0,70
	dc.b	111,114,109,97,116,32,111,102,32,100,114,105,118,101,32
	dc.b	39,37,115,39,32,102,97,105,108,101,100,46,10,0,84
	dc.b	104,101,32,101,114,114,111,114,32,110,117,109,98,101,114
	dc.b	32,119,97,115,32,37,105,32,61,62,32,37,115,10,0
	dc.b	116,101,115,116,0,70,111,114,109,97,116,32,97,112,112
	dc.b	101,97,114,101,100,32,116,111,32,119,111,114,107,44,32
	dc.b	98,117,116,32,116,104,101,32,102,105,108,101,32,99,114
	dc.b	101,97,116,101,32,102,97,105,108,101,100,46,10,0,84
	dc.b	104,101,32,101,114,114,111,114,32,110,117,109,98,101,114
	dc.b	32,119,97,115,32,37,105,32,61,62,32,37,115,10,0
	dc.b	70,111,114,109,97,116,32,97,112,112,101,97,114,101,100
	dc.b	32,116,111,32,119,111,114,107,44,32,98,117,116,32,99
	dc.b	111,117,108,100,32,110,111,116,32,119,114,105,116,101,32
	dc.b	116,111,32,116,101,115,116,32,102,105,108,101,46,10,0
	dc.b	84,104,101,32,101,114,114,111,114,32,110,117,109,98,101
	dc.b	114,32,119,97,115,32,37,105,32,61,62,32,37,115,10
	dc.b	0,116,101,115,116,0,70,111,114,109,97,116,32,97,112
	dc.b	112,101,97,114,101,100,32,116,111,32,119,111,114,107,44
	dc.b	32,98,117,116,32,99,111,117,108,100,32,110,111,116,32
	dc.b	100,101,108,101,116,101,32,116,101,115,116,32,102,105,108
	dc.b	101,46,10,0,84,104,101,32,101,114,114,111,114,32,110
	dc.b	117,109,98,101,114,32,119,97,115,32,37,105,32,61,62
	dc.b	32,37,115,10,0,68,114,105,118,101,32,39,37,115,39
	dc.b	32,104,97,115,32,110,111,119,32,98,101,101,110,32,102
	dc.b	111,114,109,97,116,116,101,100,46,10,0
	ds	0
;
;
;
;void all_done (void)  {
# 169
| .7
	xdef	_all_done
_all_done:
;	printf ("The following text was queued for the log file:\n");
^	pea	.6+0
	jsr	_printf
;	printf ("****************************************\n");
^	pea	.6+49
	jsr	_printf
;	log_print_all_unsaved (NULL);	
^	clr.l	-(sp)
	jsr	_log_print_all_unsaved
;	printf ("****************************************\n");
^	pea	.6+91
	jsr	_printf
;	printf ("That's all folks.\n");
^	pea	.6+133
	jsr	_printf
;	ResetToMon ();
^;			ResetToMon
	dc.w	$13fc
	dc.w	$c1
	dc.w	$e0
	dc.w	$0
	dc.w	$4e70
;	
;	printf ("The code can never execute this statement.\n");
^^	pea	.6+152
	jsr	_printf
;	printf ("If it does, there is a bug.\n");
^	pea	.6+196
	jsr	_printf
;	exit (-1);
^	move.w	#-1,-(sp)
	jsr	_exit
;}
^	lea	30(sp),sp
.8
	rts
.7
.6
	dc.b	84,104,101,32,102,111,108,108,111,119,105,110,103,32,116
	dc.b	101,120,116,32,119,97,115,32,113,117,101,117,101,100,32
	dc.b	102,111,114,32,116,104,101,32,108,111,103,32,102,105,108
	dc.b	101,58,10,0,42,42,42,42,42,42,42,42,42,42,42
	dc.b	42,42,42,42,42,42,42,42,42,42,42,42,42,42,42
	dc.b	42,42,42,42,42,42,42,42,42,42,42,42,42,42,10
	dc.b	0,42,42,42,42,42,42,42,42,42,42,42,42,42,42
	dc.b	42,42,42,42,42,42,42,42,42,42,42,42,42,42,42
	dc.b	42,42,42,42,42,42,42,42,42,42,42,10,0,84,104
	dc.b	97,116,39,115,32,97,108,108,32,102,111,108,107,115,46
	dc.b	10,0,84,104,101,32,99,111,100,101,32,99,97,110,32
	dc.b	110,101,118,101,114,32,101,120,101,99,117,116,101,32,116
	dc.b	104,105,115,32,115,116,97,116,101,109,101,110,116,46,10
	dc.b	0,73,102,32,105,116,32,100,111,101,115,44,32,116,104
	dc.b	101,114,101,32,105,115,32,97,32,98,117,103,46,10,0
	ds	0
;
;
;
;
;int dos_show_directory (char* args)  {
# 185
| .10
	xdef	_dos_show_directory
_dos_show_directory:
	link	a6,#.11
;	char path[128];
;	int pc_seedir(char *);
;	
;//	printf ("dos show dir\n");	
;	//  if user provides a full path, including the partition, use it
;	strcpy (path, args);
~ path -128 "[128c"
~~ args 8 "#c"
^^^^^^	lea	-128(a6),a0
	move.l	8(a6),a1
.12	move.b	(a1)+,(a0)+
	bne.s	.12
;	printf ("Directory of %s:\n", path);	
^	pea	-128(a6)
	pea	.9+0
	jsr	_printf
;	
;	/* Now do the dir */
;	pc_seedir(&path[0]);
^^^	pea	-128(a6)
	jsr	_pc_seedir
;
;	//  Release all resources used by the disk the disk
;//	pc_dskclose(&path[0]);
;	ide_close((int)(path[0]-'A'));									/*__fn__*/
^^^^	move.b	-128(a6),d0
	ext.w	d0
	sub.w	#65,d0
	move.w	d0,-(sp)
	jsr	_ide_close
;//	pc_memory_close();
;
;	return 0;
^^^	move.l	#0,d0
	lea	14(sp),sp
.13
	unlk	a6
	rts
;}	
^.10
.11	equ	-128
.9
	dc.b	68,105,114,101,99,116,111,114,121,32,111,102,32,37,115
	dc.b	58,10,0
	ds	0
;
;
;
;
;//  List directory, and return number of matching file
;int pc_seedir(char *path)                                          /*__fn__*/
;{
# 209
^| .15
	xdef	_pc_seedir
_pc_seedir:
	link	a6,#.16
	movem.l	d2/d3/d4/d5/d6/d7/a3/a4,-(sp)
	move.l	8(a6),a4
;    char *dirstr;
;    int fcount = 0;
;    DSTAT statobj;
;    int year;
;	unsigned long blocks_free, blocks_total;
;	unsigned long nfree, Mbytes, kbytes, fraction;;
~ dirstr a3 "#c"
~ fcount d3 "i"
~ 'dstat'
~ 1 14 578
~ fname 0 "[9c"
~ fext 9 "[4c"
~ lfname 13 "[256C"
~ filename 269 "[15c"
~ fattribute 284 "C"
~ ftime 286 "I"
~ fdate 288 "I"
~ fsize 290 "L"
~ driveno 294 "i"
~ pname 296 "[9C"
~ pext 305 "[4C"
~ path 309 "[260c"
~ pobj 570 "#v"
~ pmom 574 "#v"
~ statobj -578 ":" 1
~ year d2 "i"
~ blocks_free -582 "L"
~ blocks_total -586 "L"
~ nfree d7 "L"
~ Mbytes d5 "L"
~ kbytes d4 "L"
~ fraction d6 "L"
~~ path a4 "#c"
	move.l	#0,d3
^^^^^^;
;    /* Get the first match   */
;//	printf ("pc_gfirst\n");    
;    if (pc_gfirst(&statobj, path))
^^^^;    {
	move.l	a4,-(sp)
	pea	-578(a6)
	jsr	_pc_gfirst
	tst.w	d0
	add.w	#8,sp
	beq	.10024
^;//	printf ("outside while true\n");    
;        while (TRUE)
^^.10025
;        {
^;//	printf ("inside while true\n");        
;            fcount++;
^^	add.w	#1,d3
;            if (statobj.fattribute & AVOLUME)
^;                 dirstr = "<VOL>";
	move.b	-294(a6),d0
	and.b	#8,d0
	beq	.10027
^	lea	.14,a3
;            else if (statobj.fattribute & ADIRENT)
	bra	.10028
.10027
^;                 dirstr = "<DIR>";
	move.b	-294(a6),d0
	and.b	#16,d0
	beq	.10029
^	lea	.14+6,a3
;            else
	bra	.10030
.10029
;                 dirstr = "     ";
^^	lea	.14+12,a3
.10030
.10028
;
;            printf("%-8s.%-3s", &(statobj.fname[0]), &(statobj.fext[0]));
^^	pea	-569(a6)
	pea	-578(a6)
	pea	.14+18
	jsr	_printf
;            printf(" %7ld %5s", statobj.fsize, dirstr);
^	move.l	a3,-(sp)
	move.l	-288(a6),-(sp)
	pea	.14+28
	jsr	_printf
;            printf(" %02d",(statobj.fdate >> 5 ) & 0xf); /* Month */
^	move.w	-290(a6),d0
	lsr.w	#5,d0
	and.w	#15,d0
	move.w	d0,-(sp)
	pea	.14+38
	jsr	_printf
;            printf("-%02d",(statobj.fdate & 0x1f));      /* Day */
^	move.w	-290(a6),d0
	and.w	#31,d0
	move.w	d0,-(sp)
	pea	.14+44
	jsr	_printf
;            year = 80 +(statobj.fdate >> 9) & 0xff;
^	move.w	-290(a6),d0
	move.l	#9,d1
	lsr.w	d1,d0
	add.w	#80,d0
	move.w	d0,d2
	and.w	#255,d2
;            if (year >= 100)
^;            	year -= 100;
	cmp.w	#100,d2
	lea	36(sp),sp
	blt	.10031
^	sub.w	#100,d2
;            printf("-%02d", year); /* Year */
.10031
^	move.w	d2,-(sp)
	pea	.14+50
	jsr	_printf
;            printf(" %02d",(statobj.ftime >> 11) & 0x1f);    /* Hour */
^	move.w	-292(a6),d0
	move.l	#11,d1
	lsr.w	d1,d0
	and.w	#31,d0
	move.w	d0,-(sp)
	pea	.14+56
	jsr	_printf
;            printf(":%02d",(statobj.ftime >> 5) & 0x3f);    /* Minute */
^	move.w	-292(a6),d0
	lsr.w	#5,d0
	and.w	#63,d0
	move.w	d0,-(sp)
	pea	.14+62
	jsr	_printf
;#if (VFAT)
;            printf(" - %s\n", statobj.lfname);
^^	pea	-565(a6)
	pea	.14+68
	jsr	_printf
;#else
;            printf("  \n");
;#endif
;             /* Get the next   */
;             if (!pc_gnext(&statobj))
^^^^^;                 break;
	pea	-578(a6)
	jsr	_pc_gnext
	tst.w	d0
	lea	30(sp),sp
	beq	.10026
;        }
^^	bra	.10025
.10026
;        /* Call gdone to free up internal resources used by statobj   */
;        pc_gdone(&statobj);
^^	pea	-578(a6)
	jsr	_pc_gdone
;    }
^;
;	//  And print the bytes remaining */
;//	printf ("pc_free\n");	
;	blocks_total = blocks_free = -1;
	add.w	#4,sp
.10024
^^^^	move.l	#-1,-582(a6)
	move.l	#-1,-586(a6)
;	nfree = pc_free (&path[0], &blocks_total, &blocks_free);
^	pea	-582(a6)
	pea	-586(a6)
	move.l	a4,-(sp)
	jsr	_pc_free
	move.l	d0,d7
;	if (blocks_total != -1)  {
^	cmp.l	#-1,-586(a6)
	lea	12(sp),sp
	beq	.10032
;		//  Nfree is wrong for large drives because a long isn't enough to hold the number
;		//  of bytes.  Report in k instead
;		kbytes = (blocks_free /2);
^^^	move.l	-582(a6),d4
	lsr.l	#1,d4
;		Mbytes = kbytes / 1024;
^	move.l	d4,d5
	move.l	#10,d0
	lsr.l	d0,d5
;		kbytes = (kbytes % 1024L);
^	and.l	#1023,d4
;		fraction = (1000*kbytes)/1024L;
^	move.l	d4,d0
	move.l	#1000,d1
	jsr	.mulu#
	move.l	d0,d6
	move.l	#10,d0
	lsr.l	d0,d6
;		printf ("       %-6d File(s)   %lu.%03lu MBytes free\n", fcount, Mbytes, fraction);
^	move.l	d6,-(sp)
	move.l	d5,-(sp)
	move.w	d3,-(sp)
	pea	.14+75
	jsr	_printf
;	}  else
^	lea	14(sp),sp
	bra	.10033
.10032
;		printf ("The disk did not respond\n");	
^	pea	.14+120
	jsr	_printf
	add.w	#4,sp
.10033
;
;    return(fcount);
^^	move.w	d3,d0
.17
	movem.l	(sp)+,d2/d3/d4/d5/d6/d7/a3/a4
	unlk	a6
	rts
;}
^.15
.16	equ	-586
.14
	dc.b	60,86,79,76,62,0,60,68,73,82,62,0,32,32,32
	dc.b	32,32,0,37,45,56,115,46,37,45,51,115,0,32,37
	dc.b	55,108,100,32,37,53,115,0,32,37,48,50,100,0,45
	dc.b	37,48,50,100,0,45,37,48,50,100,0,32,37,48,50
	dc.b	100,0,58,37,48,50,100,0,32,45,32,37,115,10,0
	dc.b	32,32,32,32,32,32,32,37,45,54,100,32,70,105,108
	dc.b	101,40,115,41,32,32,32,37,108,117,46,37,48,51,108
	dc.b	117,32,77,66,121,116,101,115,32,102,114,101,101,10,0
	dc.b	84,104,101,32,100,105,115,107,32,100,105,100,32,110,111
	dc.b	116,32,114,101,115,112,111,110,100,10,0
	ds	0
;
;
;
;	
;//  This subroutine spoofs a routine which is used by the normal logger program,
;//  but which is unused for the setup.  It is easier to resolve the external reference
;//  here than it is to include the science logger and all its required code
;//
;void sci_logger_setup_partition (void)  {
# 282
| .19
	xdef	_sci_logger_setup_partition
_sci_logger_setup_partition:
;	return;
^.20
	rts
;}	
^.19
;	
;
# 285
|
~ _sci_logger_setup_partition * "(v"
~ _main * "(i"
~ _wd * "[32c"
~ _DISK_FREQ * "l"
~ _pc_seedir * "(i"
~ _all_done * "(v"
~ _dos_show_directory * "(i"
~ _get_errno_string * "(#c"
~ _log_print_all_unsaved * "(v"
~ 'text_log'
~ ''
~ 3 2 8
~ secs 0 "L"
~ ticks 4 "l"
~ 2 5 1068
~ filename 0 "[32c"
~ data 32 "[1024c"
~ n_data 1056 "i"
~ n_filled 1058 "i"
~ oldest_data 1060 ":" 3
~ _log_power_on_init * "(i"
~ _logger_time_power_on_init * "(v"
~ EARLIEST_LOGGER_TIME _EARLIEST_LOGGER_TIME ":" 3
~ LATEST_LOGGER_TIME _LATEST_LOGGER_TIME ":" 3
~ _get_errno * "(i"
~ 'system_user'
~ 4 4 46
~ task_handle 0 "i"
~ rtfs_errno 2 "i"
~ dfltdrv 4 "i"
~ lcwd 6 "[10#v"
~ PSYSTEM_USER "#:" 4
~ SYSTEM_USER ":" 4
~ 'finode'
~ 'ddrive'
~ 'fatswap'
~ 7 7 300
~ n_to_swap 0 "I"
~ n_blocks_used 2 "I"
~ n_blocks_total 4 "I"
~ pdirty 6 "[32C"
~ block_0_is_valid 38 "i"
~ data_map 40 "[256C"
~ data_array 296 "#C"
~ 6 37 484
~ opencount 0 "i"
~ volume_serialno 2 "L"
~ volume_label 6 "[14C"
~ drv_serial_number 20 "[62C"
~ partition_base 82 "L"
~ partition_size 86 "L"
~ partition_type 90 "C"
~ current_power_count 92 "L"
~ bytespcluster 96 "I"
~ byte_into_cl_mask 98 "L"
~ fasize 102 "I"
~ rootblock 104 "L"
~ firstclblock 108 "L"
~ driveno 112 "I"
~ maxfindex 114 "L"
~ fatblock 118 "L"
~ secproot 122 "I"
~ fat_is_dirty 124 "i"
~ fat_swap_structure 126 ":" 7
~ bootaddr 426 "L"
~ oemname 430 "[9c"
~ bytspsector 440 "I"
~ secpalloc 442 "C"
~ log2_secpalloc 444 "I"
~ secreserved 446 "I"
~ numfats 448 "C"
~ numroot 450 "I"
~ numsecs 452 "L"
~ mediadesc 456 "C"
~ secpfat 458 "L"
~ secptrk 462 "I"
~ numhead 464 "I"
~ numhide 466 "L"
~ free_contig_base 470 "L"
~ free_contig_pointer 474 "L"
~ known_free_clusters 478 "l"
~ infosec 482 "I"
~ 'segdesc'
~ 8 4 14
~ nsegs 0 "i"
~ segindex 2 "i"
~ ncksum 4 "C"
~ segblock 6 "[2L"
~ 5 18 72
~ fname 0 "[8C"
~ fext 8 "[3C"
~ fattribute 11 "C"
~ resarea 12 "[8C"
~ fclusterhi 20 "I"
~ ftime 22 "I"
~ fdate 24 "I"
~ fcluster 26 "I"
~ fsize 28 "L"
~ alloced_size 32 "L"
~ opencount 36 "i"
~ openflags 38 "i"
~ my_drive 40 "#:" 6
~ my_block 44 "L"
~ my_index 48 "i"
~ pnext 50 "#:" 5
~ pprev 54 "#:" 5
~ s 58 ":" 8
~ 'drobj'
~ 'dirblk'
~ 10 3 10
~ my_frstblock 0 "L"
~ my_block 4 "L"
~ my_index 8 "i"
~ 'blkbuff'
~ 11 7 532
~ pnext 0 "#:" 11
~ lru 4 "L"
~ pdrive 8 "#:" 6
~ blockno 12 "L"
~ use_count 16 "i"
~ pad_to_4_align 18 "i"
~ data 20 "[512C"
~ 9 5 24
~ pdrive 0 "#:" 6
~ finode 4 "#:" 5
~ blkinfo 8 ":" 10
~ isroot 18 "i"
~ pblkbuff 20 "#:" 11
~ 'datestr'
~ 12 2 4
~ date 0 "I"
~ time 2 "I"
~ 'pc_file'
~ 13 8 24
~ pobj 0 "#:" 9
~ flag 4 "I"
~ fptr 6 "L"
~ fptr_cluster 10 "L"
~ fptr_block 14 "L"
~ needs_flush 18 "i"
~ is_free 20 "i"
~ at_eof 22 "i"
~ 'block_alloc'
~ 14 1 512
~ core 0 "[512C"
~ 'ptable'
~ 'ptable_entry'
~ 16 8 16
~ boot 0 "C"
~ s_head 1 "C"
~ s_cyl 2 "I"
~ p_typ 4 "C"
~ e_head 5 "C"
~ e_cyl 6 "I"
~ r_sec 8 "L"
~ p_size 12 "L"
~ 15 2 66
~ ents 0 "[4:" 16
~ signature 64 "I"
~ PTABLE ":" 15
~ PTABLE_ENTRY ":" 16
~ 'format_dec_tree'
~ 17 3 8
~ sec_p_alloc 0 "I"
~ ents_p_root 2 "I"
~ n_blocks 4 "L"
~ FORMAT_DEC_TREE ":" 17
~ PC_FILE ":" 13
~ DROBJ ":" 9
~ BLKBUFF ":" 11
~ DIRBLK ":" 10
~ FINODE ":" 5
~ SEGDESC ":" 8
~ 'lfninode'
~ 18 8 32
~ lfnorder 0 "C"
~ lfname1 1 "[10C"
~ lfnattribute 11 "C"
~ lfnres 12 "C"
~ lfncksum 13 "C"
~ lfname2 14 "[12C"
~ lfncluster 26 "I"
~ lfname3 28 "[4C"
~ LFNINODE ":" 18
~ 'dosinode'
~ 19 9 32
~ fname 0 "[8C"
~ fext 8 "[3C"
~ fattribute 11 "C"
~ resarea 12 "[8C"
~ fclusterhi 20 "I"
~ ftime 22 "I"
~ fdate 24 "I"
~ fcluster 26 "I"
~ fsize 28 "L"
~ DOSINODE ":" 19
~ DDRIVE ":" 6
~ FATSWAP ":" 7
~ BLOCK_ALLOC ":" 14
~ CLUSTERTYPE "L"
~ 'ide_control'
~ 'ide_drive_desc'
~ ''
~ 'atapi_packet_desc'
~ 'transfer_length'
~ 24 2 2
~ msb 0 "C"
~ lsb 1 "C"
~ 23 8 14
~ op_code 0 "C"
~ lun 1 "C"
~ lba 2 "L"
~ reserved1 6 "C"
~ transfer_length 8 ":" 24
~ reserved2 10 "C"
~ reserved3 11 "C"
~ reserved4 12 "C"
~ 'atapi_mode_sense_packet_desc'
~ 25 11 14
~ op_code 0 "C"
~ lun 1 "C"
~ pc_code_page 2 "C"
~ reserved1 3 "C"
~ reserved2 4 "C"
~ reserved3 5 "C"
~ reserved4 6 "C"
~ transfer_length 8 ":" 24
~ reserved5 10 "C"
~ reserved6 11 "C"
~ reserved7 12 "C"
~ 'atapi_format_unit_packet_desc'
~ 26 5 12
~ op_code 0 "C"
~ defect_list_format 1 "C"
~ track_number 2 "C"
~ interleave 3 "[2C"
~ reserved 5 "[7C"
~ 'atapi_old_format_unit_packet_de'
~ 27 7 12
~ op_code 0 "C"
~ reserved1 1 "C"
~ medium 2 "C"
~ reserved2 3 "[3C"
~ control_byte 6 "C"
~ track_number 7 "C"
~ reserved3 8 "[4C"
~ 'atapi_start_stop_packet_desc'
~ 28 6 12
~ op_code 0 "C"
~ lun 1 "C"
~ reserved1 2 "C"
~ reserved2 3 "C"
~ eject 4 "C"
~ reserved 5 "[7C"
~ 22 5 14
~ generic 0 ":" 23
~ mode_sense 0 ":" 25
~ format 0 ":" 26
~ old_format 0 ":" 27
~ start_stop 0 ":" 28
~ 21 17 48
~ num_heads 0 "C"
~ sec_p_track 1 "C"
~ sec_p_cyl 2 "I"
~ num_cylinders 4 "I"
~ max_multiple 6 "C"
~ supports_lba 8 "i"
~ total_lba 10 "L"
~ enable_mapping 14 "i"
~ media_changed 16 "i"
~ volume_start 18 "L"
~ volume_end 22 "L"
~ protocol 26 "C"
~ atapi_packet 28 ":" 22
~ atapi_packet_size 42 "I"
~ media_descriptor 44 "C"
~ medium_type_code 45 "C"
~ allocation_unit 46 "C"
~ 20 29 138
~ opencount 0 "i"
~ register_file_address 2 "#I"
~ interrupt_number 6 "i"
~ controller_number 8 "i"
~ command_complete 10 "i"
~ error_code 12 "I"
~ timer 14 "I"
~ block_size 16 "C"
~ sectors_remaining 18 "I"
~ user_address 20 "#C"
~ drive 24 "[2:" 21
~ vo_write_precomp 120 "C"
~ vo_sector_count 121 "C"
~ vo_sector_number 122 "C"
~ vo_cyl_low 123 "C"
~ vo_cyl_high 124 "C"
~ vo_drive_head 125 "C"
~ vo_feature 126 "C"
~ vo_command 127 "C"
~ vo_dig_out 128 "C"
~ vi_error 129 "C"
~ vi_sector_count 130 "C"
~ vi_sector_number 131 "C"
~ vi_cyl_low 132 "C"
~ vi_cyl_high 133 "C"
~ vi_drive_head 134 "C"
~ vi_status 135 "C"
~ vi_alt_status 136 "C"
~ vi_drive_addr 137 "C"
~ _ide_close * "(i"
~ PIDE_CONTROLLER "#:" 20
~ IDE_CONTROLLER ":" 20
~ IDE_DRIVE_DESC ":" 21
~ ATAPI_PACKET ":" 22
~ ATAPI_PACKET_DESC ":" 23
~ ATAPI_OLD_FORMAT_UNIT_PACKET_DE ":" 27
~ ATAPI_START_STOP_UNIT_PACKET_DE ":" 28
~ ATAPI_FORMAT_UNIT_PACKET_DESC ":" 26
~ ATAPI_MODE_SENSE_PACKET_DESC ":" 25
~ 'Himawari_format_descriptor'
~ 'Himawari_defect_list_header'
~ 30 4 4
~ reserved 0 "C"
~ control_byte 1 "C"
~ length_msb 2 "C"
~ length_lsb 3 "C"
~ 'Himawari_formattable_capacity_d'
~ 31 3 8
~ number_of_blocks 0 "[4C"
~ reserved 4 "C"
~ block_length 5 "[3C"
~ 29 2 12
~ dlheader 0 ":" 30
~ capacity_descriptor 4 ":" 31
~ HIMAWARI_FORMAT_DESCRIPTOR ":" 29
~ HIMAWARI_FORMATTABLE_CAPACITY_D ":" 31
~ HIMAWARI_DEFECT_LIST_HEADER ":" 30
~ 'himawari_flexible_disk_page'
~ 32 17 32
~ page_code 0 "C"
~ page_length 1 "C"
~ transfer_rate_msb 2 "C"
~ transfer_rate_lsb 3 "C"
~ number_of_heads 4 "C"
~ sectors_per_track 5 "C"
~ bytes_per_cylinder_msb 6 "C"
~ bytes_per_cylinder_lsb 7 "C"
~ number_of_cylinders_msb 8 "C"
~ number_of_cylinders_lsb 9 "C"
~ reserved1 10 "[10C"
~ motor_off_delay 20 "C"
~ swp_swpp 21 "C"
~ reserved2 22 "[6C"
~ medium_rotation_rate_msb 28 "C"
~ medium_rotation_rate_lsb 29 "C"
~ reserved3 30 "[2C"
~ HIMAWARI_FLEXIBLE_DISK_PAGE ":" 32
~ TRANSFER_LENGTH ":" 24
~ BLOCKT "L"
~ _disk_power_off * "(v"
~ _disk_power_on * "(v"
~ _init_IDE * "(v"
~ _pc_setdfltdrvno * "(i"
~ _pc_gdone * "(v"
~ _pc_gnext * "(i"
~ _pc_gfirst * "(i"
~ _pc_free * "(l"
~ _pc_unlink * "(i"
~ _po_close * "(i"
~ _po_write * "(i"
~ _po_open * "(i"
~ _pc_format * "(i"
~ 'fmtparms'
~ 33 15 52
~ oemname 0 "[9c"
~ secpalloc 9 "C"
~ secreserved 10 "I"
~ numfats 12 "C"
~ secpfat 14 "L"
~ fmttype 18 "C"
~ numhide 20 "L"
~ numroot 24 "I"
~ mediadesc 26 "C"
~ secptrk 28 "I"
~ numhead 30 "I"
~ numcyl 32 "I"
~ physical_drive_no 34 "C"
~ binary_volume_label 36 "L"
~ text_volume_label 40 "[12c"
~ FMTPARMS ":" 33
~ 'freelistinfo'
~ 34 2 8
~ cluster 0 "L"
~ nclusters 4 "l"
~ FREELISTINFO ":" 34
~ 'fileseginfo'
~ 35 2 8
~ block 0 "l"
~ nblocks 4 "l"
~ FILESEGINFO ":" 35
~ 'stat'
~ 36 12 38
~ st_dev 0 "i"
~ st_ino 2 "i"
~ st_mode 4 "L"
~ st_nlink 8 "i"
~ st_rdev 10 "i"
~ st_size 12 "L"
~ st_atime 16 ":" 12
~ st_mtime 20 ":" 12
~ st_ctime 24 ":" 12
~ st_blksize 28 "l"
~ st_blocks 32 "l"
~ fattribute 36 "C"
~ STAT ":" 36
~ DSTAT ":" 1
~ DATESTR ":" 12
~ PCFD "i"
~ UNICODE "I"
~ IOADDRESS "#I"
~ PFCBYTE "#C"
~ PFCCHAR "#c"
~ PFVOID "#v"
~ PFCHAR "#c"
~ PFDWORD "#L"
~ PFLONG "#l"
~ PFWORD "#I"
~ PFINT "#i"
~ PFBYTE "#C"
~ BOOLEAN "i"
~ dword "L"
~ word "I"
~ byte "C"
~ _toupper * "(i"
~ ''
~ 37 2 8
~ quot 0 "l"
~ rem 4 "l"
~ ''
~ 38 2 4
~ quot 0 "i"
~ rem 2 "i"
~ _exit * "(v"
~ ldiv_t ":" 37
~ div_t ":" 38
~ '__stdio'
~ 39 8 22
~ _bp 0 "#C"
~ _bend 4 "#C"
~ _buff 8 "#C"
~ _flags 12 "I"
~ _unit 14 "c"
~ _bytbuf 15 "C"
~ _buflen 16 "L"
~ _tmpnum 20 "I"
~ _sprintf * "(i"
~ _printf * "(i"
~ _fflush * "(i"
~ __iob * "[0:" 39
~ FILE ":" 39
~ fpos_t "l"
~ va_list "#c"
~ ''
~ 40 13 46
~ libVersion 0 "l"
~ ramBase 4 "#c"
~ ramSize 8 "l"
~ ramWaits 12 "i"
~ flashBase 14 "#c"
~ flashSize 18 "l"
~ flashWaits 22 "i"
~ heapBot 24 "#v"
~ heapTop 28 "#v"
~ heapCur 32 "#v"
~ statusReg 36 "I"
~ vectorBase 38 "#v"
~ stackPtr 42 "#v"
~ infoAction "c"
~ TT8info ":" 40
~ _InitTT8 * "(v"
~ UeeErr "c"
~ _StopWatchTime * "(L"
~ _StopWatchStart * "(v"
~ _SimSetFSys * "(l"
~ time_tt ":" 3
~ _SerSetBaud * "(l"
~ _SerByteAvail * "(i"
~ _SerGetByte * "(i"
~ XmdmErr "c"
~ FlashErr "c"
~ ''
~ 41 4 24
~ eSR 0 "I"
~ ePC 2 "L"
~ vectofs 6 "I"
~ states 8 "[8I"
~ ''
~ 42 4 20
~ preamble 0 "[4I"
~ jump 8 "I"
~ target 10 "L"
~ postamble 14 "[3I"
~ ExcCFramePtr "#:" 42
~ ExcCFrame ":" 42
~ ExcStackFrame ":" 41
~ 'tm'
~ 43 10 20
~ tm_sec 0 "i"
~ tm_min 2 "i"
~ tm_hour 4 "i"
~ tm_mday 6 "i"
~ tm_mon 8 "i"
~ tm_year 10 "i"
~ tm_wday 12 "i"
~ tm_yday 14 "i"
~ tm_isdst 16 "i"
~ tm_hsec 18 "i"
~ time_t "L"
~ clock_t "L"
~ wchar_t "c"
~ ptrdiff_t "l"
~ size_t "L"
~ PSPErr "c"
~ _PRAM "[8I"
~ bool "c"
~ vfptr "#(v"
~ ptr "#c"
~ ulpv "#L"
~ ulong "L"
~ uspv "#I"
~ unsint "I"
~ ushort "I"
~ ucpv "#C"
~ uchar "C"
	xref	_get_errno_string
	xref	_log_print_all_unsaved
	xref	_log_power_on_init
	xref	_logger_time_power_on_init
	xref	_get_errno
	xref	_ide_close
	xref	_disk_power_off
	xref	_disk_power_on
	xref	_init_IDE
	xref	_pc_setdfltdrvno
	xref	_pc_gdone
	xref	_pc_gnext
	xref	_pc_gfirst
	xref	_pc_free
	xref	_pc_unlink
	xref	_po_close
	xref	_po_write
	xref	_po_open
	xref	_pc_format
	xref	_toupper
	xref	_exit
	xref	_sprintf
	xref	_printf
	xref	_fflush
	xref	_InitTT8
	xref	_StopWatchTime
	xref	_StopWatchStart
	xref	_SimSetFSys
	xref	_SerSetBaud
	xref	_SerByteAvail
	xref	_SerGetByte
	xref	.begin
	dseg
	global	_wd,32
	xref	__iob
	end
