[ASM] Воруем текстовый экран в DOS

16-битные ПЦ-совместимые компьютеры с процессорами 8086/8088/80286 работающие под управлением ДОС

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

[ASM] Воруем текстовый экран в DOS

Post by Shaos »

Моя программа 1994 года - печатается без изменений:

Code: Select all

;----------------------------------------------------
;	Программа слизывания текста с экрана	    |
;	в режиме 80*25 при нажатии F1.		    |
;	Считывание производится в файл C:\OUT.	    |
;	Файл C:\OUT должен быть создан!		    |
;----------------------------------------------------
;	Чрезвычайно капризная программа !	    |
;----------------------------------------------------
CODESG	SEGMENT PARA 'CODE'
	ASSUME	CS:CODESG,ds:codesg,ss:codesg
	ORG	100H
BEGIN:	JMP	INIT
;------------- ДАННЫЕ -------------------------------
xmax	equ	80
ymax	equ	25
kbsave	dd	?
file	db	'c:\out',0
handle	dw	?
pag	db	?
x	db	0
y	db	0
x_old	db	?
y_old	db	?
string	db	xmax dup(' ')
	db	13,10
job	db	0
;-------------TRRRRRRR------------------------
TRRR	proc	near
	in	al,61h
	and	al,11111110b
	or	al,00000010b
	out	61h,al
	mov	cx,1000
ll0:	loop	ll0
	and	al,11111101b
	out	61h,al
	ret
TRRR	endp
;------------ ПРЕРЫВАЮЩАЯ ПРОГРАММА ----------
INTER	PROC	near
	PUSH	AX
	PUSH	BX
	PUSH	CX
	PUSH	DX
	PUSH	SI
	PUSH	DI
	PUSH	DS
	PUSH	ES
	PUSH	BP
	PUSHF
	cmp	job,1
	jnz	beg
	jmp	exi
beg:	in	al,60h	; port 60h, keybd scan or sw1
	cmp	al,59	; -------F1--------
	je	otkr	; Jump if not equal
	jmp	exit
erro:	jmp	err
;----------------------------------------
otkr:	mov	job,1
	in	al,61h
	push	ax
	or	al,80h
	out	61h,al
	pop	ax
	out	61h,al
	mov	al,20h
	out	20h,al
	sti
;-------
	mov	ax,cs
	mov	ds,ax
	mov	ah,3dh	; Открытие файла 
	mov	al,1
	lea	dx,file
	int	21h
	jc	erro
	mov	handle,ax ; Позициирование в конец файла
	mov	ax,4202h
	mov	bx,handle
	mov	cx,0
	mov	dx,0
	int	21h
	mov	ah,0fh	; Чтение номера видеостраницы
	int	10h
	mov	pag,bh	; Запомнить положение курсора
	mov	ah,3
	int	10h
	mov	x_old,dl
	mov	y_old,dh
	mov	x,0
	mov	y,0
loo:	mov	ah,2	; Установка курсора в (x,y)
	mov	bh,pag
	mov	dl,x
	mov	dh,y
	int	10h
	mov	ah,8	; Чтение символа в al
	mov	bh,pag
	int	10h
	mov	bh,0
	mov	bl,x
	mov	string[bx],al
	inc	x
	call	trrr
	cmp	x,xmax
	jnz	loo
	mov	ah,40h	; Запись в файл
	mov	bx,handle
	mov	cx,xmax+2
	lea	dx,string
	int	21h
	jc	err
	cmp	ax,xmax+2
	jne	err
	mov	x,0
	inc	y
	cmp	y,ymax
	jnz	loo
	jmp	ex
;--------------------------------------------
err:	int	10h
	in	al,61h
	and	al,11111110b
	mov	bx,200
bee1:	or	al,00000010b
	out	61h,al
	mov	cx,3000
l01:	loop	l01
	and	al,11111101b
	out	61h,al
	mov	cx,3000
l11:	loop	l11
	dec	bx
	jnz	bee1
;----------------------------
ex:	mov	ah,3eh
	mov	bx,handle
	int	21h
	mov	ah,2
	mov	bh,pag
	mov	dl,x_old
	mov	dh,y_old
	int	10h
;--------------------------
	mov	job,0
	POPF
	POP	BP
	POP	ES
	POP	DS
	POP	DI
	POP	SI
	POP	DX
	POP	CX
	POP	BX
	POP	AX
	iret
;--------------------------
exit:	mov	job,0
exi:	POPF
	POP	BP
	POP	ES
	POP	DS
	POP	DI
	POP	SI
	POP	DX
	POP	CX
	POP	BX
	POP	AX
	jmp	dword ptr cs:[kbsave]
INTER	ENDP
;------------ ИНИЦИАЛИЗАЦИЯ --------------------
INIT	PROC	NEAR
	CLI
	mov	ah,35h
	mov	al,9
	int	21h
	mov	word ptr kbsave,bx
	mov	word ptr kbsave+2,es
	mov	ah,25h
	mov	al,9
	mov	dx,offset inter
	int	21h
	STI
	MOV	DX,OFFSET INIT
	INT	27H	; Создание резидента
INIT	ENDP
CODESG	ENDS
        END	BEGIN
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Была чья-то оригинальная утилита - Catcher

Post by Lavr »

Была оригинальная утилита - Catcher в те же годы.
Могла грабить даже не весь экран а выделенную
часть его - причем в файл, на принтер и, если надо,
передать выделенное в командную строку.
Весьма неглюкава была - почему я её тогда и
декомпильнул - так сказать первый опыт.
Если зачем-то нужно - есть сорц.
imsushka
Maniac
Posts: 237
Joined: 01 Jan 2022 04:34
Location: USSR, Tashkent

Re: [ASM] Воруем текстовый экран в DOS

Post by imsushka »

а редактора снимков экранов нет ?
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: [ASM] Воруем текстовый экран в DOS

Post by Shaos »

imsushka wrote:а редактора снимков экранов нет ?
да там по сути текстовый файл на выходе - можно редактировать в любом текстовом редакторе вроде как :roll:
Я тут за главного - если что шлите мыло на me собака shaos точка net
imsushka
Maniac
Posts: 237
Joined: 01 Jan 2022 04:34
Location: USSR, Tashkent

Re: [ASM] Воруем текстовый экран в DOS

Post by imsushka »

Shaos wrote:
imsushka wrote:а редактора снимков экранов нет ?
да там по сути текстовый файл на выходе - можно редактировать в любом текстовом редакторе вроде как :roll:
а с цветом как ?

вроде что то было, или мы сами что то написали. 35 лет прошло, не помню уже

я просто с плисиной балуюсь, поморгать светодиодом (vga)
а связи как таковой с компом нет и на экран вывести проблема (была)
ну правда я уже уарт прикрутил
и подумал уже терминал сделать
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: [ASM] Воруем текстовый экран в DOS

Post by Shaos »

Не - цвета там нет, только текст :mrgreen:
Я тут за главного - если что шлите мыло на me собака shaos точка net
imsushka
Maniac
Posts: 237
Joined: 01 Jan 2022 04:34
Location: USSR, Tashkent

Re: [ASM] Воруем текстовый экран в DOS

Post by imsushka »

вспомнил где видел
на хабре spi-vga не очень давно статья была
https://github.com/andykarpov/spivga-u16
на яваскрипте, но как работает не понятно