1	 	 	 	 	           PAGE 66,132
2	 	 	 	 	           TITLE DUMPSCRN
 The IBM Personal Computer MACRO Assembler 02-19-83    	PAGE	1-1
DUMPSCRN


3	 	 	 	 	           PAGE
4	 	 	 	 	           COMMENT *
5	 	 	 	 	
6	 	 	 	 	      TITLE: DUMPSCRN (c) Copyright 1983 L.C. Systems
7	 	 	 	 	     AUTHOR: Christopher J. Lindell
8	 	 	 	 	       DATE: February 1983
9	 	 	 	 	   PURPOSE:  This program will allow 640 x 200 resolution screens to be dumped to
10	 	 	 	 	             the printer.  The printer must be an Epson MX-80 fitted with Graftrax+
11	 	 	 	 	             or the Epson MX-100.  The screen will be centered on an 8 1/2 by 11
12	 	 	 	 	             piece of paper.  The routine will reset the printer to turn on conditions 
13	 	 	 	 	             when printing of the screen is complete. *
 The IBM Personal Computer MACRO Assembler 02-19-83    	PAGE	1-2
DUMPSCRN


14	 	 	 	 	           PAGE
15	 0000	 	 	 	    CSEG   SEGMENT  STACK
16	 	 	 	 	           ASSUME    CS:CSEG,ES:NOTHING
17	 0000	 	 	 	   SUBRT   PROC    FAR
18	 0000  55	 	 	           PUSH BP            ;SAVE BP
19	 0001  06	 	 	           PUSH ES            ;SAVE ES
20	 0002  EB 05 90	 	 	           JMP START          ;JUMP OVER DATA
21	 0005  0000	 	 	   MEMVAL  DW  0000H          ;STARTING MEMORY OFFSET
22	 0007  80	 	 	   BITPOS  DB 10000000B       ;BIT POSITION WITHIN BYTE
23	 0008  80	 	 	   LINVAL  DB 10000000B       ;LINE 0-7 MASK
24	 0009  BA B800	 	 	   START:  MOV DX,0B800H      ;BEGINNING SEGMENT
25	 000C  8E C2	 	 	           MOV ES,DX          ;LOAD INTO SEGMENT REGISTER
26	 000E  B4 05	 	 	           MOV AH,5H          ;AH=5 SIGNAL PRINT FUNCTION ON INTERRUPT 21
27	 0010  B2 1B	 	 	           MOV DL,1BH         ;ASCII CHARACTER 27
28	 0012  CD 21	 	 	           INT 21H            ;SEND TO PRINTER
29	 0014  B2 41	 	 	           MOV DL,41H         ;MOVE  "A" TO THE PRINTER
30	 0016  CD 21	 	 	           INT 21H            ;PRINT IT
31	 0018  B2 08	 	 	           MOV DL,8H          ;MOVE OUT LINES PER INCH
32	 001A  CD 21	 	 	           INT 21H            ;PRINT IT
33	 001C  B9 000C	 	 	   AGAIN:  MOV CX,0CH         ;12 BLANKS
34	 001F  B2 20	 	 	     SPC:  MOV DL,20H         ;PRINT 12 BLANKS TO CENTER
35	 0021  B4 05	 	 	           MOV AH,5H          ;AH=5 SIGNALS INTERRUPT
36	 0023  CD 21	 	 	           INT 21H            ;GO DO THE PRINT
37	 0025  E2 F8	 	 	           LOOP SPC           ;DO IT TWELVE TIMES
38	 0027  B2 1B	 	 	   GRPHS:  MOV DL,1BH         ;PRINT ASCII 27
39	 0029  CD 21	 	 	           INT 21H
40	 002B  B2 4C	 	 	           MOV DL,4CH         ;PRINT L
41	 002D  CD 21	 	 	           INT 21H
42	 002F  B2 80	 	 	           MOV DL,80H         ;PRINT 128
43	 0031  CD 21	 	 	           INT 21H
44	 0033  B2 02	 	 	           MOV DL,2H          ;PRINT 2
45	 0035  CD 21	 	 	           INT 21H
46	 0037  B9 0050	 	 	           MOV CX,50H         ;80 POSITIONS
47	 003A  2E: 8B 1E 0005 R	 	    MAIN:  MOV BX,MEMVAL
48	 003F  2A D2	 	 	           SUB DL,DL          ;ZERO OUT DL - WILL BE PINS TO FIRE
49	 0041  26: 8A 37	 	    LPT1:  MOV DH,ES:[BX]     ;LOAD BYTE FROM SCREEN
50	 0044  2E: 22 36 0007 R	 	           AND DH,BITPOS      ;MASK IT
51	 0049  2E: 84 36 0007 R	 	           TEST DH,BITPOS     ;SEE IF EQUAL
52	 004E  74 05	 	 	           JZ   LP3           ;JUMP IF ZERO
53	 0050  2E: 02 16 0008 R	 	           ADD DL,LINVAL      ;ADD LINE VALUE IF BIT WAS THERE
54	 0055  2E: F6 06 0008 R AA	    LP3:   TEST LINVAL,10101010B
55	 005B  75 07	 	 	           JNZ  LP4           ;JUMP BACK AND FORTH IN MEMORY
56	 005D  81 EB 1FB0	 	           SUB BX,1FB0H       ;THIS COMES BACK FOR ODD LINES
57	 0061  EB 05 90	 	 	  	   JMP ERYOTH         ;JUMP OVER EVEN MEMORY OFFSET CALCULATION
58	 0064  81 C3 2000	 	    LP4:   ADD BX,2000H       ;EVEN LINES CALCULATIONS
59	 0068  2E: D0 0E 0008 R	 	   ERYOTH: ROR LINVAL,1       ;ROTATE PIN VALUE
60	 006D  73 D2	 	 	           JNB LPT1           ;SEND OUT WHEN ALL 8 PINS ARE CALCULATED
61	 006F  B4 05	 	 	           MOV AH,5H          ;CODE 5 TO AH FOR THE INTERRUPT
62	 0071  CD 21	 	 	           INT 21H            ;GO PRINT
63	 0073  2E: D0 0E 0007 R	 	           ROR BITPOS,1       ;ROTATE MASK RIGHT 1
64	 0078  73 C0	 	 	           JNB MAIN           ;JUMP IF DONE WITH BYTE
65	 007A  2E: FF 06 0005 R	 	           INC MEMVAL         ;GET THE NEXT BYTE
66	 007F  E2 B9	 	 	           LOOP MAIN          ;DECREASE CX , DO IT 80 TIMES (BYTES)
67	 0081  B2 0A	 	 	           MOV DL,0AH         ;LINE FEED AFTER A WHOLE LINE
68	 0083  B4 05	 	 	           MOV AH,5H          ;CODE 5 TO AH FOR THE INTERRUPT
69	 0085  CD 21	 	 	           INT 21H            ;GO DO THE PRINT
70	 0087  2E: 81 06 0005 R 00F0	           ADD MEMVAL,0F0H    ;INCREMENT TO NEXT LINE
71	 008E  2E: 81 3E 0005 R 1F40	           CMP MEMVAL,1F40H   ;LAST MEMORY LOCATION TO QUIT ON
72	 0095  75 85	 	 	           JNZ AGAIN          ;DO IT AGAIN IF NOT DONE
73	 0097  B2 1B	 	 	           MOV DL,1BH         ;PRINT ASCII 27
74	 0099  CD 21	 	 	           INT 21H            ;GO PRINT
 The IBM Personal Computer MACRO Assembler 02-19-83    	PAGE	1-3
DUMPSCRN


75	 009B  B2 40	 	 	           MOV DL,40H         ;RESET PRINTER TO DEFAULT VALUES WITH "@"
76	 009D  CD 21	 	 	           INT 21H            ;GO PRINT
77	 009F  2E: C7 06 0005 R 0000	           MOV MEMVAL,0000H   ;RESET MEMORY VALUE FOR THE NEXT TIME
78	 00A6  07	 	 	           POP ES             ;RESTORE ES
79	 00A7  5D	 	 	           POP BP             ;RESTORE BP
80	 00A8  CB	 	 	           RET 00H            ;FAR RETURN TO BASICA
81	 00A9	 	 	 	   SUBRT   ENDP
82	 00A9	 	 	 	   CSEG    ENDS
83	 	 	 	 	           END

 The IBM Personal Computer MACRO Assembler 02-19-83    	PAGE	Symbols-1
DUMPSCRN


Segments and groups:

	 	N a m e	 	 	Size	align	combine	class

CSEG . . . . . . . . . . . . . .	00A9	PARA  	STACK 	

Symbols:            

	 	N a m e	 	 	Type	Value	Attr         

AGAIN. . . . . . . . . . . . . .	L NEAR 	001C	CSEG
BITPOS . . . . . . . . . . . . .	L BYTE 	0007	CSEG
ERYOTH . . . . . . . . . . . . .	L NEAR 	0068	CSEG
GRPHS. . . . . . . . . . . . . .	L NEAR 	0027	CSEG
LINVAL . . . . . . . . . . . . .	L BYTE 	0008	CSEG
LP3. . . . . . . . . . . . . . .	L NEAR 	0055	CSEG
LP4. . . . . . . . . . . . . . .	L NEAR 	0064	CSEG
LPT1 . . . . . . . . . . . . . .	L NEAR 	0041	CSEG
MAIN . . . . . . . . . . . . . .	L NEAR 	003A	CSEG
MEMVAL . . . . . . . . . . . . .	L WORD 	0005	CSEG
SPC. . . . . . . . . . . . . . .	L NEAR 	001F	CSEG
START. . . . . . . . . . . . . .	L NEAR 	0009	CSEG
SUBRT. . . . . . . . . . . . . .	F PROC	0000	CSEG	Length =00A9

Warning Severe
Errors	Errors 
0	0
ontinue until you get to 25