domingo, 23 de setembro de 2007

Sistema de arquivos TIC-TAC

TIC-TAC: Sistema de arquivos para pequenos dispositivos.

O sistema de arquivos TIC-TAC foi concebido para utilização com pequenas unidades de armazenamentos de memória, com capacidade de até 128Kbytes. Apesar de ter sido projetado inicialmente para os "picodrives" conectados via interface I2C no MSX, outros dispositivos de memoria podem ser utilizados, bem como outros processadores ou microcontroladores.

O nome TIC-TAC vem de:

TIC Tabela identificação de caracteres
TAC Tabela de alocação de cadeias

Estas tabelas são utilizadas para organizar o armazenamento dos arquivos de forma semelhante a uma FAT. Devido à limitação de espaço, o número máximo de arquivos que podem ser armazenados é de 64. Dessa forma os arquivos podem ter nome com 8 caracteres de comprimento e um byte de atributos.

A TIC ocupa os primeiros 768 bytes da memória serial. Compõe-se de um cabeçalho com 64 bytes de cabeçalho, e de 64 entradas de arquivos (com 11 bytes). A estrututa da TIC encontra-se na tabela abaixo:

Cabeçalho:

Bytes Função/descrição
02 Assinatura - "ST"
10 Nome do dispositivo (volume)
01 Bit 7: Flag de Boot
Bits 5..0: Entrada da TIC (bits 5..0) do programa de boot.
01 Tamanho em setores) do dispositivo (Máximo 128K)
01 Tamanho da página de escrita da Flash
49 Vazio. Reserva para expansões
-----
64 Total de bytes do cabeçalho da TIC


Entradas:

08 Nome do arquivo
01 Atributos
Bit 7: Indica uma entrada apagada
Bit 6: Indica proteção contra escrita/apagamento
Bits 1..0: Tipo de arquivo
00 - Basic
01 - Binário
10 - Dados
11 - Tela
01 Tamanho do arquivo (quantidade de entradas na TAC)
01 Ponto de entrada na TAC
------
11 x 64 = 704 bytes

Total 64+704=768 bytes

Para calcular a quantidade de setores ocupados por um arquivo, a seguinte fórmula é utilizada:

QUANT = 1 + [ ( TAMARQ - 1) DIV 512 ] , onde TAMARQ é o tamanho em bytes do arquivo.

Já a TAC ocupa 256 bytes e corresponde a um mapa de setores (512bytes) da memória serial. A posição da entrada na TAC (1 byte) corresponde à posição de um setor (512 bytes) no dispositivo. Assim, a primeira entrada na TAC corresponde aos Bytes (0..511), a segunda aos bytes (512..1023), a terceira aos bytes (1024-1535) e assim sucessivamente.

O conteúdo de uma entrada da TAC armazena a posição da próxima entrada, formando assim uma cadeia de entradas. A última entrada é utilizada para armazenar quantos bytes (em múltiplos de 4) são armazenados no último setor. Como uma entrada de valor "0" (zero) significa um setor vazio (não utilizado), o valor do último setor é acrescido de um, ficando então entre 01 e 128, representando de 04 a 512bytes.

Para calcular o valor do último byte da seqüencia a seguinte fórmula é utilizada:

VALOR = 1 + [ ( TAMARQ MOD 512 ) DIV 2)

Preâmbulo dos arquivos:

Os 16 primeiros bytes do arquivo são utilizados para armazenar algumas informações que não cabem nas entradas de arquivo, como data e hora, e configuração da máquina.

Os bytes 0 a 6 armazenam informações de data e hora:

Byte Conteúdo
0 Bits 6..0 Segundos (00..59) em BCD
1 Bits 6..0 Minutos (00..59) em BCD
2 Bits 5..0 Horas (00..23) em BCD
3 Bits 5..0 Dia do mês (00..31) em BCD
4 Bits 2..0 Dia da semana (0..6), Domingo=0
5 Bit 7: Século, 0=2000, 1=1900;
Bits 4..0: Mês (1..12) em BCD
6 Bits 7..0 Ano (dezena, 00..99) em BCD

O formato dos bytes 7 a 15 depende do tipo de arquivo. Para arquivos Basic ou de Dados, estes bytes ficam sem uso. Para arquivos binários e de tela, o formato encontra-se abaixo:

Para aquivos binários:

Byte Conteúdo
7,8 Endereço de de entrada (carga) do programa na memória
9,10 Endereço de execução do programa
11 Configuração de Slots primários para carga do programa
12 Configuração de Slots secundários para carga do programa
13..15 Reservado para uso futuro

Para aquivos de tela:

Byte Conteúdo
7,8 Endereço de entrada na VRAM
9 Modo de tela (screen)
10..15 Reservado para uso futuro