home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
assemblr
/
library
/
screen
/
split
/
split.mac
< prev
next >
Wrap
Text File
|
1990-05-30
|
3KB
|
76 lines
;-----------------------------------------------------------------------------
; Split_Screen - Macros release 1.0
; Copyright (c) Ingo Eickmann, 1989 06/14/89
; Überarbeitet N. Raum-Deinzer 05/90
;-----------------------------------------------------------------------------
REG_POP macro paras ; Registern
IRP n,<paras>
POP &n
endm
endm
REG_PUSH macro paras ; Registern
IRP n,<paras>
PUSH &n
endm
endm
Vertical_retrace macro n ; Vertical Retrace (bit 3) im Input
local Loco ; Status Register 1 abfragen und
Loco: in al,dx ; auf 0 bzw. 1 warten
test al,00001000b
j&n Loco
endm
Split_Screen macro Start,Line ; Teilung des Bildschirms:
local LC1,LC2 ; Start: Bildschirmspeicheroffset
mov ax,40h ; für oberen Bildschirmteil
mov es,ax ; Line: letzte Scan Line für ob. Teil
mov dx,es:[63h] ; dx: CRTC address port (3B4h oder 3D4h)
add dx,6 ; dx: CRT Status port (3BAh oder 3DAh)
Vertical_retrace z ; Warten, bis Vertical Retrace aktiv
Vertical_retrace nz ; Warten, bis Vert. Retrace nicht aktiv
cli
sub dl,6
mov ax,Start ; Startadresse für oberen Bildteil
shr ax,1
mov bl,al
mov al,0Ch
out dx,ax ; MSB in CRTC - Register 0Ch
inc al
mov ah,bl
out dx,ax
sti
Vertical_retrace z ; Warten bis Vertical Retrace aktiv
cli
mov ax,Line ; letzte Scan Line für oberen Bildteil
mov bh,ah
mov bl,ah
and bx,0201h ; bit 8 und 9 trennen und aufbereiten
mov cl,4
shl bx,cl
shl bh,1
mov ah,18h
xchg ah,al
out dx,ax ; bits 7 - 0 ins Line Compare Register
mov al,7 ; schreiben
out dx,al ; Overflow - Register adressieren
inc dx
in al,dx ; ! EGA (350 Zeilen-Mode): mov al,1Fh !
; ! EGA (200 Zeilen-Mode): mov al,11h !
and al,11101111b ; bit 8 des Line Compare Wertes in
or al,bl ; bit 4 des Overflow - Registers
out dx,al ; schreiben
dec dx
mov al,9 ; ! entfällt für EGA: !
out dx,al ; ! !
inc dx ; ! bit 9 des Line Compare Wertes !
in al,dx ; ! in bit 6 des Max Scan Line !
and al,10111111b ; ! Registers schreiben !
or al,bh ; ! !
out dx,ax ; ! bis hier entfällts für die EGA !
sti
endm