| 
| Kirjoittaja | Viesti |  |       
 Tero S.
 Käyttäjätunnus: protek
 
 Rekisteröity: 10-2009
 
 | 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.| Perjantaina,  9. heinäkuuta, 2010 - klo 13.44: |  | 
 
 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
 
 | C64 basicissa ei ole keskeytyksiä kuten joissain kehittyneimmissä koneissa| Maanantaina,  12. heinäkuuta, 2010 - klo 16.54: |  | 
 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
 
 | Itse ajattelin ideoitani kehitellä CC65 c kääntäjällä jossa tiedän tehoa tarpeeksi olevan.| Maanantaina,  12. heinäkuuta, 2010 - klo 16.57: |  | 
 (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
 
 | Vice koitin koko päivän saada vörkkiin mut ei inahdustakaan| Maanantaina,  12. heinäkuuta, 2010 - klo 17.55: |  | 
  
 
 |  |       
 Tero S.
 Käyttäjätunnus: protek
 
 Rekisteröity: 10-2009
 
 | @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.| Maanantaina,  12. heinäkuuta, 2010 - klo 23.36: |  | 
 
 
 |  |       
 Juha-Pekka Kuusela
 Käyttäjätunnus: jpq
 
 Rekisteröity: 10-2009
 
 | virgo: toimii täällä muuten mutta nuo näppäimet ei.| Tiistaina,  13. heinäkuuta, 2010 - klo 21.17: |  | 
 
 
 |  |       
 virgo
 Käyttäjätunnus: virgo
 
 Rekisteröity: 10-2009
 
 | JP:| Keskiviikkona,  14. heinäkuuta, 2010 - klo 2.14: |  | 
 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
 
 | hieman pätkii ajatus näin ehtoolla...| Keskiviikkona,  14. heinäkuuta, 2010 - klo 2.24: |  | 
 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
 
 | 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.| Keskiviikkona,  14. heinäkuuta, 2010 - klo 2.58: |  | 
 
 Alkuperäisestä jumiutumisongelmasta ei ole mitään käryä...
 
 
 |  |       
 Juha-Pekka Kuusela
 Käyttäjätunnus: jpq
 
 Rekisteröity: 10-2009
 
 | 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| Keskiviikkona,  14. heinäkuuta, 2010 - klo 3.12: |  | 
 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
 
 | ohjeiden neuvot niiden ongelma merkkien syöttöön ei toimi.| Keskiviikkona,  14. heinäkuuta, 2010 - klo 3.41: |  | 
 
 
 |  |       
 virgo
 Käyttäjätunnus: virgo
 
 Rekisteröity: 10-2009
 
 | pitänee purkaa tuo rutiini Assylle ja julkasta se täälä niin voi muutkin mietiskellä...| Torstaina,  15. heinäkuuta, 2010 - klo 22.23: |  | 
 
 tosiaan ST muuttujakin oli
  
 
 |  |       
 allu
 Käyttäjätunnus: allu
 
 Rekisteröity: 5-2010
 
 | 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.| Perjantaina,  16. heinäkuuta, 2010 - klo 16.59: |  | 
 
 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
 
 | tänks !| Lauantaina,  17. heinäkuuta, 2010 - klo 13.56: |  | 
 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
 
 | 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.| Sunnuntaina,  18. heinäkuuta, 2010 - klo 19.41: |  | 
 
 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
 
 | 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| Maanantaina,  19. heinäkuuta, 2010 - klo 18.57: |  | 
 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
 
 | kirjoittelin iltapuhteiksi tälläisen esimerkki ohjelman ilman konekieltä...| Torstaina,  22. heinäkuuta, 2010 - klo 0.55: |  | 
 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. .  .  .  .  .
 
 
 |  |