{==============  FICHIER DE EDNUM  ======================}
{ Unite Graphe Trace.pas  Usinage machines a c.n. NUM750 }
{ programmation Turbo Pascal - Borland                   }
{ Copyright (S) 1997-2011                                }
{ programmeur du programme A.Ara                         }
{ 64150 Mourenx - France.                                }
{ Licence d'utilisation accord dans un but démonstratif  }
{ Unite screen.asm : graphiques EDnum c.n du bois        }
{========================================================}

;==================================
; 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
;==========================

©® document original sources pascal
  
Page Last Updated: Juin 27, 2011 | Page Editor: A. Ara | SiteMap Dans Une Autre Galaxie
Cet emplacement web non-commercial, et totalement libre & indépendant de tout les parti politique ou d'organisme officiel de toute nature. Nous réflexions sont exclusivement l'avis de personnes qui rejettent le massacre que la société fait aux animaux pour tout motif.