Index: firmware/diskio_sectorrequest.c
===================================================================
--- firmware/diskio_sectorrequest.c	(revision 68)
+++ firmware/diskio_sectorrequest.c	(nonexistent)
@@ -1,141 +0,0 @@
-#include "diskio.h"
-
-#include "regs.h"
-
-void mmcReadCached(u32 sector);
-u32 n_actual_mmc_sector;
-unsigned char * mmc_sector_buffer;
-
-void mmcReadCached(u32 sector)
-{
-	//debug("mmcReadCached");
-	//plotnext(toatarichar(' '));
-	//plotnextnumber(sector);
-	//debug("\n");
-	if(sector==n_actual_mmc_sector) return;
-	//debug("mmcReadREAL");
-	//plotnext(toatarichar(' '));
-	//plotnextnumber(sector);
-	//debug("\n");
-
-	//u08 ret,retry;
-	//predtim nez nacte jiny, musi ulozit soucasny
-	// TODO mmcWriteCachedFlush();
-	//az ted nacte novy
-	//retry=0; //zkusi to maximalne 256x
-	/*do
-	{
-		ret = mmcRead(sector);	//vraci 0 kdyz ok
-		retry--;
-	} while (ret && retry);
-	while(ret); //a pokud se vubec nepovedlo, tady zustane zablokovany cely SDrive!
-*/
-
-	*zpu_out4 = (sector<<8)|0xa5;
-	while (*zpu_in4 != *zpu_out4)
-	{
-		// Wait until ready
-	}
-
-	n_actual_mmc_sector=sector;
-}
-
-
-/*-----------------------------------------------------------------------*/
-/* Initialize Disk Drive                                                 */
-/*-----------------------------------------------------------------------*/
-
-DSTATUS disk_initialize (void)
-{
-	DSTATUS stat;
-
-	n_actual_mmc_sector = 0xffffffff;
-	//do
-	//{
-	//	mmcInit();
-	//}
-	//while(mmcReset());	//dokud nenulove, tak smycka (return 0 => ok!)
-
-	//set_spi_clock_freq();
-
-	// no longer in ram (yet!), misuse will break us...
-	mmc_sector_buffer = (unsigned char *)0x8000;  // 512 bytes in the middle of memory space!
-
-	stat = RES_OK;
-
-	return stat;
-}
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Read Partial Sector                                                   */
-/*-----------------------------------------------------------------------*/
-
-DRESULT disk_readp (
-	BYTE* dest,			/* Pointer to the destination object */
-	DWORD sector,		/* Sector number (LBA) */
-	WORD sofs,			/* Offset in the sector */
-	WORD count			/* Byte count (bit15:destination) */
-)
-{
-	DRESULT res;
-
-	/*debug("readp:");
-	plotnextnumber(sector);
-	debug(" ");
-	plotnextnumber((int)dest);
-	debug(" ");
-	plotnextnumber(sofs);
-	debug(" ");
-	plotnextnumber(count);
-	debug(" ");
-	plotnextnumber(atari_sector_buffer);
-	debug(" ");
-	plotnextnumber(mmc_sector_buffer);
-	debug("\n");
-	*/
-	// Put your code here
-	mmcReadCached(sector);
-	for(;count>0;++sofs,--count)
-	{
-		unsigned char x = mmc_sector_buffer[sofs];
-		//printf("char:%02x loc:%d", x,sofs);
-		*dest++ = x;
-	}
-
-	res = RES_OK;
-
-	return res;
-}
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Write Partial Sector                                                  */
-/*-----------------------------------------------------------------------*/
-
-DRESULT disk_writep (const BYTE* buff, DWORD sc)
-{
-	DRESULT res;
-
-
-	if (!buff) {
-		if (sc) {
-
-			// Initiate write process
-
-		} else {
-
-			// Finalize write process
-
-		}
-	} else {
-
-		// Send data to the disk
-
-	}
-
-	return res;
-}
-
Index: firmware/Makefile
===================================================================
--- firmware/Makefile	(revision 68)
+++ firmware/Makefile	(revision 69)
@@ -18,12 +18,14 @@
 MINSTARTUP_SRC = mycrt0.s
 MINSTARTUP_OBJ = $(patsubst $(STARTUP_DIR)/%.s,$(BUILD_DIR)/%.o,$(MINSTARTUP_SRC))
 
-MAIN_PRJ = JustStartAtari
-MAIN_SRC = main.c regs.c freeze.c joystick.c fileutils.c fileselector.c atari_drive_emulator.c pokey/uart.c hexdump.c printf/printf.c fat/pff_file.c fat/pff.c common/utils.c sd_direct/diskio_mmc.c sd_direct/spi.c sd_direct/mmc.c
-#gcc -g -O0 -DLITTLE_ENDIAN test_drive.c atari_drive_emulator.c native/uart.c hexdump.c printf/printf.c fat/pff_file.c fat/pff.c common/utils.c native/diskio_image.c -I. -Iprintf -Ifat -Icommon
-#MAIN_SRC = stuff.c
-MAIN_OBJ = $(COMMON_OBJ) $(patsubst %.c,$(BUILD_DIR)/%.o,$(MAIN_SRC))
+MCC_PRJ = MCC216
+MCC_SRC = main.c regs.c freeze.c joystick.c fileutils.c fileselector.c atari_drive_emulator.c pokey/uart.c hexdump.c printf/printf.c fat/pff_file.c fat/pff.c common/utils.c sd_direct/diskio_mmc.c sd_direct/spi.c sd_direct/mmc.c mcc/dirs.c
+MCC_OBJ = $(patsubst %.c,$(BUILD_DIR)/%.o,$(MCC_SRC))
 
+MIST_PRJ = MIST
+MIST_SRC = main.c regs.c freeze.c joystick.c fileutils.c fileselector.c atari_drive_emulator.c pokey/uart.c hexdump.c printf/printf.c fat/pff_file.c fat/pff.c common/utils.c mist/diskio_sectorrequest.c mist/dirs.c
+MIST_OBJ = $(patsubst %.c,$(BUILD_DIR)/%.o,$(MIST_SRC))
+
 LINKMAP  = ./standalone_simple.ld
 
 
@@ -39,10 +41,17 @@
 
 
 # Our target.
-all: $(BUILD_DIR) $(MAIN_PRJ).bin $(MAIN_PRJ).rpt
+all: mcc mist
 
+install:
+	cd ../common/romgen && ./createall && cd ../../firmware
+
+mcc: $(BUILD_DIR) $(MCC_PRJ).bin $(MCC_PRJ).rpt
+
+mist: $(BUILD_DIR) $(MIST_PRJ).bin $(MIST_PRJ).rpt
+
 clean:
-	rm -f $(BUILD_DIR)/*.o *.hex *.elf *.map *.lst *.srec $(MAIN_PRJ).rom *~ */*.o *.bin
+	rm -f $(BUILD_DIR)/*.o *.hex *.elf *.map *.lst *.srec $(MIST_PRJ).rom $(MCC_PRJ).rom *~ */*.o *.bin
 
 
 # Convert ELF binary to bin file.
@@ -60,9 +69,12 @@
 
 # Link - this produces an ELF binary.
 
-$(MAIN_PRJ).elf: $(MINSTARTUP_OBJ) $(MAIN_OBJ)
+$(MCC_PRJ).elf: $(MINSTARTUP_OBJ) $(MCC_OBJ)
 	$(LD) $(LFLAGS) -T $(LINKMAP) -o $@ $+ $(LIBS)
 
+$(MIST_PRJ).elf: $(MINSTARTUP_OBJ) $(MIST_OBJ)
+	$(LD) $(LFLAGS) -T $(LINKMAP) -o $@ $+ $(LIBS)
+
 $(BUILD_DIR)/%.o: %.c Makefile
 	mkdir -p `dirname $@`
 	$(CC) $(CFLAGS)  -o $@ -c $<
Index: firmware/atari_drive_emulator.c
===================================================================
--- firmware/atari_drive_emulator.c	(revision 68)
+++ firmware/atari_drive_emulator.c	(revision 69)
@@ -286,6 +286,11 @@
 	//printf("appears valid\n");
 }
 
+struct SimpleFile * get_drive_status(int driveNumber)
+{
+	return drives[driveNumber];
+}
+
 void init_drive_emulator()
 {
 	int i;
Index: firmware/atari_drive_emulator.h
===================================================================
--- firmware/atari_drive_emulator.h	(revision 68)
+++ firmware/atari_drive_emulator.h	(revision 69)
@@ -21,5 +21,6 @@
 // For a read-only disk, just have no write function!
 struct SimpleFile;
 void set_drive_status(int driveNumber, struct SimpleFile * file);
+struct SimpleFile * get_drive_status(int driveNumber);
 void describe_disk(int driveNumber, char * buffer);
 
Index: firmware/fileselector.c
===================================================================
--- firmware/fileselector.c	(revision 68)
+++ firmware/fileselector.c	(revision 69)
@@ -7,6 +7,7 @@
 
 extern int debug_pos; // ARG!
 extern int debug_adjust; // ARG!
+extern char USER_DIR[];
 
 // TODO!
 #define MAX_PATH_LENGTH (9*5 + 8+3+1 + 1) 
@@ -34,7 +35,7 @@
 	char dir[MAX_PATH_LENGTH];
 	if (file_name(file)[0] == '\0')
 	{
-		strcpy(&dir[0],"/atari800/user");
+		strcpy(&dir[0],USER_DIR);
 	}
 	else
 	{
Index: firmware/main.c
===================================================================
--- firmware/main.c	(revision 68)
+++ firmware/main.c	(revision 69)
@@ -10,6 +10,8 @@
 
 #include "atari_drive_emulator.h"
 
+extern char ROM_DIR[];
+
 // FUNCTIONS in here
 // i) pff init - NOT USED EVERYWHERE
 // ii) file selector - kind of crap, no fine scrolling - NOT USED EVERYWHERE
@@ -94,11 +96,13 @@
 void
 reboot(int cold)
 {
-	set_reset_6502(1);
+	set_pause_6502(1);
 	if (cold)
 	{
 		clear_64k_ram();
 	}
+	set_reset_6502(1);
+	// Do nothing in here - this resets the memory controller!
 	set_reset_6502(0);
 	set_pause_6502(0);
 }
@@ -162,7 +166,7 @@
 // 0x410000-0x41FFFF (0xc10000 in zpu space) = directory cache - 64k
 // 0x420000-0x43FFFF (0xc20000 in zpu space) = freeze backup
 
-struct SimpleFile * files[5];
+struct SimpleFile * files[6];
 void loadromfile(struct SimpleFile * file, int size, void * ram_address)
 {
 	ram_address += 0x800000;
@@ -186,8 +190,93 @@
 	}
 }
 
+void loadosrom()
+{
+	if (file_size(files[5]) == 0x4000)
+	{
+		loadromfile(files[5],0x4000, (void *)0x704000);
+	}
+	else if (file_size(files[5]) ==0x2800)
+	{
+		loadromfile(files[5],0x2800, (void *)0x705800);
+	}
+}
+
 int main(void)
 {
+/*	disk_initialize();
+	{
+		char buffer[512];
+
+		freeze_init((void*)0xc20000); // 128k
+	
+		debug_pos = -1;
+		debug_adjust = 0;
+		baseaddr = (unsigned char volatile *)(40000 + atari_regbase);
+		set_pause_6502(1);
+		set_reset_6502(1);
+		set_reset_6502(0);
+		set_turbo_6502(1);
+		set_rom_select(1);
+		set_ram_select(0);
+	
+		init_printf(0, char_out);
+		reboot(1);
+	//	for (;;);
+		wait_us(5000000);
+
+		set_pause_6502(1);
+		freeze();
+		debug_pos = 0;	
+
+		printf("Hello world 3");
+		debug_pos = 40;
+		int i;
+		for (i=0;i!=512; ++i)
+		{
+			buffer[i] = i;
+		}
+		int volatile * x = (int volatile *)0x4000;
+		int volatile * y = (int volatile *)&buffer[0];
+		for (i=0;i!=128; ++i)
+		{
+			x[i] = y[i];
+		}
+		hexdump_pure(0x4000,8);
+		hexdump_pure(0x41f8,8);
+		debug_pos = 120;
+
+		printf(" Writing sector ");
+		n_actual_mmc_sector = 30;
+		disk_writeflush();
+		printf(" Wrote sector ");
+
+		for (i=0;i!=128; ++i)
+		{
+			x[i] = 0;
+		}
+		n_actual_mmc_sector = -1;
+		disk_readp(&buffer[0],30,0,512);
+		hexdump_pure(0x4000,8);
+		hexdump_pure(0x41f8,8);
+		debug_pos = 200;
+
+		disk_readp(&buffer[0],0x103,0,512);
+		hexdump_pure(0x4000,8);
+		hexdump_pure(0x41f8,8);
+		debug_pos = 280;
+
+		disk_readp(&buffer[0],0,0,512);
+		hexdump_pure(0x4000,8);
+		hexdump_pure(0x41f8,8);
+		debug_pos = 360;
+
+		printf("OK...");
+
+		//for (;;);
+		wait_us(10000000);
+	}*/
+
 /*	spiInit();
 	set_spi_clock_freq();
 	mmcReadLoop();*/
@@ -202,7 +291,7 @@
 	}*/
 
 	int i;
-	for (i=0; i!=5; ++i)
+	for (i=0; i!=6; ++i)
 	{
 		files[i] = (struct SimpleFile *)alloca(file_struct_size());
 		file_init(files[i]);
@@ -213,9 +302,11 @@
 	debug_pos = -1;
 	debug_adjust = 0;
 	baseaddr = (unsigned char volatile *)(40000 + atari_regbase);
+	set_pause_6502(1);
 	set_reset_6502(1);
+	set_reset_6502(0);
 	set_turbo_6502(1);
-	set_rom_select(2);
+	set_rom_select(1);
 	set_ram_select(2);
 
 	init_printf(0, char_out);
@@ -228,14 +319,19 @@
 		init_drive_emulator();
 
 		
-		struct SimpleDirEntry * entries = dir_entries("/system/rom/atari800");
+		struct SimpleDirEntry * entries = dir_entries(ROM_DIR);
 		
-		loadrom_indir(entries,"xlorig.rom",0x4000, (void *)0x704000);
-		loadrom_indir(entries,"xlhias.rom",0x4000, (void *)0x708000);
+		//loadrom_indir(entries,"atarixl.rom",0x4000, (void *)0x704000);
+		if (SimpleFile_OK == file_open_name_in_dir(entries, "atarixl.rom", files[5]))
+		{
+			loadosrom();
+		}
+
+		/*loadrom_indir(entries,"xlhias.rom",0x4000, (void *)0x708000);
 		loadrom_indir(entries,"ultimon.rom",0x4000, (void *)0x70c000);
 		loadrom_indir(entries,"osbhias.rom",0x4000, (void *)0x710000);
 		loadrom_indir(entries,"osborig.rom",0x2800, (void *)0x715800);
-		loadrom_indir(entries,"osaorig.rom",0x2800, (void *)0x719800);
+		loadrom_indir(entries,"osaorig.rom",0x2800, (void *)0x719800);*/
 
 		loadrom_indir(entries,"ataribas.rom",0x2000,(void *)0x700000);
 
@@ -323,7 +419,9 @@
 		printf("Ram:%s", get_ram());
 		debug_pos = 160;
 		debug_adjust = row==2 ? 128 : 0;
-		printf("Rom bank:%d", get_rom_select());
+		{
+			printf("Rom:%s", file_name(files[5]));
+		}
 		debug_pos = 240;
 		int i;
 		for (i=1;i!=5;++i)
@@ -377,11 +475,12 @@
 			break;
 		case 2:
 			{
-				int rom_select = get_rom_select();
-				rom_select+=joy.x_;
-				if (rom_select<1) rom_select = 1;
-				if (rom_select>6) rom_select = 6; // TODO
-				set_rom_select(rom_select);
+				if (joy.x_ || joy.fire_)
+				{
+					filter = filter_roms;
+					file_selector(files[5]);
+					loadosrom();
+				}
 			}
 			break;
 		case 3:
@@ -404,12 +503,19 @@
 				}
 				else if (joy.fire_)
 				{
-					struct SimpleFile * temp;
-					temp = files[0];
-					files[0] = files[row-3];
-					files[row-3] = temp;
-					set_drive_status(row-3,temp);
-					set_drive_status(0,files[0]);
+					{
+						// Swap files
+						struct SimpleFile * temp = files[row-3];
+						files[row-3] = files[0];
+						files[0] = temp;
+					}
+
+					{
+						// Swap disks
+						struct SimpleFile * temp = get_drive_status(row-3);
+						set_drive_status(row-3, get_drive_status(0));
+						set_drive_status(0,temp);
+					}
 				}
 			}
 			break;
Index: firmware/mcc/dirs.c
===================================================================
--- firmware/mcc/dirs.c	(nonexistent)
+++ firmware/mcc/dirs.c	(revision 69)
@@ -0,0 +1,2 @@
+char USER_DIR[]="/atari800/user";
+char ROM_DIR[]="/system/rom/atari800";
Index: firmware/mist/dirs.c
===================================================================
--- firmware/mist/dirs.c	(nonexistent)
+++ firmware/mist/dirs.c	(revision 69)
@@ -0,0 +1,2 @@
+char USER_DIR[]="/atari800/user";
+char ROM_DIR[]="/atari800/rom";
Index: firmware/mist/diskio_sectorrequest.c
===================================================================
--- firmware/mist/diskio_sectorrequest.c	(nonexistent)
+++ firmware/mist/diskio_sectorrequest.c	(revision 69)
@@ -0,0 +1,202 @@
+#include "diskio.h"
+
+#include "regs.h"
+
+#include "printf.h"
+extern int debug_pos;
+
+void mmcReadCached(u32 sector);
+u32 n_actual_mmc_sector;
+unsigned char * mmc_sector_buffer;
+
+void mmcReadCached(u32 sector)
+{
+	//debug("mmcReadCached");
+	//plotnext(toatarichar(' '));
+	//plotnextnumber(sector);
+	//debug("\n");
+	if(sector==n_actual_mmc_sector) return;
+	//debug("mmcReadREAL");
+	//plotnext(toatarichar(' '));
+	//plotnextnumber(sector);
+	//debug("\n");
+
+	//u08 ret,retry;
+	//predtim nez nacte jiny, musi ulozit soucasny
+	// TODO mmcWriteCachedFlush();
+	//az ted nacte novy
+	//retry=0; //zkusi to maximalne 256x
+	/*do
+	{
+		ret = mmcRead(sector);	//vraci 0 kdyz ok
+		retry--;
+	} while (ret && retry);
+	while(ret); //a pokud se vubec nepovedlo, tady zustane zablokovany cely SDrive!
+*/
+
+	//printf("Reading sector:%d", sector);
+	*zpu_out4 = sector|0x01000000;
+	while (!*zpu_in4)
+	{
+		// Wait until ready
+	}
+	*zpu_out4 = 0;
+	//printf(" RD1 ");
+	while (*zpu_in4)
+	{
+		// Wait until ready cleared
+	}
+
+	//printf(" RD2 ");
+
+	n_actual_mmc_sector=sector;
+}
+
+
+/*-----------------------------------------------------------------------*/
+/* Initialize Disk Drive                                                 */
+/*-----------------------------------------------------------------------*/
+
+DSTATUS disk_initialize (void)
+{
+	DSTATUS stat;
+
+	n_actual_mmc_sector = 0xffffffff;
+	//do
+	//{
+	//	mmcInit();
+	//}
+	//while(mmcReset());	//dokud nenulove, tak smycka (return 0 => ok!)
+
+	//set_spi_clock_freq();
+
+	// no longer in ram (yet!), misuse will break us...
+	mmc_sector_buffer = (unsigned char *)0x4000;  // 512 bytes in the middle of memory space!
+
+	stat = RES_OK;
+
+	return stat;
+}
+
+
+
+/*-----------------------------------------------------------------------*/
+/* Read Partial Sector                                                   */
+/*-----------------------------------------------------------------------*/
+
+DRESULT disk_readp (
+	BYTE* dest,			/* Pointer to the destination object */
+	DWORD sector,		/* Sector number (LBA) */
+	WORD sofs,			/* Offset in the sector */
+	WORD count			/* Byte count (bit15:destination) */
+)
+{
+	DRESULT res;
+
+	/*debug("readp:");
+	plotnextnumber(sector);
+	debug(" ");
+	plotnextnumber((int)dest);
+	debug(" ");
+	plotnextnumber(sofs);
+	debug(" ");
+	plotnextnumber(count);
+	debug(" ");
+	plotnextnumber(atari_sector_buffer);
+	debug(" ");
+	plotnextnumber(mmc_sector_buffer);
+	debug("\n");
+	*/
+	// Put your code here
+	mmcReadCached(sector);
+	for(;count>0;++sofs,--count)
+	{
+		unsigned char x = mmc_sector_buffer[sofs];
+		//printf("char:%02x loc:%d", x,sofs);
+		*dest++ = x;
+	}
+
+	res = RES_OK;
+
+	return res;
+}
+
+
+
+/*-----------------------------------------------------------------------*/
+/* Write Partial Sector                                                  */
+/*-----------------------------------------------------------------------*/
+
+DRESULT disk_writep (const BYTE* buff, DWORD sofs, DWORD count)
+{
+	DRESULT res;
+
+	int i=sofs;
+	int end=sofs+count;
+	int pos = 0;
+
+/*	debug_pos = 0;
+	printf("WP:%x %d %d"),buff,sofs,count;
+	debug_pos = -1;*/
+
+	for (;i!=end;++i,++pos)
+	{
+                unsigned char temp = buff[pos];
+
+                unsigned int volatile* addr = (unsigned int volatile *)&mmc_sector_buffer[i&~3];
+                unsigned int prev = *(unsigned int volatile*)addr;
+                ((char unsigned *)&prev)[i&3] = temp;
+                *addr = prev;
+		
+		//mmc_sector_buffer[i] = buff[pos];
+		//printf("char:%c loc:%d,", buff[pos],i);
+	}
+
+/*	debug_pos = 40;
+	printf("WP DONE:%x %d %d"),buff,sofs,count;
+	debug_pos = -1;*/
+
+	res = RES_OK;
+
+	return res;
+}
+
+void disk_writeflush()
+{
+/*	// Finalize write process
+	int retry=16; //zkusi to maximalne 16x
+	int ret;
+	//printf(":WSECT:%d",n_actual_mmc_sector);
+	do
+	{
+		ret = mmcWrite(n_actual_mmc_sector); //vraci 0 kdyz ok
+		retry--;
+	} while (ret && retry);
+	//printf(":WD:");
+*/
+
+	/*debug_pos = 0;
+	printf("WF");
+	debug_pos = -1;*/
+
+	//printf(" WTF:%d:%x ", n_actual_mmc_sector, ((unsigned int *)mmc_sector_buffer)[0]);
+
+	*zpu_out4 = n_actual_mmc_sector|0x02000000;
+	while (!*zpu_in4)
+	{
+		// Wait until ready
+	}
+	*zpu_out4 = 0;
+	//printf(" PT1 ");
+	while (*zpu_in4)
+	{
+		// Wait until ready cleared
+	}
+
+	//printf(" PT2 ");
+
+	/*debug_pos = 40;
+	printf("DONE");
+	debug_pos = -1;*/
+}
+
Index: firmware/native/screen.c
===================================================================
--- firmware/native/screen.c	(nonexistent)
+++ firmware/native/screen.c	(revision 69)
@@ -0,0 +1,4 @@
+void clearscreen()
+{
+}
+
Index: firmware/test_drive.c
===================================================================
--- firmware/test_drive.c	(revision 68)
+++ firmware/test_drive.c	(revision 69)
@@ -27,6 +27,8 @@
 	putc(c, stderr);
 }
 
+struct SimpleFile * files[5];
+
 int main(void)
 {
 	init_printf(NULL, char_out);
@@ -41,15 +43,26 @@
 	entry = dir_entries("");
 	entry = dir_next(dir_next(dir_next(entry)));
 	fprintf(stderr, " Name:%s", dir_filename(entry));
-	struct SimpleFile * file = alloca(file_struct_size());
+	int i;
+	for (i=0;i!=5;++i)
+	{
+		struct SimpleFile * file = alloca(file_struct_size());
+		file_init(file);
+		files[i] = file;
+	}
 	//file_open_dir(entry,file);
-	file_open_name("GUNPOWDR.ATR",file);
+	if (SimpleFile_OK == file_open_name("GUNPOWDR.ATR",files[0]))
+	{
+	}
+	else
+	{
+		fprintf(stderr,"\nARG\n");
+	}
 
 	int read = 0;
 	char buffer[1024];
 	//file_seek(file,100);
-	file_read(file,&buffer[0],1024,&read);
-	int i;
+	file_read(files[0],&buffer[0],1024,&read);
 	for (i=0; i!=read; ++i)
 	{
 		fprintf(stderr,"|%02x", (unsigned char)buffer[i]);
@@ -62,8 +75,35 @@
 
 	init_drive_emulator();
 
-	set_drive_status(0,file);
+	//set_drive_status(0,files[0]);
+	for (i=1;i!=5;++i)
+	{
+		char buffer[20];
+		describe_disk(i-1,&buffer[0]);
+		fprintf(stderr, "Drive %d:%s %s\n", i, file_name(get_file_status(i-1)), &buffer[0]);
+	}
 
+					int row = 6;
+					{
+						// Swap files
+						struct SimpleFile * temp = files[row-3];
+						files[row-3] = files[0];
+						files[0] = temp;
+					}
+
+					{
+						// Swap disks
+						struct SimpleFile * temp = get_drive_status(row-3);
+						set_drive_status(row-3, get_drive_status(0));
+						set_drive_status(0,temp);
+					}
+	for (i=1;i!=5;++i)
+	{
+		char buffer[20];
+		describe_disk(i-1,&buffer[0]);
+		fprintf(stderr, "Drive %d:%s %s\n", i, file_name(get_file_status(i-1)), &buffer[0]);
+	}
+
 	start_time = now();
 	run_drive_emulator();
 
