Pergunta

OK. Espero que não fique fechado porque tenho essa curiosidade há 25 anos e adoraria entender o truque.

No comodoro 64, a fronteira não foi endereçada pelo 6569 Vic. Tudo o que você podia fazer era desenhar pixels na área central, aquele onde o cursor se moveu. A borda sempre foi uniforme, embora você pudesse mudar sua cor com o Poke 53280, cor, se bem me lembro.

No entanto, lembro -me claramente de jogos de jogos em que a fronteira foi apresentada com gráficos, como se fosse totalmente endereçável. Tentei entender como funcionou, mas nunca cheguei ao ponto. As lendas dizem que foi um uso inteligente de sprites, que poderia, em algumas circunstâncias, ser desenhados na fronteira, mas não sei se é uma lenda urbana.

editar: Basta ler isso de um dos links fornecidos

Os sprites foram multiplexados nas linhas de varredura vertical (mais de 8 sprites, às vezes até 120 sprites). Até que o grupo Crest lançou o Krestage 3 em maio de 2007, havia a percepção comum de que não mais que 8 sprites poderiam aparecer em uma linha raster, mas a atribuição de novas coordenadas Y fez reaparecer mais abaixo na tela.

Isso é mau .... você vence a varredura e reposicionou o sprite antes de chegar lá ...

Foi útil?

Solução

Em primeiro lugar, apenas os sprites podem ser exibidos na área de fronteira ou em um padrão de 8 bits (8 pixels de largura) que é lido no último byte do banco de vídeo, geralmente US $ 3fff. Observe que você pode ver apenas esses sprites ou padrão de 8 bits quando você engana o vic chip para "não exibir" as fronteiras. Veja abaixo.

As fronteiras têm uma prioridade mais alta que os sprites; portanto, normalmente quando um sprite é desenhado em uma área de fronteira, a borda cobre o sprite. Com um pouco de truque de vic chip, você pode desligar as fronteiras.

Você pode desligar as fronteiras superior e inferior com bastante facilidade (explicarei abaixo) e as bordas laterais com um tempo muito crítico.

Em primeiro lugar, um pouco de informações sobre como o chip Vic funciona em um C64.

O chip Vic puxa a tela do canto superior esquerdo para o canto superior direito, depois para baixo em uma linha e da esquerda para a direita novamente até que toda a tela seja desenhada. Ele executa esse redesenho 50 vezes por segundo (para unidades PAL) ou 60 vezes por segundo para (unidades NTSC).

Há um registro VIC de 8 bits que contém a posição vertical da varredura a qualquer momento. $ d012. Na verdade, existem mais de 255 posições possíveis; portanto, o 9º bit é armazenado no bit 7 (bit mais alto) ou registre $ d011. Portanto, a qualquer momento, você pode ler esses registros e descobrir a posição vertical da varredura. Não há registro disponível para ler a posição X da raster.

Outro recurso interessante do chip VIC foi usado para corrigir um problema ao usar a rolagem de hardware. A rolagem vertical básica foi alcançada usando um registro de hardware para mover a tela de 0 a 7 pixels verticalmente. Depois de atingir o limite (0 ou 7, dependendo da direção do rolo), você moveria cada bloco de caracteres (8x8 pixels) um bloco verticalmente e desenharia os novos dados a serem exibidos na parte superior (ou inferior, dependendo da direção). Isso funciona muito bem, exceto que cada 8 pixels de rolagem você verá dados "pop" na tela. Para remediar isso, você pode fazer com que a área da fronteira cresça em 8 pixels verticalmente, limpando o bit 3 no registro $ d011. Isso é chamado de modo 24 linhas. Por padrão, a tela foi definida para 25 linhas de 8x8 caracteres de pixels. No modo 24 fila, você ainda pode atrair caracteres para a linha inferior, eles ficariam escondidos pela borda.

Portanto, o truque para desligar as fronteiras superior e inferior é::

1) Defina a tela para o modo de 25 linhas

2) Aguarde a varredura atingir uma posição vertical entre $ F2 e $ FA (os 8 pixels entre onde a borda começa no modo 24 e no modo de 25 linhas).

3) Defina a tela para o modo de 24 linhas ... movendo o início vertical da borda acima da posição de raster atual

4) Aguarde até depois da posição vertical raster ($ fa)

5) Repita cada quadro

Etapa 3) Trila o chip Vic a pensar que ele já começou a desenhar a fronteira, para que nunca comece a desenhá -lo. Voila, as bordas superior e inferior estão abertas.

Em relação às fronteiras laterais, você pode fazer a mesma coisa com diferentes registros, mas como o movimento horizontal da varredura é muito mais rápido do que o movimento vertical que o tempo precisa ser muito mais apertado. E há outro problema a levar em consideração chamado Jitter. <-que vou explicar aqui. Pesquise na web por "estável raster c64" por uma explicação detalhada desse problema.

Outras dicas

Observe que o que Krestage 3 fez (como mencionado na pergunta) é diferente.

Um nível do truque é mexer com a borda quando o fundo do "papel" (retângulo da área de trabalho, a coisa dentro da borda) está sendo desenhada. Isso permite que você tenha sprites na borda superior e inferior.

Um nível mais alto é mexer com ele na borda direita do papel, em todas as linhas de raster, tudo como explicado na resposta de Johnd acima. Isso permite que você tenha sprites na borda esquerda e direita.

Nada disso permite que você tenha mais de 8 sprites em uma linha. Isso é apenas o Krest Magic.

De longe o melhor recurso (eu conheço) para o chip Vic é "O MOS 6567/6569 Video Controller (VIC-II) e sua aplicação no Commodore 64" por Christian Bauer e um adendo útil é "Os acessos de memória do MOS 6569 VIC-II e MOS 8566 VIC-IIE Video Interface Controller" Por Marko Mäkelä.
LECTOR DE ARVAGEM: Estes são um pouco técnicos e você pode achá -los mais fáceis de entender depois de programar alguns efeitos VIC.

Se os links morrerem, basta pesquisar no Google os artigos por título, eles são infinitamente replicados.

Você pode abrir fronteiras superiores e inferiores com um programa básico simples:

    1 poke56334,0:poke53266,212:poke53265,27:poke16383,0
    2 h=53265:i=53273:h1=19:h2=27:i1=1
    3 pokei,i1:waiti,i1:pokeh,h1:pokeh,h2:goto3

Eu vou dar uma facada no escuro aqui (ainda não fez isso). Eu encontrei isso na Wikipedia.

o Seção C64DEMO explica isso:

Efeitos considerados impossíveis foram alcançados em demos, principalmente devido a efeitos colaterais sem documentos referentes ao MOS Technology Vic-II Chip. Alguns exemplos para Vic-Trickery:

Um dos hacks mencionados foi:

Os roladores de sprite foram colocados na fronteira. Ao enganar o hardware para não desenhar a borda ao redor da tela, os sprites podem ser movidos para essa área e exibidos.

Obviamente, a parte interessante da questão é como é feito. Eu sugeriria olhar em alguns banco de dados de demonstração que inclui o código -fonte em busca de uma demonstração que emprega o hack.

Imprimir "Era 53280, cara".

Pelo que entendi, isso só é possível para sprites.

Os sprites podem estar na área da fronteira, e a fronteira fica sobrecarregada. Através de alguns truques, a borda pode ser removida.

Gráficos na fronteira: sprites ou usando o efeito $ 3FFF (que na verdade não é sprites). Entrar em detalhes precisa de muito mais espaço e tempo do que eu tenho disponível aqui.

Você também pode fazer com que os sprites fossem básicos no BASIC: Sprites básicos na fronteira

IIRC, também havia uma maneira de confundir o videoclipe, que ele desenha 26ª linha de texto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top