moi,
voiko grafiikkatilassa tehdä sellaisen toimenpiteen, kuin tulostaa näytölle aina uuden esim. kolmion näppäimen painalluksesta?
grafiikkatila: mov ah,0 ;vaihdetaan näyttötila mov al,13 int 10h
tarkoitus olis tehdä aina uusi kolmio, kun painaa näppäintä.
On mahdollista. Koodivinkeistä löytyy näppäimistöhandleri (C-vinkeistä, mutta asmilla tehtynä).
tiedän että painamalla "alt ja enter" päästään takas dos näyttöön. eli oli taas kiva vstaus, siis tehän olette oikeita neroja, kun olette vielä niin avuliaitakin????
Ohjelman runkona voisi olla silmukka, jossa odotetaan näppäimenpainallusta ja piirretään kolmio. Mihin kohtaan tarvitset neuvoa?
ensin mulla tulee kolmio ja sen jälkeen pitäis painaa nappia, jonka jälkeen tulostuu toinen kolmio näytölle.
eli siihen, että kuinka pääsen takas dos ikkunaan, vai pitääkö päästä ollenkaan grafiikkatilasta?
Ikkunalla ei ole mitään tekemistä DOSin kanssa. Jos nyt tekstitilaa tarkoitat, niin katso oppaasta DOSin näyttötilat. Se on sitten Windowsin asia, näkyykö se ikkunana vai koko ruudulla.
mulla on näin:
mov ah,0 ;vaihdetaan näyttötila mov al,2 ;tekstitila int 10h
mut ei mee tohon tekstitilaan, vaan pitää poistua alt enter näppäimillä.
esim.
mov ah,0 ;vaihdetaan näyttötila mov al,13 int 10h ;************************************************************** mov dx,100 ;rivi mov cx,25 ;pituus alku2: mov ah,12 ;piirrä piste mov al,2 ;väri push cx ;pinoon talteen cx:ään add cx,125 ;sarake, lisää cx:ään arvon int 10h pop cx ;pinosta dec dx ;vähennä dx riviä yhdellä loop alku2 ;******************************************************************* mov ah,0 ;vaihdetaan näyttötila mov al,7 ;tekstitila int 10h
ja nyt kun piirretty eka viiva, niin pitäis päästä piirtämään toinenkin viiva, kun painaa näppäintä. Mut en pääse graf.tilasta pois kuin "alt enter" painalluksella
Mahtavaa. Tuo koodi jumitti koneen mustaan ruutuun ja jouduin turvautumaan virtanappiin viimeisenä keinona.
Ensinnäkin, mikä tahansa tekstitila ei kelpaa. Tuolla 7. tilalla lopputuloksena oli tummansinistä tekstiä ainakin DOSboxissa... Toiseksikin, tuosta ohjelmasta puuttuu normaali lopetuskäsky int 20h
. (Kolmanneksi, loop-komento on kuulemma "toivottoman hidas", ja neljänneksi, kooditageja suosittelen.)
Teinpä nyt tällaisen (NASMilla kääntyy ja DOSboxilla pelittää):
;********************************************************** ; Haetaan vanha tila al:ään mov ah, 0fh int 10h ; Nollataan ah tilanvaihtokutsua varten xor ah, ah ; Säilötään alkutilan palautukseen tarvittava ax push ax ; Siirrytään tilaan 13h mov al, 13h int 10h ; es-rekisteriin näyttömuistin alku mov ax, 0A000h mov es, ax ;********************************************************** ; Piirretään pisteitä: mov cl, 31 ; väri mov bx, 62 ; x-sijainti mov ax, 14 ; y-sijainti mov ch, 40 ; pisteiden määrä silmukka: push ax ; Säilöön, kun kohta sillä säädetään ; Lasketaan oikea paikka noista mul 320 ; ax * 320 ; tämä käyttää dx:nkin add ax, bx ; Piirretään mov di, ax mov [es:di], cl ; Uusi sijainti ja väri pop ax inc ax inc bx inc cl ; Silmukka, kunnes ch = 0 dec ch jnz silmukka ;********************************************************** ; Odotetaan nappia xor ax, ax int 16h ; Palautetaan alkutila pop ax int 10h ; Lopetetaan int 20h
kiitoksia avusta, nyt toimii, jouduin kuitenkin hiukka soveltamaan koodia, valitti muutamasta kohdasta.
Ei tykännyt tosta mov [es:di], cl ja tosta mul 320 ; ax * 320 ; tämä käyttää dx:nkin. Mut kolmion saa piirrettyä painamalla nappia. Onko kolmion piirtäminen mahdollista tehdä vain viivoilla? Ja kuinka saisin niitä tulemaan satunnaisiin paikkoihin näytöllä napin painalluksen jälkeen?
Käännän MASM32 editirilla ja käytän Tasm5:ta
Aihe on jo aika vanha, joten et voi enää vastata siihen.