Commodore 64 ja muuta retroa

Muu yhteisön välinen keskustelu.
Post Reply
naputtelija
Devoted Member
Posts: 718
Joined: Wed Nov 03, 2010 7:56 pm
Location: Joku piste pohjoisessa.

Commodore 64 ja muuta retroa

Post by naputtelija »

Tämmöisen ketjun pistän pystyyn, koska tuon ajan koneiden BASIC-järjestelmä on aika samanlainen coolbasicin kanssa ja arvailemalla pääsee pitkälle. tähän ketjuun laitan sitten myöhemmin uutta asiaa, mutta nyt tyydyn vain yhteen esimerkkikoodiin commodore 64:llä.

Code: Select all

10 PRINT "COMMODORE!"
20 GOTO 10
koodi siis tulostaa sanan commodore! loputtomasti. Ohjelma käynnistetään kirjoittamalla RUN.

Code: Select all

10 INPUT "TEKSTI";x$
20 PRINT "KIRJOITIT"
30 PRINT x$
40 GOTO 10
Tämä ohjelma pyytää käyttäjää kirjoittamaan jotain ja tulostaa sen sitten.

Kohta tulee lisää aineistoa jahka pääsen kotiin mm. kuvia.
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...
User avatar
ItzRaines
Active Member
Posts: 211
Joined: Sat Feb 05, 2011 6:59 pm

Re: Commodore 64 ja muuta retroa

Post by ItzRaines »

Teeppäs jotain kivaa peliä. Minulla nimittäin on toistaiseksi vielä toimiva Commodore 64. :D
naputtelija
Devoted Member
Posts: 718
Joined: Wed Nov 03, 2010 7:56 pm
Location: Joku piste pohjoisessa.

Re: Commodore 64 ja muuta retroa

Post by naputtelija »

Minulla on kirja Commodore 64-pelit joista voisin panna tänne muutamat lähdekoodit. Mitenkäs sinulla on c64-taidot?
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...
atomimalli
Moderator
Moderator
Posts: 227
Joined: Wed Aug 29, 2007 3:55 pm

Re: Commodore 64 ja muuta retroa

Post by atomimalli »

Taidampa huomauttaa että tuolla basicilla ei nyt hirmuista taideteosta saa aikaan kun on sen verran hidasta tulkattuna. Jos sille meinaa vääntää niin kannattaa varmaan basicin lisäksi assembleri/konekielitaito käteen. Tässä olisi joku opas sen alotukseen: http://www.c64.ch/programming/ Basic oli kyllä mahtava keksintö tuohon aikaan komentotulkiksi. nykyään joutuu pystyttämään jotain idejä että pääsee koodaamaan. Se ei välttämättä edes tule mieleeen koskaan.

Toinen aiheeseen liittyvä juttu on coolbasicilla oleva nes-emulaattoriproju, jossa minä olen toistaiseksi ainoa osallistuja. Siinä on sama prosessori kuin c64ssä, joten se suorittaa samanlaista konekieltä, mitä c64:kin syö. Emulaattorin koodi voi olla hyvä keino tutustua laitteen toimintaan oppaiden lisäksi.
Aion aivan juuri tuonne ketjuun laittaa linkin videoon jossa koodataan toimiva emulaattori alusta loppuun. Kenties siitä saisi vähän puhtia tuohonkin projektiin.
C64 olisi kyllä osaltaan yksinkertaisempaa emuloida kuin nes kun sillä ei ole niitä mystysiä mappereita. Toisaalta c64-vaatii mukaansa siitä kopitoitua ohjelmakoodia, mikä on hieman kyseenalaista. Oikeastaan yhtä kyseenalaista kuin laittomien pelien pelaaminen sillä :P
naputtelija
Devoted Member
Posts: 718
Joined: Wed Nov 03, 2010 7:56 pm
Location: Joku piste pohjoisessa.

Re: Commodore 64 ja muuta retroa

Post by naputtelija »

atomimalli wrote:Taidampa huomauttaa että tuolla basicilla ei nyt hirmuista taideteosta saa aikaan kun on sen verran hidasta tulkattuna. Jos sille meinaa vääntää niin kannattaa varmaan basicin lisäksi assembleri/konekielitaito käteen. Tässä olisi joku opas sen alotukseen: http://www.c64.ch/programming/ Basic oli kyllä mahtava keksintö tuohon aikaan komentotulkiksi. nykyään joutuu pystyttämään jotain idejä että pääsee koodaamaan. Se ei välttämättä edes tule mieleeen koskaan.

Toinen aiheeseen liittyvä juttu on coolbasicilla oleva nes-emulaattoriproju, jossa minä olen toistaiseksi ainoa osallistuja. Siinä on sama prosessori kuin c64ssä, joten se suorittaa samanlaista konekieltä, mitä c64:kin syö. Emulaattorin koodi voi olla hyvä keino tutustua laitteen toimintaan oppaiden lisäksi.
Aion aivan juuri tuonne ketjuun laittaa linkin videoon jossa koodataan toimiva emulaattori alusta loppuun. Kenties siitä saisi vähän puhtia tuohonkin projektiin.
C64 olisi kyllä osaltaan yksinkertaisempaa emuloida kuin nes kun sillä ei ole niitä mystysiä mappereita. Toisaalta c64-vaatii mukaansa siitä kopitoitua ohjelmakoodia, mikä on hieman kyseenalaista. Oikeastaan yhtä kyseenalaista kuin laittomien pelien pelaaminen sillä :P
Tuskin kovin monikaan tästä kiinnostuneista aloittelijoista omistaa muuta kuin c64:n ilman mitään lisäosia. Tuohonhan tarvitsee MON cartin.
EDIT:

Tai ylipäätään jaksaisi alkaa assembleriä.

EDIT:

En hauku mitään mutta keskityn nyt Basiciin enkä omista MONia.

<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...
atomimalli
Moderator
Moderator
Posts: 227
Joined: Wed Aug 29, 2007 3:55 pm

Re: Commodore 64 ja muuta retroa

Post by atomimalli »

Noh, voi sitä ilmankin säätää konekieltä, vaikka naputella suoraan basicin sekaan. En nyt muista että pitikö siinä olla sitten joku silmukka millä sen kirjottaa muistiin, mutta jotenkin niin ainakin vanhoissa mikrobiteissä oli. Sen takia viittasinkin tuonne mun projun suuntaan kun siellä ollaan konekielen kanssa tekemisissä. Paras taitaa kyllä olla tietokoneella kääntää assemblystä ohjelmat. Kuulemma se konekieli on ihan pelkilteenkin koodattavissa, mutta sitten pitää olla tarkkana hyppyjen ja muiden kanssa jos tulee muutoksia.

Taitaa kyllä olla totta ettei konekielestä kannata alottaa kun ei ole aluksi edes hajua että mihin sitä sitten lopulta tarvii.

Tuli haettua c64:n muistikartta, josta voi olla hyötyä jos haluaa muistia tökkiä vaikka pokella: http://sta.c64.org/cbm64mem.html

Tämä taas on opas, jossa tutustutaan jänniin kikkoihin ja assemblyyn
http://www.antimon.org/code/Linus/
Yksi mielenkiintoinen juttu, minkä huomasin, on mahdollisuus saada lisää spritejä siirtämällä spriten kesken piirron uuteen kohtaan heti kun se on piirtynyt loppuun. 8 spriteä kun on aika vähän, niin ihmiset keksivät kaikenlaista :P

Päätteeksi löysin vielä commodoren manuaalin, josta on varmasti hyötyä basicin kanssa! http://www.lemon64.com/manual/
Havaitsen tuolta, ettei läheskään kaikelle ole omia komentojaan, vaan ensimmäisestä linkistä löytyviä muistiosoitteita kuuluu normaalistikkin tökkiä.
User avatar
ItzRaines
Active Member
Posts: 211
Joined: Sat Feb 05, 2011 6:59 pm

Re: Commodore 64 ja muuta retroa

Post by ItzRaines »

naputtelija wrote:Minulla on kirja Commodore 64-pelit joista voisin panna tänne muutamat lähdekoodit. Mitenkäs sinulla on c64-taidot?
Taitoni rajoittuvat pelaamiseen :D Sillä kun on parhaimmat pelit.
naputtelija
Devoted Member
Posts: 718
Joined: Wed Nov 03, 2010 7:56 pm
Location: Joku piste pohjoisessa.

Re: Commodore 64 ja muuta retroa

Post by naputtelija »

Nostetaanpas tämä ketju varsin hienolla netistä löydetyllä Assemblerilla. Ei ole testattu, mutta pitäisi toimia.

Code: Select all

10 HX=1:REM IF HX= 0 THEN ASSEMBLY I
   S IN DECIMAL
20 DIM HE$(16),ZO$(3),R$(10),MN$(12)
   ,ZA$(1),AZ$(1),L$(3),SA$(4),H$(4)
   ,LR$(1)
30 OPEN #1,12,0,"E:"
50 HE$="0123456789ABCDEF":SZ=1:ZO$="
   000"
100 PRINT "{3 SPACES}SIMPLE
    {3 SPACES}ASSEMBLER  CONVENTIONS
    :";
110 DIM M$(56*3),TY(56),OP(56)
120 FOR I=1 TO 56:READ MN$:M$(I*3-2,
    I*3)=MN$(1,3)
122 TY(I)=VAL(MN$(4,4)):OP(I)=VAL(MN
    $(5))
130 NEXT I
140 PRINT :?
150 PRINT "Immediate{5 SPACES}LDA #1
    5"
155 PRINT "Absolute{6 SPACES}LDA 150
    0"
160 PRINT "Zero page{5 SPACES}LDA 15
    "
165 PRINT "Accumulator{3 SPACES}ASL"
170 PRINT "Indirect X{4 SPACES}LDA (
    15X)"
175 PRINT "Indirect Y{4 SPACES}LDA (
    15)Y"
177 PRINT "Zero page X{3 SPACES}LDA
    15X"
179 PRINT "Zero page Y{3 SPACES}LDA
    15Y"
180 PRINT "Absolute X{4 SPACES}LDA 1
    500X"
185 PRINT "Absolute Y{4 SPACES}LDA 1
    500Y"
189 PRINT :PRINT :{4 SPACES}Enter al
    l numbers in ";
190 IF HX=1 THEN PRINT "hexa";
195 PRINT "decimal"
197 ? :? "Addresses: Use 1536-1791 ($
    0600-$06FF)":? :?
200 PRINT "{2 DEL LINE}Please enter
    starting":? "address for ML prog
    ram";:INPUT SA$:IF SA$="" THEN ?
     "{2 UP}";:GOTO 200
210 IF HX=1 THEN H$=SA$:GOSUB 5000:S
    A=DE:GOTO 217
215 SA=VAL(SA$)
217 IF SA<256 OR SA>=40960 THEN ? "
    {4 UP}Not ZPAGE or ROM!":? :GOTO
    200
220 TA=SA:PRINT "{CLEAR}":GOTO 230
225 ? :? "{BELL} INPUT ERROR ":? :IF
     HX=1 THEN ? "(e.g. #5 should be
     #05)":?
230 IF HX=1 THEN DE=SA:SZ=3:GOSUB 40
    00:PRINT H$;": ";:GOTO 240
235 PRINT SA;": ";
240 TRAP 225:INPUT # 1;MN$:? "{UP}";:
    POKE 85,20:IF MN$="" THEN ? "
    {DEL LINE}";:GOTO 230
241 REM ADD NEW PSEUDO-OPS HERE
242 IF LEN(MN$)>6 THEN IF MN$(LEN(MN
    $)-6)="FORWARD" THEN FB=SA
243 IF MN$="RESOLVE" THEN FR=SA-FB:P
    OKE FB+1,FR-2:PRINT "  OK":GOTO
    230
244 IF MN$="POKE" THEN PRINT "ADDR, N
    UMBER (DEC)";:INPUT ADDR,NUM:POKE
     ADDR,NUM:GOTO 230
250 IF MN$="END" THEN 8000
260 L=LEN(MN$):L$=MN$(1,3)
270 FOR I=1 TO 56:IF L$=M$(I*3-2,I*3
    ) THEN 300
280 NEXT I
290 GOTO 850
300 REM PRIMARY OPCODE CATEGORIES
301 TY=TY(I):OP=OP(I)
305 IF FB=SA THEN TN=0:GOTO 2010
310 IF TY=0 THEN GOTO 1000
320 IF TY=3 THEN TY=1:lF L=3 THEN OP
    =OP+8:GOTO 1000
330 R$=MN$(5):IF HX=1 THEN GOSUB 600
    0
340 LR$=R$(1,1):LL=LEN(R$):IF LR$="#
    " THEN 480
350 IF LR$="(" THEN 520
360 IF TY=8 THEN 600
370 IF TY=3 THEN OP=OP+8:GOTO 1000
380 IF R$(LL)="X" OR R$(LL)="Y" THEN
     630
390 IF L$(1,1)="J" THEN 820
400 TN=VAL(R$):IF TN>255 THEN 430
410 IF TY=1 OR TY=3 OR TY=4 OR TY=5
    THEN OP=OP+4
420 GOTO 2000
430 H=INT(TN/256):L=(TN-256*H):IF TY
    =2 OR TY=7 THEN OP=OP+8:GOTO 470
440 IF TY=1 OR TY=3 OR TY=4 OR TY=5
    THEN OP=OP+12:GOTO 470
450 IF TY=6 OR TY=9 THEN 470
460 GOTO 850
470 G0TO 3000
480 TN=VAL(R$(2))
490 IF TY=1 THEN OP=OP+8:GOTO 2000
500 IF TY=4 OR TY=5 THEN GOTO 2000
510 GOTO 850
520 IF R$(LL-1)=")Y" THEN 540
530 IF R$(LL-1)="X)" THEN 570
540 TN=VAL(R$(2,LL-1))
550 IF TY=1 THEN OP=OP+16:GOTO 2000
560 GOTO 850
570 TN=VAL(R$(2,LL-1))
580 IF TY=1 THEN GOTO 2000
590 GOTO 850
600 TN=VAL(R$):TN=TN-SA-2:IF TN<-128
    OR TN>127 THEN PRINT "TOO FAR";
    :GOTO 850
610 IF TN<0 THEN TN=TN+256
620 GOTO 2000
630 IF R$(LL-1)=")Y" THEN 540
640 IF R$(LL-1)="X" THEN 720
650 REM *ZERO Y
660 TN=VAL(R$(1,LL-1)):IF TN>255 THE
    N 680
670 IF TY=2 OR TY=5 THEN 730
675 IF TY=1 THEN 760
680 GOSUB 770: IF TY=1 THEN OP=OP+24:
    GOTO 710
690 IF TY=5 THEN OP=OP+28:GOTO 710
700 GOTO 850
710 GOTO 3000
720 TN=VAL(R$(1,LL-1)):IF T>255 THE
    N GOSUB 770:GOTO 780
730 IF TY=2 THEN OP=OP+16:GOTO 760
740 IF TY=1 OR TY=3 OR TY=5 THEN OP=
    OP+20:GOTO 760
750 GOTO 850
760 GOTO 2000
770 H=INT(TN/256):L=TN-256*H:RETURN
780 IF TY=2 THEN OP=OP+24:GOTO 810
790 IF TY=1 OR TY=3 OR TY=5 THEN OP=
    OP+28:GOTO 810
800 GOTO 850
810 GOTO 3000
820 TN=VAL(R$)
830 GOSUB 770
840 GOTO 710
850 PRINT "{BELL}ERROR ":GOTO 230
1000 REM 1 BYTE INSTRUCTIONS
1010 POKE SA,OP:SA=SA+1:IF HX=1 THEN
     1030
1020 PRINT OP:GOTO 230
1030 DE=OP:GOSUB 4000:PRINT H$:GOTO
     230
2000 REM 2 BYTE INSTRUCTIONS
2005 IF TN>256 THEN ? :? "Error--";T
     N;">256 ($100)":GOTO 230
2010 POKE SA,OP:POKE SA+1,TN:SA=SA+2
     :IF HX=1 THEN 2030
2020 PRINT OP;" ";TN:GOTO 230
2030 DE=OP:GOSUB 4000:PRINT H$;" ";
2040 DE=TN:GOSUB 4000:PRINT H$:GOTO
     230
3000 REM 3 BYTE INSTRUCTIONS
3010 POKE SA,OP:POKE SA+1,L:POKE SA+
     2,H:SA=SA+3:IF HX=1 THEN 3030
3020 PRINT OP;" ";L;" ";H:GOTO 230
3030 DE=OP:GOSUB 4000:PRINT H$;" ";
3040 DE=L:GOSUB 4000:PRINT H$;" ";
3050 DE=H:GOSUB 4000:PRINT H$:GOTO 2
     30
4000 REM DECIMAL TO HEX (DE TO H$)
4010 H$="":A=INT(DE/256):IF A>0 THEN
     AH=INT(A/16):AL=A-AH*16:H$=HE$
     (AH+1,AH+1):H$(2)=HE$(AL+1,AL+1
     )
4020 A=DE-A*256:AH=INT(A/16):AL=A-AH
     *16:H$(LEN(H$)+1)=HE$(AH+1,AH+1
     ):H$(LEN(H$)+1)=HE$(AL+1,AL+1):
     SZ=1:RETURN
5000 REM HEX TO DECIMAL (H$ TO DE)
5010 D=0:Q=3:FOR M=1 TO 4:W=ASC(H$(M
     ))-48:IF W>9 THEN W=W-7
5030 D=D*16+W:NEXT M:DE=INT(D):RETUR
     N
6000 REM ACCEPT HEX OPCODE INPUT AND
      TRANSLATE IT TO DECIMAL
6010 IF R$(1,1)="#" THEN H$="00":H$(
     3)=R$(2):GOSUB 5000:R$="#":R$(2
     )=STR$(DE):RETURN
6020 LS=LEN(R$):AZ$=R$(1,1):ZA$=R$(L
     S):IF AZ$<>"(" THEN 6050
6030 IF ZA$="Y" THEN H$="00":H$(3)=R
     $(2,4):GOSUB 5000:R$="(":R$(2)=
     STR$(DE):R$(LEN(R$)+1)=")Y":RET
     URN
6040 IF ZA$=")" THEN H$="00":H$(3)=R
     $(2,4):GOSUB 5000:R$="(":R$(2)=
     STR$(DE):R$(LEN(R$)+1)="X)":RET
     URN
6050 IF ZA$="X" OR ZA$="Y" THEN 6070
6060 H$="":IF LS<4 THEN H$=ZO$(1,4-L
     S)
6065 H$(LEN(H$)+1)=R$:GOSUB 5000:R$=
     STR$(DE):RETURN
6070 IF LS=5 THEN H$=R$(1,4):GOTO 60
     90
6080 H$="00": H$(3)=R$(1,2)
6090 GOSUB 5000:R$=STR$(DE):R$(LEN(R
     $)+1)=ZA$:RETURN
8000 PRINT :PRINT "*STARTS ";TA;:SZ=
     3:DE=TA:GOSUB 4000:PRINT " ($";
     H$;")"
8010 PRINT " ENDS{3 SPACES}";SA;:DE=
     SA:SZ=3:GOSUB 4000:PRINT " ($";
     H$;")":END
20000 DATA ADC1097,AND1033,ASL3002,B
      CC8144,BCS8176,BEQ8240,BIT7036
      ,BMI8048
20010 DATA BNE8208,BPL8016,BRK0000,B
      VC8080,BVS8112,CLC0024,CLD0216
      ,CLI0088
20020 DATA CLV0184,CMP1193,CPX4224,C
      PY4192,DEC2198,DEX0202,DEY0136
      ,EOR1065
20030 DATA INC2230,INX0232,INY0200,J
      MP6076,JSR9032,LDA1161,LDX5162
      ,LDY5160
20040 DATA LSR3066,NOP0234,ORA1001,P
      HA0072,PHP0008,PLA0104,PLP0040
      ,ROL3034
20050 DATA ROR3098,RTI0064,RTS0096,S
      BC1225,SEC0056,SED0248,SEI0120
      ,STA1129
20060 DATA STX2134,STY2132,TAX0170,T
      AY0168,TSX0186,TXA0138,TXS0154
      ,TYA0152
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...
Viltzu
Guru
Posts: 1132
Joined: Sun Aug 26, 2007 5:45 pm
Location: Alavieska
Contact:

Re: Commodore 64 ja muuta retroa

Post by Viltzu »

RetroPC, speksit: Kokoonpanona oli aluksi Micro Starin MS6117 emolevy sekä Pentium II 350MHz Slot-1 kantainen prosessori. Kävi kuitenkin ilmi, että emolevy ei tukenut kyseistä prosessoria sen väylänopeuden vuoksi. Uuden emolevyn siis tarvitsi ja sellainen löytyi naapurista, itse asiassa koko kone, joka oli täysin toimiva. Täysin sama prosessorikin siitä löytyi, ainoana erona, että se oli tehty Costa Ricalla kun tämä meidän oli valmistettu Malesiassa. Otimme käyttöön Costa Ricalla tehdyn prosessorin, koska sehän on jo todettu toimivaksi. Koneen emolevyn oli Intel valmistanut. Mallista ei ole nyt tarkempaa tietoa. Aluksi muistia oli 64MB mutta päivitimme sen 256MB:hen kun 3DMark99 MAXin yksi testeistä keskeytyi muistin loppumiseen. Vielä olisi yksi DIMM paikka vapaa ja siihen saisi 128MB:n kamman, jolloin olisi maksimi määrä muistia mitä emolevy tukee, eli 384MB.

Testasimme ensin AGP-väyläisellä ATi 3D Rage Pro kortilla, koska ajurit olivat jo valmiina. Kyseinen näytönohjain on valmistettu vuonna 1998 ja siinä on 75MHz:n core sekä 8MB muistia. Tässä vaiheessa koneessa itsessään oli vielä 64MB muistia ja yksi testeistä keskeytyi sen loppumiseen. Myös muutama muu testi keskeytyi koska laitteisto ei tukenut kyseisiä testejä. Pisteitä kortti sai 3DMark99 MAXissa 872 ja kun päivitimme muistin määrän 256MB:hen, jotta kaikki mahdolliset testit tulisi ajetuksi, tulos parani 21:llä, eli 893 pistettä. Päivitimme tämän jälkeen kuitenkin vielä ajurit uusimpiin ja tulos parani roimasti, 1254 pistettä.

Seuraavaksi oli vuorossa PCI-väyläinen ATi 3D Rage IIc. Kyseinen näytönohjain sai pisteitä huimat 165! Näytönohjain on myös valmistettu vuonna 1998, mutta coren nopeus on 60MHz (AGP versiossa ainakin, ei varmuutta PCI versiosta) sekä muistia 2MB.

Vaikka ATi 3D Rage IIc:n pisteet jäivät pahasti AGP-väyläiselle Rage:lle, Orchid Righteous 3D II sen rinnalla muutti tilanteen. Kyseessä on siis Voodoo2 lisäkortti (kiihdytinkortti), joka laitetaan tavallisen näytönohjaimen rinnalle ja yhdistetään kaapelilla, joka laitetaan näytönohjaimen VGA-liittimestä kiihdytinkortin sisääntuloon. Tällä kokoonpanolla pisteitä ropisi huimat 2707!

Orchid Righteous 3D II ei itse asiassa sikäli toimi mitenkään näytönohjaimen kanssa yhteistyössä, kun 3D sovelluksia ei ole käytössä kaikki pusketaan näytönohjaimen läpi, mutta kun 3D:tä tarvitaan, normaali näytönohjain otetaan pois käytöstä ja Orchid ottaa vallan. Kortin tiedoista sen verran, että muistia löytyy huimat 12MB ja kortissa onkin 24 kappaletta 512kB:n kokoista muistipiiriä.

Näitä on vielä mahdollista laittaa 2 kappaletta ja ne yhdistetään SLI-sillalla ja kyseessähän ei ole nVidian SLI-tekniikka. Kyseessä on Scan-Line Interleave tekniikka (nVidian tekniikkaa kutsutaan Scalable Link Interfaceksi). Meillä ei aluksi ollut toista voodoo2 korttia, jonka olisi voinut laittaa. Selasin muropaketin foorumeita läpi ja kyselin ihmisiltä vieläkö löytyisi. Tuli sitten ostettua Diamond Monster 3D II, joka on sama kortti mutta eri valmistaja. (Itseasiassa Diamond Multimedia osti Orchidin). Tuloksena pisteet kasvoivat yhteen voodoo2 korttiin verrattuna noin 390:llä. Tämä, johtuu siitä, että prosessorimme on liian hidas. Oletettavasti se on pullonkaulana jo vain yhdellekkin kortille. FPS oli kuitenkin monessa kohtaa tuplaantunut ja on todettu, että kaksi korttia suurin piirtein tuplaa tehot. Tarvitsemme vain tehokkaamman prosessorin. (Löytyy yksi Pentium III 500MHz, mutta ei sille sopivaa emolevyä.)

Vielä graafi tuloksista: (ATi Rage Pro Turbo on sama kuin pelkkä ATi 3D Rage Pro)
Image
Kuten näkyy tulos ei hirveästi parantunut SLI:llä. Eikä vaikutusta näytönohjaimella, koska voodoo2 kortit ottavat vallan kun alkaa tapahtumaan.
EDIT:

Ai, jos haluatte vertailua vähän nykyaikaisempaan koneeseen HD6750 ja Intel i7 mobiili sai pisteitä ~40 000

Last edited by Viltzu on Thu Apr 19, 2012 2:38 pm, edited 1 time in total.
naputtelija
Devoted Member
Posts: 718
Joined: Wed Nov 03, 2010 7:56 pm
Location: Joku piste pohjoisessa.

Re: Commodore 64 ja muuta retroa

Post by naputtelija »

Ohhoh, yllä oleva koodi on siis Amigalle. C64:lle, VIC-20 ja applen ensimmäisille koneille:

Code: Select all

10 H=1:REM IF H = 0 THEN ASSEMBLY IS IN DEC
   IMAL
50 HE$="0123456789ABCDEF":SZ=1:ZO$="000"
100 PRINT"   SIMPLE   ASSEMBLER  CONVENTIONS
    :"
110 DIMM$(56),TY(56),OP(56)
120 FORI=1TO56:READM$(I)
122 ROP$=MID$(M$(I),4,1):TY(I)=VAL(ROP$)
124 OP$=RIGHT$(M$(I),3):OP(I)=VAL(OP$)
126 M$(I)=LEFT$(M$(I),3)
140 NEXTI: PRINT
150 PRINT"IMMEDIATE     LDA #15
155 PRINT"ABSOLUTE      LDA 1500
160 PRINT"ZERO PAGE     LDA 15
165 PRINT"ACCUMULATOR   ASL
170 PRINT"INDIRECT X    LDA (15X)
175 PRINT"INDIRECT Y    LDA (15)Y
177 PRINT"ZERO PAGE X   LDA 15X
179 PRINT"ZERO PAGE Y   LDA 15Y
180 PRINT"ABSOLUTE X    LDA 1500X
185 PRINT"ABSOLUTE Y    LDA 1500Y
189 PRINT:PRINT"    ENTER ALL NUMBERS IN ";
190 IFH=1 THENPRINT"HEX":GOTO200
195 PRINT"DECIMAL"
200 PRINT:PRINT"PLEASE INPUT STARTING ADDRES
    S FOR ML PROGRAM":INPUT SA$
210 IFH=1THENH$=SA$:GOSUB5000:SA=DE:GOTO220
215 SA=VAL(SA$)
220 TA=SA:PRINT"{CLEAR}":REM CLEAR THE SCREE
    N
230 IFH=1THENDE=SA:SZ=3:GOSUB4000:PRINTH$;:G
    OTO240
235 PRINTSA" ";
240 INPUTMN$:PRINT"{UP}"SPC(20);:REM GO UP O
    NE LINE AND OVER 20 SPACES
241 REM ADD NEW PSEUDO-OPS HERE
242 IFRIGHT$(MN$,7)="FORWARD"THENFB=SA
243 IFRIGHT$(MN$,7)="RESOLVE"THENFR=SA-FB:PO
    KEFB+1,FR-2:PRINT"  OK":GOTO230
244 IFRIGHT$(MN$,4)="POKE"THENPRINT"ADDR,NUM
    BER(DEC)";:INPUTADR,NUM:POKEADR,NUM
    :GOTO230
250 IFMN$="END"THENPRINT:PRINT"      PROGRAM
     IS FROM"TA"TO"SA:END
260 L=LEN(MN$):L$=LEFT$(MN$,3)
270 FORI=1TO56:IFL$=M$(I)THEN300
280 NEXTI
290 GOTO850
300 REM PRIMARY OPCODE CATEGORIES
301 TY=TY(I):OP=OP(I)
305 IFFB=SATHENTN=0:GOTO2010
310 IFTY=0THENGOTO1000
320 IFTY=3THENTY=1:IFL=3THENOP=OP+8:GOTO1000
330 R$=RIGHT$(MN$,L-4):IFH=1THENGOSUB6000
340 LR$=LEFT$(R$,1):LL=LEN(R$):IFLR$="#"THEN
    480
350 IFLR$="("THEN520
360 IFTY=8THEN600
370 IFTY=3THENOP=OP+8:GOTO1000
380 IFRIGHT$(R$,1)="X"ORRIGHT$(R$,1)="Y"THEN
    630
390 IFLEFT$(L$,1)="J"THEN820
400 TN=VAL(R$):IFTN>255THEN430
410 IFTY=1ORTY=3ORTY=4ORTY=5THENOP=0P+4
420 GOTO2000
430 H%=TN/256:L%=TN-256*H%:IFTY=2ORTY=7THENO
    P=OP+8:GOTO470
440 IFTY=1ORTY=3ORTY=4ORTY=5THENOP=OP+12:GOT
    O470
450 IFTY=6ORTY=9THEN470
460 GOTO850
470 GOTO3000
480 TN=VAL(RIGHT$(R$,LL-1))
490 IFTY=1THENOP=OP+8:GOTO2000
500 IFTY=40RTY=5THENGOTO2000
510 GOTO850
520 IFRIGHT$(R$,2)=")Y"THEN540
530 IFRIGHT$(R$,2)="X)"THEN570
540 TN=VAL(MID$(R$,2,LL-3))
550 IFTY=1THENOP=OP+16:GOTO2000
560 GOTO850
570 TN=VAL(MID$(R$,2,LL-3))
580 IFTY=1THENGOTO2000
590 GOTO850
600 TN=VAL(R$):TN=TN-SA-2:IFTN<-128ORTN>127T
    HENPRINT"TOO FAR ";:GOTO850
610 IFTN<0THENTN=TN+256
620 GOTO2000
630 IFRIGHT$(R$,2)=")Y"THEN540
640 IFRIGHT$(R$,1)="X"THEN720
650 REM *ZERO Y
660 TN=VAL(LEFT$(R$,LL-l)):IFTN>255THEN680
670 IFTY=2ORTY=5THEN730
675 IFTY=1THEN760
680 GOSUB770:IFTY=1THENOP=OP+24:GOTO710
690 IFTY=5THENOP=OP+28:GOTO710
700 GOTO850
710 GOTO3000
720 TN=VAL(LEFT$(R$,LL-1)):IFTN>255THENGOSUB
    770:GOTO780
730 IFTY=2THENOP=OP+16:GOTO760
740 IFTY=1ORTY=3ORTY=5THENOP=OP+20:GOTO760
750 GOTO850
760 GOTO2000
770 H%=TN/256:L%=TN-256*H%:RETURN
780 IFTY=2THENOP=OP+24:GOTO810
790 IFTY=10RTY=3ORTY=5THENOP=OP+28:GOTO810
800 GOTO850
810 GOTO3000
820 TN=VAL(R$)
830 GOSUB770
840 GOTO710
850 PRINT"{REV} ERROR ":GOTO230
1000 REM 1 BYTE INSTRUCTIONS
1010 POKESA,OP:SA=SA+1:IFH=1THEN 1030
1020 PRINTOP:GOTO230
1030 DE = OP:GOSUB4000:PRINTH$:GOTO230
2000 REM 2 BYTE INSTRUCTIONS
2005 IFTN>256THENPRINT" INCORRECT ARGUMENT. (
     #5 IN HEX IS #05)":GOTO230
2010 POKESA,OP:POKESA+1,TN:SA=SA+2:IFH=1THEN2
     030
2020 PRINTOP;TN:GOTO230
2030 DE = OP:GOSUB4000:PRINTH$" ";
2040 DE = TN:GOSUB4000:PRINTH$:GOTO230
3000 REM 3 BYTE INSTRUCTIONS
3010 POKESA,OP:POKESA+1,L%:POKESA+2,H%:SA=SA+
     3:IFH=1THEN3030
3020 PRINTOP;L%;H%:GOTO230
3030 DE = OP:GOSUB4000:PRINTH$" ";
3040 DE = L%:GOSUB4000:PRINTH$" ";
3050 DE = H%:GOSUB4000:PRINTH$:GOTO230
4000 REM DECIMAL TO HEX (DE TO H$)
4010 H$="":FORM=SZTO0STEP-1:N%=DE/(16^M):DE=D
     E-N%*16^M:H$=H$+MID$(HE$,N%+1,1)
4020 NEXT:SZ=1:RETURN
5000 REM HEX TO DECIMAL (H$ TO DE)
5010 D=0:Q=3:FORM=1TO4:FORW=0TO15:IFMID$(H$,M
     ,1)=MID$(HE$,W+1,1)THEN5030
5020 NEXTW
5030 Dl=W*(16^(Q)):D=D+D1:Q=Q-1:NEXTM:DE=INT(
     D):RETURN
6000 REM ACCEPT HEX OPCODE INPUT AND TRANSLAT
     E IT TO DECIMAL
6010 IFLEFT$(R$,1)="#"THENH$="00"+RIGHT$(R$,2
     ):GOSUB5000:R$="#"+STR$(DE):RETURN
6020 LS=LEN(R$):AZ$=LEFT$(R$,1):ZA$=MID$(R$,L
     S,1):IFAZ$<>"("THEN6050
6030 IFZA$="Y"THENH$="00"+MID$(R$,2,2):GOSUB5
     000:R$="("+STR$(DE)+")Y":RETURN
6040 IFZA$=")"THENH$="00"+MID$(R$,2,2):GOSUB5
     000:R$="("+STR$(DE)+"X)":RETURN
6050 IFZA$="X"ORZA$="Y"THEN6070
6060 H$=LEFT$(ZO$,4-LS)+R$:GOSUB5000:R$=STR$(
     DE):RETURN
6070 IFLS=5THENH$=LEFT$(R$,4):GOTO6090
6080 H$="00"+LEFT$(R$,2)
6090 GOSUB5000:R$=STR$(DE)+ZA$:RETURN
20000 DATAADC1097,AND1033,ASL3002,BCC8144,
      BCS8176,BEQ8240,BIT7036,BMI8048
20010 DATABNE8208,BPL8016,BRK0000,BVC8080,BVS8
      112,CLC0024,CLD0216,CLI0088
20020 DATACLV0184,CMP1193,CPX4224,CPY4192,DEC2
      198,DEX0202,DEY0136,EOR1065
20030 DATAINC2230,INX0232,INY0200,JMP6076,JSR9
      032,LDA1161,LDX5162,LDY5160
20040 DATALSR3066,NOP0234,ORA1001,PHA0072,PHP0
      008,PLA0104,PLP0040,ROL3034
20050 DATAROR3098,RTI0064,RTS0096,SBC1225,SEC0
      056,SED0248,SEI0120,STA1129
20060 DATASTX2134,STY2132,TAX0170,TAY0168,TSX0
      186,TXA0138,TXS0154,TYA0152
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...
Post Reply