IMD 1.15: 16/05/2007 8:41:28 DOUBLE SIDED RELEASE DISK 7 OF 7 10/14/84 DAB CHARGEN SOURCE & GENERATION DISK V1.1 DSDD CHARGEN COMlCHRNW6 C  CHARGEN C  *+9:;<=>?@ABCDECC COM145678LMNRSTUSUBMIT OM* CHRNW1 C )CHARGEN C 2FGHICHRNW3 C -CHRNW4 C *./0CC COM2VWXYCHRNW7 C 23C2 COMZ[\]^_fnopqrstuvCHRNEW SUB C2 COMwxC2RT REL KSAVE OMGENCHAR BAK!OPQCRUNT2 REL`aFORMATIOREL6bcdeSID OM>GENCHAR BAK*GENCHAR DOC, CHRNW2 RELM80 COM{~L80 COMTCHRNW3 REL CHRNW4 REL!"CHRNW6 REL#CHRNW7 REL$CHRNW8 REL%%&'CHRNW8 C `IO REL(CHARTMP COMl,Jghijklmyz|}CHARTMP SYMSID SUBCHRNEW BAKSYSIN58 $$$CHRNW2 C TOP2 CHRNW4 RELIO MAC,FOO C nCHRNW6 RELSNSTST ASSNSTST RELCHRNW7 RELSNSTST COMFSNSTST SYM CHRNW8 RELSNS BAKSNSTST SYM CHRNW2 BA SNSTST C CHRNW2 BAK ìs;!!f!O"O!O"O!N"N!N"Nj[!"6"6"E5!-"6!-"6!-"K5!-"I5!-"35! ."15!*}2N5. }2M5!F"F-,-*O.Z*O͇Z*N.Z*N͇Z!9s#r"O͢+!9^#Vbk|”L,!9!.(.1.7͘g9s!..ͥ*!..Kͥ*&| Ͷì&| ì&|38$ì&|FͲcì&|Y`ì&|lʹ^ì&|¬!.-+|¬bk9s#rì,*6+|£Q*6+|¯LR-!!e3!++9n&ubk9s#r!9^#V!9^#Vn&|+!9^#Vs#rbk+!9^#V!9^#Vn&!9s#r9!4. 9^#V͙ks#r*E5|ʲ!.͜,!*.!9^#V!R.!9!.9^#V*s#r!.+9^#Vͥ*͡Q!"G5. }26l}26AQ*6&| !9s#r!.2͜,! !Z-}26!6X*,*6&͡--*6&|M*6&|M*6&CtP!|g*6&!r!9s#r!9^#Vbk+|9s#rbk+|..͜,,*6&ͺ- M5*6&!*6&|bk9s#r}26*6&|‰bk9s#rM5QÉ͢+!9n&|B..*K5!9^#Vͻ9}26!9n&|s..*K5!9^#Vͩ9}26!9n&|!.*K5!9^#V͗9}26!. ͜,͛{bk9s#r! t|!9^#Vs#rbk+!`͋!9 s#r!@t|,"!9^#Vs#rbk+ͫ!. ͜,͛!9@s#r!t|vl!9^#Vs#rbk+IYͫ!!g!!G!!a!!A;!"G5. 9^#V! 9^#V͜,!Z.!9^#V!n.,!9!6!. 9^#Vͅ\s#r-!9^#V!t|39*6&}ä!9^#V!u|V9*6&# }ä!9^#V!v|o9sä!9^#V!r|ˆ9sä!6*!9!6͑" }&3;!"G5. 9^#V! 9^#V͜,!.!9^#V!.,!9!6!. 9^#Vͅ\s#r-!9^#V!t|!9*6&}Ò!9^#V!u|D9*6&# }Ò!9^#V!v|]9sÒ!9^#V!r|v9sÒ!6*!9!6ͥR }&3!"G5. 9^#V! 9^#V͜,!.!9^#Vvbk9s#rbk|& ##9Z-}!9^#Vbk+| !9n& Generation of CHARGEN program - version V1.0 I orde t generat th charge program languag sourc file (CHARGEN,CHRNW1,CHRNW2,CHRNW3,CHRNW4,CHRNW6,CHRNW7,CHRNW8 mus b compiled optimize an assembled Additionally on assembly language source file, IO.MAC must be assembled. Th resultin relocatabl assembl languag file ar the linke togethe alon wit som o C' librar files. sourc fil i compile wit th C program I i optimize wit th C progra an assemble wit M80 L8 i use t lin th .RE file together SID i use t remov th à run-tim package sign-on message. Belo i liste submi fil (CHRNEW.SUB whic wil d th necessar compiling optimizing assembl an linking Thi procedur mus b ru o CP/ Plus syste wit TP o a LEAS 56K. ; This procedure generates V1.1 CHARGEN.COM from source. ; It works only on an Executive. ; DAB 10/13/84 era chrnw1.rel era chrnw2.rel era chrnw3.rel e; This procedure generates V1.1 CHARGEN.COM from source. ; It works only on an Executive. ; DAB 10/13/84 era chrnw1.rel era chrnw2.rel era chrnw3.rel era chrnw4.rel era chrnw6.rel era chrnw7.rel era chrnw8.rel era io.rel era chargen.rel cc chargen.c c2 chargen.cod era chargen.cod m80 chargen,=chargen.asm/m era chargen.asm cc chrnw1.c c2 chrnw1.cod era chrnw1.cod m80 chrnw1,=chrnw1.asm/m era chrnw1.asm cc chrnw2.c c2 chrnw2.cod era chrnw2.cod m80 chrnw2,=chrnw2.asm/m era chrnw2.asm cc chrnw3.c c2 chrnw3.cod era chrnw3.cod m80 chrnw3,=chrnw3.asm/m era chrnw3.asm cc chrnw4.c c2 chrnw4.cod era chrnw4.cod m80 chrnw4,=chrnw4.asm/m era chrnw4.asm cc chrnw6.c c2 chrnw6.cod era chrnw6.cod m80 chrnw6,=chrnw6.asm/m era chrnw6.asm cc chrnw7.c c2 chrnw7.cod era chrnw7.cod m80 chrnw7,=chrnw7.asm/m era chrnw7.asm cc chrnw8.c c2 chrnw8.cod era chrnw8.cod m80 chrnw8,=chrnw8.asm/m era chrnw8.asm m80 =io/m l80 Th syste wil displa bloc o memory You'l b abl t se th copyrigh message (O course i you'v mad substantia progra modifications th messag migh no b i thi block) I orde t remov th displa o th message typ in: sXXXX then 24 then . I yo no redispla th bloc (dXXXX) you'l se tha th "S i "Supersoft ha bee replace b "$" Th CP/ functio that prints the message stops printing when it encounters a "$". To save the program type control-C. Then, Specif CHARGEN.CO a th fil name beginnin he addres o 100 and endin addres o YYYY. Thi sa mai men an th characte fon editin menues. CHRNW1. - Thi i a assembl modul tha write dat t th fon ram. CHRNW2.à - Thi i th assembl modul tha interface t thos in IO.MAC. IO.MAà - Assembl languag routine t d syste trac I/Ϡ an ROM SENDEN (sense density). CHRNW3. - Thi modul contain som routine tha woul no fi i th mainlin sourc fil d t a apparen runnin ou o spac i th compiler ( sa apparen becaus th compile never generated an error message, it just sort of hung) CHRNW4. - Thi modul contain th routin tha input fil name I i i separat fil fo th sam reaso a state i the description of CHRNW3 above. CHRNW6. - Thi routine displays the Osborne copyright message. CHRNW7.C - This routine inputs a string. CHRNW8. - Thi i th modul tha doe syste trac I/O I contains the system track and font ram I/O menues. Afte th abov submi i run CHARGEN.CO wil b th ch Generation of CHARGEN program - version V1.0 I orde t generat th charge program languag sourc file (CHARGEN,CHRNW1,CHRNW2,CHRNW3,CHRNW4,CHRNW6,CHRNW7,CHRNW8 mus b compiled optimize an assembled Additionally on assembly language source file, IO.MAC must be assembled. Th resultin relocatabl assembl languag file ar the linke togethe alon wit som o C' librar files. sourc fil i compile wit th C program I i optimize wit th C progra an assemble wit M80 L8 i use t lin th .RE file together SID i use t remov th à run-tim package sign-on message. Belo i liste submi fil (CHRNEW.SUB whic wil d th necessar compiling optimizing assembl an linking Thi procedur mus b ru o CP/ Plus syste wit TP o a LEAS 56K. ; This procedure generates V1.1 CHARGEN.COM from source. ; It works only on an Executive. ; DAB 10/13/84 era chrnw1.rel era chrnw2.rel era chrnw3.rel earge program. .pa I orde t remov th Supersof Copyrigh messag tha display fo spli secon a th beginnin o th program us SID t modify the string: Type in SAVE Type in SID CHARGEN.COM Th progra wil displa th siz t th progra an TP star address. Type in dXXXX Th syste wil displa bloc o memory You'l b abl t se th copyrigh message (O course i you'v mad substantia progra modifications th messag migh no b i thi block) I orde t remov th displa o th message typ in: sXXXX then 24 then . I yo no redispla th bloc (dXXXX) you'l se tha th "S i "Supersoft ha bee replace b "$" Th CP/ functio that prints the message stops printing when it encounters a "$". To save the program type control-C. Then, Specif CHARGEN.CO a th fil name beginnin he addres o 100 and endin addres o YYYY. Thi sara chrnw4.rel era chrnw6.rel era chrnw7.rel era chrnw8.rel era io.rel era chargen.rel cc chargen.c c2 chargen.cod era chargen.cod m80 chargen,=chargen.asm/m era chargen.asm cc chrnw1.c c2 chrnw1.cod era chrnw1.cod m80 chrnw1,=chrnw1.asm/m era chrnw1.asm cc chrnw2.c c2 chrnw2.cod era chrnw2.cod m80 chrnw2,=chrnw2.asm/m era chrnw2.asm cc chrnw3.c c2 chrnw3.cod era chrnw3.cod m80 chrnw3,=chrnw3.asm/m era chrnw3.asm cc chrnw4.c c2 chrnw4.cod era chrnw4.cod m80 chrnw4,=chrnw4.asm/m era chrnw4.asm cc chrnw6.c c2 chrnw6.cod era chrnw6.cod m80 chrnw6,=chrnw6.asm/m era chrnw6.asm cc chrnw7.c c2 chrnw7.cod era chrnw7.cod m80 chrnw7,=chrnw7.asm/m era chrnw7.asm cc chrnw8.c c2 chrnw8.cod era chrnw8.cod m80 chrnw8,=chrnw8.asm/m era chrnw8.asm m80 =io/m l80 Th syste wil displa bloc o memory You'l b abl t se th copyrigh message (O course i you'v mad substantia progra modifications th messag migh no b i thi block) I orde t remov th displa o th message typ in: s76ca then 24 then . I yo no redispla th bloc (d76ca) you'l se tha th "S i "Supersoft ha bee replace b "$" Th CP/ functio that prints the message stops printing when it encounters a "$". To save the program type: wchargen.com,100,7700 Thi save th charge program Th Supersof copyrigh messag wil no no b displayed Thi i include i th abov submi procedure. star th submi process th followin file shoul be on disk: CHARGEN.C,CHRNW1.C,CHRNW2.C,CHRNW3.C,CHRNW4.C,CHRNW6.C, CHRNW7.C,CHRNW8.C,IO.MAC - the source files formatio.rel,crunt2.rel,c2rt.rel - C library files CC.COM C2.COM M80.COM L80.COM SAVE.COM SID.CO - compilers assembler etc. ccsta i th submi fil abov i no file I i th addres of the beginning of C's start-up routine. Pleas not i th linkin proces tha CHRNW i linke afte th librar files Thi i necessar i orde t insur tha it cod i abov 400 he a i switches in bank 8 (the ROM bank) to write to the font RAM. Als not tha librar fil C2RT.RE i linke last Thi i necessar becaus thi fil specifie wher th to o objec cod reside ( featur whic wa unfortunatel no documente i th Supersof documentation). Belo i descriptio o th function performe b th variou modules: CHARGEN. - Thi i th mainlin modul tha contain th I majo change ar made yo wil hav t relocat th addres o th message Thi ca b don b dumpin th entir progra an searchin fo th string o ther i a easie method Th copyrigh messag i th firs thin printe b th program I i no burie ver deep s jus star a 100 an follo th executio pat o th progra unti yo se D loade wit constan value loade wit (BDO prin strin function an the BDOS called (CALL 0005). e t remov th displa o th message typ in: s76ca then 24 then . I yo no redispla th bloc (d76ca) you'l se tha th "S i "Supersoft ha bee replace b "$" Th CP/ functio that prints the message stops printing when it encounters a "$". To save the program type: wchargen.com,100,7700 Thi save th charge program Th Supersof copyrigh messag wil no no b displayed Thi i include i th abov submi procedure.  mai men an th characte fon editin menues. CHRNW1. - Thi i a assembl modul tha write dat t th fon ram. CHRNW2.à - Thi i th assembl modul tha interface t thos in IO.MAC. IO.MAà - Assembl languag routine t d syste trac I/Ϡ an ROM SENDEN (sense density). CHRNW3. - Thi modul contain som routine tha woul no fi i th mainlin sourc fil d t a apparen runnin ou o spac i th compiler ( sa apparen becaus th compile never generated an error message, it just sort of hung) CHRNW4. - Thi modul contain th routin tha input fil name I i i separat fil fo th sam reaso a state i the description of CHRNW3 above. CHRNW6. - Thi routine displays the Osborne copyright message. CHRNW7.C - This routine inputs a string. CHRNW8. - Thi i th modul tha doe syste trac I/O I contains the system track and font ram I/O menues. Afte th abov submi i run CHARGEN.CO wil b th cht4iut9D#ȀE,a")r< Gc4L&l:@1@E7 !et2)L> DCy 2 'CI)MS@C4NFrMC@M2  h0&3 "#Ȁe7@Sr9he:NF 9MSo7 SqR4Ar7i: S@c4NFr spr9hd43 1 '# e92Z 9NS@t7 I@m2r0ΆSd4 &8e7@yt4s7sI F. DC 8OS`n e > DC 8OS`f3 "hu4sIo:St2R |  q@e2Nq@t4NbrD$v2 8OSaC D3y 0CA 1 '# e9 hh4r0ΆSe3!@s4LAa9LgC)@R4@T@-1@c4NFrN Z 9 &ch0&3 "8@-I3) 0F  SaeD#yS DqLr: "u6A@d2 C( 1͇SiC4NFŗ@t2CA@f4 @r2LAtf4 .:Nl2 o:r2b 5O"@c7q.!gt23)@f9͢ a9LgC)@s2#) 3O# &l2FS \ FS@a7D)@t7 fqn:@Sqr Ql2i:D i6Mi\t< 1eM#)yO edbuf B9 C1 6 B4 E105 C55 16 B10 B21 B9 C1 4 B4 E105 B9 C1 1 B10 B21 B10 B21 E104 B10 E102 F13 241 F98 242 D25 edbuf B9 C1 4 B4 E105 C55 16 B10 B21 B9 C1 11 B10 B21 B9 D2 offchar E101 B10 E102 F13 237 F98 238 B16 B16 B12 B99 D61 delrow B18 B18 C1 B4 B9 C1 B10 E103 F98 247 C1 B4 E105 B9 C1 16 B10 E116 F14 246 F13 248 F98 245 C1 B4 B9 E105 B8 C1 1 B21 B10 E103 B8 C1 -1 B21 F13 247 F98 248 C1 2 B4 B9 D3 edrow B10 E103 F98 251 C1 2 B4 E105 B9 C1 14 B10 E116 F14 250 F13 252 F98 249 C1 2 B4 B9 E105 B8 C1 1 B21 B10 E103 B8 C1 -1 B21 F13 251 F98 252 D25 edbuf B9 C1 4 B4 E105 C55 16 B10 B21 B9 C1 2 B4 E105 B10 B21 B9 D25 edbuf B9 C1 6 B4 E105 B9 C1 1 B10 B21 C55 16 B10 B21 B9 C1 4 B4 E105 B10 B21 E104 B10 E102 F13 249 F98 250 D25 edbuf B9 C1 14 C55 16 B10 B21 B9 C1 2 B4 E105 B10 B21 B9 D2 offchar E101 B10 E102 F13 245 F98 246 B16 B16 B12 B99 D61 chrcopy B17 D3 entdec B9 C1 B10 E40 1 F14 253 C1 B4 B9 C1 19 B9 C1 20 B9 D3 pptr2 B9 C1 B9 D27 hexentry B8 C1 8 B4 B19 B8 B10 E102 F13 254 F98 253 D3 entdec B9 C1 1 B10 E40 1.  1CIey8R+'CI 1 '# e9fSoSa@d43y1eFS o7s9 &Ȁh0&3 :3yi7L a9LgC)@s2st2CxD4b1l1eF@-FS@a7D)@t7 fqn:E!@y7Ds :@Z )L&Ae'3sF 4et23)2 D#) 0 Ɠa@i7  1 '# e9fSf CI@t4D3Aa1 !t \i:DCA@c4NFŗA : t2DCk9hr4  1 '# e9fSoDcIt2(h0&3 9N@t4Dcy )IZ " 'AeF9mMC)@y7NBi1DZ @CA 8s 0 @y7DCxd4a9LgC)@s2pe6GdΆ@i: r4Χ1d4Eyo9)c: 'c(h0&3 #An2'Cy@ + EASUB 1xCP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH151282654321Invalid file name $Error On Line $Enter Password: $ERROR: No 'SUB' File Found$CP/M 3 SUBMIT Version 3.0 $Enter File to SUBMIT: $SUBDisk Write Error$Random Read $.$Invalid ASCII Character$Parameter Error$ERROR: Directory Full$Requires CP/M 3.0 $11G"*}0|HҤbP2IK 1">d*++"~"!\. v!q*&!p+q* !s+p+q*:w#6* *#"N#Fy !p+q*!p+q*2 !p+q*!p+q*!p+q*!p+q*!!p+q*2 !p+q*!q*-!q:2!61!s/* Osborne character generator program - display copyright message routine */ cpright() { int i; clrscn(); /* clear screen */ curpos(12,1); grfon(); /* turn graphics on */ putchr(0x13); /* display copyright symbol */ grfoff(); /* turn graphics off */ putst(" 1983 Osborne Computer Corporation, "); putst("26538 Danti Court, "); putst("Hayward, CA 94545"); curpos(14,1); grfon(); /* turn graphics on */ putchr(0x13); /* display copyright symbol */ grfoff(); /* turn graphics off */ putst(" 1984 Future Systems, "); putst("828 Nob Hill Avenue, "); putst("Pinole, CA 94564"); for (i = 0; i < 20000; i++); /* wait about a second */ } /* C 1983 Osborne Computer Corporation, 26538 Danti Court, Hayward, CA 94545 C 1984 Future Systems, 828 Nob Hill Avenue, Pinole, CA 94564 */ +q:2!6*&"1!p+q*<!s+p+q+p+q:=2d** w*#"*#"=  !s+q+p+q:=2ʩ*:w*#"Ì!p+qe*DM!\.\s!q:a:{: :O2:eel !6>!ڜ2 K*&l :w: T:_:…:r:=2O!l 6 3:•!4**& ~ ~ H!4Ýl :S*Q*Sl.l\P"*}=*|&el\P"=*|5.*& 6!6͝*& ~( 2*& 6e!"!\" "\p.e.:\2O>:2\*& ~ ~H~ H.!4͝*& ~2!6>!`\̓[>!6:<2=O! ~2 ½:<2O>9ҽ!60+~9ҽ!60+~9ҽ!60+~9ҽ!60+4:͓ͪ!"!6:= !6!6#6D2: H% : " :#$ͪ:;!6+~<;!6:$¨D2$X*M å:02O> p<ͪå!6͝:ʔ!5K ҎÄ͝xK ҥ*M Ô" :^D2:^^ :@: O :`:@O :`O " :!:/H     " *M : 2    *++" *& ~2 :Ht !4>>!""\ !6>!ڷ :+ ~° !4‘ * DM*"À * DM!" }2 ͣ2 :  ͪõ!q!r- "w * :w:C w *#" "*#~22_! 8!0!s*&:0!s!6ͳ:  sͳ:  L!`i^#V#~#fo yo w G: xAo o a{ /* CHARACTER FONT GENERATING PROGRAM V1.0 by Jeff Haran 2-22-83 this program allows the operator to generate character fonts for a 128 character set in a user memory array. The program allows the operator to store the resultant character set to a HEX format file, the main character set system track, the alternate character set system track and the main and alternate set font RAMs. */ #define FBOX (0x16) /* full box */ #define UBOX (0x17) /* half box - upper lit */ #define LBOX (0x18) /* half box - lower lit */ #define LF (0x0A) /* line feed */ #define CURLFT (0x8D) #define CURUP (0x8A) #define CURDN (0x8C) #define CURRT (0x8B) #define SPACE (0x20) #define CARRET (0x0D) #define ESC (0x1B) #define TITLE "Osborne Executive Character Font Generator V1.1" #define TRUE 1 #define FALSE 0 #define BKSPC ('H' & 0x1F) /* global variables */ char areg; _o     `i~< #~2#~2#~2*| W \!\~R 2 .n~ >2 6!.t~: +  >2 6!N#F#*" ^q#Vp" N#F##"^q#Vp" 4! 7o |  ! 6   \\ ? >_ 1m :~# yo ɍWARNING: Cannot redirect from BIOS $ERROR: Auxiliary device redirection not implemented $ERROR: Insufficient Memory $""SYSIN SUB_ogDM!>))덑o|gQ =?i`N#Fogo&og_{_z#W00001 : $SYSIN $$$ int arrsource; /* source of memory array */ /* 0 - empty */ /* 1 - HEX file */ /* 2 - main systems tracks, drive a */ /* 3 - main systems tracks, drive b */ /* 4 - alt systems tracks, drive a */ /* 5 - alt systems tracks, drive b */ char readname[15],*rnmptr,readfcb[36],*rfcbptr,iobuf[128]; char oldrdname[15],oldrdfcb[36]; char writname[15],*wnmptr,writfcb[36],*wfcbptr; char charset[2048],*setptr; /* character set array */ char altset[2048]; /* alternate character set storage */ char mainset[2048]; /* main character set storage */ int altwyn; /* alternate set written yes or no */ int manwyn; /* main set written yes or no */ int eoffound,diskfull,address,recptr,charcount,bufcnt; char tempbuf[3]; char *mnC1,*trantab,curchar; /* current character being editted */ FGET :<***.n6.t6 LL!p:~y !6 <ʊ~"x!=F#fh!:~!«!>w~:!5*.~w:; :~!9"1A#u.t.~@w :&/3͖!~6 :~wucy! ʎB d{<ʑ  '*2.2+6.w 22*2$*.6#6*.~w#~=~#4Ʌo$͖O̓!54  !F6#ȷxO҃>^̓@_: N#͖§>  *.>wÔ#wt~xڔp> ̓ 8>""SYSIN SUB hhhhhhhhhhhhhhWARNING: PROGRAM INPUT IGNORED $y#q#p#w!!#*©6?”ëw”Î333333.;;33,;;#wʯ#6 O O $.:;=,/[]<>a{!_Î 4 4(!~> L5*~#"a_:f7ñ8 ʱ0vñ@7ñ҇0ÒGڐ7ñ7o:O& ʦ))))ÛzW{_f: CP/M 3 SAVE - Version 3.0$ Enter file (type RETURN to exit): $ Delete $ Beginning hex address $ Ending hex address $ $ ERROR: Bad close.$ ERROR: No directory space.$ ERROR: No disk space.$@$ $H I$I!$HI"$$"$ I ! A  !B B@@ $ABH$!"D$"BUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU 151282 COPYR '82 DRI gggggggggggggggggggggggggggggg"D! BH!H@ $!!$"A! D$DHH$B!"  @A  J6!_7t!:; ͂7?r JpQpWp4EDBACKUP$$$BAKNEW FILE:/25bp͒p͡pOqZ1:4:b2f5>0q:2i52g5:I!ڈp~<2k5>24!vi.>2vC!p ̀ʾp!p ̀p!8"J6×-!v.!6.292F2I2[[-*7"v"7p*7*7R|<2 72 7|D!"7>2 7%q)"7,q2 7!5wȷ!  .>2%!:C6!4̗!:~ͣwv:Jtqw::ʀq>26_7 !p ~87!p  :4=q!CS!7v!4:8:6q6 #:v+!4v8!5~8:4=r!SCyÙCP/M Version 3.0COPYRIGHT 1982, DIGITAL RESEARCH151282654321CP/M 3 SID - Version 3.0$1 !~=W!x ~#ôbx {~#o}o.ÃO$ y͏ , $  ͌ 9!z6 # L!zw͌j# X:z 0 ͘=N#Fy}80*z{¯#z+++ ¥ z#½# · 9!`͠ y9!rͷ y=!z{w# % w!P͠ y͓}*w#"͌ @.@<!Eͷ~P !ͷ’P͌Q!ͷªP}QxQ!ͷ͓G@Q! ͷ y͓Gþ!ͷ ͓Q!ͷ͓Q͌Q!.ͷ6y#G͙Qà!2ͷQ͓͌Q!>ͷq eg͙Q:zJEËC–EQyQxQRQ** {zҷ*~#" <AOGƐ'@'OxƐ'@'ON# ɀSAVE SAVE y<1!~ʋ;:* ͩ".~>2`*.h~`>26!*#~2#~2r+s-* 1!~ʀ#_6|ʉ#6?#6 #6$\<8Y‰\>!|w\:V"8: V "**Ͳ\h}}€!*:2\<T}Q**#s#r>2:Ÿ*.h6 1>2::>2}2|2!"  !!\( yŽw=G::xAڎҎ28!"9ʔ!\>2|!"*"~:8”*"*"*͠ڔ!"\zn<ʔ*ͯ~# _\V”*#"͠:W\J!*L!,:2:2>2::>2 N, !9# Ô ”J~,=”͍xA|”}ҔgA>;Ag};,;Q|”}!qw,s#r,:[|_!~ʐ![4Ð\ͤŽ2[g>>?,!e>Cw#>Ow#>Mw!u>Sw#>Yw#>Mw., * ͽw#  ͽ  * ?r# {zPY! |}>2!""!Ow #w 0q!\6 ͤ!"~”͍͍͍!6W6!6# ,œ>2ß͓ͣ ͓ͣ ͓ͣ ”ʔ   :@w# G6#. 6# x!a_!~> 55*~#"ů2[\ͤͤͤͤͤͤ!ex#y#*}|͓"*}|":!͓> _ͤ~# 07> >:] ,:e &͟:l &:u &ͮ!I 1lĤ>#J ,!6-X5AڔҔ_!o^#V - G  + Q  1ͳҔ~½:,=”͍" ,~ڔʔ͍=͍=͍!,o͍ "c=͍=”)*c)!"f,*f*c"h ,*cL>::ʗ^#V#L cxZy y~ #*f ڵ™y ¶"c:,*hT*f , ,T:e,>2e,:ʔ%:e  ͟:u ' ͮ!I Y|”,,}5 2l~2m͍͍"n͍"pDMs !l6ʏ } "v=ʏ =ʏ YP !~ #^#V:l *v{ z "r~62t #w6 ” 1l*v*t!~4 #~#F# x ~#s#r#w>~ʽ ͍=; =”͍Lᯕo>gL,>#!u^#V#0}o|ge X x| y0ʃ GÏ yÏ  G| Q z,{ ,<,>'{>',*##V+^+N+y,L ~+ , :”%,ͳ  ͤL:8>.^+~+:8*>:|}^ >.*f}o|/+- , 0 Ô^#V#*NyҔ** n +ñ q#^#V""~/o>g++Û!.ʔ@͔^#V= ͔^'D! ڔ'?!q'”S_&#hqf0 Ҕ)DM)) O I^*r^#V#^q̀))))oqh"s#r#!4-®+»*+ þ-y_xWþ!IXN!p~ !D_^!x^#Vx1>-~~>=G!q~L!9#x sYYͳғ*v" !6û+"f*v~#cڻʷ^#Vû~*v~Gx5@xv5 x805 x6 45>=*t~*t$5x*l$*n:585"CZMEIABDHSP!"2"t+"v!91t*v~:t2l!~ʐ#^#V#~ ƒ!~6ʳ=G#^#V#~xâ#"v!N#FN*>7l :|!~9#~#V*v9z9~=~ ͍" = ͍"=”" > 2,Y,!|G }G , w#. ~ڔ ͍!=:r ”͍| !| !|”"!~ʩ #~#V§ z§ :w, ‰ :ʔ!~ :w#s#r, ¾ Ô!~ : 6 ~#^#V ,:ʔ!\6#>  w# ' >w# 1 6~!I =”*"!l6~# T :]?2 7ʔ!">HXE͆*ʾ \ͤ2 w# ™ ͥ͝* ҆ !""Ô\ʔ:¾ W$ _$ $ O { x! i`"v2 $ $ w# $ ͥ͝”þ \̀\̀ GтWx!͓B :>ULT͆!6\~# S 2|:] !7<ʔ\ !t   _*\ ʣ \ w Ø *+\ !ڔw{Ҕè *#^#Vr+s+6͓Ҕ*"s#s#rt ! *v*",!*L*L*vL*+L,o=”͍L:X^#VL\~J ʯ.y:,>."Ž! ;w#́=”͍:ʨs#r#;”}w#:;#;>>2o!"#͍}ʔ==”͍""2mNl :=2wͲ:l <!*vNl  |Ͳd=Xl *v5Nl :l|*pMD*n:m7l !"N2>**vͳҟ" *t"c, PASS !~*+"|w=2~ !~##Z:t*rw2t*vF#!s! ^#V&N&N,`r<¦Gæ::^#V#2*r^#V<[>èæxjê8_æ*t2¦,:?*v###æG>è><7*|!N*v!>#> :!>=_~/w/w{G=YP"*##F+N+~a/o>g{\z\<33=>!y$ڇ *y$&>'d !y$4d SYMBOLS NEXT MSZE PC END 6!z$q!h#6?! h record(s) written. h#H!:#A{$O !:h# !2h#!@ !:h#S:h#QHP!:#<2|$2h#:h# HG!)!2h#Ô!2h#02|$O> j!!|$6Ô!2h#02w$O> @!!BH @@ABH B! "BHI$$BI$BI $ HI D$HD$$ H B!$D$"$B$DA!ABI$f!!9^#V!+. 9^#V *9!9^#V!l *9`i|Ig!9^#V*!9^#V!++ *9!!9^#V*_ ͸|fg!!9^#Vl'!| g!9^#V!9^#V!9^#V͜jØj!|g!9^#V!9^#V!9^#Vͥ͜jØj!|g!9^#V!9^#V!9^#V6͜jØj!|)h!9^#V!9^#V!9^#V͘͜jØj!|Vh!9^#V!9^#V!9^#V͓͜jØj!|ƒh!9^#V!9^#V!9^#VÍ͜jØj!|°h!9^#V!9^#V!9^#VJ͜jØj!|h!9^#V!9^#V!9^#Va͜jØj!| i!9^#V!9^#V!9^#VQ͜jØj!|i!!|Fi!9^#V!9^#V!9^#V͜jØj!|si!9^#V!9^#V!9^#V*͜jØj!| i!9^#V!9^#V!9^#V͜jØj!|i!9^#V!9^#V!9^#V+͜jØj!|”j!9^#V!*_ ͸|i!!9^#V!l'|:j.9^#V!l'|:j.9^#V!l' =j!|ʔj!9^#V*!9^#V!!+. 9^#V *9!9^#V!+.9^#V *9!!!9^#V!+.9^#V *9!9^#V*!9^#H B$I $HI$H$! $I $I$I $I $BBHHA"HI$H!$HH$ IDH$$H$"BD $$$HH$B@@D!@H" H " "BI$DI$I $H @HI"$AD@@HA$ $@ $@D IB!  $H $I$$HD H!"A""! I$DDI"I$ @$I"DH BH" !I B  B$H$@"IHBI $$@H@ @@@D !@BA$!" D!$A$B@$@@$"$"@  D@@"DH $I!"DH$BB$"H@ $!D$$I$I$$"A$$I  D UUTH@@!@H@ !$  UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU; This procedure generates CHARGEN.COM from source. ; It works only on an Executive. ; DAB 10/13/84 cc chargen.c c2 chargen.cod era chargen.cod m80 chargen,=chargen.asm/m era chargen.asm cc chrnw1.c c2 chrnw1.cod era chrnw1.cod m80 chrnw1,=chrnw1.asm/m era chrnw1.asm cc chrnw2.c c2 chrnw2.cod era chrnw2.cod m80 chrnw2,=chrnw2.asm/m era chrnw2.asm cc chrnw3.c c2 chrnw3.cod era chrnw3.cod m80 chrnw3,=chrnw3.asm/m era chrnw3.asm cc chrnw4.c c2 chrnw4.cod era chrnw4.cod m80 chrnw4,=chrnw4.asm/m era chrnw4.asm cc chrnw6.c c2 chrnw6.cod era chrnw6.cod m80 chrnw6,=chrnw6.asm/m era chrnw6.asm cc chrnw7.c c2 chrnw7.cod era chrnw7.cod m80 chrnw7,=chrnw7.asm/m era chrnw7.asm cc chrnw8.c c2 chrnw8.cod era chrnw8.cod m80 chrnw8,=chrnw8.asm/m era chrnw8.asm m80 =io l80 ####n&|O !.[`i`r `i##^#V$>####n&|‚ `i##^#VO/ͱÅ !| !9`i##^#V͠,s#r`i##^#V!n&| .9!9^#V}m!9^#VZs#r!9^#V| !.a.9^#V`r!9!9^#V}ms#r!.=`i`r!.a.9^#V`r!9!9^#V^#Vs#r !.cl`r*h(DM!h( |ʩ Ì `i^#VDMq `i!9^#Vͮ!|ʁ `i!*f(DM!f( | `i^#VDMô `i!9^#Vͮ!| `i!;!&####!&##s#rs#r9!&#!&sss!9^#V!T9ͱ|8 !; !DMͳ . |@ !&#n&|` !9s :&o&|ʀ !9s`iHDM !&####n&|ʬ !9!&ss!9^#V: !&n&| !9!&ss!9^#V:!&n&| !9s`iHDM!& n&| !9s`iHDMF !& n&|F !9s`iHDM!`iDM!&n&|g !9s`iHDM!&#`i}:&o&|ª !&##`i|ʔ !× * 's#r!&!9n&}:&o&3!&#!&!&####!&!&!& !&!&##!&###!& !& Ã!'":'!"}!f("f(!h("h(!j("j(!d("d("b(!L("L("J(!&(s#r!g|!}22'}"|"'"'}24'}2+'"'""'"H("p(}29'"r(!"}"l(##}2-'_vK*0'&|˜Ey*2'&|ʻ*'|ʵ*' !"'*4'&||]|*'|!$# *'DM!"'*0'&|**'͞#!$*'|*!3$*p(͞#`i"'|Ii*'͞#!B$ !N(!L$!S$!}23'!T$͏}20'!\$͏}2/'!_$͏}21'!b$͏}22'!f$͏}27'!j$͏}2.'!m$͏}26'!p$͏}29'!s$͏}28'!x$͏}25'!}$͏}2*'!$͏}2,'!$!kwDM|!"&'!$͏|*!)"-!!"('!$!kwDM|LO!"'!$!kwDM|nq!" '"$'!$͏|’!$͏Õ!|ʭ!" '++"'+}2,'!$͏|!" '+"'+}2,'!$͏|!" '+}2,'#"'!9^#V!kwDM|! 9^#V+)!9^#V!9^#V!9^#Vn&|O!9^#Vn& R!|ʁ!9^#Vs#rbk+!9^#Vs#rbk+n&}+!9^#V!s!9^#V!kw !9n&bk|!|!|!|!!99DM!9^#Vn&!|`i!& !&sssssssssssss!$#|G !&#sÔ!$#|_ !&sÔ!$#|{ !&####sÔ!$#|ʗ !&sÔ!$#|ʳ !&sÔ!$#| !&sÔ!$#| !&##sÔ!$#|!&###sÔ!$#| !&sÔ!$#|<!& sÔ!$#|X!& sÔ!$#|t!& sÔ!%#|ʐ!& sÔ!!!9^#VDM!9^#V`i`i##^#V!n&`i##^#V!n&`i####^#V`i##^#Vbk##^#Vͽ8 9!9^#Vk DM|.9^#Vͮ `id!]"|3!!9d|T! %# !9s#r!Ϳ|!%# !9!9^#Vs#r!/"|ʴ!9d!9!9^#V^#V9s#r!*"|!9d!9!9^#V^#Vs#rô!+"|!9d!9!9^#V^#Vs#r!-"|Q!9d!9!9^#V^#VZs#r!3%I!*8 |ʃ!&#n&!&##^#VU-]*4'&|!;"|]!#"|!&ͅ| !("|!5%# ͫ*!&#s!& s!&##* 's#r?)!#* '?)!9^#Vs#rbk+n&}!}!92 9;!9! 9^#Vn&}|^& ͱa!|w!9^#Vs#r5&|ž#9s#r9^#Vs#rèbk9s#r!DM!9! 9^#Vs#rbk+n&}!|! .9n&`iDMí!9^#V`i3!9n&a|!9n&z՗!!9n&0|A!9n&9՗!!$!͞#!.G!͞#!.G!͞# *'DM!"'.9^#V`i"'! ! *'DM!"'.9^#V͞#`i"'!9^#VDM`i!9^#Vs#rbk+n&}|*'|*' !"'!.cl`r*6'&|*9*$'!9!DMs#r9*L(s#r`i|—9!9^#Vs#r!L(ͱ|—!9^#Vs#r9!9^#V^#Vs#rfm!9s#r!9^#Vs#r9^#Vs#rbk+n&DM |`iʗ|`i\ !| G!9^#Vs#rN!\G! 9 9!0G! 9!0G!9^#Vs#r`i|ʉ!9^#V!2ʗ|‰.9^#V!(ʗ|ʃ`i ͱÌ!Ì!|ʥ O!.a. 9^#V}m! 9^#VZ`r9*3'&|*6'&!|bk9s#r*h("'*'!h('1]!H%# ]!X%#|*b]!_%#|=]!g%#|]E];*'n&|e*4'&h!|p3!{"|ʃ*FO!k%#|ʝ4@!}2'O!n%#|ʷC!}2'O!T9 |!9!&#n&}!&##^#VDM|&o6!,"|O!t%#|PO!}%#|0B!}2'O!%#|J͎D!}2'O!%#|gIE!}2'O!%#|ʄ`E!}2'O!%#|ʡ͉E!}2'O!%#|ʻ@!}2'O!;"|O!#"|!%#|E !%#|b !%#| !}2'O!%#|/W!}2'O|BP*'&3aF!}2'*'&3!&ͅ|q!%# !. ͊####^#V`r!&ͮ DM|!&####s#rͫ*!!& s!?)!T99`i##^#V!n&!|!|!%# `i*'DMn& |`in&͈|(`i`in&|D`in& ͱG!|R`i(`in&|e!!&ͅ!:"͊DM##^#V!n&|š!%# `i##^#V! s!.b`i####^#V`r!!;"|!%# ͈|*'n&͈|*'n&|*'n&͈|i#i#*'n&!|8bk|<!!!%# !9^#V"|x! &# i!9^#V !!!(&# !9^#V"&si#*'n& |ª!DM*&#"&+}*'n&͈|`i ՗!|¯*&s*&'#"&'!.b.9^#V`r!9n&DMa|,`iz՗/!|_`iA|L`iZ՗O!|_`i_ͱb!!9n&0|ʄ!9n&9՗!!9n& |¥##9n&d!! !9^#Vn&|!9^#Vs#rbk+n&ñ! ړDM#|!7&# *j(s#r`i"j(!9^#V`i##!$*j(!j(ͱ|*j(:*j(^#V"j(*j(##*j(!j(ͱ|ʗ!9^#V*f(s#r!9^#V*"'s#r!9^#V!s#r!9^#V!s#r*j(##!9^#V!$!*'n&|¿*'#n&*'n&|*'#"'+n&!'"'s*'n&| *4'&|!1*4'&|!*'n&|-1*}#|?y*4'&|L*t(#"t(*r(#"r(*}}DM՗|}`iͱÀ!|*}#|›!A&# !}*}+"})^#V"t(!}*})^#V"}*5'&|*}!|B!|*}t!Q&t*r(͢$GT 2b j|t&Ggʲj Jrj,v&)m rj rtv&!RJjrBzLf& *Fgrjzj tf &)G@2r**u('#! |Srzb""4tU;'")"'GR2zrB u Ҩ(*)Q*vx((*!GWJz:",u{(*!& Xrzw(*!)GmrB*g;(*) tjv)"$"!Or"ʚw3)"!Gi* "2u{)"$"s* "r v)"*)GG2*z$wȯ)"")i2w);)'&*)GS2z t$3))! V22t)+& I2* v|)!S*bj*tv)(*)GO2B2"tu0G)#*&#GQDB2tO)#**FRb*ttx)*(+ iMr*jv*) * I 2Z v<;*)' *GCrB t*!UJrB v7+!(*Gxrrju:!)FYr2zru+$"!qIrB*dt+$")GMHJ*Dv7+$#!xrJr eD+)Gcb¢zLwব')(*)GO2B2"tu0G)#*&#GQDB2tO)#**FRb*ttx)*(+ iMr*jv*) * I 2Z v<;*)' *G"UM**"4uDҢ!G}r*"B* $v "$ G@r*"JDtk"$&T**"zu")Fs@2*rB|u"*""pƲ*rj*tt8"*&GeMr*rv"#'br:2z24u#'G`B* "*v$""*F[Jr2Jbtu\$(! `2Jr"Dg$())GDJrzdtW$)'X2Jr*t:*GL "Jzt8 C1 1 B21 B10 E103 B8 C1 -1 B21 F13 277 F98 278 D25 oldrdname B9 C1 5 B4 E105 B10 B21 B9 D25 readname B9 C1 7 B4 E105 B10 B21 E104 B10 E102 F13 275 F98 276 C1 3 B4 B9 C1 B10 E103 F98 281 C1 3 B4 E105 B9 C1 36 B10 E116 F14 280 F13 282 F98 279 C1 3 B4 B9 E105 B8 C1 1 B21 B10 E103 B8 C1 -1 B21 F13 281 F98 282 D25 oldrdfcb B9 C1 5 B4 E105 B10 B21 B9 D25 readfcb B9 C1 7 B4 E105 B10 B21 E104 B10 E102 F13 279 F98 280 D3 rnmptr B9 D27 clname B16 D3 rfcbptr B9 D27 clfcb B16 C1 20 B9 C1 9 B9 D27 curpos B16 B16 G26 979 B9 D27 putst B16 C1 1 B4 B9 C1 20 B9 C1 49 B9 D3 rnmptr B9 D3 rfcbptr B9 D27 infilnam B8 C1 8 B4 B19 B8 B10 E103 C1 1 B4 E105 B9 C1 B10 E40 1 F14 283 D27 blkrname D27 rstfcb B16 B16 B15 B12 F98 283 C1 26 B9 D25 iobuf B9 D27 bdos B16 B16 B5 D6 areg C1 15 B9 D25 readfcb B9 D27 bdos B16 B16 B5 D6 areg D2 areg E101 B9 C1 255 B10 E40 1 F14 284 C1 24 B9 C1 5 B9 D27 curpos B16 B16 G26 1019 B9 D27 putst B16 D27 inpchar D27 blkrname C1 24 B9 C1 5 B9 C1 46 B9 D27 blank B16 B16 B16 D27 rstfcb B16 B16 B15 B12 F98 28v ")"L2 bB v *'#Gfj bztv *)Gmr btwu: "kJ ʜwm; ))aA zLe̲!"'hjb r\u{!&%' U2z"*w!)$*Gj r2rt!," QJ r$dܞFt "*e!n":e!"jK"be̋!*FTbr,f>!FBIv! !eB *tto! &nrB ,w#!%bF2BztH!!))Qb2d!' Lb*"u({!)&GtGrbw$!))GS 2zb t !*)"J2J:Dv!! fJzv""*Gx"*bzdv_"")'t"Jlv"$*Dr"J t"$( h2"J,w?"' GH 2"v(2))G^2"BtҢ)"UM**"4uDҢ!G}r*"B* $v "$ G@r*"JDtk"$&T**"zu")Fs@2*rB|u"*""pƲ*rj*tt8"*&GeMr*rv"#'br:2z24u#'G`B* "*v$""*F[Jr2Jbtu\$(! `2Jr"Dg$())GDJrzdtW$)'X2Jr*t:*GL "Jzt`eUE$@t[= 0BN>1` ȉ*j 1 8of font RAM sys_dta equ 0 ; RAM bank port address ; ; ld de,(dispparm) ; de <= displacement ld bc,(byteparm) ; c <= byte to put ; di ; disable interrupts ; in a,(sys_dta) ; get current bank state or 080H ; set bit 8, select font bank out (sys_dta),a ; put to bank status ; ld a,c ; put byte to store in A reg ; ld hl,f_ram_start; RAM[font_ram_start + add hl,de ; displacement] = byte ld (hl),a ; ; in a,(sys_dta) ; restore bank status and 07FH ; to previous value out (sys_dta),a ; ; ei ; enable interrupts .8080 RET EXT byteparm EXT dispparm C1: DS 0 ;0 errs *** ;0 code gen errs ***  ; enable interrupts .8080 RET EXT byteparm EXT dispparm C1: DS 0 ;0 errs *** ;0 code g 5 B9 D27 curpos B16 B16 G26 1202 B9 D27 putst B16 C1 4 B4 B9 C1 24 B9 C1 49 B9 D27 yesno B16 B16 B10 E103 D27 blkrname C1 24 B9 C1 5 B9 C1 45 B9 D27 blank B16 B16 B16 C1 4 B4 E105 B9 C1 B10 E40 1 F14 315 B16 B16 B16 B12 F98 315 F98 314 D27 blkrname C1 20 B9 C1 9 B9 D27 curpos B16 B16 G26 1246 B9 D27 putst B16 D27 reverse D27 putblank D25 writname B9 D27 putst B16 D27 putblank D27 nreverse C1 19 B9 D25 writfcb B9 D27 bdos B16 B16 B5 D6 areg C1 22 B9 D25 writfcb B9 D27 bdos B16 B16 B5 D6 areg D2 areg E101 B9 C1 255 B10 E40 1 F14 316 C1 24 B9 C1 5 B9 D27 curpos B16 B16 G26 1272 B9 D27 putst B16 D27 inpchar C1 24 B9 C1 5 B9 C1 68 B9 D27 blank B16 B16 B16 B16 B16 B16 B12 F98 316 C1 26 B9 D25 iobuf B9 D27 bdos B16 B16 B5 D6 areg D25 writfcb B9 C1 32 B10 B21 B9 C1 B10 E102 C1 D7 bufcnt C1 D7 charcount C1 D7 address C1 D7 diskfull F98 317 D3 charcount B9 C1 2048 B10 E116 F14 319 D3 diskfull91 byteparm D91 dispparm B99 ;0 errs ***  .z80 D95 f_ram_start equ 0 ; starting address of font RAM D95 sys_dta equ 0 ; RAM bank port address D95 ; D95 ; D95 ld de,(dispparm) ; de <= displacement D95 ld bc,(byteparm) ; c <= byte to put D95 ; D95 di ; disable interrupts D95 ; D95 in a,(sys_dta) ; get current bank state D95 or 080H ; set bit 8, select font bank D95 out (sys_dta),a ; put to bank status D95 ; D95 ld a,c ; put byte to store in A reg D95 ; D95 ld hl,f_ram_start; RAM[font_ram_start + D95 add hl,de ; displacement] = byte D95 ld (hl),a ; D95 ; D95 in a,(sys_dta) ; restore bank status D95 and 07FH ; to previous value D95 out (sys_dta),a ; D95 ; D95 ei ; enable interrupts D95 .8080 B12 B99 B99 F98 1 C97 Dd%$8III&PUTCOLSՔU dd5=Y1RATOIMo @#+5D @#+5Y!%Y!%Y! x@xFVj@xFVjhCel>-XUCmڐaUR*!ڼaUeϋVUW vDBV*X0X͸VmxV+Yͩ ͸r^$e,ۺVmxX"chD C4>-YUED ^nb5wB9D #+8C" B9D #+8C&0D3@xXkg'[E!eXp)xFV Nb3+aU""!%Y7 *pͧ`,:dB 99NTB3j jʽ,;~!.Rpg#Vó"!!%YW@ fؠxXPb5Nb3DuB Fru@xFVj@xFVpM`D`fū*@xFVj@xFVpM`Drf :!VUaհ!9re`#9b(rfQ(9/Q 9/ɸLhB-e9NHh]l ;FI 1 '# e9fSs "q 9N΀ALTSETd%$80ARRDRId%%4XP ATOIT$BYTEPAĀD44UCCGED44X CCLTd44TH@CHARSEd4%44CURPOSD5̸IOC1D3(˸MAINSE̠U$BEu(M9M9NP5f : f :ɎU$BEu(RD_WR2E43(8SNSDNScod era chargen.cod m80 chargen,=chargen.asm/m era chargen.asm cc chrnw1.c c2 chrnw1.cod era chrnw1.cod m80 chrnw1,=chrnw1.asm/m era chrnw1.asm cc chrnw2.c c2 chrnw2.cod era chrnw2.cod m80 chrnw2,=chrnw2.asm/m era chrnw2.asm cc chrnw3.c c2 chrnw3.cod era chrnw3.cod m80 chrnw3,=chrnw3.asm/m era chrnw3.asm cc chrnw4.c c2 chrnw4.cod era chrnw4.cod m80 chrnw4,=chrnw4.asm/m era chrnw4.asm cc chrnw6.c c2 chrnw6.cod era chrnw6.cod m80 chrnw6,=chrnw6.asm/m era chrnw6.asm cc chrnw7.c c2 chrnw7.cod era chrnw7.cod m80 chrnw7,=chrnw7.asm/m era chrnw7.asm cc chrnw8.c c2 chrnw8.cod era chrnw8.cod m80 chrnw8,=chrnw8.asm/m era chrnw8.asm m80 =io l80  *.>wÔ#wt~xȀdHMOVMANde4UHNREVEReUD$PUTCHReUD4PUTRAMUUE5HpREADNAe$UdU%980ARRDRId%%4 movman B18 C1 B4 B9 C1 B10 E103 F98 16 C1 B4 E105 B9 C1 2048 B10 E116 F14 15 F13 17 F98 14 C1 B4 B9 E105 B8 C1 1 B21 B10 E103 B8 C1 -1 B21 F13 16 F98 17 C1 B4 E105 D7 dispparm D25 mainset B9 C1 2 B4 E105 B10 B21 E104 D7 byteparm D27 putram F13 14 F98 15 B16 B12 B99 D61 movalt B18 C1 B4 B9 C1 B10 E103 F98 20 C1 B4 E105 B9 C1 2048 B10 E116 F14 19 F13 21 F98 18 C1 B4 B9 E105 B8 C1 1 B21 B10 E103 B8 C1 -1 B21 F13 20 F98 21 C1 2048 B9 C1 2 B4 E105 B10 B21 D7 dispparm D25 altset B9 C1 2 B4 E105 B10 B21 E104 D7 byteparm D27 putram F13 18 F98 19 B16 B12 B99 D61 atoi B18 B18 C1 B4 B9 C1 B10 E103 C1 2 B4 B9 C1 B10 E103 F98 24 C1 6 B4 E105 B9 C1 4 B4 E105 B10 B21 E104 B9 C1 48 B10 E119 F14 25 C1 6 B4 E105 B9 C1 4 B4 E105 B10 B21 E104 B9 C1 57 B10 E117 F13 26 F98 25 C1 F98 26 F14 23 F13 27 F98 22 C1 2 B4 B9 E105 B8 C1 1 B21 B10 E103 B8 C1 -1 B21 F13 24 F98 27 C1 B4 B9 C1 10 B9 C1 4 B4 E105 B10 #+5D #+8C!aa9/p2o[% FFruZ qVUUaq9re`#9b DJA,!v2 S@b2"y@B&(a6D3 @n7#(l0`1e'(o7 qB6MƱl2F4 qe n3v:ES(HdPsMc dMi6De&(34PS$ F3## 1R;f P 1 ;j SQc UI@3` T%9%1:3S-@9IYJ2 Uc,`AUQ !J3$ TU#'@IYIN3|TTgB6MƱl2F4 qe n3v:EX H MOV D,M POP H DAD D LXI D,32 MOV M,E XCHG JMP C50 C51: LXI H,4 DAD SP MOV E,M INX H MOV D,M LXI H,14 DAD D LXI D,0 MOV M,E POP PSW XCHG RET ENTRY clfcb clfcb: PUSH B LXI D,0 MOV H,D MOV L,E DAD SP MOV M,E INX H MOV M,D XCHG C56: POP D PUSH D LXI H,36 EXT CCLT CALL CCLT MOV A,H ORA L JZ C55 JMP C57 C54: LXI H,0 DAD SP PUSH H MOV E,M INX H MOV D,M INX D POP H MOV M,E INX H MOV M,D MOV H,D MOV L,E DC dd 195CLFCBT d4T49@bXV+bD!"g'X ecaUQppr^j fw@ef@efr@"#+5D"#+5Y!.Qx9/Q869Yhb34Qp.#9YDxAxFV1ϋVfH91BK2u rb38ecFn,gdaV@pHrb38egYLՕJ@D!#+:`Df :X!VUO7 2#hBL:!!#93m@0YBB Frb5ϋV!#9AX"g (@fū*A@xFV e^p9@1|Z8eaͤ,;!VUaP!H9re`#9b(<ef,egd&9D l^/#9CxFVjBxFVpM`E *.B Fru4ecF D!#+5D!`#+8C&0} A@˔#+'1kD!@#+8Nb3ea >-XWH\ef(egd&EmaP!|Z$K2Msap9@1!%Xk>-XTX \@͵fecV|Z ("g @fՕV-Q͹L:!0 E40 1 F14 37 C1 26 B4 E105 B9 C1 9 B10 B21 B9 C1 67 B10 E102 C1 26 B4 E105 B9 C1 10 B10 B21 B9 C1 72 B10 E102 C1 26 B4 E105 B9 C1 11 B10 B21 B9 C1 82 B10 E102 C1 28 B4 E105 B9 C1 14 B4 E105 B10 B21 B9 C1 46 B10 E102 C1 28 B4 E105 B9 C1 14 B4 E105 B10 B21 B9 C1 1 B10 B21 B9 C1 67 B10 E102 C1 28 B4 E105 B9 C1 14 B4 E105 B10 B21 B9 C1 2 B10 B21 B9 C1 72 B10 E102 C1 28 B4 E105 B9 C1 14 B4 E105 B10 B21 B9 C1 3 B10 B21 B9 C1 82 B10 E102 C1 28 B4 E105 B9 C1 14 B4 E105 B10 B21 B9 C1 4 B10 B21 B9 C1 B10 E102 F13 38 F98 37 D27 curp24 G26 83 B9 D27 putst B16 C1 4 B4 B9 C1 B10 E103 F98 38 F98 36 F98 33 F98 23 C1 16 B4 B9 C1 4 B4 E105 F14 39 C1 6 B4 E105 F14 39 C1 2 B4 E105 F13 40 F98 39 C1 F98 40 B10 E103 F13 2 F98 3 C1 26 B4 E105 B9 C1 12 B10 B21 B9 C1 B10 E102 C1 26 B4 E105 B9 C1 13 B10 B21 B9 C1 B10 E102 C1 26 B4 E105 B9 C1 14 B10 B21 B9 C1 B10 E102 C1 26 B4 E105 B9 C1 15 B10 B21 B9 C1 B10 E102 C1 26 B4 E105 B9 C1 32 B10 B21 B9 C1 B10 E102 D27 nreverse C1 1 B8 C1 24 B4 B19 B8 B12 B99 D61 checkchar B18 B18 B18 C1 B4 VUaא1H9re`#9b8(<ef,egd&9D l^/#9C@xFV@(ege!%Y! %Y7 HB\X&9F#XY `#+@`mI>-YT BK2f`6ū*3m@0ÃYL  FFruZ#XaR@Qp8r^FYj«0#+gū m@0YL FFru ( ecaPQphr^ d"C!#+A@D9C@xFVHs E8efegdF!br^pr^!"H!#+5D #+8C"1"R!#+5D #+8C"1Fn$fڀa rjh#BB FruB˔BK2eTQ9/γՕSD #+:uDB4]g1âr^ d"!#+AD9C@xFVs!!! %XB B ͛c@ D0u_.KXރb3DuB Fr˔B K2#9: @#+Am>-YVA @^nb5w|B M`BK2TBK22n,|Z(@͵ڮ &\j«@f`WA@ɸLr@63m0(YP!%Xk>-XV4Cyܬ aPa rl83BB Fru+ŢuD!\rkPb@rsmfޠSՕwB\X&9F#Xp @͠d5$t@l \r@ŚB`+4x@ r@ qi8ٴ! C/mVmxh9YC|lڦ! .6mZx@rsm@Nfū*@˔#+'1kpŒ G1<,;:=?*[] \00 D96 SPACE\00 D96 is invalid in a file \00 D96 type\00 D96 name\00 C97 D91 putchr D91 putblank D91 putst D91 upcase D91 nreverse D91 inpstr D91 curpos D91 reverse D91 blank B99 ;0 errs *** utst B16 F98 49 C1 4 B4 B9 C1 12 B10 E103 F98 45 F13 41 F98 42 C1 2 B4 E105 B16 B16 B16 B12 B99 D61 curp24 C1 24 B9 C1 5 B9 D27 curpos B16 B16 B12 B99 D61 clname B18 C1 B4 B9 C1 B10 E103 F98 52 C1 B4 E105 B9 C1 14 B10 E116 F14 51 F13 53 F98 50 C1 B4 B9 E105 B8 C1 1 B21 B10 E103 B8 C1 -1 B21 F13 52 F98 53 C1 4 B4 E105 B9 C1 2 B4 E105 B10 B21 B9 C1 32 B10 E102 F13 50 F98 51 C1 4 B4 E105 B9 C1 14 B10 B21 B9 C1 B10 E102 B16 B12 dTD89Q !>WRFONTSQS`d4]I59IWRALRAQTeu%55H%=58WRTRCKSQSdtUDE%h]IMfSIOERRSРUt%DX]1UM"RDSYSTe$De5I eQP5 @˔B9E(bܬc˄cp3d4$-ͩO97[&Yjʱ@ !.VmhBB.E.Vhx\.Q0"OVwf:pD9>-XT{t ,Pb5Nb3 e^)xFV Nb3+a٠ D BK22n'Г@ +rjp b@rsmfՕP@XttB\X&9F#X~ BK22(egd&4O& @ ͩ/$B9EW+4xh[-YT }B ͠ HB9E(ͫB9E(Ff r{2|Z4fh!ͥO6؅0 &Yj³,ͺaL!ͥO60 6ŀ ,ڊ" 4>-X.YX!an6mx@@xFVjjhٵd *@A2fh@}'ū ȁ 0"3@ū*@xFV_ՅmU ͧo@ F"b# z  [!" BX3n@6ӄd5E)@ b 99A 91!%Xk>-XW\YDp;?'ū*@ɸLՕ\@ `&Njʮ 0rn!4a@|ZxecV|Z 9@1":&0"OV!p#9:tdB\@rn.aѐfpy'ū s r9Np9'ū K2fū*@˔#+'1&!ےfͥ/h!taѐfP@ɸL eW97 E@XuBjD #+8Ye\49/Q9/˔BM`DpfK2MsF[@+6XtdB9YLã hr^r^!s!/[&2Tc11 R2#%%9A !:S&`99IYJ3U'9IYINp97 E@XuBjD #+8Ye\49/Q9/˔BM`D C1 4 B4 E105 B10 B21 E104 B9 C1 48 B10 E119 F14 25 C1 6 B4 E105 B9 C1 4 B4 E105 B10 B21 E104 B9 C1 57 B10 E117 F13 26 F98 25 C1 F98 26 F14 23 F13 27 F98 22 C1 2 B4 B9 E105 B8 C1 1 B21 B10 E103 B8 C1 -1 B21 F13 24 F98 27 C1 B4 B9 C1 10 B9 C1 4 B4 E105 B10 |Z`$\ڊx@@xFVjk̅ٴ0 *@A2f'6@Qp%.9YHxD7171!%X&9oH`!nVhxoH`D B'T&4YDސ(rOLhkDQ r@2!0CzC*xFVl B9D71ʹoekV L_Յu32D!B9Y >DD9@X D DfӀ#ՕKtpU@Ab*$+aA ,u d&9Y\â ۊ*`gū ǂ Q rn}^01 @(Ej4hBB.P7 m[hBB!!VmBxO*!+ѕd dnU}@b+F+h\ rn'АӂPjfPFHTސ+6<^'ѕ]A0e^A""@eQV_@AwCgb 7[@d6-ͩO97[&Yjʼ!.VmhBB.E.Vm7x^".E7+6^/ LՅkY8 lBPT9YV|Z0(*@.QfWͶ!L:p rs2|Z+6nS6H+cA^"ՅxAE7(9D @{^/60+6 ,ڊ"a~V$r.Vmxnp[D" r^ !n6mx(D Y| ͤ`l*`E * *B`Df&Rū*@xFV_Յ\TͣqhiQ|i*Jh ziʊHЬȉ*ihʱli(l ȩʈi +ȩE誈Jє𬐊+ )i1 4)Jќc )fQP )騩10eN )騩ʱ\ɨ))hP f1 R I舱  i Q l jpzHQ|&Hk*j\ Hi葖ЬJɈ(l i)JQl<jHj 1 lʊIjj1K*PL=H(k1 (Hʑ Jk*j,8  i Q l jpzHQ|&Hk*j\ Hi葖CI 4CeBo9L'C"Nf ;8e7'Ca9seNG#yH0dNG#yP9Ng1E*JDo㡤u2u&㠀obhx4Cxh2 I@M2Z *̢ Te Qn:NBe1 &pސ̂)hP*H*JJi걑PH I)qhh)ȑPh hh豚px} hi+#V" B1fސ&* .K2E^  b+ ͰN*`j¡\ rh3!%YͣfܰgH ˕J,\ !AnVmx@)%XUu" B9E+4xY".EG+6^/H9Y CzCb r^nܢf74qh+u/A(9Y >p8 2|Z8}ZfHDD9@Xސ0R0Q" <e\vZqvCGAblro;Daq@ސ+6^'ѕbX`qYj½!e\"2U*Yp>-XT \roHcu/@|Zh@_q"AS !pbGb.Y!An6mx@ D9N9/#Yj¾\1rjC!.Vh> .(_'ū*8\`E| trhRv B FFr˔BM`E~ ]g1ì8ͻfQp%.Y\xD #+ 0 */ /* enter characters in decimal => 1 */ /* enter the character => 2 */ int edsmade; /* edits made since last read */ char altchar[16]; /* alternate character */ char *ioC1,*ioC2; /* font RAM I/O globals */ int dispparm; /* displacement */ int byteparm; /* byte to be put */ /* system track I/O globals */ int rwflag; /* 0 => read, 1 => write */ int secstart; /* starting sector to write */ int trkstart; /* starting track/* Osborne character generation program PUTRAM routine: putram(displacement,byte) where "byte" is put in the "displacment"th font RAM memory location *IMPORTANT NOTE : this routine must be the last module in the linking list. (this is to insure that this code resides above location 4000h */ /* global variables for assembly interface */ /* ---------------------------------------------*/ /* ---------------------------------------------*/ putram() { extern int dispparm,byteparm; #asm .z80 f_ram_start equ 0 ; starting address of font RAM sys_dta equ 0 ; RAM bank port address ; ; ld de,(dispparm) ; de <= displacement ld bc,(byteparm) ; c <= byte to put ; di ; disable interrupts ; in a,(sys_dta) ; get current bank state or 080H   to write */ int dside; /* Side on which to write */ int drvspc; /* 0 => drive a, 1 => drive b */ char retcod; /* error code returned by sys track I/O, also used by snsdns*/ char svtpval; /* SAVTYP value returned by snsdns() */ main() { int exityn; char command; /* extern char *allocs; */ putchr(ESC); /* turn off function key translation */ putchr('f'); /* allocs = 0; */ rnmptr = readname; rfcbptr = readfcb; wnmptr = writname; wfcbptr = writfcb; cpright(); /* display copyright message */ altwyn = FALSE; /* alternate set not written */ manwyn = FALSE; /* main set not written */ edsmade = FALSE; trantab = "0123456789ABCDEF"; mnC1 = "Continue"; pptr1 = "edit"; pptr2 = "copy"; ioC1 = "Main System Set"; ioC2 = "Alternate System Set"; onchar = '*'; offchar = ' '; setptr = charset; nreverse(); /* not reverse video */ bright(); /* not half intensity */ clìs;!!f!O"O!O"O!N"N!N"Nj[!"6"6"E5!-"6!-"6!-"K5!-"I5!-"35! ."15!*}2N5. }2M5!F"F-,-*O.Z*O͇Z*N.Z*N͇Z!9s#r"O͢+!9^#Vbk|”L,!9!.(.1.7͘g9s!..ͥ*!..Kͥ*&| Ͷì&| ì&|38$ì&|FͲcì&|Y`ì&|lʹ^ì&|¬!.-+|¬bk9s#rì,*6+|£Q*6+|¯LR-!!e3!++9n&ubk9s#r!9^#V!9^#Vn&|+!9^#Vs#rbk+!9^#V!9^#Vn&!9s#r9!4. 9^#V͙ks#r*E5|ʲ!.͜,!*.!9^#V!R.!9!.9^#V*s#r!.+9^#Vͥ*͡Q!"G5. }26l}26AQ*6&| !9s#r!.2͜,! !Z-}26!6X*,*6&͡--*6&|M*6&|M*6&CtP!|g*6&!r!9s#r!9^#Vbk+|9s#rbk+|..͜,,*6&ͺ- M5*6&!*6&|bk9s#r}26*6&|‰bk9s#rchrset(); /* clear character set array */ clname(rnmptr); /* clear hex file read name */ clfcb(rfcbptr); /* clear hex file read fcb */ clname(wnmptr); /* clear hex file write name */ clfcb(wfcbptr); /* clear hex file write fcb */ exityn = FALSE; /* not done with program yet */ arrsource = 0; /* memory array is empty */ mainmenu(); /* display main menu */ while(exityn == FALSE) { mnchoice(); command = entchoice(18,40,'1','7'); blank(18,14,27); blank(20,5,75); if (command == '3') /* edit memory array */ editarray(); else if (command == '2') /* read HEX file */ readhex(); else if (command == '5') /* write HEX file */ writehex(); else if (command == '1') /* read system track */ rdsystrk(); else if (command == '4') /* write sys track */ wrsystrk(); else if (command == '6') /* write to font RAM */ wrfontram()M5QÉ͢+!9n&|B..*K5!9^#Vͻ9}26!9n&|s..*K5!9^#Vͩ9}26!9n&|!.*K5!9^#V͗9}26!. ͜,͛{bk9s#r! t|!9^#Vs#rbk+!`͋!9 s#r!@t|,"!9^#Vs#rbk+ͫ!. ͜,͛!9@s#r!t|vl!9^#Vs#rbk+IYͫ!!g!!G!!a!!A;!"G5. 9^#V! 9^#V͜,!Z.!9^#V!n.,!9!6!. 9^#Vͅ\s#r-!9^#V!t|39*6&}ä!9^#V!u|V9*6&# }ä!9^#V!v|o9sä!9^#V!r|ˆ9sä!6*!9!6͑" }&3;!"G5. 9^#V! 9^#V͜,!.!9^#V!.,!9!6!. 9^#Vͅ\s#r-!9^#V!t|!9*6&}Ò!9^#V!u|D9*6&# }Ò!9^#V!v|]9sÒ!9^#V!r|v9sÒ!6*!9!6ͥR }&3!"G5. 9^#V! 9^#V͜,!.!9^#Vvbk9s#rbk|& ##9Z-}!9^#Vbk+| !9n&; else if (command == '7') /* done with program */ { if (contread("OK to exit") == TRUE) /* check to see if edits saved */ exityn = TRUE; } } clrscn(); if (manwyn == TRUE) /* if write to main font ram has been executed */ movman(); /* perform the actual transfer */ if (altwyn == TRUE) /* same with alternate ram */ movalt(); nreverse(); putchr(ESC); /* turn on function key translation */ putchr('e'); } putchr(chr) char chr; { bdos(6,chr); } putst(stptr) char *stptr; { int i; for (i = 0; *(stptr + i) != 0; i++) putchr(*(stptr + i)); } /* OK to continue read of systems tracks */ contread(messptr) char *messptr; { int answer,cpos; answer = TRUE; cpos = 52 + strlen(messptr); if (edsmade) /* if edits made since last read */ { curpos(18,5); putst("The character set has not been saved. "); putst(mes /* Osborne character generator program */ extern char readname[],charset[],mainset[],altset[]; extern int arrsource,dispparm,byteparm; extern char *ioC1,*ioC2; /* display source of most recent read of the memory array */ arraysource(row,column) int row,column; { curpos(row,column); blank(row,column,65); curpos(row,column); putst("The working character set is "); reverse(); putblank(); if (arrsource == 0) /* empty */ { putst("a new set"); } else if (arrsource == 1) /* HEX file */ { putst(readname); } else if ((arrsource == 2) || (arrsource == 3)) /* main systems tracks */ { putst(ioC1); arrdrive(arrsource - 2); } else /* alternate systems tracks */ { putst(ioC2); arrdrive(arrsource - 4); } putblank(); nreverse(); } arrdrive(drivenumber) int drivenumber; { putblank(); putchr(drivenumber + 'A bufcnt = 2; /* start of file name */ if ((*(bufptr) == 'A') || (*(bufptr) == 'B')) { *fcbptr = (*(bufptr) - 'A' + 1); } else { driveok = FALSE; curp24(); putst("Drive must be A or B"); } } /* check valid file name */ nameok = FALSE; if (driveok == TRUE) { nameok = TRUE; perenc = FALSE; for (fnamcount = 0; (bufcnt < entlength) && (fnamcount < 8) && (nameok = TRUE) && (perenc == FALSE); bufcnt++) { nameok = checkchar(*(bufptr + bufcnt),1); if ((*(bufptr + bufcnt)) == '.') { perenc = TRUE; } else { *(fcbptr + 1 + fnamcount) = *(bufptr + bufcnt); fnamcount++; } } perpos = bufcnt; if ('); putcolon(); } putcolon() { putchr(':'); } /* move the character set to the font RAM */ movset() { int i; clrscn(); for (i = 0; i < 2048; i++) /* move character set to alternate font RAM */ { dispparm = 2048 + i; byteparm = charset[i]; putram(); } } /* move the main set storage to the main font RAM */ movman() { int i; for (i = 0; i < 2048; i++) { dispparm = i; byteparm = mainset[i]; putram(); } } /* move the alternate set storage to the alternate font RAM */ movalt() { int i; for (i = 0; i < 2048; i++) { dispparm = 2048 + i; byteparm = altset[i]; putram(); } } /* converts s to interger */ atoi(s) char s[]; { int i,n; n = 0; for (i = 0; s[i] >= '0' && s[i] <= '9'; i++) n = 10 * n + s[i] - '0'; return(n); } (fnamcount == 8) && (*(bufptr + bufcnt) == '.')) { bufcnt++; /* bypass period on 8 char file name */ perenc = TRUE; } if (fnamcount == 0) { nameok = FALSE; curp24(); putst("File name can not be blank"); } } if (nameok == TRUE) { typeok = TRUE; for (typecount = 0; (bufcnt < entlength) && (typeok == TRUE); bufcnt++) { typeok = checkchar(*(bufptr + bufcnt),0); *(fcbptr + 9 + typecount) = *(bufptr + bufcnt); typecount++; } if ((typecount > 3) && (perenc == TRUE)) { curp24(); putst("File type too long"); typeok = FALSE; } if (typeok == TRUE) { if (perenc == TRUE) { if (typecount == 0) { /* enter file name at position row and column puts raw string converted into FCB returns 0 if only pressed 1 otherwise */ #define TRUE 1 #define FALSE 0 infilnam(row,column,bufptr,fcbptr) int row,column; char *bufptr,*fcbptr; { int i,j,bufcnt,fileok,perenc,perpos,fnamcount,entlength; int typecount,nameok,driveok,typeok; fileok = FALSE; while(fileok == FALSE) { clname(bufptr); /* clear name */ clfcb(fcbptr); /* clear fcb */ blank(row,column,14); reverse(); curpos(row,column); entlength = inpstr(bufptr,14,FALSE); nreverse(); blank(24,5,70); /* blank out error message line */ if (entlength == 0) { return(0); } upcase(bufptr); /*check valid drive */ bufcnt = 0; /* start of file name */ *fcbptr = 0; /* default drive */ driveok = TRUE; if (*(bufptr + 1) == ':') {   curp24(); putst("Blank file type"); typeok = FALSE; } } else { if (typecount == 0) { *(fcbptr + 9) = 'C'; *(fcbptr + 10) = 'H'; *(fcbptr + 11) = 'R'; *(bufptr + perpos) = '.'; *(bufptr + perpos + 1) = 'C'; *(bufptr + perpos + 2) = 'H'; *(bufptr + perpos + 3) = 'R'; *(bufptr + perpos + 4) = 0; } else { curp24(); putst("File name too long"); nameok = FALSE; } } } } fileok = driveok && nameok && typeok; } *(fcbptr + 12) = 0; /* extent = 0 */ *(fcbptr + 13) = 0; /* s1 = 0 */ *(fcbptr + 14) = 0; /* s2 = 0 */ *(fcbpt͒B`i|]`i|**'*:'v-!|B*'#"'+`i}]*'s*/'&|c!.cl`r*.'&|u*-'&x!|*6'&|Ši*t(͞#*9'&|ʯ!/G!Z͞#! G!' !'*' |3!'"'!>'*<'!9n&}*<'#"<'+!.Z՗|*<'+"<'!9n&9*-'&|2&9!%9s"<'!'"'*'n&!|`!|”! *'n&|ʉ*'n& ͱÌ!|hG!|ʦ!|´*'n&G!|**'n&|!/G*'n&|ͳ/ !|!*'n&|*4'&|!1Gbk|I*'n& |LGbk9s#r#9!9s#r!9^#Vs#r!Ϳ|ʘ!#9^#Vs#rbk+*'n&}*'n&͈|e.#9^#V!s#9!9^s#r| !"9!%9^#Vs#rbk+n&}|!"9n&!%9sG!#9!9s#r!"9!%9^#Vs#rbk+n&}|G!"9n&!*<'|g!S&# !"<'.#9!'"'s#r!#9^#Vs#r!>'*<'#"<'+n&}|}*.'&|ʹ!%9n&ü!|i!a&!' &9!9^#V*'n&DM!9^#Vr + 15) = 0; /* record cnt for ex = 0 */ *(fcbptr + 32) = 0; /* cur rec = 0 */ nreverse(); return(1); } checkchar(byte,arrstart) char byte; int arrstart; { int count,okchar; char *badchar; badchar = ".><,;:=?*[] "; okchar = TRUE; for (count = arrstart; count < 12; count++) { if (byte == *(badchar + count)) { okchar = FALSE; curp24(); reverse(); putblank(); if (byte == ' ') putst("SPACE"); else putchr(byte); putblank(); nreverse(); putst(" is invalid in a file "); if (arrstart == 0) putst("type"); else putst("name"); count = 12; } } return(okchar); } curp24() { curpos(24,5); } clname(nameptr) char *nameptr; { int i; for(i = 0; i < 14; i++) /* clear read name */ *(nameptr + i) = ' '; *(nameptr + 14) =  |Q`i|!d&# Q`i|/*'n&|/!9^#V99ͅ|„ 9*'n&|ʢ*'n& ͱå!|ʰÄ!98*'8####ZDM#|!&#  9*b(`is#r`i"b(!d(s#r*'!9`i##!98#$*'8#$ 9!9^#VDM`in&|C!9^#VZ+*d(DM!d( |ʿ`i##!9^#Vͮ!|ʴ!9`i##s#r!9^#Vs#rbk+n&|˜`i^#VDMe!9!""|.<"!!9DM*'n&|*'n&|*'n& !|.`i}!}!9'{9!9n&|T*'|ʶ!9n&|t*7'&w!|ʉ! *']!9n&*']՗|!&# !9n&|. ! !9n&!9n&!9^#VDM`in&G|! G! G!:Gi*p(|5 *t("p(*'#"'!9^#V!;o *'DM!"'.9^#V!o `i"'!' !9n&|ʋ i!'DM*'b|ʽ `in&|²  Ð ! GÐ !^G !9n&| ibk9s#r*}Ϳ|A!!!9^#Vs#r0; } clfcb(fcbptr) char *fcbptr; { int i; for(i = 0; i < 36; i++) /* clear read fcb */ *(fcbptr + i) = ' '; }  dispparm = 2048 + i; byteparm = charset[i]; putram(); } } /* move the main set storage to the main font RAM */ movman() { int i; for (i = 0; i < 2048; i++) { dispparm = i; byteparm = mainset[i]; putram(); } } /* move the alternate set storage to the alternate font RAM */ movalt() { int i; for (i = 0; i < 2048; i++) { dispparm = 2048 + i; byteparm = altset[i]; putram(); } } /* converts s to interger */ atoi(s) char s[]; { int i,n; n = 0; for (i = 0; s[i] >= '0' && s[i] <= '9'; i++) n = 10 * n + s[i] - '0'; return(n); }  /* routine to input a string first parameter is address of string second parameter is number of character of input to allow third parameter is logical whether arrow key or escape is enabled to return returns number of characters entered or the ascii value of the arrow key pressed or 0x8e if ESC pressed */ #define CURLFT (0x8D) #define CURUP (0x8A) #define CURDN (0x8C) #define CURRT (0x8B) #define SPACE (0x20) #define CARRET (0x0D) #define ESC (0x1B) #define BELL (0x07) #define TRUE 1 #define FALSE 0 #define BKSPC ('H' & 0x1F) inpstr(strptr,chrmax,arrowok) char *strptr; int chrmax,arrowok; { char byteentered; int endinput,retvalue,chrcnt; chrcnt = 0; endinput = FALSE; while (endinput == FALSE) { byteentered = inpchar(); /* enter character */ if ((byteentered == CURUP) || (byteentered == CURDN) || (byteentered == CURRT) || (byteentered == ESC)) /* if arrow key */ { if (arrowok == TRUE) /* if arrows ok, return key pressed */ { endinput = TRUE; if (byteentered == ESC) retvalue = 0x8E; else retvalue = byteentered; } else putchr(BELL); /* else alarm */ } else if (byteentered == CARRET) /* if carriage return, return number */ { endinput = TRUE; retvalue = chrcnt; } else if (byteentered == CURLFT) /* back space */ { if (chrcnt > 0) /* if characters entered, back space */ { chrcnt--; putchr(BKSPC); nreverse(); putchr(SPACE); reverse(); putchr(BKSPC); } else putchr(BELL); } else if ((byteentered > 31) && (byteentered < 127)) { if (chrcnt < chrmax) {  !|!9^#V!!/G!}!9^#V)^#V͞#!& !|*}!/G*t(͞#!&!9^#V !9^#V͌!  !9^#V*'!9^#Vͭ!"&.9^#V"&!9^#V"&*&#"&+n&DM*&#"&+n& |!`i|"!`i|"*&*&#"&!*&+n&͈|$"!*&!"&.9^#V"&!9^#V"&*&#"&+n&DM*&#"&+n& |ʒ"`i H*&+n& H |ʒ"`i|ʨ"!`i|ž"*&*&#"&E"*&+n&͈|ʾ"!*&i#!9n&*'n&ͱ|"*'#"'!!i#*'!9^#Vͭ"&|#*&*'"'!!i#*('!9^#V*'!6#"&|e#*&*'"'*'n&͈|a#K#!!*'n&!|ʂ#!|ˆ#i#bk|*4'&|1i#!9^#V!Ϳ|#!-G!9^#VDM#!9^#VDM!9! s#r|#͞#! !0Gmissing closing bracket compilation errors, 1st in line errs ***-ofile+silent+f+s+co+cr+l-g+a+ddt+lno-o+j-n+u-p-i+z8000+z8001+i8080+z8002C Compiler Vintcharstructunionunsignedshortfloatdoublelongexternregistert *(strptr + chrcnt) = byteentered; putchr(byteentered); chrcnt++; } else putchr(BELL); } else putchr(BELL); } *(strptr + chrcnt) = 0; /* trailing null */ return(retvalue); } UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU ypedefautoMust be a constantneg. arrays illegal]missing open parenBad declarationdefineincludeasmifwhileregisterfordoreturnbreakcontinueswitchasmdefineincludegotoMissing labelNot a labelRedeclaration of a labelmissing semicolonmissing symbolmissing bracketing symbol:must be lvalueheap fullClose on bad fd:line too long+ missing quote or apostropheout of heapOutput file error: : P P]U Pvh]Uv]U PvH]UPv8u]UPv$u]UPvu]UPv]UPv]UPv]UPvu]UPv]UvvPQ]U PPrPP]ð]UPPp]UPFP_]UPvO]UHrP.(]Uv]UJP)P]UvS]UV\^hj|!\Jl8kuPK\P>u!*"|ʘ(v(!.* '?)!("|ʴ(v(!{>I(!&ͅ|((@!["|(!.?)(!("|!*'+|1:&o& 1!|%1!># !&k DM|ʧ1`i##^#VO/|n1`i##^#V$>####n&ͱq1!|ʅ1!&͢4ñ1`i##^#V$>####n&}ñ1!*89DM!.=!&`r*/'&|1!.cl`r;!9s#r!>͜!| 2.)"ͱ 2!|2!&ͅ|ʈ2!&####!9^#Vs#rͫ*!* '?)!&ͮ |g2!&͢4o2!T99!9* '^#Vs#r2*'n&|¼2`i##^#V! s*'n&|ʧ22!># !)"|2!,"|2!?# |2!9^#V| 3!9^#Vͽ4!{"|*4!?#|4!9!T9 |@3!&#n&C3!}!9n&!9!&##^#Vs#ro6DM!m* '""'!.l`r|™3.,"Ü3!|ʹ3!9n&!9^#Vo6Ç3`i|4`i##^#V!n&bk+|3!|3!!?# `i##^#V$>####@n&H}!}2+'*F+++|@4!mm@4P+++|@4!mm!.cl`r*f(DM!f( |ʈ4o4`i^#VDMT4!:`i##^#V͉+:d4`i"f(!""'}2+'.}2'3!3?# i!9^#V ;!9! 9^#Vs#r!T9 |4!C?# 9!9!&#n&}n&|). )! * '?)*'n&|4))!)"(!ړDM####! 9n&}`i!9n&}`i##!9^#Vs#r`is#r!&*^#Vbk|ʧ)!&*^#V`is#rö)!&(`is#r!&*`is#r*1'&|B*!9^#VDM!}>!>!>͞#!>`i####n&D*!>!>`in&͞#!>`i##^#V͞#!>!9!9^#VDMs#r|t*!D*!!0Gͫ*v(!9n&!.9^#V?)!!:!&(^#V͉+!&(!&*s#rs#r!9^#Vbk|*!9^#V!*DMbk#|+bk|+!># !`i####!9^#V!n&}`i!9^#V!n&}`i##!9^#Vbk##^#Vs#r!9^#V!9^#Vbk^#V*s#r`i!9^#VDM`i|ʾ+é+`i^#VDMÔ+!9^#V`i!+Þ+!9^#VDM+`i^#VDM!9!9^#Vbk^#Vs#r!9^#Vbk|,`iͱ`i|,#!9^#V`i!9^#V!*,|+!9^#VDM####n&!9^#V!n&ͱ|ʛ,`in&!9^#V!n&ͱ|ʛ,`i##^#V!9^#Vbk##^#VͱÞ,!bk9s#r!9^#VDM`i|Q-,`i^#VDMõ,bk|,9`i##^#Vs#r-`i##^#Vbk|-!9`i##^#V!9!&##^#Vs#r!9n&!9^#V͈*!&ͮ DM|@5@I6!:`i##^#V͉+`i##!ړ!&(^#V*s#r`i####! 9^#V`i####^#VZs#r!&(^#V!n&bk+|5`i##^#V!n&|5*,'&5!|6`i####* '+^#Vs#r6!|6`i##^#V!s`i##^#V* 's#r͘!9* '^#VZs#rbk|I69|i6!,"|5!`?# 54;!9n&!9^#V͈*!&ͮ |ʩ6!&͢4!3!9:&o&}!& n&|6!&#n&H}q7!&(^#VO/|@7!&#n&H}!&*^#V!n&H}!&*^#V!n&}q7!&####*"'!&(^#V͠,}mZm""'s#r!&##!&(^#V͠,s#r9!&!&(^#V!n&}}!&#n&|7:&o&|7!&#n&H}!T99DM8!k !&DM| 8/8!*89DM!&!9n&}`i3!9!&8#Zs#rbk#|b8!v?# !DM####!&####^#Vs#r`i!&`i##!Z!&(^#V*s#r*h(s#r`i"h(*1'&|!?! 9^#V!*8ͱ|8!?8!?!?! 9^#V!^#Vs#r`in&!|3-!|3-!|7-!|¿,`i##^#Vbk|¿,!9:&o&}!9!& n&}!&#! 9n&}|H/! 9n&! 9^#V͈*!&##!&(^#V͠,s#r!&(^#VO/|-!>͜!|-*'n& -!-!|.'1!&(^#VO/|<.!&*^#V!n&H}!9s!&k DM|.!9`i##^#V$>s#r!n&|ʉ.!9n&ͱÌ.!|.!&*^#V!n&|.9^#V!n&}/;/!&!&(^#V!n&}!9n&|/!&#n&H}3/!&(^#V!n&|3/!&#n&}!*89!,"|f-!9^#V!n&!|p/!|t/!!!9^#Vbk##^#V!9^#Vbk##^#Vl|/!9^#Vbk##!9^#Vbk##^#Vs#r!># !!9^#Vbk##^#V$>DM####n&| 0!&*^#V!n& 0!|B0!&#n&}!&*^#V!n&}!3,!9^#Vbk##^#V!&(^#V+|0`i####n&|ʟ0!9^#V!^#V!&####^#V 0!9^#Vbk##^#V͠,!&(^#V͠, 0!|%1!x/!9^#Vbk##^#V!&(^#V+`in&+++ ?!9n&͞#!?!9n&͞#!?!9^#V͞#!?!9^#V͞#!?!9!&8#ړs#rbk|‹9!?# !DM####!&####^#Vs#r`i!&`i##!ړ!&(^#V*s#r*f(s#r`i"f(!9^#V!9DM!9^#V͘`i99:&o&}!9!& n&}!9ͅ!{"|:!9n&|ʁ;!&!9!& s!&#n&H}!&####!&##s#rs#rͫ*!&#n&:&o&!?)!9|:!9͢4Á;!&9^#V9Á;!9DM|:!?# !"9!&##`i##^#V͠,s#r!&####`i####^#Vs#r!&#`i##^#V!n&}!&`i##^#V!n&}ͫ*!&#n&:&o&!&##^#V?)`i"99;9! 9s#rs#r!}"|/=!Q9^#V !9!&#n&}:&o&|;!?# )=!9!&##^#Vs#r&!9^#V͈*!&##!9!&(^#V͠,s#rs#r!&####! 9^#Vs#r!&!&(^#V!n&}!&#n&|v<:&o&ͱy!@# `i##^#Vbk##! 9^#Vs#r`iM9!9^#Vbk|5>!9^#VDM`i^#Vbk|V>`i^#VDM?>`i*1'&|!9^#V*1'&| ) ;emit(@,_attribs==,_modifier==,_size==) No symbol table room{Array being lengthenedDeclaration mismatch{Bad formal argexpected comma or '('registerBad register typealready definedA formal arg is not declaredexpected comma or ';'no room for global symbol ;glloc_add(,_modifier==,_attribs==,_offset==,_size==) no room for local symbolUndefined structureBad struct declarationRedeclaration of structure type!9*f(s#r9*"'s#rDMLdP!9^#Vm""'!;"|m@!s#|‘@!9s#r 0; column--) edbuf[row][column] = edbuf[row][(column - 1)]; edbuf[row][0] = temp; } } /* rotate editing array up */ shftup() { int row,column; char temp; for (column = 0; column < 16; column++) * enter in hex */ else if (entdec == 1) /* if last character entry in dec */ value = decentry(19,20,pptr2,FALSE); /* enter in dec */ else value = charentry(19,20,pptr2,FALSE); readchr(value); blank(19,20,50); } /* display editing array */ disparray() { int row,column; for (row = 0; row < 10; row++) { curpos(rowbase + row,colbase); for (column = 0; column < 8; column++) { putchr(edbuf[row][column]); } } } /* print argument in hex format */ puthex(byte) char byte; { putchr(*(trantab + ((byte >> 4) & 0xF))); putchr(*(trantab + (byte & 0xF))); } edhead() { arraysource(4,16); /* print source of memory array */ curpos(5,20); reverse(); putblank(); puthex(curchar); /* print current character being edited */ putblank(); nreverse(); putst(" is the HEX value of the current character"); curpos(6,22); putst("is the current character") { temp = edbuf[0][column]; for (row = 0; row < 19; row++) edbuf[row][column] = edbuf[(row + 1)][column]; edbuf[19][column] = temp; } } /* rotate editing array down */ shftdn() { int row,column; char temp; for (column = 0; column < 16; column++) { temp = edbuf[19][column]; for (row = 19; row > 0; row--) edbuf[row][column] = edbuf[(row - 1)][column]; edbuf[0][column] = temp; } } /* insert a row at present cursor position */ insrow() { int row,column; for (column = 0; column < 16; column++) { for (row = 14; row > edrow; row--) { edbuf[row][column] = edbuf[(row - 1)][column]; } edbuf[edrow][column] = offchar; } } /* insert a column at present cursor position */ inscol() { int row,column; for (row = 0; row < 20; row++) { for (column = 11; column > e; } /* printing editing borders, character set, header, etc */ editmenu() { header(); /* display header and clear screen */ border(); /* display character set and edit area border */ edhead(); /* display source of array, current character etc */ dschrb(); /* display character edited */ dispset(); /* display character set */ } /* print character selection menu */ selmenu() { curpos(8,25); putst("Character Selection Menu"); curpos(10,20); putst("H - Entry by HEX value"); curpos(11,20); putst("D - Entry by decimal value"); curpos(12,20); putst("C - Enter the character"); curpos(10,51); putst(" - Done editing"); curpos(14,20); putst("Select Character Entry Method"); dschrb(); /* display character to be edited */ return; } /* print character entry menu */ entmenu() { curpos(8,24); putst("Character Entry Menu"); curpos(10,23); putst("Up Arrow - return to selection menut(); curpos(22,2); putst("Character"); curpos(23,5); putst("Set"); return; } /* display line of boxes in horizontal of vertical direction */ putbox(count,byte,vertyn) int count,vertyn; char byte; { int i; grfon(); /* graphics on */ for (i = 0; i < count; i++) { putchr(byte); if (vertyn == TRUE) /* if vertical display */ { grfoff(); /* turn graphics off */ putchr(LF); /* line feed - cursor down */ putchr(BKSPC); /* backspace */ grfon(); /* turn graphics on */ } } grfoff(); /* graphics off */ } /* clear a section of the screen */ clrsc2(row,column,rnum,cnum) int row,column,rnum,cnum; { int rcount; for (rcount = 0; rcount < rnum; rcount++) blank(row + rcount,column,cnum); } /* clear the editing array */ clredbox() { clrsc2(6,3,10,8); } /* clear the editing menu array */ clrmenu() { clrsc2(8,18,1"); curpos(11,20); putst("Right Arrow - edit next character"); curpos(12,21); putst("Down Arrow - edit same character"); curpos(13,28); putst("ESC - return to main menu"); } /* print character editing menu */ charmenu() { curpos(8,35); putst("Character Editing Menu"); curpos(10,18); putst("Position Cursor with Arrows"); curpos(11,24); putst(". - turn pixel on"); curpos(12,18); putst(" - turn pixel off"); curpos(13,24); putst("Q - Quit without update"); curpos(14,20); putst(" - done editing this char"); curpos(15,24); putst("I - Invert all pixels"); curpos(16,24); putst("C - Copy another character"); curpos(10,52); putst("L - shift character Left"); curpos(11,52); putst("R - shift character Right"); curpos(12,52); putst("U - shift character Up"); curpos(13,52); putst("D - shift character Down"); curpos(14,52); putst("N - iNsert a row"); curpos(15,52); 0,63); } blkrname() { blank(20,9,58); } putblank() { putchr(' '); } /* read HEX format file into memory array */ readhex() { int i,cont; char x; if (contread(mnC1) == FALSE) /* check to see if edits made since last read */ { return; } for (i = 0; i < 15; i++) /* save old read name */ oldrdname[i] = readname[i]; for (i = 0; i < 36; i++) /* save old read fcb */ oldrdfcb[i] = readfcb[i]; clname(rnmptr); /* clear hex file read name */ clfcb(rfcbptr); /* clear hex file read fcb */ curpos(20,9); putst("Enter the file to read (d:filename.typ)"); cont = infilnam(20,49,rnmptr,rfcbptr); /* enter new name and fcb */ if (cont == 0) /* if just RETURN */ { blkrname(); rstfcb(); /* restore fcb and name to old values */ return; } /* open file in readfcb */ areg = bdos(26,iobuf); /* set DMA address of file IO */ areg =  putst("E - dElete a row"); curpos(16,52); putst("S - inSert a column"); curpos(17,52); putst("T - deleTe a column"); dschrb(); /* display the character to be editted */ return; } /* print font and character set border */ border() { int i; dim(); /* font border */ curpos(5,2); putbox(10,LBOX,FALSE); /* top border of editing area */ curpos(6,2); putbox(10,FBOX,TRUE); /* left border of editing area */ curpos(6,11); putbox(10,FBOX,TRUE); /* right border of editing area */ curpos(16,2); putbox(10,UBOX,FALSE); /* bottom border of editing area */ /* character set border */ curpos(21,12); putbox(66,LBOX,FALSE); /* top border of character set */ curpos(22,12); putbox(2,FBOX,TRUE); /* right border of character set */ curpos(22,77); putbox(2,FBOX,TRUE); /* left border of character set */ curpos(24,12); putbox(66,UBOX,FALSE); /* bottom border of character set */ brighbdos(15,readfcb); /* open file */ if (areg == 0xFF) /* file not found */ { curpos(24,5); putst("File not found. Press any key to continue."); inpchar(); blkrname(); blank(24,5,46); rstfcb(); /* restore fcb and name to old values */ return; } blkrname(); curpos(20,9); putst("Reading character set from "); reverse(); putblank(); putst(readname); putblank(); nreverse(); edsmade = FALSE; *(readfcb + 32) = 0; /* set record count to 0 */ tempbuf[2] = 0; charcount = 0; /* character count = 0 */ bufcnt = 128; /* set buffer pointer to read */ eoffound = FALSE; while ((charcount < 2048) && (eoffound == FALSE)) { for (i = 0; i < 9; i++) /* read past address, etc. in hex file */ rdhexchar(); recptr = 0; while (recptr < 16) { tempbuf[0] = rdhexchar(); /* convert hex format to ascii */ tempbuf[1] = rdhex fcb */ if (cont == 0) /* if just RETURN */ { blkrname(); return; } /* open file in readfcb */ areg = bdos(15,writfcb); /* open file */ if (areg != 0xFF) /* file found */ { areg = bdos(16,writfcb); /* close file */ curpos(24,5); putst("File already exists. OK to continue? (Y/N)"); answer = yesno(24,49); blkrname(); blank(24,5,45); if (answer == FALSE) return; } blkrname(); curpos(20,9); putst("Writing character set to "); reverse(); putblank(); putst(writname); putblank(); nreverse(); areg = bdos(19,writfcb); /* delete existing file */ areg = bdos(22,writfcb); /* create new file */ if (areg == 0xFF) /* if error in creation */ { curpos(24,5); putst("Full directory on file creation - Press any character to continue."); inpchar(); blank(24,5,68); return; } areg = bdos(26,iobuchar(); /* each record in hex file contains */ charset[charcount] = xtoi(tempbuf); /* the 16 rasters for one character */ recptr++; charcount++; } for (i = 0; i < 4; i++) /* read past CRC and CR-LF in hex file */ rdhexchar(); } areg = bdos(16,readfcb); /* close file */ blank(20,9,42); curpos(20,9); putst("Character set read from "); reverse(); putblank(); putst(readname); putblank(); nreverse(); arrsource = 1; /* source of array is HEX file */ arraysource(6,9); /* display source of memory array */ return; } xtoi(s) /* converts s in HEX to integer */ char *s; { int i,n,hex_dec; char tmpchar,subchar; n = 0; hex_dec = 1; i = 0; while (hex_dec != 0) { tmpchar = *(s + i); if (tmpchar >= '0' && tmpchar <= '9') subchar = '0'; else if (tmpchar >= 'A' && tmpchar <= 'F') suf); /* set DMA address of file IO */ *(writfcb + 32) = 0; /* set record count to 0 */ bufcnt = 0; /* IO buffer pointer */ charcount = 0; /* character count = 0 */ address = 0; /* address in hex format */ diskfull = FALSE; while ((charcount < 2048) && (diskfull == FALSE)) wrhexlin(); wrhexchar(0xFD); /* eof record - write semi colon */ for (i = 0; i < 8; i++) wrhexchar(0); wrhexchar(0xFF); /* carriage return */ wrhexchar(0xFE); /* line feed */ if (diskfull == FALSE) { wrhexrecord(); /* write last record to hex file */ if (diskfull == FALSE) { areg = bdos(16,writfcb); /* close file */ blank(20,9,42); curpos(20,9); putst("Character set written to "); reverse(); putblank(); putst(writname); putblank(); nreverse(); edsmade = FALSE; /* no edits since last save */ } } if bchar = 55; else hex_dec = 0; if (hex_dec != 0) n = 16 * n + tmpchar - subchar; ++i; } return(n); } rdhexchar() { char byte; if (eoffound == TRUE) return; if (bufcnt == 128) { areg = bdos(20,readfcb); /* read file */ if (areg != 0) /* if end of file encountered */ { curpos(24,5); putst("EOF in file read. Press any key to continue"); inpchar(); blank(24,5,45); eoffound = TRUE; } bufcnt = 0; } byte = *(iobuf + bufcnt); bufcnt++; return(byte); } /* write HEX format file from memory array */ writehex() { int answer,i,cont; clname(wnmptr); /* clear write hex name */ clfcb(wfcbptr); /* clear write hex fcb */ curpos(20,9); putst("Enter the file to write (d:filename.typ)"); cont = infilnam(20,50,wnmptr,wfcbptr); /* enter new name and(diskfull == TRUE) { areg = bdos(19,writfcb); /* delete file */ blank(20,9,42); /* erase writing to file message */ } } wrhexlin() { int parchar; parchar = 0; /* set parity character to 0 */ wrhexchar(0xFD); /* write semi-colon */ wrhexchar(1); /* write number of bytes in line */ wrhexchar(0); parchar = ((parchar - 0x10) & 0xFF); /* subtract number of bytes from parity */ wrhexchar((address >> 12) & 0xF); /* higher order address byte */ wrhexchar((address >> 8) & 0xF); parchar = ((parchar - (address >> 8)) & 0xFF); wrhexchar((address >> 4) & 0xF); /* lower order address byte */ wrhexchar(address & 0xF); parchar = ((parchar - (address & 0xFF)) & 0xFF); recptr = 0; wrhexchar(0); /* un-used */ wrhexchar(0); /* write character rasters in hex format-update parity character */ while (recptr < 16) { wrhexchar((*(charset + charcount) >> 4) & 0xF); wrhexchar(*(charsetx5F; } /* blank out the count characters beginning at row, column */ blank(row,column,count) int row,column,count; { int i; curpos(row,column); for (i = 0; i < count; i++) putchr(' '); } /* get a Y or N response */ yesno(row,column) int row,column; { int ok_answer,ans_retrnd; char ans_entrd; ok_answer = FALSE; while(ok_answer == FALSE) { curpos(row,column); putchr(' '); putchr(BKSPC); reverse(); ans_entrd = (inpdchar() & 0x5F); nreverse(); if (ans_entrd == 'Y') { ans_retrnd = TRUE; ok_answer = TRUE; } if (ans_entrd == 'N') { ans_retrnd = FALSE; ok_answer = TRUE; } } return(ans_retrnd); } /* display main menu screen */ mainmenu() { header(); /* clear screen and display program title */ progdesc(); /* display program description */ arraysource(6,9); /* dis + charcount) & 0xF); parchar = ((parchar - *(charset + charcount)) & 0xFF); charcount++; recptr++; address++; } wrhexchar(parchar >> 4 & 0xF); /* write parity character */ wrhexchar(parchar & 0xF); wrhexchar(0xFF); /* carriage return */ wrhexchar(0xFE); /* linefeed */ } wrhexchar(byte) char byte; { if (diskfull == TRUE) /* if disk already full */ return; if (byte == 0xFF) *(iobuf + bufcnt) = 0x0D; /* carriage return */ else if (byte == 0xFE) *(iobuf + bufcnt) = 0x0A; /* linefeed */ else if (byte == 0xFD) *(iobuf + bufcnt) = ':'; else *(iobuf + bufcnt) = *(trantab + (byte & 0xF)); bufcnt++; if (bufcnt == 128) /* if buffer filled- write to disk */ { wrhexrecord(); /* write hex file record */ } } /* write the 128 characters in iobuf to file */ wrhexrecord() { areg = bdos(21,writfcb); if (areg != 0) /* if disk full */ { play source of memory array */ curpos(8,4); putst("Do you want to:"); curpos(10,9); putst("1 - Read the systems tracks into the character set"); curpos(11,9); putst("2 - Read a file into the character set"); curpos(12,9); putst("3 - Edit the character set"); curpos(13,9); putst("4 - Write the character set to the system tracks"); curpos(14,9); putst("5 - Write the character set to a file"); curpos(15,9); putst("6 - Write the character set to the font RAM"); curpos(16,9); putst("7 - Exit the program"); } /* main menu choice line */ mnchoice() { curpos(18,14); putst("Enter your choice (1 - 7)"); } /* display program description */ progdesc() { curpos(3,4); putst ("This program allows you to edit a character set in memory and"); curpos(4,5); putst("store it on various media."); } /* clear screen and print screen header */ header() { clrscn(); /* clear screen */ curpos( diskfull = TRUE; curpos(24,15); putst("Disk full on file write - press any key to continue."); inpchar(); blank(24,15,53); return; } bufcnt = 0; #asm .z80 ld hl,iobuf; fills with control-Z's ld de,iobuf+1 ld bc,127 ld (hl),1ah ldir .8080 #endasm } /* restore read fcb to old value */ rstfcb() { int i; for (i = 0; i < 15; i++) /* save old read name */ readname[i] = oldrdname[i]; for (i = 0; i < 36; i++) /* save old read fcb */ readfcb[i] = oldrdfcb[i]; return; } /* converts string pointed to by parameter to upper case */ upcase(strgptr) char *strgptr; { int i; for(i = 0; (*(strgptr + i)) != 0; i++) upchar(strgptr + i); } /* convert single character to upper case */ upchar(charptr) char *charptr; { if (((*charptr) >= 'a') && ((*charptr) <= 'z')) *(charptr) = *(charptr) & 01,15); /* position cursor */ putst(TITLE); } /* position cursor to (row,column) */ curpos(xcord,ycord) int xcord,ycord; { putchr(ESC); putchr('='); putchr(xcord + 0x1F); putchr(ycord + 0x1F); } /* clear screen */ clrscn() { putchr(0x1A); /* clear screen */ } /* send dim screen characters */ dim() { putchr(ESC); putchr(0x29); } /* send bright screen characters */ bright() { putchr(ESC); putchr(0x28); } /* reverse video */ reverse() { putchr(ESC); putchr('j'); } /* non-reverse video */ nreverse() { putchr(ESC); putchr('k'); } clchrset() /* clear character set */ { int i; for (i = 0; i < 2048; i++) charset[i] = 0; } /* input a character from the keyboard */ inpchar() { char byte; byte = 0; while (byte == 0) byte = bdos(6,0xff); return(byte); } /* input a character and display it */ inpdchar() { chart !| !9s#r!!9n&t|E .9*6&} !9n&u|j .9*6&# } !9n&v|… .9s !9n&|¤ .9^#V!tç !|ʸ !9s !9!9n& },!9n&͡--!9n&!9n&t| !9n&!;M&*6& !"Q5."O5} !"V5"T5.}2S5l9s&|X &Qu[ !| *Q5*V5*O5*T5͜,!9Z-}!9X*&s|² *T5|ʨ *T5+"T5#!}2S5> &t| *V5 t| *V5#"V5+!}2S5> &v| *V5| *V5+"V5#!}2S5> &u|3 *T5t|) *T5#"T5+!}2S5> &|u *N5&!X5*V5))))*T5*N5&}!"E5͒> &|· *M5&!X5*V5))))*T5*M5&}!"E5͒> &| f!"E5͒> &| O!"E5͒> &| H!"E5͒> &|3 A!"E5͒> &|R A!"E5͒> &|q ͌!"E5͒> &| A!"E5͒> &|¯ ͸!"E5͒> &| !"E5͒> &|> !"E5͒> &| *6& byte; byte = inpchar(); pputchr(byte); return(byte); } pputchr(byte) char byte; { if ((byte > 31) && (byte < 127)) putchr(byte); }  clrscn() { putchr(0x1A); /* clear screen */ } /* send dim screen characters */ dim() { putchr(ESC); putchr(0x29); } /* send bright screen characters */ bright() { putchr(ESC); putchr(0x28); } /* reverse video */ reverse() { putchr(ESC); putchr('j'); } /* non-reverse video */ nreverse() { putchr(ESC); putchr('k'); } clchrset() /* clear character set */ { int i; for (i = 0; i < 2048; i++) charset[i] = 0; } /* input a character from the keyboard */ inpchar() { char byte; byte = 0; while (byte == 0) byte = bdos(6,0xff); return(byte); } /* input a character and display it */ inpdchar() { char{ 3bk9s#r!t|{ : !9^#Vs#rbk+ !*6&))))!9^#V"/5!F*6&))))!9^#Vn&"-5͏s' !.͜,͍ ͛*6& t|ʣ {*6& t| *6&` *6&*6& t| ͋ͫ;!9s#r!9^#V!t|x!9^#Vs#rbk+ !9s#r!9^#V!t|N!9^#Vs#rbk+&!X5!9^#V))))!9^#V*M5&};!9s#r!9^#V! t|wë!9^#Vs#rbk+Ã!9!F! 9n&))))!9^#Vn&}!9s#r!9^#V!t|ʘ!9^#Vs#rbk+& t|=!X5!9^#V))))!9^#V*M5&}d!X5!9^#V))))!9^#V*N5&}!9!9n&)}3!F!9n&))))!55!9s#r!t|!9^#Vs#rbk+æ!*6&))))!9^#V"/5!55!9^#Vn&"-5͏sö;!9s#r!9^#V! t|6!9^#Vs#rbk+!9s#r!9^#V!t|i!9^#Vs#rbk+A!X5!9^#V))))!9^#Vn&*N5&t|ʲ!9!9n&)Su}V!9!9n&)}V!9^#V!9^#V!9n&}#3*S5&s|*T5|*T5+ MOV E,M INX H MOV D,M POP H DAD D MOV L,M MVI H,0 POP D MOV A,L STAX D LXI H,3 DAD SP LXI D,19 MOV M,E INX H MOV M,D XCHG C219: LXI H,3 DAD SP MOV E,M INX H MOV D,M LXI H,0 EXT CCGT CALL CCGT MOV A,H ORA L JZ C218 JMP C220 C217: LXI H,3 DAD SP PUSH H MOV E,M INX H MOV D,M DCX D POP H MOV M,E INX H MOV M,D MOV H,D MOV L,E INX H JMP C219 C220: LXI H,edbuf PUSH H LXI H,5 DAD SP MOV E,M INX H MOV D,M PUSH H XCHG DAD H DAD H DAD H DAD H POP D POP D DAD D PUSH H LXI H,3 DAD SP MOV E,M INX H MOV D,M POP H DAD D PUSH H LXI H,edbuf PUSH H LXI H,7 DAD SP MOV E,M INX H MOV D,M MOV H,D MOV L,E DCX H PUSH D DAD H DAD H DAD H DAD H POP D POP D DAD D PUSH H LXI H,5 DAD SP MOV E,M INX H MOV D,M POP H DAD D MOV L,M MVI H,0 POP D MOV A,L STAX D JMP C217 C218: LXI H,edbuf PUSH H LXI H,0 PUSH D DAD H DAD H DAD H ̔ T44Tx MQJEXITPS T444 MJCCUDIVPUD44U 1RCCGT`D44X 5U1RCCNEДT444 =JCCGINTS T455T( U1RCCUGTPQ`T45TX a=JSETEXITTU U5E$U =NCCONSTӒSd44X 1%JCCLDDRPS d44 RXSTARTVЌ`Ud4#(a9EDATAMM 9w[łf0[6'c@1+ ̀eR [6,&o>&Q B2]jL%֯>ωXBhb[JG)a  $/3E$7Fu B2Z.XG-+0ri6 EK-VdZ-VdE>,ՙ^lYFru]gԙ3]gԙ4!K>& `F>*Y!"*VR7(dZ"VR7+0DT hجPá@1L4eQ%*@( IhؤBk4 p\W)LdAh&,(8{h\Pp 0Y,Vmh`X7 <9# ¶)XV^O±YVNe $uL@+(xX09,M|M!9clp!^"|L! 9^#VMDMi#!bt͜!|YM!et͜!\M!|hM`i!&"||M`i`i|ʏM! 9^#Vcͯl!9M|ʩM!9clpi#!ht͜!|M!!&"|M! 9^#V͖NDMi#!kt͜!| N!nt͜!ͱN!|N`i`i|.N! 9^#Vc!qt"|^Nͯl!9͖N|UN!9clwq.N!tt"|ʎNͯl!9͖N|ʅN!9cl͈q.N!! 9^#VPDMi#!wt͜!|N!yt͜!|N!{t͜!|N!~t͜!ͱN!|N`i!t͜!|O`i!t͜!|O`i`i|-O! 9^#Vc!t"|ʅOͯl!9P|TO!9cl! 9^#VDl|qO9DltO!|Oq-Oͩq-O!t"|Oͯl!9P|ʬO!9cl! 9^#VDl|O9DlO!|O r-Oq-O!t͜!|O!t͜!ͱO!|QPͯl!9P| P!9cl! 9^#VDl|=P9Dl@P!|KPq-O͙q-O!t͜!|oP!t͜!ͱrP!|Pͯl!9P|ʔP!9cl! 9^#VDl|±P9DlôP!|ʿPq-O͹q-O!! 9^#VͱQDMi#!t͜!|P!t͜!P!|Lñ G!ڰdda -g Cp-PpiW@pQ4V%0B]l4X"B(84-8(%@rҰ0r 9it !"']Z\ud &GW bb ux"GY@* duGhjzlv$GK*" t!Ob:,v!*GLb:vh !"")G`b"Jt!"Lbbu(!*GZbr,u"PzrJtu4 !'Mzrv!GlrJrt! Gn@jv,!$Gsj:,wGs@jb,w*Gujzt "*Jw"Gwr**Lw)"J*r$w #!B2dl&Gkš G`b"/s crunt2 chrnw1 c2rt chartmp/n/y/e:ccstar ddt f100,a000,0 ichartmp.com r d6f1e s6f1e 24 . d6f1e g0 save 114 chargen.com o éMIj"&,48PAGE\ LINE\FC= FL= COL\MAR\RELINSERT\ONdecimalLINE\SPACING\Z=>68LʲCڵC*7["7`iͰLzL͚D*7[F*7"7"7zL͏GïC*7"7RDͼL D  Q`i!t͜!|'Q!t͜!ͱ*Q!|6Q`i`i|IQ! 9^#Vc!t"|yQͯl!9ͱQ|pQ!9cl qIQ!t"|ʩQͯl!9ͱQ|ʠQ!9clqIQ!;!9! 9^#VR}i#ͳ|Q.9n&9*'n&!|R!|R!9n&9!9n&|)R! 9^#Vc!+"|}Rͯl!9R|PR!9c! 9^#V9oc|tR!t# lzp)R!-"|Rͯl!9R|ʤR!9c! 9^#V9oDMl͊p`ic|)R!3Sp)R!9! 9^#V/TDMi#ͳ| S`i*'n&!|4S!|4S!|4S`i`i|GS! 9^#Vc!*"|wSͯl!9/T|nS!9cl͚pGS!/"|Sͯl!9/T|ʞS!9cl! 9^#VDl|»S9DlþS!|SͻpGSͫpGS!%"|'Tͯl!9/T|S!9cl! 9^#VDl|T9DlT!|!TpGSpGS!!t"|ʞT!9^#V/T|XT|!!9^#V!^#V|oTͯl!9^#Vc!9^#V!Lq!9^#Vqc!!t"| U!9^#V/T|T|!!9^#V!^#V|Tͯl!9^#Vc!9^#V!Lq!9^#VV!^#V|Ilͯl͟l! 9^#Vc! 9^#V!^#V|:Il͟l! 9^#V9oDMc|zI! 9^#V!p |zI! t# !DM! 9^#V!I`ic|ʜI!3Sp! 9^#Vqc!;!9! 9^#VsJ}!?"|I9n&3&|I!9^#VcDMQm!9^#VsJ|J!9^#Vc!9s#rt# !9^#VsJ|`J!9^#Vc!9^#V!3;!9!9^#V>K}!Jt"|©J.9n& 9!9n&|J! 9^#Vc!9s#r!..9^#V`r!9>K|J!9c!Mt"|J.. DM`r!+`r! 9;!9!9^#VK}!Pt"|tK.9n& 9!9n&|ʌK! 9^#Vc!9s#rQm!9K|ʸK!9c!St"|šK.. DM`r!++`r! 9! 9^#VͪLDMi#!Vt͜!|*L!Yt͜!-L!|9L`i!|"|ML`i`i|`L! 9^#Vcͯl!9ͪL|zL!9clpi#!\t͜!|ʘL!!|"|`L! 9^#V,MDMi#!_t͜!|L`i!^"|L`i`i|L! 9^#Vcͯl!qc!!t#|ʓU!9^#V/TDM!+.9! 9^#Vbk##^#Vs#r|MU`iPU!|dU!9^#V͠,gU* '`r!9^#Vbk##!9^#V!s#rs#rͳ|ʪU!-"íU!|U!9^#V/T|U!9^#Vc,q!ͳ|U!*"U!|ʈV!9!9^#Vs#r/T|V!9^#Vcbk##^#V!n&!|@V!|JVcsRV!t# !^#Vbk|qV9^#V!s#rbk##^#VO/ͱͳ|ʟV!&"âV!|ʄW!9!9^#Vs#r/T|Vbk##^#V!ͱV!|V!t# !!^#Vbk|=W...9^#Vbk^#V!`r!!9^#Vbk##^#V!n&Hs#rbk##^#V!Yv |vW!Yv!9^#Vbk##^#Vs#r!Yvs#r~W!t# !*'n&|¼W!9^#V/T|ʳW!9^#Vc####n&a+||_.)9^#V`is#r!)9^#Vbk##`i##^#Vs#r!)9^#V!`i##^#V!n&Hs#r!)9^#VͶj!9n&!+9^#Vzb!)9^#Vbk##^#V!n& %9`i|_##9k DMÓ_!|-a!)9^#V`is#r!)9^#Vbk##`i##^#Vs#r`i##^#V!n&!|_!|_!|_!| `!)9^#V!s#r!%9`i##^#V$>####n& |E`!)9^#V!s#r!%9`i##^#VO/|ʉ`!)9^#V!s#r9n&!+9^#Vzb!%9`i##^#V!n&++++|`..`i`r!)9^#V!`i##^#V!n&Hs#r9n&!+9^#Vzb!%9!)9^#am. CHRNW2.à - Thi i th assembl modul tha interface t thos in IO.MAC. IO.MAà - Assembl languag routine t d syste trac I/Ϡ an ROM SENDEN (sense density). CHRNW3. - Thi modul contain som routine tha woul no fi i th mainlin sourc fil d t a apparen runnin ou o spac i th compiler ( sa apparen becaus th compile never generated an error message, it just sort of hung) CHRNW4. - Thi modul contain th routin tha input fil name I i i separat fil fo th sam reaso a state i the description of CHRNW3 above. CHRNW6. - Thi routine displays the Osborne copyright message. CHRNW7.C - This routine inputs a string. CHRNW8. - Thi i th modul tha doe syste trac I/O I contains the system track and font ram I/O menues. Afte th abov submi i run CHARGEN.CO wil b th charge program. .pa I orde t remov th Supersof Copyrigh messag tha display fo spli secon a th beginnin POP PSW LXI H,2 PUSH H MVI L,22 PUSH H MVI L,1 PUSH H CALL putbox POP PSW POP PSW POP PSW LXI H,22 PUSH H MVI L,77 PUSH H CALL curpos POP PSW POP PSW LXI H,2 PUSH H MVI L,22 PUSH H MVI L,1 PUSH H CALL putbox POP PSW POP PSW POP PSW LXI H,24 PUSH H MVI L,12 PUSH H CALL curpos POP PSW POP PSW LXI H,66 PUSH H MVI L,23 PUSH H MOV L,H PUSH H CALL putbox POP PSW POP PSW POP PSW CALL bright LXI H,22 PUSH H MVI L,2 PUSH H CALL curpos POP PSW LXI H,C1+965 XTHL CALL putst POP PSW LXI H,23 PUSH H MVI L,5 PUSH H CALL curpos POP PSW LXI H,C1+975 XTHL CALL putst POP PSW POP PSW RET ENTRY putbox putbox: PUSH B CALL grfon LXI D,0 MOV H,D MOV L,E DAD SP MOV M,E INX H MOV M,D XCHG C267: POP D PUSH D PUSH D LXI H,10 DAD SP MOV E,M INX H MOV D,M POP H EXT CCGT CALL CCGT MOV A,H ORA L JZ C266 JMP C268 C265: LXI H,0 DAD SP PUSH H MOV E,Mo th program us SID t modify the string: Type in SAVE Type in SID CHARGEN.COM Th progra wil displa th siz t th progra an TP star address. Type in dXXXX Th syste wil displa bloc o memory You'l b abl t se th copyrigh message (O course i you'v mad substantia progra modifications th messag migh no b i thi block) I orde t remov th displa o th message typ in: sXXXX then 24 then . I yo no redispla th bloc (dXXXX) you'l se tha th "S i "Supersoft ha bee replace b "$" Th CP/ functio that prints the message stops printing when it encounters a "$". To save the program type control-C. Then, Specif CHARGEN.CO a th fil name beginnin he addres o 100 and endin addres o YYYY. Thi save th charge program Th Supersof copyrigh messag wil no no b displayed Thi i include i th abov submi V!s#r9n&!+9^#Vzb!%9i#!&!9!&#sͫ*!u͜!|ea!u# Åa!!& s!&##* 's#r?)!+* '?)!)9^#V!*89s#r!)9^#Vbk##!+9^#Vbk^#Vbk##^#Vs#r!)9^#V!s#r9n&!+9^#Vzb!%9!"9ld|@b!)9^#Vbk!+9^#V!!-9^#V!s#rs#rs#rYb!u# !++`r!9n&!+9^#Vzb!%9!9^#Vbk##^#VDM!9^#Vbk+|b!u# `i|ʵb`is!9^#V!s#roc!|c!u# `i|b`is!9^#V!s#rocbk++|:c!u# `i|%c`is!9^#V!s#roc!|oc!u# `i|]c`is!9^#V!s#r!9^#Vbk^#V|ʙc!*8!9^#Vbk^#V͘!9^#V!^#Vbk|ºc##9^#V####n&A+|4d`i##^#V!n&lJdiJd`i####^#Vl!uI͂F!uI!9^#VQm!9^#Vd|‹d##9^#VfÎd!|ʮd!+.9^#Vbk^#V`rd!9^#Vmg|d!..9^#Vbk^#V`rd!!;bk9s#r!+"|d!- procedure. pla th siz t th progra an TP star address. Type in dXXXX Th syste wil displa bloc o memory You'l b abl t se th copyrigh message (O course i you'v mad substantia progra modifications th messag migh no b i thi block) I orde t remov th displa o th message typ in: sXXXX then 24 then . I yo no redispla th bloc (dXXXX) you'l se tha th "S i "Supersoft ha bee replace b "$" Th CP/ functio that prints the message stops printing when it encounters a "$". To save the program type control-C. Then, Specif CHARGEN.CO a th fil name beginnin he addres o 100 and endin addres o YYYY. Thi save th charge program Th Supersof copyrigh messag wil no no b displayed Thi i include i th abov submi "|$e!9!9^#Vs#rd*'n&d|9e3*'n&|‰e*'n&|]eHe*'n& H|}e9sÒe!9sÒe!9 s!9s#r*'n&!9n&^f|fDM0|e`i9՗e!|e!0Ze`i HDM!9!9^#V9n&`is#rÝe!9^#V!Ϳ|@f!9!9^#Vs#r! 9^#Vbk!9^#Vs#r3!9n&͢DM!9^#V! |ʦf`i0|ʡf!0.9^#Väf!`i0|ʾf`i9՗f!|f`iA|f!A.9^#V!f!f!!'"|gbk9s#rDM|Qg`i|/giDM!9!9^#V!e.`is#rg!9^#Vbk!9^#Vs#r|9;!""|Žg9!9!Zs#rbk#|¹g!u# 9*J(!9^#Vs#r!L(s#r"J(!9s#r9DM*'n&|h*'n& h!|ʇh"h`i!9n&}g!9^#Vs#r!՗|fh!u# !""ͱ |ʇhBh!9}|h.9i}h`is!9^#V*H(s#r9^#Vs#r*H("H(!9!9^#VZs#rbk#|h!u# !9!9DM!9^#Vs#rbk+`io.`r!.pl`r!.ql`r!.rl`r!.sl`r͟l!+.9^#V`r!9^#V!ozp!.(.`r!.).`r!.tl`r!.ul`r!.vl`r!.wl`r!.xl`r!.yl`r!.zl`r!.{l`r*'DM!"'.9^#V! G!9^#V͞#!/G!9^#V͞# `i"'*5'&|wr*l(*r( zr!|ʓr!++*r("l(r*8'&|ʪr*n(*t( ír!|r!++*t("n(r!9^#V!9^#V!9^#Vr*6'&|!9^#V!AG!9^#Vbk|s!9^#V͞#!9^#V!|=s. G!9^#V_s!9^#Vbk|_s! G!9^#V͞# !9^#VDM##^#Vbk|ʳs`i##`i##^#Vbk^#Vs#r`i####`i##^#V!n&Hs#rûs!Ov# else{defaultcase:case()whileMissing whileContinue without matching loop.#endasm<<=>>=Nonsensical pointer operationmissing ':'||||&&&&|||=||^=&&&=&&==!===!=<><=>=<<>><=>=<<<>>>>>=<<=>><<>><<Don't add pointers++--sizeofNot a pointer or arrayCan't take addressToo many &'n&}|h!9;DM!|.ii3!|=i! 3!|Li! 3!|[i! 3!|ji! 3!|yi!3!^f|i!0`iZDMbk9s*'n&!^f|i!9n&#}ʗi!|i`i)))DMÜi`i3!;G!*8!9^#Vbk^#V͘!9^#Vbk##^#VDM$>####n&@|@j!!v`r`in&+++|cj`i####n&fj!|ʙj!+.9^#Vbk^#V!`r!.el`rôj!.9^#Vbk^#V!`r!9^#Vbk##^#V!n&!|!|!9^#Vbk##^#V$>####n&@|k!v# !+.9^#Vbk^#V!^#V*"'Z`r!.l`r!9^#Vbk##^#V$>####n&@|uk!.! v`r!9^#Vbk##^#V!n&+++|ʰk!9^#Vbk##^#V!n&ók!|k!.l`r!DMk!DM!.9^#Vbk^#V!`rl!9n&| l!fl!g!`r!9n&|5l!h8l!i!`r!9^#Vbk##^#VDM|]l$>####n&|yl!`in&!|ʕl!|šl!!!.l`r!. l`r* '*"'Z""'!. l`r* '*"'""'!. l`r!..s->Can't Subscript]Not an array or pointer]Not close enough to a function++--Badly formed function callsprintffprintfprintfcharint))(UndefinedBad expressionCoerseCoerseCoerseCoerse()string space exceededstring size exceededstring space exceeded0bad loc type0Bad stackOperation on incompatible pointersBad usage!DM+n&s9!g|s"|s#r`in&Iw|ʞv`iÉv`in&|ʺv`in&-ͱýv!|v`in&Iw|‰v`in&|v!g|!9^#Vs`in&Iw|-w!g|!9^#Vs#r`in&}`in&|v!g|!9^#Vs#r sÉv!9^#V!|gw!9^#V! ͱ!!9s#r! 9^#V!9^#Vn&|w! 9^#V!9^#V! 9^#V9^#Vs#rn&͢}yw!DMl9`in&s#r!9^#Vs#r!ʗ|ʛx!9s#r! 9^#V!9^#Vn&|Yx!9^#Vn&ͧ|2G6pvtLp::2J:v2:Z1$24: 7«p#8rs(%÷p%8xss2'vpp6sp87p2726:+2_5:^5y)[-'Cq:6 q\!4~6"qqv!Cë:!2p ë:'C!7:72:qv!7ëhq2'́qhqFq!7I*7yTJvM!7xVKJqJy£JqJ!"6!7xH*7͈C͟IҖqqJp:C6G-$ͱ$!8.͔ 2':D6:C6G-ôq8q8>25G*B6|!8s:C6s$:Y5r!8͔$:626n$:!4$r,p2JZ1%͹$*+?1*`5"6"6*6~!͔$a#+w#͟$~ʂrͨrږryrsږrGͤ–rxG8x͔$}!+y)8ͩ$8@rկ ®rsr.r#r rͤ7rr rrr>  r~#Vbk^#Vs#rs#r 9n&}!9n&|G. .9^#V]#|G+!9n&!9^#V]!9^#V!b|ʁ!9n&!!9^#V!!n&!|ʬ!|ʬ!|"!9^#V!#DM^#VDM##^#V`i####^#V|!9^#V<#|+`i##^#Vs#r9`i^#Vs#rs#r 9n&}!!"ؓ!!9^#V!!9^#V]#|Q+!9^#V!9^#V]#|n+!!9^#V!!n&!|ʝ!|ʝ!|Β!9^#V!#DM^#VDM##^#V|ɒ!9^#V<Ꙗ!""-22/ *SuperSoft C Copyright 1981 Run Time Package V1.1.0 $ !|g}o}G)}GzW{_ |1ߖDivision by 0 $!V|RߖDivision by 0 $͛DM!> l}o|g)o怄g=ʊ)oa|gz|zʯɷ}o|g!-ɯ{z!,ɯ}|!,ɯ{z!-ɯ}|!-DM!>) =)|/g}/o#}o|g!99[9"G!!}/o|/g|g}o^#Vs#r}o|g{z!-}|!-{z!,}|!,|g}o!9"C"E!*C*E`i"˜#Θʿ*DM`iDMo&!o!9^͓Ss* &|V K * ͙DM}2 `i*|`i|X.;@ %`i|•#.cl$pP* ܄DM*|* ͼs*e #"e `i|%!9!Aͥs#r9s#r͘!9^#V!9^#V!9^#V!|^$% ;KW* ͙DM*|9`i|1͂P9@ * ͙DM*|\`i|<*} d*v͸|ʄ!d͹Ç!|ʔ! ͉ !9*} s#r* ͙DM*|`i|*} #"} +`i}á*} #"} +s;* &|3!9!DM}͘!9* ͙s#r!9^#V!|19s!9^#V!0|Q#9^#V!9T!|t`i 6!9^#V!DM!9^#V}2 &|ʒ`iO3`i3!9^#V܄DM*|ʷ`i`i|`i|. `i|`i W!|ʚ`i!" " "܋}2 " " }2 }2 "_ "c "e "g !͹"] ͬ!͹"a * |Y*a *] * dͮ\!|u*] * d"a c*] *a ͥ"a !*a ͘"a *] #"[ #" !͹" "} ! DM͹#|##`i͘DM`i|²!͹!9^#V!9^#Vͮ|!9^#V҄*̓ͩ*8|ʜ**Ì*ͩ:9ʳ*>EDͿDNo Fatal error(s) Warning(s):7Gͩà)>+!*A++%+REPT/I;bk9sØ !9s*_ ͮ|ʬ &3!~:| *[ n&DM!9!l'}`i!|!9n&+++|•̀'!̀'|ʕ!*Ï bk+|!|/!Y|ʕÏ !|H!!|ʕÏ !|a!|ʕÏ !|—!9n&|•*!#.2l *9Ï !|!9n&|•#.l *9!.l *9Ï !|!|!|!|!|!Rn|ʕÏ !|.!.|ʕÏ !|R!|R!|R!|!.| !9n&!|”!̀'!̀'|ʕ!*Ï bk+|•`i|ʲ`iIõ!|ʕ!X'!Il̀' *9!5|ʕÏ !|!|!ͫÕ!|!|ʕÏ !|?!/|ʕ!*Ï !|u!9n&|•*!#.l *9Ï !|ʕ!X'++++|ʕ&3*_ ͮ|ʩ&3!Y| !ͭ8| !l'DM!9!l'}!9!l'}`i!|!|!9^#V* DM!" * &|R* &|,͂P* F ! l * |R! l *c F `i" |qgP* F ! l ͂P! ! ! ;!M ! ! ;!9 !$ !) ;!/ !/ !4 ;! !6 !: ;! !; !? ;!i !F !M ;!N }2 |!d" !Q ͩ" !T !}T#|)1!Y ͩ"W !^ }2 !f }2 !i }2 !m }2 !s }2 !x }2 !{ }2 ! }2 ! }2 ! }2 ! }2 ! }2 ! !}TDM#|n!" ! |! !|9!"W ! ! }! ! }!M !9 ss!9^#V!}TDM#|f! 9^#V {!9^#V!9^#V}!9^#VDM`i!9^#Vs#rbk+n&}|ˆ9!9^#V!}TDM#|!9 !9  9! 9!9^#V!}TW!9^#Vn&|.!9^#Vn& W1!|`!9^#Vs#rbk+!9^#Vs#rbk+n&} !9^#V!s9DM!9^#Vn& |ʴ!9`i!9^#Vs#rbk+n&}{!9`is9  9! l !F !.@ !F !.@ !F ͂!9n&!|!9n&|7̀'!̀':!| `i!|S!JDMa!|a!KDM!*!#+ *9Ï !| !~:| !9n&|¹̀'!̀'ü!| !+X'!,`iͥ!̀' *9!*Ï bk+| !n| !Ͷ7| !3| !̀'|<##9n&?!| !9n&!|ˆ!*!#.-l *9!. l *9Ï !|!#.-l *9!. l *9!##.el *9Ï !| !*!#. l *9!.Hl *9Ï !|D!n| !l'DM!9!l'}!9!l'}!9n&|m!9n&)p!|ʅ!9n&È!| !̀'bk+|!*!##.@! *99n&| #..,.l'ͥ!̀' *9Ï bk| !*!*!9n&| ..,ll'ͥ!̀' *9Ï !|†!9n&!|g!|!9n&|*!*Ï !|Ÿ!ͭ8| Ï !| !|!9n&+|#9n& !| !#.l *9!#..̀' *9P;!DM#9s#r!9! 9^#Vn&}|< & ? !|U !9^#Vs#r &|y #9s#r9^#Vs#r!9! 9^#Vs#rbk+n&} |ʹ `i 6!9n&DMy !9^#V`i63!9n&0+| !9n&9*!!9n&| * |, !9n&* ͼ*|8 W! ͉ 8 !9n&2!9n&!9n&|_ . ! !9n& !9^#VDM`in&@ |w !9^#V *c |£ *e "c gP*e F ! l !9^#Vl ! l ͂P* #" * DM!" *e F ! l !9^#Vl ͂P`i" * DM!" ͂P!9^#Vl `i" !9^#V6 ͂PpP!9^#Vl !9^#V!|q !-@ !9^#VODM{ !9^#VDM!9! ws#r|ʛ F ! w!0@ !9^#Vl !9^#VF Out of string space code generation errors, 1st in line code gen errs ***-zC-extEXT-entENTRY-pfxC-rh-rtc2.rtm-ofile-o-q-org-org+silent-h+oc+prgl+old+t+co+l-x-g+bak+a-n+asm-asmc2.rhc2.rtC Optimizer VOutput file error ****** ******: C:9<2828!*A+%+!+.l *9Ï !|+!|;!<| Ï !|•!_2|ʂ!ͩ3|ʂ!9n&+++|‚̀'!̀'Å!| !*Ï !|®!| Ï ! | !9n&|#9n&+|##̀'*!| !.1.̀' *9Ï *_ ͮ|&3!9!l'}!9!l'}!l'DMbk+|4!9n&++++|¨#9n&|ʏ!9n&|ʏ!9n&2Ò!|ʨ!̀'ë!|ʖ!l'DM!|!|–!+X'!l'!̀' *9!+.l *9!#++̀'++ *9!#+ *9Ï !|–!9n&|k#9n&++++|k.l'2n!|ʖ!##++̀' *9!*Ï !| !Ͷ7| !3| !Y| &3!9^#Vl'|!!9^#Vl'!| !DMB!|!DMB!|,!DMB!|=!DMB!`ibk++|W!|v!9^#V!.el *9Ã!9^#V*!9^#V!. 9^#V̀' *9!9^#VDM#*_ ͸|!l'!|}`i#͘0|!.l *9`i#!9^#V!|!.v!|"!!w!|/!!t!|!|!9!9^#V;n&͓}&3;!9!9^#VDMl'}&|ʡ&Wä!|ʯ!3`i#l'|`i#l')W!|!3`i##l'|`i##l'W!|!3!##9n&̀'O *9`i#l'|s`i##`i##X'!,`i##l'ͥ`i##̀' *9`i#!.l *93!9^#VK/!9^#V*_ ͸|ʵ!!9^#VK/|!!9^#Vl'DM!9^#V/| `i| !9^#Vͯ/ !|ʞ!!9^#Vl'!|~ !|~ !|~ !|~ !|~ !|~ !|~ !|~ !|~ !|‚ !!!9^#Vl'|ʡ !!9^#Vs#rl'DM!#| !9^#V!9^#VX'!! 9^#V̀' *9!9^#V*!|0)!9^#Vs#r9^#Vs#r^#Vs#r(`i!9n&s#r`i! 9n&s#r! 9^#Vs#r*] *_ ))DM! 9n&}`i!9n&}!9^#Vs#r9n&|)͡+́ *_ |ʼ)͜*ë)* c!͹"} * "} !}2 *_ #"_ *a +͸| *́ *_ *a +͸| *͜** &|@*gP!'?l ! 9^#VF !/?l ! 9^#V#*] ! 9^#V))DM! 9n&}`i!9n&}!9^#Vs#r* &|ʚ*!6?l ! 9^#V#͂P*_ |¯*!;?͉ *] n&*[ n&* DM^#Vͺ?!*!9^#V*_ ͸|+!H?͉ gP!9^#VF !S?l *_ F ͂P* &|M+gP!V?l !9^#VF !^?l !9^#V#!e?l *] !9^#V))DM####*] *_ +"_ #))`iͥ####S* &|ʟ+!9^#V#͂P* &|¸+*_ û+!|+!l'|+!l'|+#*hm!DḾ-/,͓.͓-͓|*,`iͭ|+!j? hm;* &|E,!r?l !9!9s#rs!9^#V*_ ͭ|,},!9^#Vs#rW,!9^#Vl'|l,#9!9^#V̀'s#rDMò,`i*_ ͸|,!9^#V*!9sl,L;|,̀'!9^#V,!|ʯ,l,`"rn/gdaQ@1p5"rn"dD7E}`jʨ`bnU7[@!4iՅU $i`EW!&0} 2X0r^dBkB K2BOV%XB3k@ Օg,(eg 4>-YW( !%Y!%Yͧ Ň}آ0r^![B K2TBK22+rAxFVjk #0X,( ecaPF $BK2Mr@ɸLhBFHji#0X,u@(9/Q89/Vhc˭!0r^%Y!%Yͫ@P9|,V(D @Ͷ`EfbB r@b3Du\ r^f0"Z.cs rb3Du\Pr/7 Fr -ˬC|g1!.Q(9/αKD2(ef6<^-YFru !.Rpg#Vã `r^09r@@(9/7 4rnx;Ţ9N!G%Y!%Ys `rb3BK2TB K2g@VUaQ9re`#9:vBK2TBK2R D !%Y)hK2#9:v":/[%PX@˔BK2#+8Nb3BK2&\jª(#+5D(#+8Y@ՕZA(P^napa 9/Q ,9/h|Z`0&3;* &|-!?l !9!DM}*_ ͭ|y->-`i(-L;|V-l'bY-!|8-!9.n&͓}8-&3;* &|ʗ-!?l *_ |ʰ-!X'Wó-!|-͜*́ ×-bk9s9s#r!9!9^#V2(s#r*_ ͭ|.!9^#Vs#r!9^#V*_ ͭ|*.!9^#Vl'b-.!|-D.!9^#V*.!9!9^#V̀'s#r9sDM*_ ͭ|5..`ii.̀'!9^#V|ʜ.L;ß.!|y.X'l'!9^#V̀' *9y.&3;* &|.!?l *_ |"/bk9s*_ +DM`iͭ|"/!9 ~:n&͓}.&3!9^#V!aJ!9^#V!J!9^#Vl'|b/#!9^#Vl'+|Ÿ/##9^#Vl'++++|Ÿ/##9^#Vl'iâ/!|ʫ/!!!9^#Vl'!|/!|/!!!9^#Vl'!|0bk+|0!|0!|0!|0!|0!!!9^#Vl'!|Q0!|Q0!|Q0!|U0!!|l0!9^#V͘0!9^#V3|ʋ0!9^#V 0!9^#V/!9^#Vl'!|0!|0!|0!|0!|0!!|0!9^#V 0!9^#V1| 1!@7  e>-YVBOV(K2MsFYLhBL; !A!(]g1B:FFruPxFVu(68!B%Y!E%Yͩ`:>!VU}@7 #2|Z(8 9re`#9:(0^nb5ܢ8r/7 Fr1f0} @˔#+'1ý@r^ Ac(e`Us-YFrj@Xͨ/efe`#9P`xFV˭BkBK22fՕ{/`4Y [hJIqPJhh*8)hh豛PXehiQLhiP\hiȱ@<hi걓hjꑗjhj@|!誈i1**h) P p*i԰ *j *@H9*Q0LH))֠<ȫ *Q,x qxh@jI[ʨ誈iJ8hi걓hjꑗjhj@|!誈i1**h) P p*i԰ *jUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUԕS e5E$T%M1A"ISUPPET`d4Dt%M]!%RTOUPPE`EUE8AUQ !GETSU`d45TtUQ "MOVMEMTDDE(MQ56XMAINQ `dUD(M I.P5b@xFVu IL>-YTl`4XBK2,(!5ͩ`ՅQaԐdD @& `4K@híb@ɸL"B&6 `4O@mfa0dD @& _VUp,o@ !&0!p?'ū*^jʾ2|Z !z?'ū @ ""3oDfPKBM`0eR"z3m@ՕPXͤ IdD `#+:Ȅ)xFV Nb3+7 HaTeg[%!%YD&@xFVuՕkD @^nb5`@,;dXV(D #+8Nb3BB Fr˔BK2#9:ٴ MՕ~L4wB`4.deQp! >-XTB 9Y ø" 2|Z *!%Xk>-YWB\X69AP9re`ۄ#9A+6D6A6-XW BrM`j¿h!;%Y^'1!2%Xk>-XTP \e@ @)xFV Nb3#>-YVl Bg\r^9rhpSug! 9/#XaVɸL>-XVl BN`XdN@ɸL>-XV< \mK2MsF[BiK2su@ՅF@Q˔#+nb5bxr7 6$+aѐ 97 9|"xrn'0ruX0rn+4x!fK :\fՕJBX"D#piuhIå"b@ɸLh@ՕQD !,(!5;AՕ[D#iuiIî,Vm xY/`4Y,Q9/Q9/Vm xHj³" %ͥՅ_D `#+5D `#+5X>xD "Lp|ZK 6 p0M`E^OVU `@@ɸLd@ɸL dX@r^FՅIłԓPU e%44a9aQXNEXTCՌeU4(aY1%XCONVTTU44hMQ%:SSCANFSe%$aUMAJPRINTFS de$HAUQNP5 bXV+7csuN ˔By\X&9F#X&4O#Օu'&9YeV 9/PY%*2+@pm'ū*L˔B}K2T"}:.Vm xZ.8cp@fū LxFV1gū*MɸL9|"(r@+6 -XWB{K2T"{:.Vm{ xDgū Á '0ruD&p!>%Y>c+6<^-YFrՅrƱE9A(9re`ۄ#9b6˔BkK2Ugž/Uoj­r^9rkK#>-XTP V9cb5ϋV] D #+:2U-XW(\(egYxFVjmSâb0r^eYD&( $!%Xiug'[bXPr^ 6`!/!.Q09"Z.0K2H( eg 4>-YV-Z`SB `4eg Frb@xFVueg Fr˔#+nb5nQ9/a(9"D `4eg Fr0@`1Pqg(ef@ rx^,[%bD #+@@m! >-YW,B^/ $B\`rD&]g1`4ec) Q9/mW >-YU1M`G `4eg Frb@xFVueg Fr˔#+nb5nQ9/a(9"D @`4b3@˔i/`4b.K2#+5D @#+5Xc`,V+!%XB3oYjʼxY" r!59N#+ .HdMb@xFVpi0ajʫ:8  ,:!.S#+8Nb3BK2#+8Nb3Du\X&pg#V+r@xFVpg'[A@!.s B\IxFVpg#@Qpr^eY!%Yf ^/bX˭!4!#9LxFV1ϋV6G!#9:&P^nb5ϋVU(efDu\x]g1BgK2#>-XV, rnV9|"8r^97 VmxOV%Y=c(ef6υ<^/@(efDuM`E9D&#+5Y$% ]g1":!a`1 9/γՕHA&!5%Y.p|Z9rN˔#+nb5eYs&0#+5D&#+8Nb3Du\0F>l:2!V'ū O`xFVjO`Xͯa/aYAXDu_.HՅnA˔BwK2#+8Nb3BeK2|Z 91!2.Rpg#F|Z@(D'#+5B'rfোŢ9B8r^Fj¤p|Z@(f jʪr^9rM`xFVjlSa؀Q 97 ū )xFV Nb3+rM xFVpbrnp|Z9rDMxFVDu\X&pg#V+aѐ >-XWLBwK2&TOj¿@k'pr/7 Fr1l: !!@(]g1!;%Yn*7deSa 9/γp4OA jʭhr/7 Fr1nQ 9re`#9bp>tHBwK2&Toj±^n@!g09|XV+;˔B\X&pg#V+/( K2MsFYLhBGū* RɸLՕJC)^nb5ܢrn'Г톈@@˔BK2#9AXMs rsp @#+:`E +.\X&9AX9rD( egYLՅiC HB \0rf!'Es)@r)xFV Nb3+7 H"OV.Q9rjŢ9A`9rD( K2MsFYLhBBrpfDpV'ū*A xFV êeV$9re`#9b P97  >-XW-YW8-XWK2L&9F#XV^97 Vmx^-+#+8Y%9MMa >-XV(@iD)^a7 Fr1b9A X^na >-XTXHB M`jʵ8r^(@4a!|ZP`@(6K2L&9F#XV^'1þB8r/ FruR xFVuՕWD p#+gū*D "Z,eS)xFV Nb3+7  ISDD)^n@)xFV Nb3y} A!&0aZ$9re`ۄ#9@m>-YVDB\X&9F#X!&0} 0븈6K2MsF[i$|Zh6K2ms rnVU @)xFV Nb3LB3@ՕvD)^nyD)^n@Du\ r^'1ûar^ !J/ b@!4r/h]f0ͪ/ՕhĄ ifݰ7(K2MsFYLhB-dMaֱ!9/Q9/`4X,( ef eg 4>-YT|LBK2#+:ȄBK2TB K2fѱՕA#Fe} AxFV0]g1"0]l 9/Q 9/Q 9/[4rAxFVjmؓuițTB K2UnĞ/D2dXPD(#+@ m>-YVtL":/ !C.Q 89"Z.0K2H(eg 6,(ú`Y÷Bb r0K2#91D(#+:2#9PX^a7 Fr1b( eg FrupD(͵aY":/ bXPr^ 6Ɖ(xX,9rAug'Y^X2D&D `#+8YLe\Fo)^'1Ɋ!%Y^'1":.R Nb3+D @#9^#V͘0!9^#Vͯ/!9^#Vl'!|W2!|W2!|W2!|W2!|W2!|W2!|W2!|W2!|W2!|W2!|W2!|W2!|W2!|W2!|W2!|W2bk+|W2!|W2!|W2!|W2!|W2!|W2!|W2!|W2!|W2!|W2bk++|W2!|W2!|W2!|W2!|W2!|W2!|W2!|[2!!!9^#Vl'!|3!|3!|3!|3!|3!|3!|3!|3!|3!|3!|3!|3!|3!|3!|3!|3!|3!|3!|3!!!9^#Vl'!|ʡ3!|ʡ3!|ʡ3!|ʡ3!|ʡ3!|ʡ3!|ʡ3!|ʡ3!|ʡ3!|ʡ3!|ʡ3!|ʡ3!|¥3!!!9^#Vl'!|3!|3!!|3!9^#V̀'!?!;!9^#Vl'+| 4!3!9^#Vbk#!9^#V̀'5|04!3!3!9^#Vl'DM!9^#VX'bk+|¸4`i!|ʮ4!|ʮ4!|ʮ4!|ʮ4!|ʮ4!|ʮ4!|ʮ4!|ʮ4!|³4!!bk++|4`i|4`iB4!!| 5`i!|5bk++|5!|+8Nb3` M)^'1i-Vj^/dXPD(#+@@mF>-YTTT":/ !C.Q 89"Z.0K2H(eg 6*éYæB r0K2#91D(#+:2#9PX^a7 Fr1b( eg Fru0 0XVxQ!.S#+5YUdD !%YnVUaPø¢0r/7 Fr1f0!%Y/0X,h8$Z2PS#) F3#c?1 R2 +#0BY 5U1R2j ӑc5 90T( MU 2'QU9U UR2x+PSc>U U1R0QT"AI%9R;+QUM 92U#YQ !2TS#.bY%M%&3<TU#?AAUQ:'S%bAUQN:$TSMAI%9R;SMQ%:2VTc;YU9Q:VӕBQaX;TTYa9aQ:VYaAUM! ;VSaIM :;v%VTaY1%pQT"AI%9R;S 56K. xsub cc chargen.c c2 chargen.cod m80 chargen,=chargen.asm/m cc chrnw1.c c2 chrnw1.cod m80 chrnw1,=chrnw1.asm/m cc chrnw2.c c2 chrnw2.cod m80 chrnw2,=chrnw2.asm/m cc chrnw3.c c2 chrnw3.cod m80 chrnw3,=chrnw3.asm/m cc chrnw4.c c2 c5!!`iI!9^#V*_ ͸|05!!9^#V64|C5!9^#Vl'+|p5!9^#Vbk#!9^#V5!9^#Vͭ8|ʆ5!!9^#VY|ʜ5!!9^#V!9^#V̀'DM|5!9^#V*!9^#V5!!9^#Vͥ͏7|76!9^#Vbk#!.@. 9^#Vͥ *9!9^#V5!!9^#V)`i||6!9^#V!.. *9!9^#V5!!9^#V)/)/|7!9^#V)/=/|6!9^#V!.:l *96!9^#V!.1=/ *9!9^#V5!!9^#V=/=/|ʊ7!9^#V=/)/|V7!9^#V!.;l *9u7!9^#V!.4)/ *9!9^#V5!!!9^#V!|ʭ7!9^#VO!9^#V!9^#VDM##*_ ͸|7!l'|7`i# 0|7`i#͘07!| 8*!/|L8Q:|L8`i#ͯ/|L8`i#Q:|L8`i##l'O8!|ʨ8X'l'ͩ9̀' *9`i#`i#X'`i#l'ͩ9`i#̀' *9`i##*!!!9^#VDM##*_ ͸|8!l'!|9`i#/|9`i#͸#|9`i##l' t|d!9^#Vs#rbk+!X5!9^#V))))!9^#V!X5!9^#Vbk#))))!9^#Vn&} !X5!))))!9^#V*M5&};*G5|´9!#*I5!ͻ9s*G5+|9!#*I5!ͩ9s!9!#*I5!͗9s& !#.2ͥ*3!9s#r!9^#V! t|ʷJ!9^#Vs#rbk+"*Q5!9^#V*O5͜,bk9s#r!t|7Î!9^#Vs#rbk+k!X5!9^#V))))!9^#Vn&{*6!9n&!t tn&*6!9n& tn&!.ͻP!.͜,,v*6&ͺv-!.!.͜,!.ͅ,Z} ͣ!.͜,!.! )͜,!/! .͜,!,/! .͜,!G/! .3͜,!_/!.͜,!t/} !.͜,!/! .͜,!/! .͜,!/! .͜,!/! .͜,!0!.#͜,!(0! .͜,!?0! .͜,![0! .͜,!m0! .͜,!0!.͜,!0!.͜,!0!.͜,!0! .4͜,!0! .4͜,!1! .4͜,!!1! .4͜"T5#*S5&t|(*V5 t|*V5#"V5+*S5&v|E*V5|*V5+"V5#*S5&u|*T5t|*T5#"T5+!9s#r!9^#V!t|LÛ!9^#Vs#rbk+sbk9s#r!t|ʈ!9^#Vs#rbk+å!X5!9^#V))))!9^#Vn&*N5&t|"!X5!9^#V))))!9^#V*M5&}õ!X5!9^#V))))!9^#V*N5&}õ;!9s#r!9^#V!t|DÅ!9^#Vs#rbk+]!9!X5!9^#V))))n&}!9s#r!9^#V!t|!9^#Vs#rbk+ï!X5!9^#V))))!9^#V!X5!9^#V))))!9^#Vn&}!X5!9^#V))))!9n&}r3;!9s#r!9^#V!t|=~!9^#Vs#rbk+V!9!X5!9^#V))))n&}!9s#r!9^#V!t|!9^#Vs#rbk#ì!X5!9^#V))))!9^#V!X5!9^#V))))!9^#Vn&}!X5!9^#V))))!9n&}k3;!9s#r!9^#V!t|=w!9^#Vs#rbk+O!9!X5!))))!9^#Vn&}!9s#r!9^#V!t|!9^#Vs#rbk+æ!X5!9^#V))))!9^#V!X5!9^#Vbk#)))),!81!.4͜,!Q1!.4͜,!b1!.4͜,!s1!.4͜,!1} ,!.͜,! .le!.͜,! ..e!. ͜,! ..e!.͜,! .le!. ͜,!B.le!. ͜,!..e!.M͜,!..e!. ͜,!B.le,!.͜,!1!.͜,!1{bk9s#r! 9^#Vt|Ü!9^#Vs#rbk+s!9n&!9^#Vbk+|‰͋! !{É͋bk9s#r!9^#Vt|3!9^#Vs#rbk+! 9^#V!9^#V! 9^#V!9^#Vͥ*!.. ++9!.. .?9!. .:ͥ*! ;*6-|“3!9s#r!9^#V!t|!9^#Vs#rbk+Þ!O!9^#V!O!9^#Vn&}ó!9s#r!9^#V!$t|A  !9^#Vs#rbk+!N!9^#V!O!9^#Vn&} *O.Z*O͇Z!. ͜,!1!9!.1*O*OyS9s#r!9^#Vbk|œ e^)3!!'Ou}2O!!Ou}2O*O&| ..͜,!1Z-e!...ͥ*^)3e!!9^#Vn&}û!X5!))))!9^#V!9n&}d3;!9s#r!9^#V!t|=w!9^#Vs#rbk+O!9!X5!))))!9^#Vn&}!9s#r!9^#V!t|!9^#Vs#rbk#æ!X5!9^#V))))!9^#V!X5!9^#Vbk+))))!9^#Vn&}û!X5!))))!9^#V!9n&}d3bk9s#r!t|p!9^#Vs#rbk+M!9s#r!9^#V*V5t|ã!9^#Vs#rbk#{!X5!9^#V))))!9^#V!X5!9^#Vbk+))))!9^#Vn&}Ð!X5*V5))))!9^#V*M5&}]!9s#r!9^#V!t|H!9^#Vs#rbk+ !9 s#r*T5t|ʽv!9^#Vs#rbk#S!X5!9^#V))))!9^#V!X5!9^#V))))!9^#Vn&}c!X5!9^#V))))*T5*M5&}5!9s#r!9^#V!t|ʵ!9^#Vs#rbk+!9*T5s#r! t|ʑJ!9^#Vs#rbk+'!X5!9^#V))))!9^#V!X5!9^#V))))!9^#Vn&}7!X5!9^#V)))) *M5&}bk9s#r!t|ʉ!9^#Vs#rbk+!9*V5s#r!9^#V!. ͜,!1,v!Ov-!"E5!O s!6##s"6!"6l"6*6t|j!*6tm!!|4"!9s#r!9^#V! t|ʫ!å!!9^#Vs#rbk+}!ͳ#Ò!!"6*6t|!!6ͳ#}!6#ͳ#}!F*6!6͑"}*6#"6+*6#"6+ñ!!9s#r!9^#V!t|P!."!9^#Vs#rbk+"ͳ#"!!Ou}2O!. .*ͥ*!. ͜,!2,v!Ov-!"O.. ͻP3!9s#r9s#r9s#r!9^#Vbk|ʥ#!9! 9^#V! 9^#Vn&}!9n&0t|#!9n&9t#!|#!90sW#!9n&At|8#!9n&Ft;#!|L#!97sW#!9s#r!9^#Vbk|ʔ#!9!.9^#Vt!9n&!9n&eus#r!9^#Vs#rö"!9^#V!9;*6+|¿#3*6|$.!Ou}2O*O&|$!.͜,!22Z-!..-ͥ*!"6!"6!9!'O*6n&}*6#"6+&3*N.Z*N͇Z!. ͜,!_2!9!.2*N*NyS9s#rbk|Ž$e!!Nu}2O*O&| %!!Nu}2O!.͜,!2!9!.1*s#re!..-ͥ*!9^#!!kbk9s#r!t|X-C-!9^#Vs#rbk+ -!F!9^#Vs0-;bk9s&|€-9!.u}c-&3;!9Z-}&͡-&3!9n&t|-!9n&t-!|!9n&0123456789ABCDEFContinueeditcopyMain System SetAlternate System SetOK to exitThe character set has not been saved. ? (Y/N)Enter character to in hexadecimal Enter character to in decimal Enter the character to is the HEX value of the current characteris the current characterCharacter Selection MenuH - Entry by HEX valueD - Entry by decimal valueC - Enter the character - Done editingSelect Character Entry MethodCharacter Entry MenuUp Arrow - return to selection menuRight Arrow - edit next characterDown Arrow - edit same characterESC - return to main menuCharacter Editing MenuPosition Cursor with Arrows. - turn pixel on - turn pixel offQ - Quit without update - done editing this charI - Invert all pixelsC - Copy another characterL - shift characteVbk| %e!. ͜,!2,v!Nv-!!Nu}2O!!Nu}2O*O&|%..͜,!2Z-!..Dͥ*!!'Ou}2O!N s"6!"6"6"6*6t|%*6t%!|%&þ%!d(!9s#r!9^#V!t|,&!&!9^#Vs#rbk+%!d(&!d(!d(*6|›&)*6|›&.!Nu}2O!. .*ͥ*!. ͜,!3,v!Nv-!"E5*6+|&.!Nu}2O!. .*ͥ*bk9s#r!d(!d(!d(!9!9^#V! ts#r*6 !t td(*6!t td(!9!9^#V*6!teu ts#r*6!t td(*6 td(!9!9^#V*6 teu ts#r"6!d(!d(*6t|4(!F*6n&!t td(!F*6n& td(!9!9^#V!F*6n&eu ts#r*6#"6+*6#"6+*6#"6+ñ'!!t td(! td(!d(!d(*6+|!9n&|‹(!'O*6 s(!9n&|«(!'O*6 s(!9n&|(!'O*6:s(!'O*6*6!9n& tn&}*6#"6+*6|r LeftR - shift character RightU - shift character UpD - shift character DownN - iNsert a rowE - dElete a rowS - inSert a columnT - deleTe a columnCharacterSetEnter the file to read (d:filename.typ)File not found. Press any key to continue.Reading character set from Character set read from EOF in file read. Press any key to continueEnter the file to write (d:filename.typ)File already exists. OK to continue? (Y/N)Writing character set to Full directory on file creation - Press any character to continue.Character set written to Disk full on file write - press any key to continue.Do you want to:1 - Read the systems tracks into the character set2 - Read a file into the character set3 - Edit the character set4 - Write the character set to the system tracks5 - Write the character set to a file6 - Write the character set to the font RAM7 - Exit the programEnter your choice (1 - 7)This program allows you to edit a character set in memory andstore it on various media.Osborne Executiv)!!Nu}2O*O&|J)!"6..͜,!+3Z-!..5ͥ*!"6!'O(O6bk9s#r!t|ʰ)Ì)!9^#Vs#rbk+i)!O!9^#V!O!9^#Vn&}y)bk9s#r!$t|*)!9^#Vs#rbk+ú)!O!9^#V!N!9^#Vn&})bk9s#r!9^#V!9^#Vn&|V*=*!9^#Vs#rbk+*!9^#V!9^#VX***!9^#Vn&at|ʂ*!9^#Vn&ztÅ*!|!9^#V!9^#Vn&_ t}!9^#V!9^#V͜,bk9s#r!9^#Vt|**!9^#Vs#rbk+*! *;!9s#r!9^#Vbk|–+. 9^#V! 9^#V͜,! !,!9͆-_ t}-&|r+bk9s#r9s#r&| +#9s#r9s#r +!9^#V3ͅ,`,!. ͻP!.͜,!`3! +͜,!p3! ++͜,!3! . ͜,!3! . ͜,!3!. ͜,!4!. ͜,!<4!. ͜,!h4!.͜,!}4!#͜,!4!#͜,!4,!.͜,!4!!=!9^#V!!9^#V!!!!)!!(!!je Character Font Generator V1.1 9!|ˆ9!!|ƒ9`i#/|H9`i#͸#|H9`i##l' K9!|b9*`i#*!`i#ͯ/|q9`i##l'|ʈ9!!.l *9`i##*!!9n&!|½9.B!|9!@!|9!H!|9! !|9!-!|9! !| :!!|:!!|E:!|E:!|E:!|E:!|M:!9n&!!9^#Vl'|g:!9^#Vl'ͩ9W!9^#VDM#*_ ͸|ʛ:!l'!|ʳ:!|;l'!|;!|;*l'!|:!|:!*_ ͸|:!!!9n&!|(;!|(;!|,;!!|H;!9n&̀'!!9^#VX'|s;##9^#Vl'bW!!9!b.9^#V's#r!9^#V*_ ͸|ʬ;!9^#V!9^#Vl'!|;!|;!9^#V*_ !9^#Vl'!|b<##9^#VX'| <.9^#V̀'!9^#V̀'W#h=!|>̀'`i##̀'O|ʒ=`i *õ=!.C̀'`i##̀' *9`i##̀'|=`i##*=`i##!.C`i##̀'O *9!!|>!?̀'|>`i#l'!|Q>`i## 0|>*!.l *9!|>`i##l'|>!?`i##̀'Ä>!|>!.C`i#̀' *9`i##*`i# 0|>`i#*>`i#!!? *9!!!9^#V!9^#V͏7!9^#V͏7: optimizer table overflowoptrep() was is optout emptyoptdel err>=optdel() was is cnt>15 del_useless_CCnn:doalljmps:del_eqv_CCnn:del_unreachable: 00000!}2 .9^#Vbk+| C.9^#V!|!|!|?!P& !|@!P& !|@!P& !|+@!P& !|=@!P& !|O@!P& !|‡@!.Glͺ?!.@.ͺ?!.^lͺ?!|¿@!.9lͺ?!.@.ͺ?!.8lͺ?!|@* &|@* &@!|@!P& !P& !|͂P!|eI!9^#V!|6I!XR6 !N!+@ UI!9^#V!9^#V!9^#V͋P!9^#VF ͂P!9^#V!9^#V!9^#V͋P!9^#VDM|ʡI`iODM`i |ʾI!9^#V& áI!9^#Vbkn&|I##9^#Vbkn&|I!9^#Vbk#n&WJ!| J!!9n&bk++|%J!|^J!9^#Vbkn&|LJ!_R& !gR& J!oR& !wR& J!|pJ!|©J!9^#Vbkn&|—J!R& !R& J!R& !R& J!|ʻJ!|¿J!!R͉ !!9^#VDM`in&|K`in&|J!$@ J`in&@ J* &|gP*W |2K!R6 *W F ͂P! OX* &|! OX!R& !R6 !9^#Vl !Rl ͂P!9! 9s#r9^#Vs#r9!9^#V^#Vs#rDM`i*g |K! 2íK*g #"g n&|K!9^#Vs#rbk+n&2K!9^#V!9^#Vs#r! 2! 2!DM`i*g |;L! 2!L!)2! 2! 2*g +"g !9^#V!|nL!R!|{L!R!|ˆL!R!|•L!R!|¢L!R!|¯L!R!|¼L!R!|L!R!|L!R!|L!R!|L!S!|L! S! A!P& !|A!P& !|0A!P& !|BA!P& !|TA!Q& !|fA! Q& !|xA!Q& !|ŠA!Q& !|œA!#Q& !|®A!+Q& !|A!3Q& !|A!;Q& !|A!CQ& !| B!HQ& !. lͺ?!RQ& !|B!WQ& !|0B!_Q& !|XB!.Elͺ?!.Flͺ?!|¢B!gQ& !oQ& * &|ʈB* &ËB!|ʙB!uQ& !}Q& !|B!Q& !Q& * &|B* &B!|B!Q& !Q& !9^#V!9^#V!9^#V͋Pbk++|D!9^#Vbk+|.C!Q6 D!|BC!Q6 D!|VC!Q6 D!|jC!Q6 D!|~C!Q6 D!|D!9^#V!|ʢC!Q͉ !9^#V!|C!++ͺ?!9^#V!*| D!.;lͺ?!.1lͺ?!9^#Vͥs#r!Q!9^#V̈́I!|ND!9^#V!|M!'S!|KM!,S!|XM!1S!|eM!6S!|rM!N!.lͺ?NN!rS̈́IN!.lͺ?!+ͺ?!.lͺ?!.lͺ?!.lͺ?!yS6 !9^#VJ͂P! l !9^#VF !S6 !9s9s!9^#VDM`in&!|eO!9s!9`in& 6}!9`in&n&}Obk|‡O!9n&|ʀO!'@ ͂P!|ªO!9s9`in&}O!9!9`in&} }&|P!9n&|O!Sl !9sP!9n&|P.,@ P!9s!9n&F O!9n&|XP##9n&|>P.,@ GP!9s!'@ !9s!9n&@ O!;@ ! @ !:@ ! @ !S͉ gP!9n&!9n&!9^#V@#͂PPUSH HPOP PSWPOP BDAD SPXCHGDAD DJMP TRETRETSPHLPUSH DPUSH BP9^#V!|Y!|Y!!Output is wOpen failurer--can't openr(û+!|+!l'|+!l'|+#*!DḾ-/,_.+-,|*,`i(|+!j? +;*;!9^#VDM#*_ ͸|Y!3l'bk+|``i#l'!|(Z!|(Z!|(Z!|[̀'|ʚZ*l'!|OZ!|WZ*Z!|wZ!. l *9Z!|Z!. ̀' *9Z*l'!|ʷZ!|¿Z*Z!|Z!. l *9Z!|Z!. ̀' *9!3!|)[!|)[!|)[bk+|5[*!3!|X[̀'`i#̀'cd3!|}[̀'`i#̀'Qcd3!|ž[`i#̀'̀'Ng3!|º[̀'͌cd3!|[̀'Ocd3!|n\̀'bk|[`i#*=\bk+|\bk++|\bk#|\bk##|6\`i#!.@̀' *9=\!3!`i#&d|U\!X\!N! *93!|®\!+̀'O *9`i#!.l *93!|f]`i##l'!|,]`i##̀'̀'|d!.̀' *9`i#!.OP HMOV H,LMOV L,HMOV A,LPOP DMOV M,EMOV M,DMOV E,MMOV D,MXTHLLXI H,$+5PCHLMOV H,DMOV L,EMOV A,HORA LJZ TRETRZMOV A,HORA LJNZ TRETRNZLXI H,LXI D,MVI L,MVI H,DS shli errorDAD HINX HDCX HINX BDCX BINX DDCX DLHLD STA SHLD LXI H,tracetretCZ CNZ LDA MOV L,AMOV L,MMOV A,LSTAX DJMP MOV A,HORA LJZ LXI H,MOV H,BMOV L,CMOV H,DMOV L,EMOV B,HMOV C,LMOV D,HMOV E,LBad register opORG CALL TRACEDB '',0CCPINTCCGINTCCEQCCNECCSXTCCSUBCCMULTCCDIVCCORCCXORCCANDCCASRCCASLCCNEGCCCOMCCLTCCLECCGTCCGECCULTCCULECCUGTCCUGECCUDIVCCGCHARCCPCHARCCBADINX SPDCX SPCALL DB ',opcode error!DM+n&s9!LYs"JYs#r`in&X|S`iýS`in&|S`in&-S!|&T`in&X|½S`in&|S!LY!9^#Vs`in&X|aT!LY!9^#Vs#r`in&}`in&|&T!LY!9^#Vs#r sýS!9s#r! 9^#V!9^#Vn&|T! 9^#V!9^#V! 9^#V9^#Vs#rn&}ËT!DMl9`in&s#r!9^#Vs#r!Nl *9`i##!.l *93!|d!+̀'`i##̀' *9`i##*!3!|]`i##l'!#|d`i#!.̀' *9!.-l *9`i##`i##X'`i##l'!`i##̀' *93!|"^`i#̀'͔dOpe|d!.l *93!|_̀'bk|G^!r͉ !3bk+|\^**_bk#|€^*!.rl *9_`i##l'|½^̀'͔d|ʽ^`i##̀'̀'͔d*^!|_`i##!.`i##̀'̀'͔dͥ *9*!.l *93!3!3!|_`i#̀'pe|V_!.l *93`i##l'|}_`i##̀'̀'*À_!|_`i##!.`i##̀'̀'ͥ *9*!.l *93!3!|d`i#̀'Ope|d!.l *93!|d`i#l'!|3`!|?`*!3!|˜`!9̀'s#r`i#X'!`i#̀' *9`i#!..9^#V *93bk+|¸`̀'`i#̀'Ng3!|à'bk|`**!3bk+|%abk++|%a!|%a!||ʭU!9s#r! 9^#V!9^#Vn&|kU!9^#Vn&X|NU.9n&QU!|dU!9^#V!! 9^#V!9^#Vn&!9^#Vn&W|§U!9^#Vs#rU`iT!9* |Ud9* &|U!" d9:i o&|U!i DMÆV!9DM!h9^#Vn&W.j9^#Vn& WJ!j9^#Vn&.WJ|]V`i!j9^#Vs#rbk+n&}U`i.s`iAs`iSs`iMs!}!9DM* &| V!Yl l ͂P!*Y!x" #|V" !,Y͉ d9;!" * &|W* |V* tw!LY*JYn&| W*JY#"JYV!LY*JYn&|$W#}2 W*JYDM!LY*JYn&|QW!LY*JYn&WTW!|cW*JY#"JY)W!9!LY*JYn&}!LY*JYs!LY`i!9Y!x" #|W!LY`i !;Y !LY*JY!9n&}V!LY`iʹU!LY*JY!9n&}3* |GX!* ͼ* чbk9s#r! |?X4X!9^#Vs#rX! 2#X* tw!" * &|^X!9!9^#V!HY!xs#rbk#|‰X܄DM|ʦX`iWéX!|ʶX ÉXtw!9n&|X!9n&|X!9n&|X!9n& !!%abk#|%abk##|%a!|%a!|Ja`i#!.@̀' *9*!3`i###*_ ͸|ba!3`i##l'|‡a`i###l'Êa!|d!.̀'`i##̀' *9`i##*`i##*!3!|€b̀'bk|a*!++ *9ybbk#|b*!.rl *9ybbk##|Sb!.. *9!.rl *9yb̀'͔dOe|rb!3!3!3!|$c̀'bk|²b*!.rl *9cbk+|bbk++|b!|bbk#|bbk##|b!|c`i#!.@̀' *9!.rl *9c!3!3!|d`i#!+̀' *9!.l *9`i#Y|lc!3!.`i#̀' *9`i#!.l *9`i##l'bk+|c!|c!|c!|c!|c**d!|c!|d`i#*!+̀' *9d!3!3!3!9^#V*_ ͸|f!!9^#V!+|nf!9!9^#VOs#rqDMsf!pDM!9^#V!|g!9^#Vl'+|f.9^#Vl'`i|f!9^#V̀'!9^#Vf!|f!!9^#V!+. 9^#V *9!9^#V!l *9`i|Ig!9^#V*!9^#V!++ *9!!9^#V*_ ͸|fg!!9^#Vl'!| g!9^#V!9^#V!9^#V͜jØj!|g!9^#V!9^#V!9^#Vͥ͜jØj!|g!9^#V!9^#V!9^#V6͜jØj!|)h!9^#V!9^#V!9^#V͘͜jØj!|Vh!9^#V!9^#V!9^#V͓͜jØj!|ƒh!9^#V!9^#V!9^#VÍ͜jØj!|°h!9^#V!9^#V!9^#VJ͜jØj!|h!9^#V!9^#V!9^#Va͜jØj!| i!9^#V!9^#V!9^#V *9!|xq!|xq!8s!9^#V̀'|Pq!9^#Vl'Sq!|xq!9^#V!. l *9!!9^#Vl'!|Nr!|Nr!|Nr!|Nr!|Nr!|Nr!|Nr!|Nr!|Nr!|Nr!|Nr!|Nrbk+|Nr!|Nr!|Nr!|Nr!|Nr!|Nr!|Nrbk++|Nr!|Nr!|Rr!!!9^#Vs#r!|!9^#V*_ ͸|!9^#V#!9^#Vs#r!͘|ʩrpPVr͂PVrdivide by 0;Basic block (before):;;;;;;;;;;;;;;;Basic block (after): ;;;;;;;;;;;;;;Internal warning--basic block0000!9n&bk+|¾s. 9^#V! n&)))))))DM!9! 9^#V!9^#V! n&`is#r9! 9^#V!9^#V! n&`is#r3tbk|s!9! 9^#Vs#r9! 9^#Vs#r3tbk++|&t! 9^#V! 9^#V~#|t+!! "7!! 9^#V! n&DM! 9^#V!9^#V%#|ct+! 9^#V!9^#VR#|’t. 9^#V%!!!99!%9^#V!.9!!9_DM#|t+!9^#V|t!!9^#V!Q͜jØj!|i!!|Fi!9^#V!9^#V!9^#V͜jØj!|si!9^#V!9^#V!9^#V*͜jØj!| i!9^#V!9^#V!9^#V͜jØj!|i!9^#V!9^#V!9^#V+͜jØj!|”j!9^#V!*_ ͸|i!!9^#V!l'|:j.9^#V!l'|:j.9^#V!l' =j!|ʔj!9^#V*!9^#V!!+. 9^#V *9!9^#V!+.9^#V *9!!!9^#V!+.9^#V *9!9^#V*!9^#V*!* &|k!rl ͂P! 9^#V! 9^#V!9^#Vͥ#Vr!rl ͂P!9s[k!9! 9^#VIms#r9!9n&n&͓}bk9s! 9^#VDM! 9^#V|>lÆk`ilk!9*_ s#r9Imͭ8Im͓ImRn͓ImͶ7͓Imn͓ImY͓Im<͓n&͓}!9^#V*_ ͥ`iͥDM!9!9^#V*_ ͥ^#Vͥs#rÀk!9^#VImDM! 9^#V+|lfl `iLl!9*_ s#r9Im3Im͓ͫn&͓}!9^#V*_ ͥ`iͥDM!9!9^#V*_ ͥ^#Vͥs#r`l&|*k* &|>m!rl !9n&|(mͮ|u!"7l`i!!9^#Vs`in&|ʩu!9!ls#r9`in&s#r!9^#V!A|uu##9^#V!Dxu!|ʋu! "7!!}!.9^#V!ôu!9s#r!.!|v."7͙!9^#V|u!.9^#V!!9^#V|)v!.9^#V!9^#Vs`i_DM#|?v+!9^#V|]v!`i!s`in&|v!9!ls#r9`in&s#r!9^#V!A|»v##9^#V!Dþv!|v! "7!!}!.9^#V!v!9s#r!!|Ew."7͙!9^#V|=w!.9^#V!!9^#V|mw!.9^#V!9^#Vs`i! 9^#V!ͭ|ʒw!! 9^#V!!n&bk|wbk+|wbk++|w!|w!|w!|w!|w!"7!! 9^#Vn&|ʁx!9!ls#r9! 9^#Vn&s#r!9^#V!A|Gx##9^#V!DJx!|]x! "7!! 9^#V!s!.9^#V!Ìx!9s#r!9s#r!. 9^#V|¿x. "7.9s#r!9^#V|x!.9^#V! 9^#V!!n&| y! 9^#V!#DM`i!|4`i!'9^#V`i!9`in&}!!9! "7!!9!9^#V! n&!9^#V|u!!9^#V!9^#V!n&+|ʼ!9^#V!*|ʶ!9^#V!ÿ!ÿ!|ށ!9^#V! !9^#Vs! "7!!9^#V!͘!9^#V!͘!9^#V!9^#VͶ{|#+! DM`i%|J!9^#V`is(!9^#V!"s!%9DM|s`i!!9^#V!͘|›.9^#V!Þ!|ʮ!"7!!9^#Vn&!|! 9^#V!tDM#|n!9^#Vbk#n&| !!|$! 9^#V0vDM#|n+!|b! 9^#V!tDM#|J+!##:s#|n+!"7!!9`i#s#r!9^#V!9s#rbk|¨."7!!9!9^#V^#Vs#rbk!9^#V!s#r!s#r!!9^#Vs#r!9^#Vn&!|!|.`i!! 9^#Vn&}c!9^#Vbk#n&!|X`i!Xsc`i!Rs`i!.9^#Vͼ!9^#Vч#|Œ+!9^#Vtw!9^#V܄DM|؄.9^#V܄|̄. DM؄!9^#Vۅ`i!9^#V!!n&| !9^#V!!nDM^#V͙! 9^#V͙!9^#V! n&!9^#V! n&)))))))!9^#V!!n&bk|kybk++|ky!|‘y!.9^#V!9^#V!9^#VGz9!"7!!9^#V!!n&bk+|ybk++|y!|y!|Division by 0 $!õ|±>Division by 0 $ODM!> ˌ}o|g)o怄g=)o|gOOz|OOͦPO*+5}2O*)5}2O*'5}2N*#5}2O:O2P!F"K2J:O2M͍P]PuPcP*%5}G:Qˏ2Q:ORP͙PiPXP͓PoP2"5>2"5>2"5>2"5>2"5!Q~ ʃPŠPxŠP`ßPZßP]ßP:g.Z*#5}2P͍Px2"5:Q2!5!9^#V!9^#V͜,!9^#V!9^#V!Aͥ*!9^#V!9^#V͜,!QOzOɷ}o|g#!}|!#}|!+DM!>)E =M)>|/g}/o#}o|g!O9͎҄ͦڄ"v!!}/o|/g|g}o^#Vs#r}o|g}|!+}|!#|g}o!9"r"t!*r*t`i"ˎ#*ˎDM`iDMo&!o!9^~# x??`i"ˎ?*ˎDM|}͎P!9^#V!̓w|!9n&9X!!9^#V!!n&!| !| !|`i"ˎ?*ˎDM|}͎P  < < < N O - F I L E M E N U > > >  D Open Document File | Y DELETE a file | H Set HELP LEVEL  N Open Non-document File | E RENAME a file | L Change Drive  X EXIT to System | O COPY a file | R Run a program  F Directory + | P   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  M Run MailMerge S Run SpellStar < < < N O - F I L E M E N U > > >  S,v*O|Q!oSzQ*O+|3Q!OzQ*O++|IQ*OtLQ!|fQ*35*O++́QzQ*15*O++++́Qv-v!9^#V!A͘Q!:,bk9s#r!t|QQ!9^#Vs#rbk+ïQ!!9^#V"/5!F!9^#Vn&"-5͏sÿQbk9s#r!t|JR+R!9^#Vs#rbk+R"/5!6!9^#Vn&"-5͏sRbk9s#r!t|ʣRzR!9^#Vs#rbk+WR!!9^#V"/5!>!9^#Vn&"-5͏sgRbk9s#r9s#r!9^#V!9^#Vn&0t|R!9^#V!9^#Vn&9tR!|MSS!9^#Vs#rbk+üR!9! .9^#Vt! 9^#V!9^#Vn&s#rSThe working character set is a new set!9s#r!9^#Vbk|X.9^#V.Z!9^#V͇Z! 9^#V! 9^#V!ͥ*,! 9^#V! 9^#V͜,!9!9^#V!lͅ\s#r-!..Fͥ*!9^#Vbk|.T9!9^#V*!9s#r!9^#V!s9s#r!9^#Vbk#n&|T.9s#r!9^#Vn&|ʢT!9^#Vn&BtåT!|T!9^#V!9^#Vn&#}T!9s#r!Z!Z!9s#r!9^#Vbk+|V.9s#r9s#r 9s#r!9^#V! 9^#Vt|`U! 9^#V!t|`U!9s#r|`U!9^#V!tcU!|V~U!9^#Vs#rbk+U!9!9^#V!9^#Vn&!,Ys#r!9^#V!9^#Vn&|U.9s#rkU!9^#Vbk#! 9^#V!9^#V!9^#Vn&}! 9^#Vs#rbk+kU! 9!9^#Vs#r! 9^#V!|KV.9^#V!9^#Vn&.tNV!|mV!9^#Vs#r9s#r! 9^#Vbk|V.9s#r!Z!Z!9^#Vbk+|X9s#r9s#r!9^#V! 9^#Vt|V!tV!|ZWV!9^#Vs#rbk+ñV!9!9^#V!9^#Vn&!,Ys#r!9^#V! !9^#V!9^#V!9^#Vn&}!9^#Vs#rbk+V!9^#V!t||W!9^#V!tW!|ʙW!Z![bk9s#rbk+|X.9^#Vbk+|W.9^#Vbk|X!Z![bk9s#rÝX!9^#Vbk|‡X.9^#V! Cs!9^#V! Hs!9^#V! Rs!9^#V!9^#V.s!9^#V!9^#V#Cs!9^#V!9^#V##Hs!9^#V!9^#V###Rs!9^#V!9^#V####sÝX!Z!#[!9s#r!9!9^#V|X!9^#V|X!9^#VX!s#rÐS!9^#V! s!9^#V! s!9^#V!s!9^#V!s!9^#V! s-!9!9!6[s#r9s#r9! 9^#Vs#r!9^#V! t|ZÀY!9^#Vs#rbk+XY! 9n&!9^#V!9^#Vn&t|mY!9s#r!Z,v! 9n&|Y!C[Y! 9n&v-!I[!9^#Vbk|Z!`[Z!e[!9 s#rmY!.͜,bk9s#r!t|uZ\Z!9^#Vs#rbk+9Z!9^#V!9^#V sIZ!9^#V!sbk9s#r!$t|ZõZ!9^#Vs#rbk+ÒZ!9^#V!9^#V sâZDrive must be A or BFile name can not be blankFile type too longBlank file typeFile name too long.><,;:=?*[] SPACE is invalid in a file typename,! .͜,{!͋![!\!3\!.͜,{!͋!F\!]\!s\bk9s#r! Nt|[!9^#Vs#rbk+[ 1983 Osborne Computer Corporation, 26538 Danti Court, Hayward, CA 94545 1984 Future Systems, 828 Nob Hill Avenue, Pinole, CA 94564;bk9s#r9s#r!9^#Vbk|i^.9Z-}!9n&v|\!9n&t|\!9n&u|\!9n&t\!|T]! !  GMAC"'@!+@=~vO#~ Q w#6 #wD̈́K>2<2@2>2-=2<2<2=2<2?2=!= w#—<2(=2.=2/=2=> 2<:@2<:@2*=>;23=<22=!"4=+"@+"6=*'@!!62[?21=2+=29=2?<2)=?!H="F= ~# R*4=#"4=!"6=:2==23=!9=>2@2@͖ CCl CC0Cw#C!H= ʎ ~w# Žw:9==28=͖q:,=ʨNЯ2,=4OMگ!F> 2H=J> J7ò- !"C=20==2?*="=:H=*>$2H=$2E=U :ʋ:E=$:==$U !=~4#>$Nwy#*F=+~# ʿ+U ~#~"RR *F=+"F=:(=k+s -"x-ʯ7D-"F=+ÿ:(=ʹ1 -"C=j # :µ@ U 6 :(= ʒ8 :(=l`k#~! _^#V#N1! ; !H="F=*C=|U :(=lÍ'!==Nwy#3!>">!> q#K6 U l;l:<—:>VʋMʋDʋX2[?~+ACDEMNOPQRUVX!>~ p:>2>9^#Vbk+|I].9s#r9n&|4]##9s#rÞ\!9!9n&s#rÞ\!Þ\!9n&|‚].9s#r9!9^#Vs#rÞ\!9n&s|]9^#V!t|]!9^#Vs#r!-! ,!Þ\!Þ\!9n&t|]!9n&t^!|^^! 9^#Vt|S^! 9^#V!9^#V!9n&}!9n&!9^#Vs#rbk+Þ\!Þ\!Þ\! 9^#V!9^#Vs!9^#V!9;!9!..1##͘g9s9n&3;!ih!9 s&|_́i!9͌^}!. )ͥ*&|__^&|^{_^͢+3bk9s#r!t|m_I_!9^#Vs#rbk+&_!6!9^#V!F!9^#Vn&}6_!"6+_bk9s#r!t|_é_!9^#Vs#rbk+Æ_!>!9^#V!F!9^#Vn&}Ö_!"6_!.͜,!i!9^#Vbk|`!i`!i!i;!ih!9 s&|ʵ`́i!9͌^}!. )ͥ*!. .#ͥ*&|Œ`,=i-!*35ͺ`=i)`&|)`,_i-!*15ͺ`_i)`͢+3f"#5t|!. ͜,!j!9^#V! j*#5A͘Q%No END statement:=.ʊ$ʒ[YTE3ALLSALL1Cj?CF1M/MA?MCMP2NC2NZOMMONOND1PQ PrPDsPDR2PE*PIrPIsPIRj/PL2POSEG1Z'AAj'AA ADBC"CR CXR ECEFB"EFLEFMEFSEFWIiISJNZSSEGWIiILSE ND NDC NDIF NDM NTRY QUQXjXXXITMXTXTERNALXTRN LOBALkvALTvLTF2FB9FDIFFEFF:FIDN3FNBFTaM)NQNRNC8NCLUDErNDsNDRrNIsNIR"NRNXF1F2FDEFFNDEFRPRPC1C1M2MP2NC2NZ1PQP2PE2POQR1ZQD2:DA DAXrDDsDDRrDIsDIR3*HLDOCALJXI8ACLIBACRO:@OVBVIAMErDEGOPjOPQRRARG*RIsTDRsTIR*UTR UTsUTDsUTIAGECHLOPR"OP UBLICUSHS$USHALARC!EPTZ&ESETR(ETsMETIsEETN IMY*LjLALCZ,LCkLCAroLDMNCNZPPEPOY.RjRARCZ0RCkRCArgRD"STR2STZBB*BIR4BCj7CFZ6ET"ET3"HLD0IMZ8LAPHLZ:RAO*"5&|a*!5&t a!|Ya!9^#V!|@a*#5awa!"+5#")5++"'5#"%5Owa!"+5.9^#V")5!"'5++"%5O3h*"5&|¸a.. ͜,!9^#V!%j*#5A͘Q!"E5!. .$ͥ*!uk͇Z!uk!9^#Vs!uk#!2jl!uk n& t}!uk n& t}!!uku}2O!!uku}2O!!uku}2O*O&|`b.}2"5!!'Ou}2O!uk s"6!"6"6*6t|ʻbèb*6#"6+Ìb!F*6n&#cÝbQc*6|c.!uku}2O!uk n&Su}!uk n&Su}!!uku}2O!}2"5!}2"5*6+|!'O*6#"6+!9n&}*6|Qc*6|!!uku}2O*O&|yc!"6!"6*6t|ʫcÛc*6#"6+c!'O*6sÐc!"6;!>jh!9 s&|sd́i!9͌^}!. )ͥ*!. .#ͥ*&|8d,=i-*6-+|2d#*35!xd=ic&|c,_i-*6-+|md.*15!xd_ic͢+3f"#5t|!. ͜,!Zj!9^#V!cj*#5A͘QO*"5&|d*!5&td!|e!9^#V!|d*#5ͩe6e!"?=͓ *n?z :m?O s#rw# & =7 >wG#w"?=#w#w#w###w#I "A=####p*@͍ ;*?=|>!x F?Symbol table full |}:<:@:-=*?=~@ڹ >>vL!=F#~vL *p?  G~8#~ +~w#~w#s#r#*=s#r~@w:<# ~a~a#^#V#͍ R*=xD{a#za:> *?=# :0=a*?=~*?=#~wxGõ>LyL@ Z6LZ@LZRLZRLyZOLyym-LZRO*ZRv̝LZR*ZOLyZ@*m-L6 ,ɷÝKN͝Ým-zf<ĝ{Y! ^#N! ^#VZԝBxL{?LZ8ĝBLNܝc:<Ü̓ :>H:<0:<Ü>L:< L>2<:<<=<2<ů2< 6 (-2LKҫ:<ԝ Om-ͷyHLyL:>G¯BxGj*=*=͍ j##T9zC<xx"+5##")5++"'5#"%5O6e!"+5.9^#V")5!"'5++"%5O3h*"5&|˜e.. ͜,!9^#V!jj*#5A͘Q!vj!"E5##9^#V*#5"O!. ͻP!. .$ͥ*!uk͇Z!uk!9^#Vs!uk#!zjl!!'Ou}2O!!uku}2O*O&|f.}2"5!uk s"6!uk s"6!"6*6t|ZfHf*6#"6+,f!F*6̓f}=f!!uku}2O*6+|{f.}2"5!}2"5*6+|f*6|¿f.!uku}2O*O&|ʹf!"6!"6!'O*6#"6+n&;!. ͜,!j!9s#r!9^#Vbk||g..1͜,!9Z-}!9X*&|Fg&|Fg& tIg!|qgbk9s#r9!9n&s#rf!f!. .+ͥ*!9^#V3;!9s#r!9^#Vbk|.h. 9^#V! 9^#V͜,! !,!9͆-}-&! 9n&t|h&!9n&th!|#hbk9s#råg!åg&3*"5&|Ih!.͜,*"5&+|\h!j*"5&++|ph!j*"5&+++|…h!j*"5&++++|›h!j*"5&|!. ͜,!kZ-!..ͥ*!. .ͥ*ͅ,`,!. ͻP!.͜,,v!m-ë*ů2< 6 (2L{Nԝ:<ĝc:<=ĝNԝc>LcnAÜNԝcn [:<ĝ>Lĝ;{:<=ĝ>L@ÜNܝ*e R:<fĝ[NܝcH:<(:<ĝ>LcNܝe ĝ>LcNܝ:< ĝ:<ĝ>LZԝO*k7:<(>Lں{:<̝ :<Lcĝ>L[/k:<̝"(:< :<*cy  :<Ü:<Ü>%{ :L/:<L>FL;{N*c:<ʴ ĝ:<ĝ>LyBONĝe ̝c:<ĝ5N*c:<ʴ(:<ĝ â:<Nܝe ̝c:<̝Gxĝ> Ü:<ĝ :<[4:<:<ʙԝ c:<ĝÜ([:>:> c:<̝ ڱ:LyC͜(2>2>:<(>"LÒ:<ĝ>2LÒ:< :< ĝ:< `ƝL͜ĝc:<ZUB#UBTTL*UI$ITLECHGR@ORRA*RITHL680807Z80%COMMENT&CREF'DEPHASE(LALL;LFCOND)LIST*PASS2+PHASE,PRINTX-RADIX5REQUEST.SALL(('()-((5*5,,))))))))h6f6(5C,~&+*A4**i7+9M+ +[9;7+U+\+!++))*+++,))d+h+m+'-@  F"  (85vCd} *F=~#"F= oA 0 : 7}ɷ[ a { } 6 *F=+"F=*F=#"F= aS 6 != q#a !=6#ͱ  2<a w# yʟ ͱ x җ x Gy2=xͱ җ × $.@?_// // &:? ͱ & 6 ͱ 7 G!r?:=' " 2=~!?  "p?^#V!g? w#: !=~K 6!=N zʾ ^#V#^#V#~=y =G‹ #n #~=¸ #"?=#~+?j?!g?w#Ÿ w#s#rP P +>Ð <*A=~*@####~7#_"@:=$.?_ ;O$ ĝ>L2*L>LyK͜c:<} :<^:<;͜{:<  s:<񇇇@OÜ :<ĝ>LGÜ:<( c`ƝLp:<͜(@{ĝ>:L[ĝ:< Ü;c>6LKB(@{(YPy:<O:<ĝ>LyWÜ!>?AFwx# 3:<G:<7b*=#"='h'*>'>͍ +*>:@`))0) ‘0Ž:>:>6!6"6'6*#">ßG:>@2>:2>!>~ͯ~@ô~ʹ#~?Gxʚ#~72>>A;hS#^#V"=G̓2>#^#V">>C1#^#V+~z><2>= G>>B#~Š:>@>§>2>>A;''2>{2>!>"?=ͩ:<*=##"=:>G:>@x̓:>G̓*>#">C'B'x&x746!96**>##~#fo6"6'##">̓xP:>@xʈ:C+B+x*=++*>#:=G~w#s#r#*=s#rC'B'b:>2>:>x̓³z ĩ2>*>#~2>*>#>͍ +*>:@)0) 09^#Vv-! .͜,! k=i_i!. ͜,!0k! .͜,v!Jk*35v! .͜,v!Wk*15v!. ͜,!dkWrite to the Font RAMCharacter set will be written to MainAlternate font RAM on program exit. Write to the System TracksWriting to written to ALTFONT SYSRead from the System TracksReading from read from ALTFONT SYSEnter drive (A, B, or to exit)No disk in drive or unformattedDisk is wrong densityHard write errorHard read errorPress to continueDo you want to:3 - Exit to the Main Menu1 - Use the 2 - Use the Enter selection !9^#VDM`in&|ʴk`iäk!9^#Veu!9n&DMk|k lk!!9n&DMAt|l`iZtl!!9n&DMat|)l`izt,l!!9n&DM0t|Sl!9n&9tVl!!9n&!|ʍl!|ʍl!|ʍl!|ʍl!|—l!t!tt!9n&DMat|l`iztl!|l! eu`i!9^#VDM`i!9^#Vs#rbk+n&">DExx0:(:*=G:)=G:(=N:/=S:> ~:> o:@+2+>ÿ>+2+>:> ¿:.=:> :1=:,=>C2*>:[?:/=:> !3=4:2=p:[?:@>vL!> ~#d:+=Z:?=##:?#!9=~#06d(>C:8=H> d!H=~# Z dK> d> dO:[?yvLJ>23=:/=ʍ> vL!1>!*4=#|+:/=ʤ*6=#"6=:/=|ʾ>-vLZ!>ZZ>SvLä~#vLPX |>:d MACRO-80 3.44 09-Dec-81 PAGE :> Q)*<#"<*<#" !>">O!f ~*>w!>"> '"!*=:=*=:=:=x¦*=*=͍ "?="=ĩ:A> y> C+B+y*?=+~xGW> #######FyxG+#W>_xGxGFɯFxGF .7FxFx!>~w#4ZL>2>U C \ \'"(ʬ)ʯ+ʲ-ʵ*ʸ/ʻ;ʨ,ʨ >>>> > > >!G) # ) o2=) # x) eo) n=}|l!9^#V!9^#VDM!9^#Vn&|Gm!9^#Vs#rbk+n&͖nm!9! 9^#Vs#r!9s#r 9!9^#Vs#rͺnDM|ʓm`i uÖm!|ʄn`i!|ʰm!|»m! ͖n^m!|m!|n!9^#Vbk|zm!9^#Vs#r 9^#Vs#r!͖n! ͖n!͖nzm!|an! ͖nbk9s#r!9^#Vt|zm!9^#V9^#Vs#rn&͖n*n! 9^#Vs#r`i}!9^#Vs#rzm! 9^#V!s!9n&|­n. u!9n&u!s"sn&|n*sn&DM*ssnuDM`i|n. `i*s!9n&}!9^#VDM! 9^#Vt|.o.9^#V!t1o!|8o! 9^#Vmu|co! 9^#V!9^#VoÐo!9^#V+! 9^#V!9^#V+!9^#Vo`i!9^#Vbk|¥o!9^#VDM!9n&}`i#! 9^#Vo`i!.v!9^#V!.9^#V!9^#Vv 9!Fv!9^#V!.9^#V!9^#Vv 9!9!9Lp!9^#V!99s#r9!9^#Vn&s#r9s#r9s#r 9! 9^#Vs#r)!ss#r! 9! 9^#V)!9!9^#V͠qs#r|p!9^#Vs#rbk+òp!9^#V9=x*F=+H 2=*F=++"F=H "F=GHg:<o|DHB} |BwDʕHʝOdQ•ͼOqQ þ!H Bq0Ի)z#zͥDnHn!H 0)T]))_è!H 0Ի)))_ÿ!H G0 ))))_Hû:<4!H 00 ܻO:<=ܻ<_Pc$ =ͥ=ͼ6 q6 :=2=ҿ=$ ʿ!  ʿo#g=b#t!S ~Œ2< ;ʹ ʹ° & × °6 þ*F= # #7 -#~G ĵxw+!"F=$ t:<ʮ:<7͓ $ !*@w!7 Gx22>">ĩ:<>C~@x##^#VOQb#^#V"=y y¾þ7͓ "?=~Bڨ~8:<2<##~2  þ:=X # '¿ 'n$¿j OþXOR AND NOT MOD SHL SHR OR EQ NE LT LE GT GE LOW HIGHNUL TYPE :< :<:2>2=2<2>2>2>2<2<9">*)@͍ 4\!]!~!! f!O2>̓!=y "" "?"y2W?͎! 6 ,8!:>8!2>> ß!:W?O:>O!f! "x̓!G:W?O`!"f!ó _y{y!*=YGó !"_~xž!ůG|2>?"y2W?͎!!F%:W?Of!è!@ 2W?:W?G2>O! x怱!>w*F=+N{*>2>z |= yWx=z6"z6"ʳ 6"6"6" >G̓!Gó "Y?zR" ͪ""=">y2W?͎!"ʡ"2X?ʋ"ʋ"ʋ"ʋ"ʋ"ͪ":X?*Y?!#o>g~#fo:W?O*Y?ʶ"y}!"=y%"*="""*>"{%z%   P#Z#d#n###N$$%##Q%\%h%u%{%%%%#%&&&-&C&c&̈́$zW{_̈́$zW{_̈́$zW{_*>|/W}/_:W?O>%%*>|/W}/_:W?O>%%̈́$zʬ#)â#̈́$#+}zW{_ò#*>:W?y#:W?O2>:W? #*="=*>͔$>%%*>G$:W?%$%$y%$$$:W?%$ ?$=:W?9$y9$2>:W?O>%%{_zW*>i$:W?O> %%i$ DM!>=ʂ$))p$p$:W? *>:W?y*>ͳ$:W?O> %%zzB%|G|$|%$%|/G}/O!>$ $7>{_zW}o|u = u)t|/g}/o#}o|g!u9DuvfuDu"v!!}/o|/g|g}o^#Vs#r}o|g}|!+}|!#|g}o!9"v"v!*v*v`i"vûu#uʸu*vDM`iDMo& &o&ovvo&!9F+N+V+^+~++F+N+V+^:v@vx~# 5vx:vx~+ Jvx*!ѷ¦!Ëvѷ¦!Ë&}!9^#Vs#rÃr!9^#V!s9!9^#Vhss#r9l!9^#V!9^#Vs#r!9^#V!9*vDM!9^#V#u|ʇs!`i[/5K-5y!w> ڋt}o|g)o怄g=ʩt)oÀt|guuz|uztuɷ}o|g#!}|!#}|!+DM!>)g=$|g}oɯO_yW*>z5%|5%|ͳ$%:W?O> %%>O!G͙%͍ o%͙%͍ ?o%͙%͍ W_ ͙%È%͙%͍ o%͙%{_zo%7o%?o%:W?L&*>*>\W:W?O>%*>]W:W?O>:>@2>!>4~?%o%$w5y%:>2>̈́$}R_̈́$}R_̈́$}@_̈́$}6_̈́$}Ro{R_̈́$}?_*=*=͍ :W?_ :> Ox&> 2>,̓ x 2=xGʱ&:=±&*=*=͍ :=G*="=:<ă"= :=&:<ĩ:\?2':\?ȯ2\?U 2'1>G2=<2\?2=*=õ&2'1>2\?G2=*=õ&2'1>2\?G2=*=õ&:\?,:==`'o& ^#V*=͍ s#r2=*=##K':<ʇ':=ʇ'*= ͩ2=1 6 "ʠ''(G) ) *F=++' ) '³' ʳ'6 ,';'' "F=(y(# G) ) 'L) ȸ'# ( ,ʍ'LÍ'Z:=y,ʍ'̓ x1 "N('ĝO) d( o(GŷLP(xx|(L,A(1(h'y,›(ZCä(:@ʹ(z*=#"=:<'ä(*=:=Gõ&2(:<:>U<2>1h'̓ y,(:<=)G2<:<=)2<#define CURLFT (0x8D) #define CURUP (0x8A) #define CURDN (0x8C) #define CURRT (0x8B) #define SPACE (0x20) #define CARRET (0x0D) #define ESC (0x1B) #define TRUE 1 #define FALSE 0 #define BKSPC ('H' & 0x1F) entioc() { char command; command = entchoice(16,25,'1','3'); return(command); } /* write to the font ram */ wrfontram() { char command; iomenu("Write to the Font RAM"); command = ' '; while (command != '3') { iochoice(); command = entioc(); blank(16,9,18); /* blank entry prompt */ if (command == '1') wrmnram(); /* write to the main font ram */ else if (command == '2') wralram(); /* write to the alternate font ram */ } mainmenu(); } /* write to the main font ram */ wrmnram() { extern int manwyn; extern char mainset[],charset[]; int i; for (i = 0; i < 2048; i++) /* move character set to main set storage */ mainse!.9^#Vthss#rs#r!9^#V! 9^#Vs#r9s#r!9^#V! 9^#Vt|ʘqiq!9^#Vs#r=q!9^#V!9^#V)! 9! 9^#V)^#Vs#rXq9;99!9^#V^#Vs#r!9^#Vn&|q.9^#V!9^#Vnuq!|r!9^#Vs#rq!9^#V!9^#Vyu|%r!9!9^#Vn&!|Cr!|ar!9!9^#Vs#rbk+n&}jr!9 s!9!9s#r!bk9s#r!9^#Vn&!9n&u|ʵr!9^#V!9^#Vnuør!|s!9^#Vn&|r.9^#Vs#r!9^#Vs#rbk+!9^#Vs#rbk+n&}!9^#Vs#rÃr!9^#V!s9!9^#Vhss#r9l!9^#V!9^#Vs#r!9^#V!9*vDM!9^#V#u|ʇs!`i[/5K-5y!w> ڋt}o|g)o怄g=ʩt)oÀt|guuz|uztuɷ}o|g#!}|!#}|!+DM!>)t[i] = charset[i]; manwyn = TRUE; fntmessage(0); /* display font ram output message */ } /* write to the alternate font ram */ wralram() { extern int altwyn; extern char altset[],charset[]; int i; for (i = 0; i < 2048; i++) /* move character set to alternate set storage */ altset[i] = charset[i]; altwyn = TRUE; fntmessage(1); /* display font ram output message */ } /* display font ram output message */ fntmessage(messtype) int messtype; { curpos(18,5); putst("Character set will be written to "); if (messtype == 0) putst("Main"); else putst("Alternate"); putst(" font RAM on program exit. "); } /* write to the system tracks */ wrsystrk() { extern char *ioC1,*ioC2; char command; iomenu("Write to the System Tracks"); command = ' '; while (command != '3') { iochoice(); command = entioc(); blank(16,9,18); /* blank entry prompt */ b/* Osborne character generator program. This file contains C interfaces to routines which perform I/O to the system tracks of either a dsdd or ssdd disk, and interface to the ROM routine SENDEN (sense density). The routines, called rd_wr() and snsdns(), are actually in IO.MAC. */ rd_wr() /* Interface to system track I/O routine. */ { /* extern int rd_wr2(); */ #asm .z80 extrn rd_wr2 call rd_wr2 jp end end: .8080 #endasm } snsdns() /* Interface to ROM SENDEN routine. */ { /* extern int sns2(); */ #asm .z80 extrn sns2 call sns2 jp end2 end2: .8080 #endasm } lank(18,9,35); /* blank prompt from previous action */ if (command == '1') { reverse(); iomen1(); nreverse(); wrtrck(1,ioC1); /* write to the main systems track */ iomen1(); } else if (command == '2') { reverse(); iomen2(); nreverse(); wrtrck(3,ioC2); /* write to the alternate systems track */ iomen2(); } } mainmenu(); } /* write to the main system track */ wrtrck(sttsector,promptptr) int sttsector; char *promptptr; { extern int rwflag,secstart,trkstart,drvspc,edsmade,dside; extern char retcod,svtpval; drvspc = getdrvspec(); /* get drive specification */ if (drvspc < 0) /* if carriage return selected */ return; curpos(18,9); putst("Writing "); putst(promptptr); putst(" to "); putchr(drvspc + 'A'); putcolon(); snsdns(); /* Call SENDEN to determine # sides */ if (retctsector == 3) { wrafsys(drvspc); } else { rwflag = 1; secstart = 2; trkstart = 0; dside = 1; rd_wr(); } } else { rwflag = 1; secstart = sttsector; trkstart = 2; dside = 0; rd_wr(); } sioerr(); /* show err if any */ if (retcod == 0) /* if no error, no edits since last I/O */ { curpos(18,9); putst(promptptr); putst(" written to "); putchr(drvspc + 'A'); putcolon(); edsmade = FALSE; } else blank(18,9,36); } char altfcb[36]; wrafsys(drspc) int drspc; { extern int eoffound,bufcnt,charcount,areg,diskfull; extern char iobuf[128],retcod; clfcb(altfcb); altfcb[0] = drspc + 1; /* Make drive # in fcb relative 1 */ /* (Drive A = 1, B = 2) */ strcpy(altfcb + 1, "ALTFONT SYS"); /* Copy file nm into fcb */ altfcb[9] &= 0x7F; /* Clear r/o and sys flag in fcb*/ altfcb[10] &= 0x7F; areg = bdod == 5 && svtpval == 0xE) { /* If dsdd */ if (sttsector == 3) { /* If alternate font, call wrafsys() */ wrafsys(drvspc); } else { rwflag = 1; /* Else write to side 1, track 0, */ secstart = 2; /* sector 2 */ trkstart = 0; dside = 1; rd_wr(); } } else { /* Else ssdd, so write to side 0, */ rwflag = 1; /* track 2, sector = sttsector */ secstart = sttsector; trkstart = 2; dside = 0; rd_wr(); } sioerr(); /* show err if any */ if (retcod == 0) /* if no error, no edits since last I/O */ { curpos(18,9); putst(promptptr); putst(" written to "); putchr(drvspc + 'A'); putcolon(); edsmade = FALSE; } else blank(18,9,36); } char altfcb[36]; wrafsys(drspc) int drspc; { extern int eoffound,bufcnt,charcount,diskfull; extern char iobuf[128],retcod,areg; clfcb(altfcb); altfcb[0] = drspc + 1:<<2(=?)2<@ ͣ:<ģ:<̣!<;)=@ 4=2(=<2<@ 51):<_2>W!<7~?)<\)w!<4:(=2(=!b*T],l*zr* Y*#*F=z̝}O|G:> U Oĝ7 -#~@w ~ĵwy,ʉ*1>O*>; *F=+~# ****#"F= () 'O*6 ) )ĝ@ >2/=Y+2/=Y+2-=Y+U G+ G+ $ :+~@w,U ,+>2-=>2.=Y+2.=@ >2.=Y+}+>}+:@/o:22<(2 {=ʝҝ<2 +{22=+?pU :=+>!=w#"?=:<ĩ,+:,= *F=+qN1,4O=2,=*F=~#"F=!5, () 'U ') )@ :<:=x,>=!]?G~µw#„,p, /U ,/@ #~µ~$w2'+"=>2=!"=ñ&>2=:=U - -~w#~d -~w@"@ bkë4:?2@+5ů2@@ :@ʊ5U :U O^5yf5y n5y@{5:@=2@:@<2@:@:<(:@#~>P)!ɷ/"@i2O:> ʰ5*@͊0y6+,ĝ5) <ĝw+:> G6G5͌2 D6>G65# <2@ 5 =6:@6G6 ;,76<36>76G67676 w+5:@G66+.0xĝ" @&i"?m6\4>Ô5^4*%@>2@3H0ʱ6 ʶ1;ʫ1'ʡ6"ʡ6>1Ç6G͕0 ʶ1ʛ6â6"%@;:͞:!*#@* @*?!!64>2@" @͍ 7:@6x 7* @##~#7+4r:47H=r:1:3 7* @4 bk6 ʝOJ) V7JG7> J> J:> @ ʝ2 @O ʄ7@ u77\4^4!H=: @O~ʥ7 #Ù7!ɷ #"?~(w/"@i2 ,7w+2@2@-,"C=m-:>21=Ux¯x 20=*C="?= x4̓ :>"C=~w|21=m-x¯*C=-#~µ~@ w#s#r#*=s#r4͸K:?w/:<Ĩ/!<4~=Z.!]?~-!1>~-!@#]?~# . .. . -!V?p#"?=ͩ2'!5O"@ A."?=~w#~@k/~.#^#Vͩ.*= ͩ *={ĩn*F=ԃ +!"4="6=}2/=p!/!3=44!r?>͗;Z:3=8p!3=44!/!?>͗;Zʹ/*<|.:@<2[?2[?.!L//!O//*<|/>,vL:@<>,J:@<2[?2[?!_//ʹ//̓ͩ*>|,/F/ͩ+:@C/>vLKLNo Fatal error(s) Warning(s):=Gͩ./!//)ô/REPT/IRP/IRPC/MACROUnterminated /!//)> Z> Z:@<> J> J!/:@0"?%O;.0~<=r0:@<2@:@:@=2@<#~^0:@^0:@^07"?:?=2? &0*F=~ 0 0U 0"F=0>&2?>1&0:?0>&;:2?*@~ 1=1O+1 0x@* @!94" @"@2@r:I9H=r:1:3 +9*@* @4* @#2@4}_|W:=̓ :> 2=xx2=*=T9"=:=2=@ !!@Ns#Frͦ9ͯ9q#p*@^#V+*@##^#V+*!@}9ͯ9"!@9*@ "@*)@͍ I;*?%:?͍ I;*@T9ͦ9*%@{_{:s#r#>w#wͯ9%:s#r*:"#@*#@ͦ9s#r{_*%@{̺9*@w{W:a:"%@{_ͯ9zʺ9*@}‚:}o~r:{ʗ:a:{_ͯ9{ȯw#w*@s#r͔9*#@ͦ9q#p*%@{:*@"%@~{_ͦ9{_{:a:*@*?:?;*)@%T9o zo W{_*@*@T9BK*@"@xE;+w 8;"@O;9*A=*@T9o zo W{_*@T9BK*@*A="@ "@xʕ; w#È;2>2>O!^#V#ͷ; ;:>Zz^#V{;};++V+^{;w#w+++; F#"?=~@#~<~#^#VG5<<_<{…<{@Đ<{ʈ<{_!f~vLz<###~#vL;<>L<5m<:>wZ!3=4:2=p*?=~@w> |<> vL>*>M>C>UvL2<*?=#{G#^#V#^#V"=̓"?=#~ ĩ>IvL!>">*>6!>~G#^#Vͩ+~10:@*@~<1=11O+11 #1x+~111<*F=U 0w1G~# \1 d10P1x0G0&06 "F= ʐ1 ʐ16 Ö10}1ͱ k1å1ͱ k10ß1 ;1ù1:0 ʞ: ù1:: 1 1:"%@ʞ: ʞ:> ;:Þ::@1*@4I2* @~82G+#2~/_2~F2=G+~F23*2+<=C2+;2~>.33?*@O DEU Ă2=ʦ3%2,ʰ3 ʰ3 ʰ3;ʰ3!) 3w+ Ô2"{3q3(:> 63:<.33PX 2|2>:f3)0R3>)30R3=363D>3E>3 >0f3xG3x0:R3 f30O:f3>0f3y*{3w+"{36 *{32Ow+ ʏ3 3~3w+ ~3Ô2ʢ3w+22322{=*F=+~ 6 6 ʵ3õ3!=͍ 3#6 +>1&3:>1!  4>1!4r ?Stack overflow, try more P switches (:> O4"?/c4> \^4U :U H0ʄ4H=;: y4ɯ;:͞:!*#@*?!!44͍ 4:@¾4x4*?͔9͊02@*?r:5H=͈:3 4*@*@*?"?"QAQBQCQDQEQHQLQMbSPcPSWQIQR bBCbDEbHLbAFjIXDjIYdrNZqZrNCqPrPOrPE; /* Make drive # in fcb relative 1 */ /* (Drive A = 1, B = 2) */ strcpy(altfcb + 1, "ALTFONT SYS"); /* Copy file nm into fcb */ altfcb[9] &= 0x7F; /* Clear r/o and sys flag in fcb*/ altfcb[10] &= 0x7F; areg = bdos(30,altfcb); /* Call BDOS to set file attributes r/w and dir */ areg = bdos(19,altfcb); /* Delete old file */ areg = bdos(22,altfcb); /* Create new file */ if (areg == 0xFF) { /* Check for no directory entries */ retcod = 3; /* None, return write err */ return; } areg = bdos(26, iobuf); /* Set dma addr */ altfcb[32] = 0; bufcnt = 0; diskfull = FALSE; /* Write file */ for (charcount = 0; charcount < 2048; charcount++) { wbyte(charset[charcount]); } wflush(); if (diskfull == FALSE) { /* If write ok */ areg = bdos(16,altfcb); /* Close file */ altfcb[9] |= 0x80; /* Set r/o and sys flag in fcb*/ altfcb[10] |= 0x80; areg = bdos(30, altfcb); /* Call BDOS to set file attributes r/o and sys */ retcod = 0; RELCRFPRN } else { retcod = 3; /* Out of space, indicate write error */ } } wbyte(abyte) char abyte; { extern int eoffound,bufcnt,charcount; extern char iobuf[128],areg; if (diskfull == TRUE) { /* Don't bother if no room */ return; } else { iobuf[bufcnt++] = abyte; if (bufcnt == 128) { wflush(); /* Also resets bufcnt */ } } } wflush() { extern int eoffound,bufcnt,charcount; extern char iobuf[128],areg; if (bufcnt) { /* Don't write if nothing in buffer */ areg = bdos(21,altfcb); if (areg != 0) { diskfull = TRUE; return; } /* Clear buffer */ for (bufcnt = 0; bufcnt < 128; bufcnt++) { iobuf[bufcnt] = 0; } bufcnt = 0; } } /* read the system tracks into the memory array */ rdsystrk() { extern char *ioC1,*ioC2,*mnC1; char command; iomenu("Read from the System Tracks"); command = ' '; while (command != '3') { iochoice(); command = entioc(); blankP?Command error?File not found?Can't enter file~J#F!FF!FF!FFXGCOMSCNF",AF2@!@͸H> 2-A25A2,Ay,2@G:@2@H>A:@G;AH-A:,A2@ 2@G:@@2@!@͸Hy=7H 7H,A#H 7!@͸H:@!@ܘH!@:@SH@;A> =IHܘH:@hH:@hH:@2@ _2̈́K%K;K*@##:@2@G,A ~²HHw# ¨H #èH w#»H:@!5A~ Hw#H*J:7>IxHJOx=y&I[A@2,A*Jx I -AoIJIT?IJT7JY7ILYIJS7JT7>IR7JD7R7>I> ڀI6 #=xIy.2@*J5AxژIʥIJÙIy/yJL¾I2@JOæINI2@÷IOI2@÷IRI2@÷ICI2@2@÷IMI2@÷IIJ2@÷IXJ>2@÷IZJ2@÷IP7:@<2@÷IJ[HJ0HJADJ:HJ-JO!~6GzJ#~ cJUJHFx+#tJ~iJ2@ÚJ2@:@JK>*J GF> J:HF!IF"Fo>g6 #> w:@J!IF~ JaJJAw#þJ~# J J K#"F_*F+~ #KJ#"F+~7ȷ> J> JEB!"CB!@:@NKCA!"AA!@:@K~K͡K vL> vL>vL*CBEB@NLEB@K:@ʰH:@K>L*AACA@NLCA@K|}YLƀ)`iíL> vL> vL> vL:@ʰH:@¡M =­L!CA>!@íL:@ʰH:@J*AA|=L#"AABAF 3533 IOC1 3531 IOC2 3553 LASTMO 0103 MAIN 2BA2 MAINME 36BB MAINSE 36B7 MANWYN 36A6 MNC1 2C4C MNCHOI 524C MOVALT 51FD MOVMAN 51A1 MOVSET 2D05 NREVER 354D OFFCHA 4EF4 OLDRDF 4F18 OLDRDN 354E ONCHAR 354B PPTR1 3549 PPTR2 2DA1 PPUTCH 2C60 PROGDE 1F76 PUTBLA 1E65 PUTBOX 02C4 PUTCHR 1ABA PUTHEX 738F PUTRAM 02D5 PUTST 23B3 RDHEXC 63B2 RDSYST 0DE5 READCH 4FA9 READFC 1F7F READHE 4FCF READNA 36AF RECPTR 3522 RETCOD 2CF5 REVERS 4FA7 RFCBPT 4FCD RNMPTR 3551 ROWBAS 0D0C RSTCHA 295E RSTFCB 352B RWFLAG 3529 SECSTA 36A2 SELCOM 1B51 SELMEN 46BB SETPTR 1541 SHFTDN 124F SHFTLF 1348 SHFTRT 1441 SHFTUP 6B99 STRLEN 3521 SVTPVA 36A8 TEMPBU 36A4 TRANTA 3527 TRKSTA 0F92 TRNALT 1000 TRNCHA 2A03 UPCASE 2A58 UPCHAR 4EBD WFCBPT 4EE3 WNMPTR 0F7B WRCHR 5EB4 WRFONT 2864 WRHEXC 26C8 WRHEXL 2903 WRHEXR 2438 WRITEH 4EBF WRITFC 4EE5 WRITNA 6017 WRSYST 2291 XTOI 2AFB YESNO 4FE1 RD$WR 4FF2 RD_WR2 50A6 SNS2 4FE8 SNSDNS 5181 ARRDRI 5198 PUTCOL 592C CHECKC 5A21 CURP24 6B75 ALTFCB 5E8C ENTIOC 5FDA FNTMES 66w:@<KM*ED|%M#"EDFDKGD>@=NM!=*M!>JM_!@ sM qM vL~zMËM7ȷ!MF@@²M> J!MFKDISK FULL!M:>ŒN@Nw#2@.ʷN!ڷNw#N2@.ʾN!ҥNþN6 #·N:@.Nw#NpMMN2M2M:M=OMM0O!M"M>2M*M~+O70O#"M0J!"6!7xH*7͈C͟IҖqqJp:C6G-$ͱ$!8.͔ 2':D6:C6G-ôq8q8>25G*B6|!8s:C6s$:Y5r!8͔$:626n$:!4$r,p2JZ1%͹$*+?1*`5"6"6*6~!͔$a#+w#͟$~ʂrͨrږryrsږrGͤ–rxG8x͔$}!+y)8ͩ$8@rկ ®rsr.r#r rͤ7rr rrr>  r~*+"S" " " " go"Q"`2 2!2!2X2Z2]2^2c2_2\2W!*" " " " "=";!" " " " 2 2 !" ?No Start Address?Loading Error?Nothing Loaded?Out of memory?Illegal Polish Exp:!‡!!!2!!!2*S! ~ 4!>2 2Y:c2c ,/MEG@RSUXYE{ O :Ù&O†2WHO2WG:c2c:'>`͇Ax¹'"U _2:f Ğ2U!c~w:f ~w:f 2Yæ2Y*`|##yȷ#jC~@#I" #ͬ*`|#*U~ !:Y:c~ G@x k o Link-80 3.44 09-Dec-81 Copyright (c) 1981 Microsoft ?Command Error~P#~#  `{ +!~G #~ ex+#<~: /͔>*P d> P:e!fo>g6 7ʌʌ  y:+y#P2\2f g !  :\GO: " " " " * * " ";* * BK* * "=2 G<2 36B1 ADDRES 3535 ALTCHA 06AB ALTOFF 069B ALTON 3EBB ALTSET 36B9 ALTWYN 4FE0 AREG 50BB ARRAYS 4FDE ARRSOU 52A5 ATOI 75CF BDOS 2AA5 BLANK 1F65 BLKRNA 1D5A BORDER 2CE5 BRIGHT 36AB BUFCNT 352D BYTEPA 740A CCAND 7421 CCASR 74D0 CCEQ 74EA CCGE 74DF CCGT 74EB CCLE 74DE CCLT 74F6 CCMULT 7517 CCNE 7553 CCOR 7565 CCSUB 36AD CHARCO 0897 CHAREN 1C26 CHARME 46BD CHARSE 09E8 CHK127 198C CHRCOP 2D15 CLCHRS 5A87 CLFCB 5A2E CLNAME 1F35 CLREDB 1F4D CLRMEN 1ED4 CLRSC2 2CCC CLRSCN 354F COLBAS 032D CONTRE 5B6A CPRIGH 36A3 CURCHA 2C9C CURPOS 07A9 DECENT 17E5 DELCOL 18B8 DELROW 2CD5 DIM 36B3 DISKFU 1A15 DISPAR 352F DISPPA 05A3 DISPSE 10E8 DOLAST 3523 DRVSPC 0D8D DSCHR 0D7D DSCHRB 3525 DSIDE 3558 EDBUF 3554 EDCOL 1AF7 EDHEAD 03B6 EDITAR 0A06 EDITCH 1B41 EDITME 3556 EDROW 3545 EDSMAD 6798 ENTCHO 3547 ENTDEC 1BC6 ENTMEN 0511 ENTMET 3698 ENTSTR 36B5 EOFFOU 068B GRFOFF 067B GRFON 2C85 HEADER 06BB HEXENT 5379 INFILN 2D5A INPCHA 2D86 INPDCH 5C85 INPSTR 1713 INSCOL 1641 INSROW 1166 INVERT 4F27 IOBUz6#z: O4ͅ {Ҏ!y yBKO!; s#r! s#r! s#rͅ ڬ! s#r!; s#ry ! ~#fo! ѵ! }_|W>2 * * <* * : <ͅ P* * W{_* #" " "=:WGO0ڗ xڗ)))ҖʌҖ)o>gdy +%Overlaying areaDataProgramÔ!! ~#fo!ͅ ͅ ͅ &}< = yy7yM7>,>#ͅ !M> _!h >?P~#P!yk!:!ʆ!; Not Found> P> P>2 g 28: _<2 !~g ! w#! wO |!y:!(͔*QDMÙ&[Begin execution]:Z:X* * ͅ ~`~¨@w+++o>GO ~+t>ʊ6 #=ƒ* ! ͮ 2X * ~O_+++y++:XK͔:c2c *Q>[P"N!C \* s#r!I  extrn rwflag,secstart,trkstart,drvspc,dside extrn retcod,charset public rd_wr2 public sns2 .z80 ;------------------------------------------------------------------- ;This routine enables the program to do I/O to the system tracks. ;Before entry to the routine, the following external variables must be set ; ; rwflag - 0 => read, else write ; ; dside - Side on which to read/write data ; ; trkstart - Track on which to read/write data ; ; secstart - starting sector to I/O ( 1 for main set, 3 for alternate) ; ; drvspc - drive code, 0 for drive A, 1 for drive B ; ; charset - pointer to character set in RAM ; ; the routine returns a value in an external variable called ; ; retcod - 0 no error ; 1 no disk in drive ; 2 wrong density (not Osborne double dnesity) ; 3 write error ; 4 read error ;---------------------------D1 GETDRV 6981 IOCHOI 693D IOMEN1 695F IOMEN2 68DA IOMENU 6683 RBYTE 65A9 RDAFSY 6478 RDTRCK 6833 SIOERR 6CDD STRCPY 6323 WBYTE 6351 WFLUSH 61C9 WRAFSY 5F7B WRALRA 5F1B WRMNRA 60BA WRTRCK 7523 BRK 7605 CCALL 76DB CCEDAT 7646 CCLDDR 762E CCLDIR 75EE CCONIN 75F9 CCONOU 756E CCUGT 7579 CCULE 756D CCULT 738D CCUNGO 6EBA GETCHA 6D49 GETS 6BC3 ISALPH 6C2E ISDIGI 6C09 ISLOWE 6BE4 ISUPPE 6C58 ISWHIT 6FFD LDDR 6FD2 LDIR 704C LOAD$A 6F03 MOVMEM 71A0 NEXTAR 6E96 PUTCHA 6D11 PUTS 7368 SBRK 6F94 SETMEM 6CA7 TOUPPE 6EF4 UGETCH 7028 XMAIN 760B CCALLA 7411 CCASL 754C CCCOM 7458 CCDIV 755A CCGINT 750F CCNEG 75E3 CCONST 755F CCPINT 73AC CCSTAR 7437 CCUDIV 7578 CCUGE 7583 CCXOR 76E0 EDATA 0000 EXIT 759A RESET 758A SETEXI 75A6 STREQ 76D7 XEND 7695 XFCB1 76B6 XFCB2 765B XSTART 78 CCUGE 7583 CCXOR 76E0 EDATA 0000 EXIT 759A RESET 758A SETEXI 75A6 STREQ 76D7 XEND 769R 4FF2 RD_WR2 50A6 SNS2 4FE8 SNSDNS 5181 ARRDRI 5198 PUTCOL 592C CHECKC 5A21 CURP24 6B75 ALTFCB 5E8C ENTIOC 5FDA FNTMES 66---------------------------------------- ; ------HIGH RAM variables------- sdisk equ 0FD50h dmadr equ 0FD4Bh dma_bank equ 0FD4Ah savsec equ 0FD4Dh savtyp equ 0FD51h savtrk equ 0FD4Eh ;--------------------------------- ;------ROM codes----------------- sen_rtn equ 0160h rd_rtn equ 015Ah wrt_rtn equ 015Dh ;-------------------------------- sys_dta equ 0 track2 equ 2 doubtyp equ 0Ch doubsec equ 05h dstyp equ 0Eh rw: db 0 sec: db 0 drive: db 0 rd_wr2: ld hl,(rwflag) ; put read write flag ld a,l ; into local variable ld (rw),a ld hl,(secstart) ; put beginning sector ld a,l ; into local variable ld (sec),a ld hl,(trkstart) ; put beginning track into high RAM ld a,l ld (savtrk),a ld hl,(drvspc) ; put drive code ld a,l ; into loc LHLD edrow XCHG MOV M,E INX H MOV M,D XCHG C251: LXI H,2 DAD SP MOV E,M INX H MOV D,M LXI H,14 EXT CCLT CALL CCLT MOV A,H ORA L JZ C250 JMP C252 C249: LXI H,2 DAD SP PUSH H MOV E,M INX H MOV D,M INX D POP H MOV M,E INX H MOV M,D MOV H,D MOV L,E DCX H JMP C251 C252: LXI H,edbuf PUSH H LXI H,4 DAD SP MOV E,M INX H MOV D,M PUSH H XCHG DAD H DAD H DAD H DAD H POP D POP D DAD D PUSH H LXI H,2 DAD SP MOV E,M INX H MOV D,M POP H DAD D PUSH H LXI H,edbuf PUSH H LXI H,6 DAD SP MOV E,M INX H MOV D,M MOV H,D MOV L,E INX H PUSH D DAD H DAD H DAD H DAD H POP D POP D DAD D PUSH H LXI H,4 DAD SP MOV E,M INX H MOV D,M POP H DAD D MOV L,M MVI H,0 POP D MOV A,L STAX D JMP C249 C250: LXI H,edbuf PUSH H LXI H,14 PUSH D DAD H DAD H DAD H DAD H POP D POP D DAD D PUSH H LXI H,2 DAD SP MOV E,M INX H MOV D,M POP H DAal variable ld (drive),a ld a,(drive) ; 0 => drive a, 1 => b ld (sdisk),a ; put into HIGH RAM ld hl,charset ; put beginning of font data ld (dmadr),hl ; into HIGH RAM in a,(sys_dta) ; get current bank set ld (dma_bank),a ; select it as dma bank ld a,(sec) ; put sector number ld (savsec),a ; into HIGH RAM call senden ; check for no disk in drive ,returns b = #secs/track jp nz,err1 ; if not 0, return error code 1 call chktyp ; check for Obsorne double dnesity jp nz,err2 ; if not 0, return error code 2 ld hl,(dside) ; Load side to I/O (0 or 1) ld a,l add a,l ; Shift it left one bit ld b,a ; Hold in B ld a,(savtyp) ; Load current savtyp value res 1,a ; Set side to 0 or b ; Set side per dside ld (savtyp),a{ 3bk9s#r!t|{ : !9^#Vs#rbk+ !*6&))))!9^#V"/5!F*6&))))!9^#Vn&"-5͏s' !.͜,͍ ͛*6& t|ʣ {*6& t| *6&` *6&*6& t| ͋ͫ;!9s#r!9^#V!t|x!9^#Vs#rbk+ !9s#r!9^#V!t|N!9^#Vs#rbk+&!X5!9^#V))))!9^#V*M5&};!9s#r!9^#V! t|wë!9^#Vs#rbk+Ã!9!F! 9n&))))!9^#Vn&}!9s#r!9^#V!t|ʘ!9^#Vs#rbk+& t|=!X5!9^#V))))!9^#V*M5&}d!X5!9^#V))))!9^#V*N5&}!9!9n&)}3!F!9n&))))!55!9s#r!t|!9^#Vs#rbk+æ!*6&))))!9^#V"/5!55!9^#Vn&"-5͏sö;!9s#r!9^#V! t|6!9^#Vs#rbk+!9s#r!9^#V!t|i!9^#Vs#rbk+A!X5!9^#V))))!9^#Vn&*N5&t|ʲ!9!9n&)Su}V!9!9n&)}V!9^#V!9^#V!9n&}#3*S5&s|*T5|*T5+ ; Place val in savtyp ld b,2 ; 2 sectors to I/O ld a,(rw) or a ; if rw = 0 jp z,rd_wr3 ; go to read call rd_wr4 ; call writing routine jp nz,err3 ; if not 0 return error code 3 jp rd_wr5 ; go to return rd_wr3: call rd_wr6 ; call reading routine jp nz,err4 ; if not 0 return error code 4 rd_wr5: xor a ; clear a ld (retcod),a ; returned error code = 0, no error ret err1: ld a,1 ld (retcod),a ; returned error code = 1, no disk in drive ret err2: ld a,2 ld (retcod),a ; returned error code = 2, wrong density ret err3: ld a,3 ld (retcod),a ; returned error code = 3, write error ret err4: ld a,4 ld (retcod),a ; returned error code = 4, read error  ret chktyp: ; checks for Osborne double dnesity ld hl,savtyp ;check for correct bytes/sector (1024) ld a,(hl) ; both must be true for Osborne double density cp doubtyp jp z,chkspt ; cp dstyp jp nz,derr ; chkspt: ld a,b cp doubsec jp nz,derr ret derr: or 0FFh ; return non-zero of not Osborne double density ret senden: ld de,sen_rtn jp gorom rd_wr6: ; reading routine ld de,rd_rtn jp gorom rd_wr4: ; writing routine ld de,wrt_rtn jp gorom gorom: ld a,(2) ld h,a ld l,05Ah jp (hl) page extrn svtpval ; ;Description: ; Interface to provide access to ROM SENSE DENSE (SENDEN) routine ; to wrtrck() and rdtrck(). Used to determinet !| !9s#r!!9n&t|E .9*6&} !9n&u|j .9*6&# } !9n&v|… .9s !9n&|¤ .9^#V!tç !|ʸ !9s !9!9n& },!9n&͡--!9n&!9n&t| !9n&!;M&*6& !"Q5."O5} !"V5"T5.}2S5l9s&|X &Qu[ !| *Q5*V5*O5*T5͜,!9Z-}!9X*&s|² *T5|ʨ *T5+"T5#!}2S5> &t| *V5 t| *V5#"V5+!}2S5> &v| *V5| *V5+"V5#!}2S5> &u|3 *T5t|) *T5#"T5+!}2S5> &|u *N5&!X5*V5))))*T5*N5&}!"E5͒> &|· *M5&!X5*V5))))*T5*M5&}!"E5͒> &| f!"E5͒> &| O!"E5͒> &| H!"E5͒> &|3 A!"E5͒> &|R A!"E5͒> &|q ͌!"E5͒> &| A!"E5͒> &|¯ ͸!"E5͒> &| !"E5͒> &|> !"E5͒> &| *6& if disk is double ; sided. ; ;Input Environment: ; drvspc is set to drive # (0 = A, 1 = B) ; ;Output Environment: ; retcod = sectors per track (as returned in register B by SENDEN) ; svtpval = value placed in SAVTYP by SENDEN (indicating # sides ; in bit 1). sns2: ld hl,(drvspc) ld a,l ld (sdisk),a call senden ld a,b ld (retcod),a ld a,(savtyp) ld (svtpval),a ret  ret senden: ld de,sen_rtn jp gorom rd_wr6: ; reading routine ld de,rd_rtn jp gorom rd_wr4: ; writing routine ld de,wrt_rtn jp gorom gorom: ld a,(2) ld h,a ld l,05Ah jp (hl) page extrn svtpval ; ;Description: ; Interface to provide access to ROM SENSE DENSE (SENDEN) routine ; to wrtrck() and rdtrck(). Used to determine>@w+r+s+@1: 2 r+sA: =* >jV/o/g ڮA~@w:]2^s+++~ s2^q+p:^O!;>2 }|!; s#rͅ y A!>/P͔A~W+++~P+%2nd COMMON Larger /*;" |2 * ͅ A> j~@wA7U: >8: =->G: =7>@w@w+w++1: 2 : : =r+sA!HIF5#wj~+ܾU6+6++r+sA*K:J2 fU: ;: =>@w+6++r+sA:!A>.2!2P* !J͞!g2!+}2_! w#!ڐ ‚! \" " : :Z!ګ!  w#! ¸+w2!͞A!!?/D illegal with common runtime?No code can be loaded before program withcommon runtime not found, please create header file?End of file on common runtime header!aǗzʣ̈́"Qb! ^#V! ͪ!;ͪyک: * * ͅ * " * '* * * BK   \! ~# != = = \* ͅ = *ͅ = s#r"N2 * * ͅ ʐ ʅ 2 M\: z x/Gy/O~w#~wM M" z _z! ^#V   $ 2 = ] m `i ^+V! 4* M ! 4Ð ! 5 PY\  s #r lg   # |/g}/o   DM!>= ))K K z zi  BK}o|g҄ : ʫ ͅ ҫ | >]P͔: : $>2*Q"!o&'  d   >0G /}o|g x0   > xPH>G~#' j~@+^+V$MEMRY$$PROG$COMNM*QA!Hw#] j{ ~@{ +^+V"Q! 2A! ?Start symbol - - undefinedg  ~#³ ͞ REL7*`}2X:c` j: j͔ p @p ͔`p p p * } , >wk  :`? !K * !b  Undefined Global(s) Bytes Free 2bP  ~O~>-ʑ > >/P+^+V+~P ™ /PN~ ʼ !ÿ "~ N+^+V>>PN:b?2b̔>wt :bȯ2b* " ͅ " " ";" " ͅ 7* * * ͅ ]!* * * BK* * * * * " * * BK* * " " " "; ~w#~wPYb>̈́BKj~@: ~@w+~_q+U: =>Cw+p+q+r+sA! ͔A%Mult. Def. Global ~@*`+"`PYb>̈́BKůj~+nN+F@‡: ›:B(b: =›zAA;|A: ›r#sA: ›|A\zA#U: =ʯ>Bw+r+s+r+sA*`#"`!7~#46+wxG ɯ2 7Y!HYH!Hw74#6 _Gw#;!T"7O<2 XP̊wwO!9 N#F 2[: ʚ2[AC( r>-: " *=>2 * ͅ A*=>j+^+V\"?Ab: =#<2 =A: A*= APY7* K" !*="=* !" }2 <2 A:[* * |G}ʼ~O©H©A+++¨+—~ y/O oHOx_Ow#2 +w+w+w+ w+w+k [ M  ~++GOŸ& H+D ; & yE >  * [ S } 7~k ~~r <</_* Å |}! 6S#6Y#6M<$>* * ͅ ~O~@ +^+V > h%+~h% > h%= >~ <</O ß ͑&%|}G[h%> h%> h%:WG)0P) 60P3|L}U[P0:͔! ~#foN"N"N>>PÔRQUESTͬæ* : * ͅ ~_~@+++~#* BK" ö+++ö2!2 2 2 : go" " " 2X" <2 : * * * * *=͝QiEZͿE! ~#foBK#: =ʝ: ”* |ʊҔ}Ҕ͝p#: ”* |ʲҔ·}ҔÔ: =: Uw+p+q+p+q#Bi++s" ͇:7>[?@2g ԇx " h 5)> F6 #=>x2f y.̇p xanbʃ!p ~ ƒ6R#6E#6Ly[ҥ0ڥAҡ:ҥÊ[ʡ]ʡ@ʡ\ʡ^ʡ_ʡOb: : 2 BK|A~_q#Vp\AU: =(16,9,18); blank(18,9,35); if (command == '1') { reverse(); iomen1(); nreverse(); if (contread(mnC1) == TRUE) { rdtrck(1,ioC1,2); /* read from the main systems track */ } iomen1(); } else if (command == '2') { reverse(); iomen2(); nreverse(); if (contread(mnC1) == TRUE) { rdtrck(3,ioC2,4); /* read from the alternate systems track */ } iomen2(); } } mainmenu(); } /* read from the system tracks sttsector = 1 for main, 3 for alternate promptptr pointer to "Main System Set" for main, "Alternate" etc for alter asource = 2 for main, 4 for alternate */ rdtrck(sttsector,promptptr,asource) int sttsector,asource; char *promptptr; { extern int rwflag,secstart,drvspc,edsmade,arrsource; extern char retcod; drvspc = getdrvspec(= 4; } else { retcod = 0; } } } rbyte() { extern int eoffound,bufcnt,charcount; extern char iobuf[128],areg; if (eoffound == TRUE) { return(0); } else { if (bufcnt == 128) { areg = bdos(20, altfcb); if (areg != 0) { eoffound = TRUE; } bufcnt = 0; } return(iobuf[bufcnt++]); } } /* get drive specification returns 0 for drive a, 1 for drive b negative number for carriage return exit */ getdrvspec() { int drivespec,okchoice; char drive; curpos(18,9); putst("Enter drive (A, B, or to exit)"); okchoice = FALSE; while(okchoice == FALSE) { curpos(18,49); drive = inpchar(); upchar(&drive); if ((drive == 'A') || (drive == 'B') || (drive == CARRET)) { okchoice = TRUE; drivespec = drive - 'A'; } else putchr(7); /* alarm */ } blank(18,9,43); return(drivespec); } /* enter me); /* get drive specification */ if (drvspc < 0) /* if carriage return selected */ return; curpos(18,9); putst("Reading "); putst(promptptr); putst(" from "); putchr(drvspc + 'A'); putcolon(); snsdns(); /* Call SENDEN to determine # sides */ if (retcod == 5 && svtpval == 0xE) { /* If dsdd */ if (sttsector == 3) { /* If alternate font, call rdafsys() */ rdafsys(drvspc); } else { /* Else read from side 1, track 0, */ rwflag = 0; /* sector 2 */ secstart = 2; trkstart = 0; dside = 1; rd_wr(); } } else { /* If ssdd */ rwflag = 0; /* Read from side 0, track 2, */ secstart = sttsector; /* sector = sttsector */ trkstart = 2; dside = 0; rd_wr(); } sioerr(); /* show err if any */ if (retcod == 0) /* if no error, no edits since last I/O */ { curpos(18,9); putst(promptptr); putst(" read from ""T5#*S5&t|(*V5 t|*V5#"V5+*S5&v|E*V5|*V5+"V5#*S5&u|*T5t|*T5#"T5+!9s#r!9^#V!t|LÛ!9^#Vs#rbk+sbk9s#r!t|ʈ!9^#Vs#rbk+å!X5!9^#V))))!9^#Vn&*N5&t|"!X5!9^#V))))!9^#V*M5&}õ!X5!9^#V))))!9^#V*N5&}õ;!9s#r!9^#V!t|DÅ!9^#Vs#rbk+]!9!X5!9^#V))))n&}!9s#r!9^#V!t|!9^#Vs#rbk+ï!X5!9^#V))))!9^#V!X5!9^#V))))!9^#Vn&}!X5!9^#V))))!9n&}r3;!9s#r!9^#V!t|=~!9^#Vs#rbk+V!9!X5!9^#V))))n&}!9s#r!9^#V!t|!9^#Vs#rbk#ì!X5!9^#V))))!9^#V!X5!9^#V))))!9^#Vn&}!X5!9^#V))))!9n&}k3;!9s#r!9^#V!t|=w!9^#Vs#rbk+O!9!X5!))))!9^#Vn&}!9s#r!9^#V!t|!9^#Vs#rbk+æ!X5!9^#V))))!9^#V!X5!9^#Vbk#))))); putchr(drvspc + 'A'); putcolon(); putst(" "); edsmade = FALSE; arrsource = asource + drvspc; /* source of set is main sys tracks */ arraysource(6,9); } else blank(18,9,36); } rdafsys(drspc) int drspc; { extern int eoffound,bufcnt,charcount; extern char iobuf[128],retcod,areg; clfcb(altfcb); altfcb[0] = drspc + 1; /* Make drive # in fcb relative 1 */ /* (Drive A = 1, B = 2) */ strcpy(altfcb + 1, "ALTFONT SYS"); /* Copy file nm into fcb */ areg = bdos(26, iobuf); areg = bdos(15, altfcb); /* Open file */ if (areg == 0xFF) { /* Open failed */ retcod = 4; /* Set err code for rdtrck() */ return; } else { altfcb[32] = 0; eoffound = FALSE; altfcb[32] = 0; /* Clear current record field of fcb */ bufcnt = 128; /* Force read 1st time */ for (charcount = 0; charcount < 2048; charcount++) { charset[charcount] = rbyte(); } areg = bdos(16,altfcb); if (eoffound == TRUE) { retcod !9^#Vn&}û!X5!))))!9^#V!9n&}d3;!9s#r!9^#V!t|=w!9^#Vs#rbk+O!9!X5!))))!9^#Vn&}!9s#r!9^#V!t|!9^#Vs#rbk#æ!X5!9^#V))))!9^#V!X5!9^#Vbk+))))!9^#Vn&}û!X5!))))!9^#V!9n&}d3bk9s#r!t|p!9^#Vs#rbk+M!9s#r!9^#V*V5t|ã!9^#Vs#rbk#{!X5!9^#V))))!9^#V!X5!9^#Vbk+))))!9^#Vn&}Ð!X5*V5))))!9^#V*M5&}]!9s#r!9^#V!t|H!9^#Vs#rbk+ !9 s#r*T5t|ʽv!9^#Vs#rbk#S!X5!9^#V))))!9^#V!X5!9^#V))))!9^#Vn&}c!X5!9^#V))))*T5*M5&}5!9s#r!9^#V!t|ʵ!9^#Vs#rbk+!9*T5s#r! t|ʑJ!9^#Vs#rbk+'!X5!9^#V))))!9^#V!X5!9^#V))))!9^#Vn&}7!X5!9^#V)))) *M5&}bk9s#r!t|ʉ!9^#Vs#rbk+!9*V5s#r!9^#V!" 7ɩ))'):B($: ̈́: r2 * * DM* " *= "=* BK" " " " * " Ͷ'* |‡}ʠ~_|!^#V* " (M\~#+>>><2Z=O! $! ^#V0y=Uy?\ͅ ?\|y! i! us#rx^#V͞! p#”* ! N#F#~#fo! ^#V  ! ~#foͅ H! {_{_~H! ^q#Vp! ~s#_~rW}&: $#qͅ {_! 6)`i{ڠ! #Yš* * 6* " * * " ͞* ͅ ҙ" ! yڬ! ^#V ڻ F#fh! ^#V ^#Vy! ^nu choice at row,column allow entries between and including lobound and hibound */ entchoice(row,column,lobound,hibound) int row,column; char lobound,hibound; { int okchoice; char command; okchoice = FALSE; while(okchoice == FALSE) { curpos(row,column); putchr(' '); putchr(BKSPC); reverse(); command = inpdchar(); /* input command */ nreverse(); if ((command >= lobound) && (command <= hibound)) okchoice = TRUE; else putchr(7); /* alarm */ } return(command); } /* display system track I/O error if any */ sioerr() { extern char retcod; if (retcod != 0) curpos(20,5); if (retcod == 1) putst("No disk in drive or unformatted"); if (retcod == 2) putst("Disk is wrong density"); if (retcod == 3) putst("Hard write error"); if (retcod == 4) putst("Hard read error"); if (retcod != 0) { curpos(21,10); #V^#V! s#r Gyx! @s#r#1xS|W}_x2 * 2 yoxg* " *="=*?PYͅ ڙ"?: ʹ=¯* !" * * ͅ үï͝*={OzG* * DM7xw#  +x~+ xw+ : 7={O>: 7J?Intersecting wO* ͅ <26: ?Oʣ: Jͅ Jͅ J!M>,P*6&0M^#Vy!HF#~#P>(P>)P: " Start = External Public = %* putst("Press to continue"); inpchar(); blank(20,5,31); blank(21,10,26); } } /* display IO menu */ iomenu(iotype) char *iotype; { header(); /* clear screen and display program title */ progdesc(); /* display program description */ arraysource(6,9); /* display source of memory array */ curpos(8,4); reverse(); putblank(); putst(iotype); putblank(); nreverse(); curpos(10,4); putst("Do you want to:"); iomen1(); iomen2(); curpos(14,9); putst("3 - Exit to the Main Menu"); } iomen1() { extern char *ioC1; curpos(12,8); putblank(); putst("1 - Use the "); putst(ioC1); putblank(); } iomen2() { extern char *ioC2; curpos(13,8); putblank(); putst("2 - Use the "); putst(ioC2); putblank(); } iochoice() { curpos(16,9); putst("Enter selection "); }  "!2Z!:Z?!͙!͙! y-!* * ͅ #* " ͅ |!*Sͅ "yb!*Sͅ "ͅ ڵ!*Sͅ ڮ!!!ù!!!!!!!2 YxbelowaboveOrigin loader memory, move anyway(Y or N)?ͅ 0"ͅ D" "!ͅ D"yS": W"*Sʀ"a"Oͅ €"y*S€"! ͅ ҇"!9;;;;;;ͅ "ͅ ڣ"z"&'7"ڿ"""ͅ #ͅ #"z"7* ";* "=* *;)##+#KP*;";!* BK*;* *=l#ʮ#l#O* * " * *=BK* *="=#PY* " * " Ø#* *=#BK* * " * * " " *=" *;" ! 8$~R#~E#~L4$:c)$7$w+)$COMHEX`$  <%2 : $}$* * ͅ $!c~ʌ$ ~$:\ʲ$: µ$*Q\" " &yO: &w&%*Q|$ͅ $%ͅ $ͅ $.%>%7Ԓ%R%:verse(); curpos(10,4); putst("Do you want to:"); iomen1(); iomen2(); curpos(14,9); putst("3 - Exit to the Main Menu"); } iomen1() { extern char *ioC1; curpos(12,8); putblank(); putst("1 - Use the "); putst(ioC1); putblank(); } iomen2() { extern char *ioC2; curpos(13,8); putblank(); putst("2 - Use the "); putst(ioC2); putblank(); } iochoice() { curpos(16,9); putst("Enter selection "); } ror"); if (retcod != 0) { curpos(21,10); putst("Press to continue"); inpchar(); blank(20,5,31); blank(21,10,26); } } /* display IO menu */ iomenu(iotype) char *iotype; { header(); /* clear screen and display program title */ progdesc(); /* display program description */ arraysource(6,9); /* display source of memory array */ curpos(8,4); reverse(); putblank(); putst(iotype); putblank(); nre %yO%>%R%: Ă% <%>h%*Q}h%|h%سȯh%zG%%z~#h%\%!: _w{<%2  %%"%yO#"%!%\%.%fh%¹%! ~+ x :_*Q:_*Q\!%?Can't save object file{{ _zW;&> A&{ H&O>:h%y Y~# c&+&>:h%G*Q >>h%!*'͞'!0'͞'!3'͞'!9'͞'##²&##͞'##¿&#͞'!z'͞'!'͞'* "'* "'* "'* "'* "'* "'&'m&'͓','V'G'V'l'|'V'l'|'V'l'|'!' N#F#^#V#~#fo|} +x~+ q'xw# |'xw# Ó'~#fo&'q#p:B(* ͅ ~'M(:J2A(*;" 2 U6+:A(wAMz(2A(7(:B((*;" :A(2B(*;r#s+:A(i(*;͢(" 2A(2B(!* p# P(!HN#*~# ^(Ar#s *){ʅ({ƀ_҅(zʞ()Å(ͣ) *)!.*ʹ)!.*V#^(((!((ʹ)(z(!.*ʹ)(ͣ)z{7.t|d!9^#Vs#rbk+!X5!9^#V))))!9^#V!X5!9^#Vbk#))))!9^#Vn&} !X5!))))!9^#V*M5&};*G5|´9!#*I5!ͻ9s*G5+|9!#*I5!ͩ9s!9!#*I5!͗9s& !#.2ͥ*3!9s#r!9^#V! t|ʷJ!9^#Vs#rbk+"*Q5!9^#V*O5͜,bk9s#r!t|7Î!9^#Vs#rbk+k!X5!9^#V))))!9^#Vn&{*6!9n&!t tn&*6!9n& tn&!.ͻP!.͜,,v*6&ͺv-!.!.͜,!.ͅ,Z} ͣ!.͜,!.! )͜,!/! .͜,!,/! .͜,!G/! .3͜,!_/!.͜,!t/} !.͜,!/! .͜,!/! .͜,!/! .͜,!/! .͜,!0!.#͜,!(0! .͜,!?0! .͜,![0! .͜,!m0! .͜,!0!.͜,!0!.͜,!0!.͜,!0! .4͜,!0! .4͜,!1! .4͜,!!1! .4͜*z w#)0:ww:*!;) )+ )!1)?Segment , file not foundcan't create fileread errorDisk is full)!@))!O))ͣ)!a))ͣ)!l).***‹)*—).**qnp>v&:*|t!Hv:Gv6q:*nq*"v|> v&}> v&:v>v&:v>v&͉qÐp*hv*7͎ҥr:u®qïq͎ҥrtWr|¦qqtqqq:IvLr={rڦqqLræq{ræq!Dv:Iv7ȷ:Iv=4rLr;r:Gvo&A> trr1ru(r;r>3IvxeÏq{rA%rQr*7#"7u>2Iv͈C>t:Iv={rLrnræqgo2Dv2Iv#C>2Dv>2Dv2Iv*Gv&"hv|2u͔ xr+!Dvf:Ivo=Lr{r}2Iv|2Dv"hv>2u*Gv|g*Gv͹R8L͉V*Gv"Gv2Av"Ev`i"Bv2?v< ,!81!.4͜,!Q1!.4͜,!b1!.4͜,!s1!.4͜,!1} ,!.͜,! .le!.͜,! ..e!. ͜,! ..e!.͜,! .le!. ͜,!B.le!. ͜,!..e!.M͜,!..e!. ͜,!B.le,!.͜,!1!.͜,!1{bk9s#r! 9^#Vt|Ü!9^#Vs#rbk+s!9n&!9^#Vbk+|‰͋! !{É͋bk9s#r!9^#Vt|3!9^#Vs#rbk+! 9^#V!9^#V! 9^#V!9^#Vͥ*!.. ++9!.. .?9!. .:ͥ*! ;*6-|“3!9s#r!9^#V!t|!9^#Vs#rbk+Þ!O!9^#V!O!9^#Vn&}ó!9s#r!9^#V!$t|A  !9^#Vs#rbk+!N!9^#V!O!9^#Vn&} *O.Z*O͇Z!. ͜,!1!9!.1*O*OyS9s#r!9^#Vbk|œ e^)3!!'Ou}2O!!Ou}2O*O&| ..͜,!1Z-e!...ͥ*^)3e!)!!Nu}2O*O&|J)!"6..͜,!+3Z-!..5ͥ*!"6!'O(O6bk9s#r!t|ʰ)Ì)!9^#Vs#rbk+i)!O!9^#V!O!9^#Vn&}y)bk9s#r!$t|*)!9^#Vs#rbk+ú)!O!9^#V!N!9^#Vn&})bk9s#r!9^#V!9^#Vn&|V*=*!9^#Vs#rbk+*!9^#V!9^#VX***!9^#Vn&at|ʂ*!9^#Vn&ztÅ*!|!9^#V!9^#Vn&_ t}!9^#V!9^#V͜,bk9s#r!9^#Vt|**!9^#Vs#rbk+*! *;!9s#r!9^#Vbk|–+. 9^#V! 9^#V͜,! !,!9͆-_ t}-&|r+bk9s#r9s#r&| +#9s#r9s#r +!9^#V3ͅ,`,!. ͻP!.͜,!`3! +͜,!p3! ++͜,!3! . ͜,!3! . ͜,!3!. ͜,!4!. ͜,!<4!. ͜,!h4!.͜,!}4!#͜,!4!#͜,!4,!.͜,!4!!=!9^#V!!9^#V!!!!)!!(!!j. ͜,!1,v!Ov-!"E5!O s!6##s"6!"6l"6*6t|j!*6tm!!|4"!9s#r!9^#V! t|ʫ!å!!9^#Vs#rbk+}!ͳ#Ò!!"6*6t|!!6ͳ#}!6#ͳ#}!F*6!6͑"}*6#"6+*6#"6+ñ!!9s#r!9^#V!t|P!."!9^#Vs#rbk+"ͳ#"!!Ou}2O!. .*ͥ*!. ͜,!2,v!Ov-!"O.. ͻP3!9s#r9s#r9s#r!9^#Vbk|ʥ#!9! 9^#V! 9^#Vn&}!9n&0t|#!9n&9t#!|#!90sW#!9n&At|8#!9n&Ft;#!|L#!97sW#!9s#r!9^#Vbk|ʔ#!9!.9^#Vt!9n&!9n&eus#r!9^#Vs#rö"!9^#V!9;*6+|¿#3*6|$.!Ou}2O*O&|$!.͜,!22Z-!..-ͥ*!"6!"6!9!'O*6n&}*6#"6+&3*N.Z*N͇Z!. ͜,!_2!9!.2*N*NyS9s#rbk|Ž$e!!Nu}2O*O&| %!!Nu}2O!.͜,!2!9!.1*s#re!..-ͥ*!9^#!!kbk9s#r!t|X-C-!9^#Vs#rbk+ -!F!9^#Vs0-;bk9s&|€-9!.u}c-&3;!9Z-}&͡-&3!9n&t|-!9n&t-!|!9n&0123456789ABCDEFContinueeditcopyMain System SetAlternate System SetOK to exitThe character set has not been saved. ? (Y/N)Enter character to in hexadecimal Enter character to in decimal Enter the character to is the HEX value of the current characteris the current characterCharacter Selection MenuH - Entry by HEX valueD - Entry by decimal valueC - Enter the character - Done editingSelect Character Entry MethodCharacter Entry MenuUp Arrow - return to selection menuRight Arrow - edit next characterDown Arrow - edit same characterESC - return to main menuCharacter Editing MenuPosition Cursor with Arrows. - turn pixel on - turn pixel offQ - Quit without update - done editing this charI - Invert all pixelsC - Copy another characterL - shift characteVbk| %e!. ͜,!2,v!Nv-!!Nu}2O!!Nu}2O*O&|%..͜,!2Z-!..Dͥ*!!'Ou}2O!N s"6!"6"6"6*6t|%*6t%!|%&þ%!d(!9s#r!9^#V!t|,&!&!9^#Vs#rbk+%!d(&!d(!d(*6|›&)*6|›&.!Nu}2O!. .*ͥ*!. ͜,!3,v!Nv-!"E5*6+|&.!Nu}2O!. .*ͥ*bk9s#r!d(!d(!d(!9!9^#V! ts#r*6 !t td(*6!t td(!9!9^#V*6!teu ts#r*6!t td(*6 td(!9!9^#V*6 teu ts#r"6!d(!d(*6t|4(!F*6n&!t td(!F*6n& td(!9!9^#V!F*6n&eu ts#r*6#"6+*6#"6+*6#"6+ñ'!!t td(! td(!d(!d(*6+|!9n&|‹(!'O*6 s(!9n&|«(!'O*6 s(!9n&|(!'O*6:s(!'O*6*6!9n& tn&}*6#"6+*6|!r LeftR - shift character RightU - shift character UpD - shift character DownN - iNsert a rowE - dElete a rowS - inSert a columnT - deleTe a columnCharacterSetEnter the file to read (d:filename.typ)File not found. Press any key to continue.Reading character set from Character set read from EOF in file read. Press any key to continueEnter the file to write (d:filename.typ)File already exists. OK to continue? (Y/N)Writing character set to Full directory on file creation - Press any character to continue.Character set written to Disk full on file write - press any key to continue.Do you want to:1 - Read the systems tracks into the character set2 - Read a file into the character set3 - Edit the character set4 - Write the character set to the system tracks5 - Write the character set to a file6 - Write the character set to the font RAM7 - Exit the programEnter your choice (1 - 7)This program allows you to edit a character set in memory andstore it on various media.Osborne Executive Character Font Generator V1.1!S,v*O|Q!oSzQ*O+|3Q!OzQ*O++|IQ*OtLQ!|fQ*35*O++́QzQ*15*O++++́Qv-v!9^#V!A͘Q!:,bk9s#r!t|QQ!9^#Vs#rbk+ïQ!!9^#V"/5!F!9^#Vn&"-5͏sÿQbk9s#r!t|JR+R!9^#Vs#rbk+R"/5!6!9^#Vn&"-5͏sRbk9s#r!t|ʣRzR!9^#Vs#rbk+WR!!9^#V"/5!>!9^#Vn&"-5͏sgRbk9s#r9s#r!9^#V!9^#Vn&0t|R!9^#V!9^#Vn&9tR!|MSS!9^#Vs#rbk+üR!9! .9^#Vt! 9^#V!9^#Vn&s#rSThe working character set is a new set!9s#r!9^#Vbk|X.9^#V.Z!9^#V͇Z! 9^#V! 9^#V!ͥ*,! 9^#V! 9^#V͜,!9!9^#V!lͅ\s#r-!..Fͥ*!9^#Vbk|.T9!9^#V*!9s#r!9^#V!s9s#r!9^#Vbk#n&|T.9s#r!9^#Vn&|ʢT!9^#Vn&BtåT!|T!9^#V!9^#Vn&#}T!9s#r!Z!Z!9s#r!9^#Vbk+|V.9s#r9s#r 9s#r!9^#V! 9^#Vt|`U! 9^#V!t|`U!9s#r|`U!9^#V!tcU!|V~U!9^#Vs#rbk+U!9!9^#V!9^#Vn&!,Ys#r!9^#V!9^#Vn&|U.9s#rkU!9^#Vbk#! 9^#V!9^#V!9^#Vn&}! 9^#Vs#rbk+kU! 9!9^#Vs#r! 9^#V!|KV.9^#V!9^#Vn&.tNV!|mV!9^#Vs#r9s#r! 9^#Vbk|V.9s#r!Z!Z!9^#Vbk+|X9s#r9s#r!9^#V! 9^#Vt|V!tV!|ZWV!9^#Vs#rbk+ñV!9!9^#V!9^#Vn&!,Ys#r!9^#V! !9^#V!9^#V!9^#Vn&}!9^#Vs#rbk+V!9^#V!t||W!9^#V!tW!|ʙW!Z![bk9s#rbk+|X.9^#Vbk+|W.9^#Vbk|X!Z![bk9s#rÝX!9^#Vbk|‡X.9^#V! Cs!9^#V! Hs!9^#V! Rs!9^#V!9^#V.s!9^#V!9^#V#Cs!9^#V!9^#V##Hs!9^#V!9^#V###Rs!9^#V!9^#V####sÝX!Z!#[!9s#r!9!9^#V|X!9^#V|X!9^#VX!s#rÐS!9^#V! s!9^#V! s!9^#V!sOOͦPO*+5}2O*)5}2O*'5}2N*#5}2O:O2P!F"K2J:O2M͍P]PuPcP*%5}G:Qˏ2Q:ORP͙PiPXP͓PoP2"5>2"5>2"5>2"5>2"5!Q~ ʃPŠPxŠP`ßPZßP]ßP:g.Z*#5}2P͍Px2"5:Q2!5!9^#V!9^#V͜,!9^#V!9^#V!Aͥ*!9^#V!9^#V͜,!Q"!9^#V!s!9^#V! s-!9!9!6[s#r9s#r9! 9^#Vs#r!9^#V! t|ZÀY!9^#Vs#rbk+XY! 9n&!9^#V!9^#Vn&t|mY!9s#r!Z,v! 9n&|Y!C[Y! 9n&v-!I[!9^#Vbk|Z!`[Z!e[!9 s#rmY!.͜,bk9s#r!t|uZ\Z!9^#Vs#rbk+9Z!9^#V!9^#V sIZ!9^#V!sbk9s#r!$t|ZõZ!9^#Vs#rbk+ÒZ!9^#V!9^#V sâZDrive must be A or BFile name can not be blankFile type too longBlank file typeFile name too long.><,;:=?*[] SPACE is invalid in a file typename,! .͜,{!͋![!\!3\!.͜,{!͋!F\!]\!s\bk9s#r! Nt|[!9^#Vs#rbk+[ 1983 Osborne Computer Corporation, 26538 Danti Court, Hayward, CA 94545 1984 Future Systems, 828 Nob Hill Avenue, Pinole, CA 94564;bk9s#r9s#r!9^#Vbk|i^.9Z-}!9n&v|\!9n&t|\!9n&u|\!9n&t\!|T]! "+5##")5++"'5#"%5O6e!"+5.9^#V")5!"'5++"%5O3h*"5&|˜e.. ͜,!9^#V!jj*#5A͘Q!vj!"E5##9^#V*#5"O!. ͻP!. .$ͥ*!uk͇Z!uk!9^#Vs!uk#!zjl!!'Ou}2O!!uku}2O*O&|f.}2"5!uk s"6!uk s"6!"6*6t|ZfHf*6#"6+,f!F*6̓f}=f!!uku}2O*6+|{f.}2"5!}2"5*6+|f*6|¿f.!uku}2O*O&|ʹf!"6!"6!'O*6#"6+n&;!. ͜,!j!9s#r!9^#Vbk||g..1͜,!9Z-}!9X*&|Fg&|Fg& tIg!|qgbk9s#r9!9n&s#rf!f!. .+ͥ*!9^#V3;!9s#r!9^#Vbk|.h. 9^#V! 9^#V͜,! !,!9͆-}-&! 9n&t|h&!9n&th!|#hbk9s#råg!åg&3*"5&|Ih!.͜,*"5&+|\h!j*"5&++|ph!j*"5&+++|…h!j*"5&++++|›h!j*"5&|!. ͜,!kZ-!..ͥ*!. .ͥ*ͅ,`,!. ͻP!.͜,,v!9^#Vbk+|I].9s#r9n&|4]##9s#rÞ\!9!9n&s#rÞ\!Þ\!9n&|‚].9s#r9!9^#Vs#rÞ\!9n&s|]9^#V!t|]!9^#Vs#r!-! ,!Þ\!Þ\!9n&t|]!9n&t^!|^^! 9^#Vt|S^! 9^#V!9^#V!9n&}!9n&!9^#Vs#rbk+Þ\!Þ\!Þ\! 9^#V!9^#Vs!9^#V!9;!9!..1##͘g9s9n&3;!ih!9 s&|_́i!9͌^}!. )ͥ*&|__^&|^{_^͢+3bk9s#r!t|m_I_!9^#Vs#rbk+&_!6!9^#V!F!9^#Vn&}6_!"6+_bk9s#r!t|_é_!9^#Vs#rbk+Æ_!>!9^#V!F!9^#Vn&}Ö_!"6_!.͜,!i!9^#Vbk|`!i`!i!i;!ih!9 s&|ʵ`́i!9͌^}!. )ͥ*!. .#ͥ*&|Œ`,=i-!*35ͺ`=i)`&|)`,_i-!*15ͺ`_i)`͢+3f"#5t|!. ͜,!j!9^#V! j*#5A͘Q9^#Vv-! .͜,! k=i_i!. ͜,!0k! .͜,v!Jk*35v! .͜,v!Wk*15v!. ͜,!dkWrite to the Font RAMCharacter set will be written to MainAlternate font RAM on program exit. Write to the System TracksWriting to written to ALTFONT SYSRead from the System TracksReading from read from ALTFONT SYSEnter drive (A, B, or to exit)No disk in drive or unformattedDisk is wrong densityHard write errorHard read errorPress to continueDo you want to:3 - Exit to the Main Menu1 - Use the 2 - Use the Enter selection !9^#VDM`in&|ʴk`iäk!9^#Veu!9n&DMk|k lk!!9n&DMAt|l`iZtl!!9n&DMat|)l`izt,l!!9n&DM0t|Sl!9n&9tVl!!9n&!|ʍl!|ʍl!|ʍl!|ʍl!|—l!t!tt!9n&DMat|l`iztl!|l! eu`i!9^#VDM`i!9^#Vs#rbk+n&O*"5&|a*!5&t a!|Ya!9^#V!|@a*#5awa!"+5#")5++"'5#"%5Owa!"+5.9^#V")5!"'5++"%5O3h*"5&|¸a.. ͜,!9^#V!%j*#5A͘Q!"E5!. .$ͥ*!uk͇Z!uk!9^#Vs!uk#!2jl!uk n& t}!uk n& t}!!uku}2O!!uku}2O!!uku}2O*O&|`b.}2"5!!'Ou}2O!uk s"6!"6"6*6t|ʻbèb*6#"6+Ìb!F*6n&#cÝbQc*6|c.!uku}2O!uk n&Su}!uk n&Su}!!uku}2O!}2"5!}2"5*6+|!'O*6#"6+!9n&}*6|Qc*6|!!uku}2O*O&|yc!"6!"6*6t|ʫcÛc*6#"6+c!'O*6sÐc!"6;!>jh!9 s&|sd́i!9͌^}!. )ͥ*!. .#ͥ*&|8d,=i-*6-+|2d#*35!xd=ic&|c,_i-*6-+|md.*15!xd_ic͢+3f"#5t|!. ͜,!Zj!9^#V!cj*#5A͘QO*"5&|d*!5&td!|e!9^#V!|d*#5ͩe6e!"}|l!9^#V!9^#VDM!9^#Vn&|Gm!9^#Vs#rbk+n&͖nm!9! 9^#Vs#r!9s#r 9!9^#Vs#rͺnDM|ʓm`i uÖm!|ʄn`i!|ʰm!|»m! ͖n^m!|m!|n!9^#Vbk|zm!9^#Vs#r 9^#Vs#r!͖n! ͖n!͖nzm!|an! ͖nbk9s#r!9^#Vt|zm!9^#V9^#Vs#rn&͖n*n! 9^#Vs#r`i}!9^#Vs#rzm! 9^#V!s!9n&|­n. u!9n&u!s"sn&|n*sn&DM*ssnuDM`i|n. `i*s!9n&}!9^#VDM! 9^#Vt|.o.9^#V!t1o!|8o! 9^#Vmu|co! 9^#V!9^#VoÐo!9^#V+! 9^#V!9^#V+!9^#Vo`i!9^#Vbk|¥o!9^#VDM!9n&}`i#! 9^#Vo`i!.v!9^#V!.9^#V!9^#Vv 9!Fv!9^#V!.9^#V!9^#Vv 9!9!9Lp!9^#V!99s#r9!9^#Vn&s#r9s#r9s#r 9! 9^#Vs#r)!ss#r! 9! 9^#V)!9!9^#V͠qs#r|p!9^#Vs#rbk+òp!9^#V9sid chartmp.com  ڋt}o|g)o怄g=ʩt)oÀt|guuz|uztuɷ}o|g#!}|!#}|!+DM!>)P C358 C359: LXI H,1 DAD SP MOV E,M INX H MOV D,M POP PSW POP PSW INX SP XCHG RET ENTRY mainmenu mainmenu: CALL header CALL progdesc LXI H,6 PUSH H MVI L,9 PUSH H CALL arraysource POP PSW POP PSW LXI H,8 PUSH H MVI L,4 PUSH H CALL curpos POP PSW LXI H,C1+1418 XTHL CALL putst POP PSW LXI H,10 PUSH H DCX H PUSH H CALL curpos POP PSW LXI H,C1+1434 XTHL CALL putst POP PSW LXI H,11 PUSH H DCX H DCX H PUSH H CALL curpos POP PSW LXI H,C1+1485 XTHL CALL putst POP PSW LXI H,12 PUSH H MVI L,9 PUSH H CALL curpos POP PSW LXI H,C1+1524 XTHL CALL putst POP PSW LXI H,13 PUSH H MVI L,9 PUSH H CALL curpos POP PSW LXI H,C1+1551 XTHL CALL putst POP PSW LXI H,14 PUSH H MVI L,9 PUSH H CALL curpos POP PSW LXI H,C1+1600 XTHL CALL putst POP PSW LXI H,15 PUSH H MVI L,9 PUSH H CALL curpos POP PSW LXI H,C1+1638 XTHL CALL putst POP PSW LXI H,16 PUSH H u = u)t|/g}/o#}o|g!u9DuvfuDu"v!!}/o|/g|g}o^#Vs#r}o|g}|!+}|!#|g}o!9"v"v!*v*v`i"vûu#uʸu*vDM`iDMo& &o&ovvo&!9F+N+V+^+~++F+N+V+^:v@vx~# 5vx:vx~+ Jvx*!ѷ¦!Ëvѷ¦!Ë&}!9^#Vs#rÃr!9^#V!s9!9^#Vhss#r9l!9^#V!9^#Vs#r!9^#V!9*vDM!9^#V#u|ʇs!`i[/5K-5y!w> ڋt}o|g)o怄g=ʩt)oÀt|guuz|uztuɷ}o|g#!}|!#}|!+DM!>)#; This procedure generates CHARGEN.COM from source. ; It works only on an Executive. ; DAB 10/13/84 cc chargen.c c2 chargen.cod era chargen.cod m80 chargen,=chargen.asm/m era chargen.asm cc chrnw1.c c2 chrnw1.cod era chrnw1.cod m80 chrnw1,=chrnw1.asm/m era chrnw1.asm cc chrnw2.c c2 chrnw2.cod era chrnw2.cod m80 chrnw2,=chrnw2.asm/m era chrnw2.asm cc chrnw3.c c2 chrnw3.cod era chrnw3.cod m80 chrnw3,=chrnw3.asm/m era chrnw3.asm cc chrnw4.c c2 chrnw4.cod era chrnw4.cod m80 chrnw4,=chrnw4.asm/m era chrnw4.asm cc chrnw6.c c2 chrnw6.cod era chrnw6.cod m80 chrnw6,=chrnw6.asm/m era chrnw6.asm cc chrnw7.c c2 chrnw7.cod era chrnw7.cod m80 chrnw7,=chrnw7.asm/m era chrnw7.asm cc chrnw8.c c2 chrnw8.cod era chrnw8.cod m80 chrnw8,=chrnw8.asm/m era chrnw8.asm m80 =io l80 - Done editing',0 DB 'Select Character Entry Method',0 DB 'Character Entry Menu',0 DB 'Up Arrow - return to selection menu',0 DB 'Right Arrow - edit next character',0 DB 'Down Arrow - edit same character',0 DB 'ESC - return to main menu',0 DB 'Character Editing Menu',0 DB 'Position Cursor with Arrows',0 DB '. - turn pixel on',0 DB ' - turn pixel off',0 DB 'Q - Quit without update',0 DB ' - done editindim dim: LXI H,27 PUSH H CALL putchr LXI H,41 XTHL CALL putchr POP PSW RET ENTRY bright bright: LXI H,27 PUSH H CALL putchr LXI H,40 XTHL CALL putchr POP PSW RET ENTRY reverse reverse: LXI H,27 PUSH H CALL putchr LXI H,106 XTHL CALL putchr POP PSW RET ENTRY nreverse nreverse: LXI H,27 PUSH H CALL putchr LXI H,107 XTHL CALL putchr POP PSW RET ENTRY clchrset clchrset: PUSH B LXI D,0 MOV H,D MOV L,E DAD SP MOV M,E INX H MOV M,D XCHG C364: POP D PUSH D LXI H,2048 EXT CCLT CALL CCLT MOV A,H ORA L JZ C363 JMP C365 C362: LXI H,0 DAD SP PUSH H MOV E,M INX H MOV D,M INX D POP H MOV M,E INX H MOV M,D MOV H,D MOV L,E DCX H JMP C364 C365: LXI H,charset PUSH H LXI H,2 DAD SP MOV E,M INX H MOV D,M POP H DAD D LXI D,0 MOV M,E XCHG JMP C362 C363: POP PSW RET ENTRY inpchar inpchar: DCX SP LXI D,0 MOV H,D MOV L,E DAD SP MOV M,E XCHG C3g this char',0 DB 'I - Invert all pixels',0 DB 'C - Copy another character',0 DB 'L - shift character Left',0 DB 'R - shift character Right',0 DB 'U - shift character Up',0 DB 'D - shift character Down',0 DB 'N - iNsert a row',0 DB 'E - dElete a row',0 DB 'S - inSert a column',0 DB 'T - deleTe a column',0 DB 'Character',0 DB 'Set',0 DB 'Enter the file to read (d:filename.typ)',0 DB 'File not found. Press any key to continue.',0 DB 'Reading character set from ',0 DB 'Character set read from ',0 DB 'EOF in file read. Press any key to continue',0 DB 'Enter the file to write (d:filename.typ)',0 DB 'File already exists. OK to continue? (Y/N)',0 DB 'Writing character set to ',0 DB 'Full directory on file creation - Press any ' DB 'character to continue.',0 DB 'Character set written to ',0 DB 'Disk full on file write - press any key to ' DB 'continue.',0 DB 'Do you want to:',0 DB '1 - Read the systems tracks into the character ' DB 'set',0 DB '2 - Read a fsid chartmp.com ESBASIC $$$CHARTMP SYMFOO SUBMIT OM*COPYSYS COM)SCOPY COMESNSTST C C2 COM_`abcdefghijklmnC2 COMopCHARGEN $$$ l ls:¬MA 0; column--) edbuf[row][column] = edbuf[row][(column - 1)]; edbuf[row][0] = temp; } } /* rotate editing array up */ shftup() { int row,column; char temp; for (column = 0; column < 16; column++) * enter in hex */ else if (entdec == 1) /* if last character entry in dec */ value = decentry(19,20,pptr2,FALSE); /* enter in dec */ else value = charentry(19,20,pptr2,FALSE); readchr(value); blank(19,20,50); } /* display editing array */ disparray() { int row,column; for (row = 0; row < 10; row++) { curpos(rowbase + row,colbase); for (column = 0; column < 8; column++) { putchr(edbuf[row][column]); } } } /* print argument in hex format */ puthex(byte) char byte; { putchr(*(trantab + ((byte >> 4) & 0xF))); putchr(*(trantab + (byte & 0xF))); } edhead() { arraysource(4,16); /* print source of memory array */ curpos(5,20); reverse(); putblank(); puthex(curchar); /* print current character being edited */ putblank(); nreverse(); putst(" is the HEX value of the current character"); curpos(6,22); putst("is the current character") { temp = edbuf[0][column]; for (row = 0; row < 19; row++) edbuf[row][column] = edbuf[(row + 1)][column]; edbuf[19][column] = temp; } } /* rotate editing array down */ shftdn() { int row,column; char temp; for (column = 0; column < 16; column++) { temp = edbuf[19][column]; for (row = 19; row > 0; row--) edbuf[row][column] = edbuf[(row - 1)][column]; edbuf[0][column] = temp; } } /* insert a row at present cursor position */ insrow() { int row,column; for (column = 0; column < 16; column++) { for (row = 14; row > edrow; row--) { edbuf[row][column] = edbuf[(row - 1)][column]; } edbuf[edrow][column] = offchar; } } /* insert a column at present cursor position */ inscol() { int row,column; for (row = 0; row < 20; row++) { for (column = 11; column > e; } /* printing editing borders, character set, header, etc */ editmenu() { header(); /* display header and clear screen */ border(); /* display character set and edit area border */ edhead(); /* display source of array, current character etc */ dschrb(); /* display character edited */ dispset(); /* display character set */ } /* print character selection menu */ selmenu() { curpos(8,25); putst("Character Selection Menu"); curpos(10,20); putst("H - Entry by HEX value"); curpos(11,20); putst("D - Entry by decimal value"); curpos(12,20); putst("C - Enter the character"); curpos(10,51); putst(" - Done editing"); curpos(14,20); putst("Select Character Entry Method"); dschrb(); /* display character to be edited */ return; } /* print character entry menu */ entmenu() { curpos(8,24); putst("Character Entry Menu"); curpos(10,23); putst("Up Arrow - return to selection menudcol; column--) { edbuf[row][column] = edbuf[row][(column - 1)]; } edbuf[row][edcol] = offchar; } } /* delete a column at present cursor position */ delcol() { int row,column; for (row = 0; row < 20; row++) { for (column = edcol; column < 11; column++) { edbuf[row][column] = edbuf[row][(column + 1)]; } edbuf[row][11] = offchar; } } /* delete a row at present cursor position */ delrow() { int row,column; for (column = 0; column < 16; column++) { for (row = edrow; row < 14; row++) { edbuf[row][column] = edbuf[(row + 1)][column]; } edbuf[14][column] = offchar; } } /* copy another character into present editing array */ chrcopy() { char value; if (entdec == 0) /* if last character entry in hex */ value = hexentry(19,20,pptr2,FALSE); /$"); curpos(11,20); putst("Right Arrow - edit next character"); curpos(12,21); putst("Down Arrow - edit same character"); curpos(13,28); putst("ESC - return to main menu"); } /* print character editing menu */ charmenu() { curpos(8,35); putst("Character Editing Menu"); curpos(10,18); putst("Position Cursor with Arrows"); curpos(11,24); putst(". - turn pixel on"); curpos(12,18); putst(" - turn pixel off"); curpos(13,24); putst("Q - Quit without update"); curpos(14,20); putst(" - done editing this char"); curpos(15,24); putst("I - Invert all pixels"); curpos(16,24); putst("C - Copy another character"); curpos(10,52); putst("L - shift character Left"); curpos(11,52); putst("R - shift character Right"); curpos(12,52); putst("U - shift character Up"); curpos(13,52); putst("D - shift character Down"); curpos(14,52); putst("N - iNsert a row"); curpos(15,52); 0,63); } blkrname() { blank(20,9,58); } putblank() { putchr(' '); } /* read HEX format file into memory array */ readhex() { int i,cont; char x; if (contread(mnC1) == FALSE) /* check to see if edits made since last read */ { return; } for (i = 0; i < 15; i++) /* save old read name */ oldrdname[i] = readname[i]; for (i = 0; i < 36; i++) /* save old read fcb */ oldrdfcb[i] = readfcb[i]; clname(rnmptr); /* clear hex file read name */ clfcb(rfcbptr); /* clear hex file read fcb */ curpos(20,9); putst("Enter the file to read (d:filename.typ)"); cont = infilnam(20,49,rnmptr,rfcbptr); /* enter new name and fcb */ if (cont == 0) /* if just RETURN */ { blkrname(); rstfcb(); /* restore fcb and name to old values */ return; } /* open file in readfcb */ areg = bdos(26,iobuf); /* set DMA address of file IO */ areg =  putst("E - dElete a row"); curpos(16,52); putst("S - inSert a column"); curpos(17,52); putst("T - deleTe a column"); dschrb(); /* display the character to be editted */ return; } /* print font and character set border */ border() { int i; dim(); /* font border */ curpos(5,2); putbox(10,LBOX,FALSE); /* top border of editing area */ curpos(6,2); putbox(10,FBOX,TRUE); /* left border of editing area */ curpos(6,11); putbox(10,FBOX,TRUE); /* right border of editing area */ curpos(16,2); putbox(10,UBOX,FALSE); /* bottom border of editing area */ /* character set border */ curpos(21,12); putbox(66,LBOX,FALSE); /* top border of character set */ curpos(22,12); putbox(2,FBOX,TRUE); /* right border of character set */ curpos(22,77); putbox(2,FBOX,TRUE); /* left border of character set */ curpos(24,12); putbox(66,UBOX,FALSE); /* bottom border of character set */ brighbdos(15,readfcb); /* open file */ if (areg == 0xFF) /* file not found */ { curpos(24,5); putst("File not found. Press any key to continue."); inpchar(); blkrname(); blank(24,5,46); rstfcb(); /* restore fcb and name to old values */ return; } blkrname(); curpos(20,9); putst("Reading character set from "); reverse(); putblank(); putst(readname); putblank(); nreverse(); edsmade = FALSE; *(readfcb + 32) = 0; /* set record count to 0 */ tempbuf[2] = 0; charcount = 0; /* character count = 0 */ bufcnt = 128; /* set buffer pointer to read */ eoffound = FALSE; while ((charcount < 2048) && (eoffound == FALSE)) { for (i = 0; i < 9; i++) /* read past address, etc. in hex file */ rdhexchar(); recptr = 0; while (recptr < 16) { tempbuf[0] = rdhexchar(); /* convert hex format to ascii */ tempbuf[1] = rdhext(); curpos(22,2); putst("Character"); curpos(23,5); putst("Set"); return; } /* display line of boxes in horizontal of vertical direction */ putbox(count,byte,vertyn) int count,vertyn; char byte; { int i; grfon(); /* graphics on */ for (i = 0; i < count; i++) { putchr(byte); if (vertyn == TRUE) /* if vertical display */ { grfoff(); /* turn graphics off */ putchr(LF); /* line feed - cursor down */ putchr(BKSPC); /* backspace */ grfon(); /* turn graphics on */ } } grfoff(); /* graphics off */ } /* clear a section of the screen */ clrsc2(row,column,rnum,cnum) int row,column,rnum,cnum; { int rcount; for (rcount = 0; rcount < rnum; rcount++) blank(row + rcount,column,cnum); } /* clear the editing array */ clredbox() { clrsc2(6,3,10,8); } /* clear the editing menu array */ clrmenu() { clrsc2(8,18,1%char(); /* each record in hex file contains */ charset[charcount] = xtoi(tempbuf); /* the 16 rasters for one character */ recptr++; charcount++; } for (i = 0; i < 4; i++) /* read past CRC and CR-LF in hex file */ rdhexchar(); } areg = bdos(16,readfcb); /* close file */ blank(20,9,42); curpos(20,9); putst("Character set read from "); reverse(); putblank(); putst(readname); putblank(); nreverse(); arrsource = 1; /* source of array is HEX file */ arraysource(6,9); /* display source of memory array */ return; } xtoi(s) /* converts s in HEX to integer */ char *s; { int i,n,hex_dec; char tmpchar,subchar; n = 0; hex_dec = 1; i = 0; while (hex_dec != 0) { tmpchar = *(s + i); if (tmpchar >= '0' && tmpchar <= '9') subchar = '0'; else if (tmpchar >= 'A' && tmpchar <= 'F') suf); /* set DMA address of file IO */ *(writfcb + 32) = 0; /* set record count to 0 */ bufcnt = 0; /* IO buffer pointer */ charcount = 0; /* character count = 0 */ address = 0; /* address in hex format */ diskfull = FALSE; while ((charcount < 2048) && (diskfull == FALSE)) wrhexlin(); wrhexchar(0xFD); /* eof record - write semi colon */ for (i = 0; i < 8; i++) wrhexchar(0); wrhexchar(0xFF); /* carriage return */ wrhexchar(0xFE); /* line feed */ if (diskfull == FALSE) { wrhexrecord(); /* write last record to hex file */ if (diskfull == FALSE) { areg = bdos(16,writfcb); /* close file */ blank(20,9,42); curpos(20,9); putst("Character set written to "); reverse(); putblank(); putst(writname); putblank(); nreverse(); edsmade = FALSE; /* no edits since last save */ } } if bchar = 55; else hex_dec = 0; if (hex_dec != 0) n = 16 * n + tmpchar - subchar; ++i; } return(n); } rdhexchar() { char byte; if (eoffound == TRUE) return; if (bufcnt == 128) { areg = bdos(20,readfcb); /* read file */ if (areg != 0) /* if end of file encountered */ { curpos(24,5); putst("EOF in file read. Press any key to continue"); inpchar(); blank(24,5,45); eoffound = TRUE; } bufcnt = 0; } byte = *(iobuf + bufcnt); bufcnt++; return(byte); } /* write HEX format file from memory array */ writehex() { int answer,i,cont; clname(wnmptr); /* clear write hex name */ clfcb(wfcbptr); /* clear write hex fcb */ curpos(20,9); putst("Enter the file to write (d:filename.typ)"); cont = infilnam(20,50,wnmptr,wfcbptr); /* enter new name and(diskfull == TRUE) { areg = bdos(19,writfcb); /* delete file */ blank(20,9,42); /* erase writing to file message */ } } wrhexlin() { int parchar; parchar = 0; /* set parity character to 0 */ wrhexchar(0xFD); /* write semi-colon */ wrhexchar(1); /* write number of bytes in line */ wrhexchar(0); parchar = ((parchar - 0x10) & 0xFF); /* subtract number of bytes from parity */ wrhexchar((address >> 12) & 0xF); /* higher order address byte */ wrhexchar((address >> 8) & 0xF); parchar = ((parchar - (address >> 8)) & 0xFF); wrhexchar((address >> 4) & 0xF); /* lower order address byte */ wrhexchar(address & 0xF); parchar = ((parchar - (address & 0xFF)) & 0xFF); recptr = 0; wrhexchar(0); /* un-used */ wrhexchar(0); /* write character rasters in hex format-update parity character */ while (recptr < 16) { wrhexchar((*(charset + charcount) >> 4) & 0xF); wrhexchar(*(charset fcb */ if (cont == 0) /* if just RETURN */ { blkrname(); return; } /* open file in readfcb */ areg = bdos(15,writfcb); /* open file */ if (areg != 0xFF) /* file found */ { areg = bdos(16,writfcb); /* close file */ curpos(24,5); putst("File already exists. OK to continue? (Y/N)"); answer = yesno(24,49); blkrname(); blank(24,5,45); if (answer == FALSE) return; } blkrname(); curpos(20,9); putst("Writing character set to "); reverse(); putblank(); putst(writname); putblank(); nreverse(); areg = bdos(19,writfcb); /* delete existing file */ areg = bdos(22,writfcb); /* create new file */ if (areg == 0xFF) /* if error in creation */ { curpos(24,5); putst("Full directory on file creation - Press any character to continue."); inpchar(); blank(24,5,68); return; } areg = bdos(26,iobu% + charcount) & 0xF); parchar = ((parchar - *(charset + charcount)) & 0xFF); charcount++; recptr++; address++; } wrhexchar(parchar >> 4 & 0xF); /* write parity character */ wrhexchar(parchar & 0xF); wrhexchar(0xFF); /* carriage return */ wrhexchar(0xFE); /* linefeed */ } wrhexchar(byte) char byte; { if (diskfull == TRUE) /* if disk already full */ return; if (byte == 0xFF) *(iobuf + bufcnt) = 0x0D; /* carriage return */ else if (byte == 0xFE) *(iobuf + bufcnt) = 0x0A; /* linefeed */ else if (byte == 0xFD) *(iobuf + bufcnt) = ':'; else *(iobuf + bufcnt) = *(trantab + (byte & 0xF)); bufcnt++; if (bufcnt == 128) /* if buffer filled- write to disk */ { wrhexrecord(); /* write hex file record */ } } /* write the 128 characters in iobuf to file */ wrhexrecord() { areg = bdos(21,writfcb); if (areg != 0) /* if disk full */ {  ū*B( f`gUaYjµfpW΃ Yj¸`fg Xa]a  rn3UqXV+>-XWCL\۪ ]a0dB(fـgٷͬ.E+6^/TӕE/%3@\ xA(fgśJAef6Y<M \rj8;CV\lڴfvmQp%ͭ` k qk;Œ!Ca/m^P+6@i,:@Qp!ͳ6׃lKjW ͸mdB(f۠wτٷ4+'C(o Qn: Dhh0&3 9Nlt:M@&M&t2 3AHMg9M)tW9NQ : t2DCk9 #In3@Fn Ha2 #y@t4D3e6 # s!gc FS @f9͢@ MC)@d9NQ,y@<)JR8| :S)!kM!v2 !f7d '3XsFq@d2fH0t2 #$NFAa2 #(3xR" "p@t7 fqn:@Cxo:q@t71@E<N@t4D &MP@-NfQeBhs2(E7 !l2Άy@Gr b*e *+FN ʜd  ))Ib r\fP!Q:,d!FWb,d!*FKrB ,gX!*)"w dTD89Q !>WRFONTSQS`d4]I59IWRALRAQTeu%55H%=58WRTRCKSQSdtUDE%h]IMfRDSYSTe$De5M%=IJP5 @˔B9E(bܬ c˄cp3d7ͥ97[&Yjʱ@ ۨ!.VmhBB.E.Vhx\.Q0"OVwf:pD9>-XT{t ,Pb5Nb3 e^)xFV Nb3+a٠ D BK22n'Г@ +rjp b@rsmfՕP@XttB\X&9F#X~ BK22(egd&4O& @ ͩ/$B9EW+4xo;-YT u ͠ HB9E(ͫB9E(Ff r{2|Z4fvh!ͥO6 &Yj³,Ͷ@!ͥO6 6ŀ ,H " 4>-X.YX!A6mx@@xFVjjh8ٵd *@A2fh@}'ū ȁ 0"3@ū*@xFV_ՅmU ͦo@ F"b# ;!V\egX@@WU]ՅH'(fP'BK2UXzg")+)!lA*"J",g")Gzr*rB|t"*$Sr2rj*t#")+FKB* "*d($(! LAJr"Df$rAJzwP$'dJzj*qv$GKAJzj*rg&&o2j Jr,g&+Ftjre')""FLAz:",gD(*!& ^Bg(*!Fyꂪt)" )M@"ʚw)"*)!{*z$e0)"")g22b ѩ2f|4ͩB4j&\jʡrb3rNVm+xD6A6Y\2F4jfR6ѨfNj6 Ѩ\?'ū*Ѩ^?'ū*Ѩ!@ ՕYVhLr@+6<^,:!!#9: #+bՅs!#9:-SV|Zx \2VxoX͚Vmxhc6jP63nЪQfGUfD >-XW "c gѕ5YQ0"O5!͠`oU@+6!\ r\\xD! \ rnVmlx^.(g'ū ݁hp6hr@a[P1U|\Ϳ`ośdu ,daTp6mf vmY7+6Egū nQUr@+6^/map6m*YEC 6H\6D @#+5YhCjlL_0rhśFٵUy>-XUxUa8ͱL:!VU!~'ū #H^,;f!W8F#]!XEwb+ö`EaAaxFVuP XAXEdU L>-XTH\r.VmxD @#+5YClBlۢWp@ri#śOA6!ͻ"b1#+ dD@(f$B9E(Hf7dXH\ۈ6= 'a') && ((*charptr) <= 'z')) *(charptr) = *(charptr) & 01,15); /* position cursor */ putst(TITLE); } /* position cursor to (row,column) */ curpos(xcord,ycord) int xcord,ycord; { putchr(ESC); putchr('='); putchr(xcord + 0x1F); putchr(ycord + 0x1F); } /* clear screen */ clrscn() { putchr(0x1A); /* clear screen */ } /* send dim screen characters */ dim() { putchr(ESC); putchr(0x29); } /* send bright screen characters */ bright() { putchr(ESC); putchr(0x28); } /* reverse video */ reverse() { putchr(ESC); putchr('j'); } /* non-reverse video */ nreverse() { putchr(ESC); putchr('k'); } clchrset() /* clear character set */ { int i; for (i = 0; i < 2048; i++) charset[i] = 0; } /* input a character from the keyboard */ inpchar() { char byte; byte = 0; while (byte == 0) byte = bdos(6,0xff); return(byte); } /* input a character and display it */ inpdchar() { charx5F; } /* blank out the count characters beginning at row, column */ blank(row,column,count) int row,column,count; { int i; curpos(row,column); for (i = 0; i < count; i++) putchr(' '); } /* get a Y or N response */ yesno(row,column) int row,column; { int ok_answer,ans_retrnd; char ans_entrd; ok_answer = FALSE; while(ok_answer == FALSE) { curpos(row,column); putchr(' '); putchr(BKSPC); reverse(); ans_entrd = (inpdchar() & 0x5F); nreverse(); if (ans_entrd == 'Y') { ans_retrnd = TRUE; ok_answer = TRUE; } if (ans_entrd == 'N') { ans_retrnd = FALSE; ok_answer = TRUE; } } return(ans_retrnd); } /* display main menu screen */ mainmenu() { header(); /* clear screen and display program title */ progdesc(); /* display program description */ arraysource(6,9); /* dis byte; byte = inpchar(); pputchr(byte); return(byte); } pputchr(byte) char byte; { if ((byte > 31) && (byte < 127)) putchr(byte); }  clrscn() { putchr(0x1A); /* clear screen */ } /* send dim screen characters */ dim() { putchr(ESC); putchr(0x29); } /* send bright screen characters */ bright() { putchr(ESC); putchr(0x28); } /* reverse video */ reverse() { putchr(ESC); putchr('j'); } /* non-reverse video */ nreverse() { putchr(ESC); putchr('k'); } clchrset() /* clear character set */ { int i; for (i = 0; i < 2048; i++) charset[i] = 0; } /* input a character from the keyboard */ inpchar() { char byte; byte = 0; while (byte == 0) byte = bdos(6,0xff); return(byte); } /* input a character and display it */ inpdchar() { charplay source of memory array */ curpos(8,4); putst("Do you want to:"); curpos(10,9); putst("1 - Read the systems tracks into the character set"); curpos(11,9); putst("2 - Read a file into the character set"); curpos(12,9); putst("3 - Edit the character set"); curpos(13,9); putst("4 - Write the character set to the system tracks"); curpos(14,9); putst("5 - Write the character set to a file"); curpos(15,9); putst("6 - Write the character set to the font RAM"); curpos(16,9); putst("7 - Exit the program"); } /* main menu choice line */ mnchoice() { curpos(18,14); putst("Enter your choice (1 - 7)"); } /* display program description */ progdesc() { curpos(3,4); putst ("This program allows you to edit a character set in memory and"); curpos(4,5); putst("store it on various media."); } /* clear screen and print screen header */ header() { clrscn(); /* clear screen */ curpos(&V M,E INX H MOV M,D XCHG C9: POP D PUSH D LXI H,2048 EXT CCLT CALL CCLT MOV A,H ORA L JZ C8 JMP C10 C7: LXI H,0 DAD SP PUSH H MOV E,M INX H MOV D,M INX D POP H MOV M,E INX H MOV M,D MOV H,D MOV L,E DCX H JMP C9 C10: LXI H,mainset PUSH H LXI H,2 DAD SP MOV E,M INX H MOV D,M POP H DAD D PUSH H LXI H,charset PUSH H LXI H,4 DAD SP MOV E,M INX H MOV D,M POP H DAD D MOV L,M MVI H,0 POP D MOV A,L STAX D JMP C7 C8: LXI H,1 SHLD manwyn DCX H PUSH H CALL fntmessage POP PSW POP PSW RET ENTRY wralram wralram: PUSH B LXI D,0 MOV H,D MOV L,E DAD SP MOV M,E INX H MOV M,D XCHG C13: POP D PUSH D LXI H,2048 EXT CCLT CALL CCLT MOV A,H ORA L JZ C12 JMP C14 C11: LXI H,0 DAD SP PUSH H MOV E,M INX H MOV D,M INX D POP H MOV M,E INX H MOV M,D MOV H,D MOV L,E DCX H JMP C13 C14: LXI H,altset PUSH H LXI H,2 DAD SP MOV E,M INX H MOV D,M POP H DAD D PUSH H LXI H,charset PUSH H LXI H,4 DAD SP MOV E,M INX H MOV D,M POP H DAD D MOV L,M MVI H,0 POP D MOV A,L STAX D JMP C11 C12: LXI H,1 SHLD altwyn PUSH H CALL fntmessage POP PSW POP PSW RET ENTRY fntmessage fntmessage: LXI H,18 PUSH H MVI L,5 PUSH H CALL curpos POP PSW LXI H,C1+22 XTHL CALL putst POP PSW LXI H,2 DAD SP MOV E,M INX H MOV D,M MOV H,D MOV L,E MOV A,H ORA L JNZ C15 LXI H,C1+56 PUSH H CALL putst POP PSW JMP C16 C15: LXI H,C1+61 PUSH H CALL putst POP PSW C16: LXI H,C1+71 PUSH H CALL putst POP PSW RET ENTRY wrsystrk wrsystrk: DCX SP LXI H,C1+103 PUSH H CALL iomenu POP PSW LXI H,0 DAD SP LXI D,32 MOV M,E XCHG C17: POP H PUSH H MVI H,0 LXI D,-51 DAD D MOV A,H ORA L JZ C18 CALL iochoice LXI H,0 DAD SP PUSH H CALL entioc POP D MOV A,L STAX D LXI H,16 PUSH H MVI L,9 PUSH H DAD H PUSH H CALL blank/* Osborne character generator program. This routine enables the program to do I/O to the system tracks Before entry to the routine, the following external variables must be set rwflag - 0 => read, else write secstart - starting sector to I/O ( 1 for main set, 3 for alternate) drvspc - drive code, 0 for drive A, 1 for drive B charset - pointer to character set in RAM the routine returns a value in an external variable called retcod - 0 no error 1 no disk in drive 2 wrong density (not Osborne double dnesity) 3 write error 4 read error -------------------------------------------------------------------*/ rd_wr() { /* extern int rd_wr2(); */ #asm .z80 extrn rd_wr2 call rd_wr2 jp end end: .8080 #endasm } snsdns() { /* extern int sns2(); */ #as POP PSW POP PSW POP PSW LXI H,18 PUSH H MVI L,9 PUSH H MVI L,35 PUSH H CALL blank POP PSW POP PSW POP PSW POP H PUSH H MVI H,0 LXI D,-49 DAD D MOV A,H ORA L JNZ C19 CALL reverse CALL iomen1 CALL nreverse LXI H,1 PUSH H LHLD ioC1 PUSH H CALL wrtrck POP PSW POP PSW CALL iomen1 JMP C17 C19: POP H PUSH H MVI H,0 LXI D,-50 DAD D MOV A,H ORA L JNZ C17 CALL reverse CALL iomen2 CALL nreverse LXI H,3 PUSH H LHLD ioC2 PUSH H CALL wrtrck POP PSW POP PSW CALL iomen2 JMP C17 C18: CALL mainmenu INX SP RET ENTRY wrtrck wrtrck: CALL getdrvspec SHLD drvspc LXI D,0 EXT CCGT CALL CCGT MOV A,H ORA L RNZ LXI H,18 PUSH H MVI L,9 PUSH H CALL curpos POP PSW LXI H,C1+130 XTHL CALL putst POP PSW LXI H,2 DAD SP MOV E,M INX H MOV D,M PUSH D CALL putst LXI H,C1+139 XTHL CALL putst POP PSW LHLD drvspc LXI D,65 DAD D PUSH H CALL putchr POP PSW CALL putcm .z80 extrn sns2 call sns2 jp end2 end2: .8080 #endasm } y to the routine, the following external variables must be set rwflag - 0 => read, else write secstart - starting sector to I/O ( 1 for main set, 3 for alternate) drvspc - drive code, 0 for drive A, 1 for drive B charset - pointer to character set in RAM the routine returns a value in an external variable called retcod - 0 no error 1 no disk in drive 2 wrong density (not Osborne double dnesity) 3 write error 4 read error -------------------------------------------------------------------*/ rd_wr() { /* extern int rd_wr2(); */ #asm .z80 extrn rd_wr2 call rd_wr2 jp end end: .8080 #endasm } snsdns() { /* extern int sns2(); */ #as'olon CALL snsdns LHLD retcod MVI H,0 LXI D,-5 DAD D MOV A,H ORA L JNZ C24 LHLD svtpval MVI H,0 LXI D,14 EXT CCEQ CALL CCEQ JMP C25 C24: LXI H,0 C25: MOV A,H ORA L JZ C23 LXI H,4 DAD SP MOV E,M INX H MOV D,M LXI H,-3 DAD D MOV A,H ORA L JNZ C26 LHLD drvspc PUSH H CALL wrafsys POP PSW JMP C28 C26: LXI H,1 SHLD rwflag INX H SHLD secstart DCX H DCX H SHLD trkstart INX H SHLD dside JMP C28 C23: LXI H,1 SHLD rwflag MVI L,4 DAD SP MOV E,M INX H MOV D,M XCHG SHLD secstart LXI H,2 SHLD trkstart DCX H DCX H SHLD dside C28: LHLD retcod MVI H,0 MOV A,H ORA L JNZ C29 MVI L,18 PUSH H MVI L,9 PUSH H CALL curpos POP PSW POP PSW LXI H,2 DAD SP MOV E,M INX H MOV D,M PUSH D CALL putst LXI H,C1+144 XTHL CALL putst POP PSW LHLD drvspc LXI D,65 DAD D PUSH H CALL putchr POP PSW CALL putcolon LXI H,0 SHLD edsmade RET C29: LXI H,18 PUSH H MVI L,pc PUSH H CALL rdafsys POP PSW JMP C44 C42: LXI H,0 SHLD rwflag INX H INX H SHLD secstart DCX H DCX H SHLD trkstart INX H SHLD dside JMP C44 C39: LXI H,0 SHLD rwflag MVI L,6 DAD SP MOV E,M INX H MOV D,M XCHG SHLD secstart LXI H,2 SHLD trkstart DCX H DCX H SHLD dside C44: LHLD retcod MVI H,0 MOV A,H ORA L JNZ C45 MVI L,18 PUSH H MVI L,9 PUSH H CALL curpos POP PSW POP PSW LXI H,4 DAD SP MOV E,M INX H MOV D,M PUSH D CALL putst LXI H,C1+201 XTHL CALL putst POP PSW LHLD drvspc LXI D,65 DAD D PUSH H CALL putchr POP PSW CALL putcolon LXI H,C1+213 PUSH H CALL putst POP PSW LXI H,0 SHLD edsmade INX H INX H DAD SP MOV E,M INX H MOV D,M LHLD drvspc DAD D SHLD arrsource LXI H,6 PUSH H MVI L,9 PUSH H CALL arraysource POP PSW POP PSW RET C45: LXI H,18 PUSH H MVI L,9 PUSH H MVI L,36 PUSH H CALL blank POP PSW POP PSW POP PSW RET ENTRY r9 PUSH H MVI L,36 PUSH H CALL blank POP PSW POP PSW POP PSW RET ENTRY wrafsys wrafsys: RET ENTRY rdsystrk rdsystrk: DCX SP LXI H,C1+157 PUSH H CALL iomenu POP PSW LXI H,0 DAD SP LXI D,32 MOV M,E XCHG C31: POP H PUSH H MVI H,0 LXI D,-51 DAD D MOV A,H ORA L JZ C32 CALL iochoice LXI H,0 DAD SP PUSH H CALL entioc POP D MOV A,L STAX D LXI H,16 PUSH H MVI L,9 PUSH H DAD H PUSH H CALL blank POP PSW POP PSW POP PSW LXI H,18 PUSH H MVI L,9 PUSH H MVI L,35 PUSH H CALL blank POP PSW POP PSW POP PSW POP H PUSH H MVI H,0 LXI D,-49 DAD D MOV A,H ORA L JNZ C33 CALL reverse CALL iomen1 CALL nreverse LHLD mnC1 PUSH H CALL contread POP PSW DCX H MOV A,H ORA L JNZ C34 INX H PUSH H LHLD ioC1 PUSH H LXI H,2 PUSH H CALL rdtrck POP PSW POP PSW POP PSW C34: CALL iomen1 JMP C31 C33: POP H PUSH H MVI H,0 LXI D,-50 DAD D MOV A,H ORA L JNZ C31dafsys rdafsys: RET ENTRY getdrvspec getdrvspec: PUSH B PUSH B DCX SP LXI H,18 PUSH H MVI L,9 PUSH H CALL curpos POP PSW LXI H,C1+217 XTHL CALL putst POP PSW LXI H,1 DAD SP LXI D,0 MOV M,E INX H MOV M,D XCHG C47: LXI H,1 DAD SP MOV E,M INX H MOV D,M MOV H,D MOV L,E MOV A,H ORA L JNZ C48 MVI L,18 PUSH H MVI L,49 PUSH H CALL curpos POP PSW POP PSW LXI H,0 DAD SP PUSH H CALL inpchar POP D MOV A,L STAX D LXI H,0 DAD SP PUSH H CALL upchar POP PSW POP H PUSH H MVI H,0 LXI D,-65 DAD D MOV A,H ORA L JZ C50 POP H PUSH H MVI H,0 LXI D,-66 DAD D MOV A,H ORA L JZ C50 POP H PUSH H MVI H,0 LXI D,13 EXT CCEQ CALL CCEQ JMP C51 C50: LXI H,1 C51: MOV A,H ORA L JZ C49 LXI D,1 MOV H,D MOV L,E DAD SP MOV M,E INX H MOV M,D LXI D,3 XCHG DAD SP PUSH H LXI H,2 DAD SP MOV L,M MVI H,0 LXI D,-65 DAD D POP D XCHG MOV M,E INX H MOV M,D  CALL reverse CALL iomen2 CALL nreverse LHLD mnC1 PUSH H CALL contread POP PSW DCX H MOV A,H ORA L JNZ C37 MVI L,3 PUSH H LHLD ioC2 PUSH H LXI H,4 PUSH H CALL rdtrck POP PSW POP PSW POP PSW C37: CALL iomen2 JMP C31 C32: CALL mainmenu INX SP RET ENTRY rdtrck rdtrck: CALL getdrvspec SHLD drvspc LXI D,0 EXT CCGT CALL CCGT MOV A,H ORA L RNZ LXI H,18 PUSH H MVI L,9 PUSH H CALL curpos POP PSW LXI H,C1+185 XTHL CALL putst POP PSW LXI H,4 DAD SP MOV E,M INX H MOV D,M PUSH D CALL putst LXI H,C1+194 XTHL CALL putst POP PSW LHLD drvspc LXI D,65 DAD D PUSH H CALL putchr POP PSW CALL putcolon CALL snsdns LHLD retcod MVI H,0 LXI D,-5 DAD D MOV A,H ORA L JNZ C40 LHLD svtpval MVI H,0 LXI D,14 EXT CCEQ CALL CCEQ JMP C41 C40: LXI H,0 C41: MOV A,H ORA L JZ C39 LXI H,6 DAD SP MOV E,M INX H MOV D,M LXI H,-3 DAD D MOV A,H ORA L JNZ C42 LHLD drvs' XCHG JMP C47 C49: LXI H,7 PUSH H CALL putchr POP PSW JMP C47 C48: LXI H,18 PUSH H MVI L,9 PUSH H MVI L,43 PUSH H CALL blank POP PSW POP PSW POP PSW POP PSW LXI H,1 DAD SP MOV E,M INX H MOV D,M POP PSW INX SP XCHG RET ENTRY entchoice entchoice: PUSH B DCX SP LXI H,1 DAD SP LXI D,0 MOV M,E INX H MOV M,D XCHG C53: LXI H,1 DAD SP MOV E,M INX H MOV D,M MOV H,D MOV L,E MOV A,H ORA L JNZ C54 MVI L,11 DAD SP MOV E,M INX H MOV D,M PUSH D LXI H,11 DAD SP MOV E,M INX H MOV D,M PUSH D CALL curpos POP PSW LXI H,32 XTHL CALL putchr LXI H,8 XTHL CALL putchr POP PSW CALL reverse LXI H,0 DAD SP PUSH H CALL inpdchar POP D MOV A,L STAX D CALL nreverse POP H PUSH H MVI H,0 PUSH H LXI H,9 DAD SP MOV L,M MVI H,0 POP D EXT CCGE CALL CCGE MOV A,H ORA L JZ C56 POP H PUSH H MVI H,0 PUSH H LXI H,7 DAD SP MOV L,M MVI H,0 POP D EXT CCLE XTHL CALL putst POP PSW CALL putblank RET ENTRY iomen2 iomen2: LXI H,13 PUSH H MVI L,8 PUSH H CALL curpos POP PSW POP PSW CALL putblank LXI H,C1+426 PUSH H CALL putst LHLD ioC2 XTHL CALL putst POP PSW CALL putblank RET ENTRY iochoice iochoice: LXI H,16 PUSH H MVI L,9 PUSH H CALL curpos POP PSW LXI H,C1+439 XTHL CALL putst POP PSW RET EXT putblank EXT progdesc EXT header EXT inpdchar EXT upchar EXT inpchar EXT arraysource EXT arrsource EXT contread EXT mnC1 EXT snsdns EXT putcolon EXT putchr EXT svtpval EXT retcod EXT dside EXT edsmade EXT drvspc EXT trkstart EXT secstart EXT rwflag EXT nreverse EXT reverse EXT ioC2 EXT ioC1 EXT putst EXT curpos EXT altset EXT altwyn EXT charset EXT mainset EXT manwyn EXT mainmenu EXT blank C1: DB 'Write to the Font RAM',0 DB 'Character set will be written to ',0 DB 'Main',0 DB 'Alternate',0 DB ' font RAM on program exit. ',0 CALL CCLE JMP C57 C56: LXI H,0 C57: MOV A,H ORA L JZ C55 LXI D,1 MOV H,D MOV L,E DAD SP MOV M,E INX H MOV M,D XCHG JMP C53 C55: LXI H,7 PUSH H CALL putchr POP PSW JMP C53 C54: POP H MVI H,0 INX SP RET ENTRY sioerr sioerr: LHLD retcod MVI H,0 MOV A,H ORA L JZ C59 LXI H,20 PUSH H MVI L,5 PUSH H CALL curpos POP PSW POP PSW C59: LHLD retcod MVI H,0 DCX H MOV A,H ORA L JNZ C60 LXI H,C1+257 PUSH H CALL putst POP PSW C60: LHLD retcod MVI H,0 DCX H DCX H MOV A,H ORA L JNZ C61 LXI H,C1+289 PUSH H CALL putst POP PSW C61: LHLD retcod MVI H,0 DCX H DCX H DCX H MOV A,H ORA L JNZ C62 LXI H,C1+311 PUSH H CALL putst POP PSW C62: LHLD retcod MVI H,0 DCX H DCX H DCX H DCX H MOV A,H ORA L JNZ C63 LXI H,C1+328 PUSH H CALL putst POP PSW C63: LHLD retcod MVI H,0 MOV A,H ORA L RZ LXI H,21 PUSH H MVI L,10 PUSH H CALL curpos POP PSW LXI DB 'Write to the System Tracks',0 DB 'Writing ',0 DB ' to ',0 DB ' written to ',0 DB 'Read from the System Tracks',0 DB 'Reading ',0 DB ' from ',0 DB ' read from ',0 DB ' ',0 DB 'Enter drive (A, B, or to exit)',0 DB 'No disk in drive or unformatted',0 DB 'Disk is wrong density',0 DB 'Hard write error',0 DB 'Hard read error',0 DB 'Press to continue',0 DB 'Do you want to:',0 DB '3 - Exit to the Main Menu',0 DB '1 - Use the ',0 DB '2 - Use the ',0 DB 'Enter selection ',0 DS 0 ;0 errs *** ;0 code gen errs ***  Main Menu',0 DB '1 - Use the ',0 DB '2 - Use the ',0 DB H,C1+344 XTHL CALL putst POP PSW CALL inpchar LXI H,20 PUSH H MVI L,5 PUSH H MVI L,31 PUSH H CALL blank POP PSW POP PSW POP PSW LXI H,21 PUSH H MVI L,10 PUSH H MVI L,26 PUSH H CALL blank POP PSW POP PSW POP PSW RET ENTRY iomenu iomenu: CALL header CALL progdesc LXI H,6 PUSH H MVI L,9 PUSH H CALL arraysource POP PSW POP PSW LXI H,8 PUSH H MVI L,4 PUSH H CALL curpos POP PSW POP PSW CALL reverse CALL putblank LXI H,2 DAD SP MOV E,M INX H MOV D,M PUSH D CALL putst POP PSW CALL putblank CALL nreverse LXI H,10 PUSH H MVI L,4 PUSH H CALL curpos POP PSW LXI H,C1+371 XTHL CALL putst POP PSW CALL iomen1 CALL iomen2 LXI H,14 PUSH H MVI L,9 PUSH H CALL curpos POP PSW LXI H,C1+387 XTHL CALL putst POP PSW RET ENTRY iomen1 iomen1: LXI H,12 PUSH H MVI L,8 PUSH H CALL curpos POP PSW POP PSW CALL putblank LXI H,C1+413 PUSH H CALL putst LHLD ioC1