'LASER.TIP 'For those who have wanted to print screen mode 9 graphics to your HP 'Laser printer, this is the routine for you. - Lloyd screen 9 'Generate some screen graphics to print. line(0,0)-(639,349),12,b for i=1 to 200 step 30 circle(639/2,349/2),i,15 next i mask1?=&H00 mask2?=&h00 video?=&h00 ega: ! push bp ! push di ! push es ! mov ax,&ha000 ! mov es,ax ! mov dx,&h0000 ! mov ax,&h001b ;Esc - Reset Laser Printer ! int &h17 ! mov ax,&h0045 ;E ! int &h17 ! mov ax,&h001b ;Esc - Set spacing to 8/72 inch ! int &h17 ! mov ax,&h002a ;* (codes ESC A n ESC 2) ! int &h17 ! mov ax,&h0074 ;t ! int &h17 ! mov ax,&h0037 ;7 ! int &h17 ! mov ax,&h0035 ;5 ! int &h17 ! mov ax,&h0052 ;R ! int &h17 ! mov ax,&h001b ;esc ! int &h17 ! mov ax,&h002a ;* ! int &h17 ! mov ax,&h0070 ;p ! int &h17 ! mov ax,&h0034 ;4 ! int &h17 ! mov ax,&h0030 ;0 ! int &h17 ! mov ax,&h0030 ;0 ! int &h17 ! mov ax,&h0078 ;x ! int &h17 ! mov ax,&h0032 ;3 ! int &h17 ! mov ax,&h0030 ;0 ! int &h17 ! mov ax,&h0030 ;0 ! int &h17 ! mov ax,&h0059 ;Y ! int &h17 'start graphic printing at cursor (Esc * r 1 A) ! mov ax,&h001b ;Esc ! int &h17 ! mov ax,&h002a ;* ! int &h17 ! mov ax,&h0072 ;r ! int &h17 ! mov ax,&h0031 ;1 ! int &h17 ! mov ax,&h0041 ;A ! int &h17 ! mov di,&h0000 ;starting column number ! mov mask1?,&h80 ;80 hex ega1: ! mov bp,27920 ;starting line 349 ! mov cl,&h00 ! mov mask2?,&h80 ;'80 hex ! mov ax,&h001b ;Esc Send 44 bytes to the printer ! int &h17 ! mov ax,&h002a ;* ! int &h17 ! mov ax,&h0062 ;b ! int &h17 ! mov ax,&h0034 ;4 ! int &h17 ! mov ax,&h0034 ;4 ! int &h17 ! mov ax,&h0057 ;W ! int &h17 ega2: ! mov dx,&h3ce ! mov ax,&H0304 ega3: ! out dx,ax ! mov bh,es:[bp][di] ! and bh,mask1? ! jz ega4 ! or cl,mask2? ega4: ! dec ah ! jge ega3 ! ror mask2?,&H01 ;writing mask rotation ! jnc ega5 ! mov dx,&H0000 ;sending byte to printer ! mov al,cl ! mov ah,&H00 ! int &h17 ! mov cl,&h00 ega5: ! sub bp,80 ;previous line ! jae ega2 ! mov dx,&H0000 ! xor cl,video? ! and cl,&b11111100 ! mov al,cl ! mov ah,&H0000 ! int &h17 ! ror mask1?,&H01 ;writing mask rotation ! jnc ega6 ! inc di ;following column ! cmp di,80 ;'&h0080 ;HEX? ! jl ega1 ! jge ega7 ega6: ! jmp ega1 ega7: ! mov ax,&h001b ;Esc End graphic printing ! int &h17 ! mov ax,&h002a ;* ! int &h17 ! mov ax,&h0072 ;r ! int &h17 ! mov ax,&h0042 ;B ! int &h17 ! mov ax,&h001b ;Esc - reset printer ! int &h17 ! mov ax,&h0045 ;E ! int &h17 ! pop es ;restore saved registers ! pop di ! pop bp 'Program done end beep 'beep to let user know assembler portion finished. while not instat wend end