Académique Documents
Professionnel Documents
Culture Documents
;setup printer
comment |
;(1) reset it
mov al,1bh
call byte_2_prn
mov al,40h
call byte_2_prn
|
DOWHILE_Y:
dec bl
jnz loop_Y
pop es
RET
LOOP_Y:
;output gr. density mode, line width
mov al,1bh
call byte_2_prn
mov al,2ah
call byte_2_prn
mov al,1 ;mode 1 =low speed double density
call byte_2_prn
mov al,192 ;LSB 960 dots/8" line
call byte_2_prn
mov al,3 ;MSB 960 dots/8" line
call byte_2_prn
DOWHILE_X:
dec dh
jnz loop_X
;X done
;For printer graphics mode 1, 960 dots/8" line, make up missing dots as
;screen provides only 640 dots: 960-640=320 dots remain to be output.
mov cx,320
xor al,al ;fire no pins
pad_dots:
call byte_2_prn
loop pad_dots
;output LF,CR
mov al,0ah
call byte_2_prn
mov al,0dh
call byte_2_prn
add si,320-80
jmp short dowhile_Y
LOOP_X:
mov cl,80h ;init pixel mask
mov dl,8+1 ;init pixel count
DOWHILE_PIX:
dec dl
jnz loop_PIX
inc si
jmp short dowhile_X
LOOP_PIX:
xor al,al ;init sum of pins
mov ch,80h ;init pin value
mov ah,8+1 ;init pin count
DOWHILE_PIN:
dec ah
jnz loop_PIN
LOOP_PIN:
test byte ptr es:[si],cl ;pixel set?
jz next_scan ;pixel not set
;pixel was on
add al,ch ;add in PIN value to sum of pins
next_scan:
shr ch,1 ;next pin value
add si,di ;next buffer interleave
xchg di,bp
jmp short dowhile_PIN
BYTE_2_PRN:
;output byte in AL to printer 0
push ax
push dx
xor dx,dx
xor ah,ah
int 17h
pop dx
pop ax
ret
NEW_5_FILTER PROC FAR
;Synopsis:
;On Entry: interrupts are off
;On Exit : does not chain to old 5 interrupt
CALL DUMP_SCREEN
exit_int5:
;restore all registers changed
pop bp
pop di
pop si
pop dx
pop cx
pop bx
pop ax
iret
NEW_5_FILTER ENDP
.CODE
;
; CS VARS
;
START_G:
;Setup segments
mov ax,DGROUP
mov ds,ax
mov es,ax ;set es=ds
[… CODE …]
mov ax,3505h
int 21h
mov word ptr cs:[old_5_vector],bx
mov word ptr cs:[old_5_vector][2],es
;set it
mov ax,2505h
mov dx,offset new_5_filter ;in code segment
int 21h
pop es
pop ds
[… CODE …]
END START