;Olavi Lintumäki 14.5.2012 ;Laskee mm. iq:n matriisijutulla ympyrän ja piirtää sen muistiin. ;Tein myös taustan ja tekstin. ; ;Kääntämiseen menee about 15s ja ajamiseen 3min. Kannattaa olla pelkkä näyttöikkuna näkyvillä. ; ;Lähteet: ;http://www.iquilezles.org/www/articles/sincos/sincos.htm ;const float nc = a*c - b*s; ;const float ns = b*c + a*s; ;c = nc; ;s = ns; ;http://www.ieor.berkeley.edu/~ieor261/web/lecture-notes/Random%20Number%20GenerationBIG.ppt s.12 ;a=1217 tätä oli tarkotus käyttää, mutta toisella arvolla tuli kivempi. ;c=0 ;z=23 ;m=2^15-1 a dc 32750 ;max*cos(1.8) tjsp b dc 1086; ;max*sin(1.8) max dc 32767 ; "ykkönen", sama kuin randomigeneraattorin jakaja jakaja dc 1200;800 ;sopiva jakaja koordinaatista väriksi ympyrälle osjakoon dc 2500 ;offsetti ennen jakoa että ei mene osa negatiiviseksi. ;sai lyhyemmäksi kuin jaon jälkeen lisäämisen alku equ 8192 leveys equ 160 keski equ 17712 ;ruudun keskikohta muistissa 8192+160*60-80 keski2 dc 35584 ;keski*2+160 toista peilausta varten. dc koska liian iso. ra equ 32750 ;randomin a siginkohta equ 24821 ;Jump Ympyr ;Jump Sigi ;Viivat load r3,=20 ;montako viivaa load r1,=23 ;seedi LCG-randomiin Loopa load r2,=16 ;montako pikseliä mul r1,=ra ;randomi. mod r1,max load r4,r1 load r5,r1 ;vähän perspektiiviä div r4,=457 div r5,=301 mul r4,r5 ;Viiva Loopv store r2,alku(r4) ;storessa ei uusimmassa toimi osoitus oikein muuttujilla. add r4,=1 ;sijainti sub r2,=1 jnzer r2,Loopv div r4,=50 mul r4,r4 ;vielä lisää syvyyttä. korvaa projektion vaikutuksen sivusuunnassa. div r4,=4 load r2,r4 ;montako pikseliä div r2,=500 shl r5,=4 ;kaislojen päät vihreiksi, taiteellinen rekisterin kierrätyspi ;kaisla Loopk store r5,keski(r4) load r5,r2 ;väri shl r5,=4 load r6,r5 shl r5,=4 add r5,r6 add r4,=leveys ;sijainti sub r2,=1 jpos r2,Loopk sub r3,=1 jnzer r3,Loopa Ympyr load r2,max ;c load r3,=0 ;s load r7,jakaja ;Ympyrä Loop load r4,r2 ;nc = c mul r4, a ;* a - div r4,max ; (normalisointi) load r6,b ;( b mul r6,r3 ;* s div r6,max ; (normalisointi) sub r4,r6 ;) load r5,r2 ;ns = c mul r5,b ;* b + div r5,max ; (normalisointi) load r6,a ;( a mul r6,r3 ;* s div r6,max ; (normalisointi) add r5,r6 ;) load r2,r4 ;c load r3,r5 ;s ;piirto niin että piirretään neljään paikkaan kerralla load r5,r2 ;x div r5,=1024 load r6,r3 ;y div r6,=1024 mul r6,=leveys add r6,r5 add r6,=keski ;ruudun keskikohta lisätään koska se helpottaa väritystä load r1,osjakoon sub r1,r6 div r1,jakaja ;väri shl r1,=8 store r1,(r6) ;vaakapeilikuva sub r6,r5 sub r6,r5 store r1,(r6) load r7,keski2 ;toisen suunnan peilaus sub r7,r6 load r1,osjakoon sub r1,r7 div r1,jakaja ;väri shl r1,=8 store r1,(r7) ;peilikuva sub r7,r5 sub r7,r5 store r1,(r7) Jpos r2,Loop ;Bittikartta sig1 dc 16777244 ;2^2+2^3+2^4+2^23 sig2 dc 150 ;2^1+2^2+2^4+2^7 sig3 dc 401 ;2^0+2^4+2^7+2^8 sig4 dc 1901874641 ;2^0+2^4+2^6+2^7+2^8+2^10+2^11+2^14+2^18+2^19+2^20+2^22+2^24+2^28+2^29+2^30 sig5 dc 1599558289 ;2^0+2^4+2^7+2^9+2^12+2^14+2^16+2^17+2^18+2^20+2^22+2^24+2^25+2^26+2^27+2^28+2^30 sig6 dc 1263981247 ;2^0+2^1+2^2+2^3+2^4+2^5+2^7+2^9+2^12+2^14+2^15+2^17+2^18+2^20+2^22+2^24+2^25+2^27+2^30 sig7 dc 1230394001 ;2^0+2^4+2^7+2^9+2^12+2^14+2^17+2^18+2^20+2^22+2^24+2^27+2^30 sig8 dc 1087524489 ;2^0+2^3+2^7+2^9+2^10+2^11+2^14+2^17+2^20+2^22+2^23+2^30 Sigi load r1,=7 ;mones rivi(montako riviä-1) load r4,=siginkohta ;aloituskohta ruudulla readd load r2,sig1(r1) ;luettu rivi eli sana. Edetään lopusta alkaen. sub r1,=1 sub r4,=192 ;siirrytään aikaisemman rivin alkukohtaan load r3,=32 ;bitit print load r5,r2 shr r2,=1 ;siirrytään mod r5,=2 ;reunimmainen bitti mul r5,=8 push r4,r5 ;piirto ja siirto samalla. Tonin temppu. sub r3,=1 ;bittien luku ja tulostus jpos r3,print jnneg r1,readd End SVC r0,=HALT ;rekisteri joka ei nyt satu osoittamaan ruudulle