Kirjoittaja |
Viesti |
Tero S. Käyttäjätunnus: protek
Rekisteröity: 10-2009
| Perjantaina, 9. heinäkuuta, 2010 - klo 13.44: | | Löytyykös jostain esimerkkikoodia joystickin luvun keskeytykseen C64 basicilla? Olen jotain pelin tapaista kötöstystä koettanut basicilla vääntää ja tällä hetkellä joystickin luku keskeyttää kaiken muun toiminnan ruudulla, mikä on ihan ymmärrettävää, kun lähdetään kesken kaiken muun ajamaan joystickin liikuttamiseen tai napin painamiseen liittyvää rutiinia. Jos nyt yhtään oikein muistan ja ymmärrän, minun pitäisi suoran rutiinin kutsumisen sijasta nostaa keskeytyslippu pystyyn ja sitten kutsua se rutiini vai miten se nyt meni? Piti vähän aikaa lueskella taas tuota koodirimpsua, että pääsee jyvälle, vaikka onkin jonkin verran koittanut sitä REM -lauseilla kommentoida. Pistän senkin tuohon, niin saatte näytteen allekirjoittaneen kököstä koodaustaidosta. 1 FORT=49152TO49245:READA:POKET,A:NEXT 2 SYS49233 3 DATA24,173,,220,41,1,240,23,173,,220,41,8,240,22,173,,220,41,2,240,21,173 4 DATA,220,41,4,240,20,144,44,169,216,133,144,144,16,169,1,133,144,144,10,169 5 DATA40,133,144,144,4,169,255,133,144,173,,220,41,16,240,8,169,,141,60,3,76,49 6 DATA234,169,1,141,60,3,144,246,169,,133,144,144,228,120,169,,141,20,3,169,192 7 DATA141,21,3,88,96 10 GOSUB1000 : REM ALUSTA MUUTTUJAT 20 GOSUB2000 : REM ALUSTA TAUSTA 30 GOSUB3000 : REM ALUSTA SPRITET 40 GOSUB4000 : REM ALKUTILA 100 GOTO 10500 1000 REM ALUSTA MUUTTUJAT 1010 V=53248 1020 X=200 1030 Y=200 1040 PAL=0 1050 RES=3 1060 PX=30 1070 PY=207 1999 RETURN 2000 REM ALUSTA TAUSTA 2010 PRINT"“" 2020 POKE 53281,1 2999 RETURN 3000 REM ALUSTA SPRITET 3010 POKE 2041,159 : POKE 2042,160 : POKE 2043,161 : POKE2044,162 :POKE2045,163 3020 FORN=0 TO 63 : READQ : POKE159*64+N,Q : NEXT 3021 FORN=0 TO 63 : READQ : POKE160*64+N,Q : NEXT 3022 FORN=0 TO 63 : READQ : POKE161*64+N,Q : NEXT 3023 FORN=0 TO 63 : READQ : POKE162*64+N,Q : NEXT 3024 FORN=0 TO 63 : READQ : POKE163*64+N,Q : NEXT 3030 DATA0,30,0,0,33,0,0,64,128,3,147,64,4,19,192,8,3,192,4,3,64,3,227,128,0,20 3040 DATA0,0,28,0,0,34,0,0,65,0,0,139,0,0,139,0,0,139,0,0,73,0,0,54,0,0,10,0,0 3050 DATA58,0,0,65,0,0,126,0,0 3060 DATA0,0,0,0,0,0,0,0,0,0,128,0,1,192,0,1,192,0,1,192,0,1,192,0,0,128,0,1 3070 DATA224,0,1,152,0,0,96,0,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 3080 DATA0,0,0,0,0,0,0 3090 DATA0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,26,135,0,65,200,0,42 3100 DATA119,0,65,220,0,42,64,0,29,128,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 3120 DATA0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,112,0,4,204,0,119,34,0,13,118,0,1,86 3130 DATA0,0,182,0,0,136,0,0,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 3140 DATA0,0,0,0 3150 DATA0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,0,60,0,0,60,0,0,60,0 3160 DATA0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 3170 POKEV+40,0 : POKEV+41,0 : POKEV+42,0 : POKEV+43,0 : POKEV+44,0 3999 RETURN 4000 REM ALKUTILA 4010 POKEV+2,242 : POKEV+3,200 : POKEV+4,238 : POKEV+5,200 4011 POKEV+6,235 : POKEV+7,203 : POKEV+8,255 : POKE V+9,205 4020 POKEV+10,30 : POKEV+11,207 4040 POKEV+21,18 4999 RETURN 10000 IF PEEK(828) THEN GOTO 10299 10001 IF STICK=-40 THEN GOTO 10100 10002 IF STICK=40 THEN GOTO 10200 10003 IF STICK=0 THEN GOTO 10400 10100 IF X-75 <50 THEN GOTO 10400 10110 IF X-75 >= 50 THEN X=X-75 : POKEV+3,X : POKEV+5,X:POKEV+7,X+3:POKEV+9,X+5 10115 FOR I=1 TO 100: NEXT I 10120 GOTO 10400 10200 IF X+75 >200 THEN GOTO 10400 10210 IF X+75 <= 200 THEN X=X+75:POKEV+3,X:POKEV+5,X:POKEV+7,X+3:POKEV+9,X+5 10215 FOR I=1 TO 100 : NEXT I 10220 GOTO 10400 10299 IF PAL > 0 THEN GOTO 10350 10300 POKEV+21,6 10310 FOR I=1 TO 100 : NEXT I 10320 POKEV+21,10 10330 FOR I=1 TO 100 : NEXT I 10340 POKEV+21,18 10345 GOTO 10400 10350 POKEV+21,38 10360 FOR I=1 TO 100 : NEXT I 10370 POKEV+21,42 10380 FORI=1 TO 100 : NEXT I 10390 POKEV+21,50 10400 RETURN 10500 IF PAL < 4 THEN GOTO 10510 10505 GOSUB10000 10510 LUO=INT(10*RND(1)) 10515 IF LUO=7 THEN GOSUB30000 10550 GOTO 10500 30000 POKEV+21,50 30001 PAL= PAL+1 30002 FORI=1TO1000:PX=PX+2:PY=PY-1:POKEV+10,PX:POKEV+11,PY:GOSUB10000:NEXTI 30020 RETURN
|
virgo Käyttäjätunnus: virgo
Rekisteröity: 10-2009
| Maanantaina, 12. heinäkuuta, 2010 - klo 16.54: | | C64 basicissa ei ole keskeytyksiä kuten joissain kehittyneimmissä koneissa mutta asian voi kyllä kiertää jos välttämättä haluaa alkaa kikkailemaan monesti tosin joutuu toteamaan että Assy on ainoa oikea vaihto ehto grafiikan kanssa basic on valitettavasti onnettoman hidas 64 basic taitaa tukea vain yhtä ainoaa komentoa konekieli koodin ja basic kielen välillä USR ("muuttuja") tässäkin joutuu pokeilla kikkailemaan 785-786 paikkoihin hi ja lo osotteet ennenkuin alkaa toimimaan kone kieli ohjelma saa muuttujan A akkun kautta ja basic paluuna tulee A akun kautta muuttujan arvon komennolla on helppo kiertää poke peek kikkailut ainut hankaluus on että komento tukee vain yhtä hyppyä joten jos haluaa hypätä toiseen rutiiniin poke rutiinit syö hyödyn esim. (poket puuttuvat) Basic: Z=1 usr(Z) :rem kutsutaan konekieli ohjelmaa print "arvo";Z arvo 2 ready. Assy osa: tax ;siirretään A X akkuun inx ;lisätään X=X+1 txa ;siirretään x takaisin akkuun rts ;palataan basiciin Z=2 köh köh ja loppuun pitänee lisätä etten ole komentoa koskaan käyttänyt enkä ole kenenkään muun nähnyt sitä hyödyntävän... yhden alirutiinin kutsumiseen se kuitenkin on näppärämpi tapa kuin poke sys peek yhdistelmä ps. rutiinissa ei ole määritelty STICK in arvoa missään ? 30002 rivillä PX ja PY arvot taitavat ylittää 256 limitin ennen kuin I on 10000 Assy koodi olisi hyvä olla erillään harvemmin tuosta octa luvuista saa selville millainen Datariveillä oleva konekieli ohjelma oikein on yritin kyllä sitä kirjoittaa että olisin sen nähnyt mutta jäi tekemättä... toivottavasti tästä on apua
|
Juha-Pekka Kuusela
Käyttäjätunnus: jpq
Rekisteröity: 10-2009
| Maanantaina, 12. heinäkuuta, 2010 - klo 16.57: | | Itse ajattelin ideoitani kehitellä CC65 c kääntäjällä jossa tiedän tehoa tarpeeksi olevan. (kuhan VICEn säppis toimis kunnolla Mac os xässä eli functio näppäimet ja * ei toimi täytyy taas tuohonkin jaksaa paneutua). ja c64 basic on todellakin tosi toivoton peli ohjelmointiin tai miksei muuhunnkin jopa tiedoston käsittely on ylettömän tuskaisaa sanoisin.
|
virgo Käyttäjätunnus: virgo
Rekisteröity: 10-2009
| Maanantaina, 12. heinäkuuta, 2010 - klo 17.55: | | Vice koitin koko päivän saada vörkkiin mut ei inahdustakaan
|
Tero S. Käyttäjätunnus: protek
Rekisteröity: 10-2009
| Maanantaina, 12. heinäkuuta, 2010 - klo 23.36: | | @virgo: Stick -funktion datalauseet on ihan listauksen alussa. Se ei ole oma tuotokseni vaan jostain poimittu ja jälkikäteen lisätty. Krediitit tekijälle olisi tietty pitänyt laittaa mutta kun tätä lähinnä omaksi huviksi vääntelin.
|
Juha-Pekka Kuusela
Käyttäjätunnus: jpq
Rekisteröity: 10-2009
| Tiistaina, 13. heinäkuuta, 2010 - klo 21.17: | | virgo: toimii täällä muuten mutta nuo näppäimet ei.
|
virgo Käyttäjätunnus: virgo
Rekisteröity: 10-2009
| Keskiviikkona, 14. heinäkuuta, 2010 - klo 2.14: | | JP: KEYssi rommiko puuttuu ? Tero S. ok koittaessani selvittää mitä tuo ohjelma tekee satuin vaan huomaamaan ettei kyseistä muuttujaa aseteta missään kohtaa ohjelmassa C64 on vain kaksi muuttujaa joita käyttis rukkaa itse TI &TI (time) en tiedä olisiko pikkuhiljaa aika alkaa tekeen juttuja vanhojen retro 8bit koneiden ohjelmoinnista kun ei enään taida kirjastoissakaan olla 8bittisten ohjelmointi oppaita olis hienoa jos porukka innostus uudelleen ohjelmoimaan niitä jos on kiinnostusta opetella ainakin minulta voi kysellä neuvoja ja esimerkki rutiineita muutama puolivalmis pelin tekelekin on kaapeissa odottamassa josko joskus,,,
|
virgo Käyttäjätunnus: virgo
Rekisteröity: 10-2009
| Keskiviikkona, 14. heinäkuuta, 2010 - klo 2.24: | | hieman pätkii ajatus näin ehtoolla... kuten tuossa alussa sanoin niin Data lauseiden sisältö on täyttä hepreaa ellei sitä pääse katsomaan Assyn lävitse ja sitä en vielä ole pystynyt tekemään vai että itse tehty muuttuja... mielenkiintoista :D
|
allu Käyttäjätunnus: allu
Rekisteröity: 5-2010
| Keskiviikkona, 14. heinäkuuta, 2010 - klo 2.58: | | On vielä yksi muuttuja jota kernel päivittää, ST. Eli, levyoperaatioiden status muuttuja. Ja sitähän tuossa on todennäköisesti käytettykin (STick == ST, vain 2 ensimmäistä merkkiä ovat merkitseviä). Asmirutiini asentaa oman keskeytyskoukun jossa tikun tiedot luetaan nollasivulla olevaan ST muistipaikkaan ja basic sitten tarjoilee kyseisen tiedon ST muuttujassa. Alkuperäisestä jumiutumisongelmasta ei ole mitään käryä...
|
Juha-Pekka Kuusela
Käyttäjätunnus: jpq
Rekisteröity: 10-2009
| Keskiviikkona, 14. heinäkuuta, 2010 - klo 3.12: | | JP jos viittaa minuun niin kyllä se kyse emulaatio ohjelman asetuksista ja cocoa versio lienee tuo katselen jos löytyy se toinen x-window versio. ja viceä käyttelisin mieluiten emulaatioon kun siinä on myös esimerkiksi vic20... (kun olen pegalla ajaen vakuuttunut sen laadusta ja pegalla koodaisinkin mutta kun mäkki ikävä kyllä nyt pääkoneeni). virgo: itse ajattelin haastaa itseni ja sitten tykkään raudasta jossa aidot spritet jne.
|
Juha-Pekka Kuusela
Käyttäjätunnus: jpq
Rekisteröity: 10-2009
| Keskiviikkona, 14. heinäkuuta, 2010 - klo 3.41: | | ohjeiden neuvot niiden ongelma merkkien syöttöön ei toimi.
|
virgo Käyttäjätunnus: virgo
Rekisteröity: 10-2009
| Torstaina, 15. heinäkuuta, 2010 - klo 22.23: | | pitänee purkaa tuo rutiini Assylle ja julkasta se täälä niin voi muutkin mietiskellä... tosiaan ST muuttujakin oli
|
allu Käyttäjätunnus: allu
Rekisteröity: 5-2010
| Perjantaina, 16. heinäkuuta, 2010 - klo 16.59: | | disassembloin tuon rutiinin ja olin oikeassa. Rutiini asentaa oman keskeytyskäsittelijän joka lukee joystick porttia, tulkkailee jotain omiaan ja tallentaa tiedon ST muistipaikkaan(ja kasettibufferiin) nollasivulle. Tavallaan kiva idea mutta ensinnäkin tuo rutiini on ihan roskaa, yhdistelmiä(viistot+fire) ei tueta ollenkaan ja miksi ihmeessä fire tieto tallennetaan kasettipuskuriin?? Tallentaisi sitten kaikki tiedot kasettipuskuriin eri muistipaikkoihin niin basic puolella säästäisi edes maskaamisen vaivan. Eli parempi dumpata koko asmi huitsin hittoon ja lukea $dc00(56320) portista suoraan joystick kytkinten tilat. Tässä bitit; joystick #2,bit 0=up,1=down,2=right,3=left,4=fire. Ja tässä vielä asmi muidenkin pällisteltäväksi: C000 CLC C001 LDA $DC00 C004 AND #$01 C006 BEQ $C01F C008 LDA $DC00 C00B AND #$08 C00D BEQ $C025 C00F LDA $DC00 C012 AND #$02 C014 BEQ $C02B C016 LDA $DC00 C019 AND #$04 C01B BEQ $C031 C01D BCC $C04B C01F LDA #$D8 C021 STA $90 C023 BCC $C035 C025 LDA #$01 C027 STA $90 C029 BCC $C035 C02B LDA #$28 C02D STA $90 C02F BCC $C035 C031 LDA #$FF C033 STA $90 C035 LDA $DC00 C038 AND #$10 C03A BEQ $C044 C03C LDA #$00 C03E STA $033C C041 JMP $EA31 C044 LDA #$01 C046 STA $033C C049 BCC $C041 C04B LDA #$00 C04D STA $90 C04F BCC $C035 C051 SEI C052 LDA #$00 C054 STA $0314 C057 LDA #$C0 C059 STA $0315 C05C CLI C05D RTS Käynnistysosoite on $c051, ST muuttujan osoite on $90 ja kasettipuskurin osoite on $33c.
|
virgo Käyttäjätunnus: virgo
Rekisteröity: 10-2009
| Lauantaina, 17. heinäkuuta, 2010 - klo 13.56: | | tänks ! ja huh huh mitä spaketti koodia etten sanois C04F kohdassa on kyl melkonen idiotismi hyppy jota en todellakaan suosittele käyttämään luultavasti ST muuttujaa käytetään siksi ettei tarvitsisi käyttää hidasta Peek komentoa... rutiinista saisi huomattavan määrän dataa pois jo vähän miettis ensinnäkin tallentaisin ST muuttujaan 0-9 välisen luvun josta olisi helppo hypätä basicissa oikeaan rutiiniin esim. 10 if st = 0 then (ei mitään nappia) 20 on st goto... (tai gosub)
|
Tero S. Käyttäjätunnus: protek
Rekisteröity: 10-2009
| Sunnuntaina, 18. heinäkuuta, 2010 - klo 19.41: | | Mikrobitistä taisin tuon joystickin lukurutiinin löytää. Aikaisemmassa versiossa homma hoitui perinteisemmon poke/peek -lauseilla. Mitään hyötyähän tuon rutiinin käytöstä ei sitten ollut. Koodista sen verran, että ajatuksena oli tehdä kuusnelosversio Nintendon Game&Watch Snoopy Tennis pelistä. Alkuun tuosta yritti tehdä rakenteellista mutta homma karkasi spagettikoodiksi. Piti näin pitemmän ajan jälkeen itsekin katsoa, että mitä v***ua sitä on tullut kirjoiteltua. Mm. Mailanlyöntianimaatiossa on miettinyt, olisiko ollut kenties fiksumpaa käyttä kolmen spriten sijasta yhtä ja lennossa vaihtaa spriten viittaamaan eri datalauseisiin. Kirjoittelin tämän vajaa viisi vuotta sitten ja se on varmaan pisin koodinpätkä, mitä olen kuusnelosella ikinä kirjoittanut. Ainakin, jos ei lasketa listauksista syöttöä. Yllättäen jäi kesken...
|
virgo Käyttäjätunnus: virgo
Rekisteröity: 10-2009
| Maanantaina, 19. heinäkuuta, 2010 - klo 18.57: | | aika yleinen tapa oli tuo vaihtaa vain data osotetta joskus käytettiin montaa spritee päälekkäin kun haluttiin enemmän kuin ne 4 värii tai siksi että haluttiin käyttää *Hres* moodia jokaisella värille oli oma sprite pinta mun mielestä ohjelmoinnissa oli hauskinta se ettei ollut yhtä oikeaa tapaa tehdä asioita vaan mahdollisuuksia oli melkein rajattomasti :D olihan tuosta joy rutiinista sen verran hyötyä että Basic ei ihan niin paljon jumahtanut kuin Peek poke systeemillä eli huomattavasti nopeampi tapa mutta jos intoa riittää kirjoittaa pelisi loppuun ollaan täällä tukenas ja neuvomas kun ymmärrys loppuu Semiä !
|
virgo
Käyttäjätunnus: virgo
Rekisteröity: 10-2009
| Torstaina, 22. heinäkuuta, 2010 - klo 0.55: | | kirjoittelin iltapuhteiksi tälläisen esimerkki ohjelman ilman konekieltä... joikkarin lukemiseen C128 joy muuttuja voi hyödyntää samalla tavalla ainakin se emussa toimi joten luotan että toimii oikeassa C64 ssakin 10 goto 100 11 return 99 : 100 joy=peek(56320):move=joy and(15) 101 : 120 print "(ruudun tyhjennys)"mo;ti:ti$="000000" 140 if joy and(16) goto 150 141 print "FIRE" 149 : 150 on move gosub 11,11,11,11,370,360,350,11,340,330,320,11,310,300,11 155 goto 100 199 : 200 Rem --- Toiminnat --- 300 print "up":return 310 print "down":return 320 print "left":return 330 print "up/left":return 340 print "down/left":return 350 print "right":return 360 print "up/right":return 370 print "down/right":return 10 hypätään loopiin 11 palautetaan tyhjä hyppy 100 luetaan 56320 paikasta joikan tiedot:erotetaan move muuttujaan alimmat 4 bittiä eli suunnat 120 putsataan ruutu ja tulostetaan Move muuttuja + ti muuttuja :nollataan ti muuttuja tämä vain kellottamaan kuinka kauvan pää loop kestää :voi siis poistaa 140 verrataan joy muuttujaa onko 5 bitti laskenut jos ei hypätään riville 150 141 jos 5 bitti oli alhaalla fire nappulaa oli painettu 150 hyppy lista toimintoihin move muuttuja antamien arvojen mukaan :Move ei voi olla 0 muuten tulee virhe ilmoitus :11 riville hypyistä käytetään ainoastaan viimeistä move=15 muut ovat mahdottomia joikka asentoja :esim. ylös/alas tai vasen/oikea tms. :mutta jos niin käy hypyt menevät turvalliseen paikkaan eivätkä kaada ohjelmaa 155 hommat tehty takaisin loopin alkuun 100 riville 300 mo=14 joikka ylöspäin 310 mo=13 joikka alaspäin 320 mo=11 joikka vasemmalle 330 mo=10 joikka ylös vasemmalle 340 mo=9 joikka alas vasemmalle 350 mo=7 joikka oikealle 360 mo=6 joikka ylös oikealle 370 mo=5 joikka alas oikealle Move muuttujan antamat luvut ovat seuraavat 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 N N N N d u r N d u l N d u N . . . . r r . . l l. . . . . .
|
|