| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
Kaksoispuskuri+pikseli (320x200x256)glaze 25.06.02 16:07 Pieni .com-ohjelma, joka esittelee kaksoispuskurin käyttöä.
main segment para 'code' org 0100h assume ds:main alku: ;varataan muisti puskurille mov bx, ss add bx, 64000 mov [word ptr buffer], bx ;mode13 mov ax, 13h int 10h ;tyhjennetään puskuri mov di, offset buffer xor al, al ;väri=0 mov cx, 32000 rep stosw ;plotataan pikseli mov di, offset buffer ;puskurin alku add di, 32160 ;näytön keskikohta mov al, 4 ;väri stosb ;plot ;flipataan puskuri näytölle. mov ax,0a000h mov es, ax mov si, offset buffer xor di, di mov cx, 32000 rep movsw ;odota näppäintä xor ax, ax int 16h ;tekstimoodi mov ax, 03h int 10h retn ;loppu buffer db 0 ;puskurin paikka on lopussa main ends end alku viznut 23:17 26.8.02 Tuo "muistinvaraus" kusee ainakin täydellisesti, ja ihmettelen, millä logiikalla joku edes pystyy kehittämään tuollaisen väkerryksen siihen. Jos segmenttipointterissa (ss) on sopiva arvo, niin "varattu muistialue" menee ohjelmakoodin itsensä päälle. Jos oikeasti haluat varata msdossin com-ympäristössä esim. neitseellisen 64 kilon segmentin, niin ensimmäinen sellainen on heti cs:n alusta alkavan 64 kilon jälkeen (eli esim. ds=cs+0100h). The Scytheman 13:15 5.2.04 Joo, toi "allokointi" on päin helvettiä. Ei myöskään ole syytä tehdä mitään olettamuksia muistin vapaudesta missään osoitteessa. Allokoi bufferi käyttäen DOS-palveluita eli oliko se nyt keskeytys 20h tai 21h. Google auttaa. orbi 14:15 11.7.06 Muistaakseni on ihan oikein olettaa, että DOS varaa com-ohjelmalle kaiken sen yläpuolella olevan muistin aina VGA-segmenttiin asti. EXE-ohjelmilla asia ei ole näin yksinkertainen. Eli seuraavan vapaan segmentin saa kun ottaa koodisegmentin ja lisää siihen tarvittavan määrän (64000/16) tavuja ja tuon laittaa vaikkapa ES:ään tai johonkin minkä sopivaksi näkee. |
![]() Haku
|