home *** CD-ROM | disk | FTP | other *** search
- ; Assemblerroutine SOURCE.ASM
- ;
- ; Mit dieser Routine wird ein Bild digitalisiert und in den
- ; anzugebenen Rambereich geschrieben.
- ;
- ; 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..208 (96 = Bildmitte)
- ; BH = Startzeile 0..31 bzw. 0..63 (16 bzw. 32 = Bildmitte)
- ; 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
- ;
- ; (c) Münch-Video 1992
-
- .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,64 ; Bit 6 = SW
- 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