home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The World of Computer Software
/
World_Of_Computer_Software-02-387-Vol-3of3.iso
/
p
/
pchdemo.zip
/
SOURCEFA.ZIP
/
SOURCE.ASM
< prev
next >
Wrap
Assembly Source File
|
1992-10-29
|
4KB
|
167 lines
; Assemblerroutine SOURCE.ASM
;
; Mit dieser Routine wird ein Bild digitalisiert und in den
; anzugebenen Rambereich geschrieben.
;
; Die Pixel sind wie folgt aufgebaut:
; 1.Pixel Bit 0..2 = B-Y (LSB) Bit 3..7 = SW 1.Pixel
; 2.Pixel Bit 0..2 = B-Y (MSB) Bit 3..7 = SW 2.Pixel
; 3.Pixel Bit 0..2 = R-Y (LSB) Bit 3..7 = SW 3.Pixel
; 4.Pixel Bit 0..2 = R-Y (MSB) Bit 3..7 = SW 4.Pixel
;
;
; Der Digitalisierbereich beträgt horizontal 384 Pixel. In BL
; kann der Startpunkt, ab wann digitalisiert werden soll, angegeben
; werden (0 = ganz links).
;
; Vertikal beträgt der Digitalisierbereich 288 Zeilen. In BH
; kann die Startzeile angegeben werden (0 = 1.Zeile).
;
; Folgende Parameter müssen übergeben werden:
;
; AL = Kontrast 0..31 (normal 15)
; BL = Startpixel 0..255
; BH = Startzeile 0..255
; CX = Bildgröße horizontal
; DX = Bildgröße vertikal
; ES:DI = Buffer des Bildes (Größe = CX * DX Bytes)
;
; Rückgabewert
;
; Wenn Carry gelöscht dann OK
;
; Wenn Carry gesetzt und AX = 1 Kein Videosignal
;
.186
code segment public
assume cs:code
public digit
; In anderen Jumperstellungen müssen die entsprechenden Adressen angege-
; ben werden.
Data = 300h ; I/O Adresse zum Einlesen der Pixel
FF = 302h ; Register Bit 0..4 = Kontrast
; Bit 6 0 = Color
; 1 = SW
; Bit 7 0 = Speicher 1
; 1 = Speicher 2
Reset = 304h ; 304 = Hor.Reset und ver.Zeilenzähler
; 305 = Ver.Reset
Hbin = 306h ; 0 = 1.Halbbild
; 1 = 2.Halbbild
digit proc near
jmp digit0
kontrast db 0
ram db 0
digit0:
push bx
push cx
push dx
push di
push si
push es
mov cs:kontrast,al
call rec ; Bild digitalisieren
call save_pic ; Bild auslesen
pop es
pop si
pop di
pop dx
pop cx
pop bx
ret
;
; Digitalisieren eines Bildes
;
rec:
push cx
push dx
xor byte ptr cs:ram,128 ; Auf das andere RAM umschalten
mov dx,FF
mov al,cs:kontrast ; Kontrast nach AL
or al,cs:ram ; Bit 7 = RAM
out dx,al ; AL ausgeben
mov dx,Hbin
mov cx,0
rec11:
dec cx
jz rec19
in al,dx
and al,1
jnz rec11 ; Auf Ende des 1.Halbbildes warten
rec12:
dec cx
jz rec19
in al,dx
and al,1
jz rec12 ; Auf Ende des 2.Halbbildes warten
rec13:
pop dx
pop cx
ret
rec19:
mov ax,1 ; Kein Videosignal
stc
pop dx
pop cx
ret
;
; Übertragen eines Bildes in das RAM des Rechners
;
save_pic:
push es
push di
mov si,dx ; Vertikal nach SI
mov dx,Reset
in ax,dx ; Hor. + Ver. Reset
mov ah,bh ; Zeilen nach AH
add ah,21 ; + 21 Leerzeilen
save10:
in al,dx ; Vertikal + 1
dec ah
jnz save10
save11:
push cx ; Horizontal retten
mov dx,Data
mov bh,bl ; Startpixel / 4
shr bh,1
shr bh,1
inc bh ; + Dummy
save12:
in ax,dx
in ax,dx
dec bh
jnz save12
shr cx,1 ; Horizontal / 2
rep insw ; Pixel übertragen
mov dx,Reset
in al,dx ; Hor. Reset + Vertikal + 1
pop cx
push cx
sub di,cx
shr cx,1
shr cx,1
shr cx,1
shr cx,1
mov ax,es
add ax,cx
mov es,ax
pop cx
dec si
jnz save11
pop di
pop es
ret
digit endp
code ends
end