terapiaa no terapiaaa sitten...

Aloittaja virgo, tammikuu 27, 2012, 23:04

« edellinen - seuraava »

virgo

äääh.. kuinkahan pitkä juttu tästä tulee...

yleensä ohjelmointi on mielenkiintoista palapeliin varattavaa rakentelua
hmm... ei vaan paremminkin kuin leikkisi leegoilla sinulla on tiettyjä palasia
joita voit mielesi mukaan sijoitella ja muokata näin rakennelmia ihan mitä haluat
no melkein mutta mielikuvitus näyttelee suurta osaa kokonaisuudessa
ja tuloskaan ei aina ole sellainen kuin aluksi kuvittelit vaan joskus jopa upeampaa

mutta kuten jokainen "aikuinen" tietää asiat eivät vaan suju kuten niiden pitäisi
minulla on ollut ilmeisesti tämä viikko pyhitetty täydellisesti ei toimivilla osilla
jota tässä suunnittelin hieman purkavani

minulla ei oikeasti ole kovin montaa hetkeä viikosta kun voin vain keskittyä coodaamiseen
ihan kaikessa rauhassa ja ajatuksella. tämäkin aika yleensä tuhraatuu pelkkää oleiluun
coodaaminen on kuin kirjan kirjoittaminen istut koneelle ja mitään ei tapahdu aivot jäätyvät
silloin ei auta kuin yrittää rentoutua ja keskityä tekemiseensä

mikä kaikkein eniten ottaa aivoon on hetki kun täälläinen luomis vimma sitten viimein puskee lävitse
ja tunnet että nyt sitä tulee ja monta tuntia putkeen se on upea fiilis MUTTA...
juuri silloin melko monesti jokin tärvelee tämän fiiliksen
viikolla ensimmäinen oli tuo levarin outo "hajoaminen" koska harhaudun hyvin helposti
asiasta mitä olen tekemässä toiseen ja siitä vielä kolmanteen... jen jen...
levarin ihmettelyyn ja scoopin tuijottamiseen meni runsaasti arvokasta aikaa
kuten myös sopivien varaosien etsintään "joita ei sitten löytynyt"
arvaatkin varmaan ettei paljon tulosta syntynyt

mutta kaikesta huolimatta tämä oli seuraavaan vielä hieman ohimoita pullottavaa kamaa
mikä oikeasti nosti höytyt kattoon on ohjelmakoodia silloin tällöin vaivaavat mystiset
ongelmat tarkastat asiat tuhanteen kertaan etkä löydä ohjelmasta mitään vikaa
C64 basicissa on yksi ylitse muiden... huomaatko harhaudun taas asiasta...
mutta menköön nyt maan läheisestä esimerkistä törmäsin tähän Lype copy ohjelmaa
muokatessani ennen jakoon laittamista täällä foorumilla...

C64 Basic siinähän maksimi mitta on kaksi riviä koodia ja tämän jälkeen on otettava
uusi ja joskus coodi jää pahasti kesken kun se olisi hyvä saada samalle riville
basicia on mahdollista huijata käyttämään pidempiä ripsuja
jos kaikki käskyt kirjoitaa lyhenteinä esim Print = ? Goto =gO...
ihan kätevää muuten mutta joskus tämä kahden rivin määrä tulee käytettyä viimeistä piirtoa myöden
ja joskus Basic sekoittaa kaksi riviä toisiinsa
esim.

10 print "juupa ti juupati..."
20 print "seli seli "

kuvitellaan että 10 rivi on täydet kaksi riviä pitkä 80 merkkiä siis
ok ohjelma toimii mutta sitten joku selittää sinulle että 20 rivillä on virhe tai sinun pitää
jotenkin muutella sitä no teet sen yrität ensin korjata rivin
mutta huomaatkin ettei korjausta tehtykkään muutamien kertojen jälkeen huomaat
ettei 20 riviä pysty muokkaamaan se pysyy kaikesta huolimatta alkuperäisenä
tämän jälkeen tietysti tuumaat että deletoin koko rivin pirulauta
eli
20 (entter)
ja tämän jälkeen huomaat ettei 20 rivi tuhoutunutkaan ?!?! WTF...
joskus menee muutamakin tunti ennenkuin tajuaa mistä on kyse
koska tämä ei satu usein vaan riittävän harvaan että ehdit unohtamaan
koko jutun
mitä on tapahtunut Basic tulkki on jostain syystä olettanut että rivit 10 ja 20 ovat samaan riviä
mutta koska koitat muokata riviä joka on tuon maagisen 2 rivin käyttön ulkopuolella
tulkkii ei huomio sen ylitse menevien rivien muutoksia koska sille niitä ei ole olemassa
jos poistat rivin 10  katoavat molemmat
mutta yritykset irroittaa rivi 20 rivistä 10 ei onnistu
rivi 20 pitää aina kirjoittaa uudelleen
yleensä myös rivi 10

no niin nyt olet hieman tapetilla mitä ajan takaa ja olen kertomassa seuraavaksi
Kääntäjien virheet !!!
oma coodisi on 100% toimivaa mutta jokin tulee väliin ja sotkee asiat
yleensä se on kääntäjä ja pahinta niistä edustaa kääntäjät jotka sijaitsevat samassa muisti ympäristössä
kuin ajettava ohjella eli tässä tapauksessa Turbo Ass kääntäjä
nolla sivun ja muuttuja muistin ja ylämuistiin $8000 missä itse ohjelma sijaitsee
jos käskyt vuotavat jostain syystä näille alueille saattaa ohjelma seota mutta vain sen verran ettet itse huomaa
mitä on tapahtunut ja tallentamasi coodi kantaa tätä samaa muutos seikkaa joskus mukanaan
Turbo ass käyttää melkoisesti c64 omaa Rom coodia avustamassa tekemisiään
eli väärään kohtaa osunut nollasivun osoitus saattaa sotkea jotain
huomaat sen ja korjaat virheen mutta virhe on jo tapahtunut ja tästä alkaa pähkäily
onko koodissa jotain vikaa vai onko kääntäjä seonnut
varmin tapa tallentaa tälläinen coodi jonka oletat olevan seonnut
ejektoit sen ASCI muodossa SEQ tiedostoksi näppäimellä <- W
silloin sen mukana ei ole mitään asetus tietoja ja virhe muuttuja alueelle tulleeseen
osoitukseen tulee näkyviin ja sen voi korjata jollain text editorilla joka syö SEQ tiedostoja
ja parhaassa tapauksessa jopa itse Turbo ohjelmassa
helppoa kun tämän tiedostaa...

kuitenkin sattuipa tällä viikolla...
tein kokeiluita assy coodilla eli Turbo ass oli muistissa
ja editoin sitä käänsin muistiin käynnistys koska oli tarkoitus
testata blokki tunnistusta en tavallisuudesta poikkeavasti laittanut looppia
odottamaan CTRL nappulaa kuten yleensä teen vaan setup ohjelman jälkeen

Cli
Rts

eli setup ohjelman jälkeen palasimme Basic editoriin
koska halusin piirrellä siellä ASCI merkkejä näytölle ja katsoa
miten ohjelma reagoi niihin

hommeli toimi aikansa mutta sitten hups ohjelma alkoin kaatumaan
heti käynnistyessään eli mitä teet alat eristämään coodista
ali rutiineita löytääksesi sen joka kaatumisen aiheuttaa tässä tapauksessa seuraus oli sekoava reset
yleensä kun ohjelma harhautuu Action Replay menee Frezz ruutuun josta pääsee suoraan
konekili monitoriin ja sieltä näkee missä prossa on menossa ja missä keskeytykset on ym..
mutta resetoituessa tälläistä tietoa ei saa kaivettua :(

mutta ohjelma jatkoi kaatuilua vaikka eristin jopa itse setup pätkän ja irq alueella ei ollut enään kuin
paluu komento jmp $ea31 eli hyppy oikeaan basicin irq rutiiniin

kaatuilu ei voinut johtua kääntäjästä koska suoritin edellä mainitun SEQ muunnoksen ja
latasin sen puhtaaseen koneeseen eli koneesta virta pois ja ohjelmat uudelleen sisään ja SEQ viimeisenä
ja välitön ohjelman kaatuminen startissa ?!?!?!

tässä ei voinut kuin epäillä kääntäjää ja silloinhan mennään katsomaan itse käännettyä coodia
miltä se näyttää no päälisin puoli kaikki oli ok. Paitsi

1000 lda #<irq (=08) <- tuon pitäs tietenkin olla 10
1002 ldx #>irq (=10)

irq
1010 inc$d020

irq osoitukset olivat muutaman tavun pielessä mikä tarkoittaa sitä että irq hyppy osuu keskelle
käskyä kone kieli käskythän ovat 1 tai max 3 tavuisia C64sessa
jos et hypylläsi osu käskyn ensimmäiseen tavuun oletus että ohjelma toimisi on.... todella minimaaliset
varsinkin jos hyppy on keskeytys rutiinissa
keskeytyksen jumiintuminen yleensä kaataa koneen melko nopeasti
mikä oli mielenkiintoista oli se lisäämällä yhden nollasivun osoituksen irq osoituksen päälle
jostain syystä onnistui sekottamaan kääntäjän osoite matriisin

lda #>cspot
ldx #<cspot
..
..
lda #<irq
ldx #>irq

cspot osoitteet olivat oikein mutta Irq osoitteen ala tavu heitti noin 2 tai 3 tavun verran
kirjoitin coodin varmaan 10 kertaa uudelleen ja vika uusiutui joka kerta
tätä ei ole koskaan tapahtunut minulle ei koko 20 ohjelmointini aikana
joten tästä kiihtyneenä Turbo ohjema tuoreempaan 1.2 versioon 1.0 kun on ollut tähän asti käytössä
SEQ tiedosto sisään ja homma toimi taas...

hetken... kunnes kaatuilu palasi ja pahempana kuin aikasemmin
mutta tällä kertaa käännetty coodi oli puhdas edellä mainituista vioista
mutta silti ohjelma kaatui heti kun yritit sitä käynnistää
näytti siltä että puhtaalla koneella ohjelma kyllä käynnistyi mutta
seuraava käynnistys kerta aiheutti kaatumisen
vaikka
toimivaa koodia ei ollut tätä esimerkkiä enempää

sd inc$d020
jmp sd

tämä on niin simppeli pätkä ettei tämä voi epä onnistua
mutta silti ohjelma kaatui heti käännöksen jälkeen painaessasi "S" start

lopulta päädyin tulokseen ettei TMS tykännyt ohjelman päästämisestä
Basic tilaan koska suoraan levylle objekti fileeksi käännetty ohjelma toimi Basicista käsin täydellisesti
en vain käsitä miksi mutta selvästi kääntäjä otti itseensä jos ohjelma päätyi Basic koodiin
jos ohjelma looppas itsensä kannsa eikä mennyt Basic tilaan homma toimi
nätisti uudelleen ja uudelleen

edelleen on mysteeri miksi se tuota tekee ?!?!?
mutta raivostuttavaa joka tapauksessa
kysymys kuuluu miten tehdä ohjelma joka hallitusti palaa basic coodiin ??
koska käynnistävä osoitus tulee itse TMS







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

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

virgo


nyt selvisi minullekkin mikä on se oikea tajunnan tila missä on paras mahku
edetä tuossa koodin muokkauksessa xD
ensin valvotaan yöksi yö ei saada mitään aikaiseksi
seuraavana yönä alkaa toimimaan kun ei muut ajatukse enään kulje ja häiritse xD
boosti alkoi tuossa 3am nyt tarttee mennä unille 7am xD
Genetic-PET C64 BBS:
g-point.tunk.org port 1025

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