home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / assemblr / library / screen / split / split.mac < prev    next >
Text File  |  1990-05-30  |  3KB  |  76 lines

  1. ;-----------------------------------------------------------------------------
  2. ;     Split_Screen - Macros                                        release 1.0
  3. ;     Copyright (c) Ingo Eickmann, 1989                               06/14/89
  4. ;     Überarbeitet N. Raum-Deinzer                                       05/90
  5. ;-----------------------------------------------------------------------------
  6.  
  7. REG_POP macro paras            ;   Registern
  8.       IRP n,<paras>
  9.      POP &n
  10.       endm
  11. endm
  12.  
  13. REG_PUSH macro paras            ;   Registern
  14.       IRP n,<paras>
  15.      PUSH &n
  16.       endm
  17. endm
  18.  
  19. Vertical_retrace macro n        ; Vertical Retrace (bit 3) im Input
  20. local Loco                ; Status Register 1 abfragen und
  21. Loco: in al,dx                ; auf 0 bzw. 1 warten
  22.       test al,00001000b
  23.       j&n Loco
  24. endm
  25.  
  26. Split_Screen macro Start,Line           ; Teilung des Bildschirms:
  27.    local LC1,LC2            ;  Start: Bildschirmspeicheroffset
  28.     mov ax,40h            ;       für oberen Bildschirmteil
  29.     mov es,ax            ;  Line:  letzte Scan Line für ob. Teil
  30.     mov dx,es:[63h]            ; dx: CRTC address port (3B4h oder 3D4h)
  31.     add dx,6            ; dx: CRT Status port (3BAh oder 3DAh)
  32.     Vertical_retrace z        ; Warten, bis Vertical Retrace aktiv
  33.     Vertical_retrace nz        ; Warten, bis Vert. Retrace nicht aktiv
  34.     cli
  35.     sub dl,6
  36.     mov ax,Start            ; Startadresse für oberen Bildteil
  37.     shr ax,1
  38.     mov bl,al
  39.     mov al,0Ch
  40.     out dx,ax            ; MSB in CRTC - Register 0Ch
  41.     inc al
  42.     mov ah,bl
  43.     out dx,ax
  44.     sti
  45.     Vertical_retrace z        ; Warten bis Vertical Retrace aktiv
  46.     cli
  47.     mov ax,Line            ; letzte Scan Line für oberen Bildteil
  48.     mov bh,ah
  49.     mov bl,ah
  50.     and bx,0201h        ; bit 8 und 9 trennen und aufbereiten
  51.     mov cl,4
  52.     shl bx,cl
  53.     shl bh,1
  54.     mov ah,18h
  55.     xchg ah,al                                             
  56.     out dx,ax        ; bits 7 - 0 ins Line Compare Register
  57.     mov al,7        ;   schreiben                                                
  58.         out dx,al                  ; Overflow - Register adressieren
  59.     inc dx
  60.     in al,dx        ; ! EGA (350 Zeilen-Mode): mov al,1Fh !
  61.                 ; ! EGA (200 Zeilen-Mode): mov al,11h !
  62.     and al,11101111b    ; bit 8 des Line Compare Wertes in
  63.     or al,bl        ;    bit 4 des Overflow - Registers
  64.     out dx,al        ;              schreiben
  65.     dec dx
  66.  
  67.     mov al,9        ; ! entfällt für EGA:                  !
  68.     out dx,al        ; !                          !
  69.     inc dx            ; !  bit 9 des Line Compare Wertes    !
  70.     in al,dx        ; !   in bit 6 des Max Scan Line      !
  71.     and al,10111111b    ; !    Registers schreiben          !
  72.     or al,bh        ; !                          !
  73.     out dx,ax        ; ! bis hier entfällts für die EGA    !
  74.     sti
  75. endm
  76.