O 6502 coloca o FF no registrador de ponteiro da pilha assim que recebe energia pela primeira vez?

7

Estou lendo sobre o conjunto de instruções do processador 6502 dos muitos links em 6502.org, e um tutorial diz:

The stack pointer (S) points to a byte on Page 1, that is, to a byte whose address is from 0100 to 01FF, where the last two digits are supplied by S. When a byte is pushed on the stack, it is written at the address in S, and then S is decremented.

O registrador S é de 1 byte, então, obviamente, ele contém um valor de 00 a FF, mas como ele diminui quando o push ainda é pressionado, ele deve iniciar no FF. O hardware físico (transistores) no chip coloca todos os bits naquele registro em '1' quando o chip recebe seu primeiro sopro de energia?

Eu só gosto de saber os detalhes de baixo nível.

    
por mring 14.10.2011 / 19:38

4 respostas

3

Toda ROM baseada no código 6502 e compatível que eu já vi inicializa o ponteiro da pilha ( LDX #$FF , TXS ) durante a rotina RESET. Você deveria também.

É possível que mais tarde as revisões do 6502 (ou seja, 65C02 no Apple II) sejam inicializadas explicitamente, assim como as variantes de 16 bits do 65816 e posteriores.

Eu apostaria significativamente que .S é um valor aleatório na ativação do 6502 original e do 6510 no Commodore 64, e provavelmente até o 2A07 no NES.

Geralmente, qualquer rotina de redefinição do 6502 também começa com o seguinte, geralmente como as duas primeiras instruções:

SEI ;disable interrupts (set interrupt disable flag)
CLD ;turn decimal mode off
    
por 10.09.2012 / 15:02
3

Se você assistir à apresentação de Michael Steil sobre engenharia reversa do 6502 ( link ), você verá em torno de 42:15 que ele explica o que acontece quando RESET ocorre. Como parte do tratamento RESET, o 6502 realmente envia os valores de PC e P. O ponteiro da pilha começa em 0x100 e depois de pressionar esses três bytes, acaba em 0x1fd por causa disso.

    
por 12.06.2013 / 18:39
2

link afirma que não foi especificado.

link também afirma que não é especificado e, além disso, não importa se você não se importa com a posição exata da pilha dentro dessa página. Onde quer que ele comece, ele irá quebrar, então, contanto que você não use mais de 256 bytes de pilha, tudo bem.

O

link , que é uma simulação em nível de transistor do hardware real, parece inicializar com SP definido como FD; você provavelmente poderia rastrear os registros reais lá e determinar se isso é deliberado ou apenas uma coincidência.

(Nesse contexto, "monitor" significa um programa de controle de baixo nível em vez de um display)

    
por 24.02.2012 / 17:41
0

Para aplicativos de software, isso geralmente não importa. Se o seu programa não voltar ao básico, você pode fazer o que foi dito acima, que é assumir o controle do próprio SP. Se você voltar ao básico, deve ter certeza de retornar com a pilha na mesma condição em que estava antes de o programa iniciar ou o BASIC travar.

A resposta da Snarfblam acima é tecnicamente enganosa, em primeiro lugar porque "ler o segundo local" não tem significado específico, mas também porque com TSX, LDA $ 00FF, X será Never LDA de qualquer endereço acima de $ 01FE desde o máximo para X é $ FF: $ 00FF + FF = $ 01FE. Além disso, se você quiser que o acumulador leia o valor anterior enviado para a pilha, o PLA será suficiente.

    
por 01.08.2014 / 12:10