Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cf783f4dce | ||
|
|
b339ff35d1 | ||
|
|
b018ae6f78 | ||
|
|
a823badfe0 | ||
|
|
13aa3536b4 | ||
|
|
f4d5451fec | ||
|
|
e1567d81da | ||
|
|
82f8229c8f |
@ -30,7 +30,7 @@ SIZE = avr-size
|
|||||||
ifeq ($(DEBUG),1)
|
ifeq ($(DEBUG),1)
|
||||||
LDFLAGS = -Wl,-u,vfprintf -lprintf_flt
|
LDFLAGS = -Wl,-u,vfprintf -lprintf_flt
|
||||||
CFLAGS = -Iusbdrv -I. -DDEBUG_LEVEL=0
|
CFLAGS = -Iusbdrv -I. -DDEBUG_LEVEL=0
|
||||||
OBJECTS = usbdrv/usbdrv.o usbdrv/usbdrvasm.o usbdrv/oddebug.o main.o usb_bulk.o uart.o fifo.o sram.o crc.o debug.o dump.o timer.o watchdog.o rle.c loader.o info.o shared_memory.o
|
OBJECTS = usbdrv/usbdrv.o usbdrv/usbdrvasm.o usbdrv/oddebug.o main.o usb_bulk.o uart.o fifo.o sram.o crc.o debug.o dump.o timer.o watchdog.o rle.c loader.o info.o shared_memory.o mmc.o fat.o
|
||||||
else
|
else
|
||||||
LDFLAGS = -Wl,-u
|
LDFLAGS = -Wl,-u
|
||||||
CFLAGS = -Iusbdrv -I. -DDEBUG_LEVEL=0 -DNO_DEBUG -DNO_INFO
|
CFLAGS = -Iusbdrv -I. -DDEBUG_LEVEL=0 -DNO_DEBUG -DNO_INFO
|
||||||
|
|||||||
192
avr/usbload/fat.c
Normal file
192
avr/usbload/fat.c
Normal file
@ -0,0 +1,192 @@
|
|||||||
|
#include "fat.h"
|
||||||
|
|
||||||
|
uint8_t cluster_size;
|
||||||
|
uint16_t fat_offset;
|
||||||
|
uint16_t cluster_offset;
|
||||||
|
uint16_t volume_boot_record_addr;
|
||||||
|
|
||||||
|
void fat_init(uint8_t * Buffer)
|
||||||
|
{
|
||||||
|
struct BootSec *bootp;
|
||||||
|
mmc_read_sector(MASTER_BOOT_RECORD, Buffer);
|
||||||
|
if (Buffer[510] == 0x55 && Buffer[511] == 0xAA) {
|
||||||
|
FAT_DEBUG("MBR Signatur found!\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
FAT_DEBUG("MBR Signatur not found!\r\n");
|
||||||
|
while (1);
|
||||||
|
}
|
||||||
|
volume_boot_record_addr = Buffer[VBR_ADDR] + (Buffer[VBR_ADDR + 1] << 8);
|
||||||
|
mmc_read_sector(volume_boot_record_addr, Buffer);
|
||||||
|
if (Buffer[510] == 0x55 && Buffer[511] == 0xAA) {
|
||||||
|
FAT_DEBUG("VBR Signatur found!\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
FAT_DEBUG("VBR Signatur not found!\r\n");
|
||||||
|
volume_boot_record_addr = MASTER_BOOT_RECORD;
|
||||||
|
mmc_read_sector(MASTER_BOOT_RECORD, Buffer);
|
||||||
|
}
|
||||||
|
bootp = (struct BootSec *) Buffer;
|
||||||
|
cluster_size = bootp->BPB_SecPerClus;
|
||||||
|
fat_offset = bootp->BPB_RsvdSecCnt;
|
||||||
|
cluster_offset = ((bootp->BPB_BytesPerSec * 32) / BlockSize);
|
||||||
|
cluster_offset += fat_root_dir_addr(Buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t fat_root_dir_addr(uint8_t * Buffer)
|
||||||
|
{
|
||||||
|
struct BootSec *bootp;
|
||||||
|
uint16_t FirstRootDirSecNum;
|
||||||
|
|
||||||
|
|
||||||
|
mmc_read_sector(volume_boot_record_addr, Buffer);
|
||||||
|
bootp = (struct BootSec *) Buffer;
|
||||||
|
|
||||||
|
|
||||||
|
FirstRootDirSecNum = (bootp->BPB_RsvdSecCnt +
|
||||||
|
(bootp->BPB_NumFATs * bootp->BPB_FATSz16));
|
||||||
|
FirstRootDirSecNum += volume_boot_record_addr;
|
||||||
|
return (FirstRootDirSecNum);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint16_t fat_read_dir_ent(uint16_t dir_cluster,
|
||||||
|
uint8_t Entry_Count,
|
||||||
|
uint32_t * Size,
|
||||||
|
uint8_t * Dir_Attrib, uint8_t * Buffer)
|
||||||
|
{
|
||||||
|
uint8_t *pointer;
|
||||||
|
uint16_t TMP_Entry_Count = 0;
|
||||||
|
uint32_t Block = 0;
|
||||||
|
struct DirEntry *dir;
|
||||||
|
uint16_t blk;
|
||||||
|
uint16_t a;
|
||||||
|
uint8_t b;
|
||||||
|
pointer = Buffer;
|
||||||
|
if (dir_cluster == 0) {
|
||||||
|
Block = fat_root_dir_addr(Buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
fat_load(dir_cluster, &Block, Buffer);
|
||||||
|
Block = ((Block - 2) * cluster_size) + cluster_offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for (blk = Block;; blk++) {
|
||||||
|
mmc_read_sector(blk, Buffer);
|
||||||
|
for (a = 0; a < BlockSize; a = a + 32) {
|
||||||
|
dir = (struct DirEntry *) &Buffer[a];
|
||||||
|
if (dir->DIR_Name[0] == 0) {
|
||||||
|
return (0xFFFF);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((dir->DIR_Attr != ATTR_LONG_NAME) &&
|
||||||
|
(dir->DIR_Name[0] != DIR_ENTRY_IS_FREE)) {
|
||||||
|
|
||||||
|
|
||||||
|
if (TMP_Entry_Count == Entry_Count) {
|
||||||
|
|
||||||
|
|
||||||
|
for (b = 0; b < 11; b++) {
|
||||||
|
if (dir->DIR_Name[b] != SPACE) {
|
||||||
|
if (b == 8) {
|
||||||
|
*pointer++ = '.';
|
||||||
|
}
|
||||||
|
*pointer++ = dir->DIR_Name[b];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*pointer++ = '\0';
|
||||||
|
*Dir_Attrib = dir->DIR_Attr;
|
||||||
|
|
||||||
|
|
||||||
|
*Size = dir->DIR_FileSize;
|
||||||
|
|
||||||
|
|
||||||
|
dir_cluster = dir->DIR_FstClusLO;
|
||||||
|
|
||||||
|
|
||||||
|
return (dir_cluster);
|
||||||
|
}
|
||||||
|
TMP_Entry_Count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (0xFFFF);
|
||||||
|
}
|
||||||
|
|
||||||
|
void fat_load(uint16_t Cluster, uint32_t * Block, uint8_t * TMP_Buffer)
|
||||||
|
{
|
||||||
|
uint16_t FAT_Block_Store = 0;
|
||||||
|
uint16_t FAT_Byte_Addresse;
|
||||||
|
uint16_t FAT_Block_Addresse;
|
||||||
|
uint16_t a;
|
||||||
|
|
||||||
|
for (a = 0;; a++) {
|
||||||
|
if (a == *Block) {
|
||||||
|
*Block = (0x0000FFFF & Cluster);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (Cluster == 0xFFFF) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
FAT_Byte_Addresse = (Cluster * 2) % BlockSize;
|
||||||
|
|
||||||
|
|
||||||
|
FAT_Block_Addresse =
|
||||||
|
((Cluster * 2) / BlockSize) + volume_boot_record_addr + fat_offset;
|
||||||
|
|
||||||
|
if (FAT_Block_Addresse != FAT_Block_Store) {
|
||||||
|
FAT_Block_Store = FAT_Block_Addresse;
|
||||||
|
mmc_read_sector(FAT_Block_Addresse, TMP_Buffer);
|
||||||
|
}
|
||||||
|
Cluster =
|
||||||
|
(TMP_Buffer[FAT_Byte_Addresse + 1] << 8) +
|
||||||
|
TMP_Buffer[FAT_Byte_Addresse];
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void fat_read_file(uint16_t Cluster, uint8_t * Buffer, uint32_t BlockCount)
|
||||||
|
{
|
||||||
|
|
||||||
|
uint32_t Block = (BlockCount / cluster_size);
|
||||||
|
fat_load(Cluster, &Block, Buffer);
|
||||||
|
Block = ((Block - 2) * cluster_size) + cluster_offset;
|
||||||
|
Block += (BlockCount % cluster_size);
|
||||||
|
mmc_read_sector(Block, Buffer);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void fat_write_file(uint16_t cluster, uint8_t * buffer, uint32_t blockCount)
|
||||||
|
{
|
||||||
|
uint8_t tmp_buffer[513];
|
||||||
|
uint32_t block = (blockCount / cluster_size);
|
||||||
|
fat_load(cluster, &block, tmp_buffer);
|
||||||
|
block = ((block - 2) * cluster_size) + cluster_offset;
|
||||||
|
block += (blockCount % cluster_size);
|
||||||
|
mmc_write_sector(block, buffer);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t fat_search_file(uint8_t * File_Name,
|
||||||
|
uint16_t * Cluster,
|
||||||
|
uint32_t * Size, uint8_t * Dir_Attrib, uint8_t * Buffer)
|
||||||
|
{
|
||||||
|
uint16_t Dir_Cluster_Store = *Cluster;
|
||||||
|
uint8_t a;
|
||||||
|
for (a = 0; a < 100; a++) {
|
||||||
|
*Cluster =
|
||||||
|
fat_read_dir_ent(Dir_Cluster_Store, a, Size, Dir_Attrib, Buffer);
|
||||||
|
if (*Cluster == 0xffff) {
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
if (strcasecmp((char *) File_Name, (char *) Buffer) == 0) {
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (2);
|
||||||
|
}
|
||||||
103
avr/usbload/fat.h
Normal file
103
avr/usbload/fat.h
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
/*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _FAT_H_
|
||||||
|
#define _FAT_H_
|
||||||
|
#include <string.h>
|
||||||
|
#include "mmc.h"
|
||||||
|
#include "uart.h"
|
||||||
|
|
||||||
|
#define FAT_DEBUG uart_puts
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
extern uint16_t fat_root_dir_addr(uint8_t *);
|
||||||
|
extern uint16_t fat_read_dir_ent(uint16_t, uint8_t,
|
||||||
|
uint32_t *, uint8_t *, uint8_t *);
|
||||||
|
extern void fat_load(uint16_t, uint32_t *, uint8_t *);
|
||||||
|
extern void fat_read_file(uint16_t, uint8_t *, uint32_t);
|
||||||
|
extern void fat_write_file(uint16_t, uint8_t *, uint32_t);
|
||||||
|
extern void fat_init(uint8_t * Buffer);
|
||||||
|
extern uint8_t fat_search_file(uint8_t *, uint16_t *,
|
||||||
|
uint32_t *, uint8_t *, uint8_t *);
|
||||||
|
|
||||||
|
|
||||||
|
#define BlockSize 512
|
||||||
|
|
||||||
|
|
||||||
|
#define MASTER_BOOT_RECORD 0
|
||||||
|
|
||||||
|
|
||||||
|
#define VBR_ADDR 0x1C6
|
||||||
|
|
||||||
|
|
||||||
|
#define SPACE 0x20
|
||||||
|
#define DIR_ENTRY_IS_FREE 0xE5
|
||||||
|
#define FIRST_LONG_ENTRY 0x01
|
||||||
|
#define SECOND_LONG_ENTRY 0x42
|
||||||
|
|
||||||
|
|
||||||
|
#define ATTR_LONG_NAME 0x0F
|
||||||
|
#define ATTR_READ_ONLY 0x01
|
||||||
|
#define ATTR_HIDDEN 0x02
|
||||||
|
#define ATTR_SYSTEM 0x04
|
||||||
|
#define ATTR_VOLUME_ID 0x08
|
||||||
|
#define ATTR_DIRECTORY 0x10
|
||||||
|
#define ATTR_ARCHIVE 0x20
|
||||||
|
struct BootSec {
|
||||||
|
uint8_t BS_jmpBoot[3];
|
||||||
|
uint8_t BS_OEMName[8];
|
||||||
|
uint16_t BPB_BytesPerSec;
|
||||||
|
uint8_t BPB_SecPerClus;
|
||||||
|
uint16_t BPB_RsvdSecCnt;
|
||||||
|
uint8_t BPB_NumFATs;
|
||||||
|
uint16_t BPB_RootEntCnt;
|
||||||
|
uint16_t BPB_TotSec16;
|
||||||
|
uint8_t BPB_Media;
|
||||||
|
uint16_t BPB_FATSz16;
|
||||||
|
uint16_t BPB_SecPerTrk;
|
||||||
|
uint16_t BPB_NumHeads;
|
||||||
|
uint32_t BPB_HiddSec;
|
||||||
|
uint32_t BPB_TotSec32;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#define BS_DRVNUM 36
|
||||||
|
#define BS_RESERVED1 37
|
||||||
|
#define BS_BOOTSIG 38
|
||||||
|
#define BS_VOLID 39
|
||||||
|
#define BS_VOLLAB 43
|
||||||
|
#define BS_FILSYSTYPE 54
|
||||||
|
|
||||||
|
|
||||||
|
#define BPB_FATSZ32 36
|
||||||
|
#define BPB_EXTFLAGS 40
|
||||||
|
#define BPB_FSVER 42
|
||||||
|
#define BPB_ROOTCLUS 44
|
||||||
|
#define BPB_FSINFO 48
|
||||||
|
#define BPB_BKBOOTSEC 50
|
||||||
|
#define BPB_RESERVED 52
|
||||||
|
|
||||||
|
#define FAT32_BS_DRVNUM 64
|
||||||
|
#define FAT32_BS_RESERVED1 65
|
||||||
|
#define FAT32_BS_BOOTSIG 66
|
||||||
|
#define FAT32_BS_VOLID 67
|
||||||
|
#define FAT32_BS_VOLLAB 71
|
||||||
|
#define FAT32_BS_FILSYSTYPE 82
|
||||||
|
|
||||||
|
struct DirEntry {
|
||||||
|
uint8_t DIR_Name[11];
|
||||||
|
uint8_t DIR_Attr;
|
||||||
|
uint8_t DIR_NTRes;
|
||||||
|
uint8_t DIR_CrtTimeTenth;
|
||||||
|
uint16_t DIR_CrtTime;
|
||||||
|
uint16_t DIR_CrtDate;
|
||||||
|
uint16_t DIR_LastAccDate;
|
||||||
|
uint16_t DIR_FstClusHI;
|
||||||
|
uint16_t DIR_WrtTime;
|
||||||
|
uint16_t DIR_WrtDate;
|
||||||
|
uint16_t DIR_FstClusLO;
|
||||||
|
uint32_t DIR_FileSize;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
3549
avr/usbload/loader.c
3549
avr/usbload/loader.c
File diff suppressed because it is too large
Load Diff
@ -2,8 +2,8 @@
|
|||||||
#ifndef __FIFO_H__
|
#ifndef __FIFO_H__
|
||||||
#define __FIFO_H__
|
#define __FIFO_H__
|
||||||
|
|
||||||
#define ROM_BUFFER_SIZE 30344
|
#define ROM_BUFFER_SIZE 31091
|
||||||
#define ROM_HUFFMAN_SIZE 0
|
#define ROM_HUFFMAN_SIZE 0
|
||||||
#define ROM_RLE_SIZE 30344
|
#define ROM_RLE_SIZE 31091
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -43,6 +43,9 @@
|
|||||||
#include "rle.h"
|
#include "rle.h"
|
||||||
#include "loader.h"
|
#include "loader.h"
|
||||||
#include "shared_memory.h"
|
#include "shared_memory.h"
|
||||||
|
#include "mmc.h"
|
||||||
|
#include "fat.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
extern const char _rom[] PROGMEM;
|
extern const char _rom[] PROGMEM;
|
||||||
@ -309,6 +312,71 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
|
|||||||
/*
|
/*
|
||||||
* -------------------------------------------------------------------------
|
* -------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
#define ENABLE_TEST
|
||||||
|
#ifdef ENABLE_TEST
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t buffer[512];
|
||||||
|
|
||||||
|
void test_sdcard(){
|
||||||
|
uint16_t fat_cluster = 0;
|
||||||
|
uint8_t fat_attrib = 0;
|
||||||
|
uint32_t fat_size = 0;
|
||||||
|
uint32_t rom_addr = 0;
|
||||||
|
uint8_t bank_cnt = 0;
|
||||||
|
uint16_t crc = 0;
|
||||||
|
uint16_t block_cnt;
|
||||||
|
uint16_t clustervar;
|
||||||
|
uint8_t dir_attrib = 0;
|
||||||
|
uint32_t file_size = 0;
|
||||||
|
uint8_t i = 0;
|
||||||
|
|
||||||
|
#define FILENAME "mrdo.smc" //failed
|
||||||
|
#define ROMSIZE 2 // 4 == 4mbit == 512kb
|
||||||
|
#define BUFFER_SIZE 512
|
||||||
|
#define BLOCKS (ROMSIZE << 8)
|
||||||
|
|
||||||
|
while ( mmc_init() !=0) {
|
||||||
|
info("No sdcard...\n");
|
||||||
|
}
|
||||||
|
info("MMC Init done\n");
|
||||||
|
fat_init(read_buffer);
|
||||||
|
info("FAT Init done.\n");
|
||||||
|
|
||||||
|
|
||||||
|
info("\r\nDirectory\r\n");
|
||||||
|
for (i = 1;i < 240;i++){
|
||||||
|
clustervar = fat_read_dir_ent(0,i,&file_size,&dir_attrib,buffer);
|
||||||
|
if (clustervar == 0xffff){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
info("Cluster = %4x DirA = %2x FileName = %s size=%li\n",clustervar,dir_attrib,buffer,file_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
info("Look for %s\n",FILENAME);
|
||||||
|
|
||||||
|
if (fat_search_file((uint8_t*)FILENAME,
|
||||||
|
&fat_cluster,
|
||||||
|
&fat_size,
|
||||||
|
&fat_attrib,
|
||||||
|
read_buffer) == 1) {
|
||||||
|
|
||||||
|
|
||||||
|
for (block_cnt=0; block_cnt<BLOCKS; block_cnt++) {
|
||||||
|
fat_read_file (fat_cluster,read_buffer,block_cnt);
|
||||||
|
|
||||||
|
if (block_cnt && block_cnt % 64 == 0){
|
||||||
|
printf("Write Ram Bank: 0x%x Addr: 0x%lx Block: %x CRC: %x\n",bank_cnt,rom_addr,block_cnt,crc);
|
||||||
|
bank_cnt++;
|
||||||
|
crc = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("Write Ram Bank: 0x%x Addr: 0x%lx Block: %x CRC: %x\n",bank_cnt,rom_addr,block_cnt,crc);
|
||||||
|
printf("Done\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void test_read_write()
|
void test_read_write()
|
||||||
{
|
{
|
||||||
@ -381,17 +449,7 @@ void test_crc()
|
|||||||
info("test_crc: check\n");
|
info("test_crc: check\n");
|
||||||
test_non_zero_memory(0x000000, 0x10000);
|
test_non_zero_memory(0x000000, 0x10000);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
uint16_t read_byte_pgm(uint16_t addr)
|
|
||||||
{
|
|
||||||
return pgm_read_byte((PGM_VOID_P) addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16_t read_byte_ee(uint16_t addr)
|
|
||||||
{
|
|
||||||
return eeprom_read_byte((uint8_t *) addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void send_reset()
|
void send_reset()
|
||||||
{
|
{
|
||||||
@ -451,6 +509,7 @@ void boot_startup_rom()
|
|||||||
info("Activate AVR bus\n");
|
info("Activate AVR bus\n");
|
||||||
avr_bus_active();
|
avr_bus_active();
|
||||||
|
|
||||||
|
|
||||||
info("IRQ off\n");
|
info("IRQ off\n");
|
||||||
snes_irq_lo();
|
snes_irq_lo();
|
||||||
snes_irq_off();
|
snes_irq_off();
|
||||||
@ -495,6 +554,7 @@ int main(void)
|
|||||||
|
|
||||||
info("Sytem start\n");
|
info("Sytem start\n");
|
||||||
system_init();
|
system_init();
|
||||||
|
test_sdcard();
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
test_read_write();
|
test_read_write();
|
||||||
|
|||||||
194
avr/usbload/mmc.c
Normal file
194
avr/usbload/mmc.c
Normal file
@ -0,0 +1,194 @@
|
|||||||
|
#include "mmc.h"
|
||||||
|
#include <util/delay.h>
|
||||||
|
|
||||||
|
uint8_t mmc_init()
|
||||||
|
{
|
||||||
|
uint16_t Timeout = 0, i;
|
||||||
|
MMC_REG |= ((1 << MMC_DO) | (1 << MMC_CS) | (1 << MMC_CLK));
|
||||||
|
MMC_REG &= ~(1 << MMC_DI);
|
||||||
|
MMC_WRITE |= ((1 << MMC_DO) | (1 << MMC_DI) | (1 << MMC_CS));
|
||||||
|
_delay_ms(20);
|
||||||
|
for (i = 0; i < 250; i++) {
|
||||||
|
MMC_WRITE ^= (1 << MMC_CLK);
|
||||||
|
_delay_us(4);
|
||||||
|
}
|
||||||
|
MMC_WRITE &= ~(1 << MMC_CLK);
|
||||||
|
_delay_us(10);
|
||||||
|
MMC_WRITE &= ~(1 << MMC_CS);
|
||||||
|
_delay_us(3);
|
||||||
|
|
||||||
|
uint8_t CMD[] = { 0x40, 0x00, 0x00, 0x00, 0x00, 0x95 };
|
||||||
|
while (mmc_write_command(CMD) != 1) {
|
||||||
|
if (Timeout++ > 20) {
|
||||||
|
mmc_disable();
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Timeout = 0;
|
||||||
|
CMD[0] = 0x41;
|
||||||
|
CMD[5] = 0xFF;
|
||||||
|
while (mmc_write_command(CMD) != 0) {
|
||||||
|
if (Timeout++ > 800) {
|
||||||
|
mmc_disable();
|
||||||
|
return (9);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t mmc_write_command(uint8_t * cmd)
|
||||||
|
{
|
||||||
|
uint8_t tmp = 0xff;
|
||||||
|
uint16_t Timeout = 0;
|
||||||
|
uint8_t a;
|
||||||
|
|
||||||
|
for (a = 0; a < 0x06; a++) {
|
||||||
|
mmc_write_byte(*cmd++);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (tmp == 0xff) {
|
||||||
|
tmp = mmc_read_byte();
|
||||||
|
if (Timeout++ > 50) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t mmc_read_byte(void)
|
||||||
|
{
|
||||||
|
uint8_t Byte = 0, j;
|
||||||
|
for (j = 0; j < 8; j++) {
|
||||||
|
Byte = (Byte << 1);
|
||||||
|
MMC_WRITE |= (1 << MMC_CLK);
|
||||||
|
_delay_us(4);
|
||||||
|
if (PINB & (1 << MMC_DI)) {
|
||||||
|
Byte |= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
Byte &= ~1;
|
||||||
|
}
|
||||||
|
MMC_WRITE &= ~(1 << MMC_CLK);
|
||||||
|
_delay_us(4);
|
||||||
|
}
|
||||||
|
return (Byte);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void mmc_write_byte(uint8_t Byte)
|
||||||
|
{
|
||||||
|
uint8_t i;
|
||||||
|
for (i = 0; i < 8; i++) {
|
||||||
|
if (Byte & 0x80) {
|
||||||
|
MMC_WRITE |= (1 << MMC_DO);
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
MMC_WRITE &= ~(1 << MMC_DO);
|
||||||
|
}
|
||||||
|
Byte = (Byte << 1);
|
||||||
|
MMC_WRITE |= (1 << MMC_CLK);
|
||||||
|
_delay_us(4);
|
||||||
|
MMC_WRITE &= ~(1 << MMC_CLK);
|
||||||
|
_delay_us(4);
|
||||||
|
}
|
||||||
|
MMC_WRITE |= (1 << MMC_DO);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t mmc_write_sector(uint32_t addr, uint8_t * Buffer)
|
||||||
|
{
|
||||||
|
uint8_t tmp;
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t cmd[] = { 0x58, 0x00, 0x00, 0x00, 0x00, 0xFF };
|
||||||
|
uint8_t a;
|
||||||
|
uint16_t i;
|
||||||
|
|
||||||
|
addr = addr << 9;
|
||||||
|
cmd[1] = ((addr & 0xFF000000) >> 24);
|
||||||
|
cmd[2] = ((addr & 0x00FF0000) >> 16);
|
||||||
|
cmd[3] = ((addr & 0x0000FF00) >> 8);
|
||||||
|
|
||||||
|
|
||||||
|
tmp = mmc_write_command(cmd);
|
||||||
|
if (tmp != 0) {
|
||||||
|
return (tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (a = 0; a < 100; a++) {
|
||||||
|
mmc_read_byte();
|
||||||
|
}
|
||||||
|
|
||||||
|
mmc_write_byte(0xFE);
|
||||||
|
|
||||||
|
for (a = 0; i < 512; i++) {
|
||||||
|
mmc_write_byte(*Buffer++);
|
||||||
|
}
|
||||||
|
|
||||||
|
mmc_write_byte(0xFF);
|
||||||
|
mmc_write_byte(0xFF);
|
||||||
|
|
||||||
|
if ((mmc_read_byte() & 0x1F) != 0x05)
|
||||||
|
return (1);
|
||||||
|
|
||||||
|
while (mmc_read_byte() != 0xff) {
|
||||||
|
};
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void mmc_read_block(uint8_t * cmd, uint8_t * Buffer, uint16_t Bytes)
|
||||||
|
{
|
||||||
|
uint16_t a;
|
||||||
|
|
||||||
|
if (mmc_write_command(cmd) != 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (mmc_read_byte() != 0xfe) {
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
for (a = 0; a < Bytes; a++) {
|
||||||
|
*Buffer++ = mmc_read_byte();
|
||||||
|
}
|
||||||
|
|
||||||
|
mmc_read_byte();
|
||||||
|
mmc_read_byte();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t mmc_read_sector(uint32_t addr, uint8_t * Buffer)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t cmd[] = { 0x51, 0x00, 0x00, 0x00, 0x00, 0xFF };
|
||||||
|
|
||||||
|
addr = addr << 9;
|
||||||
|
cmd[1] = ((addr & 0xFF000000) >> 24);
|
||||||
|
cmd[2] = ((addr & 0x00FF0000) >> 16);
|
||||||
|
cmd[3] = ((addr & 0x0000FF00) >> 8);
|
||||||
|
mmc_read_block(cmd, Buffer, 512);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t mmc_read_cid(uint8_t * Buffer)
|
||||||
|
{
|
||||||
|
|
||||||
|
uint8_t cmd[] = { 0x4A, 0x00, 0x00, 0x00, 0x00, 0xFF };
|
||||||
|
mmc_read_block(cmd, Buffer, 16);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t mmc_read_csd(uint8_t * Buffer)
|
||||||
|
{
|
||||||
|
|
||||||
|
uint8_t cmd[] = { 0x49, 0x00, 0x00, 0x00, 0x00, 0xFF };
|
||||||
|
mmc_read_block(cmd, Buffer, 16);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
29
avr/usbload/mmc.h
Normal file
29
avr/usbload/mmc.h
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
#ifndef _MMC_H_
|
||||||
|
#define _MMC_H_
|
||||||
|
|
||||||
|
#include <avr/io.h>
|
||||||
|
|
||||||
|
|
||||||
|
#define MMC_WRITE PORTB
|
||||||
|
#define MMC_READ PINB
|
||||||
|
#define MMC_REG DDRB
|
||||||
|
|
||||||
|
#define MMC_CS PB4
|
||||||
|
#define MMC_DO PB6
|
||||||
|
#define MMC_DI PB5
|
||||||
|
#define MMC_CLK PB7
|
||||||
|
extern uint8_t mmc_read_byte(void);
|
||||||
|
extern void mmc_write_byte(uint8_t);
|
||||||
|
extern void mmc_read_block(uint8_t *, uint8_t *, unsigned in);
|
||||||
|
extern uint8_t mmc_init(void);
|
||||||
|
extern uint8_t mmc_read_sector(uint32_t, uint8_t *);
|
||||||
|
extern uint8_t mmc_write_sector(uint32_t, uint8_t *);
|
||||||
|
extern uint8_t mmc_write_command(uint8_t *);
|
||||||
|
extern uint8_t mmc_read_csd(uint8_t *);
|
||||||
|
extern uint8_t mmc_read_cid(uint8_t *);
|
||||||
|
|
||||||
|
#define mmc_disable() MMC_WRITE|= (1<<MMC_CS);
|
||||||
|
|
||||||
|
#define mmc_enable() MMC_WRITE&=~(1<<MMC_CS);
|
||||||
|
|
||||||
|
#endif
|
||||||
@ -2,8 +2,6 @@
|
|||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
<key>currentDocument</key>
|
|
||||||
<string>avr/usbload/main.c</string>
|
|
||||||
<key>documents</key>
|
<key>documents</key>
|
||||||
<array>
|
<array>
|
||||||
<dict>
|
<dict>
|
||||||
@ -21,616 +19,6 @@
|
|||||||
<integer>271</integer>
|
<integer>271</integer>
|
||||||
<key>metaData</key>
|
<key>metaData</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>avr/bootloader/config.h</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>22</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>avr/usbload/Makefile</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>11</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>18</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>1</integer>
|
|
||||||
</dict>
|
|
||||||
<key>avr/usbload/commandline/Makefile</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>24</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>avr/usbload/commandline/opendevice.c</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>columnSelection</key>
|
|
||||||
<false/>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>26</integer>
|
|
||||||
<key>selectFrom</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>selectTo</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>3</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>19</integer>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
<key>avr/usbload/commandline/snesuploader.ll</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>36</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>9</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>avr/usbload/config.h</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>23</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>avr/usbload/crc.c</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>31</integer>
|
|
||||||
</dict>
|
|
||||||
<key>columnSelection</key>
|
|
||||||
<false/>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>selectFrom</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>21</integer>
|
|
||||||
</dict>
|
|
||||||
<key>selectTo</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>31</integer>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
<key>avr/usbload/debug.c</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>31</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>39</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>avr/usbload/debug.h</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>6</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>30</integer>
|
|
||||||
</dict>
|
|
||||||
<key>columnSelection</key>
|
|
||||||
<false/>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>selectFrom</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>4</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>30</integer>
|
|
||||||
</dict>
|
|
||||||
<key>selectTo</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>11</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>30</integer>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
<key>avr/usbload/dump.c</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>26</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>avr/usbload/dump.h</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>19</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>avr/usbload/fifo.c</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>17</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>22</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>avr/usbload/info.c</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>4</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>33</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>avr/usbload/info.h</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>22</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>32</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>avr/usbload/loader.c</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>1664</integer>
|
|
||||||
</dict>
|
|
||||||
<key>avr/usbload/loader.h</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>avr/usbload/main.c</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>452</integer>
|
|
||||||
</dict>
|
|
||||||
<key>avr/usbload/requests.h</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>19</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>avr/usbload/rle.c</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>14</integer>
|
|
||||||
</dict>
|
|
||||||
<key>avr/usbload/rle.h</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>avr/usbload/shared_memory.c</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>46</integer>
|
|
||||||
</dict>
|
|
||||||
<key>avr/usbload/shared_memory.h</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>avr/usbload/sram.c</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>32</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>avr/usbload/sram.h</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>19</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>avr/usbload/timer.c</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>31</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>22</integer>
|
|
||||||
</dict>
|
|
||||||
<key>avr/usbload/timer.h</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>29</integer>
|
|
||||||
</dict>
|
|
||||||
<key>columnSelection</key>
|
|
||||||
<false/>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>selectFrom</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>selectTo</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>29</integer>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
<key>avr/usbload/uart.c</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>26</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>avr/usbload/usb_bulk.c</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>37</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>avr/usbload/watchdog.c</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>22</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>poc/avr_sdcard/checksize</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>poc/avr_sdcard/fat.c</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>poc/avr_sdcard/fat.h</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>poc/avr_sdcard/main.c</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>422</integer>
|
|
||||||
</dict>
|
|
||||||
<key>poc/avr_sdcard/main.lst</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>405</integer>
|
|
||||||
</dict>
|
|
||||||
<key>poc/avr_sdcard/main.map</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>526</integer>
|
|
||||||
</dict>
|
|
||||||
<key>poc/avr_sdcard/main.sym</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>poc/avr_sdcard/mmc.c</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>16</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>292</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>5</integer>
|
|
||||||
</dict>
|
|
||||||
<key>poc/avr_sdcard/mmc.h</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>24</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>4</integer>
|
|
||||||
</dict>
|
|
||||||
<key>scripts/conv_rle.py</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>32</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>7</integer>
|
|
||||||
</dict>
|
|
||||||
<key>snes/banktest/LoadGraphics.asm</key>
|
<key>snes/banktest/LoadGraphics.asm</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>caret</key>
|
<key>caret</key>
|
||||||
@ -659,274 +47,7 @@
|
|||||||
<key>firstVisibleLine</key>
|
<key>firstVisibleLine</key>
|
||||||
<integer>211</integer>
|
<integer>211</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>snes/loader/main.asm</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>14</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>232</integer>
|
|
||||||
</dict>
|
</dict>
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>259</integer>
|
|
||||||
</dict>
|
|
||||||
<key>snes/loader/routines/joypadread.asm</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>75</integer>
|
|
||||||
</dict>
|
|
||||||
<key>snes/loader/routines/menusystem.asm</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>655</integer>
|
|
||||||
</dict>
|
|
||||||
<key>snes/loader/routines/miscdata.asm</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>5</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>tools/ffsample/avr/Makefile_ata</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>tools/ffsample/avr/Makefile_cfc</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>tools/ffsample/avr/Makefile_cfmm</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>tools/ffsample/avr/Makefile_mmc</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>tools/ffsample/avr/cfmm.c</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>tools/ffsample/avr/ff.c</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>tools/ffsample/avr/ff.h</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>tools/ffsample/avr/main.c</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>30</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>177</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>152</integer>
|
|
||||||
</dict>
|
|
||||||
<key>tools/ffsample/avr/mmc.c</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>15</integer>
|
|
||||||
</dict>
|
|
||||||
<key>tools/ffsample/avr/rtc.c</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
</dict>
|
|
||||||
<key>tools/huffman/huffman-encode.c</key>
|
|
||||||
<dict>
|
|
||||||
<key>caret</key>
|
|
||||||
<dict>
|
|
||||||
<key>column</key>
|
|
||||||
<integer>14</integer>
|
|
||||||
<key>line</key>
|
|
||||||
<integer>443</integer>
|
|
||||||
</dict>
|
|
||||||
<key>firstVisibleColumn</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>firstVisibleLine</key>
|
|
||||||
<integer>418</integer>
|
|
||||||
</dict>
|
|
||||||
</dict>
|
|
||||||
<key>openDocuments</key>
|
|
||||||
<array>
|
|
||||||
<string>snes/loader/main.asm</string>
|
|
||||||
<string>snes/loader/routines/joypadread.asm</string>
|
|
||||||
<string>snes/loader/routines/menusystem.asm</string>
|
|
||||||
<string>snes/loader/routines/miscdata.asm</string>
|
|
||||||
<string>avr/usbload/main.c</string>
|
|
||||||
<string>tools/huffman/huffman-encode.c</string>
|
|
||||||
<string>scripts/conv_rle.py</string>
|
|
||||||
<string>avr/usbload/loader.h</string>
|
|
||||||
<string>poc/avr_sdcard/fat.h</string>
|
|
||||||
<string>poc/avr_sdcard/fat.c</string>
|
|
||||||
<string>poc/avr_sdcard/main.c</string>
|
|
||||||
<string>poc/avr_sdcard/mmc.c</string>
|
|
||||||
<string>poc/avr_sdcard/main.sym</string>
|
|
||||||
<string>poc/avr_sdcard/mmc.h</string>
|
|
||||||
<string>poc/avr_sdcard/main.map</string>
|
|
||||||
<string>poc/avr_sdcard/main.lst</string>
|
|
||||||
<string>tools/ffsample/avr/Makefile_ata</string>
|
|
||||||
<string>tools/ffsample/avr/ff.h</string>
|
|
||||||
<string>tools/ffsample/avr/ff.c</string>
|
|
||||||
<string>tools/ffsample/avr/Makefile_mmc</string>
|
|
||||||
<string>tools/ffsample/avr/Makefile_cfc</string>
|
|
||||||
<string>tools/ffsample/avr/Makefile_cfmm</string>
|
|
||||||
<string>tools/ffsample/avr/rtc.c</string>
|
|
||||||
<string>tools/ffsample/avr/mmc.c</string>
|
|
||||||
<string>tools/ffsample/avr/main.c</string>
|
|
||||||
<string>tools/ffsample/avr/cfmm.c</string>
|
|
||||||
<string>poc/avr_sdcard/checksize</string>
|
|
||||||
<string>avr/usbload/loader.c</string>
|
|
||||||
<string>avr/usbload/timer.h</string>
|
|
||||||
<string>avr/usbload/timer.c</string>
|
|
||||||
<string>avr/usbload/uart.c</string>
|
|
||||||
<string>avr/usbload/usb_bulk.c</string>
|
|
||||||
<string>avr/usbload/watchdog.c</string>
|
|
||||||
<string>avr/usbload/debug.h</string>
|
|
||||||
<string>avr/usbload/debug.c</string>
|
|
||||||
<string>avr/usbload/fifo.c</string>
|
|
||||||
<string>avr/usbload/commandline/Makefile</string>
|
|
||||||
<string>avr/usbload/info.c</string>
|
|
||||||
<string>avr/usbload/dump.h</string>
|
|
||||||
<string>avr/usbload/info.h</string>
|
|
||||||
<string>avr/bootloader/config.h</string>
|
|
||||||
<string>avr/usbload/config.h</string>
|
|
||||||
<string>avr/usbload/Makefile</string>
|
|
||||||
<string>avr/usbload/shared_memory.c</string>
|
|
||||||
<string>avr/usbload/shared_memory.h</string>
|
|
||||||
<string>avr/usbload/commandline/opendevice.c</string>
|
|
||||||
<string>avr/usbload/sram.h</string>
|
|
||||||
<string>avr/usbload/requests.h</string>
|
|
||||||
<string>avr/usbload/rle.c</string>
|
|
||||||
<string>avr/usbload/sram.c</string>
|
|
||||||
<string>avr/usbload/rle.h</string>
|
|
||||||
<string>avr/usbload/dump.c</string>
|
|
||||||
<string>avr/usbload/crc.c</string>
|
|
||||||
<string>avr/usbload/commandline/snesuploader.ll</string>
|
|
||||||
</array>
|
|
||||||
<key>showFileHierarchyDrawer</key>
|
<key>showFileHierarchyDrawer</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>showFileHierarchyPanel</key>
|
<key>showFileHierarchyPanel</key>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user