IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

La Commande Numérique sur la Production Bois

Date de publication : 06/03/2010. Date de mise à jour : 03/07/2011.


   

 


Screen.ASM - Get_key7.PAS
Screen.ASM
Unité Get_key7.PAS


Screen.ASM - Get_key7.PAS


Screen.ASM


;=============================================
; EDNUM version 3.001e
; programmation commande numerique Num 750/760F
; Copyright (S) 1997-2010
; programmeur du logiciel A.Ara
; 64150 Mourenx ville France.
; Licence d'utilisation accord dans un but démonstratif
; la vente du logiciel et interdite.
; Numero de serie 00-331-7431-A1133071e
;=============================================

;==================================
; Fichier Screen.ASM 
;==================================

MODEL TPASCAL

LOCALS

DATASEG

  EXTRN CheckSnow : BYTE

CODESEG

  PUBLIC MoveToScreen, MoveFromScreen

;====================================================  
; procedure MoveToScreen(var Source, Dest; Len : Word);
;
; Recopie une zone memoire entre RAM et memoire video en gerant
; un eventuel effet de neige sur certains ecrans CGA.
; Variables:
;   Source : Pointeur long vers la zone RAM ? copier
;   Dest   : Pointeur long vers la zone video ? ecraser
;   Len    : Quantite d'octets ? copier
;=====================================================

Proc MoveToScreen Source : DWord, Dest : DWord, Len : Word
  push    ds
  mov     bh,[CheckSnow]       ; Charge valeur de CheckSnow
  lds     si,[Source]                   ; Pointeur source dans DS:SI
  les     di,[Dest]                       ; Pointeur dest dans ES:DI
  mov     cx,[Len]                      ; Len dans CX
  jcxz    @@0                            ; Fin si Len = 0
  cmp     si,di                            ; Teste si source est avant destination
  jle     @@1                             ; Si oui, copie ? partir de la fin
  cld                                            ; Incrementation de copie de chainesnes
  jmp     short @@2
@@1:
  add     si,cx                            ; Amene SI et DI en fin de zones memoire
  sub     si,2
  add     di,cx
  sub     di,2
  std                                           ; Decrementation chaines
@@2:
  cmp     bh,0                            ; Si CheckSnow = false, affichages rapides
  je      @@7
@@3:
  shr     cx,1                              ; Conversion octets en mots
  mov     dx,3DAh                    ; DX pointe sur le port d'etat de CGA
  mov     bl,9
@@4:
  lodsw                                    ; Lecture d'un mot
  mov     bp,ax                         ; Le sauve dans BP
@@5:
  in      al,dx                              ; Lit l'etat du 6845
  rcr     al,1                               ; Teste si en balayage ligne
  jb      @@5                            ; Boucle si oui : on evite d'ecrire
                                                  ; pendant ce temps. Il n'y a de temps que
                                                  ;   pour exactement 1 STOSW
  cli                                            ; Et surtout pas d'interruptions !
@@6:
  in      al,dx                              ; Lit l'etat du 6845
  and     al,bl                            ;Teste les deux balayages : si la carte video
                                                  ; n'indique pas de balayage ligne pendant
                                                  ; le balayage trame, on peut envoyer plusieurs
                                                  ;  caracteres pendant la trame
  jz      @@6                             ; Boucle si = 0
  mov     ax,bp                          ;Lit le mot de l'ecran video
  stosw                                     ; Le sauve
  sti                                            ; Demasque les interruptions
  loop    @@4                          ; Au suivant !
  jmp     short @@0
@@7:
  shr     cx,1                               ; Conversion d'octets en mots
  rep     movsw
@@0:
  pop     ds                                ; Restaure DS
  ret
ENDP

;==============================================================
; procedure MoveFromScreen(var Source, Dest; Len : Word);
;
; Recopie une zone de memoire video en memoire normale en gerant l'effet de
; neige des ancienness cartes CGA.
; Variables:
;   Source : Pointeur long vers la zone video ? copier
;   Dest   : Pointeur long vers la zone memoire vive ? ecraser
;   Len    : Quantite d'octets ? copier
;===============================================================

Proc MoveFromScreen Source : DWord, Dest : DWord, Len : Word
  push    ds
  mov     bh,[CheckSnow]
  lds     si,[Source]
  les     di,[Dest]
  mov     cx,[Len]
  jcxz    @@0
  cmp     si,di

  jle     @@1
  cld
  jmp     short @@2
@@1:
  add     si,cx
  sub     si,2
  add     di,cx
  sub     di,2
  std
@@2:
  cmp     bh,0
  je      @@6
@@3:
  shr     cx,1
  mov     dx,3DAh
@@4:
  in      al,dx
  rcr     al,1
  jb      @@4
  cli
@@5:
  in      al,dx
  rcr     al,1
  jnb     @@5
  lodsw
  sti
  stosw
  loop    @@4
  jmp     short @@0
@@6:
  shr     cx,1
  rep     movsw
@@0:
  pop     ds
  ret
ENDP

END

;=================================
;      Fin Fichier Screen.ASM
;=================================

Unité Get_key7.PAS


{============================================
 EDNUM version 3.001e                         
 programmation commande numerique Num 750/760F
 Copyright (S) 1997-2010                      
 programmeur du logiciel A.Ara                
 64150 Mourenx ville France.                  
 Licence d'utilisation accord dans un but démonstratif     
 la vente du logiciel et interdite.
 Numero de serie 00-331-7431-A1133071e
 ============================================}
{===========================================}
    Unite Get_key7.pas                             
============================================}

{$O+,F+}
Unit Get_Key7;
Interface

Const
      Shift_D:Boolean=False;
      Shift_G:Boolean=False;
      Ctrl:Boolean=False;                { press key Ctrl ok }
      Alt:Boolean=False;                  { press key Alt  ok  }
      Inser_mode:Boolean=True;  { press key Inser ok }
      Key_Code:Boolean=False;   { code clavier etendue ok }

 Function KeyBoard:Byte;
 Procedure Beep;

Implementation

Uses crt,Dos;
Var Reg_DOS:Registers;

Procedure Beep;
{** Genere un bip grave **}
begin
  Sound(4071);
  Delay(50);
  NoSound;
end; 
{** Beep **}

Function KeyBoard:Byte;
 Var ch:Char;
 Begin
   Reg_DOS.AX:=$0C00;
   MsDos(Reg_DOS);
   ch:=Readkey;
   If Mem[0:$417] And 128 = 128 Then Inser_Mode:=True
     Else Inser_mode:=False;
   If Mem[0:$417] And 8 = 8  Then Alt :=True
     Else Alt:=False;
   If Mem[0:$417] And 4 = 4  Then Ctrl:=True
     Else Ctrl:=False;
   If Mem[0:$417] And 2 = 2  Then Shift_G:=True
     Else Shift_G:=False;
   If Mem[0:$417] And 1 = 1  Then Shift_D:=True
     Else Shift_D:=False;

   If (ch = #0) then
   Begin
      KeyBoard:=Ord(Readkey);
      Key_Code:=True;
   End
    else
       Begin
          KeyBoard:=ord(ch);
          Key_Code:=False;
       end;
 End; {** end keyBoard **}
End.

   

 

 

Valid XHTML 1.0 TransitionalValid CSS!

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2011 A. Ara. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.