ModeN proc near push di push es mov ax,0013h int 10h ; (* mode 13h setzen *) mov dx,03c4h ; (* portaddrese $3d4 in dx laden *) mov al,4 ; (* index=4 *) out dx,al ; in al,dx ; (* al:=port[$3d5] *) inc dx ; and al,0f7h ; out dx,al ; (* byte abschicken! *) mov dx,03d4h ; (* portaddrese $3d4 in dx laden *) mov al,014h ; (* index=14 *) out dx,al ; (* byte "abschickicken" *) inc dx ; in al,dx ; (* al:=port[$3d5] *) and al,0bfh ; (* al:=al AND NOT $40 *) out dx,al ; (* byte abschicken! *) mov dx,3d4h ; (* portaddrese $3d4 in dx laden *) mov al,017h ; (* index=17 *) out dx,al ; (* byte "abschickicken" *) inc dx ; in al,dx ; (* al:=port[$3d5] *) or al,040h ; (* al:=al AND 215;215=NOT $40) *) out dx,al ; (* byte abschicken! *) mov dx,03c4h mov ax,(0fh shl 8) + 2 out dx,ax mov ax,0a000h mov es,ax sub di,di mov ax,di mov cx,8000h cld rep stosw pop es ; pop di ; ret ModeN ENDP SetStartAddress PROC NEAR ; This procedure will specify the current starting address for the controller ; to scan. ; ; Input: AX = starting address to display ; Output: None ; ; Modifies AX,BX,CX MOV BX,AX MOV DX,03D4h ; Select CRT controller MOV AL,0Ch MOV AH,BH OUT DX,AX INC AL MOV AH,BL OUT DX,AX RET SetStartAddress ENDP DataToTweaked PROC NEAR ; This will copy linear data into the 4 plane tweaked mode of video memory ; ; Input: DS:[SI] = linear data ; ES:[DI] = Byte destination ; DL = Plane start select ; AX = Picture Y length ; BX = Picture X length ; Output: None ; ; Modifies AX,BX,DX,SI,DI PUSH CX MOV CX,AX DTT1: PUSH CX PUSH DX PUSH DI MOV CX,BX DTT2: PUSH CX MOV AL,02 ; Select Map Mask (Plane select) MOV AH,01 MOV CL,DL SHL AH,CL ; Select plane MOV DX,3C4h ; Select sequencer register OUT DX,AX push ax lodsb cmp al,0 jz DTT2_5 stosb dec di DTT2_5: inc di pop ax DEC DI CMP CL,3 ; Check if need to incr DI now JNE DTT3 ; No, carry on... INC DI MOV CL,0FFh ; Put in a -1 in DL DTT3: INC CL MOV DL,CL POP CX LOOP DTT2 POP DI POP DX POP CX ADD DI,80 LOOP DTT1 POP CX RET DataToTweaked ENDP SetPicPalette PROC NEAR ; Set captured picture's palette ; ; Input: SI = Offset of the picture palette ; CX = Number of colors in the palette ; Output: None MOV DX,3C8h SPP1: OUTSB INC DX OUTSB OUTSB OUTSB DEC DX LOOP SPP1 RET SetPicPalette ENDP