;------------------------------------------------------------------
; Автор: А.В.Медведев.
; 220090, Республика Беларусь, Минск, ул.Широкая, 36, к.716а
; т. 64-51-52 (раб.)
;
; Простая программа перекодировки из альтернативной таблицы в
; основную для принтера. Путем простой замены таблицы перекодировки
; может использоваться для принтеров, имеющих необычную прошивку
; ПЗУ. Приведена таблица перекодировки для принтера CPF-136.
; Графические команды не обрабатываются, программа может использо-
; ваться только в текстовом режиме работы принтера.
; Занимает в памяти 288 байт. Можно загружать в UMB.
;
; Для получения выполнимого файла:
;	TASM a2n_prn
;	TLINK /x/t a2n_prn
;------------------------------------------------------------------

MODEL TINY
CODESEG
ORG 100h

START:
        jmp Install

My_17:  cmp     ax,0A3F1h
	jne	No_Test
	xchg	al,ah
	iret
No_Test:
	or	ah,ah
        jnz     Old_17
	cmp	al,128
	jb	Old_17
        push    bx
	xor	bx,bx	; Таблица находится в PSP, младшие 128 символов
	xlat	CS:[bx] ; пропускаются
        pop     bx
Old_17: db	0EAh	;JMP FAR
ip_17	dw	0
CS_17	dw	0

Trans_Tbl label byte

; Таблица перекодировки из альтернативной таблицы в основную
NewPrn  db '░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀'
        db 'ЫЬЭезГДЕЖЧХСТЛМбгижйдкНОУРШЦЩФЪАБВЗИЙКПЮЯвалмноп'
        db 'рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■'

; Таблица перекодировки для принтера CPF-136 ---------------
;Cpf136  db 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп'
;        db '███||||++||+++++└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀'
;        db '░▒▓│┤╡╢╖╕╣║╗╝╜╛┐+=ЄєЇїЎў°∙·√№¤■'

Install:
        mov     ax,0A3F1h	; проверяем наличие программы в памяти
	int	17h
        cmp     ax,0F1A3h
	je	Already

	mov	si,offset Trans_Tbl
	mov	di,128
	cld
	mov	cx,64
	rep movsw		; перемещаем таблицу в PSP

	mov	ES,DS:[2Ch]	; освобождаем копию окружения DOS
	mov	ah,49h
	int	21h

	xor	ax,ax		; перехватываем вектор 17h
	mov	ES,ax
	mov	ax,ES:[4*17h]
	mov	ip_17,ax
	mov	ax,ES:[4*17h+2]
	mov	CS_17,ax
	cli
	mov	ES:[4*17h],offset My_17
	mov	ES:[4*17h+2],CS
	sti

	mov	ah,9
	mov	dx,offset Msg1
	int	21h
	mov	dx,offset Msg3
	int	21h
	mov	dx,offset Trans_Tbl
	int	27h

Already:
	mov	ah,9
	mov	dx,offset Msg1
	int	21h
	mov	dx,offset Msg2
	int	21h
	int	20h

Msg1    db 'Программа перекодировки из альтернативной таблицы в основную',13,10
        db 'для принтера $'
;Msg1    db 'Программа перекодировки для принтера "CPF-136" $'
Msg2	db 'уже '
Msg3    db 'установлена.',13,10
        db 'Графические команды не обрабатываются',13,10,'$'

END START
