Videogame in Assembler!! Help

di il
3 risposte

Videogame in Assembler!! Help

Salve a tutti, zono nuovo ma programmo da millenni..

avevo 11 anni quando ho toccato pascal... bei tempi!

devo fare un videogame in assembler e visto che nn ho molto tempo nn posso realizzare robba complicata...
il punto della discussione era...

visto che probabilmente faro una cavolata tipo tiro con l'arco o salto in lungo(giochini olimpionici)
volevo sapere se c'era il modo di porre in attesa il computer della pressione di un tasto mentre altre istruzioni girano...

x capirsi meglio

devo far vedere una barra che aumenta e diminuisce ( uso la memoria video e un generatore di ritardo x staccare l'avanzamento della barra ) e quando il tasto viene premuto devo uscire da questa parte di codice, salvare il valore che la barra aveva in quel momento e poi usarlo come parametro x il punteggio...
il problema è che se uso

MOV AH,07
INT 21

il computer si blocca in attesa del tasto... e invece nn deve farlo!! che mi dite, c'è modo o devo rinunciare a questo gioco e fare il Gatto e Topo(tipo scacchi ) che è a turni almeno nn ho problemi di istruzioni simultanee?

GRAZIE 2000

3 Risposte

  • Re: Videogame in Assembler!! Help

    Mmm non mi ricordo molto di assembler, ma provo a buttarti una idea: se usi una jump che ti manda ad una parte di codice che non fa nulla? nell'assembler del MIPS 3000 mi sembra esistesse una istruzione noop.

    Riccardo



    il c# è un linguaggio tagliente...
  • Re: Videogame in Assembler!! Help

    Se non mi ricordo male, per l'interrogazione del tasto premuto ci dovrebbe essere un INT 21h (DOS) con una funzione, credo 10h. Nell'altro caso, si può agganciarsi all'INT 16, OVVIAMENTE PRIMA DEL DOS, e poi catturare i caratteri desiderati e metterli via in un posto più comodo. Infine, c'è il buffer circolare della tastiera da qualche parte al segmento 400h, di 32 Byte. Comunque è passato troppo tempo e non mi ricordo più nulla. Eppure li ho costruiti, questi PC

    Giovanni
    ---
    http://www.y2ksw.com/vbulletin
  • Re: Videogame in Assembler!! Help

    Ciao,

    Usa l'int 16h. Prima o dopo il DOS non ha importanza(qualunque cosa significhi "prima" del DOS), se stai scrivendo in asm un programma che usa interrupt immagino tu stia utilizzando tasm/masm/nasm o l'asm inlinea dei vecchi compilatori a 16bit (TurboC,TurboPascal)... il codice dovrebbe essere comunque ancora compatibile con i nuovi SO...

    Con ah=0 in ingresso hai l'attesa indefinita di un carattere (come l'int21 citato). Il carattere viene restituito in ax (scancode+ascii).

    Con ah=1 controlli se è stato premuto un tasto... in caso lo ottieni in ax(scancode+ascii). il flag di zero viene impostato se è presente un tasto, resettato (0) se non è presente, in modo che tu possa usare jz,jnz (je,jne) a piacere.

    Con ah=2 hai lo stato dei vari tasti ALT, Ctrl, Ins, CapsLock, ScrollLock, Num Lock e dei due shift (dx e sx). Il risultato, come sempre in ax.

    L'alternativa è scriverti un gestore di tastiera e rimpiazzare l'handler standard dell'int9... in questo caso ovviamente dovrai implementare una routine di interrupt ed è possibile che windows non ti permetta un comportamento del genere...

    Per ulteriori informazioni ti consiglio la Ralph Brown List... nonostante sia datata (1999) è comunque sempre pienamente utilizzabile se programmi dos vecchio stampo...

    Ciaociao

    Venite a visitarci qui: http://www.bottomap.co
Devi accedere o registrarti per scrivere nel forum
3 risposte