Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Cga composite (QB)

Sivun loppuun

Grey [08.11.2007 16:45:55]

#

Yksinkertaisesti sanoen, kuinka saada säädettyä moinen näyttötila Qbasicilla? Tiedän ettei se nykykoneilla toimi, mutta tarkoitus onkin säheltää enemmän DosBoxin puolella. Itse sitten käyttöä ei ole tarpeen selittää, eikä ole tarpeen mainita ettei Qbasicin omat grafiikkakomennot toimisi. Sen kikan jo tiedän miten ne saa toimimaan, mutta sitä en ole saanut selville miten cga composite laitetaan päälle.

Jos ihmettelette mitä moisella tarkoitan, niin tässä screenshotti. Sen vertaa olen tuota tilaa tarkastellut ja sitä käyttäviä pelejä että esim. King Quest-sarjan varhaiset osat tukivat moista ja ne osasivat jopa vaihtaa tuon tilan cga:sta compositeen ja toisin päin, kesken ohjelman suorituksen. Silti, itselleen tämä juuri tämä ei ole selvinnyt >.<

-Grey-

Grey [11.11.2007 22:25:18]

#

Asia ratkaistu. Oli kiinni vain yhdestä portista ja parista tavusta. Seuraavaksi pitää keksiä compakti kikka millä saada aikaan 640x200 mustavalko ilman että Qbasic ymmärtää näyttötilan vaihtuneen. Keskeytykset toki tiedän, mutta olen utelias tietämään onnistuuko asia mitenkään muulla tapaa? Kuin ne ja screen-käsky. Toki jos tietäisin mistä päin muistia Qbasic katsoo näyttötilan, voisi sitä säätää.

Syynä tälläiseen säätöön on se että kun näyttötila vaihdetaan 320x200 > 640x200 ja säädetään composite käyttöön, qbasic-reppana piirtää asiat ihan väärin, enkä olisi kovinkaan halukas piirtokäskyjä muuttamaan ottamaan tuon huomioon, koska ratkaisu pitäisi pitää mahdollisimman pienenä. Eräänläinen haasteprojekti tässä menossa..

-Grey-

neau33 [12.11.2007 08:16:36]

#

Moikka Grey!

tämä on nyt hieman hataraa, mutta...

A0000H - AFFFFH: EGA/VGA näyttöpuskuri. Ei käytettävissä mikäli EGA/VGA/SVGA kortti on asennettu ja käytössä. Kestää pukata kamaa mikäli VGA/EGA tilaa ei käytetä.

B0000H - BFFFFH: Teksti ja CGA-näytötilat. EGA/VGA kortit käyttää aluetta videosivuihin. Ei kannata käytellä mikäli Teksti tai CGA tila on päällä. Muutoin kestää pukata kamaa.

...DosBox'n kanssa voi kuitenkin olla, että homma heittää heti häränp...

PS. on sulla aikamoiset viritelmät meneillään...

Metabolix [12.11.2007 09:28:43]

#

Käsitinkö nyt oikein, että vaihdat näyttötilaa ja valitat, kun QB piirtää uudessa tilassa väärin? Tietenkin se piirtää väärin, jos se ei osaa tuota tilaa käyttää, kun muistin asettelu on erilainen. Miksi haluaisit, että QB ei tiedä tilan vaihtuneen? Silloinhan se vasta väärin piirtääkin, kun taas tietäessään se voi ehkä yrittää sopeutua uuteen tilaan (jos osaa).

neau33 [12.11.2007 10:40:26]

#

Moikka taas Grey!

pieni lisäys...käsittääkseni homma on ja etenee täsmälleen juuri niin, kuin ajattelit. Elikä jos kajoat DisplayMemoryArea'n sisältöön SCREEN MODE jutskaa vaihtamalla niin homma on menetetty ja kaikki kuten esim. videosivujen sisältö pyyhkäistään pois muistista kertaheitolla. Tuntuisi siis aika loogiselta kopioida kamaa muistipaikasta a paikaan b (= anywhere in free available memory) ennen näyttötilan vaihtamista....Moottorista, jolla muokkaat piirtämisen uuteen uskoon hakiessasi tiedot muistipaikasta b ei kuitenkaan välttämättä muodostu ihan ultra-kevyt...vaikkakin perustaksi jää lopulta vain koordinaatit (ympäri käydään ja yhteen tullaan kaikki on lopultakin vain pelkkää PSET'iä)...

Grey [12.11.2007 17:24:12]

#

Ilmeisemmin olen liian pitkälle kehittynyt tämän paikan porukkaan nähden, mutta katsotaan..

Olen tutustunut tähän aiheeseen sen vertaa että tiedän esim. näyttötilan vaihtamisen olevan mahdollista, ilman että edellistä pyyhitään tyhjäksi. Tämä tapahtuu sopivilla säädöillä. Qbasicin screen on siitä "kehittynyt" että se alustaa näytön, ym. ja säätää muistin niin että se "tietää" miten piirtää. Väärin piirto tapahtuu tässä tapauksessa niin että screen asettaakin asiat väärin.

Kun katsellaan näyttötiloja 1 ja 2 (320x200 neliväri ja 640x200 mono), niin esim. näiden tavassa käsitellä muistiaan ei ole liiaksi eroa. Ainoa ero on leveys, mutta jos laskette vaikka miten paljon tilat vievät muistia ja katsotte missä järjestyksessä pikselit ovat, ero supistuu hyvin pieneksi. Näin ollen käyttämällä tilan 1 systeemejä voidaan tilaan 2 piirtää ihan toimivasti. Muussa tapauksessa menee virittelyksi laittaa piirtokäskyt ottamaan huomioon tila ja siitä vasta syntyykin aika pahaa purkkaa.

Olen siis tutustunut aiheeseen melko hyvin. Ne joilla on emulaattori käytössä (DosBox esim.) ja cga-emulaatio päällä siellä, voivat kokeilla seuraavaa koodia. Myös jos sattuu omistamaan oikeaa rautaa, sekin käy. Huomautan että jos vinkki ei toimi, niin käytätte joko väärää emulaattoria/väärää versiota siitä, tai olette yrittäneet testata koodia ihan väärillä asetuksilla. Cga, ei Vga! Huomatkaa tämä jos mielitte testata compositea..

DECLARE FUNCTION SetBit$ (Tavu AS STRING, Bitti AS INTEGER, Tila AS INTEGER)

DEFINT A-Z
RANDOMIZE TIMER
SCREEN 2
DEF SEG = &HB800
 FOR I = 0 TO 16383
  POKE I, INT(RND * 256)
 NEXT
DEF SEG
SLEEP 2

'Mwahahahahahahaaaa!
OUT &H3D8, ASC(SetBit(CHR$(INP(&H3D8)), 3, 0))

DO
W$ = INKEY$
LOOP UNTIL W$ = CHR$(27)

FUNCTION SetBit$ (Tavu AS STRING, Bitti AS INTEGER, Tila AS INTEGER)

IF Tila = 0 THEN
  SetBit = CHR$(ASC(Tavu) AND (255 - 2 ^ (Bitti - 1)))
ELSE
  SetBit = CHR$(ASC(Tavu) OR (2 ^ (Bitti - 1)))
END IF

END FUNCTION

Huomatkaa että kun compositeen siirrytään, esim. näyttömuistia ei tosiaankaan tyhjätä. Ne jotka tykkäävät leikkiä keskeytyksillä, saavat saman ilmiön aikaan. Jos testaatte koodia tarkkaan, huomaatte että esim. Qbasic olettaa olevansa tilassa 640x200 ja siten se piirtää pikselit oikeisiin paikkoihin. Jos saatte Qbasicin olettamaan olevansa tilassa 320x200, vaihdatte tilaan 640x200, niin piirto tapahtuu oikein, eikä näyttömuistikaan tyhjene.

Olen käyttänyt esim. lineä tekstitilassa tällä tyylillä, mutta se on vaatinut pikkuylimääräistä mukaan, mitä koetan välttää. Compakti koodaus on se mitä pyrin oppimaan ja todellisen 80-luvun hakkeroinnin..

-Grey-

neau33 [12.11.2007 18:16:09]

#

MOIKKA Grey!

Sori vaan, mutta luonnehtisin kehitystäsi kyllä lähinnä taantumukseksi...

Grey [12.11.2007 18:28:51]

#

Sanoo purkkakoodari? Jonka tietämys raudasta on samaa tasoa kuin mitä vasemman jalan sukan tietämys poliitikasta. Jo tekstisi yllä osoittaa että tietämyksesi ohjelmoinnin suhteen on hyvin vähäistä. Ehkä toki osaat jotain Visual Basicilla väsätä, mutta kun mennään vähän pitemmälle, jo menee sormi suuhun. Vaan sitä se on teillä nuorilla, kun hemmotellaan kaikenmoisilla gui-väkerryksillä. Toista oli ennen vanhaan, kun tosiaan oli pakko osata ohjelmoida.

Äläkä väitä ettei taitoa tarvitse muka nykypäivänä. Onhan sitä purkkaa helppo tehdä, kun alla on 2 ghz prossu ja muistia sellaiset 4 gigaa, mutta se typerää. Eritoten jos projekti kasvaa vähänkään isommaksi, olet pulassa. Varsinkin verkko-ohjelmoinnissa purkkakoodaus kostautuu ja rankasti. Ei se 0.04 suoritusaika ehkä pahalta tunnu, mutta kerroppa se suoritusaika 1000 tai isommalla luvulla. Toki jos omalle possulleen jotkut sivut väsää, tai muuta.

Turha siis puhua taantumuksesta, kun omatkaan taitosi eivät ole sitä luokkaa että sinulla olisi yhtään varaa sanoa mitään. Voin rehellisesti pitää itseäni pätevänä ohjelmoijana, vaikka en olekaan mestarien tasoa, mutta kyllä päihitän newbiet vaikka vasemmalla kädellä päällään seisten. Jos et usko, niin voidaan toki ottaa koodauspuolella mittaa, tyttönen..

-Grey-

T.M. [12.11.2007 18:41:41]

#

neau33 got Owned.

Grey [12.11.2007 19:35:16]

#

Muinaisaikoina: Macintosh ja hypercard. Ikää asianomaisella 6-8 vuotta. Myöhemmin tutustuminen Commodore 64:n (vaiko 128?). Dos tutuksi myöhemmin ja sen oppiminen. Ikää tuolloin ehkä 10-12 vuotta. Yksi kolmesta kaiketi, jotka ylipäätänsä osasivat käyttää moista tuolloin koulussa.

Paljon paljon myöhemmin lopulta käsiin koodaukseen. Aiemmin kerätyistä taidoista oli vähäsen apua, ja taidot kasvoivat sen viiden aikana. Kokemuksista viisastuneena optimoidun ohjelmoinnin kanssa opettelemista ja ylimääräisten asioiden karsimista koodista (että shell-purkan välttämistä). Tiputuksia eräänkin projektin kanssa noin 30 kiloa. Erittäin yllättävän paljon ja vielä koodissa mitä ei ole kommentoitu! 64 kilon raja pidetty kurissa koodin suhteen.

Sitten tietoa vähäsen. Hercules, ei menneisyydestä tuttu, mutta myöhemmin tullut tutuksi. 720x350 maksimiresoluutio mustavalkoisena. 720x348 käytännössä, koska fontin piti olla jaollinen tietyllä numerolla. Muisti limitettynä neljään verrattuna cga:n kahteen! Harkinnassa tosin tutustuminen uudemman kerran moiseen, jahka matematiikka tulee kuntoon.

Entä moderni ohjelmointi? Ei kiinnostusta, sillä siitä puuttuu loppujen lopuksi haaste. Valmiita kirjastoja on miljoonia. Sen kun plänttää makerien tyyliin pari käskyä ja saa valmiin ohjelman! Jotenka pysyn vanhemmassa kaavassa ja optimoinnissa. Sitä paitsi, se pitää aivotkin kunnossa. Ristikot ja sudokut kun eivät tuppaa kiinnostamaan. Varsinkaan kun niistä puuttuu mahdollisuus tehdä jotain omaa..

-Grey-

Antti Laaksonen [12.11.2007 20:15:07]

#

Ohjelmointi on niin laaja alue, että vaikka olisi miten taitava ohjelmoija, niin aina löytyy asioita, joista ei ymmärrä tuon taivaallista. Joku voi ihan hyvin olla yliopiston tietojenkäsittelytieteen professori, mutta ei ole eläissään nähnyt kirjainyhdistelmää CGA.

Dude [12.11.2007 20:33:55]

#

Hmm... Vai ei Laaksonen oo kullu CGAta. Kummallista.

Grey kirjoitti:

Sanoo purkkakoodari? Jonka tietämys raudasta on samaa tasoa kuin mitä vasemman jalan sukan tietämys poliitikasta. Jo tekstisi yllä osoittaa että tietämyksesi ohjelmoinnin suhteen on hyvin vähäistä. Ehkä toki osaat jotain Visual Basicilla väsätä, mutta kun mennään vähän pitemmälle, jo menee sormi suuhun. Vaan sitä se on teillä nuorilla, kun hemmotellaan kaikenmoisilla gui-väkerryksillä. Toista oli ennen vanhaan, kun tosiaan oli pakko osata ohjelmoida.

Äläkä väitä ettei taitoa tarvitse muka nykypäivänä. Onhan sitä purkkaa helppo tehdä, kun alla on 2 ghz prossu ja muistia sellaiset 4 gigaa, mutta se typerää. Eritoten jos projekti kasvaa vähänkään isommaksi, olet pulassa. Varsinkin verkko-ohjelmoinnissa purkkakoodaus kostautuu ja rankasti. Ei se 0.04 suoritusaika ehkä pahalta tunnu, mutta kerroppa se suoritusaika 1000 tai isommalla luvulla. Toki jos omalle possulleen jotkut sivut väsää, tai muuta.

Turha siis puhua taantumuksesta, kun omatkaan taitosi eivät ole sitä luokkaa että sinulla olisi yhtään varaa sanoa mitään. Voin rehellisesti pitää itseäni pätevänä ohjelmoijana, vaikka en olekaan mestarien tasoa, mutta kyllä päihitän newbiet vaikka vasemmalla kädellä päällään seisten. Jos et usko, niin voidaan toki ottaa koodauspuolella mittaa, tyttönen..

-Grey-

Tuon mukaan mun ei oo helppo teherä purkkaa. Meillon vanhat koneet.

TsaTsaTsaa [12.11.2007 20:35:48]

#

Dude kirjoitti:

Hmm... Vai ei Laaksonen oo kullu CGAta. Kummallista.

Onko Laaksonen yliopiston tietojenkäsittelytieteen professori?

Antti Laaksonen [12.11.2007 20:36:03]

#

Dude kirjoitti:

Hmm... Vai ei Laaksonen oo kullu CGAta. Kummallista.

Miten niin minä? En sattumoisin ole professori, enkä muutenkaan viitannut kehenkään.

Grey [12.11.2007 20:38:20]

#

>Dude

Sitten ei ole riittävän vanhat koneet :-D Tosin, voi olla myös että kun minä tarkoitan purkalla kasaa koodia, mitä on paikkailtu vähän miten sattuu ja mitä voi karsia hyvinkin paljon, niin joku tarkoittaa niitä aivan ihmeellisiä keskeytyspurkkia O_o Tosin, ne taisivat ajaa asiansa paremmin kuin nykypäivän purkka :-P

-Grey-

Dude [12.11.2007 20:49:59]

#

Antti Laaksonen kirjoitti:

Dude kirjoitti:

Hmm... Vai ei Laaksonen oo kullu CGAta. Kummallista.

Miten niin minä? En sattumoisin ole professori, enkä muutenkaan viitannut kehenkään.

no vissiin ymmärsin väärin

neau33 [13.11.2007 15:48:27]

#

Heippa taas!

Pojat, pojat tässä ei ole nyt epäilty kenenkään ohjelmointikykyjä... seurattu on esim. käyttäjätunnus Greyn kommentteja ja niiden pohjalta koettu monia ahaa-elämyksiä...on vain niin, että purkkakoodin vääntämiseen totuttautuneena on aika työlästä alkaa soveltaa näitä ideoita esim .NET ympäristöön tyyliin - fuck! the memory optimation is from deep...This Is The World We Live In...

-Miss purkkakoodari of the year-

tgunner [13.11.2007 20:42:47]

#

Tää topikki on menny fleimaamiseks, mutta Greyn tutkimukset tuolla QBASIC-laidalla ovat aika mielenkiintoiset. Kerro toki lisää, jos keksit uusia kikkoja. Tähän mennessä on ihan vakuuttavaa tekstiä tullut.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta