PDA

Visualizza la versione completa : [Assembly] Muovere un carattere sullo schermo


cronico
14-05-2008, 18:22
Utilizzo Tasm su Dos e dovrei creare una piccola applicazione che permetta schiacciando i tasti freccia della tastiera (su, giù, destra, sinistra) di far muovere un carattere sullo schermo.
La superficie è infinita dunque ad esempio quando arrivo in fondo alla finestra (ultima riga) e non c'è più spazio, schiacciando in basso il carattere compare in alto (prima riga). Lo stesso vale su tutti i bordi (visione a toroide dello spazio). Qualcuno può aiutarmi ad impostare il codice?
GRAZIE

pallinopinco
14-05-2008, 18:29
Qualcuno può aiutarmi ad impostare il codice?


Quali sono i problemi che incontri nella stesura del codice?

cronico
14-05-2008, 18:32
la parte del movimento visto che devo restare sulla stessa schermata ma spostando il carattere. Come si può fare? Mettiamo il caso che io voglia partire dal centro.

pallinopinco
14-05-2008, 18:53
Il numero di righe/colonne è fissato a priori oppure modifichi la risoluzione tramite codice?

In entrambi i casi sai qual è il numero massimo di righe/colonne, dunque dopo aver rilevato la pressione di un tasto verifichi se il "cursore" abbia superato o meno i valori massimi di righe/colonne ed in tal caso lo (ri)posizioni opportunamente.

Concettualmente è banale... Puoi mostare cosa hai scritto finora? In tal modo sarà più facile aiutarti.

cronico
14-05-2008, 19:01
non ho scritto nulla perchè fino ad ora ho avuto un approccio statico con i comandi e la linea di comando. Intendo dire che fino ad ora ho sempre avuto problemi del tipo inserisci TOT dati che poi elaboravo, finita l'elaborazione ricominciava da capo. In questo caso la finestra si aggiorna in base al movimento del carattere e non so proprio da dove partire.

Sapresti indirizzarmi su un codice simile in modo da studiarlo?

pallinopinco
14-05-2008, 19:14
Sapresti indirizzarmi su un codice simile in modo da studiarlo?


Sarebbe la cosa più sbagliata... Visto che non hai mai fatto una cosa del genere devi fare uno sforzo iniziale nel pensare come risolvere il problema.

Per risolverlo devi ovviamente invocare degli interrupt (acquisizione da tastiera, stampa di un carattere sullo schermo, posizionamento del cursore, ...) e scrivere delle routine ad hoc (cancellazione dello schermo, gestione delle coordinate, ...).

Cose del genere per intenderci:



procedure ClrScr; assembler;
{ procedure to clear the screen }
asm
mov ax,VideoSegment { set the video segment }
mov es,ax
mov cx,25*80 { get number of characters on screen }
xor bx,bx { set start position on screen }
@@1:
mov byte ptr es:[bx],0 { clear character }
add bx,2 { move to next position }
loop @@1
end;

procedure GotoXY ( x, y : byte ); assembler;
{ procedure to move the cursor to the specified coordinates }
asm
mov dh,y { set DH=y-1 }
dec dh
mov dl,x { set DL=x-1 }
dec dl
mov bh,0 { set page number=0 }
mov ah,2 { set service number }
int 10h { call video interrupt }
end;

(ovviamente queste sono routine Pascal basate sul BASM, l'importante è comprendere il principio)

NOTA: non potrai fare a meno di consultare la Ralf Brown's Interrupt List (http://www.ctyme.com/rbrown.htm).

cronico
14-05-2008, 19:26
per chiarirmi meglio le idee ho cercato un programma già scritto, se vedo che funziona posso capire meglio a mio avviso. Possibile che non ci sia nulla in rete? Anche qualcosa di simile.

Loading