@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ` }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H }p h  hyhy D L> L JJ    ! LA*` BF }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D } .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `1  ɐ     `TU  } L ? .  t`GBJ ~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI4 0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHI$} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO &}STILL RUN DOS B;DE J  (` 9 V⪍ ઍ  -'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu  } 3E:}DISK OPERATING SYSTEM II VERSION COPYRIGHT 1984 ATARI CORP.A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG*}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES+}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N',}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx -}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT.} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL/}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.1}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC2}COPY--FROM, TO?OPTION NOT ALLOWED736 FREE SECTORS COPYING---D1:DIRECK.COMl# 0|D .L/%#3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A6}LLOWED IN DESTINATION 0 <.|K}N 2 FORMAT. t* 5) 1L!`) 0NΞ 0 L1) 1 L!BAD LOAD FILELOAD FROM WHAT FILE?) 0 ?}0#B 1L!WHAT FILE TO LOCK?) 0 0$B 1L!WHAT FILE TO UNLOCK?DUP DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO US@}E PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV.FE! +L1   `*  70 2 2A} 0.* 1 y0 0)INSERT BOTH DISKS, TYPE RETURN^, 1 y038逍 N, 1L! ,B}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0C}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,HhD}` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNINSERT DESTINATION DISK,TYPE RETURNE}`  `8 rL1`-* 1P* 1 y0Y`hhL!NAME OF FILE TO MOVE?- 0 0|DL% <.F},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  G}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#PH},^ 1 70 0L#L!-* 1P* 1 y0Yj383}mm ݭI}}`8}``|* ? ɛ,`|:-)| / 1L!`DESTINATION CANT BE DOJ}S.SYS0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξK}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-GIVE L}FILE,START,END(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L!M}0 0 1L~0`PLEASE TYPE 1 LETTER,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥN}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAMEO} TOO LONG B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 LP}!ERROR- 138ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALID HEXAQ}DECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uR} ECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uijtDIRFILENAMEERRMSGGPNGMFDLLASLINENDLDLPPLLOFNHSZZCOHIFNTODLIPLUCDLDSC } @  } } !"#$$$ԠҠ$$é­$$ }é֭$$򠠠$$塠$$ }$$栤ﺠ$$堠 $$ᬠ << };@,;@,;AD,;@!,;@,36.D:*.FNT6.G2:(6- }3@-#@@K:- A#-@@(# A<-@@($@ }06-<6-$16-6-@'6-1 B#P. 6-A  6. Disk Error8+@ }+@@B!-LO@.7@<@,4FREE S9@E6- }O A`V! 6-`#67,.7@,#6-%@j>6-%@"@)6-@4@ }> Apt A~-"#6. No FONT Files- B#P?6-@ 6-'6-36- }?6-36-6-'6-@36-! B !ϠŠٛ }G56-F:@,%AV$F:@,%$@@GAR@c-@+-@1C6 }-%$@@%@S6-$@2%[%_ c 6-@-@) 6.  })67@,.7<%@,1-@@$7<,4 ''1 A  67,..FNT(Ӡ }ɛ23!6-P:@&+B:,'@,,/-&@3(<7"@#-&@@7(  F"67@< }@,."6-%P B!AVZH B"0 A#"@H@!@d#6-% }@6-%@# n+6-@ B"0+AVA$x B!p Ϡ٠ӛ. A " }+AR.F-@@#4(FAdAU"F:Ad,AU"  }A A@""Ԡ٠ҠԠΛ9A%@! A/6-%@9 A` }堦 +gAR@)-@@=-@&@c(! } g 7-@@7(ԠҠ7-@@7(Š }6-@@6( (c) 9/2/92, by Steve Walker$",6"F:Ad,"AU" A0@1 }6-$F:Ad,A%1)@J"AU$T6!@H* @S367@<@,.>:,6$^"F: }B2y,"@" Ah"F:B2y,"@" Ar"F:B2y,"@" A@| A }ίƛ*6-%@"@' A`*$6-( )6-3 A6$ A }dzDz46-%@"@'6.G3:1 A`4$&6-6.G2:# A`&$ }/"@!-%(/ A$-@@P $ĠԠқ6-P:H: },$@,"@ A&"@ A0"@ A:''6-P:H:,$@,$@ }%D +%@ %,&@2 $} }ӯɛ}6-F:A,&@}&&6-F:A,&+$@ }%@,(}6-$AVA2} +<}%%6-F:A`,%AV$F:Aa,F}$P}Z} }d}2 @@2AP@n}ARASx}AVAW}6-?:C: }hhhLV,<@,}@$}}̠}$6-F:AY,$AY}!A! }A}!BBA!AY}$}}ɠ򠭠Ԡ}S- @)!@()"@)"@ }I6.Invalid Range for DLLS B#`}%F:%,%A(}3 #B"`!-@%%"/%%3 ~DD72 },169,224,141,10,212,141,9,212,169,32,141,0,2,169,156,141,1,2~169,148,141,24,208,104,64~1%@%%#6-%@ }16-%@"~r"@%%@%36-%@E%@%%Q6-]6-o6-+%,$AV }r$,~g"@%%@%;%@%A$Q%@ %AH]6-g B# 6~%@% }%@2@~%@%%J~6-%@2$T~^~ҠŠśh~1 +@A@Q1AR }@r~4F:A,"A046.G:print not Installed|~m!(%ERR #F:A,, 6F:A,"A09(K-@ }@#m( Ӡ͠Ԡ~6-@AP 0F:A,"A036~ + B  }D:FNTDSPLR.BASӠ͠Ԡ~6-@AP 0F:A,"A036~ + B   FONT DISPLAYER Version 1.1 } 9-FEB-92 Program and Documentation by Steve A. Walker } 15629 East Asbury Place Aurora, Colorado 80013 This program is d}istributed as SHAREWARE. I have spent a great deal of time designing, coding, debugging, and modifying this program. } A minimum donation of $6 that I receive for my time and effort will encourage me to continue supporting this program,} as well as writing new software for the Atari 8-bit computer. Thank you.} Release 1.0 was submitted to Antic magazine on November 15, 1988 for publication and was rejected the following }Feburary of 1989. The program has since resided in my disk holder, except for an occasional demo at the Atari Club} of Denver, of which I've been a member since 1985. First, I would like to thank the Atari Club of Denver for allo}wing me the opportunity to demo the FONT DISPLAYER program, and secondly Mike McCuthcheon (our Sysop of the Atari Club B}BS at (303) 343-2956) for encouraging me to allow this program to be distributed as SHAREWARE for the 8-bit Atari c}ommunity. Suggestions or comments about the program can be posted via the Atari Club BBS. Release 1.1 displays th}e full character set on screen lines 1-4 and allows this to be dumped to your Epson or Gemini type printer using th}e GPRINT program by Charles F. Johnson. FONT DISPLAYER will run with or without GRPINT installed. Error trapping will b}ranch if this routine is not installed when flagged to print. PURPOSE} This program was a result of trying to learn how to perform animation on my Atari 800XL. My first approach was t}o use page flipping. This is a technique where a graphics screen would be loaded into memory and the program would} flip, (or point) to each screen picture in memory for 1/60th of a second to give the animation effect. The only p}roblem with this method was that each picture took up 8K of memory. Since I was using a stock 800XL I really didn't have} the extra memory to spare for page flipping. A character font display seemed a better approach in order to cons}erve memory. Several of my pictures were converted to fonts, to be used as background screens. Now my problem was} to display each font on the screen as graphics mode 0. During my research to this problem I found it interesting }that the majority of font building programs had an option to output data statements to a file, but no example on how to} put it all together. By using the subroutine approach, that is part of FONT DISPLAYER, you can now put it altoget}her yourself to display your your own custom fonts. INTRODUCTION There are numerous programs for building a}nd using character fonts. Programs such as Envision, Ultrafont(Antic; August 1986), SuperFont (Compute!'s First Bo}ok of Atari Graphics, 1982) and your own font display routines, just to mention a few. Over a period of time you }begin to collect a library of fonts. This program allows you to preview your font library. How many times have y}ou tried to remember what a certain font looks like? Trying to recall roman, cursive, gothic and and all the other } fonts becomes some what frustrating. The eight character filename just isn't enough to jog the old memory. Wouldn't i}t be nice if a directory listing of your font disk would actually display the listed fonts on the screen? FONT DIS}PLAYER has come to your aid. It will actually display up to 18 fonts, loading each into memory and displaying eac}h filename as it's own font. Using the display list interrupt capability and FONT DISPLAYERS subroutine, you could displ}ay a font for each of the 24 lines at one time in your own program. HOW IT WORKS: FONT DISPLAYER To run the} program just insert your font disk into one of your drives and press the assigned number (1-4) to get a directory listi}ng. The program will display the font filename on the screen, and load the font into memory along with its associa}ted display list interrupt routine. When the font has been loaded, it will become the active font. This process w}ill be repeated for each font that is found on the disk. Each filename will be printed below the previous up to a total} of 18 fonts per screen. Once all fonts have been loaded, the DLI routines will be enabled to allow each font to b}e displayed separately. Two additional program examples are included (AEROSTAR.BAS, NDCENT.BAS) which you should c}opy and modify as required to load your own font and screen data files. The following outlines the program examples by }line numbers. PROGRAM TAKE-APART: AEROSTAR.BAS Lines 30-40 initialize all passing subroutine parameters. D}LN variable (display list number) defines how many fonts (DLI routines) will be loaded. Line 60 is required to res}erve enough memory for the number of fonts that will be loaded. Line 70 turns the screen off during the font file }load process. The example programs both load in eight font files and one screen character data file. The DLI is s}et up to point to the next font memory location after every three lines. Lines 110, 130, 150, 170, 190, 210, 230, }250, are used to set the font file name and display list line (DLL) number. Valid DLL numbers are from 2-3, and 6-}28 (respective screen line 1-2, 3-24). Lines 120, 140, 160, 180, 200, 220, 240, 260 are used to define the font lo}cations in memory. Once defined the fonts will be loaded and the DLI loader font pointer routine will be assigned to th}e respective DLL. The DLI routine also allows for setting background color for each font line. The variable }LAST in Line 270 is used to set the address back to the beginning first font within the last DLL routine. Lines 30}0-330 are used to load the screen character data. Line 350 will activate all DLI routines, and display their assigned } fonts and colors and line 360 will turn the screen back on. FONT DISPLAYER: FNTDSPLR.BAS Lines 1020-1040 det}ermine which drive has been selected. Once the drive has been selected, the directory file, will be opened and a directo}ry of all font files with an extension of FNT will be performed on the selected drive. The eight character font fil}ename will be stored in the NAME$ array. File names that are less than eight characters will include trailing bla}nks. Line number 1060 sets DLN=0 for no font files. The DLN variable on line 1130 will count each font file that is fou}nd and the IF statement sets the limit to a total of 18 filenames(DLN=18), that can be stored (displayed per screen}), for a array size of 144 bytes. The array will be reused with the next set of 18 or less fonts. Defaults are set} for the display list offset (DLO), page count(PC) and page (PG), and font parameters at lines 1170-1180. The font disp}lay will begin on screen line 6 which is determined by DLL=9 on line 1170. Line 1190 will call the reserve memory s}ubroutine which will reserve the required amount of memory to load the fonts. Line numbers 1220-1230 display the s}tandard character set on the first four lines. Line numbers 1260-1380 are used to extract the font filename from t}he NAME$ array. Line 1330 determine the print position of the file name which will then be printed on the screen and lo}aded into memory. The font file will be loaded by calling 32100 from line 1360, and it will become the active fon}t at 1360. The subroutine call to 32230 from line 1370 will load the associated DLI routine. The call to 1810 will } modify the DLI color routine to ensure that the text and background color are not the same. This will continue until a}ll fonts have been displayed. GPRINT (Epson & Gemni printers) The GPRINT utility, if loaded will allow the user }to print the first five lines with the current activate font. This font dump capablity can be toggled ON or OFF by} selecting OPTION. SELECT will toggle G2 or G3 for the print size. A G2: or G3: will be displayed at the upper left of} the screen to denote that the GP flag is activate. The GP flag at 1340 will print the activate font file nam}e on line 5 as the font label for printing and 1370 will activate the GPRINT utility. Once the GP flag has been set} it will print every font found. Note: IF the GPRINT utility is not loaded you will receive a status error o}f: Nonexistent Device. A SYSTEM RESET must be performed before re-runing the FONT DISPLAYER (FNTDSPLR.BAS) routin}e. For Further information about GPRINT by Charles F. Johnson refer to the October 1985 ANALOG (pages 81-84) for a} complete discription. I have included the GPRINT routine and doc file with the FONT DISPLAYER program. Line 1380} incrument the DLL until all 18 fonts have been displayed. Once the the DLL must point back to the top of the screen as }defined by the LAST at line 1390 and display standard font for lines 1-5 and 24. Line 1410 will activate the DLI ro}utines and display all fonts at once. Line 1420 calls 1520 to clear the character set display and re-display the th}e label and check for more files (MF) or end the program. Program lines 1590-1780 are used to determine what key/OPTION}/SELECT has been pressed for drive/program activation and GPRINT toggle. FONT DISPLAYER SUBROUTINE AREA: 32000-3}2370 Lines 32020-32070 reserve memory for the fonts and the DLI routine itself. Lines 32100-32140 are used t}o load font and character data files into the assigned memory location. Lines 32170-32200 turn display on and acti}ve the DLI routines. Line 32230 is used to verify if the display list line is valid. Line 32240 flags the line as} having a DLI routine to execute. Lines 32250-32270 load the actual DLI routine whereas line 32280 will set the ad}dress for the font to be displayed and setup the address for the next font. Line 32290 is used to incrument the pa}ge number of the next DLI address Line 32300 is used to point back to the standard atari font (0,224) and set the }background color back to blue (148). Lines 32310-32330 sets the address for the next DLI routine and incruments th}e display list offset by 32 bytes. Lines 32360-32370 are used to display user defined and trapped error messages.} FONT DISPLAYER - GPRINT error trap error messages lines 32370-32400.play user defined and trapped error messages.J8000000` p<}ffff<0p0000330p}000000x<620080000p000080 } 800c>c00`00@0p`01ccx|q?`}``|ff|fff> x000p000080000p`x <600 p} `0cccLJƆ0000000px`q?cccÁ|800000fOLLOf0a31`33 }33 ?>`<~~<fF{8llll8l }`bflxlffǃ  Z>fF{8llll8lFGr FILEERRMSGDLDLPPLLOFNHWLASLINENDLHIFNTODLIDLDSC } }FONT DISPLAYER EXAMPLEBY STEVE WALKER ;@,;@,?6-@ 6}-'6-36-?6-(?6-6-'6-@36-?6-2 6-A 6}. Disk Error<! B !ϠŠٛF$6-F:AY,$AYPAR@ B#PZd}Ԡɛn6. D1:S1.FNT6-@x 6- B! B"06. D1:S2.FNT6-@ 6-%} B! B"06. D1:S3.FNT6-@ 6-% B! B"06. D1:S4.FNT6-@} 6-% B! B"06. D1:S5.FNT6-@ 6-% B! B"06. D1:S6.FNT6-@} 6-% B! B"06. D1:S7.FNT6-@" 6-% B! B"06. D1:S8.FNT6-@%"} 6-% B! B"0,%6-@6-@(% B"06@6.D1:AEROSTAR.SCRJ!6-F:@,!6-F:@},T 6-6-^ B!AVhr B!p Ϡ|!AY!A A A}} }ӯɛ}6-F:A,&@}&&6-F:A,&+$@%@,(}6-$AV}A2} +<}%%6-F:A`,%AV$F:Aa,F}$P}Z}d}2 @@}2AP@n}ARASx}AVAW}6-?:C:hhhLV,<@,}@}$}}̠}$6-F:AY,$AY}!A!A}!BBA}!AY}$}}ɠ򠭠Ԡ}S- @)!@()"@)"@I6.Invalid Range fo}r DLLS B#`}%F:%,%A(}3 #B"`!-@%%"/%%3 ~DD72,169,224,141,10,212,141,9,2}12,169,32,141,0,2,169,156,141,1,2~169,148,141,24,208,104,64~1%@%%#6-%@16-%@"~r"@}%%@%36-%@E%@%%Q6-]6-o6-+%,$AVr$,~g"@%%@}%;%@%A$Q%@ %AH]6-g B# 6~%@%%@2@~%@% }%J~6-%@2$T~^~ҠŠśh~P +@A@Q1AR@P(%ERR #F:A!},, r~3-@AP %+/ B3 D:AEROSTAR.BAS1AR@P(%ERR #F:AU`abcdefghijklmno !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx#}  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx $}  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx %} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx &} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx '} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx (} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx  !"#)}$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxuvwx  !"#VIJ FILEERRMSGDLDLPPLLOFNHLASLINENWDLCHIFNTODLDLIDSC!+} !,}FONT DISPLAYER EXAMPLEBY STEVE WALKER ;@,;@%,!-}?6-@6-'6-36-?6-(36-6-'6-@36-2 6-A!.} 6. Disk Error<! B !ϠŠٛF$6-F:AY,$AYP1AR@'A @!/}1 B#PZdԠɛn76. D:ND1.FNT6-@I+6-@76-A`x 6- B! A!0}=-@@%6-%@1"@=6-@6-%@ A` -@@6-&!1}@ A6-&@ A6-%@ A` %-@@%6-%@6!2}-@d A` 6- A%6-@6-@(% B"0ĠΠӛ!3}6. D:NDCENT.SCR!6-F:@,!6-F:@," 6-6-, B!AV6 B!p Ϡ!4}@AYJ A0T^ĠԠӠɛh+6-%@+67@<@,.>:,r 6-% B!!5}|6-%@ B"06-&@ +%@ %,&@2 $} }ӯɛ}6!6}-F:A,&@}&&6-F:A,&+$@%@,(}6-$AVA2} +<}%%6-F:A`,%AV!7}$F:Aa,F}$P}Z}d}2 @@2AP@n}ARA!8}Sx}AVAW}6-?:C:hhhLV,<@,}@$}}̠}$6-F:AY!9},$AY}!A!A}!BBA!AY}$}}ɠ򠭠Ԡ!:}}S- @)!@()"@)"@I6.Invalid Range for DLLS B#`}%F:%,%A(}3 #B"`!;}!-@%%"/%%3 ~DD72,169,224,141,10,212,141,9,212,169,32,141,0,2,169,156,141,1,2~169,148,141,!<}24,208,104,64~1%@%%#6-%@16-%@"~r"@%%@%36-%@E%@!=}%%Q6-]6-o6-+%,$AVr$,~g"@%%@%;%@%A$Q%@ %!>}AH]6-g B# 6~%@%%@2@~%@%%J~6-%@2$T~^~ҠŠ!?}śh~P +@A@Q1AR@P(%ERR #F:A,, r~3-@AP %+/ !@}B3  D2:NDCENT.BAS1AR@P(%ERR #F:A,, r~3-@AP %+/ !  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx%B}  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx %C}  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx %D} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx %E} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx %F} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx %G} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx  !"#%H}$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxuvwx  !"#$V%% ) ) %) %)Ѕ % `%%)G& & .`&&&&&'L&) )J}l JJJJ0W!ʎ)))+))"@* ) 6)) ) A)0 )(` 6)@)K} A)`)Hԝ))ԭ)h)@+)֩)8ɛL]') n)J) i@`8  &׈ׅ֭נ)֬))L}IJHjhΦ))ɛԈi)Ԑ)))k))cԌ)).))@L )JJJJʽ))ک))M} 6)ڙɛ)(i(ڐ A)) ))(`) &Q)X؍))Yٍ))")@2)))N})خ) &))( O)έ)L&* )! )0 )@))))))ح)٢؝))) O)O})*0 [))) &)) &*)) &))))(Ѝ)m))))m)))))Ͷ)Li()P})L&)*+,-)))))`'` )LYi(ؐ`)))JH*~)~)~)(hΧ))Q}`))@W(NLLKK &&<(Px@NMA%(} ANALOG COMPUTING OCTOBER 1985 / PAGE 81-84 16K Disk -S} UTILITY G: A printing device for Epson (with Graftrax) or Gemni printers By Charles F.-T} Johnson One of the first things you find out about your printer is that it can't print out many of the "special c-U}haracters in the Atari character set (e.g., the cursor characters, clear screen, all the CTRL graphics characters, -V}all inverse characters, and so forth). If you send any of these to your printer, all kinds of odd things start happenin-W}g. Many of the special characters are interpreted as control codes by the printer, causing line feeds, form feeds,-X} different fonts, etc. Unfortunately, alot of Atari BASIC programs use these characters quite liberally, so if you-Y} type a simple LIST "P:" command, you might your listing unexpectedly shift into Japanese katakana in the middle of a -Z} program line. Printing pictures from graphcs mode 8 or 7+ (15 on XL computers) can be fairly complicated proced-[}ure, as well. Translating the screen data to printer format is not an easy task for a beginning or intermediate pr-\}ogrammer. It can be done! There's a way to print any character your Atari can display on-screen; you must us-]}e your printer's graphics mode and convert every character in the text you are sending into the graphics data that will -^}draw that character on the printer. There are several program on the market that will do this (Printwiz, Megafont -_}II, Lister-Plus), but all these require that the program (or text) to be printed be stored on disk in an ATASCII file.-`} These lister programs all read text from this disks file one line at a time, convert it to printer graphics and pri-a}nt it. This disk-based method is rather slow and necessitates an intermediate step in the listing process-making t-b}he disk file. Most of these utilities also have some provision to print pictures. A new device. This progra-c}m represents another approach to the problem. The G: device is loaded into memory at boot-up time as an AUTORUN.SYS fil-d}e. It will work with BASIC, the Assembler/Editor cartridge, BASIC XL and MAC/65. You can LOAD, SAVE, ENTER and LI-e}ST files to and from disk, edit programs and perform any functin in the usual manner with G: present. The differen-f}ce is that, any time you want to produce a graphics listing of a BASIC or assembly language program, you just type: -g} LIST "G:" (BASIC) LIST #G: (MAC/65, ASSEMBLER/EDITOR) This will list whatever you have in memory to the print-q}B%DOS SYSB*)DUP SYS+SAUTORUN SYSB+~FNTDSPLRBASBZFNTDSPLRDOCB FNTDSPLRFNTB AEROSTARBASB"AEROSTARSCRB*NDCENT BASBANDCENT SCRB IGPRINT COMB^RGPRINT DOCB ND1 FNTB ND2 FNTB ND3 FNTB ND4 FNTB ND5 FNTB ND6 FNTB ND7 FNTB ND8 FNTB S1 FNTB S2 FNTB S3 FNTB S4 FNTB %S5 FNTB .S6 FNTB 7S7 FNTB @S8 FNTer, but with all inverse and graphics characters exactly as they appear on-screen. You can list only certain line -r}numbers, in the same way you would to any other device, with a statement such as: LIST "G:",10,290 or LIST #G-s}:,1220 The G: device will automatically set the left margin five spaces in and set the skip-over-perforation featu-t}re. I recommend positioning the printhead approximately two line feeds below the perforation line to start your li-u}sting. Four flavors. Now, what yould you pay? But wait...there's still more! G: comes in four flavors-G1:(-v}the default), G2:, G3: and G4:. Here's what the different device numbers do. G1: (or just G: - This prints an ent-w}ire 114-character program line on one line with single-width characters. G2: - This prints each line of text exactl-x}y as it would appear on the screen (left margin set at 2), using single-width characters. G3: - Same as G2:, but w-y}ith double-width characters. G4: - Prints a 60-character line of double-width characters. Custom fonts and screen -z}dumps, too? Now, what would you pay? But wait...G: also prints custom character sets! When you're printing text, G-{}: will use whatever character set memory location 756 (hex $2f4) is pointing to. Character set modification has be-|}en covered in many places, so I won't go into the whole subject here. There are many public domain and commerical -}}character editors for the Atari, to help in creating any font you can imagine. Create-A-Font by Vince Erceg in ANALOG C-~}omputing's issue 16 is a good one. G: also has a very flexible XIO function, which will print an exact copy o-}f a graphics mode 0, 8 or 7+ (mode E) screen display. A mode 0 screen can be printed with either single- or double-width-} characters. Mode 8 or 7+ screens can be printed in mormal or inverse, three different widths and two different he-}ights! The ins and outs of XIO To print a graphics mode 0 screen, type: XIO 16,#1,0,0,"G:" This is pr-}obably most useful in the program mode, where you can set up the screen in whatever way you like, then execute the XIO c-}ommand (say, with a press of the START button). When using XIO with graphics 0, the G: device numbers (G1:,G2:,G3:-}, and G4:) control only the print size, not the line length. Therefore, G1: and G2: will produce the same printout, as -}will G3: and G4:. If the first number after XIO (the command number) is 16, the entire screen will be printed-}. To print just part of the screen, add the number of lines you want to print to 16 and use that as the XIO command num-}ber. For example, if you want to print the first five lines using double-width characters, add 5 to 16 (21), and th-}e XIO command might look like: XIO 21,#1,0,0,"G4:" Printing pictures. To print a graphics 8 or 7+ screen, f-}irst set up your hi-res display, then execute the command: XIO 64,#1,0,0,"G:" This will print a single-width-}, single-height picture. to print your screen in inverse (like a photographic negative), set the auxiliary byte (t-}he second number past the channel number) to 255. The XIO command would be: XIO 64,#1,0,255,"G:" When you'r-}e printing a hi-res screen, the G: device numbers control the height of the picture. Here's how they work: G1: or-} G2:............Single height. G3: or G4:............Double height. The width of the picture is controlled by the -}value of the first byte past the channel number in the XIO statement. In the first two examples above, this byte i-}s 0. Here are the width values: 0 or 1 ...............Single width. 2.....................Double width. 3...-}..................Triple width. I'll give several examples to illustrate the use of the XIO 64 command. XIO 64,#1-},0,255,"G4:" -- Single width, inverse, double height. XIO 64,#1,2,0,"G2:" ---- Double width, normal, single height. -} XIO 64,#2,3,255,"G3:" -- Triple width, inverse, double height. XIO 64,#1,1,0,"G:" ----- Single width, normal, single he-}ight. As you can see, there are quite a few ways to print a hi-res picture with the G: device. Some experimentati-}on will probably be necessary to find the best way to print each picture. And, by the way, the G: device automatica-}lly centers your picture on the page (on 80-column printers). Now, how much would you pay? MAC/65 or Assembler/Edi-}tor. If you use MAC/65 or the Assembler/Editor cartridge, you can also send assembly listings to G: with the ASM c-}ommand, or print to G: (no line numbers) with the PRINT command. The syntax would be: ASM,#G: or PRINT #G:-} BASIC or BASIC XL In BASIC or BASIC XL, you can open a channel to G: with a statement like: OPEN #1,8,0,-}"G:" and then treat it exactly as any other output device print strings, numbers, etc. with PUT # or PRINT # comma-}nds. This enables you to set up special title pages for documents with mixed print modes and mixed character fonts-}, draw borders, graph lines...or whatever you wish! You can open more than one channel to G: at a time (e.g.,G1: and G4-}:) and print alternate lines in different character widths. Unfortunately, at this point there's no way to change -}print modes on the same line. The channel numbers that you use must be between one and seven, as with any other de-}vice. G: even provides a way for you to control your print's line spacing. There are three preset line feed values-}, and you may also set the line feed to n/72 inches, n being a number between 3 and 127. The preset values are: -} 0 (default).....8/72 (1/9) inch line feed. 1 ..............9/72 (1/8) inch line feed. 2 .............12/72 (1/6-}) inch line feed. In addition to these three presets, any number (n) greater thatn 2 is taken to mean a line feed -}of n/72 inches. We use the OPEN auxiliary byte to pass the line feed value to the G: driver, like this: OPEN #1,8-},2,"G4:" or XIO 16,#1,0,10,"G:" The auxiliary byte is the second number past the channel number in both ex-}amples (the same one we use for inverse with the XIO function). In the first example, it's 2. This will set the printe-}r to 1/6 inch line feeds. In the second example, we're telling the printer we want line feeds of 10/72 inch. -}The G: device uses the serial bus to send data to the printer, through SIOV at $E459. This means that if you have some -}kind of printer interface utilizing the joystick ports (as I used to), you can't use this version of G:. It's-} possible to modify G: to use an IOCB channel to access the printer, but then the G: device will actually use two IOCB c-}hannels while it's open, and you could no longer have more than one channel open to G: simultaneously. SYSTEM-} RESET-proof! G: is protected from SYSTEM RESET; it will remain available to you until you turn your computer off -}(or type DOS). You can go to DOS in the usual manner, but, if you do, G: will no longer work when you return to the -} cartridge. G: doesn't touch the much-abused page 6. Instead, G: reserves about 10 pages (2560 bytes) of low mem-}ory and sets the MEMLO pointer past itself, so that it can't be overwritten. The reason G: uses so much memory is -}that, for every 1 character byte we want to print, we must send 8 bytes of graphics data. This means a large buffer to -}hold the converted graphics string. (The program itself is a little over 4 pages long, while the buffer is 5 pages-}-1280 bytes!) If you have any very large programs, it's possible that there may no longer be enough free RAM to lo-}ad them. THis sould be a rare occurrence; if it happens, you can always break your program into two parts and list -} them separately. The version of G: presented here should work with and DOS, including Happy Warp DOS. It is asse-}mbled at an origin of $25D0. If you want to change this (perhaps to free up some more memory), you must enter in the so-}urce code with MAC/65 and reassemble with the different origin. One last word...In the text mode, G: is a line-ori-}ented device; in other words, it expects to be sent a line of text terminated by a RETURN (ATASCII 155). This mean-}s that you shouldn't use PRINT # statements that end in a semi-colon, because G: won't send anything to the printer unti-}l it sees a RETURN. Similarly, if you use PUT # commands to send data to G:, nothing will be printed until you sen-}d a 155 ($9B).a RETURN. Similarly, if you use PUT # commands to send data to G:, nothing will be printed until you sen,??1}??1}1}8?1}1}?1}???1}1}0???5}??5}5}?55}?/???5}?5}3p Yi$??_5}???5}4?????9}=,A@ s{uwSQtrbrr???9}9}{9}aa@GEF?????9}???9}J.:@@@QX???9}9}8??????=}$,,    9's[A=}=}????????  =} €1`Ȝ>??=}Á00?=}????????<<8<0y>{8"~`z{_?AaA}????A}@****?? 0011E} 8x?00*** 0 <Ϫǁa E}E}* *** * *jE}ǪǪjjzllE}**򪪪E} ZVR[R[R7uUeRRE}E}D?⪪I}ϟ?I}|??><8888|~>>>I}?`jJ~@mm붶몪﫪mm꺺I}xx<81#????`I}oǃ88<?88888<>||8>>>>>~ 8@@@@?jI}jmm몪ꪪnnꪫxxxxxxx??????>I}???# >???~>?????~~~~|||<>?I}# >???~>?????~~~~|||<>?H?0< ?00 c 00M} 333  33 0033338  <0M}  <0M}<0 << 33{:0000<<3333;;30 ;0<<733l<< M}3333;; c31 0000<<33?008880000<<M}:>,,쬼? ¾0:M};;::>< 0j::0;;;;;30;3M};3N}Lw3ܪw3ܪwwͪw3ͪwsͪw3̪wwͪw3ݪww̪wwܪwwܪwwݪwwݪwR}7ݪwwݪwwݪwwݪwsݪwwݪwwݪ7wݪwwݪwwݪwwݪwwݪwwݪw7ݪwwݪwwݪR}wwܪwwݪwwݪwwܪwwݪwy檪zfުfffffffﯫR}ꪪꪪꪪ몪ꪪﯯR}着몪R}77ͪ3wܪw7ݪ33ͪ3sݪ37ݪw3̪77ܪ37ݪwsͪ3wܪsR}3ݪs7ݪswݪwsݪssݪw3ܪw2ꪪw̪fw̫jw3ͪw7ܪwwͪwwݪwwݪwwݪwwݪR}wwݪwwͪwvڪvfکffffffffffffffffffffjjjR }vfکffffffffffffffffffffjjjP7wwwswwsws7s7s7wswsws7wswwwswws7wsww7wwswwswssssw7wswwwV }7www)szff:fffffffffffffffhfff3ܣhffw7̪ff77ͣjfw73f7w*f7wffwުffzfkfV }kWfUU_UUUUU_W_UfUUUfz_}ffzffffjjjj7733 *3:)f3ʩfff7ffV }f7ܪfff7ܪfffw̳ffw3ff7sff3:ffsΪfff2ffffffkfffwffwffwffwffvfffffV}fjfffffzffffffffffffffffk]uUUUUUUUUUUW]u}U_UW_]]u]UUUU]UUUUUUWUUWW]]uWUUUUUUU^V}u]WUUUz]ޚjjjj*fffffffffffffffffffffffffffffffffffffffffffjV}wjwkwwwwwwwwwwwwwwwwwwwwwwwwwwwUwwwUwwwWwwwwwwwwjwwwfwwffj׵V}kfUu]׵k]]WUUWW]uUUuuwUUUuuUUUU]}WUUUuwUUUWUUUUWUW]u^z]z香ffjjjjV}UUuuwUUUuuUUUU]}WUUUuwUUUWUUUUWUW]u^z]z香ffjjjjTfffffffffffffffiffUUiUUfUUVjݕUjUUUjUUUUVUUUUݪYYeffUUUU]UUZ}UUVVUUYVUUeUUeUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUweYVUwWUwww]zwwwfvwkZ}fzUfffWffUffU_ffUffffffffffffffjjjjfffffffffffYeVZZjUUUfZ}UUfVZjfUffjjjfffffffffffeiffeeeYYYVjjijYZZffffffZ}ffffffffwwwjzvw]W]wwwwwwwwwwwvwwffwwffzwffwffwZ}ffwfwwjzzffjfjuYiffffwwwwwwwwv]wwwwggvvvzVZYZjiiiiZ}iifwwwfwwwfwwwfzzZVVVVUUUv޶ffffwwwwwwwggggiiiiffffmmmiwwwwwwwwiZ}zvw]W]www]WwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwzzzzZ}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwzzzzXwwwwuvvYkikikwwwwwwwwvyyk]wwwvvv{wwwwziieYYYYYiefYfmݙff^}wwݷmefzzkkUUUenfnfjZZffffwyyywffgmeiyyyffffiiffwwwwwwwwwwww]^}zww]w]WwwwwwwwwwwwwwwwwwwwwwwwwwwwwzzzzwwwuYiefffwwwwwwf^}kkfwwff{gffwwfffffYfnjjjffffkiyvvZZVVZYefYZUf^ }UfUyZyjffeeUUjUUUUUUUwUUZvwݷzڪw]w]Wwwwwwwwwwwwwwwww^!}wwwwwwwwzzzzuuvvVUUwݪUUwުUUffVVffUUffUUUUjUUUUUUUUUVUUUU^"}UUUUUUVVVZZZVVVVviUUUUUUUUUjjjZZVVUUUUUUUVUUUUUUUUUUUUUUU^#}UUUUUUVUUUWUUw]WUUwwwwwwwwwwwwwwwwwwwwzzzz^$}UWUUw]WUUwwwwwwwwwwwwwwwwwwwwzzzz\qqqqb&}U9UUUUU9UUUUUUUUeeYYVUUUUUUUUeUUUUUUUUeYVVUUUUUUUUeYUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUb'}UUUUUUUUUUUUUUu]WUUUUUUUUUu]]WUUUUUUww]WUUwwwwwwwwwwwwzzzzqqpb(}U9UUUUU9YYVVb)}UUUUUUUUeeYUUUUUUUUYVUUUUUUUUeeYVUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUWUUUUUUUUu]UWUUUUUUUUU]w]WUUUUb*}www]Wwwwwzzzzpppub+}??U9VVUUUUUeUUUUUUUUUUUUUUUUUUUUUUUUUUUUb,}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUuUUUUUUUUUUUWUWUWwwwwzzzzb-}UUUUUUUUUUUUUUUUUUUUUuUUUUUUUUUUUWUWUWwwwwzzzz`uuuuof/}꪿f0}^着𰰰zzzzuuuuVVVZZީooٹf1}ZUUUUUUUUUZUUYYUUZUUUZꪪwmf2}^f3}zzzzuuuwZZY[YkifjꪪUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUYYYYYYeeUUUUUUUUUUUUUUf4}UUUUUUUUUUUUUUUUUUUUUUUUUUeeeeeeeejUUUUUU]WUUUUUuuUUUUUUUUUUUUjUUVVVUUf5}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUzzZzZzf6}UUUUUUUUUUUUUUUUUUUUUUUUUzzZzZzdjf맥eUUUUUUUUUUUUUUU]UUUUUeeeeeeeUUwUUUUUUUu]UUUUUUUUUUUUUUUj8}UUUUUU]UUUeeeeeeejjjjjj9}ںzzzj:}eeeejUUUUUUUUUUUUUUUUUeeeeeUUUUUUZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUeeeeeeej륥j;}UUUUUUUUu]W]WUWUUUUUUVUUUUUjUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUj<}UUUUUUUUUUUzzzzꪪjjwzj=}UfUfUjUUjjijj>}ffwwwwzzzzj?}ffwwwwzzzzh檪fjjffffffffffffffffffffffffffffffffnA}ffjjfffjjzz뿪ꪪjjjffffffnffgffwffwnfwnB}ffjjjfffwwfwwwzzzꫮvݪfݪnwwwwfnC}wffwfwfvfffffnfffffffffffffffffffffjejnD}jfffffffffffffffffffffffffffffffffffjjnE}꺪wwݪwwݪwwݪwwݪwwݪwwݪwwݪwwݪvwݪfwݪnF}nwݪwݪfݪfݪfjfgfffnG}ffffjfnH}fjfl