@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 D8uFGr FILEERRMSGDLDLPPLLOFNHWLASLINENDLHIFNTODLIDLDSCT} U}FONT DISPLAYER EXAMPLEBY STEVE WALKER ;@,;@,?6-@ 6V}-'6-36-?6-(?6-6-'6-@36-?6-2 6-A 6W}. Disk Error<! B !ϠŠٛF$6-F:AY,$AYPAR@ B#PZdX}Ԡɛn6. D1:S1.FNT6-@x 6- B! B"06. D1:S2.FNT6-@ 6-%Y} B! B"06. D1:S3.FNT6-@ 6-% B! B"06. D1:S4.FNT6-@Z} 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,<@,}@a}$}}̠}$6-F:AY,$AY}!A!A}!BBAb}!AY}$}}ɠ򠭠Ԡ}S- @)!@()"@)"@I6.Invalid Range foc}r DLLS B#`}%F:%,%A(}3 #B"`!-@%%"/%%3 ~DD72,169,224,141,10,212,141,9,2d}12,169,32,141,0,2,169,156,141,1,2~169,148,141,24,208,104,64~1%@%%#6-%@16-%@"~r"@e}%%@%36-%@E%@%%Q6-]6-o6-+%,$AVr$,~g"@%%@f}%;%@%A$Q%@ %AH]6-g B# 6~%@%%@2@~%@%g}%J~6-%@2$T~^~ҠŠśh~P +@A@Q1AR@P(%ERR #F:Ah},, r~3-@AP %+/ B3 D:AEROSTAR.BAS1AR@P(%ERR #F:AU`abcdefghijklmno !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx j}  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx k}  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx  l} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx  m} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx  n} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx  o} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx  !"# p}$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxuvwx  !"# VijtDIRFILENAMEERRMSGGPNGMFDLLASLINENDLDLPPLLOFNHSZZCOHIFNTODLIPLUCDLDSCr} @ s}t} !"#$$$ԠҠ$$é­$$u}é֭$$򠠠$$塠$$v}$$栤ﺠ$$堠 $$ᬠ <<w};@,;@,;AD,;@!,;@,36.D:*.FNT6.G2:(6-x}3@-#@@K:- A#-@@(# A<-@@($@y}06-<6-$16-6-@'6-1 B#P. 6-A  6. Disk Error8+@z}+@@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{8llll8l%% ) ) %) %)Ѕ % `%%)G& & .`&&&&&'L&) }l JJJJ0W!ʎ)))+))"@* ) 6)) ) A)0 )(` 6)@} A)`)Hԝ))ԭ)h)@+)֩)8ɛL]') n)J) i@`8  &׈ׅ֭נ)֬)}IJHjhΦ))ɛԈi)Ԑ)))k))cԌ)).))@L )JJJJʽ))ک)} 6)ڙɛ)(i(ڐ A)) ))(`) &Q)X؍))Yٍ))")@2))})خ) &))( O)έ)L&* )! )0 )@))))))ح)٢؝))) O})*0 [))) &)) &*)) &))))(Ѝ)m))))m)))))Ͷ)Li(})L&)*+,-)))))`'` )LYi(ؐ`)))JH*~)~)~)(hΧ)}`))@W(NLLKK &&<(Px@NMA%} ANALOG COMPUTING OCTOBER 1985 / PAGE 81-84 16K Disk ! } UTILITY G: A printing device for Epson (with Graftrax) or Gemni printers By Charles F.! } Johnson One of the first things you find out about your printer is that it can't print out many of the "special c! }haracters in the Atari character set (e.g., the cursor characters, clear screen, all the CTRL graphics characters, ! }all inverse characters, and so forth). If you send any of these to your printer, all kinds of odd things start happenin! }g. Many of the special characters are interpreted as control codes by the printer, causing line feeds, form feeds,!} different fonts, etc. Unfortunately, alot of Atari BASIC programs use these characters quite liberally, so if you!} type a simple LIST "P:" command, you might your listing unexpectedly shift into Japanese katakana in the middle of a !} 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!}nt it. This disk-based method is rather slow and necessitates an intermediate step in the listing process-making t!}he disk file. Most of these utilities also have some provision to print pictures. A new device. This progra!}m represents another approach to the problem. The G: device is loaded into memory at boot-up time as an AUTORUN.SYS fil!}e. It will work with BASIC, the Assembler/Editor cartridge, BASIC XL and MAC/65. You can LOAD, SAVE, ENTER and LI!}ST files to and from disk, edit programs and perform any functin in the usual manner with G: present. The differen!}ce is that, any time you want to produce a graphics listing of a BASIC or assembly language program, you just type: !} LIST "G:" (BASIC) LIST #G: (MAC/65, ASSEMBLER/EDITOR) This will list whatever you have in memory to the print!}er, but with all inverse and graphics characters exactly as they appear on-screen. You can list only certain line !}numbers, in the same way you would to any other device, with a statement such as: LIST "G:",10,290 or LIST #G! }:,1220 The G: device will automatically set the left margin five spaces in and set the skip-over-perforation featu!!}re. I recommend positioning the printhead approximately two line feeds below the perforation line to start your li!"}sting. Four flavors. Now, what yould you pay? But wait...there's still more! G: comes in four flavors-G1:(!#}the default), G2:, G3: and G4:. Here's what the different device numbers do. G1: (or just G: - This prints an ent!$}ire 114-character program line on one line with single-width characters. G2: - This prints each line of text exactl!%}y as it would appear on the screen (left margin set at 2), using single-width characters. G3: - Same as G2:, but w!&}ith double-width characters. G4: - Prints a 60-character line of double-width characters. Custom fonts and screen !'}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!0}ommand (say, with a press of the START button). When using XIO with graphics 0, the G: device numbers (G1:,G2:,G3:!1}, and G4:) control only the print size, not the line length. Therefore, G1: and G2: will produce the same printout, as !2}will G3: and G4:. If the first number after XIO (the command number) is 16, the entire screen will be printed!3}. 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!4}ber. For example, if you want to print the first five lines using double-width characters, add 5 to 16 (21), and th!5}e XIO command might look like: XIO 21,#1,0,0,"G4:" Printing pictures. To print a graphics 8 or 7+ screen, f!6}irst set up your hi-res display, then execute the command: XIO 64,#1,0,0,"G:" This will print a single-width!7}, single-height picture. to print your screen in inverse (like a photographic negative), set the auxiliary byte (t!8}he second number past the channel number) to 255. The XIO command would be: XIO 64,#1,0,255,"G:" When you'r!9}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!A}on will probably be necessary to find the best way to print each picture. And, by the way, the G: device automatica!B}lly centers your picture on the page (on 80-column printers). Now, how much would you pay? MAC/65 or Assembler/Edi!C}tor. If you use MAC/65 or the Assembler/Editor cartridge, you can also send assembly listings to G: with the ASM c!D}ommand, or print to G: (no line numbers) with the PRINT command. The syntax would be: ASM,#G: or PRINT #G:!E} BASIC or BASIC XL In BASIC or BASIC XL, you can open a channel to G: with a statement like: OPEN #1,8,0,!F}"G:" and then treat it exactly as any other output device print strings, numbers, etc. with PUT # or PRINT # comma!G}nds. This enables you to set up special title pages for documents with mixed print modes and mixed character fonts!H}, 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!I}:) and print alternate lines in different character widths. Unfortunately, at this point there's no way to change !J}print modes on the same line. The channel numbers that you use must be between one and seven, as with any other de!K}vice. G: even provides a way for you to control your print's line spacing. There are three preset line feed values!L}, and you may also set the line feed to n/72 inches, n being a number between 3 and 127. The preset values are: !M} 0 (default).....8/72 (1/9) inch line feed. 1 ..............9/72 (1/8) inch line feed. 2 .............12/72 (1/6!N}) inch line feed. In addition to these three presets, any number (n) greater thatn 2 is taken to mean a line feed !O}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!P},2,"G4:" or XIO 16,#1,0,10,"G:" The auxiliary byte is the second number past the channel number in both ex!Q}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}r to 1/6 inch line feeds. In the second example, we're telling the printer we want line feeds of 10/72 inch. !S}The G: device uses the serial bus to send data to the printer, through SIOV at $E459. This means that if you have some !T}kind of printer interface utilizing the joystick ports (as I used to), you can't use this version of G:. It's!U} possible to modify G: to use an IOCB channel to access the printer, but then the G: device will actually use two IOCB c!V}hannels while it's open, and you could no longer have more than one channel open to G: simultaneously. SYSTEM!W} RESET-proof! G: is protected from SYSTEM RESET; it will remain available to you until you turn your computer off !X}(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 !Y} cartridge. G: doesn't touch the much-abused page 6. Instead, G: reserves about 10 pages (2560 bytes) of low mem!Z}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!a}urce code with MAC/65 and reassemble with the different origin. One last word...In the text mode, G: is a line-ori!b}ented device; in other words, it expects to be sent a line of text terminated by a RETURN (ATASCII 155). This mean!c}s that you shouldn't use PRINT # statements that end in a semi-colon, because G: won't send anything to the printer unti!d}l it sees a RETURN. Similarly, if you use PUT # commands to send data to G:, nothing will be printed until you sen!e}d a 155 ($9B).a RETURN. Similarly, if you use PUT # commands to send data to G:, nothing will be printed until you sen ??%g}??%q}B%DOS SYSB*)DUP SYSBSAEROSTARBASBiAEROSTARSCRB+qFNTDSPLRBASBZFNTDSPLRDOCB FNTDSPLRFNTB GPRINT COMB^GPRINT DOCB fND1 FNTB xND2 FNTB ND3 FNTB ND4 FNTB ND5 FNTB ND6 FNTB ND7 FNTB ND8 FNTBNDCENT BASBNDCENT SCRB S1 FNTB S2 FNTB S3 FNTB S4 FNTB S5 FNTB S6 FNTB S7 FNTB S8 FNT%r}8?%s}%t}?%u}???%v}%w}$???)y}??)z}){}?5)|}?/???)}}?)~}3p Yi$??_)}???)}(?????-}=,A@ s{uwSQtrbrr???-}-}{-}aa@GEF?????-}???-}J.:@@@QX???-}-},??????1}$,,    9's[A1}1}????????  1} €1`Ȝ>??1}Á00?1}????????<<8<0y>{8"~`z{_?Aa5}????5}4****?? 00119} 8x?00*** 0 <Ϫǁa 9}9}* *** * *j9}ǪǪjjzll9}**򪪪9} ZVR[R[R7uUeRR9}9}8?⪪=}ϟ?=}|??><8888|~>>>=}?`jJ~@mm붶몪﫪mm꺺=}xx<81#????`=}oǃ88<?88888<>||8>>>>>~ 8@@@@?j=}jmm몪ꪪnnꪫxxxxxxx??????>=}???# >???~>?????~~~~|||<>?=}# >???~>?????~~~~|||<>?<?0< ?00 c 00A} 333  33 0033338  <0A}  <0A}<0 << 33{:0000<<3333;;30 ;0<<733l<< A}3333;; c31 0000<<33?008880000<<A}:>,,쬼? ¾0:A};;::>< 0j::0;;;;;30;3A};3A}@IJ FILEERRMSGDLDLPPLLOFNHLASLINENWDLCHIFNTODLDLIDSCE} E}FONT DISPLAYER EXAMPLEBY STEVE WALKER ;@,;@%,E}?6-@6-'6-36-?6-(36-6-'6-@36-2 6-AE} 6. Disk Error<! B !ϠŠٛF$6-F:AY,$AYP1AR@'A @E}1 B#PZdԠɛn76. D:ND1.FNT6-@I+6-@76-A`x 6- B! AE}=-@@%6-%@1"@=6-@6-%@ A` -@@6-&E}@ A6-&@ A6-%@ A` %-@@%6-%@6E}-@d A` 6- A%6-@6-@(% B"0ĠΠӛE}6. D:NDCENT.SCR!6-F:@,!6-F:@," 6-6-, B!AV6 B!p ϠE}@AYJ A0T^ĠԠӠɛh+6-%@+67@<@,.>:,r 6-% B!E}|6-%@ B"06-&@ +%@ %,&@2 $} }ӯɛ}6E}-F:A,&@}&&6-F:A,&+$@%@,(}6-$AVA2} +<}%%6-F:A`,%AVE}$F:Aa,F}$P}Z}d}2 @@2AP@n}ARAE}Sx}AVAW}6-?:C:hhhLV,<@,}@$}}̠}$6-F:AYE},$AY}!A!A}!BBA!AY}$}}ɠ򠭠ԠE}}S- @)!@()"@)"@I6.Invalid Range for DLLS B#`}%F:%,%A(}3 #B"`E}!-@%%"/%%3 ~DD72,169,224,141,10,212,141,9,212,169,32,141,0,2,169,156,141,1,2~169,148,141,E}24,208,104,64~1%@%%#6-%@16-%@"~r"@%%@%36-%@E%@E}%%Q6-]6-o6-+%,$AVr$,~g"@%%@%;%@%A$Q%@ %E}AH]6-g B# 6~%@%%@2@~%@%%J~6-%@2$T~^~ҠŠE}śh~P +@A@Q1AR@P(%ERR #F:A,, r~3-@AP %+/ E}B3  D2:NDCENT.BAS1AR@P(%ERR #F:A,, r~3-@AP %+/ D!  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxI}  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx I}  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx I} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx I} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx I} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx I} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx  !"#I}$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxuvwx  !"#HVw3ܪw3ܪwwͪw3ͪwsͪw3̪wwͪw3ݪww̪wwܪwwܪwwݪwwݪwM}7ݪwwݪwwݪwwݪwsݪwwݪwwݪ7wݪwwݪwwݪwwݪwwݪwwݪw7ݪwwݪwwݪM}wwܪwwݪwwݪwwܪwwݪwy檪zfުfffffffﯫM}ꪪꪪꪪ몪ꪪﯯM}着몪M}77ͪ3wܪw7ݪ33ͪ3sݪ37ݪw3̪77ܪ37ݪwsͪ3wܪsM}3ݪs7ݪswݪwsݪssݪw3ܪw2ꪪw̪fw̫jw3ͪw7ܪwwͪwwݪwwݪwwݪwwݪM}wwݪwwͪwvڪvfکffffffffffffffffffffjjjM}vfکffffffffffffffffffffjjjL7wwwswwsws7s7s7wswsws7wswwwswws7wsww7wwswwswssssw7wswwwQ}7www)szff:fffffffffffffffhfff3ܣhffw7̪ff77ͣjfw73f7w*f7wffwުffzfkfQ}kWfUU_UUUUU_W_UfUUUfz_}ffzffffjjjj7733 *3:)f3ʩfff7ffQ}f7ܪfff7ܪfffw̳ffw3ff7sff3:ffsΪfff2ffffffkfffwffwffwffwffvfffffQ}fjfffffzffffffffffffffffk]uUUUUUUUUUUW]u}U_UW_]]u]UUUU]UUUUUUWUUWW]]uWUUUUUUU^Q}u]WUUUz]ޚjjjj*fffffffffffffffffffffffffffffffffffffffffffjQ}wjwkwwwwwwwwwwwwwwwwwwwwwwwwwwwUwwwUwwwWwwwwwwwwjwwwfwwffj׵Q}kfUu]׵k]]WUUWW]uUUuuwUUUuuUUUU]}WUUUuwUUUWUUUUWUW]u^z]z香ffjjjjQ}UUuuwUUUuuUUUU]}WUUUuwUUUWUUUUWUW]u^z]z香ffjjjjPfffffffffffffffiffUUiUUfUUVjݕUjUUUjUUUUVUUUUݪYYeffUUUU]UUU}UUVVUUYVUUeUUeUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUweYVUwWUwww]zwwwfvwkU}fzUfffWffUffU_ffUffffffffffffffjjjjfffffffffffYeVZZjUUUfU}UUfVZjfUffjjjfffffffffffeiffeeeYYYVjjijYZZffffffU}ffffffffwwwjzvw]W]wwwwwwwwwwwvwwffwwffzwffwffwU}ffwfwwjzzffjfjuYiffffwwwwwwwwv]wwwwggvvvzVZYZjiiiiU}iifwwwfwwwfwwwfzzZVVVVUUUv޶ffffwwwwwwwggggiiiiffffmmmiwwwwwwwwiU}zvw]W]www]WwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwzzzzU}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwzzzzTwwwwuvvYkikikwwwwwwwwvyyk]wwwvvv{wwwwziieYYYYYiefYfmݙffY}wwݷmefzzkkUUUenfnfjZZffffwyyywffgmeiyyyffffiiffwwwwwwwwwwww]Y}zww]w]WwwwwwwwwwwwwwwwwwwwwwwwwwwwwzzzzwwwuYiefffwwwwwwfY}kkfwwff{gffwwfffffYfnjjjffffkiyvvZZVVZYefYZUfY}UfUyZyjffeeUUjUUUUUUUwUUZvwݷzڪw]w]WwwwwwwwwwwwwwwwwY}wwwwwwwwzzzzuuvvVUUwݪUUwުUUffVVffUUffUUUUjUUUUUUUUUVUUUUY}UUUUUUVVVZZZVVVVviUUUUUUUUUjjjZZVVUUUUUUUVUUUUUUUUUUUUUUUY}UUUUUUVUUUWUUw]WUUwwwwwwwwwwwwwwwwwwwwzzzzY}UWUUw]WUUwwwwwwwwwwwwwwwwwwwwzzzzXqqqq]}U9UUUUU9UUUUUUUUeeYYVUUUUUUUUeUUUUUUUUeYVVUUUUUUUUeYUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU]}UUUUUUUUUUUUUUu]WUUUUUUUUUu]]WUUUUUUww]WUUwwwwwwwwwwwwzzzzqqp]}U9UUUUU9YYVV]}UUUUUUUUeeYUUUUUUUUYVUUUUUUUUeeYVUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUWUUUUUUUUu]UWUUUUUUUUU]w]WUUUU]}www]Wwwwwzzzzpppu^}??U9VVUUUUUeUUUUUUUUUUUUUUUUUUUUUUUUUUUU^}UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUuUUUUUUUUUUUWUWUWwwwwzzzz^}UUUUUUUUUUUUUUUUUUUUUuUUUUUUUUUUUWUWUWwwwwzzzz\uuuuob}꪿b}^着𰰰zzzzuuuuVVVZZީooٹb}ZUUUUUUUUUZUUYYUUZUUUZꪪwmb}^b}zzzzuuuwZZY[YkifjꪪUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUYYYYYYeeUUUUUUUUUUUUUUb }UUUUUUUUUUUUUUUUUUUUUUUUUUeeeeeeeejUUUUUU]WUUUUUuuUUUUUUUUUUUUjUUVVVUUb }UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUzzZzZzb }UUUUUUUUUUUUUUUUUUUUUUUUUzzZzZz`jf맥eUUUUUUUUUUUUUUU]UUUUUeeeeeeeUUwUUUUUUUu]UUUUUUUUUUUUUUUf }UUUUUU]UUUeeeeeeejjjjjf}ںzzzf}eeeejUUUUUUUUUUUUUUUUUeeeeeUUUUUUZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUeeeeeeej륥f}UUUUUUUUu]W]WUWUUUUUUVUUUUUjUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUf}UUUUUUUUUUUzzzzꪪjjwzf}UfUfUjUUjjijf}ffwwwwzzzzf}ffwwwwzzzzd檪fjjffffffffffffffffffffffffffffffffj}ffjjfffjjzz뿪ꪪjjjffffffnffgffwffwnfwj}ffjjjfffwwfwwwzzzꫮvݪfݪnwwwwfj}wffwfwfvfffffnfffffffffffffffffffffjejj}jfffffffffffffffffffffffffffffffffffjjj}꺪wwݪwwݪwwݪwwݪwwݪwwݪwwݪwwݪvwݪfwݪj}nwݪwݪfݪfݪfjfgfffj}ffffjfj}fjfh