Domanda

Ok. Spero che non ottiene chiuso perché ho questa curiosità da 25 anni e mi piacerebbe capire il trucco.

Nel commodore 64 il bordo non è indirizzabile dal 6569 VIC. Tutto quello che poteva fare era di disegnare pixel nella zona centrale, quella in cui il cursore spostato. Il confine era sempre divisa, anche se si potrebbe cambiare il suo colore con Poke 53280, il colore se non ricordo male.

Tuttavia mi ricordo chiaramente giochi intro in cui è stato descritto il confine con la grafica, come se fosse completamente indirizzabile. Ho cercato di capire come funzionava, ma mai arrivato al punto. leggende dicono che era un uso intelligente della sprite, che potrebbero, in alcune circostanze, essere tratte sul confine, ma non so se si tratta di una leggenda metropolitana.

modifica : appena letto questo da uno dei link forniti

  

Sprites sono stati multiplex in tutta   Linee raster verticali (oltre 8 sprites,   a volte fino a 120 sprite). Fino a   il Crest Gruppo rilasciato Krestage 3   Maggio 2007 ci fu il comune   percezione che non più di 8 sprite   potrebbe apparire a una linea raster, ma   assegnando nuove coordinate Y reso   riapparire più in basso nella schermata.

Questo è il male .... a battere il raster e riposizionare la sprite prima che arrivi lì ...

È stato utile?

Soluzione

Innanzitutto solo sprite possono essere visualizzati nella zona di confine o un motivo 8 bit ripetizione (largo 8 pixel) che viene letto dal ultimo byte della banca video, solitamente $ 3FFF. Nota È possibile visualizzare solo questi folletti o po modello 8 quando si trucco del chip VIC in "che non contengono" i confini. Vedi sotto.

I bordi hanno una priorità maggiore rispetto sprite, così normalmente quando uno sprite è disegnato in una zona di confine confine copre sprite. Con un po 'di VIC chip di inganno è possibile attivare i bordi fuori.

È possibile attivare i bordi superiore e inferiore fuori abbastanza facilmente (vi spiegherò più avanti), e il lato confina via con tempi molto critico.

In primo luogo un po 'di informazioni su come il chip VIC lavora su un C64.

Il chip VIC richiama lo schermo dalla parte superiore sinistra a destra, poi lungo una linea, e da sinistra a destra nuovamente fino all'estrazione l'intero schermo. Si esegue questa ridisegnare 50 volte al secondo (per PAL unità) o 60 volte al secondo per unità (NTSC).

C'è un 8 bit VIC registro che contiene la posizione verticale della trama in un dato momento. $ D012. In realtà ci sono più di 255 posizioni possibili, in modo che il 9 ° bit viene memorizzato nel bit 7 (bit più alto) o registrati $ D011. Quindi, in qualsiasi momento è possibile leggere questi registri e scoprire la posizione verticale del raster. Non esiste un registro a disposizione per leggere la posizione x del raster.

Un'altra caratteristica interessante del chip VIC è stato utilizzato per risolvere un problema quando si utilizza lo scorrimento hardware. lo scorrimento verticale di base è stato ottenuto utilizzando un registro hardware per spostare lo schermo 0-7 pixel in verticale. Una volta raggiunto limite (0 o 7 a seconda della direzione del rotolo) si sposta ciascun blocco di caratteri (8x8 pixel) un blocco verticalmente e disegnare i nuovi dati da visualizzare nella parte superiore (o inferiore a seconda direzione). Questo funziona molto bene, solo che ogni 8 pixel di scorrimento si dovrebbe vedere i dati "pop" sullo schermo. Per ovviare a questo, si potrebbe fare la zona di confine crescere di 8 pixel in verticale azzerando il bit 3 nel registro $ D011. Questo è chiamato modalità riga 24. Per default schermo è stato impostato a 25 righe di caratteri 8x8 pixel. In modalità riga 24, si potrebbe ancora disegnare personaggi alla riga di fondo, che sarebbe solo essere nascoste dal confine.

Quindi, il trucco per spegnere i bordi superiore e inferiore è quello di:

1) Impostare la modalità schermo per 25 riga

2) attendere il raster a raggiungere una posizione verticale tra $ f2 e $ FA (8 pixel tra cui il confine inizia sia in modalità 24 riga e modalità riga 25).

3) Impostare lo schermo in modalità riga 24 ... spostando l'inizio verticale del bordo sopra la posizione attuale raster

4) Attendere fino a dopo la posizione raster verticale ($ f bis)

5) Ripetere ogni fotogramma

Passo 3) trucchi del circuito integrato VIC a pensare che ha già iniziato a disegnare il confine, in modo che non inizia mai disegnarla. Voila, i bordi superiore e inferiore sono aperti.

Per quanto riguarda i bordi laterali che si può fare la stessa cosa con diversi registri, ma come il movimento orizzontale del raster è molto più veloce allora il movimento verticale la tempistica deve essere molto stretto. E c'è un altro problema da tenere in considerazione chiamato jitter. <-Che non voglio spiegare qui. Cerca nel web per "Stabile Raster C64" per una profonda spiegazione di tale questione.

Altri suggerimenti

Si noti che ciò Krestage 3 ha fatto (come indicato nella domanda) è diversa.

Un livello del trucco è quello di pasticciare con il bordo quando è solo in fase di elaborazione il fondo della "carta" (rettangolo lavoro-zona, la cosa all'interno del bordo). Questo ti permette di avere sprite nel bordo superiore e inferiore.

Un livello superiore è pasticciare con essa sul bordo destro della carta, in ogni linea raster, tutto come spiegato nella risposta JohnD sopra. Questo ti permette di avere sprite nel bordo sinistro e destro.

Niente di tutto questo ti permette di avere più di 8 sprite in una riga. Questo è solo magia Krjest.

Di gran lunga la miglior risorsa (io sappia) per il chip VIC è " il video controllore MOS 6567/6569 (VIC-II) e la sua applicazione nel Commodore 64 " di Christian Bauer e un'appendice utile è "la memoria accessi del MOS 6569 VIC-II e MOS 8566 VIC-IIe Video Interface controller" da Marko Mäkelä.
lector avvertimento: questi sono un po 'tecnico, e si potrebbe trovare più facili da capire dopo aver programmato alcuni VIC effetti da soli.

Se i collegamenti mai morire, basta google up degli articoli per titolo, sono replicati all'infinito.

È possibile aprire le frontiere superiore e inferiore con un semplice programma BASIC:

    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

Im andando a prendere una pugnalata al buio qui (havent fatto questo io stesso). Ho trovato questo su wikipedia.

Il href="http://en.wikipedia.org/wiki/Commodore_64_demos" rel="nofollow noreferrer"> c64demo sezione spiega che:

  

Effetti pensavano impossibile erano   raggiunto nel demo, soprattutto a causa   non documentati effetti collaterali relativi   alla MOS VIC-II di chip .   Alcuni esempi per VIC-inganno:

Una delle hack menzionati era:

  

scroller Sprite sono stati collocati nel   confine. Ingannando l'hardware non   per disegnare il bordo intorno allo schermo,   sprite possono essere spostati in questa zona   e visualizzati.

Naturalmente, la parte interessante della questione è come il suo fare. Vorrei suggerire cercando in qualche demo base di dati che include il codice sorgente alla ricerca di una demo che impiega il hackerare.

PRINT "ERA 53280, amico".

Da quello che ho capito, questo è possibile solo per gli sprite.

Sprites sono autorizzati a essere nella zona di confine, e il confine ottiene tratte sovrastano. Attraverso qualche inganno, il confine può essere rimosso.

Grafica a bordo: Entrambi gli sprite o utilizzando l'effetto $ 3FFF (che in realtà non è affatto sprite). Per andare in in dettaglio ha bisogno di molto più spazio e tempo di quello che ho a disposizione qui.

È anche possibile ottenere sprite a confine in base: BASE Sprites in frontiera

IIRC, c'era anche un modo per confondere il chip video in modo, che trae la linea 26 del testo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top