Uutiset:

C=Foorumi suosittelee: Saku-Foorumi
http://saku.bbs.fi/cgi-bin/discus/discus.cgi

Main Menu

MoonFall REUlla buustattuna !

Aloittaja virgo, joulukuu 11, 2014, 20:52

« edellinen - seuraava »

virgo

tuossa ajan tapokseni tutkiskelin Jukan koodia ja tein sitten kokeeksi pienen muunnoksen
missä REU hoitaa ruudun tyhjennyksen eli ruudunpäivitys nopeuteen sellainen "pieni" parannus
muitakin ideoita on plakkarissa mutta tuo oli sellainen helppo ja nopea testaus...

joten vähän testaajia etsisin josko tuosta tekisi ihan oikean Hackauksen. ! kiinnostaako ketään

Hack siis vaatii REUn vähintään 128 kokoisena mutta 64 kin pärjää jos sellainen on
samoin vicellä pitäisi toimia
samoin muilla moduuleilla tms. värkeissä missä tuo REU on toimivana kuten Chameleon...
Genetic-PET C64 BBS:
g-point.tunk.org port 1025

Genetic-point Amiga BBS:
g-point.tunk.org port 500

virgo

tässä vielä havainollistettuna REUn tehoero normaaliin assembly rutiiniin

itse asiassa jos testi tehtäisin yhtenevästi tuo assy rutiini veisi vielä puolet enemmän koska rutiini ei siirrä tietoa vaan pelkästään putsaa
mutta tässä testissä oli tarkoitus simuloida REUn kykyä tyhjentää ruutu jota siis tarvitaan Moonfall pelin ruutujen putsauksessa

pelissä ruudun koko on 256 vaaka pixeliä ja 15*8 pikseliä koreus suunassa
tämä malli rutiini pitää siis suorittaa 15x että saadaan ruutu tyhjennettyä
nyt tämä säästetty aika voidaan käyttää vectorien piirtoon mikä myös on aika hidasta
REU sorittaa koko ruudun tyhjennyksen samassa ajassa kuin assy tyhjentää yhden (8x36) rivin = 256 merkkiä

Genetic-PET C64 BBS:
g-point.tunk.org port 1025

Genetic-point Amiga BBS:
g-point.tunk.org port 500

virgo

#2
sain sitten etukäteis joululahjankin jota tässä on käpistelty jo muutama viikko ;)

eli alkuperäisen MoonFall pelin aito source
tosin näyttää olevan vanhempaa versiota kuin kaupallinen versio
samoin backup korppu 4 oli korruptoitunut joten hieman joutuu paikkailemaan
ja kaikki grafiikka fileet ovat kadoksissa joten nekin joutuu tekemään itse
samoin PC linkkerillä tehty koodaus ei ole suoraan yhteensopiva minkään käyttämäni Assyn kanssa
joten käsin korjaamista tiedossa paljon ennen kuin käännös käynnistyy oikeana toimivana pelinä

vaikka jukka aikanaa hieman kirosikin ettei saanut upotettua minun piste rutiinia ohjelmaan
näin jälkeen päin tutkittuna hän on sen kuitenkin tehnyt ;)
mikä lämmittää mieltä vaikkakin vuosien päästä
ilmeisesti viivästynyt julkaisu avitti vielä viimehetken korjailuja
saamani source on ilmeisesti ensimmäisen julkaisu yrityksen ajalta
jossa jukan oma rutiini ja eroa on enemmänkin kuin muutama kello jakso
viivan piirto rutiini taas on ällistyttävän optimoitu en ole nähnyt optimoidumpaa rutiinia
asiaa kuvastaa jukan kommentti " ; note: this can't possibly be much faster! "
tosin tutkimuksen alla on kuinka paljon viivanpiirtoa ennen pystytään coodia optimoimaan
yritän samalla lisätä koodiin piiloviivojen poiston (Elite)
kyseinen toiminto oli MF mutta jukka poisti sen koska piiloviivojen laskenta vei kuulemma liikaa kellojaksoja
nyt tutkitaan onko siihen joku keksinyt paremman matamatiikan xD

kuten tuossa yllä kerroin tarkoitukseni on tehdä MF hyvin optimoitu versio
lähinnä viivanpiirtoon&laskentaan liittyviä buustauksia
tiedoilla mitä asiasta on nyt tällä välillä kertynyt
vaikka alustana olisikin pelkkä C64 tulemme näkemään nopeuden nostoa ruudun päivityksessä
tuen myös kaikkia Chameleoin tarjoamia apuja turboa ja REUta
blitterin käyttö on harkinnassa mutta kokeillaan nyt ensin nämä normaalit jipot koska blitteri on vain Chameleonin 7 päivityksessä joka seuraavassa poistettiin "turhana"

tässä vielä malliksi Jukan ja minun piste rutiini muistaakseni sama pätkä oli C= artikkelissa ?!?
*pitääpä tarkistaa*
vakaa aikomus on tiputtaa tuosta vielä muutama kellojakso :p

Jukka rev1:
LINELOOP1 LDA ROWPNTLO,Y
STA T2
LDA ROWPNTHI,Y
SCROFF1 ADC #0 ;add offset (because of douple buffering) lisää ylätävuun toisen buf arvon
STA T3 ; näin voidaan käyttää samaa taulukkoa
TXA ;x reg. = x coord
AND #$F8
ORA BIT4,Y
TAY
LDA (T2),Y
DOTBIT1 ORA BIT1,X ;get bits from a table
STA (T2),Y

Rev2:
LINELOOP1 LDA ROWPNTLO,Y
STA T2
LDA ROWPNTHI,Y
SCROFF1 ADC #0 ;add offset (because of douple buffering)
STA T3        
LDY BIT4,X
LDA (T2),Y
                ORA BIT1,X ;get bits from a table
STA (T2),Y



Genetic-PET C64 BBS:
g-point.tunk.org port 1025

Genetic-point Amiga BBS:
g-point.tunk.org port 500

virgo

#3
hieman uutisia  :pondering:

kehitin päässäni uuden viivanpiirto rutiinin jolla paiskii vanhaa koodia mennentulle seinille xD
jos ennen yhden 256 pitkän viivan piirtämiseen meni ruuduudun päivityksen verran kello jaksoja
pystyy nykyisellä tekemään vähintään 50-60kpl samoja viivoja 7o7
vielä en ole tarkasti mitannut paljonko se on tehokkaampi mutta vähintään tuohon määrään se pystyy
256 viivan piirtämiseen menee hieman alle 8 rasteri linjaa

testaus on vielä kesknen eikä koodikaan ole vielä täysin optimoitu mutta lähellä olllaan
vielä muutama kielletty käsky ja säästämme vielä 4-8 kellojaksoa per 8 pixeliä
tämä näyttää hyvältä...

:edit 21.30 1.1.2015:

köh köh...
tulipas reviteltyä leukoja hieman enemmän kuin olisi ollut tarve xd
nyt rutiinia on hiottu ja oikeasti testattukin niin alkoi selviämään lopulliset tehotkin
en ole etsinyt lopullista tehoa vaan mittasin vain montako kyseistä viivaa pystyn sillä piirtämään
ilman että päivitys aika loppuu kesken mahdollista olisi ehkä vielä noin 30-80 pixelin piirtämiseen

ulkomuistista kun aloin noita speksejä paukuttamaan niin pieleenhän se meni  :bang:
eli otetaampas uudelleen. kyllä tehoa saadaan mutta ei toiki niin paljon kuin alussa ilmoitin
koodin teho on noin 100 vaakapikseliä ja 20 riviä yhdessä ruudunpäivityksessä se tekee noin 2000 pixeliä
jos tuon muuttaa hires tilaan tehot näyttävät seuraavaa 200*20=4000 pixeliä
( MoonFall pelin ruutu on noin  color 128 x 120 pixeliä mono 256x120 pixeliä)

nyt kysytte että miten koodi pystyy kaksinkertaiseen tehoo tarkemmalla ruudulla ;)
siitä voimme kiitellä C= insinöörejä ja kyllä rutiini pystyy tuohon ehkä muutaman rasteri linjan vie lisää mutta pystyy silti

rutiini piirtelee siis vaaka viivoja
jukan koodissa on noin 4 erilaista spesifiä viivan piirto rutiinia
vaaka / pysty viivojen piirto (esim. kartta)
kulma piirrot on jaettu kahteen osaa riippuen siitä piirretäänkö viivaa enemmän vaaka suuntaan vai pystyyn
näin voidaan välttää kahden suunnan tarkistukset ja mitataan vain viivan "pituutta" ja kun se on saavutettu on viiva valmis
tässä hieman esimerkkiä miten vaaka viiva piiretään nykyisellään pelin rutiineissa


:main flat line loop:
rev 1

!LINELOOP   LDA (T2),Y
!BIT      ORA BIT1,X
         STA (T2),Y

!INXNOP   INX
         INX
         CPX XM2
         BCS !END
         LDA BIT4,X
         BNE !LINELOOP
         TYA
         ADC #8
         TAY
         BNE !LINELOOP

!END      RTS
en ole katsonut mutta olettaisin että rev 2 näyttää seuraavalta
tai ainakin minä olisin sen kirjoittanut näin
pysty kordinaatteja ei tarvitse antaa kuin kerran vaaka pixeleitä voi piirellä pelkällä X rekisterin veivaamisella
muttei edes tästä ole kisaajaksi uudelle rev 3 rutiinille ;-)


!LINE_LOOP

    LDY BIT4,X
    LDA (T2),Y
    ORA BIT1,X
    STA (T2),Y

    INX
   CPX XM2
   BCS !LINE_LOOP
   RTS

mutta koska koodin tehostaminen ei aina kutista koodia vaan ennemminkin kasvattaa sitä
saatan ehkä joutua karsimaan Boost versiosta mono modin pois että saan muistiin tilaa tehokkaamille koodauksille  :(
Genetic-PET C64 BBS:
g-point.tunk.org port 1025

Genetic-point Amiga BBS:
g-point.tunk.org port 500

virgo

#4
;D pitihän se testata mihin tuo Rev 2 versio pystyisi samanlaisessa testissä

kyseinen rutiini pystyy piirtämään samaisia viivoja 9kpl ruudun päivityksessä

ja kun oikein rääkkäsin niin sain max lukemat mihin se pystyy oikeasti kun puristetaan ihan viimeisille
675 pixeliä ruudun päivityksessä eli kauvas jää ;-)

edit:
testasin sitten myös uuden rutiinin huiput tällä hetkellä
79x28=2212 pixeliä ;)

Genetic-PET C64 BBS:
g-point.tunk.org port 1025

Genetic-point Amiga BBS:
g-point.tunk.org port 500

virgo

#5
whoo 700 sadas viesti lähtee tästä vielä 300 to go...

kävin sitten lopultakin masentamassa itseni ja lueskelemassa Gurujen hörinöitä wectorien piirrosta xD
kuten arvasin olen tähtivuosien päässä niistä rutiineista joita on kehitetty aikojen alusta asti
ja edelleen niitä viilataan...

siinä missä wectorin piirossa moonfall peli käyttää Rev 2 tekemääni piste rutiinia kulma piirtoon
se tarkoittaa noin 36 kellojaksoa per piste ilman seuraavan pisteen kohde laskentaa
missä gurujen rutiini piirtää jo wectoria ja kuluttaa siihen 13 kellojaksoa per piste
ja maximissaan 34 per piste

hauskinta asiassa oli huomata ettei jukkakaan ollut juuri paneutunut pisteen piirto koodin syvälliseen toimintaa
vaan oli kopioinut sen suoraan mallista ja koska se oli nopeampi kuin aikaisempi se riitti hänelle
itse havaitsin heti uusia koodeja katsoessani että omassanikin on yksi ilmi selväparannus kohde

muut parannukset joita ajattelin lisätä on jo keksitty ;)
joten ongelmaksi jää vain kerätä koodit talteen ja soveltaa ne toimimaan yhteen pelin mootorin kanssa tai muokata
rutiinit toimimaan pelin kanssa yhteen

mikä parasta piiloviiva ongelmakin ratkeaa melkein kuin itsestään tässä samalla ;)
eikä vie tehoa yhtään enempää vaan edelleen lisää sitä

mitäs nyt sitten ?!?
seuraavaksi hieman opettelen lisää ja teen sourcen muokkaukset loppuun ja yritetään saada
MoonFall Rev1 starttaamaan ja toimimaan niin näen onko se nykyisen kanssa edes yhtenevä

huomasin myös kääntäjän koodia tutkiessani ettei käyttämäni AX kääntäjä
ota huomioon nollasivu osoituksia oikein vaan käyttää 16bit osoituksia ?!?
tästäkin saadaan koodiin tehoa lisää kunhan keksin miten nuo nollasivu osoitteet pitää
erikseen kääntäjälle ilmoittaa ;)
Genetic-PET C64 BBS:
g-point.tunk.org port 1025

Genetic-point Amiga BBS:
g-point.tunk.org port 500

virgo

ensimmäinen packup osa kohta käännetty toimimaan XA65 kääntäjällä vielä 6 to go  :smash:
sitten pääsee kokeilemaan käynnistyykö ja onko ohjelman palaset oikeilla paikoillaan ;)

Genetic-PET C64 BBS:
g-point.tunk.org port 1025

Genetic-point Amiga BBS:
g-point.tunk.org port 500

virgo

Coodi käännetty nyt täysin XA65 kääntäjälle
mutta koodista on iso osa hukassa ja siksi muuttujia ja ohjelma rutiineita puuttuu iso määrä
nyt selvitellää mitä 4 levyn lopusta puuttuu ja mitä rutiineita se sisälsi
Genetic-PET C64 BBS:
g-point.tunk.org port 1025

Genetic-point Amiga BBS:
g-point.tunk.org port 500

virgo


ensikuussa yritämme kopioida uudelleen alkuperäisiä PC korppuja joilla Jukan Sorsa on
vakaa aikomus on saada 4 levyn tiedot 100% talteen mikä tarkoittaa sitä että pelivoidaan käynnistää suoraan kääntäjän kautta
pidetään peukkua että levy paljastaa loputkin salaisuutensa  :thumbup:

projekti on ollut jäissä odottaen tätä hetkeä
Genetic-PET C64 BBS:
g-point.tunk.org port 1025

Genetic-point Amiga BBS:
g-point.tunk.org port 500

virgo

odottelu on ohitse halussani on nyt Täydelliset Sourcet MoonFall pelistä  :pondering:

eipä taida kesäloma riittää ihan kaikkeen xD
Genetic-PET C64 BBS:
g-point.tunk.org port 1025

Genetic-point Amiga BBS:
g-point.tunk.org port 500